Plugin Directory

Changeset 3049139


Ignore:
Timestamp:
03/11/2024 12:41:27 PM (2 years ago)
Author:
NickDuncan
Message:
  • Enhancement: Rebuilt gutenberg block modules to bring up to specification with latest WordPress guidelines
  • Enhancement: PHP8+ compatibility added, first phase of updates
  • Bug Fix: Fixed security issue with styling page due to missing nonce checks. Thanks Nguyen Xuan Chien (Patchstack)
  • Bug Fix: Fixed security issue with settings page due to missing nonce checks. Thanks Nguyen Xuan Chien (Patchstack)
  • Bug Fix: Improved settings/styling storage security by enforcing a user access check
  • Bug Fix: Fixed issue with wp_localize_script usage for reset string localization
  • Bug Fix: Fixed issue with wp_localize_script usage for demo form structure localization
  • Bug Fix: Fixed issues with accessing arrays that may not be defined/stored
  • Bug Fix: Fixed issues with REST API registration calls not being up to specification, missing permission callback
  • Bug Fix: Standardized localizers to group common strings within an object, instead of making multiple localization calls
  • Bug Fix: Fixed issue where form structures were not storing correctly
  • Bug Fix: Improved sanitization and escaping workflows throughout the plugin core code
  • Bug Fix: Fixed JSON parser issues in user.js
  • Bug Fix: Disabled welcome notice, and subsequently feature vote system. No longer active, and caused issues
  • General: Tested on WordPress 6.5
  • General: Readme brought up to specification
Location:
contact-form-ready
Files:
144 added
24 edited

Legend:

