1/** 2 * Loads more component functionality 3 * @module searchLoadMore 4 * @param {jQuery} $ Instance of jQuery 5 * @param {Document} document dom document object 6 * @return {Object} list of methods for working with load more component 7*/ 8XA.component.search.loadMore = (function ($, document) { 9 /** 10 * This object stores all public api methods 11 * @type {Object.<Methods>} 12 * @memberOf module:searchFacetRangeSlider 13 */ 14 var api = {}, 15 initialized = false, 16 SearchLoadMoreModel, 17 SearchLoadMoreView; 18 /** 19 * @name module:searchLoadMore.SearchLoadMoreModel 20 * @constructor 21 * @augments Backbone.Model 22 */ 23 SearchLoadMoreModel = Backbone.Model.extend( 24 /** @lends module:searchLoadMore.SearchLoadMoreModel.prototype **/ 25 26 { 27 /** 28 * Default model options 29 * @default 30 */ 31 defaults: { 32 dataProperties: {}, 33 sig: [] 34 } 35 }); 36 /** 37 * @name module:searchLoadMore.SearchLoadMoreView 38 * @constructor 39 * @augments Backbone.View 40 */ 41 SearchLoadMoreView = Backbone.View.extend( 42 /** @lends module:searchLoadMore.SearchLoadMoreView.prototype **/ 43 { 44 /** 45 * Initially sets data to model and watches events on which 46 * view should be updated 47 * @listens module:XA.component.search.vent~event:results-loaded 48 * @memberof module:searchLoadMore.SearchLoadMoreView 49 */ 50 initialize: function () { 51 var dataProperties = this.$el.data(), 52 that = this; 53 54 if (dataProperties.properties.searchResultsSignature === null) { 55 dataProperties.properties.searchResultsSignature = ""; 56 } 57 58 if (this.model) { 59 this.model.set('sig', dataProperties.properties.searchResultsSignature.split(',')); 60 } 61 62 XA.component.search.vent.on("results-loaded", function (results) { 63 var sig = that.model.get('sig'), 64 offset = typeof results.offset !== "undefined" ? results.offset : 0, 65 i; 66 67 for (i = 0; i < sig.length; i++) { 68 if (sig[i] === results.searchResultsSignature) { 69 if (results.pageSize >= results.dataCount || offset + results.pageSize >= results.dataCount) { 70 that.$el.hide(); 71 } else { 72 that.$el.show(); 73 } 74 } 75 } 76 }); 77 }, 78 /** 79 * list of events for Backbone View 80 * @memberof module:searchLoadMore.SearchLoadMoreView 81 * @alias module:searchLoadMore.SearchLoadMoreView#events 82 */ 83 events: { 84 'mousedown input': 'loadMore' 85 }, 86 /** 87 * Load more search results 88 * @fires XA.component.search.vent~event:loadMore 89 * @listens module:XA.component.search.vent~event:results-loaded 90 * @memberof module:searchLoadMore.SearchLoadMoreView 91 * @alias module:searchLoadMore.SearchLoadMoreView#loadMore 92 */ 93 loadMore: function () { 94 var sig = this.model.get('sig'), 95 i; 96 97 for (i = 0; i < sig.length; i++) { 98 XA.component.search.vent.trigger('loadMore', { 99 sig: sig[i] 100 }); 101 } 102 } 103 }); 104 /** 105 * For each search facet range slider component on a page creates instance of 106 * ["SearchLoadMoreModel"]{@link module:searchLoadMore.SearchLoadMoreModel} and 107 * ["SearchLoadMoreView"]{@link module:searchLoadMore.SearchLoadMoreView} 108 * @memberOf module:searchLoadMore 109 * @alias module:searchLoadMore.init 110 */ 111 api.init = function () { 112 if ($('body').hasClass('on-page-editor') || initialized) { 113 return; 114 } 115 116 var searchLoadMore = $('.load-more'); 117 _.each(searchLoadMore, function (elem) { 118 new SearchLoadMoreView({ el: $(elem), model: new SearchLoadMoreModel() }); 119 }); 120 121 initialized = true; 122 }; 123 124 return api; 125 126}(jQuery, document)); 127 128XA.register('searchLoadMore', XA.component.search.loadMore);
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.