diff --git a/htroot/yacy/ui/css/base.css b/htroot/yacy/ui/css/base.css index 1f61e7822..29ffc27fb 100644 --- a/htroot/yacy/ui/css/base.css +++ b/htroot/yacy/ui/css/base.css @@ -1,5 +1,34 @@ -/* Search */ +/* Main */ +div.main { + float:left; + width:100%; +} +div.top { + float:left; + width:75%; + margin-top: -1.0em; +} + +/* Searchbox */ +.searchbox { + float:left; + width:800px; +} +.searchbox .boxed h3 { + font-family: Helvetica,Arial,sans-serif; + display:block; + padding:5px 15px; + margin-top: 0; + margin-bottom: 0px; + text-decoration: none; + font-weight: bold; + font-size: 14px; + color: black; + border-top: 1px solid #FFFFFF; + border-bottom: 1px solid #999; + background: url(../img/box800.png) no-repeat; +} #searchtext { width: 280px; margin-top: 1em; @@ -8,9 +37,8 @@ border: 1px solid #CCCCCC; font: normal small Arial, Helvetica, sans-serif; color: #999999; -} - -#searchbutton { +} +#searchbutton, .selectbox { width: 100px; margin-top: 1em; margin-bottom: .5em; @@ -19,60 +47,69 @@ font: normal small Arial, Helvetica, sans-serif; color: #999999; } - -/* Main */ - -div.main { - float:left; - width:70%; +.filter { + width: 180px; + margin-bottom: .5em; + padding: 2px 5px; + border: 1px solid #CCCCCC; + font: normal small Arial, Helvetica, sans-serif; + color: #999999; +} +.selector { + width: 100px; + margin-bottom: .5em; + padding: 2px 5px; + border: 1px solid #CCCCCC; + font: normal small Arial, Helvetica, sans-serif; + color: #999999; +} +.small { + font: normal Arial, Helvetica, sans-serif; + font-size: 9px; +} +.normal { + font: normal small Arial, Helvetica, sans-serif; } /* Sidebar */ -div.sidebar { - margin-top: 1.5em; - margin-left: 2em; - float:left; +div.sidebar { + margin-left: 1em; + margin-right: 1em; + float:right; width:250px; } - -/* Boxed Style */ - -.searchbox { - float:left; - width:600px; +.menu img { + width: 32px; + height: 32px; + padding: 2px 16px 2px 8px; + vertical-align: middle; +} +img { + vertical-align: top; } -.boxed{ - margin-bottom: 1em; -} - -.boxed .title { - display: block; - height: 25px; - padding: 5px 0 0 10px; - font-weight: bold; +.sidebar .boxed h3 { font-family: Helvetica,Arial,sans-serif; - background: url(../img/tab.png) no-repeat; -} -.sidebar .boxed .title { - display: block; - height: 25px; - padding: 5px 0 0 10px; + display:block; + padding:5px 15px; + margin-top: 0; + margin-bottom: 0px; + text-decoration: none; font-weight: bold; - font-family: Helvetica,Arial,sans-serif; - background: url(../img/box250.png) no-repeat; + font-size: 14px; + color: black; + background: url(../img/box250.png) no-repeat; + border-top: 1px solid #FFFFFF; + border-bottom: 1px solid #999; } -.searchbox .boxed .title { - display: block; - height: 25px; - padding: 5px 0 0 10px; - font-weight: bold; - font-family: Helvetica,Arial,sans-serif; - background: url(../img/box600.png) no-repeat; -} +/* Boxed Style */ +.boxed{ + margin-top: 1em; + margin-bottom: 1em; +} .boxed .content { font-family: Helvetica,Arial,sans-serif; border: 1px solid #000000; @@ -122,6 +159,24 @@ table.ytable thead tr .headerSortDown { table.ytable thead tr .headerSortDown, table.ytable thead tr .headerSortUp { background-color: #8dbdd8; } +table.ytable img { + border:0; + padding-top:6px; +} + +table.ystat { + text-align: left; + height: 75px; + margin-left: 10px; + width: 200px; + padding-bottom: 5px; +} +table.ystat td { + vertical-align: middle; + width: 100px; + font-family: Courier New,Courier,monospace; + font-size: 10px; +} /* YaCy Bookmarks ---------------------------*/ .url { @@ -153,15 +208,22 @@ h3.linktitle { div.searchresults { width:100%; - margin-top: 1.5em; - margin-left: 5px; + margin-top: 1.0em; + margin-left: 5px; +} +div.searchselect { + width:100%; + margin-top: 1.0em; + margin-left: 5px; + background-color:#F0F0F6; } + div.searchresults.hidden { display:none; } -.searchresults h3.linktitle { - margin:2px; +.searchresults h3.linktitle, .searchselect h3.linktitle { + margin:2px; padding-left: 20px; margin-bottom: -0.5em; font-size: 1.0em; @@ -178,24 +240,77 @@ div.searchresults.hidden { .snippet b { color: black; } -.searchresults .linktitle a { +.searchresults .linktitle a, .searchselect .linktitle a { color:#239AFF; text-decoration:none; } -.searchresults .url { +.searchresults .url, .searchselect .url { font-size: 0.9em; line-height: 1.2em; margin-bottom:0.6em; margin-left:22px; } -.searchresults .url a { +.searchresults .url a,. searchselect .url a { color:#20A020; text-decoration:none; } -img.favicon{ - margin: 0px 4px 0px -20px; - width: 16px; +img.favicon{ + width: 16px;pagesize height: 16px; - float: left; + vertical-align: middle; + margin-left: -20px; +} +/*
,
,
*/ + +dl.pairs dd { + float:right; + padding: 2px; + margin-right:15px; +} + +dl.pairs dt { + float:left; + text-align:left; + padding: 5px; +} +/* jQuery Accordion */ +.basic { + font-family: Helvetica,Arial,sans-serif; + width: 250px; +} +.basic div { + background-color: white; + margin-bottom : 10px; + border: none; + margin: 0px; + padding: 10px; + border: 1px solid black; + text-decoration: none; + font-size: 12px; } +.basic p { + +} +.basic h3 { + cursor:pointer; + display:block; + padding:5px 15px; + margin-top: 0; + margin-bottom: 0px; + text-decoration: none; + font-weight: bold; + font-size: 14px; + color: black; + background: url(../img/box250.png) no-repeat; + border-top: 1px solid #FFFFFF; + border-bottom: 1px solid #999; +} +.basic h3:hover { + +} +.basic h3.selected { + +} + + diff --git a/htroot/yacy/ui/css/jquery.pagination.css b/htroot/yacy/ui/css/jquery.pagination.css index bf7d28d1d..e901cb58f 100644 --- a/htroot/yacy/ui/css/jquery.pagination.css +++ b/htroot/yacy/ui/css/jquery.pagination.css @@ -1,7 +1,8 @@ .pagination { font-size: 1em; - margin-left: 26px; - margin-top: 25px; + margin-top: 20px; + margin-left: 10px; + float:left; } .pagination a { @@ -29,3 +30,5 @@ border-color:#999; background:#fff; } + + diff --git a/htroot/yacy/ui/css/jquery.tablesorter.pager.css b/htroot/yacy/ui/css/jquery.tablesorter.pager.css index 4987aac80..de8e4eab5 100644 --- a/htroot/yacy/ui/css/jquery.tablesorter.pager.css +++ b/htroot/yacy/ui/css/jquery.tablesorter.pager.css @@ -30,7 +30,9 @@ div.tablesorterPager select { font: normal small Arial, Helvetica, sans-serif; color: #999999; } - +div.tablesorterPager img{ + vertical-align: middle; +} diff --git a/htroot/yacy/ui/index.html b/htroot/yacy/ui/index.html index 0d68fee4d..b90113d29 100644 --- a/htroot/yacy/ui/index.html +++ b/htroot/yacy/ui/index.html @@ -1,16 +1,16 @@ - - + + - - - - YaCy - Peer-to-Peer Search Network - - - - + + + + + + + + @@ -18,96 +18,148 @@ - + + + - +
+ +
-
- -
- + diff --git a/htroot/yacy/ui/js/jquery-faviconize-1.0.js b/htroot/yacy/ui/js/jquery-faviconize-1.0.js new file mode 100644 index 000000000..7391bddff --- /dev/null +++ b/htroot/yacy/ui/js/jquery-faviconize-1.0.js @@ -0,0 +1,44 @@ +/** + * Faviconize (http://www.babylon-design.com/share/faviconize/) + * A jQuery plugin for displaying a favicon on an external link. + * + * Version 1.0 + * March 4th, 2008 + * + * Author : Samuel Le Morvan (http://www.babylon-design.com/) + * + * Inspired by: + * Ask the CSS Guy (http://www.askthecssguy.com/2006/12/hyperlink_cues_with_favicons.html) + * + * + **/ +(function($){ + $.fn.faviconize = function(e) { + + var e = $.extend({position:'before', linkable:false, exceptions: new Array()}, e); + + function faviconizePlace(a, h) { + switch(e.position) { + case "before" : a.before(h+' '); break; + case "after" : a.after(' '+h); break; + default : break; + } + } + + $(this).each(function() { + var a = $(this); + var r = a.attr("href").match(/http:\/\/[a-z0-9.-]*(\/)?/i); + var r = r[0] + ((r[1] == null) ? "/" : ""); + if(r) { + if($.grep(e.exceptions, function(x) {x = (x.match(/\/$/) == null) ? x+"/" : x; return (x == r);}).length == 0) { + var f = r + 'favicon.ico'; + var i = new Image(); $(i).attr("src", f); + var h = ''+ ((e.linkable) ? a.text() : '') +''; + h = (e.linkable) ? ''+h+'' : h; + $(i).load(function() {faviconizePlace(a, h);}); + $(i).error(function() {if(e.defaultImage) {faviconizePlace(a, h.replace(/src="(.*?)"/i, 'src="'+e.defaultImage+'"')); }}); + } + } + }); + } +})(jQuery); diff --git a/htroot/yacy/ui/js/jquery.accordion.js b/htroot/yacy/ui/js/jquery.accordion.js new file mode 100644 index 000000000..09aa31b86 --- /dev/null +++ b/htroot/yacy/ui/js/jquery.accordion.js @@ -0,0 +1,311 @@ +/* + * jQuery UI Accordion 1.6 + * + * Copyright (c) 2007 Jörn Zaefferer + * + * http://docs.jquery.com/UI/Accordion + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Revision: $Id: jquery.accordion.js 4876 2008-03-08 11:49:04Z joern.zaefferer $ + * + */ + +;(function($) { + +// If the UI scope is not available, add it +$.ui = $.ui || {}; + +$.fn.extend({ + accordion: function(options, data) { + var args = Array.prototype.slice.call(arguments, 1); + + return this.each(function() { + if (typeof options == "string") { + var accordion = $.data(this, "ui-accordion"); + accordion[options].apply(accordion, args); + // INIT with optional options + } else if (!$(this).is(".ui-accordion")) + $.data(this, "ui-accordion", new $.ui.accordion(this, options)); + }); + }, + // deprecated, use accordion("activate", index) instead + activate: function(index) { + return this.accordion("activate", index); + } +}); + +$.ui.accordion = function(container, options) { + + // setup configuration + this.options = options = $.extend({}, $.ui.accordion.defaults, options); + this.element = container; + + $(container).addClass("ui-accordion"); + + if ( options.navigation ) { + var current = $(container).find("a").filter(options.navigationFilter); + if ( current.length ) { + if ( current.filter(options.header).length ) { + options.active = current; + } else { + options.active = current.parent().parent().prev(); + current.addClass("current"); + } + } + } + + // calculate active if not specified, using the first header + options.headers = $(container).find(options.header); + options.active = findActive(options.headers, options.active); + + if ( options.fillSpace ) { + var maxHeight = $(container).parent().height(); + options.headers.each(function() { + maxHeight -= $(this).outerHeight(); + }); + var maxPadding = 0; + options.headers.next().each(function() { + maxPadding = Math.max(maxPadding, $(this).innerHeight() - $(this).height()); + }).height(maxHeight - maxPadding); + } else if ( options.autoheight ) { + var maxHeight = 0; + options.headers.next().each(function() { + maxHeight = Math.max(maxHeight, $(this).outerHeight()); + }).height(maxHeight); + } + + options.headers + .not(options.active || "") + .next() + .hide(); + options.active.parent().andSelf().addClass(options.selectedClass); + + if (options.event) + $(container).bind((options.event) + ".ui-accordion", clickHandler); +}; + +$.ui.accordion.prototype = { + activate: function(index) { + // call clickHandler with custom event + clickHandler.call(this.element, { + target: findActive( this.options.headers, index )[0] + }); + }, + + enable: function() { + this.options.disabled = false; + }, + disable: function() { + this.options.disabled = true; + }, + destroy: function() { + this.options.headers.next().css("display", ""); + if ( this.options.fillSpace || this.options.autoheight ) { + this.options.headers.next().css("height", ""); + } + $.removeData(this.element, "ui-accordion"); + $(this.element).removeClass("ui-accordion").unbind(".ui-accordion"); + } +} + +function scopeCallback(callback, scope) { + return function() { + return callback.apply(scope, arguments); + }; +} + +function completed(cancel) { + // if removed while animated data can be empty + if (!$.data(this, "ui-accordion")) + return; + var instance = $.data(this, "ui-accordion"); + var options = instance.options; + options.running = cancel ? 0 : --options.running; + if ( options.running ) + return; + if ( options.clearStyle ) { + options.toShow.add(options.toHide).css({ + height: "", + overflow: "" + }); + } + $(this).triggerHandler("change.ui-accordion", [options.data], options.change); +} + +function toggle(toShow, toHide, data, clickedActive, down) { + var options = $.data(this, "ui-accordion").options; + options.toShow = toShow; + options.toHide = toHide; + options.data = data; + var complete = scopeCallback(completed, this); + + // count elements to animate + options.running = toHide.size() == 0 ? toShow.size() : toHide.size(); + + if ( options.animated ) { + if ( !options.alwaysOpen && clickedActive ) { + $.ui.accordion.animations[options.animated]({ + toShow: jQuery([]), + toHide: toHide, + complete: complete, + down: down, + autoheight: options.autoheight + }); + } else { + $.ui.accordion.animations[options.animated]({ + toShow: toShow, + toHide: toHide, + complete: complete, + down: down, + autoheight: options.autoheight + }); + } + } else { + if ( !options.alwaysOpen && clickedActive ) { + toShow.toggle(); + } else { + toHide.hide(); + toShow.show(); + } + complete(true); + } +} + +function clickHandler(event) { + var options = $.data(this, "ui-accordion").options; + if (options.disabled) + return false; + + // called only when using activate(false) to close all parts programmatically + if ( !event.target && !options.alwaysOpen ) { + options.active.parent().andSelf().toggleClass(options.selectedClass); + var toHide = options.active.next(), + data = { + instance: this, + options: options, + newHeader: jQuery([]), + oldHeader: options.active, + newContent: jQuery([]), + oldContent: toHide + }, + toShow = options.active = $([]); + toggle.call(this, toShow, toHide, data ); + return false; + } + // get the click target + var clicked = $(event.target); + + // due to the event delegation model, we have to check if one + // of the parent elements is our actual header, and find that + if ( clicked.parents(options.header).length ) + while ( !clicked.is(options.header) ) + clicked = clicked.parent(); + + var clickedActive = clicked[0] == options.active[0]; + + // if animations are still active, or the active header is the target, ignore click + if (options.running || (options.alwaysOpen && clickedActive)) + return false; + if (!clicked.is(options.header)) + return; + + // switch classes + options.active.parent().andSelf().toggleClass(options.selectedClass); + if ( !clickedActive ) { + clicked.parent().andSelf().addClass(options.selectedClass); + } + + // find elements to show and hide + var toShow = clicked.next(), + toHide = options.active.next(), + //data = [clicked, options.active, toShow, toHide], + data = { + instance: this, + options: options, + newHeader: clicked, + oldHeader: options.active, + newContent: toShow, + oldContent: toHide + }, + down = options.headers.index( options.active[0] ) > options.headers.index( clicked[0] ); + + options.active = clickedActive ? $([]) : clicked; + toggle.call(this, toShow, toHide, data, clickedActive, down ); + + return false; +}; + +function findActive(headers, selector) { + return selector != undefined + ? typeof selector == "number" + ? headers.filter(":eq(" + selector + ")") + : headers.not(headers.not(selector)) + : selector === false + ? $([]) + : headers.filter(":eq(0)"); +} + +$.extend($.ui.accordion, { + defaults: { + selectedClass: "selected", + alwaysOpen: true, + animated: 'slide', + event: "click", + header: "a", + autoheight: true, + running: 0, + navigationFilter: function() { + return this.href.toLowerCase() == location.href.toLowerCase(); + } + }, + animations: { + slide: function(options, additions) { + options = $.extend({ + easing: "swing", + duration: 300 + }, options, additions); + if ( !options.toHide.size() ) { + options.toShow.animate({height: "show"}, options); + return; + } + var hideHeight = options.toHide.height(), + showHeight = options.toShow.height(), + difference = showHeight / hideHeight; + options.toShow.css({ height: 0, overflow: 'hidden' }).show(); + options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate({height:"hide"},{ + step: function(now) { + var current = (hideHeight - now) * difference; + if ($.browser.msie || $.browser.opera) { + current = Math.ceil(current); + } + options.toShow.height( current ); + }, + duration: options.duration, + easing: options.easing, + complete: function() { + if ( !options.autoheight ) { + options.toShow.css("height", "auto"); + } + options.complete(); + } + }); + }, + bounceslide: function(options) { + this.slide(options, { + easing: options.down ? "bounceout" : "swing", + duration: options.down ? 1000 : 200 + }); + }, + easeslide: function(options) { + this.slide(options, { + easing: "easeinout", + duration: 700 + }) + } + } +}); + +})(jQuery); diff --git a/htroot/yacy/ui/js/keynav.js b/htroot/yacy/ui/js/keynav.js new file mode 100644 index 000000000..29b07e8ae --- /dev/null +++ b/htroot/yacy/ui/js/keynav.js @@ -0,0 +1,200 @@ +/* + * 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 ... of your web page: + * + * + * Copyright (c) 2006 Mike Hostetler + * 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= 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; + }; + diff --git a/htroot/yacy/ui/ranking.html b/htroot/yacy/ui/ranking.html new file mode 100644 index 000000000..2447b39ad --- /dev/null +++ b/htroot/yacy/ui/ranking.html @@ -0,0 +1,16 @@ + + +

Ranking

+

+ One of the most cited reasons for YaCy is the freely configurable ranking system. The ranking settings have a major impact on + the displayed search results, so it is worthwhile looking at them. For example searching for current news you might + want to give pages with a more recent date a higher rank, whereas searching for a rare documentation other ranking factors are + more helpful. As YaCy knows over 30 ranking factors, YaCy-UI will offer for the ease of use ranking pre-sets (most relevant, most popular, + most recent) to choose from. Currently you can set the default ranking + via the existing user interface. +

+ \ No newline at end of file diff --git a/htroot/yacy/ui/sidebar/sidebar.html b/htroot/yacy/ui/sidebar/sidebar.html index f0f7ffbcc..524faed7f 100644 --- a/htroot/yacy/ui/sidebar/sidebar.html +++ b/htroot/yacy/ui/sidebar/sidebar.html @@ -1,14 +1,84 @@ -
Sidebar:
-
-
    -
  • Sidebar Example
  • -
  • Sidebar Example
  • -
  • Sidebar Example
  • -
  • Sidebar Example
  • -
  • Sidebar Example
  • -
+ + +

Search Options

+
+
+

+ +
+ +
+ +
+ +
+ +
+ + help +
+ +
+ + help +
+ +
+ +

+
+
+ +

Ranking

+
+ Some easy to use ranking controlls....
+

Bookmark Navigation

+
+
+

+ first + prev + + next + last + +

+
+
+ + + + + + diff --git a/htroot/yacy/ui/sidebar/sidebar_admin.html b/htroot/yacy/ui/sidebar/sidebar_admin.html new file mode 100644 index 000000000..2e4230d1d --- /dev/null +++ b/htroot/yacy/ui/sidebar/sidebar_admin.html @@ -0,0 +1,43 @@ + + +

YaCy Project

+ +

YaCy Bookmarks

+ +

YaCy Peer Admin

+ + diff --git a/htroot/yacy/ui/welcome.html b/htroot/yacy/ui/welcome.html index 47b4898bd..2ecbc4229 100644 --- a/htroot/yacy/ui/welcome.html +++ b/htroot/yacy/ui/welcome.html @@ -1,20 +1,25 @@ - - \ No newline at end of file +

Overview

+

+ YaCy-UI is going to be a rich client for YaCy attempting to provide a new, more functional and easier search interface. + Unlike the current server based interface YaCy-UI makes heavy use of jQuery, JavaScript, Ajax, XML and XSLT. This + approach offers some neat advantages, one example could be the integration of sciencenet via opensearch. The overall + idea is to integrate functionallity on a modular basis (e.g. a webshot function could be integrated by linking to + another, even local web service without the need to further extend YaCy's functionallity). Currently YaCy-UI is at most + alpha status, so I would be very greatful for feedback and bug reports! +

+apfelmaennchen +

Change Log

+
    +
  • 19-04-2007: new double-accordion sidebar menu is up and running (I am open for suggestions on how to populate the menus).
  • +
  • 19-04-2007: search results are now retrieved from yacysearch.rss (XML) and does no longer need a seperate servlet
  • +
+

Bug Tracker

+
    +
  • Please report bugs in the official YaCy-Forum - thanks!
  • +
  • 19-04-2007: if you open more than one search tab, only the first result item is shown. I would be greatful for any hint...
  • +
  • 19-04-2007: resource types 'sciencenet' and 'bookmarks' doen't work yet. For 'sciencenet' we have to solve the Ajax cross domain restriction.
  • +
  • 19-04-2007: currently only contentdom="text" is working, all others will fail...
  • +
  • 19-04-2007: language selection is not yet supported
  • +
+ + \ No newline at end of file diff --git a/htroot/yacy/ui/ymarks.html b/htroot/yacy/ui/ymarks.html index a281efa0d..eda138cef 100644 --- a/htroot/yacy/ui/ymarks.html +++ b/htroot/yacy/ui/ymarks.html @@ -1,14 +1,19 @@ - - +
@@ -51,7 +56,7 @@ diff --git a/htroot/yacy/ui/ysearch.html b/htroot/yacy/ui/ysearch.html new file mode 100644 index 000000000..eb2986cc2 --- /dev/null +++ b/htroot/yacy/ui/ysearch.html @@ -0,0 +1,73 @@ + + +
- edit bookmark + edit bookmark delete bookmark