PageSourceSearch

https://parisandco.fr/wp-content/themes/estato/js/fancySelect.js?ver=6.8.10

js parisandco.fr collected 2026-10-04 13:26:29 UTC 6,791 bytes, 207 lines download raw bytes

1'use strict';
2// Generated by CoffeeScript 1.4.0
3(function() {
4  var $;
5
6  $ = window.jQuery || window.Zepto || window.$;
7
8  $.fn.fancySelect = function(opts) {
9    var isiOS, settings;
10    if (opts == null) {
11      opts = {};
12    }
13    settings = $.extend({
14      forceiOS: false,
15      includeBlank: false,
16      optionTemplate: function(optionEl) {
17        return optionEl.text();
18      },
19      triggerTemplate: function(optionEl) {
20        return optionEl.text();
21      }
22    }, opts);
23    isiOS = !!navigator.userAgent.match(/iP(hone|od|ad)/i);
24    return this.each(function() {
25      var copyOptionsToList, disabled, options, sel, trigger, updateTriggerText, wrapper;
26      sel = $(this);
27      if (sel.hasClass('fancified') || sel[0].tagName !== 'SELECT') {
28        return;
29      }
30      sel.addClass('fancified');
31      sel.css({
32        width: 1,
33        height: 1,
34        display: 'block',
35        position: 'absolute',
36        top: 0,
37        left: 0,
38        opacity: 0
39      });
40      sel.wrap('<div class="fancy-select">');
41      wrapper = sel.parent();
42      if (sel.data('class')) {
43        wrapper.addClass(sel.data('class'));
44      }
45      wrapper.append('<div class="trigger">');
46      if (!(isiOS && !settings.forceiOS)) {
47        wrapper.append('<ul class="options">');
48      }
49      trigger = wrapper.find('.trigger');
50      options = wrapper.find('.options');
51      disabled = sel.prop('disabled');
52      if (disabled) {
53        wrapper.addClass('disabled');
54      }
55      updateTriggerText = function() {
56        var triggerHtml;
57        triggerHtml = settings.triggerTemplate(sel.find(':selected'));
58        return trigger.html(triggerHtml);
59      };
60      sel.on('blur.fs', function() {
61        if (trigger.hasClass('open')) {
62          return setTimeout(function() {
63            return trigger.trigger('close.fs');
64          }, 120);
65        }
66      });
67      trigger.on('close.fs', function() {
68        trigger.removeClass('open');
69        return options.removeClass('open');
70      });
71      trigger.on('click.fs', function() {
72        var offParent, parent;
73        if (!disabled) {
74          trigger.toggleClass('open');
75          if (isiOS && !settings.forceiOS) {
76            if (trigger.hasClass('open')) {
77              return sel.focus();
78            }
79          } else {
80            if (trigger.hasClass('open')) {
81              parent = trigger.parent();
82              offParent = parent.offsetParent();
83              if ((parent.offset().top + parent.outerHeight() + options.outerHeight() + 20) > $(window).height() + $(window).scrollTop()) {
84                options.addClass('overflowing');
85              } else {
86                options.removeClass('overflowing');
87              }
88            }
89            options.toggleClass('open');
90            if (!isiOS) {
91              return sel.focus();
92            }
93          }
94        }
95      });
96      sel.on('enable', function() {
97        sel.prop('disabled', false);
98        wrapper.removeClass('disabled');
99        disabled = false;
100        return copyOptionsToList();
101      });
102      sel.on('disable', function() {
103        sel.prop('disabled', true);
104        wrapper.addClass('disabled');
105        return disabled = true;
106      });
107      sel.on('change.fs', function(e) {
108        if (e.originalEvent && e.originalEvent.isTrusted) {
109          return e.stopPropagation();
110        } else {
111          return updateTriggerText();
112        }
113      });
114      sel.on('keydown', function(e) {
115        var hovered, newHovered, w;
116        w = e.which;
117        hovered = options.find('.hover');
118        hovered.removeClass('hover');
119        if (!options.hasClass('open')) {
120          if (w === 13 || w === 32 || w === 38 || w === 40) {
121            e.preventDefault();
122            return trigger.trigger('click.fs');
123          }
124        } else {
125          if (w === 38) {
126            e.preventDefault();
127            if (hovered.length && hovered.index() > 0) {
128              hovered.prev().addClass('hover');
129            } else {
130              options.find('li:last-child').addClass('hover');
131            }
132          } else if (w === 40) {
133            e.preventDefault();
134            if (hovered.length && hovered.index() < options.find('li').length - 1) {
135              hovered.next().addClass('hover');
136            } else {
137              options.find('li:first-child').addClass('hover');
138            }
139          } else if (w === 27) {
140            e.preventDefault();
141            trigger.trigger('click.fs');
142          } else if (w === 13 || w === 32) {
143            e.preventDefault();
144            hovered.trigger('mousedown.fs');
145          } else if (w === 9) {
146            if (trigger.hasClass('open')) {
147              trigger.trigger('close.fs');
148            }
149          }
150          newHovered = options.find('.hover');
151          if (newHovered.length) {
152            options.scrollTop(0);
153            return options.scrollTop(newHovered.position().top - 12);
154          }
155        }
156      });
157      options.on('mousedown.fs', 'li', function(e) {
158        var clicked;
159        clicked = $(this);
160        sel.val(clicked.data('raw-value'));
161        if (!isiOS) {
162          sel.trigger('blur.fs').trigger('focus.fs');
163        }
164        options.find('.selected').removeClass('selected');
165        clicked.addClass('selected');
166        trigger.addClass('selected');
167        return sel.val(clicked.data('raw-value')).trigger('change.fs').trigger('blur.fs').trigger('focus.fs');
168      });
169      options.on('mouseenter.fs', 'li', function() {
170        var hovered, nowHovered;
171        nowHovered = $(this);
172        hovered = options.find('.hover');
173        hovered.removeClass('hover');
174        return nowHovered.addClass('hover');
175      });
176      options.on('mouseleave.fs', 'li', function() {
177        return options.find('.hover').removeClass('hover');
178      });
179      copyOptionsToList = function() {
180        var selOpts;
181        updateTriggerText();
182        if (isiOS && !settings.forceiOS) {
183          return;
184        }
185        selOpts = sel.find('option');
186        return sel.find('option').each(function(i, opt) {
187          var optHtml;
188          opt = $(opt);
189          if (!opt.prop('disabled') && (opt.val() || settings.includeBlank)) {
190            optHtml = settings.optionTemplate(opt);
191            if (opt.prop('selected')) {
192              return options.append("<li data-raw-value=\"" + (opt.val()) + "\" class=\"selected\">" + optHtml + "</li>");
193            } else {
194              return options.append("<li data-raw-value=\"" + (opt.val()) + "\">" + optHtml + "</li>");
195            }
196          }
197        });
198      };
199      sel.on('update.fs', function() {
200        wrapper.find('.options').empty();
201        return copyOptionsToList();
202      });
203      return copyOptionsToList();
204    });
205  };
206
207}).call(this);

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.