summaryrefslogtreecommitdiffstatshomepage
path: root/includes/js/dojox/wire/demos/markup/demo_FlickrStoreWire.html
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojox/wire/demos/markup/demo_FlickrStoreWire.html')
-rw-r--r--includes/js/dojox/wire/demos/markup/demo_FlickrStoreWire.html281
1 files changed, 281 insertions, 0 deletions
diff --git a/includes/js/dojox/wire/demos/markup/demo_FlickrStoreWire.html b/includes/js/dojox/wire/demos/markup/demo_FlickrStoreWire.html
new file mode 100644
index 0000000..54068a9
--- /dev/null
+++ b/includes/js/dojox/wire/demos/markup/demo_FlickrStoreWire.html
@@ -0,0 +1,281 @@
+<!--
+ This file is a demo of the FlickrStore, a simple wrapper to the public feed service
+ of Flickr. This just does very basic queries against Flickr and loads the results
+ into a list viewing widget.
+-->
+<html>
+<head>
+ <title>Demo of FlickrStore</title>
+ <style type="text/css">
+
+ @import "../../../../dijit/themes/tundra/tundra.css";
+ @import "../../../../dojo/resources/dojo.css";
+ @import "../../../../dijit/tests/css/dijitTests.css";
+ @import "./flickrDemo.css";
+ </style>
+
+ <script type="text/javascript" src="../../../../dojo/dojo.js" djConfig="isDebug: true, parseOnLoad: true"></script>
+ <script type="text/javascript">
+ dojo.require("dojo.parser");
+ dojo.require("dijit.form.TextBox");
+ dojo.require("dijit.form.Button");
+ dojo.require("dijit.form.ComboBox");
+ dojo.require("dijit.form.NumberSpinner");
+ dojo.require("dojox.data.FlickrStore");
+ dojo.require("dojox.wire.ml.Invocation");
+ dojo.require("dojox.wire.ml.Transfer");
+ dojo.require("dojox.wire.ml.Data");
+ dojo.require("dojox.wire");
+ dojo.require("dojox.data.demos.widgets.FlickrViewList");
+ dojo.require("dojox.data.demos.widgets.FlickrView");
+
+ //Toplevel JS Object to contain a few basics for us, such as the request to pass to the store and a stub onItem and onComplete function
+ // to trap on for triggering other events.
+ var dataHolder = {
+ //Simple stub datastore request
+ request: {query: {}, onItem: function(item, req){}, onComplete: function(items, req){}},
+
+ //Spot to store off data values as they're generated by the declarative binding.
+ result: null
+ };
+
+ //Function to convert the input from a widget into a comma separated list.
+ //that is the format of the store parameter.
+ var tagsInputConverter = function(tags){
+ if(tags && tags !== ""){
+ var tagsArray = tags.split(" ");
+ tags = "";
+ for(var i = 0; i < tagsArray.length; i++){
+ tags = tags + tagsArray[i];
+ if(i < (tagsArray.length - 1)){
+ tags += ","
+ }
+ }
+ }
+ return tags
+ }
+
+ </script>
+</head>
+
+<body class="tundra">
+ <h1>
+ DEMO: FlickrStore Search
+ </h1>
+ <hr>
+ <h3>
+ Description:
+ </h3>
+ <p>
+ This simple demo shows how services, such as Flickr, can be wrapped by the datastore API. In this demo, you can search public
+ Flickr images through a simple FlickrStore by specifying a series of tags (separated by spaces) to search on. The results
+ will be displayed below the search box. This demo is the same as the example demo provided in dojox/data/demos/demo_FlickrStore.html,
+ except that all the interactions are implemented via Wire instead of a script that runs at dojo.addOnLoad().
+ </p>
+ <p>
+ For fun, search on the 3dny tag!
+ </p>
+
+ <blockquote>
+
+ <!--
+ Layout.
+ -->
+ <table>
+ <tbody>
+ <tr>
+ <td>
+ <b>Status:</b>
+ </td>
+ <td>
+ <div dojoType="dijit.form.TextBox" size="50" id="status" jsId="statusWidget" disabled="true"></div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b>ID:</b>
+ </td>
+ <td>
+ <div dojoType="dijit.form.TextBox" size="50" id="userid" jsId="idWidget"></div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b>Tags:</b>
+ </td>
+ <td>
+ <div dojoType="dijit.form.TextBox" size="50" id="tags" jsId="tagsWidget" value="3dny"></div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b>Tagmode:</b>
+ </td>
+ <td>
+ <select id="tagmode"
+ jsId="tagmodeWidget"
+ dojoType="dijit.form.ComboBox"
+ autocomplete="false"
+ value="any"
+ >
+ <option>any</option>
+ <option>all</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b>Number of Pictures:</b>
+ </td>
+ <td>
+ <div
+ id="count"
+ jsId="countWidget"
+ dojoType="dijit.form.NumberSpinner"
+ value="20"
+ constraints="{min:1,max:20,places:0}"
+ ></div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ </td>
+ <td>
+ <div dojoType="dijit.form.Button" label="Search" id="searchButton" jsId="searchButtonWidget"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </blockquote>
+ <!--
+ The store instance used by this demo.
+ -->
+ <div dojoType="dojox.data.FlickrStore" jsId="flickrStore" label="title"></div>
+ <div dojoType="dojox.data.demos.widgets.FlickrViewList" id="flickrViews" jsId="flickrViewsWidget"></div>
+
+ <!-------------------------------- Using dojox.wire, declaratively wire up the widgets. --------------------------->
+
+
+ <!--
+ This is an example of using the declarative data value definition.
+ These are effectively declarative variables to act as placeholders
+ for data values.
+ -->
+ <div dojoType="dojox.wire.ml.Data"
+ id="messageData"
+ jsId="messageData">
+ <div dojoType="dojox.wire.ml.DataProperty"
+ name="processingStart"
+ value="PROCESSING REQUEST">
+ </div>
+ <div dojoType="dojox.wire.ml.DataProperty"
+ name="processingDone"
+ value="PROCESSING COMPLETE">
+ </div>
+ </div>
+
+
+ <!--
+ When the search button is clicked, do the following in order:
+ 1.) Map the widget values over to the request properties.
+ 2.) Clear existing rows from table,
+ 3.) Set the status to processing
+ 4.) Invoke the fetch to repopulate the table.
+ -->
+ <div dojoType="dojox.wire.ml.Action"
+ trigger="searchButtonWidget"
+ triggerEvent="onClick">
+
+ <!--
+ Read in the values from the widgets and bind them to the appropriate data locations
+ For basic properties, you could use transfer directly, but since the text boxes are
+ designed to be accessed through getValue/setValue, it's better to do these as
+ Invocations on widget methods.
+ -->
+ <div dojoType="dojox.wire.ml.Invocation"
+ object="idWidget"
+ method="getValue"
+ result="dataHolder.request.query.id">
+ </div>
+
+
+ <!--
+ For the tags, we need to get the value and then perform a conversion on the result
+ This is done by doing an invoke, then a transfer through a converter.
+ -->
+ <div dojoType="dojox.wire.ml.Invocation"
+ object="tagsWidget"
+ method="getValue"
+ result="dataHolder.request.query.tags">
+ </div>
+ <div dojoType="dojox.wire.ml.Transfer"
+ source="dataHolder.request.query.tags"
+ target="dataHolder.request.query.tags"
+ converter="tagsInputConverter">
+ </div>
+
+ <div dojoType="dojox.wire.ml.Invocation"
+ object="tagmodeWidget"
+ method="getValue"
+ result="dataHolder.request.query.tagmode">
+ </div>
+
+ <div dojoType="dojox.wire.ml.Invocation"
+ object="countWidget"
+ method="getValue"
+ result="dataHolder.request.count">
+ </div>
+
+
+ <!-- Now invoke the actions in order. -->
+ <div dojoType="dojox.wire.ml.Invocation" object="flickrViewsWidget" method="clearList"></div>
+ <div dojoType="dojox.wire.ml.Invocation" object="statusWidget" method="setValue" parameters="messageData.processingStart"></div>
+ <div dojoType="dojox.wire.ml.Invocation" object="flickrStore" method="fetch" parameters="dataHolder.request"></div>
+ </div>
+
+ <!--
+ When the fetch processing finishes (onComplete is called), then set status to complete.
+ -->
+ <div dojoType="dojox.wire.ml.Action"
+ trigger="dataHolder.request"
+ triggerEvent="onComplete">
+ <div dojoType="dojox.wire.ml.Invocation" object="statusWidget" method="setValue" parameters="messageData.processingDone"></div>
+ </div>
+
+
+ <!--
+ On the call of the onItem function of 'dataHolder', trigger a binding/mapping of the
+ item's attributes to the requires parameters that are passed into addView. In this case
+ FlikrItemAttribute -> viewItemParam
+ title title
+ imageUrlSmall iconUrl
+ imageUrl imageUrl
+ author author
+
+ Then take the result of the data mapping and pass it into the invoke of the addView function on the
+ FlickerViews widget.
+ -->
+ <div dojoType="dojox.wire.ml.Action"
+ trigger="dataHolder.request" triggerEvent="onItem">
+ <div dojoType="dojox.wire.ml.Transfer"
+ source="arguments[0]" sourceStore="flickrStore"
+ target="dataHolder.result">
+ <!--
+ Map the attributes of the items to the property name defined
+ in the wire on the object in the target
+ -->
+ <div dojoType="dojox.wire.ml.ChildWire"
+ name="title" attribute="title"></div>
+ <div dojoType="dojox.wire.ml.ChildWire"
+ name="imageUrl" attribute="imageUrl"></div>
+ <div dojoType="dojox.wire.ml.ChildWire"
+ name="iconUrl" attribute="imageUrlSmall"></div>
+ <div dojoType="dojox.wire.ml.ChildWire"
+ name="author" attribute="author"></div>
+ </div>
+ <div dojoType="dojox.wire.ml.Invocation"
+ object="flickrViewsWidget" method="addView" parameters='dataHolder.result'>
+ </div>
+ </div>
+</body>
+</html>