- clean up of YaCy-UI

- added /yacy/ui/yacyuisearch.html (stand alone version)


git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@5534 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
apfelmaennchen 16 years ago
parent 6cbca1e508
commit 55dd15e344

@ -15,10 +15,7 @@
<link media="screen" type="text/css" href="css/jquery.pagination.css" rel="stylesheet" />
<link media="screen" type="text/css" href="css/jquery.flexigrid.css" rel="stylesheet" />
<link media="screen" type="text/css" href="css/jquery.dialog.css" rel="stylesheet" />
<link media="screen" type="text/css" href="css/jquery.treeview.css" rel="stylesheet" />
<script type="text/javascript" src="js/sarissa.js"></script>
<script type="text/javascript" src="js/sarissa_ieemu_xpath.js"></script>
<link media="screen" type="text/css" href="css/jquery.treeview.css" rel="stylesheet" />
<script src="js/jquery-1.2.6.min.js" type="text/javascript"></script>
<script src="js/jquery.ui.all.min.js" type="text/javascript"></script>
@ -29,15 +26,11 @@
<script src="js/jquery.form.js" type="text/javascript"></script>
<script src="js/jquery.field.min.js" type="text/javascript"></script>
<script src="js/jquery.pagination.js" type="text/javascript"></script>
<script src="js/jquery-faviconize-1.0.js" type="text/javascript"></script>
<script src="js/jquery-flexigrid.js" type="text/javascript"></script>
<script src="js/jquery-faviconize-1.0.js" type="text/javascript"></script>
<script src="js/jquery-flexigrid.js" type="text/javascript"></script>
<script src="js/jquery.treeview.min.js" type="text/javascript"></script>
<script src="js/jquery.treeview.async.js" type="text/javascript"></script>
<script src="js/jquery.xslTransform.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[

@ -1,200 +0,0 @@
/*
* jQuery Keyboard Navigation Plugin - Current
* http://www.amountaintop.com/projects/keynav/
*
* To use, download this file to your server, save as keynav.js,
* and add this HTML into the <head>...</head> of your web page:
* <script type="text/javascript" src="keynav.js"></script>
*
* Copyright (c) 2006 Mike Hostetler <http://www.amountaintop.com/>
* Licensed under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
*/
$.keynav = new Object();
$.fn.keynav = function (onClass,offClass) {
//Initialization
var kn = $.keynav;
if(!kn.init) {
kn.el = new Array();
$(document).keydown(function(e) {
var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
switch(key) {
case 37:
$.keynav.goLeft();
break;
case 38:
$.keynav.goUp();
break;
case 39:
$.keynav.goRight();
break;
case 40:
$.keynav.goDown();
break;
case 13:
$.keynav.activate();
break;
}
});
kn.init = true;
}
return this.each(function() {
$.keynav.reg(this,onClass,offClass);
});
}
$.fn.keynav_sethover = function(onClass,offClass) {
return this.each(function() {
this.onClass = onClass;
this.offClass = offClass;
});
}
$.keynav.reset = function() {
var kn = $.keynav;
kn.el = new Array();
}
$.keynav.reg = function(e,onClass,offClass) {
var kn = $.keynav;
e.pos = $.keynav.getPos(e);
e.onClass = onClass;
e.offClass = offClass;
e.onmouseover = function (e) { $.keynav.setActive(this); };
kn.el.push(e);
}
$.keynav.setActive = function(e) {
var kn = $.keynav;
var cur = $.keynav.getCurrent();
$(cur).trigger('blur');
for(var i=0;i<kn.el.length;i++) {
var tmp = kn.el[i];
$(tmp).removeClass().addClass(tmp.offClass);
}
$(e).removeClass().addClass(e.onClass);
$(e).trigger('focus');
kn.currentEl = e;
}
$.keynav.getCurrent = function () {
var kn = $.keynav;
if(kn.currentEl) {
var cur = kn.currentEl;
}
else {
var cur = kn.el[0];
}
return cur;
}
$.keynav.quad = function(cur,fQuad) {
var kn = $.keynav;
var quad = Array();
for(i=0;i<kn.el.length;i++) {
var el = kn.el[i];
if(cur == el) continue;
if(fQuad((cur.pos.cx - el.pos.cx),(cur.pos.cy - el.pos.cy)))
quad.push(el);
}
return quad;
}
$.keynav.activateClosest = function(cur,quad) {
var closest;
var od = 1000000;
var nd = 0;
var found = false;
for(i=0;i<quad.length;i++) {
var e = quad[i];
nd = Math.sqrt(Math.pow(cur.pos.cx-e.pos.cx,2)+Math.pow(cur.pos.cy-e.pos.cy,2));
if(nd < od) {
closest = e;
od = nd;
found = true;
}
}
if(found)
$.keynav.setActive(closest);
}
$.keynav.goLeft = function () {
var cur = $.keynav.getCurrent();
var quad = $.keynav.quad(cur,function (dx,dy) {
if((dy >= 0) && (Math.abs(dx) - dy) <= 0)
return true;
else
return false;
});
$.keynav.activateClosest(cur,quad);
}
$.keynav.goRight = function () {
var cur = $.keynav.getCurrent();
var quad = $.keynav.quad(cur,function (dx,dy) {
if((dy <= 0) && (Math.abs(dx) + dy) <= 0)
return true;
else
return false;
});
$.keynav.activateClosest(cur,quad);
}
$.keynav.goUp = function () {
var cur = $.keynav.getCurrent();
var quad = $.keynav.quad(cur,function (dx,dy) {
if((dx >= 0) && (Math.abs(dy) - dx) <= 0)
return true;
else
return false;
});
$.keynav.activateClosest(cur,quad);
}
$.keynav.goDown = function () {
var cur = $.keynav.getCurrent();
var quad = $.keynav.quad(cur,function (dx,dy) {
if((dx <= 0) && (Math.abs(dy) + dx) <= 0)
return true;
else
return false;
});
$.keynav.activateClosest(cur,quad);
}
$.keynav.activate = function () {
var kn = $.keynav;
$(kn.currentEl).trigger('click');
}
/**
* This function was taken from Stefan's exellent interface plugin
* http://www.eyecon.ro/interface/
*
* I included it in this library's namespace because the functions aren't
* quite the same.
*/
$.keynav.getPos = function (e)
{
var l = 0;
var t = 0;
var w = $.intval($.css(e,'width'));
var h = $.intval($.css(e,'height'));
while (e.offsetParent){
l += e.offsetLeft + (e.currentStyle?$.intval(e.currentStyle.borderLeftWidth):0);
t += e.offsetTop + (e.currentStyle?$.intval(e.currentStyle.borderTopWidth):0);
e = e.offsetParent;
}
l += e.offsetLeft + (e.currentStyle?$.intval(e.currentStyle.borderLeftWidth):0);
t += e.offsetTop + (e.currentStyle?$.intval(e.currentStyle.borderTopWidth):0);
var cx = Math.round(t+(h/2));
var cy = Math.round(l+(w/2));
return {x:l, y:t, w:w, h:h, cx:cx, cy:cy};
};
/**
* This function was taken from Stefan's exellent interface plugin
* http://www.eyecon.ro/interface/
*/
$.intval = function (v)
{
v = parseInt(v);
return isNaN(v) ? 0 : v;
};

