From d3c2623b61cb78f86487ba08b65e90c2cb6b8074 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 18 Feb 2013 18:08:18 -0700 Subject: [PATCH] Make `deserializeView` a global method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …along with `registerViewClass(es)` --- spec/spec-helper.coffee | 2 +- src/app/pane-grid.coffee | 4 ++-- src/app/pane.coffee | 4 ++-- src/app/root-view.coffee | 18 ++++-------------- src/app/window.coffee | 14 +++++++++++++- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index ebcec00a1..321a257a3 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -7,11 +7,11 @@ Point = require 'point' Project = require 'project' Directory = require 'directory' File = require 'file' -RootView = require 'root-view' Editor = require 'editor' TokenizedBuffer = require 'tokenized-buffer' fs = require 'fs' require 'window' +RootView = require 'root-view' requireStylesheet "jasmine.css" fixturePackagesPath = require.resolve('fixtures/packages') require.paths.unshift(fixturePackagesPath) diff --git a/src/app/pane-grid.coffee b/src/app/pane-grid.coffee index deca75735..9b8bda400 100644 --- a/src/app/pane-grid.coffee +++ b/src/app/pane-grid.coffee @@ -3,8 +3,8 @@ $ = require 'jquery' module.exports = class PaneGrid extends View - @deserialize: ({children}, rootView) -> - childViews = children.map (child) -> rootView.deserializeView(child) + @deserialize: ({children}) -> + childViews = children.map (child) -> deserializeView(child) new this(childViews) initialize: (children=[]) -> diff --git a/src/app/pane.coffee b/src/app/pane.coffee index 7d8349a4a..490742f89 100644 --- a/src/app/pane.coffee +++ b/src/app/pane.coffee @@ -8,8 +8,8 @@ class Pane extends View @div class: 'pane', => @subview 'wrappedView', wrappedView if wrappedView - @deserialize: ({wrappedView}, rootView) -> - new Pane(rootView.deserializeView(wrappedView)) + @deserialize: ({wrappedView}) -> + new Pane(deserializeView(wrappedView)) serialize: -> viewClass: "Pane" diff --git a/src/app/root-view.coffee b/src/app/root-view.coffee index 513f57cb4..757d93e92 100644 --- a/src/app/root-view.coffee +++ b/src/app/root-view.coffee @@ -13,6 +13,8 @@ PaneRow = require 'pane-row' module.exports = class RootView extends View + registerViewClasses(this, Pane, PaneRow, PaneColumn, Editor) + @configDefaults: ignoredNames: [".git", ".svn", ".DS_Store"] disabledPackages: [] @@ -31,8 +33,8 @@ class RootView extends View atom.atomPackageStates = packageStates ? {} - rootView = new RootView(projectOrPathToOpen , suppressOpen: true) - rootView.setRootPane(rootView.deserializeView(panesViewState)) if panesViewState + rootView = new RootView(projectOrPathToOpen, suppressOpen: true) + rootView.setRootPane(deserializeView(panesViewState)) if panesViewState rootView title: null @@ -40,12 +42,6 @@ class RootView extends View initialize: (projectOrPathToOpen, { suppressOpen } = {}) -> window.rootView = this - @viewClasses = { - "Pane": Pane, - "PaneRow": PaneRow, - "PaneColumn": PaneColumn, - "Editor": Editor - } @handleEvents() if not projectOrPathToOpen or _.isString(projectOrPathToOpen) @@ -116,12 +112,6 @@ class RootView extends View afterAttach: (onDom) -> @focus() if onDom - registerViewClass: (viewClass) -> - @viewClasses[viewClass.name] = viewClass - - deserializeView: (viewState) -> - @viewClasses[viewState.viewClass]?.deserialize(viewState, this) - deactivate: -> atom.setRootViewStateForPath(@project.getPath(), @serialize()) atom.deactivateAtomPackages() diff --git a/src/app/window.coffee b/src/app/window.coffee index 8dd958b68..8ed0aba32 100644 --- a/src/app/window.coffee +++ b/src/app/window.coffee @@ -5,12 +5,13 @@ fs = require 'fs' $ = require 'jquery' Config = require 'config' Syntax = require 'syntax' -RootView = require 'root-view' Pasteboard = require 'pasteboard' require 'jquery-extensions' require 'underscore-extensions' require 'space-pen-extensions' +registeredViewClasses = {} + windowAdditions = rootViewParentSelector: 'body' rootView: null @@ -37,6 +38,7 @@ windowAdditions = # Note: RootView assigns itself on window on initialization so that # window.rootView is available when loading user configuration attachRootView: (pathToOpen) -> + RootView = require 'root-view' if pathState = atom.getRootViewStateForPath(pathToOpen) RootView.deserialize(pathState) else @@ -102,6 +104,16 @@ windowAdditions = onerror: -> atom.showDevTools() + registerViewClass: (viewClass) -> + registerViewClasses(viewClass) + + registerViewClasses: (viewClasses...) -> + for viewClass in viewClasses + registeredViewClasses[viewClass.name] = viewClass + + deserializeView: (viewState) -> + registeredViewClasses[viewState.viewClass]?.deserialize(viewState) + measure: (description, fn) -> start = new Date().getTime() value = fn()