Skip to content

Commit 8891df2

Browse files
committed
Fixes on simplified API
1 parent e0e3b4d commit 8891df2

10 files changed

Lines changed: 241 additions & 54 deletions

dist/helden.core.min.js

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/helden.ui.min.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/heldenjs-0.2.0.min.js

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 98 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ window.helden = (function(){
1212
/**
1313
* observable implementation of array
1414
*/
15-
function ObservableArray( onAdd, onRemove ){
15+
function ObservableArray( onAdd, onRemove, onUpdate ){
1616
this.onAdd = onAdd
1717
this.onRemove = onRemove
18+
this.onUpdate = onUpdate
1819
this.length = 0
1920
var counter = 0
2021
var array = []
@@ -100,6 +101,7 @@ window.helden = (function(){
100101
var name = null
101102
var model = new ObservableArray()
102103
var onChange = DO_NOTHING
104+
var autoRemoveTemplate = true
103105
this.selector = selector
104106

105107
this.onChange = function( callback ){
@@ -109,12 +111,19 @@ window.helden = (function(){
109111
return this
110112
}
111113

114+
this.autoRemoveTemplate = function( value ){
115+
if ( value != null && value != undefined )
116+
autoRemoveTemplate = value
117+
return this
118+
}
119+
112120
this.configure = function( view, originalModel, defaultValue, parentModel ) {
113121

114122
name = this.selector.replace(/[^a-zA-Z0-9]/g, '')
115123
var parent = view.parent()
116124
var template = view.clone()
117-
view.remove()
125+
if ( autoRemoveTemplate )
126+
view.remove()
118127

119128
model.onAdd = function( index, item ){
120129
var clone = template.clone()
@@ -234,7 +243,7 @@ window.helden = (function(){
234243
var objview = obj.selector ? view.find( obj.selector ) : view
235244
var resp = obj.configure( objview, target, defaultValue, parentModel )
236245
resp.$ = objview
237-
target[attr] = resp
246+
target[attr] = wrap( resp, obj )
238247
}
239248
}
240249
return target
@@ -244,6 +253,66 @@ window.helden = (function(){
244253
return (typeof obj) == 'function'
245254
}
246255

256+
function wasDefined( value ){
257+
return ( value != undefined && value != null )
258+
}
259+
260+
function wrap( method, target ){
261+
var wrapped = method.bind( target )
262+
wrapped.is_wrapped = true
263+
return wrapped
264+
}
265+
266+
function unwrap( object ){
267+
268+
function unwrap_array(object){
269+
var arr = []
270+
for ( var i=0; i<object.length; i++ )
271+
var value = unwrap( object[i] )
272+
if ( value != undefined )
273+
arr.push( value )
274+
return arr
275+
}
276+
277+
function unwrap_oarray(object){
278+
var arr = []
279+
for ( var i=0; i<object.length; i++ ){
280+
var value = unwrap( object.get(i) )
281+
if ( value != undefined )
282+
arr.push( value )
283+
}
284+
return arr
285+
}
286+
287+
function unwrap_object( object ){
288+
var obj = {}
289+
for ( var attr in object ){
290+
if ( !H.unserializableAttributes[attr] ){
291+
var value = unwrap( object[attr] )
292+
if ( value != undefined )
293+
obj[attr] = value
294+
}
295+
}
296+
return obj
297+
}
298+
299+
function unwrap_method( method ){
300+
if ( method.is_wrapped )
301+
return method()
302+
}
303+
304+
if ( object instanceof helden.ObservableArray )
305+
return unwrap_oarray( object )
306+
else if ( object instanceof Array )
307+
return unwrap_array( object )
308+
else if ( (typeof object) == 'function' )
309+
return unwrap_method( object )
310+
else if ( (typeof object) == 'object' )
311+
return unwrap_object( object )
312+
else
313+
return object
314+
}
315+
247316
/**
248317
* A reflective constructor instantiator
249318
*/
@@ -313,12 +382,25 @@ window.helden = (function(){
313382
*/
314383
Selector.extensions = {
315384

385+
accessor: function( initialValue ){
386+
387+
this.configure = function( view, model, newValue ){
388+
var value = newValue
389+
return function( newValue ){
390+
if ( wasDefined( newValue ) )
391+
value = newValue
392+
return value
393+
}
394+
}
395+
396+
},
397+
316398
bindAttr: function( attr ){
317399
this.configure = function( view, model, value ) {
318400
var method = function( newValue ){
319401
if ( wasDefined( newValue ) )
320-
model.attr( attr, newValue )
321-
return model.attr( attr )
402+
view.attr( attr, newValue )
403+
return view.attr( attr )
322404
}
323405

324406
if ( wasDefined( value ) )
@@ -356,12 +438,18 @@ window.helden = (function(){
356438
ObservableArray: ObservableArray,
357439

358440
dsl: {
441+
unserializableAttributes:{
442+
toJS: true,
443+
ID_ForEachBinder: true
444+
},
359445
observable: makeModelObservable,
360446
observeAView: makeModelObserveAView,
361447
bindAttr: Selector.extensions.bindAttr,
362448
bindProp: Selector.extensions.bindProp,
363449
bindCss: Selector.extensions.bindCss,
364450
bind: Selector.prototype.bind,
451+
wasDefined: wasDefined,
452+
toJS: unwrap,
365453
select: function()
366454
{
367455
if ( arguments.length == 1 && ( typeof arguments[0] ) == "string" )
@@ -370,11 +458,13 @@ window.helden = (function(){
370458
}
371459
}
372460
}
461+
462+
Selector.apply( helden.dsl )
373463
return helden
374464
})()
375465

376466
window.H = helden.dsl
377-
if ( (typeof noGlobals)=="undefined" )
467+
if ( (typeof useGlobals) != "undefined" )
378468
for ( var attr in H )
379469
if ( !window[attr] )
380470
window[attr] = H[attr]
@@ -384,10 +474,6 @@ if ( (typeof noGlobals)=="undefined" )
384474
*/
385475
!function(){
386476

387-
function wasDefined( value ){
388-
return ( value != undefined && value != null )
389-
}
390-
391477
/**
392478
* Defines if a view should be visible or not
393479
*/
@@ -397,7 +483,7 @@ if ( (typeof noGlobals)=="undefined" )
397483
this.configure = function( view, model, value )
398484
{
399485
var method = function( v ){
400-
if ( wasDefined( v ) )
486+
if ( H.wasDefined( v ) )
401487
setValue( v )
402488
return isVisible
403489
}
@@ -409,7 +495,7 @@ if ( (typeof noGlobals)=="undefined" )
409495
isVisible = v
410496
}
411497

412-
value = wasDefined( value ) ? value : isVisible
498+
value = H.wasDefined( value ) ? value : isVisible
413499
method( value )
414500
return method
415501
}

0 commit comments

Comments
 (0)