summaryrefslogtreecommitdiff
path: root/includes/js/dojox/wire/ml/Transfer.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojox/wire/ml/Transfer.js')
-rw-r--r--includes/js/dojox/wire/ml/Transfer.js359
1 files changed, 359 insertions, 0 deletions
diff --git a/includes/js/dojox/wire/ml/Transfer.js b/includes/js/dojox/wire/ml/Transfer.js
new file mode 100644
index 0000000..c7780ca
--- /dev/null
+++ b/includes/js/dojox/wire/ml/Transfer.js
@@ -0,0 +1,359 @@
+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;
+ }
+ }
+});
+
+}