X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/3bf45c83c84f9e7a1c5f2dafd64d812c987037e5..25400813a0ea9828e39975bf166672b97d3c16b7:/project/static/js/app.js diff --git a/project/static/js/app.js b/project/static/js/app.js index 73ce1076..15ee0c0f 100644 --- a/project/static/js/app.js +++ b/project/static/js/app.js @@ -70,6 +70,7 @@ var panel_hooks; }; })(); + (function() { var slice = Array.prototype.slice; @@ -97,11 +98,81 @@ var panel_hooks; } })(); - -var panels = []; -$(function() { - var splitView = new SplitView('#splitview'); - var leftPanelView = new PanelContainerView('#left-panel-container'); - var rightPanelContainer = new PanelContainerView('#right-panel-container'); + +var Editor = Editor || {}; + +// Obiekt implementujący wzorzec KVC/KVO +Editor.Object = Class.extend({ + _className: 'Editor.Object', + _observers: {}, + _guid: null, + + init: function() { + this._observers = {}; + console.log('Created', this.guid()); + }, + + description: function() { + return this._className + '(guid = ' + this.guid() + ')'; + }, + + addObserver: function(observer, property, callback) { + console.log('Add observer', observer.description(), 'to', this.description(), '[', property, ']'); + if (!this._observers[property]) { + this._observers[property] = {} + } + this._observers[property][observer.guid()] = callback; + return this; + }, + + removeObserver: function(observer, property) { + if (!property) { + for (var property in this._observers) { + this.removeObserver(observer, property) + } + } else { + console.log('Remove observer', observer.description(), 'from', this.description(), '[', property, ']'); + delete this._observers[property][observer.guid()]; + } + return this; + }, + + notifyObservers: function(property) { + var currentValue = this[property]; + for (var guid in this._observers[property]) { + console.log(this._observers[property][guid]); + console.log('Notifying', guid, 'of', this.description(), '[', property, ']'); + this._observers[property][guid](property, currentValue, this); + } + return this; + }, + + guid: function() { + if (!this._guid) { + this._guid = ('editor-' + Editor.Object._lastGuid++); + } + return this._guid; + }, + + get: function(property) { + return this[property]; + }, + + set: function(property, value) { + if (this[property] != value) { + this[property] = value; + this.notifyObservers(property); + } + return this; + }, + + dispose: function() { + delete this._observers; + } }); + +Editor.Object._lastGuid = 0; + + +var panels = [];