aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Guzman2012-06-18 18:56:04 -0700
committerEric Guzman2012-06-18 18:56:04 -0700
commita0079f570ce996cb5acbf050a7abb1df1ad788eb (patch)
tree52d4313d8b16a75b409911e7b0a70fb42bbd3d21
parent54674d9160475f1bb72bd7eaacb2da0fb51863f4 (diff)
downloadninja-a0079f570ce996cb5acbf050a7abb1df1ad788eb.tar.gz
Hintable - Fix editable/hintable value property so it is bindable.
-rw-r--r--js/components/editable.reel/editable.js45
-rw-r--r--js/components/hintable.reel/hintable.js36
2 files changed, 41 insertions, 40 deletions
diff --git a/js/components/editable.reel/editable.js b/js/components/editable.reel/editable.js
index 103e418f..88b93b2c 100644
--- a/js/components/editable.reel/editable.js
+++ b/js/components/editable.reel/editable.js
@@ -93,12 +93,43 @@ exports.Editable = Montage.create(Component, {
93 } 93 }
94 } 94 }
95 }, 95 },
96
97 _value : { value: null },
96 value : { 98 value : {
97 get: function() { 99 get : function() { return this._value; },
98 return this._element.textContent; 100 set : function(value) {
99 }, 101 if(value === this._value) { return; }
100 set: function(str) { 102
101 this._element.textContent = str; 103 var node = this._getFirstTextNode();
104 node.textContent = value;
105
106 this._value = value;
107 }
108 },
109 _getFirstTextNode : {
110 value : function(el) {
111 ///// optional el argument specified container element
112 var e = el || this._element,
113 nodes = e.childNodes, node;
114
115 if(nodes.length) {
116 for(var i=0; i<nodes.length; i++) {
117 if(nodes[i].nodeType === 3) {
118 ///// found the first text node
119 node = nodes[i];
120 break;
121 }
122 }
123 }
124
125 ///// Text node not found
126 if(!node) {
127 node = document.createTextNode('');
128 e.appendChild(node);
129 }
130
131
132 return node;
102 } 133 }
103 }, 134 },
104 135
@@ -207,6 +238,8 @@ exports.Editable = Montage.create(Component, {
207 ///// Text input has changed values 238 ///// Text input has changed values
208 handleInput : { 239 handleInput : {
209 value : function(e) { 240 value : function(e) {
241 this.value = this._getFirstTextNode().textContent;
242
210 if(!this.isDirty) { 243 if(!this.isDirty) {
211 this.isDirty = true; 244 this.isDirty = true;
212 } 245 }
@@ -230,6 +263,8 @@ exports.Editable = Montage.create(Component, {
230 value: function(e) { 263 value: function(e) {
231 e.preventDefault(); 264 e.preventDefault();
232 document.execCommand('insertHTML', null, e._event.clipboardData.getData("Text")); 265 document.execCommand('insertHTML', null, e._event.clipboardData.getData("Text"));
266 this.value = this._element.textContent;
267
233 this._sendEvent('paste', e); 268 this._sendEvent('paste', e);
234 } 269 }
235 }, 270 },
diff --git a/js/components/hintable.reel/hintable.js b/js/components/hintable.reel/hintable.js
index e16c5f8a..d09cdbd2 100644
--- a/js/components/hintable.reel/hintable.js
+++ b/js/components/hintable.reel/hintable.js
@@ -140,15 +140,6 @@ exports.Hintable = Montage.create(Editable, {
140 } 140 }
141 } 141 }
142 }, 142 },
143 value : {
144 get: function() {
145 return this._getFirstTextNode().textContent;
146 },
147 set: function(str) {
148 var node = this._getFirstTextNode();
149 node.textContent = str;
150 }
151 },
152 143
153 handleKeydown : { 144 handleKeydown : {
154 value : function handleKeydown(e) { 145 value : function handleKeydown(e) {
@@ -196,6 +187,7 @@ exports.Hintable = Montage.create(Editable, {
196 187
197 this._matchIndex = 0; 188 this._matchIndex = 0;
198 this.matches = this.hints.filter(function(h) { 189 this.matches = this.hints.filter(function(h) {
190 if(!h) { return false; }
199 return h.indexOf(val) === 0; 191 return h.indexOf(val) === 0;
200 }).sort(); 192 }).sort();
201 193
@@ -271,32 +263,6 @@ exports.Hintable = Montage.create(Editable, {
271 return Array.prototype.slice.call(arrayLikeObj); 263 return Array.prototype.slice.call(arrayLikeObj);
272 } 264 }
273 }, 265 },
274 _getFirstTextNode : {
275 value : function(el) {
276 ///// optional el argument specified container element
277 var e = el || this._element,
278 nodes = e.childNodes, node;
279
280 if(nodes.length) {
281 for(var i=0; i<nodes.length; i++) {
282 if(nodes[i].nodeType === 3) {
283 ///// found the first text node
284 node = nodes[i];
285 break;
286 }
287 }
288 }
289
290 ///// Text node not found
291 if(!node) {
292 node = document.createTextNode('');
293 e.appendChild(node);
294 }
295
296
297 return node;
298 }
299 },
300 _super : { 266 _super : {
301 value : function(args) { 267 value : function(args) {
302 this.inheritsFrom[arguments.callee.caller.name].apply(this, args); 268 this.inheritsFrom[arguments.callee.caller.name].apply(this, args);