diff options
-rw-r--r-- | js/controllers/objects-controller.js | 20 | ||||
-rw-r--r-- | js/panels/binding-panel.reel/binding-panel.css | 2 | ||||
-rw-r--r-- | js/panels/binding-panel.reel/binding-panel.html | 6 | ||||
-rw-r--r-- | js/panels/binding/binding-item.reel/binding-item.css | 34 | ||||
-rw-r--r-- | js/panels/binding/binding-item.reel/binding-item.html | 54 | ||||
-rw-r--r-- | js/panels/binding/binding-item.reel/binding-item.js | 64 |
6 files changed, 173 insertions, 7 deletions
diff --git a/js/controllers/objects-controller.js b/js/controllers/objects-controller.js index cd0139a0..a02c3045 100644 --- a/js/controllers/objects-controller.js +++ b/js/controllers/objects-controller.js | |||
@@ -109,6 +109,26 @@ var objectsController = exports.ObjectsController = Montage.create(Component, { | |||
109 | } | 109 | } |
110 | }, | 110 | }, |
111 | 111 | ||
112 | /* ---- Bindable Properties ---- */ | ||
113 | |||
114 | getEnumerableProperties : { | ||
115 | value: function(object, excludeUnderscoreProperties) { | ||
116 | var properties = []; | ||
117 | |||
118 | for(var key in object) { | ||
119 | properties.push(key); | ||
120 | } | ||
121 | |||
122 | if(excludeUnderscoreProperties) { | ||
123 | properties = properties.filter(function(property) { | ||
124 | return property[0] !== '_'; | ||
125 | }, this); | ||
126 | } | ||
127 | |||
128 | return properties.sort(); | ||
129 | } | ||
130 | }, | ||
131 | |||
112 | /* ---- Bindable controller properties ---- */ | 132 | /* ---- Bindable controller properties ---- */ |
113 | 133 | ||
114 | currentObjectBindings : { | 134 | currentObjectBindings : { |
diff --git a/js/panels/binding-panel.reel/binding-panel.css b/js/panels/binding-panel.reel/binding-panel.css index 8597a926..f29b66c1 100644 --- a/js/panels/binding-panel.reel/binding-panel.css +++ b/js/panels/binding-panel.reel/binding-panel.css | |||
@@ -8,4 +8,4 @@ | |||
8 | .bindings-list { | 8 | .bindings-list { |
9 | padding: 0; | 9 | padding: 0; |
10 | margin: 0; | 10 | margin: 0; |
11 | } \ No newline at end of file | 11 | } |
diff --git a/js/panels/binding-panel.reel/binding-panel.html b/js/panels/binding-panel.reel/binding-panel.html index d2e18e99..2850b67c 100644 --- a/js/panels/binding-panel.reel/binding-panel.html +++ b/js/panels/binding-panel.reel/binding-panel.html | |||
@@ -35,7 +35,11 @@ | |||
35 | "element": {"#": "binding-item"} | 35 | "element": {"#": "binding-item"} |
36 | }, | 36 | }, |
37 | "bindings": { | 37 | "bindings": { |
38 | "sourceObjectPropertyPath": {"<-": "@repetition.objectAtCurrentIteration.sourceObjectPropertyPath"} | 38 | "sourceObjectPropertyPath": {"<-": "@repetition.objectAtCurrentIteration.sourceObjectPropertyPath"}, |
39 | "sourceObject": {"<-": "@repetition.objectAtCurrentIteration.sourceObject"}, | ||
40 | "boundObjectPropertyPath": {"<-": "@repetition.objectAtCurrentIteration.boundObjectPropertyPath"}, | ||
41 | "boundObject": {"<-": "@repetition.objectAtCurrentIteration.boundObject"}, | ||
42 | "oneway": {"<-": "@repetition.objectAtCurrentIteration.oneway"} | ||
39 | } | 43 | } |
40 | } | 44 | } |
41 | 45 | ||
diff --git a/js/panels/binding/binding-item.reel/binding-item.css b/js/panels/binding/binding-item.reel/binding-item.css index dc90f162..0f4416b9 100644 --- a/js/panels/binding/binding-item.reel/binding-item.css +++ b/js/panels/binding/binding-item.reel/binding-item.css | |||
@@ -8,6 +8,38 @@ | |||
8 | color: #FFF; | 8 | color: #FFF; |
9 | margin: 0 8px; | 9 | margin: 0 8px; |
10 | padding: 3px; | 10 | padding: 3px; |
11 | border-bottom: 1px solid #FFF; | 11 | border-bottom: 1px solid #505050; |
12 | list-style-type: none; | 12 | list-style-type: none; |
13 | display: -webkit-box; | ||
14 | -webkit-box-orient: horizontal; | ||
15 | } | ||
16 | .binding-item > * { | ||
17 | -webkit-box-flex: 1; | ||
18 | } | ||
19 | .source-object, .bound-object { | ||
20 | padding: 5px 0 3px; | ||
21 | } | ||
22 | .source-object { | ||
23 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowREQ2NEVFRkE0M0IxMUUxQTkwQ0M2Qzc0NjQ4NTRBNiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowREQ2NEVGMEE0M0IxMUUxQTkwQ0M2Qzc0NjQ4NTRBNiI%2BIDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjBERDY0RUVEQTQzQjExRTFBOTBDQzZDNzQ2NDg1NEE2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjBERDY0RUVFQTQzQjExRTFBOTBDQzZDNzQ2NDg1NEE2Ii8%2BIDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY%2BIDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8%2B50zlPwAAAttJREFUeNqMls9rE0EUx2fz24RKsoluUAkIHhWFXtVCJRAhFBRB8D8I1GMF%2FwJFjwr9DzwVipKDUBvQg4KgeJOe1OSS2PxYMUnzO77vsm%2BcSbJpB76dLvve5719M%2FMmxnQ6FV4jn89fo%2BkBaY2UJmVIZVKV9J70ivTNy99YBCdolqZCv9%2B%2F0%2Bl0BM0CdqPRSAQCAWEYhgiHwyIWi2HeJdtt0t6xcAI%2FGw6HW61Wy4H6fD4pHpPJRApBEomECAaDz%2BnVI084gV90u93NRqPhwJCl3%2B%2BXYGTM9gCPx2Pna%2FB%2FMpkU0Wj0Jb16yLyAAn4CcL1eRxYSrMLVASB%2FEQLAL5VKbVKANr1%2BLDMn8AaV4nWtVnNggGNGADgjY4gHfCAEABhfQP7ObFkW%2FO%2BS2S5nXmg2mw6AM1ZLYlDi5u1fInLJlgHaX86K1gdLKxcEDgUoOHBsN1q43GAwEKFQSANDACdyPzVw56sl%2Fn48R%2B%2Bnc4sMDvGytNCrKOZ9qrWToVpjzngenBbtTxdkqdhW9QWPxj2UZX12yzmOnuDzshQ8q0GgXq%2BHV1lknsFCqDvCF5ivsQrW9vLMYoMDHo2LIJqolWo4HZOG%2BvbzhcYLwaofP7s8E4QmZ80rjmHvZ8TR96QEnbp8KE6vlTU427IfP7u8Jv6WsRCcvTSmxz%2BljOgd6AFWblbmAqinHBzwaPwAvIT%2BoPYLmQkFsN%2FpAaJXfouV6xUtWz5QrEgkAtM9wHfoyMpeAWlB3ABHB%2Bb%2FAFcpwI2KBlV9wQOXj%2F9%2BtVpdxwscfT7%2B8oQuOf4MxfGHYJ9Op0tkdou3xDa6GvcK7hezUmGq2Ie7o9vfhQMvFos7lO1T0zRlBiwOxAD1edYW%2FuCgJEv7OZfluH7OWtTPF95E1Hy2bNs%2B8U0Uj8fR9JbfREqAnHuHbvAdyjXnJqXcoW%2FcGr890QWtBFlF10Rzc2%2F%2BM6RD9xdAya3tZy%2F%2FfwIMAMwfSVrTb5e6AAAAAElFTkSuQmCC); | ||
24 | background-position: right center; | ||
25 | background-repeat: no-repeat; | ||
26 | padding-right: 30px; | ||
27 | } | ||
28 | .bound-object { | ||
29 | padding-left: 12px; | ||
30 | } | ||
31 | .so-object-identifier, .bo-object-identifier { | ||
32 | float: right; | ||
33 | color: #999; | ||
34 | } | ||
35 | .binding-item .binding-edit-button { | ||
36 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDQkI4QzVEMTc3ODcxMUUxQTlCOUNDQUJBMEUyMTIwMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDQkI4QzVEMjc3ODcxMUUxQTlCOUNDQUJBMEUyMTIwMSI%2BIDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkNCQjhDNUNGNzc4NzExRTFBOUI5Q0NBQkEwRTIxMjAxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNCQjhDNUQwNzc4NzExRTFBOUI5Q0NBQkEwRTIxMjAxIi8%2BIDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY%2BIDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8%2Bs3B0RQAAAd9JREFUeNockbGL2nAUx%2FNLorHaJXKjJ6YcDkVcHByUQwQDbl26FqEu3dykLjoIXXTwDygKFcrRP%2BC8Q0HwQDlwOaRCKFiuCmo0d0Jr1ZjY923ghZfv9%2FN%2B7%2F1eOJ%2FPx%2BEpl8uKZVk3p9PpRlXV81QqdY4cGjww%2F9l2u81Fo1EuFotdbrdbzbbtX%2FP5%2FAqBHBo8MGB5RVF8yWTSv9%2FvXYIgsNVq9XcwGLxCIBdFkcEDA5YZhnFNJwXcbjc3Go32mUzmlsaYYAQ6QGk0GmooFJKoE8fz%2FE9%2BsVjIHo%2FHpes6y2azX8PhsNbtdtMI5NDggQHL0wW%2FdDodfTqdPm02m4dqtfqmXq9LCOTQ4IEBy3u93gdq9YfCplHM2Wz2gsZ7ptggJ%2B0ADwxYRuI1zfqaLvY7l8t9mkwmcqVSeWeapl0oFJqBQOCpVqt9lCTpJWnfWb%2Ffv6fKM2xot9s9FovFz71ez6ST7UQiIZVKpffUzU%2Ffp%2FV6vWLBYPDD8Xi8oJ%2FkarVaKhVatLlHxhgny7KfPCGdTt%2FS945W%2FEPUNO2KNihGIpH44XBI0Tak8Xh8hoJ4PC7RGCZN0BkOh3fEHUV6Gdi50%2BnUqaWxXC6FfD7%2FDQXNZvMtXdZyOBw6IUtw%2FwQYACT6GJDDh744AAAAAElFTkSuQmCC); | ||
37 | background-repeat: no-repeat; | ||
38 | background-position: right center; | ||
39 | border: 0 none; | ||
40 | cursor: pointer; | ||
41 | padding-top: 6px; | ||
42 | width: 12px; | ||
43 | height: 100%; | ||
44 | margin-left: 10px; | ||
13 | } \ No newline at end of file | 45 | } \ No newline at end of file |
diff --git a/js/panels/binding/binding-item.reel/binding-item.html b/js/panels/binding/binding-item.reel/binding-item.html index 23182345..a569b8b4 100644 --- a/js/panels/binding/binding-item.reel/binding-item.html +++ b/js/panels/binding/binding-item.reel/binding-item.html | |||
@@ -16,14 +16,54 @@ | |||
16 | "element": {"#": "binding-item"} | 16 | "element": {"#": "binding-item"} |
17 | } | 17 | } |
18 | }, | 18 | }, |
19 | "label": { | 19 | "soProperty": { |
20 | "prototype": "montage/ui/dynamic-text.reel", | 20 | "prototype": "montage/ui/dynamic-text.reel", |
21 | "properties": { | 21 | "properties": { |
22 | "element": {"#": "label"} | 22 | "element": {"#": "so-property"} |
23 | }, | 23 | }, |
24 | "bindings": { | 24 | "bindings": { |
25 | "value": {"<-": "@owner.sourceObjectPropertyPath"} | 25 | "value": {"<-": "@owner.sourceObjectPropertyPath"} |
26 | } | 26 | } |
27 | }, | ||
28 | "soObject": { | ||
29 | "prototype": "montage/ui/dynamic-text.reel", | ||
30 | "properties": { | ||
31 | "element": {"#": "so-object"} | ||
32 | }, | ||
33 | "bindings": { | ||
34 | "value": {"<-": "@owner.sourceObjectLabel"} | ||
35 | } | ||
36 | }, | ||
37 | "boProperty" : { | ||
38 | "prototype": "montage/ui/dynamic-text.reel", | ||
39 | "properties": { | ||
40 | "element": {"#": "bo-property"} | ||
41 | }, | ||
42 | "bindings": { | ||
43 | "value": {"<-": "@owner.boundObjectPropertyPath"} | ||
44 | } | ||
45 | }, | ||
46 | "boObject": { | ||
47 | "prototype": "montage/ui/dynamic-text.reel", | ||
48 | "properties": { | ||
49 | "element": {"#": "bo-object"} | ||
50 | }, | ||
51 | "bindings": { | ||
52 | "value": {"<-": "@owner.boundObjectLabel"} | ||
53 | } | ||
54 | }, | ||
55 | "editButton": { | ||
56 | "prototype": "montage/ui/button.reel", | ||
57 | "properties": { | ||
58 | "element": {"#": "edit-button"}, | ||
59 | "identifier": "editButton", | ||
60 | "label": " " | ||
61 | }, | ||
62 | "listeners": [{ | ||
63 | "type": "action", | ||
64 | "listener": {"@": "owner"} | ||
65 | }] | ||
66 | |||
27 | } | 67 | } |
28 | 68 | ||
29 | } | 69 | } |
@@ -31,7 +71,15 @@ | |||
31 | </head> | 71 | </head> |
32 | <body> | 72 | <body> |
33 | <li data-montage-id="binding-item" class="binding-item"> | 73 | <li data-montage-id="binding-item" class="binding-item"> |
34 | <span data-montage-id="label"></span> | 74 | <div data-montage-id="sourceObject" class="source-object"> |
75 | <span data-montage-id="so-property" class="so-property"></span> | ||
76 | <span data-montage-id="so-object" class="so-object-identifier"></span> | ||
77 | </div> | ||
78 | <div data-montage-id="boundObject" class="bound-object"> | ||
79 | <span data-montage-id="bo-property" class="bo-property"></span> | ||
80 | <span data-montage-id="bo-object" class="bo-object-identifier"></span> | ||
81 | </div> | ||
82 | <button data-montage-id="edit-button" class="binding-edit-button"></button> | ||
35 | </li> | 83 | </li> |
36 | </body> | 84 | </body> |
37 | </html> \ No newline at end of file | 85 | </html> \ No newline at end of file |
diff --git a/js/panels/binding/binding-item.reel/binding-item.js b/js/panels/binding/binding-item.reel/binding-item.js index 9365da65..bda62ef3 100644 --- a/js/panels/binding/binding-item.reel/binding-item.js +++ b/js/panels/binding/binding-item.reel/binding-item.js | |||
@@ -9,8 +9,70 @@ var Montage = require("montage/core/core").Montage, | |||
9 | 9 | ||
10 | 10 | ||
11 | exports.BindingItem = Montage.create(Component, { | 11 | exports.BindingItem = Montage.create(Component, { |
12 | sourceObjectLabel : { value: null }, | ||
13 | boundObjectLabel : { value: null }, | ||
12 | 14 | ||
13 | sourceObjectPropertyPath : { value: null }, | 15 | _sourceObject : { value: null }, |
16 | sourceObject : { | ||
17 | get: function() { | ||
18 | return this._sourceObject; | ||
19 | }, | ||