1e6b3edf by Michael Richards

Build 0.3.6.

1 parent 078497e0
1 // rivets.js 1 // rivets.js
2 // version: 0.3.5 2 // version: 0.3.6
3 // author: Michael Richards 3 // author: Michael Richards
4 // license: MIT 4 // license: MIT
5 (function() { 5 (function() {
...@@ -26,14 +26,18 @@ ...@@ -26,14 +26,18 @@
26 this.options = options != null ? options : {}; 26 this.options = options != null ? options : {};
27 this.unbind = __bind(this.unbind, this); 27 this.unbind = __bind(this.unbind, this);
28 28
29 this.bind = __bind(this.bind, this);
30
29 this.publish = __bind(this.publish, this); 31 this.publish = __bind(this.publish, this);
30 32
31 this.bind = __bind(this.bind, this); 33 this.sync = __bind(this.sync, this);
32 34
33 this.set = __bind(this.set, this); 35 this.set = __bind(this.set, this);
34 36
35 this.formattedValue = __bind(this.formattedValue, this); 37 this.formattedValue = __bind(this.formattedValue, this);
36 38
39 this.isBidirectional = __bind(this.isBidirectional, this);
40
37 this.routine = (function() { 41 this.routine = (function() {
38 switch (this.options.special) { 42 switch (this.options.special) {
39 case "event": 43 case "event":
...@@ -49,7 +53,10 @@ ...@@ -49,7 +53,10 @@
49 this.formatters = this.options.formatters || []; 53 this.formatters = this.options.formatters || [];
50 } 54 }
51 55
52 Binding.prototype.bidirectionals = ['value', 'checked', 'unchecked']; 56 Binding.prototype.isBidirectional = function() {
57 var _ref;
58 return (_ref = this.type) === 'value' || _ref === 'checked' || _ref === 'unchecked';
59 };
53 60
54 Binding.prototype.formattedValue = function(value) { 61 Binding.prototype.formattedValue = function(value) {
55 var args, formatter, id, _i, _len, _ref, _ref1, _ref2; 62 var args, formatter, id, _i, _len, _ref, _ref1, _ref2;
...@@ -75,52 +82,48 @@ ...@@ -75,52 +82,48 @@
75 } 82 }
76 }; 83 };
77 84
85 Binding.prototype.sync = function() {
86 return this.set(this.options.bypass ? this.model[this.keypath] : Rivets.config.adapter.read(this.model, this.keypath));
87 };
88
89 Binding.prototype.publish = function() {
90 return Rivets.config.adapter.publish(this.model, this.keypath, getInputValue(this.el));
91 };
92
78 Binding.prototype.bind = function() { 93 Binding.prototype.bind = function() {
79 var callback, keypath, _i, _len, _ref, _ref1, _ref2, 94 var keypath, _i, _len, _ref, _ref1;
80 _this = this;
81 if (this.options.bypass) { 95 if (this.options.bypass) {
82 this.set(this.model[this.keypath]); 96 this.sync();
83 } else { 97 } else {
84 Rivets.config.adapter.subscribe(this.model, this.keypath, this.set); 98 Rivets.config.adapter.subscribe(this.model, this.keypath, this.sync);
85 if (Rivets.config.preloadData) { 99 if (Rivets.config.preloadData) {
86 this.set(Rivets.config.adapter.read(this.model, this.keypath)); 100 this.sync();
87 } 101 }
88 } 102 }
89 if ((_ref = this.options.dependencies) != null ? _ref.length : void 0) { 103 if ((_ref = this.options.dependencies) != null ? _ref.length : void 0) {
90 this.dependencyCallbacks = {};
91 _ref1 = this.options.dependencies; 104 _ref1 = this.options.dependencies;
92 for (_i = 0, _len = _ref1.length; _i < _len; _i++) { 105 for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
93 keypath = _ref1[_i]; 106 keypath = _ref1[_i];
94 callback = this.dependencyCallbacks[keypath] = function(value) { 107 Rivets.config.adapter.subscribe(this.model, keypath, this.sync);
95 return _this.set(_this.options.bypass ? _this.model[_this.keypath] : Rivets.config.adapter.read(_this.model, _this.keypath));
96 };
97 Rivets.config.adapter.subscribe(this.model, keypath, callback);
98 } 108 }
99 } 109 }
100 if (_ref2 = this.type, __indexOf.call(this.bidirectionals, _ref2) >= 0) { 110 if (this.isBidirectional()) {
101 return bindEvent(this.el, 'change', this.publish); 111 return bindEvent(this.el, 'change', this.publish);
102 } 112 }
103 }; 113 };
104 114
105 Binding.prototype.publish = function(e) {
106 var el;
107 el = e.target || e.srcElement;
108 return Rivets.config.adapter.publish(this.model, this.keypath, getInputValue(el));
109 };
110
111 Binding.prototype.unbind = function() { 115 Binding.prototype.unbind = function() {
112 var callback, keypath, _i, _len, _ref, _ref1, _ref2; 116 var keypath, _i, _len, _ref, _ref1;
113 if (!this.options.bypass) { 117 if (!this.options.bypass) {
114 Rivets.config.adapter.unsubscribe(this.model, this.keypath, this.set); 118 Rivets.config.adapter.unsubscribe(this.model, this.keypath, this.sync);
115 if ((_ref = this.options.dependencies) != null ? _ref.length : void 0) { 119 if ((_ref = this.options.dependencies) != null ? _ref.length : void 0) {
116 _ref1 = this.options.dependencies; 120 _ref1 = this.options.dependencies;
117 for (_i = 0, _len = _ref1.length; _i < _len; _i++) { 121 for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
118 keypath = _ref1[_i]; 122 keypath = _ref1[_i];
119 callback = this.dependencyCallbacks[keypath]; 123 Rivets.config.adapter.unsubscribe(this.model, keypath, this.sync);
120 Rivets.config.adapter.unsubscribe(this.model, keypath, callback);
121 } 124 }
122 } 125 }
123 if (_ref2 = this.type, __indexOf.call(this.bidirectionals, _ref2) >= 0) { 126 if (this.isBidirectional()) {
124 return this.el.removeEventListener('change', this.publish); 127 return this.el.removeEventListener('change', this.publish);
125 } 128 }
126 } 129 }
...@@ -135,10 +138,16 @@ ...@@ -135,10 +138,16 @@
135 function View(els, models) { 138 function View(els, models) {
136 this.els = els; 139 this.els = els;
137 this.models = models; 140 this.models = models;
141 this.publish = __bind(this.publish, this);
142
143 this.sync = __bind(this.sync, this);
144
138 this.unbind = __bind(this.unbind, this); 145 this.unbind = __bind(this.unbind, this);
139 146
140 this.bind = __bind(this.bind, this); 147 this.bind = __bind(this.bind, this);
141 148
149 this.select = __bind(this.select, this);
150
142 this.build = __bind(this.build, this); 151 this.build = __bind(this.build, this);
143 152
144 this.bindingRegExp = __bind(this.bindingRegExp, this); 153 this.bindingRegExp = __bind(this.bindingRegExp, this);
...@@ -264,6 +273,19 @@ ...@@ -264,6 +273,19 @@
264 } 273 }
265 }; 274 };
266 275
276 View.prototype.select = function(fn) {
277 var binding, _i, _len, _ref, _results;
278 _ref = this.bindings;
279 _results = [];
280 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
281 binding = _ref[_i];
282 if (fn(binding)) {
283 _results.push(binding);
284 }
285 }
286 return _results;
287 };
288
267 View.prototype.bind = function() { 289 View.prototype.bind = function() {
268 var binding, _i, _len, _ref, _results; 290 var binding, _i, _len, _ref, _results;
269 _ref = this.bindings; 291 _ref = this.bindings;
...@@ -286,6 +308,30 @@ ...@@ -286,6 +308,30 @@
286 return _results; 308 return _results;
287 }; 309 };
288 310
311 View.prototype.sync = function() {
312 var binding, _i, _len, _ref, _results;
313 _ref = this.bindings;
314 _results = [];
315 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
316 binding = _ref[_i];
317 _results.push(binding.sync());
318 }
319 return _results;
320 };
321
322 View.prototype.publish = function() {
323 var binding, _i, _len, _ref, _results;
324 _ref = this.select(function(b) {
325 return b.isBidirectional();
326 });
327 _results = [];
328 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
329 binding = _ref[_i];
330 _results.push(binding.publish());
331 }
332 return _results;
333 };
334
289 return View; 335 return View;
290 336
291 })(); 337 })();
......
1 { 1 {
2 "name" : "rivets", 2 "name" : "rivets",
3 "description" : "Declarative data binding facility.", 3 "description" : "Declarative data binding facility.",
4 "version" : "0.3.5", 4 "version" : "0.3.6",
5 "author" : "Michael Richards", 5 "author" : "Michael Richards",
6 "url" : "http://rivetsjs.com", 6 "url" : "http://rivetsjs.com",
7 "main" : "./lib/rivets.js", 7 "main" : "./lib/rivets.js",
......
1 # rivets.js 1 # rivets.js
2 # version : 0.3.5 2 # version : 0.3.6
3 # author : Michael Richards 3 # author : Michael Richards
4 # license : MIT 4 # license : MIT
5 5
......