/* formBuilder - http://kevinchappell.github.io/formBuilder/ Version: 1.9.27 Author: Kevin Chappell */ "use strict"; function formBuilderHelpersFn(e, t) { var a = {doCancel: !1}; return t.events = formBuilderEventsFn(), a.attrString = function (e) { var t = []; for (var l in e)e.hasOwnProperty(l) && (l = a.safeAttr(l, e[l]), t.push(l.name + l.value)); var s = t.join(" "); return s }, a.hyphenCase = function (e) { return e = e.replace(/([A-Z])/g, function (e) { return "-" + e.toLowerCase() }), e.replace(/\s/g, "-").replace(/^-+/g, "") }, a.makeClassName = function (e) { return e = e.replace(/[^\w\s\-]/gi, ""), a.hyphenCase(e) }, a.safeAttrName = function (e) { var t = {className: "class"}; return t[e] || a.hyphenCase(e) }, a.safeAttr = function (e, t) { e = a.safeAttrName(e); var l = window.JSON.stringify(HTML_ENTITIES.encode(t)); return t = t ? "=" + l : "", {name: e, value: t} }, a.mobileClass = function () { var e = ""; return function (t) { (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0, 4))) && (e = " fb-mobile") }(navigator.userAgent || navigator.vendor || window.opera), e }, a.startMoving = function (e, t) { e = e, t.item.show().addClass("moving"), a.startIndex = $("li", this).index(t.item) }, a.stopMoving = function (e, t) { e = e, t.item.removeClass("moving"), a.doCancel && ($(t.sender).sortable("cancel"), $(this).sortable("cancel")), a.save(), a.doCancel = !1 }, a.beforeStop = function (t, l) { t = t; var s = document.getElementById(e.formID), o = s.children.length - 1, r = []; a.stopIndex = l.placeholder.index() - 1, !e.sortableControls && l.item.parent().hasClass("frmb-control") && r.push(!0), e.prepend && r.push(0 === a.stopIndex), e.append && r.push(a.stopIndex + 1 === o), a.doCancel = r.some(function (e) { return e === !0 }) }, a.safename = function (e) { return e.replace(/\s/g, "-").replace(/[^a-zA-Z0-9\-]/g, "").toLowerCase() }, a.forceNumber = function (e) { return e.replace(/[^0-9]/g, "") }, a.initTooltip = function (e) { var t = e.find(".tooltip"); e.mouseenter(function () { t.outerWidth() > 200 && t.addClass("max-width"), t.css("left", e.width() + 14), t.stop(!0, !0).fadeIn("fast") }).mouseleave(function () { e.find(".tooltip").stop(!0, !0).fadeOut("fast") }), t.hide() }, a.getTypes = function (e) { return {type: e.attr("type"), subtype: $(".fld-subtype", e).val()} }, a.trimAttrs = function (e) { var t = [null, void 0, "", !1]; for (var a in e)t.inArray(e[a]) && delete e[a]; return e }, a.escapeAttrs = function (e) { for (var t in e)e.hasOwnProperty(t) && (e[t] = HTML_ENTITIES.encode(e[t])); return e }, a.xmlSave = function (e) { var l = $(e).toXML(a); return window.JSON.stringify(l) === window.JSON.stringify(t.formData) ? !1 : void(t.formData = l) }, a.jsonSave = function () { e.notify.warning("json data not available yet") }, a.save = function () { var l, s = a.getElement(), o = document.getElementById(e.formID), r = {xml: a.xmlSave, json: a.jsonSave}; return l = r[e.dataType](o), s && (s.value = t.formData, window.jQuery ? $(s).trigger("change") : s.onchange()), document.dispatchEvent(t.events.formSaved), l }, a.getElement = function () { var l = !1; return t.element && (l = t.element, l.id || a.makeId(l), l.onchange || (l.onchange = function () { e.notify.success(e.messages.formUpdated) })), l }, a.incrementId = function (e) { var t = e.lastIndexOf("-"), a = parseInt(e.substring(t + 1)) + 1, l = e.substring(0, t); return l + "-" + a }, a.makeId = function () { var e = arguments.length <= 0 || void 0 === arguments[0] ? !1 : arguments[0], t = (new Date).getTime(); return e.tagName + "-" + t }, a.updatePreview = function (e) { var t = e.data("fieldData") || {}, l = e.attr("class"); if (-1 === l.indexOf("ui-sortable-handle")) { var s, o = $(e).attr("type"), r = $(".prev-holder", e), n = { label: $(".fld-label", e).val(), type: o }, i = $(".fld-subtype", e).val(); i && (n.subtype = i); var c = $(".fld-maxlength", e).val(); c && (n.maxlength = c), n.className = $(".fld-className", e).val() || t.className || ""; var d = $(".fld-placeholder", e).val(); d && (n.placeholder = d); var u = $(".btn-style", e).val(); u && (n.style = u), "checkbox" === o && (n.toggle = $(".checkbox-toggle", e).is(":checked")), o.match(/(select|checkbox-group|radio-group)/) && (n.values = [], n.multiple = $('[name="multiple"]', e).is(":checked"), $(".sortable-options li", e).each(function () { var e = {}; e.selected = $(".option-selected", this).is(":checked"), e.value = $(".option-value", this).val(), e.label = $(".option-label", this).val(), n.values.push(e) })), n.className = a.classNames(e, n), $(".fld-className", e).val(n.className), e.data("fieldData", n), s = a.fieldPreview(n), r.html(s), $("input[toggle]", r).kcToggle() } }, a.fieldPreview = function (t) { var l, s = "", o = (new Date).getTime(); t = Object.assign({}, t), t.type = t.subtype || t.type; var r = t.toggle ? "toggle" : "", n = a.attrString(t); switch (t.type) { case"textarea": case"rich-text": s = ""; break; case"button": case"submit": s = ""; break; case"select": var i = "", c = t.multiple ? "multiple" : ""; for (t.values.reverse(), t.placeholder && (i += ""), l = t.values.length - 1; l >= 0; l--) { var d = t.values[l].selected && !t.placeholder ? "selected" : ""; i += '" } s = "<" + t.type + ' class="' + t.className + '" ' + c + ">" + i + ""; break; case"checkbox-group": case"radio-group": var u = t.type.replace("-group", ""), p = u + "-" + o; for (t.values.reverse(), l = t.values.length - 1; l >= 0; l--) { var m = t.values[l].selected ? "checked" : "", f = u + "-" + o + "-" + l; s += '
" } break; case"text": case"password": case"email": case"date": case"file": s = ""; break; case"color": s = ' ' + e.messages.selectColor; break; case"hidden": case"checkbox": s = '"; break; case"autocomplete": s = ''; break; default: s = "<" + t.type + ">" + t.label + "" } return s }, a.updateMultipleSelect = function () { $(document.getElementById(e.formID)).on("change", 'input[name="multiple"]', function () { var e = $(this).parents(".field-options:eq(0)").find(".sortable-options input.option-selected"); this.checked ? e.each(function () { $(this).prop("type", "checkbox") }) : e.each(function () { $(this).removeAttr("checked").prop("type", "radio") }) }) }, a.debounce = function (e) { var t, a = arguments.length <= 1 || void 0 === arguments[1] ? 250 : arguments[1], l = arguments.length <= 2 || void 0 === arguments[2] ? !1 : arguments[2]; return function () { var s = this, o = arguments, r = function () { t = null, l || e.apply(s, o) }, n = l && !t; clearTimeout(t), t = setTimeout(r, a), n && e.apply(s, o) } }, a.htmlEncode = function (e) { return $("
").text(e).html() }, a.htmlDecode = function (e) { return $("
").html(e).text() }, a.validateForm = function () { var t = $(document.getElementById(e.formID)), a = []; $('input[name="label"], input[type="text"].option', t).each(function () { if ("" === $(this).val()) { var t = $(this).parents("li.form-field"), l = $(this); a.push({field: t, error: e.messages.labelEmpty, attribute: l}) } }), a.length && (alert("Error: " + a[0].error), $("html, body").animate({scrollTop: a[0].field.offset().top}, 1e3, function () { var e = $(".toggle-form", a[0].field).attr("id"); $(".toggle-form", a[0].field).addClass("open").parent().next(".prev-holder").slideUp(250), $("#" + e + "-fld").slideDown(250, function () { a[0].attribute.addClass("error") }) })) }, a.disabledTT = { className: "frmb-tt", add: function (t) { var l = e.messages.fieldNonEditable; if (l) { var s = a.markup("p", l, {className: a.disabledTT.className}); t.append(s) } }, remove: function (e) { $(".frmb-tt", e).remove() } }, a.classNames = function (t, a) { var l = ["checkbox", "checkbox-group", "radio-group"], s = ["header", "paragraph", "button"], o = void 0; for (o = s.length - 1; o >= 0; o--)s = s.concat(e.messages.subtypes[s[o]]); l = l.concat(s); var r = a.type, n = a.style, i = t[0].querySelector(".fld-className").value, c = [].concat(i.split(" ")).reverse(), d = { button: "btn", submit: "btn" }, u = d[r]; if (u) { if (n) { for (o = c.length - 1; o >= 0; o--) { var p = new RegExp("(?:^|s)" + u + "-(.*?)(?:s|$)+", "g"), m = c[o].match(p); m && c.splice(o, 1) } c.push(u + "-" + n) } c.push(u) } else l.inArray(r) || c.push("form-control"); return c.reverse().unique().join(" ").trim() }, a.markup = function (e) { var t = arguments.length <= 1 || void 0 === arguments[1] ? "" : arguments[1], l = arguments.length <= 2 || void 0 === arguments[2] ? {} : arguments[2], s = void 0, o = document.createElement(e), r = function (e) { return Array.isArray(e) ? "array" : "undefined" == typeof e ? "undefined" : _typeof(e) }, n = { string: function (e) { o.innerHTML = e }, object: function (e) { return o.appendChild(e) }, array: function (e) { for (var t = 0; t < e.length; t++)s = r(e[t]), n[s](e[t]) } }; for (var i in l)if (l.hasOwnProperty(i) && l[i]) { var c = a.safeAttrName(i); o.setAttribute(c, l[i]) } return s = r(t), t && n[s].call(this, t), o }, a.closeConfirm = function (e, a) { e = e || document.getElementsByClassName("form-builder-overlay")[0], a = a || document.getElementsByClassName("form-builder-dialog")[0], e.classList.remove("visible"), a.remove(), e.remove(), document.dispatchEvent(t.events.modalClosed) }, a.editorLayout = function (e) { var t = { left: {stage: "pull-right", controls: "pull-left"}, right: {stage: "pull-left", controls: "pull-right"} }; return t[e] ? t[e] : "" }, a.showOverlay = function () { var e = a.markup("div", null, {className: "form-builder-overlay"}); return document.body.appendChild(e), e.classList.add("visible"), e.onclick = function () { a.closeConfirm(e) }, e }, a.confirm = function (t, l) { var s = arguments.length <= 2 || void 0 === arguments[2] ? !1 : arguments[2], o = arguments.length <= 3 || void 0 === arguments[3] ? "" : arguments[3], r = a.showOverlay(), n = a.markup("button", e.messages.yes, {className: "yes btn btn-success btn-sm"}), i = a.markup("button", e.messages.no, {className: "no btn btn-danger btn-sm"}); i.onclick = function () { a.closeConfirm(r) }, n.onclick = function () { l(), a.closeConfirm(r) }; var c = a.markup("div", [i, n], {className: "button-wrap"}); o = "form-builder-dialog " + o; var d = a.markup("div", [t, c], {className: o}); return s ? d.classList.add("positioned") : (s = { pageX: Math.max(document.documentElement.clientWidth, window.innerWidth || 0) / 2, pageY: Math.max(document.documentElement.clientHeight, window.innerHeight || 0) / 2 }, d.style.position = "fixed"), d.style.left = s.pageX + "px", d.style.top = s.pageY + "px", document.body.appendChild(d), n.focus(), d }, a.dialog = function (e) { var l = arguments.length <= 1 || void 0 === arguments[1] ? !1 : arguments[1], s = arguments.length <= 2 || void 0 === arguments[2] ? "" : arguments[2]; a.showOverlay(), s = "form-builder-dialog " + s; var o = a.markup("div", e, {className: s}); return l ? o.classList.add("positioned") : (l = { pageX: Math.max(document.documentElement.clientWidth, window.innerWidth || 0) / 2, pageY: Math.max(document.documentElement.clientHeight, window.innerHeight || 0) / 2 }, o.style.position = "fixed"), o.style.left = l.pageX + "px", o.style.top = l.pageY + "px", document.body.appendChild(o), -1 !== s.indexOf("data-dialog") && document.dispatchEvent(t.events.viewData), o }, a.removeAllfields = function () { var t = document.getElementById(e.formID), l = t.querySelectorAll("li.form-field"), s = $(l), o = []; e.prepend && o.push(!0), e.append && o.push(!0), o.some(function (e) { return e === !0 }) || t.parentElement.classList.add("empty"), t.classList.add("removing"); var r = 0; s.each(function () { r += $(this).outerHeight() + 3 }), l[0].style.marginTop = -r + "px", setTimeout(function () { s.remove(), document.getElementById(e.formID).classList.remove("removing"), a.save() }, 500) }, a.setFieldOrder = function (t) { if (!e.sortableControls)return !1; var a = {}; t.children().each(function (e, t) { a[e] = $(t).data("attrs").type }), window.sessionStorage && window.sessionStorage.setItem("fieldOrder", window.JSON.stringify(a)) }, a.orderFields = function (t) { var a = !1; window.sessionStorage && (e.sortableControls ? a = window.sessionStorage.getItem("fieldOrder") : window.sessionStorage.removeItem("fieldOrder")), a ? (a = window.JSON.parse(a), a = Object.keys(a).map(function (e) { return a[e] })) : a = e.controlOrder.unique(); for (var l = [], s = a.length - 1; s >= 0; s--) { var o = t.filter(function (e) { return e.attrs.type === a[s] })[0]; l.push(o) } return l.filter(Boolean) }, a } function formBuilderEventsFn() { var e = {}; return e.loaded = new Event("loaded"), e.viewData = new Event("viewData"), e.userDeclined = new Event("userDeclined"), e.modalClosed = new Event("modalClosed"), e.formSaved = new Event("formSaved"), e } var HTML_ENTITIES = function () { var e = {}; return e.getHtmlTranslationTable = function (e, t) { var a, l = {}, s = {}, o = {}, r = {}, n = {}, i = {}; if (o[0] = "HTML_SPECIALCHARS", o[1] = "HTML_ENTITIES", r[0] = "ENT_NOQUOTES", r[2] = "ENT_COMPAT", r[3] = "ENT_QUOTES", n = isNaN(e) ? e ? e.toUpperCase() : "HTML_SPECIALCHARS" : o[e], i = isNaN(t) ? t ? t.toUpperCase() : "ENT_COMPAT" : r[t], "HTML_SPECIALCHARS" !== n && "HTML_ENTITIES" !== n)throw new Error("Table: " + n + " not supported"); l[38] = "&", "HTML_ENTITIES" === n && (l[160] = " ", l[161] = "¡", l[162] = "¢", l[163] = "£", l[164] = "¤", l[165] = "¥", l[166] = "¦", l[167] = "§", l[168] = "¨", l[169] = "©", l[170] = "ª", l[171] = "«", l[172] = "¬", l[173] = "­", l[174] = "®", l[175] = "¯", l[176] = "°", l[177] = "±", l[178] = "²", l[179] = "³", l[180] = "´", l[181] = "µ", l[182] = "¶", l[183] = "·", l[184] = "¸", l[185] = "¹", l[186] = "º", l[187] = "»", l[188] = "¼", l[189] = "½", l[190] = "¾", l[191] = "¿", l[192] = "À", l[193] = "Á", l[194] = "Â", l[195] = "Ã", l[196] = "Ä", l[197] = "Å", l[198] = "Æ", l[199] = "Ç", l[200] = "È", l[201] = "É", l[202] = "Ê", l[203] = "Ë", l[204] = "Ì", l[205] = "Í", l[206] = "Î", l[207] = "Ï", l[208] = "Ð", l[209] = "Ñ", l[210] = "Ò", l[211] = "Ó", l[212] = "Ô", l[213] = "Õ", l[214] = "Ö", l[215] = "×", l[216] = "Ø", l[217] = "Ù", l[218] = "Ú", l[219] = "Û", l[220] = "Ü", l[221] = "Ý", l[222] = "Þ", l[223] = "ß", l[224] = "à", l[225] = "á", l[226] = "â", l[227] = "ã", l[228] = "ä", l[229] = "å", l[230] = "æ", l[231] = "ç", l[232] = "è", l[233] = "é", l[234] = "ê", l[235] = "ë", l[236] = "ì", l[237] = "í", l[238] = "î", l[239] = "ï", l[240] = "ð", l[241] = "ñ", l[242] = "ò", l[243] = "ó", l[244] = "ô", l[245] = "õ", l[246] = "ö", l[247] = "÷", l[248] = "ø", l[249] = "ù", l[250] = "ú", l[251] = "û", l[252] = "ü", l[253] = "ý", l[254] = "þ", l[255] = "ÿ"), "ENT_NOQUOTES" !== i && (l[34] = """), "ENT_QUOTES" === i && (l[39] = "'"), l[60] = "<", l[62] = ">"; for (a in l)l.hasOwnProperty(a) && (s[String.fromCharCode(a)] = l[a]); return s }, e.encode = function (e, t) { var a = this.getHtmlTranslationTable("HTML_ENTITIES", t); if (e = null === e ? "" : e + "", !a)return !1; t && "ENT_QUOTES" === t && (a["'"] = "'"); var l = new RegExp("&(?:#\\d+|#x[\\da-f]+|[a-zA-Z][\\da-z]*);|[" + Object.keys(a).join("").replace(/([()[\]{}\-.*+?^$|\/\\])/g, "\\$1") + "]", "g"); return e.replace(l, function (e) { var t = void 0; return e.length > 1 && (t = e), t = a[e] }) }, e }(HTML_ENTITIES || {}), _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) { return typeof e } : function (e) { return e && "function" == typeof Symbol && e.constructor === Symbol ? "symbol" : typeof e }; !function (e) { var t = function (t, a) { var l = { theme: "fresh", labels: {off: "Off", on: "On"} }, s = e.extend(l, a), o = e('
').insertAfter(t).append(t); o.toggleClass("on", t.is(":checked")); var r = '
' + s.labels.on + "
", n = '
' + s.labels.off + "
", i = '
', c = '
' + r + i + n + "
"; o.append(c), o.click(function () { t.attr("checked", !t.attr("checked")), e(this).toggleClass("on") }) }; e.fn.kcToggle = function (a) { var l = this; return l.each(function () { var l = e(this); if (!l.data("kcToggle")) { var s = new t(l, a); l.data("kcToggle", s) } }) } }(jQuery), function (e) { var t = function (t, a) { var l = this, s = { controlPosition: "right", controlOrder: ["autocomplete", "button", "checkbox", "checkbox-group", "date", "file", "header", "hidden", "paragraph", "radio-group", "select", "text", "textarea"], dataType: "xml", disableFields: ["autocomplete", "hidden"], append: !1, prepend: !1, defaultFields: [], fieldRemoveWarn: !1, roles: {1: "Administrator"}, messages: { addOption: "Add Option", allFieldsRemoved: "All fields were removed.", allowSelect: "Allow Select", autocomplete: "Autocomplete", button: "Button", cannotBeEmpty: "This field cannot be empty", checkboxGroup: "Checkbox Group", checkbox: "Checkbox", checkboxes: "Checkboxes", className: "Class", clearAllMessage: "Are you sure you want to clear all fields?", clearAll: "Clear", close: "Close", content: "Content", copy: "Copy To Clipboard", dateField: "Date Field", description: "Help Text", descriptionField: "Description", devMode: "Developer Mode", editNames: "Edit Names", editorTitle: "Form Elements", editXML: "Edit XML", fieldDeleteWarning: !1, fieldVars: "Field Variables", fieldNonEditable: "This field cannot be edited.", fieldRemoveWarning: "Are you sure you want to remove this field?", fileUpload: "File Upload", formUpdated: "Form Updated", getStarted: "Drag a field from the right to this area", header: "Header", hide: "Edit", hidden: "Hidden Input", label: "Label", labelEmpty: "Field Label cannot be empty", limitRole: "Limit access to one or more of the following roles:", mandatory: "Mandatory", maxlength: "Max Length", minOptionMessage: "This field requires a minimum of 2 options", name: "Name", no: "No", off: "Off", on: "On", option: "Option", optional: "optional", optionLabelPlaceholder: "Label", optionValuePlaceholder: "Value", optionEmpty: "Option value required", paragraph: "Paragraph", placeholder: "Placeholder", placeholders: { value: "Value", label: "Label", text: "", textarea: "", email: "Enter you email", placeholder: "", className: "space separated classes", password: "Enter your password" }, preview: "Preview", radioGroup: "Radio Group", radio: "Radio", removeMessage: "Remove Element", remove: "×", required: "Required", richText: "Rich Text Editor", roles: "Access", save: "Preview", selectOptions: "Options", select: "Select", selectColor: "Select Color", selectionsMessage: "Allow Multiple Selections", size: "Size", sizes: {xs: "Extra Small", sm: "Small", m: "Default", lg: "Large"}, style: "Style", styles: { btn: { "default": "Default", danger: "Danger", info: "Info", primary: "Primary", success: "Success", warning: "Warning" } }, subtype: "Type", subtypes: { text: ["text", "password", "email", "color"], button: ["button", "submit"], header: ["h1", "h2", "h3"], paragraph: ["p", "address", "blockquote", "canvas", "output"] }, text: "Text Field", textArea: "Text Area", toggle: "Toggle", warning: "Warning!", viewXML: "</>", yes: "Yes" }, notify: { error: function (e) { return console.error(e) }, success: function (e) { return console.log(e) }, warning: function (e) { return console.warn(e) } }, sortableControls: !1, prefix: "form-builder-" }; s.messages.subtypes.password = s.messages.subtypes.text, s.messages.subtypes.email = s.messages.subtypes.text, s.messages.subtypes.color = s.messages.subtypes.text, s.messages.subtypes.submit = s.messages.subtypes.button; var o = e.extend(!0, s, t), r = e(a), n = "frmb-" + e("ul[id^=frmb-]").length++; o.formID = n, l.element = a; var i = e("
    ").attr("id", n).addClass("frmb"), c = formBuilderHelpersFn(o, l); l.layout = c.editorLayout(o.controlPosition); var d = n + "-fld-1", u = n + "-control-box", p = [{ label: o.messages.textArea, attrs: {type: "textarea", className: "text-area", name: "textarea"} }, { label: o.messages.text, attrs: {type: "text", className: "text-input", name: "text-input"} }, { label: o.messages.select, attrs: {type: "select", className: "select", name: "select"} }, { label: o.messages.radioGroup, attrs: {type: "radio-group", className: "radio-group", name: "radio-group"} }, {label: o.messages.paragraph, attrs: {type: "paragraph", className: "paragraph"}}, { label: o.messages.hidden, attrs: {type: "hidden", className: "hidden-input", name: "hidden-input"} }, {label: o.messages.header, attrs: {type: "header", className: "header"}}, { label: o.messages.fileUpload, attrs: {type: "file", className: "file-input", name: "file-input"} }, { label: o.messages.dateField, attrs: {type: "date", className: "calendar", name: "date-input"} }, { label: o.messages.checkboxGroup, attrs: {type: "checkbox-group", className: "checkbox-group", name: "checkbox-group"} }, { label: o.messages.checkbox, attrs: {type: "checkbox", className: "checkbox", name: "checkbox"} }, { label: o.messages.button, attrs: {type: "button", className: "button-input", name: "button"} }, { label: o.messages.autocomplete, attrs: {type: "autocomplete", className: "autocomplete", name: "autocomplete"} }]; p = c.orderFields(p), o.disableFields && (p = p.filter(function (e) { return !o.disableFields.inArray(e.attrs.type) })); var m = c.markup("ul", null, {id: u, className: "frmb-control"}); o.sortableControls && m.classList.add("sort-enabled"); for (var f = e(m), v = p.length - 1; v >= 0; v--) { var g = e("
  • ", { "class": "icon-" + p[v].attrs.className, type: p[v].type, name: p[v].className, label: p[v].label }); g.data("newFieldData", p[v]); var h = c.markup("span", p[v].label); g.html(h).appendTo(f) } var b = "xml" === o.dataType ? o.messages.viewXML : o.messages.viewJSON, y = c.markup("button", b, { id: n + "-view-data", type: "button", className: "view-data btn btn-default" }), k = c.markup("button", o.messages.clearAll, { id: n + "-clear-all", type: "button", className: "clear-all btn btn-default" }), x = c.markup("button", o.messages.save, { className: "btn btn-primary " + o.prefix + "save", id: n + "-save", type: "button" }), w = c.markup("div", [k, y, x], {className: "form-actions btn-group"}).outerHTML; i.sortable({ cursor: "move", opacity: .9, revert: 150, beforeStop: c.beforeStop, start: c.startMoving, stop: c.stopMoving, cancel: "input, select, .disabled, .form-group, .btn", placeholder: "frmb-placeholder" }), f.sortable({ helper: "clone", opacity: .9, connectWith: i, cursor: "move", placeholder: "ui-state-highlight", start: c.startMoving, stop: c.stopMoving, revert: 150, beforeStop: c.beforeStop, update: function (e, t) { return c.doCancel ? !1 : (e = e, void(t.item.parent()[0] === i[0] ? (S(t.item, !0), c.doCancel = !0) : (c.setFieldOrder(f), c.doCancel = !o.sortableControls))) } }); var N = e("
    ", { id: n + "-stage-wrap", "class": "stage-wrap " + l.layout.stage }), E = e("
    ", {id: n + "-form-wrap", "class": "form-wrap form-builder" + c.mobileClass()}); r.before(N).appendTo(N); var T = e("
    ", {id: n + "-cb-wrap", "class": "cb-wrap " + l.layout.controls}).append(f[0], w); N.append(i, T), N.before(E), E.append(N, T); var C = c.debounce(function (t) { if (t && "keyup" === t.type && "className" === this.name)return !1; var a = e(this).parents(".form-field:eq(0)"); c.updatePreview(a), c.save() }); i.on("change blur keyup", ".form-elements input, .form-elements select, .form-elements textarea", C); var A = function () { var t = []; if (o.prepend && !e(".disabled.prepend", i).length) { var a = c.markup("li", o.prepend, {className: "disabled prepend"}); t.push(!0), i.prepend(a) } if (o.append && !e(".disabled.append", i).length) { var l = c.markup("li", o.append, {className: "disabled append"}); t.push(!0), i.append(l) } t.some(function (e) { return e === !0 }) && N.removeClass("empty") }, S = function (t) { var a = arguments.length <= 1 || void 0 === arguments[1] ? !1 : arguments[1], l = {}; if (t instanceof jQuery) { var s = t.data("newFieldData"); if (s)l = s.attrs, l.label = s.label; else { var o = t[0].attributes; a || (l.values = t.children().map(function (t, a) { return {label: e(a).text(), value: e(a).attr("value"), selected: Boolean(e(a).attr("selected"))} })); for (var r = o.length - 1; r >= 0; r--)l[o[r].name] = o[r].value } } else l = t; l.label = c.htmlEncode(l.label), l.name = a ? M(l) : l.name, l.role = l.role, l.className = l.className || l["class"], l.required = "true" === l.required || l.required === !0, l.maxlength = l.maxlength, l.toggle = l.toggle, l.multiple = l.type.match(/(checkbox-group)/), l.description = void 0 !== l.description ? c.htmlEncode(l.description) : ""; var n = /(?:^|\s)btn-(.*?)(?:\s|$)/g.exec(l.className); n && (l.style = n[1]), D(l), N.removeClass("empty") }, O = function () { var t = ""; t = l.formData ? l.formData : "" !== r.val() ? e.parseXML(l.element.value.trim()) : !1; var a = e(t).find("field"); if (a.length > 0)l.formData = t, a.each(function () { S(e(this)) }); else if (!t)if (o.defaultFields && o.defaultFields.length) { o.defaultFields.reverse(); for (var s = o.defaultFields.length - 1; s >= 0; s--)S(o.defaultFields[s]); N.removeClass("empty"), c.save() } else o.prepend || o.append || N.addClass("empty").attr("data-content", o.messages.getStarted); e("li.form-field:not(.disabled)", i).each(function () { c.updatePreview(e(this)) }), A() }, I = function () { var e = { xml: O, json: function () { console.log("coming soon") } }; e[o.dataType]() }; i.on("mousemove", "li.disabled", function (t) { e(".frmb-tt", this).css({left: t.offsetX - 16, top: t.offsetY - 34}) }), i.on("mouseenter", "li.disabled", function () { c.disabledTT.add(e(this)) }), i.on("mouseleave", "li.disabled", function () { c.disabledTT.remove(e(this)) }); var M = function (e) { var t = (new Date).getTime(); return e.type + "-" + t }, L = function (e) { R(o.messages.textArea, H(e), e) }, q = function (e) { var t = e.type || "text"; R(o.messages[t], H(e), e) }, $ = function (t) { t.values && t.values.length || (t.values = [{selected: !0}, {selected: !1}], t.values = t.values.map(function (e, t) { return e.label = o.messages.option + " " + (t + 1), e.value = c.hyphenCase(e.label), e })); var a = ""; for (a += H(t), a += '
    ', a += '", a += '
    ', "select" === t.type && (a += '
    ', a += '", a += '", a += "
    "), a += '
      ', v = 0; v < t.values.length; v++)a += U(t.name, t.values[v], t.values[v].selected, t.multiple); a += "
    "; var l = c.markup("a", o.messages.addOption, {className: "add add-opt"}); a += c.markup("div", l, {className: "option-actions"}).outerHTML, a += "
    ", a += "
    ", R(o.messages.select, a, t), e(".sortable-options").sortable() }, D = function (e) { var t = {select: $, "rich-text": L, textarea: L, "radio-group": $, "checkbox-group": $}; e = e || "", t[e.type] ? t[e.type](e) : q(e) }, H = function W(t) { var a, W = [], l = void 0 !== t.role ? t.role.split(",") : []; W.push(_("label", t)), t.size = t.size || "m", t.style = t.style || "default", W.push(F(t)), W.push(j(t)), W.push(B(t.style, t.type)), W.push(_("placeholder", t)), W.push(_("className", t)), W.push(_("name", t)), W.push('
    "), W.push(' "), W.push('
    "); for (a in o.roles)-1 === e.inArray(a, ["date", "4"]) && W.push('
    "); return W.push("
    "), W.push(_("maxlength", t)), W.join("") }, F = function (e) { var t = ["header", "paragraph", "button"], a = [], l = ""; if (t = t.concat(o.messages.subtypes.header, o.messages.subtypes.paragraph), -1 === t.indexOf(e.type) && a.push(!0), a.some(function (e) { return e === !0 })) { var s = c.markup("label", o.messages.description, {"for": "description-" + d}), r = c.markup("input", null, { type: "text", className: "fld-description form-control", name: "description", id: "description-" + d, value: e.description }), n = c.markup("div", [s, r], {"class": "form-group description-wrap"}); l = n.outerHTML } return l }, j = function Y(e) { var t = o.messages.subtypes, a = e.type, l = e.subtype || "", Y = "", s = void 0; if (t[a]) { var r = ""; Y += '", Y = '
    ' + r + " " + Y + "
    " } return Y }, B = function (e, t) { var a = {button: "btn"}, l = o.messages.styles[a[t]], s = ""; if (l) { var r = ""; s += '', s += '
    ', Object.keys(o.messages.styles[a[t]]).forEach(function (l) { var r = e === l ? "active" : ""; s += '" }), s += "
    ", s = '
    ' + r + " " + s + "
    " } return s }, _ = function (e, t) { var a = ["text", "textarea", "select"], l = ["header"], s = ["paragraph"], r = ["checkbox", "select", "checkbox-group", "date", "autocomplete", "radio-group", "hidden", "button", "header"], n = "label" === e ? t.label : t[e] || "", i = o.messages[e]; "label" === e && s.inArray(t.type) && (i = o.messages.content), l = l.concat(o.messages.subtypes.header, s), r = r.concat(s); var c = o.messages.placeholders, u = c[e] || "", p = "", m = []; if ("placeholder" !== e || a.inArray(t.type) || m.push(!0), "name" === e && l.inArray(t.type) && m.push(!0), "maxlength" === e && r.inArray(t.type) && m.push(!0), !m.some(function (e) { return e === !0 })) { var f = ""; p += "label" === e && s.inArray(t.type) ? '" : '', p = '
    ' + f + " " + p + "
    " } return p }, P = function (e) { var t = ["header", "paragraph", "button"], a = [], l = ""; if (t.inArray(e.type) && a.push(!0), !a.some(function (e) { return e === !0 })) { l += '
    ', l += ""; var s = c.markup("input", null, { className: "required", type: "checkbox", name: "required-" + d, id: "required-" + d, value: 1 }); s.defaultChecked = e.required, l += s.outerHTML, l += c.markup("label", o.messages.required, { className: "required-label", "for": "required-" + d }).outerHTML, l += "
    " } return l }, R = function (t, a, l) { var s = e(a).find('input[name="label"]').val(), r = s ? s : t, n = c.markup("a", o.messages.remove, { id: "del_" + d, className: "del-button btn delete-confirm", title: o.messages.removeMessage }), u = c.markup("a", null, { id: d + "-edit", className: "toggle-form btn icon-pencil", title: o.messages.hide }), p = l.required, m = l.toggle || void 0, f = "" !== l.description ? '?' : "", v = c.markup("div", [u, n], {className: "field-actions"}).outerHTML; v += '" + f + ' *", v += c.markup("div", "", {className: "prev-holder"}).outerHTML, v += '
    ', v += '
    ', v += P(l), "checkbox" === l.type && (v += '
    ', v += "", v += '", v += "
    "), v += a, v += c.markup("a", o.messages.close, {className: "close-field"}).outerHTML, v += "
    ", v += "
    "; var g = c.markup("li", v, {"class": l.type + "-field form-field", type: l.type, id: d}), h = e(g); h.data("fieldData", {attrs: l}), "undefined" != typeof c.stopIndex ? e("> li", i).eq(c.stopIndex).after(h) : i.append(h), c.updatePreview(h), e(document.getElementById("frm-" + d + "-item")).hide().slideDown(250), d = c.incrementId(d) }, U = function (e, t, a, l) { var s = {selected: l ? "checkbox" : "radio"}, r = { selected: a, label: "", value: "" }, n = Object.assign(r, t), i = []; for (var d in n)if (n.hasOwnProperty(d)) { var u = { type: s[d] || "text", "class": "option-" + d, placeholder: o.messages.placeholders[d], value: n[d], name: e }, p = c.markup("input", null, u); "selected" === d && (p.checked = n.selected), i.push(p) } var m = {className: "remove btn", title: o.messages.removeMessage}; i.push(c.markup("a", o.messages.remove, m)); var f = c.markup("li", i); return f.outerHTML }; i.on("click touchstart", ".remove", function (t) { var a = e(this).parents(".form-field:eq(0)"); t.preventDefault(); var l = e(this).parents(".sortable-options:eq(0)").children("li").length; 2 >= l ? o.notify.error("Error: " + o.messages.minOptionMessage) : e(this).parent("li").slideUp("250", function () { e(this).remove() }), C.call(a) }), i.on("touchstart", "input", function (t) { if (t.handled === !0)return !1; if ("checkbox" === e(this).attr("type"))e(this).trigger("click"); else { e(this).focus(); var a = e(this).val(); e(this).val(a) } }), i.on("click touchstart", ".toggle-form", function (t) { if (t.stopPropagation(), t.preventDefault(), t.handled === !0)return !1; var a = e(this).parents(".form-field:eq(0)").attr("id"); c.toggleEdit(a), t.handled = !0 }), c.toggleEdit = function (t) { var a = document.getElementById(t), l = e(".toggle-form", a), s = e(".frm-holder", a); a.classList.toggle("editing"), l.toggleClass("open"), e(".prev-holder", a).slideToggle(250), s.slideToggle(250) }, i.on("keyup change", '[name="label"]', function () { e(".field-label", e(this).closest("li")).text(e(this).val()) }), i.delegate("input.error", "keyup", function () { e(this).removeClass("error") }), i.on("keyup", 'input[name="description"]', function () { var t = e(this).parents(".form-field:eq(0)"), a = e(".tooltip-element", t), l = e(this).val(); if ("" !== l)if (a.length)a.attr("tooltip", l).css("display", "inline-block"); else { var s = '?'; e(".field-label", t).after(s) } else a.length && a.css("display", "none") }), c.updateMultipleSelect(), i.delegate('input[name="name"]', "keyup", function () { e(this).val(c.safename(e(this).val())), "" === e(this).val() ? e(this).addClass("field_error").attr("placeholder", o.messages.cannotBeEmpty) : e(this).removeClass("field_error") }), i.delegate("input.fld-maxlength", "keyup", function () { e(this).val(c.forceNumber(e(this).val())) }), i.on("click touchstart", ".delete-confirm", function (t) { t.preventDefault(); var a = this.getBoundingClientRect(), l = document.body.getBoundingClientRect(), s = { pageX: a.left + a.width / 2, pageY: a.top - l.top - 12 }, r = e(this).parents(".form-field:eq(0)").attr("id"), n = e(document.getElementById(r)), d = function () { n.slideUp(250, function () { n.removeClass("deleting"), n.remove(), c.save(), i[0].childNodes.length || N.addClass("empty").attr("data-content", o.messages.getStarted) }) }; if (document.addEventListener("modalClosed", function () { n.removeClass("deleting") }, !1), o.fieldRemoveWarn) { var u = c.markup("h3", o.messages.warning), p = c.markup("p", o.messages.fieldRemoveWarning); c.confirm([u, p], d, s), n.addClass("deleting") } else d(n) }), i.on("click", ".style-wrap button", function () { var t = e(this).val(), a = e(this).parent(), l = a.prev(".btn-style"); l.val(t), e(this).siblings(".btn").removeClass("active"), e(this).addClass("active"), C.call(a) }), i.on("click", "input.required", function () { var t = e(this).parents("li.form-field").find(".required-asterisk"); t.toggle() }), i.on("click", 'input[name="enable_roles"]', function () { var t = e(this).siblings("div.available-roles"), a = e(this); t.slideToggle(250, function () { a.is(":checked") || e('input[type="checkbox"]', t).removeAttr("checked") }) }), i.on("click", ".add-opt", function (t) { t.preventDefault(); var a = e(this).parents(".field-options:eq(0)"), l = e('[name="multiple"]', a), s = e(".option-selected:eq(0)", a), o = !1; o = l.length ? l.prop("checked") : "checkbox" === s.attr("type"); var r = s.attr("name"); e(".sortable-options", a).append(U(r, !1, !1, o)), c.updateMultipleSelect() }), i.on("click touchstart", ".close-field", function () { var t = e(this).parents("li.form-field:eq(0)").attr("id"); c.toggleEdit(t) }), i.on("mouseover mouseout", ".remove, .del-button", function () { e(this).parents("li:eq(0)").toggleClass("delete") }); /*var z = e(document.getElementById(n + "-view-data")); z.click(function (e) { e.preventDefault(); var t = c.htmlEncode(r.val()), a = c.markup("code", t, {className: "xml"}), l = c.markup("pre", a); c.dialog(l, null, "data-dialog") });*/ var z = e(document.getElementById(n + "-save")); z.click(function (e) { e.preventDefault(); var t = c.htmlEncode(r.val()), a = c.markup("code", t, {className: "xml"}), l = c.markup("pre", a); //console.log(a); jQuery("#form-xml").html(l); //jQuery("#form-xml").html(htmlDecode(l)); }); var X = e(document.getElementById(n + "-clear-all")); return X.click(function () { var t = e("li.form-field"), a = this.getBoundingClientRect(), l = document.body.getBoundingClientRect(), s = { pageX: a.left + a.width / 2, pageY: a.top - l.top - 12 }; t.length ? c.confirm(o.messages.clearAllMessage, function () { c.removeAllfields(), o.notify.success(o.messages.allFieldsRemoved), c.save() }, s) : c.dialog("There are no fields to clear", {pageX: s.pageX, pageY: s.pageY}) }), e(document.getElementById(n + "-save")).click(function (e) { e.preventDefault(), c.save(), c.validateForm(e) }), r.parent().find('p[id*="ideaTemplate"]').remove(), r.wrap('
    '), I(), i.css("min-height", f.height()), document.dispatchEvent(l.events.loaded), l }; e.fn.formBuilder = function (a) { return this.each(function () { var l, s = this; if (e(s).data("formBuilder")) { var o = e(s).parents(".form-builder:eq(0)"), r = e(s).clone(); o.before(r), o.remove(), l = new t(a, r[0]), r.data("formBuilder", l) } else l = new t(a, s), e(s).data("formBuilder", l) }) } }(jQuery), function (e) { e.fn.toXML = function (t) { var a = "", l = function (a) { var l = []; return e(".sortable-options li", a).each(function () { var a = e(this), s = { value: e(".option-value", a).val(), selected: e(".option-selected", a).is(":checked") }, o = t.markup("option", e(".option-label", a).val(), s).outerHTML; l.push("\n " + o) }), l.join("") + "\n " }; return this.each(function () { var s = this; s.childNodes.length >= 1 && (a += "\n ", s.childNodes.forEach(function (s) { var o = e(s), r = o.data("fieldData"); if (!o.hasClass("disabled")) { var n = s.querySelectorAll(".roles-field:checked").map(function (e) { return e.value }).join(","), i = t.getTypes(o), c = { className: r.className, description: e("input.fld-description", o).val(), label: e(".fld-label", o).val(), maxlength: e("input.fld-maxlength", o).val(), multiple: e('input[name="multiple"]', o).is(":checked"), name: e("input.fld-name", o).val(), placeholder: e("input.fld-placeholder", o).val(), required: e("input.required", o).is(":checked"), role: n, toggle: e(".checkbox-toggle", o).is(":checked"), type: i.type, subtype: i.subtype }; c = t.trimAttrs(c), c = t.escapeAttrs(c); var d, u = c.type.match(/(select|checkbox-group|radio-group)/), p = ""; u && (p = l(o)), d = t.markup("field", p, c), a += "\n " + d.outerHTML } }), a += "\n \n") }), a } }(jQuery), "function" != typeof Object.assign && !function () { Object.assign = function (e) { if (void 0 === e || null === e)throw new TypeError("Cannot convert undefined or null to object"); for (var t = Object(e), a = 1; a < arguments.length; a++) { var l = arguments[a]; if (void 0 !== l && null !== l)for (var s in l)l.hasOwnProperty(s) && (t[s] = l[s]) } return t } }(), "remove" in Element.prototype || (Element.prototype.remove = function () { this.parentNode && this.parentNode.removeChild(this) }), "function" != typeof Event && !function () { window.Event = function (e) { var t = document.createEvent("Event"); return t.initEvent(e, !0, !0), t } }(), Array.prototype.inArray = function (e) { return -1 !== this.indexOf(e) }, Array.prototype.unique = function () { return this.filter(function (e, t, a) { return a.indexOf(e) === t }) }, Array.prototype.remove = function () { for (var e, t, a = arguments, l = a.length; l && this.length;)for (e = a[--l]; -1 !== (t = this.indexOf(e));)this.splice(t, 1); return this }, NodeList.prototype.forEach = Array.prototype.forEach, NodeList.prototype.map = Array.prototype.map; //# sourceMappingURL=form-builder.min.js.map