1(function ($) { 2 var currentPage = 2, container = window, $container = $(container); 3 var loading = false; 4 5 var settings = { 6 url: '', 7 target: '.b-stream', 8 count: 10, 9 scroll: null, 10 times: null, 11 stop: null, 12 bottom_distance: 80, 13 content_distance: 120, 14 auto: true, 15 beforeLoad: null, 16 afterLoad: null, 17 renderContent: null, 18 paging_selector: null, 19 pageless_wrapper: null 20 }; 21 settings.times = parseInt(settings.times, 10); 22 23 var start = function () { 24 var pageless_wrapper = settings.pageless_wrapper; 25 26 pageless_wrapper.show(); 27 if (settings.paging_selector) { 28 $(settings.paging_selector).hide(); 29 } 30 pageless_wrapper.find('a.pageless-link').on('click', function () { 31 if (!isNaN(settings.times)) { 32 settings.times = Math.max(settings.times + 1, 1); 33 } 34 watch(true); 35 return false; 36 }); 37 $container.bind('scroll.pageless resize.pageless', watch).trigger('scroll.pageless'); 38 39 }; 40 41 var stop = function () { 42 $container.unbind('.pageless'); 43 if (settings.stop && (typeof (settings.stop) == 'function')) { 44 settings.stop.apply(this, []); 45 } 46 47 }; 48 49 var scroll = function () { 50 // show loader 51 var pageless_wrapper = settings.pageless_wrapper; 52 var handler = pageless_wrapper.find('.pageless-link'); 53 var progress = pageless_wrapper.find('.pageless-progress'); 54 if (isNaN(settings.times) || settings.times > 0) { 55 if (progress.length) { 56 handler.hide(); 57 progress.show(); 58 } else { 59 handler.replaceWith('<i class="icon16 loading"></i>' + handler.text()); 60 } 61 loading = true; 62 63 if (typeof settings.beforeLoad === 'function') { 64 settings.beforeLoad(); 65 } 66 $.get(settings.url, { 67 page: currentPage++ 68 }, function (response, textStatus, jqXHR) { 69 var html = response.data ? response.data.content : response; 70 if (typeof settings.prepareContent === 'function') { 71 html = settings.prepareContent(html); 72 } 73 if (typeof settings.renderContent === 'function') { 74 settings.renderContent(html, $(settings.target)); 75 } else { 76 pageless_wrapper.remove(); 77 $(settings.target).append(html); 78 pageless_wrapper = settings.pageless_wrapper = $(settings.target + ' .pageless-wrapper'); 79 } 80 if (settings.scroll && (typeof (settings.scroll) == 'function')) { 81 settings.scroll.apply(this, [ response, settings.target ]); 82 } 83 loading = false; 84 if (typeof settings.afterLoad === 'function') { 85 settings.afterLoad(); 86 } 87 watch(); 88 });// ,'html'); 89 } else { 90 handler.show(); 91 progress.hide(); 92 loading = false; 93 } 94 settings.times -= 1; 95 }; 96 // distance to end of the container 97 var distanceToBottom = function () { 98 return (container === window) ? 99 ($(document).height() - $container.scrollTop() - $container.height()) 100 : 101 ($container[0].scrollHeight - $container.scrollTop() - $container.height()); 102 }; 103 104 var distanceFromContent = function () { 105 var handler = settings.pageless_wrapper; 106 if (handler.length) { 107 return $(window).height() - handler.position().top + $container.scrollTop(); 108 } 109 return 0; 110 }; 111 112 var watch = function (force) { 113 if (currentPage >= parseInt(settings.count) + 1) { 114 stop.apply(this, []); 115 } else if (!loading) { 116 var apply = false; 117 if (force === true) { 118 apply = true; 119 } else if (settings.auto) { 120 apply = (distanceToBottom() < settings.bottom_distance) || (distanceFromContent() > settings.content_distance); 121 } 122
123 if (apply) { 124 scroll.apply(this, []); 125 } 126 } 127 }; 128 129 $.pageless = function (option) { 130 if (option == 'start' || option == 'refresh') { 131 start.apply(this, []); 132 } 133 if (option == 'url') { 134 settings.url = arguments[1]; 135 } 136 if ($.isPlainObject(option)) { 137 $.extend(settings, option); 138 if (settings.pageless_wrapper === null) { 139 settings.pageless_wrapper = $(settings.target + ' .pageless-wrapper'); 140 } else if (settings.pageless_wrapper === false) { 141 settings.pageless_wrapper = $(); 142 } 143 start.apply(this, []); 144 } 145 }; 146})(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.