- added /yacy/ui/yacyuisearch.html (stand alone version) git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@5534 6c8d7289-2bf4-0310-a012-ef5d649a1542pull/1/head
parent
6cbca1e508
commit
55dd15e344
@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -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>"xmlns:xhtml='http://www.w3.org/1999/xhtml'
|
||||
* xmlns:'http://www.w3.org/1999/XSL/Transform'"</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;
|
||||
}
|
@ -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…
Reference in new issue