"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 + "
  • ") } }); 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] }) } } }]);