diff options
Diffstat (limited to 'SemanticResultFormats/resources/jquery/jquery.pajinate.js')
-rw-r--r-- | SemanticResultFormats/resources/jquery/jquery.pajinate.js | 313 |
1 files changed, 313 insertions, 0 deletions
diff --git a/SemanticResultFormats/resources/jquery/jquery.pajinate.js b/SemanticResultFormats/resources/jquery/jquery.pajinate.js new file mode 100644 index 00000000..a6fa442b --- /dev/null +++ b/SemanticResultFormats/resources/jquery/jquery.pajinate.js @@ -0,0 +1,313 @@ +;(function($){ +/*******************************************************************************************/ +// jquery.pajinate.js - version 0.4 +// A jQuery plugin for paginating through any number of DOM elements +// +// Copyright (c) 2010, Wes Nolte (http://wesnolte.com) +// Licensed under the MIT License (MIT-LICENSE.txt) +// http://www.opensource.org/licenses/mit-license.php +// Created: 2010-04-16 | Updated: 2010-04-26 +// +/*******************************************************************************************/ + + $.fn.pajinate = function(options){ + // Set some state information + var current_page = 'current_page'; + var items_per_page = 'items_per_page'; + + var meta; + + // Setup default option values + var defaults = { + item_container_id : '.content', + items_per_page : 10, + nav_panel_id : '.page_navigation', + nav_info_id : '.info_text', + num_page_links_to_display : 20, + start_page : 0, + wrap_around : false, + nav_label_first : 'First', + nav_label_prev : 'Prev', + nav_label_next : 'Next', + nav_label_last : 'Last', + nav_order : ["first", "prev", "num", "next", "last"], + nav_label_info : 'Showing {0}-{1} of {2} results', + show_first_last: true, + abort_on_small_lists: false, + jquery_ui: false, + jquery_ui_active: "ui-state-highlight", + jquery_ui_default: "ui-state-default", + jquery_ui_disabled: "ui-state-disabled" + }; + var options = $.extend(defaults,options); + var $item_container; + var $page_container; + var $items; + var $nav_panels; + var total_page_no_links; + var jquery_ui_default_class = options.jquery_ui ? options.jquery_ui_default : ''; + var jquery_ui_active_class = options.jquery_ui ? options.jquery_ui_active : ''; + var jquery_ui_disabled_class = options.jquery_ui ? options.jquery_ui_disabled : ''; + + return this.each(function(){ + $page_container = $(this); + $item_container = $(this).find(options.item_container_id); + $items = $page_container.find(options.item_container_id).children(); + + if (options.abort_on_small_lists && options.items_per_page >= $items.size()) + return $page_container; + + meta = $page_container; + + // Initialize meta data + meta.data(current_page,0); + meta.data(items_per_page, options.items_per_page); + + // Get the total number of items + var total_items = $item_container.children().size(); + + // Calculate the number of pages needed + var number_of_pages = Math.ceil(total_items/options.items_per_page); + + // Construct the nav bar + var more = '<span class="ellipse more">...</span>'; + var less = '<span class="ellipse less">...</span>'; + var first = !options.show_first_last ? '' : '<a class="first_link '+ jquery_ui_default_class +'" href="">'+ options.nav_label_first +'</a>'; + var last = !options.show_first_last ? '' : '<a class="last_link '+ jquery_ui_default_class +'" href="">'+ options.nav_label_last +'</a>'; + + var navigation_html = ""; + + for(var i = 0; i < options.nav_order.length; i++) { + switch (options.nav_order[i]) { + case "first": + navigation_html += first; + break; + case "last": + navigation_html += last; + break; + case "next": + navigation_html += '<a class="next_link '+ jquery_ui_default_class +'" href="">'+ options.nav_label_next +'</a>'; + break; + case "prev": + navigation_html += '<a class="previous_link '+ jquery_ui_default_class +'" href="">'+ options.nav_label_prev +'</a>'; + break; + case "num": + navigation_html += less; + var current_link = 0; + while(number_of_pages > current_link){ + navigation_html += '<a class="page_link '+ jquery_ui_default_class +'" href="" longdesc="' + current_link +'">'+ (current_link + 1) +'</a>'; + current_link++; + } + navigation_html += more; + break; + default: + break; + } + + } + + // And add it to the appropriate area of the DOM + $nav_panels = $page_container.find(options.nav_panel_id); + $nav_panels.html(navigation_html).each(function(){ + + $(this).find('.page_link:first').addClass('first'); + $(this).find('.page_link:last').addClass('last'); + + }); + + // Hide the more/less indicators + $nav_panels.children('.ellipse').hide(); + + // Set the active page link styling + $nav_panels.find('.previous_link').next().next().addClass('active_page '+ jquery_ui_active_class); + + /* Setup Page Display */ + // And hide all pages + $items.hide(); + // Show the first page + $items.slice(0, meta.data(items_per_page)).show(); + + /* Setup Nav Menu Display */ + // Page number slices + + total_page_no_links = $page_container.children(options.nav_panel_id+':first').children('.page_link').size(); + options.num_page_links_to_display = Math.min(options.num_page_links_to_display,total_page_no_links); + + $nav_panels.children('.page_link').hide(); // Hide all the page links + + // And only show the number we should be seeing + $nav_panels.each(function(){ + $(this).children('.page_link').slice(0, options.num_page_links_to_display).show(); + }); + + /* Bind the actions to their respective links */ + + // Event handler for 'First' link + $page_container.find('.first_link').click(function(e){ + e.preventDefault(); + + movePageNumbersRight($(this),0); + gotopage(0); + }); + + // Event handler for 'Last' link + $page_container.find('.last_link').click(function(e){ + e.preventDefault(); + var lastPage = total_page_no_links - 1; + movePageNumbersLeft($(this),lastPage); + gotopage(lastPage); + }); + + // Event handler for 'Prev' link + $page_container.find('.previous_link').click(function(e){ + e.preventDefault(); + showPrevPage($(this)); + }); + + + // Event handler for 'Next' link + $page_container.find('.next_link').click(function(e){ + e.preventDefault(); + showNextPage($(this)); + }); + + // Event handler for each 'Page' link + $page_container.find('.page_link').click(function(e){ + e.preventDefault(); + gotopage($(this).attr('longdesc')); + }); + + // Goto the required page + gotopage(parseInt(options.start_page)); + toggleMoreLess(); + if(!options.wrap_around) + tagNextPrev(); + }); + + function showPrevPage(e){ + new_page = parseInt(meta.data(current_page)) - 1; + + // Check that we aren't on a boundary link + if($(e).siblings('.active_page').prev('.page_link').length==true){ + movePageNumbersRight(e,new_page); + gotopage(new_page); + }else if(options.wrap_around){ + gotopage(total_page_no_links-1); + } + + } + + function showNextPage(e){ + new_page = parseInt(meta.data(current_page)) + 1; + + // Check that we aren't on a boundary link + if($(e).siblings('.active_page').next('.page_link').length==true){ + movePageNumbersLeft(e,new_page); + gotopage(new_page); + } else if (options.wrap_around) { + gotopage(0); + } + + } + + function gotopage(page_num){ + + var ipp = parseInt(meta.data(items_per_page)); + + var isLastPage = false; + + // Find the start of the next slice + start_from = page_num * ipp; + + // Find the end of the next slice + end_on = start_from + ipp; + // Hide the current page + var items = $items.hide().slice(start_from, end_on); + + items.show(); + + // Reassign the active class + $page_container.find(options.nav_panel_id).children('.page_link[longdesc=' + page_num +']').addClass('active_page '+ jquery_ui_active_class) + .siblings('.active_page') + .removeClass('active_page ' + jquery_ui_active_class); + + // Set the current page meta data + meta.data(current_page,page_num); + + $page_container.find(options.nav_info_id).html(options.nav_label_info.replace("{0}",start_from+1). + replace("{1}",start_from + items.length).replace("{2}",$items.length)); + + // Hide the more and/or less indicators + toggleMoreLess(); + + // Add a class to the next or prev links if there are no more pages next or previous to the active page + tagNextPrev(); + } + // Methods to shift the diplayed index of page numbers to the left or right + function movePageNumbersLeft(e, new_p){ + var new_page = new_p; + + var $current_active_link = $(e).siblings('.active_page'); + + if($current_active_link.siblings('.page_link[longdesc=' + new_page +']').css('display') == 'none'){ + + $nav_panels.each(function(){ + $(this).children('.page_link') + .hide() // Hide all the page links + .slice(parseInt(new_page - options.num_page_links_to_display + 1) , new_page + 1) + .show(); + }); + } + + } + + function movePageNumbersRight(e, new_p){ + var new_page = new_p; + + var $current_active_link = $(e).siblings('.active_page'); + + if($current_active_link.siblings('.page_link[longdesc=' + new_page +']').css('display') == 'none'){ + + $nav_panels.each(function(){ + $(this).children('.page_link') + .hide() // Hide all the page links + .slice( new_page , new_page + parseInt(options.num_page_links_to_display)) + .show(); + }); + } + } + + // Show or remove the ellipses that indicate that more page numbers exist in the page index than are currently shown + function toggleMoreLess(){ + + if(!$nav_panels.children('.page_link:visible').hasClass('last')){ + $nav_panels.children('.more').show(); + }else { + $nav_panels.children('.more').hide(); + } + + if(!$nav_panels.children('.page_link:visible').hasClass('first')){ + $nav_panels.children('.less').show(); + }else { + $nav_panels.children('.less').hide(); + } + } + + /* Add the style class ".no_more" to the first/prev and last/next links to allow custom styling */ + function tagNextPrev() { + if($nav_panels.children('.last').hasClass('active_page')){ + $nav_panels.children('.next_link').add('.last_link').addClass('no_more ' + jquery_ui_disabled_class); + } else { + $nav_panels.children('.next_link').add('.last_link').removeClass('no_more ' + jquery_ui_disabled_class); + } + + if($nav_panels.children('.first').hasClass('active_page')){ + $nav_panels.children('.previous_link').add('.first_link').addClass('no_more ' + jquery_ui_disabled_class); + } else { + $nav_panels.children('.previous_link').add('.first_link').removeClass('no_more ' + jquery_ui_disabled_class); + } + } + + }; + +})(jQuery);
\ No newline at end of file |