1/*global jQuery */ 2/*jslint browser:true, eqeqeq:true, onevar:true, undef:true, nomen:true */ 3(function ($) { 4$.fn.dsPager = function (opts) 5{ 6 /** 7 * Fix for IE9 if console.log/debug is used 8 */ 9 if (!window.console) window.console = {}; 10 if (!window.console.log) window.console.log = function () { }; 11 if (!window.console.debug) window.console.debug = function () { }; 12 13 var parent = this, 14 defaults = { 15 pageContainer : $("#ds-pager"), // [required] The page link container, made visible if more than one page 16 previous : $("#ds-previous-page"), // [required] "previous" element 17 next : $("#ds-next-page"), // [required] "next" element 18 first : $("#ds-first-page"), // [required] "first" element 19 last : $("#ds-last-page"), // [required] "last" element 20 pageNumber : $("#ds-page-number"), // [required] "page number" element, this element is cloned to create pages as necessary 21 rows : parent.find("> tbody > tr"), // [optional] The "rows" to manipulate when switching pages 22 visiblePages : 5, // [optional] Number of pages to show 23 rowsPerPage : 5, // [optional] Rows per page 24 itemsPerRow : 1, // [optional] Items per row 25 moreClass : "more", // [optional] CSS class for "..." elements 26 disabledClass : "disabled", // [optional] CSS class added for disabled elements (next/previous) 27 activeClass : "active", // [optional] CSS class added for "active" page link 28 fadeSpeed : "normal", // [optional] Fade speed between page transitions 29 batchSize : 1 // [optional] Number of table rows per image row 30 }, 31 32 options = $.extend(defaults, opts), 33 ie6, rows, totalItems, totalPages, currentPage, disabledClass, activeClass, 34 idPrefix, moreBefore, moreAfter, pageNumbers; 35 36 // Show/hide appropriate rows 37 function render () 38 { 39 var minRow = currentPage * options.rowsPerPage * options.batchSize, 40 maxRow = (currentPage + 1) * options.rowsPerPage * options.batchSize, 41 visiblePages = options.visiblePages || Number.MAX_VALUE, 42 availablePages = pageNumbers.size(), 43 minPage = Math.max(0, Math.min(currentPage - Math.floor(visiblePages / 2), availablePages - visiblePages)), 44 maxPage = Math.min(availablePages, minPage + visiblePages); 45 46 47 48 // Show/hide rows as necessary 49 rows.hide().slice(minRow, maxRow).show(); 50 51 // Set page link "active" class 52 pageNumbers.removeClass(activeClass).eq(currentPage).addClass(activeClass); 53 54 // Show hide page links as necessary 55 pageNumbers.hide().slice(minPage, maxPage).show(); 56 if (minPage === 0) 57 { 58 moreBefore.hide(); 59 } 60 else 61 { 62 moreBefore.show(); 63 } 64 if (maxPage === availablePages) 65 { 66 moreAfter.hide(); 67 } 68 else 69 { 70 moreAfter.show(); 71 } 72 73 // Set "next" / "last" class according to current page number 74 if (currentPage === (totalPages - 1)) 75 { 76 options.next.addClass(disabledClass); 77 options.last.addClass(disabledClass); 78 } 79 else 80 { 81 options.next.removeClass(disabledClass); 82 options.last.removeClass(disabledClass); 83 } 84 85 // Set "previous" / "first" class according to current page number 86 if (currentPage === 0) 87 { 88 options.previous.addClass(disabledClass); 89 options.first.addClass(disabledClass); 90 } 91 else 92 { 93 options.previous.removeClass(disabledClass); 94 options.first.removeClass(disabledClass); 95 } 96 } 97 98 function go (page) 99 { 100 var speed = currentPage === null ? 0 : options.fadeSpeed; 101 if (page >= 0 && page < totalPages && page !== currentPage && totalPages > 1) 102 { 103 currentPage = page; 104 //parent.fixIEBackground(); 105 parent.animate({ 106 opacity : 0 107 }, speed, "linear", function () 108 { 109 render(); 110 if (ie6) 111 { 112 $("body").hide().show(); 113 } 114 parent.animate({ 115 opacity : 1 116 }, speed, "linear"); 117 } 118 ); 119 } 120 } 121 122 function step (image) 123 { 124 var page = Math.floor(image / (options.rowsPerPage * options.itemsPerRow)); 125 go(page); 126 } 127 128 function initialize () 129 {
130 // Look for pager-settings in CSS content 131 if ($("#pager-settings").length) 132 { 133 var visiblePages = $("#pager-settings #visible-pages").css("width"); 134 var vPages = parseInt(visiblePages.replace(/[^\d\.]/g, '')); 135 if (vPages) { 136 options.visiblePages = vPages; 137 console.debug("vPages: " + options.visiblePages); 138 } 139 var rowsPerPage = $("#pager-settings #rows-per-page").css("width"); 140 var nrRows = parseInt(rowsPerPage.replace(/[^\d\.]/g, '')); 141 if (nrRows) { 142 options.rowsPerPage = nrRows; 143 console.debug("nrRows: " + options.rowsPerPage); 144 } 145 } 146 147 // Initialize all internal variables 148 ie6 = ($.browser.msie && $.browser.version < "7"); 149 rows = options.rows; 150 totalItems = rows.length; 151 totalPages = options.rowsPerPage ? Math.ceil((totalItems / (options.rowsPerPage * options.batchSize))) : 1; 152 currentPage = null; 153 disabledClass = options.disabledClass; 154 activeClass = options.activeClass; 155 idPrefix = options.pageNumber.attr("id") || "pager"; 156 moreBefore = options.pageNumber.clone().text("...").removeAttr("href").removeAttr("id").addClass(options.moreClass); 157 moreAfter = moreBefore.clone(); 158 159 var i, clone; 160 if (totalPages <= 1) 161 { 162 rows.show(); 163 return; 164 } 165 166 // Add event handler for first page number 167 options.pageNumber.click( 168 function () 169 { 170 var page = parseInt(this.id.replace(idPrefix, "")); 171 go(page); 172 return false; 173 } 174 ); 175 176 // Event handlers for next/previous/first/last 177 options.previous.click( 178 function () 179 { 180 go(currentPage - 1); 181 return false; 182 } 183 ); 184 options.next.click( 185 function () 186 { 187 go(currentPage + 1); 188 return false; 189 } 190 ); 191 options.first.click( 192 function () 193 { 194 go(0); 195 return false; 196 } 197 ); 198 options.last.click( 199 function () 200 { 201 go(totalPages - 1); 202 return false; 203 } 204 ); 205 206 // Add additional page numbers 207 for (i = totalPages - 1; i >= 0; i--) 208 { 209 clone = options.pageNumber.clone(true); 210 clone.attr("id", idPrefix + i); 211 clone.html(i + 1); 212 clone.insertAfter(options.pageNumber); 213 } 214 pageNumbers = options.pageNumber.parent().find("*[id^=" + idPrefix + "]").not(options.pageNumber); 215 moreBefore.insertBefore(pageNumbers.slice(0, 1)); 216 moreAfter.insertAfter(pageNumbers.slice(pageNumbers.size() - 1, pageNumbers.size())); 217 options.pageNumber.hide(); 218 options.pageContainer.show(); 219 go(0); 220 } 221 222 initialize(); 223 return step; 224}; 225})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.