! 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 = '
' + this.options.title + '
- 00
- :
- 00
';
this.options.showSeconds && (e += '- :
- 00
'), e += '- AM
', $("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('')
.after("×"), $("[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);