diff options
Diffstat (limited to 'includes/js/dojox/data/demos')
49 files changed, 1944 insertions, 0 deletions
diff --git a/includes/js/dojox/data/demos/demo_DataDemoTable.html b/includes/js/dojox/data/demos/demo_DataDemoTable.html new file mode 100644 index 0000000..09761b9 --- /dev/null +++ b/includes/js/dojox/data/demos/demo_DataDemoTable.html @@ -0,0 +1,130 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <title>Dojo Visual Loader Test</title> + <style type="text/css"> + @import "../../../dojo/resources/dojo.css"; + @import "../../../dijit/themes/tundra/tundra.css"; + @import "../../../dijit/themes/dijit.css"; + @import "../../../dijit/tests/css/dijitTests.css"; + + .oddRow { background-color: #f2f5f9; } + .population { text-align: right; } + </style> + + <script type="text/javascript" src="../../../dojo/dojo.js" + djConfig="isDebug: false, parseOnLoad: true"></script> + <script type="text/javascript"> + dojo.require("dijit.dijit"); + dojo.require("dojo.parser"); + dojo.require("dijit.Declaration"); + dojo.require("dojo.data.ItemFileReadStore"); + dojo.require("dojox.data.FlickrStore"); + </script> +</head> +<body class="tundra"> + <span dojoType="dojo.data.ItemFileReadStore" + jsId="continentStore" + url="../../../dijit/tests/_data/countries.json"></span> + <span dojoType="dojox.data.FlickrStore" jsId="flickrStore"></span> + + + <h1 class="testTitle">Dojox Data Demo Table</h1> + + <table dojoType="dijit.Declaration" + widgetClass="demo.Table" class="dojoTabular" + defaults="{ store: null, query: { query: { name: '*' } }, columns: [ { name: 'Name', attribute: 'name' } ] }"> + <thead dojoAttachPoint="head"> + <tr dojoAttachPoint="headRow"></tr> + </thead> + <tbody dojoAttachPoint="body"> + <tr dojoAttachPoint="row"> + </tr> + </tbody> + + <script type="dojo/method"> + dojo.forEach(this.columns, function(item, idx){ + var icn = item.className||""; + // add a header for each column + var tth = document.createElement("th"); + tth.innerHTML = item.name; + tth.className = icn; + dojo.connect(tth, "onclick", dojo.hitch(this, "onSort", idx)); + this.headRow.appendChild(tth); + + // and fill in the column cell in the template row + this.row.appendChild(document.createElement("td")); + this.row.lastChild.className = icn; + }, this); + this.runQuery(); + </script> + <script type="dojo/method" event="onSort" args="index"> + var ca = this.columns[index].attribute; + var qs = this.query.sort; + // clobber an existing sort arrow + dojo.query("> th", this.headRow).style("background", "").style("paddingRight", ""); + if(qs && qs[0].attribute == ca){ + qs[0].descending = !qs[0].descending; + }else{ + this.query.sort = [{ + attribute: ca, + descending: false + }]; + } + var th = dojo.query("> th", this.headRow)[index]; + th.style.paddingRight = "16px"; // space for the sort arrow + th.style.background = "url(\""+dojo.moduleUrl("dijit", "themes/tundra/images/arrow"+(this.query.sort[0].descending ? "Up" : "Down")+((dojo.isIE == 6) ? ".gif" : ".png")) + "\") no-repeat 98% 4px"; + this.runQuery(); + </script> + <script type="dojo/method" event="runQuery"> + this.query.onBegin = dojo.hitch(this, function(){ dojo.query("tr", this.body).orphan(); }); + this.query.onItem = dojo.hitch(this, "onItem"); + this.query.onComplete = dojo.hitch(this, function(){ + dojo.query("tr:nth-child(odd)", this.body).addClass("oddRow"); + dojo.query("tr:nth-child(even)", this.body).removeClass("oddRow"); + }); + this.store.fetch(this.query); + </script> + <script type="dojo/method" event="onItem" args="item"> + var tr = this.row.cloneNode(true); + dojo.query("td", tr).forEach(function(n, i, a){ + var tc = this.columns[i]; + var tv = this.store.getValue(item, tc.attribute)||""; + if(tc.format){ tv = tc.format(tv, item, this.store); } + n.innerHTML = tv; + }, this); + this.body.appendChild(tr); + </script> + </table> + + <span dojoType="demo.Table" store="continentStore" + query="{ query: { type: 'country' }, sort: [ { attribute: 'name', descending: true } ] }" + id="foo"> + <script type="dojo/method" event="preamble"> + this.columns = [ + { name: "Name", attribute: "name" }, + { name: "Population", + attribute: "population", + className: "population" + } + ]; + </script> + </span> + <span dojoType="demo.Table" store="continentStore" + query="{ query: { name: 'A*' } }"></span> + <span dojoType="demo.Table" store="flickrStore" + query="{ query: { tags: '3dny' } }"> + <script type="dojo/method" event="preamble"> + this.columns = [ + { name: "", attribute: "imageUrlSmall", + format: function(value, item, store){ + return (value.length) ? "<img src='"+value+"'>" : ""; + } + }, + { name: "Title", attribute: "title" } + ]; + </script> + </span> +</body> +</html> diff --git a/includes/js/dojox/data/demos/demo_FlickrRestStore.html b/includes/js/dojox/data/demos/demo_FlickrRestStore.html new file mode 100644 index 0000000..a094bc6 --- /dev/null +++ b/includes/js/dojox/data/demos/demo_FlickrRestStore.html @@ -0,0 +1,275 @@ +<!-- + 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 FlickrRestStore</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("dijit.Tree"); + dojo.require("dojox.data.FlickrStore"); + dojo.require("dojox.data.FlickrRestStore"); + dojo.require("dojox.data.demos.widgets.FlickrViewList"); + dojo.require("dojox.data.demos.widgets.FlickrView"); + + function init(){ + var fViewWidgets = []; + + //Set up an onComplete handler for flickrData + function onComplete(items, request){ + flickrViewsWidget.clearList(); + if(items.length > 0){ + for(var i = 0; i < items.length; i++){ + var flickrData = { + title: flickrStore.getValue(items[i],"title"), + author: flickrStore.getValue(items[i],"author"), + iconUrl: flickrStore.getValue(items[i],"imageUrlSmall"), + imageUrl: flickrStore.getValue(items[i],"imageUrl") + } + flickrViewsWidget.addView(flickrData); + } + } + statusWidget.setValue("PROCESSING COMPLETE."); + + } + //What to do if a search fails... + function onError(error, request){ + flickrViewsWidget.clearList(); + statusWidget.setValue("PROCESSING ERROR."); + } + + //Function to invoke the search of the FlickrStore + function invokeSearch(){ + var request = { + query: { + apikey: "8c6803164dbc395fb7131c9d54843627" + }, + onComplete: onComplete, + onError: onError + }; + + if(idWidget){ + var userid = idWidget.getValue(); + if(userid && userid !== ""){ + request.query.userid = userid; + } + } + if(tagsWidget){ + var tags = tagsWidget.getValue(); + 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 += "," + } + } + request.query.tags = tags; + } + } + if(tagmodeWidget){ + var tagmode = tagmodeWidget.getValue(); + if(tagmode !== ""){ + request.query.tagmode = tagmode; + } + } + + if(setIdWidget){ + var setId = setIdWidget.getValue(); + if(setId != ""){ + request.query.setId = setId; + } + } + + if(fullTextWidget){ + var fullText = fullTextWidget.getValue(); + if(fullText != ""){ + request.query.text = fullText; + } + } + + if(sortTypeWidget && sortDirWidget){ + var sortType = sortTypeWidget.getValue(); + var sortDirection = sortDirWidget.getValue(); + + if(sortType != "" && sortDirection != ""){ + request.query.sort = [ + { + attribute: sortType, + descending: (sortDirection.toLowerCase() == "descending") + } + ]; + } + } + + if(countWidget){ + request.count = countWidget.getValue(); + } + if(pageWidget){ + request.start = request.count * (pageWidget.getValue() -1); + } + + if(statusWidget){ + statusWidget.setValue("PROCESSING REQUEST"); + } + + flickrStore.fetch(request); + } + + //Lastly, link up the search event. + var button = dijit.byId("searchButton"); + dojo.connect(button, "onClick", invokeSearch); + } + dojo.addOnLoad(init); + </script> +</head> + +<body class="tundra"> + <h1> + DEMO: FlickrRestStore 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 FlickrRestStore by specifying + a series of tags (separated by spaces) to search on. The results will be displayed below the search box. + </p> + <p> + For fun, search on the 3dny tag! + </p> + + <blockquote> + + <!-- + The store instance used by this demo. + --> + <table> + <tbody> + <tr> + <td> + <b>Status:</b> + </td> + <td> + <div dojoType="dijit.form.TextBox" size="50" id="status" jsId="statusWidget" disabled="true"></div> + </td> + <td></td> + <td></td> + </tr> + <tr> + <td> + <b>User ID:</b> + </td> + <td> + <div dojoType="dijit.form.TextBox" size="50" id="userid" jsId="idWidget" value="44153025@N00"></div> + </td> + <td> + <b>Set ID</b> + </td> + <td> + <div dojoType="dijit.form.TextBox" size="50" id="setid" jsId="setIdWidget"></div> + </td> + </tr> + <tr> + <td> + <b>Tags:</b> + </td> + <td> + <div dojoType="dijit.form.TextBox" size="50" id="tags" jsId="tagsWidget" value="rollingstones,kinsale"></div> + </td> + <td> + <b>Full Text</b> + </td> + <td> + <div dojoType="dijit.form.TextBox" size="50" id="fulltext" jsId="fullTextWidget"></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> + <td> + <b>Sort</b> + </td> + <td> + <select dojoType="dijit.form.ComboBox" size="15" id="sorttype" jsId="sortTypeWidget"> + <option>date-posted</option> + <option>date-taken</option> + <option>interestingness</option> + </select> + <select dojoType="dijit.form.ComboBox" size="15" id="sortdirection" jsId="sortDirWidget"> + <option>ascending</option> + <option>descending</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> + <td> + <b>Page:</b> + </td> + <td> + <div + id="page" + jsId="pageWidget" + dojoType="dijit.form.NumberSpinner" + value="1" + constraints="{min:1,max:5,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> + <hr/> + <div dojoType="dojox.data.FlickrRestStore" jsId="flickrStore" label="title"></div> + <div dojoType="dojox.data.demos.widgets.FlickrViewList" id="flickrViews" jsId="flickrViewsWidget"></div> + +</body> +</html> diff --git a/includes/js/dojox/data/demos/demo_FlickrStore.html b/includes/js/dojox/data/demos/demo_FlickrStore.html new file mode 100644 index 0000000..5ca48cf --- /dev/null +++ b/includes/js/dojox/data/demos/demo_FlickrStore.html @@ -0,0 +1,199 @@ +<!-- + 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("dijit.Tree"); + dojo.require("dojox.data.FlickrStore"); + dojo.require("dojox.data.demos.widgets.FlickrViewList"); + dojo.require("dojox.data.demos.widgets.FlickrView"); + + function init(){ + var fViewWidgets = []; + + //Set up an onComplete handler for flickrData + function onComplete(items, request){ + flickrViewsWidget.clearList(); + if(items.length > 0){ + for(var i = 0; i < items.length; i++){ + var flickrData = { + title: flickrStore.getValue(items[i],"title"), + author: flickrStore.getValue(items[i],"author"), + iconUrl: flickrStore.getValue(items[i],"imageUrlSmall"), + imageUrl: flickrStore.getValue(items[i],"imageUrl") + } + flickrViewsWidget.addView(flickrData); + } + } + statusWidget.setValue("PROCESSING COMPLETE."); + + } + //What to do if a search fails... + function onError(error, request){ + flickrViewsWidget.clearList(); + statusWidget.setValue("PROCESSING ERROR."); + } + + //Function to invoke the search of the FlickrStore + function invokeSearch(){ + var request = { + query: {}, + onComplete: onComplete, + onError: onError + }; + + if(idWidget){ + var userid = idWidget.getValue(); + if(userid && userid !== ""){ + request.query.userid = userid; + } + } + if(tagsWidget){ + var tags = tagsWidget.getValue(); + 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 += "," + } + } + request.query.tags = tags; + } + } + if(tagmodeWidget){ + var tagmode = tagmodeWidget.getValue(); + if(tagmode !== ""){ + request.query.tagmode = tagmode; + } + } + + if(countWidget){ + request.count = countWidget.getValue(); + } + + if(statusWidget){ + statusWidget.setValue("PROCESSING REQUEST"); + } + + flickrStore.fetch(request); + } + + //Lastly, link up the search event. + var button = dijit.byId("searchButton"); + dojo.connect(button, "onClick", invokeSearch); + } + dojo.addOnLoad(init); + </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. + </p> + <p> + For fun, search on the 3dny tag! + </p> + + <blockquote> + + <!-- + The store instance used by this demo. + --> + <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> + <hr/> + <div dojoType="dojox.data.FlickrStore" jsId="flickrStore" label="title"></div> + <div dojoType="dojox.data.demos.widgets.FlickrViewList" id="flickrViews" jsId="flickrViewsWidget"></div> + +</body> +</html> diff --git a/includes/js/dojox/data/demos/demo_LazyLoad.html b/includes/js/dojox/data/demos/demo_LazyLoad.html new file mode 100644 index 0000000..358ce84 --- /dev/null +++ b/includes/js/dojox/data/demos/demo_LazyLoad.html @@ -0,0 +1,66 @@ +<!-- + This file is a simple loader for the Lazy Load demo of a Datastore. In this + Example, a simple extension of ItemFileReadStore that can do rudimentary lazy-loading + of items into the store is used to showcase how Datastores can hide how data + is loaded from the widget. As long as the widget implements to the Dojo.data API + spec, then it should be able to use most datastores as input sources for its + values. +--> +<html> +<head> + <title>Demo of Lazy Loading Datastore</title> + <style type="text/css"> + + @import "../../../dijit/themes/tundra/tundra.css"; + @import "../../../dojo/resources/dojo.css"; + @import "../../../dijit/tests/css/dijitTests.css"; + </style> + + <script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true, parseOnLoad: true, usePlainJson: true"></script> + <script type="text/javascript"> + dojo.require("dojo.parser"); + dojo.require("dojox.data.demos.stores.LazyLoadJSIStore"); + dojo.require("dijit.Tree"); + </script> +</head> + +<body class="tundra"> + <h1> + DEMO: Lazy Loading Datastore used by dijit.Tree + </h1> + <hr> + <h3> + Description: + </h3> + <p> + This simple demo shows how the dijit.Tree widget can work with a Datastore that does lazy-loading of values into the tree. + In this demo, the Datastore is an extension of ItemFileReadStore that overrides the <i>isItemLoaded()</i> and <i>loadItem()</i> functions of + with ones that can detect 'stub' items and use the data in the stub item to load the real data for that item when it + is required. In this demo, the real data is required when one of the tree nodes is expanded. + </p> + <p> + The key thing to note is that all the lazy-loading logic (how to locate the data from the backend and so forth) is encapsulated + into the store functions. The dijit.Tree widget only knows about and uses the dojo.data.Read API interfaces to call to the store to + get items, test if child items are fully loaded or not, and to invoke the <i>loadItem()</i> function on items that are not yet fully + loaded but have been requested to be expanded into view. It has no knowledge of how the store actually goes and gets the data. + </p> + + <blockquote> + + <!-- + The store instance used by this demo. + --> + <div dojoType="dojox.data.demos.stores.LazyLoadJSIStore" jsId="continentStore" + url="geography/root.json"></div> + + <!-- + Display the toplevel tree with items that have an attribute of 'type', + with value of 'contintent' + --> + <b>Continents</b> + <div dojoType="dijit.Tree" id=tree label="Continents" store="continentStore" query="{type:'continent'}" + labelAttr="name" typeAttr="type"></div> + </blockquote> + +</body> +</html> diff --git a/includes/js/dojox/data/demos/demo_MultiStores.html b/includes/js/dojox/data/demos/demo_MultiStores.html new file mode 100644 index 0000000..9faa8be --- /dev/null +++ b/includes/js/dojox/data/demos/demo_MultiStores.html @@ -0,0 +1,72 @@ +<!-- + This file is a demo of multiple dojo.data aware widgets using different datastore implementations for displaying data. +--> +<html> +<head> + <title>Demo of Multiple Widgets using different Datastores</title> + <style type="text/css"> + @import "../../../dijit/themes/tundra/tundra.css"; + @import "../../../dojo/resources/dojo.css"; + @import "../../../dijit/tests/css/dijitTests.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.ComboBox"); + dojo.require("dijit.Tree"); + + dojo.require("dojox.data.OpmlStore"); + dojo.require("dojo.data.ItemFileReadStore"); + + </script> +</head> + +<body class="tundra"> + <h1> + DEMO: Multiple DataStore implementations with dojo.data aware Widgets + </h1> + <hr> + <h3> + Description: + </h3> + <p> + This simple demo shows how widgets which know only the dojo.data interfaces can work with data sources of varying formats. In this case an OpmlStore + and a ItemFileReadStore are used to house the same data in different formats. + </p> + + <blockquote> + + <!-- + The store instances used by this demo. + --> + <div dojoType="dojo.data.ItemFileReadStore" url="geography.json" jsId="ifrGeoStore"></div> + <div dojoType="dojox.data.OpmlStore" url="geography.xml" label="text" jsId="opmlGeoStore"></div> + + <h3> + Widgets using OpmlStore: + </h3> + <blockquote> + <b>ComboBox:</b><br> + <input dojoType="dijit.form.ComboBox" id="combo1" name="combo1" class="medium" store="opmlGeoStore" searchAttr="text" query="{}"></input> + <br> + <br> + + <b>Tree:</b><br> + <div dojoType="dijit.Tree" id="tree1" label="Continents" store="opmlGeoStore"></div> + </blockquote> + + <h3> + Widgets using ItemFileReadStore: + </h3> + <blockquote> + <b>ComboBox:</b><br> + <input dojoType="dijit.form.ComboBox" id="combo2" name="combo2" class="medium" store="ifrGeoStore" searchAttr="name" query="{}"></input> + <br> + <br> + + <b>Tree:</b><br> + <div dojoType="dijit.Tree" id="tree2" label="Continents" store="ifrGeoStore"></div> + </blockquote> +</body> +</html> diff --git a/includes/js/dojox/data/demos/demo_PicasaStore.html b/includes/js/dojox/data/demos/demo_PicasaStore.html new file mode 100644 index 0000000..78bc961 --- /dev/null +++ b/includes/js/dojox/data/demos/demo_PicasaStore.html @@ -0,0 +1,188 @@ +<!-- + This file is a demo of the PicasaStore, a simple wrapper to the public feed service + of Picasa. This just does very basic queries against Picasa and loads the results + into a list viewing widget. +--> +<html> +<head> + <title>Demo of PicasaStore</title> + <style type="text/css"> + + @import "../../../dijit/themes/tundra/tundra.css"; + @import "../../../dojo/resources/dojo.css"; + @import "../../../dijit/tests/css/dijitTests.css"; + @import "./picasaDemo.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("dijit.Tree"); + dojo.require("dojox.data.PicasaStore"); + dojo.require("dojox.data.demos.widgets.PicasaViewList"); + dojo.require("dojox.data.demos.widgets.PicasaView"); + + function init(){ + var fViewWidgets = []; + + //Set up an onComplete handler for flickrData + function onComplete(items, request){ + flickrViewsWidget.clearList(); + if(items.length > 0){ + for(var i = 0; i < items.length; i++){ + var flickrData = { + title: flickrStore.getValue(items[i],"title"), + author: flickrStore.getValue(items[i],"author"), + description: flickrStore.getValue(items[i],"description"), + iconUrl: flickrStore.getValue(items[i],"imageUrlSmall"), + imageUrl: flickrStore.getValue(items[i],"imageUrl") + } + flickrViewsWidget.addView(flickrData); + } + } + statusWidget.setValue("PROCESSING COMPLETE."); + + } + //What to do if a search fails... + function onError(error, request){ + flickrViewsWidget.clearList(); + statusWidget.setValue("PROCESSING ERROR."); + } + + //Function to invoke the search of the FlickrStore + function invokeSearch(){ + var request = { + query: {}, + onComplete: onComplete, + onError: onError + }; + + if(idWidget){ + var userid = idWidget.getValue(); + if(userid && userid !== ""){ + request.query.userid = userid; + } + } + if(tagsWidget){ + var tags = tagsWidget.getValue(); + 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 += "," + } + } + request.query.tags = tags; + } + } + if(countWidget){ + request.count = countWidget.getValue(); + } + + if(startWidget){ + request.query.start = startWidget.getValue(); + } + + if(statusWidget){ + statusWidget.setValue("PROCESSING REQUEST"); + } + + flickrStore.fetch(request); + } + + //Lastly, link up the search event. + var button = dijit.byId("searchButton"); + dojo.connect(button, "onClick", invokeSearch); + } + dojo.addOnLoad(init); + </script> +</head> + +<body class="tundra"> + <h1> + DEMO: PicasaStore 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. + </p> + <p> + For fun, search on the 3dny tag! + </p> + + <blockquote> + + <!-- + The store instance used by this demo. + --> + <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>Query:</b> + </td> + <td> + <div dojoType="dijit.form.TextBox" size="50" id="tags" jsId="tagsWidget" value="flower"></div> + </td> + </tr> + <tr> + <td> + <b>Number of Pictures:</b> + </td> + <td> + <div + id="start" + jsId="startWidget" + dojoType="dijit.form.NumberSpinner" + value="1" + constraints="{min:1,places:0}" + ></div> + <div + id="count" + jsId="countWidget" + dojoType="dijit.form.NumberSpinner" + value="20" + constraints="{min:1,max:100,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> + <hr/> + <div dojoType="dojox.data.PicasaStore" jsId="flickrStore" label="title"></div> + <div dojoType="dojox.data.demos.widgets.PicasaViewList" id="flickrViews" jsId="flickrViewsWidget"></div> + +</body> +</html> diff --git a/includes/js/dojox/data/demos/demo_QueryReadStore_ComboBox.html b/includes/js/dojox/data/demos/demo_QueryReadStore_ComboBox.html new file mode 100644 index 0000000..f6d187f --- /dev/null +++ b/includes/js/dojox/data/demos/demo_QueryReadStore_ComboBox.html @@ -0,0 +1,56 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <title>Dojox QueryReadStore+ComboBox Demo</title> + <style type="text/css"> + @import "../../../dijit/themes/tundra/tundra.css"; + @import "../../../dojo/resources/dojo.css"; + @import "../../../dijit/tests/css/dijitTests.css"; + </style> + + <script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug:true, parseOnLoad: true"></script> +</head> +<body class="tundra"> + + <h1 class="testTitle">Dojox QueryReadStore + ComboBox demo</h1> + + <h2>Everything is created ONLY in markup</h2> + <div style="float:left;"> + <div dojoType="dojox.data.QueryReadStore" + jsId="store1" + url="../tests/stores/QueryReadStore.php" + requestMethod="post"></div> + <div dojoType="dijit.form.ComboBox" id="cb1" store="store1" pageSize="10"></div> + <button dojoType="dijit.form.Button" onclick="dijit.byId('cb1').reset()">reset</button> + </div> + <div style="float:left; margin-left:5em;"> + var w = dijit.byId("cb1"); + <br /><input id="value1" type="text" /> = w.value + <br /><input id="itemId1" type="text" /> = w.item ? w.store.getValue(w.item, "id") : "-" + <br /><input id="displayedValue1" type="text" /> = w.getDisplayedValue() + <br /><input id="isValid1" type="text" /> = w.isValid() + <br /><button dojoType="dijit.form.Button" onclick="refresh1()">refresh</button> + </div> + + <script type="text/javascript"> + dojo.require("dojox.data.QueryReadStore"); + dojo.require("dijit.form.ComboBox"); + dojo.require("dijit.form.Button"); + + var w = null; + var refresh1 = function() { + dojo.byId("value1").value = w.value; + dojo.byId("itemId1").value = w.item ? w.store.getValue(w.item, "id") : "-"; + dojo.byId("displayedValue1").value = w.getDisplayedValue(); + dojo.byId("isValid1").value = w.isValid(); + }; + dojo.addOnLoad(function() { + w = dijit.byId("cb1"); + dojo.connect(w.domNode, "onkeyup", refresh1); + dojo.connect(w, "onBlur", refresh1); + dojo.connect(w, "onChange", refresh1); + refresh1(); + }); + </script> +</body> +</html> diff --git a/includes/js/dojox/data/demos/demo_QueryReadStore_FilteringSelect.html b/includes/js/dojox/data/demos/demo_QueryReadStore_FilteringSelect.html new file mode 100644 index 0000000..addaeca --- /dev/null +++ b/includes/js/dojox/data/demos/demo_QueryReadStore_FilteringSelect.html @@ -0,0 +1,56 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <title>Dojox QueryReadStore+FilteringSelect Demo</title> + <style type="text/css"> + @import "../../../dijit/themes/tundra/tundra.css"; + @import "../../../dojo/resources/dojo.css"; + @import "../../../dijit/tests/css/dijitTests.css"; + </style> + + <script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug:true, parseOnLoad: true"></script> +</head> +<body class="tundra"> + + <h1 class="testTitle">Dojox QueryReadStore + FilteringSelect demo</h1> + + <h2>Everything is created ONLY in markup</h2> + <div style="float:left;"> + <div dojoType="dojox.data.QueryReadStore" + jsId="store1" + url="../tests/stores/QueryReadStore.php" + requestMethod="post"></div> + <div dojoType="dijit.form.FilteringSelect" id="fs1" store="store1" pageSize="10"></div> + <button dojoType="dijit.form.Button" onclick="dijit.byId('fs1').reset()">reset</button> + </div> + <div style="float:left; margin-left:5em;"> + var w = dijit.byId("fs1"); + <br /><input id="value1" type="text" /> = w.value + <br /><input id="itemId1" type="text" /> = w.item ? w.store.getValue(w.item, "id") : "-" + <br /><input id="displayedValue1" type="text" /> = w.getDisplayedValue() + <br /><input id="isValid1" type="text" /> = w.isValid() + <br /><button dojoType="dijit.form.Button" onclick="refresh1()">refresh</button> + </div> + + <script type="text/javascript"> + dojo.require("dojox.data.QueryReadStore"); + dojo.require("dijit.form.FilteringSelect"); + dojo.require("dijit.form.Button"); + + var w = null; + var refresh1 = function() { + dojo.byId("value1").value = w.value; + dojo.byId("itemId1").value = w.item ? w.store.getValue(w.item, "id") : "-"; + dojo.byId("displayedValue1").value = w.getDisplayedValue(); + dojo.byId("isValid1").value = w.isValid(); + }; + dojo.addOnLoad(function() { + w = dijit.byId("fs1"); + dojo.connect(w.domNode, "onkeyup", refresh1); + dojo.connect(w, "onBlur", refresh1); + dojo.connect(w, "onChange", refresh1); + refresh1(); + }); + </script> +</body> +</html> diff --git a/includes/js/dojox/data/demos/demo_QueryReadStore_grid.html b/includes/js/dojox/data/demos/demo_QueryReadStore_grid.html new file mode 100644 index 0000000..3f7db7e --- /dev/null +++ b/includes/js/dojox/data/demos/demo_QueryReadStore_grid.html @@ -0,0 +1,129 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <title>Dojox QueryReadStore+grid Demo</title> + <style type="text/css"> + @import "../../../dijit/themes/tundra/tundra.css"; + @import "../../../dojo/resources/dojo.css"; + @import "../../../dijit/tests/css/dijitTests.css"; + /* BE SURE TO NEVER FORGET IMPORTING THE GRID's CSS, or you will wonder why the hell the grid looks so strange (or even think that it doesnt work) */ + @import "../../../dojox/grid/_grid/tundraGrid.css"; + </style> + + <script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug:true, parseOnLoad: true"></script> +</head> +<body class="tundra"> + + <h1 class="testTitle">Dojox QueryReadStore + Grid demo - paging, sortable and filterable all server-side</h1> + + <h2>The grid is in HTML, store, model, etc. are JS, sorting is added by extending the model class</h2> + <b>Capabilities:</b> load data from server, show data, paging (30 rows at a time), sort, filter<br /> + You can see that data are loaded upon demand by scrolling down in the grid below line #30, + open FireBug and you see a server request being issued, to retreive another 30 rows/items.<br /> + <br /><br /> + <input type="text" onkeyup="doSearch(this)" /> + <div id="grid1" dojoType="dojox.Grid" style="height:300px; width:800px;"></div> + + <h2>The store and grid are "generated" and connected in HTML, filtering is done via JS</h2> + This store is by default sorted descending by name (not as the one above, which is ascending). + <div dojoType="dojox.data.QueryReadStore" + jsId="store2" + url="../tests/stores/QueryReadStore.php" + requestMethod="post"></div> + <div dojoType="dojox.grid.data.DojoData" + jsId="model2" + store="store2" + sortFields="[{attribute: 'capital', descending: true}]" + rowsPerPage="30"></div> + <div dojoType="dojox.Grid" id="grid2" + model="model2" + structure="gridLayout" + style="height:300px; width:800px;"></div> + + <script type="text/javascript"> + dojo.require("dojo.parser"); // scan page for widgets and instantiate them + dojo.require("dojox.grid.Grid"); + dojo.require("dojox.grid._data.model"); // dojox.grid.data.DojoData is in there + dojo.require("dojox.data.QueryReadStore"); + var gridLayout = [ + { + cells: [[ + { + name: "row #", + width:5, + styles: "text-align:right;", + get:function(inRowIndex) { return inRowIndex+1;} // this auto generates a row num + } + ,{ + name: "id", + field: "id", + styles: "text-align:right;", + width:5 + } + ,{ + name: "Name", + field: "name", + width:20 + //formatter: rs.chunk.adminUser.grid.formatUser + } + ,{ + name: "Capital", + field: "capital", + width:20 + //formatter: rs.chunk.adminUser.grid.formatUser + } + ,{ + name: "Label", + width:20, + //styles: "text-align:right;", + field: "label" + //formatter: phpr.grid.formatDate + } + ,{ + name: "Abbrev.", + width:5, + //styles: "text-align:right;", + field: "abbreviation" + //formatter: phpr.grid.formatDate + } + ]] + } + ]; + // Connect the model and store AFTER the page is loaded, since we can only access + // the widget then, since it will be created just before dojo.addOnLoad() is called. + var grid = null; + dojo.addOnLoad(function() { + // Instanciate the store, pass it to the model, connect them to the grid and add the layout ... just some hand work :-) + //var store = new dojox.data.QueryReadStore({url:"../tests/stores/QueryReadStore.php", requestMethod:"post", doClientPaging:false}); + var store = new dojox.data.QueryReadStore({ + url:"../tests/stores/QueryReadStore.php", + requestMethod:"post" + }); + var model = new dojox.grid.data.DojoData(null, null, { + store:store, + rowsPerPage:30, + sortFields:[{attribute: 'name', descending: false}] + }); + grid = dijit.byId("grid1"); + grid.setModel(model); + grid.setStructure(gridLayout); + grid2 = dijit.byId("grid2"); + }); + + var lastSearchValue = ""; + function doSearch(el) { + if (el.value!=lastSearchValue) { + grid.model.query = {name:el.value}; + lastSearchValue = el.value; + grid.model.requestRows(); + + // Filter the grid2 too. + grid2.model.query = {name:el.value}; + grid2.model.requestRows(); + } + } + </script> + + +</body> +</html> diff --git a/includes/js/dojox/data/demos/flickrDemo.css b/includes/js/dojox/data/demos/flickrDemo.css new file mode 100644 index 0000000..793d1c6 --- /dev/null +++ b/includes/js/dojox/data/demos/flickrDemo.css @@ -0,0 +1,29 @@ +.flickrView { + padding: 3 3 3 3; + border-width: 1px; + border-style: solid; + border-color: #000000; + border-collapse: separate; + width: 100%; +} +.flickrView th { + text-align: left; +} +.flickrView tr { + padding: 3 3 3 3; + border-width: 1px; + border-style: solid; + border-color: #000000; +} +.flickrView tr td { + padding: 3 3 3 3; + border-width: 1px; + border-style: solid; + border-color: #000000; +} +.flickrView { + background-color: #EFEFEF; +} +.flickrTitle { + background-color: #CCCCCC; +} diff --git a/includes/js/dojox/data/demos/flickrDemo.css.commented.css b/includes/js/dojox/data/demos/flickrDemo.css.commented.css new file mode 100644 index 0000000..7e75a5d --- /dev/null +++ b/includes/js/dojox/data/demos/flickrDemo.css.commented.css @@ -0,0 +1,35 @@ +.flickrView { + padding: 3 3 3 3; + border-width: 1px; + border-style: solid; + border-color: #000000; + border-collapse: separate; + width: 100%; +} + +.flickrView th { + text-align: left; +} + +.flickrView tr { + padding: 3 3 3 3; + border-width: 1px; + border-style: solid; + border-color: #000000; +} + +.flickrView tr td { + padding: 3 3 3 3; + border-width: 1px; + border-style: solid; + border-color: #000000; +} + +.flickrView { + background-color: #EFEFEF; +} + +.flickrTitle { + background-color: #CCCCCC; +} + diff --git a/includes/js/dojox/data/demos/geography.json b/includes/js/dojox/data/demos/geography.json new file mode 100644 index 0000000..c2f01bb --- /dev/null +++ b/includes/js/dojox/data/demos/geography.json @@ -0,0 +1,45 @@ +{ identifier: 'name', + label: 'name', + items: [ + { name:'Africa', type:'continent', children:[ + { name:'Egypt', type:'country' }, + { name:'Kenya', type:'country', children:[ + { name:'Nairobi', type:'city' }, + { name:'Mombasa', type:'city' } ] + }, + { name:'Sudan', type:'country', children: + { name:'Khartoum', type:'city' } + } ] + }, + { name:'Asia', type:'continent', children:[ + { name:'China', type:'country' }, + { name:'India', type:'country' }, + { name:'Russia', type:'country' }, + { name:'Mongolia', type:'country' } ] + }, + { name:'Australia', type:'continent', population:'21 million', children: + { name:'Commonwealth of Australia', type:'country', population:'21 million'} + }, + { name:'Europe', type:'continent', children:[ + { name:'Germany', type:'country' }, + { name:'France', type:'country' }, + { name:'Spain', type:'country' }, + { name:'Italy', type:'country' } ] + }, + { name:'North America', type:'continent', children:[ + { name:'Mexico', type:'country', population:'108 million', area:'1,972,550 sq km', children:[ + { name:'Mexico City', type:'city', population:'19 million', timezone:'-6 UTC'}, + { name:'Guadalajara', type:'city', population:'4 million', timezone:'-6 UTC' } ] + }, + { name:'Canada', type:'country', population:'33 million', area:'9,984,670 sq km', children:[ + { name:'Ottawa', type:'city', population:'0.9 million', timezone:'-5 UTC'}, + { name:'Toronto', type:'city', population:'2.5 million', timezone:'-5 UTC' }] + }, + { name:'United States of America', type:'country' } ] + }, + { name:'South America', type:'continent', children:[ + { name:'Brazil', type:'country', population:'186 million' }, + { name:'Argentina', type:'country', population:'40 million' } ] + } ] +} + diff --git a/includes/js/dojox/data/demos/geography.xml b/includes/js/dojox/data/demos/geography.xml new file mode 100644 index 0000000..070a8c1 --- /dev/null +++ b/includes/js/dojox/data/demos/geography.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<opml version="1.0"> + <head> + <title>geography.opml</title> + <dateCreated>2006-11-10</dateCreated> + <dateModified>2006-11-13</dateModified> + <ownerName>Magellan, Ferdinand</ownerName> + </head> + <body> + <outline text="Africa" type="continent"> + <outline text="Egypt" type="country"/> + <outline text="Kenya" type="country"> + <outline text="Nairobi" type="city"/> + <outline text="Mombasa" type="city"/> + </outline> + <outline text="Sudan" type="country"> + <outline text="Khartoum" type="city"/> + </outline> + </outline> + <outline text="Asia" type="continent"> + <outline text="China" type="country"/> + <outline text="India" type="country"/> + <outline text="Russia" type="country"/> + <outline text="Mongolia" type="country"/> + </outline> + <outline text="Australia" type="continent" population="21 million"> + <outline text="Australia" type="country" population="21 million"/> + </outline> + <outline text="Europe" type="continent"> + <outline text="Germany" type="country"/> + <outline text="France" type="country"/> + <outline text="Spain" type="country"/> + <outline text="Italy" type="country"/> + </outline> + <outline text="North America" type="continent"> + <outline text="Mexico" type="country" population="108 million" area="1,972,550 sq km"> + <outline text="Mexico City" type="city" population="19 million" timezone="-6 UTC"/> + <outline text="Guadalajara" type="city" population="4 million" timezone="-6 UTC"/> + </outline> + <outline text="Canada" type="country" population="33 million" area="9,984,670 sq km"> + <outline text="Ottawa" type="city" population="0.9 million" timezone="-5 UTC"/> + <outline text="Toronto" type="city" population="2.5 million" timezone="-5 UTC"/> + </outline> + <outline text="United States of America" type="country"/> + </outline> + <outline text="South America" type="continent"> + <outline text="Brazil" type="country" population="186 million"/> + <outline text="Argentina" type="country" population="40 million"/> + </outline> + </body> +</opml> diff --git a/includes/js/dojox/data/demos/geography/Argentina/data.json b/includes/js/dojox/data/demos/geography/Argentina/data.json new file mode 100644 index 0000000..17ba291 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Argentina/data.json @@ -0,0 +1,5 @@ +{ + name:'Argentina', + type:'country', + population:'40 million' +} diff --git a/includes/js/dojox/data/demos/geography/Brazil/data.json b/includes/js/dojox/data/demos/geography/Brazil/data.json new file mode 100644 index 0000000..a326c24 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Brazil/data.json @@ -0,0 +1,5 @@ +{ + name:'Brazil', + type:'country', + population:'186 million' +} diff --git a/includes/js/dojox/data/demos/geography/Canada/Ottawa/data.json b/includes/js/dojox/data/demos/geography/Canada/Ottawa/data.json new file mode 100644 index 0000000..df3bbc8 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Canada/Ottawa/data.json @@ -0,0 +1,6 @@ +{ + name:'Ottawa', + type:'city', + population:'0.9 million', + timezone:'-5 UTC' +} diff --git a/includes/js/dojox/data/demos/geography/Canada/Toronto/data.json b/includes/js/dojox/data/demos/geography/Canada/Toronto/data.json new file mode 100644 index 0000000..534409b --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Canada/Toronto/data.json @@ -0,0 +1,6 @@ +{ + name:'Toronto', + type:'city', + population:'2.5 million', + timezone:'-5 UTC' +} diff --git a/includes/js/dojox/data/demos/geography/Canada/data.json b/includes/js/dojox/data/demos/geography/Canada/data.json new file mode 100644 index 0000000..6ef34ed --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Canada/data.json @@ -0,0 +1,10 @@ +{ + name:'Canada', + type:'country', + population:'33 million', area:'9,984,670 sq km', + children:[ + {stub:'Ottawa'}, + {stub:'Toronto'} + ] +} + diff --git a/includes/js/dojox/data/demos/geography/China/data.json b/includes/js/dojox/data/demos/geography/China/data.json new file mode 100644 index 0000000..72c29cc --- /dev/null +++ b/includes/js/dojox/data/demos/geography/China/data.json @@ -0,0 +1,4 @@ +{ + name:'China', + type:'country' +} diff --git a/includes/js/dojox/data/demos/geography/Commonwealth of Australia/data.json b/includes/js/dojox/data/demos/geography/Commonwealth of Australia/data.json new file mode 100644 index 0000000..e093295 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Commonwealth of Australia/data.json @@ -0,0 +1,5 @@ +{ + name:'Commonwealth of Australia', + type:'country', + population:'21 million' +} diff --git a/includes/js/dojox/data/demos/geography/Egypt/data.json b/includes/js/dojox/data/demos/geography/Egypt/data.json new file mode 100644 index 0000000..d355537 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Egypt/data.json @@ -0,0 +1,5 @@ +{ + name:'Egypt', + type:'country' +} + diff --git a/includes/js/dojox/data/demos/geography/France/data.json b/includes/js/dojox/data/demos/geography/France/data.json new file mode 100644 index 0000000..5b5f3c3 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/France/data.json @@ -0,0 +1,4 @@ +{ + name:'France', + type:'country' +} diff --git a/includes/js/dojox/data/demos/geography/Germany/data.json b/includes/js/dojox/data/demos/geography/Germany/data.json new file mode 100644 index 0000000..1656257 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Germany/data.json @@ -0,0 +1,4 @@ +{ + name:'Germany', + type:'country' +} diff --git a/includes/js/dojox/data/demos/geography/India/data.json b/includes/js/dojox/data/demos/geography/India/data.json new file mode 100644 index 0000000..3103f89 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/India/data.json @@ -0,0 +1,4 @@ +{ + name:'India', + type:'country' +} diff --git a/includes/js/dojox/data/demos/geography/Italy/data.json b/includes/js/dojox/data/demos/geography/Italy/data.json new file mode 100644 index 0000000..6e6b076 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Italy/data.json @@ -0,0 +1,4 @@ +{ + name:'Italy', + type:'country' +} diff --git a/includes/js/dojox/data/demos/geography/Kenya/Mombasa/data.json b/includes/js/dojox/data/demos/geography/Kenya/Mombasa/data.json new file mode 100644 index 0000000..28aa849 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Kenya/Mombasa/data.json @@ -0,0 +1,5 @@ +{ + name:'Mombasa', + type:'city', + population: "Unknown" +} diff --git a/includes/js/dojox/data/demos/geography/Kenya/Nairobi/data.json b/includes/js/dojox/data/demos/geography/Kenya/Nairobi/data.json new file mode 100644 index 0000000..f5658ec --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Kenya/Nairobi/data.json @@ -0,0 +1,5 @@ +{ + name:'Nairobi', + type:'city', + population: "Unknown" +} diff --git a/includes/js/dojox/data/demos/geography/Kenya/data.json b/includes/js/dojox/data/demos/geography/Kenya/data.json new file mode 100644 index 0000000..9253c25 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Kenya/data.json @@ -0,0 +1,9 @@ +{ + name:'Kenya', + type:'country', + children:[ + {stub:'Nairobi'}, + {stub:'Mombasa'} + ] +} + diff --git a/includes/js/dojox/data/demos/geography/Mexico/Guadalajara/data.json b/includes/js/dojox/data/demos/geography/Mexico/Guadalajara/data.json new file mode 100644 index 0000000..059fc82 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Mexico/Guadalajara/data.json @@ -0,0 +1,7 @@ +{ + name:'Guadalajara', + type:'city', + population:'4 million', + timezone:'-6 UTC' +} + diff --git a/includes/js/dojox/data/demos/geography/Mexico/Mexico City/data.json b/includes/js/dojox/data/demos/geography/Mexico/Mexico City/data.json new file mode 100644 index 0000000..8c67622 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Mexico/Mexico City/data.json @@ -0,0 +1,6 @@ +{ + name:'Mexico City', + type:'city', + population:'19 million', + timezone:'-6 UTC' +} diff --git a/includes/js/dojox/data/demos/geography/Mexico/data.json b/includes/js/dojox/data/demos/geography/Mexico/data.json new file mode 100644 index 0000000..aa381e4 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Mexico/data.json @@ -0,0 +1,10 @@ +{ + name:'Mexico', + type:'country', + population:'108 million', + area:'1,972,550 sq km', + children:[ + {stub:'Mexico City'}, + {stub:'Guadalajara'} + ] +} diff --git a/includes/js/dojox/data/demos/geography/Mongolia/data.json b/includes/js/dojox/data/demos/geography/Mongolia/data.json new file mode 100644 index 0000000..4c60b22 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Mongolia/data.json @@ -0,0 +1,4 @@ +{ + name:'Mongolia', + type:'country' +} diff --git a/includes/js/dojox/data/demos/geography/Russia/data.json b/includes/js/dojox/data/demos/geography/Russia/data.json new file mode 100644 index 0000000..5d9a6ba --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Russia/data.json @@ -0,0 +1,4 @@ +{ + name:'Russia', + type:'country' +} diff --git a/includes/js/dojox/data/demos/geography/Spain/data.json b/includes/js/dojox/data/demos/geography/Spain/data.json new file mode 100644 index 0000000..d9a1210 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Spain/data.json @@ -0,0 +1,4 @@ +{ + name:'Spain', + type:'country' +} diff --git a/includes/js/dojox/data/demos/geography/Sudan/Khartoum/data.json b/includes/js/dojox/data/demos/geography/Sudan/Khartoum/data.json new file mode 100644 index 0000000..befa3c7 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Sudan/Khartoum/data.json @@ -0,0 +1,5 @@ +{ + name:'Khartoum', + type:'city' +} + diff --git a/includes/js/dojox/data/demos/geography/Sudan/data.json b/includes/js/dojox/data/demos/geography/Sudan/data.json new file mode 100644 index 0000000..fe7585b --- /dev/null +++ b/includes/js/dojox/data/demos/geography/Sudan/data.json @@ -0,0 +1,6 @@ +{ + name:'Sudan', + type:'country', + children:{stub:'Khartoum'} +} + diff --git a/includes/js/dojox/data/demos/geography/United States of America/data.json b/includes/js/dojox/data/demos/geography/United States of America/data.json new file mode 100644 index 0000000..7dbdd61 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/United States of America/data.json @@ -0,0 +1,4 @@ +{ + name:'United States of America', + type:'country' +} diff --git a/includes/js/dojox/data/demos/geography/root.json b/includes/js/dojox/data/demos/geography/root.json new file mode 100644 index 0000000..dda74f5 --- /dev/null +++ b/includes/js/dojox/data/demos/geography/root.json @@ -0,0 +1,39 @@ +{ + identifier: 'name', + label: 'name', + items: [ + { name:'Africa', type:'continent', + children:[{_reference:'Egypt'}, {_reference:'Kenya'}, {_reference:'Sudan'}] }, + { name:'Egypt', type:'stub', parent: 'geography'}, + { name:'Kenya', type:'stub', parent: 'geography'}, + { name:'Sudan', type:'stub', parent: 'geography'}, + + { name:'Asia', type:'continent', + children:[{_reference:'China'}, {_reference:'India'}, {_reference:'Russia'}, {_reference:'Mongolia'}] }, + { name:'China', type:'stub', parent: 'geography'}, + { name:'India', type:'stub', parent: 'geography'}, + { name:'Russia', type:'stub', parent: 'geography'}, + { name:'Mongolia', type:'stub', parent: 'geography'}, + + { name:'Australia', type:'continent', population:'21 million', + children:{_reference:'Commonwealth of Australia'}}, + { name:'Commonwealth of Australia', type:'stub', parent:'geography'}, + + { name:'Europe', type:'continent', + children:[{_reference:'Germany'}, {_reference:'France'}, {_reference:'Spain'}, {_reference:'Italy'}] }, + { name:'Germany', type:'stub', parent: 'geography'}, + { name:'France', type:'stub', parent: 'geography'}, + { name:'Spain', type:'stub', parent: 'geography'}, + { name:'Italy', type:'stub', parent: 'geography'}, + + { name:'North America', type:'continent', + children:[{_reference:'Mexico'}, {_reference:'Canada'}, {_reference:'United States of America'}] }, + { name:'Mexico', type:'stub', parent: 'geography'}, + { name:'Canada', type:'stub', parent: 'geography'}, + { name:'United States of America', type:'stub', parent: 'geography'}, + + { name:'South America', type:'continent', + children:[{_reference:'Brazil'}, {_reference:'Argentina'}] }, + { name:'Brazil', type:'stub', parent: 'geography'}, + { name:'Argentina', type:'stub', parent: 'geography'} +]} diff --git a/includes/js/dojox/data/demos/picasaDemo.css b/includes/js/dojox/data/demos/picasaDemo.css new file mode 100644 index 0000000..9163d40 --- /dev/null +++ b/includes/js/dojox/data/demos/picasaDemo.css @@ -0,0 +1,37 @@ +.picasaView { + padding: 3 3 3 3; + border-width: 1px; + border-style: solid; + border-color: #000000; + border-collapse: separate; + width: 100%; +} +.picasaView th { + text-align: left; +} +.picasaView tr { + padding: 3 3 3 3; + border-width: 1px; + border-style: solid; + border-color: #000000; +} +.picasaView tr td { + padding: 3 3 3 3; + border-width: 1px; + border-style: solid; + border-color: #000000; +} +.picasaView { + background-color: #EFEFEF; + float: left; + width: 250px; + height: 250px; +} +.picasaSummary { + width: 250px; + height: 30px; + overflow: hidden; + } +.picasaTitle { + background-color: #CCCCCC; +} diff --git a/includes/js/dojox/data/demos/picasaDemo.css.commented.css b/includes/js/dojox/data/demos/picasaDemo.css.commented.css new file mode 100644 index 0000000..e274f87 --- /dev/null +++ b/includes/js/dojox/data/demos/picasaDemo.css.commented.css @@ -0,0 +1,44 @@ +.picasaView { + padding: 3 3 3 3; + border-width: 1px; + border-style: solid; + border-color: #000000; + border-collapse: separate; + width: 100%; +} + +.picasaView th { + text-align: left; +} + +.picasaView tr { + padding: 3 3 3 3; + border-width: 1px; + border-style: solid; + border-color: #000000; +} + +.picasaView tr td { + padding: 3 3 3 3; + border-width: 1px; + border-style: solid; + border-color: #000000; +} + +.picasaView { + background-color: #EFEFEF; + float: left; + width: 250px; + height: 250px; +} + +.picasaSummary { + width: 250px; + height: 30px; + overflow: hidden; + } + +.picasaTitle { + background-color: #CCCCCC; +} + diff --git a/includes/js/dojox/data/demos/stores/LazyLoadJSIStore.js b/includes/js/dojox/data/demos/stores/LazyLoadJSIStore.js new file mode 100644 index 0000000..e7acff7 --- /dev/null +++ b/includes/js/dojox/data/demos/stores/LazyLoadJSIStore.js @@ -0,0 +1,142 @@ +if(!dojo._hasResource["dojox.data.demos.stores.LazyLoadJSIStore"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.data.demos.stores.LazyLoadJSIStore"] = true; +dojo.provide("dojox.data.demos.stores.LazyLoadJSIStore"); +dojo.require("dojo.data.ItemFileReadStore"); + +dojo.declare("dojox.data.demos.stores.LazyLoadJSIStore", dojo.data.ItemFileReadStore, { + constructor: function(/* object */ keywordParameters){ + // LazyLoadJSIStore extends ItemFileReadStore to implement an + // example of lazy-loading/faulting in items on-demand. + // Note this is certianly not a perfect implementation, it is + // an example. + }, + + isItemLoaded: function(/*object*/ item) { + // summary: + // Overload of the isItemLoaded function to look for items of type 'stub', which indicate + // the data hasn't been loaded in yet. + // + // item: + // The item to examine. + + //For this store, if it has the value of stub for its type attribute, + //then the item basn't been fully loaded yet. It's just a placeholder. + if(this.getValue(item, "type") === "stub"){ + return false; + } + return true; + }, + + loadItem: function(keywordArgs){ + // summary: + // Overload of the loadItem function to fault in items. This assumes the data for an item is laid out + // in a RESTful sort of pattern name0/name1/data.json and so on and uses that to load the data. + // It will also detect stub items in the newly loaded item and insert the stubs into the ItemFileReadStore + // list so they can also be loaded in on-demand. + // + // item: + // The item to examine. + + var item = keywordArgs.item; + this._assertIsItem(item); + + //Build the path to the data.json for this item + //The path consists of where its parent was loaded from + //plus the item name. + var itemName = this.getValue(item, "name"); + var parent = this.getValue(item, "parent"); + var dataUrl = ""; + if (parent){ + dataUrl += (parent + "/"); + } + + //For this store, all child input data is loaded from a url that ends with data.json + dataUrl += itemName + "/data.json"; + + //Need a reference to the store to call back to its structures. + var self = this; + + // Callback for handling a successful load. + var gotData = function(data){ + //Now we need to modify the existing item a bit to take it out of stub state + //Since we extend the store and have knowledge of the internal + //structure, this can be done here. Now, is we extended + //a write store, we could call the write APIs to do this too + //But for a simple demo the diretc modification in the store function + //is sufficient. + + //Clear off the stub indicators. + delete item.type; + delete item.parent; + + //Set up the loaded values in the format ItemFileReadStore uses for attributes. + for (i in data) { + if (dojo.isArray(data[i])) { + item[i] = data[i]; + }else{ + item[i] = [data[i]]; + } + } + + //Reset the item in the reference. + self._arrayOfAllItems[item[self._itemNumPropName]] = item; + + //Scan the new values in the item for extra stub items we need to + //add to the items array of the store so they can be lazy-loaded later... + var attributes = self.getAttributes(item); + for(i in attributes){ + var values = self.getValues(item, attributes[i]); + for (var j = 0; j < values.length; j++) { + var value = values[j]; + + if(typeof value === "object"){ + if(value["stub"] ){ + //We have a stub reference here, we need to create the stub item + var stub = { + type: ["stub"], + name: [value["stub"]], // + parent: [itemName] //The child stub item is parented by this item name... + }; + if (parent) { + //Add in any parents to your parent so URL construstruction is accurate. + stub.parent[0] = parent + "/" + stub.parent[0]; + } + //Finalize the addition of the new stub item into the ItemFileReadStore list. + self._arrayOfAllItems.push(stub); + stub[self._storeRefPropName] = self; + stub[self._itemNumPropName] = (self._arrayOfAllItems.length - 1); //Last one pushed in should be the item + values[j] = stub; //Set the stub item back in its place and replace the stub notation. + } + } + } + } + + //Done processing! Call the onItem, if any. + if(keywordArgs.onItem){ + var scope = keywordArgs.scope ? keywordArgs.scope : dojo.global; + keywordArgs.onItem.call(scope, item); + } + }; + + //Callback for any errors that occur during load. + var gotError = function(error){ + //Call the onComplete, if any + if(keywordArgs.onError){ + var scope = keywordArgs.scope ? keywordArgs.scope : dojo.global; + keywordArgs.onError.call(scope, error); + } + }; + + //Fire the get and pass the proper callbacks to the deferred. + var xhrArgs = { + url: dataUrl, + handleAs: "json-comment-optional" + }; + var d = dojo.xhrGet(xhrArgs); + d.addCallback(gotData); + d.addErrback(gotError); + } +}); + + +} diff --git a/includes/js/dojox/data/demos/widgets/FlickrView.js b/includes/js/dojox/data/demos/widgets/FlickrView.js new file mode 100644 index 0000000..cacb127 --- /dev/null +++ b/includes/js/dojox/data/demos/widgets/FlickrView.js @@ -0,0 +1,36 @@ +if(!dojo._hasResource["dojox.data.demos.widgets.FlickrView"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.data.demos.widgets.FlickrView"] = true; +dojo.provide("dojox.data.demos.widgets.FlickrView"); +dojo.require("dijit._Templated"); +dojo.require("dijit._Widget"); + +dojo.declare("dojox.data.demos.widgets.FlickrView", [dijit._Widget, dijit._Templated], { + //Simple demo widget for representing a view of a Flickr Item. + + templateString:"<table class=\"flickrView\">\n\t<tbody>\n\t\t<tr class=\"flickrTitle\">\n\t\t\t<td>\n\t\t\t\t<b>\n\t\t\t\t\tTitle:\n\t\t\t\t</b>\n\t\t\t</td>\n\t\t\t<td dojoAttachPoint=\"titleNode\">\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t<b>\n\t\t\t\t\tAuthor:\n\t\t\t\t</b>\n\t\t\t</td>\n\t\t\t<td dojoAttachPoint=\"authorNode\">\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td colspan=\"2\">\n\t\t\t\t<b>\n\t\t\t\t\tImage:\n\t\t\t\t</b>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td dojoAttachPoint=\"imageNode\" colspan=\"2\">\n\t\t\t</td>\n\t\t</tr>\n\t</tbody>\n</table>\n\n", + + //Attach points for reference. + titleNode: null, + descriptionNode: null, + imageNode: null, + authorNode: null, + + title: "", + author: "", + imageUrl: "", + iconUrl: "", + + postCreate: function(){ + this.titleNode.appendChild(document.createTextNode(this.title)); + this.authorNode.appendChild(document.createTextNode(this.author)); + var href = document.createElement("a"); + href.setAttribute("href", this.imageUrl); + href.setAttribute("target", "_blank"); + var imageTag = document.createElement("img"); + imageTag.setAttribute("src", this.iconUrl); + href.appendChild(imageTag); + this.imageNode.appendChild(href); + } +}); + +} diff --git a/includes/js/dojox/data/demos/widgets/FlickrViewList.js b/includes/js/dojox/data/demos/widgets/FlickrViewList.js new file mode 100644 index 0000000..2c3c881 --- /dev/null +++ b/includes/js/dojox/data/demos/widgets/FlickrViewList.js @@ -0,0 +1,37 @@ +if(!dojo._hasResource["dojox.data.demos.widgets.FlickrViewList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.data.demos.widgets.FlickrViewList"] = true; +dojo.provide("dojox.data.demos.widgets.FlickrViewList"); +dojo.require("dijit._Templated"); +dojo.require("dijit._Widget"); +dojo.require("dojox.data.demos.widgets.FlickrView"); + +dojo.declare("dojox.data.demos.widgets.FlickrViewList", [dijit._Widget, dijit._Templated], { + //Simple demo widget that is just a list of FlickrView Widgets. + + templateString:"<div dojoAttachPoint=\"list\"></div>\n\n", + + //Attach points for reference. + listNode: null, + + postCreate: function(){ + this.fViewWidgets = []; + }, + + clearList: function(){ + while(this.list.firstChild){ + this.list.removeChild(this.list.firstChild); + } + for(var i = 0; i < this.fViewWidgets.length; i++){ + this.fViewWidgets[i].destroy(); + } + this.fViewWidgets = []; + }, + + addView: function(viewData){ + var newView = new dojox.data.demos.widgets.FlickrView(viewData); + this.fViewWidgets.push(newView); + this.list.appendChild(newView.domNode); + } +}); + +} diff --git a/includes/js/dojox/data/demos/widgets/PicasaView.js b/includes/js/dojox/data/demos/widgets/PicasaView.js new file mode 100644 index 0000000..6b100ac --- /dev/null +++ b/includes/js/dojox/data/demos/widgets/PicasaView.js @@ -0,0 +1,37 @@ +if(!dojo._hasResource["dojox.data.demos.widgets.PicasaView"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.data.demos.widgets.PicasaView"] = true; +dojo.provide("dojox.data.demos.widgets.PicasaView"); +dojo.require("dijit._Templated"); +dojo.require("dijit._Widget"); + +dojo.declare("dojox.data.demos.widgets.PicasaView", [dijit._Widget, dijit._Templated], { + //Simple demo widget for representing a view of a Picasa Item. + + templateString:"<table class=\"picasaView\">\n\t<tbody>\n\t\t<tr class=\"picasaTitle\">\n\t\t\t<td>\n\t\t\t\t<b>\n\t\t\t\t\tTitle:\n\t\t\t\t</b>\n\t\t\t</td>\n\t\t\t<td dojoAttachPoint=\"titleNode\">\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t<b>\n\t\t\t\t\tAuthor:\n\t\t\t\t</b>\n\t\t\t</td>\n\t\t\t<td dojoAttachPoint=\"authorNode\">\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td colspan=\"2\">\n\t\t\t\t<b>\n\t\t\t\t\tSummary:\n\t\t\t\t</b>\n\t\t\t\t<span class=\"picasaSummary\" dojoAttachPoint=\"descriptionNode\"></span>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td dojoAttachPoint=\"imageNode\" colspan=\"2\">\n\t\t\t</td>\n\t\t</tr>\n\t</tbody>\n</table>\n\n", + + //Attach points for reference. + titleNode: null, + descriptionNode: null, + imageNode: null, + authorNode: null, + + title: "", + author: "", + imageUrl: "", + iconUrl: "", + + postCreate: function(){ + this.titleNode.appendChild(document.createTextNode(this.title)); + this.authorNode.appendChild(document.createTextNode(this.author)); + this.descriptionNode.appendChild(document.createTextNode(this.description)); + var href = document.createElement("a"); + href.setAttribute("href", this.imageUrl); + href.setAttribute("target", "_blank"); + var imageTag = document.createElement("img"); + imageTag.setAttribute("src", this.iconUrl); + href.appendChild(imageTag); + this.imageNode.appendChild(href); + } +}); + +} diff --git a/includes/js/dojox/data/demos/widgets/PicasaViewList.js b/includes/js/dojox/data/demos/widgets/PicasaViewList.js new file mode 100644 index 0000000..45371cd --- /dev/null +++ b/includes/js/dojox/data/demos/widgets/PicasaViewList.js @@ -0,0 +1,37 @@ +if(!dojo._hasResource["dojox.data.demos.widgets.PicasaViewList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.data.demos.widgets.PicasaViewList"] = true; +dojo.provide("dojox.data.demos.widgets.PicasaViewList"); +dojo.require("dijit._Templated"); +dojo.require("dijit._Widget"); +dojo.require("dojox.data.demos.widgets.PicasaView"); + +dojo.declare("dojox.data.demos.widgets.PicasaViewList", [dijit._Widget, dijit._Templated], { + //Simple demo widget that is just a list of PicasaView Widgets. + + templateString:"<div dojoAttachPoint=\"list\"></div>\n\n", + + //Attach points for reference. + listNode: null, + + postCreate: function(){ + this.fViewWidgets = []; + }, + + clearList: function(){ + while(this.list.firstChild){ + this.list.removeChild(this.list.firstChild); + } + for(var i = 0; i < this.fViewWidgets.length; i++){ + this.fViewWidgets[i].destroy(); + } + this.fViewWidgets = []; + }, + + addView: function(viewData){ + var newView = new dojox.data.demos.widgets.PicasaView(viewData); + this.fViewWidgets.push(newView); + this.list.appendChild(newView.domNode); + } +}); + +} diff --git a/includes/js/dojox/data/demos/widgets/templates/FlickrView.html b/includes/js/dojox/data/demos/widgets/templates/FlickrView.html new file mode 100644 index 0000000..b9d3bf9 --- /dev/null +++ b/includes/js/dojox/data/demos/widgets/templates/FlickrView.html @@ -0,0 +1,34 @@ +<table class="flickrView"> + <tbody> + <tr class="flickrTitle"> + <td> + <b> + Title: + </b> + </td> + <td dojoAttachPoint="titleNode"> + </td> + </tr> + <tr> + <td> + <b> + Author: + </b> + </td> + <td dojoAttachPoint="authorNode"> + </td> + </tr> + <tr> + <td colspan="2"> + <b> + Image: + </b> + </td> + </tr> + <tr> + <td dojoAttachPoint="imageNode" colspan="2"> + </td> + </tr> + </tbody> +</table> + diff --git a/includes/js/dojox/data/demos/widgets/templates/FlickrViewList.html b/includes/js/dojox/data/demos/widgets/templates/FlickrViewList.html new file mode 100644 index 0000000..3a9f565 --- /dev/null +++ b/includes/js/dojox/data/demos/widgets/templates/FlickrViewList.html @@ -0,0 +1,2 @@ +<div dojoAttachPoint="list"></div> + diff --git a/includes/js/dojox/data/demos/widgets/templates/PicasaView.html b/includes/js/dojox/data/demos/widgets/templates/PicasaView.html new file mode 100644 index 0000000..88dbb31 --- /dev/null +++ b/includes/js/dojox/data/demos/widgets/templates/PicasaView.html @@ -0,0 +1,35 @@ +<table class="picasaView"> + <tbody> + <tr class="picasaTitle"> + <td> + <b> + Title: + </b> + </td> + <td dojoAttachPoint="titleNode"> + </td> + </tr> + <tr> + <td> + <b> + Author: + </b> + </td> + <td dojoAttachPoint="authorNode"> + </td> + </tr> + <tr> + <td colspan="2"> + <b> + Summary: + </b> + <span class="picasaSummary" dojoAttachPoint="descriptionNode"></span> + </td> + </tr> + <tr> + <td dojoAttachPoint="imageNode" colspan="2"> + </td> + </tr> + </tbody> +</table> + diff --git a/includes/js/dojox/data/demos/widgets/templates/PicasaViewList.html b/includes/js/dojox/data/demos/widgets/templates/PicasaViewList.html new file mode 100644 index 0000000..3a9f565 --- /dev/null +++ b/includes/js/dojox/data/demos/widgets/templates/PicasaViewList.html @@ -0,0 +1,2 @@ +<div dojoAttachPoint="list"></div> + |