PageSourceSearch

https://www.vorfina.de/wp-content/themes/applauz/framework/js/fancySelect.js?ver=7.1

js vorfina.de collected 2026-09-24 13:08:20 UTC 6,796 bytes, 210 lines download raw bytes

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