PageSourceSearch

https://tem.fi/o/frontend-js-jquery-web/jquery/collapsible_search.js

js tem.fi collected 2026-10-02 03:16:19 UTC 5,028 bytes, 122 lines download raw bytes

1/**
2 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
3 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
4 */
5+function ($) {
6  var CollapsibleSearch = function CollapsibleSearch(element) {
7    var instance = this;
8    instance.$element = $(element);
9    instance.$close = instance.$element.find('.basic-search-close');
10    instance.$input = instance.$element.find('input[type="text"]');
11    instance.$submit = instance.$element.find('[type="submit"]');
12    instance.$close.on('click.lexicon.close.collapsible-search', $.proxy(instance.close, instance));
13    instance.$input.on('blur.lexicon.collapsible-search', $.proxy(instance.blur, instance));
14    instance.$input.on('focus.lexicon.collapsible-search', $.proxy(instance.focus, instance));
15    instance.$submit.on('click.lexicon.submit.collapsible-search', $.proxy(instance.submit, instance));
16  };
17
18  CollapsibleSearch.BREAKPOINT = 768;
19  CollapsibleSearch.TRANSITION_DURATION = 500;
20  CollapsibleSearch.prototype = {
21    blur: function blur(event) {
22      var $input = $(event.currentTarget);
23      $input.closest('.basic-search').removeClass('focus');
24    },
25    close: function close(event) {
26      var instance = this;
27      var basicSearch = $(event.currentTarget).closest('.basic-search');
28      var basicSearchSlider = basicSearch.find('.basic-search-slider');
29      var basicSearchSubmit = basicSearch.find('[type="submit"]');
30
31      var complete = function complete() {
32        basicSearch.removeClass('basic-search-transition');
33        basicSearch.trigger('closed.lexicon.collapsible.search');
34      };
35
36      var supportsTransition = bootstrap.Util.supportsTransitionEnd();
37
38      if (supportsTransition) {
39        basicSearchSlider.one('bsTransitionEnd', $.proxy(complete, instance)).emulateTransitionEnd(CollapsibleSearch.TRANSITION_DURATION);
40      }
41
42      basicSearch.addClass('basic-search-transition').removeClass('open');
43
44      if (!supportsTransition) {
45        complete.call(instance);
46      } else {
47        basicSearchSubmit.focus();
48      }
49    },
50    destroy: function destroy() {
51      var instance = this;
52      instance.$close.off('click.lexicon.close.collapsible-search');
53      instance.$input.off('blur.lexicon.collapsible-search');
54      instance.$input.off('focus.lexicon.collapsible-search');
55      instance.$submit.off('click.lexicon.submit.collapsible-search');
56    },
57    focus: function focus(event) {
58      $(event.currentTarget).closest('.basic-search').addClass('focus');
59    },
60    submit: function submit(event) {
61      var instance = this;
62
63      if (window.innerWidth < CollapsibleSearch.BREAKPOINT) {
64        var basicSearch = $(event.currentTarget).parents('.basic-search');
65        var basicSearchInput = basicSearch.find('input[type="text"]');
66        var basicSearchSlider = basicSearch.find('.basic-search-slider');
67
68        var complete = function complete() {
69          basicSearch.removeClass('basic-search-transition');
70          basicSearchInput.focus();
71          basicSearch.trigger('open.lexicon.collapsible.search');
72        };
73
74        if (!basicSearch.hasClass('open')) {
75          event.preventDefault();
76          var supportsTransition = bootstrap.Util.supportsTransitionEnd();
77
78          if (supportsTransition) {
79            basicSearchSlider.one('bsTransitionEnd', $.proxy(complete, instance)).emulateTransitionEnd(CollapsibleSearch.TRANSITION_DURATION);
80          }
81
82          basicSearch.addClass('basic-search-transition').addClass('open');
83
84          if (!supportsTransition) {
85            complete.call(instance);
86          }
87        }
88      }
89    }
90  };
91
92  var Plugin = function Plugin(option) {
93    return this.each(function () {
94      var $this = $(this);
95      var data = $this.data('lexicon.collapsible-search');
96
97      if (!data) {
98        data = new CollapsibleSearch(this);
99        $this.data('lexicon.collapsible-search', data);
100      }
101
102      if (typeof option == 'string') {
103        data[option]();
104      }
105    });
106  };
107
108  var old = $.fn.collapsibleSearch;
109  $.fn.collapsibleSearch = Plugin;
110  $.fn.collapsibleSearch.Constructor = CollapsibleSearch;
111
112  $.fn.collapsibleSearch.noConflict = function () {
113    $.fn.collapsibleSearch = old;
114    return this;
115  };
116
117  var close = '[data-toggle="collapsible-search"] .basic-search-close';
118  var input = '[data-toggle="collapsible-search"] input[type="text"]';
119  var submit = '[data-toggle="collapsible-search"] [type="submit"]';
120  $(document).on('blur.lexicon.collapsible-search.data-api', input, $.proxy(CollapsibleSearch.prototype.blur, CollapsibleSearch)).on('click.lexicon.close.collapsible-search.data-api', close, $.proxy(CollapsibleSearch.prototype.close, CollapsibleSearch)).on('click.lexicon.submit.collapsible-search.data-api', submit, $.proxy(CollapsibleSearch.prototype.submit, CollapsibleSearch)).on('focus.lexicon.collapsible-search.data-api', input, $.proxy(CollapsibleSearch.prototype.focu
120s, CollapsibleSearch));
121}(jQuery);
122//# sourceMappingURL=collapsible_search.js.map

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.