summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/data/WikipediaStore.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/data/WikipediaStore.js')
-rw-r--r--js/dojo/dojox/data/WikipediaStore.js118
1 files changed, 118 insertions, 0 deletions
diff --git a/js/dojo/dojox/data/WikipediaStore.js b/js/dojo/dojox/data/WikipediaStore.js
new file mode 100644
index 0000000..d38d4c5
--- /dev/null
+++ b/js/dojo/dojox/data/WikipediaStore.js
@@ -0,0 +1,118 @@
+//>>built
+define("dojox/data/WikipediaStore", ["dojo/_base/kernel", "dojo/_base/lang", "dojo/_base/declare", "dojo/io/script",
+ "dojo/io-query", "dojox/rpc/Service", "dojox/data/ServiceStore"],
+ function(kernel, lang, declare, scriptIO, ioQuery, Service, ServiceStore) {
+
+kernel.experimental("dojox.data.WikipediaStore");
+
+/*===== var ServiceStore = dojox.data.ServiceStore; =====*/
+
+return declare("dojox.data.WikipediaStore", ServiceStore, {
+ // summary:
+ // Initializer for the Wikipedia data store interface.
+ // description:
+ // The WikipediaStore is a data store interface to Wikipedia, using the
+ // Wikipedia SMD spec from dojox.rpc. It currently is useful only for
+ // finding articles that contain some particular text or grabbing single
+ // articles by full name; no wildcards or other filtering are supported.
+ // example:
+ // | var store = new dojox.data.WikipediaStore();
+ // | store.fetch({
+ // | query: {title:"Dojo Toolkit"},
+ // | onItem: function(item){
+ // | dojo.byId("somediv").innerHTML = item.text["*"];
+ // | }
+ // | });
+ constructor: function(options){
+ if(options && options.service){
+ this.service = options.service;
+ }else{
+ var svc = new Service(require.toUrl("dojox/rpc/SMDLibrary/wikipedia.smd"));
+ this.service = svc.query;
+ }
+
+ this.idAttribute = this.labelAttribute = "title";
+ },
+
+ fetch: function(/* object */ request){
+ // summary:
+ // Fetch a page or some partially-loaded search results from
+ // Wikipedia. Note that there isn't a way to sort data coming
+ // in from the API, so we just ignore the *sort* parameter.
+ // example:
+ // Loading a page:
+ // | store.fetch({
+ // | query: {title:"Dojo Toolkit"},
+ // | // define your handlers here
+ // | });
+ // example:
+ // Searching for pages containing "dojo":
+ // | store.fetch({
+ // | query: {
+ // | action: "query",
+ // | text: "dojo"
+ // | },
+ // | // define your handlers here
+ // | });
+ // example:
+ // Searching for the next 50 pages containing "dojo":
+ // | store.fetch({
+ // | query: {
+ // | action: "query",
+ // | text: "dojo",
+ // | start: 10,
+ // | count: 50 // max 500; will be capped if necessary
+ // | },
+ // | // define your handlers here
+ // | });
+ var rq = lang.mixin({}, request.query);
+ if(rq && (!rq.action || rq.action === "parse")){
+ // default to a single page fetch
+ rq.action = "parse";
+ rq.page = rq.title;
+ delete rq.title;
+
+ }else if(rq.action === "query"){
+ // perform a full text search on page content
+ rq.list = "search";
+ rq.srwhat = "text";
+ rq.srsearch = rq.text;
+ if(request.start){
+ rq.sroffset = request.start-1;
+ }
+ if(request.count){
+ rq.srlimit = request.count >= 500 ? 500 : request.count;
+ }
+ delete rq.text;
+ }
+ request.query = rq;
+ return this.inherited(arguments);
+ },
+
+ _processResults: function(results, def){
+ if(results.parse){
+ // loading a complete page
+ results.parse.title = ioQuery.queryToObject(def.ioArgs.url.split("?")[1]).page;
+ results = [results.parse];
+
+ }else if(results.query && results.query.search){
+ // loading some search results; all we have here is page titles,
+ // so we mark our items as incomplete
+ results = results.query.search;
+ var _thisStore = this;
+ for(var i in results){
+ results[i]._loadObject = function(callback){
+ _thisStore.fetch({
+ query: { action:"parse", title:this.title },
+ onItem: callback
+ });
+ delete this._loadObject;
+ }
+ }
+ }
+ return this.inherited(arguments);
+ }
+});
+
+});
+