@ -1,166 +0,0 @@
/**
* This jQuery plugin displays pagination links inside the selected elements.
*
* @author Gabriel Birke (birke *at* d-scribe *dot* de)
* @version 1.1
* @param {int} maxentries Number of entries to paginate
* @param {Object} opts Several options (see README for documentation)
* @return {Object} jQuery Object
*/
jQuery.fn.pagination = function(maxentries, opts){
opts = jQuery.extend({
items_per_page:10,
num_display_entries:10,
current_page:0,
num_edge_entries:0,
link_to:"#",
prev_text:"Prev",
next_text:"Next",
ellipse_text:"...",
prev_show_always:true,
next_show_always:true,
callback:function(){return false;}
},opts||{});
return this.each(function() {
/**
* Calculate the maximum number of pages
*/
function numPages() {
return Math.ceil(maxentries/opts.items_per_page);
}
/**
* Calculate start and end point of pagination links depending on
* current_page and num_display_entries.
* @return {Array}
*/
function getInterval() {
var ne_half = Math.ceil(opts.num_display_entries/2);
var np = numPages();
var upper_limit = np-opts.num_display_entries;
var start = current_page>ne_half?Math.max(Math.min(current_page-ne_half, upper_limit), 0):0;
var end = current_page>ne_half?Math.min(current_page+ne_half, np):Math.min(opts.num_display_entries, np);
return [start,end];
}
/**
* This is the event handling function for the pagination links.
* @param {int} page_id The new page number
*/
function pageSelected(page_id, evt){
current_page = page_id;
drawLinks();
var continuePropagation = opts.callback(page_id, panel);
if (!continuePropagation) {
if (evt.stopPropagation) {
evt.stopPropagation();
}
else {
evt.cancelBubble = true;
}
}
return continuePropagation;
}
/**
* This function inserts the pagination links into the container element
*/
function drawLinks() {
panel.empty();
var interval = getInterval();
var np = numPages();
// This helper function returns a handler function that calls pageSelected with the right page_id
var getClickHandler = function(page_id) {
return function(evt){ return pageSelected(page_id,evt); }
}
// Helper function for generating a single link (or a span tag if it'S the current page)
var appendItem = function(page_id, appendopts){
page_id = page_id<0?0:(page_id<np?page_id:np-1); // Normalize page id to sane value
appendopts = jQuery.extend({text:page_id+1, classes:""}, appendopts||{});
if(page_id == current_page){
var lnk = $("<span class='current'>"+(appendopts.text)+"</span>");
}
else
{
var lnk = $("<a>"+(appendopts.text)+"</a>")
.bind("click", getClickHandler(page_id))
.attr('href', opts.link_to.replace(/__id__/,page_id));
}
if(appendopts.classes){lnk.addClass(appendopts.classes);}
panel.append(lnk);
}
// Generate "Previous"-Link
if(opts.prev_text && (current_page > 0 || opts.prev_show_always)){
appendItem(current_page-1,{text:opts.prev_text, classes:"prev"});
}
// Generate starting points
if (interval[0] > 0 && opts.num_edge_entries > 0)
{
var end = Math.min(opts.num_edge_entries, interval[0]);
for(var i=0; i<end; i++) {
appendItem(i);
}
if(opts.num_edge_entries < interval[0] && opts.ellipse_text)
{
jQuery("<span>"+opts.ellipse_text+"</span>").appendTo(panel);
}
}
// Generate interval links
for(var i=interval[0]; i<interval[1]; i++) {
appendItem(i);
}
// Generate ending points
if (interval[1] < np && opts.num_edge_entries > 0)
{
if(np-opts.num_edge_entries > interval[1]&& opts.ellipse_text)
{
jQuery("<span>"+opts.ellipse_text+"</span>").appendTo(panel);
}
var begin = Math.max(np-opts.num_edge_entries, interval[1]);
for(var i=begin; i<np; i++) {
appendItem(i);
}
}
// Generate "Next"-Link
if(opts.next_text && (current_page < np-1 || opts.next_show_always)){
appendItem(current_page+1,{text:opts.next_text, classes:"next"});
}
}
// Extract current_page from options
var current_page = opts.current_page;
// Create a sane value for maxentries and items_per_page
maxentries = (!maxentries || maxentries < 0)?1:maxentries;
opts.items_per_page = (!opts.items_per_page || opts.items_per_page < 0)?1:opts.items_per_page;
// Store DOM element for easy access from all inner functions
var panel = jQuery(this);
// Attach control functions to the DOM element
this.selectPage = function(page_id){ pageSelected(page_id);}
this.prevPage = function(){
if (current_page > 0) {
pageSelected(current_page - 1);
return true;
}
else {
return false;
}
}
this.nextPage = function(){
if(current_page < numPages()-1) {
pageSelected(current_page+1);
return true;
}
else {
return false;
}
}
// When all initialisation is done, draw the links
drawLinks();
});
}

