1/** 2 * @file 3 * Pagerer mini pager scripts. 4 */ 5 6(function ($) { 7 8 'use strict'; 9 10 Drupal.behaviors.pagererMini = { 11 12 attach: function (context, settings) { 13 14 /** 15 * Pagerer page input box event binding. 16 */ 17 $('.pagerer-page', context).once('pagerer').each(function (index) { 18 Drupal.pagerer.state.isRelocating = false; 19 this.pagererState = Drupal.pagerer.evalState(this); 20 // Item ranges do not really work on widget. 21 if (this.pagererState.display === 'item_ranges') { 22 this.pagererState.display = 'items'; 23 } 24 // Page number formatting does not work in widget. 25 if (this.pagererState.display === 'items') { 26 this.pagererState.pageTag = { 27 page_current: '@item', 28 page_previous: '@item', 29 page_next: '@item' 30 }; 31 } 32 else { 33 this.pagererState.pageTag = { 34 page_current: '@number', 35 page_previous: '@number', 36 page_next: '@number' 37 }; 38 } 39 // Adjust width of the input box. 40 if (this.pagererState.widgetResize) { 41 var valueLength = String(Drupal.pagerer.indexToTag(this.pagererState.total - 1, this.pagererState, 'page')).length; 42 $(this).css({ 43 width: (valueLength + 1) + '.5em' 44 }); 45 } 46 // Adjust the navigation button. 47 if (this.pagererState.widgetButton !== 'no') { 48 var button = $(this).parent().find('.pagerer-page-button'); 49 button.css('visibility', 'hidden'); 50 if (this.pagererState.widgetButton === 'auto') { 51 var inputHeight = $(this).outerHeight(true); 52 button.css('height', inputHeight + 'px'); 53 } 54 } 55 }) 56 .on('change', function (event) { 57 // Show the navigation button. 58 $(this).parent().find('.pagerer-page-button').css('visibility', 'visible'); 59 }) 60 .on('focus', function (event) { 61 Drupal.pagerer.reset(); 62 this.select(); 63 $(this).addClass('pagerer-page-has-focus'); 64 }) 65 .on('blur', function (event) { 66 $(this).removeClass('pagerer-page-has-focus'); 67 }) 68 .on('keydown', function (event) { 69 switch (event.keyCode) { 70 case 13: 71 case 10: 72 // Return key pressed, relocate. 73 var targetPage = Drupal.pagerer.valueToIndex($(this).val(), this); 74 if (targetPage !== this.pagererState.current) { 75 Drupal.pagerer.relocate(this, targetPage); 76 } 77 event.stopPropagation(); 78 event.preventDefault(); 79 return false; 80 81 case 27: 82 // Escape. 83 $(this).val(Drupal.pagerer.indexToTag(this.pagererState.current, this.pagererState, 'page')); 84 // Hide the navigation button. 85 $(this).parent().find('.pagerer-page-button').css('visibility', 'hidden'); 86 return false; 87 88 case 33: 89 // Page up. 90 offsetValue(this, 5); 91 return false; 92 93 case 34: 94 // Page down. 95 offsetValue(this, -5); 96 return false; 97 98 case 35: 99 // End. 100 offsetValue(this, 'last'); 101 return false; 102 103 case 36: 104 // Home. 105 offsetValue(this, 'first'); 106 return false; 107 108 } 109 }); 110 111 /** 112 * Pagerer page button event binding. 113 */ 114 $('.pagerer-page-button', context).each(function (index) { 115 $(this).button(); 116 $(this).on('click', function (event) { 117 var pageWidget = $(this).parent().find('.pagerer-page').get(0); 118 var targetPage = Drupal.pagerer.valueToIndex($(pageWidget).val(), pageWidget); 119 if (targetPage !== pageWidget.pagererState.current) { 120 $(this).css('visibility', 'hidden'); 121 Drupal.pagerer.relocate(pageWidget, targetPage); 122 } 123 }); 124 }); 125 126 /** 127 * Update value based on an offset. 128 * 129 * @param {HTMLElement} element 130 * Input box element. 131 * @param {number} offset 132 * Offset from current value. 133 */ 134 function offsetValue(element, offset) { 135 var widgetValue = Drupal.pagerer.valueToIndex($(element).val(), element); 136 var newValue; 137 if (offset === 'first') { 138 newValue = 0; 139 } 140 else if (offset === 'last') { 141 newValue = element.pagererState.total - 1; 142 } 143 else { 144 newValue = widgetValue + offset; 145 if (newValue < 0) { 146 newValue = 0; 147 } 148 else if (newValue >= element.pagererState.total) { 149 newValue = element.pagererState.total - 1; 150 } 151 } 152 if (newValue !== widgetValue) { 153 $(element).val(Drupal.pagerer.indexToTag(newValue, element.pagererState, 'page')); 154 $(element).trigger('change'); 155 } 156 } 157 158 }, 159 160 detach: function (context, settings) { 161 $('.pagerer-page', context).each(function (index) { 162 Drupal.pagerer.detachState(this); 163 }); 164 } 165 }; 166})(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.