Make deserializeView a global method

…along with `registerViewClass(es)`
This commit is contained in:
Nathan Sobo
2013-02-18 18:08:18 -07:00
parent 073856bb57
commit d3c2623b61
5 changed files with 22 additions and 20 deletions

View File

@@ -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=[]) ->

View File

@@ -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"

View File

@@ -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()

View File

@@ -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()