diff --git a/extensions/compilecoffee/compile-coffee.coffee b/extensions/compilecoffee/compile-coffee.coffee index e4ca264c8..4dd7b0992 100644 --- a/extensions/compilecoffee/compile-coffee.coffee +++ b/extensions/compilecoffee/compile-coffee.coffee @@ -7,7 +7,7 @@ Extension = require 'extension' module.exports = class CompileCoffee extends Editor - window.resourceTypes.push this + atom.router.add this running: true diff --git a/extensions/docs/docs.coffee b/extensions/docs/docs.coffee index cb8ba1b2f..d382e55df 100644 --- a/extensions/docs/docs.coffee +++ b/extensions/docs/docs.coffee @@ -6,7 +6,7 @@ Browser = require 'browser' module.exports = class Docs extends Browser - window.resourceTypes.push this + atom.router.add this running: true diff --git a/extensions/findinproject/find-in-project.coffee b/extensions/findinproject/find-in-project.coffee index 6009b2da2..90d04ebcc 100644 --- a/extensions/findinproject/find-in-project.coffee +++ b/extensions/findinproject/find-in-project.coffee @@ -10,7 +10,7 @@ ModalSelector = require 'modal-selector' module.exports = class FindInProject extends Browser - window.resourceTypes.push this + atom.router.add this running: true diff --git a/extensions/gist/gist.coffee b/extensions/gist/gist.coffee index 64a278366..8ef729c38 100644 --- a/extensions/gist/gist.coffee +++ b/extensions/gist/gist.coffee @@ -10,7 +10,7 @@ Base64 = require 'gist/base64' module.exports = class Gist extends Editor - window.resourceTypes.push this + atom.router.add this settings: username: '' diff --git a/extensions/markdownpreview/markdownpreview.coffee b/extensions/markdownpreview/markdownpreview.coffee index c1dddf818..9798e71a7 100644 --- a/extensions/markdownpreview/markdownpreview.coffee +++ b/extensions/markdownpreview/markdownpreview.coffee @@ -9,7 +9,7 @@ converter = new Showdown.converter module.exports = class Markdownpreview extends Browser - window.resourceTypes.push this + atom.router.add this running: true diff --git a/extensions/showkeybindings/showkeybindings.coffee b/extensions/showkeybindings/showkeybindings.coffee index 913e0db40..f4bdacbcd 100644 --- a/extensions/showkeybindings/showkeybindings.coffee +++ b/extensions/showkeybindings/showkeybindings.coffee @@ -6,7 +6,7 @@ Browser = require 'browser' module.exports = class Showkeybindings extends Browser - window.resourceTypes.push this + atom.router.add this constructor: -> @running = true diff --git a/src/atom/browser.coffee b/src/atom/browser.coffee index b82424b18..019ef32a7 100644 --- a/src/atom/browser.coffee +++ b/src/atom/browser.coffee @@ -6,7 +6,7 @@ Resource = require 'resource' # browser:close (browser) -> Called when a browser is closed. module.exports = class Browser extends Resource - window.resourceTypes.push this + atom.router.add this open: (url) -> return false if not /^https?:/.test url diff --git a/src/atom/editor.coffee b/src/atom/editor.coffee index 4af15063c..073928b92 100644 --- a/src/atom/editor.coffee +++ b/src/atom/editor.coffee @@ -12,7 +12,7 @@ EditorPane = require 'editor-pane' # editor:close (editor) -> Called when an editor is closed. module.exports = class Editor extends Resource - window.resourceTypes.push this + atom.router.add this dirty: false diff --git a/src/atom/project.coffee b/src/atom/project.coffee index bbbab0a5f..58f763655 100644 --- a/src/atom/project.coffee +++ b/src/atom/project.coffee @@ -14,7 +14,7 @@ Resource = require 'resource' # in a project. module.exports = class Project extends Resource - window.resourceTypes.push this + atom.router.add this settings: # Regexp used to ignore paths. @@ -54,17 +54,11 @@ class Project extends Resource @setActiveResource resource resource.show() true - else - # Try to open all others - for resourceType in window.resourceTypes - resource = new resourceType - break if success = resource.open url - - if success - @resources[url] = resource - atom.trigger 'project:resource:open', this, resource - @setActiveResource resource - true + else if resource = atom.router.open url + @resources[url] = resource + atom.trigger 'project:resource:open', this, resource + @setActiveResource resource + true close: (url) -> if url diff --git a/src/atom/router.coffee b/src/atom/router.coffee new file mode 100644 index 000000000..c90bf24de --- /dev/null +++ b/src/atom/router.coffee @@ -0,0 +1,15 @@ +module.exports = +class Router + resources: [] + + add: (resource) -> + @resources.unshift resource + + open: (url) -> + success = false + + for resourceType in @resources + resource = new resourceType + break if success = resource.open url + + resource if success diff --git a/src/atom/window.coffee b/src/atom/window.coffee index d47e60949..b2ee1a2b7 100644 --- a/src/atom/window.coffee +++ b/src/atom/window.coffee @@ -7,19 +7,13 @@ _ = require 'underscore' # Events: # window:load - Same as window.onLoad. Final event of app startup. windowAdditions = - resourceTypes: [] - url: $atomController.url?.toString() startup: -> atom.trigger 'window:load', this - success = false - for resourceType in @resourceTypes.reverse() - @resource = new resourceType - break if success = @resource.open @url - - throw "I DON'T KNOW ABOUT #{@url}" if not success + if not @resource = atom.router.open @url + throw "I DON'T KNOW ABOUT #{@url}" shutdown: -> $atomController.close diff --git a/src/startup.coffee b/src/startup.coffee index a15470430..d5610863b 100644 --- a/src/startup.coffee +++ b/src/startup.coffee @@ -4,14 +4,11 @@ require 'window' window.atom = {} App = require 'app' -Browser = require 'browser' -Editor = require 'editor' Event = require 'event' ExtensionManager = require 'extension-manager' KeyBinder = require 'key-binder' Native = require 'native' -Project = require 'project' -Resource = require 'resource' +Router = require 'router' Settings = require 'settings' Storage = require 'storage' @@ -23,8 +20,13 @@ for name, method of atom.event atom.native = new Native atom.storage = new Storage atom.keybinder = new KeyBinder +atom.router = new Router atom.settings = new Settings +Browser = require 'browser' +Editor = require 'editor' +Project = require 'project' + atom.extensions = {} atom.extensionManager = new ExtensionManager