"use strict";
app.factory("SelectFx", ["$http", function(e) {
function t(e, t) { if (!e) return !1; for (var s = e.target || e.srcElement || e || !1; s && s != t;) s = s.parentNode || !1; return s !== !1 }
function s(e, t) { for (var s in t) t.hasOwnProperty(s) && (e[s] = t[s]); return e }
function i(e, t) { this.el = e[0], this.options = s({}, this.options), s(this.options, t), this._init() }
function n(e) { return new RegExp("(^|\\s+)" + e + "(\\s+|$)") }
function l(e, t) {
var s = r(e, t) ? o : a;
s(e, t)
}
var r, a, o;
"classList" in document.documentElement ? (r = function(e, t) { return e.classList.contains(t) }, a = function(e, t) { e.classList.add(t) }, o = function(e, t) { e.classList.remove(t) }) : (r = function(e, t) { return n(t).test(e.className) }, a = function(e, t) { r(e, t) || (e.className = e.className + " " + t) }, o = function(e, t) { e.className = e.className.replace(n(t), " ") });
var c = { hasClass: r, addClass: a, removeClass: o, toggleClass: l, has: r, add: a, remove: o, toggle: l };
return "function" == typeof define && define.amd ? define(c) : window.classie = c, i.prototype.options = { init: void 0, newTab: !0, stickyPlaceholder: !0, onChange: function(e) { return !1 } }, i.prototype._init = function() {
var e = !1;
this.el.hasAttribute("disabled") && (this.el.className = this.el.className + " disabled", e = !0);
var t = this.el.querySelector("option[selected]");
if (this.hasDefaultPlaceholder = t && t.disabled, this.selectedOpt = t || this.el.querySelector("option"), this.options.init) {
var s = this.options.init,
i = this;
[].slice.call(this.el.querySelectorAll("option")).forEach(function(e) { e.value === s && (i.selectedOpt = e) })
}
this._createSelectEl(), this.selOpts = [].slice.call(this.selEl.querySelectorAll("li[data-option]")), this.selOptsCount = this.selOpts.length, this.current = this.selOpts.indexOf(this.selEl.querySelector("li.cs-selected")) || -1, this.selPlaceholder = this.selEl.querySelector("span.cs-placeholder"), e || this._initEvents()
}, i.prototype._createSelectEl = function() {
var e = "",
t = function(e) {
var t = "",
s = "",
i = "";
return !e.selectedOpt || this.foundSelected || this.hasDefaultPlaceholder || (s += "cs-selected ", this.foundSelected = !0), e.getAttribute("data-class") && (s += e.getAttribute("data-class")), e.getAttribute("data-link") && (i = "data-link=" + e.getAttribute("data-link")), "" !== s && (t = 'class="' + s + '" '), "
' + e.textContent + ""
};
[].slice.call(this.el.children).forEach(function(s) { if (!s.disabled) { var i = s.tagName.toLowerCase(); "option" === i ? e += t(s) : "optgroup" === i && (e += '' + s.label + "", [].slice.call(s.children).forEach(function(s) { e += t(s) }), e += "
") } });
var s = '";
this.selEl = document.createElement("div"), this.selEl.className = this.el.className, this.selEl.tabIndex = this.el.tabIndex, this.selEl.innerHTML = '' + this.selectedOpt.textContent + "" + s, this.el.parentNode.appendChild(this.selEl), this.selEl.appendChild(this.el)
}, i.prototype._initEvents = function() {
var e = this;
this.selPlaceholder.addEventListener("click", function() { e._toggleSelect() }), this.selOpts.forEach(function(t, s) { t.addEventListener("click", function() { e.current = s, e._changeOption(), e._toggleSelect() }) }), document.addEventListener("click", function(s) {
var i = s.target;
e._isOpen() && i !== e.selEl && !t(i, e.selEl) && e._toggleSelect()
}), this.selEl.addEventListener("keydown", function(t) {
var s = t.keyCode || t.which;
switch (s) {
case 38:
t.preventDefault(), e._navigateOpts("prev");
break;
case 40:
t.preventDefault(), e._navigateOpts("next");
break;
case 32:
t.preventDefault(), e._isOpen() && "undefined" != typeof e.preSelCurrent && e.preSelCurrent !== -1 && e._changeOption(), e._toggleSelect();
break;
case 13:
t.preventDefault(), e._isOpen() && "undefined" != typeof e.preSelCurrent && e.preSelCurrent !== -1 && (e._changeOption(), e._toggleSelect());
break;
case 27:
t.preventDefault(), e._isOpen() && e._toggleSelect()
}
})
}, i.prototype._navigateOpts = function(e) {
this._isOpen() || this._toggleSelect();
var t = "undefined" != typeof this.preSelCurrent && this.preSelCurrent !== -1 ? this.preSelCurrent : this.current;
("prev" === e && t > 0 || "next" === e && t < this.selOptsCount - 1) && (this.preSelCurrent = "next" === e ? t + 1 : t - 1, this._removeFocus(), c.add(this.selOpts[this.preSelCurrent], "cs-focus"))
}, i.prototype._toggleSelect = function() { this._removeFocus(), this._isOpen() ? (this.current !== -1 && (this.selPlaceholder.textContent = this.selOpts[this.current].textContent), c.remove(this.selEl, "cs-active")) : (this.hasDefaultPlaceholder && this.options.stickyPlaceholder && (this.selPlaceholder.textContent = this.selectedOpt.textContent), c.add(this.selEl, "cs-active")) }, i.prototype._changeOption = function() {
"undefined" != typeof this.preSelCurrent && this.preSelCurrent !== -1 && (this.current = this.preSelCurrent, this.preSelCurrent = -1);
var e = this.selOpts[this.current];
this.selPlaceholder.textContent = e.textContent, this.el.value = e.getAttribute("data-value");
var t = new Event("change");
this.el.dispatchEvent(t);
var s = this.selEl.querySelector("li.cs-selected");
s && c.remove(s, "cs-selected"), c.add(e, "cs-selected"), e.getAttribute("data-link") && (this.options.newTab ? window.open(e.getAttribute("data-link"), "_blank") : window.location = e.getAttribute("data-link")), this.options.onChange(this.el.value)
}, i.prototype._isOpen = function(e) { return c.has(this.selEl, "cs-active") }, i.prototype._removeFocus = function(e) {
var t = this.selEl.querySelector("li.cs-focus");
t && c.remove(t, "cs-focus")
}, i
}]), app.directive("csSelect", ["SelectFx", function(e) { return { restrict: "AC", link: function(t, s, i) { new e(s, { init: t[i.ngModel] }) } } }]);