UNPKG

dojox

Version:

Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.

215 lines (199 loc) 7.45 kB
<!-- This file is a demo of the OpenSearchStore, a simple wrapper to any OpenSearch compliant search engine. Note, the simple proxy requires a curl-enabled PHP install --> <html> <head> <title>Demo of OpenSearchStore</title> <style type="text/css"> @import "../../../dijit/themes/tundra/tundra.css"; @import "../../../dojo/resources/dojo.css"; @import "../../../dijit/tests/css/dijitTests.css"; @import "./openSearchDemo.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.FilteringSelect"); dojo.require("dijit.form.CheckBox"); dojo.require("dijit.form.NumberSpinner"); dojo.require("dijit.Tree"); dojo.require("dojox.data.OpenSearchStore"); function init(){ var fViewWidgets = []; //Set up an onComplete handler for OpenSearchData function onComplete(items, request){ if(items.length > 0){ var ul = dojo.byId("searchResults"); var test; var li; for(var i=0; i<items.length; i++){ li = dojo.doc.createElement("li"); li.innerHTML = openSearchStore.getValue(items[i], "content"); ul.appendChild(li); } } statusWidget.attr('value', "PROCESSING COMPLETE."); } //What to do if a search fails... function onError(error, request){ statusWidget.attr('value', "PROCESSING ERROR."); } //Function to invoke the search of the openSearchStore function invokeSearch(){ var tbody = dojo.byId("searchResults"); while(tbody.childNodes.length){ var node = tbody.childNodes.item(0); node.parentNode.removeChild(node); } var request = { query: {}, onComplete: onComplete, onError: onError }; if(searchTermsWidget){ var searchTerms = searchTermsWidget.attr('value'); if(searchTerms && searchTerms !== ""){ var searchTermsArray = searchTerms.split(" "); searchTerms = ""; for(var i = 0; i < searchTermsArray.length; i++){ searchTerms = searchTerms + searchTermsArray[i]; if(i < (searchTermsArray.length - 1)){ searchTerms += "," } } request.query.searchTerms = searchTerms; } } if(countWidget){ request.count = countWidget.attr('value'); } if(statusWidget){ statusWidget.attr('value', "PROCESSING REQUEST"); } openSearchStore.fetch(request); } //Lastly, link up the search event. dojo.connect(dijit.byId("searchButton"), 'onClick', invokeSearch); var currentArgs = {url: 'http://intertwingly.net/search/'}; var oldProcess = null; function setTransform(state){ if(state){ oldProcess = openSearchStore.processItem; switch(currentArgs.url){ case 'http://intertwingly.net/search/': openSearchStore.processItem = intertwinglyTransform; break; case 'http://www.shutterpoint.com/opensearch.xml': openSearchStore.processItem = shutterpointTransform; break; case 'http://technorati.com/osd.xml': openSearchStore.processItem = technoratiTransform; break; } }else if(oldProcess !== null){ openSearchStore.processItem = oldProcess; } } dojo.connect(dijit.byId('transformItem'), 'onChange', function(state){ setTransform(state); }); dojo.connect(dijit.byId('urlSelector'), 'onChange', function(args){ currentArgs = dojo.fromJson(args); currentArgs.url = 'openSearchProxy.php?osd=true&url='+currentArgs.url; openSearchStore.close(); openSearchStore = new dojox.data.OpenSearchStore(currentArgs); if(dijit.byId('transformItem').checked){ setTransform(true); } }); var intertwinglyTransform = function(item, attribute){ function removeAll(/*NodeList*/list){ while(list.length) { var node = list.item(0); node.parentNode.removeChild(node); } } var content = item.node.getElementsByTagName("content").item(0); // Remove all blockquote elements removeAll(content.getElementsByTagName("blockquote")); // Remove all pre-formatted elements removeAll(content.getElementsByTagName("pre")); return openSearchStore._getNodeXml(content, true); }; var shutterpointTransform = function(item, attribute){ var description = item.node.getElementsByTagName("description").item(0); var div = dojo.doc.createElement("div"); div.innerHTML = description.childNodes.item(0).nodeValue; //Of the description children, remove the divs (to only leave the images) for(var i=0; i<div.childNodes.length; i++){ var node = div.childNodes.item(i); if(node.tagName.toLowerCase() === "div") node.parentNode.removeChild(node); } return openSearchStore._getNodeXml(div, true); }; var technoratiTransform = function(item, attribute){ function removeAll(/*NodeList*/list){ while(list.length) { var node = list.item(0); node.parentNode.removeChild(node); } } removeAll(item.node.getElementsByTagName("blockquote")); return item.innerHTML; }; } dojo.addOnLoad(init); </script> </head> <body class="tundra"> <h1>DEMO: OpenSearchStore Search</h1> <hr /> <h3>Description:</h3> <p> This simple demo shows how services, such as an OpenSearch compliant search service, can be wrapped by the datastore API. In this demo, you can search public search engines through a simple OpenSearchStore by specifying a series of search terms (separated by spaces) to search on. The results will be displayed below the search box. </p> <p> <b>NOTE: This demo makes use of a simple PHP based proxy script. The proxy script requires cURL support in PHP. Without cURL support, the demo will throw errors.</b> </p> <label for="urlSelector">URL of OpenSearchDocument:</label> <select dojoType="dijit.form.FilteringSelect" id="urlSelector" name="urlSelector" autoComplete="true"> <option value="{url: 'http://intertwingly.net/search/'}">http://intertwingly.net/search/</option> <option value="{url: 'http://www.shutterpoint.com/opensearch.xml'}">http://www.shutterpoint.com/opensearch.xml</option> <option value="{url: 'http://technorati.com/osd.xml', itemPath: '.hentry'}">http://technorati.com/osd.xml</option> </select> <label for="transformItem">Apply transform function?</label> <input dojoType="dijit.form.CheckBox" type="checkbox" id="transformItem" name="transformItem"> </input> <hr /> <label for="status">Status:</label> <div dojoType="dijit.form.TextBox" maxLength="50" id="status" name="status" jsId="statusWidget" disabled="true"></div> <label for="searchTerms">Search For:</label> <div dojoType="dijit.form.TextBox" maxLength="50" id="searchTerms" name="searchTerms" jsId="searchTermsWidget" value="javascript"></div> <label for="count">Number of Results:</label> <div id="count" name="count" jsId="countWidget" dojoType="dijit.form.NumberSpinner" value="20" constraints="{min:1,max:20}"> </div> <div dojoType="dijit.form.Button" label="Search" id="searchButton" jsId="searchButtonWidget"></div> <hr/> <div dojoType="dojox.data.OpenSearchStore" url="openSearchProxy.php?osd=true&url=http://intertwingly.net/search/" jsId="openSearchStore"> </div> <ul id="searchResults"></ul> </body> </html>