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
[email protected]
https://lists.berlios.de/mailman/listinfo/yacy-svn