aboutsummaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorArmen Kesablyan2012-05-31 22:05:33 -0700
committerArmen Kesablyan2012-05-31 22:05:33 -0700
commit50ea77b261e1b3676aea2b1ed582d5e6c97a0997 (patch)
treefd317d8de8eaec728376c60273b1f6a214816e8e /js
parentb7e33c16bab26f8ee0daa61f920cfdbcb7abc6e3 (diff)
parent04ef4ffcfde762a0aead4a7b702f3c019fdbeb69 (diff)
downloadninja-50ea77b261e1b3676aea2b1ed582d5e6c97a0997.tar.gz
Merge pull request #4 from ericguzman/binding
Binding
Diffstat (limited to 'js')
-rw-r--r--js/controllers/objects-controller.js128
-rwxr-xr-xjs/document/models/html.js5
-rw-r--r--js/document/templates/app/main.js1
-rwxr-xr-xjs/document/views/design.js6
-rwxr-xr-xjs/ninja.reel/ninja.html2
-rw-r--r--js/panels/binding-panel.reel/binding-panel.css11
-rw-r--r--js/panels/binding-panel.reel/binding-panel.html26
-rw-r--r--js/panels/binding-panel.reel/binding-panel.js14
-rw-r--r--js/panels/binding/binding-item.reel/binding-item.css13
-rw-r--r--js/panels/binding/binding-item.reel/binding-item.html37
-rw-r--r--js/panels/binding/binding-item.reel/binding-item.js26
-rw-r--r--js/panels/objects/object.reel/object.html2
-rw-r--r--js/panels/objects/object.reel/object.js32
13 files changed, 248 insertions, 55 deletions
diff --git a/js/controllers/objects-controller.js b/js/controllers/objects-controller.js
index 543aa96f..cd0139a0 100644
--- a/js/controllers/objects-controller.js
+++ b/js/controllers/objects-controller.js
@@ -8,46 +8,126 @@ var Montage = require("montage/core/core").Montage,
8 Component = require("montage/ui/component").Component; 8 Component = require("montage/ui/component").Component;
9 9
10var objectsController = exports.ObjectsController = Montage.create(Component, { 10var objectsController = exports.ObjectsController = Montage.create(Component, {
11
12 _currentDocument : {
13 value : null,
14 enumerable : false
15 },
16 currentDocument : {
17 get : function() {
18 return this._currentDocument;
19 },
20 set : function(doc) {
21 if(!doc) { return false; }
22
23 // TODO: remove setTimeout when timing of montage initialization is done
24 setTimeout(function() {
25 this.bindToModelObjects();
26 }.bind(this), 1000);
27
28 this._currentDocument = doc;
29 },
30 enumerable : false
31 },
32
11 objects : { 33 objects : {
12 value: [] 34 value: []
13 }, 35 },
14 36
15 handleAppLoaded : { 37 _isBoundToModelObjects : {
38 value: null
39 },
40 bindToModelObjects : {
16 value: function() { 41 value: function() {
17 ///// Bind app's activeDocument property to 42 //// Remove any previous bindings if previously bound
18 ///// objects controller's _activeDocument property 43 if(!this._isBoundToModelObjects) {
44 Object.deleteBinding(this, 'objects');
45 this._isBoundToModelObjects = true;
46 }
47
48 Object.defineBinding(this, 'objects', {
49 boundObject: this.currentDocument.model,
50 boundObjectPropertyPath: 'objects',
51 oneway: false
52 });
19 } 53 }
20 }, 54 },
55
56 /* --------------------------
57 Binding Methods
58 ----------------------------- */
59
60 addBinding : {
61 value: function(bindingArgs) {
62 if(!bindingArgs.sourceObject || !bindingArgs.sourceObjectPropertyPath || !bindingArgs) { return; }
21 63
22 deserializedFromTemplate : { 64 Object.defineBinding(bindingArgs.sourceObject, bindingArgs.sourceObjectPropertyPath, bindingArgs);
23 value: function() { 65 }
24 this.eventManager.addEventListener( "appLoaded", this, false);
25 },
26 enumerable : false
27 }, 66 },
28 67
29 _activeDocument : { 68 removeBinding : {
30 value : null, 69 value: function(bindingArgs) {
31 enumerable : false 70 if(!bindingArgs) { return; }
71
72 Object.deleteBinding(bindingArgs.sourceObject, bindingArgs.sourceObjectPropertyPath);
73 }
32 }, 74 },
33 75
34 activeDocument : { 76 editBindingPropertyPath : {
35 get : function() { 77 value: function(bindingArgs, newPropertyPath) {
36 return this._activeDocument; 78 this.removeBinding(bindingArgs);
37 },
38 set : function(document) {
39 ///// If the document is null set default stylesheets to null
40 if(!document) { return false; }
41 79
42 setTimeout(function() { 80 bindingArgs.boundObjectPropertyPath = 'newPropertyPath';
43 this.objects = document._document.application._template._deserializer.getObjectsFromLastDeserialization(); 81
44 }.bind(this), 1000); 82 this.addBinding(bindingArgs);
83 }
84 },
85
86 getObjectBindings : {
87 value: function(object) {
88 var descriptors = object._bindingDescriptors,
89 bindingsArray = [],
90 property, descriptor, bindingArgsObject;
91
92 for(property in descriptors) {
93 if(descriptors.hasOwnProperty(property)) {
94 descriptor = descriptors[property];
95
96 bindingArgsObject = {
97 sourceObject : object,
98 sourceObjectPropertyPath : property,
99 boundObject : descriptor.boundObject,
100 boundObjectPropertyPath : descriptor.boundObjectPropertyPath,
101 onweway : descriptor.oneway
102 };
45 103
104 bindingsArray.push(bindingArgsObject);
105 }
106 }
46 107
47 ///// setting document via binding 108 return bindingsArray;
48 this._activeDocument = document; 109 }
110 },
111
112 /* ---- Bindable controller properties ---- */
113
114 currentObjectBindings : {
115 value: null
116 },
117 _currentObject : {
118 value: null
119 },
120 currentObject : {
121 get: function() {
122 return this._currentObject;
49 }, 123 },
50 enumerable : false 124 set: function(value) {
125 if(value === this._currentObject) { return; }
126
127 this.currentObjectBindings = this.getObjectBindings(value);
128
129 this._currentObject = value;
130 }
51 } 131 }
52 132
53}); \ No newline at end of file 133}); \ No newline at end of file
diff --git a/js/document/models/html.js b/js/document/models/html.js
index fd42d4de..a93faa9e 100755
--- a/js/document/models/html.js
+++ b/js/document/models/html.js
@@ -74,6 +74,7 @@ exports.HtmlDocumentModel = Montage.create(BaseDocumentModel, {
74 setComponentInstance: { 74 setComponentInstance: {
75 value: function(instance, el) { 75 value: function(instance, el) {
76 this.userComponents[el.uuid] = instance; 76 this.userComponents[el.uuid] = instance;
77 this.objects.push(instance);
77 } 78 }
78 }, 79 },
79 //////////////////////////////////////////////////////////////////// 80 ////////////////////////////////////////////////////////////////////
@@ -86,6 +87,10 @@ exports.HtmlDocumentModel = Montage.create(BaseDocumentModel, {
86 return null; 87 return null;
87 } 88 }
88 } 89 }
90 },
91 ////////////////////////////////////////////////////////////////////
92 objects : {
93 value: null
89 } 94 }
90 //////////////////////////////////////////////////////////////////// 95 ////////////////////////////////////////////////////////////////////
91 //////////////////////////////////////////////////////////////////// 96 ////////////////////////////////////////////////////////////////////
diff --git a/js/document/templates/app/main.js b/js/document/templates/app/main.js
index a406abdb..91c46fda 100644
--- a/js/document/templates/app/main.js
+++ b/js/document/templates/app/main.js
@@ -29,6 +29,7 @@ exports.Main = Montage.create(Component, {
29 var componentRequire = component[data.name]; 29 var componentRequire = component[data.name];
30 var componentInstance = componentRequire.create(); 30 var componentInstance = componentRequire.create();
31 31
32 componentInstance._montage_metadata.label = data.name;
32 componentInstance.element = element; 33 componentInstance.element = element;
33 34
34 componentInstance.needsDraw = true; 35 componentInstance.needsDraw = true;
diff --git a/js/document/views/design.js b/js/document/views/design.js
index c7313708..947ad196 100755
--- a/js/document/views/design.js
+++ b/js/document/views/design.js
@@ -395,11 +395,15 @@ exports.DesignDocumentView = Montage.create(BaseDocumentView, {
395 initMontage: { 395 initMontage: {
396 value: function (scripttags) { 396 value: function (scripttags) {
397 // 397 //
398 //debugger;
398 this.iframe.contentWindow.document.body.addEventListener('mjsTemplateReady', function () { 399 this.iframe.contentWindow.document.body.addEventListener('mjsTemplateReady', function () {
399 //Initializing template with user's seriliazation 400 //Initializing template with user's seriliazation
400 var template = this.iframe.contentWindow.mjsTemplate.create(); 401 var template = this.iframe.contentWindow.mjsTemplate.create();
402
401 template.initWithDocument(this.iframe.contentWindow.document); 403 template.initWithDocument(this.iframe.contentWindow.document);
402 template.instantiateWithOwnerAndDocument(null, this.iframe.contentWindow.document, function (e){/*Nothing just a required extra parameter*/}); 404