window.$ = window.jQuery = require('jquery'); window.popper = require("popper.js"); require("bootstrap"); /*! X-editable - v1.5.3 * In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery * http://github.com/vitalets/x-editable * Copyright (c) 2018 Vitaliy Potapov; Licensed MIT */ ! function(a) { "use strict"; var b = function(b, c) { this.options = a.extend({}, a.fn.editableform.defaults, c), this.$div = a(b), this.options.scope || (this.options.scope = this) }; b.prototype = { constructor: b, initInput: function() { this.input = this.options.input, this.value = this.input.str2value(this.options.value), this.input.prerender() }, initTemplate: function() { this.$form = a(a.fn.editableform.template) }, initButtons: function() { var b = this.$form.find(".editable-buttons"); b.append(a.fn.editableform.buttons), "bottom" === this.options.showbuttons && b.addClass("editable-buttons-bottom") }, render: function() { this.$loading = a(a.fn.editableform.loading), this.$div.empty().append(this.$loading), this.initTemplate(), this.options.showbuttons ? this.initButtons() : this.$form.find(".editable-buttons").remove(), this.showLoading(), this.isSaving = !1, this.$div.triggerHandler("rendering"), this.initInput(), this.$form.find("div.editable-input").append(this.input.$tpl), this.$div.append(this.$form), a.when(this.input.render()).then(a.proxy(function() { if (this.options.showbuttons || this.input.autosubmit(), this.$form.find(".editable-cancel").click(a.proxy(this.cancel, this)), this.input.error) this.error(this.input.error), this.$form.find(".editable-submit").attr("disabled", !0), this.input.$input.attr("disabled", !0), this.$form.submit(function(a) { a.preventDefault() }); else { this.error(!1), this.input.$input.removeAttr("disabled"), this.$form.find(".editable-submit").removeAttr("disabled"); var b = null === this.value || void 0 === this.value || "" === this.value ? this.options.defaultValue : this.value; this.input.value2input(b), this.$form.submit(a.proxy(this.submit, this)) } this.$div.triggerHandler("rendered"), this.showForm(), this.input.postrender && this.input.postrender() }, this)) }, cancel: function() { this.$div.triggerHandler("cancel") }, showLoading: function() { var a, b; this.$form ? (a = this.$form.outerWidth(), b = this.$form.outerHeight(), a && this.$loading.width(a), b && this.$loading.height(b), this.$form.hide()) : (a = this.$loading.parent().width(), a && this.$loading.width(a)), this.$loading.show() }, showForm: function(a) { this.$loading.hide(), this.$form.show(), a !== !1 && this.input.activate(), this.$div.triggerHandler("show") }, error: function(b) { var c, d = this.$form.find(".control-group"), e = this.$form.find(".editable-error-block"); if (b === !1) d.removeClass(a.fn.editableform.errorGroupClass), e.removeClass(a.fn.editableform.errorBlockClass).empty().hide(); else { if (b) { c = ("" + b).split("\n"); for (var f = 0; f < c.length; f++) c[f] = a("
").text(c[f]).html(); b = c.join("
") } d.addClass(a.fn.editableform.errorGroupClass), e.addClass(a.fn.editableform.errorBlockClass).html(b).show() } }, submit: function(b) { b.stopPropagation(), b.preventDefault(); var c = this.input.input2value(), d = this.validate(c); if ("object" === a.type(d) && void 0 !== d.newValue) { if (c = d.newValue, this.input.value2input(c), "string" == typeof d.msg) return this.error(d.msg), void this.showForm() } else if (d) return this.error(d), void this.showForm(); if (!this.options.savenochange && this.input.value2str(c) === this.input.value2str(this.value)) return void this.$div.triggerHandler("nochange"); var e = this.input.value2submit(c); this.isSaving = !0, a.when(this.save(e)).done(a.proxy(function(a) { this.isSaving = !1; var b = "function" == typeof this.options.success ? this.options.success.call(this.options.scope, a, c) : null; return b === !1 ? (this.error(!1), void this.showForm(!1)) : "string" == typeof b ? (this.error(b), void this.showForm()) : (b && "object" == typeof b && b.hasOwnProperty("newValue") && (c = b.newValue), this.error(!1), this.value = c, void this.$div.triggerHandler("save", { newValue: c, submitValue: e, response: a })) }, this)).fail(a.proxy(function(a) { this.isSaving = !1; var b; b = "function" == typeof this.options.error ? this.options.error.call(this.options.scope, a, c) : "string" == typeof a ? a : a.responseText || a.statusText || "Unknown error!", this.error(b), this.showForm() }, this)) }, save: function(b) { this.options.pk = a.fn.editableutils.tryParseJson(this.options.pk, !0); var c, d = "function" == typeof this.options.pk ? this.options.pk.call(this.options.scope) : this.options.pk, e = !!("function" == typeof this.options.url || this.options.url && ("always" === this.options.send || "auto" === this.options.send && null !== d && void 0 !== d)); return e ? (this.showLoading(), c = { name: this.options.name || "", value: b, pk: d }, "function" == typeof this.options.params ? c = this.options.params.call(this.options.scope, c) : (this.options.params = a.fn.editableutils.tryParseJson(this.options.params, !0), a.extend(c, this.options.params)), "function" == typeof this.options.url ? this.options.url.call(this.options.scope, c) : a.ajax(a.extend({ url: this.options.url, data: c, type: "POST" }, this.options.ajaxOptions))) : void 0 }, validate: function(a) { return void 0 === a && (a = this.value), "function" == typeof this.options.validate ? this.options.validate.call(this.options.scope, a) : void 0 }, option: function(a, b) { a in this.options && (this.options[a] = b), "value" === a && this.setValue(b) }, setValue: function(a, b) { b ? this.value = this.input.str2value(a) : this.value = a, this.$form && this.$form.is(":visible") && this.input.value2input(this.value) } }, a.fn.editableform = function(c) { var d = arguments; return this.each(function() { var e = a(this), f = e.data("editableform"), g = "object" == typeof c && c; f || e.data("editableform", f = new b(this, g)), "string" == typeof c && f[c].apply(f, Array.prototype.slice.call(d, 1)) }) }, a.fn.editableform.Constructor = b, a.fn.editableform.defaults = { type: "text", url: null, params: null, name: null, pk: null, value: null, defaultValue: null, send: "auto", validate: null, success: null, error: null, ajaxOptions: null, showbuttons: !0, scope: null, savenochange: !1 }, a.fn.editableform.template = '
', a.fn.editableform.loading = '
', a.fn.editableform.buttons = '', a.fn.editableform.errorGroupClass = null, a.fn.editableform.errorBlockClass = "editable-error", a.fn.editableform.engine = "jquery" }(window.jQuery), function(a) { "use strict"; a.fn.editableutils = { inherit: function(a, b) { var c = function() {}; c.prototype = b.prototype, a.prototype = new c, a.prototype.constructor = a, a.superclass = b.prototype }, setCursorPosition: function(a, b) { if (a.setSelectionRange) try { a.setSelectionRange(b, b) } catch (c) {} else if (a.createTextRange) { var d = a.createTextRange(); d.collapse(!0), d.moveEnd("character", b), d.moveStart("character", b), d.select() } }, tryParseJson: function(a, b) { if ("string" == typeof a && a.length && a.match(/^[\{\[].*[\}\]]$/)) if (b) try { a = new Function("return " + a)() } catch (c) {} finally { return a } else a = new Function("return " + a)(); return a }, sliceObj: function(b, c, d) { var e, f, g = {}; if (!a.isArray(c) || !c.length) return g; for (var h = 0; h < c.length; h++) e = c[h], b.hasOwnProperty(e) && (g[e] = b[e]), d !== !0 && (f = e.toLowerCase(), b.hasOwnProperty(f) && (g[e] = b[f])); return g }, getConfigData: function(b) { var c = {}; return a.each(b[0].dataset, function(a, b) { ("object" != typeof b || b && "object" == typeof b && (b.constructor === Object || b.constructor === Array)) && (c[a] = b) }), c }, objectKeys: function(a) { if (Object.keys) return Object.keys(a); if (a !== Object(a)) throw new TypeError("Object.keys called on a non-object"); var b, c = []; for (b in a) Object.prototype.hasOwnProperty.call(a, b) && c.push(b); return c }, escape: function(b) { return a("
").text(b).html() }, itemsByValue: function(b, c, d) { if (!c || null === b) return []; if ("function" != typeof d) { var e = d || "value"; d = function(a) { return a[e] } } var f = a.isArray(b), g = [], h = this; return a.each(c, function(c, e) { if (e.children) g = g.concat(h.itemsByValue(b, e.children, d)); else if (f) a.grep(b, function(a) { return a == (e && "object" == typeof e ? d(e) : e) }).length && g.push(e); else { var i = e && "object" == typeof e ? d(e) : e; b == i && g.push(e) } }), g }, createInput: function(b) { var c, d, e, f = b.type; return "date" === f && ("inline" === b.mode ? a.fn.editabletypes.datefield ? f = "datefield" : a.fn.editabletypes.dateuifield && (f = "dateuifield") : a.fn.editabletypes.date ? f = "date" : a.fn.editabletypes.dateui && (f = "dateui"), "date" !== f || a.fn.editabletypes.date || (f = "combodate")), "datetime" === f && "inline" === b.mode && (f = "datetimefield"), "wysihtml5" !== f || a.fn.editabletypes[f] || (f = "textarea"), "function" == typeof a.fn.editabletypes[f] ? (c = a.fn.editabletypes[f], d = this.sliceObj(b, this.objectKeys(c.defaults)), e = new c(d)) : (a.error("Unknown type: " + f), !1) }, supportsTransitions: function() { var a = document.body || document.documentElement, b = a.style, c = "transition", d = ["Moz", "Webkit", "Khtml", "O", "ms"]; if ("string" == typeof b[c]) return !0; c = c.charAt(0).toUpperCase() + c.substr(1); for (var e = 0; e < d.length; e++) if ("string" == typeof b[d[e] + c]) return !0; return !1 } } }(window.jQuery), function(a) { "use strict"; var b = function(a, b) { this.init(a, b) }, c = function(a, b) { this.init(a, b) }; b.prototype = { containerName: null, containerDataName: null, innerCss: null, containerClass: "editable-container editable-popup", defaults: {}, init: function(c, d) { this.$element = a(c), this.options = a.extend({}, a.fn.editableContainer.defaults, d), this.splitOptions(), this.formOptions.scope = this.$element[0], this.initContainer(), this.delayedHide = !1, this.$element.on("destroyed", a.proxy(function() { this.destroy() }, this)), a(document).data("editable-handlers-attached") || (a(document).on("keyup.editable", function(b) { 27 === b.which && a(".editable-open").editableContainer("hide", "cancel") }), a(document).on("click.editable", function(c) { var d, e = a(c.target), f = [".editable-container", ".ui-datepicker-header", ".datepicker", ".modal-backdrop", ".bootstrap-wysihtml5-insert-image-modal", ".bootstrap-wysihtml5-insert-link-modal"]; if (!a(".select2-drop-mask").is(":visible") && a.contains(document.documentElement, c.target) && !e.is(document)) { for (d = 0; d < f.length; d++) if (e.is(f[d]) || e.parents(f[d]).length) return; b.prototype.closeOthers(c.target) } }), a(document).data("editable-handlers-attached", !0)) }, splitOptions: function() { if (this.containerOptions = {}, this.formOptions = {}, !a.fn[this.containerName]) throw new Error(this.containerName + " not found. Have you included corresponding js file?"); for (var b in this.options) b in this.defaults ? this.containerOptions[b] = this.options[b] : this.formOptions[b] = this.options[b] }, tip: function() { return this.container() ? this.container().$tip : null }, container: function() { var a; return this.containerDataName && (a = this.$element.data(this.containerDataName)) ? a : a = this.$element.data(this.containerName) }, call: function() { this.$element[this.containerName].apply(this.$element, arguments) }, initContainer: function() { this.call(this.containerOptions) }, renderForm: function() { this.$form.editableform(this.formOptions).on({ save: a.proxy(this.save, this), nochange: a.proxy(function() { this.hide("nochange") }, this), cancel: a.proxy(function() { this.hide("cancel") }, this), show: a.proxy(function() { this.delayedHide ? (this.hide(this.delayedHide.reason), this.delayedHide = !1) : this.setPosition() }, this), rendering: a.proxy(this.setPosition, this), resize: a.proxy(this.setPosition, this), rendered: a.proxy(function() { this.$element.triggerHandler("shown", a(this.options.scope).data("editable")) }, this) }).editableform("render") }, show: function(b) { this.$element.addClass("editable-open"), b !== !1 && this.closeOthers(this.$element[0]), this.innerShow(), this.tip().addClass(this.containerClass), this.$form, this.$form = a("
"), this.tip().is(this.innerCss) ? this.tip().append(this.$form) : this.tip().find(this.innerCss).append(this.$form), this.renderForm() }, hide: function(a) { if (this.tip() && this.tip().is(":visible") && this.$element.hasClass("editable-open")) { if (this.$form.data("editableform").isSaving) return void(this.delayedHide = { reason: a }); this.delayedHide = !1, this.$element.removeClass("editable-open"), this.innerHide(), this.$element.triggerHandler("hidden", a || "manual") } }, innerShow: function() {}, innerHide: function() {}, toggle: function(a) { this.container() && this.tip() && this.tip().is(":visible") ? this.hide() : this.show(a) }, setPosition: function() {}, save: function(a, b) { this.$element.triggerHandler("save", b), this.hide("save") }, option: function(a, b) { this.options[a] = b, a in this.containerOptions ? (this.containerOptions[a] = b, this.setContainerOption(a, b)) : (this.formOptions[a] = b, this.$form && this.$form.editableform("option", a, b)) }, setContainerOption: function(a, b) { this.call("option", a, b) }, destroy: function() { this.hide(), this.innerDestroy(), this.$element.off("destroyed"), this.$element.removeData("editableContainer") }, innerDestroy: function() {}, closeOthers: function(b) { a(".editable-open").each(function(c, d) { if (d !== b && !a(d).find(b).length) { var e = a(d), f = e.data("editableContainer"); f && ("cancel" === f.options.onblur ? e.data("editableContainer").hide("onblur") : "submit" === f.options.onblur && e.data("editableContainer").tip().find("form").submit()) } }) }, activate: function() { this.tip && this.tip().is(":visible") && this.$form && this.$form.data("editableform").input.activate() } }, a.fn.editableContainer = function(d) { var e = arguments; return this.each(function() { var f = a(this), g = "editableContainer", h = f.data(g), i = "object" == typeof d && d, j = "inline" === i.mode ? c : b; h || f.data(g, h = new j(this, i)), "string" == typeof d && h[d].apply(h, Array.prototype.slice.call(e, 1)) }) }, a.fn.editableContainer.Popup = b, a.fn.editableContainer.Inline = c, a.fn.editableContainer.defaults = { value: null, placement: "top", autohide: !0, onblur: "cancel", anim: !1, mode: "popup" }, jQuery.event.special.destroyed = { remove: function(a) { a.handler && a.handler() } } }(window.jQuery), function(a) { "use strict"; a.extend(a.fn.editableContainer.Inline.prototype, a.fn.editableContainer.Popup.prototype, { containerName: "editableform", innerCss: ".editable-inline", containerClass: "editable-container editable-inline", initContainer: function() { this.$tip = a(""), this.options.anim || (this.options.anim = 0) }, splitOptions: function() { this.containerOptions = {}, this.formOptions = this.options }, tip: function() { return this.$tip }, innerShow: function() { this.$element.hide(), this.tip().insertAfter(this.$element).show() }, innerHide: function() { this.$tip.hide(this.options.anim, a.proxy(function() { this.$element.show(), this.innerDestroy() }, this)) }, innerDestroy: function() { this.tip() && this.tip().empty().remove() } }) }(window.jQuery), function(a) { "use strict"; var b = function(b, c) { this.$element = a(b), this.options = a.extend({}, a.fn.editable.defaults, c, a.fn.editableutils.getConfigData(this.$element)), this.options.selector ? this.initLive() : this.init(), this.options.highlight && !a.fn.editableutils.supportsTransitions() && (this.options.highlight = !1) }; b.prototype = { constructor: b, init: function() { var b, c = !1; if (this.options.name = this.options.name || this.$element.attr("id"), this.options.scope = this.$element[0], this.input = a.fn.editableutils.createInput(this.options), this.input) { switch (void 0 === this.options.value || null === this.options.value ? (this.value = this.input.html2value(a.trim(this.$element.html())), c = !0) : (this.options.value = a.fn.editableutils.tryParseJson(this.options.value, !0), "string" == typeof this.options.value ? this.value = this.input.str2value(this.options.value) : this.value = this.options.value), this.$element.addClass("editable"), "textarea" === this.input.type && this.$element.addClass("editable-pre-wrapped"), "manual" !== this.options.toggle ? (this.$element.addClass("editable-click"), this.$element.on(this.options.toggle + ".editable", a.proxy(function(a) { if (this.options.disabled || a.preventDefault(), "mouseenter" === this.options.toggle) this.show(); else { var b = "click" !== this.options.toggle; this.toggle(b) } }, this))) : this.$element.attr("tabindex", -1), "function" == typeof this.options.display && (this.options.autotext = "always"), this.options.autotext) { case "always": b = !0; break; case "auto": b = !a.trim(this.$element.text()).length && null !== this.value && void 0 !== this.value && !c; break; default: b = !1 } a.when(b ? this.render() : !0).then(a.proxy(function() { this.options.disabled ? this.disable() : this.enable(), this.$element.triggerHandler("init", this) }, this)) } }, initLive: function() { var b = this.options.selector; this.options.selector = !1, this.options.autotext = "never", this.$element.on(this.options.toggle + ".editable", b, a.proxy(function(c) { var d = a(c.target).closest(b); d.data("editable") || (d.hasClass(this.options.emptyclass) && d.empty(), d.editable(this.options).trigger(c)) }, this)) }, render: function(a) { return this.options.display !== !1 ? this.input.value2htmlFinal ? this.input.value2html(this.value, this.$element[0], this.options.display, a) : "function" == typeof this.options.display ? this.options.display.call(this.$element[0], this.value, a) : this.input.value2html(this.value, this.$element[0]) : void 0 }, enable: function() { this.options.disabled = !1, this.$element.removeClass("editable-disabled"), this.handleEmpty(this.isEmpty), "manual" !== this.options.toggle && "-1" === this.$element.attr("tabindex") && this.$element.removeAttr("tabindex") }, disable: function() { this.options.disabled = !0, this.hide(), this.$element.addClass("editable-disabled"), this.handleEmpty(this.isEmpty), this.$element.attr("tabindex", -1) }, toggleDisabled: function() { this.options.disabled ? this.enable() : this.disable() }, option: function(b, c) { return b && "object" == typeof b ? void a.each(b, a.proxy(function(b, c) { this.option(a.trim(b), c) }, this)) : (this.options[b] = c, "disabled" === b ? c ? this.disable() : this.enable() : ("value" === b && this.setValue(c), this.container && this.container.option(b, c), void(this.input.option && this.input.option(b, c)))) }, handleEmpty: function(b) { this.options.display !== !1 && (void 0 !== b ? this.isEmpty = b : "function" == typeof this.input.isEmpty ? this.isEmpty = this.input.isEmpty(this.$element) : this.isEmpty = "" === a.trim(this.$element.html()), this.options.disabled ? this.isEmpty && (this.$element.empty(), this.options.emptyclass && this.$element.removeClass(this.options.emptyclass)) : this.isEmpty ? (this.$element.html(this.options.emptytext), this.options.emptyclass && this.$element.addClass(this.options.emptyclass)) : this.options.emptyclass && this.$element.removeClass(this.options.emptyclass)) }, show: function(b) { if (!this.options.disabled) { if (this.container) { if (this.container.tip().is(":visible")) return } else { var c = a.extend({}, this.options, { value: this.value, input: this.input }); this.$element.editableContainer(c), this.$element.on("save.internal", a.proxy(this.save, this)), this.container = this.$element.data("editableContainer") } this.container.show(b) } }, hide: function() { this.container && this.container.hide() }, toggle: function(a) { this.container && this.container.tip().is(":visible") ? this.hide() : this.show(a) }, save: function(a, b) { if (this.options.unsavedclass) { var c = !1; c = c || "function" == typeof this.options.url, c = c || this.options.display === !1, c = c || void 0 !== b.response, c = c || this.options.savenochange && this.input.value2str(this.value) !== this.input.value2str(b.newValue), c ? this.$element.removeClass(this.options.unsavedclass) : this.$element.addClass(this.options.unsavedclass) } if (this.options.highlight) { var d = this.$element, e = d.css("background-color"); d.css("background-color", this.options.highlight), setTimeout(function() { "transparent" === e && (e = ""), d.css("background-color", e), d.addClass("editable-bg-transition"), setTimeout(function() { d.removeClass("editable-bg-transition") }, 1700) }, 10) } this.setValue(b.newValue, !1, b.response) }, validate: function() { return "function" == typeof this.options.validate ? this.options.validate.call(this, this.value) : void 0 }, setValue: function(b, c, d) { c ? this.value = this.input.str2value(b) : this.value = b, this.container && this.container.option("value", this.value), a.when(this.render(d)).then(a.proxy(function() { this.handleEmpty() }, this)) }, activate: function() { this.container && this.container.activate() }, destroy: function() { this.disable(), this.container && this.container.destroy(), this.input.destroy(), "manual" !== this.options.toggle && (this.$element.removeClass("editable-click"), this.$element.off(this.options.toggle + ".editable")), this.$element.off("save.internal"), this.$element.removeClass("editable editable-open editable-disabled"), this.$element.removeData("editable") } }, a.fn.editable = function(c) { var d = {}, e = arguments, f = "editable"; switch (c) { case "validate": return this.each(function() { var b, c = a(this), e = c.data(f); e && (b = e.validate()) && (d[e.options.name] = b) }), d; case "getValue": return 2 === arguments.length && arguments[1] === !0 ? d = this.eq(0).data(f).value : this.each(function() { var b = a(this), c = b.data(f); c && void 0 !== c.value && null !== c.value && (d[c.options.name] = c.input.value2submit(c.value)) }), d; case "submit": var g = arguments[1] || {}, h = this, i = this.editable("validate"); if (a.isEmptyObject(i)) { var j = {}; if (1 === h.length) { var k = h.data("editable"), l = { name: k.options.name || "", value: k.input.value2submit(k.value), pk: "function" == typeof k.options.pk ? k.options.pk.call(k.options.scope) : k.options.pk }; "function" == typeof k.options.params ? l = k.options.params.call(k.options.scope, l) : (k.options.params = a.fn.editableutils.tryParseJson(k.options.params, !0), a.extend(l, k.options.params)), j = { url: k.options.url, data: l, type: "POST" }, g.success = g.success || k.options.success, g.error = g.error || k.options.error } else { var m = this.editable("getValue"); j = { url: g.url, data: m, type: "POST" } } j.success = "function" == typeof g.success ? function(a) { g.success.call(h, a, g) } : a.noop, j.error = "function" == typeof g.error ? function() { g.error.apply(h, arguments) } : a.noop, g.ajaxOptions && a.extend(j, g.ajaxOptions), g.data && a.extend(j.data, g.data), a.ajax(j) } else "function" == typeof g.error && g.error.call(h, i); return this } return this.each(function() { var d = a(this), g = d.data(f), h = "object" == typeof c && c; return h && h.selector ? void(g = new b(this, h)) : (g || d.data(f, g = new b(this, h)), void("string" == typeof c && g[c].apply(g, Array.prototype.slice.call(e, 1)))) }) }, a.fn.editable.defaults = { type: "text", disabled: !1, toggle: "click", emptytext: "Empty", autotext: "auto", value: null, display: null, emptyclass: "editable-empty", unsavedclass: "editable-unsaved", selector: null, highlight: "#FFFF80" } }(window.jQuery), function(a) { "use strict"; a.fn.editabletypes = {}; var b = function() {}; b.prototype = { init: function(b, c, d) { this.type = b, this.options = a.extend({}, d, c) }, prerender: function() { this.$tpl = a(this.options.tpl), this.$input = this.$tpl, this.$clear = null, this.error = null }, render: function() {}, value2html: function(b, c) { a(c)[this.options.escape ? "text" : "html"](a.trim(b)) }, html2value: function(b) { return a("
").html(b).text() }, value2str: function(a) { return String(a) }, str2value: function(a) { return a }, value2submit: function(a) { return a }, value2input: function(a) { this.$input.val(a) }, input2value: function() { return this.$input.val() }, activate: function() { this.$input.is(":visible") && this.$input.focus() }, clear: function() { this.$input.val(null) }, escape: function(b) { return a("
").text(b).html() }, autosubmit: function() {}, destroy: function() {}, setClass: function() { this.options.inputclass && this.$input.addClass(this.options.inputclass) }, setAttr: function(a) { void 0 !== this.options[a] && null !== this.options[a] && this.$input.attr(a, this.options[a]) }, option: function(a, b) { this.options[a] = b } }, b.defaults = { tpl: "", inputclass: null, escape: !0, scope: null, showbuttons: !0 }, a.extend(a.fn.editabletypes, { abstractinput: b }) }(window.jQuery), function(a) { "use strict"; var b = function(a) {}; a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput), a.extend(b.prototype, { render: function() { var b = a.Deferred(); return this.error = null, this.onSourceReady(function() { this.renderList(), b.resolve() }, function() { this.error = this.options.sourceError, b.resolve() }), b.promise() }, html2value: function(a) { return null }, value2html: function(b, c, d, e) { var f = a.Deferred(), g = function() { "function" == typeof d ? d.call(c, b, this.sourceData, e) : this.value2htmlFinal(b, c), f.resolve() }; return null === b ? g.call(this) : this.onSourceReady(g, function() { f.resolve() }), f.promise() }, onSourceReady: function(b, c) { var d; if (a.isFunction(this.options.source) ? (d = this.options.source.call(this.options.scope), this.sourceData = null) : d = this.options.source, this.options.sourceCache && a.isArray(this.sourceData)) return void b.call(this); try { d = a.fn.editableutils.tryParseJson(d, !1) } catch (e) { return void c.call(this) } if ("string" == typeof d) { if (this.options.sourceCache) { var f, g = d; if (a(document).data(g) || a(document).data(g, {}), f = a(document).data(g), f.loading === !1 && f.sourceData) return this.sourceData = f.sourceData, this.doPrepend(), void b.call(this); if (f.loading === !0) return f.callbacks.push(a.proxy(function() { this.sourceData = f.sourceData, this.doPrepend(), b.call(this) }, this)), void f.err_callbacks.push(a.proxy(c, this)); f.loading = !0, f.callbacks = [], f.err_callbacks = [] } var h = a.extend({ url: d, type: "get", cache: !1, dataType: "json", success: a.proxy(function(d) { f && (f.loading = !1), this.sourceData = this.makeArray(d), a.isArray(this.sourceData) ? (f && (f.sourceData = this.sourceData, a.each(f.callbacks, function() { this.call() })), this.doPrepend(), b.call(this)) : (c.call(this), f && a.each(f.err_callbacks, function() { this.call() })) }, this), error: a.proxy(function() { c.call(this), f && (f.loading = !1, a.each(f.err_callbacks, function() { this.call() })) }, this) }, this.options.sourceOptions); a.ajax(h) } else this.sourceData = this.makeArray(d), a.isArray(this.sourceData) ? (this.doPrepend(), b.call(this)) : c.call(this) }, doPrepend: function() { null !== this.options.prepend && void 0 !== this.options.prepend && (a.isArray(this.prependData) || (a.isFunction(this.options.prepend) && (this.options.prepend = this.options.prepend.call(this.options.scope)), this.options.prepend = a.fn.editableutils.tryParseJson(this.options.prepend, !0), "string" == typeof this.options.prepend && (this.options.prepend = { "": this.options.prepend }), this.prependData = this.makeArray(this.options.prepend)), a.isArray(this.prependData) && a.isArray(this.sourceData) && (this.sourceData = this.prependData.concat(this.sourceData))) }, renderList: function() {}, value2htmlFinal: function(a, b) {}, makeArray: function(b) { var c, d, e, f, g = []; if (!b || "string" == typeof b) return null; if (a.isArray(b)) { f = function(a, b) { return d = { value: a, text: b }, c++ >= 2 ? !1 : void 0 }; for (var h = 0; h < b.length; h++) e = b[h], "object" == typeof e ? (c = 0, a.each(e, f), 1 === c ? g.push(d) : c > 1 && (e.children && (e.children = this.makeArray(e.children)), g.push(e))) : g.push({ value: e, text: e }) } else a.each(b, function(a, b) { g.push({ value: a, text: b }) }); return g }, option: function(a, b) { this.options[a] = b, "source" === a && (this.sourceData = null), "prepend" === a && (this.prependData = null) } }), b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, { source: null, prepend: !1, sourceError: "Error when loading list", sourceCache: !0, sourceOptions: null }), a.fn.editabletypes.list = b }(window.jQuery), function(a) { "use strict"; var b = function(a) { this.init("text", a, b.defaults) }; a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput), a.extend(b.prototype, { render: function() { this.renderClear(), this.setClass(), this.setAttr("placeholder") }, activate: function() { this.$input.is(":visible") && (this.$input.focus(), this.$input.is("input,textarea") && !this.$input.is('[type="checkbox"],[type="range"]') && a.fn.editableutils.setCursorPosition(this.$input.get(0), this.$input.val().length), this.toggleClear && this.toggleClear()) }, renderClear: function() { this.options.clear && (this.$clear = a(''), this.$input.after(this.$clear).css("padding-right", 14).keyup(a.proxy(function(b) { if (!~a.inArray(b.keyCode, [40, 38, 9, 13, 27])) { clearTimeout(this.t); var c = this; this.t = setTimeout(function() { c.toggleClear(b) }, 100) } }, this)).parent().css("position", "relative"), this.$clear.click(a.proxy(this.clear, this))) }, postrender: function() {}, toggleClear: function(a) { if (this.$clear) { var b = this.$input.val().length, c = this.$clear.is(":visible"); b && !c && this.$clear.show(), !b && c && this.$clear.hide() } }, clear: function() { this.$clear.hide(), this.$input.val("").focus() } }), b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, { tpl: '', placeholder: null, clear: !0 }), a.fn.editabletypes.text = b }(window.jQuery), function(a) { "use strict"; var b = function(a) { this.init("textarea", a, b.defaults) }; a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput), a.extend(b.prototype, { render: function() { this.setClass(), this.setAttr("placeholder"), this.setAttr("rows"), this.$input.keydown(function(b) { b.ctrlKey && 13 === b.which && a(this).closest("form").submit() }) }, activate: function() { a.fn.editabletypes.text.prototype.activate.call(this) } }), b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, { tpl: "", inputclass: "input-large", placeholder: null, rows: 7 }), a.fn.editabletypes.textarea = b }(window.jQuery), function(a) { "use strict"; var b = function(a) { this.init("select", a, b.defaults) }; a.fn.editableutils.inherit(b, a.fn.editabletypes.list), a.extend(b.prototype, { renderList: function() { this.$input.empty(); var b = this.options.escape, c = function(d, e) { var f; if (a.isArray(e)) for (var g = 0; g < e.length; g++) if (f = {}, e[g].children) f.label = e[g].text, d.append(c(a("", f), e[g].children)); else { f.value = e[g].value, e[g].disabled && (f.disabled = !0); var h = a("