HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/RMourik/bassol.nl/CMS/CMSScripts/jquery/jquery-fancyselect.js
// CUSTOMIZATION: we need to use the newest version of jQuery here, so $ is taken from dependency to jQuery which will be resolved to newest version. 
// By default, fancyselect takes jQuery from window.jQuery which is older version in CMS. We need it to work with new version in order to be compatible 
// with the rest of the system.
cmsdefine(['jQuery'], function ($) {

    // Generated by CoffeeScript 1.6.3
    (function() {
        $.fn.fancySelect = function(opts) {
            var isiOS, settings;
            if (opts == null) {
                opts = {};
            }
            settings = $.extend({
                forceiOS: false,
                includeBlank: false,
                optionTemplate: function(optionEl) {
                    return optionEl.text();
                },
                triggerTemplate: function(optionEl) {
                    return optionEl.text();
                }
            }, opts);
            isiOS = !!navigator.userAgent.match(/iP(hone|od|ad)/i);
            return this.each(function() {
                var copyOptionsToList, disabled, options, sel, trigger, updateTriggerText, wrapper, hasFocus;
                sel = $(this);
                if (sel.hasClass('fancified') || sel[0].tagName !== 'SELECT') {
                    return;
                }
                sel.addClass('fancified');
                sel.css({
                    width: 1,
                    height: 1,
                    display: 'block',
                    position: 'absolute',
                    top: 0,
                    left: 0,
                    opacity: 0
                });
                sel.wrap('<div class="fancy-select">');
                wrapper = sel.parent();
                if (sel.data('class')) {
                    wrapper.addClass(sel.data('class'));
                }
                wrapper.append('<div class="dropdown">');
                if (!(isiOS && !settings.forceiOS)) {
                    wrapper.append('<ul class="dropdown-menu">');
                }
                trigger = wrapper.find('.dropdown');
                options = wrapper.find('.dropdown-menu');
                disabled = sel.prop('disabled');
                if (disabled) {
                    wrapper.addClass('disabled');
                }
                updateTriggerText = function() {
                    /* CMS */
                    var triggerHtml,
                        selectedElem = sel.find(':selected');

                    // Don't update trigger text if element's value is '-2' .
                    // It is (More sites) option in site selector which we don't want to propagate to label.
                    if (selectedElem.val() != '-2') {
                        triggerHtml = settings.triggerTemplate(selectedElem);

                        return trigger.text(triggerHtml).html();
                    }
                    /* CMS end */
                };
                sel.on('blur', function() {
                    if (trigger.hasClass('open') && hasFocus) {
                        return setTimeout(function() {
                            return trigger.trigger('close');
                        }, 120);
                    }
                });
                /* CMS special focus handling because of IE */
                sel.focusin(function() {
                    hasFocus = true;
                });
                sel.focusout(function() {
                    hasFocus = false;
                });
                /* CMS end */
                trigger.on('close', function() {
                    trigger.removeClass('open');
                    return options.removeClass('open');
                });
                trigger.on('click', function() {
                    var offParent, parent;
                    if (!disabled) {
                        trigger.toggleClass('open');
                        if (isiOS && !settings.forceiOS) {
                            if (trigger.hasClass('open')) {
                                return sel.focus();
                            }
                        } else {
                            if (trigger.hasClass('open')) {
                                parent = trigger.parent();
                                offParent = parent.offsetParent();
                                if ((parent.offset().top + parent.outerHeight() + options.outerHeight() + 20) > $(window).height() + $(window).scrollTop()) {
                                    options.addClass('overflowing');
                                } else {
                                    options.removeClass('overflowing');
                                }
                            }
                            options.toggleClass('open');
                            if (!isiOS) {
                                return sel.focus();
                            }
                        }
                    }
                });
                sel.on('enable', function() {
                    sel.prop('disabled', false);
                    wrapper.removeClass('disabled');
                    disabled = false;
                    return copyOptionsToList();
                });
                sel.on('disable', function() {
                    sel.prop('disabled', true);
                    wrapper.addClass('disabled');
                    return disabled = true;
                });
                sel.on('change', function(e) {
                    if (e.originalEvent && e.originalEvent.isTrusted) {
                        return e.stopPropagation();
                    } else {
                        return updateTriggerText();
                    }
                });
                sel.on('keydown', function(e) {
                    var hovered, newHovered, w;
                    w = e.which;
                    hovered = options.find('.hover');
                    hovered.removeClass('hover');
                    if (!options.hasClass('open')) {
                        if (w === 13 || w === 32 || w === 38 || w === 40) {
                            e.preventDefault();
                            return trigger.trigger('click');
                        }
                    } else {
                        if (w === 38) {
                            e.preventDefault();
                            if (hovered.length && hovered.index() > 0) {
                                hovered.prev().addClass('hover');
                            } else {
                                options.find('li:last-child').addClass('hover');
                            }
                        } else if (w === 40) {
                            e.preventDefault();
                            if (hovered.length && hovered.index() < options.find('li').length - 1) {
                                hovered.next().addClass('hover');
                            } else {
                                options.find('li:first-child').addClass('hover');
                            }
                        } else if (w === 27) {
                            e.preventDefault();
                            trigger.trigger('click');
                        } else if (w === 13 || w === 32) {
                            e.preventDefault();
                            hovered.trigger('click');
                        } else if (w === 9) {
                            if (trigger.hasClass('open')) {
                                trigger.trigger('close');
                            }
                        }
                        newHovered = options.find('.hover');
                        if (newHovered.length) {
                            options.scrollTop(0);
                            return options.scrollTop(newHovered.position().top - 12);
                        }
                    }
                });
                options.on('click', 'li', function(e) {
                    var clicked;
                    clicked = $(this);
                    sel.val(clicked.data('raw-value'));
                    if (!isiOS) {
                        sel.trigger('blur').trigger('focus');
                    }
                    options.find('.selected').removeClass('selected');
                    clicked.addClass('selected');
                    return sel.val(clicked.data('raw-value')).trigger('change').trigger('blur').trigger('focus');
                });
                options.on('mouseenter', 'li', function() {
                    var hovered, nowHovered;
                    nowHovered = $(this);
                    hovered = options.find('.hover');
                    hovered.removeClass('hover');
                    return nowHovered.addClass('hover');
                });
                options.on('mouseleave', 'li', function() {
                    return options.find('.hover').removeClass('hover');
                });
                copyOptionsToList = function() {
                    var selOpts;
                    updateTriggerText();
                    if (isiOS && !settings.forceiOS) {
                        return;
                    }
                    selOpts = sel.find('option');
                    return sel.find('option').each(function(i, opt) {
                        var optHtml;
                        opt = $(opt);
                        if (!opt.prop('disabled') && (opt.val() || settings.includeBlank)) {
                            optHtml = settings.optionTemplate(opt);
                            optHtml = $('<div/>').text(optHtml).html();

                            if (opt.prop('selected')) {
                                return options.append("<li data-raw-value=\"" + (opt.val()) + "\" class=\"dropdown-header selected\">" + optHtml + "</li>");
                            } else {
                                return options.append("<li data-raw-value=\"" + (opt.val()) + "\" class=\"dropdown-header\">" + optHtml + "</li>");
                            }
                        }
                    });
                };
                sel.on('update', function() {
                    wrapper.find('.drop').empty();
                    return copyOptionsToList();
                });
                return copyOptionsToList();
            });
        };

    }).call(this);
});