123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 |
- if (!dojo._hasResource["dojox.wire.ml.Transfer"]) { // _hasResource checks added
- // by build. Do not use
- // _hasResource directly in
- // your code.
- dojo._hasResource["dojox.wire.ml.Transfer"] = true;
- dojo.provide("dojox.wire.ml.Transfer");
- dojo.provide("dojox.wire.ml.ChildWire");
- dojo.provide("dojox.wire.ml.ColumnWire");
- dojo.provide("dojox.wire.ml.NodeWire");
- dojo.provide("dojox.wire.ml.SegmentWire");
- dojo.require("dijit._Widget");
- dojo.require("dijit._Container");
- dojo.require("dojox.wire._base");
- dojo.require("dojox.wire.ml.Action");
- dojo.declare("dojox.wire.ml.Transfer", dojox.wire.ml.Action, {
- // summary:
- // A widget to transfer values through source and target Wires
- // description:
- // This widget represents a controller task to transfer a value
- // from
- // a source to a target, through a source and a target Wires,
- // when
- // an event (a function) or a topic is issued.
- // If this widget has child ChildWire widgets, their _addWire()
- // methods are called to add Wire arguments to a source or a
- // target
- // Wire.
- // source:
- // A source object and/or property
- // sourceStore:
- // A data store for a source data item
- // sourceAttribute:
- // An attribute of a source data item
- // sourcePath:
- // A simplified XPath to a source property of an XML element
- // type:
- // A type of the value to be transferred
- // converter:
- // A class name of a converter for the value to be transferred
- // target:
- // A target object and/or property
- // targetStore:
- // A data store for a target data item
- // targetAttribute:
- // An attribute of a target data item
- // targetPath:
- // A simplified XPath to a target property of an XML element
- source : "",
- sourceStore : "",
- sourceAttribute : "",
- sourcePath : "",
- type : "",
- converter : "",
- delimiter : "",
- target : "",
- targetStore : "",
- targetAttribute : "",
- targetPath : "",
- _run : function() {
- // summary:
- // Transfer a value from a source to a target
- // description:
- // First, Wires for a source and a target are created from
- // attributes.
- // Then, a value is obtained by getValue() of the source
- // Wire is set
- // by setValue() of the target Wire.
- // The arguments to this method is passed to getValue() and
- // setValue()
- // of Wires, so that they can be used to identify the root
- // objects off
- // the arguments.
- var sourceWire = this._getWire("source");
- var targetWire = this._getWire("target");
- dojox.wire.transfer(sourceWire, targetWire, arguments);
- },
- _getWire : function(/* String */which) {
- // summary:
- // Build Wire arguments from attributes
- // description:
- // Arguments object for a source or a target Wire, specified
- // by
- // 'which' argument, are build from corresponding
- // attributes,
- // including '*Store' (for 'dataStore'), '*Attribute'
- // (for 'attribute), '*Path' (for 'path'), 'type' and
- // 'converter'.
- // 'source' or 'target' attribute is parsed as:
- // "object_id.property_name[.sub_property_name...]"
- // If 'source' or 'target' starts with "arguments", 'object'
- // argument for a Wire is set to null, so that the root
- // object is
- // given as an event or topic arguments.
- // If this widget has child ChildWire widgets with a
- // corresponding
- // 'which' attribute, their _addWire() methods are called to
- // add
- // additional Wire arguments and nested Wire is created,
- // specifying the Wire defined by this widget to 'object'
- // argument.
- // which:
- // Which Wire arguments to build, "source" or "target"
- // returns:
- // Wire arguments object
- var args = undefined;
- if (which == "source") {
- args = {
- object : this.source,
- dataStore : this.sourceStore,
- attribute : this.sourceAttribute,
- path : this.sourcePath,
- type : this.type,
- converter : this.converter
- };
- } else { // "target"
- args = {
- object : this.target,
- dataStore : this.targetStore,
- attribute : this.targetAttribute,
- path : this.targetPath
- };
- }
- if (args.object) {
- if (args.object.length >= 9
- && args.object.substring(0, 9) == "arguments") {
- args.property = args.object.substring(9);
- args.object = null;
- } else {
- var i = args.object.indexOf('.');
- if (i < 0) {
- args.object = dojox.wire.ml
- ._getValue(args.object);
- } else {
- args.property = args.object.substring(i + 1);
- args.object = dojox.wire.ml
- ._getValue(args.object.substring(0, i));
- }
- }
- }
- if (args.dataStore) {
- args.dataStore = dojox.wire.ml
- ._getValue(args.dataStore);
- }
- var childArgs = undefined;
- var children = this.getChildren();
- for (var i in children) {
- var child = children[i];
- if (child instanceof dojox.wire.ml.ChildWire
- && child.which == which) {
- if (!childArgs) {
- childArgs = {};
- }
- child._addWire(this, childArgs);
- }
- }
- if (childArgs) { // make nested Wires
- childArgs.object = dojox.wire.create(args);
- childArgs.dataStore = args.dataStore;
- args = childArgs;
- }
- return args; // Object
- }
- });
- dojo.declare("dojox.wire.ml.ChildWire", dijit._Widget, {
- // summary:
- // A widget to add a child wire
- // description:
- // Attributes of this widget are used to add a child Wire to
- // a composite Wire of the parent Transfer widget.
- // which:
- // Which Wire to add a child Wire, "source" or "target", default
- // to
- // "source"
- // object:
- // A root object for the value
- // property:
- // A property for the value
- // type:
- // A type of the value
- // converter:
- // A class name of a converter for the value
- // attribute:
- // A data item attribute for the value
- // path:
- // A simplified XPath for the value
- // name:
- // A composite property name
- which : "source",
- object : "",
- property : "",
- type : "",
- converter : "",
- attribute : "",
- path : "",
- name : "",
- _addWire : function(/* Transfer */parent, /* Object */args) {
- // summary:
- // Add a child Wire to Wire arguments
- // description:
- // If 'name' attribute is specified, a child Wire is added
- // as
- // the named property of 'children' object of 'args'.
- // Otherwise, a child Wire is added to 'children' array of
- // 'args'.
- // parent:
- // A parent Transfer widget
- // args:
- // Wire arguments
- if (this.name) { // object
- if (!args.children) {
- args.children = {};
- }
- args.children[this.name] = this._getWire(parent);
- } else { // array
- if (!args.children) {
- args.children = [];
- }
- args.children.push(this._getWire(parent));
- }
- },
- _getWire : function(/* Transfer */parent) {
- // summary:
- // Build child Wire arguments from attributes
- // description:
- // Arguments object for a child Wire are build from
- // attributes,
- // including 'object', 'property', 'type', 'converter',
- // 'attribute' and 'path'.
- // parent:
- // A parent Transfer widget
- // returns:
- // Wire arguments object
- return {
- object : (this.object ? dojox.wire.ml
- ._getValue(this.object) : undefined),
- property : this.property,
- type : this.type,
- converter : this.converter,
- attribute : this.attribute,
- path : this.path
- }; // Object
- }
- });
- dojo.declare("dojox.wire.ml.ColumnWire", dojox.wire.ml.ChildWire, {
- // summary:
- // A widget to add a column wire
- // description:
- // Attributes of this widget are used to add a column Wire to
- // a TableAdapter of the parent Transfer widget.
- // column:
- // A column name
- column : "",
- _addWire : function(/* Transfer */parent, /* Object */args) {
- // summary:
- // Add a column Wire to Wire arguments
- // description:
- // If 'column' attribute is specified, a column Wire is
- // added as
- // the named property of 'columns' object of 'args'.
- // Otherwise, a column Wire is added to 'columns' array of
- // 'args'.
- // parent:
- // A parent Transfer widget
- // args:
- // Wire arguments
- if (this.column) { // object
- if (!args.columns) {
- args.columns = {};
- }
- args.columns[this.column] = this._getWire(parent);
- } else { // array
- if (!args.columns) {
- args.columns = [];
- }
- args.columns.push(this._getWire(parent));
- }
- }
- });
- dojo.declare("dojox.wire.ml.NodeWire", [dojox.wire.ml.ChildWire,
- dijit._Container], {
- // summary:
- // A widget to add node wires
- // description:
- // Attributes of this widget are used to add node Wires to
- // a TreeAdapter of the parent Transfer widget.
- // titleProperty:
- // A property for the node title
- // titleAttribute:
- // A data item attribute for the node title
- // titlePath:
- // A simplified XPath for the node title
- titleProperty : "",
- titleAttribute : "",
- titlePath : "",
- _addWire : function(/* Transfer */parent, /* Object */args) {
- // summary:
- // Add node Wires to Wire arguments
- // description:
- // Node Wires are added to 'nodes' array of 'args'.
- // parent:
- // A parent Transfer widget
- // args:
- // Wire arguments
- if (!args.nodes) {
- args.nodes = [];
- }
- args.nodes.push(this._getWires(parent));
- },
- _getWires : function(/* Transfer */parent) {
- // summary:
- // Build node Wires arguments from attributes
- // description:
- // Arguments object for 'node' Wire are build from
- // attributes,
- // including 'object', 'property', 'type', 'converter',
- // 'attribute' and 'path'.
- // Arguments object for 'title' Wire are build from another
- // set of
- // attributes, 'titleProperty', 'titleAttribute' and
- // 'titlePath'.
- // If this widget has child NodeWire widgets, their
- // _getWires()
- // methods are called recursively to build 'children' array
- // of
- // 'args'.
- // parent:
- // A parent Transfer widget
- // returns:
- // Wire arguments object
- var args = {
- node : this._getWire(parent),
- title : {
- type : "string",
- property : this.titleProperty,
- attribute : this.titleAttribute,
- path : this.titlePath
- }
- };
- var childArgs = [];
- var children = this.getChildren();
- for (var i in children) {
- var child = children[i];
- if (child instanceof dojox.wire.ml.NodeWire) {
- childArgs.push(child._getWires(parent));
- }
- }
- if (childArgs.length > 0) {
- args.children = childArgs;
- }
- return args; // Object
- }
- });
- dojo.declare("dojox.wire.ml.SegmentWire", dojox.wire.ml.ChildWire, {
- // summary:
- // A widget to add a segment wire
- // description:
- // Attributes of this widget are used to add a segment Wire to
- // a TextAdapter of the parent Transfer widget.
- _addWire : function(/* Transfer */parent, /* Object */args) {
- // summary:
- // Add a segument Wire to Wire arguments
- // description:
- // A segment Wire is added to 'segments' array of 'args'.
- // If 'parent' has 'delimiter' attribute, it is used for
- // 'delimiter' property of 'args'.
- // parent:
- // A parent Transfer widget
- // args:
- // Wire arguments
- if (!args.segments) {
- args.segments = [];
- }
- args.segments.push(this._getWire(parent));
- if (parent.delimiter && !args.delimiter) {
- args.delimiter = parent.delimiter;
- }
- }
- });
- }
|