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); } }; }