215 lines
7.5 KiB
HTML
215 lines
7.5 KiB
HTML
<!--
|
|
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> |