You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							315 lines
						
					
					
						
							16 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							315 lines
						
					
					
						
							16 KiB
						
					
					
				
								! function($, window, document) {
							 | 
						|
								    "use strict";
							 | 
						|
								
							 | 
						|
								    function Wickedpicker(e, t) {
							 | 
						|
								        this.element = $(e), this.options = $.extend({}, defaults, t), this.element.addClass("hasWickedpicker"), this.element.attr("onkeypress", "return false;"), this.element.attr("aria-showingpicker", "false"), this.createPicker(), this.timepicker = $(".wickedpicker"), this.up = $("." + this.options.upArrow.split(/\s+/)
							 | 
						|
								            .join(".")), this.down = $("." + this.options.downArrow.split(/\s+/)
							 | 
						|
								            .join(".")), this.separator = $(".wickedpicker__controls__control--separator"), this.hoursElem = $(".wickedpicker__controls__control--hours"), this.minutesElem = $(".wickedpicker__controls__control--minutes"), this.secondsElem = $(".wickedpicker__controls__control--seconds"), this.meridiemElem = $(".wickedpicker__controls__control--meridiem"), this.close = $("." + this.options.close.split(/\s+/)
							 | 
						|
								            .join("."));
							 | 
						|
								        var i = this.timeArrayFromString(this.options.now);
							 | 
						|
								        this.options.now = new Date(today.getFullYear(), today.getMonth(), today.getDate(), i[0], i[1], i[2]), this.selectedHour = this.parseHours(this.options.now.getHours()), this.selectedMin = this.parseSecMin(this.options.now.getMinutes()), this.selectedSec = this.parseSecMin(this.options.now.getSeconds()), this.selectedMeridiem = this.parseMeridiem(this.options.now.getHours()), this.setHoverState(), this.attach(e), this.setText(e)
							 | 
						|
								    }
							 | 
						|
								    "function" != typeof String.prototype.endsWith && (String.prototype.endsWith = function(e) {
							 | 
						|
								        return e.length > 0 && this.substring(this.length - e.length, this.length) === e
							 | 
						|
								    });
							 | 
						|
								    var isMobile = function() {
							 | 
						|
								            return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
							 | 
						|
								        },
							 | 
						|
								        today = new Date,
							 | 
						|
								        pluginName = "wickedpicker",
							 | 
						|
								        defaults = {
							 | 
						|
								            now: today.getHours() + ":" + today.getMinutes(),
							 | 
						|
								            twentyFour: !1,
							 | 
						|
								            upArrow: "wickedpicker__controls__control-up",
							 | 
						|
								            downArrow: "wickedpicker__controls__control-down",
							 | 
						|
								            close: "wickedpicker__close",
							 | 
						|
								            hoverState: "hover-state",
							 | 
						|
								            title: "Timepicker",
							 | 
						|
								            showSeconds: !1,
							 | 
						|
								            timeSeparator: " : ",
							 | 
						|
								            secondsInterval: 1,
							 | 
						|
								            minutesInterval: 1,
							 | 
						|
								            beforeShow: null,
							 | 
						|
								            afterShow: null,
							 | 
						|
								            show: null,
							 | 
						|
								            clearable: !1,
							 | 
						|
								            closeOnClickOutside: !0,
							 | 
						|
								            onClickOutside: function() {}
							 | 
						|
								        };
							 | 
						|
								    $.extend(Wickedpicker.prototype, {
							 | 
						|
								        showPicker: function(e) {
							 | 
						|
								            "function" == typeof this.options.beforeShow && this.options.beforeShow(e, this.timepicker);
							 | 
						|
								            var t = $(e)
							 | 
						|
								                .offset();
							 | 
						|
								            if($(e)
							 | 
						|
								                .attr({
							 | 
						|
								                    "aria-showingpicker": "true",
							 | 
						|
								                    tabindex: -1
							 | 
						|
								                }), this.setText(e), this.showHideMeridiemControl(), this.getText(e) !== this.getTime()) {
							 | 
						|
								                var i = this.getText(e),
							 | 
						|
								                    s = /\s[ap]m$/i,
							 | 
						|
								                    o = s.test(i) ? i.substr(-2, 2) : null,
							 | 
						|
								                    n = i.replace(s, "")
							 | 
						|
								                    .split(this.options.timeSeparator),
							 | 
						|
								                    r = {};
							 | 
						|
								                r.hours = n[0], r.minutes = n[1], r.meridiem = o, this.options.showSeconds && (r.seconds = n[2]), this.setTime(r)
							 | 
						|
								            }
							 | 
						|
								            this.timepicker.css({
							 | 
						|
								                    "z-index": this.element.css("z-index") + 1,
							 | 
						|
								                    position: "absolute",
							 | 
						|
								                    left: t.left,
							 | 
						|
								                    top: t.top + $(e)[0].offsetHeight
							 | 
						|
								                })
							 | 
						|
								                .show(), "function" == typeof this.options.show && this.options.show(e, this.timepicker), this.handleTimeAdjustments(e)
							 | 
						|
								        },
							 | 
						|
								        hideTimepicker: function(e) {
							 | 
						|
								            this.timepicker.hide(), "function" == typeof this.options.afterShow && this.options.afterShow(e, this.timepicker), {
							 | 
						|
								                    start: function() {
							 | 
						|
								                        var e = $.Deferred();
							 | 
						|
								                        return $('[aria-showingpicker="true"]')
							 | 
						|
								                            .attr("aria-showingpicker", "false"), e.promise()
							 | 
						|
								                    }
							 | 
						|
								                }.start()
							 | 
						|
								                .then(function(e) {
							 | 
						|
								                    setTimeout(function() {
							 | 
						|
								                        $('[aria-showingpicker="false"]')
							 | 
						|
								                            .attr("tabindex", e)
							 | 
						|
								                    }, 400)
							 | 
						|
								                }(0))
							 | 
						|
								        },
							 | 
						|
								        createPicker: function() {
							 | 
						|
								            if(0 === $(".wickedpicker")
							 | 
						|
								                .length) {
							 | 
						|
								                var e = '<div class="wickedpicker"><p class="wickedpicker__title">' + this.options.title + '<span class="wickedpicker__close"></span></p><ul class="wickedpicker__controls"><li class="wickedpicker__controls__control"><span class="' + this.options.upArrow + '"></span><span class="wickedpicker__controls__control--hours" tabindex="-1">00</span><span class="' + this.options.downArrow + '"></span></li><li class="wickedpicker__controls__control--separator"><span class="wickedpicker__controls__control--separator-inner">:</span></li><li class="wickedpicker__controls__control"><span class="' + this.options.upArrow + '"></span><span class="wickedpicker__controls__control--minutes" tabindex="-1">00</span><span class="' + this.options.downArrow + '"></span></li>';
							 | 
						|
								                this.options.showSeconds && (e += '<li class="wickedpicker__controls__control--separator"><span class="wickedpicker__controls__control--separator-inner">:</span></li><li class="wickedpicker__controls__control"><span class="' + this.options.upArrow + '"></span><span class="wickedpicker__controls__control--seconds" tabindex="-1">00</span><span class="' + this.options.downArrow + '"></span> </li>'), e += '<li class="wickedpicker__controls__control"><span class="' + this.options.upArrow + '"></span><span class="wickedpicker__controls__control--meridiem" tabindex="-1">AM</span><span class="' + this.options.downArrow + '"></span></li></ul></div>', $("body")
							 | 
						|
								                    .append(e), this.attachKeyboardEvents()
							 | 
						|
								            }
							 | 
						|
								        },
							 | 
						|
								        showHideMeridiemControl: function() {
							 | 
						|
								            !1 === this.options.twentyFour ? $(this.meridiemElem)
							 | 
						|
								                .parent()
							 | 
						|
								                .show() : $(this.meridiemElem)
							 | 
						|
								                .parent()
							 | 
						|
								                .hide()
							 | 
						|
								        },
							 | 
						|
								        showHideSecondsControl: function() {
							 | 
						|
								            this.options.showSeconds ? $(this.secondsElem)
							 | 
						|
								                .parent()
							 | 
						|
								                .show() : $(this.secondsElem)
							 | 
						|
								                .parent()
							 | 
						|
								                .hide()
							 | 
						|
								        },
							 | 
						|
								        attach: function(e) {
							 | 
						|
								            var t = this;
							 | 
						|
								            this.options.clearable && t.makePickerInputClearable(e), $(e)
							 | 
						|
								                .attr("tabindex", 0), $(e)
							 | 
						|
								                .on("click focus", function(e) {
							 | 
						|
								                    $(t.timepicker)
							 | 
						|
								                        .is(":hidden") && (t.showPicker($(this)), window.lastTimePickerControl = $(this), $(t.hoursElem)
							 | 
						|
								                            .focus())
							 | 
						|
								                });
							 | 
						|
								            var i = function(e) {
							 | 
						|
								                if($(t.timepicker)
							 | 
						|
								                    .is(":visible")) {
							 | 
						|
								                    if($(e.target)
							 | 
						|
								                        .is(t.close)) t.hideTimepicker(window.lastTimePickerControl);
							 | 
						|
								                    else if($(e.target)
							 | 
						|
								                        .closest(t.timepicker)
							 | 
						|
								                        .length || $(e.target)
							 | 
						|
								                        .closest($(".hasWickedpicker"))
							 | 
						|
								                        .length) e.stopPropagation();
							 | 
						|
								                    else {
							 | 
						|
								                        if("function" == typeof t.options.onClickOutside ? t.options.onClickOutside() : console.warn("Type of onClickOutside must be a function"), !t.options.closeOnClickOutside) return;
							 | 
						|
								                        t.hideTimepicker(window.lastTimePickerControl)
							 | 
						|
								                    }
							 | 
						|
								                    window.lastTimePickerControl = null
							 | 
						|
								                }
							 | 
						|
								            };
							 | 
						|
								            $(document)
							 | 
						|
								                .off("click", i)
							 | 
						|
								                .on("click", i)
							 | 
						|
								        },
							 | 
						|
								        attachKeyboardEvents: function() {
							 | 
						|
								            $(document)
							 | 
						|
								                .on("keydown", $.proxy(function(e) {
							 | 
						|
								                    switch(e.keyCode) {
							 | 
						|
								                        case 9:
							 | 
						|
								                            "hasWickedpicker" !== e.target.className && $(this.close)
							 | 
						|
								                                .trigger("click");
							 | 
						|
								                            break;
							 | 
						|
								                        case 27:
							 | 
						|
								                            $(this.close)
							 | 
						|
								                                .trigger("click");
							 | 
						|
								                            break;
							 | 
						|
								                        case 37:
							 | 
						|
								                            e.target.className !== this.hoursElem[0].className ? $(e.target)
							 | 
						|
								                                .parent()
							 | 
						|
								                                .prevAll("li")
							 | 
						|
								                                .not(this.separator.selector)
							 | 
						|
								                                .first()
							 | 
						|
								                                .children()[1].focus() : $(e.target)
							 | 
						|
								                                .parent()
							 | 
						|
								                                .siblings(":last")
							 | 
						|
								                                .children()[1].focus();
							 | 
						|
								                            break;
							 | 
						|
								                        case 39:
							 | 
						|
								                            e.target.className !== this.meridiemElem[0].className ? $(e.target)
							 | 
						|
								                                .parent()
							 | 
						|
								                                .nextAll("li")
							 | 
						|
								                                .not(this.separator.selector)
							 | 
						|
								                                .first()
							 | 
						|
								                                .children()[1].focus() : $(e.target)
							 | 
						|
								                                .parent()
							 | 
						|
								                                .siblings(":first")
							 | 
						|
								                                .children()[1].focus();
							 | 
						|
								                            break;
							 | 
						|
								                        case 38:
							 | 
						|
								                            $(":focus")
							 | 
						|
								                                .prev()
							 | 
						|
								                                .trigger("click");
							 | 
						|
								                            break;
							 | 
						|
								                        case 40:
							 | 
						|
								                            $(":focus")
							 | 
						|
								                                .next()
							 | 
						|
								                                .trigger("click")
							 | 
						|
								                    }
							 | 
						|
								                }, this))
							 | 
						|
								        },
							 | 
						|
								        setTime: function(e) {
							 | 
						|
								            this.setHours(e.hours), this.setMinutes(e.minutes), this.setMeridiem(e.meridiem), this.options.showSeconds && this.setSeconds(e.seconds)
							 | 
						|
								        },
							 | 
						|
								        getTime: function() {
							 | 
						|
								            return [this.formatTime(this.getHours(), this.getMinutes(), this.getMeridiem(), this.getSeconds())]
							 | 
						|
								        },
							 | 
						|
								        setHours: function(e) {
							 | 
						|
								            var t = new Date;
							 | 
						|
								            t.setHours(e);
							 | 
						|
								            var i = this.parseHours(t.getHours());
							 | 
						|
								            this.hoursElem.text(i), this.selectedHour = i
							 | 
						|
								        },
							 | 
						|
								        getHours: function() {
							 | 
						|
								            var e = new Date;
							 | 
						|
								            return e.setHours(this.hoursElem.text()), e.getHours()
							 | 
						|
								        },
							 | 
						|
								        parseHours: function(e) {
							 | 
						|
								            return !1 === this.options.twentyFour ? (e + 11) % 12 + 1 : e < 10 ? "0" + e : e
							 | 
						|
								        },
							 | 
						|
								        setMinutes: function(e) {
							 | 
						|
								            var t = new Date;
							 | 
						|
								            t.setMinutes(e);
							 | 
						|
								            var i = t.getMinutes(),
							 | 
						|
								                s = this.parseSecMin(i);
							 | 
						|
								            this.minutesElem.text(s), this.selectedMin = s
							 | 
						|
								        },
							 | 
						|
								        getMinutes: function() {
							 | 
						|
								            var e = new Date;
							 | 
						|
								            return e.setMinutes(this.minutesElem.text()), e.getMinutes()
							 | 
						|
								        },
							 | 
						|
								        parseSecMin: function(e) {
							 | 
						|
								            return (e < 10 ? "0" : "") + e
							 | 
						|
								        },
							 | 
						|
								        setMeridiem: function(e) {
							 | 
						|
								            var t = "";
							 | 
						|
								            t = void 0 === e ? "PM" === this.getMeridiem() ? "AM" : "PM" : e, this.meridiemElem.text(t), this.selectedMeridiem = t
							 | 
						|
								        },
							 | 
						|
								        getMeridiem: function() {
							 | 
						|
								            return this.meridiemElem.text()
							 | 
						|
								        },
							 | 
						|
								        setSeconds: function(e) {
							 | 
						|
								            var t = new Date;
							 | 
						|
								            t.setSeconds(e);
							 | 
						|
								            var i = t.getSeconds(),
							 | 
						|
								                s = this.parseSecMin(i);
							 | 
						|
								            this.secondsElem.text(s), this.selectedSec = s
							 | 
						|
								        },
							 | 
						|
								        getSeconds: function() {
							 | 
						|
								            var e = new Date;
							 | 
						|
								            return e.setSeconds(this.secondsElem.text()), e.getSeconds()
							 | 
						|
								        },
							 | 
						|
								        parseMeridiem: function(e) {
							 | 
						|
								            return e > 11 ? "PM" : "AM"
							 | 
						|
								        },
							 | 
						|
								        handleTimeAdjustments: function(e) {
							 | 
						|
								            var t = 0;
							 | 
						|
								            $(this.up)
							 | 
						|
								                .add(this.down)
							 | 
						|
								                .off("mousedown click touchstart")
							 | 
						|
								                .on("mousedown click", {
							 | 
						|
								                    Wickedpicker: this,
							 | 
						|
								                    input: e
							 | 
						|
								                }, function(e) {
							 | 
						|
								                    if(1 != e.which) return !1;
							 | 
						|
								                    var i = this.className.indexOf("up") > -1 ? "+" : "-",
							 | 
						|
								                        s = e.data;
							 | 
						|
								                    "mousedown" == e.type ? t = setInterval($.proxy(function(e) {
							 | 
						|
								                        e.Wickedpicker.changeValue(i, e.input, this)
							 | 
						|
								                    }, this, {
							 | 
						|
								                        Wickedpicker: s.Wickedpicker,
							 | 
						|
								                        input: s.input
							 | 
						|
								                    }), 200) : s.Wickedpicker.changeValue(i, s.input, this)
							 | 
						|
								                })
							 | 
						|
								                .bind("mouseup touchend", function() {
							 | 
						|
								                    clearInterval(t)
							 | 
						|
								                })
							 | 
						|
								        },
							 | 
						|
								        changeValue: function(operator, input, clicked) {
							 | 
						|
								            var target = "+" === operator ? clicked.nextSibling : clicked.previousSibling,
							 | 
						|
								                targetClass = $(target)
							 | 
						|
								                .attr("class");
							 | 
						|
								            targetClass.endsWith("hours") ? this.setHours(eval(this.getHours() + operator + 1)) : targetClass.endsWith("minutes") ? this.setMinutes(eval(this.getMinutes() + operator + this.options.minutesInterval)) : targetClass.endsWith("seconds") ? this.setSeconds(eval(this.getSeconds() + operator + this.options.secondsInterval)) : this.setMeridiem(), this.setText(input)
							 | 
						|
								        },
							 | 
						|
								        setText: function(e) {
							 | 
						|
								            $(e)
							 | 
						|
								                .val(this.formatTime(this.selectedHour, this.selectedMin, this.selectedMeridiem, this.selectedSec))
							 | 
						|
								                .change()
							 | 
						|
								        },
							 | 
						|
								        getText: function(e) {
							 | 
						|
								            return $(e)
							 | 
						|
								                .val()
							 | 
						|
								        },
							 | 
						|
								        formatTime: function(e, t, i, s) {
							 | 
						|
								            var o = e + this.options.timeSeparator + t;
							 | 
						|
								            return this.options.showSeconds && (o += this.options.timeSeparator + s), !1 === this.options.twentyFour && (o += " " + i), o
							 | 
						|
								        },
							 | 
						|
								        setHoverState: function() {
							 | 
						|
								            var e = this;
							 | 
						|
								            isMobile() || $(this.up)
							 | 
						|
								                .add(this.down)
							 | 
						|
								                .add(this.close)
							 | 
						|
								                .hover(function() {
							 | 
						|
								                    $(this)
							 | 
						|
								                        .toggleClass(e.options.hoverState)
							 | 
						|
								                })
							 | 
						|
								        },
							 | 
						|
								        makePickerInputClearable: function(e) {
							 | 
						|
								            $(e)
							 | 
						|
								                .wrap('<div class="clearable-picker"></div>')
							 | 
						|
								                .after("<span data-clear-picker>×</span>"), $("[data-clear-picker]")
							 | 
						|
								                .on("click", function(e) {
							 | 
						|
								                    $(this)
							 | 
						|
								                        .siblings(".hasWickedpicker")
							 | 
						|
								                        .val("")
							 | 
						|
								                })
							 | 
						|
								        },
							 | 
						|
								        timeArrayFromString: function(e) {
							 | 
						|
								            if(e.length) {
							 | 
						|
								                var t = e.split(":");
							 | 
						|
								                return t[2] = t.length < 3 ? "00" : t[2], t
							 | 
						|
								            }
							 | 
						|
								            return !1
							 | 
						|
								        },
							 | 
						|
								        _time: function() {
							 | 
						|
								            var e = $(this.element)
							 | 
						|
								                .val();
							 | 
						|
								            return "" === e ? this.formatTime(this.selectedHour, this.selectedMin, this.selectedMeridiem, this.selectedSec) : e
							 | 
						|
								        },
							 | 
						|
								        _hide: function() {
							 | 
						|
								            this.hideTimepicker(this.element)
							 | 
						|
								        }
							 | 
						|
								    }), $.fn[pluginName] = function(e, t) {
							 | 
						|
								        return $.isFunction(Wickedpicker.prototype["_" + e]) ? $(this)
							 | 
						|
								            .hasClass("hasWickedpicker") ? void 0 !== t ? $.data($(this)[t], "plugin_" + pluginName)["_" + e]() : $.data($(this)[0], "plugin_" + pluginName)["_" + e]() : void 0 : this.each(function() {
							 | 
						|
								                $.data(this, "plugin_" + pluginName) || $.data(this, "plugin_" + pluginName, new Wickedpicker(this, e))
							 | 
						|
								            })
							 | 
						|
								    }
							 | 
						|
								}(jQuery, window, document);
							 |