From 6b27d5301b4995add87d5734e6de2d974007a196 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aleksander=20=C5=81ukasz?= Date: Tue, 27 May 2014 16:09:27 +0200 Subject: [PATCH] editor: keep document properties on document instance, inform about changes via events --- src/editor/modules/data/data.js | 35 +++++++++++------------ src/editor/modules/data/document.js | 7 +++++ src/editor/modules/rng/documentSummary.js | 9 ++++-- src/editor/modules/rng/rng.js | 10 +++---- 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/src/editor/modules/data/data.js b/src/editor/modules/data/data.js index 7d0837b..793d7b4 100644 --- a/src/editor/modules/data/data.js +++ b/src/editor/modules/data/data.js @@ -22,15 +22,9 @@ return function(sandbox) { var documentDirty = false; var draftDirty = false; - var documentProperties = {}; var data = sandbox.getBootstrappedData(); - Object.keys(data) - .filter(function(key) { - return key !== 'history' && key !== 'document'; - }) - .forEach(function(key) { - documentProperties[key] = data[key]; - }); + var document_version = data.version; + var wlxmlDocument, text; @@ -44,6 +38,14 @@ return function(sandbox) { wlxmlDocument = wlxml.WLXMLDocumentFromXML(stubDocument, {}, Document); } + Object.keys(data) + .filter(function(key) { + return key !== 'history' && key !== 'document'; + }) + .forEach(function(key) { + wlxmlDocument.setProperty(key, data[key]); + }); + wlxmlDocument.registerExtension(listExtension); sandbox.getPlugins().forEach(function(plugin) { if(plugin.documentExtension) { @@ -116,8 +118,8 @@ return function(sandbox) { }); }; - var getLocalStorageKey = function() { - var base = 'draft-id:' + document_id + '-ver:' + documentProperties.version; + var getLocalStorageKey = function(forVersion) { + var base = 'draft-id:' + document_id + '-ver:' + (forVersion || wlxmlDocument.properties.version); return { content: base, contentTimestamp: base + '-content-timestamp' @@ -128,9 +130,9 @@ return function(sandbox) { return { start: function() { if(window.localStorage) { - text = window.localStorage.getItem(getLocalStorageKey().content); + text = window.localStorage.getItem(getLocalStorageKey(document_version).content); - var timestamp = window.localStorage.getItem(getLocalStorageKey().contentTimestamp), + var timestamp = window.localStorage.getItem(getLocalStorageKey(document_version).contentTimestamp), usingDraft; if(text) { logger.debug('Local draft exists'); @@ -185,7 +187,7 @@ return function(sandbox) { var formData = event.formData; formData[documentSaveForm.content_field_name] = wlxmlDocument.toXML(); - formData[documentSaveForm.version_field_name] = documentProperties.version; + formData[documentSaveForm.version_field_name] = wlxmlDocument.properties.version; if(sandbox.getConfig().jsonifySentData) { formData = JSON.stringify(formData); } @@ -204,7 +206,7 @@ return function(sandbox) { return key !== 'text'; }) .forEach(function(key) { - documentProperties[key] = data[key]; + wlxmlDocument.setProperty(key, data[key]); }); reloadHistory(); @@ -263,7 +265,7 @@ return function(sandbox) { return key !== 'document'; }) .forEach(function(key) { - documentProperties[key] = data[key]; + wlxmlDocument.setProperty(key, data[key]); }); reloadHistory(); wlxmlDocument.loadXML(data.document); @@ -284,9 +286,6 @@ return function(sandbox) { }, getDocumentId: function() { return document_id; - }, - getDocumentProperties: function() { - return documentProperties; } }; }; diff --git a/src/editor/modules/data/document.js b/src/editor/modules/data/document.js index 23aa000..b0f7c25 100644 --- a/src/editor/modules/data/document.js +++ b/src/editor/modules/data/document.js @@ -14,6 +14,7 @@ var logger = logging.getLogger('document'); var Document = function() { wlxml.WLXMLDocument.apply(this, Array.prototype.slice.call(arguments, 0)); + this.properties = {}; }; Document.prototype = Object.create(wlxml.WLXMLDocument.prototype); @@ -53,6 +54,12 @@ _.extend(Document.prototype, { return 'file://' + _.last(url.split('/')); } return url; + }, + setProperty: function(propName, propValue) { + if(this.properties[propName] !== propValue) { + this.properties[propName] = propValue; + this.trigger('propertyChanged', propName, propValue); + } } }); diff --git a/src/editor/modules/rng/documentSummary.js b/src/editor/modules/rng/documentSummary.js index 211037d..fe593c3 100644 --- a/src/editor/modules/rng/documentSummary.js +++ b/src/editor/modules/rng/documentSummary.js @@ -9,15 +9,18 @@ var $ = require('libs/jquery'), var view = { dom: $('
'), - init: function(config) { + init: function(config, doc) { this.config = config; + this.doc = doc; this.template = _.template(template); + + this.doc.on('propertyChanged', this.render, this); }, - render: function(properties) { + render: function() { this.dom.html(this.template({ title: this.config.title, properties: this.config.properties, - propertyValues: properties + propertyValues: this.doc.properties })); }, setDraftField: function(value) { diff --git a/src/editor/modules/rng/rng.js b/src/editor/modules/rng/rng.js index 6a3271b..de30e64 100644 --- a/src/editor/modules/rng/rng.js +++ b/src/editor/modules/rng/rng.js @@ -97,10 +97,12 @@ return function(sandbox) { eventHandlers.data = { ready: function(usingDraft, draftTimestamp) { + wlxmlDocument = sandbox.getModule('data').getDocument(); + views.mainLayout.setView('mainView', views.mainTabs.getAsView()); - documentSummary.init(sandbox.getConfig().documentSummaryView); - documentSummary.render(sandbox.getModule('data').getDocumentProperties()); + documentSummary.init(sandbox.getConfig().documentSummaryView, wlxmlDocument); + documentSummary.render(); documentSummary.setDraftField(usingDraft ? (draftTimestamp || '???') : '-'); views.currentNodePaneLayout.appendView(documentSummary.dom); @@ -111,7 +113,6 @@ return function(sandbox) { sandbox.getModule(moduleName).start(); }); - wlxmlDocument = sandbox.getModule('data').getDocument(); documentIsDirty = false; wlxmlDocument.on('change', function() { documentIsDirty = true; @@ -145,7 +146,6 @@ return function(sandbox) { sandbox.getModule('indicator').clearMessage({message: msg[what]}); if(status === 'success' && what === 'remote') { sandbox.getModule('mainBar').setVersion(data.version); - documentSummary.render(data); documentSummary.setDraftField('-'); sandbox.getModule('mainBar').setCommandEnabled('drop-draft', false); sandbox.getModule('mainBar').setCommandEnabled('save', false); @@ -175,7 +175,7 @@ return function(sandbox) { eventHandlers.mainBar = { ready: function() { - sandbox.getModule('mainBar').setVersion(sandbox.getModule('data').getDocumentProperties().version); + sandbox.getModule('mainBar').setVersion(sandbox.getModule('data').getDocument().properties.version); views.mainLayout.setView('topPanel', sandbox.getModule('mainBar').getView()); }, 'cmd.save': function() { -- 2.20.1