Author: apfelmaennchen Date: 2008-03-16 22:44:20 +0100 (Sun, 16 Mar 2008) New Revision: 4572
Added: trunk/htroot/yacy/ui/css/jquery.pagination.css trunk/htroot/yacy/ui/js/jquery.pagination.js Modified: trunk/htroot/yacy/ui/index.html trunk/htroot/yacy/ui/result.html trunk/htroot/yacy/ui/ritem.html Log: added server side driven pagination for search tabs Added: trunk/htroot/yacy/ui/css/jquery.pagination.css =================================================================== --- trunk/htroot/yacy/ui/css/jquery.pagination.css 2008-03-16 15:13:12 UTC (rev 4571) +++ trunk/htroot/yacy/ui/css/jquery.pagination.css 2008-03-16 21:44:20 UTC (rev 4572) @@ -0,0 +1,31 @@ +.pagination { + font-size: 1em; + margin-left: 26px; + margin-top: 25px; +} + +.pagination a { + text-decoration: none; + border: solid 1px #AAE; + color: #15B; +} + +.pagination a, .pagination span { + display: block; + float: left; + padding: 0.3em 0.5em; + margin-right: 5px; + margin-bottom: 5px; +} + +.pagination .current { + background: #26B; + color: #fff; + border: solid 1px #AAE; +} + +.pagination .current.prev, .pagination .current.next{ + color:#999; + border-color:#999; + background:#fff; +} Modified: trunk/htroot/yacy/ui/index.html =================================================================== --- trunk/htroot/yacy/ui/index.html 2008-03-16 15:13:12 UTC (rev 4571) +++ trunk/htroot/yacy/ui/index.html 2008-03-16 21:44:20 UTC (rev 4572) @@ -9,7 +9,8 @@ <link media="screen" type="text/css" href="css/base.css" rel="stylesheet"> <link media="screen" type="text/css" href="css/ui.tabs.css" rel="stylesheet"> - <link media="screen" type="text/css" href="css/jquery.tablesorter.pager.css" rel="stylesheet"> + <link media="screen" type="text/css" href="css/jquery.tablesorter.pager.css" rel="stylesheet"> + <link media="screen" type="text/css" href="css/jquery.pagination.css" rel="stylesheet"> <script src="js/jquery-1.2.3.min.js" type="text/javascript"></script> <script src="js/jquery.tablesorter.min.js" type="text/javascript"></script> @@ -18,9 +19,12 @@ <script src="js/jquery.metadata.min.js" type="text/javascript"></script> <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/ui.tabs.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function() { + + /* Initialize Tabs and set up close function */ var $tabs = $('#container ul').tabs() .bind('add.ui-tabs', function(e, ui) { var li = $(ui.tab).parents('li:eq(0)')[0]; @@ -29,7 +33,14 @@ $tabs.tabs('remove', $('li', $tabs).index(li)); }); }); - insert_sidebar(); + + /* Insert Sidebar */ + $('<div id="pager" class="boxed"></div>').appendTo('#sidebar') + $("#pager").load("sidebar/sidebar_pager.html"); + $('<div id="example" class="boxed"></div>').appendTo('#sidebar') + $("#example").load("sidebar/sidebar.html"); + + /* Load Search Result into new Tab */ $('#searchbox').submit(function() { var tabnr = $('#container > ul').tabs('length'); var result = "result.html?" + $('#searchbox').formSerialize(); @@ -39,11 +50,7 @@ $tabs.tabs('select',tabnr); return false; }); - }); - function insert_sidebar() { - $('<div id="pager" class="boxed"></div>').appendTo('#sidebar') - $("#pager").load("sidebar/sidebar_pager.html"); - } + }); </script> </head> @@ -75,9 +82,9 @@ <label for="video">Video</label> <input type="radio" id="appl" name="contentdom" value="app"/> <label for="appl">Applications</label> - </div> + </div> <input type="hidden" name="former" value="" /> - <input type="hidden" name="count" value="3" /> + <input type="hidden" name="count" value="15" /> <input type="hidden" name="offset" value="0" /> <input type="hidden" name="resource" value="global" /> <input type="hidden" name="urlmaskfilter" value=".*" /> Added: trunk/htroot/yacy/ui/js/jquery.pagination.js =================================================================== --- trunk/htroot/yacy/ui/js/jquery.pagination.js 2008-03-16 15:13:12 UTC (rev 4571) +++ trunk/htroot/yacy/ui/js/jquery.pagination.js 2008-03-16 21:44:20 UTC (rev 4572) @@ -0,0 +1,166 @@ +/** + * 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(); + }); +} + + Modified: trunk/htroot/yacy/ui/result.html =================================================================== --- trunk/htroot/yacy/ui/result.html 2008-03-16 15:13:12 UTC (rev 4571) +++ trunk/htroot/yacy/ui/result.html 2008-03-16 21:44:20 UTC (rev 4572) @@ -1,4 +1,64 @@ +#(input)# + :: + <script type="text/javascript"> + $(function() { + $("[EMAIL PROTECTED]'search']").setValue("#[former]#"); + $("[EMAIL PROTECTED]'contentdom']").setValue("#[contentdom]#"); + $("[EMAIL PROTECTED]'former']").setValue("#[former]#"); + $("[EMAIL PROTECTED]'count']").setValue("#[count]#"); + $("[EMAIL PROTECTED]'offset']").setValue("#[offset]#"); + $("[EMAIL PROTECTED]'resource']").setValue("#[resource]#"); + $("[EMAIL PROTECTED]'urlmaskfilter']").setValue("#[urlmaskfilter]#"); + $("[EMAIL PROTECTED]'prefermaskfilter']").setValue("#[prefermaskfilter]#"); + $("[EMAIL PROTECTED]'depth']").setValue("#[depth]#"); + $("[EMAIL PROTECTED]'cat']").setValue("#[cat]#"); + $("[EMAIL PROTECTED]'type']").setValue("#[type]#"); + $("[EMAIL PROTECTED]'display']").setValue("#[display]#"); + $("[EMAIL PROTECTED]'input']").setValue("#[input]#"); + $("[EMAIL PROTECTED]'constraint']").setValue("#[constraint]#"); + }); + </script> + :: +#(/input)# +<!-- type the number of results --> +#(num-results)# + :: + <p>No Results.</p> + :: + <p>No Results. (length of search words must be at least 3 characters)</p> + :: + <script type="text/javascript"> + $(function() { + var totalcount = #[totalcount]#; + var size = $("[EMAIL PROTECTED]'count']").getValue(); + var offset = $("[EMAIL PROTECTED]'offset']").getValue(); + if (offset != 0) { + var page = ((offset-1)/size); + } else { + var page = 0; + } + $("#pagination").pagination(totalcount, { + current_page:page, + items_per_page:size, + num_edge_entries:2, + num_display_entries:10, + callback: loadContents + }); + }); + function loadContents(page_id, jq) { + var count = $("[EMAIL PROTECTED]'count']").getValue(); + var offset = ((page_id*count)+1); + $("[EMAIL PROTECTED]'offset']").setValue(offset); + var result = "result.html?" + $('#searchbox').formSerialize(); + var selected = $('#container ul').data('selected.ui-tabs'); + $('#container ul').tabs('url', selected, result); + $('#container ul').tabs('load', selected); + } + </script> + :: +#(/num-results)# <div id="#[ID]#"></div> +<div id="pagination" class="pagination">[Pagination]</div> <!-- linklist begin --> #(resultTable)#::<table width="100%"><tr class="TableHeader"><td width="30%">Media</td><td width="70%">URL</tr>#(/resultTable)# #{results}# @@ -8,7 +68,8 @@ $.get("/yacy/ui/ritem.html?rss=false&item=#[item]#&eventID=#[eventID]#", function(html) { $(id).append(html); $(id).trigger("update"); - }); + }); + return false; }); </script> #{/results}# @@ -20,4 +81,3 @@ - Modified: trunk/htroot/yacy/ui/ritem.html =================================================================== --- trunk/htroot/yacy/ui/ritem.html 2008-03-16 15:13:12 UTC (rev 4571) +++ trunk/htroot/yacy/ui/ritem.html 2008-03-16 21:44:20 UTC (rev 4572) @@ -1,11 +1,11 @@ #(content)#:: - <div class="searchresults"> - <h3 class="linktitle"> - <img src="../../ViewImage.png?width=16&height=16&code=#[faviconCode]#" id="f#[urlhash]#" class="favicon" width="16" height="16" alt="" /> - <a href="#[url]#" target="_parent">#[description]#</a></h3> - <p class="snippet">#[snippet]#</p> - <p class="url"><a href="#[url]#" id="url#[urlhash]#" target="_parent">#[urlname]#</a></p> - </div> + <div class="searchresults"> + <h3 class="linktitle"> + <img src="../../ViewImage.png?width=16&height=16&code=#[faviconCode]#" id="f#[urlhash]#" class="favicon" width="16" height="16" alt="" /> + <a href="#[url]#" target="_parent">#[description]#</a></h3> + <p class="snippet">#[snippet]#</p> + <p class="url"><a href="#[url]#" id="url#[urlhash]#" target="_parent">#[urlname]#</a></p> + </div> :: #{items}# <div class="thumbcontainer"> _______________________________________________ YaCy-svn mailing list YaCy-svn@lists.berlios.de https://lists.berlios.de/mailman/listinfo/yacy-svn