dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
99 lines (95 loc) • 2.69 kB
JavaScript
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);
}
}
}
};
});