New file |
0,0 → 1,195 |
if(!dojo._hasResource["dojox.wire._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.wire._base"] = true; |
dojo.provide("dojox.wire._base"); |
|
dojox.wire._defaultWireClass = "dojox.wire.Wire"; |
|
dojox.wire._wireClasses = { |
"attribute": "dojox.wire.DataWire", |
"path": "dojox.wire.XmlWire", |
"children": "dojox.wire.CompositeWire", |
"columns": "dojox.wire.TableAdapter", |
"nodes": "dojox.wire.TreeAdapter", |
"segments": "dojox.wire.TextAdapter" |
}; |
|
dojox.wire.register = function(/*Function||String*/wireClass, /*String*/key){ |
// summary: |
// Register a Wire class |
// desription: |
// The specified Wire class or a class name is registered with |
// a key property of arguments to create a Wire |
// wireClass: |
// A class or full qualified class name |
// key: |
// A key property of arguments to create a Wire |
if(!wireClass || !key){ |
return; //undefined |
} |
if(dojox.wire._wireClasses[key]){ // key already in use |
return; //undefined |
} |
dojox.wire._wireClasses[key] = wireClass; |
}; |
|
dojox.wire._getClass = function(/*String*/name){ |
// summary: |
// Returns a class |
// description: |
// The class is loaded by dojo.require() and returned |
// by dojo.getObject(). |
// name: |
// A class name |
// returns: |
// A class |
dojo["require"](name); // use dojo["require"] instead of dojo.require to avoid a build problem |
return dojo.getObject(name); //Function |
}; |
|
dojox.wire.create = function(/*Object*/args){ |
// summary: |
// Create a Wire from arguments |
// description: |
// If 'args' specifies 'wireClass', it is used as a class or full |
// qualified class name to create a Wire with 'args' as arguments. |
// Otherwise, a Wire class is determined by other proeprties of 'args' |
// checking if 'args' specifies a key property for a Wire class. |
// If no key property found, the default Wire class is used. |
// args: |
// Arguments to create a Wire |
// returns: |
// A Wire |
if(!args){ |
args = {}; |
} |
var wireClass = args.wireClass; |
if(wireClass){ |
if(dojo.isString(wireClass)){ |
wireClass = dojox.wire._getClass(wireClass); |
} |
}else{ |
for(var key in args){ |
if(!args[key]){ |
continue; |
} |
wireClass = dojox.wire._wireClasses[key]; |
if(wireClass){ |
if(dojo.isString(wireClass)){ |
wireClass = dojox.wire._getClass(wireClass); |
dojox.wire._wireClasses[key] = wireClass; |
} |
break; |
} |
} |
} |
if(!wireClass){ |
if(dojo.isString(dojox.wire._defaultWireClass)){ |
dojox.wire._defaultWireClass = dojox.wire._getClass(dojox.wire._defaultWireClass); |
} |
wireClass = dojox.wire._defaultWireClass; |
} |
return new wireClass(args); //Object |
}; |
|
dojox.wire.isWire = function(/*Object*/wire){ |
// summary: |
// Check if an object is a Wire |
// description: |
// If the specified object is a Wire, true is returned. |
// Otherwise, false is returned. |
// wire: |
// An object to check |
// returns: |
// True if the object is a Wire, otherwise false |
return (wire && wire._wireClass); //Boolean |
}; |
|
dojox.wire.transfer = function(/*Wire||Object*/source, /*Wire||Object*/target, /*Object?*/defaultObject, /*Object?*/defaultTargetObject){ |
// summary: |
// Transfer a source value to a target value |
// description: |
// If 'source' and/or 'target' are not Wires, Wires are created with |
// them as arguments. |
// A value is got through the source Wire and set through the target |
// Wire. |
// 'defaultObject' is passed to Wires as a default root object. |
// If 'defaultTargetObject' is specified, it is passed to the target |
// Wire as a default root object, instead of 'defaultObject'. |
// source: |
// A Wire or arguments to create a Wire for a source value |
// target: |
// A Wire or arguments to create a Wire for a target value |
// defaultObject: |
// defaultTargetObject; |
// Optional default root objects passed to Wires |
if(!source || !target){ |
return; //undefined |
} |
if(!dojox.wire.isWire(source)){ |
source = dojox.wire.create(source); |
} |
if(!dojox.wire.isWire(target)){ |
target = dojox.wire.create(target); |
} |
|
var value = source.getValue(defaultObject); |
target.setValue(value, (defaultTargetObject || defaultObject)); |
}; |
|
dojox.wire.connect = function(/*Object*/trigger, /*Wire||Object*/source, /*Wire||Object*/target){ |
// summary: |
// Transfer a source value to a target value on a trigger event or |
// topic |
// description: |
// If 'trigger' specifies 'topic', the topic is subscribed to transer |
// a value on the topic. |
// Otherwise, the event specified to 'event' of 'trigger' is listened |
// to transfer a value. |
// On the specified event or topic, transfer() is called with |
// 'source', 'target' and the arguments of the event or topic (as |
// default root objects). |
// trigger: |
// An event or topic to trigger a transfer |
// source: |
// A Wire or arguments to create a Wire for a source value |
// target: |
// A Wire or arguments to create a Wire for a target value |
// returns: |
// A connection handle for disconnect() |
if(!trigger || !source || !target){ |
return; //undefined |
} |
|
var connection = {topic: trigger.topic}; |
if(trigger.topic){ |
connection.handle = dojo.subscribe(trigger.topic, function(){ |
dojox.wire.transfer(source, target, arguments); |
}); |
}else if(trigger.event){ |
connection.handle = dojo.connect(trigger.scope, trigger.event, function(){ |
dojox.wire.transfer(source, target, arguments); |
}); |
} |
return connection; //Object |
}; |
|
dojox.wire.disconnect = function(/*Object*/connection){ |
// summary: |
// Remove a connection or subscription for transfer |
// description: |
// If 'handle' has 'topic', the topic is unsubscribed. |
// Otherwise, the listener to an event is removed. |
// connection: |
// A connection handle returned by connect() |
if(!connection || !connection.handle){ |
return; //undefined |
} |
|
if(connection.topic){ |
dojo.unsubscribe(connection.handle); |
}else{ |
dojo.disconnect(connection.handle); |
} |
}; |
|
} |