Unmodified
Added
Removed
  • contact-form-ready/trunk/assets/codemirror/codemirror.css

    r1882463 r3049139  
    44  /* Set height, width, borders, and global font properties here */
    55  font-family: monospace;
    6   height: 300px;
     6  height: 100%;
    77  color: black;
    88  direction: ltr;
     9 
     10
    911}
    1012
     
    1214
    1315.CodeMirror-lines {
    14   padding: 4px 0; /* Vertical padding around content */
    15 }
     16  padding: 0 30px; /* Vertical padding around content */
     17}
     18
    1619.CodeMirror pre {
    17   padding: 0 4px; /* Horizontal padding of content */
    18 }
    19 
     20  padding: 0 26px; /* Horizontal padding of content */
     21}
    2022.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
    2123  background-color: white; /* The little square between H and V scrollbars */
     24 
    2225}
    2326
     
    2932  white-space: nowrap;
    3033}
    31 .CodeMirror-linenumbers {}
     34
     35.CodeMirror-linenumbers {
     36    color: white;
     37}
    3238.CodeMirror-linenumber {
    3339  padding: 0 3px 0 5px;
     
    288294.CodeMirror-gutters,
    289295.CodeMirror-linenumber {
    290   -moz-box-sizing: content-box;
    291   box-sizing: content-box;
     296  /*-moz-box-sizing: content-box;*/
     297  box-sizing:inherit;
    292298}
    293299
     
    304310  pointer-events: none;
    305311}
    306 .CodeMirror-measure pre { position: static; }
     312.CodeMirror-measure pre { position: relative; }
    307313
    308314div.CodeMirror-cursors {
  • contact-form-ready/trunk/assets/formbuilder/css/form-builder.css

    r1882463 r3049139  
    162162.btn-primary {
    163163  background-color: #337ab7;
    164   border-color: #2e6da4; }
     164  border-color: #f3f5f6; }
    165165  .btn-primary:hover, .btn-primary:active, .btn-primary.active, .btn-primary.btn-active {
    166166    background-color: #286090;
    167167    border-color: #204d74; }
     168
    168169
    169170.btn-danger {
  • contact-form-ready/trunk/assets/formbuilder/js/form-builder.min.js

    r2190532 r3049139  
    44 * Author: Kevin Chappell <[email protected]>
    55 */
    6 !function(e){"use strict";!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=33)}([function(t,r,n){function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){i(e,t,r[t])})}return e}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}n.d(r,"y",function(){return l}),n.d(r,"A",function(){return u}),n.d(r,"b",function(){return f}),n.d(r,"h",function(){return d}),n.d(r,"m",function(){return m}),n.d(r,"c",function(){return b}),n.d(r,"r",function(){return h}),n.d(r,"p",function(){return v}),n.d(r,"s",function(){return x}),n.d(r,"t",function(){return A}),n.d(r,"g",function(){return O}),n.d(r,"i",function(){return j}),n.d(r,"z",function(){return q}),n.d(r,"u",function(){return C}),n.d(r,"k",function(){return E}),n.d(r,"o",function(){return L}),n.d(r,"l",function(){return N}),n.d(r,"d",function(){return S}),n.d(r,"a",function(){return T}),n.d(r,"e",function(){return D}),n.d(r,"q",function(){return B}),n.d(r,"w",function(){return R}),n.d(r,"j",function(){return F}),n.d(r,"x",function(){return M}),n.d(r,"n",function(){return I}),n.d(r,"v",function(){return z}),window.fbLoaded={js:[],css:[]},window.fbEditors={quill:{},tinymce:{}};var l=function(e){var t=[null,void 0,"",!1,"false"];for(var r in e)t.includes(e[r])?delete e[r]:Array.isArray(e[r])&&(e[r].length||delete e[r]);return e},s=function(e){return!["values","enableOther","other","label","subtype"].includes(e)},u=function(e){return Object.entries(e).map(function(e){var t=e[0],r=e[1];return m(t)+'="'+r+'"'}).join(" ")},f=function(e){return Object.entries(e).map(function(e){var t=e[0],r=e[1];return s(t)&&Object.values(c(t,r)).join("")}).filter(Boolean).join(" ")},c=function(e,t){var r;return e=p(e),t&&(Array.isArray(t)?r=k(t.join(" ")):("boolean"==typeof t&&(t=t.toString()),r=k(t.trim()))),{name:e,value:t=t?'="'+r+'"':""}},d=function e(t){return t.reduce(function(t,r){return t.concat(Array.isArray(r)?e(r):r)},[])},p=function(e){return{className:"class"}[e]||m(e)},m=function(e){return(e=(e=e.replace(/[^\w\s\-]/gi,"")).replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})).replace(/\s/g,"-").replace(/^-+/g,"")},b=function(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})},h=function(e){var t=(new Date).getTime();return(e.type||m(e.label))+"-"+t},g=function(e){return void 0===e?e:[["array",function(e){return Array.isArray(e)}],["node",function(e){return e instanceof window.Node||e instanceof window.HTMLElement}],["component",function(){return e&&e.dom}],[typeof e,function(){return!0}]].find(function(t){return t[1](e)})[0]},v=function e(t,r,n){void 0===r&&(r=""),void 0===n&&(n={});var o=g(r),i=n,l=i.events,s=a(i,["events"]),u=document.createElement(t),f={string:function(e){u.innerHTML+=e},object:function(t){var r=t.tag,n=t.content,o=a(t,["tag","content"]);return u.appendChild(e(r,n,o))},node:function(e){return u.appendChild(e)},array:function(e){for(var t=0;t<e.length;t++)o=g(e[t]),f[o](e[t])},function:function(e){e=e(),o=g(e),f[o](e)},undefined:function(){}};for(var c in s)if(s.hasOwnProperty(c)){var d=p(c),m=Array.isArray(s[c])?q(s[c].join(" ").split(" ")).join(" "):s[c];u.setAttribute(d,m)}return r&&f[o](r),function(e,t){if(t){var r=function(r){t.hasOwnProperty(r)&&e.addEventListener(r,function(e){return t[r](e)})};for(var n in t)r(n)}}(u,l),u},y=function(e){var t=e.attributes,r={};return j(t,function(e){var n=t[e].value||"";n.match(/false|true/g)?n="true"===n:n.match(/undefined/g)&&(n=void 0),n&&(r[b(t[e].name)]=n)}),r},w=function(e){for(var t=[],r=0;r<e.length;r++){var n=o({},y(e[r]),{label:e[r].textContent});t.push(n)}return t},x=function(e){var t=(new window.DOMParser).parseFromString(e,"text/xml"),r=[];if(t)for(var n=t.getElementsByTagName("field"),o=0;o<n.length;o++){var i=y(n[o]),a=n[o].getElementsByTagName("option");a&&a.length&&(i.values=w(a)),r.push(i)}return r},A=function(e){var t=document.createElement("textarea");return t.innerHTML=e,t.textContent},O=function(e){var t=document.createElement("textarea");return t.textContent=e,t.innerHTML},k=function(e){var t={'"':"&quot;","&":"&amp;","<":"&lt;",">":"&gt;"};return"string"==typeof e?e.replace(/["&<>]/g,function(e){return t[e]||e}):e},j=function(e,t,r){for(var n=0;n<e.length;n++)t.call(r,n,e[n])},q=function(e){return e.filter(function(e,t,r){return r.indexOf(e)===t})},C=function(e,t){var r=t.indexOf(e);r>-1&&t.splice(r,1)},E=function(e,t){var r,n=jQuery,o=[];return Array.isArray(e)||(e=[e]),L(e)||(o=jQuery.map(e,function(e){var r={dataType:"script",cache:!0,url:(t||"")+e};return jQuery.ajax(r).done(function(){return window.fbLoaded.js.push(e)})})),o.push(jQuery.Deferred(function(e){return n(e.resolve)})),(r=jQuery).when.apply(r,o)},L=function(e,t){void 0===t&&(t="js");var r=!1,n=window.fbLoaded[t];return r=Array.isArray(e)?e.every(function(e){return n.includes(e)}):n.includes(e),r},N=function(t,r){Array.isArray(t)||(t=[t]),t.forEach(function(t){var n="href",o=t,i="";if("object"==typeof t&&(n=t.type||(t.style?"inline":"href"),i=t.id,t="inline"==n?t.style:t.href,o=i||t.href||t.style),!L(o,"css")){if("href"==n){var a=document.createElement("link");a.type="text/css",a.rel="stylesheet",a.href=(r||"")+t,document.head.appendChild(a)}else e('<style type="text/css">'+t+"</style>").attr("id",i).appendTo(e(document.head));window.fbLoaded.css.push(o)}})},S=function(e){return e.replace(/\b\w/g,function(e){return e.toUpperCase()})},T=function(e,t,r){return t.split(" ").forEach(function(t){return e.addEventListener(t,r,!1)})},D=function(e,t){for(var r=t.replace(".","");(e=e.parentElement)&&!e.classList.contains(r););return e},B=function(){var e,t="";return e=navigator.userAgent||navigator.vendor||window.opera,/(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(e)&&(t="fb-mobile"),t},R=function(e){return e.replace(/\s/g,"-").replace(/[^a-zA-Z0-9[\]_-]/g,"")},F=function(e){return e.replace(/[^0-9]/g,"")},M=function(e,t){return t.filter(function(e){return!~this.indexOf(e)},e)},I=function(e){var t=(e=Array.isArray(e)?e:[e]).map(function(e){var t=e.src,r=e.id;return new Promise(function(e,n){if(window.fbLoaded.css.includes(t))return e(t);var o=v("link",null,{href:t,rel:"stylesheet",id:r});document.head.insertBefore(o,document.head.firstChild)})});return Promise.all(t)},z=function(e){var t=document.getElementById(e);return t.parentElement.removeChild(t)},P={addEventListeners:T,attrString:f,camelCase:b,capitalize:S,closest:D,getContentType:g,escapeAttr:k,escapeAttrs:function(e){for(var t in e)e.hasOwnProperty(t)&&(e[t]=k(e[t]));return e},escapeHtml:O,forceNumber:F,forEach:j,getScripts:E,getStyles:N,hyphenCase:m,isCached:L,markup:v,merge:function e(t,r){var n=Object.assign({},t,r);for(var o in r)n.hasOwnProperty(o)&&(Array.isArray(r[o])?n[o]=Array.isArray(t[o])?q(t[o].concat(r[o])):r[o]:"object"==typeof r[o]?n[o]=e(t[o],r[o]):n[o]=r[o]);return n},mobileClass:B,nameAttr:h,parseAttrs:y,parsedHtml:A,parseOptions:w,parseXML:x,removeFromArray:C,safeAttr:c,safeAttrName:p,safename:R,subtract:M,trimObj:l,unique:q,validAttr:s,splitObject:function(e,t){var r=function(e){return function(t,r){return t[r]=e[r],t}};return[Object.keys(e).filter(function(e){return t.includes(e)}).reduce(r(e),{}),Object.keys(e).filter(function(e){return!t.includes(e)}).reduce(r(e),{})]}};r.f=P},function(e,t,r){r.d(t,"a",function(){return l});var n=r(0),o=r(2),i=r.n(o);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var l=function(){function e(t,r){this.rawConfig=jQuery.extend({},t),t=jQuery.extend({},t),this.preview=r,delete t.isPreview,this.preview&&delete t.required;for(var n=0,o=["label","description","subtype","required","disabled"];n<o.length;n++){var i=o[n];this[i]=t[i],delete t[i]}t.id||(t.name?t.id=t.name:t.id="control-"+Math.floor(1e7*Math.random()+1)),this.id=t.id,this.type=t.type,this.description&&(t.title=this.description),e.controlConfig||(e.controlConfig={});var a=this.subtype?this.type+"."+this.subtype:this.type;this.classConfig=jQuery.extend({},e.controlConfig[a]||{}),this.subtype&&(t.type=this.subtype),this.required&&(t.required="required",t["aria-required"]="true"),this.disabled&&(t.disabled="disabled"),this.config=t,this.configure()}e.register=function(t,r,n){var o=n?n+".":"";e.classRegister||(e.classRegister={}),Array.isArray(t)||(t=[t]);var i=t,a=Array.isArray(i),l=0;for(i=a?i:i[Symbol.iterator]();;){var s;if(a){if(l>=i.length)break;s=i[l++]}else{if((l=i.next()).done)break;s=l.value}var u=s;-1===u.indexOf(".")?e.classRegister[o+u]=r:e.error("Ignoring type "+u+". Cannot use the character '.' in a type name.")}},e.getRegistered=function(t){void 0===t&&(t=!1);var r=Object.keys(e.classRegister);return r.length?r.filter(function(e){return t?e.indexOf(t+".")>-1:-1==e.indexOf(".")}):r},e.getRegisteredSubtypes=function(){var t={};for(var r in e.classRegister)if(e.classRegister.hasOwnProperty(r)){var n=r.split("."),o=n[0],i=n[1];if(!i)continue;t[o]||(t[o]=[]),t[o].push(i)}return t},e.getClass=function(t,r){var n=r?t+"."+r:t,o=e.classRegister[n]||e.classRegister[t];return o||e.error("Invalid control type. (Type: "+t+", Subtype: "+r+"). Please ensure you have registered it, and imported it correctly.")},e.loadCustom=function(t){var r=[];if(t&&(r=r.concat(t)),window.fbControls&&(r=r.concat(window.fbControls)),!this.fbControlsLoaded){var n=r,o=Array.isArray(n),i=0;for(n=o?n:n[Symbol.iterator]();;){var a;if(o){if(i>=n.length)break;a=n[i++]}else{if((i=n.next()).done)break;a=i.value}a(e,e.classRegister)}this.fbControlsLoaded=!0}},e.mi18n=function(e,t){var r=this.definition,n=r.i18n||{};n=n[i.a.locale]||n.default||n;var o=this.camelCase(e),a="object"==typeof n?n[o]||n[e]:n;if(a)return a;var l=r.mi18n;return"object"==typeof l&&(l=l[o]||l[e]),l||(l=o),i.a.get(l,t)},e.active=function(e){return!Array.isArray(this.definition.inactive)||-1==this.definition.inactive.indexOf(e)},e.label=function(e){return this.mi18n(e)},e.icon=function(e){var t=this.definition;return t&&"object"==typeof t.icon?t.icon[e]:t.icon};var t,r,o,l=e.prototype;return l.configure=function(){},l.build=function(){var e=this.config,t=e.label,r=e.type,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,["label","type"]);return this.markup(r,Object(n.t)(t),o)},l.on=function(e){var t=this,r={prerender:function(e){},render:function(e){var r=function(){t.onRender&&t.onRender()};t.css&&Object(n.l)(t.css),t.js&&!Object(n.o)(t.js)?Object(n.k)(t.js).done(r):r()}};return e?r[e]:r},e.error=function(e){throw new Error(e)},l.markup=function(e,t,r){return void 0===t&&(t=""),void 0===r&&(r={}),this.element=Object(n.p)(e,t,r),this.element},l.parsedHtml=function(e){return Object(n.t)(e)},e.camelCase=function(e){return Object(n.c)(e)},t=e,o=[{key:"definition",get:function(){return{}}}],(r=null)&&a(t.prototype,r),o&&a(t,o),e}()},function(e,t){
     6!function(e){"use strict";!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=33)}([function(t,r,n){function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){i(e,t,r[t])})}return e}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}n.d(r,"y",function(){return l}),n.d(r,"A",function(){return u}),n.d(r,"b",function(){return f}),n.d(r,"h",function(){return d}),n.d(r,"m",function(){return m}),n.d(r,"c",function(){return b}),n.d(r,"r",function(){return h}),n.d(r,"p",function(){return v}),n.d(r,"s",function(){return x}),n.d(r,"t",function(){return A}),n.d(r,"g",function(){return O}),n.d(r,"i",function(){return j}),n.d(r,"z",function(){return q}),n.d(r,"u",function(){return C}),n.d(r,"k",function(){return E}),n.d(r,"o",function(){return L}),n.d(r,"l",function(){return N}),n.d(r,"d",function(){return S}),n.d(r,"a",function(){return T}),n.d(r,"e",function(){return D}),n.d(r,"q",function(){return B}),n.d(r,"w",function(){return R}),n.d(r,"j",function(){return F}),n.d(r,"x",function(){return M}),n.d(r,"n",function(){return I}),n.d(r,"v",function(){return z}),window.fbLoaded={js:[],css:[]},window.fbEditors={quill:{},tinymce:{}};var l=function(e){var t=[null,void 0,"",!1,"false"];for(var r in e)t.includes(e[r])?delete e[r]:Array.isArray(e[r])&&(e[r].length||delete e[r]);return e},s=function(e){return!["values","enableOther","other","label","subtype"].includes(e)},u=function(e){return Object.entries(e).map(function(e){var t=e[0],r=e[1];return m(t)+'="'+r+'"'}).join(" ")},f=function(e){return Object.entries(e).map(function(e){var t=e[0],r=e[1];return s(t)&&Object.values(c(t,r)).join("")}).filter(Boolean).join(" ")},c=function(e,t){var r;return e=p(e),t&&(Array.isArray(t)?r=k(t.join(" ")):("boolean"==typeof t&&(t=t.toString()),r=k(t.trim()))),{name:e,value:t=t?'="'+r+'"':""}},d=function e(t){return t.reduce(function(t,r){return t.concat(Array.isArray(r)?e(r):r)},[])},p=function(e){return{className:"class"}[e]||m(e)},m=function(e){return(e=(e=e.replace(/[^\w\s\-]/gi,"")).replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})).replace(/\s/g,"-").replace(/^-+/g,"")},b=function(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})},h=function(e){var t=(new Date).getTime();return(e.type||m(e.label))+"-"+t},g=function(e){return void 0===e?e:[["array",function(e){return Array.isArray(e)}],["node",function(e){return e instanceof window.Node||e instanceof window.HTMLElement}],["component",function(){return e&&e.dom}],[typeof e,function(){return!0}]].find(function(t){return t[1](e)})[0]},v=function e(t,r,n){void 0===r&&(r=""),void 0===n&&(n={});var o=g(r),i=n,l=i.events,s=a(i,["events"]),u=document.createElement(t),f={string:function(e){u.innerHTML+=e},object:function(t){var r=t.tag,n=t.content,o=a(t,["tag","content"]);return u.appendChild(e(r,n,o))},node:function(e){return u.appendChild(e)},array:function(e){for(var t=0;t<e.length;t++)o=g(e[t]),f[o](e[t])},function:function(e){e=e(),o=g(e),f[o](e)},undefined:function(){}};for(var c in s)if(s.hasOwnProperty(c)){var d=p(c),m=Array.isArray(s[c])?q(s[c].join(" ").split(" ")).join(" "):s[c];u.setAttribute(d,m)}return r&&f[o](r),function(e,t){if(t){var r=function(r){t.hasOwnProperty(r)&&e.addEventListener(r,function(e){return t[r](e)})};for(var n in t)r(n)}}(u,l),u},y=function(e){var t=e.attributes,r={};return j(t,function(e){var n=t[e].value||"";n.match(/false|true/g)?n="true"===n:n.match(/undefined/g)&&(n=void 0),n&&(r[b(t[e].name)]=n)}),r},w=function(e){for(var t=[],r=0;r<e.length;r++){var n=o({},y(e[r]),{label:e[r].textContent});t.push(n)}return t},x=function(e){var t=(new window.DOMParser).parseFromString(e,"text/xml"),r=[];if(t)for(var n=t.getElementsByTagName("field"),o=0;o<n.length;o++){var i=y(n[o]),a=n[o].getElementsByTagName("option");a&&a.length&&(i.values=w(a)),r.push(i)}return r},A=function(e){var t=document.createElement("textarea");return t.innerHTML=e,t.textContent},O=function(e){var t=document.createElement("textarea");return t.textContent=e,t.innerHTML},k=function(e){var t={'"':"&quot;","&":"&amp;","<":"&lt;",">":"&gt;"};return"string"==typeof e?e.replace(/["&<>]/g,function(e){return t[e]||e}):e},j=function(e,t,r){for(var n=0;n<e.length;n++)t.call(r,n,e[n])},q=function(e){return e.filter(function(e,t,r){return r.indexOf(e)===t})},C=function(e,t){var r=t.indexOf(e);r>-1&&t.splice(r,1)},E=function(e,t){var r,n=jQuery,o=[];return Array.isArray(e)||(e=[e]),L(e)||(o=jQuery.map(e,function(e){var r={dataType:"script",cache:!0,url:(t||"")+e};return jQuery.ajax(r).done(function(){return window.fbLoaded.js.push(e)})})),o.push(jQuery.Deferred(function(e){return n(e.resolve)})),(r=jQuery).when.apply(r,o)},L=function(e,t){void 0===t&&(t="js");var r=!1,n=window.fbLoaded[t];return r=Array.isArray(e)?e.every(function(e){return n.includes(e)}):n.includes(e),r},N=function(t,r){Array.isArray(t)||(t=[t]),t.forEach(function(t){var n="href",o=t,i="";if("object"==typeof t&&(n=t.type||(t.style?"inline":"href"),i=t.id,t="inline"==n?t.style:t.href,o=i||t.href||t.style),!L(o,"css")){if("href"==n){var a=document.createElement("link");a.type="text/css",a.rel="stylesheet",a.href=(r||"")+t,document.head.appendChild(a)}else e('<style type="text/css">'+t+"</style>").attr("id",i).appendTo(e(document.head));window.fbLoaded.css.push(o)}})},S=function(e){return e.replace(/\b\w/g,function(e){return e.toUpperCase()})},T=function(e,t,r){return t.split(" ").forEach(function(t){return e.addEventListener(t,r,!1)})},D=function(e,t){for(var r=t.replace(".","");(e=e.parentElement)&&!e.classList.contains(r););return e},B=function(){var e,t="";return e=navigator.userAgent||navigator.vendor||window.opera,/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|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(e)&&(t="fb-mobile"),t},R=function(e){return e.replace(/\s/g,"-").replace(/[^a-zA-Z0-9[\]_-]/g,"")},F=function(e){return e.replace(/[^0-9]/g,"")},M=function(e,t){return t.filter(function(e){return!~this.indexOf(e)},e)},I=function(e){var t=(e=Array.isArray(e)?e:[e]).map(function(e){var t=e.src,r=e.id;return new Promise(function(e,n){if(window.fbLoaded.css.includes(t))return e(t);var o=v("link",null,{href:t,rel:"stylesheet",id:r});document.head.insertBefore(o,document.head.firstChild)})});return Promise.all(t)},z=function(e){var t=document.getElementById(e);return t.parentElement.removeChild(t)},P={addEventListeners:T,attrString:f,camelCase:b,capitalize:S,closest:D,getContentType:g,escapeAttr:k,escapeAttrs:function(e){for(var t in e)e.hasOwnProperty(t)&&(e[t]=k(e[t]));return e},escapeHtml:O,forceNumber:F,forEach:j,getScripts:E,getStyles:N,hyphenCase:m,isCached:L,markup:v,merge:function e(t,r){var n=Object.assign({},t,r);for(var o in r)n.hasOwnProperty(o)&&(Array.isArray(r[o])?n[o]=Array.isArray(t[o])?q(t[o].concat(r[o])):r[o]:"object"==typeof r[o]?n[o]=e(t[o],r[o]):n[o]=r[o]);return n},mobileClass:B,nameAttr:h,parseAttrs:y,parsedHtml:A,parseOptions:w,parseXML:x,removeFromArray:C,safeAttr:c,safeAttrName:p,safename:R,subtract:M,trimObj:l,unique:q,validAttr:s,splitObject:function(e,t){var r=function(e){return function(t,r){return t[r]=e[r],t}};return[Object.keys(e).filter(function(e){return t.includes(e)}).reduce(r(e),{}),Object.keys(e).filter(function(e){return!t.includes(e)}).reduce(r(e),{})]}};r.f=P},function(e,t,r){r.d(t,"a",function(){return l});var n=r(0),o=r(2),i=r.n(o);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var l=function(){function e(t,r){this.rawConfig=jQuery.extend({},t),t=jQuery.extend({},t),this.preview=r,delete t.isPreview,this.preview&&delete t.required;for(var n=0,o=["label","description","subtype","required","disabled"];n<o.length;n++){var i=o[n];this[i]=t[i],delete t[i]}t.id||(t.name?t.id=t.name:t.id="control-"+Math.floor(1e7*Math.random()+1)),this.id=t.id,this.type=t.type,this.description&&(t.title=this.description),e.controlConfig||(e.controlConfig={});var a=this.subtype?this.type+"."+this.subtype:this.type;this.classConfig=jQuery.extend({},e.controlConfig[a]||{}),this.subtype&&(t.type=this.subtype),this.required&&(t.required="required",t["aria-required"]="true"),this.disabled&&(t.disabled="disabled"),this.config=t,this.configure()}e.register=function(t,r,n){var o=n?n+".":"";e.classRegister||(e.classRegister={}),Array.isArray(t)||(t=[t]);var i=t,a=Array.isArray(i),l=0;for(i=a?i:i[Symbol.iterator]();;){var s;if(a){if(l>=i.length)break;s=i[l++]}else{if((l=i.next()).done)break;s=l.value}var u=s;-1===u.indexOf(".")?e.classRegister[o+u]=r:e.error("Ignoring type "+u+". Cannot use the character '.' in a type name.")}},e.getRegistered=function(t){void 0===t&&(t=!1);var r=Object.keys(e.classRegister);return r.length?r.filter(function(e){return t?e.indexOf(t+".")>-1:-1==e.indexOf(".")}):r},e.getRegisteredSubtypes=function(){var t={};for(var r in e.classRegister)if(e.classRegister.hasOwnProperty(r)){var n=r.split("."),o=n[0],i=n[1];if(!i)continue;t[o]||(t[o]=[]),t[o].push(i)}return t},e.getClass=function(t,r){var n=r?t+"."+r:t,o=e.classRegister[n]||e.classRegister[t];return o||e.error("Invalid control type. (Type: "+t+", Subtype: "+r+"). Please ensure you have registered it, and imported it correctly.")},e.loadCustom=function(t){var r=[];if(t&&(r=r.concat(t)),window.fbControls&&(r=r.concat(window.fbControls)),!this.fbControlsLoaded){var n=r,o=Array.isArray(n),i=0;for(n=o?n:n[Symbol.iterator]();;){var a;if(o){if(i>=n.length)break;a=n[i++]}else{if((i=n.next()).done)break;a=i.value}a(e,e.classRegister)}this.fbControlsLoaded=!0}},e.mi18n=function(e,t){var r=this.definition,n=r.i18n||{};n=n[i.a.locale]||n.default||n;var o=this.camelCase(e),a="object"==typeof n?n[o]||n[e]:n;if(a)return a;var l=r.mi18n;return"object"==typeof l&&(l=l[o]||l[e]),l||(l=o),i.a.get(l,t)},e.active=function(e){return!Array.isArray(this.definition.inactive)||-1==this.definition.inactive.indexOf(e)},e.label=function(e){return this.mi18n(e)},e.icon=function(e){var t=this.definition;return t&&"object"==typeof t.icon?t.icon[e]:t.icon};var t,r,o,l=e.prototype;return l.configure=function(){},l.build=function(){var e=this.config,t=e.label,r=e.type,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,["label","type"]);return this.markup(r,Object(n.t)(t),o)},l.on=function(e){var t=this,r={prerender:function(e){},render:function(e){var r=function(){t.onRender&&t.onRender()};t.css&&Object(n.l)(t.css),t.js&&!Object(n.o)(t.js)?Object(n.k)(t.js).done(r):r()}};return e?r[e]:r},e.error=function(e){throw new Error(e)},l.markup=function(e,t,r){return void 0===t&&(t=""),void 0===r&&(r={}),this.element=Object(n.p)(e,t,r),this.element},l.parsedHtml=function(e){return Object(n.t)(e)},e.camelCase=function(e){return Object(n.c)(e)},t=e,o=[{key:"definition",get:function(){return{}}}],(r=null)&&a(t.prototype,r),o&&a(t,o),e}()},function(e,t){
    77/*!
    88 * mi18n - https://github.com/Draggable/mi18n
  • contact-form-ready/trunk/assets/formbuilder/js/form-render.min.js

    r2190532 r3049139  
    44 * Author: Kevin Chappell <[email protected]>
    55 */
    6 !function(e){"use strict";!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=28)}([function(t,n,r){function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){i(e,t,n[t])})}return e}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}r.d(n,"y",function(){return s}),r.d(n,"A",function(){return u}),r.d(n,"b",function(){return c}),r.d(n,"h",function(){return f}),r.d(n,"m",function(){return h}),r.d(n,"c",function(){return m}),r.d(n,"r",function(){return g}),r.d(n,"p",function(){return v}),r.d(n,"s",function(){return w}),r.d(n,"t",function(){return q}),r.d(n,"g",function(){return j}),r.d(n,"i",function(){return k}),r.d(n,"z",function(){return C}),r.d(n,"u",function(){return A}),r.d(n,"k",function(){return E}),r.d(n,"o",function(){return S}),r.d(n,"l",function(){return R}),r.d(n,"d",function(){return T}),r.d(n,"a",function(){return L}),r.d(n,"e",function(){return N}),r.d(n,"q",function(){return D}),r.d(n,"w",function(){return F}),r.d(n,"j",function(){return _}),r.d(n,"x",function(){return P}),r.d(n,"n",function(){return U}),r.d(n,"v",function(){return M}),window.fbLoaded={js:[],css:[]},window.fbEditors={quill:{},tinymce:{}};var s=function(e){var t=[null,void 0,"",!1,"false"];for(var n in e)t.includes(e[n])?delete e[n]:Array.isArray(e[n])&&(e[n].length||delete e[n]);return e},l=function(e){return!["values","enableOther","other","label","subtype"].includes(e)},u=function(e){return Object.entries(e).map(function(e){var t=e[0],n=e[1];return h(t)+'="'+n+'"'}).join(" ")},c=function(e){return Object.entries(e).map(function(e){var t=e[0],n=e[1];return l(t)&&Object.values(d(t,n)).join("")}).filter(Boolean).join(" ")},d=function(e,t){var n;return e=p(e),t&&(Array.isArray(t)?n=O(t.join(" ")):("boolean"==typeof t&&(t=t.toString()),n=O(t.trim()))),{name:e,value:t=t?'="'+n+'"':""}},f=function e(t){return t.reduce(function(t,n){return t.concat(Array.isArray(n)?e(n):n)},[])},p=function(e){return{className:"class"}[e]||h(e)},h=function(e){return(e=(e=e.replace(/[^\w\s\-]/gi,"")).replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})).replace(/\s/g,"-").replace(/^-+/g,"")},m=function(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})},g=function(e){var t=(new Date).getTime();return(e.type||h(e.label))+"-"+t},b=function(e){return void 0===e?e:[["array",function(e){return Array.isArray(e)}],["node",function(e){return e instanceof window.Node||e instanceof window.HTMLElement}],["component",function(){return e&&e.dom}],[typeof e,function(){return!0}]].find(function(t){return t[1](e)})[0]},v=function e(t,n,r){void 0===n&&(n=""),void 0===r&&(r={});var o=b(n),i=r,s=i.events,l=a(i,["events"]),u=document.createElement(t),c={string:function(e){u.innerHTML+=e},object:function(t){var n=t.tag,r=t.content,o=a(t,["tag","content"]);return u.appendChild(e(n,r,o))},node:function(e){return u.appendChild(e)},array:function(e){for(var t=0;t<e.length;t++)o=b(e[t]),c[o](e[t])},function:function(e){e=e(),o=b(e),c[o](e)},undefined:function(){}};for(var d in l)if(l.hasOwnProperty(d)){var f=p(d),h=Array.isArray(l[d])?C(l[d].join(" ").split(" ")).join(" "):l[d];u.setAttribute(f,h)}return n&&c[o](n),function(e,t){if(t){var n=function(n){t.hasOwnProperty(n)&&e.addEventListener(n,function(e){return t[n](e)})};for(var r in t)n(r)}}(u,s),u},y=function(e){var t=e.attributes,n={};return k(t,function(e){var r=t[e].value||"";r.match(/false|true/g)?r="true"===r:r.match(/undefined/g)&&(r=void 0),r&&(n[m(t[e].name)]=r)}),n},x=function(e){for(var t=[],n=0;n<e.length;n++){var r=o({},y(e[n]),{label:e[n].textContent});t.push(r)}return t},w=function(e){var t=(new window.DOMParser).parseFromString(e,"text/xml"),n=[];if(t)for(var r=t.getElementsByTagName("field"),o=0;o<r.length;o++){var i=y(r[o]),a=r[o].getElementsByTagName("option");a&&a.length&&(i.values=x(a)),n.push(i)}return n},q=function(e){var t=document.createElement("textarea");return t.innerHTML=e,t.textContent},j=function(e){var t=document.createElement("textarea");return t.textContent=e,t.innerHTML},O=function(e){var t={'"':"&quot;","&":"&amp;","<":"&lt;",">":"&gt;"};return"string"==typeof e?e.replace(/["&<>]/g,function(e){return t[e]||e}):e},k=function(e,t,n){for(var r=0;r<e.length;r++)t.call(n,r,e[r])},C=function(e){return e.filter(function(e,t,n){return n.indexOf(e)===t})},A=function(e,t){var n=t.indexOf(e);n>-1&&t.splice(n,1)},E=function(e,t){var n,r=jQuery,o=[];return Array.isArray(e)||(e=[e]),S(e)||(o=jQuery.map(e,function(e){var n={dataType:"script",cache:!0,url:(t||"")+e};return jQuery.ajax(n).done(function(){return window.fbLoaded.js.push(e)})})),o.push(jQuery.Deferred(function(e){return r(e.resolve)})),(n=jQuery).when.apply(n,o)},S=function(e,t){void 0===t&&(t="js");var n=!1,r=window.fbLoaded[t];return n=Array.isArray(e)?e.every(function(e){return r.includes(e)}):r.includes(e),n},R=function(t,n){Array.isArray(t)||(t=[t]),t.forEach(function(t){var r="href",o=t,i="";if("object"==typeof t&&(r=t.type||(t.style?"inline":"href"),i=t.id,t="inline"==r?t.style:t.href,o=i||t.href||t.style),!S(o,"css")){if("href"==r){var a=document.createElement("link");a.type="text/css",a.rel="stylesheet",a.href=(n||"")+t,document.head.appendChild(a)}else e('<style type="text/css">'+t+"</style>").attr("id",i).appendTo(e(document.head));window.fbLoaded.css.push(o)}})},T=function(e){return e.replace(/\b\w/g,function(e){return e.toUpperCase()})},L=function(e,t,n){return t.split(" ").forEach(function(t){return e.addEventListener(t,n,!1)})},N=function(e,t){for(var n=t.replace(".","");(e=e.parentElement)&&!e.classList.contains(n););return e},D=function(){var e,t="";return e=navigator.userAgent||navigator.vendor||window.opera,/(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(e)&&(t="fb-mobile"),t},F=function(e){return e.replace(/\s/g,"-").replace(/[^a-zA-Z0-9[\]_-]/g,"")},_=function(e){return e.replace(/[^0-9]/g,"")},P=function(e,t){return t.filter(function(e){return!~this.indexOf(e)},e)},U=function(e){var t=(e=Array.isArray(e)?e:[e]).map(function(e){var t=e.src,n=e.id;return new Promise(function(e,r){if(window.fbLoaded.css.includes(t))return e(t);var o=v("link",null,{href:t,rel:"stylesheet",id:n});document.head.insertBefore(o,document.head.firstChild)})});return Promise.all(t)},M=function(e){var t=document.getElementById(e);return t.parentElement.removeChild(t)},B={addEventListeners:L,attrString:c,camelCase:m,capitalize:T,closest:N,getContentType:b,escapeAttr:O,escapeAttrs:function(e){for(var t in e)e.hasOwnProperty(t)&&(e[t]=O(e[t]));return e},escapeHtml:j,forceNumber:_,forEach:k,getScripts:E,getStyles:R,hyphenCase:h,isCached:S,markup:v,merge:function e(t,n){var r=Object.assign({},t,n);for(var o in n)r.hasOwnProperty(o)&&(Array.isArray(n[o])?r[o]=Array.isArray(t[o])?C(t[o].concat(n[o])):n[o]:"object"==typeof n[o]?r[o]=e(t[o],n[o]):r[o]=n[o]);return r},mobileClass:D,nameAttr:g,parseAttrs:y,parsedHtml:q,parseOptions:x,parseXML:w,removeFromArray:A,safeAttr:d,safeAttrName:p,safename:F,subtract:P,trimObj:s,unique:C,validAttr:l,splitObject:function(e,t){var n=function(e){return function(t,n){return t[n]=e[n],t}};return[Object.keys(e).filter(function(e){return t.includes(e)}).reduce(n(e),{}),Object.keys(e).filter(function(e){return!t.includes(e)}).reduce(n(e),{})]}};n.f=B},function(e,t,n){n.d(t,"a",function(){return s});var r=n(0),o=n(2),i=n.n(o);function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var s=function(){function e(t,n){this.rawConfig=jQuery.extend({},t),t=jQuery.extend({},t),this.preview=n,delete t.isPreview,this.preview&&delete t.required;for(var r=0,o=["label","description","subtype","required","disabled"];r<o.length;r++){var i=o[r];this[i]=t[i],delete t[i]}t.id||(t.name?t.id=t.name:t.id="control-"+Math.floor(1e7*Math.random()+1)),this.id=t.id,this.type=t.type,this.description&&(t.title=this.description),e.controlConfig||(e.controlConfig={});var a=this.subtype?this.type+"."+this.subtype:this.type;this.classConfig=jQuery.extend({},e.controlConfig[a]||{}),this.subtype&&(t.type=this.subtype),this.required&&(t.required="required",t["aria-required"]="true"),this.disabled&&(t.disabled="disabled"),this.config=t,this.configure()}e.register=function(t,n,r){var o=r?r+".":"";e.classRegister||(e.classRegister={}),Array.isArray(t)||(t=[t]);var i=t,a=Array.isArray(i),s=0;for(i=a?i:i[Symbol.iterator]();;){var l;if(a){if(s>=i.length)break;l=i[s++]}else{if((s=i.next()).done)break;l=s.value}var u=l;-1===u.indexOf(".")?e.classRegister[o+u]=n:e.error("Ignoring type "+u+". Cannot use the character '.' in a type name.")}},e.getRegistered=function(t){void 0===t&&(t=!1);var n=Object.keys(e.classRegister);return n.length?n.filter(function(e){return t?e.indexOf(t+".")>-1:-1==e.indexOf(".")}):n},e.getRegisteredSubtypes=function(){var t={};for(var n in e.classRegister)if(e.classRegister.hasOwnProperty(n)){var r=n.split("."),o=r[0],i=r[1];if(!i)continue;t[o]||(t[o]=[]),t[o].push(i)}return t},e.getClass=function(t,n){var r=n?t+"."+n:t,o=e.classRegister[r]||e.classRegister[t];return o||e.error("Invalid control type. (Type: "+t+", Subtype: "+n+"). Please ensure you have registered it, and imported it correctly.")},e.loadCustom=function(t){var n=[];if(t&&(n=n.concat(t)),window.fbControls&&(n=n.concat(window.fbControls)),!this.fbControlsLoaded){var r=n,o=Array.isArray(r),i=0;for(r=o?r:r[Symbol.iterator]();;){var a;if(o){if(i>=r.length)break;a=r[i++]}else{if((i=r.next()).done)break;a=i.value}a(e,e.classRegister)}this.fbControlsLoaded=!0}},e.mi18n=function(e,t){var n=this.definition,r=n.i18n||{};r=r[i.a.locale]||r.default||r;var o=this.camelCase(e),a="object"==typeof r?r[o]||r[e]:r;if(a)return a;var s=n.mi18n;return"object"==typeof s&&(s=s[o]||s[e]),s||(s=o),i.a.get(s,t)},e.active=function(e){return!Array.isArray(this.definition.inactive)||-1==this.definition.inactive.indexOf(e)},e.label=function(e){return this.mi18n(e)},e.icon=function(e){var t=this.definition;return t&&"object"==typeof t.icon?t.icon[e]:t.icon};var t,n,o,s=e.prototype;return s.configure=function(){},s.build=function(){var e=this.config,t=e.label,n=e.type,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,["label","type"]);return this.markup(n,Object(r.t)(t),o)},s.on=function(e){var t=this,n={prerender:function(e){},render:function(e){var n=function(){t.onRender&&t.onRender()};t.css&&Object(r.l)(t.css),t.js&&!Object(r.o)(t.js)?Object(r.k)(t.js).done(n):n()}};return e?n[e]:n},e.error=function(e){throw new Error(e)},s.markup=function(e,t,n){return void 0===t&&(t=""),void 0===n&&(n={}),this.element=Object(r.p)(e,t,n),this.element},s.parsedHtml=function(e){return Object(r.t)(e)},e.camelCase=function(e){return Object(r.c)(e)},t=e,o=[{key:"definition",get:function(){return{}}}],(n=null)&&a(t.prototype,n),o&&a(t,o),e}()},function(e,t){
     6!function(e){"use strict";!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=28)}([function(t,n,r){function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){i(e,t,n[t])})}return e}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}r.d(n,"y",function(){return s}),r.d(n,"A",function(){return u}),r.d(n,"b",function(){return c}),r.d(n,"h",function(){return f}),r.d(n,"m",function(){return h}),r.d(n,"c",function(){return m}),r.d(n,"r",function(){return g}),r.d(n,"p",function(){return v}),r.d(n,"s",function(){return w}),r.d(n,"t",function(){return q}),r.d(n,"g",function(){return j}),r.d(n,"i",function(){return k}),r.d(n,"z",function(){return C}),r.d(n,"u",function(){return A}),r.d(n,"k",function(){return E}),r.d(n,"o",function(){return S}),r.d(n,"l",function(){return R}),r.d(n,"d",function(){return T}),r.d(n,"a",function(){return L}),r.d(n,"e",function(){return N}),r.d(n,"q",function(){return D}),r.d(n,"w",function(){return F}),r.d(n,"j",function(){return _}),r.d(n,"x",function(){return P}),r.d(n,"n",function(){return U}),r.d(n,"v",function(){return M}),window.fbLoaded={js:[],css:[]},window.fbEditors={quill:{},tinymce:{}};var s=function(e){var t=[null,void 0,"",!1,"false"];for(var n in e)t.includes(e[n])?delete e[n]:Array.isArray(e[n])&&(e[n].length||delete e[n]);return e},l=function(e){return!["values","enableOther","other","label","subtype"].includes(e)},u=function(e){return Object.entries(e).map(function(e){var t=e[0],n=e[1];return h(t)+'="'+n+'"'}).join(" ")},c=function(e){return Object.entries(e).map(function(e){var t=e[0],n=e[1];return l(t)&&Object.values(d(t,n)).join("")}).filter(Boolean).join(" ")},d=function(e,t){var n;return e=p(e),t&&(Array.isArray(t)?n=O(t.join(" ")):("boolean"==typeof t&&(t=t.toString()),n=O(t.trim()))),{name:e,value:t=t?'="'+n+'"':""}},f=function e(t){return t.reduce(function(t,n){return t.concat(Array.isArray(n)?e(n):n)},[])},p=function(e){return{className:"class"}[e]||h(e)},h=function(e){return(e=(e=e.replace(/[^\w\s\-]/gi,"")).replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})).replace(/\s/g,"-").replace(/^-+/g,"")},m=function(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})},g=function(e){var t=(new Date).getTime();return(e.type||h(e.label))+"-"+t},b=function(e){return void 0===e?e:[["array",function(e){return Array.isArray(e)}],["node",function(e){return e instanceof window.Node||e instanceof window.HTMLElement}],["component",function(){return e&&e.dom}],[typeof e,function(){return!0}]].find(function(t){return t[1](e)})[0]},v=function e(t,n,r){void 0===n&&(n=""),void 0===r&&(r={});var o=b(n),i=r,s=i.events,l=a(i,["events"]),u=document.createElement(t),c={string:function(e){u.innerHTML+=e},object:function(t){var n=t.tag,r=t.content,o=a(t,["tag","content"]);return u.appendChild(e(n,r,o))},node:function(e){return u.appendChild(e)},array:function(e){for(var t=0;t<e.length;t++)o=b(e[t]),c[o](e[t])},function:function(e){e=e(),o=b(e),c[o](e)},undefined:function(){}};for(var d in l)if(l.hasOwnProperty(d)){var f=p(d),h=Array.isArray(l[d])?C(l[d].join(" ").split(" ")).join(" "):l[d];u.setAttribute(f,h)}return n&&c[o](n),function(e,t){if(t){var n=function(n){t.hasOwnProperty(n)&&e.addEventListener(n,function(e){return t[n](e)})};for(var r in t)n(r)}}(u,s),u},y=function(e){var t=e.attributes,n={};return k(t,function(e){var r=t[e].value||"";r.match(/false|true/g)?r="true"===r:r.match(/undefined/g)&&(r=void 0),r&&(n[m(t[e].name)]=r)}),n},x=function(e){for(var t=[],n=0;n<e.length;n++){var r=o({},y(e[n]),{label:e[n].textContent});t.push(r)}return t},w=function(e){var t=(new window.DOMParser).parseFromString(e,"text/xml"),n=[];if(t)for(var r=t.getElementsByTagName("field"),o=0;o<r.length;o++){var i=y(r[o]),a=r[o].getElementsByTagName("option");a&&a.length&&(i.values=x(a)),n.push(i)}return n},q=function(e){var t=document.createElement("textarea");return t.innerHTML=e,t.textContent},j=function(e){var t=document.createElement("textarea");return t.textContent=e,t.innerHTML},O=function(e){var t={'"':"&quot;","&":"&amp;","<":"&lt;",">":"&gt;"};return"string"==typeof e?e.replace(/["&<>]/g,function(e){return t[e]||e}):e},k=function(e,t,n){for(var r=0;r<e.length;r++)t.call(n,r,e[r])},C=function(e){return e.filter(function(e,t,n){return n.indexOf(e)===t})},A=function(e,t){var n=t.indexOf(e);n>-1&&t.splice(n,1)},E=function(e,t){var n,r=jQuery,o=[];return Array.isArray(e)||(e=[e]),S(e)||(o=jQuery.map(e,function(e){var n={dataType:"script",cache:!0,url:(t||"")+e};return jQuery.ajax(n).done(function(){return window.fbLoaded.js.push(e)})})),o.push(jQuery.Deferred(function(e){return r(e.resolve)})),(n=jQuery).when.apply(n,o)},S=function(e,t){void 0===t&&(t="js");var n=!1,r=window.fbLoaded[t];return n=Array.isArray(e)?e.every(function(e){return r.includes(e)}):r.includes(e),n},R=function(t,n){Array.isArray(t)||(t=[t]),t.forEach(function(t){var r="href",o=t,i="";if("object"==typeof t&&(r=t.type||(t.style?"inline":"href"),i=t.id,t="inline"==r?t.style:t.href,o=i||t.href||t.style),!S(o,"css")){if("href"==r){var a=document.createElement("link");a.type="text/css",a.rel="stylesheet",a.href=(n||"")+t,document.head.appendChild(a)}else e('<style type="text/css">'+t+"</style>").attr("id",i).appendTo(e(document.head));window.fbLoaded.css.push(o)}})},T=function(e){return e.replace(/\b\w/g,function(e){return e.toUpperCase()})},L=function(e,t,n){return t.split(" ").forEach(function(t){return e.addEventListener(t,n,!1)})},N=function(e,t){for(var n=t.replace(".","");(e=e.parentElement)&&!e.classList.contains(n););return e},D=function(){var e,t="";return e=navigator.userAgent||navigator.vendor||window.opera,/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|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(e)&&(t="fb-mobile"),t},F=function(e){return e.replace(/\s/g,"-").replace(/[^a-zA-Z0-9[\]_-]/g,"")},_=function(e){return e.replace(/[^0-9]/g,"")},P=function(e,t){return t.filter(function(e){return!~this.indexOf(e)},e)},U=function(e){var t=(e=Array.isArray(e)?e:[e]).map(function(e){var t=e.src,n=e.id;return new Promise(function(e,r){if(window.fbLoaded.css.includes(t))return e(t);var o=v("link",null,{href:t,rel:"stylesheet",id:n});document.head.insertBefore(o,document.head.firstChild)})});return Promise.all(t)},M=function(e){var t=document.getElementById(e);return t.parentElement.removeChild(t)},B={addEventListeners:L,attrString:c,camelCase:m,capitalize:T,closest:N,getContentType:b,escapeAttr:O,escapeAttrs:function(e){for(var t in e)e.hasOwnProperty(t)&&(e[t]=O(e[t]));return e},escapeHtml:j,forceNumber:_,forEach:k,getScripts:E,getStyles:R,hyphenCase:h,isCached:S,markup:v,merge:function e(t,n){var r=Object.assign({},t,n);for(var o in n)r.hasOwnProperty(o)&&(Array.isArray(n[o])?r[o]=Array.isArray(t[o])?C(t[o].concat(n[o])):n[o]:"object"==typeof n[o]?r[o]=e(t[o],n[o]):r[o]=n[o]);return r},mobileClass:D,nameAttr:g,parseAttrs:y,parsedHtml:q,parseOptions:x,parseXML:w,removeFromArray:A,safeAttr:d,safeAttrName:p,safename:F,subtract:P,trimObj:s,unique:C,validAttr:l,splitObject:function(e,t){var n=function(e){return function(t,n){return t[n]=e[n],t}};return[Object.keys(e).filter(function(e){return t.includes(e)}).reduce(n(e),{}),Object.keys(e).filter(function(e){return!t.includes(e)}).reduce(n(e),{})]}};n.f=B},function(e,t,n){n.d(t,"a",function(){return s});var r=n(0),o=n(2),i=n.n(o);function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var s=function(){function e(t,n){this.rawConfig=jQuery.extend({},t),t=jQuery.extend({},t),this.preview=n,delete t.isPreview,this.preview&&delete t.required;for(var r=0,o=["label","description","subtype","required","disabled"];r<o.length;r++){var i=o[r];this[i]=t[i],delete t[i]}t.id||(t.name?t.id=t.name:t.id="control-"+Math.floor(1e7*Math.random()+1)),this.id=t.id,this.type=t.type,this.description&&(t.title=this.description),e.controlConfig||(e.controlConfig={});var a=this.subtype?this.type+"."+this.subtype:this.type;this.classConfig=jQuery.extend({},e.controlConfig[a]||{}),this.subtype&&(t.type=this.subtype),this.required&&(t.required="required",t["aria-required"]="true"),this.disabled&&(t.disabled="disabled"),this.config=t,this.configure()}e.register=function(t,n,r){var o=r?r+".":"";e.classRegister||(e.classRegister={}),Array.isArray(t)||(t=[t]);var i=t,a=Array.isArray(i),s=0;for(i=a?i:i[Symbol.iterator]();;){var l;if(a){if(s>=i.length)break;l=i[s++]}else{if((s=i.next()).done)break;l=s.value}var u=l;-1===u.indexOf(".")?e.classRegister[o+u]=n:e.error("Ignoring type "+u+". Cannot use the character '.' in a type name.")}},e.getRegistered=function(t){void 0===t&&(t=!1);var n=Object.keys(e.classRegister);return n.length?n.filter(function(e){return t?e.indexOf(t+".")>-1:-1==e.indexOf(".")}):n},e.getRegisteredSubtypes=function(){var t={};for(var n in e.classRegister)if(e.classRegister.hasOwnProperty(n)){var r=n.split("."),o=r[0],i=r[1];if(!i)continue;t[o]||(t[o]=[]),t[o].push(i)}return t},e.getClass=function(t,n){var r=n?t+"."+n:t,o=e.classRegister[r]||e.classRegister[t];return o||e.error("Invalid control type. (Type: "+t+", Subtype: "+n+"). Please ensure you have registered it, and imported it correctly.")},e.loadCustom=function(t){var n=[];if(t&&(n=n.concat(t)),window.fbControls&&(n=n.concat(window.fbControls)),!this.fbControlsLoaded){var r=n,o=Array.isArray(r),i=0;for(r=o?r:r[Symbol.iterator]();;){var a;if(o){if(i>=r.length)break;a=r[i++]}else{if((i=r.next()).done)break;a=i.value}a(e,e.classRegister)}this.fbControlsLoaded=!0}},e.mi18n=function(e,t){var n=this.definition,r=n.i18n||{};r=r[i.a.locale]||r.default||r;var o=this.camelCase(e),a="object"==typeof r?r[o]||r[e]:r;if(a)return a;var s=n.mi18n;return"object"==typeof s&&(s=s[o]||s[e]),s||(s=o),i.a.get(s,t)},e.active=function(e){return!Array.isArray(this.definition.inactive)||-1==this.definition.inactive.indexOf(e)},e.label=function(e){return this.mi18n(e)},e.icon=function(e){var t=this.definition;return t&&"object"==typeof t.icon?t.icon[e]:t.icon};var t,n,o,s=e.prototype;return s.configure=function(){},s.build=function(){var e=this.config,t=e.label,n=e.type,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,["label","type"]);return this.markup(n,Object(r.t)(t),o)},s.on=function(e){var t=this,n={prerender:function(e){},render:function(e){var n=function(){t.onRender&&t.onRender()};t.css&&Object(r.l)(t.css),t.js&&!Object(r.o)(t.js)?Object(r.k)(t.js).done(n):n()}};return e?n[e]:n},e.error=function(e){throw new Error(e)},s.markup=function(e,t,n){return void 0===t&&(t=""),void 0===n&&(n={}),this.element=Object(r.p)(e,t,n),this.element},s.parsedHtml=function(e){return Object(r.t)(e)},e.camelCase=function(e){return Object(r.c)(e)},t=e,o=[{key:"definition",get:function(){return{}}}],(n=null)&&a(t.prototype,n),o&&a(t,o),e}()},function(e,t){
    77/*!
    88 * mi18n - https://github.com/Draggable/mi18n
  • contact-form-ready/trunk/assets/formbuilder/js/site.js

    r2190532 r3049139  
    1313            editOnAdd: true,
    1414            dataType: 'xml',
    15             formData: tmpformData,
     15            formData: tmpformData.json,
    1616            disableHTMLLabels: true,
    1717            onAddField: function(formData) {
     
    2626
    2727        };
     28
    2829    var isJson = false;
    2930    try {
    30         var json = jQuery.parseJSON(tmpformData);
     31        var json = JSON.parse(tmpformData.json);
    3132        isJson = true;
    3233    } catch(err) {
    3334        isJson = false;
    3435    }
    35       if (isJson) {
    36         fbOptions.formData = tmpformData;
     36   
     37    if (isJson) {
     38        fbOptions.formData = tmpformData.json;
    3739        fbOptions.dataType = 'json';
    38       }
     40    }
     41
     42
    3943    formBuilder = jQuery(buildWrap).formBuilder(fbOptions);
    4044
  • contact-form-ready/trunk/assets/formbuilder/js/utils.js

    r1882463 r3049139  
    551551    // eslint-disable-next-line
    552552    if (
    553       /(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(
     553      /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|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(
    554554        a
    555555      ) ||
    556       /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(
     556      /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|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(
    557557        a.substr(0, 4)
    558558      )
  • contact-form-ready/trunk/contact-form-ready.php

    r2230921 r3049139  
    44  Plugin URI: http://contactformready.com
    55  Description: The easiest to use Contact Form plugin for WordPress with a drag and drop interface.
    6   Version: 2.0.10
     6  Version: 2.0.12
    77  Author: NickDuncan
    88  Author URI: http://nickduncan.co.za
     
    1111
    1212/**
     13 * 2.0.12 - 2024-03-12
     14 * Enhancement: Rebuilt gutenberg block modules to bring up to specification with latest WordPress guidelines
     15 * Enhancement: PHP8+ compatibility added, first phase of updates
     16 * Bug Fix: Fixed security issue with styling page due to missing nonce checks. Thanks Nguyen Xuan Chien (Patchstack)
     17 * Bug Fix: Fixed security issue with settings page due to missing nonce checks. Thanks Nguyen Xuan Chien (Patchstack)
     18 * Bug Fix: Improved settings/styling storage security by enforcing a user access check
     19 * Bug Fix: Fixed issue with wp_localize_script usage for reset string localization
     20 * Bug Fix: Fixed issue with wp_localize_script usage for demo form structure localization
     21 * Bug Fix: Fixed issues with accessing arrays that may not be defined/stored
     22 * Bug Fix: Fixed issues with REST API registration calls not being up to specification, missing permission callback
     23 * Bug Fix: Standardized localizers to group common strings within an object, instead of making multiple localization calls
     24 * Bug Fix: Fixed issue where form structures were not storing correctly
     25 * Bug Fix: Improved sanitization and escaping workflows throughout the plugin core code
     26 * Bug Fix: Fixed JSON parser issues in user.js
     27 * Bug Fix: Disabled welcome notice, and subsequently feature vote system. No longer active, and caused issues
     28 * General: Tested on WordPress 6.5
     29 * General: Readme brought up to specification
     30 *
     31 * 2.0.11 - 2020-11-30
     32 * Tested on WordPress 5.5.3
     33 * Modernized admin areas
     34 * Added custom secure REST endpoint – ‘get_forms’
     35 * Added REST API tab in Settings
     36 * Added Live Preview on Styling tab
     37 * Added Dark Mode feature for Live Preview on Styling tab
     38 * Added Custom CSS feature
     39 * Bug Fix: Fixed a bug that prevented extension settings from displaying
     40 * Bug Fix: Fixed GDPR warning buttons and links
     41 * Bug Fix: Fixed a bug that prevented custom stylings on front end
     42 * Bug Fix: Fixed various styling issues
     43 * Bug Fix: Fixed various bugs
     44 *
    1345 * 2.0.10 - 2020-01-21
    1446 * Bug Fix: Fixed jQuery() .tabs is not a function
     
    175207class WP_Contact_Form_ND{
    176208
    177     var $current_version;
     209    public $current_version;
     210    public $upload_dir;
     211    public $upload_url;
    178212
    179213    public function __construct(){
    180214
    181         $this->current_version = "2.0.10";
     215        $this->current_version = "2.0.11";
    182216
    183217        $this->upload_dir =(defined('WP_CONTENT_DIR')) ? WP_CONTENT_DIR . '/uploads' : ABSPATH . 'wp-content' . $this->DS() . 'uploads';
     
    196230        add_action( "init", array($this, "check_versions") );
    197231        add_action( "init", array($this, "create_post_type") );
     232        add_action( "init", array($this, "wpcf_nd_create_token") );
    198233        add_action( "plugins_loaded", array($this, "load_plugin_textdomain") );
    199234        add_filter( "wpcf_nd_html_control", array( $this, "wpcf_nd_filter_control_html_control" ), 10, 2 );
     
    228263//      add_action('wpcf_gdpr_reg_cron_hook', array( $this, 'wpcf_gdpr_register_cron') );
    229264
    230         add_filter( 'views_edit-contact-forms-nd', array( $this, 'wpcf_nd_view_message_welcome' ), 10, 1 );
     265        //add_filter( 'views_edit-contact-forms-nd', array( $this, 'wpcf_nd_view_message_welcome' ), 10, 1 );
    231266
    232267        add_filter( 'wp_mail_from', array( $this, 'wpcf_nd_filter_control_from_mail_headers_from_address' ), 10, 1 );
     
    234269
    235270        add_filter( 'codecabin_deactivate_feedback_form_plugins', array( $this, 'wpcf_nd_filter_deactivate_feedback_form' ), 10, 1 );
     271
     272        add_action( 'rest_api_init', array( $this, 'wpcf_rest_routes_init' ));
     273   
     274    }
     275
     276    function wpcf_rest_routes_init(){
     277        register_rest_route('contact-form-ready/v1', '/get_forms',
     278            array(
     279                'methods' => 'GET, POST',
     280                'callback' => array( $this , 'wpcf_nd_get_forms_rest'),
     281                'permission_callback' => '__return_true'
     282            ));
     283    }
     284
     285    function wpcf_nd_get_forms_rest( WP_REST_Request $data ){
     286       
     287        $return_array = array();
     288
     289        if( isset( $data ) ){
     290            if( isset( $data['token'] ) ){
     291                if( $data['token'] == get_option('wpcf_nd_token') ){
     292                    $args = array(
     293                        'post_type' => 'contact-forms-nd',
     294                        'posts_per_page' => -1                   
     295                    );
     296
     297                    $the_query = new WP_Query( $args );
     298                    $forms_array = array();
     299                    if ( $the_query->have_posts() ) {
     300                        while ( $the_query->have_posts() ) {
     301                            $the_query->the_post();
     302                            $forms_array[] = array(
     303                                'title' => get_the_title(),
     304                            );
     305                        }
     306                        wp_reset_postdata();
     307                    }
     308                   
     309                    $return_array['response'] = "Forms returned successfully";
     310                    $return_array['code'] = "200";
     311                    $return_array['data'] = array( $forms_array );
     312                } else {
     313                    $return_array['response'] = "Secret token is invalid";
     314                    $return_array['code'] = "401";
     315                }
     316            } else {
     317                $return_array['response'] = "No 'security' found";
     318                $return_array['code'] = "401";
     319            }
     320        } else{
     321            $return_array['response'] = "No request data found";
     322            $return_array['code'] = "400";
     323        }
     324        return $return_array;
    236325    }
    237326
     
    259348    }
    260349
    261 
    262350    function wpcf_nd_ajax_callback() {
    263 
    264351        /* encoding error fixed 3 march 2015 - albert */
    265352        /* url_decode() shouldn't be used */
    266        
    267        
    268        
    269353        global $wpdb;
    270354        $check = check_ajax_referer('wpcf_close_welcome', 'security');
    271 
    272355        if ($check == 1) {
    273 
    274356            if ($_POST['action'] == "wpcf_close_welcome") {
    275                
    276357                update_user_meta( get_current_user_id(), 'wpcf_nd_hide_welcome_block', true );
    277358                wp_die();
    278359            }
    279 
    280360        }
    281 
    282 
    283     }
    284 
     361    }
    285362
    286363    function redirect_on_activate( $plugin ) {
     
    292369                @ob_end_clean();
    293370                exit( wp_redirect( admin_url( 'admin.php?page=wpcf-settings&action=wpcf_nd_welcome' ) ) );
    294                
    295371            }
    296372        }
     
    299375    function wpcf_nd_control_post() {
    300376        if ( isset( $_POST['wpcf_nd_submit'] ) ) {
    301 
    302377            if ( ! isset( $_POST['wpcf_nonce_field'] ) || ! wp_verify_nonce( $_POST['wpcf_nonce_field'], 'wpcf_nd' ) ) {
    303378                // invalid nonce
    304379            } else {
    305 
    306380                do_action( "wpcf_nd_main_post_control" );
    307                
    308381            }
    309            
    310         }
    311 
     382        }
    312383    }
    313384
     
    341412                    $tmpbody .= "   <td width='50%' align='left' valign='top'><strong>". esc_attr( $k ). "</strong></td><td align='left'>: ". esc_attr( $v ) ."</td>";
    342413                    $tmpbody .= "</tr>";
    343                     $txt_only_sub .= esc_attr( $k ). " : ". esc_attr( $v )."\r\n";
     414                    $txt_only_sub .= esc_attr( $k ). " : ". esc_attr( $v )." \r\n ";
    344415                }
    345416                $tmpbody .= "</table>";
     
    347418                $body .= "  <td width='50%' align='right' valign='top'><strong>". esc_attr( $key ). "</strong></td><td align='left'>" . $tmpbody ."</td>";
    348419                $body .= "</tr>";
    349                 $txt_only .= esc_attr( $key ). " : ". $txt_only_sub."\r\n";
     420                $txt_only .= esc_attr( $key ). " : ". $txt_only_sub." \r\n ";
    350421
    351422            } else {
     
    368439                    $body .= "<td width='50%' align='right' valign='top'><strong>". esc_attr( $key ). "</strong></td><td align='left'>: ". $user_email . "</td>";
    369440                    $body .= "</tr>";                           
    370                     $txt_only .= esc_attr( $key ) . " : " . $user_email . "\r\n";
     441                    $txt_only .= esc_attr( $key ) . " : " . $user_email . " \r\n ";
    371442                } else {
    372443
     
    377448                        $body .= "<td width='50%' align='right' valign='top'><strong>". esc_attr( $key ). "</strong></td><td align='left'>: ". nl2br( esc_attr( $val ) ). "</td>";
    378449                        $body .= "</tr>";
    379                         $txt_only .= esc_attr( $key ) . " : " . esc_attr( $val ) . "\r\n";
     450                        $txt_only .= esc_attr( $key ) . " : " . esc_attr( $val ) . " \r\n ";
    380451
    381452                    }
     
    387458        $cfr_enable_gdpr_delete_button = ( isset($wpcf_nd_settings['wpcf_nd_enable_gdpr_delete_button']) && $wpcf_nd_settings['wpcf_nd_enable_gdpr_delete_button'] == 1 );
    388459        $cfr_enable_gdpr_download_button = ( isset($wpcf_nd_settings['wpcf_nd_enable_gdpr_download_button']) && $wpcf_nd_settings['wpcf_nd_enable_gdpr_download_button'] == 1 );
     460       
    389461        if ( $cfr_enable_gdpr && isset( $_POST['gdpr_agree'] ) ) {
    390462            $value = ( 'on' === $_POST['gdpr_agree'] ) ? __("YES", "wpcf_nd") : __("NO", "wpcf_nd");
     
    393465            $body .= "</tr>";
    394466        }
     467       
    395468        if ( $cfr_enable_gdpr_download_button && isset( $_POST['gdpr_send_data'] ) ) {
    396469            $value = ( 'on' === $_POST['gdpr_send_data'] ) ? __("YES", "wpcf_nd") : __("NO", "wpcf_nd");
     
    399472            $body .= "</tr>";
    400473        }
     474       
    401475        if ( $cfr_enable_gdpr_delete_button && isset( $_POST['gdpr_delete_data'] ) ) {
    402476            $value = ( 'on' === $_POST['gdpr_delete_data'] ) ? __("YES", "wpcf_nd") : __("NO", "wpcf_nd");
     
    408482
    409483        $this->increase_submissions( $cfid );
    410 
    411484
    412485        $data = array(
     
    417490            'post_data' => $_POST,
    418491        );
     492
    419493        $data = apply_filters( 'wpcf_nd_filter_main_post_data', $data, 1, 10 );
    420494
     
    427501            exit();
    428502        }
     503
    429504        global $wpcf_thank_you;
    430 
    431505
    432506        $wpcf_nd_settings = get_option( "wpcf_nd_settings" );
     
    442516    function wpcf_nd_api_post() {
    443517
    444 
    445518        $this->create_contact_form_types();
    446 
    447 
    448519
    449520        if (isset($_POST['action']) && $_POST['action'] == 'wpcf_nd_submit_find_us') {
     
    478549        update_post_meta(intval($cfid), 'cform_submissions', $submissions);
    479550    }
     551
    480552    function increase_views($cfid) {
    481553        $views = intval(get_post_meta( $cfid , 'cform_views' , true ));
     
    488560    }
    489561
    490 
    491 
    492562    function wpcf_nd_filter_control_from_mail_headers_from_address( $email ) {
    493563        $wpcf_nd_settings = get_option( "wpcf_nd_settings" );
     
    500570    }
    501571
    502 
    503572    function wpcf_nd_filter_control_from_mail_headers_from_name( $email ) {
    504573        $wpcf_nd_settings = get_option( "wpcf_nd_settings" );
     
    510579
    511580    }
    512    
    513581
    514582    function wpcf_send_email($cfid,$body,$sent_data) {
     
    516584
    517585        $wpcf_nd_settings = get_option( "wpcf_nd_settings" );
    518 
    519586        $sendto = get_post_meta( $cfid, 'wpcf_nd_send_to', true );
    520 
    521587        if (!$sendto) {
    522588            //set admin email as defaul email address if nothing was set
    523589            $sendto = get_option( 'admin_email' );
    524 
    525590        } else {
    526591            if (is_array($sendto)) {
     
    531596
    532597        $header = sprintf("<a href='%s'>%s</a>",get_option('siteurl'),get_option('blogname'));
    533 
    534598        $orig_body = $body;
    535599
    536600        // SEND TO ADMIN
    537601        $wpcf_nd_settings = get_post_meta( $cfid, 'wpcf_nd_email_sending_settings', true );
    538 
    539602        if( $wpcf_nd_settings == '' ){
    540 
    541603            /**
    542604             * Either new user, or updated to the latest version
    543605             */
    544            
    545606            $wpcf_nd_settings = get_option("wpcf_nd_settings");
    546607            $subject_admin = isset( $wpcf_nd_settings['wpcf_nd_subject_admin'] ) ? $wpcf_nd_settings['wpcf_nd_subject_admin'] : $wpcf_nd_settings['wpcf_nd_subject_admin'] = __("New Contact Form Submission","wpcf_nd");
     
    550611            $cfr_email_subject_user = isset( $wpcf_nd_settings['wpcf_nd_subject_user'] ) ? $wpcf_nd_settings['wpcf_nd_subject_user'] : __("Contact Form Submission Received","wpcf_nd");
    551612            $cfr_email_body_user = isset( $wpcf_nd_settings['wpcf_nd_message_user'] ) ? $wpcf_nd_settings['wpcf_nd_message_user'] : __( "Thank you for your message. We will respond to you as soon as possible." , "wpcf_nd" );;
    552 
    553613        } else {
    554 
    555614            $subject_admin = isset( $wpcf_nd_settings['wpcf_nd_subject_admin'] ) ? $wpcf_nd_settings['wpcf_nd_subject_admin'] : $wpcf_nd_settings['wpcf_nd_subject_admin'] = __("New Contact Form Submission","wpcf_nd");
    556615            $message_admin = isset( $wpcf_nd_settings['wpcf_nd_message_admin'] ) ? $wpcf_nd_settings['wpcf_nd_message_admin'] : $wpcf_nd_settings['wpcf_nd_message_admin'] = __("A new message has been received.","wpcf_nd");
     
    559618            $cfr_email_subject_user = isset( $wpcf_nd_settings['wpcf_nd_subject_user'] ) ? $wpcf_nd_settings['wpcf_nd_subject_user'] : __("Contact Form Submission Received","wpcf_nd");
    560619            $cfr_email_body_user = isset( $wpcf_nd_settings['wpcf_nd_message_user'] ) ? $wpcf_nd_settings['wpcf_nd_message_user'] : __( "Thank you for your message. We will respond to you as soon as possible." , "wpcf_nd" );;
    561 
    562620        }
    563621
     
    568626            'header' => stripslashes( esc_html( $message_admin ) )
    569627        );
     628
    570629        $body = apply_filters( "wpcf_nd_email_wrapper" , $data );       
    571        
    572630
    573631        if ( isset( $sent_data['user_email'] ) && isset( $wpcf_nd_settings['wpcf_nd_send_as_user'] ) && $wpcf_nd_settings['wpcf_nd_send_as_user'] == 1 ) {
     
    592650
    593651        @wp_mail( $sendto , stripslashes( $subject_admin ) , $plaintext , $headers , $attachments );
    594        
    595652
    596653        // SEND TO USER?
    597654        if ( $send_to_user !== '' && $send_to_user == '1' && $sent_data['user_email'] != false) {
    598 
    599655            $data = array(
    600656                'message' => $orig_body,
     
    603659                'header' => stripslashes( esc_html( $cfr_email_body_user ) )
    604660            );
     661
    605662            $body = apply_filters( "wpcf_nd_email_wrapper" , $data );
    606663
     
    614671            @wp_mail( $sent_data['user_email'] , stripslashes( $cfr_email_subject_user ) , $plaintext , $headers , $attachments );
    615672        }
    616 
    617 
    618 
    619673    }
    620674
     
    622676        add_meta_box('wpcf_nd_main', __('Contact Form Data','wpcf_nd'), array( $this, 'wpcf_main_content' ), 'contact-forms-nd', 'normal', 'default');
    623677    }
    624 
    625678
    626679    function wpcf_nd_add_cf_control_metabox( $post ) {
     
    632685        add_meta_box('wpcf_nd_main_support', __('Need help?','wpcf_nd'), array( $this, 'wpcf_main_support' ), 'contact-forms-nd', 'side', 'default');
    633686    }
     687
    634688    function wpcf_main_support( $post ) {
    635689        echo "<p>".sprintf(__( "Browse the <a href='%s' target='_BLANK'>documentation</a>.", "wpcf_nd" ),'http://www.contactformready.com/documentation/')."</p>";
    636690        echo "<p>".sprintf(__( "Or get in touch with <a href='%s'>[email protected]</a>", "wpcf_nd" ), 'mailto:[email protected]'). "</p>";
    637 
    638     }
    639 
     691    }
    640692
    641693    function wpcf_main_ext_metabox( $post ) {
     
    644696
    645697    }
    646 
    647 
    648698
    649699    function wpcf_main_control( $post ) {
     
    660710            }
    661711        }
     712
    662713        $wpcf_nd_redirect_uri = get_post_meta( $post->ID, 'wpcf_nd_redirect_uri', true );
    663714        $submit_string = get_post_meta( $post->ID, 'wpcf_nd_submit_string' , true );
     
    666717            $submit_string = __("Send","wpcf_nd");
    667718        }
     719
    668720        if (!$form_type || $form_type === null) {
    669721            $form_type = '0';
    670722        }
     723
    671724        $wpcf_nd_settings = get_option( "wpcf_nd_settings" );
    672725        $wpcf_nd_basic_settings = get_option( "wpcf_nd_basic_settings" );
    673         $modal_el_attr = $wpcf_nd_basic_settings['wpcf_nd_modal_el_attr'];
    674         $modal_el = $wpcf_nd_basic_settings['wpcf_nd_modal_el'];
    675         $modal_bg = $wpcf_nd_basic_settings['wpcf_nd_modal_bg'];
    676         $modal_opacity = $wpcf_nd_basic_settings['wpcf_nd_modal_opacity'];
    677         $modal_inner_bg = $wpcf_nd_basic_settings['wpcf_nd_modal_inner_bg'];
     726
     727        $modal_el_attr = !empty($wpcf_nd_basic_settings['wpcf_nd_modal_el_attr']) ? $wpcf_nd_basic_settings['wpcf_nd_modal_el_attr'] : '';
     728        $modal_el = !empty($wpcf_nd_basic_settings['wpcf_nd_modal_el']) ? $wpcf_nd_basic_settings['wpcf_nd_modal_el'] : '';
     729        $modal_bg = !empty($wpcf_nd_basic_settings['wpcf_nd_modal_bg']) ? $wpcf_nd_basic_settings['wpcf_nd_modal_bg'] : '';
     730        $modal_opacity = !empty($wpcf_nd_basic_settings['wpcf_nd_modal_opacity']) ? $wpcf_nd_basic_settings['wpcf_nd_modal_opacity'] : '';
     731        $modal_inner_bg = !empty($wpcf_nd_basic_settings['wpcf_nd_modal_inner_bg']) ? $wpcf_nd_basic_settings['wpcf_nd_modal_inner_bg'] : '';
     732       
    678733        if ('' === trim($modal_bg)) {
    679734            $modal_bg = '#222222';
    680735        }
     736
    681737        if ('' === trim($modal_opacity)) {
    682738            $modal_opacity = '0.8';
    683739        }
     740
    684741        if ('' === trim($modal_inner_bg)) {
    685742            $modal_inner_bg = '#ffffff';
    686743        }
    687 
    688744
    689745        $tabs_array = array(
     
    721777                        <td width='250'><label for='wpcf_nd_shortcode'><?php _e("Shortcode","wpcf_nd"); ?></label></td>
    722778                        <td>
    723                             <input id="wpcf-shortcode-input" type='text' readonly value='[cform-nd id="<?php echo $post->ID; ?>"]' />
     779                            <input id="wpcf-shortcode-input" class="wpcf_shortcode_copy" type='text' readonly value='[cform-nd id="<?php echo intval($post->ID); ?>"]' />
    724780                            <span class="wpcf-shortcode-copy-text"><?php _e( 'Copied to clipboard', 'wpcf_nd' ) ?></span>
    725781                            <p class='description'><?php _e("Copy this to your post or page to show the contact form","wpcf_nd"); ?></p>
     
    730786                        <td valign='top'><label for='wpcf_nd_send_to'><?php _e("Send emails to","wpcf_nd"); ?></label></td>
    731787                        <td>
    732                             <input type='text' value='<?php echo $sendto; ?>' id='wpcf_nd_send_to' name='wpcf_nd_send_to' class='regular-text' />
     788                            <input type='text' value='<?php echo esc_attr($sendto); ?>' id='wpcf_nd_send_to' name='wpcf_nd_send_to' class='regular-text' />
    733789                            <p class='description'><?php _e("Multiple emails separated by commas","wpcf_nd"); ?></p>
    734790
     
    738794                        <td valign='top'><label for='wpcf_nd_redirect_uri'><?php _e("Redirect to URL after submit","wpcf_nd"); ?></label></td>
    739795                        <td>
    740                             <input type='text' value='<?php echo $wpcf_nd_redirect_uri; ?>' id='wpcf_nd_redirect_uri' name='wpcf_nd_redirect_uri' class='regular-text code' />
     796                            <input type='text' value='<?php echo esc_attr($wpcf_nd_redirect_uri); ?>' id='wpcf_nd_redirect_uri' name='wpcf_nd_redirect_uri' class='regular-text code' />
    741797                            <p class='description'><?php _e("Example: /thank-you <br>Leave blank for no redirect","wpcf_nd"); ?></p>
    742798                        </td>
     
    744800                    <tr>
    745801                        <td><label for='wpcf_nd_submit_string'><?php _e( "Submit button value", "wpcf_nd" ); ?></label></td>
    746                         <td><input type='text' value='<?php echo $submit_string; ?>' id='wpcf_nd_submit_string' name='wpcf_nd_submit_string' /></td>
     802                        <td><input type='text' value='<?php echo esc_attr($submit_string); ?>' id='wpcf_nd_submit_string' name='wpcf_nd_submit_string' /></td>
    747803                    </tr>
    748804                    <tr>
     
    762818                                <option value="id" <?php selected( $modal_el_attr, 'id' ) ?>><?php _e( "id", "wpcf_nd" ); ?></option>
    763819                            </select>
    764                             <input type='text' value='<?php echo $modal_el; ?>' id='wpcf_nd_modal_el' name='wpcf_nd_modal_el' />
     820                            <input type='text' value='<?php echo esc_attr($modal_el); ?>' id='wpcf_nd_modal_el' name='wpcf_nd_modal_el' />
    765821                            <p class='description'><?php _e("Leave this field empty if you don't want modal window","wpcf_nd"); ?></p>
    766822                        </td>
     
    768824                    <tr class="wpcf-modal-customization is-active">
    769825                        <td><label for='wpcf_nd_modal_bg'><?php _e( "Modal wrapper background color", "wpcf_nd" ); ?></label></td>
    770                         <td><input type='text' value='<?php echo $modal_bg; ?>' id='wpcf_nd_modal_bg' class='wpcf-color-input' name='wpcf_nd_modal_bg' /></td>
     826                        <td><input type='color' value='<?php echo esc_attr($modal_bg); ?>' id='wpcf_nd_modal_bg' class='wpcf-color-input' name='wpcf_nd_modal_bg' /></td>
    771827                    </tr>
    772828                    <tr class="wpcf-modal-customization is-active">
    773829                        <td><label for='wpcf_nd_modal_opacity'><?php _e( "Modal wrapper opacity", "wpcf_nd" ); ?></label></td>
    774830                        <td>
    775                             <input type='text' value='<?php echo $modal_opacity; ?>' id='wpcf_nd_modal_opacity' name='wpcf_nd_modal_opacity' />
     831                            <input type='text' value='<?php echo floatval($modal_opacity); ?>' id='wpcf_nd_modal_opacity' name='wpcf_nd_modal_opacity' />
    776832                            <p class='description'><?php _e("Please type value between 0 and 1 (default 0.8)","wpcf_nd"); ?></p>
    777833                        </td>
     
    779835                    <tr class="wpcf-modal-customization is-active">
    780836                        <td><label for='wpcf_nd_modal_inner_bg'><?php _e( "Modal inner background", "wpcf_nd" ); ?></label></td>
    781                         <td><input type='text' value='<?php echo $modal_inner_bg; ?>' id='wpcf_nd_modal_inner_bg' class='wpcf-color-input' name='wpcf_nd_modal_inner_bg' /></td>
     837                        <td><input type='color' value='<?php echo esc_attr($modal_inner_bg); ?>' id='wpcf_nd_modal_inner_bg' class='wpcf-color-input' name='wpcf_nd_modal_inner_bg' /></td>
    782838                    </tr>
    783839                    <?php do_action( "wpcf_hook_form_builder_table_bottom", $post, $wpcf_nd_settings ); ?>
     
    809865                        $cfr_email_body_user = ( isset($wpcf_nd_settings['wpcf_nd_message_user'] ) ) ? $wpcf_nd_settings['wpcf_nd_message_user'] : "";
    810866
     867
     868                       
     869
    811870                    } else {
    812871
     
    829888                    <tr>
    830889                        <td width='250'><?php _e("Email subject (admin)","wpcf_nd"); ?></td>
    831                         <td><input type='text' name='wpcf_nd_subject_admin' class='regular-text' id='wpcf_nd_subject_admin' value='<?php echo $cfr_email_subject_admin ?>' /></td>
     890                        <td><input type='text' name='wpcf_nd_subject_admin' class='regular-text' id='wpcf_nd_subject_admin' value='<?php echo esc_attr($cfr_email_subject_admin) ?>' /></td>
    832891                    </tr>
    833892                    <tr>
    834893                        <td><?php _e("Email body (admin)","wpcf_nd"); ?></td>
    835                         <td><input type='text' name='wpcf_nd_message_admin' class='regular-text' id='wpcf_nd_message_admin' value='<?php echo $cfr_email_body_admin ?>' /></td>
     894                        <td><input type='text' name='wpcf_nd_message_admin' class='regular-text' id='wpcf_nd_message_admin' value='<?php echo esc_attr($cfr_email_body_admin) ?>' /></td>
    836895                    </tr>
    837896
     
    853912                    <tr>
    854913                        <td><?php _e("Email subject (user)","wpcf_nd"); ?></td>
    855                         <td><input type='text' name='wpcf_nd_subject_user' class='regular-text' id='wpcf_nd_subject_user' value='<?php echo $cfr_email_subject_user; ?>' /></td>
     914                        <td><input type='text' name='wpcf_nd_subject_user' class='regular-text' id='wpcf_nd_subject_user' value='<?php echo esc_attr($cfr_email_subject_user); ?>' /></td>
    856915                    </tr>
    857916                    <tr>
    858917                        <td><?php _e("Email body (user)","wpcf_nd"); ?></td>
    859                         <td><input type='text' name='wpcf_nd_message_user' class='regular-text' id='wpcf_nd_message_user' value='<?php echo $cfr_email_body_user; ?>' /></td>
     918                        <td><input type='text' name='wpcf_nd_message_user' class='regular-text' id='wpcf_nd_message_user' value='<?php echo esc_attr($cfr_email_body_user); ?>' /></td>
    860919                    </tr>
    861920
     
    902961        <h2 id="cfr-nd-privacy"><?php _e("Privacy","wpcf_nd"); ?></h2>
    903962
    904         <table class='wp-list-table widefat striped fixed'>
     963        <table class='wp-list-table fixed'>
    905964            <tr>
    906965                <td width='250'><label for='wpcf_nd_enable_gdpr'><?php _e("Enable GDPR Compliance","wpcf_nd"); ?></label></td>
    907966                <td>
    908                     <input type='checkbox' name='wpcf_nd_enable_gdpr' id='wpcf_nd_enable_gdpr' value='1' <?php echo $cfr_enable_gdpr; ?> /> <span class='description'><?php echo sprintf(__("<a href='%s' target='_BLANK'>Importance of GDPR Compliance</a>","wpcf_nd"),"https://www.eugdpr.org/");  ?></span>
     967                    <input type='checkbox' name='wpcf_nd_enable_gdpr' id='wpcf_nd_enable_gdpr' value='1' <?php echo $cfr_enable_gdpr; ?> /> <span class='description'><?php echo sprintf(__("<a href='%s' target='_BLANK'>Importance of GDPR Compliance</a>","wpcf_nd"),"https://gdpr.eu/");  ?></span>
    909968                </td>
    910969            </tr>
    911970            <tr>
    912                 <td width='250'><?php _e("Company Name","wpcf_nd"); ?></td>
    913                 <td><input type='text' name='wpcf_nd_gdpr_company_name' class='regular-text' id='wpcf_nd_gdpr_company_name' value='<?php echo $cfr_gdpr_company_name; ?>' /></td>
     971                <td width='250'><label for="wpcf_nd_gdpr_company_name"><?php _e("Company Name","wpcf_nd"); ?></label></td>
     972                <td><input type='text' name='wpcf_nd_gdpr_company_name' class='regular-text' id='wpcf_nd_gdpr_company_name' value='<?php echo esc_attr($cfr_gdpr_company_name); ?>' /></td>
    914973            </tr>
    915974            <tr>
    916                 <td width='250'><?php _e("Retention Purpose","wpcf_nd"); ?></td>
    917                 <td><input type='text' name='wpcf_nd_gdpr_retention_purpose' class='regular-text' id='wpcf_nd_gdpr_retention_purpose' value='<?php echo $cfr_gdpr_retention_purpose; ?>' /></td>
     975                <td width='250'><label for="wpcf_nd_gdpr_retention_purpose"><?php _e("Retention Purpose","wpcf_nd"); ?></label></td>
     976                <td><input type='text' name='wpcf_nd_gdpr_retention_purpose' class='regular-text' id='wpcf_nd_gdpr_retention_purpose' value='<?php echo esc_attr($cfr_gdpr_retention_purpose); ?>' /></td>
    918977            </tr>
    919978            <tr>
    920979                <td width='250'><label for='wpcf_nd_gdpr_retention_period'><?php _e("Retention Period","wpcf_nd"); ?></label></td>
    921                 <td><input type='text' name='wpcf_nd_gdpr_retention_period' id='wpcf_nd_gdpr_retention_period' value='<?php echo $cfr_gdpr_retention_period; ?>' /> <span class='description'><?php echo __("days","wpcf_nd");  ?></span></td>
     980                <td><input type='text' name='wpcf_nd_gdpr_retention_period' id='wpcf_nd_gdpr_retention_period' value='<?php echo intval($cfr_gdpr_retention_period); ?>' /> <span class='description'><?php echo __("days","wpcf_nd");  ?></span></td>
    922981            </tr>
    923982            <tr>
    924                 <td width='250'><?php _e("GDPR Notice","wpcf_nd"); ?></td>
    925                 <td><textarea name='wpcf_nd_gdpr_notice' class='regular-text' id='wpcf_nd_gdpr_notice' rows="6"><?php echo $cfr_gdpr_notice; ?></textarea></td>
     983                <td width='250'><label for="wpcf_nd_gdpr_notice"><?php _e("GDPR Notice","wpcf_nd"); ?></label></td>
     984                <td><textarea name='wpcf_nd_gdpr_notice' class='regular-text' id='wpcf_nd_gdpr_notice' rows="6"><?php echo esc_attr($cfr_gdpr_notice); ?></textarea></td>
    926985            </tr>
    927986            <tr>
     
    9521011            }
    9531012            if ( ! $cfr_enable_gdpr ) { ?>
    954                 <div class="update-nag notice notice-error is-dismissible" style="border-color: #dd0000; max-width: 600px;margin-left: 0;">
     1013                <div class="update-nag notice notice-error is-dismissible wpcf_gdpr_notice" style="border-color: #dd0000; max-width: 600px;margin-left: 0; display:block;">
    9551014                    <p><strong><?php _e( 'Warning - GDPR Compliance Disabled - Action Required', 'wpcf_nd' ); ?></strong></p>
    956                     <p><?php _e( 'GDPR compliance has been disabled, read more about the implications of this here:', 'wpcf_nd' ); ?> <a href="#">EU GDPR</a> </p>
    957                     <p><?php _e( 'Additionally please take a look at Contact Form Ready', 'wpcf_nd' ); ?> <a href="#">Privacy Policy</a> </p>
     1015                    <p><?php _e( 'GDPR compliance has been disabled, read more about the implications of this here:', 'wpcf_nd' ); ?> <a href="https://gdpr.eu/">EU GDPR</a> </p>
     1016                    <p><?php _e( 'Additionally please take a look at Contact Form Ready', 'wpcf_nd' ); ?> <a href="https://www.contactformready.com/documentation/privacy-policy/">Privacy Policy</a> </p>
    9581017                    <p><?php _e( 'It is highly recommended that you enable GDPR compliance to ensure your user data is regulated.', 'wpcf_nd' ); ?></p>
    959                     <p><a href="?post_type=contact-forms-nd&page=wpcf-settings#cfr-nd-privacy" class="button"><?php _e( 'Privacy Settings', 'wpcf_nd' ) ?></a></p>
     1018                    <p><a id="GDPR_privacy_settings_button" href="edit.php?post_type=contact-forms-nd&page=wpcf-settings#cfr-nd-privacy" class="button"><?php _e( 'Privacy Settings', 'wpcf_nd' ) ?></a></p>
    9601019                </div>
    9611020                <?php
     
    9771036
    9781037        $htmls = get_post_meta( $post->ID, 'wpcf_nd_html_data', true );
     1038
    9791039        $formdata = get_post_meta( $post->ID, 'wpcf_nd_form_data', true );
    9801040        $formdata = preg_replace('/>\s+</', "><", $formdata);
     
    9821042        $contact_form_types = get_option("wpcf_nd_contact_forms");
    9831043
    984 
    985 
    986 
    9871044        ?>
    988         <script>
    989             //var tmpdata = '<?php echo trim($formdata); ?>';
    990             //var tmpformData = JSON.stringify(tmpdata);
    991 
    992         </script>
    993 
    994         <form action='' method='POST' novalidate>
    995 
    996 
    997         <!-- Building Form. -->
    998         <div class="col-sm-12">
    999             <h3 class="tagline"><?php _e("Select from a predefined list","wpcf_nd"); ?></h3>
    1000             <select name='wpcf_nd_predfined' id='wpcf_nd_predfined'>
    1001                 <option value='x'><?php _e("Please select","wpcf_nd"); ?></option>
    1002                 <?php
    1003                    
    1004                     foreach ($contact_form_types as $key => $data) {
    1005                         echo "\t<option value='".$key."'>".$data['title']."</option>".PHP_EOL;
    1006                     }
    1007                 ?>
    1008             </select>
    1009         </div>
    1010         <p>&nbsp;</p>
    1011 
    1012         <hr />
    1013 
    1014         <p>&nbsp;</p>
    1015 
    1016 
     1045            <!-- Building Form. -->
     1046            <div class="col-sm-12">
     1047                <h3 class="tagline"><?php _e("Select from a predefined list","wpcf_nd"); ?></h3>
     1048                <select name='wpcf_nd_predfined' id='wpcf_nd_predfined'>
     1049                    <option value='x'><?php _e("Please select","wpcf_nd"); ?></option>
     1050                    <?php
     1051                       
     1052                        foreach ($contact_form_types as $key => $data) {
     1053                            echo "\t<option value='".$key."'>".$data['title']."</option>".PHP_EOL;
     1054                        }
     1055                    ?>
     1056                </select>
     1057            </div>
     1058
     1059            <p>&nbsp;</p>
     1060            <hr />
     1061            <p>&nbsp;</p>
    10171062       
    1018             <!-- YES -->
    1019         <!-- Building Form. -->
    1020         <div class="col-sm-12">
    1021             <h3 class="tagline"><?php _e("Drag and drop the elements to create your contact form.","wpcf_nd"); ?></h3>
    1022             <section id="main_content" class="inner">
    1023                 <div class="build-wrap"></div>
    1024                 <div class="render-wrap"></div>
    1025             </section>
    1026         </div>
    1027        
    1028 
    1029          <textarea id="fb-temp-formdata" name="fb-temp-formdata" style='width:100%; display:none;'><?php echo $formdata; ?></textarea>
    1030          <textarea id="fb-temp-htmldata" name="fb-temp-htmldata" style='width:100%; display:none;'><?php echo htmlentities($htmls); ?></textarea>
    1031 
    1032         <!-- / Components -->
     1063            <!-- Building Form. -->
     1064            <div class="col-sm-12">
     1065                <h3 class="tagline"><?php _e("Drag and drop the elements to create your contact form.","wpcf_nd"); ?></h3>
     1066                <section id="main_content" class="inner">
     1067                    <div class="build-wrap"></div>
     1068                    <div class="render-wrap"></div>
     1069                </section>
     1070            </div>
     1071                       
     1072
     1073
     1074            <textarea id="fb-temp-formdata" name="fb-temp-formdata" style='width:100%; display:none;'><?php echo $formdata; ?></textarea>
     1075            <textarea id="fb-temp-htmldata" name="fb-temp-htmldata" style='width:100%; display:none;'><?php echo htmlentities($htmls); ?></textarea>
     1076
     1077            <!-- / Components -->
    10331078
    10341079        </form>
     
    10461091        // Bail if we're doing an auto save
    10471092        if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
    1048          
     1093       
    10491094        // if our nonce isn't there, or we can't verify it, bail
    10501095        if( !isset( $_POST['wpcf_nd_nonce'] ) || !wp_verify_nonce( $_POST['wpcf_nd_nonce'], 'wpcf_nd_add_events_metaboxes' ) )  {
    10511096            return;
    10521097        }
     1098
    10531099         
    10541100        // if our current user can't edit this post, bail
    1055         if( !@current_user_can( 'edit_post' ) ) return;
     1101        if(!@current_user_can('edit_post', $post_id)) return;   
    10561102
    10571103
     
    11671213            $post_html_data = $_POST['fb-temp-htmldata'];
    11681214            $post_html_data = str_replace(array("\r", "\n"), '', $post_html_data);
     1215
    11691216            update_post_meta( $post_id, 'wpcf_nd_html_data', wp_kses( $post_html_data , $allowed_html ) );
    11701217        }
     
    12731320        update_option( 'wpcf_nd_basic_settings', $wpcf_nd_basic_settings );
    12741321
    1275         do_action ( "wpcf_nd_hook_save_meta_box_control", $post_id, $_POST );
    1276        
    1277     }
    1278 
    1279 
     1322        do_action ( "wpcf_nd_hook_save_meta_box_control", $post_id, $_POST );
     1323         
     1324    }
    12801325
    12811326    function check_versions() {
    1282 
    12831327        $current_option = get_option("wpcf_nd_version");
    1284        
    1285 
    12861328        if ($current_option !== $this->current_version) {
    12871329            $this->handle_defaults();
     
    12901332        }
    12911333    }
     1334
    12921335    function create_post_type() {
    1293        
    12941336        $labels = array(
    12951337            'name' => __('Contact Forms', 'wpcf_nd'),
     
    13061348            'menu_name' => __('Contact Forms', 'wpcf_nd')
    13071349        );
     1350
    13081351        $args = array(
    13091352            'labels' => $labels,
     
    13211364            'menu_icon' => 'dashicons-email-alt'
    13221365        );
     1366
    13231367        if (post_type_exists('contact-forms-nd')) {
    13241368
     
    13281372
    13291373        }
    1330 
    13311374    }
    13321375
     
    13361379    }
    13371380
     1381    function wpcf_nd_create_token(){
     1382        $wpcf_nd_token = get_option('wpcf_nd_token');
     1383        if( !$wpcf_nd_token || $wpcf_nd_token == "" ){
     1384            $wpcf_nd_new_token = md5( time()."wpcf_nd_token" );
     1385            update_option( 'wpcf_nd_token', $wpcf_nd_new_token );
     1386        }
     1387    }
     1388   
    13381389    function create_contact_form_types($force = false) {
    13391390        /* contact form types */
     
    13741425        $wpcf_nd_settings = get_option("wpcf_nd_settings");
    13751426        $wpcf_nd_styling = get_option("wpcf_nd_styling");
     1427       
    13761428        /**
    13771429         * defaults here
    13781430         */
    1379 
    13801431        if (!isset($wpcf_nd_settings['wpcf_nd_email_from_address']))
    13811432            $wpcf_nd_settings['wpcf_nd_email_from_address'] = get_option( 'admin_email' );
     
    14651516    }
    14661517
    1467    
    1468 
    1469 
    14701518    private function admin_scripts() {
    14711519        add_action('admin_print_scripts', array($this, 'load_admin_scripts'));
    14721520        add_action('admin_print_styles', array($this, 'load_admin_styles'));
    14731521    }
     1522
    14741523    private function user_scripts() {
    14751524        add_action('wp_head', array($this, 'load_user_scripts'));
     1525    }
     1526
     1527    function load_user_scripts() {
     1528        $wpcf_nonce = wp_create_nonce("wpcf_nd_front");
     1529        $wpcf_ajaxurl = admin_url('admin-ajax.php');
     1530
     1531        $wpcf_nd_settings = get_option("wpcf_nd_settings");
     1532
     1533        wp_enqueue_script( 'jquery' );
     1534        wp_enqueue_script( 'jquery-ui-core' );
     1535        wp_enqueue_script( 'jquery-ui-tooltip' );
     1536
     1537        wp_enqueue_style( 'cfr-jquery-ui', '//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"' );
     1538
     1539        wp_register_script( 'contact-form-ready', plugins_url(plugin_basename(dirname(__FILE__)))."/js/user.js", true, $this->current_version );
     1540        //localize invisible recaptcha settings
     1541        $wpcf_nd_settings = get_option( "wpcf_nd_settings" );
     1542
     1543        $invisible_recaptcha_localize_options = array(
     1544            'invisible_recaptcha_enabled' => !empty($wpcf_nd_settings['wpcf_nd_enable_invisible_recaptcha']) ? $wpcf_nd_settings['wpcf_nd_enable_invisible_recaptcha'] == '1' : "",
     1545            'wpcf_invisible_recaptcha_api' => !empty($wpcf_nd_settings['wpcf_nd_invisible_recaptcha_site_key']) ? $wpcf_nd_settings['wpcf_nd_invisible_recaptcha_site_key'] : ""
     1546        ); 
     1547
     1548        if (!isset($wpcf_nd_settings['wpcf_nd_message_user'])){
     1549            $wpcf_nd_settings['wpcf_nd_message_user'] = __("Thank you for your message. We will respond to you as soon as possible.","wpcf_nd");
     1550        }
     1551
     1552        $localizedData = array();
    14761553       
    1477     }
    1478 
    1479     function load_user_scripts() {
    1480             $wpcf_nonce = wp_create_nonce("wpcf_nd_front");
    1481             $wpcf_ajaxurl = admin_url('admin-ajax.php');
    1482 
    1483             $wpcf_nd_settings = get_option("wpcf_nd_settings");
    1484 
    1485             wp_enqueue_script( 'jquery' );
    1486             wp_enqueue_script( 'jquery-ui-core' );
    1487             wp_enqueue_script( 'jquery-ui-tooltip' );
    1488 
    1489             wp_enqueue_style( 'cfr-jquery-ui', '//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"' );
    1490 
    1491             wp_register_script( 'contact-form-ready', plugins_url(plugin_basename(dirname(__FILE__)))."/js/user.js", true, $this->current_version );
    1492             //localize invisible recaptcha settings
    1493             $wpcf_nd_settings = get_option( "wpcf_nd_settings" );
    1494 
    1495             $invisible_recaptcha_localize_options = array(
    1496                 'invisible_recaptcha_enabled' => $wpcf_nd_settings['wpcf_nd_enable_invisible_recaptcha'] == '1',
    1497                 'wpcf_invisible_recaptcha_api' => $wpcf_nd_settings['wpcf_nd_invisible_recaptcha_site_key']
    1498             );
    1499          
    1500             wp_localize_script( 'contact-form-ready', 'invisible_recaptcha_options', $invisible_recaptcha_localize_options);
    1501             wp_enqueue_script( 'contact-form-ready' );
    1502             wp_localize_script( 'contact-form-ready', 'wpcf_nd_nonce', $wpcf_nonce );
    1503             wp_localize_script( 'contact-form-ready', 'wpcf_nd_ajaxurl', $wpcf_ajaxurl );
    1504 
    1505             if (!isset($wpcf_nd_settings['wpcf_nd_message_user']))
    1506               $wpcf_nd_settings['wpcf_nd_message_user'] = __("Thank you for your message. We will respond to you as soon as possible.","wpcf_nd");
    1507 
    1508             wp_localize_script( 'contact-form-ready', 'wpcf_nd_ajax_thank_you', stripslashes( esc_html( $wpcf_nd_settings['wpcf_nd_message_user'] ) ) );
    1509             wp_localize_script( 'contact-form-ready', 'wpcf_nd_ajax_sending', __("Sending...","wpcf_nd") );
    1510            
    1511             do_action( "wpcf_user_js" );
    1512 
    1513 
     1554        wp_enqueue_script( 'contact-form-ready' );
     1555
     1556        $localizedData['invisible_recaptcha_options'] = $invisible_recaptcha_localize_options;
     1557        $localizedData['wpcf_nd_nonce'] = $wpcf_nonce;
     1558        $localizedData['wpcf_nd_ajaxurl'] = $wpcf_ajaxurl;
     1559
     1560        $localizedData['wpcf_nd_ajax_thank_you'] = stripslashes( esc_html( $wpcf_nd_settings['wpcf_nd_message_user'] ) ) ;
     1561        $localizedData['wpcf_nd_ajax_sending'] = __("Sending...","wpcf_nd");
     1562
     1563        wp_localize_script( 'contact-form-ready', 'wpcf_localized_client', $localizedData );
     1564       
     1565        do_action( "wpcf_user_js" );
    15141566    }
    15151567
     
    15181570        global $post_type;
    15191571        global $post;
     1572
    15201573        if( "contact-forms-nd" == $post_type ) {
    1521 
    15221574            wp_enqueue_script( 'jquery' );
    15231575            wp_enqueue_script( 'jquery-ui-core' );
     
    15391591
    15401592            wp_localize_script( 'wpcf-admin', 'wpcf_nd_types', $contact_form_types );
    1541 
    15421593            if ( is_object( $post ) ) {
    15431594                $formdata = get_post_meta( $post->ID, 'wpcf_nd_form_data', true );
    15441595                $formdata = preg_replace('/>\s+</', "><", $formdata);
    15451596                if(empty($formdata)){
    1546                     $formdata = 'false';
     1597                    $formdata = false;
    15471598                }
    1548                 wp_localize_script( 'wpcf-admin', 'tmpformData', $formdata );
     1599                wp_localize_script( 'wpcf-admin', 'tmpformData', array('json' => $formdata) );
    15491600            } else {
    1550                 wp_localize_script( 'wpcf-admin', 'tmpformData', 'false' );
     1601                wp_localize_script( 'wpcf-admin', 'tmpformData', false );
    15511602            }
    1552 
    1553             wp_enqueue_style( 'wp-color-picker' );
    1554             wp_enqueue_script( 'iris', admin_url( 'js/iris.min.js' ), array(
    1555                 'jquery-ui-draggable',
    1556                 'jquery-ui-slider',
    1557                 'jquery-touch-punch'
    1558             ), false, 1 );
    1559 
    1560         }
    1561 
    1562 
    1563         if ( isset( $_GET['page'] ) && $_GET['page'] == 'wpcf-styling') {
    1564             wp_enqueue_style( 'wp-color-picker' );
    1565             wp_enqueue_script( 'iris', admin_url( 'js/iris.min.js' ), array(
    1566                 'jquery-ui-draggable',
    1567                 'jquery-ui-slider',
    1568                 'jquery-touch-punch'
    1569             ), false, 1 );
    1570         }
     1603           
     1604        }
     1605
    15711606        if ( isset( $_GET['page'] ) && $_GET['page'] == 'wpcf-settings') {
    15721607            wp_register_script( 'wpcf-admin-settings', plugins_url(plugin_basename(dirname(__FILE__)))."/js/admin_settings.js", true );
     
    15811616            wp_register_style( 'wpcf-codemirror-theme', plugins_url(plugin_basename(dirname(__FILE__)))."/assets/codemirror/monokai.css", true );
    15821617            wp_enqueue_style( 'wpcf-codemirror-theme' );
    1583             wp_localize_script( 'wpcf-admin-settings', 'wpcf_nd_confirm_restore_template_string', __( 'Are you sure you want to restore the default newsletter template?', 'wpcf_nd' ) );
     1618            wp_localize_script( 'wpcf-admin-settings', 'wpcf_nd_confirm_restore_template_string', array('label' => __( 'Are you sure you want to restore the default newsletter template?', 'wpcf_nd' )) );
    15841619            wp_register_script( 'wpcf-codemirror-script', plugins_url(plugin_basename(dirname(__FILE__)))."/assets/codemirror/codemirror.js", true );
    15851620            wp_enqueue_script( 'wpcf-codemirror-script' );
     
    15951630        }
    15961631    }
     1632
    15971633    function load_admin_styles() {
    15981634        global $post_type;
     
    16041640
    16051641            wp_enqueue_style( 'contact-form-ready-jquery-ui', '//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css' );
    1606 
    1607         }
    1608     }
    1609 
     1642        }
     1643    }
    16101644
    16111645    private function DS() {
     
    16141648        } else {
    16151649            return '/';
    1616            
    16171650        }
    16181651    }
     
    16261659    function wpcf_nd_save_settings() {
    16271660        $this->wpcf_gdpr_check_for_cron();
     1661    }
     1662
     1663    function wpcf_can_save_settings(){
     1664        if(current_user_can('manage_options')){
     1665            $nonce = !empty($_POST['wpcf_save_settings']) ? $_POST['wpcf_save_settings'] : false;
     1666            if(!empty($nonce) && wp_verify_nonce($nonce, 'wpcf_save_settings')){
     1667                return true;
     1668            }
     1669        }
     1670        return false;
    16281671    }
    16291672
     
    17611804        </div>
    17621805
    1763 
     1806        <div class="wpcf-extension">
     1807            <h3 class="wpcf-extension-title">Zapier</h3>
     1808            <a href="" title="Zapier Extension" target="_BLANK">
     1809                <img width="256" height="256" src="<?php echo plugins_url(plugin_basename(dirname(__FILE__)))."/images/Zapier.png" ?>" class="attachment-showcase wp-post-image" alt="Zapier Extension" title="Zapier Extension">
     1810            </a>
     1811            <p></p>
     1812            <p></p>
     1813            <div class="wpcf-extension-label-box"></div>
     1814            <p>Price: <em>$4.99 once off</em></p>
     1815            <p>Integrate your forms with many different Zapier apps</p>         
     1816            <a href="https://www.contactformready.com/extensions/zapier/?utm_source=plugin&amp;utm_medium=link&amp;utm_campaign=zapier" title="Zapier Extension" class="button-secondary" target="_BLANK">Get this add-on</a>
     1817        </div>
     1818       
    17641819        <?php
    17651820    }
     
    18141869
    18151870        if (isset($_POST['wpcf_submit_save_styling'])) {
    1816 
    1817             if ( isset( $_POST['wpcf_nd_enable_style'] ) ){
    1818                 $wpcf_nd_styling['wpcf_nd_enable_style'] = 1;
    1819             } else {
    1820                 $wpcf_nd_styling['wpcf_nd_enable_style'] = 0;
     1871            if($this->wpcf_can_save_settings()){
     1872
     1873                if ( isset( $_POST['wpcf_nd_enable_style'] ) ){
     1874                    $wpcf_nd_styling['wpcf_nd_enable_style'] = 1;
     1875                } else {
     1876                    $wpcf_nd_styling['wpcf_nd_enable_style'] = 0;
     1877                }
     1878
     1879                if ( isset( $_POST['wpcf_nd_label_font_size'] ) ){
     1880                    $wpcf_nd_styling['wpcf_nd_label_font_size'] = sanitize_text_field( $_POST['wpcf_nd_label_font_size'] );
     1881                } else {
     1882                    $wpcf_nd_styling['wpcf_nd_label_font_size'] = '';
     1883                }
     1884
     1885                if ( isset( $_POST['wpcf_nd_label_font_weight'] ) ){
     1886                    $wpcf_nd_styling['wpcf_nd_label_font_weight'] = sanitize_text_field( $_POST['wpcf_nd_label_font_weight'] );
     1887                } else {
     1888                    $wpcf_nd_styling['wpcf_nd_label_font_weight'] = '';
     1889                }
     1890
     1891                if ( isset( $_POST['wpcf_nd_label_color'] ) ){
     1892                    $wpcf_nd_styling['wpcf_nd_label_color'] = sanitize_text_field( $_POST['wpcf_nd_label_color'] );
     1893                } else {
     1894                    $wpcf_nd_styling['wpcf_nd_label_color'] = '';
     1895                }
     1896
     1897                if ( isset( $_POST['wpcf_nd_input_bg_color'] ) ){
     1898                    $wpcf_nd_styling['wpcf_nd_input_bg_color'] = sanitize_text_field( $_POST['wpcf_nd_input_bg_color'] );
     1899                } else {
     1900                    $wpcf_nd_styling['wpcf_nd_input_bg_color'] = '';
     1901                }
     1902
     1903                if ( isset( $_POST['wpcf_nd_input_border_color'] ) ){
     1904                    $wpcf_nd_styling['wpcf_nd_input_border_color'] = sanitize_text_field( $_POST['wpcf_nd_input_border_color'] );
     1905                } else {
     1906                    $wpcf_nd_styling['wpcf_nd_input_border_color'] = '';
     1907                }
     1908
     1909                if ( isset( $_POST['wpcf_nd_input_border_focus_color'] ) ){
     1910                    $wpcf_nd_styling['wpcf_nd_input_border_focus_color'] = sanitize_text_field( $_POST['wpcf_nd_input_border_focus_color'] );
     1911                } else {
     1912                    $wpcf_nd_styling['wpcf_nd_input_border_focus_color'] = '';
     1913                }
     1914
     1915                if ( isset( $_POST['wpcf_nd_input_font_size'] ) ){
     1916                    $wpcf_nd_styling['wpcf_nd_input_font_size'] = sanitize_text_field( $_POST['wpcf_nd_input_font_size'] );
     1917                } else {
     1918                    $wpcf_nd_styling['wpcf_nd_input_font_size'] = '';
     1919                }
     1920
     1921                if ( isset( $_POST['wpcf_nd_input_font_color'] ) ){
     1922                    $wpcf_nd_styling['wpcf_nd_input_font_color'] = sanitize_text_field( $_POST['wpcf_nd_input_font_color'] );
     1923                } else {
     1924                    $wpcf_nd_styling['wpcf_nd_input_font_color'] = '';
     1925                }
     1926
     1927                if ( isset( $_POST['wpcf_nd_submit_bg_color'] ) ){
     1928                    $wpcf_nd_styling['wpcf_nd_submit_bg_color'] = sanitize_text_field( $_POST['wpcf_nd_submit_bg_color'] );
     1929                } else {
     1930                    $wpcf_nd_styling['wpcf_nd_submit_bg_color'] = '';
     1931                }
     1932
     1933                if ( isset( $_POST['wpcf_nd_submit_bg_hover_color'] ) ){
     1934                    $wpcf_nd_styling['wpcf_nd_submit_bg_hover_color'] = sanitize_text_field( $_POST['wpcf_nd_submit_bg_hover_color'] );
     1935                } else {
     1936                    $wpcf_nd_styling['wpcf_nd_submit_bg_hover_color'] = '';
     1937                }
     1938
     1939                if ( isset( $_POST['wpcf_nd_submit_font_size'] ) ){
     1940                    $wpcf_nd_styling['wpcf_nd_submit_font_size'] = sanitize_text_field( $_POST['wpcf_nd_submit_font_size'] );
     1941                } else {
     1942                    $wpcf_nd_styling['wpcf_nd_submit_font_size'] = '';
     1943                }
     1944
     1945                if ( isset( $_POST['wpcf_nd_submit_font_color'] ) ){
     1946                    $wpcf_nd_styling['wpcf_nd_submit_font_color'] = sanitize_text_field( $_POST['wpcf_nd_submit_font_color'] );
     1947                } else {
     1948                    $wpcf_nd_styling['wpcf_nd_submit_font_color'] = '';
     1949                }
     1950
     1951                if ( isset( $_POST['wpcf_nd_submit_font_weight'] ) ){
     1952                    $wpcf_nd_styling['wpcf_nd_submit_font_weight'] = sanitize_text_field( $_POST['wpcf_nd_submit_font_weight'] );
     1953                } else {
     1954                    $wpcf_nd_styling['wpcf_nd_submit_font_weight'] = '';
     1955                }
     1956
     1957                if ( isset( $_POST['wpcf_nd_submit_text_transform'] ) ){
     1958                    $wpcf_nd_styling['wpcf_nd_submit_text_transform'] = sanitize_text_field( $_POST['wpcf_nd_submit_text_transform'] );
     1959                } else {
     1960                    $wpcf_nd_styling['wpcf_nd_submit_text_transform'] = '';
     1961                }
     1962
     1963                $wpcf_nd_styling = apply_filters("wpcf_filter_save_styling", $wpcf_nd_styling, $_POST);
     1964                $updated_wpcf_nd_style_settings = update_option( "wpcf_nd_styling" , $wpcf_nd_styling );
     1965                if($updated_wpcf_nd_style_settings){
     1966                    echo "
     1967                        <div class=\"updated\">
     1968                            <p>".__('Style Settings Saved', 'wpcf_nd')."</p>
     1969                        </div>
     1970                    ";
     1971                } else {
     1972                    echo "
     1973                        <div class=\"error\">
     1974                            <p>".__('No changes were made', 'wpcf_nd')."</p>
     1975                        </div>
     1976                    ";
     1977                }
     1978            } else {
     1979                echo "
     1980                        <div class=\"error\">
     1981                            <p>".__('No changes were made', 'wpcf_nd')."</p>
     1982                        </div>
     1983                    ";
    18211984            }
    1822 
    1823             if ( isset( $_POST['wpcf_nd_label_font_size'] ) ){
    1824                 $wpcf_nd_styling['wpcf_nd_label_font_size'] = sanitize_text_field( $_POST['wpcf_nd_label_font_size'] );
    1825             } else {
    1826                 $wpcf_nd_styling['wpcf_nd_label_font_size'] = '';
    1827             }
    1828 
    1829             if ( isset( $_POST['wpcf_nd_label_font_weight'] ) ){
    1830                 $wpcf_nd_styling['wpcf_nd_label_font_weight'] = sanitize_text_field( $_POST['wpcf_nd_label_font_weight'] );
    1831             } else {
    1832                 $wpcf_nd_styling['wpcf_nd_label_font_weight'] = '';
    1833             }
    1834 
    1835             if ( isset( $_POST['wpcf_nd_label_color'] ) ){
    1836                 $wpcf_nd_styling['wpcf_nd_label_color'] = sanitize_text_field( $_POST['wpcf_nd_label_color'] );
    1837             } else {
    1838                 $wpcf_nd_styling['wpcf_nd_label_color'] = '';
    1839             }
    1840 
    1841             if ( isset( $_POST['wpcf_nd_input_bg_color'] ) ){
    1842                 $wpcf_nd_styling['wpcf_nd_input_bg_color'] = sanitize_text_field( $_POST['wpcf_nd_input_bg_color'] );
    1843             } else {
    1844                 $wpcf_nd_styling['wpcf_nd_input_bg_color'] = '';
    1845             }
    1846 
    1847             if ( isset( $_POST['wpcf_nd_input_border_color'] ) ){
    1848                 $wpcf_nd_styling['wpcf_nd_input_border_color'] = sanitize_text_field( $_POST['wpcf_nd_input_border_color'] );
    1849             } else {
    1850                 $wpcf_nd_styling['wpcf_nd_input_border_color'] = '';
    1851             }
    1852 
    1853             if ( isset( $_POST['wpcf_nd_input_border_focus_color'] ) ){
    1854                 $wpcf_nd_styling['wpcf_nd_input_border_focus_color'] = sanitize_text_field( $_POST['wpcf_nd_input_border_focus_color'] );
    1855             } else {
    1856                 $wpcf_nd_styling['wpcf_nd_input_border_focus_color'] = '';
    1857             }
    1858 
    1859             if ( isset( $_POST['wpcf_nd_input_font_size'] ) ){
    1860                 $wpcf_nd_styling['wpcf_nd_input_font_size'] = sanitize_text_field( $_POST['wpcf_nd_input_font_size'] );
    1861             } else {
    1862                 $wpcf_nd_styling['wpcf_nd_input_font_size'] = '';
    1863             }
    1864 
    1865             if ( isset( $_POST['wpcf_nd_input_font_color'] ) ){
    1866                 $wpcf_nd_styling['wpcf_nd_input_font_color'] = sanitize_text_field( $_POST['wpcf_nd_input_font_color'] );
    1867             } else {
    1868                 $wpcf_nd_styling['wpcf_nd_input_font_color'] = '';
    1869             }
    1870 
    1871             if ( isset( $_POST['wpcf_nd_submit_bg_color'] ) ){
    1872                 $wpcf_nd_styling['wpcf_nd_submit_bg_color'] = sanitize_text_field( $_POST['wpcf_nd_submit_bg_color'] );
    1873             } else {
    1874                 $wpcf_nd_styling['wpcf_nd_submit_bg_color'] = '';
    1875             }
    1876 
    1877             if ( isset( $_POST['wpcf_nd_submit_bg_hover_color'] ) ){
    1878                 $wpcf_nd_styling['wpcf_nd_submit_bg_hover_color'] = sanitize_text_field( $_POST['wpcf_nd_submit_bg_hover_color'] );
    1879             } else {
    1880                 $wpcf_nd_styling['wpcf_nd_submit_bg_hover_color'] = '';
    1881             }
    1882 
    1883             if ( isset( $_POST['wpcf_nd_submit_font_size'] ) ){
    1884                 $wpcf_nd_styling['wpcf_nd_submit_font_size'] = sanitize_text_field( $_POST['wpcf_nd_submit_font_size'] );
    1885             } else {
    1886                 $wpcf_nd_styling['wpcf_nd_submit_font_size'] = '';
    1887             }
    1888 
    1889             if ( isset( $_POST['wpcf_nd_submit_font_color'] ) ){
    1890                 $wpcf_nd_styling['wpcf_nd_submit_font_color'] = sanitize_text_field( $_POST['wpcf_nd_submit_font_color'] );
    1891             } else {
    1892                 $wpcf_nd_styling['wpcf_nd_submit_font_color'] = '';
    1893             }
    1894 
    1895             if ( isset( $_POST['wpcf_nd_submit_font_weight'] ) ){
    1896                 $wpcf_nd_styling['wpcf_nd_submit_font_weight'] = sanitize_text_field( $_POST['wpcf_nd_submit_font_weight'] );
    1897             } else {
    1898                 $wpcf_nd_styling['wpcf_nd_submit_font_weight'] = '';
    1899             }
    1900 
    1901             if ( isset( $_POST['wpcf_nd_submit_text_transform'] ) ){
    1902                 $wpcf_nd_styling['wpcf_nd_submit_text_transform'] = sanitize_text_field( $_POST['wpcf_nd_submit_text_transform'] );
    1903             } else {
    1904                 $wpcf_nd_styling['wpcf_nd_submit_text_transform'] = '';
    1905             }
    1906 
    1907             $wpcf_nd_styling = apply_filters("wpcf_filter_save_styling", $wpcf_nd_styling, $_POST);
    1908 
    1909             update_option( "wpcf_nd_styling" , $wpcf_nd_styling );
    1910             echo "<span class='update-nag below-h1'>Styling saved</span>";
    19111985
    19121986        }
     
    19312005
    19322006                        <div id="tabs-1">
    1933                             <table class='wp-list-table striped fixed wpcf-admin-table'>
     2007                            <table class='wp-list-table fixed wpcf-admin-table'>
    19342008                                <tbody>
    19352009                                <tr>
    19362010                                    <td width='250'><?php _e("Font size","wpcf_nd"); ?></td>
    1937                                     <td><input type='number' name='wpcf_nd_label_font_size' class='regular-text wpcf-nd-small-input' id='wpcf_nd_label_font_size' value='<?php echo$wpcf_nd_styling['wpcf_nd_label_font_size']; ?>' min="10" max="62" /></td>
     2011                                    <td><input type='number' name='wpcf_nd_label_font_size' class='regular-text wpcf-nd-small-input' id='wpcf_nd_label_font_size' value='<?php echo intval($wpcf_nd_styling['wpcf_nd_label_font_size']); ?>' min="10" max="62" /></td>
    19382012                                </tr>
    19392013                                <tr>
     
    19502024                                <tr>
    19512025                                    <td width='250'><?php _e("Font color","wpcf_nd"); ?></td>
    1952                                     <td><input type='text' name='wpcf_nd_label_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_label_color' value='<?php echo stripslashes(esc_html($wpcf_nd_styling['wpcf_nd_label_color'])); ?>' /></td>
     2026                                    <td><input type='color' name='wpcf_nd_label_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_label_color' value='<?php echo stripslashes(esc_attr($wpcf_nd_styling['wpcf_nd_label_color'])); ?>' /></td>
    19532027                                </tr>
    19542028                                </tbody>
     
    19572031
    19582032                        <div id="tabs-2">
    1959                             <table class='wp-list-table striped fixed wpcf-admin-table'>
     2033                            <table class='wp-list-table fixed wpcf-admin-table'>
    19602034                                <tbody>
    19612035                                    <tr>
    19622036                                        <td width='250'><?php _e("Background color","wpcf_nd"); ?></td>
    1963                                         <td><input type='text' name='wpcf_nd_input_bg_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_input_bg_color' value='<?php echo stripslashes(esc_html($wpcf_nd_styling['wpcf_nd_input_bg_color'])); ?>' /></td>
     2037                                        <td><input type='color' name='wpcf_nd_input_bg_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_input_bg_color' value='<?php echo stripslashes(esc_attr($wpcf_nd_styling['wpcf_nd_input_bg_color'])); ?>' /></td>
    19642038                                    </tr>
    19652039                                    <tr>
    19662040                                        <td width='250'><?php _e("Border color","wpcf_nd"); ?></td>
    1967                                         <td><input type='text' name='wpcf_nd_input_border_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_input_border_color' value='<?php echo stripslashes(esc_html($wpcf_nd_styling['wpcf_nd_input_border_color'])); ?>' /></td>
     2041                                        <td><input type='color' name='wpcf_nd_input_border_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_input_border_color' value='<?php echo stripslashes(esc_attr($wpcf_nd_styling['wpcf_nd_input_border_color'])); ?>' /></td>
    19682042                                    </tr>
    19692043                                    <tr>
    19702044                                        <td width='250'><?php _e("Border hover color","wpcf_nd"); ?></td>
    1971                                         <td><input type='text' name='wpcf_nd_input_border_focus_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_input_border_focus_color' value='<?php echo stripslashes(esc_html($wpcf_nd_styling['wpcf_nd_input_border_focus_color'])); ?>' /></td>
     2045                                        <td><input type='color' name='wpcf_nd_input_border_focus_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_input_border_focus_color' value='<?php echo stripslashes(esc_attr($wpcf_nd_styling['wpcf_nd_input_border_focus_color'])); ?>' /></td>
    19722046                                    </tr>
    19732047                                    <tr>
    19742048                                        <td width='250'><?php _e("Font size","wpcf_nd"); ?></td>
    1975                                         <td><input type='number' name='wpcf_nd_input_font_size' class='regular-text wpcf-nd-small-input' id='wpcf_nd_input_font_size' value='<?php echo stripslashes(esc_html($wpcf_nd_styling['wpcf_nd_input_font_size'])); ?>' min="10" max="62" /></td>
     2049                                        <td><input type='number' name='wpcf_nd_input_font_size' class='regular-text wpcf-nd-small-input' id='wpcf_nd_input_font_size' value='<?php echo stripslashes(esc_attr($wpcf_nd_styling['wpcf_nd_input_font_size'])); ?>' min="10" max="62" /></td>
    19762050                                    </tr>
    19772051                                    <tr>
    19782052                                        <td width='250'><?php _e("Font color","wpcf_nd"); ?></td>
    1979                                         <td><input type='text' name='wpcf_nd_input_font_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_input_font_color' value='<?php echo stripslashes(esc_html($wpcf_nd_styling['wpcf_nd_input_font_color'])); ?>' /></td>
     2053                                        <td><input type='color' name='wpcf_nd_input_font_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_input_font_color' value='<?php echo (esc_attr($wpcf_nd_styling['wpcf_nd_input_font_color'])); ?>' /></td>
    19802054                                    </tr>
    19812055                                </tbody>
     
    19842058
    19852059                        <div id="tabs-3">
    1986                             <table class='wp-list-table striped fixed wpcf-admin-table'>
     2060                            <table class='wp-list-table fixed wpcf-admin-table'>
    19872061                                <tbody>
    19882062                                <tr>
    19892063                                    <td width='250'><?php _e("Background color","wpcf_nd"); ?></td>
    1990                                     <td><input type='text' name='wpcf_nd_submit_bg_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_submit_bg_color' value='<?php echo stripslashes(esc_html($wpcf_nd_styling['wpcf_nd_submit_bg_color'])); ?>' /></td>
     2064                                    <td><input type='color' name='wpcf_nd_submit_bg_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_submit_bg_color' value='<?php echo (esc_attr($wpcf_nd_styling['wpcf_nd_submit_bg_color'])); ?>' /></td>
    19912065                                </tr>
    19922066                                <tr>
    19932067                                    <td width='250'><?php _e("Background hover color","wpcf_nd"); ?></td>
    1994                                     <td><input type='text' name='wpcf_nd_submit_bg_hover_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_submit_bg_hover_color' value='<?php echo stripslashes(esc_html($wpcf_nd_styling['wpcf_nd_submit_bg_hover_color'])); ?>' /></td>
     2068                                    <td><input type='color' name='wpcf_nd_submit_bg_hover_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_submit_bg_hover_color' value='<?php echo (esc_attr($wpcf_nd_styling['wpcf_nd_submit_bg_hover_color'])); ?>' /></td>
    19952069                                </tr>
    19962070                                <tr>
    19972071                                    <td width='250'><?php _e("Font size","wpcf_nd"); ?></td>
    1998                                     <td><input type='number' name='wpcf_nd_submit_font_size' class='regular-text wpcf-nd-small-input' id='wpcf_nd_submit_font_size' value='<?php echo stripslashes(esc_html($wpcf_nd_styling['wpcf_nd_submit_font_size'])); ?>' min="10" max="62" /></td>
     2072                                    <td><input type='number' name='wpcf_nd_submit_font_size' class='regular-text wpcf-nd-small-input' id='wpcf_nd_submit_font_size' value='<?php echo (intval($wpcf_nd_styling['wpcf_nd_submit_font_size'])); ?>' min="10" max="62" /></td>
    19992073                                </tr>
    20002074                                <tr>
    20012075                                    <td width='250'><?php _e("Font color","wpcf_nd"); ?></td>
    2002                                     <td><input type='text' name='wpcf_nd_submit_font_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_submit_font_color' value='<?php echo stripslashes(esc_html($wpcf_nd_styling['wpcf_nd_submit_font_color'])); ?>' /></td>
     2076                                    <td><input type='color' name='wpcf_nd_submit_font_color' class='regular-text wpcf-nd-small-input wpcf-color-input' id='wpcf_nd_submit_font_color' value='<?php echo (esc_attr($wpcf_nd_styling['wpcf_nd_submit_font_color'])); ?>' /></td>
    20032077                                </tr>
    20042078                                <tr>
     
    20292103
    20302104                <div class="wpcf-admin-preview-form wpcf_nd" id="wpcf-nd">
    2031                     <label class="wpcf-admin-preview-label" for="wpcf-admin-preview-text"><?php _e("Text field","wpcf_nd"); ?></label>
     2105                    <label id="wpcf-admin-preview-darkmode-label" for="wpcf-admin-preview-darkmode-checkbox">Dark Mode</label>
     2106                    <input id="wpcf-admin-preview-darkmode-checkbox" type="checkbox" name="wpcf-admin-preview-darkmode-label">
     2107                    <br><span id="wpcf-admin-preview-darkmode-note">Note: The dark mode setting is purely for preview purposes only.</span>
     2108                    <label class="wpcf-admin-preview-label" for="wpcf-admin-preview-text"><?php _e("Text Field","wpcf_nd"); ?></label>
    20322109                    <input class="wpcf-admin-preview-input" id="wpcf-admin-preview-text" type="text"/>
    2033                     <label class="wpcf-admin-preview-label" for="wpcf-admin-preview-email"><?php _e("Email field","wpcf_nd"); ?></label>
     2110                    <label class="wpcf-admin-preview-label" for="wpcf-admin-preview-email"><?php _e("Email Field","wpcf_nd"); ?></label>
    20342111                    <input class="wpcf-admin-preview-input" id="wpcf-admin-preview-email" type="email"/>
    20352112                    <label class="wpcf-admin-preview-label" for="wpcf-admin-preview-textarea"><?php _e("Text Area","wpcf_nd"); ?></label>
     
    20432120
    20442121            <?php do_action( "wpcf_hook_styling_page_bottom", $wpcf_nd_styling ); ?>
     2122
     2123            <?php wp_nonce_field('wpcf_save_settings', 'wpcf_save_settings'); ?>
    20452124
    20462125            <input class="wpcf-submit-save-styling button-primary" type='submit' value='Save styling' name='wpcf_submit_save_styling' />
     
    20882167                }
    20892168                if ( '' !== $wpcf_nd_styling['wpcf_nd_submit_font_weight'] ) {
    2090                     echo 'font-weight:' . $wpcf_nd_styling['wpcf_nd_submit_font_weight'] . 'px;';
     2169                    echo 'font-weight:' . $wpcf_nd_styling['wpcf_nd_submit_font_weight'] . ';';
    20912170                }
    20922171                if ( '' !== $wpcf_nd_styling['wpcf_nd_submit_text_transform'] ) {
    2093                     echo 'text-transform:' . $wpcf_nd_styling['wpcf_nd_submit_text_transform'] . 'px;';
     2172                    echo 'text-transform:' . $wpcf_nd_styling['wpcf_nd_submit_text_transform'] . ';';
    20942173                } ?>
    20952174            }
     
    21212200            if (isset($_POST['wpcf_submit_save_settings'])) {
    21222201
    2123                 if ( isset( $_POST['wpcf_nd_email_from_address'] ) ){
    2124                     $wpcf_nd_settings['wpcf_nd_email_from_address'] = sanitize_text_field( $_POST['wpcf_nd_email_from_address'] );                 
     2202                if($this->wpcf_can_save_settings()){
     2203
     2204                    if ( isset( $_POST['wpcf_nd_email_from_address'] ) ){
     2205                        $wpcf_nd_settings['wpcf_nd_email_from_address'] = sanitize_text_field( $_POST['wpcf_nd_email_from_address'] );                 
     2206                    } else {
     2207                        $wpcf_nd_settings['wpcf_nd_email_from_address'] = '';
     2208                    }
     2209
     2210                    if ( isset( $_POST['wpcf_nd_email_from_name'] ) ){
     2211                        $wpcf_nd_settings['wpcf_nd_email_from_name'] = sanitize_text_field( $_POST['wpcf_nd_email_from_name'] );                   
     2212                    } else {
     2213                        $wpcf_nd_settings['wpcf_nd_email_from_name'] = '';
     2214                    }
     2215
     2216                    if (isset($_POST['wpcf_custom_css'])) {
     2217                        $wpcf_nd_settings['wpcf_custom_css'] = sanitize_textarea_field($_POST['wpcf_custom_css']);
     2218                    } else {
     2219                        $wpcf_nd_settings['wpcf_custom_css'] = "";
     2220                    }
     2221
     2222                    if (isset($_POST['wpcf_nd_thank_you_text']))
     2223                        $wpcf_nd_settings['wpcf_nd_thank_you_text'] = sanitize_text_field( $_POST['wpcf_nd_thank_you_text'] );
     2224
     2225                    if (isset($_POST['wpcf_nd_enable_gdpr'])  && $_POST['wpcf_nd_enable_gdpr'] == '1' ) {
     2226                        $wpcf_nd_settings['wpcf_nd_enable_gdpr'] = intval(sanitize_text_field( $_POST['wpcf_nd_enable_gdpr'] ));
     2227                    } else {
     2228                        $wpcf_nd_settings['wpcf_nd_enable_gdpr'] = 0;
     2229                    }
     2230                    if (isset($_POST['wpcf_nd_gdpr_company_name']))
     2231                        $wpcf_nd_settings['wpcf_nd_gdpr_company_name'] = sanitize_text_field( $_POST['wpcf_nd_gdpr_company_name'] );
     2232                    if (isset($_POST['wpcf_nd_gdpr_retention_purpose']))
     2233                        $wpcf_nd_settings['wpcf_nd_gdpr_retention_purpose'] = sanitize_text_field( $_POST['wpcf_nd_gdpr_retention_purpose'] );
     2234                    if (isset($_POST['wpcf_nd_gdpr_retention_period']))
     2235                        $wpcf_nd_settings['wpcf_nd_gdpr_retention_period'] = sanitize_text_field( $_POST['wpcf_nd_gdpr_retention_period'] );
     2236                    if (isset($_POST['wpcf_nd_gdpr_notice']))
     2237                        $wpcf_nd_settings['wpcf_nd_gdpr_notice'] = sanitize_text_field( $_POST['wpcf_nd_gdpr_notice'] );
     2238                    if (isset($_POST['wpcf_nd_enable_gdpr_delete_button'])  && $_POST['wpcf_nd_enable_gdpr_delete_button'] == '1' ) {
     2239                        $wpcf_nd_settings['wpcf_nd_enable_gdpr_delete_button'] = intval(sanitize_text_field( $_POST['wpcf_nd_enable_gdpr_delete_button'] ));
     2240                    } else {
     2241                        $wpcf_nd_settings['wpcf_nd_enable_gdpr_delete_button'] = 0;
     2242                    }
     2243                    if (isset($_POST['wpcf_nd_enable_gdpr_download_button'])  && $_POST['wpcf_nd_enable_gdpr_download_button'] == '1' ) {
     2244                        $wpcf_nd_settings['wpcf_nd_enable_gdpr_download_button'] = intval(sanitize_text_field( $_POST['wpcf_nd_enable_gdpr_download_button'] ));
     2245                    } else {
     2246                        $wpcf_nd_settings['wpcf_nd_enable_gdpr_download_button'] = 0;
     2247                    }
     2248
     2249                    $wpcf_nd_settings = apply_filters("wpcf_filter_save_settings", $wpcf_nd_settings, $_POST);
     2250                   
     2251                    $updated_wpcf_nd_settings = update_option( "wpcf_nd_settings" , $wpcf_nd_settings );
     2252
     2253                    if($updated_wpcf_nd_settings){
     2254                        echo "
     2255                            <div class=\"updated\">
     2256                                <p>".__('Update Successful', 'wpcf_nd')."</p>
     2257                            </div>
     2258                        ";
     2259                    } else {
     2260                        echo "
     2261                            <div class=\"error\">
     2262                                <p>".__('No changes were made', 'wpcf_nd')."</p>
     2263                            </div>
     2264                        ";
     2265                    }
     2266
     2267                    $cfr_enable_gdpr = isset($_POST['wpcf_nd_enable_gdpr']) && $_POST['wpcf_nd_enable_gdpr'] == 1;
     2268                    if ( ! $cfr_enable_gdpr ) {
     2269                        $wpcf_nd_settings['wpcf_nd_enable_gdpr_delete_button'] = 0;
     2270                        $wpcf_nd_settings['wpcf_nd_enable_gdpr_download_button'] = 0;
     2271                    } else {
     2272                        //echo "<span class='update-nag below-h1'>Settings saved</span>";
     2273                    }
    21252274                } else {
    2126                     $wpcf_nd_settings['wpcf_nd_email_from_address'] = '';
    2127                 }
    2128 
    2129 
    2130                 if ( isset( $_POST['wpcf_nd_email_from_name'] ) ){
    2131                     $wpcf_nd_settings['wpcf_nd_email_from_name'] = sanitize_text_field( $_POST['wpcf_nd_email_from_name'] );                   
    2132                 } else {
    2133                     $wpcf_nd_settings['wpcf_nd_email_from_name'] = '';
    2134                 }
    2135 
    2136                 if (isset($_POST['wpcf_nd_thank_you_text']))
    2137                     $wpcf_nd_settings['wpcf_nd_thank_you_text'] = sanitize_text_field( $_POST['wpcf_nd_thank_you_text'] );
    2138 
    2139                 if (isset($_POST['wpcf_nd_enable_gdpr'])  && $_POST['wpcf_nd_enable_gdpr'] == '1' ) {
    2140                     $wpcf_nd_settings['wpcf_nd_enable_gdpr'] = intval(sanitize_text_field( $_POST['wpcf_nd_enable_gdpr'] ));
    2141                 } else {
    2142                     $wpcf_nd_settings['wpcf_nd_enable_gdpr'] = 0;
    2143                 }
    2144                 if (isset($_POST['wpcf_nd_gdpr_company_name']))
    2145                     $wpcf_nd_settings['wpcf_nd_gdpr_company_name'] = sanitize_text_field( $_POST['wpcf_nd_gdpr_company_name'] );
    2146                 if (isset($_POST['wpcf_nd_gdpr_retention_purpose']))
    2147                     $wpcf_nd_settings['wpcf_nd_gdpr_retention_purpose'] = sanitize_text_field( $_POST['wpcf_nd_gdpr_retention_purpose'] );
    2148                 if (isset($_POST['wpcf_nd_gdpr_retention_period']))
    2149                     $wpcf_nd_settings['wpcf_nd_gdpr_retention_period'] = sanitize_text_field( $_POST['wpcf_nd_gdpr_retention_period'] );
    2150                 if (isset($_POST['wpcf_nd_gdpr_notice']))
    2151                     $wpcf_nd_settings['wpcf_nd_gdpr_notice'] = sanitize_text_field( $_POST['wpcf_nd_gdpr_notice'] );
    2152                 if (isset($_POST['wpcf_nd_enable_gdpr_delete_button'])  && $_POST['wpcf_nd_enable_gdpr_delete_button'] == '1' ) {
    2153                     $wpcf_nd_settings['wpcf_nd_enable_gdpr_delete_button'] = intval(sanitize_text_field( $_POST['wpcf_nd_enable_gdpr_delete_button'] ));
    2154                 } else {
    2155                     $wpcf_nd_settings['wpcf_nd_enable_gdpr_delete_button'] = 0;
    2156                 }
    2157                 if (isset($_POST['wpcf_nd_enable_gdpr_download_button'])  && $_POST['wpcf_nd_enable_gdpr_download_button'] == '1' ) {
    2158                     $wpcf_nd_settings['wpcf_nd_enable_gdpr_download_button'] = intval(sanitize_text_field( $_POST['wpcf_nd_enable_gdpr_download_button'] ));
    2159                 } else {
    2160                     $wpcf_nd_settings['wpcf_nd_enable_gdpr_download_button'] = 0;
    2161                 }
    2162 
    2163 
    2164 
    2165                 $wpcf_nd_settings = apply_filters("wpcf_filter_save_settings", $wpcf_nd_settings, $_POST);
    2166                
    2167                 update_option( "wpcf_nd_settings" , $wpcf_nd_settings );
    2168 
    2169                 $cfr_enable_gdpr = isset($_POST['wpcf_nd_enable_gdpr']) && $_POST['wpcf_nd_enable_gdpr'] == 1;
    2170                 if ( ! $cfr_enable_gdpr ) {
    2171                     $wpcf_nd_settings['wpcf_nd_enable_gdpr_delete_button'] = 0;
    2172                     $wpcf_nd_settings['wpcf_nd_enable_gdpr_download_button'] = 0;
    2173                 } else {
    2174                     echo "<span class='update-nag below-h1'>Settings saved</span>";
    2175                 }
     2275                    echo "
     2276                            <div class=\"error\">
     2277                                <p>".__('No changes were made', 'wpcf_nd')."</p>
     2278                            </div>
     2279                        ";
     2280                }
     2281            }
     2282
     2283            if (!empty($wpcf_nd_settings['wpcf_custom_css'])) {
     2284                wp_add_inline_style( 'contact-form-ready', wp_strip_all_tags( $wpcf_nd_settings['wpcf_custom_css'] ) );
    21762285            }
    21772286
     
    21822291            if (!isset($wpcf_nd_settings['wpcf_nd_email_from_name']))
    21832292                $wpcf_nd_settings['wpcf_nd_email_from_name'] = get_option( 'blogname' );
    2184 
    2185 
    2186 
     2293               
    21872294            ?>
     2295
    21882296            <form action='' method='POST' name='wpcf_settings_form'>
    21892297                <div id="sola_cfr_tabs">
     
    21942302                        <li><a href="#tabs-3">Email template</a></li>
    21952303                        <li><a href="#tabs-4">Privacy</a></li>
     2304                        <li><a href="#tabs-5">Advanced</a></li>
     2305                       
     2306                        <?php
     2307                            //Build extension settings page tab
     2308                            do_action( 'wpcf_hook_settings_page_tab', $wpcf_nd_settings );
     2309                        ?>
     2310
     2311                        <li><a href="#tabs-6">REST API</a></li>
    21962312                    </ul>
    21972313                   
     
    21992315                        <h2><?php _e("Contact Form Settings","wpcf_nd"); ?></h2>
    22002316
    2201                         <table class='wp-list-table widefat striped fixed'>
     2317                        <table class='wp-list-table fixed'>
    22022318                            <tr>
    2203                                 <td width='250'><?php _e("Email from address","wpcf_nd"); ?></td>
    2204                                 <td><input type='text' name='wpcf_nd_email_from_address' class='regular-text' id='wpcf_nd_email_from_address' value='<?php echo$wpcf_nd_settings['wpcf_nd_email_from_address']; ?>' /></td>
     2319                                <td width='250'><label for="wpcf_nd_email_from_address"><?php _e("Email from address","wpcf_nd"); ?></label></td>
     2320                                <td><input type='text' name='wpcf_nd_email_from_address' class='regular-text' id='wpcf_nd_email_from_address' value='<?php echo esc_attr($wpcf_nd_settings['wpcf_nd_email_from_address']); ?>' /></td>
    22052321                            </tr>
    22062322                            <tr>
    2207                                 <td width='250'><?php _e("Email from name","wpcf_nd"); ?></td>
    2208                                 <td><input type='text' name='wpcf_nd_email_from_name' class='regular-text' id='wpcf_nd_email_from_name' value='<?php echo $wpcf_nd_settings['wpcf_nd_email_from_name']; ?>' /></td>
     2323                                <td width='250'><label for="wpcf_nd_email_from_name"><?php _e("Email from name","wpcf_nd"); ?></label></td>
     2324                                <td><input type='text' name='wpcf_nd_email_from_name' class='regular-text' id='wpcf_nd_email_from_name' value='<?php echo esc_attr($wpcf_nd_settings['wpcf_nd_email_from_name']); ?>' /></td>
    22092325                            </tr>
    22102326                            <tr>
    2211                                 <td width='250'><?php _e("Thank you text","wpcf_nd"); ?></td>
    2212                                 <td><input type='text' name='wpcf_nd_thank_you_text' class='regular-text' id='wpcf_nd_thank_you_text' value='<?php echo stripslashes(esc_html($wpcf_nd_settings['wpcf_nd_thank_you_text'])); ?>' /></td>
     2327                                <td width='250'><label for="wpcf_nd_thank_you_text"><?php _e("Thank you text","wpcf_nd"); ?></label></td>
     2328                                <td><input type='text' name='wpcf_nd_thank_you_text' class='regular-text' id='wpcf_nd_thank_you_text' value='<?php echo esc_attr($wpcf_nd_settings['wpcf_nd_thank_you_text']); ?>' /></td>
    22132329                            </tr>
    22142330                        </table>
     
    22262342                        <?php do_action( "wpcf_hook_settings_page_bottom_privacy", $wpcf_nd_settings ); ?>
    22272343                    </div>
     2344                   
     2345                    <div id="tabs-5">
     2346                        <h2><?php _e("Advanced Settings","wpcf_nd"); ?></h2>
     2347                        <table class='wp-list-table fixed'>
     2348                            <tr id="wpcf_custom_css_tr_container">
     2349                                <td style="width: 250px"><label><?php _e("Custom CSS:","wpcf_nd"); ?></label></td>
     2350                                <td id="wpcf_custom_css_container"><textarea name="wpcf_custom_css" id="wpcf_custom_css" cols="70" rows="10" spellcheck="false"><?php if(isset($wpcf_nd_settings['wpcf_custom_css']) && $wpcf_nd_settings['wpcf_custom_css'] != "") { echo wp_strip_all_tags($wpcf_nd_settings['wpcf_custom_css']); } ?></textarea></td>
     2351                            </tr>
     2352                           
     2353                        </table>
     2354                    </div>
     2355
     2356                    <?php
     2357                        function wpcf_nd_get_token() {
     2358                            $wpcf_nd_token = get_option( 'wpcf_nd_token' );
     2359                            if ( isset( $wpcf_nd_token ) ){
     2360                                return $wpcf_nd_token;
     2361                            } else {
     2362                                return '';
     2363                            }
     2364                        }
     2365                    ?>
     2366
     2367                    <div id="tabs-6">
     2368                        <h2><?php _e("REST API","wpcf_nd"); ?></h2>
     2369                        <table class="form-table wp-list-table widefat striped pages">
     2370                            <tbody>
     2371                                <tr>
     2372                                    <td width="200">Secret Token:</td>
     2373                                    <td width="300px"><input type="text" id="wpcf_nd_token" disabled="true" value="<?php echo esc_attr(wpcf_nd_get_token()); ?>" readonly style="width:300px;"></td>
     2374                                </tr>
     2375
     2376                                <tr>
     2377                                    <td>Supported API Calls:</td>
     2378                                    <td width="600"><code>/wp-json/contact-form-ready/v1/get_forms?token={secret_token}</code>
     2379                                    </td>
     2380                                   
     2381                                </tr>
     2382                                <?php
     2383                                    do_action('wpcf_hook_settings_page_sr_rest_show');
     2384                                ?>
     2385                                <tr>
     2386                                    <td>API Response Codes:</td>
     2387                                    <td><code>200</code>
     2388                                        <code>Success</code>
     2389                                    </td>
     2390                                </tr>
     2391                                <tr>
     2392                                    <td></td>
     2393                                    <td><code>400</code>
     2394                                        <code>Bad Request</code>
     2395                                    </td>
     2396                                </tr>
     2397                                <tr>
     2398                                    <td></td>
     2399                                    <td><code>401</code>
     2400                                        <code>Unauthorized</code>
     2401                                    </td>
     2402                                </tr>
     2403                            </tbody>
     2404                        </table>
     2405                    </div>
     2406
     2407                    <?php
     2408                        //Build extension settings page body
     2409                        do_action( "wpcf_hook_settings_page_bottom", $wpcf_nd_settings );
     2410                    ?>
     2411                   
    22282412                </div>
     2413
     2414                <?php wp_nonce_field('wpcf_save_settings', 'wpcf_save_settings'); ?>
     2415               
    22292416                <input type='submit' class="button-primary" value='Save settings' name='wpcf_submit_save_settings' />
    22302417            </form>
    2231 
    22322418
    22332419            <?php
     
    22602446    function set_custom_edit_columns($columns) {
    22612447
    2262 
    2263         $columns['shortcode'] = __( 'Shortcode', 'wpcf_nd' );
     2448       
    22642449        $columns['views'] = __( 'Views', 'wpcf_nd' );
    2265         $columns['submissions'] = __( 'Submissions', 'wpcf_nd' );
     2450        $columns['submissions'] = __( 'Submissions', 'wpcf_nd' );
     2451        $columns['shortcode'] = __( 'Shortcode', 'wpcf_nd' );
    22662452   
    22672453        return $columns;
     
    22712457        switch ( $column ) {
    22722458
    2273             case 'shortcode' :
    2274                 echo '<pre>[cform-nd id="'.$post_id.'"]</pre>';
    2275                 break;
     2459           
    22762460            case 'views' :
    22772461                $views = intval(get_post_meta( $post_id , 'cform_views' , true ));
     
    22812465                $views = intval(get_post_meta( $post_id , 'cform_submissions' , true ));
    22822466                echo $views;
    2283                 break;
     2467                break;
     2468            case 'shortcode' :
     2469                echo '<pre>[cform-nd id="'. intval($post_id).'"]</pre>';                       
     2470                break;
    22842471
    22852472
     
    22942481    public static function enqueue_user_styles() {
    22952482        wp_register_style( 'contact-form-ready', plugins_url(plugin_basename(dirname(__FILE__)))."/css/front-end.css", true );
    2296         wp_enqueue_style( 'contact-form-ready' );
     2483        wp_enqueue_style( 'contact-form-ready' );
    22972484
    22982485        $wpcf_nd_styling = get_option("wpcf_nd_styling");
     2486       
     2487        if (!empty($wpcf_nd_styling)){
     2488           
     2489            if ($wpcf_nd_styling['wpcf_nd_enable_style'] == 1){
     2490
     2491                $wpcf_nd_styling_css_string_labels = '.fb-text-label, .fb-textarea-label, .fb-radio-group-label, .fb-select-label, .fb-date-label, .fb-number-label, .fb-checkbox-group-label{font-size:' . esc_attr($wpcf_nd_styling['wpcf_nd_label_font_size']) . 'px !important; font-weight:' .  esc_attr($wpcf_nd_styling['wpcf_nd_label_font_weight']) .' !important; color:' . esc_attr($wpcf_nd_styling['wpcf_nd_label_color']) . ' !important;}';
     2492
     2493                $wpcf_nd_styling_css_string_inputs = '.text-input, .text-area, .wpcf_nd input[type=text], .wpcf_nd textarea, .wpcf_nd input[type=number], .wpcf_nd select, .wpcf_nd input[type=date], .wpcf_nd input[type=email]{background-color:' . esc_attr($wpcf_nd_styling['wpcf_nd_input_bg_color']) . ' !important; border-color:' . esc_attr($wpcf_nd_styling['wpcf_nd_input_border_color']) . ' !important; font-size:' . esc_attr($wpcf_nd_styling['wpcf_nd_input_font_size']) . 'px !important; color:' . esc_attr($wpcf_nd_styling['wpcf_nd_input_font_color']) . ' !important;} ' . '.text-input:hover, .text-area:hover, .wpcf_nd input[type=text]:hover, .wpcf_nd textarea:hover, .wpcf_nd input[type=number]:hover, .wpcf_nd select:hover, .wpcf_nd input[type=date]:hover, .wpcf_nd input[type=email]:hover{border-color:' . esc_attr($wpcf_nd_styling['wpcf_nd_input_border_focus_color']) . '!important;}';
     2494
     2495                $wpcf_nd_styling_css_string_submit = '.wpcf_nd_submit{background-color:' . esc_attr($wpcf_nd_styling['wpcf_nd_submit_bg_color']) . ' !important; font-size:' . esc_attr($wpcf_nd_styling['wpcf_nd_submit_font_size']) . 'px !important; color:' . esc_attr($wpcf_nd_styling['wpcf_nd_submit_font_color']) . ' !important; font-weight:' . esc_attr($wpcf_nd_styling['wpcf_nd_submit_font_weight']) . ' !important; text-transform:' . esc_attr($wpcf_nd_styling['wpcf_nd_submit_text_transform']) . ' !important;} ' . '.wpcf_nd_submit:hover{background-color:' . esc_attr($wpcf_nd_styling['wpcf_nd_submit_bg_hover_color']) . ' !important;}';
     2496           
     2497                $wpcf_nd_styling_css_string_full = $wpcf_nd_styling_css_string_labels . ' ' . $wpcf_nd_styling_css_string_inputs . ' ' . $wpcf_nd_styling_css_string_submit;
     2498               
     2499                wp_add_inline_style( 'contact-form-ready', stripslashes( $wpcf_nd_styling_css_string_full ) );
     2500            }
     2501           
     2502        }
     2503       
    22992504        $wpcf_nd_basic_settings = get_option("wpcf_nd_basic_settings");
    2300         $modal_el = $wpcf_nd_basic_settings['wpcf_nd_modal_el'];
    2301         $modal_bg = $wpcf_nd_basic_settings['wpcf_nd_modal_bg'];
    2302         $modal_opacity = $wpcf_nd_basic_settings['wpcf_nd_modal_opacity'];
    2303         $modal_inner_bg = $wpcf_nd_basic_settings['wpcf_nd_modal_inner_bg'];
     2505
     2506        $modal_el = !empty($wpcf_nd_basic_settings['wpcf_nd_modal_el']) ? $wpcf_nd_basic_settings['wpcf_nd_modal_el'] : '';
     2507        $modal_bg = !empty($wpcf_nd_basic_settings['wpcf_nd_modal_bg']) ? $wpcf_nd_basic_settings['wpcf_nd_modal_bg'] : '';
     2508        $modal_opacity = !empty($wpcf_nd_basic_settings['wpcf_nd_modal_opacity']) ? $wpcf_nd_basic_settings['wpcf_nd_modal_opacity'] : '';
     2509        $modal_inner_bg = !empty($wpcf_nd_basic_settings['wpcf_nd_modal_inner_bg']) ? $wpcf_nd_basic_settings['wpcf_nd_modal_inner_bg'] : '';
     2510
     2511        $wpcf_nd_settings = get_option("wpcf_nd_settings");
     2512        if (!empty($wpcf_nd_settings['wpcf_custom_css'])) {
     2513            wp_add_inline_style( 'contact-form-ready', wp_strip_all_tags( $wpcf_nd_settings['wpcf_custom_css'] ) );
     2514        }
    23042515
    23052516        $css = '';
     
    23902601        }
    23912602
    2392         if ( '' !== $css ) {
    2393             wp_add_inline_style( 'contact-form-ready', $css );
    2394         }
     2603       
    23952604    }
    23962605
     
    24092618
    24102619            $wpcf_nd_basic_settings = get_option("wpcf_nd_basic_settings");
    2411             $modal_el_attr = $wpcf_nd_basic_settings['wpcf_nd_modal_el_attr'];
    2412             $modal_el = $wpcf_nd_basic_settings['wpcf_nd_modal_el'];
     2620            $modal_el_attr = !empty($wpcf_nd_basic_settings['wpcf_nd_modal_el_attr']) ? $wpcf_nd_basic_settings['wpcf_nd_modal_el_attr'] : '';
     2621            $modal_el = !empty($wpcf_nd_basic_settings['wpcf_nd_modal_el']) ? $wpcf_nd_basic_settings['wpcf_nd_modal_el'] : '';
    24132622            if ($wpcf_thank_you) {
    24142623
     
    24302639                }
    24312640
    2432                 wp_localize_script( 'contact-form-ready', 'wpcf_nd_form_type', $form_type );
     2641                $formLocalize = array();
     2642
     2643                $formLocalize['wpcf_nd_form_type'] = $form_type;
    24332644
    24342645                $wpcf_nd_redirect_uri = get_post_meta( $atts['id'], 'wpcf_nd_redirect_uri', true );
    24352646                if ($wpcf_nd_redirect_uri) {
    2436                     wp_localize_script( 'contact-form-ready', 'wpcf_nd_form_redirect', get_option("siteurl") . $wpcf_nd_redirect_uri );
     2647                    $formLocalize['wpcf_nd_form_redirect'] = get_option("siteurl") . $wpcf_nd_redirect_uri;
    24372648                }
     2649
     2650                wp_localize_script( 'contact-form-ready', 'wpcf_nd_form_localize', $formLocalize );
    24382651
    24392652                $submit_string = get_post_meta( $atts['id'], 'wpcf_nd_submit_string' , true );
     
    27382951
    27392952// First check if Gutenberg is available.
    2740 if ( function_exists( 'register_block_type' ) ) {
     2953if ( function_exists( 'register_block_type_from_metadata' ) ) {
    27412954             
    27422955    /**
     
    27442957     */
    27452958    function cfr_gutenberg_block_renderer() {
    2746         // Register our block editor script.
     2959        // Register gutenberg block script
    27472960        wp_register_script(
    27482961            'cfr-gutenberg-block',
    27492962            plugins_url( 'gutenberg/block.js', __FILE__ ),
    2750             array( 'wp-blocks', 'wp-element', 'wp-components', 'wp-editor' )
     2963            array( "wp-blocks", "wp-i18n")
    27512964        );
    27522965
    2753         // Register our styles for backend to represent what the user would see on the frontend
    2754         // specifically adjust the default WordPress styling to our own.
    2755             wp_register_style(
     2966        // Register gutenbern styles
     2967        wp_register_style(
    27562968            'cfr-gutenberg-block-style',
    27572969            plugins_url( 'gutenberg/style.css', __FILE__ ),
    2758             array( ),
     2970            array(),
    27592971            filemtime( plugin_dir_path( __FILE__ ) . 'gutenberg/style.css' )
    27602972        );
    2761          // Gets our contact forms and loops through giving us a drop down list to use when
    2762          // selecting a contact form
     2973         
     2974        // Localize the forms for selection
    27632975        $forms = get_posts(
    27642976            array(
     
    27732985            $localized_forms[] = array(
    27742986                'value' => $form->ID,
    2775                 'label' => $form->post_name
     2987                'label' => $form->post_title
    27762988            );
    27772989        }
     
    27792991        wp_localize_script('cfr-gutenberg-block', 'cfr_localized_forms', $localized_forms);
    27802992
    2781         // Register our block, and define attributes we accept.
    2782         register_block_type( 'contact-form-ready/cfr-gutenberg-block', array(
    2783             'attributes'      => array(
    2784                 'cfid' => array(
    2785                     'type' => 'string',
    2786                 ),
    2787                 'alignment' => array(
    2788                     'type' => 'string',
     2993        // Register block type using the new JSON definition approach, this will enqueue the assets
     2994        register_block_type_from_metadata(
     2995            plugin_dir_path(__FILE__) . '/gutenberg/',
     2996            array(
     2997                'render_callback' => 'cfr_gutenberg_block_render',
     2998                'attributes' => array(
     2999                    'cfid' => array(
     3000                        'type' => 'string'
     3001                    ),
     3002                    'alignment' => array(
     3003                        'type' => 'string'
     3004                    )                   
    27893005                )
    2790             ),
    2791             'editor_script'   => 'cfr-gutenberg-block', // The script name we gave in the wp_register_script() call.
    2792             'render_callback' => 'cfr_gutenberg_block_render',
    2793             'editor_style' => 'cfr-gutenberg-block-style', // the style name we gave in the WP_register_style() call.
    2794         ) );
     3006            )
     3007        );
    27953008    }
    27963009
     
    28013014     */
    28023015    function cfr_gutenberg_block_render( $attributes ) {
     3016        if(empty($attributes['cfid'])){
     3017            return "<p style='padding:10px;'>Please Select A Form</p>";
     3018        }   
    28033019
    28043020        $style = '';
    2805 
    28063021        if(!empty($attributes['alignment'])){
    28073022            $style = 'style="text-align:' . $attributes['alignment'] . ';"';
    28083023        }
    28093024
    2810         if(empty($attributes['cfid'])){
    2811             return "<p $style>Please Select A Form</p>";
    2812         }
    2813 
    2814         return "<div $style>" . do_shortcode('[cform-nd id="' . $attributes['cfid'] . '"]') . "</div>";
     3025        $shortcode = do_shortcode('[cform-nd id="' . intval($attributes['cfid']) . '"]');
     3026        return "<div {$style}>{$shortcode}</div>";
    28153027    }
    28163028}
  • contact-form-ready/trunk/css/admin.css

    r2190532 r3049139  
    101101    width: 262px;
    102102    padding: 14px;
    103     height: 395px;
     103    height: 415px;
    104104    position: relative;
    105105
     
    115115    bottom: 14px;
    116116    left: 14px;
     117   
     118}
     119
     120.wpcf_shortcode_copy {
     121    background: #edf7fc !important;
     122    box-shadow: none !important;
     123    border: none !important;
     124    padding: 7px 5px;
     125    font-size: 15px !important;
     126    color: #007cba!important;
     127    border: 2px solid #007cba !important;
     128    border-radius: 3px !important;
     129    cursor: pointer;
     130    text-align: center;
     131}
     132
     133.wpcf_nd_shortcode_styling {
     134    background: #edf7fc !important;
     135    box-shadow: none !important;
     136    border: none !important;
     137    padding: 7px 5px;
     138    font-size: 15px !important;
     139    color: #007cba!important;
     140    border: 2px solid #007cba !important;
     141    border-radius: 3px !important;
     142    cursor: pointer;
     143    text-align: center;
    117144}
    118145
     
    123150    padding: 2px;
    124151    transition: opacity 0.8s;
    125     color: #0085ba;
    126     border: 1px solid #0085ba;
     152    color: #007cba;
     153    border: 1px solid #007cba;
    127154}
    128155
     
    130157    opacity: 1;
    131158    visibility: visible;
     159   
    132160}
    133161
     
    190218.wpcf-admin-enable-style-wrapper {
    191219    display: inline-block;
    192     margin: 20px 0;
     220    margin: 5px 0 20px 0;
    193221    padding: 10px 15px;
    194     background: #f9f9f9;
     222    background: #c5c5c5;;
    195223    font-size: 16px;
    196224    font-weight: 600;
     225       
    197226}
    198227
     
    201230    top: 2px;
    202231    margin-left: 5px;
     232   
    203233}
    204234
     
    236266.wpcf_nd label, .fb-radio-group-label, .fb-checkbox-group-label {
    237267    display: block;
     268    margin-top: 20px;
    238269    margin-bottom: 8px;
    239270    color: #333333;
     
    250281.wpcf-admin-preview-submit {
    251282    border: none;
     283    width: 100%;
     284    height: 30px;
     285    border-radius: 5px;
    252286}
    253287
     
    287321}
    288322
     323
    289324.wpcf_nd input[type="submit"] {
    290325    width: 100%;
     
    343378}
    344379
    345 .wpcf-live-color-preview {
    346     width: 14px;
    347     height: 14px; 
    348     border-radius: 2px;
    349     margin-left: 4px;
    350     margin-right: 4px;
    351     box-shadow: 0px 0px 2px #888888;
    352 }
    353380
    354381#wpcf_nd_label_font_weight{
     
    370397    .wpcf-styling-form .wpcf-admin-preview-form, .wpcf_nd {
    371398        margin-left: 0 !important;
    372         padding: 28px;
    373         background: white;
     399        padding: 18px 28px 0px 28px;
     400        background: #fff;
    374401    }
    375402}
     
    378405    .wpcf-styling-form .wpcf-admin-preview-form, .wpcf_nd {
    379406        margin-left: 150px;
    380         padding: 28px;
    381         background: white;
     407        padding: 18px 28px 0px 28px;
     408        background: #fff;
    382409    }
    383410}
    384     
    385    
     411   
     412
    386413.wpcf-styling-form #sola_cfr_styling_tabs {
    387414    height: 100%;
    388415    width: 100%;
    389416}
    390    
     417
     418/*
    391419.wpcf-styling-form .wpcf-admin-preview-form:hover {
    392420    border: 1px solid #c5c5c5;
    393421}
     422*/
    394423   
    395424#sola_cfr_styling_tabs .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active, a.ui-button:active, .ui-button:active, .ui-button.ui-state-active:hover {
     
    420449    width: 100%;
    421450}
    422    
     451
     452
    423453#sola_cfr_styling_tabs .ui-state-default .ui-tabs-anchor {
    424454    padding: 10px 0px 10px 0px;
    425 }
    426 
    427 #sola_cfr_styling_tabs .ui-state-default.ui-state-active{
    428     background: #0085ba;
    429     color: #fff;
    430 }
    431    
    432 #sola_cfr_styling_tabs .ui-state-default{
    433     background: #e9e9e9;
     455   
     456}
     457
     458#sola_cfr_styling_tabs .ui-state-default.ui-state-active a{
     459    background: #fff;
     460     color: #000;
     461}
     462
     463   
     464#sola_cfr_styling_tabs .ui-state-default {
     465    background: #D3D3D3;
    434466}
    435467 
     
    483515    width: 32.66%;
    484516}
     517
     518.widefat td pre{
     519    background: #edf7fc !important;
     520    box-shadow: none !important;
     521    border: none !important;
     522    padding: 7px 5px;
     523    font-size: 15px !important;
     524    color: #007cba!important;
     525    border: 2px solid #007cba !important;
     526    border-radius: 3px !important;
     527    cursor: pointer;
     528    text-align: center;
     529}
     530
     531.updated, .error{
     532    margin: 15px 15px 2px 0 !important;
     533}
     534
     535label#wpcf-admin-preview-darkmode-label{
     536    color: #000;
     537    display: inline;
     538}
     539
     540input#wpcf-admin-preview-darkmode-checkbox{
     541    margin-left: 15px;
     542    margin-top: 20px;
     543}
     544
     545span#wpcf-admin-preview-darkmode-note{
     546    display: block;
     547    padding-bottom: 20px;
     548    border-bottom: 1px solid rgba(0, 0, 0, 0.15);
     549}
     550
     551#contact_form_ready_tabs .ui-tabs-panel > h2{
     552    font-size: 20px;
     553}
     554
     555#contact_form_ready_tabs{
     556    border: none;
     557}
     558
     559#contact_form_ready_tabs .ui-tabs-panel{
     560    border: 1px solid #dddddd;
     561}
     562
     563#contact_form_ready_tabs .ui-tabs-nav li{
     564    margin-right: 0 !important;
     565    border-bottom: 1px solid rgba(0, 0, 0, 0.25);
     566}
     567
     568#contact_form_ready_tabs .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr{
     569    border-radius: 0 !important;
     570}
     571
     572#contact_form_ready_tabs .ui-widget-header{
     573    border: none;
     574    background: none;
     575    padding-left: 0px;
     576}
  • contact-form-ready/trunk/css/wpcf-tabs-style.css

    r2230921 r3049139  
    1 label { font-weight: bolder; } 
     1/*label { font-weight: bolder; }*/
     2
    23#sola_cfr_tabs .ui-tabs-nav {
    34    padding:0;
    4     height:auto; 
    5  }
    6  
     5    height:auto;
     6 }
     7 
     8#sola_cfr_tabs h1 {
     9    margin-top: 40px;
     10    font-size: 24px;
     11    font-weight: 450;
     12}
     13
    714 #sola_cfr_tabs .ui-tabs-nav {
    815    border-bottom: none !important;
    916    margin-top: 0px !important;
    10  }
    11  #sola_cfr_tabs .ui-tabs-panel{
     17     
     18 }
     19
     20 #sola_cfr_tabs .ui-tabs-panel {
    1221    padding:0;
    13  }
     22
     23 }
     24
    1425 #sola_cfr_tabs .ui-tabs-panel table {
    15     padding: 5px;
    16  }
     26    padding: 1px;
     27   
     28    font-style: normal;
     29 }
     30
    1731 #sola_cfr_tabs .ui-state-default{
    1832 width: 180px;
    19  background-color: #e9e9e9;
     33 background-color: #D3D3D3;
    2034 height: 35px;
    21  padding: 0px;
    2235 line-height: 30px;
    2336 border: none !important;
    24  
    25  }
     37 margin-bottom: 0px;
     38 margin-top: 3px;
     39 font-weight: 400;
     40 font-size: 12px;
     41   
     42 }
     43
    2644 #sola_cfr_tabs .ui-state-default a{
    2745    color:#000;
     
    2947    text-align: center;
    3048    display: block;
    31  }
    32  #sola_cfr_tabs .ui-state-default a:hover{
    33     text-decoration:none;   
    34     cursor: pointer;
    35     color: #000;
    36     display: block;
    37  }
    38  
    39  
     49    font-size: 13px;
     50    padding-top: 2px;
     51    padding-bottom: 17px;
     52   
     53 }
    4054 
    4155 #sola_cfr_tabs .ui-state-active a:hover{
    4256    cursor: pointer;
    43  border: none ;
    44  }
     57    border: none ;
     58 }
     59
    4560 #sola_cfr_tabs .ui-state-active {
    4661    background-color: #fff;
    4762    border: none;
     63     
    4864 }
    4965
    5066 #sola_cfr_tabs .ui-tabs-nav {
    5167    text-align: left;
     68     background: #f1f1f1;
    5269 }
    5370 
     
    5572    margin: 0;
    5673    padding: .2em .2em 0 ;
    57  }
    58  
     74   
     75 }
     76 
     77
    5978 #sola_cfr_tabs .ui-widget-header {
    6079    border: 1px solid #dddddd;
    6180    color: #333333;
    62     font-weight: bold;
    63  }
     81    font-weight: bold; 
     82   
     83 }
     84
    6485 #sola_cfr_tabs .ui-helper-reset {
    6586    margin: 0;
     
    7091    font-size: 100%;
    7192    list-style: none;
    72  }
     93     
     94 }
     95
    7396 #sola_cfr_tabs .ui-helper-clearfix:before, .ui-helper-clearfix:after {
    7497    content: "";
     
    7699    border-collapse: collapse;
    77100 }
     101
    78102 #sola_cfr_tabs .ui-helper-clearfix:after {
    79103    clear: both;
    80104 }
     105
    81106 #sola_cfr_tabs .ui-helper-clearfix:before, .ui-helper-clearfix:after {
    82107    content: "";
     
    84109    border-collapse: collapse;
    85110 }
     111
    86112 #sola_cfr_tabs .ui-tabs .ui-tabs-nav li.ui-tabs-active {
    87113    margin-bottom: -1px;
    88114    padding-bottom: 10px;
     115   
    89116 }
    90117 
     
    97124    border-bottom-width: 0;
    98125    white-space: nowrap;
     126         
    99127 }
    100128
    101129 #sola_cfr_tabs{
    102     margin: 1px .2em 15px 0;
     130    margin: 1px .2em 15px 0;   
     131   
    103132 }
    104133 
     
    108137    color: #ffffff;
    109138 }
     139
    110140 #sola_cfr_tabs .ui-tabs-nav {
    111141    border-bottom: none;
    112142    margin-top: 15px;
     143   
    113144 }
    114145 
     
    117148 .ui-tabs-anchor:focus{
    118149    outline: none;
    119  box-shadow: none;
     150    box-shadow: none;
     151     
    120152 }
    121153
    122154 #sola_cfr_tabs .ui-state-default.ui-state-active {
    123     background: #0085ba;
    124     color: #fff;
    125 }
     155    background-color: #fff;
     156    color: #000;
     157}
     158
    126159#sola_cfr_tabs .ui-state-active .ui-tabs-anchor{
    127     color: #ffffff;
    128 }
    129  
    130  
     160    color: #000;
     161
     162}
     163 
     164#sola_cfr_tabs #tabs-1, /* Contact Form Tab*/
     165#sola_cfr_tabs #tabs-2, /* Anti Spam Tab */
     166#sola_cfr_tabs #tabs-4, /* Privacy Tab */
     167#sola_cfr_tabs #tabs-5, /* Advanced Tab */
     168#sola_cfr_tabs .extension-tab /* Extension Tabs */
     169{
     170    background: #fff;
     171    padding: 0.1em 13px;
     172    margin-top: 2px;
     173    font-style: normal;
     174    width: 97% !important;
     175}
     176
     177/* Email Template Tab */
     178#sola_cfr_tabs #tabs-3 {
     179    background: #fff;
     180    padding: 0.1em 13px;
     181    margin-top: 2px;
     182    /*width: 2147px;*/
     183    width: 97% !important;
     184}
     185
     186/* REST API Tab */
     187#sola_cfr_tabs #tabs-6 {
     188   background: #fff;
     189   padding: 0.1em 13px;
     190   margin-top: 2px;
     191   font-style: normal;
     192   font-weight: 100;
     193   width: 97% !important;
     194}
     195
     196#sola_cfr_tabs #tabs-5 #wpcf_custom_css_container{
     197   margin-right: 13px;
     198}
     199
     200textarea #wpcf_custom_css{
     201   border-color: #2B323C;
     202   background-color:#2B323C;
     203   background: #2B323C;
     204   color: #fff;
     205   padding-left: 10px;
     206}
     207
     208.wp-core-ui .button-primary {
     209   background: #f3f5f6;
     210   color: #183ad6;
     211}
     212
     213.wp-core-ui .button-primary:hover{
     214   background: #cee3ec;
     215   color: #007cba;
     216}
     217
     218#tabs-3 .wp-list-table{
     219   width: 100% !important;
     220}
     221
     222#wpcf_restore_default_template{
     223   margin-top: 15px !important;
     224}
     225
     226.wp-list-table{
     227   margin-bottom: 15px;
     228}
     229
     230.wp-list-table label{
     231   font-weight: 600;
     232}
     233
     234.updated, .error{
     235   margin: 15px 15px 2px 0 !important;
     236}
     237
     238#wpcf_custom_css_tr_container .CodeMirror{
     239   width: 400px;
     240}
     241
     242.CodeMirror .CodeMirror-scroll .CodeMirror-sizer{
     243   min-height: 150px !important;
     244}
  • contact-form-ready/trunk/gutenberg/block.js

    r2230921 r3049139  
    1 var el = wp.element.createElement,
    2     registerBlockType = wp.blocks.registerBlockType,
    3     ServerSideRender = wp.components.ServerSideRender,
    4     TextControl = wp.components.TextControl,
    5     SelectControl = wp.components.SelectControl,
    6     InspectorControls = wp.editor.InspectorControls,
    7     AlignmentToolbar = wp.editor.AlignmentToolbar,
    8     BlockControls = wp.editor.BlockControls;
    9    
    101
    11 /*
    12  * Registers the block in JavaScript.
    13  */
    14 registerBlockType( 'contact-form-ready/cfr-gutenberg-block', {
    15     title: 'Contact Form Ready Block',
    16     icon: 'email-alt',
    17     category: 'common',
    18    
    19 /*
    20 *   Our block is renderred on the PHP side so here we are
    21 *   setting our controls and attributes.
    22 */
    23     edit: function( props ) {
     2(function( blocks, element, components, i18n, wp) {
     3    const blockEditor = wp.blockEditor;
     4    const useBlockProps = blockEditor.useBlockProps;
     5    const InspectorControls = blockEditor.InspectorControls;
     6    const PanelBody = components.PanelBody;
     7    const ServerSideRender = wp.serverSideRender,
    248
    25         var alignment = props.attributes.alignment;
    269
    27         function onChangeAlignment( newAlignment ) {
    28             props.setAttributes( { alignment: newAlignment === undefined ? 'none' : newAlignment } );
    29         }
     10    CFRGutenberg = function(){
     11        blocks.registerBlockType('contact-form-ready/cfr-gutenberg-block', this.getDefinition());
     12    }
     13
     14    CFRGutenberg.prototype.getDefinition = function(){
     15        return {
     16            attributes : this.getAttributes(),
     17            edit : (props) => {
     18                return this.onEdit(props);
     19            },
     20            save : (props) => {
     21                const blockProps = useBlockProps.save();
     22                return null;
     23            }
     24        };
     25    }
     26
     27    CFRGutenberg.prototype.getAttributes = function(){
     28        return {
     29            cfid : {type : 'string'},
     30            alignment: {type : 'string'}
     31        }
     32    }
     33
     34    CFRGutenberg.prototype.onEdit = function(props){
     35        const inspector = this.getInspector(props);
     36        const preview = this.getPreview(props);
    3037
    3138        return [
    32             /*
    33              *  Automatically calls our block renderer from our PHP when it needs
    34              *  to get an updated view of the block
    35              */
    36             el( ServerSideRender, {
     39            inspector,
     40            preview
     41        ];
     42    }
     43
     44    CFRGutenberg.prototype.getInspector = function(props){
     45        let inspector = [];
     46        if(!!props.isSelected){
     47            let panel = React.createElement(
     48                InspectorControls,
     49                { key: "inspector" },
     50                React.createElement(
     51                    PanelBody,
     52                    { title: wp.i18n.__('Settings') },
     53                    React.createElement(wp.components.SelectControl, {
     54                        name: "cfid",
     55                        label: wp.i18n.__("Form"),
     56                        value: props.attributes.cfid || "",
     57                        options: this.getFormOptions(),
     58                        onChange: (value) => {
     59                            props.setAttributes({cfid : value});
     60                        }
     61                    }),
     62                    React.createElement(wp.components.SelectControl, {
     63                        name: 'alignment',
     64                        label: wp.i18n.__('Alignment'),
     65                        value: props.attributes.alignment || "",
     66                        options: [
     67                            {
     68                                key: "left",
     69                                value: "left",
     70                                label: wp.i18n.__('Left')
     71                            },
     72                            {
     73                                key: "center",
     74                                value: "center",
     75                                label: wp.i18n.__('Center')
     76                            },
     77                            {
     78                                key: "right",
     79                                value: "right",
     80                                label: wp.i18n.__('Right')
     81                            }
     82                        ],
     83                        onChange: (value) => {
     84                            props.setAttributes({alignment : value});
     85                        }
     86                    })
     87                )
     88            );
     89
     90            inspector.push(panel);
     91        }
     92        return inspector;
     93    }
     94
     95    CFRGutenberg.prototype.getPreview = function(props){
     96        let preview = [];
     97
     98        let blockProps = useBlockProps({
     99            key: 'cfr-preview',
     100            className: props.className + " cfr-preview-block"
     101        });
     102
     103        let serverSide = React.createElement(
     104            ServerSideRender,
     105            {
     106                key: "preview",
    37107                block: 'contact-form-ready/cfr-gutenberg-block',
    38                 attributes: props.attributes,
    39             } ),
     108                attributes: props.attributes
     109            }
     110        );
    40111
    41             /*
    42              *  Adds our block controls, in this case we are simply adding
    43              *  the ability to text align left, center and right using the
    44              *  Gutenberg controls
    45              */
    46             el( BlockControls,{
    47                 key: 'controls' },
    48                 el(
    49                     AlignmentToolbar, {
    50                         value: alignment,
    51                         onChange: onChangeAlignment,
    52                     }
    53                 )
    54             ),
     112        let wrapper = React.createElement('div', {...blockProps}, serverSide);
    55113
    56             /*
    57              * Adds inspector controls, right hand side of block/page
    58              */
    59             el( InspectorControls, {},
    60                 el( SelectControl, {
    61                     label: 'Please Choose A Contact Form',
    62                     value: props.attributes.cfid,
    63                     onChange: ( value ) => { props.setAttributes( { cfid: value } ); },
    64                     options: cfr_localized_forms,
    65                 } )
    66             ),
    67         ];
    68     },
     114        preview.push(wrapper);
    69115
    70     // We're going to be rendering in PHP, so save() can just return null.
    71     save: function() {
    72         return null;
    73     },
    74 } );
     116        return preview;
     117    }
     118
     119    CFRGutenberg.prototype.getFormOptions = function(){
     120        let data = [];
     121
     122        data.push({
     123            key: "",
     124            value: "",
     125            label: wp.i18n.__('Please choose a form')
     126        });
     127
     128        cfr_localized_forms.forEach(function (el) {
     129            data.push({
     130                key: el.value,
     131                value: el.value,
     132                label: el.label + " (" + el.value + ")"
     133            });
     134        });
     135
     136        return data;
     137    }
     138
     139    const cfrGutenberg = new CFRGutenberg();
     140   
     141})( window.wp.blocks, window.wp.element, window.wp.components, window.wp.i18n, window.wp);
  • contact-form-ready/trunk/includes/class.document.php

    r2168183 r3049139  
    33namespace WPGMZA;
    44
    5 if (!defined('ABSPATH')) {
    6     exit;
     5if(!defined('ABSPATH'))
     6    return;
     7
     8/**
     9 * We don't actually need to be callin require once here at all
     10 *
     11 * The autoloader works fine, but because it was rebuilt in some ways for PHP8
     12 *
     13 * We will leave it as it, with a conditional PHP8 brach for now
     14 *
     15 * Expect this to be removed more fully soon
     16*/
     17if(version_compare(phpversion(), '8.0', '>=')){
     18    require_once(plugin_dir_path(__FILE__) . 'php8/class.dom-element.php');
     19} else {
     20    require_once(plugin_dir_path(__FILE__) . 'class.dom-element.php');
    721}
    822
    9 require_once(__DIR__ . '/class.element.php');
    10 
     23#[\AllowDynamicProperties]
    1124class DOMDocument extends \DOMDocument
    1225{
     
    1932    public function __construct($version='1.0', $encoding='UTF-8')
    2033    {
    21         parent::__construct($version, $encoding);
     34        \DOMDocument::__construct($version, $encoding);
     35       
    2236        $this->registerNodeClass('DOMElement', 'WPGMZA\DOMElement');
    2337        $this->onReady();
     38    }
     39   
     40    public static function convertUTF8ToHTMLEntities($html)
     41    {
     42
     43        try{
     44            if(version_compare(phpversion(), '8.2', '>=') && function_exists('mb_encode_numericentity')){
     45                /* Deprecations in PHP require us to rework the way we do conversions */
     46                $converted = htmlspecialchars_decode(mb_encode_numericentity(htmlentities($html, ENT_QUOTES, 'UTF-8'), [0x80, 0x10FFFF, 0, ~0], 'UTF-8'));
     47                return $converted;
     48            } else {
     49                if(function_exists('mb_convert_encoding')){
     50                    return mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
     51                } else{
     52                    trigger_error('Using fallback UTF to HTML entity conversion', E_USER_NOTICE);
     53                    return htmlspecialchars_decode(utf8_decode(htmlentities($html, ENT_COMPAT, 'utf-8', false)));
     54                }
     55            }
     56        } catch (\Exception $ex){
     57            if(function_exists('mb_convert_encoding')){
     58                return mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
     59            } else{
     60                trigger_error('Using fallback UTF to HTML entity conversion', E_USER_NOTICE);
     61                return htmlspecialchars_decode(utf8_decode(htmlentities($html, ENT_COMPAT, 'utf-8', false)));
     62            }
     63        }
     64       
    2465    }
    2566   
     
    4990     * @return boolean TRUE on success, FALSE otherwise
    5091     */
     92    #[\ReturnTypeWillChange]
    5193    public function load($src, $options=null)
    5294    {
    5395        if(!is_string($src))
    5496            throw new \Exception('Input must be a string');
    55        
    5697        $result = \DOMDocument::load($src, $options);
    5798        $this->src_file = $src;
     
    61102       
    62103        return $result;
     104    }
     105   
     106    private function translateLineNumber($htmlLineNumber, $src)
     107    {
     108       
     109    }
     110   
     111    public function onError($severity, $message, $file, $unused)
     112    {
     113        if(!preg_match('/DOMDocument::loadHTML.+line: (\d+)/', $message, $m)){
     114            trigger_error($message, E_USER_WARNING);
     115            return;
     116        }
     117       
     118        $htmlLineNumber = $m[1];
     119        $lines          = file($this->src_file);
     120       
     121        $totalPhpLines  = count($lines);
     122        $lineCounter    = 1;
     123       
     124        $allowShortTags = ini_get('short_open_tag') == "1";
     125        $regexOpenTag   = ($allowShortTags ? '/<\?(php)?/' : '/<\?php/');
     126        $regexCloseTag  = "/\?>/";
     127       
     128        $inPhp          = false;
     129       
     130        for($phpLineNumber = 1; $phpLineNumber <= $totalPhpLines; $phpLineNumber++)
     131        {
     132            if($lineCounter == $htmlLineNumber)
     133            {
     134                $message = preg_replace(
     135                    array('/loadHTML/', '/line: \d+/'),
     136                    array('loadPHPFile', "line: $phpLineNumber"),
     137                    $message
     138                );
     139
     140                /* Supress error because MO files cause issues which can be ignored */
     141                /* Update 2022-05-12 -> We don't need to log these at all,
     142                 * even surpression results in php-error class being added to WP admin area
     143                 *
     144                 * So we simply don't track the notice as it doesn't serve a real purpose on account of MO files
     145                */
     146                /*
     147                @trigger_error($message, E_USER_WARNING);
     148                */
     149                return;
     150            }
     151           
     152            $line           = $lines[$phpLineNumber - 1];
     153           
     154            $numOpenTags    = preg_match_all($regexOpenTag, $line);
     155            $numCloseTags   = preg_match_all($regexCloseTag, $line);
     156           
     157            if($numOpenTags > $numCloseTags)
     158            {
     159                $inPhp      = true;
     160            }
     161            else if($numCloseTags > 0)
     162            {
     163                $inPhp      = false;
     164                $lineCounter--; // NB: I don't understand why a close tag swallows the newline, but it does appear to
     165            }
     166           
     167            if(!$inPhp)
     168                $lineCounter++;
     169        }
     170
     171        $safeEntities = array('progress');
     172        foreach($safeEntities as $entity){
     173            if(preg_match("/DOMDocument::loadHTML.+{$entity} invalid in Entity/", $message, $m)){
     174                // HTML 5 safe entity, doesn't need to be logged
     175                return;
     176            }
     177        }
     178       
     179        trigger_error("Failed to translate line number", E_USER_WARNING);
     180        trigger_error($message, E_USER_WARNING);
    63181    }
    64182   
     
    69187     * @return boolean TRUE on success, FALSE otherwise
    70188     */
    71     public function loadPHPFile($src, $options=null)
     189    public function loadPHPFile($src, $options=0)
    72190    {
    73191        if(!file_exists($src))
     
    81199            throw new \Exception("$src is empty");
    82200       
    83         $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
    84         $result = $this->loadHTML($html);
    85        
    86         $this->src_file = $src;
     201        $this->src_file     = $src;
     202        $html               = DOMDocument::convertUTF8ToHTMLEntities($html);
     203        $suppress_warnings  = !(defined('WP_DEBUG') && WP_DEBUG);
     204       
     205        if(!$suppress_warnings)
     206        {
     207            $error_handler = set_error_handler(array($this, 'onError'), E_WARNING);
     208        }
     209       
     210        // From PHP 5.4.0 onwards, loadHTML takes 2 arguments
     211        if(version_compare(PHP_VERSION, '5.4.0', '>='))
     212        {
     213            if($suppress_warnings)
     214                $result = @$this->loadHTML($html, $options);
     215            else
     216                $result = $this->loadHTML($html, $options);
     217        }
     218        else
     219        {
     220            if($suppress_warnings)
     221                $result = @$this->loadHTML($html);
     222            else
     223                $result = $this->loadHTML($html);
     224        }
     225       
     226        if(!$suppress_warnings)
     227            set_error_handler($error_handler);
    87228       
    88229        $this->onLoaded();
    89230       
    90231        return $result;
     232    }
     233   
     234    public function getDocumentElementSafe()
     235    {
     236        // Workaround for some installations of PHP missing documentElement property
     237        if(property_exists($this, 'documentElement'))
     238            return $this->documentElement;
     239       
     240        $xpath = new \DOMXPath($this);
     241        $result = $xpath->query('/html/body');
     242        $item = $result->item(0);
     243       
     244        return $item;
    91245    }
    92246   
     
    151305    public function querySelector($query)
    152306    {
    153         if(!$this->documentElement)
     307        if(!$this->getDocumentElementSafe())
    154308            throw new \Exception('Document is empty');
    155         return $this->documentElement->querySelector($query);
     309       
     310        return $this->getDocumentElementSafe()->querySelector($query);
    156311    }
    157312   
     
    162317    public function querySelectorAll($query)
    163318    {
    164         if(!$this->documentElement)
     319        if(!$this->getDocumentElementSafe())
    165320            throw new \Exception('Document is empty');
    166         return $this->documentElement->querySelectorAll($query);
     321       
     322        return $this->getDocumentElementSafe()->querySelectorAll($query);
    167323    }
    168324   
     
    174330    public function populate($src, $formatters=null)
    175331    {
    176         if(!$this->documentElement)
     332        if(!$this->getDocumentElementSafe())
    177333            throw new \Exception('Document is empty');
    178         return $this->documentElement->populate($src, $formatters);
     334       
     335        return $this->getDocumentElementSafe()->populate($src, $formatters);
     336    }
     337   
     338    public function serializeFormData()
     339    {
     340        if(!$this->getDocumentElementSafe())
     341            throw new \Exception('Document is empty');
     342       
     343        return $this->getDocumentElementSafe()->serializeFormData();
    179344    }
    180345   
     
    200365        $result = '';
    201366       
    202         foreach($this->querySelectorAll('body>*') as $node)
     367        if(property_exists($this, 'documentElement'))
     368            $body = $this->querySelector('body');
     369        else
     370            $body = $this->getDocumentElementSafe();
     371       
     372        if(!$body)
     373            return null;
     374       
     375        for($node = $body->firstChild; $node != null; $node = $node->nextSibling)
    203376            $result .= $this->saveHTML($node);
    204377           
    205378        return $result;
    206379    }
     380   
     381    public function __get($name)
     382    {
     383        if($name == 'html')
     384            return $this->saveInnerBody();
     385       
     386        return null;
     387    }
    207388}
    208 
    209 ?>
  • contact-form-ready/trunk/includes/class.element.php

    r2168183 r3049139  
    33namespace WPGMZA;
    44
    5 if (!defined('ABSPATH')) {
    6     exit;
    7 }
    8 
    9 require_once(__DIR__ . '/class.selector-to-xpath.php');
    10 
     5if(!defined('ABSPATH'))
     6    return;
     7
     8require_once(plugin_dir_path(__FILE__) . '../class.selector-to-xpath.php');
     9
     10/**
     11 * Direct replacement for the defauly class.dom-element.php
     12 *
     13 * Due to the fact it is located in the php8 sub directory, we will only load it for PHP 8 users
     14*/
    1115class DOMElement extends \DOMElement
    1216{
     
    1822    }
    1923   
     24    public function __get($name)
     25    {
     26        switch($name)
     27        {
     28            case "html":
     29               
     30                return $this->ownerDocument->saveHTML( $this );
     31           
     32                break;
     33        }
     34       
     35        return \DOMElement::__get($name);
     36    }
     37   
    2038    /**
    2139     * Runs a CSS selector on the element. This is equivilant to Javascripts querySelector
     
    2644    {
    2745        $results = $this->querySelectorAll($query);     
     46       
    2847        if(empty($results))
    2948            return null;
     49       
    3050        return $results[0];
    3151    }
     
    4161        try{
    4262            $expr       = DOMElement::selectorToXPath($query);
    43         }catch(Exception $e) {
     63        }catch(\Exception $e) {
    4464            echo "<p class='notice notice-warning'>Failed to convert CSS selector to XPath (" . $e->getMessage() . ")</p>";
    4565        }
     
    5474            usort($results, array('WPGMZA\DOMElement', 'sortByDOMPosition'));
    5575       
    56         return $results;
    57     }
    58    
    59     /**
    60      * Prepends the subject to this element.
    61      * @param $subject element or array of elements
    62      * @return $this element
    63      */
    64     public function prepend($subject)
    65     {
    66         if(is_array($subject))
    67         {
    68             $originalFirst = $this->firstChild;
    69            
    70             foreach($subject as $el)
    71                 $this->insertBefore($el, $originalFirst);
    72         }
    73         else
    74             $this->insertBefore($subject, $this->firstChild);
    75        
    76         return $this;
    77     }
    78    
    79     /**
    80      * Appends the subject to this element.
    81      */
    82     public function append($subject)
    83     {
    84         if(is_array($subject))
    85         {
    86             foreach($subject as $el)
    87                 $this->appendChild($subject);
    88         }
    89         else
    90             $this->appendChild($subject);
    91        
    92         return $this;
     76        return new DOMQueryResults($results);
    9377    }
    9478   
     
    9983    public function closest($selector)
    10084    {
    101         if($this === $this->ownerDocument->documentElement)
     85        if($this === $this->ownerDocument->getDocumentElementSafe())
    10286            throw new \Exception('Method not valid on document element');
    10387       
     
    11094       
    11195        return null;
     96    }
     97   
     98    /**
     99     * Wraps this element in the element passed in, then replaces this nodes original position
     100     * @param DOMElement The element to wrap this element in
     101     */
     102    public function wrap($wrapper)
     103    {
     104        $this->parentNode->replaceChild($wrapper, $this);
     105        $wrapper->appendChild($this);
    112106    }
    113107   
     
    211205    public function import($subject, $forcePHP=false)
    212206    {
     207        global $wpgmza;
     208       
    213209        $node = null;
    214210       
    215211        if($subject instanceof \DOMDocument)
    216212        {
    217             if(!$subject->documentElement)
     213            if(!$subject->getDocumentElementSafe())
    218214                throw new \Exception('Document is empty');
    219215           
    220             $node = $this->ownerDocument->importNode($subject->documentElement, true);
     216            $node = $this->ownerDocument->importNode($subject->getDocumentElementSafe(), true);
    221217
    222218        }
     
    237233                $temp->load($subject);
    238234           
    239             $node = $this->ownerDocument->importNode($temp->documentElement, true);
     235            $node = $this->ownerDocument->importNode($temp->getDocumentElementSafe(), true);
    240236        }
    241237        else if(is_string($subject))
     
    244240                return;
    245241           
    246             if($subject != strip_tags($subject))
     242            if($subject != strip_tags($subject) || preg_match('/&.+;/', $subject))
    247243            {
    248244                // Subject is a HTML string
    249                 $subject = mb_convert_encoding($subject, 'HTML-ENTITIES', 'UTF-8');
     245                $html = DOMDocument::convertUTF8ToHTMLEntities($subject);
    250246               
    251247                $temp = new DOMDocument('1.0', 'UTF-8');
    252                 $temp->loadHTML("<div id='domdocument-import-payload___'>" . $subject . "</div>");
     248                $str = "<div id='domdocument-import-payload___'>" . $html . "</div>";
     249
     250                if($wpgmza->isInDeveloperMode()){
     251                    $temp->loadHTML($str);
     252                } else {
     253                    @$temp->loadHTML($str);
     254                }
    253255               
    254256                $body = $temp->querySelector('#domdocument-import-payload___');
     
    274276        if($body = $node->querySelector("body"))
    275277        {
    276             // TODO: I don't think a query selector is necessary here. Iterating over the bodies children should be more optimal.
    277             foreach($node->querySelectorAll("body>*") as $child)
     278            // TODO: I don't think a query selector is necessary here. Iterating over the bodies children should be more optimal
     279            $results = $node->querySelectorAll("body>*");
     280           
     281            foreach($results as $child)
    278282                $this->appendChild($child);
     283           
     284            return $results;
    279285        }
    280286        else
     287        {
    281288            $this->appendChild($node);
    282        
    283         return $this;
     289            return $node;
     290        }
     291       
     292        return null;
    284293    }
    285294   
     
    449458     * @param mixed $src Associative array or object with the keys and values
    450459     * @param array $formatters Optional associative array of functions to format values with. The keys on this array correspond with the keys on $src
    451      * @return \Smart\Element This element
     460     * @return DOMElement This element
    452461     */
    453462    public function populate($src=null, $formatters=null)
     
    500509    }
    501510   
     511    public function serializeFormData()
     512    {
     513        $data = array();
     514       
     515        foreach($this->querySelectorAll('input, select, textarea') as $input)
     516        {
     517            $name = $input->getAttribute('name');
     518           
     519            if(!$name)
     520                continue;
     521           
     522            if(preg_match('/nonce/i', $name))
     523                continue; // NB: Do not serialize nonce values
     524           
     525            switch($input->getAttribute('type'))
     526            {
     527                case 'checkbox':
     528               
     529                    if($input->getValue())
     530                        $data[$name] = true;
     531                    else
     532                        $data[$name] = false;
     533                   
     534                    break;
     535                   
     536                case 'radio':
     537               
     538                    if($input->getAttribute('checked'))
     539                        $data[$name] = $input->getAttribute('value');
     540               
     541                    break;
     542               
     543                default:
     544                    $data[$name] = $input->getValue();
     545                    break;
     546            }
     547        }
     548       
     549        return $data;
     550    }
     551   
    502552    /**
    503553     * Gets the value of this element
     
    545595    public function setValue($value)
    546596    {
     597        /*if($this->getAttribute("name") == "wpgmza_gdpr_require_consent_before_load")
     598        {
     599           
     600            echo "<pre>";
     601            debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
     602            exit;
     603        }*/
     604       
    547605        switch(strtolower($this->nodeName))
    548606        {
     
    642700    public function clear()
    643701    {
     702
    644703        while($this->childNodes->length)
    645704            $this->removeChild($this->firstChild);
     
    651710     * @return \Smart\Element This element
    652711     */
    653     public function remove()
     712    public function remove() : void
    654713    {
    655714        if($this->parentNode)
    656715            $this->parentNode->removeChild($this);
    657         return $this;
    658716    }
    659717}
    660718
    661 ?>
  • contact-form-ready/trunk/includes/module_recaptcha.php

    r2190532 r3049139  
    3333
    3434    <h2><?php _e("Anti Spam Settings","wpcf_nd"); ?></h2>
    35     <table class="wp-list-table widefat striped fixed">
     35    <table class="wp-list-table fixed" >
    3636        <tbody>
    3737            <tr>
    38                 <td width='250'><label for='wpcf_nd_enable_recaptcha'><?php _e("Enable reCAPTCHA?","wpcf_nd"); ?></label></td>
     38                <td width='250' ><label for='wpcf_nd_enable_recaptcha'><?php _e("Enable reCAPTCHA?","wpcf_nd"); ?></label></td>
    3939                <td><?php
    4040            $is_checked = (isset($wpcf_nd_settings['wpcf_nd_enable_recaptcha']) && $wpcf_nd_settings['wpcf_nd_enable_recaptcha'] == 1) ? "checked" : "";
     
    4444            <tr>
    4545                <td><label for='wpcf_nd_recaptcha_site_key'><?php _e("Site key","wpcf_nd"); ?></label></td>
    46                 <td><input type='text' name='wpcf_nd_recaptcha_site_key' class='regular-text' id='wpcf_nd_recaptcha_site_key' value='<?php echo $wpcf_nd_settings['wpcf_nd_recaptcha_site_key']; ?>' /></td>
     46                <td><input type='text' name='wpcf_nd_recaptcha_site_key' class='regular-text' id='wpcf_nd_recaptcha_site_key' value='<?php echo esc_attr($wpcf_nd_settings['wpcf_nd_recaptcha_site_key']); ?>' /></td>
    4747            </tr>
    4848            <tr>
    4949                <td><label for='wpcf_nd_recaptcha_secret_key'><?php _e("Secret key","wpcf_nd"); ?></label></td>
    50                 <td><input type='text' name='wpcf_nd_recaptcha_secret_key' class='regular-text' id='wpcf_nd_recaptcha_secret_key' value='<?php echo $wpcf_nd_settings['wpcf_nd_recaptcha_secret_key']; ?>' /></td>
     50                <td><input type='text' name='wpcf_nd_recaptcha_secret_key' class='regular-text' id='wpcf_nd_recaptcha_secret_key' value='<?php echo esc_attr($wpcf_nd_settings['wpcf_nd_recaptcha_secret_key']); ?>' /></td>
    5151            </tr>
    5252        </tbody>
     
    6161            <tr>
    6262                <td><label for='wpcf_nd_invisible_recaptcha_site_key'><?php _e("Site key","wpcf_nd"); ?></label></td>
    63                 <td><input type='text' name='wpcf_nd_invisible_recaptcha_site_key' class='regular-text' id='wpcf_nd_invisible_recaptcha_site_key' value='<?php echo $wpcf_nd_settings['wpcf_nd_invisible_recaptcha_site_key']; ?>' /></td>
     63                <td><input type='text' name='wpcf_nd_invisible_recaptcha_site_key' class='regular-text' id='wpcf_nd_invisible_recaptcha_site_key' value='<?php echo esc_attr($wpcf_nd_settings['wpcf_nd_invisible_recaptcha_site_key']); ?>' /></td>
    6464            </tr>
    6565            <tr>
    6666                <td><label for='wpcf_nd_invisible_recaptcha_secret_key'><?php _e("Secret key","wpcf_nd"); ?></label></td>
    67                 <td><input type='text' name='wpcf_nd_invisible_recaptcha_secret_key' class='regular-text' id='wpcf_nd_invisible_recaptcha_secret_key' value='<?php echo $wpcf_nd_settings['wpcf_nd_invisible_recaptcha_secret_key']; ?>' /></td>
     67                <td><input type='text' name='wpcf_nd_invisible_recaptcha_secret_key' class='regular-text' id='wpcf_nd_invisible_recaptcha_secret_key' value='<?php echo esc_attr($wpcf_nd_settings['wpcf_nd_invisible_recaptcha_secret_key']); ?>' /></td>
    6868            </tr>
    6969        </tbody>           
  • contact-form-ready/trunk/includes/module_subscribe.php

    r2168183 r3049139  
    4444        wp_register_script( 'cfr_plugin_row_js', plugins_url(plugin_basename(dirname(dirname(__FILE__)))).'/js/cfr_plugin_row.js', array( 'jquery-ui-core' ) );
    4545        wp_enqueue_script( 'cfr_plugin_row_js' );
    46         wp_localize_script( 'cfr_plugin_row_js', 'cfr_sub_nonce', wp_create_nonce("cfr_subscribe") );
     46        wp_localize_script( 'cfr_plugin_row_js', 'cfr_sub_nonce', array('nonce' => wp_create_nonce("cfr_subscribe")) );
    4747    }
    4848}
     
    6464            $ret .= '<p><input type="checkbox" name="cfr_signup_newsletter" id="cfr_signup_newsletter"><label for="cfr_signup_newsletter" style="font-style:italic; margin-bottom:5px;">' . __( 'I would like to receive information on your latest updates, beta version and specials. I understand my information will be processed in terms of the GDPR, and I may wihtdraw it at any time.', 'wpcf_nd' ) . '</label></p>';
    6565            $ret .= '<span id="cfr_subscribe_div">';
    66             $ret .= '<input type="text" name="cfr_signup_newsletter" id="cfr_signup_newsletter" value="'.get_option( 'admin_email' ).'"></option>';
     66            $ret .= '<input type="text" name="cfr_signup_newsletter" id="cfr_signup_newsletter" value="'.esc_attr(get_option( 'admin_email' )).'"></option>';
    6767            $ret .= '<input type="button" class="button button-primary"  id="cfr_signup_newsletter_btn" name="cfr_signup_newsletter_btn" value="' . __( 'Sign up', 'wpcf_nd' ) . '" />';
    6868            $ret .= '<span>';
  • contact-form-ready/trunk/includes/module_template_editor.php

    r2190532 r3049139  
    1717
    1818    <h2><?php _e("Email Template","wpcf_nd"); ?></h2>
    19     <table class='wp-list-table widefat striped fixed'>
     19    <table class='wp-list-table fixed'>
    2020        <tr>
    2121            <td width='100%'>
  • contact-form-ready/trunk/js/admin.js

    r2190532 r3049139  
    177177
    178178        /* Color picker inputs */
    179         var colorInput = $('.wpcf-color-input');
    180 
    181         colorInput.iris();
    182         $(document).click(function (event) {
    183             if (! $(event.target).is(".wpcf-color-input, .iris-picker, .iris-picker-inner")) {
    184                 colorInput.iris('hide');
    185             }
    186         });
    187         colorInput.click(function (event) {
    188             colorInput.iris('hide');
    189             $(this).iris('show');
    190             return false;
    191         });
     179       /* Iris replaced with standard color picker*/
    192180
    193181    });
  • contact-form-ready/trunk/js/admin_settings.js

    r1882463 r3049139  
    1717
    1818        jQuery("body").on("click", "#wpcf_restore_default_template", function() {
    19             var proceed = confirm(wpcf_nd_confirm_restore_template_string);
     19            var proceed = confirm(wpcf_nd_confirm_restore_template_string.label);
    2020            if(proceed) {
    2121                var def_template = jQuery("#wpcf_nd_template_html_default").val();
     
    2525            }
    2626        });
     27    }
     28
     29    if (document.getElementById('wpcf_custom_css')){
     30        var wpcfCodeMirror = CodeMirror.fromTextArea(document.getElementById('wpcf_custom_css'), {
     31            matchBrackets: true,
     32            lineNumbers: true,
     33            styleActiveLine: true,
     34            smartIndent: true,
     35            mode: "text/css",
     36        });
     37        wpcfCodeMirror.setOption("theme", "monokai");
     38        setTimeout(function () {
     39            wpcfCodeMirror.refresh();
     40        }, 1);
    2741    }
    2842
  • contact-form-ready/trunk/js/admin_styling.js

    r2190532 r3049139  
    3030            previewSubmit = $('.wpcf-admin-preview-submit');
    3131
    32 
    33         $('#wpcf_nd_label_color').iris({
    34             change: function (event, ui) {
    35                 previewLabels.css('color', ui.color.toString());
    36             }
    37         });
    38 
    39         $('#wpcf_nd_input_bg_color').iris({
    40             change: function (event, ui) {
    41                 previewInputs.css('background', ui.color.toString());
    42             }
    43         });
    44 
    45         $('#wpcf_nd_input_border_color').iris({
    46             change: function (event, ui) {
    47                 previewInputs.css('border-color', ui.color.toString());
    48             }
    49         });
    50 
    51         $('#wpcf_nd_input_font_color').iris({
    52             change: function (event, ui) {
    53                 previewInputs.css('color', ui.color.toString());
    54             }
    55         });
    56 
    57         $('#wpcf_nd_submit_bg_color').iris({
    58             change: function (event, ui) {
    59                 previewSubmit.css('background', ui.color.toString());
    60             }
    61         });
    62 
    63         $('#wpcf_nd_submit_font_color').iris({
    64             change: function (event, ui) {
    65                 previewSubmit.css('color', ui.color.toString());
    66             }
    67         });
    68 
    69         $('#wpcf_nd_input_border_focus_color').iris({
    70             change: function (event, ui) {
    71                 previewInputs.mouseenter(function() {
    72                     $(this).css('border-color', ui.color.toString());
    73                 }).mouseleave(function() {
    74                     previewInputs.css('border-color', jQuery('#wpcf_nd_input_border_color').val());
    75                 });
    76             }
    77         });
    78 
    79         $('#wpcf_nd_submit_bg_hover_color').iris({
    80             change: function (event, ui) {
    81                 previewSubmit.mouseenter(function() {
    82                     previewSubmit.css('background', ui.color.toString());
    83                 }).mouseleave(function() {
    84                     previewSubmit.css('background', jQuery('#wpcf_nd_submit_bg_color').val());
    85                 });
    86             }
    87         });
    88 
    89         $('.wpcf-styling-form').click(function (event) {
    90             var targets = $(".wpcf-color-input, .iris-picker, .iris-picker-inner, .wpcf-submit-save-styling, .wpcf-admin-enable-style-wrapper, .wpcf-live-color-preview");
    91             if (!targets.is(event.target) && targets.has(event.target).length === 0) {
    92                 colorInput.iris('hide');
    93 
    94                 return false;
    95             }
    96         });
    97 
    98         colorInput.click(function (event) {
    99             colorInput.iris('hide');
    100             $(this).iris('show');
    101             return false;
    102         });
    103 
    10432        $('#wpcf_nd_label_font_size').on('change', function (event) {
    10533            previewLabels.css('font-size', $(this).val() + 'px');
     
    12553            previewSubmit.css('text-transform', $(this).val());
    12654        });
     55       
     56        $('#wpcf_nd_label_color').on('change', function (event) {
     57            previewLabels.css('color', $(this).val());
     58        });
    12759
    128        $(".wpcf-color-input").each(function(){
    129             var row = $(this).parent().parent();
    130  
    131             row.append('<td><div class="wpcf-live-color-preview"></div></td>');
    132             row.find(".wpcf-live-color-preview").css("background", $(this).val());
     60        $('#wpcf_nd_input_bg_color').on('change', function (event) {
     61            previewInputs.css('background-color', $(this).val());
    13362        });
    134  
    135         $("body").on('click', '.iris-picker', function(){
    136             $(".wpcf-color-input").each(function(){
    137                 var row = $(this).parent().parent();
    138  
    139             row.find(".wpcf-live-color-preview").css("background", $(this).val());
    140             });
     63
     64        var wpcf_style_input_border_color = $('#wpcf_nd_input_border_color').val();
     65        $('#wpcf_nd_input_border_color').on('change', function (event) {
     66            previewInputs.css('border-color', $(this).val());
     67            wpcf_style_input_border_color = $(this).val();
    14168        });
    142  
    143         $('.wpcf-live-color-preview').on('click', function(){
    144             var row = $(this).parent().parent();
    145  
    146             row.find('.wpcf-color-input').click();
     69
     70        var wpcf_style_input_border_focus_color = $('#wpcf_nd_input_border_focus_color').val();
     71        $('#wpcf_nd_input_border_focus_color').on('change', function (event) {
     72            wpcf_style_input_border_focus_color = $(this).val();
     73        });
     74
     75        $('.wpcf-admin-preview-input').on('mouseover', function (event) {
     76            previewInputs.css('border-color', wpcf_style_input_border_focus_color);
     77        });
     78
     79        $('.wpcf-admin-preview-input').on('mouseleave', function (event) {
     80            previewInputs.css('border-color', wpcf_style_input_border_color);
     81        });
     82
     83        $('#wpcf_nd_input_font_color').on('change', function (event) {
     84            previewInputs.css('color', $(this).val());
     85        });
     86
     87        var wpcf_style_submit_bg_color = $('#wpcf_nd_submit_bg_color').val();
     88        $('#wpcf_nd_submit_bg_color').on('change', function (event) {
     89            previewSubmit.css('background-color', $(this).val());
     90            wpcf_style_submit_bg_color = $(this).val();
     91        });
     92
     93        var wpcf_style_submit_bg_hover_color = $('#wpcf_nd_submit_bg_hover_color').val();
     94        $('#wpcf_nd_submit_bg_hover_color').on('change', function (event) {
     95            wpcf_style_submit_bg_hover_color = $(this).val();
     96        });
     97
     98        $('.wpcf-admin-preview-submit').on('mouseover', function (event) {
     99            previewSubmit.css('background-color', wpcf_style_submit_bg_hover_color);
     100        });
     101
     102        $('.wpcf-admin-preview-submit').on('mouseleave', function (event) {
     103            previewSubmit.css('background-color', wpcf_style_submit_bg_color);
     104        });
     105
     106        $('#wpcf-admin-preview-darkmode-checkbox').on('change', function(event) {
     107            if (!$('#wpcf-admin-preview-darkmode-checkbox').attr('checked')){
     108                $('#wpcf-admin-preview-darkmode-checkbox').attr('checked', 'checked');
     109            } else {
     110                $('#wpcf-admin-preview-darkmode-checkbox').removeAttr('checked');
     111            }
     112
     113            if ($('#wpcf-admin-preview-darkmode-checkbox').attr('checked')){
     114                $('.wpcf-admin-preview-form').css('background-color', '#333');
     115                $('#wpcf-admin-preview-darkmode-note').css('color', '#ddd');
     116                $('#wpcf-admin-preview-darkmode-label').css('color', '#fff' );
     117            } else {
     118                $('.wpcf-admin-preview-form').css('background-color', '#fff');
     119                $('#wpcf-admin-preview-darkmode-note').css('color', '#333');
     120                $('#wpcf-admin-preview-darkmode-label').css('color', '#000' );
     121            }
    147122        });
    148123    });
  • contact-form-ready/trunk/js/cfr_plugin_row.js

    r1882463 r3049139  
    2020        var data = {
    2121            action: 'cfr_subscribe',
    22             security: cfr_sub_nonce
     22            security: cfr_sub_nonce.nonce
    2323           
    2424        };
  • contact-form-ready/trunk/js/form-builder.js

    r1882463 r3049139  
    2828
    2929*/
    30 "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 l in e)a.inArray(e[l],t)&&delete e[l];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(/(checkbox-group|radio-group)/)&&(n.enableOther=$('[name="enable-other"]',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=jQuery.extend({},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="<textarea "+n+"></textarea>";break;case"button":case"submit":s="<button "+n+">"+t.label+"</button>";break;case"select":var i="",c=t.multiple?"multiple":"";for(t.values.reverse(),t.placeholder&&(i+="<option disabled selected>"+t.placeholder+"</option>"),l=t.values.length-1;l>=0;l--){var d=t.values[l].selected&&!t.placeholder?"selected":"";i+='<option value="'+t.values[l].value+'" '+d+">"+t.values[l].label+"</option>"}s="<"+t.type+' class="'+t.className+'" '+c+">"+i+"</"+t.type+">";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+='<div><input type="'+u+'" class="'+t.className+'" name="'+p+'" id="'+f+'" value="'+t.values[l].value+'" '+m+'/><label for="'+f+'">'+t.values[l].label+"</label></div>"}if(t.enableOther){var v=p+"-other",h={id:v,name:p,className:t.className+" other-option",type:u,onclick:"otherOptionCallback('"+v+"')"},g=a.markup("input",null,h);a.attrString(h);window.otherOptionCallback=function(e){var t=document.getElementById(e),a=t.nextElementSibling,l=a.nextElementSibling;t.checked?(l.style.display="inline-block",a.style.display="none"):(l.style.display="none",a.style.display="inline-block")},s+="<div>"+g.outerHTML+'<label for="'+v+'">'+e.messages.other+'</label> <input type="text" id="'+v+'-value" style="display:none;" /></div>'}break;case"text":case"password":case"email":case"date":case"file":s="<input "+n+">";break;case"color":s='<input type="'+t.type+'" class="'+t.className+'"> '+e.messages.selectColor;break;case"hidden":case"checkbox":s='<input type="'+t.type+'" '+r+" >";break;case"autocomplete":s='<input class="ui-autocomplete-input '+t.className+'" autocomplete="on">';break;default:n=a.attrString(t),s="<"+t.type+" "+n+">"+t.label+"</"+t.type+">"}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 $("<div/>").text(e).html()},a.htmlDecode=function(e){return $("<div/>").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,l){var s=["checkbox","checkbox-group","radio-group"],o=["header","paragraph","button"],r=void 0;for(r=o.length-1;r>=0;r--)o=o.concat(e.messages.subtypes[o[r]]);s=s.concat(o);var n=l.type,i=l.style,c=t[0].querySelector(".fld-className").value,d=[].concat(c.split(" ")).reverse(),u={button:"btn",submit:"btn"},p=u[n];if(p){if(i){for(r=d.length-1;r>=0;r--){var m=new RegExp("(?:^|s)"+p+"-(.*?)(?:s|$)+","g"),f=d[r].match(m);f&&d.splice(r,1)}d.push(p+"-"+i)}d.push(p)}else a.inArray(n,s)||d.push("form-control");return a.unique(d.reverse()).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 l=!1;window.sessionStorage&&(e.sortableControls?l=window.sessionStorage.getItem("fieldOrder"):window.sessionStorage.removeItem("fieldOrder")),l?(l=window.JSON.parse(l),l=Object.keys(l).map(function(e){return l[e]})):l=a.unique(e.controlOrder);for(var s=[],o=l.length-1;o>=0;o--){var r=t.filter(function(e){return e.attrs.type===l[o]})[0];s.push(r)}return s.filter(Boolean)},a.forEach=function(e,t,a){for(var l=0;l<e.length;l++)t.call(a,l,e[l])},a.inArray=function(e,t){return-1!==t.indexOf(e)},a.unique=function(e){return e.filter(function(e,t,a){return a.indexOf(e)===t})},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]="&amp;","HTML_ENTITIES"===n&&(l[160]="&nbsp;",l[161]="&iexcl;",l[162]="&cent;",l[163]="&pound;",l[164]="&curren;",l[165]="&yen;",l[166]="&brvbar;",l[167]="&sect;",l[168]="&uml;",l[169]="&copy;",l[170]="&ordf;",l[171]="&laquo;",l[172]="&not;",l[173]="&shy;",l[174]="&reg;",l[175]="&macr;",l[176]="&deg;",l[177]="&plusmn;",l[178]="&sup2;",l[179]="&sup3;",l[180]="&acute;",l[181]="&micro;",l[182]="&para;",l[183]="&middot;",l[184]="&cedil;",l[185]="&sup1;",l[186]="&ordm;",l[187]="&raquo;",l[188]="&frac14;",l[189]="&frac12;",l[190]="&frac34;",l[191]="&iquest;",l[192]="&Agrave;",l[193]="&Aacute;",l[194]="&Acirc;",l[195]="&Atilde;",l[196]="&Auml;",l[197]="&Aring;",l[198]="&AElig;",l[199]="&Ccedil;",l[200]="&Egrave;",l[201]="&Eacute;",l[202]="&Ecirc;",l[203]="&Euml;",l[204]="&Igrave;",l[205]="&Iacute;",l[206]="&Icirc;",l[207]="&Iuml;",l[208]="&ETH;",l[209]="&Ntilde;",l[210]="&Ograve;",l[211]="&Oacute;",l[212]="&Ocirc;",l[213]="&Otilde;",l[214]="&Ouml;",l[215]="&times;",l[216]="&Oslash;",l[217]="&Ugrave;",l[218]="&Uacute;",l[219]="&Ucirc;",l[220]="&Uuml;",l[221]="&Yacute;",l[222]="&THORN;",l[223]="&szlig;",l[224]="&agrave;",l[225]="&aacute;",l[226]="&acirc;",l[227]="&atilde;",l[228]="&auml;",l[229]="&aring;",l[230]="&aelig;",l[231]="&ccedil;",l[232]="&egrave;",l[233]="&eacute;",l[234]="&ecirc;",l[235]="&euml;",l[236]="&igrave;",l[237]="&iacute;",l[238]="&icirc;",l[239]="&iuml;",l[240]="&eth;",l[241]="&ntilde;",l[242]="&ograve;",l[243]="&oacute;",l[244]="&ocirc;",l[245]="&otilde;",l[246]="&ouml;",l[247]="&divide;",l[248]="&oslash;",l[249]="&ugrave;",l[250]="&uacute;",l[251]="&ucirc;",l[252]="&uuml;",l[253]="&yacute;",l[254]="&thorn;",l[255]="&yuml;"),"ENT_NOQUOTES"!==i&&(l[34]="&quot;"),"ENT_QUOTES"===i&&(l[39]="&#39;"),l[60]="&lt;",l[62]="&gt;";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["'"]="&#039;");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('<div class="kc-toggle"/>').insertAfter(t).append(t);o.toggleClass("on",t.is(":checked"));var r='<div class="kct-on">'+s.labels.on+"</div>",n='<div class="kct-off">'+s.labels.off+"</div>",i='<div class="kct-handle"></div>',c='<div class="kct-inner">'+r+i+n+"</div>";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",enableOther:"Enable &quot;Other&quot;",enableOtherMsg:"Permit users to enter an unlisted option",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",other:"Other",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:"&#215;",required:"Required",richText:"Rich Text Editor",roles:"Access",save:"Save",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:"&lt;/&gt;",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("<ul/>").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!c.inArray(e.attrs.type,o.disableFields)}));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 h=e("<li/>",{"class":"icon-"+p[v].attrs.className,type:p[v].type,name:p[v].className,label:p[v].label});h.data("newFieldData",p[v]);var g=c.markup("span",p[v].label);h.html(g).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("<div/>",{id:n+"-stage-wrap","class":"stage-wrap "+l.layout.stage}),E=e("<div/>",{id:n+"-form-wrap","class":"form-wrap form-builder"+c.mobileClass()});r.before(N).appendTo(N);var T=e("<div/>",{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 O=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?I(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.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")},A=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))}),O()},M=function(){var e={xml:A,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 I=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+='<div class="form-group field-options">',a+='<label class="false-label">'+o.messages.selectOptions+"</label>",a+='<div class="sortable-options-wrap">',"select"===t.type&&(a+='<div class="allow-multi">',a+='<input type="checkbox" id="multiple_'+d+'" name="multiple"'+(t.multiple?'checked="checked"':"")+">",a+='<label class="multiple" for="multiple_'+d+'">'+o.messages.selectionsMessage+"</label>",a+="</div>"),a+='<ol class="sortable-options">',v=0;v<t.values.length;v++)a+=U(t.name,t.values[v],t.values[v].selected,t.multiple);a+="</ol>";var l=c.markup("a",o.messages.addOption,{className:"add add-opt"});a+=c.markup("div",l,{className:"option-actions"}).outerHTML,a+="</div>",a+="</div>",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(e){var t,W=[],a="",l=void 0!==e.role?e.role.split(","):[];W.push(j("label",e)),e.size=e.size||"m",e.style=e.style||"default",W.push(F(e)),W.push(B(e)),W.push(_(e.style,e.type)),W.push(j("placeholder",e)),W.push(j("className",e)),W.push(j("name",e)),W.push('<div class="form-group access-wrap"><label>'+o.messages.roles+"</label>"),W.push('<input type="checkbox" name="enable_roles" value="" '+(void 0!==e.role?"checked":"")+' id="enable_roles-'+d+'"/> <label for="enable_roles-'+d+'" class="roles-label">'+o.messages.limitRole+"</label>"),W.push('<div class="available-roles" '+(void 0!==e.role?'style="display:block"':"")+">");for(t in o.roles)o.roles.hasOwnProperty(t)&&(a=c.inArray(t,l)?"checked":"",W.push('<input type="checkbox" name="roles[]" value="'+t+'" id="fld-'+d+"-roles-"+t+'" '+a+' class="roles-field" /><label for="fld-'+d+"-roles-"+t+'">'+o.roles[t]+"</label><br/>"));return W.push("</div></div>"),"checkbox-group"!==e.type&&"radio-group"!==e.type||(W.push('<div class="form-group other-wrap"><label>'+o.messages.enableOther+"</label>"),W.push('<input type="checkbox" name="enable-other" value="" '+(void 0!==e.other?"checked":"")+' id="enable-other-'+d+'"/> <label for="enable-other-'+d+'" class="other-label">'+o.messages.enableOtherMsg+"</label></div>")),W.push(j("maxlength",e)),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},B=function Q(e){var t=o.messages.subtypes,a=e.type,l=e.subtype||"",Q="",s=void 0;if(t[a]){var r="<label>"+o.messages.subtype+"</label>";Q+='<select name="subtype" class="fld-subtype form-control" id="subtype-'+d+'">',t[a].forEach(function(e){s=l===e?"selected":"",Q+='<option value="'+e+'" '+s+">"+e+"</option>"}),Q+="</select>",Q='<div class="form-group subtype-wrap">'+r+" "+Q+"</div>"}return Q},_=function(e,t){var a={button:"btn"},l=o.messages.styles[a[t]],s="";if(l){var r="<label>"+o.messages.style+"</label>";s+='<input value="'+e+'" name="style" type="hidden" class="btn-style">',s+='<div class="btn-group" role="group">',Object.keys(o.messages.styles[a[t]]).forEach(function(l){var r=e===l?"active":"";s+='<button value="'+l+'" type="'+t+'" class="'+r+" btn-xs "+a[t]+" "+a[t]+"-"+l+'">'+o.messages.styles[a[t]][l]+"</button>"}),s+="</div>",s='<div class="form-group style-wrap">'+r+" "+s+"</div>"}return s},j=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&&c.inArray(t.type,s)&&(i=o.messages.content),l=l.concat(o.messages.subtypes.header,s),r=r.concat(s);var u=o.messages.placeholders,p=u[e]||"",m="",f=[];if("placeholder"!==e||c.inArray(t.type,a)||f.push(!0),"name"===e&&c.inArray(t.type,l)&&f.push(!0),"maxlength"===e&&c.inArray(t.type,r)&&f.push(!0),!f.some(function(e){return e===!0})){var v="<label>"+i+"</label>";m+="label"===e&&c.inArray(t.type,s)?'<textarea name="'+e+'" placeholder="'+p+'" class="fld-'+e+' form-control" id="'+e+"-"+d+'">'+n+"</textarea>":'<input type="text" value="'+n+'" name="'+e+'" placeholder="'+p+'" class="fld-'+e+' form-control" id="'+e+"-"+d+'">',m='<div class="form-group '+e+'-wrap">'+v+" "+m+"</div>"}return m},P=function(e){var t=["header","paragraph","button"],a=[],l="";if(c.inArray(e.type,t)&&a.push(!0),!a.some(function(e){return e===!0})){l+='<div class="form-group">',l+="<label>&nbsp;</label>";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+="</div>"}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,{
     30"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)|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|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 l in e)a.inArray(e[l],t)&&delete e[l];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(/(checkbox-group|radio-group)/)&&(n.enableOther=$('[name="enable-other"]',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=jQuery.extend({},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="<textarea "+n+"></textarea>";break;case"button":case"submit":s="<button "+n+">"+t.label+"</button>";break;case"select":var i="",c=t.multiple?"multiple":"";for(t.values.reverse(),t.placeholder&&(i+="<option disabled selected>"+t.placeholder+"</option>"),l=t.values.length-1;l>=0;l--){var d=t.values[l].selected&&!t.placeholder?"selected":"";i+='<option value="'+t.values[l].value+'" '+d+">"+t.values[l].label+"</option>"}s="<"+t.type+' class="'+t.className+'" '+c+">"+i+"</"+t.type+">";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+='<div><input type="'+u+'" class="'+t.className+'" name="'+p+'" id="'+f+'" value="'+t.values[l].value+'" '+m+'/><label for="'+f+'">'+t.values[l].label+"</label></div>"}if(t.enableOther){var v=p+"-other",h={id:v,name:p,className:t.className+" other-option",type:u,onclick:"otherOptionCallback('"+v+"')"},g=a.markup("input",null,h);a.attrString(h);window.otherOptionCallback=function(e){var t=document.getElementById(e),a=t.nextElementSibling,l=a.nextElementSibling;t.checked?(l.style.display="inline-block",a.style.display="none"):(l.style.display="none",a.style.display="inline-block")},s+="<div>"+g.outerHTML+'<label for="'+v+'">'+e.messages.other+'</label> <input type="text" id="'+v+'-value" style="display:none;" /></div>'}break;case"text":case"password":case"email":case"date":case"file":s="<input "+n+">";break;case"color":s='<input type="'+t.type+'" class="'+t.className+'"> '+e.messages.selectColor;break;case"hidden":case"checkbox":s='<input type="'+t.type+'" '+r+" >";break;case"autocomplete":s='<input class="ui-autocomplete-input '+t.className+'" autocomplete="on">';break;default:n=a.attrString(t),s="<"+t.type+" "+n+">"+t.label+"</"+t.type+">"}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 $("<div/>").text(e).html()},a.htmlDecode=function(e){return $("<div/>").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,l){var s=["checkbox","checkbox-group","radio-group"],o=["header","paragraph","button"],r=void 0;for(r=o.length-1;r>=0;r--)o=o.concat(e.messages.subtypes[o[r]]);s=s.concat(o);var n=l.type,i=l.style,c=t[0].querySelector(".fld-className").value,d=[].concat(c.split(" ")).reverse(),u={button:"btn",submit:"btn"},p=u[n];if(p){if(i){for(r=d.length-1;r>=0;r--){var m=new RegExp("(?:^|s)"+p+"-(.*?)(?:s|$)+","g"),f=d[r].match(m);f&&d.splice(r,1)}d.push(p+"-"+i)}d.push(p)}else a.inArray(n,s)||d.push("form-control");return a.unique(d.reverse()).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 l=!1;window.sessionStorage&&(e.sortableControls?l=window.sessionStorage.getItem("fieldOrder"):window.sessionStorage.removeItem("fieldOrder")),l?(l=window.JSON.parse(l),l=Object.keys(l).map(function(e){return l[e]})):l=a.unique(e.controlOrder);for(var s=[],o=l.length-1;o>=0;o--){var r=t.filter(function(e){return e.attrs.type===l[o]})[0];s.push(r)}return s.filter(Boolean)},a.forEach=function(e,t,a){for(var l=0;l<e.length;l++)t.call(a,l,e[l])},a.inArray=function(e,t){return-1!==t.indexOf(e)},a.unique=function(e){return e.filter(function(e,t,a){return a.indexOf(e)===t})},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]="&amp;","HTML_ENTITIES"===n&&(l[160]="&nbsp;",l[161]="&iexcl;",l[162]="&cent;",l[163]="&pound;",l[164]="&curren;",l[165]="&yen;",l[166]="&brvbar;",l[167]="&sect;",l[168]="&uml;",l[169]="&copy;",l[170]="&ordf;",l[171]="&laquo;",l[172]="&not;",l[173]="&shy;",l[174]="&reg;",l[175]="&macr;",l[176]="&deg;",l[177]="&plusmn;",l[178]="&sup2;",l[179]="&sup3;",l[180]="&acute;",l[181]="&micro;",l[182]="&para;",l[183]="&middot;",l[184]="&cedil;",l[185]="&sup1;",l[186]="&ordm;",l[187]="&raquo;",l[188]="&frac14;",l[189]="&frac12;",l[190]="&frac34;",l[191]="&iquest;",l[192]="&Agrave;",l[193]="&Aacute;",l[194]="&Acirc;",l[195]="&Atilde;",l[196]="&Auml;",l[197]="&Aring;",l[198]="&AElig;",l[199]="&Ccedil;",l[200]="&Egrave;",l[201]="&Eacute;",l[202]="&Ecirc;",l[203]="&Euml;",l[204]="&Igrave;",l[205]="&Iacute;",l[206]="&Icirc;",l[207]="&Iuml;",l[208]="&ETH;",l[209]="&Ntilde;",l[210]="&Ograve;",l[211]="&Oacute;",l[212]="&Ocirc;",l[213]="&Otilde;",l[214]="&Ouml;",l[215]="&times;",l[216]="&Oslash;",l[217]="&Ugrave;",l[218]="&Uacute;",l[219]="&Ucirc;",l[220]="&Uuml;",l[221]="&Yacute;",l[222]="&THORN;",l[223]="&szlig;",l[224]="&agrave;",l[225]="&aacute;",l[226]="&acirc;",l[227]="&atilde;",l[228]="&auml;",l[229]="&aring;",l[230]="&aelig;",l[231]="&ccedil;",l[232]="&egrave;",l[233]="&eacute;",l[234]="&ecirc;",l[235]="&euml;",l[236]="&igrave;",l[237]="&iacute;",l[238]="&icirc;",l[239]="&iuml;",l[240]="&eth;",l[241]="&ntilde;",l[242]="&ograve;",l[243]="&oacute;",l[244]="&ocirc;",l[245]="&otilde;",l[246]="&ouml;",l[247]="&divide;",l[248]="&oslash;",l[249]="&ugrave;",l[250]="&uacute;",l[251]="&ucirc;",l[252]="&uuml;",l[253]="&yacute;",l[254]="&thorn;",l[255]="&yuml;"),"ENT_NOQUOTES"!==i&&(l[34]="&quot;"),"ENT_QUOTES"===i&&(l[39]="&#39;"),l[60]="&lt;",l[62]="&gt;";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["'"]="&#039;");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('<div class="kc-toggle"/>').insertAfter(t).append(t);o.toggleClass("on",t.is(":checked"));var r='<div class="kct-on">'+s.labels.on+"</div>",n='<div class="kct-off">'+s.labels.off+"</div>",i='<div class="kct-handle"></div>',c='<div class="kct-inner">'+r+i+n+"</div>";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",enableOther:"Enable &quot;Other&quot;",enableOtherMsg:"Permit users to enter an unlisted option",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",other:"Other",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:"&#215;",required:"Required",richText:"Rich Text Editor",roles:"Access",save:"Save",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:"&lt;/&gt;",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("<ul/>").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!c.inArray(e.attrs.type,o.disableFields)}));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 h=e("<li/>",{"class":"icon-"+p[v].attrs.className,type:p[v].type,name:p[v].className,label:p[v].label});h.data("newFieldData",p[v]);var g=c.markup("span",p[v].label);h.html(g).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("<div/>",{id:n+"-stage-wrap","class":"stage-wrap "+l.layout.stage}),E=e("<div/>",{id:n+"-form-wrap","class":"form-wrap form-builder"+c.mobileClass()});r.before(N).appendTo(N);var T=e("<div/>",{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 O=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?I(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.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")},A=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))}),O()},M=function(){var e={xml:A,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 I=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+='<div class="form-group field-options">',a+='<label class="false-label">'+o.messages.selectOptions+"</label>",a+='<div class="sortable-options-wrap">',"select"===t.type&&(a+='<div class="allow-multi">',a+='<input type="checkbox" id="multiple_'+d+'" name="multiple"'+(t.multiple?'checked="checked"':"")+">",a+='<label class="multiple" for="multiple_'+d+'">'+o.messages.selectionsMessage+"</label>",a+="</div>"),a+='<ol class="sortable-options">',v=0;v<t.values.length;v++)a+=U(t.name,t.values[v],t.values[v].selected,t.multiple);a+="</ol>";var l=c.markup("a",o.messages.addOption,{className:"add add-opt"});a+=c.markup("div",l,{className:"option-actions"}).outerHTML,a+="</div>",a+="</div>",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(e){var t,W=[],a="",l=void 0!==e.role?e.role.split(","):[];W.push(j("label",e)),e.size=e.size||"m",e.style=e.style||"default",W.push(F(e)),W.push(B(e)),W.push(_(e.style,e.type)),W.push(j("placeholder",e)),W.push(j("className",e)),W.push(j("name",e)),W.push('<div class="form-group access-wrap"><label>'+o.messages.roles+"</label>"),W.push('<input type="checkbox" name="enable_roles" value="" '+(void 0!==e.role?"checked":"")+' id="enable_roles-'+d+'"/> <label for="enable_roles-'+d+'" class="roles-label">'+o.messages.limitRole+"</label>"),W.push('<div class="available-roles" '+(void 0!==e.role?'style="display:block"':"")+">");for(t in o.roles)o.roles.hasOwnProperty(t)&&(a=c.inArray(t,l)?"checked":"",W.push('<input type="checkbox" name="roles[]" value="'+t+'" id="fld-'+d+"-roles-"+t+'" '+a+' class="roles-field" /><label for="fld-'+d+"-roles-"+t+'">'+o.roles[t]+"</label><br/>"));return W.push("</div></div>"),"checkbox-group"!==e.type&&"radio-group"!==e.type||(W.push('<div class="form-group other-wrap"><label>'+o.messages.enableOther+"</label>"),W.push('<input type="checkbox" name="enable-other" value="" '+(void 0!==e.other?"checked":"")+' id="enable-other-'+d+'"/> <label for="enable-other-'+d+'" class="other-label">'+o.messages.enableOtherMsg+"</label></div>")),W.push(j("maxlength",e)),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},B=function Q(e){var t=o.messages.subtypes,a=e.type,l=e.subtype||"",Q="",s=void 0;if(t[a]){var r="<label>"+o.messages.subtype+"</label>";Q+='<select name="subtype" class="fld-subtype form-control" id="subtype-'+d+'">',t[a].forEach(function(e){s=l===e?"selected":"",Q+='<option value="'+e+'" '+s+">"+e+"</option>"}),Q+="</select>",Q='<div class="form-group subtype-wrap">'+r+" "+Q+"</div>"}return Q},_=function(e,t){var a={button:"btn"},l=o.messages.styles[a[t]],s="";if(l){var r="<label>"+o.messages.style+"</label>";s+='<input value="'+e+'" name="style" type="hidden" class="btn-style">',s+='<div class="btn-group" role="group">',Object.keys(o.messages.styles[a[t]]).forEach(function(l){var r=e===l?"active":"";s+='<button value="'+l+'" type="'+t+'" class="'+r+" btn-xs "+a[t]+" "+a[t]+"-"+l+'">'+o.messages.styles[a[t]][l]+"</button>"}),s+="</div>",s='<div class="form-group style-wrap">'+r+" "+s+"</div>"}return s},j=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&&c.inArray(t.type,s)&&(i=o.messages.content),l=l.concat(o.messages.subtypes.header,s),r=r.concat(s);var u=o.messages.placeholders,p=u[e]||"",m="",f=[];if("placeholder"!==e||c.inArray(t.type,a)||f.push(!0),"name"===e&&c.inArray(t.type,l)&&f.push(!0),"maxlength"===e&&c.inArray(t.type,r)&&f.push(!0),!f.some(function(e){return e===!0})){var v="<label>"+i+"</label>";m+="label"===e&&c.inArray(t.type,s)?'<textarea name="'+e+'" placeholder="'+p+'" class="fld-'+e+' form-control" id="'+e+"-"+d+'">'+n+"</textarea>":'<input type="text" value="'+n+'" name="'+e+'" placeholder="'+p+'" class="fld-'+e+' form-control" id="'+e+"-"+d+'">',m='<div class="form-group '+e+'-wrap">'+v+" "+m+"</div>"}return m},P=function(e){var t=["header","paragraph","button"],a=[],l="";if(c.inArray(e.type,t)&&a.push(!0),!a.some(function(e){return e===!0})){l+='<div class="form-group">',l+="<label>&nbsp;</label>";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+="</div>"}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,{
    3131id:d+"-edit",className:"toggle-form btn icon-pencil",title:o.messages.hide}),p=l.required,m=l.toggle||void 0,f=""!==l.description?'<span class="tooltip-element" tooltip="'+l.description+'">?</span>':"",v=c.markup("div",[u,n],{className:"field-actions"}).outerHTML;v+='<label class="field-label">'+r+"</label>"+f+'<span class="required-asterisk" '+(p?'style="display:inline"':"")+"> *</span>",v+=c.markup("div","",{className:"prev-holder"}).outerHTML,v+='<div id="'+d+'-holder" class="frm-holder">',v+='<div class="form-elements">',v+=P(l),"checkbox"===l.type&&(v+='<div class="form-group">',v+="<label>&nbsp;</label>",v+='<input class="checkbox-toggle" type="checkbox" value="1" name="toggle-'+d+'" id="toggle-'+d+'"'+("true"===m?" checked":"")+' /><label class="toggle-label" for="toggle-'+d+'">'+o.messages.toggle+"</label>",v+="</div>"),v+=a,v+=c.markup("a",o.messages.close,{className:"close-field"}).outerHTML,v+="</div>",v+="</div>";var h=c.markup("li",v,{"class":l.type+"-field form-field",type:l.type,id:d}),g=e(h);g.data("fieldData",{attrs:l}),"undefined"!=typeof c.stopIndex?e("> li",i).eq(c.stopIndex).after(g):i.append(g),c.updatePreview(g),e(document.getElementById("frm-"+d+"-item")).hide().slideDown(250),d=c.incrementId(d)},U=function(t,a,l,s){var r={selected:s?"checkbox":"radio"},n={selected:l,label:"",value:""},i=e.extend({},n,a),d=[];for(var u in i)if(i.hasOwnProperty(u)){var p={type:r[u]||"text","class":"option-"+u,placeholder:o.messages.placeholders[u],value:i[u],name:t},m=c.markup("input",null,p);"selected"===u&&(m.checked=i.selected),d.push(m)}var f={className:"remove btn",title:o.messages.removeMessage};d.push(c.markup("a",o.messages.remove,f));var v=c.markup("li",d);return v.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.updatePreview(a),c.save()})}),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, .close-field",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='<span class="tooltip-element" tooltip="'+l+'">?</span>';e(".field-label",t).after(s)}else a.length&&a.css("display","none")}),c.updateMultipleSelect(),i.delegate('input[name="name"]',"blur",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","blur",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("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 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('<div class="template-textarea-wrap"/>'),M(),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)");o.before(s),o.remove(),l=new t(a,s),e(s).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+="<form-template>\n    <fields>",t.forEach(s.childNodes,function(s,o){s=s;var r=e(o),n=r.data("fieldData");if(!r.hasClass("disabled")){var i=e(".roles-field:checked",o).map(function(){return this.value}).get(),c=e('[name="enable-other"]:checked',o).length,d=t.getTypes(r),u={className:n.className,description:e("input.fld-description",r).val(),label:e(".fld-label",r).val(),maxlength:e("input.fld-maxlength",r).val(),multiple:e('input[name="multiple"]',r).is(":checked"),name:e("input.fld-name",r).val(),placeholder:e("input.fld-placeholder",r).val(),required:e("input.required",r).is(":checked"),toggle:e(".checkbox-toggle",r).is(":checked"),type:d.type,subtype:d.subtype};i.length&&(u.role=i.join(",")),c&&(u.enableOther="true"),u=t.trimAttrs(u),u=t.escapeAttrs(u);var p,m=u.type.match(/(select|checkbox-group|radio-group)/),f="";m&&(f=l(r)),p=t.markup("field",f,u),a+="\n     "+p.outerHTML}}),a+="\n </fields>\n</form-template>")}),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}}();
    3232//# sourceMappingURL=form-builder.min.js.map
  • contact-form-ready/trunk/js/user.js

    r2190532 r3049139  
    11var within_wplc = false;
    2 if(!invisible_recaptcha_options.invisible_recaptcha_enabled){
     2if(!wpcf_localized_client.invisible_recaptcha_options.invisible_recaptcha_enabled){
    33    var recaptcha_can_continue = new Array();
    44    var recaptcha_loaded = new Array();
     
    2323
    2424        var current_cfid = jQuery(this).attr('cfid');
    25         if(invisible_recaptcha_options.invisible_recaptcha_enabled){
     25        if(wpcf_localized_client.invisible_recaptcha_options.invisible_recaptcha_enabled){
    2626            /* set true to default (when reCaptcha is not enabled */
    2727            invisible_recaptcha_can_continue[current_cfid] = true;
     
    3030                    jQuery(".wpcf_nd_submit").addClass("g-recaptcha");                 
    3131                    invisible_recaptcha_widgets[current_cfid] = grecaptcha.render('wpcf_g_recaptcha_'+current_cfid, {
    32                         'sitekey' : invisible_recaptcha_options.wpcf_invisible_recaptcha_api,
     32                        'sitekey' : wpcf_localized_client.invisible_recaptcha_options.wpcf_invisible_recaptcha_api,
    3333                        'callback' : wpcf_verifyCallback_invisible,
    3434                    });
     
    159159        }
    160160
    161         if(!invisible_recaptcha_options.invisible_recaptcha_enabled){
     161        if(!wpcf_localized_client.invisible_recaptcha_options.invisible_recaptcha_enabled){
    162162            jQuery("body").on("click", "#wp-live-chat-inner #wpcf_nd_submit", function(e) {
    163163                var cfid = jQuery(this).attr('cfid');
     
    191191
    192192                    if( validation_errors === 0 ) {
    193                         jQuery(this).val(wpcf_nd_ajax_sending);
     193                        jQuery(this).val(wpcf_localized_client.wpcf_nd_ajax_sending);
    194194
    195195                        jQuery("#wp-live-chat-inner #wpcf_nd_submit").attr('disabled', 'disabled');
     
    204204
    205205                        formData.append('action', 'wpcf_nd_send_ajax');
    206                         formData.append('security', wpcf_nd_nonce);
     206                        formData.append('security', wpcf_localized_client.wpcf_nd_nonce);
    207207                        jQuery.ajax({
    208                             url: wpcf_nd_ajaxurl,
     208                            url: wpcf_localized_client.wpcf_nd_ajaxurl,
    209209                            type: 'POST',
    210210                            data: formData,
     
    219219                                } else {
    220220
    221                                     if (typeof wpcf_nd_ajax_thank_you !== "undefined") {
    222                                         jQuery(".wpcf_nd_" + cfid).html("<div class='wpcf-nd-thank-you'>" + wpcf_nd_ajax_thank_you + "</div>");
     221                                    if (typeof wpcf_localized_client.wpcf_nd_ajax_thank_you !== "undefined") {
     222                                        jQuery(".wpcf_nd_" + cfid).html("<div class='wpcf-nd-thank-you'>" + wpcf_localized_client.wpcf_nd_ajax_thank_you + "</div>");
    223223                                    } else {
    224224                                        jQuery(".wpcf_nd_" + cfid).html("<div class='wpcf-nd-thank-you'>Thank you for your message. We will respond to you as soon as possible.</div>");
     
    242242                if (recaptcha_can_continue[cfid]) {
    243243
    244                     if (typeof wpcf_nd_form_type !== "undefined" && wpcf_nd_form_type == '1' && !within_wplc) {
     244                    if (typeof wpcf_nd_form_localize.wpcf_nd_form_type !== "undefined" && wpcf_nd_form_localize.wpcf_nd_form_type == '1' && !within_wplc) {
    245245                        e.preventDefault();
    246246                        var orig_element = this;
     
    267267
    268268                            var orig_elem_string = jQuery(this).val();
    269                             jQuery(this).val(wpcf_nd_ajax_sending);
     269                            jQuery(this).val(wpcf_localized_client.wpcf_nd_ajax_sending);
    270270                            jQuery(orig_element).attr('disabled', 'disabled');
    271271
     
    279279
    280280                            formData.append('action', 'wpcf_nd_send_ajax');
    281                             formData.append('security', wpcf_nd_nonce);
     281                            formData.append('security', wpcf_localized_client.wpcf_nd_nonce);
    282282
    283283                            jQuery.ajax({
    284                                 url : wpcf_nd_ajaxurl,
     284                                url : wpcf_localized_client.wpcf_nd_ajaxurl,
    285285                                type : 'POST',
    286286                                data : formData,
     
    294294                                        jQuery(orig_element).val(orig_elem_string);
    295295                                    } else {
    296                                         if (typeof wpcf_nd_ajax_thank_you !== "undefined") {
    297                                             jQuery(".wpcf_nd_"+cfid).html("<div class='wpcf-nd-thank-you'>"+wpcf_nd_ajax_thank_you+"</div>");
     296                                        if (typeof wpcf_localized_client.wpcf_nd_ajax_thank_you !== "undefined") {
     297                                            jQuery(".wpcf_nd_"+cfid).html("<div class='wpcf-nd-thank-you'>"+wpcf_localized_client.wpcf_nd_ajax_thank_you+"</div>");
    298298                                        } else {
    299299                                            jQuery(".wpcf_nd_"+cfid).html("<div class='wpcf-nd-thank-you'>Thank you for your message. We will respond to you as soon as possible.</div>");
    300300                                        }
    301                                         if (typeof wpcf_nd_form_redirect !== "undefined") {
    302                                             window.location = wpcf_nd_form_redirect;
     301                                        if (typeof wpcf_nd_form_localize.wpcf_nd_form_redirect !== "undefined") {
     302                                            window.location = wpcf_nd_form_localize.wpcf_nd_form_redirect;
    303303                                        }
    304304                                    }
     
    326326                if (invisible_recaptcha_can_continue[cfid]) {
    327327   
    328                     if (typeof wpcf_nd_form_type !== "undefined" && wpcf_nd_form_type == '1' && !within_wplc) {
     328                    if (typeof wpcf_nd_form_localize.wpcf_nd_form_type !== "undefined" && wpcf_nd_form_localize.wpcf_nd_form_type == '1' && !within_wplc) {
    329329                        e.preventDefault();
    330330                        var orig_element = this;
     
    351351   
    352352                            var orig_elem_string = jQuery(this).val();
    353                             jQuery(this).val(wpcf_nd_ajax_sending);
     353                            jQuery(this).val(wpcf_localized_client.wpcf_nd_ajax_sending);
    354354                            jQuery(orig_element).attr('disabled', 'disabled');
    355355   
     
    363363   
    364364                            formData.append('action', 'wpcf_nd_send_ajax');
    365                             formData.append('security', wpcf_nd_nonce);
     365                            formData.append('security', wpcf_localized_client.wpcf_nd_nonce);
    366366   
    367367                            jQuery.ajax({
    368                                 url : wpcf_nd_ajaxurl,
     368                                url : wpcf_localized_client.wpcf_nd_ajaxurl,
    369369                                type : 'POST',
    370370                                data : formData,
     
    378378                                        jQuery(orig_element).val(orig_elem_string);
    379379                                    } else {
    380                                         if (typeof wpcf_nd_ajax_thank_you !== "undefined") {
    381                                             jQuery(".wpcf_nd_"+cfid).html("<div class='wpcf-nd-thank-you'>"+wpcf_nd_ajax_thank_you+"</div>");
     380                                        if (typeof wpcf_localized_client.wpcf_nd_ajax_thank_you !== "undefined") {
     381                                            jQuery(".wpcf_nd_"+cfid).html("<div class='wpcf-nd-thank-you'>"+wpcf_localized_client.wpcf_nd_ajax_thank_you+"</div>");
    382382                                        } else {
    383383                                            jQuery(".wpcf_nd_"+cfid).html("<div class='wpcf-nd-thank-you'>Thank you for your message. We will respond to you as soon as possible.</div>");
    384384                                        }
    385                                         if (typeof wpcf_nd_form_redirect !== "undefined") {
    386                                             window.location = wpcf_nd_form_redirect;
     385                                        if (typeof wpcf_nd_form_localize.wpcf_nd_form_redirect !== "undefined") {
     386                                            window.location = wpcf_nd_form_localize.wpcf_nd_form_redirect;
    387387                                        }
    388388                                    }
     
    404404                if (invisible_recaptcha_can_continue[cfid]) {
    405405   
    406                     if (typeof wpcf_nd_form_type !== "undefined" && wpcf_nd_form_type == '1' && !within_wplc) {
     406                    if (typeof wpcf_nd_form_localize.wpcf_nd_form_type !== "undefined" && wpcf_nd_form_localize.wpcf_nd_form_type == '1' && !within_wplc) {
    407407                        e.preventDefault();
    408408                        var orig_element = this;
     
    429429   
    430430                            var orig_elem_string = jQuery(this).val();
    431                             jQuery(this).val(wpcf_nd_ajax_sending);
     431                            jQuery(this).val(wpcf_localized_client.wpcf_nd_ajax_sending);
    432432                            jQuery(orig_element).attr('disabled', 'disabled');
    433433   
     
    441441   
    442442                            formData.append('action', 'wpcf_nd_send_ajax');
    443                             formData.append('security', wpcf_nd_nonce);
     443                            formData.append('security', wpcf_localized_client.wpcf_nd_nonce);
    444444   
    445445                            jQuery.ajax({
    446                                 url : wpcf_nd_ajaxurl,
     446                                url : wpcf_localized_client.wpcf_nd_ajaxurl,
    447447                                type : 'POST',
    448448                                data : formData,
     
    456456                                        jQuery(orig_element).val(orig_elem_string);
    457457                                    } else {
    458                                         if (typeof wpcf_nd_ajax_thank_you !== "undefined") {
    459                                             jQuery(".wpcf_nd_"+cfid).html("<div class='wpcf-nd-thank-you'>"+wpcf_nd_ajax_thank_you+"</div>");
     458                                        if (typeof wpcf_localized_client.wpcf_nd_ajax_thank_you !== "undefined") {
     459                                            jQuery(".wpcf_nd_"+cfid).html("<div class='wpcf-nd-thank-you'>"+wpcf_localized_client.wpcf_nd_ajax_thank_you+"</div>");
    460460                                        } else {
    461461                                            jQuery(".wpcf_nd_"+cfid).html("<div class='wpcf-nd-thank-you'>Thank you for your message. We will respond to you as soon as possible.</div>");
    462462                                        }
    463                                         if (typeof wpcf_nd_form_redirect !== "undefined") {
    464                                             window.location = wpcf_nd_form_redirect;
     463                                        if (typeof wpcf_nd_form_localize.wpcf_nd_form_redirect !== "undefined") {
     464                                            window.location = wpcf_nd_form_localize.wpcf_nd_form_redirect;
    465465                                        }
    466466                                    }
  • contact-form-ready/trunk/js/wpcf_tabs.js

    r2230921 r3049139  
    1 jQuery("document").ready(function(){
    2     jQuery( "#sola_cfr_tabs" ).tabs({ active: 0 });
     1jQuery(function(){
     2
     3    jQuery(document).ready(function(){
     4        jQuery( "#sola_cfr_tabs" ).tabs({ active: 0 });
     5    });
     6
     7    jQuery('#GDPR_privacy_settings_button').on('click', function(){
     8        jQuery('.wpcf_gdpr_notice').hide();
     9        jQuery('.ui-tabs-nav #ui-id-4').trigger('click');
     10    });
     11
     12    jQuery("body").on("click", '.ui-tabs-nav li', function(){
     13        var tabId = jQuery(this).attr('aria-controls');
     14        tabId = tabId.replace('tabs-', '');
     15        tabId = parseInt(tabId);
     16        switch(tabId){
     17            case 4:
     18                jQuery('.wpcf_gdpr_notice').hide();
     19                break;
     20            default:
     21                jQuery('.wpcf_gdpr_notice').show();
     22                break;
     23        }
     24    });
     25   
    326});
  • contact-form-ready/trunk/readme.txt

    r2230921 r3049139  
    55Requires at least: 3.8
    66Requires PHP: 5.3
    7 Tested up to: 5.3
    8 Stable tag: trunk
     7Tested up to: 6.5
     8Stable tag: 2.0.12
    99License: GPLv3
    1010License URI: http://www.gnu.org/licenses/gpl-3.0.html
     
    165165
    166166== Upgrade notice ==
    167 Nothing here
     167
     168= 2.0.12 =
     169Please update to 2.0.12 or above or above to ensure you are using the latest security enhancements.
    168170
    169171== Changelog ==
     172
     173= 2.0.12 - 2024-03-12 =
     174* Enhancement: Rebuilt gutenberg block modules to bring up to specification with latest WordPress guidelines
     175* Enhancement: PHP8+ compatibility added, first phase of updates
     176* Bug Fix: Fixed security issue with styling page due to missing nonce checks. Thanks Nguyen Xuan Chien (Patchstack)
     177* Bug Fix: Fixed security issue with settings page due to missing nonce checks. Thanks Nguyen Xuan Chien (Patchstack)
     178* Bug Fix: Improved settings/styling storage security by enforcing a user access check
     179* Bug Fix: Fixed issue with wp_localize_script usage for reset string localization
     180* Bug Fix: Fixed issue with wp_localize_script usage for demo form structure localization
     181* Bug Fix: Fixed issues with accessing arrays that may not be defined/stored
     182* Bug Fix: Fixed issues with REST API registration calls not being up to specification, missing permission callback
     183* Bug Fix: Standardized localizers to group common strings within an object, instead of making multiple localization calls
     184* Bug Fix: Fixed issue where form structures were not storing correctly
     185* Bug Fix: Improved sanitization and escaping workflows throughout the plugin core code
     186* Bug Fix: Fixed JSON parser issues in user.js
     187* Bug Fix: Disabled welcome notice, and subsequently feature vote system. No longer active, and caused issues
     188* General: Tested on WordPress 6.5
     189* General: Readme brought up to specification
     190
     191= 2.0.11 - 2020-11-30 =
     192* Tested on WordPress 5.5.3
     193* Modernized admin areas
     194* Added custom secure REST endpoint – ‘get_forms’
     195* Added REST API tab in Settings
     196* Added Live Preview on Styling tab
     197* Added Dark Mode feature for Live Preview on Styling tab
     198* Added Custom CSS feature
     199* Bug Fix: Fixed a bug that prevented extension settings from displaying
     200* Bug Fix: Fixed GDPR warning buttons and links
     201* Bug Fix: Fixed a bug that prevented custom stylings on front end
     202* Bug Fix: Fixed various styling issues
     203* Bug Fix: Fixed various bugs
     204
    170205
    171206= 2.0.10 - 2020-01-21 =
  • contact-form-ready/trunk/templates/mail_template.html

    r1882463 r3049139  
    22    <html>
    33      <body>
    4     <table id="" border="0" cellpadding="0" cellspacing="0" width="100%" style="background-color: #F8F8F8; color:#333;">
     4    <table id="" border="0" cellpadding="0" cellspacing="0" width="100%" style="background-color: #F8F8F8; color:#333;"> 
    55          <tbody>
    66            <tr>
Note: See TracChangeset for help on using the changeset viewer.