PageSourceSearch

https://www.zoloft.com/-/media/Base-Themes/SearchTheme/Scripts/component-search-load-more.js

js zoloft.com collected 2026-09-24 20:04:06 UTC 4,623 bytes, 128 lines download raw bytes

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.