aboutsummaryrefslogtreecommitdiff
path: root/includes/js/dojox/dtl/contrib/data.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojox/dtl/contrib/data.js')
-rw-r--r--includes/js/dojox/dtl/contrib/data.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/includes/js/dojox/dtl/contrib/data.js b/includes/js/dojox/dtl/contrib/data.js
new file mode 100644
index 0000000..5ca3aa7
--- /dev/null
+++ b/includes/js/dojox/dtl/contrib/data.js
@@ -0,0 +1,89 @@
+if(!dojo._hasResource["dojox.dtl.contrib.data"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.contrib.data"] = true;
+dojo.provide("dojox.dtl.contrib.data");
+dojo.require("dojox.dtl._base");
+
+(function(){
+ var dd = dojox.dtl;
+ var ddcd = dd.contrib.data;
+
+ ddcd._BoundItem = dojo.extend(function(item, store){
+ this.item = item;
+ this.store = store;
+ },
+ {
+ get: function(key){
+ var store = this.store;
+ var item = this.item;
+
+ if(key == "getLabel"){
+ return store.getLabel(item);
+ }else if(key == "getAttributes"){
+ return store.getAttributes(item);
+ }else if(key == "getIdentity"){
+ if(store.getIdentity){
+ return store.getIdentity(item);
+ }
+ return "Store has no identity API";
+ }else{
+ if(store.hasAttribute(item, key)){
+ var value = store.getValue(item, key);
+ return (dojo.isObject(value) && store.isItem(value)) ? new ddcd._BoundItem(value, store) : value;
+ }else if(key.slice(-1) == "s" && store.hasAttribute(item, key.slice(0, -1))){
+ return dojo.map(store.getValues(item, key.slice(0, -1)), function(value){
+ return (dojo.isObject(value) && store.isItem(value)) ? new ddcd._BoundItem(value, store) : value;
+ });
+ }
+ }
+ }
+ });
+
+ ddcd.BindDataNode = dojo.extend(function(items, store, alias){
+ this.items = new dd._Filter(items);
+ this.store = new dd._Filter(store);
+ this.alias = alias;
+ },
+ {
+ render: function(context, buffer){
+ var items = this.items.resolve(context);
+ var store = this.store.resolve(context);
+ if(!store){
+ throw new Error("data_bind didn't receive a store");
+ }
+
+ var list = [];
+ if(items){
+ for(var i = 0, item; item = items[i]; i++){
+ list.push(new ddcd._BoundItem(item, store));
+ }
+ }
+
+ context[this.alias] = list;
+ return buffer;
+ },
+ unrender: function(context, buffer){
+ return buffer;
+ },
+ clone: function(){
+ return this;
+ }
+ });
+
+ dojo.mixin(ddcd, {
+ bind_data: function(parser, text){
+ var parts = dd.text.pySplit(text);
+
+ if(parts[2] != 'to' || parts[4] != 'as' || !parts[5]){
+ throw new Error("data_bind expects the format: 'data_bind items to store as varName'");
+ }
+
+ return new ddcd.BindDataNode(parts[1], parts[3], parts[5]);
+ }
+ });
+
+ dd.register.tags("dojox.dtl.contrib", {
+ "data": ["bind_data"]
+ });
+})();
+
+}