@ -0,0 +1,211 @@
/**
* jQuery.query - Query String Modification and Creation for jQuery
* Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
* Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
* Date: 2008/05/28
*
* @author Blair Mitchelmore
* @version 2.0.1
*
**/
new function(settings) {
// Various Settings
var $separator = settings.separator || '&';
var $spaces = settings.spaces === false ? false : true;
var $suffix = settings.suffix === false ? '' : '[]';
var $prefix = settings.prefix === false ? false : true;
var $hash = $prefix ? settings.hash === true ? "#" : "?" : "";
jQuery.query = new function() {
var is = function(o, t) {
return o != undefined && o !== null && (!!t ? o.constructor == t : true);
};
var parse = function(path) {
var m, rx = /\[([^[]*)\]/g, match = /^(\S+?)(\[\S*\])?$/.exec(path), base = match[1], tokens = [];
while (m = rx.exec(match[2])) tokens.push(m[1]);
return [base, tokens];
};
var set = function(target, tokens, value) {
var o, token = tokens.shift();
if (typeof target != 'object') target = null;
if (token === "") {
if (!target) target = [];
if (is(target, Array)) {
target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
} else if (is(target, Object)) {
var i = 0;
while (target[i++] != null);
target[--i] = tokens.length == 0 ? value : set(target[i], tokens.slice(0), value);
} else {
target = [];
target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
}
} else if (token && token.match(/^\s*[0-9]+\s*$/)) {
var index = parseInt(token, 10);
if (!target) target = [];
target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
} else if (token) {
var index = token.replace(/^\s*|\s*$/g, "");
if (!target) target = {};
if (is(target, Array)) {
var temp = {};
for (var i = 0; i < target.length; ++i) {
temp[i] = target[i];
}
target = temp;
}
target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
} else {
return value;
}
return target;
};
var queryObject = function(a) {
var self = this;
self.keys = {};
if (a.queryObject) {
jQuery.each(a.get(), function(key, val) {
self.SET(key, val);
});
} else {
jQuery.each(arguments, function() {
var q = "" + this;
q = q.replace(/^[?#]/,''); // remove any leading ? || #
q = q.replace(/[;&]$/,''); // remove any trailing & || ;
if ($spaces) q = q.replace(/[+]/g,' '); // replace +'s with spaces
jQuery.each(q.split(/[&;]/), function(){
var key = this.split('=')[0];
var val = this.split('=')[1];
if (!key) return;
if (/^[+-]?[0-9]+\.[0-9]*$/.test(val)) // simple float regex
val = parseFloat(val);
else if (/^[+-]?[0-9]+$/.test(val)) // simple int regex
val = parseInt(val, 10);
val = (!val && val !== 0) ? true : val;
if (val !== false && val !== true && typeof val != 'number')
val = decodeURIComponent(val);
self.SET(key, val);
});
});
}
return self;
};
queryObject.prototype = {
queryObject: true,
has: function(key, type) {
var value = this.get(key);
return is(value, type);
},
GET: function(key) {
if (!is(key)) return this.keys;
var parsed = parse(key), base = parsed[0], tokens = parsed[1];
var target = this.keys[base];
while (target != null && tokens.length != 0) {
target = target[tokens.shift()];
}
return typeof target == 'number' ? target : target || "";
},
get: function(key) {
var target = this.GET(key);
if (is(target, Object))
return jQuery.extend(true, {}, target);
else if (is(target, Array))
return target.slice(0);
return target;
},
SET: function(key, val) {
var value = !is(val) ? null : val;
var parsed = parse(key), base = parsed[0], tokens = parsed[1];
var target = this.keys[base];
this.keys[base] = set(target, tokens.slice(0), value);
return this;
},
set: function(key, val) {
return this.copy().SET(key, val);
},
REMOVE: function(key) {
return this.SET(key, null).COMPACT();
},
remove: function(key) {
return this.copy().REMOVE(key);
},
EMPTY: function() {
var self = this;
jQuery.each(self.keys, function(key, value) {
delete self.keys[key];
});
return self;
},
empty: function() {
return this.copy().EMPTY();
},
copy: function() {
return new queryObject(this);
},
COMPACT: function() {
function build(orig) {
var obj = typeof orig == "object" ? is(orig, Array) ? [] : {} : orig;
if (typeof orig == 'object') {
function add(o, key, value) {
if (is(o, Array))
o.push(value);
else
o[key] = value;
}
jQuery.each(orig, function(key, value) {
if (!is(value)) return true;
add(obj, key, build(value));
});
}
return obj;
}
this.keys = build(this.keys);
return this;
},
compact: function() {
return this.copy().COMPACT();
},
toString: function() {
var i = 0, queryString = [], chunks = [], self = this;
var addFields = function(arr, key, value) {
if (!is(value) || value === false) return;
var o = [key];
if (value !== true) {
o.push("=");
o.push(encodeURIComponent(value));
}
arr.push(o.join(""));
};
var build = function(obj, base) {
var newKey = function(key) {
return !base || base == "" ? [key].join("") : [base, "[", key, "]"].join("");
};
jQuery.each(obj, function(key, value) {
if (typeof value == 'object')
build(value, newKey(key));
else
addFields(chunks, newKey(key), value);
});
};
build(this.keys);
if (chunks.length > 0) queryString.push($hash);
queryString.push(chunks.join($separator));
return queryString.join("");
}
};
return new queryObject(location.search, location.hash);
};
}(jQuery.query || {}); // Pass in jQuery.query as settings object

@ -1,420 +0,0 @@
/**
* xslTransform
* Tools for XSLT transformations; jQuery wrapper for Sarissa <http://sarissa.sourceforge.net/>.
* See jQuery.fn.log below for documentation on $.log().
* See jQuery.fn.getTransform below for documention on the $.getTransform().
* See var DEBUG below for turning debugging/logging on and off.
*
* @version 20071214
* @since 2006-07-05
* @copyright Copyright (c) 2006 Glyphix Studio, Inc. http://www.glyphix.com
* @author Brad Brizendine <brizbane@gmail.com>, Matt Antone <antone@glyphix.com>
* @license MIT http://www.opensource.org/licenses/mit-license.php
* @requires >= jQuery 1.0.3 http://jquery.com/
* @requires jquery.debug.js http://jquery.glyphix.com/
* @requires >= sarissa.js 0.9.7.6 http://sarissa.sourceforge.net/
*
* @example
* var r = $.xsl.transform('path-to-xsl.xsl','path-to-xml.xml');
* @desc Perform a transformation and place the results in var r
*
* @example
* var r = $.xsl.transform('path-to-xsl.xsl','path-to-xml.xml');
* var str = $.xsl.serialize( r );
* @desc Perform a transformation, then turn the result into a string
*
* @example
* var doc = $.xsl.load('path-to-xml.xml');
* @desc Load an xml file and return a parsed xml object
*
* @example
* var xml = '<xmldoc><foo>bar</foo></xmldoc>';
* var doc = $.xsl.load(xml);
* @desc Load an xml string and return a parsed xml object
*/
(function($){
/*
* JQuery XSLT transformation plugin.
* Replaces all matched elements with the results of an XSLT transformation.
* See xslTransform above for more documentation.
*
* @example
* @desc See the xslTransform-example/index.html
*
* @param xsl String the url to the xsl file
* @param xml String the url to the xml file
* @param options Object various switches you can send to this function
* + params: an object of key/value pairs to be sent to xsl as parameters
* + xpath: defines the root node within the provided xml file
* + eval: if true, will attempt to eval javascript found in the transformed result
* + callback: if a Function, evaluate it when transformation is complete
* @returns
*/
$.fn.getTransform = function( xsl, xml, options ){
var settings = {
params: {}, // object of key/value pairs ... parameters to send to the XSL stylesheet
xpath: '', // xpath, used to send only a portion of the XML file to the XSL stylesheet
eval: true, // evaluate <script> blocks found in the transformed result
callback: '' // callback function, to be run on completion of the transformation
};
// initialize options hash; override the defaults with supplied options
$.extend( settings, options );
$.log( 'getTransform: ' + xsl + '::' + xml + '::' + settings.toString() );
// must have both xsl and xml
if( !xsl || !xml ){
$.log( 'getTransform: missing xsl or xml' );
return;
}
// run the jquery magic on all matched elements
return this.each( function(){
// perform the transformation
var trans = $.xsl.transform( xsl, xml, settings );
// make sure we have something
if( !trans.string ){
$.log('Received nothing from the transformation');
return false;
}
// ie can fail if there's an xml declaration line in the returned result
var re = trans.string.match(/<\?xml.*?\?>/);
if( re ){
trans.string = trans.string.replace( re, '' );
$.log( 'getTransform(): found an xml declaration and removed it' );
}
// place the result in the element
// 20070202: jquery 1.1.1 can get a "a.appendChild is not a function" error using html() sometimes ...
// no idea why yet, so adding a fallback to innerHTML
// ::warning:: ie6 has trouble with javascript events such as onclick assigned statically within the html when using innerHTML
try{
$(this).html( trans.string );
}catch(e){
$.log( 'getTransform: error placing results of transform into element, falling back to innerHTML: ' + e.toString() );
$(this)[0].innerHTML = trans.string;
}
// there might not be a scripts property
if( settings.eval && trans.scripts ){
if( trans.scripts.length > 0 ){
$.log( 'Found text/javascript in transformed result' );
// use jquery's globaleval to avoid security issues in adobe air
$.globalEval( trans.scripts );
}
}
// run the callback if it's a native function
if( settings.callback && $.isFunction(settings.callback) ){
settings.callback.apply();
}
});
};
// xsl scope
$.xsl = {
// version
version: 20071214,
// init ... test for requirements
init: function(){
// check for v1.0.4 / v1.1 or later of jQuery
try{
parseFloat($.fn.jquery) >= 1;
}catch(e){
alert('xslTransform requires jQuery 1.0.4 or greater ... please load it prior to xslTransform');
}
// check for Sarissa
try{
Sarissa;
}catch(e){
alert('Missing Sarissa ... please load it prior to xslTransform');
}
// if no log function, create a blank one
if( !$.log ){
$.log = function(){};
$.fn.debug = function(){};
}
// log the version
$.log( 'xslTransform:init(): version ' + this.version );
},
// initialize Sarissa's serializer
XMLSerializer: new XMLSerializer(),
/*
* serialize
* Turns the provided object into a string and returns it.
*
* @param data Mixed
* @returns String
*/
serialize: function( data ){
$.log( 'serialize(): received ' + typeof(data) );
// if it's already a string, no further processing required
if( typeof(data) == 'string' ){
$.log( 'data is already a string: ' + data );
return data;
}
return this.XMLSerializer.serializeToString( data );
},
/*
* xmlize
* Turns the provided javascript object into an xml document and returns it.
*
* @param data Mixed
* @returns String
*/
xmlize: function( data, root ){
$.log( 'xmlize(): received ' + typeof(data) );
root = root || 'root';
return Sarissa.xmlize(data,root);
},
/*
* load
* Attempts to load xml data by automatically sensing the type of the provided data.
*
* @param xml Mixed the xml data
* @returns Object
*/
load: function( xml ){
$.log( 'load(): received ' + typeof(xml) );
// the result
var r;
// if it's an object, assume it's already an XML object, so just return it
if( typeof(xml) == 'object' ){
return xml;
}
// if it's a string, determine if it's xml data or a path
// assume that the first character is an opening caret if it's XML data
if( xml.substring(0,1) == '<' ){
r = this.loadString( xml );
}else{
r = this.loadFile( xml );
}
if( r ){
// the following two lines are needed to get IE (msxml3) to run xpath ... set it on all xml data
r.setProperty( 'SelectionNamespaces', 'xmlns:xsl="http://www.w3.org/1999/XSL/Transform"' );
r.setProperty( 'SelectionLanguage', 'XPath' );
return r;
}else{
$.log( 'Unable to load ' + xml );
return false;
}
},
/*
* loadString
* Parses an XML string and returns the result.
*
* @param str String the xml string to turn into a parsed XML object
* @returns Object
*/
loadString: function( str ){
$.log( 'loadString(): ' + str + '::' + typeof(str) );
// use Sarissa to generate an XML doc
var p = new DOMParser();
var xml = p.parseFromString( str, 'text/xml' );
if( !xml ){
$.log( 'loadString(): parseFromString() failed' );
return false;
}
return xml;
},
/*
* loadFile
* Attempts to retrieve the requested path, specified by url.
* If url is an object, it's assumed it's already loaded, and just returns it.
*
* @param url Mixed
* @returns Object
*/
loadFile: function( url ){
$.log( 'loadFile(): ' + url + '::' + typeof(url) );
if( !url ){
$.log( 'ERROR: loadFile() missing url' );
return false;
}
// variable to hold ajax results
var doc;
/* ajax functionality provided by jQuery is commented, since it can't handle file:///
// function to receive data on successful download ... semicolon after brace is necessary for packing
this.xhrsuccess = function(data,str){
$.log( 'loadFile() completed successfully (' + str + ')' );
doc = data;
return true;
};
// function to handle downloading error ... semicolon after brace is necessary for packing
this.xhrerror = function(xhr,err){
// set debugging to true in order to force the display of this error
window.DEBUG = true;
$.log( 'loadFile() failed to load the requested file: (' + err + ') - xml: ' + xhr.responseXML + ' - text: ' + xhr.responseText );
doc = null;
return false;
};
// make asynchronous ajax call and call functions defined above on success/error
$.ajax({
type: 'GET',
url: url,
async: false,
success: this.xhrsuccess,
error: this.xhrerror
});
*/
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('GET', url, false);
xmlhttp.send('');
doc = xmlhttp.responseXML;
// check for total failure
if( !doc ){
$.log( 'ERROR: document ' + url + ' not found (404), or unable to load' );
return false;
}
// check for success but no data
if( doc.length == 0 ){
$.log( 'ERROR: document ' + url + ' loaded in loadFile() has no data' );
return false;
}
return doc;
},
/*
* transform
* Central transformation function: takes an xml doc and an xsl doc.
*
* @param xsl Mixed the xsl transformation document
* @param xml Mixed the xml document to be transformed
* @param options Object various switches you can send to this function
* + params: an object of key/value pairs to be sent to xsl as parameters
* + xpath: defines the root node within the provided xml file
* @returns Object the results of the transformation
* + xsl: the raw xsl doc
* + doc: the raw results of the transform
* + string: the serialized doc
*/
transform: function( xsl, xml, options ){
$.log( 'transform(): ' + xsl + '::' + xml + '::' + (options ? options.toString() : 'no options provided') );
// set up request and result
var request = {
// the source and loaded object for xml
xsl: {
source: xsl,
doc: null
},
// the source and loaded object for xsl
xml: {
source: xml,
doc: null
},
// the options
options: options || {},
// the result doc and string
result: {
doc: null,
string: '',
scripts: null,
error: ''
}
}
// set up error handler
var err = function( what ){
var docerr = '', srcerr = '';
// build the src error string
srcerr = (typeof(request[what].source) == 'string') ? ' (' + what + ' loaded from provided path)' : ' (' + what + ' loaded from provided object)';
// build the text error string
docerr = (typeof(request[what].doc) == 'object') ? '[success]' : '[failure]';
// include the root node if we have a doc object and it's xml
if( what == 'xml' && typeof(request[what].doc) == 'object' ){
docerr += ' root node of "' + request[what].doc.getElementsByTagName('*')[0].nodeName + '"';
}
return docerr + ' ' + srcerr;
}
// load the files
try{
request.xsl.doc = this.load(xsl);
request.xml.doc = this.load(xml);
}catch(e){
$.log('Unable to load either xsl [' + err('xsl') + '] or xml [' + err('xml') + ']');
throw( err('xsl') + '::' + err('xml') );
return false;
}
// if we have an xpath, replace xml.doc with the results of running it
// as of 2007-12-03, IE throws a "msxml6: the parameter is incorrect" error, so removing this
if( request.options.xpath && request.xml.doc && !jQuery.browser.msie ){
// run the xpath
request.xml.doc = request.xml.doc.selectSingleNode( request.options.xpath.toString() );
$.log( 'transform(): xpath has been run...resulting doc: ' + (this.serialize(request.xml.doc)) );
}
// attach the processor
var processor = new XSLTProcessor();
// stylesheet must be imported before parameters can be added
processor.importStylesheet( request.xsl.doc );
// add parameters to the processor
if( request.options.params && processor ){
$.log( 'transform(): received xsl params: ' + request.options.params.toString() );
for( key in request.options.params ){
// name and value must be strings; first parameter is namespace
var p = request.options.params[key] ? request.options.params[key].toString() : request.options.params[key];
try{
processor.setParameter( null, key.toString(), p );
}catch(e){
$.log('Unable to set parameter "' + key + '"');
return false;
}
$.log( 'set parameter "' + key.toString() + '" to "' + p + '"' );
}
}
// perform the transformation
try{
request.result.doc = processor.transformToDocument( request.xml.doc );
// handle transform error
request.result.error = Sarissa.getParseErrorText( request.result.doc );
if( request.result.error != Sarissa.PARSED_OK ){
// throw the error text
request.result.error = 'transform(): error in transformation: ' + request.result.error + ' :: using xsl: ' + err('xsl') + ' => xml: ' + err('xml');
$.log(request.result.error);
}
}catch(e){
request.result.error = 'Unable to perform transformation :: using xsl: ' + err('xsl') + ' => xml: ' + err('xml');
$.log(request.result.error);
throw(request.result.error);
return request.result;
}
// if we made it this far, the transformation was successful
request.result.string = this.serialize( request.result.doc );
// store reference to all scripts found in the doc (not result.string)
request.result.scripts = jQuery('script',request.result.doc).text();
return request.result;
}
};
// initialize the $.xsl object
$.xsl.init();
})(jQuery);

File diff suppressed because it is too large Load Diff

@ -1,220 +0,0 @@
/**
* ====================================================================
* About
* ====================================================================
* Sarissa cross browser XML library - IE XPath Emulation
* @version 0.9.9.4
* @author: Copyright 2004-2007 Emmanouil Batsis, mailto: mbatsis at users full stop sourceforge full stop net
*
* This script emulates Internet Explorer's selectNodes and selectSingleNode
* for Mozilla. Associating namespace prefixes with URIs for your XPath queries
* is easy with IE's setProperty.
* USers may also map a namespace prefix to a default (unprefixed) namespace in the
* source document with Sarissa.setXpathNamespaces
*
* ====================================================================
* Licence
* ====================================================================
* Sarissa is free software distributed under the GNU GPL version 2 (see <a href="gpl.txt">gpl.txt</a>) or higher,
* GNU LGPL version 2.1 (see <a href="lgpl.txt">lgpl.txt</a>) or higher and Apache Software License 2.0 or higher
* (see <a href="asl.txt">asl.txt</a>). This means you can choose one of the three and use that if you like. If
* you make modifications under the ASL, i would appreciate it if you submitted those.
* In case your copy of Sarissa does not include the license texts, you may find
* them online in various formats at <a href="http://www.gnu.org">http://www.gnu.org</a> and
* <a href="http://www.apache.org">http://www.apache.org</a>.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
* KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE
* AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
if(Sarissa._SARISSA_HAS_DOM_FEATURE && document.implementation.hasFeature("XPath", "3.0")){
/**
* <p>SarissaNodeList behaves as a NodeList but is only used as a result to <code>selectNodes</code>,
* so it also has some properties IEs proprietery object features.</p>
* @private
* @constructor
* @argument i the (initial) list size
*/
SarissaNodeList = function (i){
this.length = i;
};
/**
* <p>Set an Array as the prototype object</p>
* @private
*/
SarissaNodeList.prototype = [];
/**
* <p>Inherit the Array constructor </p>
* @private
*/
SarissaNodeList.prototype.constructor = Array;
/**
* <p>Returns the node at the specified index or null if the given index
* is greater than the list size or less than zero </p>
* <p><b>Note</b> that in ECMAScript you can also use the square-bracket
* array notation instead of calling <code>item</code>
* @argument i the index of the member to return
* @returns the member corresponding to the given index
* @private
*/
SarissaNodeList.prototype.item = function(i) {
return (i < 0 || i >= this.length)?null:this[i];
};
/**
* <p>Emulate IE's expr property
* (Here the SarissaNodeList object is given as the result of selectNodes).</p>
* @returns the XPath expression passed to selectNodes that resulted in
* this SarissaNodeList
* @private
*/
SarissaNodeList.prototype.expr = "";
/** dummy, used to accept IE's stuff without throwing errors */
if(window.XMLDocument && (!XMLDocument.prototype.setProperty)){
XMLDocument.prototype.setProperty = function(x,y){};
}
/**
* <p>Programmatically control namespace URI/prefix mappings for XPath
* queries.</p>
* <p>This method comes especially handy when used to apply XPath queries
* on XML documents with a default namespace, as there is no other way
* of mapping that to a prefix.</p>
* <p>Using no namespace prefix in DOM Level 3 XPath queries, implies you
* are looking for elements in the null namespace. If you need to look
* for nodes in the default namespace, you need to map a prefix to it
* first like:</p>
* <pre>Sarissa.setXpathNamespaces(oDoc, "xmlns:myprefix'http://mynsURI'");</pre>
* <p><b>Note 1 </b>: Use this method only if the source document features
* a default namespace (without a prefix), otherwise just use IE's setProperty
* (moz will rezolve non-default namespaces by itself). You will need to map that
* namespace to a prefix for queries to work.</p>
* <p><b>Note 2 </b>: This method calls IE's setProperty method to set the
* appropriate namespace-prefix mappings, so you dont have to do that.</p>
* @param oDoc The target XMLDocument to set the namespace mappings for.
* @param sNsSet A whilespace-seperated list of namespace declarations as
* those would appear in an XML document. E.g.:
* <code>&quot;xmlns:xhtml=&apos;http://www.w3.org/1999/xhtml&apos;
* xmlns:&apos;http://www.w3.org/1999/XSL/Transform&apos;&quot;</code>
* @throws An error if the format of the given namespace declarations is bad.
*/
Sarissa.setXpathNamespaces = function(oDoc, sNsSet) {
//oDoc._sarissa_setXpathNamespaces(sNsSet);
oDoc._sarissa_useCustomResolver = true;
var namespaces = sNsSet.indexOf(" ")>-1?sNsSet.split(" "):[sNsSet];
oDoc._sarissa_xpathNamespaces = [];
for(var i=0;i < namespaces.length;i++){
var ns = namespaces[i];
var colonPos = ns.indexOf(":");
var assignPos = ns.indexOf("=");
if(colonPos > 0 && assignPos > colonPos+1){
var prefix = ns.substring(colonPos+1, assignPos);
var uri = ns.substring(assignPos+2, ns.length-1);
oDoc._sarissa_xpathNamespaces[prefix] = uri;
}else{
throw "Bad format on namespace declaration(s) given";
}
}
};
/**
* @private Flag to control whether a custom namespace resolver should
* be used, set to true by Sarissa.setXpathNamespaces
*/
XMLDocument.prototype._sarissa_useCustomResolver = false;
/** @private */
XMLDocument.prototype._sarissa_xpathNamespaces = [];
/**
* <p>Extends the XMLDocument to emulate IE's selectNodes.</p>
* @argument sExpr the XPath expression to use
* @argument contextNode this is for internal use only by the same
* method when called on Elements
* @returns the result of the XPath search as a SarissaNodeList
* @throws An error if no namespace URI is found for the given prefix.
*/
XMLDocument.prototype.selectNodes = function(sExpr, contextNode, returnSingle){
var nsDoc = this;
var nsresolver;
if(this._sarissa_useCustomResolver){
nsresolver = function(prefix){
var s = nsDoc._sarissa_xpathNamespaces[prefix];
if(s){
return s;
}
else {
throw "No namespace URI found for prefix: '" + prefix+"'";
}
};
}
else{
nsresolver = this.createNSResolver(this.documentElement);
}
var result = null;
if(!returnSingle){
var oResult = this.evaluate(sExpr,
(contextNode?contextNode:this),
nsresolver,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var nodeList = new SarissaNodeList(oResult.snapshotLength);
nodeList.expr = sExpr;
for(var i=0;i<nodeList.length;i++){
nodeList[i] = oResult.snapshotItem(i);
}
result = nodeList;
}
else {
result = this.evaluate(sExpr,
(contextNode?contextNode:this),
nsresolver,
XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
return result;
};
/**
* <p>Extends the Element to emulate IE's selectNodes</p>
* @argument sExpr the XPath expression to use
* @returns the result of the XPath search as an (Sarissa)NodeList
* @throws An
* error if invoked on an HTML Element as this is only be
* available to XML Elements.
*/
Element.prototype.selectNodes = function(sExpr){
var doc = this.ownerDocument;
if(doc.selectNodes){
return doc.selectNodes(sExpr, this);
}
else{
throw "Method selectNodes is only supported by XML Elements";
}
};
/**
* <p>Extends the XMLDocument to emulate IE's selectSingleNode.</p>
* @argument sExpr the XPath expression to use
* @argument contextNode this is for internal use only by the same
* method when called on Elements
* @returns the result of the XPath search as an (Sarissa)NodeList
*/
XMLDocument.prototype.selectSingleNode = function(sExpr, contextNode){
var ctx = contextNode?contextNode:null;
return this.selectNodes(sExpr, ctx, true);
};
/**
* <p>Extends the Element to emulate IE's selectSingleNode.</p>
* @argument sExpr the XPath expression to use
* @returns the result of the XPath search as an (Sarissa)NodeList
* @throws An error if invoked on an HTML Element as this is only be
* available to XML Elements.
*/
Element.prototype.selectSingleNode = function(sExpr){
var doc = this.ownerDocument;
if(doc.selectSingleNode){
return doc.selectSingleNode(sExpr, this);
}
else{
throw "Method selectNodes is only supported by XML Elements";
}
};
Sarissa.IS_ENABLED_SELECT_NODES = true;
}

@ -36,7 +36,7 @@
if (tabid == "#Bookmarks") {
reloadBM();
} else {
$tabs.tabs('select',3);
$tabs.tabs('select',2);
}
});
}); //close each(

@ -24,7 +24,6 @@ $(function() {
})
//]]>
</script>
<img src="/Banner.png?textcolor=000000&bgcolor=ffffff&bordercolor=aaaaaa" alt="banner" class="banner"/>
<table class="adminconsole">
<tr><td class="head" colspan="7"><h3>Peer Control</h3><hr /></td></tr>
<tr>
@ -148,4 +147,5 @@ $(function() {
</td>
<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
</tr>
</table>
</table>
<img src="/Banner.png?textcolor=000000&bgcolor=ffffff&bordercolor=aaaaaa" alt="banner" class="banner"/>

@ -7,11 +7,11 @@
<link media="screen" type="text/css" href="css/base.css" rel="stylesheet" />
<title>YaCy Widget</title>
<script src="js/jquery-1.2.3.min.js" type="text/javascript"></script>
<script src="js/jquery-1.2.6.min.js" type="text/javascript"></script>
<script src="js/jquery.jfeed.js" type="text/javascript""></script>
<script src="js/jquery.scrollTo-min.js" type="text/javascript""></script>
<script src="js/jquery.serialScroll-min.js" type="text/javascript""></script>
<script src="js/jquery.query-1.2.3.js" type="text/javascript""></script>
<script src="js/jquery.query.js" type="text/javascript""></script>
<script type="text/javascript">
$(document).ready(function() {
$('#settings').hide();
@ -19,10 +19,11 @@ $(document).ready(function() {
$('.items').slideToggle('fast');
});
var url = $.query.get('rss');
alert(url);
if (url == '') {
url = '/yacysearch.rss';
}
$.query.destructiveRemove("rss");
$.query.REMOVE("rss");
jQuery.getFeed({
url: url + $.query.toString(),
success: function(feed) {

@ -0,0 +1,154 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link media="screen" type="text/css" href="css/jquery.flexigrid.css" rel="stylesheet" />
<link media="screen" type="text/css" href="css/base.css" rel="stylesheet" />
<script src="js/jquery-1.2.6.min.js" type="text/javascript"></script>
<script src="js/jquery.query.js" type="text/javascript""></script>
<script src="js/jquery.dimensions.min.js" type="text/javascript"></script>
<script src="js/jquery-faviconize-1.0.js" type="text/javascript"></script>
<script src="js/jquery-flexigrid.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
var height = document.documentElement.clientHeight - 240;
var query = $.query.get('query');
$.query.REMOVE('query');
var url = '/yacysearch.json' + $.query.toString();
$(".yresult").flexigrid({
url: url,
dataType: 'json',
method: 'GET',
query: query,
colModel: [
{display: 'Hash', name : 'hash', width : 50, sortable : false, align: 'center', hide: true},
{display: '', name : 'public', width : 25, sortable : true, align: 'center'},
{display: 'Title', name : 'title', width : 550, sortable : true, align: 'left'},
{display: 'Date', name : 'date', width : 200, sortable : true, align: 'left'}
],
buttons: [
{name: 'Crawl', bclass: 'crawl', onpress: yaction},
{name: 'Open', bclass: 'pictures', onpress: yaction},
{separator: true},
{name: 'Bookmark', bclass: 'bookmark', onpress: yaction},
{name: 'Blacklist', bclass: 'blacklist', onpress: yaction},
{separator: true},
{name: 'Help', bclass: 'help', onpress:yaction},
],
useRp: true,
rp: 10,
usepager: true,
striped: true,
nowrap: false,
height: height,
autoload: true,
onSuccess: function() {
$("a.favicon").faviconize({
position: "before",
defaultImage: "img-2/article.png",
className: "favicon"
});
},
preProcess: function(data) {
var total = data.channels[0].totalResults.replace(/[,.]/,"");
var page = (data.channels[0].startIndex / data.channels[0].itemsPerPage) + 1;
var rows = {};
$.each (
data.channels[0].items,
function(i,item) {
if (item) {
var html = "<h3 class='linktitle'>"+item.title+"</h3><p class='desc'>"+item.description+"</p><p class='url'><a href='"+item.link+"'>"+item.link+"</a>"
var fav = "<a class='favicon' href='"+item.link+"'></a>";
rows[i] = {id: item.guid, cell: [item.guid, fav, html, item.pubDate]};
}
}
);
var pdata = {
page: page,
total: total,
rows: rows
};
return pdata;
},
onSubmit: function() {
var p = this;
var g = $(".yresult");
$('.pPageStat',this.pDiv).html(p.procmsg);
$('.pReload',this.pDiv).addClass('loading');
if (g.bDiv) $(g.block).css({top:g.bDiv.offsetTop});
if (p.hideOnSubmit) $(this.gDiv).prepend(g.block); //$(t).hide();
if ($.browser.opera) $(t).css('visibility','hidden');
if (!p.newp) p.newp = 1;
if (p.page>p.pages) p.page = p.pages;
var offset = p.newp * p.rp -p.rp;
var param = [
{ name : 'startRecord', value : offset }
,{ name : 'maximumRecords', value : p.rp }
,{ name : 'search', value : p.query}
];
if (p.params) {
for (var pi = 0; pi < p.params.length; pi++) param[param.length] = p.params[pi];
}
$.ajax({
type: p.method,
url: p.url,
data: param,
dataType: p.dataType,
success: function(data){
/* yacy limits itemsPerPage for unauthenticated users */
p.rp = parseInt(data.channels[0].itemsPerPage);
g.flexAddData(data);
},
error: function(data) {
try { if (p.onError) p.onError(data); } catch (e) {}
}
});
}
});
});
function yaction(com, grid) {
if (com == 'Bookmark') {
confirm('Add ' + $('.trSelected',grid).length + ' search results to bookmark(s)?')
$('.trSelected',grid).each(function(){
var url = $(this).find('.url').text();
var title = $(this).find('.linktitle').text();
var desc = $(this).find('.desc').text();
var tags = $.query.get('query');
var path = "/searchResults";
var pub = "private";
var query = "&url="+url+"&title="+title+"&description="+desc+"&tags="+tags+"&path="+path+"&public="+pub+"&add=create";
$.ajax({
type: "POST",
url: "/xml/bookmarks/posts/add_p.xml?login="+query,
dataType: "xml",
success: function(xml) {
alert("Debug: posted bookmark for: "+url);
}
});
});
} else if (com =='Open') {
$('.trSelected',grid).each(function(){
var url = $(this).find('.url').text();
window.open(url);
});
} else {
alert("Test!");
}
}
//]]>
</script>
<title>YaCy-UI Search</title>
</head>
<body>
<table class="yresult">
<tbody></tbody>
</table>
</body>
</html>
Loading…
Cancel
Save