diff --git a/benchmark/benchmark-suite.coffee b/benchmark/benchmark-suite.coffee index ad080f64b..99f5c60d8 100644 --- a/benchmark/benchmark-suite.coffee +++ b/benchmark/benchmark-suite.coffee @@ -1,19 +1,19 @@ require './benchmark-helper' -{$, _, RootView} = require 'atom' +{$, _, WorkspaceView} = require 'atom' TokenizedBuffer = require '../src/tokenized-buffer' describe "editorView.", -> editorView = null beforeEach -> - window.rootViewParentSelector = '#jasmine-content' - window.rootView = new RootView - window.rootView.attachToDom() + atom.workspaceViewParentSelector = '#jasmine-content' + atom.workspaceView = new WorkspaceView + atom.workspaceView.attachToDom() - rootView.width(1024) - rootView.height(768) - rootView.openSync() - editorView = rootView.getActiveView() + atom.workspaceView.width(1024) + atom.workspaceView.height(768) + atom.workspaceView.openSync() + editorView = atom.workspaceView.getActiveView() afterEach -> if editorView.pendingDisplayUpdate @@ -40,7 +40,7 @@ describe "editorView.", -> describe "300-line-file.", -> beforeEach -> - rootView.openSync('medium.coffee') + atom.workspaceView.openSync('medium.coffee') describe "at-begining.", -> benchmark "insert-delete", -> @@ -171,11 +171,11 @@ describe "editorView.", -> describe "9000-line-file.", -> benchmark "opening.", 5, -> - rootView.openSync('huge.js') + atom.workspaceView.openSync('huge.js') describe "after-opening.", -> beforeEach -> - rootView.openSync('huge.js') + atom.workspaceView.openSync('huge.js') benchmark "moving-to-eof.", 1, -> editorView.moveCursorToBottom() diff --git a/docs/creating-a-package.md b/docs/creating-a-package.md index f050a6e33..e951c2e66 100644 --- a/docs/creating-a-package.md +++ b/docs/creating-a-package.md @@ -67,11 +67,11 @@ object. Your package's top-level module should implement the following methods: -- `activate(rootView, state)`: This **required** method is called when your -package is loaded. It is always passed the window's global `rootView`, and is -sometimes passed state data if the window has been reloaded and your module -implements the `serialize` method. Use this to do initialization work when your -package is started (like setting up DOM elements or binding events). +- `activate(state)`: This **required** method is called when your +package is activated. It is passed the state data from the last time the window +was serialized if your module implements the `serialize()` method. Use this to +do initialization work when your package is started (like setting up DOM +elements or binding events). - `serialize()`: This **optional** method is called when the window is shutting down, allowing you to return JSON to represent the state of your component. When @@ -104,7 +104,7 @@ module.exports = require "./lib/my-package" `my-package/my-package.coffee` might start: ```coffeescript module.exports = - activate: (rootView, state) -> # ... + activate: (state) -> # ... deactivate: -> # ... serialize: -> # ... ``` @@ -206,7 +206,7 @@ specific parts of the interface, like adding a file in the tree-view: 'context-menu': '.tree-view': 'Add file': 'tree-view:add-file' - '#root-view': + '#workspace-view': 'Inspect Element': 'core:inspect' ``` diff --git a/docs/internals/view-system.md b/docs/internals/view-system.md index 00c6d8212..d3b24ee1a 100644 --- a/docs/internals/view-system.md +++ b/docs/internals/view-system.md @@ -8,11 +8,11 @@ view objects inherit from the jQuery prototype, and wrap DOM nodes View objects are actually jQuery wrappers around DOM fragments, supporting all the typical jQuery traversal and manipulation methods. In addition, view objects have methods that are view-specific. For example, you could call both general -and view-specific on the global `rootView` instance: +and view-specific on the global `atom.workspaceView` instance: ```coffeescript -rootView.find('.editor.active') # standard jQuery method -rootView.getActiveEditor() # view-specific method +atom.workspaceView.find('.editor.active') # standard jQuery method +atom.workspaceView.getActiveEditor() # view-specific method ``` If you retrieve a jQuery wrapper for an element associated with a view, use the @@ -20,7 +20,7 @@ If you retrieve a jQuery wrapper for an element associated with a view, use the ```coffeescript # this is a plain jQuery object; you can't call view-specific methods -editorElement = rootView.find('.editor.active') +editorElement = atom.workspaceView.find('.editor.active') # get the view object by calling `.view()` to call view-specific methods editorView = editorElement.view() @@ -29,18 +29,18 @@ editorView.setCursorBufferPosition([1, 2]) Refer to the [SpacePen] documentation for more details. -### RootView +### WorkspaceView -The root of Atom's view hierarchy is a global called `rootView`, which is a -singleton instance of the `RootView` view class. The root view fills the entire +The root of Atom's view hierarchy is a global called `atom.workspaceView`, which is a +singleton instance of the `WorkspaceView` view class. The root view fills the entire window, and contains every other view. If you open Atom's inspector with -`alt-cmd-i`, you can see the internal structure of `RootView`: +`alt-cmd-i`, you can see the internal structure of `WorkspaceView`: -![RootView in the inspector][rootview-inspector] +![WorkspaceView in the inspector][workspaceview-inspector] #### Panes -The `RootView` contains a `#horizontal` and a `#vertical` axis surrounding +The `WorkspaceView` contains a `#horizontal` and a `#vertical` axis surrounding `#panes`. Elements in the horizontal axis will tile across the window horizontally, appearing to have a vertical orientation. Items in the vertical axis will tile across the window vertically, appearing to have a horizontal @@ -55,11 +55,11 @@ outlets as follows: ```coffeescript # place a view to the left of the panes (or use .append() to place it to the right) -rootView.horizontal.prepend(new MyView) +atom.workspaceView.horizontal.prepend(new MyView) # place a view below the panes (or use .prepend() to place it above) -rootView.vertical.append(new MyOtherView) +atom.workspaceView.vertical.append(new MyOtherView) ``` [spacepen]: http://github.com/nathansobo/space-pen -[rootview-inspector]: https://f.cloud.github.com/assets/1424/1091631/1932c2d6-166b-11e3-8adf-9690fe82d3b8.png +[workspaceView-inspector]: https://f.cloud.github.com/assets/1424/1091631/1932c2d6-166b-11e3-8adf-9690fe82d3b8.png diff --git a/docs/your-first-package.md b/docs/your-first-package.md index e144928b0..bbcc3f9c6 100644 --- a/docs/your-first-package.md +++ b/docs/your-first-package.md @@ -44,12 +44,12 @@ you can map to `body` if you want to scope to anywhere in Atom, or just `.editor for the editor portion. To bind keybindings to a command, we'll need to do a bit of association in our -CoffeeScript code using the `rootView.command` method. This method takes a command +CoffeeScript code using the `atom.workspaceView.command` method. This method takes a command name and executes a callback function. Open up _lib/changer-view.coffee_, and -change `rootView.command "changer:toggle"` to look like this: +change `atom.workspaceView.command "changer:toggle"` to look like this: ```coffeescript -rootView.command "changer:magic", => @magic() +atom.workspaceView.command "changer:magic", => @magic() ``` It's common practice to namespace your commands with your package name, separated @@ -180,7 +180,7 @@ ul.modified-files-list { We'll add one more line to the end of the `magic` method to make this pane appear: ```coffeescript -rootView.vertical.append(this) +atom.workspaceView.vertical.append(this) ``` If you refresh Atom and hit the key command, you'll see a box appear right underneath @@ -188,21 +188,21 @@ the editor: ![Changer_Panel_Append] -As you might have guessed, `rootView.vertical.append` tells Atom to append `this` +As you might have guessed, `atom.workspaceView.vertical.append` tells Atom to append `this` item (_i.e._, whatever is defined by`@content`) _vertically_ to the editor. If -we had called `rootView.horizontal.append`, the pane would be attached to the +we had called `atom.workspaceView.horizontal.append`, the pane would be attached to the right-hand side of the editor. Before we populate this panel for real, let's apply some logic to toggle the pane -off and on, just like we did with the tree view. Replace the `rootView.vertical.append` +off and on, just like we did with the tree view. Replace the `atom.workspaceView.vertical.append` call with this code: ```coffeescript # toggles the pane if @hasParent() - rootView.vertical.children().last().remove() + atom.workspaceView.vertical.children().last().remove() else - rootView.vertical.append(this) + atom.workspaceView.vertical.append(this) ``` There are about a hundred different ways to toggle a pane on and off, and this @@ -261,13 +261,13 @@ appending it to `modifiedFilesList`: ```coffeescript # toggles the pane if @hasParent() - rootView.vertical.children().last().remove() + atom.workspaceView.vertical.children().last().remove() else for file in modifiedFiles stat = fs.lstatSync(file) mtime = stat.mtime @modifiedFilesList.append("
  • #{file} - Modified at #{mtime}") - rootView.vertical.append(this) + atom.workspaceView.vertical.append(this) ``` When you toggle the modified files list, your pane is now populated with the @@ -283,13 +283,13 @@ this demonstration, we'll just clear the `modifiedFilesList` each time it's clos # toggles the pane if @hasParent() @modifiedFilesList.empty() # added this to clear the list on close - rootView.vertical.children().last().remove() + atom.workspaceView.vertical.children().last().remove() else for file in modifiedFiles stat = fs.lstatSync(file) mtime = stat.mtime @modifiedFilesList.append("
  • #{file} - Modified at #{mtime}") - rootView.vertical.append(this) + atom.workspaceView.vertical.append(this) ``` ## Coloring UI Elements diff --git a/exports/atom.coffee b/exports/atom.coffee index 581ed0b5b..bc1a209e6 100644 --- a/exports/atom.coffee +++ b/exports/atom.coffee @@ -21,8 +21,7 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE module.exports.$$ = $$ module.exports.$$$ = $$$ module.exports.Editor = require '../src/editor-view' - module.exports.RootView = require '../src/root-view' - module.exports.WorkspaceView = require '../src/root-view' + module.exports.WorkspaceView = require '../src/workspace-view' module.exports.SelectList = require '../src/select-list' module.exports.ScrollView = require '../src/scroll-view' module.exports.Task = require '../src/task' diff --git a/package.json b/package.json index 50293055d..00c552923 100644 --- a/package.json +++ b/package.json @@ -64,51 +64,51 @@ "rimraf": "~2.2.2" }, "packageDependencies": { - "atom-light-ui": "0.8.0", + "atom-light-ui": "0.9.0", "atom-light-syntax": "0.6.0", - "atom-dark-ui": "0.8.0", + "atom-dark-ui": "0.9.0", "atom-dark-syntax": "0.6.0", "base16-tomorrow-dark-theme": "0.6.0", "solarized-dark-syntax": "0.4.0", - "archive-view": "0.14.0", - "autocomplete": "0.15.0", - "autoflow": "0.9.0", - "autosave": "0.7.0", - "bookmarks": "0.13.0", - "bracket-matcher": "0.12.0", - "command-logger": "0.7.0", - "command-palette": "0.10.0", - "dev-live-reload": "0.17.0", - "editor-stats": "0.7.0", + "archive-view": "0.15.0", + "autocomplete": "0.16.0", + "autoflow": "0.10.0", + "autosave": "0.8.0", + "bookmarks": "0.14.0", + "bracket-matcher": "0.13.0", + "command-logger": "0.8.0", + "command-palette": "0.11.0", + "dev-live-reload": "0.18.0", + "editor-stats": "0.8.0", "exception-reporting": "0.8.0", - "find-and-replace": "0.49.0", - "fuzzy-finder": "0.25.0", - "gists": "0.11.0", - "git-diff": "0.16.0", - "github-sign-in": "0.11.0", - "go-to-line": "0.10.0", - "grammar-selector": "0.11.0", + "find-and-replace": "0.52.0", + "fuzzy-finder": "0.26.0", + "gists": "0.12.0", + "git-diff": "0.17.0", + "github-sign-in": "0.12.0", + "go-to-line": "0.11.0", + "grammar-selector": "0.12.0", "image-view": "0.9.0", - "keybinding-resolver": "0.5.0", - "link": "0.9.0", - "markdown-preview": "0.19.0", + "keybinding-resolver": "0.6.0", + "link": "0.10.0", + "markdown-preview": "0.20.0", "metrics": "0.12.0", - "package-generator": "0.21.0", - "release-notes": "0.12.0", - "settings-view": "0.47.0", - "snippets": "0.15.0", - "spell-check": "0.15.0", - "status-bar": "0.22.0", - "styleguide": "0.15.0", - "symbols-view": "0.24.0", - "tabs": "0.12.0", - "terminal": "0.22.0", - "timecop": "0.10.0", - "to-the-hubs": "0.13.0", - "tree-view": "0.39.0", - "visual-bell": "0.4.0", + "package-generator": "0.22.0", + "release-notes": "0.13.0", + "settings-view": "0.48.0", + "snippets": "0.16.0", + "spell-check": "0.16.0", + "status-bar": "0.23.0", + "styleguide": "0.16.0", + "symbols-view": "0.25.0", + "tabs": "0.13.0", + "terminal": "0.23.0", + "timecop": "0.11.0", + "to-the-hubs": "0.14.0", + "tree-view": "0.40.0", + "visual-bell": "0.5.0", "whitespace": "0.9.0", - "wrap-guide": "0.6.0", + "wrap-guide": "0.7.0", "language-c": "0.2.0", "language-clojure": "0.1.0", "language-coffee-script": "0.3.0", diff --git a/spec/atom-spec.coffee b/spec/atom-spec.coffee index 94a856dc1..b42fb7911 100644 --- a/spec/atom-spec.coffee +++ b/spec/atom-spec.coffee @@ -1,11 +1,11 @@ -{$, $$, fs, RootView} = require 'atom' +{$, $$, fs, WorkspaceView} = require 'atom' Exec = require('child_process').exec path = require 'path' ThemeManager = require '../src/theme-manager' describe "the `atom` global", -> beforeEach -> - atom.rootView = new RootView + atom.workspaceView = new WorkspaceView describe "package lifecycle methods", -> describe ".loadPackage(name)", -> @@ -90,12 +90,12 @@ describe "the `atom` global", -> it "defers requiring/activating the main module until an activation event bubbles to the root view", -> expect(pack.requireMainModule).not.toHaveBeenCalled() expect(mainModule.activate).not.toHaveBeenCalled() - atom.rootView.trigger 'activation-event' + atom.workspaceView.trigger 'activation-event' expect(mainModule.activate).toHaveBeenCalled() it "triggers the activation event on all handlers registered during activation", -> - atom.rootView.openSync() - editorView = atom.rootView.getActiveView() + atom.workspaceView.openSync() + editorView = atom.workspaceView.getActiveView() eventHandler = jasmine.createSpy("activation-event") editorView.command 'activation-event', eventHandler editorView.trigger 'activation-event' diff --git a/spec/editor-view-spec.coffee b/spec/editor-view-spec.coffee index 467136dbe..1090ef359 100644 --- a/spec/editor-view-spec.coffee +++ b/spec/editor-view-spec.coffee @@ -1,4 +1,4 @@ -RootView = require '../src/root-view' +WorkspaceView = require '../src/workspace-view' EditorView = require '../src/editor-view' {$, $$} = require '../src/space-pen-extensions' _ = require 'underscore-plus' @@ -2764,10 +2764,10 @@ describe "EditorView", -> describe "when the editor view is attached but invisible", -> describe "when the editor view's text is changed", -> it "redraws the editor view when it is next shown", -> - atom.rootView = new RootView - atom.rootView.openSync('sample.js') - atom.rootView.attachToDom() - editorView = atom.rootView.getActiveView() + atom.workspaceView = new WorkspaceView + atom.workspaceView.openSync('sample.js') + atom.workspaceView.attachToDom() + editorView = atom.workspaceView.getActiveView() view = $$ -> @div id: 'view', tabindex: -1, 'View' editorView.getPane().showItem(view) @@ -2818,10 +2818,10 @@ describe "EditorView", -> describe "when the editor view is removed", -> it "fires a editor:will-be-removed event", -> - atom.rootView = new RootView - atom.rootView.openSync('sample.js') - atom.rootView.attachToDom() - editorView = atom.rootView.getActiveView() + atom.workspaceView = new WorkspaceView + atom.workspaceView.openSync('sample.js') + atom.workspaceView.attachToDom() + editorView = atom.workspaceView.getActiveView() willBeRemovedHandler = jasmine.createSpy('fileChange') editorView.on 'editor:will-be-removed', willBeRemovedHandler diff --git a/spec/fixtures/packages/package-with-activation-events/index.coffee b/spec/fixtures/packages/package-with-activation-events/index.coffee index 31b4ceb66..fd91e6f79 100644 --- a/spec/fixtures/packages/package-with-activation-events/index.coffee +++ b/spec/fixtures/packages/package-with-activation-events/index.coffee @@ -9,5 +9,5 @@ module.exports = activate: -> @activateCallCount++ - atom.rootView.getActiveView()?.command 'activation-event', => + atom.workspaceView.getActiveView()?.command 'activation-event', => @activationEventCallCount++ diff --git a/spec/fixtures/packages/package-with-serialize-error/package.cson b/spec/fixtures/packages/package-with-serialize-error/package.cson index a44445394..d49a175ed 100644 --- a/spec/fixtures/packages/package-with-serialize-error/package.cson +++ b/spec/fixtures/packages/package-with-serialize-error/package.cson @@ -1,5 +1,5 @@ # This package loads async, otherwise it would log errors when it -# is automatically serialized when rootView is deactivatated +# is automatically serialized when workspaceView is deactivatated 'main': 'index.coffee' 'activationEvents': ['activation-event'] diff --git a/spec/keymap-spec.coffee b/spec/keymap-spec.coffee index 4a2cb8a9f..a74ede659 100644 --- a/spec/keymap-spec.coffee +++ b/spec/keymap-spec.coffee @@ -1,7 +1,7 @@ path = require 'path' Keymap = require '../src/keymap' -{$, $$, RootView} = require 'atom' +{$, $$, WorkspaceView} = require 'atom' describe "Keymap", -> fragment = null @@ -158,12 +158,12 @@ describe "Keymap", -> expect(bazHandler).toHaveBeenCalled() describe "when the event's target is the document body", -> - it "triggers the mapped event on the rootView", -> - atom.rootView = new RootView - atom.rootView.attachToDom() + it "triggers the mapped event on the workspaceView", -> + atom.workspaceView = new WorkspaceView + atom.workspaceView.attachToDom() keymap.bindKeys 'name', 'body', 'x': 'foo' fooHandler = jasmine.createSpy("fooHandler") - atom.rootView.on 'foo', fooHandler + atom.workspaceView.on 'foo', fooHandler result = keymap.handleKeyEvent(keydownEvent('x', target: document.body)) expect(result).toBe(false) diff --git a/spec/pane-spec.coffee b/spec/pane-spec.coffee index dfbc4d360..895f58ad8 100644 --- a/spec/pane-spec.coffee +++ b/spec/pane-spec.coffee @@ -475,20 +475,20 @@ describe "Pane", -> describe "when it is the last pane", -> beforeEach -> expect(container.getPanes().length).toBe 1 - atom.rootView = focus: jasmine.createSpy("rootView.focus") + atom.workspaceView = focus: jasmine.createSpy("workspaceView.focus") describe "when the removed pane is focused", -> - it "calls focus on rootView so we don't lose focus", -> + it "calls focus on workspaceView so we don't lose focus", -> container.attachToDom() pane.focus() pane.remove() - expect(atom.rootView.focus).toHaveBeenCalled() + expect(atom.workspaceView.focus).toHaveBeenCalled() describe "when the removed pane is not focused", -> it "does not call focus on root view", -> expect(pane).not.toMatchSelector ':has(:focus)' pane.remove() - expect(atom.rootView.focus).not.toHaveBeenCalled() + expect(atom.workspaceView.focus).not.toHaveBeenCalled() describe ".getNextPane()", -> it "returns the next pane if one exists, wrapping around from the last pane to the first", -> diff --git a/spec/root-view-spec.coffee b/spec/root-view-spec.coffee index 0785dd1ea..eb037cab4 100644 --- a/spec/root-view-spec.coffee +++ b/spec/root-view-spec.coffee @@ -1,52 +1,52 @@ -{$, $$, fs, RootView, View} = require 'atom' +{$, $$, fs, WorkspaceView, View} = require 'atom' Q = require 'q' path = require 'path' temp = require 'temp' Pane = require '../src/pane' -describe "RootView", -> +describe "WorkspaceView", -> pathToOpen = null beforeEach -> atom.project.setPath(atom.project.resolve('dir')) pathToOpen = atom.project.resolve('a') - atom.rootView = new RootView - atom.rootView.enableKeymap() - atom.rootView.openSync(pathToOpen) - atom.rootView.focus() + atom.workspaceView = new WorkspaceView + atom.workspaceView.enableKeymap() + atom.workspaceView.openSync(pathToOpen) + atom.workspaceView.focus() describe "@deserialize()", -> viewState = null - refreshRootViewAndProject = -> - rootViewState = atom.rootView.serialize() + refreshWorkspaceViewAndProject = -> + workspaceViewState = atom.workspaceView.serialize() atom.project.getState().serializeForPersistence() project2 = atom.replicate().get('project') - atom.rootView.remove() + atom.workspaceView.remove() atom.project.destroy() atom.project = project2 - atom.rootView = atom.deserializers.deserialize(rootViewState) - atom.rootView.attachToDom() + atom.workspaceView = atom.deserializers.deserialize(workspaceViewState) + atom.workspaceView.attachToDom() - describe "when the serialized RootView has an unsaved buffer", -> + describe "when the serialized WorkspaceView has an unsaved buffer", -> it "constructs the view with the same panes", -> - atom.rootView.attachToDom() - atom.rootView.openSync() - editor1 = atom.rootView.getActiveView() + atom.workspaceView.attachToDom() + atom.workspaceView.openSync() + editor1 = atom.workspaceView.getActiveView() buffer = editor1.getBuffer() editor1.splitRight() - expect(atom.rootView.getActiveView()).toBe atom.rootView.getEditors()[2] + expect(atom.workspaceView.getActiveView()).toBe atom.workspaceView.getEditors()[2] - refreshRootViewAndProject() + refreshWorkspaceViewAndProject() - expect(atom.rootView.getEditors().length).toBe 2 - expect(atom.rootView.getActiveView()).toBe atom.rootView.getEditors()[1] - expect(atom.rootView.title).toBe "untitled - #{atom.project.getPath()}" + expect(atom.workspaceView.getEditors().length).toBe 2 + expect(atom.workspaceView.getActiveView()).toBe atom.workspaceView.getEditors()[1] + expect(atom.workspaceView.title).toBe "untitled - #{atom.project.getPath()}" describe "when there are open editors", -> it "constructs the view with the same panes", -> - atom.rootView.attachToDom() - pane1 = atom.rootView.getActivePane() + atom.workspaceView.attachToDom() + pane1 = atom.workspaceView.getActivePane() pane2 = pane1.splitRight() pane3 = pane2.splitRight() pane4 = pane2.splitDown() @@ -57,13 +57,13 @@ describe "RootView", -> pane4.activeItem.setCursorScreenPosition([0, 2]) pane2.focus() - refreshRootViewAndProject() + refreshWorkspaceViewAndProject() - expect(atom.rootView.getEditors().length).toBe 4 - editor1 = atom.rootView.panes.find('.row > .pane .editor:eq(0)').view() - editor3 = atom.rootView.panes.find('.row > .pane .editor:eq(1)').view() - editor2 = atom.rootView.panes.find('.row > .column > .pane .editor:eq(0)').view() - editor4 = atom.rootView.panes.find('.row > .column > .pane .editor:eq(1)').view() + expect(atom.workspaceView.getEditors().length).toBe 4 + editor1 = atom.workspaceView.panes.find('.row > .pane .editor:eq(0)').view() + editor3 = atom.workspaceView.panes.find('.row > .pane .editor:eq(1)').view() + editor2 = atom.workspaceView.panes.find('.row > .column > .pane .editor:eq(0)').view() + editor4 = atom.workspaceView.panes.find('.row > .column > .pane .editor:eq(1)').view() expect(editor1.getPath()).toBe atom.project.resolve('a') expect(editor2.getPath()).toBe atom.project.resolve('b') @@ -84,181 +84,181 @@ describe "RootView", -> expect(editor3.isFocused).toBeFalsy() expect(editor4.isFocused).toBeFalsy() - expect(atom.rootView.title).toBe "#{path.basename(editor2.getPath())} - #{atom.project.getPath()}" + expect(atom.workspaceView.title).toBe "#{path.basename(editor2.getPath())} - #{atom.project.getPath()}" describe "where there are no open editors", -> it "constructs the view with no open editors", -> - atom.rootView.getActivePane().remove() - expect(atom.rootView.getEditors().length).toBe 0 - refreshRootViewAndProject() - expect(atom.rootView.getEditors().length).toBe 0 + atom.workspaceView.getActivePane().remove() + expect(atom.workspaceView.getEditors().length).toBe 0 + refreshWorkspaceViewAndProject() + expect(atom.workspaceView.getEditors().length).toBe 0 describe "focus", -> beforeEach -> - atom.rootView.attachToDom() + atom.workspaceView.attachToDom() describe "when there is an active view", -> it "hands off focus to the active view", -> - editorView = atom.rootView.getActiveView() + editorView = atom.workspaceView.getActiveView() editorView.isFocused = false - atom.rootView.focus() + atom.workspaceView.focus() expect(editorView.isFocused).toBeTruthy() describe "when there is no active view", -> beforeEach -> - atom.rootView.getActivePane().remove() - expect(atom.rootView.getActiveView()).toBeUndefined() - atom.rootView.attachToDom() + atom.workspaceView.getActivePane().remove() + expect(atom.workspaceView.getActiveView()).toBeUndefined() + atom.workspaceView.attachToDom() expect(document.activeElement).toBe document.body describe "when are visible focusable elements (with a -1 tabindex)", -> it "passes focus to the first focusable element", -> focusable1 = $$ -> @div "One", id: 'one', tabindex: -1 focusable2 = $$ -> @div "Two", id: 'two', tabindex: -1 - atom.rootView.horizontal.append(focusable1, focusable2) + atom.workspaceView.horizontal.append(focusable1, focusable2) expect(document.activeElement).toBe document.body - atom.rootView.focus() + atom.workspaceView.focus() expect(document.activeElement).toBe focusable1[0] describe "when there are no visible focusable elements", -> it "surrenders focus to the body", -> focusable = $$ -> @div "One", id: 'one', tabindex: -1 - atom.rootView.horizontal.append(focusable) + atom.workspaceView.horizontal.append(focusable) focusable.hide() expect(document.activeElement).toBe document.body - atom.rootView.focus() + atom.workspaceView.focus() expect(document.activeElement).toBe document.body describe "keymap wiring", -> commandHandler = null beforeEach -> commandHandler = jasmine.createSpy('commandHandler') - atom.rootView.on('foo-command', commandHandler) + atom.workspaceView.on('foo-command', commandHandler) atom.keymap.bindKeys('name', '*', 'x': 'foo-command') - describe "when a keydown event is triggered in the RootView", -> + describe "when a keydown event is triggered in the WorkspaceView", -> it "triggers matching keybindings for that event", -> - event = keydownEvent 'x', target: atom.rootView[0] + event = keydownEvent 'x', target: atom.workspaceView[0] - atom.rootView.trigger(event) + atom.workspaceView.trigger(event) expect(commandHandler).toHaveBeenCalled() describe "window title", -> describe "when the project has no path", -> it "sets the title to 'untitled'", -> atom.project.setPath(undefined) - expect(atom.rootView.title).toBe 'untitled' + expect(atom.workspaceView.title).toBe 'untitled' describe "when the project has a path", -> beforeEach -> - atom.rootView.openSync('b') + atom.workspaceView.openSync('b') describe "when there is an active pane item", -> it "sets the title to the pane item's title plus the project path", -> - item = atom.rootView.getActivePaneItem() - expect(atom.rootView.title).toBe "#{item.getTitle()} - #{atom.project.getPath()}" + item = atom.workspaceView.getActivePaneItem() + expect(atom.workspaceView.title).toBe "#{item.getTitle()} - #{atom.project.getPath()}" describe "when the title of the active pane item changes", -> it "updates the window title based on the item's new title", -> - editor = atom.rootView.getActivePaneItem() + editor = atom.workspaceView.getActivePaneItem() editor.buffer.setPath(path.join(temp.dir, 'hi')) - expect(atom.rootView.title).toBe "#{editor.getTitle()} - #{atom.project.getPath()}" + expect(atom.workspaceView.title).toBe "#{editor.getTitle()} - #{atom.project.getPath()}" describe "when the active pane's item changes", -> it "updates the title to the new item's title plus the project path", -> - atom.rootView.getActivePane().showNextItem() - item = atom.rootView.getActivePaneItem() - expect(atom.rootView.title).toBe "#{item.getTitle()} - #{atom.project.getPath()}" + atom.workspaceView.getActivePane().showNextItem() + item = atom.workspaceView.getActivePaneItem() + expect(atom.workspaceView.title).toBe "#{item.getTitle()} - #{atom.project.getPath()}" describe "when the last pane item is removed", -> it "updates the title to contain the project's path", -> - atom.rootView.getActivePane().remove() - expect(atom.rootView.getActivePaneItem()).toBeUndefined() - expect(atom.rootView.title).toBe atom.project.getPath() + atom.workspaceView.getActivePane().remove() + expect(atom.workspaceView.getActivePaneItem()).toBeUndefined() + expect(atom.workspaceView.title).toBe atom.project.getPath() describe "when an inactive pane's item changes", -> it "does not update the title", -> - pane = atom.rootView.getActivePane() + pane = atom.workspaceView.getActivePane() pane.splitRight() - initialTitle = atom.rootView.title + initialTitle = atom.workspaceView.title pane.showNextItem() - expect(atom.rootView.title).toBe initialTitle + expect(atom.workspaceView.title).toBe initialTitle describe "when the root view is deserialized", -> it "updates the title to contain the project's path", -> - rootView2 = atom.deserializers.deserialize(atom.rootView.serialize()) - item = atom.rootView.getActivePaneItem() - expect(rootView2.title).toBe "#{item.getTitle()} - #{atom.project.getPath()}" - rootView2.remove() + workspaceView2 = atom.deserializers.deserialize(atom.workspaceView.serialize()) + item = atom.workspaceView.getActivePaneItem() + expect(workspaceView2.title).toBe "#{item.getTitle()} - #{atom.project.getPath()}" + workspaceView2.remove() describe "font size adjustment", -> it "increases/decreases font size when increase/decrease-font-size events are triggered", -> fontSizeBefore = atom.config.get('editor.fontSize') - atom.rootView.trigger 'window:increase-font-size' + atom.workspaceView.trigger 'window:increase-font-size' expect(atom.config.get('editor.fontSize')).toBe fontSizeBefore + 1 - atom.rootView.trigger 'window:increase-font-size' + atom.workspaceView.trigger 'window:increase-font-size' expect(atom.config.get('editor.fontSize')).toBe fontSizeBefore + 2 - atom.rootView.trigger 'window:decrease-font-size' + atom.workspaceView.trigger 'window:decrease-font-size' expect(atom.config.get('editor.fontSize')).toBe fontSizeBefore + 1 - atom.rootView.trigger 'window:decrease-font-size' + atom.workspaceView.trigger 'window:decrease-font-size' expect(atom.config.get('editor.fontSize')).toBe fontSizeBefore it "does not allow the font size to be less than 1", -> atom.config.set("editor.fontSize", 1) - atom.rootView.trigger 'window:decrease-font-size' + atom.workspaceView.trigger 'window:decrease-font-size' expect(atom.config.get('editor.fontSize')).toBe 1 describe ".openSync(filePath, options)", -> describe "when there is no active pane", -> beforeEach -> spyOn(Pane.prototype, 'focus') - atom.rootView.getActivePane().remove() - expect(atom.rootView.getActivePane()).toBeUndefined() + atom.workspaceView.getActivePane().remove() + expect(atom.workspaceView.getActivePane()).toBeUndefined() describe "when called with no path", -> it "creates a empty edit session as an item on a new pane, and focuses the pane", -> - editor = atom.rootView.openSync() - expect(atom.rootView.getActivePane().activeItem).toBe editor + editor = atom.workspaceView.openSync() + expect(atom.workspaceView.getActivePane().activeItem).toBe editor expect(editor.getPath()).toBeUndefined() - expect(atom.rootView.getActivePane().focus).toHaveBeenCalled() + expect(atom.workspaceView.getActivePane().focus).toHaveBeenCalled() it "can create multiple empty edit sessions as an item on a new pane", -> - editor = atom.rootView.openSync() - editor2 = atom.rootView.openSync() - expect(atom.rootView.getActivePane().getItems().length).toBe 2 + editor = atom.workspaceView.openSync() + editor2 = atom.workspaceView.openSync() + expect(atom.workspaceView.getActivePane().getItems().length).toBe 2 expect(editor).not.toBe editor2 describe "when called with a path", -> it "creates an edit session for the given path as an item on a new pane, and focuses the pane", -> - editor = atom.rootView.openSync('b') - expect(atom.rootView.getActivePane().activeItem).toBe editor + editor = atom.workspaceView.openSync('b') + expect(atom.workspaceView.getActivePane().activeItem).toBe editor expect(editor.getPath()).toBe require.resolve('./fixtures/dir/b') - expect(atom.rootView.getActivePane().focus).toHaveBeenCalled() + expect(atom.workspaceView.getActivePane().focus).toHaveBeenCalled() describe "when the changeFocus option is false", -> it "does not focus the new pane", -> - editor = atom.rootView.openSync('b', changeFocus: false) - expect(atom.rootView.getActivePane().focus).not.toHaveBeenCalled() + editor = atom.workspaceView.openSync('b', changeFocus: false) + expect(atom.workspaceView.getActivePane().focus).not.toHaveBeenCalled() describe "when the split option is 'right'", -> it "creates a new pane and opens the file in said pane", -> - editor = atom.rootView.openSync('b', split: 'right') - expect(atom.rootView.getActivePane().activeItem).toBe editor + editor = atom.workspaceView.openSync('b', split: 'right') + expect(atom.workspaceView.getActivePane().activeItem).toBe editor expect(editor.getPath()).toBe require.resolve('./fixtures/dir/b') describe "when there is an active pane", -> [activePane, initialItemCount] = [] beforeEach -> - activePane = atom.rootView.getActivePane() + activePane = atom.workspaceView.getActivePane() spyOn(activePane, 'focus') initialItemCount = activePane.getItems().length describe "when called with no path", -> it "opens an edit session with an empty buffer as an item in the active pane and focuses it", -> - editor = atom.rootView.openSync() + editor = atom.workspaceView.openSync() expect(activePane.getItems().length).toBe initialItemCount + 1 expect(activePane.activeItem).toBe editor expect(editor.getPath()).toBeUndefined() @@ -269,11 +269,11 @@ describe "RootView", -> it "shows the existing edit session in the pane", -> previousEditSession = activePane.activeItem - editor = atom.rootView.openSync('b') + editor = atom.workspaceView.openSync('b') expect(activePane.activeItem).toBe editor expect(editor).not.toBe previousEditSession - editor = atom.rootView.openSync(previousEditSession.getPath()) + editor = atom.workspaceView.openSync(previousEditSession.getPath()) expect(editor).toBe previousEditSession expect(activePane.activeItem).toBe editor @@ -281,85 +281,85 @@ describe "RootView", -> describe "when the active pane does not have an edit session item for the path being opened", -> it "creates a new edit session for the given path in the active editor", -> - editor = atom.rootView.openSync('b') + editor = atom.workspaceView.openSync('b') expect(activePane.items.length).toBe 2 expect(activePane.activeItem).toBe editor expect(activePane.focus).toHaveBeenCalled() describe "when the changeFocus option is false", -> it "does not focus the active pane", -> - editor = atom.rootView.openSync('b', changeFocus: false) + editor = atom.workspaceView.openSync('b', changeFocus: false) expect(activePane.focus).not.toHaveBeenCalled() describe "when the split option is 'right'", -> it "creates a new pane and opens the file in said pane", -> - pane1 = atom.rootView.getActivePane() + pane1 = atom.workspaceView.getActivePane() - editor = atom.rootView.openSync('b', split: 'right') - pane2 = atom.rootView.getActivePane() + editor = atom.workspaceView.openSync('b', split: 'right') + pane2 = atom.workspaceView.getActivePane() expect(pane2[0]).not.toBe pane1[0] expect(editor.getPath()).toBe require.resolve('./fixtures/dir/b') - expect(atom.rootView.panes.find('.row .pane').toArray()).toEqual [pane1[0], pane2[0]] + expect(atom.workspaceView.panes.find('.row .pane').toArray()).toEqual [pane1[0], pane2[0]] - editor = atom.rootView.openSync('file1', split: 'right') - pane3 = atom.rootView.getActivePane() + editor = atom.workspaceView.openSync('file1', split: 'right') + pane3 = atom.workspaceView.getActivePane() expect(pane3[0]).toBe pane2[0] expect(editor.getPath()).toBe require.resolve('./fixtures/dir/file1') - expect(atom.rootView.panes.find('.row .pane').toArray()).toEqual [pane1[0], pane2[0]] + expect(atom.workspaceView.panes.find('.row .pane').toArray()).toEqual [pane1[0], pane2[0]] describe ".openSingletonSync(filePath, options)", -> describe "when there is an active pane", -> [pane1] = [] beforeEach -> spyOn(Pane.prototype, 'focus').andCallFake -> @makeActive() - pane1 = atom.rootView.getActivePane() + pane1 = atom.workspaceView.getActivePane() it "creates a new pane and reuses the file when already open", -> - atom.rootView.openSingletonSync('b', split: 'right') - pane2 = atom.rootView.getActivePane() + atom.workspaceView.openSingletonSync('b', split: 'right') + pane2 = atom.workspaceView.getActivePane() expect(pane2[0]).not.toBe pane1[0] expect(pane1.itemForUri('b')).toBeFalsy() expect(pane2.itemForUri('b')).not.toBeFalsy() - expect(atom.rootView.panes.find('.row .pane').toArray()).toEqual [pane1[0], pane2[0]] + expect(atom.workspaceView.panes.find('.row .pane').toArray()).toEqual [pane1[0], pane2[0]] pane1.focus() - expect(atom.rootView.getActivePane()[0]).toBe pane1[0] + expect(atom.workspaceView.getActivePane()[0]).toBe pane1[0] - atom.rootView.openSingletonSync('b', split: 'right') - pane3 = atom.rootView.getActivePane() + atom.workspaceView.openSingletonSync('b', split: 'right') + pane3 = atom.workspaceView.getActivePane() expect(pane3[0]).toBe pane2[0] expect(pane1.itemForUri('b')).toBeFalsy() expect(pane2.itemForUri('b')).not.toBeFalsy() - expect(atom.rootView.panes.find('.row .pane').toArray()).toEqual [pane1[0], pane2[0]] + expect(atom.workspaceView.panes.find('.row .pane').toArray()).toEqual [pane1[0], pane2[0]] it "handles split: left by opening to the left pane when necessary", -> - atom.rootView.openSingletonSync('b', split: 'right') - pane2 = atom.rootView.getActivePane() + atom.workspaceView.openSingletonSync('b', split: 'right') + pane2 = atom.workspaceView.getActivePane() expect(pane2[0]).not.toBe pane1[0] - atom.rootView.openSingletonSync('file1', split: 'left') + atom.workspaceView.openSingletonSync('file1', split: 'left') - activePane = atom.rootView.getActivePane() + activePane = atom.workspaceView.getActivePane() expect(activePane[0]).toBe pane1[0] expect(pane1.itemForUri('file1')).toBeTruthy() expect(pane2.itemForUri('file1')).toBeFalsy() - expect(atom.rootView.panes.find('.row .pane').toArray()).toEqual [pane1[0], pane2[0]] + expect(atom.workspaceView.panes.find('.row .pane').toArray()).toEqual [pane1[0], pane2[0]] pane2.focus() - expect(atom.rootView.getActivePane()[0]).toBe pane2[0] + expect(atom.workspaceView.getActivePane()[0]).toBe pane2[0] - atom.rootView.openSingletonSync('file1', split: 'left') - activePane = atom.rootView.getActivePane() + atom.workspaceView.openSingletonSync('file1', split: 'left') + activePane = atom.workspaceView.getActivePane() expect(activePane[0]).toBe pane1[0] - expect(atom.rootView.panes.find('.row .pane').toArray()).toEqual [pane1[0], pane2[0]] + expect(atom.workspaceView.panes.find('.row .pane').toArray()).toEqual [pane1[0], pane2[0]] it "reuses the file when already open", -> - atom.rootView.openSync('b') - atom.rootView.openSingletonSync('b', split: 'right') - expect(atom.rootView.panes.find('.pane').toArray()).toEqual [pane1[0]] + atom.workspaceView.openSync('b') + atom.workspaceView.openSingletonSync('b', split: 'right') + expect(atom.workspaceView.panes.find('.pane').toArray()).toEqual [pane1[0]] describe ".open(filePath)", -> beforeEach -> @@ -367,60 +367,60 @@ describe "RootView", -> describe "when there is no active pane", -> beforeEach -> - atom.rootView.getActivePane().remove() - expect(atom.rootView.getActivePane()).toBeUndefined() + atom.workspaceView.getActivePane().remove() + expect(atom.workspaceView.getActivePane()).toBeUndefined() describe "when called with no path", -> it "creates a empty edit session as an item on a new pane, and focuses the pane", -> editor = null waitsForPromise -> - atom.rootView.open().then (o) -> editor = o + atom.workspaceView.open().then (o) -> editor = o runs -> - expect(atom.rootView.getActivePane().activeItem).toBe editor + expect(atom.workspaceView.getActivePane().activeItem).toBe editor expect(editor.getPath()).toBeUndefined() - expect(atom.rootView.getActivePane().focus).toHaveBeenCalled() + expect(atom.workspaceView.getActivePane().focus).toHaveBeenCalled() it "can create multiple empty edit sessions as items on a pane", -> editor1 = null editor2 = null waitsForPromise -> - atom.rootView.open() + atom.workspaceView.open() .then (o) -> editor1 = o - atom.rootView.open() + atom.workspaceView.open() .then (o) -> editor2 = o runs -> - expect(atom.rootView.getActivePane().getItems().length).toBe 2 + expect(atom.workspaceView.getActivePane().getItems().length).toBe 2 expect(editor1).not.toBe editor2 describe "when called with a path", -> it "creates an edit session for the given path as an item on a new pane, and focuses the pane", -> editor = null waitsForPromise -> - atom.rootView.open('b').then (o) -> editor = o + atom.workspaceView.open('b').then (o) -> editor = o runs -> - expect(atom.rootView.getActivePane().activeItem).toBe editor + expect(atom.workspaceView.getActivePane().activeItem).toBe editor expect(editor.getPath()).toBe require.resolve('./fixtures/dir/b') - expect(atom.rootView.getActivePane().focus).toHaveBeenCalled() + expect(atom.workspaceView.getActivePane().focus).toHaveBeenCalled() describe "when there is an active pane", -> [activePane] = [] beforeEach -> - activePane = atom.rootView.getActivePane() + activePane = atom.workspaceView.getActivePane() describe "when called with no path", -> it "opens an edit session with an empty buffer as an item in the active pane and focuses it", -> editor = null waitsForPromise -> - atom.rootView.open().then (o) -> editor = o + atom.workspaceView.open().then (o) -> editor = o runs -> expect(activePane.getItems().length).toBe 2 @@ -435,14 +435,14 @@ describe "RootView", -> editor = null waitsForPromise -> - atom.rootView.open('b').then (o) -> editor = o + atom.workspaceView.open('b').then (o) -> editor = o runs -> expect(activePane.activeItem).toBe editor expect(editor).not.toBe previousEditSession waitsForPromise -> - atom.rootView.open(previousEditSession.getPath()).then (o) -> editor = o + atom.workspaceView.open(previousEditSession.getPath()).then (o) -> editor = o runs -> expect(editor).toBe previousEditSession @@ -454,7 +454,7 @@ describe "RootView", -> editor = null waitsForPromise -> - atom.rootView.open('b').then (o) -> editor = o + atom.workspaceView.open('b').then (o) -> editor = o runs -> expect(activePane.activeItem).toBe editor @@ -463,9 +463,9 @@ describe "RootView", -> describe "window:toggle-invisibles event", -> it "shows/hides invisibles in all open and future editors", -> - atom.rootView.height(200) - atom.rootView.attachToDom() - rightEditor = atom.rootView.getActiveView() + atom.workspaceView.height(200) + atom.workspaceView.attachToDom() + rightEditor = atom.workspaceView.getActiveView() rightEditor.setText(" \t ") leftEditor = rightEditor.splitLeft() expect(rightEditor.find(".line:first").text()).toBe " " @@ -473,14 +473,14 @@ describe "RootView", -> withInvisiblesShowing = "#{rightEditor.invisibles.space}#{rightEditor.invisibles.tab} #{rightEditor.invisibles.space}#{rightEditor.invisibles.eol}" - atom.rootView.trigger "window:toggle-invisibles" + atom.workspaceView.trigger "window:toggle-invisibles" expect(rightEditor.find(".line:first").text()).toBe withInvisiblesShowing expect(leftEditor.find(".line:first").text()).toBe withInvisiblesShowing lowerLeftEditor = leftEditor.splitDown() expect(lowerLeftEditor.find(".line:first").text()).toBe withInvisiblesShowing - atom.rootView.trigger "window:toggle-invisibles" + atom.workspaceView.trigger "window:toggle-invisibles" expect(rightEditor.find(".line:first").text()).toBe " " expect(leftEditor.find(".line:first").text()).toBe " " @@ -489,7 +489,7 @@ describe "RootView", -> describe ".eachEditor(callback)", -> beforeEach -> - atom.rootView.attachToDom() + atom.workspaceView.attachToDom() it "invokes the callback for existing editor", -> count = 0 @@ -497,9 +497,9 @@ describe "RootView", -> callback = (editor) -> callbackEditor = editor count++ - atom.rootView.eachEditor(callback) + atom.workspaceView.eachEditor(callback) expect(count).toBe 1 - expect(callbackEditor).toBe atom.rootView.getActiveView() + expect(callbackEditor).toBe atom.workspaceView.getActiveView() it "invokes the callback for new editor", -> count = 0 @@ -508,28 +508,28 @@ describe "RootView", -> callbackEditor = editor count++ - atom.rootView.eachEditor(callback) + atom.workspaceView.eachEditor(callback) count = 0 callbackEditor = null - atom.rootView.getActiveView().splitRight() + atom.workspaceView.getActiveView().splitRight() expect(count).toBe 1 - expect(callbackEditor).toBe atom.rootView.getActiveView() + expect(callbackEditor).toBe atom.workspaceView.getActiveView() it "returns a subscription that can be disabled", -> count = 0 callback = (editor) -> count++ - subscription = atom.rootView.eachEditor(callback) + subscription = atom.workspaceView.eachEditor(callback) expect(count).toBe 1 - atom.rootView.getActiveView().splitRight() + atom.workspaceView.getActiveView().splitRight() expect(count).toBe 2 subscription.off() - atom.rootView.getActiveView().splitRight() + atom.workspaceView.getActiveView().splitRight() expect(count).toBe 2 describe ".eachBuffer(callback)", -> beforeEach -> - atom.rootView.attachToDom() + atom.workspaceView.attachToDom() it "invokes the callback for existing buffer", -> count = 0 @@ -538,9 +538,9 @@ describe "RootView", -> callback = (buffer) -> callbackBuffer = buffer count++ - atom.rootView.eachBuffer(callback) + atom.workspaceView.eachBuffer(callback) expect(count).toBe 1 - expect(callbackBuffer).toBe atom.rootView.getActiveView().getBuffer() + expect(callbackBuffer).toBe atom.workspaceView.getActiveView().getBuffer() it "invokes the callback for new buffer", -> count = 0 @@ -549,9 +549,9 @@ describe "RootView", -> callbackBuffer = buffer count++ - atom.rootView.eachBuffer(callback) + atom.workspaceView.eachBuffer(callback) count = 0 callbackBuffer = null - atom.rootView.openSync(require.resolve('./fixtures/sample.txt')) + atom.workspaceView.openSync(require.resolve('./fixtures/sample.txt')) expect(count).toBe 1 - expect(callbackBuffer).toBe atom.rootView.getActiveView().getBuffer() + expect(callbackBuffer).toBe atom.workspaceView.getActiveView().getBuffer() diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index d3c4ef3e5..996352277 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -4,7 +4,7 @@ atom.restoreDimensions() require '../vendor/jasmine-jquery' path = require 'path' -{_, $, File, RootView, fs} = require 'atom' +{_, $, File, WorkspaceView, fs} = require 'atom' Keymap = require '../src/keymap' Config = require '../src/config' {Point} = require 'telepath' @@ -73,7 +73,7 @@ beforeEach -> config = new Config({resourcePath, configDirPath: atom.getConfigDirPath()}) spyOn(config, 'load') spyOn(config, 'save') - config.setDefaults('core', RootView.configDefaults) + config.setDefaults('core', WorkspaceView.configDefaults) config.setDefaults('editor', EditorView.configDefaults) config.set "editor.fontFamily", "Courier" config.set "editor.fontSize", 16 @@ -85,7 +85,7 @@ beforeEach -> # make editor display updates synchronous spyOn(EditorView.prototype, 'requestDisplayUpdate').andCallFake -> @updateDisplay() - spyOn(RootView.prototype, 'setTitle').andCallFake (@title) -> + spyOn(WorkspaceView.prototype, 'setTitle').andCallFake (@title) -> spyOn(window, "setTimeout").andCallFake window.fakeSetTimeout spyOn(window, "clearTimeout").andCallFake window.fakeClearTimeout spyOn(File.prototype, "detectResurrectionAfterDelay").andCallFake -> @detectResurrection() @@ -104,8 +104,8 @@ afterEach -> atom.packages.deactivatePackages() atom.menu.template = [] - atom.rootView?.remove?() - atom.rootView = null + atom.workspaceView?.remove?() + atom.workspaceView = null atom.project?.destroy?() atom.project = null diff --git a/spec/theme-manager-spec.coffee b/spec/theme-manager-spec.coffee index b3e7f48d4..11075476d 100644 --- a/spec/theme-manager-spec.coffee +++ b/spec/theme-manager-spec.coffee @@ -1,5 +1,5 @@ path = require 'path' -{$, $$, fs, RootView} = require 'atom' +{$, $$, fs, WorkspaceView} = require 'atom' ThemeManager = require '../src/theme-manager' AtomPackage = require '../src/atom-package' @@ -140,16 +140,16 @@ describe "ThemeManager", -> describe "base stylesheet loading", -> beforeEach -> - atom.rootView = new RootView - atom.rootView.append $$ -> @div class: 'editor' - atom.rootView.attachToDom() + atom.workspaceView = new WorkspaceView + atom.workspaceView.append $$ -> @div class: 'editor' + atom.workspaceView.attachToDom() themeManager.activateThemes() it "loads the correct values from the theme's ui-variables file", -> atom.config.set('core.themes', ['theme-with-ui-variables']) # an override loaded in the base css - expect(atom.rootView.css("background-color")).toBe "rgb(0, 0, 255)" + expect(atom.workspaceView.css("background-color")).toBe "rgb(0, 0, 255)" # from within the theme itself expect($(".editor").css("padding-top")).toBe "150px" diff --git a/spec/window-spec.coffee b/spec/window-spec.coffee index 648b26916..68f9adeb2 100644 --- a/spec/window-spec.coffee +++ b/spec/window-spec.coffee @@ -58,46 +58,46 @@ describe "Window", -> beforeUnloadEvent = $.Event(new Event('beforeunload')) describe "when pane items are are modified", -> - it "prompts user to save and and calls rootView.confirmClose", -> - spyOn(atom.rootView, 'confirmClose').andCallThrough() + it "prompts user to save and and calls workspaceView.confirmClose", -> + spyOn(atom.workspaceView, 'confirmClose').andCallThrough() spyOn(atom, "confirm").andReturn(2) - editor = atom.rootView.openSync("sample.js") + editor = atom.workspaceView.openSync("sample.js") editor.insertText("I look different, I feel different.") $(window).trigger(beforeUnloadEvent) - expect(atom.rootView.confirmClose).toHaveBeenCalled() + expect(atom.workspaceView.confirmClose).toHaveBeenCalled() expect(atom.confirm).toHaveBeenCalled() it "prompts user to save and handler returns true if don't save", -> spyOn(atom, "confirm").andReturn(2) - editor = atom.rootView.openSync("sample.js") + editor = atom.workspaceView.openSync("sample.js") editor.insertText("I look different, I feel different.") $(window).trigger(beforeUnloadEvent) expect(atom.confirm).toHaveBeenCalled() it "prompts user to save and handler returns false if dialog is canceled", -> spyOn(atom, "confirm").andReturn(1) - editor = atom.rootView.openSync("sample.js") + editor = atom.workspaceView.openSync("sample.js") editor.insertText("I look different, I feel different.") $(window).trigger(beforeUnloadEvent) expect(atom.confirm).toHaveBeenCalled() describe ".unloadEditorWindow()", -> it "saves the serialized state of the window so it can be deserialized after reload", -> - rootViewState = atom.rootView.serialize() + workspaceViewState = atom.workspaceView.serialize() syntaxState = atom.syntax.serialize() atom.unloadEditorWindow() - expect(atom.getWindowState().getObject('rootView')).toEqual rootViewState.toObject() + expect(atom.getWindowState().getObject('workspaceView')).toEqual workspaceViewState.toObject() expect(atom.getWindowState().getObject('syntax')).toEqual syntaxState expect(atom.saveWindowState).toHaveBeenCalled() it "unsubscribes from all buffers", -> - atom.rootView.openSync('sample.js') - buffer = atom.rootView.getActivePaneItem().buffer - pane = atom.rootView.getActivePane() + atom.workspaceView.openSync('sample.js') + buffer = atom.workspaceView.getActivePaneItem().buffer + pane = atom.workspaceView.getActivePane() pane.splitRight(pane.copyActiveItem()) - expect(atom.rootView.find('.editor').length).toBe 2 + expect(atom.workspaceView.find('.editor').length).toBe 2 atom.unloadEditorWindow() diff --git a/src/atom-package.coffee b/src/atom-package.coffee index 649930850..06f85f5e3 100644 --- a/src/atom-package.coffee +++ b/src/atom-package.coffee @@ -219,11 +219,11 @@ class AtomPackage extends Package subscribeToActivationEvents: -> return unless @metadata.activationEvents? if _.isArray(@metadata.activationEvents) - atom.rootView.command(event, @handleActivationEvent) for event in @metadata.activationEvents + atom.workspaceView.command(event, @handleActivationEvent) for event in @metadata.activationEvents else if _.isString(@metadata.activationEvents) - atom.rootView.command(@metadata.activationEvents, @handleActivationEvent) + atom.workspaceView.command(@metadata.activationEvents, @handleActivationEvent) else - atom.rootView.command(event, selector, @handleActivationEvent) for event, selector of @metadata.activationEvents + atom.workspaceView.command(event, selector, @handleActivationEvent) for event, selector of @metadata.activationEvents handleActivationEvent: (event) => bubblePathEventHandlers = @disableEventHandlersOnBubblePath(event) @@ -234,11 +234,11 @@ class AtomPackage extends Package unsubscribeFromActivationEvents: -> if _.isArray(@metadata.activationEvents) - atom.rootView.off(event, @handleActivationEvent) for event in @metadata.activationEvents + atom.workspaceView.off(event, @handleActivationEvent) for event in @metadata.activationEvents else if _.isString(@metadata.activationEvents) - atom.rootView.off(@metadata.activationEvents, @handleActivationEvent) + atom.workspaceView.off(@metadata.activationEvents, @handleActivationEvent) else - atom.rootView.off(event, selector, @handleActivationEvent) for event, selector of @metadata.activationEvents + atom.workspaceView.off(event, selector, @handleActivationEvent) for event, selector of @metadata.activationEvents disableEventHandlersOnBubblePath: (event) -> bubblePathEventHandlers = [] diff --git a/src/atom.coffee b/src/atom.coffee index 92f4bd8e4..be1b3af49 100644 --- a/src/atom.coffee +++ b/src/atom.coffee @@ -28,7 +28,7 @@ WindowEventHandler = require './window-event-handler' # * `atom.contextMenu` - A {ContextMenuManager} instance # * `atom.keymap` - A {Keymap} instance # * `atom.menu` - A {MenuManager} instance -# * `atom.rootView` - A {RootView} instance +# * `atom.workspaceView` - A {WorkspaceView} instance # * `atom.packages` - A {PackageManager} instance # * `atom.pasteboard` - A {Pasteboard} instance # * `atom.project` - A {Project} instance @@ -40,14 +40,9 @@ class Atom # Private: constructor: -> - @rootViewParentSelector = 'body' + @workspaceViewParentSelector = 'body' @deserializers = new DeserializerManager() - #TODO Remove once all `atom.rootView` references have been updated - Object.defineProperty this, 'workspaceView', - get: -> @rootView - set: (workspaceView) -> @rootView = workspaceView - # Private: Initialize all the properties in this object. initialize: -> @unsubscribe() @@ -145,14 +140,14 @@ class Atom @setWindowState('project', @project) # Private: - deserializeRootView: -> - RootView = require './root-view' + deserializeWorkspaceView: -> + WorkspaceView = require './workspace-view' state = @getWindowState() - @rootView = @deserializers.deserialize(state.get('rootView')) - unless @rootView? - @rootView = new RootView() - state.set('rootView', @rootView.getState()) - $(@rootViewParentSelector).append(@rootView) + @workspaceView = @deserializers.deserialize(state.get('workspaceView')) + unless @workspaceView? + @workspaceView = new WorkspaceView() + state.set('workspaceView', @workspaceView.getState()) + $(@workspaceViewParentSelector).append(@workspaceView) # Private: deserializePackageStates: -> @@ -164,7 +159,7 @@ class Atom deserializeEditorWindow: -> @deserializePackageStates() @deserializeProject() - @deserializeRootView() + @deserializeWorkspaceView() # Private: This method is only called when opening a real application window startEditorWindow: -> @@ -176,7 +171,7 @@ class Atom @windowEventHandler = new WindowEventHandler @restoreDimensions() @config.load() - @config.setDefaults('core', require('./root-view').configDefaults) + @config.setDefaults('core', require('./workspace-view').configDefaults) @config.setDefaults('editor', require('./editor-view').configDefaults) @keymap.loadBundledKeymaps() @themes.loadBaseStylesheets() @@ -196,16 +191,16 @@ class Atom # Private: unloadEditorWindow: -> - return if not @project and not @rootView + return if not @project and not @workspaceView windowState = @getWindowState() windowState.set('project', @project) windowState.set('syntax', @syntax.serialize()) - windowState.set('rootView', @rootView.serialize()) + windowState.set('workspaceView', @workspaceView.serialize()) @packages.deactivatePackages() windowState.set('packageStates', @packages.packageStates) @saveWindowState() - @rootView.remove() + @workspaceView.remove() @project.destroy() @windowEventHandler?.unsubscribe() @@ -324,7 +319,7 @@ class Atom setImmediate => @show() @focus() - @setFullScreen(true) if @rootView.getState().get('fullScreen') + @setFullScreen(true) if @workspaceView.getState().get('fullScreen') # Public: Close the current window. close: -> @@ -448,7 +443,7 @@ class Atom # Public: Visually and audibly trigger a beep. beep: -> shell.beep() if @config.get('core.audioBeep') - @rootView.trigger 'beep' + @workspaceView.trigger 'beep' # Private: requireUserInitScript: -> diff --git a/src/context-menu-manager.coffee b/src/context-menu-manager.coffee index 9d23416b7..81d7580ea 100644 --- a/src/context-menu-manager.coffee +++ b/src/context-menu-manager.coffee @@ -14,7 +14,7 @@ class ContextMenuManager @devModeDefinitions = {} @activeElement = null - @devModeDefinitions['#root-view'] = [ + @devModeDefinitions['#workspace-view'] = [ label: 'Inspect Element' command: 'application:inspect' executeAtBuild: (e) -> diff --git a/src/editor-view.coffee b/src/editor-view.coffee index 9bb805b59..78da23747 100644 --- a/src/editor-view.coffee +++ b/src/editor-view.coffee @@ -1058,7 +1058,7 @@ class EditorView extends View remove: (selector, keepData) -> return super if keepData or @removed super - atom.rootView?.focus() + atom.workspaceView?.focus() beforeRemove: -> @trigger 'editor:will-be-removed' diff --git a/src/editor.coffee b/src/editor.coffee index df85e3835..b78b39c8d 100644 --- a/src/editor.coffee +++ b/src/editor.coffee @@ -22,12 +22,12 @@ TextMateScopeSelector = require('first-mate').ScopeSelector # # Almost all extension will interact primiarily with this class as it provides # access to objects you'll most commonly interact with. To access it you'll -# want to register a callback on {RootView} which will be fired once for every +# want to register a callback on {WorkspaceView} which will be fired once for every # existing {Editor} as well as any future {Editor}s. # # ## Example # ```coffeescript -# global.rootView.eachEditSession (editor) -> +# global.workspaceView.eachEditSession (editor) -> # editor.insertText('Hello World') # ``` # diff --git a/src/keymap.coffee b/src/keymap.coffee index 71d04abd0..f9568c41d 100644 --- a/src/keymap.coffee +++ b/src/keymap.coffee @@ -141,7 +141,7 @@ class Keymap handleKeyEvent: (event) -> element = event.target - element = atom.rootView if element == document.body + element = atom.workspaceView if element == document.body keystroke = @keystrokeStringForEvent(event, @queuedKeystroke) keyBindings = @keyBindingsForKeystrokeMatchingElement(keystroke, element) diff --git a/src/pane-container.coffee b/src/pane-container.coffee index 2e2eb77fb..90d24f6f8 100644 --- a/src/pane-container.coffee +++ b/src/pane-container.coffee @@ -2,7 +2,7 @@ Pane = require './pane' telepath = require 'telepath' -# Private: Manages the list of panes within a {RootView} +# Private: Manages the list of panes within a {WorkspaceView} module.exports = class PaneContainer extends View atom.deserializers.add(this) diff --git a/src/pane.coffee b/src/pane.coffee index bf190e2e2..396bc75e2 100644 --- a/src/pane.coffee +++ b/src/pane.coffee @@ -426,7 +426,7 @@ class Pane extends View # Private: beforeRemove: -> if @is(':has(:focus)') - @getContainer().focusNextPane() or atom.rootView?.focus() + @getContainer().focusNextPane() or atom.workspaceView?.focus() else if @isActive() @getContainer().makeNextPaneActive() diff --git a/src/select-list.coffee b/src/select-list.coffee index 0c8bc41ff..aba3f139f 100644 --- a/src/select-list.coffee +++ b/src/select-list.coffee @@ -171,7 +171,7 @@ class SelectList extends View if @previouslyFocusedElement?.isOnDom() @previouslyFocusedElement.focus() else - atom.rootView.focus() + atom.workspaceView.focus() # Public: cancelled: -> diff --git a/src/window-event-handler.coffee b/src/window-event-handler.coffee index 6549073b3..d21e46742 100644 --- a/src/window-event-handler.coffee +++ b/src/window-event-handler.coffee @@ -16,8 +16,8 @@ class WindowEventHandler @subscribe ipc, 'command', (command, args...) -> activeElement = document.activeElement # Use root view if body has focus - if activeElement is document.body and atom.rootView? - activeElement = atom.rootView + if activeElement is document.body and atom.workspaceView? + activeElement = atom.workspaceView $(activeElement).trigger(command, args...) @subscribe ipc, 'context-command', (command, args...) -> @@ -29,10 +29,10 @@ class WindowEventHandler @subscribe $(window), 'window:open-path', (event, {pathToOpen, initialLine}) -> unless fs.isDirectorySync(pathToOpen) - atom.rootView?.open(pathToOpen, {initialLine}) + atom.workspaceView?.open(pathToOpen, {initialLine}) @subscribe $(window), 'beforeunload', => - confirmed = atom.rootView?.confirmClose() + confirmed = atom.workspaceView?.confirmClose() atom.hide() if confirmed and not @reloadRequested and atom.getCurrentWindow().isWebViewFocused() @reloadRequested = false confirmed diff --git a/src/root-view.coffee b/src/workspace-view.coffee similarity index 99% rename from src/root-view.coffee rename to src/workspace-view.coffee index b10f5d88b..31d7d0d72 100644 --- a/src/root-view.coffee +++ b/src/workspace-view.coffee @@ -37,7 +37,7 @@ Editor = require './editor' # the front. # module.exports = -class RootView extends View +class WorkspaceView extends View atom.deserializers.add(this, Pane, PaneRow, PaneColumn, EditorView) @version: 1 @@ -54,14 +54,14 @@ class RootView extends View # Private: @content: (state) -> - @div id: 'root-view', tabindex: -1, => + @div id: 'workspace', tabindex: -1, => @div id: 'horizontal', outlet: 'horizontal', => @div id: 'vertical', outlet: 'vertical', => @div outlet: 'panes' # Private: @deserialize: (state) -> - new RootView(state) + new WorkspaceView(state) # Private: initialize: (state={}) -> diff --git a/static/atom.less b/static/atom.less index 943a8e022..695292b6d 100644 --- a/static/atom.less +++ b/static/atom.less @@ -3,7 +3,7 @@ @import "octicon-utf-codes"; @import "octicon-mixins"; -@import "root-view"; +@import "workspace-view"; @import "bootstrap"; @import "buttons"; @import "icons"; diff --git a/static/index.html b/static/index.html index 9db5e2271..d8df334f5 100644 --- a/static/index.html +++ b/static/index.html @@ -22,6 +22,6 @@ } - + diff --git a/static/root-view.less b/static/workspace-view.less similarity index 99% rename from static/root-view.less rename to static/workspace-view.less index 1444db6f5..bb8c037d9 100644 --- a/static/root-view.less +++ b/static/workspace-view.less @@ -21,7 +21,7 @@ h6 { font-family: @font-family; } -#root-view { +#workspace { height: 100%; overflow: hidden; position: relative;