Updated
This commit is contained in:
215
master/examples/demo_OpenSearchStore.html
Normal file
215
master/examples/demo_OpenSearchStore.html
Normal file
@@ -0,0 +1,215 @@
|
||||
<!--
|
||||
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>
|
||||
Reference in New Issue
Block a user