You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.6 KiB
99 lines
2.6 KiB
define(["dojo/_base/array"], function(arr){ |
|
var constraints = []; |
|
return { |
|
getSelectedChild: function(view, constraint){ |
|
// summary: |
|
// get current selected child according to the constraint |
|
// |
|
// view: View |
|
// the View to get the child from |
|
// constraint: Object |
|
// tbe constraint object |
|
// |
|
// returns: |
|
// the selected child view for this constraint |
|
var type = typeof(constraint); |
|
var hash = (type == "string" || type == "number") ? constraint : constraint.__hash; |
|
return (view && view.selectedChildren && view.selectedChildren[hash]) ? |
|
view.selectedChildren[hash] : null; |
|
}, |
|
|
|
setSelectedChild: function(view, constraint, child){ |
|
// summary: |
|
// set current selected child according to the constraint |
|
// |
|
// view: View |
|
// the View to set the selected child to |
|
// constraint: Object |
|
// tbe constraint object |
|
// child: View |
|
// the child to select |
|
var type = typeof(constraint); |
|
var hash = (type == "string" || type == "number") ? constraint : constraint.__hash; |
|
view.selectedChildren[hash] = child; |
|
}, |
|
|
|
|
|
getAllSelectedChildren: function(view, selChildren){ |
|
// summary: |
|
// get current all selected children for this view and it's selected subviews |
|
// |
|
// view: View |
|
// the View to get the child from |
|
// |
|
// selChildren: Array |
|
// the Array of the subChildren found |
|
// |
|
// returns: |
|
// selChildren array of all of the selected child views |
|
// |
|
selChildren = selChildren || []; |
|
if(view && view.selectedChildren){ |
|
for(var hash in view.selectedChildren){ |
|
if(view.selectedChildren[hash]){ |
|
var subChild = view.selectedChildren[hash]; |
|
selChildren.push(subChild); |
|
this.getAllSelectedChildren(subChild, selChildren); |
|
} |
|
} |
|
} |
|
return selChildren; |
|
}, |
|
|
|
register: function(constraint){ |
|
// if the constraint has already been registered we don't care about it... |
|
var type = typeof(constraint); |
|
if(!constraint.__hash && type != "string" && type != "number"){ |
|
var match = null; |
|
arr.some(constraints, function(item){ |
|
var ok = true; |
|
for(var prop in item){ |
|
if(prop.charAt(0) !== "_"){//skip the private properties |
|
if(item[prop] != constraint[prop]){ |
|
ok = false; |
|
break; |
|
} |
|
} |
|
} |
|
if(ok == true){ |
|
match = item; |
|
} |
|
return ok; |
|
}); |
|
if(match){ |
|
constraint.__hash = match.__hash; |
|
}else{ |
|
// create a new "hash" |
|
var hash = ""; |
|
for(var prop in constraint){ |
|
if(prop.charAt(0) !== "_"){ |
|
hash += constraint[prop]; |
|
} |
|
} |
|
constraint.__hash = hash; |
|
constraints.push(constraint); |
|
} |
|
} |
|
} |
|
}; |
|
}); |