Version Description
Download this release
Release Info
Developer | DvanKooten |
Plugin | MailChimp for WordPress |
Version | 3.1.8 |
Comparing to | |
See all releases |
Code changes from version 3.1.7 to 3.1.8
- CHANGELOG.md +17 -0
- assets/js/forms-api.js +7 -0
- assets/js/forms-api.min.js +1 -1
- assets/js/forms-api.min.js.map +1 -1
- config/default-form-messages.php +4 -0
- includes/admin/class-admin.php +43 -0
- includes/class-api.php +5 -2
- includes/forms/class-form-listener.php +4 -1
- includes/forms/class-form-previewer.php +8 -0
- includes/forms/views/tabs/form-messages.php +8 -0
- languages/mailchimp-for-wp-ca_ES.mo +0 -0
- languages/mailchimp-for-wp-ca_ES.po +639 -1859
- languages/mailchimp-for-wp-cs_CZ.mo +0 -0
- languages/mailchimp-for-wp-cs_CZ.po +619 -1839
- languages/mailchimp-for-wp-de_DE.mo +0 -0
- languages/mailchimp-for-wp-de_DE.po +50 -48
- languages/mailchimp-for-wp-es_ES.mo +0 -0
- languages/mailchimp-for-wp-es_ES.po +19 -18
- mailchimp-for-wp.php +2 -2
- readme.txt +18 -1
CHANGELOG.md
CHANGED
@@ -1,6 +1,23 @@
|
|
1 |
Changelog
|
2 |
=========
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
#### 3.1.7 - May 9, 2016
|
5 |
|
6 |
**Fixes**
|
1 |
Changelog
|
2 |
=========
|
3 |
|
4 |
+
#### 3.1.8 - May 23, 2016
|
5 |
+
|
6 |
+
**Fixes**
|
7 |
+
|
8 |
+
- Form Preview mode replaced all titles on that page with "Form Preview".
|
9 |
+
- API class fix for [eCommerce360 functionality](https://mc4wp.com/kb/what-is-ecommerce360/).
|
10 |
+
|
11 |
+
**Improvements**
|
12 |
+
|
13 |
+
- Show dismissible notice when API key is not set.
|
14 |
+
- Show empty API key errors in plugin log.
|
15 |
+
- Friendlier error message for re-subscribe failures.
|
16 |
+
|
17 |
+
**Additions**
|
18 |
+
|
19 |
+
- Add `form.reset()` method to JS API.
|
20 |
+
|
21 |
#### 3.1.7 - May 9, 2016
|
22 |
|
23 |
**Fixes**
|
assets/js/forms-api.js
CHANGED
@@ -126,6 +126,13 @@ var Form = function(id, element) {
|
|
126 |
form.element.querySelector('.mc4wp-response').innerHTML = msg;
|
127 |
};
|
128 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
};
|
130 |
|
131 |
module.exports = Form;
|
126 |
form.element.querySelector('.mc4wp-response').innerHTML = msg;
|
127 |
};
|
128 |
|
129 |
+
// revert back to original state
|
130 |
+
this.reset = function() {
|
131 |
+
this.setResponse('');
|
132 |
+
form.element.querySelector('.mc4wp-form-fields').style.display = '';
|
133 |
+
form.element.reset();
|
134 |
+
}
|
135 |
+
|
136 |
};
|
137 |
|
138 |
module.exports = Form;
|
assets/js/forms-api.min.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
!function(){var e=void 0,t=void 0;!function n(t,r,i){function o(a,c){if(!r[a]){if(!t[a]){var u="function"==typeof e&&e;if(!c&&u)return u(a,!0);if(s)return s(a,!0);var f=new Error("Cannot find module '"+a+"'");throw f.code="MODULE_NOT_FOUND",f}var l=r[a]={exports:{}};t[a][0].call(l.exports,function(e){var n=t[a][1][e];return o(n?n:e)},l,l.exports,n,t,r,i)}return r[a].exports}for(var s="function"==typeof e&&e,a=0;a<i.length;a++)o(i[a]);return o}({1:[function(e,t,n){"use strict";function r(e,t,n,r){a.trigger("submitted",[e]),n?a.trigger("error",[e,n]):(a.trigger("success",[e,r]),a.trigger(t+"d",[e,r]))}function i(e,t,n,i){if(n&&e.setData(i),u.auto_scroll){var o="animated"===u.auto_scroll,s=o?{behavior:"smooth"}:!1;e.element.scrollIntoView(s)}window.addEventListener("load",function(){r(e,t,n,i)})}var o=window.mc4wp||{};if(window.addEventListener){for(var s=e("gator"),a=e("./forms/forms.js"),c=window.mc4wp&&window.mc4wp.listeners?window.mc4wp.listeners:[],u=window.mc4wp_forms_config||{},f=0;f<c.length;f++)a.on(c[f].event,c[f].callback);if(s(document.body).on("submit",".mc4wp-form",function(e){e=e||window.event;var t=a.getByElement(e.target||e.srcElement);a.trigger("submit",[t,e])}),s(document.body).on("focus",".mc4wp-form",function(e){e=e||window.event;var t=a.getByElement(e.target||e.srcElement);t.started||(a.trigger("started",[t,e]),t.started=!0)}),s(document.body).on("change",".mc4wp-form",function(e){e=e||window.event;var t=a.getByElement(e.target||e.srcElement);a.trigger("change",[t,e])}),u.submitted_form){var l=u.submitted_form,h=document.getElementById(l.element_id),d=a.getByElement(h);i(d,l.action,l.errors,l.data)}o.forms=a,window.mc4wp=o}},{"./forms/forms.js":3,gator:6}],2:[function(e,t,n){"use strict";var r=e("../third-party/serialize.js"),i=e("populate.js"),o=e("../third-party/form2js.js"),s=function(e,t){var n=this;this.id=e,this.element=t||document.createElement("form"),this.name=this.element.getAttribute("data-name")||"Form #"+this.id,this.errors=[],this.started=!1,this.setData=function(e){try{i(n.element,e)}catch(t){console.error(t)}},this.getData=function(){return o(n.element)},this.getSerializedData=function(){return r(n.element)},this.setResponse=function(e){n.element.querySelector(".mc4wp-response").innerHTML=e}};t.exports=s},{"../third-party/form2js.js":4,"../third-party/serialize.js":5,"populate.js":7}],3:[function(e,t,n){"use strict";function r(e){for(var t=0;t<d.length;t++)if(d[t].id==e)return d[t];var n=document.querySelector(".mc4wp-form-"+e);return o(n,e)}function i(e){for(var t=e.form||e,n=0;n<d.length;n++)if(d[n].element==t)return d[n];return o(t)}function o(e,t){t=t||parseInt(e.getAttribute("data-id"))||0;var n=new l(t,e);return d.push(n),n}function s(){return d}function a(e,t){return h.on(e,t)}function c(e,t){return h.trigger(e,t)}function u(e,t){return h.off(e,t)}var f=e("wolfy87-eventemitter"),l=e("./form.js"),h=new f,d=[];t.exports={all:s,get:r,getByElement:i,on:a,trigger:c,off:u}},{"./form.js":2,"wolfy87-eventemitter":8}],4:[function(e,n,r){!function(e,i){"undefined"!=typeof r&&"undefined"!=typeof n&&n.exports?n.exports=i():"function"==typeof t&&t.amd?t(i):e.form2js=i()}(this,function(){"use strict";function e(e,r,i,o,s,a){a=!!a,"undefined"!=typeof i&&null!=i||(i=!0),"undefined"!=typeof r&&null!=r||(r="."),arguments.length<5&&(s=!1),e="string"==typeof e?document.getElementById(e):e;var c,u=[],f=0;if(e.constructor==Array||"undefined"!=typeof NodeList&&e.constructor==NodeList)for(;c=e[f++];)u=u.concat(n(c,o,s,a));else u=n(e,o,s,a);return t(u,i,r)}function t(e,t,n){var r,i,o,s,a,c,u,f,l,h,d,m,p,v={},g={};for(r=0;r<e.length;r++)if(a=e[r].value,!t||""!==a&&null!==a){for(m=e[r].name,p=m.split(n),c=[],u=v,f="",i=0;i<p.length;i++)if(d=p[i].split("]["),d.length>1)for(o=0;o<d.length;o++)if(0==o?d[o]=d[o]+"]":o==d.length-1?d[o]="["+d[o]:d[o]="["+d[o]+"]",h=d[o].match(/([a-z_]+)?\[([a-z_][a-z0-9_]+?)\]/i))for(s=1;s<h.length;s++)h[s]&&c.push(h[s]);else c.push(d[o]);else c=c.concat(d);for(i=0;i<c.length;i++)d=c[i],d.indexOf("[]")>-1&&i==c.length-1?(l=d.substr(0,d.indexOf("[")),f+=l,u[l]||(u[l]=[]),u[l].push(a)):d.indexOf("[")>-1?(l=d.substr(0,d.indexOf("[")),h=d.replace(/(^([a-z_]+)?\[)|(\]$)/gi,""),f+="_"+l+"_"+h,g[f]||(g[f]={}),""==l||u[l]||(u[l]=[]),i==c.length-1?""==l?(u.push(a),g[f][h]=u[u.length-1]):(u[l].push(a),g[f][h]=u[l][u[l].length-1]):g[f][h]||(/^[0-9a-z_]+\[?/i.test(c[i+1])?u[l].push({}):u[l].push([]),g[f][h]=u[l][u[l].length-1]),u=g[f][h]):(f+=d,i<c.length-1?(u[d]||(u[d]={}),u=u[d]):u[d]=a)}return v}function n(e,t,n,o){var s=i(e,t,n,o);return s.length>0?s:r(e,t,n,o)}function r(e,t,n,r){for(var o=[],s=e.firstChild;s;)o=o.concat(i(s,t,n,r)),s=s.nextSibling;return o}function i(e,t,n,i){if(e.disabled&&!i)return[];var a,c,u,f=o(e,n);return a=t&&t(e),a&&a.name?u=[a]:""!=f&&e.nodeName.match(/INPUT|TEXTAREA/i)?(c=s(e,i),u=null===c?[]:[{name:f,value:c}]):""!=f&&e.nodeName.match(/SELECT/i)?(c=s(e,i),u=[{name:f.replace(/\[\]$/,""),value:c}]):u=r(e,t,n,i),u}function o(e,t){return e.name&&""!=e.name?e.name:t&&e.id&&""!=e.id?e.id:""}function s(e,t){if(e.disabled&&!t)return null;switch(e.nodeName){case"INPUT":case"TEXTAREA":switch(e.type.toLowerCase()){case"radio":if(e.checked&&"false"===e.value)return!1;case"checkbox":if(e.checked&&"true"===e.value)return!0;if(!e.checked&&"true"===e.value)return!1;if(e.checked)return e.value;break;case"button":case"reset":case"submit":case"image":return"";default:return e.value}break;case"SELECT":return a(e)}return null}function a(e){var t,n,r,i=e.multiple,o=[];if(!i)return e.value;for(t=e.getElementsByTagName("option"),n=0,r=t.length;r>n;n++)t[n].selected&&o.push(t[n].value);return o}return e})},{}],5:[function(e,t,n){function r(e,t){"object"!=typeof t?t={hash:!!t}:void 0===t.hash&&(t.hash=!0);for(var n=t.hash?{}:"",r=t.serializer||(t.hash?s:a),i=e&&e.elements?e.elements:[],o=Object.create(null),f=0;f<i.length;++f){var l=i[f];if((t.disabled||!l.disabled)&&l.name&&u.test(l.nodeName)&&!c.test(l.type)){var h=l.name,d=l.value;if("checkbox"!==l.type&&"radio"!==l.type||l.checked||(d=void 0),t.empty){if("checkbox"!==l.type||l.checked||(d=""),"radio"===l.type&&(o[l.name]||l.checked?l.checked&&(o[l.name]=!0):o[l.name]=!1),!d&&"radio"==l.type)continue}else if(!d)continue;if("select-multiple"!==l.type)n=r(n,h,d);else{d=[];for(var m=l.options,p=!1,v=0;v<m.length;++v){var g=m[v],y=t.empty&&!g.value,w=g.value||y;g.selected&&w&&(p=!0,n=t.hash&&"[]"!==h.slice(h.length-2)?r(n,h+"[]",g.value):r(n,h,g.value))}!p&&t.empty&&(n=r(n,h,""))}}}if(t.empty)for(var h in o)o[h]||(n=r(n,h,""));return n}function i(e){var t=[],n=/^([^\[\]]*)/,r=new RegExp(f),i=n.exec(e);for(i[1]&&t.push(i[1]);null!==(i=r.exec(e));)t.push(i[1]);return t}function o(e,t,n){if(0===t.length)return e=n;var r=t.shift(),i=r.match(/^\[(.+?)\]$/);if("[]"===r)return e=e||[],Array.isArray(e)?e.push(o(null,t,n)):(e._values=e._values||[],e._values.push(o(null,t,n))),e;if(i){var s=i[1],a=parseInt(s,10);isNaN(a)?(e=e||{},e[s]=o(e[s],t,n)):(e=e||[],e[a]=o(e[a],t,n))}else e[r]=o(e[r],t,n);return e}function s(e,t,n){var r=t.match(f);if(r){var s=i(t);o(e,s,n)}else{var a=e[t];a?(Array.isArray(a)||(e[t]=[a]),e[t].push(n)):e[t]=n}return e}function a(e,t,n){return n=n.replace(/(\r)?\n/g,"\r\n"),n=encodeURIComponent(n),n=n.replace(/%20/g,"+"),e+(e?"&":"")+encodeURIComponent(t)+"="+n}var c=/^(?:submit|button|image|reset|file)$/i,u=/^(?:input|select|textarea|keygen)/i,f=/(\[[^\[\]]*\])/g;t.exports=r},{}],6:[function(e,t,n){!function(){function e(e,t,n){var r="blur"==t||"focus"==t;e.element.addEventListener(t,n,r)}function n(e){e.preventDefault(),e.stopPropagation()}function r(e){return f?f:f=e.matches?e.matches:e.webkitMatchesSelector?e.webkitMatchesSelector:e.mozMatchesSelector?e.mozMatchesSelector:e.msMatchesSelector?e.msMatchesSelector:e.oMatchesSelector?e.oMatchesSelector:u.matchesSelector}function i(e,t,n){if("_root"==t)return n;if(e!==n)return r(e).call(e,t)?e:e.parentNode?(l++,i(e.parentNode,t,n)):void 0}function o(e,t,n,r){d[e.id]||(d[e.id]={}),d[e.id][t]||(d[e.id][t]={}),d[e.id][t][n]||(d[e.id][t][n]=[]),d[e.id][t][n].push(r)}function s(e,t,n,r){if(d[e.id])if(t){if(!r&&!n)return void(d[e.id][t]={});if(!r)return void delete d[e.id][t][n];if(d[e.id][t][n])for(var i=0;i<d[e.id][t][n].length;i++)if(d[e.id][t][n][i]===r){d[e.id][t][n].splice(i,1);break}}else for(var o in d[e.id])d[e.id].hasOwnProperty(o)&&(d[e.id][o]={})}function a(e,t,n){if(d[e][n]){var r,o,s=t.target||t.srcElement,a={},c=0,f=0;l=0;for(r in d[e][n])d[e][n].hasOwnProperty(r)&&(o=i(s,r,m[e].element),o&&u.matchesEvent(n,m[e].element,o,"_root"==r,t)&&(l++,d[e][n][r].match=o,a[l]=d[e][n][r]));for(t.stopPropagation=function(){t.cancelBubble=!0},c=0;l>=c;c++)if(a[c])for(f=0;f<a[c].length;f++){if(a[c][f].call(a[c].match,t)===!1)return void u.cancel(t);if(t.cancelBubble)return}}}function c(e,t,n,r){function i(e){return function(t){a(f,t,e)}}if(this.element){e instanceof Array||(e=[e]),n||"function"!=typeof t||(n=t,t="_root");var c,f=this.id;for(c=0;c<e.length;c++)r?s(this,e[c],t,n):(d[f]&&d[f][e[c]]||u.addEvent(this,e[c],i(e[c])),o(this,e[c],t,n));return this}}function u(e,t){if(!(this instanceof u)){for(var n in m)if(m[n].element===e)return m[n];return h++,m[h]=new u(e,h),m[h]}this.element=e,this.id=t}var f,l=0,h=0,d={},m={};u.prototype.on=function(e,t,n){return c.call(this,e,t,n)},u.prototype.off=function(e,t,n){return c.call(this,e,t,n,!0)},u.matchesSelector=function(){},u.cancel=n,u.addEvent=e,u.matchesEvent=function(){return!0},"undefined"!=typeof t&&t.exports&&(t.exports=u),window.Gator=u}()},{}],7:[function(e,n,r){!function(e){var r=function(e,t,n){for(var i in t)if(t.hasOwnProperty(i)){var o=i,s=t[i];if("undefined"!=typeof n&&(o=n+"["+i+"]"),s.constructor===Array)o+="[]";else if("object"==typeof s){r(e,s,o);continue}var a=e.elements.namedItem(o);if(a){var c=a.type||a[0].type;switch(c){default:a.value=s;break;case"radio":case"checkbox":for(var u=0;u<a.length;u++)a[u].checked=s.indexOf(a[u].value)>-1;break;case"select-multiple":for(var f=s.constructor==Array?s:[s],l=0;l<a.options.length;l++)a.options[l].selected|=f.indexOf(a.options[l].value)>-1;break;case"select":case"select-one":a.value=s.toString()||s}}}};"function"==typeof t&&"object"==typeof t.amd&&t.amd?t(function(){return r}):"undefined"!=typeof n&&n.exports?n.exports=r:e.populate=r}(this)},{}],8:[function(e,n,r){(function(){"use strict";function e(){}function r(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function i(e){return function(){return this[e].apply(this,arguments)}}var o=e.prototype,s=this,a=s.EventEmitter;o.getListeners=function(e){var t,n,r=this._getEvents();if(e instanceof RegExp){t={};for(n in r)r.hasOwnProperty(n)&&e.test(n)&&(t[n]=r[n])}else t=r[e]||(r[e]=[]);return t},o.flattenListeners=function(e){var t,n=[];for(t=0;t<e.length;t+=1)n.push(e[t].listener);return n},o.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},o.addListener=function(e,t){var n,i=this.getListenersAsObject(e),o="object"==typeof t;for(n in i)i.hasOwnProperty(n)&&-1===r(i[n],t)&&i[n].push(o?t:{listener:t,once:!1});return this},o.on=i("addListener"),o.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},o.once=i("addOnceListener"),o.defineEvent=function(e){return this.getListeners(e),this},o.defineEvents=function(e){for(var t=0;t<e.length;t+=1)this.defineEvent(e[t]);return this},o.removeListener=function(e,t){var n,i,o=this.getListenersAsObject(e);for(i in o)o.hasOwnProperty(i)&&(n=r(o[i],t),-1!==n&&o[i].splice(n,1));return this},o.off=i("removeListener"),o.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},o.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},o.manipulateListeners=function(e,t,n){var r,i,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(r=n.length;r--;)o.call(this,t,n[r]);else for(r in t)t.hasOwnProperty(r)&&(i=t[r])&&("function"==typeof i?o.call(this,r,i):s.call(this,r,i));return this},o.removeEvent=function(e){var t,n=typeof e,r=this._getEvents();if("string"===n)delete r[e];else if(e instanceof RegExp)for(t in r)r.hasOwnProperty(t)&&e.test(t)&&delete r[t];else delete this._events;return this},o.removeAllListeners=i("removeEvent"),o.emitEvent=function(e,t){var n,r,i,o,s,a=this.getListenersAsObject(e);for(o in a)if(a.hasOwnProperty(o))for(n=a[o].slice(0),i=n.length;i--;)r=n[i],r.once===!0&&this.removeListener(e,r.listener),s=r.listener.apply(this,t||[]),s===this._getOnceReturnValue()&&this.removeListener(e,r.listener);return this},o.trigger=i("emitEvent"),o.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},o.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},o._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},o._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return s.EventEmitter=a,e},"function"==typeof t&&t.amd?t(function(){return e}):"object"==typeof n&&n.exports?n.exports=e:s.EventEmitter=e}).call(this)},{}]},{},[1])}();
|
2 |
//# sourceMappingURL=forms-api.min.js.map
|
1 |
+
!function(){var e=void 0,t=void 0;!function n(t,r,i){function o(a,c){if(!r[a]){if(!t[a]){var u="function"==typeof e&&e;if(!c&&u)return u(a,!0);if(s)return s(a,!0);var f=new Error("Cannot find module '"+a+"'");throw f.code="MODULE_NOT_FOUND",f}var l=r[a]={exports:{}};t[a][0].call(l.exports,function(e){var n=t[a][1][e];return o(n?n:e)},l,l.exports,n,t,r,i)}return r[a].exports}for(var s="function"==typeof e&&e,a=0;a<i.length;a++)o(i[a]);return o}({1:[function(e,t,n){"use strict";function r(e,t,n,r){a.trigger("submitted",[e]),n?a.trigger("error",[e,n]):(a.trigger("success",[e,r]),a.trigger(t+"d",[e,r]))}function i(e,t,n,i){if(n&&e.setData(i),u.auto_scroll){var o="animated"===u.auto_scroll,s=o?{behavior:"smooth"}:!1;e.element.scrollIntoView(s)}window.addEventListener("load",function(){r(e,t,n,i)})}var o=window.mc4wp||{};if(window.addEventListener){for(var s=e("gator"),a=e("./forms/forms.js"),c=window.mc4wp&&window.mc4wp.listeners?window.mc4wp.listeners:[],u=window.mc4wp_forms_config||{},f=0;f<c.length;f++)a.on(c[f].event,c[f].callback);if(s(document.body).on("submit",".mc4wp-form",function(e){e=e||window.event;var t=a.getByElement(e.target||e.srcElement);a.trigger("submit",[t,e])}),s(document.body).on("focus",".mc4wp-form",function(e){e=e||window.event;var t=a.getByElement(e.target||e.srcElement);t.started||(a.trigger("started",[t,e]),t.started=!0)}),s(document.body).on("change",".mc4wp-form",function(e){e=e||window.event;var t=a.getByElement(e.target||e.srcElement);a.trigger("change",[t,e])}),u.submitted_form){var l=u.submitted_form,h=document.getElementById(l.element_id),d=a.getByElement(h);i(d,l.action,l.errors,l.data)}o.forms=a,window.mc4wp=o}},{"./forms/forms.js":3,gator:6}],2:[function(e,t,n){"use strict";var r=e("../third-party/serialize.js"),i=e("populate.js"),o=e("../third-party/form2js.js"),s=function(e,t){var n=this;this.id=e,this.element=t||document.createElement("form"),this.name=this.element.getAttribute("data-name")||"Form #"+this.id,this.errors=[],this.started=!1,this.setData=function(e){try{i(n.element,e)}catch(t){console.error(t)}},this.getData=function(){return o(n.element)},this.getSerializedData=function(){return r(n.element)},this.setResponse=function(e){n.element.querySelector(".mc4wp-response").innerHTML=e},this.reset=function(){this.setResponse(""),n.element.querySelector(".mc4wp-form-fields").style.display="",n.element.reset()}};t.exports=s},{"../third-party/form2js.js":4,"../third-party/serialize.js":5,"populate.js":7}],3:[function(e,t,n){"use strict";function r(e){for(var t=0;t<d.length;t++)if(d[t].id==e)return d[t];var n=document.querySelector(".mc4wp-form-"+e);return o(n,e)}function i(e){for(var t=e.form||e,n=0;n<d.length;n++)if(d[n].element==t)return d[n];return o(t)}function o(e,t){t=t||parseInt(e.getAttribute("data-id"))||0;var n=new l(t,e);return d.push(n),n}function s(){return d}function a(e,t){return h.on(e,t)}function c(e,t){return h.trigger(e,t)}function u(e,t){return h.off(e,t)}var f=e("wolfy87-eventemitter"),l=e("./form.js"),h=new f,d=[];t.exports={all:s,get:r,getByElement:i,on:a,trigger:c,off:u}},{"./form.js":2,"wolfy87-eventemitter":8}],4:[function(e,n,r){!function(e,i){"undefined"!=typeof r&&"undefined"!=typeof n&&n.exports?n.exports=i():"function"==typeof t&&t.amd?t(i):e.form2js=i()}(this,function(){"use strict";function e(e,r,i,o,s,a){a=!!a,"undefined"!=typeof i&&null!=i||(i=!0),"undefined"!=typeof r&&null!=r||(r="."),arguments.length<5&&(s=!1),e="string"==typeof e?document.getElementById(e):e;var c,u=[],f=0;if(e.constructor==Array||"undefined"!=typeof NodeList&&e.constructor==NodeList)for(;c=e[f++];)u=u.concat(n(c,o,s,a));else u=n(e,o,s,a);return t(u,i,r)}function t(e,t,n){var r,i,o,s,a,c,u,f,l,h,d,m,p,v={},g={};for(r=0;r<e.length;r++)if(a=e[r].value,!t||""!==a&&null!==a){for(m=e[r].name,p=m.split(n),c=[],u=v,f="",i=0;i<p.length;i++)if(d=p[i].split("]["),d.length>1)for(o=0;o<d.length;o++)if(0==o?d[o]=d[o]+"]":o==d.length-1?d[o]="["+d[o]:d[o]="["+d[o]+"]",h=d[o].match(/([a-z_]+)?\[([a-z_][a-z0-9_]+?)\]/i))for(s=1;s<h.length;s++)h[s]&&c.push(h[s]);else c.push(d[o]);else c=c.concat(d);for(i=0;i<c.length;i++)d=c[i],d.indexOf("[]")>-1&&i==c.length-1?(l=d.substr(0,d.indexOf("[")),f+=l,u[l]||(u[l]=[]),u[l].push(a)):d.indexOf("[")>-1?(l=d.substr(0,d.indexOf("[")),h=d.replace(/(^([a-z_]+)?\[)|(\]$)/gi,""),f+="_"+l+"_"+h,g[f]||(g[f]={}),""==l||u[l]||(u[l]=[]),i==c.length-1?""==l?(u.push(a),g[f][h]=u[u.length-1]):(u[l].push(a),g[f][h]=u[l][u[l].length-1]):g[f][h]||(/^[0-9a-z_]+\[?/i.test(c[i+1])?u[l].push({}):u[l].push([]),g[f][h]=u[l][u[l].length-1]),u=g[f][h]):(f+=d,i<c.length-1?(u[d]||(u[d]={}),u=u[d]):u[d]=a)}return v}function n(e,t,n,o){var s=i(e,t,n,o);return s.length>0?s:r(e,t,n,o)}function r(e,t,n,r){for(var o=[],s=e.firstChild;s;)o=o.concat(i(s,t,n,r)),s=s.nextSibling;return o}function i(e,t,n,i){if(e.disabled&&!i)return[];var a,c,u,f=o(e,n);return a=t&&t(e),a&&a.name?u=[a]:""!=f&&e.nodeName.match(/INPUT|TEXTAREA/i)?(c=s(e,i),u=null===c?[]:[{name:f,value:c}]):""!=f&&e.nodeName.match(/SELECT/i)?(c=s(e,i),u=[{name:f.replace(/\[\]$/,""),value:c}]):u=r(e,t,n,i),u}function o(e,t){return e.name&&""!=e.name?e.name:t&&e.id&&""!=e.id?e.id:""}function s(e,t){if(e.disabled&&!t)return null;switch(e.nodeName){case"INPUT":case"TEXTAREA":switch(e.type.toLowerCase()){case"radio":if(e.checked&&"false"===e.value)return!1;case"checkbox":if(e.checked&&"true"===e.value)return!0;if(!e.checked&&"true"===e.value)return!1;if(e.checked)return e.value;break;case"button":case"reset":case"submit":case"image":return"";default:return e.value}break;case"SELECT":return a(e)}return null}function a(e){var t,n,r,i=e.multiple,o=[];if(!i)return e.value;for(t=e.getElementsByTagName("option"),n=0,r=t.length;r>n;n++)t[n].selected&&o.push(t[n].value);return o}return e})},{}],5:[function(e,t,n){function r(e,t){"object"!=typeof t?t={hash:!!t}:void 0===t.hash&&(t.hash=!0);for(var n=t.hash?{}:"",r=t.serializer||(t.hash?s:a),i=e&&e.elements?e.elements:[],o=Object.create(null),f=0;f<i.length;++f){var l=i[f];if((t.disabled||!l.disabled)&&l.name&&u.test(l.nodeName)&&!c.test(l.type)){var h=l.name,d=l.value;if("checkbox"!==l.type&&"radio"!==l.type||l.checked||(d=void 0),t.empty){if("checkbox"!==l.type||l.checked||(d=""),"radio"===l.type&&(o[l.name]||l.checked?l.checked&&(o[l.name]=!0):o[l.name]=!1),!d&&"radio"==l.type)continue}else if(!d)continue;if("select-multiple"!==l.type)n=r(n,h,d);else{d=[];for(var m=l.options,p=!1,v=0;v<m.length;++v){var g=m[v],y=t.empty&&!g.value,w=g.value||y;g.selected&&w&&(p=!0,n=t.hash&&"[]"!==h.slice(h.length-2)?r(n,h+"[]",g.value):r(n,h,g.value))}!p&&t.empty&&(n=r(n,h,""))}}}if(t.empty)for(var h in o)o[h]||(n=r(n,h,""));return n}function i(e){var t=[],n=/^([^\[\]]*)/,r=new RegExp(f),i=n.exec(e);for(i[1]&&t.push(i[1]);null!==(i=r.exec(e));)t.push(i[1]);return t}function o(e,t,n){if(0===t.length)return e=n;var r=t.shift(),i=r.match(/^\[(.+?)\]$/);if("[]"===r)return e=e||[],Array.isArray(e)?e.push(o(null,t,n)):(e._values=e._values||[],e._values.push(o(null,t,n))),e;if(i){var s=i[1],a=parseInt(s,10);isNaN(a)?(e=e||{},e[s]=o(e[s],t,n)):(e=e||[],e[a]=o(e[a],t,n))}else e[r]=o(e[r],t,n);return e}function s(e,t,n){var r=t.match(f);if(r){var s=i(t);o(e,s,n)}else{var a=e[t];a?(Array.isArray(a)||(e[t]=[a]),e[t].push(n)):e[t]=n}return e}function a(e,t,n){return n=n.replace(/(\r)?\n/g,"\r\n"),n=encodeURIComponent(n),n=n.replace(/%20/g,"+"),e+(e?"&":"")+encodeURIComponent(t)+"="+n}var c=/^(?:submit|button|image|reset|file)$/i,u=/^(?:input|select|textarea|keygen)/i,f=/(\[[^\[\]]*\])/g;t.exports=r},{}],6:[function(e,t,n){!function(){function e(e,t,n){var r="blur"==t||"focus"==t;e.element.addEventListener(t,n,r)}function n(e){e.preventDefault(),e.stopPropagation()}function r(e){return f?f:f=e.matches?e.matches:e.webkitMatchesSelector?e.webkitMatchesSelector:e.mozMatchesSelector?e.mozMatchesSelector:e.msMatchesSelector?e.msMatchesSelector:e.oMatchesSelector?e.oMatchesSelector:u.matchesSelector}function i(e,t,n){if("_root"==t)return n;if(e!==n)return r(e).call(e,t)?e:e.parentNode?(l++,i(e.parentNode,t,n)):void 0}function o(e,t,n,r){d[e.id]||(d[e.id]={}),d[e.id][t]||(d[e.id][t]={}),d[e.id][t][n]||(d[e.id][t][n]=[]),d[e.id][t][n].push(r)}function s(e,t,n,r){if(d[e.id])if(t){if(!r&&!n)return void(d[e.id][t]={});if(!r)return void delete d[e.id][t][n];if(d[e.id][t][n])for(var i=0;i<d[e.id][t][n].length;i++)if(d[e.id][t][n][i]===r){d[e.id][t][n].splice(i,1);break}}else for(var o in d[e.id])d[e.id].hasOwnProperty(o)&&(d[e.id][o]={})}function a(e,t,n){if(d[e][n]){var r,o,s=t.target||t.srcElement,a={},c=0,f=0;l=0;for(r in d[e][n])d[e][n].hasOwnProperty(r)&&(o=i(s,r,m[e].element),o&&u.matchesEvent(n,m[e].element,o,"_root"==r,t)&&(l++,d[e][n][r].match=o,a[l]=d[e][n][r]));for(t.stopPropagation=function(){t.cancelBubble=!0},c=0;l>=c;c++)if(a[c])for(f=0;f<a[c].length;f++){if(a[c][f].call(a[c].match,t)===!1)return void u.cancel(t);if(t.cancelBubble)return}}}function c(e,t,n,r){function i(e){return function(t){a(f,t,e)}}if(this.element){e instanceof Array||(e=[e]),n||"function"!=typeof t||(n=t,t="_root");var c,f=this.id;for(c=0;c<e.length;c++)r?s(this,e[c],t,n):(d[f]&&d[f][e[c]]||u.addEvent(this,e[c],i(e[c])),o(this,e[c],t,n));return this}}function u(e,t){if(!(this instanceof u)){for(var n in m)if(m[n].element===e)return m[n];return h++,m[h]=new u(e,h),m[h]}this.element=e,this.id=t}var f,l=0,h=0,d={},m={};u.prototype.on=function(e,t,n){return c.call(this,e,t,n)},u.prototype.off=function(e,t,n){return c.call(this,e,t,n,!0)},u.matchesSelector=function(){},u.cancel=n,u.addEvent=e,u.matchesEvent=function(){return!0},"undefined"!=typeof t&&t.exports&&(t.exports=u),window.Gator=u}()},{}],7:[function(e,n,r){!function(e){var r=function(e,t,n){for(var i in t)if(t.hasOwnProperty(i)){var o=i,s=t[i];if("undefined"!=typeof n&&(o=n+"["+i+"]"),s.constructor===Array)o+="[]";else if("object"==typeof s){r(e,s,o);continue}var a=e.elements.namedItem(o);if(a){var c=a.type||a[0].type;switch(c){default:a.value=s;break;case"radio":case"checkbox":for(var u=0;u<a.length;u++)a[u].checked=s.indexOf(a[u].value)>-1;break;case"select-multiple":for(var f=s.constructor==Array?s:[s],l=0;l<a.options.length;l++)a.options[l].selected|=f.indexOf(a.options[l].value)>-1;break;case"select":case"select-one":a.value=s.toString()||s}}}};"function"==typeof t&&"object"==typeof t.amd&&t.amd?t(function(){return r}):"undefined"!=typeof n&&n.exports?n.exports=r:e.populate=r}(this)},{}],8:[function(e,n,r){(function(){"use strict";function e(){}function r(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function i(e){return function(){return this[e].apply(this,arguments)}}var o=e.prototype,s=this,a=s.EventEmitter;o.getListeners=function(e){var t,n,r=this._getEvents();if(e instanceof RegExp){t={};for(n in r)r.hasOwnProperty(n)&&e.test(n)&&(t[n]=r[n])}else t=r[e]||(r[e]=[]);return t},o.flattenListeners=function(e){var t,n=[];for(t=0;t<e.length;t+=1)n.push(e[t].listener);return n},o.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},o.addListener=function(e,t){var n,i=this.getListenersAsObject(e),o="object"==typeof t;for(n in i)i.hasOwnProperty(n)&&-1===r(i[n],t)&&i[n].push(o?t:{listener:t,once:!1});return this},o.on=i("addListener"),o.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},o.once=i("addOnceListener"),o.defineEvent=function(e){return this.getListeners(e),this},o.defineEvents=function(e){for(var t=0;t<e.length;t+=1)this.defineEvent(e[t]);return this},o.removeListener=function(e,t){var n,i,o=this.getListenersAsObject(e);for(i in o)o.hasOwnProperty(i)&&(n=r(o[i],t),-1!==n&&o[i].splice(n,1));return this},o.off=i("removeListener"),o.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},o.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},o.manipulateListeners=function(e,t,n){var r,i,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(r=n.length;r--;)o.call(this,t,n[r]);else for(r in t)t.hasOwnProperty(r)&&(i=t[r])&&("function"==typeof i?o.call(this,r,i):s.call(this,r,i));return this},o.removeEvent=function(e){var t,n=typeof e,r=this._getEvents();if("string"===n)delete r[e];else if(e instanceof RegExp)for(t in r)r.hasOwnProperty(t)&&e.test(t)&&delete r[t];else delete this._events;return this},o.removeAllListeners=i("removeEvent"),o.emitEvent=function(e,t){var n,r,i,o,s,a=this.getListenersAsObject(e);for(o in a)if(a.hasOwnProperty(o))for(n=a[o].slice(0),i=n.length;i--;)r=n[i],r.once===!0&&this.removeListener(e,r.listener),s=r.listener.apply(this,t||[]),s===this._getOnceReturnValue()&&this.removeListener(e,r.listener);return this},o.trigger=i("emitEvent"),o.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},o.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},o._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},o._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return s.EventEmitter=a,e},"function"==typeof t&&t.amd?t(function(){return e}):"object"==typeof n&&n.exports?n.exports=e:s.EventEmitter=e}).call(this)},{}]},{},[1])}();
|
2 |
//# sourceMappingURL=forms-api.min.js.map
|
assets/js/forms-api.min.js.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sources":["forms-api.js"],"names":["require","undefined","define","e","t","n","r","s","o","u","a","i","f","Error","code","l","exports","call","length",1,"module","triggerFormEvents","form","action","errors","data","forms","trigger","handleFormRequest","setData","config","auto_scroll","animate","arg","behavior","element","scrollIntoView","window","addEventListener","mc4wp","Gator","listeners","mc4wp_forms_config","on","event","callback","document","body","getByElement","target","srcElement","started","submitted_form","formConfig","getElementById","element_id","./forms/forms.js","gator",2,"serialize","populate","formToJson","Form","id","this","createElement","name","getAttribute","console","error","getData","getSerializedData","setResponse","msg","querySelector","innerHTML","../third-party/form2js.js","../third-party/serialize.js","populate.js",3,"get","formId","formElement","createFromElement","parseInt","push","all","events","args","off","EventEmitter","./form.js","wolfy87-eventemitter",4,"root","factory","amd","form2js","rootNode","delimiter","skipEmpty","nodeCallback","useIdIfEmptyName","getDisabled","arguments","currNode","formValues","constructor","Array","NodeList","concat","getFormValues","processNameValues","nameValues","j","k","value","nameParts","currResult","arrNameFull","arrName","arrIdx","namePart","_nameParts","result","arrays","split","match","indexOf","substr","replace","test","extractNodeValues","getSubFormValues","currentNode","firstChild","nextSibling","node","disabled","callbackResult","fieldValue","fieldName","getFieldName","nodeName","getFieldValue","fieldNode","type","toLowerCase","checked","getSelectedOptionValue","selectNode","options","multiple","getElementsByTagName","selected",5,"hash","serializer","hash_serializer","str_serialize","elements","radio_store","Object","create","k_r_success_contrls","k_r_submitter","key","val","empty","selectOptions","isSelectedOptions","option","allowedEmpty","hasValue","slice","parse_keys","string","keys","prefix","children","RegExp","brackets","exec","hash_assign","shift","between","isArray","_values","index","isNaN","matches","existing","encodeURIComponent",6,"_addEvent","useCapture","_cancel","preventDefault","stopPropagation","_getMatcher","_matcher","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","matchesSelector","_matchesSelector","selector","boundElement","parentNode","_level","_addHandler","_handlers","_removeHandler","splice","hasOwnProperty","_handleEvent","_gatorInstances","matchesEvent","cancelBubble","cancel","_bind","remove","_getGlobalCallback","addEvent","_id","prototype",7,"basename","namedItem","values","toString",8,"indexOfListener","listener","alias","apply","proto","originalGlobalValue","getListeners","evt","response","_getEvents","flattenListeners","flatListeners","getListenersAsObject","addListener","listenerIsWrapped","once","addOnceListener","defineEvent","defineEvents","evts","removeListener","addListeners","manipulateListeners","removeListeners","single","removeEvent","_events","removeAllListeners","emitEvent","listenersMap","_getOnceReturnValue","emit","setOnceReturnValue","_onceReturnValue","noConflict"],"mappings":"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","file":"forms-api.min.js","sourcesContent":["(function () { var require = undefined; var define = undefined; (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n'use strict';\n\nvar mc4wp = window.mc4wp || {};\n\n// bail early if we're on IE8..\n// TODO: just don't load in IE8\nif( ! window.addEventListener ) {\n\treturn;\n}\n\n// deps & vars\nvar Gator = require('gator');\nvar forms = require('./forms/forms.js');\nvar listeners = window.mc4wp && window.mc4wp.listeners ? window.mc4wp.listeners : [];\nvar config = window.mc4wp_forms_config || {};\n\n// funcs\nfunction triggerFormEvents(form, action, errors, data) {\n\n\t// trigger events\n\tforms.trigger( 'submitted', [form]);\n\n\tif( errors ) {\n\t\tforms.trigger('error', [form, errors]);\n\t} else {\n\t\t// form was successfully submitted\n\t\tforms.trigger('success', [form, data]);\n\t\tforms.trigger(action + \"d\", [form, data]);\n\t}\n}\n\nfunction handleFormRequest(form, action, errors, data){\n\n\t// re-populate form\n\tif( errors ) {\n\t\tform.setData(data);\n\t}\n\n\tif( config.auto_scroll ) {\n\t\tvar animate = ( config.auto_scroll === 'animated' );\n\t\tvar arg = animate ? { behavior: 'smooth' } : false;\n\t\tform.element.scrollIntoView(arg);\n\t}\n\n\t// trigger events on window.load so all other scripts have loaded\n\twindow.addEventListener('load', function(){\n\t\ttriggerFormEvents(form, action, errors, data);\n\t});\n}\n\n// register early listeners\nfor(var i=0; i<listeners.length;i++) {\n\tforms.on(listeners[i].event, listeners[i].callback);\n}\n\n// Bind browser events to form events (using delegation to work with AJAX loaded forms as well)\nGator(document.body).on('submit', '.mc4wp-form', function(event) {\n\tevent = event || window.event;\n\tvar form = forms.getByElement(event.target || event.srcElement);\n\tforms.trigger('submit', [form, event]);\n});\n\nGator(document.body).on('focus', '.mc4wp-form', function(event) {\n\tevent = event || window.event;\n\tvar form = forms.getByElement(event.target || event.srcElement);\n\n\tif( ! form.started ) {\n\t\tforms.trigger('started', [form, event]);\n\t\tform.started = true;\n\t}\n});\n\nGator(document.body).on('change', '.mc4wp-form', function(event) {\n\tevent = event || window.event;\n\tvar form = forms.getByElement(event.target || event.srcElement);\n\tforms.trigger('change', [form,event]);\n});\n\nif( config.submitted_form ) {\n\tvar formConfig = config.submitted_form,\n\t\telement = document.getElementById(formConfig.element_id),\n\t\tform = forms.getByElement(element);\n\n\thandleFormRequest(form, formConfig.action, formConfig.errors, formConfig.data);\n}\n\n// expose forms object\nmc4wp.forms = forms;\nwindow.mc4wp = mc4wp;\n\n},{\"./forms/forms.js\":3,\"gator\":6}],2:[function(require,module,exports){\n'use strict';\n\nvar serialize = require('../third-party/serialize.js');\nvar populate = require('populate.js');\nvar formToJson = require('../third-party/form2js.js');\n\nvar Form = function(id, element) {\n\n\tvar form = this;\n\n\tthis.id = id;\n\tthis.element = element || document.createElement('form');\n\tthis.name = this.element.getAttribute('data-name') || \"Form #\" + this.id;\n\tthis.errors = [];\n\tthis.started = false;\n\n\tthis.setData = function(data) {\n\t\ttry {\n\t\t\tpopulate(form.element, data);\n\t\t} catch(e) {\n\t\t\tconsole.error(e);\n\t\t}\n\t};\n\n\tthis.getData = function() {\n\t\treturn formToJson(form.element);\n\t};\n\n\tthis.getSerializedData = function() {\n\t\treturn serialize(form.element);\n\t};\n\n\tthis.setResponse = function( msg ) {\n\t\tform.element.querySelector('.mc4wp-response').innerHTML = msg;\n\t};\n\n};\n\nmodule.exports = Form;\n\n},{\"../third-party/form2js.js\":4,\"../third-party/serialize.js\":5,\"populate.js\":7}],3:[function(require,module,exports){\n'use strict';\n\n// deps\nvar EventEmitter = require('wolfy87-eventemitter');\nvar Form = require('./form.js');\n\n// variables\nvar events = new EventEmitter();\nvar forms = [];\n\n// get form by its id\n// please note that this will get the FIRST occurence of the form with that ID on the page\nfunction get(formId) {\n\n\t// do we have form for this one already?\n\tfor(var i=0; i<forms.length;i++) {\n\t\tif(forms[i].id == formId) {\n\t\t\treturn forms[i];\n\t\t}\n\t}\n\n\t// try to create from first occurence of this element\n\tvar formElement = document.querySelector('.mc4wp-form-' + formId);\n\treturn createFromElement(formElement,formId);\n}\n\n// get form by <form> element (or any input in form)\nfunction getByElement(element) {\n\tvar formElement = element.form || element;\n\n\tfor(var i=0; i < forms.length; i++) {\n\t\tif(forms[i].element == formElement) {\n\t\t\treturn forms[i];\n\t\t}\n\t}\n\n\treturn createFromElement(formElement);\n}\n\n// create form object from <form> element\nfunction createFromElement(formElement, id) {\n\tid = id || parseInt( formElement.getAttribute('data-id') ) || 0;\n\tvar form = new Form(id, formElement);\n\tforms.push(form);\n\treturn form;\n}\n\nfunction all() {\n\treturn forms;\n}\n\nfunction on(event,callback) {\n\treturn events.on(event,callback);\n}\n\nfunction trigger(event,args) {\n\treturn events.trigger(event,args);\n}\n\nfunction off(event,callback) {\n\treturn events.off(event,callback);\n}\n\nmodule.exports = {\n\t\"all\": all,\n\t\"get\": get,\n\t\"getByElement\": getByElement,\n\t\"on\": on,\n\t\"trigger\": trigger,\n\t\"off\": off\n};\n\n\n},{\"./form.js\":2,\"wolfy87-eventemitter\":8}],4:[function(require,module,exports){\n/**\n * Copyright (c) 2010 Maxim Vasiliev\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n * @author Maxim Vasiliev\n * Date: 09.09.2010\n * Time: 19:02:33\n */\n\n\n(function (root, factory)\n{\n\tif (typeof exports !== 'undefined' && typeof module !== 'undefined' && module.exports) {\n\t\t// NodeJS\n\t\tmodule.exports = factory();\n\t}\n\telse if (typeof define === 'function' && define.amd)\n\t{\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(factory);\n\t}\n\telse\n\t{\n\t\t// Browser globals\n\t\troot.form2js = factory();\n\t}\n}(this, function ()\n{\n\t\"use strict\";\n\n\t/**\n\t * Returns form values represented as Javascript object\n\t * \"name\" attribute defines structure of resulting object\n\t *\n\t * @param rootNode {Element|String} root form element (or it's id) or array of root elements\n\t * @param delimiter {String} structure parts delimiter defaults to '.'\n\t * @param skipEmpty {Boolean} should skip empty text values, defaults to true\n\t * @param nodeCallback {Function} custom function to get node value\n\t * @param useIdIfEmptyName {Boolean} if true value of id attribute of field will be used if name of field is empty\n\t */\n\tfunction form2js(rootNode, delimiter, skipEmpty, nodeCallback, useIdIfEmptyName, getDisabled)\n\t{\n\t\tgetDisabled = getDisabled ? true : false;\n\t\tif (typeof skipEmpty == 'undefined' || skipEmpty == null) skipEmpty = true;\n\t\tif (typeof delimiter == 'undefined' || delimiter == null) delimiter = '.';\n\t\tif (arguments.length < 5) useIdIfEmptyName = false;\n\n\t\trootNode = typeof rootNode == 'string' ? document.getElementById(rootNode) : rootNode;\n\n\t\tvar formValues = [],\n\t\t\tcurrNode,\n\t\t\ti = 0;\n\n\t\t/* If rootNode is array - combine values */\n\t\tif (rootNode.constructor == Array || (typeof NodeList != \"undefined\" && rootNode.constructor == NodeList))\n\t\t{\n\t\t\twhile(currNode = rootNode[i++])\n\t\t\t{\n\t\t\t\tformValues = formValues.concat(getFormValues(currNode, nodeCallback, useIdIfEmptyName, getDisabled));\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tformValues = getFormValues(rootNode, nodeCallback, useIdIfEmptyName, getDisabled);\n\t\t}\n\n\t\treturn processNameValues(formValues, skipEmpty, delimiter);\n\t}\n\n\t/**\n\t * Processes collection of { name: 'name', value: 'value' } objects.\n\t * @param nameValues\n\t * @param skipEmpty if true skips elements with value == '' or value == null\n\t * @param delimiter\n\t */\n\tfunction processNameValues(nameValues, skipEmpty, delimiter)\n\t{\n\t\tvar result = {},\n\t\t\tarrays = {},\n\t\t\ti, j, k, l,\n\t\t\tvalue,\n\t\t\tnameParts,\n\t\t\tcurrResult,\n\t\t\tarrNameFull,\n\t\t\tarrName,\n\t\t\tarrIdx,\n\t\t\tnamePart,\n\t\t\tname,\n\t\t\t_nameParts;\n\n\t\tfor (i = 0; i < nameValues.length; i++)\n\t\t{\n\t\t\tvalue = nameValues[i].value;\n\n\t\t\tif (skipEmpty && (value === '' || value === null)) continue;\n\n\t\t\tname = nameValues[i].name;\n\t\t\t_nameParts = name.split(delimiter);\n\t\t\tnameParts = [];\n\t\t\tcurrResult = result;\n\t\t\tarrNameFull = '';\n\n\t\t\tfor(j = 0; j < _nameParts.length; j++)\n\t\t\t{\n\t\t\t\tnamePart = _nameParts[j].split('][');\n\t\t\t\tif (namePart.length > 1)\n\t\t\t\t{\n\t\t\t\t\tfor(k = 0; k < namePart.length; k++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (k == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnamePart[k] = namePart[k] + ']';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k == namePart.length - 1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnamePart[k] = '[' + namePart[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnamePart[k] = '[' + namePart[k] + ']';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarrIdx = namePart[k].match(/([a-z_]+)?\\[([a-z_][a-z0-9_]+?)\\]/i);\n\t\t\t\t\t\tif (arrIdx)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfor(l = 1; l < arrIdx.length; l++)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (arrIdx[l]) nameParts.push(arrIdx[l]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\tnameParts.push(namePart[k]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tnameParts = nameParts.concat(namePart);\n\t\t\t}\n\n\t\t\tfor (j = 0; j < nameParts.length; j++)\n\t\t\t{\n\t\t\t\tnamePart = nameParts[j];\n\n\t\t\t\tif (namePart.indexOf('[]') > -1 && j == nameParts.length - 1)\n\t\t\t\t{\n\t\t\t\t\tarrName = namePart.substr(0, namePart.indexOf('['));\n\t\t\t\t\tarrNameFull += arrName;\n\n\t\t\t\t\tif (!currResult[arrName]) currResult[arrName] = [];\n\t\t\t\t\tcurrResult[arrName].push(value);\n\t\t\t\t}\n\t\t\t\telse if (namePart.indexOf('[') > -1)\n\t\t\t\t{\n\t\t\t\t\tarrName = namePart.substr(0, namePart.indexOf('['));\n\t\t\t\t\tarrIdx = namePart.replace(/(^([a-z_]+)?\\[)|(\\]$)/gi, '');\n\n\t\t\t\t\t/* Unique array name */\n\t\t\t\t\tarrNameFull += '_' + arrName + '_' + arrIdx;\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Because arrIdx in field name can be not zero-based and step can be\n\t\t\t\t\t * other than 1, we can't use them in target array directly.\n\t\t\t\t\t * Instead we're making a hash where key is arrIdx and value is a reference to\n\t\t\t\t\t * added array element\n\t\t\t\t\t */\n\n\t\t\t\t\tif (!arrays[arrNameFull]) arrays[arrNameFull] = {};\n\t\t\t\t\tif (arrName != '' && !currResult[arrName]) currResult[arrName] = [];\n\n\t\t\t\t\tif (j == nameParts.length - 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (arrName == '')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcurrResult.push(value);\n\t\t\t\t\t\t\tarrays[arrNameFull][arrIdx] = currResult[currResult.length - 1];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcurrResult[arrName].push(value);\n\t\t\t\t\t\t\tarrays[arrNameFull][arrIdx] = currResult[arrName][currResult[arrName].length - 1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!arrays[arrNameFull][arrIdx])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ((/^[0-9a-z_]+\\[?/i).test(nameParts[j+1])) currResult[arrName].push({});\n\t\t\t\t\t\t\telse currResult[arrName].push([]);\n\n\t\t\t\t\t\t\tarrays[arrNameFull][arrIdx] = currResult[arrName][currResult[arrName].length - 1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrResult = arrays[arrNameFull][arrIdx];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tarrNameFull += namePart;\n\n\t\t\t\t\tif (j < nameParts.length - 1) /* Not the last part of name - means object */\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!currResult[namePart]) currResult[namePart] = {};\n\t\t\t\t\t\tcurrResult = currResult[namePart];\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tcurrResult[namePart] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction getFormValues(rootNode, nodeCallback, useIdIfEmptyName, getDisabled)\n\t{\n\t\tvar result = extractNodeValues(rootNode, nodeCallback, useIdIfEmptyName, getDisabled);\n\t\treturn result.length > 0 ? result : getSubFormValues(rootNode, nodeCallback, useIdIfEmptyName, getDisabled);\n\t}\n\n\tfunction getSubFormValues(rootNode, nodeCallback, useIdIfEmptyName, getDisabled)\n\t{\n\t\tvar result = [],\n\t\t\tcurrentNode = rootNode.firstChild;\n\n\t\twhile (currentNode)\n\t\t{\n\t\t\tresult = result.concat(extractNodeValues(currentNode, nodeCallback, useIdIfEmptyName, getDisabled));\n\t\t\tcurrentNode = currentNode.nextSibling;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction extractNodeValues(node, nodeCallback, useIdIfEmptyName, getDisabled) {\n\t\tif (node.disabled && !getDisabled) return [];\n\n\t\tvar callbackResult, fieldValue, result, fieldName = getFieldName(node, useIdIfEmptyName);\n\n\t\tcallbackResult = nodeCallback && nodeCallback(node);\n\n\t\tif (callbackResult && callbackResult.name) {\n\t\t\tresult = [callbackResult];\n\t\t}\n\t\telse if (fieldName != '' && node.nodeName.match(/INPUT|TEXTAREA/i)) {\n\t\t\tfieldValue = getFieldValue(node, getDisabled);\n\t\t\tif (null === fieldValue) {\n\t\t\t\tresult = [];\n\t\t\t} else {\n\t\t\t\tresult = [ { name: fieldName, value: fieldValue} ];\n\t\t\t}\n\t\t}\n\t\telse if (fieldName != '' && node.nodeName.match(/SELECT/i)) {\n\t\t\tfieldValue = getFieldValue(node, getDisabled);\n\t\t\tresult = [ { name: fieldName.replace(/\\[\\]$/, ''), value: fieldValue } ];\n\t\t}\n\t\telse {\n\t\t\tresult = getSubFormValues(node, nodeCallback, useIdIfEmptyName, getDisabled);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction getFieldName(node, useIdIfEmptyName)\n\t{\n\t\tif (node.name && node.name != '') return node.name;\n\t\telse if (useIdIfEmptyName && node.id && node.id != '') return node.id;\n\t\telse return '';\n\t}\n\n\n\tfunction getFieldValue(fieldNode, getDisabled)\n\t{\n\t\tif (fieldNode.disabled && !getDisabled) return null;\n\n\t\tswitch (fieldNode.nodeName) {\n\t\t\tcase 'INPUT':\n\t\t\tcase 'TEXTAREA':\n\t\t\t\tswitch (fieldNode.type.toLowerCase()) {\n\t\t\t\t\tcase 'radio':\n\t\t\t\t\t\tif (fieldNode.checked && fieldNode.value === \"false\") return false;\n\t\t\t\t\tcase 'checkbox':\n\t\t\t\t\t\tif (fieldNode.checked && fieldNode.value === \"true\") return true;\n\t\t\t\t\t\tif (!fieldNode.checked && fieldNode.value === \"true\") return false;\n\t\t\t\t\t\tif (fieldNode.checked) return fieldNode.value;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'button':\n\t\t\t\t\tcase 'reset':\n\t\t\t\t\tcase 'submit':\n\t\t\t\t\tcase 'image':\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn fieldNode.value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'SELECT':\n\t\t\t\treturn getSelectedOptionValue(fieldNode);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction getSelectedOptionValue(selectNode)\n\t{\n\t\tvar multiple = selectNode.multiple,\n\t\t\tresult = [],\n\t\t\toptions,\n\t\t\ti, l;\n\n\t\tif (!multiple) return selectNode.value;\n\n\t\tfor (options = selectNode.getElementsByTagName(\"option\"), i = 0, l = options.length; i < l; i++)\n\t\t{\n\t\t\tif (options[i].selected) result.push(options[i].value);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\treturn form2js;\n\n}));\n},{}],5:[function(require,module,exports){\n// get successful control from form and assemble into object\n// http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2\n\n// types which indicate a submit action and are not successful controls\n// these will be ignored\nvar k_r_submitter = /^(?:submit|button|image|reset|file)$/i;\n\n// node names which could be successful controls\nvar k_r_success_contrls = /^(?:input|select|textarea|keygen)/i;\n\n// Matches bracket notation.\nvar brackets = /(\\[[^\\[\\]]*\\])/g;\n\n// serializes form fields\n// @param form MUST be an HTMLForm element\n// @param options is an optional argument to configure the serialization. Default output\n// with no options specified is a url encoded string\n// - hash: [true | false] Configure the output type. If true, the output will\n// be a js object.\n// - serializer: [function] Optional serializer function to override the default one.\n// The function takes 3 arguments (result, key, value) and should return new result\n// hash and url encoded str serializers are provided with this module\n// - disabled: [true | false]. If true serialize disabled fields.\n// - empty: [true | false]. If true serialize empty fields\nfunction serialize(form, options) {\n\tif (typeof options != 'object') {\n\t\toptions = { hash: !!options };\n\t}\n\telse if (options.hash === undefined) {\n\t\toptions.hash = true;\n\t}\n\n\tvar result = (options.hash) ? {} : '';\n\tvar serializer = options.serializer || ((options.hash) ? hash_serializer : str_serialize);\n\n\tvar elements = form && form.elements ? form.elements : [];\n\n\t//Object store each radio and set if it's empty or not\n\tvar radio_store = Object.create(null);\n\n\tfor (var i=0 ; i<elements.length ; ++i) {\n\t\tvar element = elements[i];\n\n\t\t// ingore disabled fields\n\t\tif ((!options.disabled && element.disabled) || !element.name) {\n\t\t\tcontinue;\n\t\t}\n\t\t// ignore anyhting that is not considered a success field\n\t\tif (!k_r_success_contrls.test(element.nodeName) ||\n\t\t\tk_r_submitter.test(element.type)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar key = element.name;\n\t\tvar val = element.value;\n\n\t\t// we can't just use element.value for checkboxes cause some browsers lie to us\n\t\t// they say \"on\" for value when the box isn't checked\n\t\tif ((element.type === 'checkbox' || element.type === 'radio') && !element.checked) {\n\t\t\tval = undefined;\n\t\t}\n\n\t\t// If we want empty elements\n\t\tif (options.empty) {\n\t\t\t// for checkbox\n\t\t\tif (element.type === 'checkbox' && !element.checked) {\n\t\t\t\tval = '';\n\t\t\t}\n\n\t\t\t// for radio\n\t\t\tif (element.type === 'radio') {\n\t\t\t\tif (!radio_store[element.name] && !element.checked) {\n\t\t\t\t\tradio_store[element.name] = false;\n\t\t\t\t}\n\t\t\t\telse if (element.checked) {\n\t\t\t\t\tradio_store[element.name] = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if options empty is true, continue only if its radio\n\t\t\tif (!val && element.type == 'radio') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// value-less fields are ignored unless options.empty is true\n\t\t\tif (!val) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// multi select boxes\n\t\tif (element.type === 'select-multiple') {\n\t\t\tval = [];\n\n\t\t\tvar selectOptions = element.options;\n\t\t\tvar isSelectedOptions = false;\n\t\t\tfor (var j=0 ; j<selectOptions.length ; ++j) {\n\t\t\t\tvar option = selectOptions[j];\n\t\t\t\tvar allowedEmpty = options.empty && !option.value;\n\t\t\t\tvar hasValue = (option.value || allowedEmpty);\n\t\t\t\tif (option.selected && hasValue) {\n\t\t\t\t\tisSelectedOptions = true;\n\n\t\t\t\t\t// If using a hash serializer be sure to add the\n\t\t\t\t\t// correct notation for an array in the multi-select\n\t\t\t\t\t// context. Here the name attribute on the select element\n\t\t\t\t\t// might be missing the trailing bracket pair. Both names\n\t\t\t\t\t// \"foo\" and \"foo[]\" should be arrays.\n\t\t\t\t\tif (options.hash && key.slice(key.length - 2) !== '[]') {\n\t\t\t\t\t\tresult = serializer(result, key + '[]', option.value);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresult = serializer(result, key, option.value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Serialize if no selected options and options.empty is true\n\t\t\tif (!isSelectedOptions && options.empty) {\n\t\t\t\tresult = serializer(result, key, '');\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult = serializer(result, key, val);\n\t}\n\n\t// Check for all empty radio buttons and serialize them with key=\"\"\n\tif (options.empty) {\n\t\tfor (var key in radio_store) {\n\t\t\tif (!radio_store[key]) {\n\t\t\t\tresult = serializer(result, key, '');\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction parse_keys(string) {\n\tvar keys = [];\n\tvar prefix = /^([^\\[\\]]*)/;\n\tvar children = new RegExp(brackets);\n\tvar match = prefix.exec(string);\n\n\tif (match[1]) {\n\t\tkeys.push(match[1]);\n\t}\n\n\twhile ((match = children.exec(string)) !== null) {\n\t\tkeys.push(match[1]);\n\t}\n\n\treturn keys;\n}\n\nfunction hash_assign(result, keys, value) {\n\tif (keys.length === 0) {\n\t\tresult = value;\n\t\treturn result;\n\t}\n\n\tvar key = keys.shift();\n\tvar between = key.match(/^\\[(.+?)\\]$/);\n\n\tif (key === '[]') {\n\t\tresult = result || [];\n\n\t\tif (Array.isArray(result)) {\n\t\t\tresult.push(hash_assign(null, keys, value));\n\t\t}\n\t\telse {\n\t\t\t// This might be the result of bad name attributes like \"[][foo]\",\n\t\t\t// in this case the original `result` object will already be\n\t\t\t// assigned to an object literal. Rather than coerce the object to\n\t\t\t// an array, or cause an exception the attribute \"_values\" is\n\t\t\t// assigned as an array.\n\t\t\tresult._values = result._values || [];\n\t\t\tresult._values.push(hash_assign(null, keys, value));\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// Key is an attribute name and can be assigned directly.\n\tif (!between) {\n\t\tresult[key] = hash_assign(result[key], keys, value);\n\t}\n\telse {\n\t\tvar string = between[1];\n\t\tvar index = parseInt(string, 10);\n\n\t\t// If the characters between the brackets is not a number it is an\n\t\t// attribute name and can be assigned directly.\n\t\tif (isNaN(index)) {\n\t\t\tresult = result || {};\n\t\t\tresult[string] = hash_assign(result[string], keys, value);\n\t\t}\n\t\telse {\n\t\t\tresult = result || [];\n\t\t\tresult[index] = hash_assign(result[index], keys, value);\n\t\t}\n\t}\n\n\treturn result;\n}\n\n// Object/hash encoding serializer.\nfunction hash_serializer(result, key, value) {\n\tvar matches = key.match(brackets);\n\n\t// Has brackets? Use the recursive assignment function to walk the keys,\n\t// construct any missing objects in the result tree and make the assignment\n\t// at the end of the chain.\n\tif (matches) {\n\t\tvar keys = parse_keys(key);\n\t\thash_assign(result, keys, value);\n\t}\n\telse {\n\t\t// Non bracket notation can make assignments directly.\n\t\tvar existing = result[key];\n\n\t\t// If the value has been assigned already (for instance when a radio and\n\t\t// a checkbox have the same name attribute) convert the previous value\n\t\t// into an array before pushing into it.\n\t\t//\n\t\t// NOTE: If this requirement were removed all hash creation and\n\t\t// assignment could go through `hash_assign`.\n\t\tif (existing) {\n\t\t\tif (!Array.isArray(existing)) {\n\t\t\t\tresult[key] = [ existing ];\n\t\t\t}\n\n\t\t\tresult[key].push(value);\n\t\t}\n\t\telse {\n\t\t\tresult[key] = value;\n\t\t}\n\t}\n\n\treturn result;\n}\n\n// urlform encoding serializer\nfunction str_serialize(result, key, value) {\n\t// encode newlines as \\r\\n cause the html spec says so\n\tvalue = value.replace(/(\\r)?\\n/g, '\\r\\n');\n\tvalue = encodeURIComponent(value);\n\n\t// spaces should be '+' rather than '%20'.\n\tvalue = value.replace(/%20/g, '+');\n\treturn result + (result ? '&' : '') + encodeURIComponent(key) + '=' + value;\n}\n\nmodule.exports = serialize;\n},{}],6:[function(require,module,exports){\n/**\n * Copyright 2014 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * GATOR.JS\n * Simple Event Delegation\n *\n * @version 1.2.4\n *\n * Compatible with IE 9+, FF 3.6+, Safari 5+, Chrome\n *\n * Include legacy.js for compatibility with older browsers\n *\n * .-._ _ _ _ _ _ _ _ _\n * .-''-.__.-'00 '-' ' ' ' ' ' ' ' '-.\n * '.___ ' . .--_'-' '-' '-' _'-' '._\n * V: V 'vv-' '_ '. .' _..' '.'.\n * '=.____.=_.--' :_.__.__:_ '. : :\n * (((____.-' '-. / : :\n * (((-'\\ .' /\n * _____..' .'\n * '-._____.-'\n */\n(function() {\n var _matcher,\n _level = 0,\n _id = 0,\n _handlers = {},\n _gatorInstances = {};\n\n function _addEvent(gator, type, callback) {\n\n // blur and focus do not bubble up but if you use event capturing\n // then you will get them\n var useCapture = type == 'blur' || type == 'focus';\n gator.element.addEventListener(type, callback, useCapture);\n }\n\n function _cancel(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n /**\n * returns function to use for determining if an element\n * matches a query selector\n *\n * @returns {Function}\n */\n function _getMatcher(element) {\n if (_matcher) {\n return _matcher;\n }\n\n if (element.matches) {\n _matcher = element.matches;\n return _matcher;\n }\n\n if (element.webkitMatchesSelector) {\n _matcher = element.webkitMatchesSelector;\n return _matcher;\n }\n\n if (element.mozMatchesSelector) {\n _matcher = element.mozMatchesSelector;\n return _matcher;\n }\n\n if (element.msMatchesSelector) {\n _matcher = element.msMatchesSelector;\n return _matcher;\n }\n\n if (element.oMatchesSelector) {\n _matcher = element.oMatchesSelector;\n return _matcher;\n }\n\n // if it doesn't match a native browser method\n // fall back to the gator function\n _matcher = Gator.matchesSelector;\n return _matcher;\n }\n\n /**\n * determines if the specified element matches a given selector\n *\n * @param {Node} element - the element to compare against the selector\n * @param {string} selector\n * @param {Node} boundElement - the element the listener was attached to\n * @returns {void|Node}\n */\n function _matchesSelector(element, selector, boundElement) {\n\n // no selector means this event was bound directly to this element\n if (selector == '_root') {\n return boundElement;\n }\n\n // if we have moved up to the element you bound the event to\n // then we have come too far\n if (element === boundElement) {\n return;\n }\n\n // if this is a match then we are done!\n if (_getMatcher(element).call(element, selector)) {\n return element;\n }\n\n // if this element did not match but has a parent we should try\n // going up the tree to see if any of the parent elements match\n // for example if you are looking for a click on an <a> tag but there\n // is a <span> inside of the a tag that it is the target,\n // it should still work\n if (element.parentNode) {\n _level++;\n return _matchesSelector(element.parentNode, selector, boundElement);\n }\n }\n\n function _addHandler(gator, event, selector, callback) {\n if (!_handlers[gator.id]) {\n _handlers[gator.id] = {};\n }\n\n if (!_handlers[gator.id][event]) {\n _handlers[gator.id][event] = {};\n }\n\n if (!_handlers[gator.id][event][selector]) {\n _handlers[gator.id][event][selector] = [];\n }\n\n _handlers[gator.id][event][selector].push(callback);\n }\n\n function _removeHandler(gator, event, selector, callback) {\n\n // if there are no events tied to this element at all\n // then don't do anything\n if (!_handlers[gator.id]) {\n return;\n }\n\n // if there is no event type specified then remove all events\n // example: Gator(element).off()\n if (!event) {\n for (var type in _handlers[gator.id]) {\n if (_handlers[gator.id].hasOwnProperty(type)) {\n _handlers[gator.id][type] = {};\n }\n }\n return;\n }\n\n // if no callback or selector is specified remove all events of this type\n // example: Gator(element).off('click')\n if (!callback && !selector) {\n _handlers[gator.id][event] = {};\n return;\n }\n\n // if a selector is specified but no callback remove all events\n // for this selector\n // example: Gator(element).off('click', '.sub-element')\n if (!callback) {\n delete _handlers[gator.id][event][selector];\n return;\n }\n\n // if we have specified an event type, selector, and callback then we\n // need to make sure there are callbacks tied to this selector to\n // begin with. if there aren't then we can stop here\n if (!_handlers[gator.id][event][selector]) {\n return;\n }\n\n // if there are then loop through all the callbacks and if we find\n // one that matches remove it from the array\n for (var i = 0; i < _handlers[gator.id][event][selector].length; i++) {\n if (_handlers[gator.id][event][selector][i] === callback) {\n _handlers[gator.id][event][selector].splice(i, 1);\n break;\n }\n }\n }\n\n function _handleEvent(id, e, type) {\n if (!_handlers[id][type]) {\n return;\n }\n\n var target = e.target || e.srcElement,\n selector,\n match,\n matches = {},\n i = 0,\n j = 0;\n\n // find all events that match\n _level = 0;\n for (selector in _handlers[id][type]) {\n if (_handlers[id][type].hasOwnProperty(selector)) {\n match = _matchesSelector(target, selector, _gatorInstances[id].element);\n\n if (match && Gator.matchesEvent(type, _gatorInstances[id].element, match, selector == '_root', e)) {\n _level++;\n _handlers[id][type][selector].match = match;\n matches[_level] = _handlers[id][type][selector];\n }\n }\n }\n\n // stopPropagation() fails to set cancelBubble to true in Webkit\n // @see http://code.google.com/p/chromium/issues/detail?id=162270\n e.stopPropagation = function() {\n e.cancelBubble = true;\n };\n\n for (i = 0; i <= _level; i++) {\n if (matches[i]) {\n for (j = 0; j < matches[i].length; j++) {\n if (matches[i][j].call(matches[i].match, e) === false) {\n Gator.cancel(e);\n return;\n }\n\n if (e.cancelBubble) {\n return;\n }\n }\n }\n }\n }\n\n /**\n * binds the specified events to the element\n *\n * @param {string|Array} events\n * @param {string} selector\n * @param {Function} callback\n * @param {boolean=} remove\n * @returns {Object}\n */\n function _bind(events, selector, callback, remove) {\n\n // fail silently if you pass null or undefined as an alement\n // in the Gator constructor\n if (!this.element) {\n return;\n }\n\n if (!(events instanceof Array)) {\n events = [events];\n }\n\n if (!callback && typeof(selector) == 'function') {\n callback = selector;\n selector = '_root';\n }\n\n var id = this.id,\n i;\n\n function _getGlobalCallback(type) {\n return function(e) {\n _handleEvent(id, e, type);\n };\n }\n\n for (i = 0; i < events.length; i++) {\n if (remove) {\n _removeHandler(this, events[i], selector, callback);\n continue;\n }\n\n if (!_handlers[id] || !_handlers[id][events[i]]) {\n Gator.addEvent(this, events[i], _getGlobalCallback(events[i]));\n }\n\n _addHandler(this, events[i], selector, callback);\n }\n\n return this;\n }\n\n /**\n * Gator object constructor\n *\n * @param {Node} element\n */\n function Gator(element, id) {\n\n // called as function\n if (!(this instanceof Gator)) {\n // only keep one Gator instance per node to make sure that\n // we don't create a ton of new objects if you want to delegate\n // multiple events from the same node\n //\n // for example: Gator(document).on(...\n for (var key in _gatorInstances) {\n if (_gatorInstances[key].element === element) {\n return _gatorInstances[key];\n }\n }\n\n _id++;\n _gatorInstances[_id] = new Gator(element, _id);\n\n return _gatorInstances[_id];\n }\n\n this.element = element;\n this.id = id;\n }\n\n /**\n * adds an event\n *\n * @param {string|Array} events\n * @param {string} selector\n * @param {Function} callback\n * @returns {Object}\n */\n Gator.prototype.on = function(events, selector, callback) {\n return _bind.call(this, events, selector, callback);\n };\n\n /**\n * removes an event\n *\n * @param {string|Array} events\n * @param {string} selector\n * @param {Function} callback\n * @returns {Object}\n */\n Gator.prototype.off = function(events, selector, callback) {\n return _bind.call(this, events, selector, callback, true);\n };\n\n Gator.matchesSelector = function() {};\n Gator.cancel = _cancel;\n Gator.addEvent = _addEvent;\n Gator.matchesEvent = function() {\n return true;\n };\n\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Gator;\n }\n\n window.Gator = Gator;\n}) ();\n\n},{}],7:[function(require,module,exports){\n/*! populate.js v1.0.2 by @dannyvankooten | MIT license */\n;(function(root) {\n\n\t/**\n\t * Populate form fields from a JSON object.\n\t *\n\t * @param form object The form element containing your input fields.\n\t * @param data array JSON data to populate the fields with.\n\t * @param basename string Optional basename which is added to `name` attributes\n\t */\n\tvar populate = function( form, data, basename) {\n\n\t\tfor(var key in data) {\n\n\t\t\tif( ! data.hasOwnProperty( key ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar name = key;\n\t\t\tvar value = data[key];\n\n\t\t\t// handle array name attributes\n\t\t\tif(typeof(basename) !== \"undefined\") {\n\t\t\t\tname = basename + \"[\" + key + \"]\";\n\t\t\t}\n\n\t\t\tif(value.constructor === Array) {\n\t\t\t\tname += '[]';\n\t\t\t} else if(typeof value == \"object\") {\n\t\t\t\tpopulate( form, value, name);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// only proceed if element is set\n\t\t\tvar element = form.elements.namedItem( name );\n\t\t\tif( ! element ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar type = element.type || element[0].type;\n\n\t\t\tswitch(type ) {\n\t\t\t\tdefault:\n\t\t\t\t\telement.value = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'radio':\n\t\t\t\tcase 'checkbox':\n\t\t\t\t\tfor( var j=0; j < element.length; j++ ) {\n\t\t\t\t\t\telement[j].checked = ( value.indexOf(element[j].value) > -1 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'select-multiple':\n\t\t\t\t\tvar values = value.constructor == Array ? value : [value];\n\n\t\t\t\t\tfor(var k = 0; k < element.options.length; k++) {\n\t\t\t\t\t\telement.options[k].selected |= (values.indexOf(element.options[k].value) > -1 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'select':\n\t\t\t\tcase 'select-one':\n\t\t\t\t\telement.value = value.toString() || value;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t// Play nice with AMD, CommonJS or a plain global object.\n\tif ( typeof define == 'function' && typeof define.amd == 'object' && define.amd ) {\n\t\tdefine(function() {\n\t\t\treturn populate;\n\t\t});\n\t}\telse if ( typeof module !== 'undefined' && module.exports ) {\n\t\tmodule.exports = populate;\n\t} else {\n\t\troot.populate = populate;\n\t}\n\n}(this));\n},{}],8:[function(require,module,exports){\n/*!\n * EventEmitter v4.2.11 - git.io/ee\n * Unlicense - http://unlicense.org/\n * Oliver Caldwell - http://oli.me.uk/\n * @preserve\n */\n\n;(function () {\n 'use strict';\n\n /**\n * Class for managing events.\n * Can be extended to provide event functionality in other classes.\n *\n * @class EventEmitter Manages event registering and emitting.\n */\n function EventEmitter() {}\n\n // Shortcuts to improve speed and size\n var proto = EventEmitter.prototype;\n var exports = this;\n var originalGlobalValue = exports.EventEmitter;\n\n /**\n * Finds the index of the listener for the event in its storage array.\n *\n * @param {Function[]} listeners Array of listeners to search through.\n * @param {Function} listener Method to look for.\n * @return {Number} Index of the specified listener, -1 if not found\n * @api private\n */\n function indexOfListener(listeners, listener) {\n var i = listeners.length;\n while (i--) {\n if (listeners[i].listener === listener) {\n return i;\n }\n }\n\n return -1;\n }\n\n /**\n * Alias a method while keeping the context correct, to allow for overwriting of target method.\n *\n * @param {String} name The name of the target method.\n * @return {Function} The aliased method\n * @api private\n */\n function alias(name) {\n return function aliasClosure() {\n return this[name].apply(this, arguments);\n };\n }\n\n /**\n * Returns the listener array for the specified event.\n * Will initialise the event object and listener arrays if required.\n * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.\n * Each property in the object response is an array of listener functions.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Function[]|Object} All listener functions for the event.\n */\n proto.getListeners = function getListeners(evt) {\n var events = this._getEvents();\n var response;\n var key;\n\n // Return a concatenated array of all matching events if\n // the selector is a regular expression.\n if (evt instanceof RegExp) {\n response = {};\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n response[key] = events[key];\n }\n }\n }\n else {\n response = events[evt] || (events[evt] = []);\n }\n\n return response;\n };\n\n /**\n * Takes a list of listener objects and flattens it into a list of listener functions.\n *\n * @param {Object[]} listeners Raw listener objects.\n * @return {Function[]} Just the listener functions.\n */\n proto.flattenListeners = function flattenListeners(listeners) {\n var flatListeners = [];\n var i;\n\n for (i = 0; i < listeners.length; i += 1) {\n flatListeners.push(listeners[i].listener);\n }\n\n return flatListeners;\n };\n\n /**\n * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Object} All listener functions for an event in an object.\n */\n proto.getListenersAsObject = function getListenersAsObject(evt) {\n var listeners = this.getListeners(evt);\n var response;\n\n if (listeners instanceof Array) {\n response = {};\n response[evt] = listeners;\n }\n\n return response || listeners;\n };\n\n /**\n * Adds a listener function to the specified event.\n * The listener will not be added if it is a duplicate.\n * If the listener returns true then it will be removed after it is called.\n * If you pass a regular expression as the event name then the listener will be added to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListener = function addListener(evt, listener) {\n var listeners = this.getListenersAsObject(evt);\n var listenerIsWrapped = typeof listener === 'object';\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {\n listeners[key].push(listenerIsWrapped ? listener : {\n listener: listener,\n once: false\n });\n }\n }\n\n return this;\n };\n\n /**\n * Alias of addListener\n */\n proto.on = alias('addListener');\n\n /**\n * Semi-alias of addListener. It will add a listener that will be\n * automatically removed after its first execution.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addOnceListener = function addOnceListener(evt, listener) {\n return this.addListener(evt, {\n listener: listener,\n once: true\n });\n };\n\n /**\n * Alias of addOnceListener.\n */\n proto.once = alias('addOnceListener');\n\n /**\n * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.\n * You need to tell it what event names should be matched by a regex.\n *\n * @param {String} evt Name of the event to create.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvent = function defineEvent(evt) {\n this.getListeners(evt);\n return this;\n };\n\n /**\n * Uses defineEvent to define multiple events.\n *\n * @param {String[]} evts An array of event names to define.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvents = function defineEvents(evts) {\n for (var i = 0; i < evts.length; i += 1) {\n this.defineEvent(evts[i]);\n }\n return this;\n };\n\n /**\n * Removes a listener function from the specified event.\n * When passed a regular expression as the event name, it will remove the listener from all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to remove the listener from.\n * @param {Function} listener Method to remove from the event.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListener = function removeListener(evt, listener) {\n var listeners = this.getListenersAsObject(evt);\n var index;\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key)) {\n index = indexOfListener(listeners[key], listener);\n\n if (index !== -1) {\n listeners[key].splice(index, 1);\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of removeListener\n */\n proto.off = alias('removeListener');\n\n /**\n * Adds listeners in bulk using the manipulateListeners method.\n * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.\n * You can also pass it a regular expression to add the array of listeners to all events that match it.\n * Yeah, this function does quite a bit. That's probably a bad thing.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListeners = function addListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(false, evt, listeners);\n };\n\n /**\n * Removes listeners in bulk using the manipulateListeners method.\n * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be removed.\n * You can also pass it a regular expression to remove the listeners from all events that match it.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListeners = function removeListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(true, evt, listeners);\n };\n\n /**\n * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.\n * The first argument will determine if the listeners are removed (true) or added (false).\n * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be added/removed.\n * You can also pass it a regular expression to manipulate the listeners of all events that match it.\n *\n * @param {Boolean} remove True if you want to remove listeners, false if you want to add.\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add/remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {\n var i;\n var value;\n var single = remove ? this.removeListener : this.addListener;\n var multiple = remove ? this.removeListeners : this.addListeners;\n\n // If evt is an object then pass each of its properties to this method\n if (typeof evt === 'object' && !(evt instanceof RegExp)) {\n for (i in evt) {\n if (evt.hasOwnProperty(i) && (value = evt[i])) {\n // Pass the single listener straight through to the singular method\n if (typeof value === 'function') {\n single.call(this, i, value);\n }\n else {\n // Otherwise pass back to the multiple function\n multiple.call(this, i, value);\n }\n }\n }\n }\n else {\n // So evt must be a string\n // And listeners must be an array of listeners\n // Loop over it and pass each one to the multiple method\n i = listeners.length;\n while (i--) {\n single.call(this, evt, listeners[i]);\n }\n }\n\n return this;\n };\n\n /**\n * Removes all listeners from a specified event.\n * If you do not specify an event then all listeners will be removed.\n * That means every event will be emptied.\n * You can also pass a regex to remove all events that match it.\n *\n * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeEvent = function removeEvent(evt) {\n var type = typeof evt;\n var events = this._getEvents();\n var key;\n\n // Remove different things depending on the state of evt\n if (type === 'string') {\n // Remove all listeners for the specified event\n delete events[evt];\n }\n else if (evt instanceof RegExp) {\n // Remove all events matching the regex.\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n delete events[key];\n }\n }\n }\n else {\n // Remove all listeners in all events\n delete this._events;\n }\n\n return this;\n };\n\n /**\n * Alias of removeEvent.\n *\n * Added to mirror the node API.\n */\n proto.removeAllListeners = alias('removeEvent');\n\n /**\n * Emits an event of your choice.\n * When emitted, every listener attached to that event will be executed.\n * If you pass the optional argument array then those arguments will be passed to every listener upon execution.\n * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.\n * So they will not arrive within the array on the other side, they will be separate.\n * You can also pass a regular expression to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {Array} [args] Optional array of arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emitEvent = function emitEvent(evt, args) {\n var listenersMap = this.getListenersAsObject(evt);\n var listeners;\n var listener;\n var i;\n var key;\n var response;\n\n for (key in listenersMap) {\n if (listenersMap.hasOwnProperty(key)) {\n listeners = listenersMap[key].slice(0);\n i = listeners.length;\n\n while (i--) {\n // If the listener returns true then it shall be removed from the event\n // The function is executed either with a basic call or an apply if there is an args array\n listener = listeners[i];\n\n if (listener.once === true) {\n this.removeListener(evt, listener.listener);\n }\n\n response = listener.listener.apply(this, args || []);\n\n if (response === this._getOnceReturnValue()) {\n this.removeListener(evt, listener.listener);\n }\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of emitEvent\n */\n proto.trigger = alias('emitEvent');\n\n /**\n * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.\n * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {...*} Optional additional arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emit = function emit(evt) {\n var args = Array.prototype.slice.call(arguments, 1);\n return this.emitEvent(evt, args);\n };\n\n /**\n * Sets the current value to check against when executing listeners. If a\n * listeners return value matches the one set here then it will be removed\n * after execution. This value defaults to true.\n *\n * @param {*} value The new value to check for when executing listeners.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.setOnceReturnValue = function setOnceReturnValue(value) {\n this._onceReturnValue = value;\n return this;\n };\n\n /**\n * Fetches the current value to check against when executing listeners. If\n * the listeners return value matches this one then it should be removed\n * automatically. It will return true by default.\n *\n * @return {*|Boolean} The current value to check for or the default, true.\n * @api private\n */\n proto._getOnceReturnValue = function _getOnceReturnValue() {\n if (this.hasOwnProperty('_onceReturnValue')) {\n return this._onceReturnValue;\n }\n else {\n return true;\n }\n };\n\n /**\n * Fetches the events object and creates one if required.\n *\n * @return {Object} The events storage object.\n * @api private\n */\n proto._getEvents = function _getEvents() {\n return this._events || (this._events = {});\n };\n\n /**\n * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version.\n *\n * @return {Function} Non conflicting EventEmitter class.\n */\n EventEmitter.noConflict = function noConflict() {\n exports.EventEmitter = originalGlobalValue;\n return EventEmitter;\n };\n\n // Expose the class either via AMD, CommonJS or the global object\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return EventEmitter;\n });\n }\n else if (typeof module === 'object' && module.exports){\n module.exports = EventEmitter;\n }\n else {\n exports.EventEmitter = EventEmitter;\n }\n}.call(this));\n\n},{}]},{},[1]);\n })();"],"sourceRoot":"/source/"}
|
1 |
+
{"version":3,"sources":["forms-api.js"],"names":["require","undefined","define","e","t","n","r","s","o","u","a","i","f","Error","code","l","exports","call","length",1,"module","triggerFormEvents","form","action","errors","data","forms","trigger","handleFormRequest","setData","config","auto_scroll","animate","arg","behavior","element","scrollIntoView","window","addEventListener","mc4wp","Gator","listeners","mc4wp_forms_config","on","event","callback","document","body","getByElement","target","srcElement","started","submitted_form","formConfig","getElementById","element_id","./forms/forms.js","gator",2,"serialize","populate","formToJson","Form","id","this","createElement","name","getAttribute","console","error","getData","getSerializedData","setResponse","msg","querySelector","innerHTML","reset","style","display","../third-party/form2js.js","../third-party/serialize.js","populate.js",3,"get","formId","formElement","createFromElement","parseInt","push","all","events","args","off","EventEmitter","./form.js","wolfy87-eventemitter",4,"root","factory","amd","form2js","rootNode","delimiter","skipEmpty","nodeCallback","useIdIfEmptyName","getDisabled","arguments","currNode","formValues","constructor","Array","NodeList","concat","getFormValues","processNameValues","nameValues","j","k","value","nameParts","currResult","arrNameFull","arrName","arrIdx","namePart","_nameParts","result","arrays","split","match","indexOf","substr","replace","test","extractNodeValues","getSubFormValues","currentNode","firstChild","nextSibling","node","disabled","callbackResult","fieldValue","fieldName","getFieldName","nodeName","getFieldValue","fieldNode","type","toLowerCase","checked","getSelectedOptionValue","selectNode","options","multiple","getElementsByTagName","selected",5,"hash","serializer","hash_serializer","str_serialize","elements","radio_store","Object","create","k_r_success_contrls","k_r_submitter","key","val","empty","selectOptions","isSelectedOptions","option","allowedEmpty","hasValue","slice","parse_keys","string","keys","prefix","children","RegExp","brackets","exec","hash_assign","shift","between","isArray","_values","index","isNaN","matches","existing","encodeURIComponent",6,"_addEvent","useCapture","_cancel","preventDefault","stopPropagation","_getMatcher","_matcher","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","matchesSelector","_matchesSelector","selector","boundElement","parentNode","_level","_addHandler","_handlers","_removeHandler","splice","hasOwnProperty","_handleEvent","_gatorInstances","matchesEvent","cancelBubble","cancel","_bind","remove","_getGlobalCallback","addEvent","_id","prototype",7,"basename","namedItem","values","toString",8,"indexOfListener","listener","alias","apply","proto","originalGlobalValue","getListeners","evt","response","_getEvents","flattenListeners","flatListeners","getListenersAsObject","addListener","listenerIsWrapped","once","addOnceListener","defineEvent","defineEvents","evts","removeListener","addListeners","manipulateListeners","removeListeners","single","removeEvent","_events","removeAllListeners","emitEvent","listenersMap","_getOnceReturnValue","emit","setOnceReturnValue","_onceReturnValue","noConflict"],"mappings":"CAAA,WAAe,GAAIA,GAAUC,OAAeC,EAASD,QAAW,QAAUE,GAAEC,EAAEC,EAAEC,GAAG,QAASC,GAAEC,EAAEC,GAAG,IAAIJ,EAAEG,GAAG,CAAC,IAAIJ,EAAEI,GAAG,CAAC,GAAIE,GAAkB,kBAATV,IAAqBA,CAAQ,KAAIS,GAAGC,EAAE,MAAOA,GAAEF,GAAE,EAAI,IAAGG,EAAE,MAAOA,GAAEH,GAAE,EAAI,IAAII,GAAE,GAAIC,OAAM,uBAAuBL,EAAE,IAAK,MAAMI,GAAEE,KAAK,mBAAmBF,EAAE,GAAIG,GAAEV,EAAEG,IAAIQ,WAAYZ,GAAEI,GAAG,GAAGS,KAAKF,EAAEC,QAAQ,SAASb,GAAG,GAAIE,GAAED,EAAEI,GAAG,GAAGL,EAAG,OAAOI,GAAEF,EAAEA,EAAEF,IAAIY,EAAEA,EAAEC,QAAQb,EAAEC,EAAEC,EAAEC,GAAG,MAAOD,GAAEG,GAAGQ,QAAkD,IAAI,GAA1CL,GAAkB,kBAATX,IAAqBA,EAAgBQ,EAAE,EAAEA,EAAEF,EAAEY,OAAOV,IAAID,EAAED,EAAEE,GAAI,OAAOD,KAAKY,GAAG,SAASnB,EAAQoB,EAAOJ,GACvhB,YAiBA,SAASK,GAAkBC,EAAMC,EAAQC,EAAQC,GAGhDC,EAAMC,QAAS,aAAcL,IAEzBE,EACHE,EAAMC,QAAQ,SAAUL,EAAME,KAG9BE,EAAMC,QAAQ,WAAYL,EAAMG,IAChCC,EAAMC,QAAQJ,EAAS,KAAMD,EAAMG,KAIrC,QAASG,GAAkBN,EAAMC,EAAQC,EAAQC,GAOhD,GAJID,GACHF,EAAKO,QAAQJ,GAGVK,EAAOC,YAAc,CACxB,GAAIC,GAAmC,aAAvBF,EAAOC,YACnBE,EAAMD,GAAYE,SAAU,WAAa,CAC7CZ,GAAKa,QAAQC,eAAeH,GAI7BI,OAAOC,iBAAiB,OAAQ,WAC/BjB,EAAkBC,EAAMC,EAAQC,EAAQC,KA5C1C,GAAIc,GAAQF,OAAOE,SAInB,IAAMF,OAAOC,iBAAb,CA6CA,IAAI,GAxCAE,GAAQxC,EAAQ,SAChB0B,EAAQ1B,EAAQ,oBAChByC,EAAYJ,OAAOE,OAASF,OAAOE,MAAME,UAAYJ,OAAOE,MAAME,aAClEX,EAASO,OAAOK,uBAqCZ/B,EAAE,EAAGA,EAAE8B,EAAUvB,OAAOP,IAC/Be,EAAMiB,GAAGF,EAAU9B,GAAGiC,MAAOH,EAAU9B,GAAGkC,SA0B3C,IAtBAL,EAAMM,SAASC,MAAMJ,GAAG,SAAU,cAAe,SAASC,GACzDA,EAAQA,GAASP,OAAOO,KACxB,IAAItB,GAAOI,EAAMsB,aAAaJ,EAAMK,QAAUL,EAAMM,WACpDxB,GAAMC,QAAQ,UAAWL,EAAMsB,MAGhCJ,EAAMM,SAASC,MAAMJ,GAAG,QAAS,cAAe,SAASC,GACxDA,EAAQA,GAASP,OAAOO,KACxB,IAAItB,GAAOI,EAAMsB,aAAaJ,EAAMK,QAAUL,EAAMM,WAE9C5B,GAAK6B,UACVzB,EAAMC,QAAQ,WAAYL,EAAMsB,IAChCtB,EAAK6B,SAAU,KAIjBX,EAAMM,SAASC,MAAMJ,GAAG,SAAU,cAAe,SAASC,GACzDA,EAAQA,GAASP,OAAOO,KACxB,IAAItB,GAAOI,EAAMsB,aAAaJ,EAAMK,QAAUL,EAAMM,WACpDxB,GAAMC,QAAQ,UAAWL,EAAKsB,MAG3Bd,EAAOsB,eAAiB,CAC3B,GAAIC,GAAavB,EAAOsB,eACvBjB,EAAUW,SAASQ,eAAeD,EAAWE,YAC7CjC,EAAOI,EAAMsB,aAAab,EAE3BP,GAAkBN,EAAM+B,EAAW9B,OAAQ8B,EAAW7B,OAAQ6B,EAAW5B,MAI1Ec,EAAMb,MAAQA,EACdW,OAAOE,MAAQA,KAEZiB,mBAAmB,EAAEC,MAAQ,IAAIC,GAAG,SAAS1D,EAAQoB,EAAOJ,GAC/D,YAEA,IAAI2C,GAAY3D,EAAQ,+BACpB4D,EAAW5D,EAAQ,eACnB6D,EAAa7D,EAAQ,6BAErB8D,EAAO,SAASC,EAAI5B,GAEvB,GAAIb,GAAO0C,IAEXA,MAAKD,GAAKA,EACVC,KAAK7B,QAAUA,GAAWW,SAASmB,cAAc,QACjDD,KAAKE,KAAOF,KAAK7B,QAAQgC,aAAa,cAAgB,SAAWH,KAAKD,GACtEC,KAAKxC,UACLwC,KAAKb,SAAU,EAEfa,KAAKnC,QAAU,SAASJ,GACvB,IACCmC,EAAStC,EAAKa,QAASV,GACtB,MAAMtB,GACPiE,QAAQC,MAAMlE,KAIhB6D,KAAKM,QAAU,WACd,MAAOT,GAAWvC,EAAKa,UAGxB6B,KAAKO,kBAAoB,WACxB,MAAOZ,GAAUrC,EAAKa,UAGvB6B,KAAKQ,YAAc,SAAUC,GAC5BnD,EAAKa,QAAQuC,cAAc,mBAAmBC,UAAYF,GAI3DT,KAAKY,MAAQ,WACZZ,KAAKQ,YAAY,IACjBlD,EAAKa,QAAQuC,cAAc,sBAAsBG,MAAMC,QAAU,GACjExD,EAAKa,QAAQyC,SAKfxD,GAAOJ,QAAU8C,IAEdiB,4BAA4B,EAAEC,8BAA8B,EAAEC,cAAc,IAAIC,GAAG,SAASlF,EAAQoB,EAAOJ,GAC9G,YAYA,SAASmE,GAAIC,GAGZ,IAAI,GAAIzE,GAAE,EAAGA,EAAEe,EAAMR,OAAOP,IAC3B,GAAGe,EAAMf,GAAGoD,IAAMqB,EACjB,MAAO1D,GAAMf,EAKf,IAAI0E,GAAcvC,SAAS4B,cAAc,eAAiBU,EAC1D,OAAOE,GAAkBD,EAAYD,GAItC,QAASpC,GAAab,GAGrB,IAAI,GAFAkD,GAAclD,EAAQb,MAAQa,EAE1BxB,EAAE,EAAGA,EAAIe,EAAMR,OAAQP,IAC9B,GAAGe,EAAMf,GAAGwB,SAAWkD,EACtB,MAAO3D,GAAMf,EAIf,OAAO2E,GAAkBD,GAI1B,QAASC,GAAkBD,EAAatB,GACvCA,EAAKA,GAAMwB,SAAUF,EAAYlB,aAAa,aAAgB,CAC9D,IAAI7C,GAAO,GAAIwC,GAAKC,EAAIsB,EAExB,OADA3D,GAAM8D,KAAKlE,GACJA,EAGR,QAASmE,KACR,MAAO/D,GAGR,QAASiB,GAAGC,EAAMC,GACjB,MAAO6C,GAAO/C,GAAGC,EAAMC,GAGxB,QAASlB,GAAQiB,EAAM+C,GACtB,MAAOD,GAAO/D,QAAQiB,EAAM+C,GAG7B,QAASC,GAAIhD,EAAMC,GAClB,MAAO6C,GAAOE,IAAIhD,EAAMC,GAzDzB,GAAIgD,GAAe7F,EAAQ,wBACvB8D,EAAO9D,EAAQ,aAGf0F,EAAS,GAAIG,GACbnE,IAuDJN,GAAOJ,SACNyE,IAAOA,EACPN,IAAOA,EACPnC,aAAgBA,EAChBL,GAAMA,EACNhB,QAAWA,EACXiE,IAAOA,KAILE,YAAY,EAAEC,uBAAuB,IAAIC,GAAG,SAAShG,EAAQoB,EAAOJ,IA4BtE,SAAUiF,EAAMC,GAEO,mBAAZlF,IAA6C,mBAAXI,IAA0BA,EAAOJ,QAE7EI,EAAOJ,QAAUkF,IAES,kBAAXhG,IAAyBA,EAAOiG,IAG/CjG,EAAOgG,GAKPD,EAAKG,QAAUF,KAEflC,KAAM,WAEP,YAYA,SAASoC,GAAQC,EAAUC,EAAWC,EAAWC,EAAcC,EAAkBC,GAEhFA,IAAcA,EACU,mBAAbH,IAAyC,MAAbA,IAAmBA,GAAY,GAC9C,mBAAbD,IAAyC,MAAbA,IAAmBA,EAAY,KAClEK,UAAUzF,OAAS,IAAGuF,GAAmB,GAE7CJ,EAA8B,gBAAZA,GAAuBvD,SAASQ,eAAe+C,GAAYA,CAE7E,IACCO,GADGC,KAEHlG,EAAI,CAGL,IAAI0F,EAASS,aAAeC,OAA6B,mBAAZC,WAA2BX,EAASS,aAAeE,SAE/F,KAAMJ,EAAWP,EAAS1F,MAEzBkG,EAAaA,EAAWI,OAAOC,EAAcN,EAAUJ,EAAcC,EAAkBC,QAKxFG,GAAaK,EAAcb,EAAUG,EAAcC,EAAkBC,EAGtE,OAAOS,GAAkBN,EAAYN,EAAWD,GASjD,QAASa,GAAkBC,EAAYb,EAAWD,GAEjD,GAEC3F,GAAG0G,EAAGC,EAAGvG,EACTwG,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA3D,EACA4D,EAXGC,KACHC,IAYD,KAAKrH,EAAI,EAAGA,EAAIyG,EAAWlG,OAAQP,IAIlC,GAFA4G,EAAQH,EAAWzG,GAAG4G,OAElBhB,GAAwB,KAAVgB,GAA0B,OAAVA,EAAlC,CAQA,IANArD,EAAOkD,EAAWzG,GAAGuD,KACrB4D,EAAa5D,EAAK+D,MAAM3B,GACxBkB,KACAC,EAAaM,EACbL,EAAc,GAEVL,EAAI,EAAGA,EAAIS,EAAW5G,OAAQmG,IAGjC,GADAQ,EAAWC,EAAWT,GAAGY,MAAM,MAC3BJ,EAAS3G,OAAS,EAErB,IAAIoG,EAAI,EAAGA,EAAIO,EAAS3G,OAAQoG,IAgB/B,GAdS,GAALA,EAEHO,EAASP,GAAKO,EAASP,GAAK,IAEpBA,GAAKO,EAAS3G,OAAS,EAE/B2G,EAASP,GAAK,IAAMO,EAASP,GAI7BO,EAASP,GAAK,IAAMO,EAASP,GAAK,IAGnCM,EAASC,EAASP,GAAGY,MAAM,sCAG1B,IAAInH,EAAI,EAAGA,EAAI6G,EAAO1G,OAAQH,IAEzB6G,EAAO7G,IAAIyG,EAAUhC,KAAKoC,EAAO7G,QAItCyG,GAAUhC,KAAKqC,EAASP,QAK1BE,GAAYA,EAAUP,OAAOY,EAG/B,KAAKR,EAAI,EAAGA,EAAIG,EAAUtG,OAAQmG,IAEjCQ,EAAWL,EAAUH,GAEjBQ,EAASM,QAAQ,MAAQ,IAAMd,GAAKG,EAAUtG,OAAS,GAE1DyG,EAAUE,EAASO,OAAO,EAAGP,EAASM,QAAQ,MAC9CT,GAAeC,EAEVF,EAAWE,KAAUF,EAAWE,OACrCF,EAAWE,GAASnC,KAAK+B,IAEjBM,EAASM,QAAQ,KAAO,IAEhCR,EAAUE,EAASO,OAAO,EAAGP,EAASM,QAAQ,MAC9CP,EAASC,EAASQ,QAAQ,0BAA2B,IAGrDX,GAAe,IAAMC,EAAU,IAAMC,EAShCI,EAAON,KAAcM,EAAON,OAClB,IAAXC,GAAkBF,EAAWE,KAAUF,EAAWE,OAElDN,GAAKG,EAAUtG,OAAS,EAEZ,IAAXyG,GAEHF,EAAWjC,KAAK+B,GAChBS,EAAON,GAAaE,GAAUH,EAAWA,EAAWvG,OAAS,KAI7DuG,EAAWE,GAASnC,KAAK+B,GACzBS,EAAON,GAAaE,GAAUH,EAAWE,GAASF,EAAWE,GAASzG,OAAS,IAK3E8G,EAAON,GAAaE,KAEpB,kBAAoBU,KAAKd,EAAUH,EAAE,IAAKI,EAAWE,GAASnC,SAC7DiC,EAAWE,GAASnC,SAEzBwC,EAAON,GAAaE,GAAUH,EAAWE,GAASF,EAAWE,GAASzG,OAAS,IAIjFuG,EAAaO,EAAON,GAAaE,KAIjCF,GAAeG,EAEXR,EAAIG,EAAUtG,OAAS,GAErBuG,EAAWI,KAAWJ,EAAWI,OACtCJ,EAAaA,EAAWI,IAIxBJ,EAAWI,GAAYN,GAM3B,MAAOQ,GAGR,QAASb,GAAcb,EAAUG,EAAcC,EAAkBC,GAEhE,GAAIqB,GAASQ,EAAkBlC,EAAUG,EAAcC,EAAkBC,EACzE,OAAOqB,GAAO7G,OAAS,EAAI6G,EAASS,EAAiBnC,EAAUG,EAAcC,EAAkBC,GAGhG,QAAS8B,GAAiBnC,EAAUG,EAAcC,EAAkBC,GAKnE,IAHA,GAAIqB,MACHU,EAAcpC,EAASqC,WAEjBD,GAENV,EAASA,EAAOd,OAAOsB,EAAkBE,EAAajC,EAAcC,EAAkBC,IACtF+B,EAAcA,EAAYE,WAG3B,OAAOZ,GAGR,QAASQ,GAAkBK,EAAMpC,EAAcC,EAAkBC,GAChE,GAAIkC,EAAKC,WAAanC,EAAa,QAEnC,IAAIoC,GAAgBC,EAAYhB,EAAQiB,EAAYC,EAAaL,EAAMnC,EAuBvE,OArBAqC,GAAiBtC,GAAgBA,EAAaoC,GAE1CE,GAAkBA,EAAe5E,KACpC6D,GAAUe,GAEW,IAAbE,GAAmBJ,EAAKM,SAAShB,MAAM,oBAC/Ca,EAAaI,EAAcP,EAAMlC,GAEhCqB,EADG,OAASgB,OAGC7E,KAAM8E,EAAWzB,MAAOwB,KAGjB,IAAbC,GAAmBJ,EAAKM,SAAShB,MAAM,YAC/Ca,EAAaI,EAAcP,EAAMlC,GACjCqB,IAAa7D,KAAM8E,EAAUX,QAAQ,QAAS,IAAKd,MAAOwB,KAG1DhB,EAASS,EAAiBI,EAAMpC,EAAcC,EAAkBC,GAG1DqB,EAGR,QAASkB,GAAaL,EAAMnC,GAE3B,MAAImC,GAAK1E,MAAqB,IAAb0E,EAAK1E,KAAmB0E,EAAK1E,KACrCuC,GAAoBmC,EAAK7E,IAAiB,IAAX6E,EAAK7E,GAAiB6E,EAAK7E,GACvD,GAIb,QAASoF,GAAcC,EAAW1C,GAEjC,GAAI0C,EAAUP,WAAanC,EAAa,MAAO,KAE/C,QAAQ0C,EAAUF,UACjB,IAAK,QACL,IAAK,WACJ,OAAQE,EAAUC,KAAKC,eACtB,IAAK,QACJ,GAAIF,EAAUG,SAA+B,UAApBH,EAAU7B,MAAmB,OAAO,CAC9D,KAAK,WACJ,GAAI6B,EAAUG,SAA+B,SAApBH,EAAU7B,MAAkB,OAAO,CAC5D,KAAK6B,EAAUG,SAA+B,SAApBH,EAAU7B,MAAkB,OAAO,CAC7D,IAAI6B,EAAUG,QAAS,MAAOH,GAAU7B,KACxC,MAED,KAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,QACJ,MAAO,EAGR,SACC,MAAO6B,GAAU7B,MAGnB,KAED,KAAK,SACJ,MAAOiC,GAAuBJ,GAOhC,MAAO,MAGR,QAASI,GAAuBC,GAE/B,GAECC,GACA/I,EAAGI,EAHA4I,EAAWF,EAAWE,SACzB5B,IAID,KAAK4B,EAAU,MAAOF,GAAWlC,KAEjC,KAAKmC,EAAUD,EAAWG,qBAAqB,UAAWjJ,EAAI,EAAGI,EAAI2I,EAAQxI,OAAYH,EAAJJ,EAAOA,IAEvF+I,EAAQ/I,GAAGkJ,UAAU9B,EAAOvC,KAAKkE,EAAQ/I,GAAG4G,MAGjD,OAAOQ,GAGR,MAAO3B,UAGF0D,GAAG,SAAS9J,EAAQoB,EAAOJ,GAyBjC,QAAS2C,GAAUrC,EAAMoI,GACF,gBAAXA,GACVA,GAAYK,OAAQL,GAEKzJ,SAAjByJ,EAAQK,OAChBL,EAAQK,MAAO,EAWhB,KAAK,GARDhC,GAAU2B,EAAY,QAAS,GAC/BM,EAAaN,EAAQM,aAAgBN,EAAY,KAAIO,EAAkBC,GAEvEC,EAAW7I,GAAQA,EAAK6I,SAAW7I,EAAK6I,YAGxCC,EAAcC,OAAOC,OAAO,MAEvB3J,EAAE,EAAIA,EAAEwJ,EAASjJ,SAAWP,EAAG,CACvC,GAAIwB,GAAUgI,EAASxJ,EAGvB,KAAM+I,EAAQb,WAAY1G,EAAQ0G,WAAc1G,EAAQ+B,MAInDqG,EAAoBjC,KAAKnG,EAAQ+G,YACrCsB,EAAclC,KAAKnG,EAAQkH,MAD5B,CAKA,GAAIoB,GAAMtI,EAAQ+B,KACdwG,EAAMvI,EAAQoF,KASlB,IALsB,aAAjBpF,EAAQkH,MAAwC,UAAjBlH,EAAQkH,MAAsBlH,EAAQoH,UACzEmB,EAAMzK,QAIHyJ,EAAQiB,OAiBX,GAfqB,aAAjBxI,EAAQkH,MAAwBlH,EAAQoH,UAC3CmB,EAAM,IAIc,UAAjBvI,EAAQkH,OACNe,EAAYjI,EAAQ+B,OAAU/B,EAAQoH,QAGlCpH,EAAQoH,UAChBa,EAAYjI,EAAQ+B,OAAQ,GAH5BkG,EAAYjI,EAAQ+B,OAAQ,IAQzBwG,GAAuB,SAAhBvI,EAAQkH,KACnB,aAKD,KAAKqB,EACJ,QAKF,IAAqB,oBAAjBvI,EAAQkH,KAkCZtB,EAASiC,EAAWjC,EAAQ0C,EAAKC,OAlCjC,CACCA,IAIA,KAAK,GAFDE,GAAgBzI,EAAQuH,QACxBmB,GAAoB,EACfxD,EAAE,EAAIA,EAAEuD,EAAc1J,SAAWmG,EAAG,CAC5C,GAAIyD,GAASF,EAAcvD,GACvB0D,EAAerB,EAAQiB,QAAUG,EAAOvD,MACxCyD,EAAYF,EAAOvD,OAASwD,CAC5BD,GAAOjB,UAAYmB,IACtBH,GAAoB,EAQnB9C,EADG2B,EAAQK,MAAsC,OAA9BU,EAAIQ,MAAMR,EAAIvJ,OAAS,GACjC8I,EAAWjC,EAAQ0C,EAAM,KAAMK,EAAOvD,OAGtCyC,EAAWjC,EAAQ0C,EAAKK,EAAOvD,SAMtCsD,GAAqBnB,EAAQiB,QACjC5C,EAASiC,EAAWjC,EAAQ0C,EAAK,OAUpC,GAAIf,EAAQiB,MACX,IAAK,GAAIF,KAAOL,GACVA,EAAYK,KAChB1C,EAASiC,EAAWjC,EAAQ0C,EAAK,IAKpC,OAAO1C,GAGR,QAASmD,GAAWC,GACnB,GAAIC,MACAC,EAAS,cACTC,EAAW,GAAIC,QAAOC,GACtBtD,EAAQmD,EAAOI,KAAKN,EAMxB,KAJIjD,EAAM,IACTkD,EAAK5F,KAAK0C,EAAM,IAG0B,QAAnCA,EAAQoD,EAASG,KAAKN,KAC7BC,EAAK5F,KAAK0C,EAAM,GAGjB,OAAOkD,GAGR,QAASM,GAAY3D,EAAQqD,EAAM7D,GAClC,GAAoB,IAAhB6D,EAAKlK,OAER,MADA6G,GAASR,CAIV,IAAIkD,GAAMW,EAAKO,QACXC,EAAUnB,EAAIvC,MAAM,cAExB,IAAY,OAARuC,EAgBH,MAfA1C,GAASA,MAELhB,MAAM8E,QAAQ9D,GACjBA,EAAOvC,KAAKkG,EAAY,KAAMN,EAAM7D,KAQpCQ,EAAO+D,QAAU/D,EAAO+D,YACxB/D,EAAO+D,QAAQtG,KAAKkG,EAAY,KAAMN,EAAM7D,KAGtCQ,CAIR,IAAK6D,EAGA,CACJ,GAAIT,GAASS,EAAQ,GACjBG,EAAQxG,SAAS4F,EAAQ,GAIzBa,OAAMD,IACThE,EAASA,MACTA,EAAOoD,GAAUO,EAAY3D,EAAOoD,GAASC,EAAM7D,KAGnDQ,EAASA,MACTA,EAAOgE,GAASL,EAAY3D,EAAOgE,GAAQX,EAAM7D,QAdlDQ,GAAO0C,GAAOiB,EAAY3D,EAAO0C,GAAMW,EAAM7D,EAkB9C,OAAOQ,GAIR,QAASkC,GAAgBlC,EAAQ0C,EAAKlD,GACrC,GAAI0E,GAAUxB,EAAIvC,MAAMsD,EAKxB,IAAIS,EAAS,CACZ,GAAIb,GAAOF,EAAWT,EACtBiB,GAAY3D,EAAQqD,EAAM7D,OAEtB,CAEJ,GAAI2E,GAAWnE,EAAO0C,EAQlByB,IACEnF,MAAM8E,QAAQK,KAClBnE,EAAO0C,IAASyB,IAGjBnE,EAAO0C,GAAKjF,KAAK+B,IAGjBQ,EAAO0C,GAAOlD,EAIhB,MAAOQ,GAIR,QAASmC,GAAcnC,EAAQ0C,EAAKlD,GAOnC,MALAA,GAAQA,EAAMc,QAAQ,WAAY,QAClCd,EAAQ4E,mBAAmB5E,GAG3BA,EAAQA,EAAMc,QAAQ,OAAQ,KACvBN,GAAUA,EAAS,IAAM,IAAMoE,mBAAmB1B,GAAO,IAAMlD,EAxPvE,GAAIiD,GAAgB,wCAGhBD,EAAsB,qCAGtBiB,EAAW,iBAqPfpK,GAAOJ,QAAU2C,OACXyI,GAAG,SAASpM,EAAQoB,EAAOJ,IAmCjC,WAOI,QAASqL,GAAU5I,EAAO4F,EAAMxG,GAI5B,GAAIyJ,GAAqB,QAARjD,GAA0B,SAARA,CACnC5F,GAAMtB,QAAQG,iBAAiB+G,EAAMxG,EAAUyJ,GAGnD,QAASC,GAAQpM,GACbA,EAAEqM,iBACFrM,EAAEsM,kBASN,QAASC,GAAYvK,GACjB,MAAIwK,GACOA,EAIPA,EADAxK,EAAQ8J,QACG9J,EAAQ8J,QAInB9J,EAAQyK,sBACGzK,EAAQyK,sBAInBzK,EAAQ0K,mBACG1K,EAAQ0K,mBAInB1K,EAAQ2K,kBACG3K,EAAQ2K,kBAInB3K,EAAQ4K,iBACG5K,EAAQ4K,iBAMZvK,EAAMwK,gBAYrB,QAASC,GAAiB9K,EAAS+K,EAAUC,GAGzC,GAAgB,SAAZD,EACA,MAAOC,EAKX,IAAIhL,IAAYgL,EAKhB,MAAIT,GAAYvK,GAASlB,KAAKkB,EAAS+K,GAC5B/K,EAQPA,EAAQiL,YACRC,IACOJ,EAAiB9K,EAAQiL,WAAYF,EAAUC,IAF1D,OAMJ,QAASG,GAAY7J,EAAOb,EAAOsK,EAAUrK,GACpC0K,EAAU9J,EAAMM,MACjBwJ,EAAU9J,EAAMM,QAGfwJ,EAAU9J,EAAMM,IAAInB,KACrB2K,EAAU9J,EAAMM,IAAInB,OAGnB2K,EAAU9J,EAAMM,IAAInB,GAAOsK,KAC5BK,EAAU9J,EAAMM,IAAInB,GAAOsK,OAG/BK,EAAU9J,EAAMM,IAAInB,GAAOsK,GAAU1H,KAAK3C,GAG9C,QAAS2K,GAAe/J,EAAOb,EAAOsK,EAAUrK,GAI5C,GAAK0K,EAAU9J,EAAMM,IAMrB,GAAKnB,EAAL,CAWA,IAAKC,IAAaqK,EAEd,YADAK,EAAU9J,EAAMM,IAAInB,MAOxB,KAAKC,EAED,kBADO0K,GAAU9J,EAAMM,IAAInB,GAAOsK,EAOtC,IAAKK,EAAU9J,EAAMM,IAAInB,GAAOsK,GAMhC,IAAK,GAAIvM,GAAI,EAAGA,EAAI4M,EAAU9J,EAAMM,IAAInB,GAAOsK,GAAUhM,OAAQP,IAC7D,GAAI4M,EAAU9J,EAAMM,IAAInB,GAAOsK,GAAUvM,KAAOkC,EAAU,CACtD0K,EAAU9J,EAAMM,IAAInB,GAAOsK,GAAUO,OAAO9M,EAAG,EAC/C,YAnCJ,KAAK,GAAI0I,KAAQkE,GAAU9J,EAAMM,IACzBwJ,EAAU9J,EAAMM,IAAI2J,eAAerE,KACnCkE,EAAU9J,EAAMM,IAAIsF,OAsCpC,QAASsE,GAAa5J,EAAI5D,EAAGkJ,GACzB,GAAKkE,EAAUxJ,GAAIsF,GAAnB,CAIA,GACI6D,GACAhF,EAFAjF,EAAS9C,EAAE8C,QAAU9C,EAAE+C,WAGvB+I,KACAtL,EAAI,EACJ0G,EAAI,CAGRgG,GAAS,CACT,KAAKH,IAAYK,GAAUxJ,GAAIsF,GACvBkE,EAAUxJ,GAAIsF,GAAMqE,eAAeR,KACnChF,EAAQ+E,EAAiBhK,EAAQiK,EAAUU,EAAgB7J,GAAI5B,SAE3D+F,GAAS1F,EAAMqL,aAAaxE,EAAMuE,EAAgB7J,GAAI5B,QAAS+F,EAAmB,SAAZgF,EAAqB/M,KAC3FkN,IACAE,EAAUxJ,GAAIsF,GAAM6D,GAAUhF,MAAQA,EACtC+D,EAAQoB,GAAUE,EAAUxJ,GAAIsF,GAAM6D,IAWlD,KAJA/M,EAAEsM,gBAAkB,WAChBtM,EAAE2N,cAAe,GAGhBnN,EAAI,EAAQ0M,GAAL1M,EAAaA,IACrB,GAAIsL,EAAQtL,GACR,IAAK0G,EAAI,EAAGA,EAAI4E,EAAQtL,GAAGO,OAAQmG,IAAK,CACpC,GAAI4E,EAAQtL,GAAG0G,GAAGpG,KAAKgL,EAAQtL,GAAGuH,MAAO/H,MAAO,EAE5C,WADAqC,GAAMuL,OAAO5N,EAIjB,IAAIA,EAAE2N,aACF,SAgBpB,QAASE,GAAMtI,EAAQwH,EAAUrK,EAAUoL,GAoBvC,QAASC,GAAmB7E,GACxB,MAAO,UAASlJ,GACZwN,EAAa5J,EAAI5D,EAAGkJ,IAlB5B,GAAKrF,KAAK7B,QAAV,CAIMuD,YAAkBqB,SACpBrB,GAAUA,IAGT7C,GAAgC,kBAAd,KACnBA,EAAWqK,EACXA,EAAW,QAGf,IACIvM,GADAoD,EAAKC,KAAKD,EASd,KAAKpD,EAAI,EAAGA,EAAI+E,EAAOxE,OAAQP,IACvBsN,EACAT,EAAexJ,KAAM0B,EAAO/E,GAAIuM,EAAUrK,IAIzC0K,EAAUxJ,IAAQwJ,EAAUxJ,GAAI2B,EAAO/E,KACxC6B,EAAM2L,SAASnK,KAAM0B,EAAO/E,GAAIuN,EAAmBxI,EAAO/E,KAG9D2M,EAAYtJ,KAAM0B,EAAO/E,GAAIuM,EAAUrK,GAG3C,OAAOmB,OAQX,QAASxB,GAAML,EAAS4B,GAGpB,KAAMC,eAAgBxB,IAAQ,CAM1B,IAAK,GAAIiI,KAAOmD,GACZ,GAAIA,EAAgBnD,GAAKtI,UAAYA,EACjC,MAAOyL,GAAgBnD,EAO/B,OAHA2D,KACAR,EAAgBQ,GAAO,GAAI5L,GAAML,EAASiM,GAEnCR,EAAgBQ,GAG3BpK,KAAK7B,QAAUA,EACf6B,KAAKD,GAAKA,EAnSd,GAAI4I,GACAU,EAAS,EACTe,EAAM,EACNb,KACAK,IA0SJpL,GAAM6L,UAAU1L,GAAK,SAAS+C,EAAQwH,EAAUrK,GAC5C,MAAOmL,GAAM/M,KAAK+C,KAAM0B,EAAQwH,EAAUrK,IAW9CL,EAAM6L,UAAUzI,IAAM,SAASF,EAAQwH,EAAUrK,GAC7C,MAAOmL,GAAM/M,KAAK+C,KAAM0B,EAAQwH,EAAUrK,GAAU,IAGxDL,EAAMwK,gBAAkB,aACxBxK,EAAMuL,OAASxB,EACf/J,EAAM2L,SAAW9B,EACjB7J,EAAMqL,aAAe,WACjB,OAAO,GAGW,mBAAXzM,IAA0BA,EAAOJ,UACxCI,EAAOJ,QAAUwB,GAGrBH,OAAOG,MAAQA,UAGb8L,GAAG,SAAStO,EAAQoB,EAAOJ,IAE/B,SAASiF,GASV,GAAIrC,GAAW,SAAUtC,EAAMG,EAAM8M,GAEpC,IAAI,GAAI9D,KAAOhJ,GAEd,GAAMA,EAAKiM,eAAgBjD,GAA3B,CAIA,GAAIvG,GAAOuG,EACPlD,EAAQ9F,EAAKgJ,EAOjB,IAJwB,mBAAf,KACRvG,EAAOqK,EAAW,IAAM9D,EAAM,KAG5BlD,EAAMT,cAAgBC,MACxB7C,GAAQ,SACF,IAAmB,gBAATqD,GAAmB,CACnC3D,EAAUtC,EAAMiG,EAAOrD,EACvB,UAID,GAAI/B,GAAUb,EAAK6I,SAASqE,UAAWtK,EACvC,IAAM/B,EAAN,CAIA,GAAIkH,GAAOlH,EAAQkH,MAAQlH,EAAQ,GAAGkH,IAEtC,QAAOA,GACN,QACClH,EAAQoF,MAAQA,CAChB,MAED,KAAK,QACL,IAAK,WACJ,IAAK,GAAIF,GAAE,EAAGA,EAAIlF,EAAQjB,OAAQmG,IACjClF,EAAQkF,GAAGkC,QAAYhC,EAAMY,QAAQhG,EAAQkF,GAAGE,OAAS,EAE1D,MAED,KAAK,kBAGJ,IAAI,GAFAkH,GAASlH,EAAMT,aAAeC,MAAQQ,GAASA,GAE3CD,EAAI,EAAGA,EAAInF,EAAQuH,QAAQxI,OAAQoG,IAC1CnF,EAAQuH,QAAQpC,GAAGuC,UAAa4E,EAAOtG,QAAQhG,EAAQuH,QAAQpC,GAAGC,OAAS,EAE5E,MAED,KAAK,SACL,IAAK,aACJpF,EAAQoF,MAAQA,EAAMmH,YAAcnH,KAUlB,mBAAVrH,IAA6C,gBAAdA,GAAOiG,KAAmBjG,EAAOiG,IAC3EjG,EAAO,WACN,MAAO0D,KAEqB,mBAAXxC,IAA0BA,EAAOJ,QACnDI,EAAOJ,QAAU4C,EAEjBqC,EAAKrC,SAAWA,GAGhBI,WACI2K,GAAG,SAAS3O,EAAQoB,EAAOJ,IAQ/B,WACE,YAQA,SAAS6E,MAeT,QAAS+I,GAAgBnM,EAAWoM,GAEhC,IADA,GAAIlO,GAAI8B,EAAUvB,OACXP,KACH,GAAI8B,EAAU9B,GAAGkO,WAAaA,EAC1B,MAAOlO,EAIf,OAAO,GAUX,QAASmO,GAAM5K,GACX,MAAO,YACH,MAAOF,MAAKE,GAAM6K,MAAM/K,KAAM2C,YAhCtC,GAAIqI,GAAQnJ,EAAawI,UACrBrN,EAAUgD,KACViL,EAAsBjO,EAAQ6E,YA2ClCmJ,GAAME,aAAe,SAAsBC,GACvC,GACIC,GACA3E,EAFA/E,EAAS1B,KAAKqL,YAMlB,IAAIF,YAAe5D,QAAQ,CACvB6D,IACA,KAAK3E,IAAO/E,GACJA,EAAOgI,eAAejD,IAAQ0E,EAAI7G,KAAKmC,KACvC2E,EAAS3E,GAAO/E,EAAO+E,QAK/B2E,GAAW1J,EAAOyJ,KAASzJ,EAAOyJ,MAGtC,OAAOC,IASXJ,EAAMM,iBAAmB,SAA0B7M,GAC/C,GACI9B,GADA4O,IAGJ,KAAK5O,EAAI,EAAGA,EAAI8B,EAAUvB,OAAQP,GAAK,EACnC4O,EAAc/J,KAAK/C,EAAU9B,GAAGkO,SAGpC,OAAOU,IASXP,EAAMQ,qBAAuB,SAA8BL,GACvD,GACIC,GADA3M,EAAYuB,KAAKkL,aAAaC,EAQlC,OALI1M,aAAqBsE,SACrBqI,KACAA,EAASD,GAAO1M,GAGb2M,GAAY3M,GAavBuM,EAAMS,YAAc,SAAqBN,EAAKN,GAC1C,GAEIpE,GAFAhI,EAAYuB,KAAKwL,qBAAqBL,GACtCO,EAAwC,gBAAbb,EAG/B,KAAKpE,IAAOhI,GACJA,EAAUiL,eAAejD,IAAsD,KAA9CmE,EAAgBnM,EAAUgI,GAAMoE,IACjEpM,EAAUgI,GAAKjF,KAAKkK,EAAoBb,GACpCA,SAAUA,EACVc,MAAM,GAKlB,OAAO3L,OAMXgL,EAAMrM,GAAKmM,EAAM,eAUjBE,EAAMY,gBAAkB,SAAyBT,EAAKN,GAClD,MAAO7K,MAAKyL,YAAYN,GACpBN,SAAUA,EACVc,MAAM,KAOdX,EAAMW,KAAOb,EAAM,mBASnBE,EAAMa,YAAc,SAAqBV,GAErC,MADAnL,MAAKkL,aAAaC,GACXnL,MASXgL,EAAMc,aAAe,SAAsBC,GACvC,IAAK,GAAIpP,GAAI,EAAGA,EAAIoP,EAAK7O,OAAQP,GAAK,EAClCqD,KAAK6L,YAAYE,EAAKpP,GAE1B,OAAOqD,OAWXgL,EAAMgB,eAAiB,SAAwBb,EAAKN,GAChD,GACI9C,GACAtB,EAFAhI,EAAYuB,KAAKwL,qBAAqBL,EAI1C,KAAK1E,IAAOhI,GACJA,EAAUiL,eAAejD,KACzBsB,EAAQ6C,EAAgBnM,EAAUgI,GAAMoE,GAE1B,KAAV9C,GACAtJ,EAAUgI,GAAKgD,OAAO1B,EAAO,GAKzC,OAAO/H,OAMXgL,EAAMpJ,IAAMkJ,EAAM,kBAYlBE,EAAMiB,aAAe,SAAsBd,EAAK1M,GAE5C,MAAOuB,MAAKkM,qBAAoB,EAAOf,EAAK1M,IAahDuM,EAAMmB,gBAAkB,SAAyBhB,EAAK1M,GAElD,MAAOuB,MAAKkM,qBAAoB,EAAMf,EAAK1M,IAe/CuM,EAAMkB,oBAAsB,SAA6BjC,EAAQkB,EAAK1M,GAClE,GAAI9B,GACA4G,EACA6I,EAASnC,EAASjK,KAAKgM,eAAiBhM,KAAKyL,YAC7C9F,EAAWsE,EAASjK,KAAKmM,gBAAkBnM,KAAKiM,YAGpD,IAAmB,gBAARd,IAAsBA,YAAe5D,QAmB5C,IADA5K,EAAI8B,EAAUvB,OACPP,KACHyP,EAAOnP,KAAK+C,KAAMmL,EAAK1M,EAAU9B,QAnBrC,KAAKA,IAAKwO,GACFA,EAAIzB,eAAe/M,KAAO4G,EAAQ4H,EAAIxO,MAEjB,kBAAV4G,GACP6I,EAAOnP,KAAK+C,KAAMrD,EAAG4G,GAIrBoC,EAAS1I,KAAK+C,KAAMrD,EAAG4G,GAevC,OAAOvD,OAYXgL,EAAMqB,YAAc,SAAqBlB,GACrC,GAEI1E,GAFApB,QAAc8F,GACdzJ,EAAS1B,KAAKqL,YAIlB,IAAa,WAAThG,QAEO3D,GAAOyJ,OAEb,IAAIA,YAAe5D,QAEpB,IAAKd,IAAO/E,GACJA,EAAOgI,eAAejD,IAAQ0E,EAAI7G,KAAKmC,UAChC/E,GAAO+E,cAMfzG,MAAKsM,OAGhB,OAAOtM,OAQXgL,EAAMuB,mBAAqBzB,EAAM,eAcjCE,EAAMwB,UAAY,SAAmBrB,EAAKxJ,GACtC,GACIlD,GACAoM,EACAlO,EACA8J,EACA2E,EALAqB,EAAezM,KAAKwL,qBAAqBL,EAO7C,KAAK1E,IAAOgG,GACR,GAAIA,EAAa/C,eAAejD,GAI5B,IAHAhI,EAAYgO,EAAahG,GAAKQ,MAAM,GACpCtK,EAAI8B,EAAUvB,OAEPP,KAGHkO,EAAWpM,EAAU9B,GAEjBkO,EAASc,QAAS,GAClB3L,KAAKgM,eAAeb,EAAKN,EAASA,UAGtCO,EAAWP,EAASA,SAASE,MAAM/K,KAAM2B,OAErCyJ,IAAapL,KAAK0M,uBAClB1M,KAAKgM,eAAeb,EAAKN,EAASA,SAMlD,OAAO7K,OAMXgL,EAAMrN,QAAUmN,EAAM,aAUtBE,EAAM2B,KAAO,SAAcxB,GACvB,GAAIxJ,GAAOoB,MAAMsH,UAAUpD,MAAMhK,KAAK0F,UAAW,EACjD,OAAO3C,MAAKwM,UAAUrB,EAAKxJ,IAW/BqJ,EAAM4B,mBAAqB,SAA4BrJ,GAEnD,MADAvD,MAAK6M,iBAAmBtJ,EACjBvD,MAWXgL,EAAM0B,oBAAsB,WACxB,MAAI1M,MAAK0J,eAAe,oBACb1J,KAAK6M,kBAGL,GAUf7B,EAAMK,WAAa,WACf,MAAOrL,MAAKsM,UAAYtM,KAAKsM,aAQjCzK,EAAaiL,WAAa,WAEtB,MADA9P,GAAQ6E,aAAeoJ,EAChBpJ,GAIW,kBAAX3F,IAAyBA,EAAOiG,IACvCjG,EAAO,WACH,MAAO2F,KAGY,gBAAXzE,IAAuBA,EAAOJ,QAC1CI,EAAOJ,QAAU6E,EAGjB7E,EAAQ6E,aAAeA,IAE7B5E,KAAK+C,gBAEI","file":"forms-api.min.js","sourcesContent":["(function () { var require = undefined; var define = undefined; (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n'use strict';\n\nvar mc4wp = window.mc4wp || {};\n\n// bail early if we're on IE8..\n// TODO: just don't load in IE8\nif( ! window.addEventListener ) {\n\treturn;\n}\n\n// deps & vars\nvar Gator = require('gator');\nvar forms = require('./forms/forms.js');\nvar listeners = window.mc4wp && window.mc4wp.listeners ? window.mc4wp.listeners : [];\nvar config = window.mc4wp_forms_config || {};\n\n// funcs\nfunction triggerFormEvents(form, action, errors, data) {\n\n\t// trigger events\n\tforms.trigger( 'submitted', [form]);\n\n\tif( errors ) {\n\t\tforms.trigger('error', [form, errors]);\n\t} else {\n\t\t// form was successfully submitted\n\t\tforms.trigger('success', [form, data]);\n\t\tforms.trigger(action + \"d\", [form, data]);\n\t}\n}\n\nfunction handleFormRequest(form, action, errors, data){\n\n\t// re-populate form\n\tif( errors ) {\n\t\tform.setData(data);\n\t}\n\n\tif( config.auto_scroll ) {\n\t\tvar animate = ( config.auto_scroll === 'animated' );\n\t\tvar arg = animate ? { behavior: 'smooth' } : false;\n\t\tform.element.scrollIntoView(arg);\n\t}\n\n\t// trigger events on window.load so all other scripts have loaded\n\twindow.addEventListener('load', function(){\n\t\ttriggerFormEvents(form, action, errors, data);\n\t});\n}\n\n// register early listeners\nfor(var i=0; i<listeners.length;i++) {\n\tforms.on(listeners[i].event, listeners[i].callback);\n}\n\n// Bind browser events to form events (using delegation to work with AJAX loaded forms as well)\nGator(document.body).on('submit', '.mc4wp-form', function(event) {\n\tevent = event || window.event;\n\tvar form = forms.getByElement(event.target || event.srcElement);\n\tforms.trigger('submit', [form, event]);\n});\n\nGator(document.body).on('focus', '.mc4wp-form', function(event) {\n\tevent = event || window.event;\n\tvar form = forms.getByElement(event.target || event.srcElement);\n\n\tif( ! form.started ) {\n\t\tforms.trigger('started', [form, event]);\n\t\tform.started = true;\n\t}\n});\n\nGator(document.body).on('change', '.mc4wp-form', function(event) {\n\tevent = event || window.event;\n\tvar form = forms.getByElement(event.target || event.srcElement);\n\tforms.trigger('change', [form,event]);\n});\n\nif( config.submitted_form ) {\n\tvar formConfig = config.submitted_form,\n\t\telement = document.getElementById(formConfig.element_id),\n\t\tform = forms.getByElement(element);\n\n\thandleFormRequest(form, formConfig.action, formConfig.errors, formConfig.data);\n}\n\n// expose forms object\nmc4wp.forms = forms;\nwindow.mc4wp = mc4wp;\n\n},{\"./forms/forms.js\":3,\"gator\":6}],2:[function(require,module,exports){\n'use strict';\n\nvar serialize = require('../third-party/serialize.js');\nvar populate = require('populate.js');\nvar formToJson = require('../third-party/form2js.js');\n\nvar Form = function(id, element) {\n\n\tvar form = this;\n\n\tthis.id = id;\n\tthis.element = element || document.createElement('form');\n\tthis.name = this.element.getAttribute('data-name') || \"Form #\" + this.id;\n\tthis.errors = [];\n\tthis.started = false;\n\n\tthis.setData = function(data) {\n\t\ttry {\n\t\t\tpopulate(form.element, data);\n\t\t} catch(e) {\n\t\t\tconsole.error(e);\n\t\t}\n\t};\n\n\tthis.getData = function() {\n\t\treturn formToJson(form.element);\n\t};\n\n\tthis.getSerializedData = function() {\n\t\treturn serialize(form.element);\n\t};\n\n\tthis.setResponse = function( msg ) {\n\t\tform.element.querySelector('.mc4wp-response').innerHTML = msg;\n\t};\n\n\t// revert back to original state\n\tthis.reset = function() {\n\t\tthis.setResponse('');\n\t\tform.element.querySelector('.mc4wp-form-fields').style.display = '';\n\t\tform.element.reset();\n\t}\n\n};\n\nmodule.exports = Form;\n\n},{\"../third-party/form2js.js\":4,\"../third-party/serialize.js\":5,\"populate.js\":7}],3:[function(require,module,exports){\n'use strict';\n\n// deps\nvar EventEmitter = require('wolfy87-eventemitter');\nvar Form = require('./form.js');\n\n// variables\nvar events = new EventEmitter();\nvar forms = [];\n\n// get form by its id\n// please note that this will get the FIRST occurence of the form with that ID on the page\nfunction get(formId) {\n\n\t// do we have form for this one already?\n\tfor(var i=0; i<forms.length;i++) {\n\t\tif(forms[i].id == formId) {\n\t\t\treturn forms[i];\n\t\t}\n\t}\n\n\t// try to create from first occurence of this element\n\tvar formElement = document.querySelector('.mc4wp-form-' + formId);\n\treturn createFromElement(formElement,formId);\n}\n\n// get form by <form> element (or any input in form)\nfunction getByElement(element) {\n\tvar formElement = element.form || element;\n\n\tfor(var i=0; i < forms.length; i++) {\n\t\tif(forms[i].element == formElement) {\n\t\t\treturn forms[i];\n\t\t}\n\t}\n\n\treturn createFromElement(formElement);\n}\n\n// create form object from <form> element\nfunction createFromElement(formElement, id) {\n\tid = id || parseInt( formElement.getAttribute('data-id') ) || 0;\n\tvar form = new Form(id, formElement);\n\tforms.push(form);\n\treturn form;\n}\n\nfunction all() {\n\treturn forms;\n}\n\nfunction on(event,callback) {\n\treturn events.on(event,callback);\n}\n\nfunction trigger(event,args) {\n\treturn events.trigger(event,args);\n}\n\nfunction off(event,callback) {\n\treturn events.off(event,callback);\n}\n\nmodule.exports = {\n\t\"all\": all,\n\t\"get\": get,\n\t\"getByElement\": getByElement,\n\t\"on\": on,\n\t\"trigger\": trigger,\n\t\"off\": off\n};\n\n\n},{\"./form.js\":2,\"wolfy87-eventemitter\":8}],4:[function(require,module,exports){\n/**\n * Copyright (c) 2010 Maxim Vasiliev\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n * @author Maxim Vasiliev\n * Date: 09.09.2010\n * Time: 19:02:33\n */\n\n\n(function (root, factory)\n{\n\tif (typeof exports !== 'undefined' && typeof module !== 'undefined' && module.exports) {\n\t\t// NodeJS\n\t\tmodule.exports = factory();\n\t}\n\telse if (typeof define === 'function' && define.amd)\n\t{\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(factory);\n\t}\n\telse\n\t{\n\t\t// Browser globals\n\t\troot.form2js = factory();\n\t}\n}(this, function ()\n{\n\t\"use strict\";\n\n\t/**\n\t * Returns form values represented as Javascript object\n\t * \"name\" attribute defines structure of resulting object\n\t *\n\t * @param rootNode {Element|String} root form element (or it's id) or array of root elements\n\t * @param delimiter {String} structure parts delimiter defaults to '.'\n\t * @param skipEmpty {Boolean} should skip empty text values, defaults to true\n\t * @param nodeCallback {Function} custom function to get node value\n\t * @param useIdIfEmptyName {Boolean} if true value of id attribute of field will be used if name of field is empty\n\t */\n\tfunction form2js(rootNode, delimiter, skipEmpty, nodeCallback, useIdIfEmptyName, getDisabled)\n\t{\n\t\tgetDisabled = getDisabled ? true : false;\n\t\tif (typeof skipEmpty == 'undefined' || skipEmpty == null) skipEmpty = true;\n\t\tif (typeof delimiter == 'undefined' || delimiter == null) delimiter = '.';\n\t\tif (arguments.length < 5) useIdIfEmptyName = false;\n\n\t\trootNode = typeof rootNode == 'string' ? document.getElementById(rootNode) : rootNode;\n\n\t\tvar formValues = [],\n\t\t\tcurrNode,\n\t\t\ti = 0;\n\n\t\t/* If rootNode is array - combine values */\n\t\tif (rootNode.constructor == Array || (typeof NodeList != \"undefined\" && rootNode.constructor == NodeList))\n\t\t{\n\t\t\twhile(currNode = rootNode[i++])\n\t\t\t{\n\t\t\t\tformValues = formValues.concat(getFormValues(currNode, nodeCallback, useIdIfEmptyName, getDisabled));\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tformValues = getFormValues(rootNode, nodeCallback, useIdIfEmptyName, getDisabled);\n\t\t}\n\n\t\treturn processNameValues(formValues, skipEmpty, delimiter);\n\t}\n\n\t/**\n\t * Processes collection of { name: 'name', value: 'value' } objects.\n\t * @param nameValues\n\t * @param skipEmpty if true skips elements with value == '' or value == null\n\t * @param delimiter\n\t */\n\tfunction processNameValues(nameValues, skipEmpty, delimiter)\n\t{\n\t\tvar result = {},\n\t\t\tarrays = {},\n\t\t\ti, j, k, l,\n\t\t\tvalue,\n\t\t\tnameParts,\n\t\t\tcurrResult,\n\t\t\tarrNameFull,\n\t\t\tarrName,\n\t\t\tarrIdx,\n\t\t\tnamePart,\n\t\t\tname,\n\t\t\t_nameParts;\n\n\t\tfor (i = 0; i < nameValues.length; i++)\n\t\t{\n\t\t\tvalue = nameValues[i].value;\n\n\t\t\tif (skipEmpty && (value === '' || value === null)) continue;\n\n\t\t\tname = nameValues[i].name;\n\t\t\t_nameParts = name.split(delimiter);\n\t\t\tnameParts = [];\n\t\t\tcurrResult = result;\n\t\t\tarrNameFull = '';\n\n\t\t\tfor(j = 0; j < _nameParts.length; j++)\n\t\t\t{\n\t\t\t\tnamePart = _nameParts[j].split('][');\n\t\t\t\tif (namePart.length > 1)\n\t\t\t\t{\n\t\t\t\t\tfor(k = 0; k < namePart.length; k++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (k == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnamePart[k] = namePart[k] + ']';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k == namePart.length - 1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnamePart[k] = '[' + namePart[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnamePart[k] = '[' + namePart[k] + ']';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarrIdx = namePart[k].match(/([a-z_]+)?\\[([a-z_][a-z0-9_]+?)\\]/i);\n\t\t\t\t\t\tif (arrIdx)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfor(l = 1; l < arrIdx.length; l++)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (arrIdx[l]) nameParts.push(arrIdx[l]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\tnameParts.push(namePart[k]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tnameParts = nameParts.concat(namePart);\n\t\t\t}\n\n\t\t\tfor (j = 0; j < nameParts.length; j++)\n\t\t\t{\n\t\t\t\tnamePart = nameParts[j];\n\n\t\t\t\tif (namePart.indexOf('[]') > -1 && j == nameParts.length - 1)\n\t\t\t\t{\n\t\t\t\t\tarrName = namePart.substr(0, namePart.indexOf('['));\n\t\t\t\t\tarrNameFull += arrName;\n\n\t\t\t\t\tif (!currResult[arrName]) currResult[arrName] = [];\n\t\t\t\t\tcurrResult[arrName].push(value);\n\t\t\t\t}\n\t\t\t\telse if (namePart.indexOf('[') > -1)\n\t\t\t\t{\n\t\t\t\t\tarrName = namePart.substr(0, namePart.indexOf('['));\n\t\t\t\t\tarrIdx = namePart.replace(/(^([a-z_]+)?\\[)|(\\]$)/gi, '');\n\n\t\t\t\t\t/* Unique array name */\n\t\t\t\t\tarrNameFull += '_' + arrName + '_' + arrIdx;\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Because arrIdx in field name can be not zero-based and step can be\n\t\t\t\t\t * other than 1, we can't use them in target array directly.\n\t\t\t\t\t * Instead we're making a hash where key is arrIdx and value is a reference to\n\t\t\t\t\t * added array element\n\t\t\t\t\t */\n\n\t\t\t\t\tif (!arrays[arrNameFull]) arrays[arrNameFull] = {};\n\t\t\t\t\tif (arrName != '' && !currResult[arrName]) currResult[arrName] = [];\n\n\t\t\t\t\tif (j == nameParts.length - 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (arrName == '')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcurrResult.push(value);\n\t\t\t\t\t\t\tarrays[arrNameFull][arrIdx] = currResult[currResult.length - 1];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcurrResult[arrName].push(value);\n\t\t\t\t\t\t\tarrays[arrNameFull][arrIdx] = currResult[arrName][currResult[arrName].length - 1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!arrays[arrNameFull][arrIdx])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ((/^[0-9a-z_]+\\[?/i).test(nameParts[j+1])) currResult[arrName].push({});\n\t\t\t\t\t\t\telse currResult[arrName].push([]);\n\n\t\t\t\t\t\t\tarrays[arrNameFull][arrIdx] = currResult[arrName][currResult[arrName].length - 1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrResult = arrays[arrNameFull][arrIdx];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tarrNameFull += namePart;\n\n\t\t\t\t\tif (j < nameParts.length - 1) /* Not the last part of name - means object */\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!currResult[namePart]) currResult[namePart] = {};\n\t\t\t\t\t\tcurrResult = currResult[namePart];\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tcurrResult[namePart] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction getFormValues(rootNode, nodeCallback, useIdIfEmptyName, getDisabled)\n\t{\n\t\tvar result = extractNodeValues(rootNode, nodeCallback, useIdIfEmptyName, getDisabled);\n\t\treturn result.length > 0 ? result : getSubFormValues(rootNode, nodeCallback, useIdIfEmptyName, getDisabled);\n\t}\n\n\tfunction getSubFormValues(rootNode, nodeCallback, useIdIfEmptyName, getDisabled)\n\t{\n\t\tvar result = [],\n\t\t\tcurrentNode = rootNode.firstChild;\n\n\t\twhile (currentNode)\n\t\t{\n\t\t\tresult = result.concat(extractNodeValues(currentNode, nodeCallback, useIdIfEmptyName, getDisabled));\n\t\t\tcurrentNode = currentNode.nextSibling;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction extractNodeValues(node, nodeCallback, useIdIfEmptyName, getDisabled) {\n\t\tif (node.disabled && !getDisabled) return [];\n\n\t\tvar callbackResult, fieldValue, result, fieldName = getFieldName(node, useIdIfEmptyName);\n\n\t\tcallbackResult = nodeCallback && nodeCallback(node);\n\n\t\tif (callbackResult && callbackResult.name) {\n\t\t\tresult = [callbackResult];\n\t\t}\n\t\telse if (fieldName != '' && node.nodeName.match(/INPUT|TEXTAREA/i)) {\n\t\t\tfieldValue = getFieldValue(node, getDisabled);\n\t\t\tif (null === fieldValue) {\n\t\t\t\tresult = [];\n\t\t\t} else {\n\t\t\t\tresult = [ { name: fieldName, value: fieldValue} ];\n\t\t\t}\n\t\t}\n\t\telse if (fieldName != '' && node.nodeName.match(/SELECT/i)) {\n\t\t\tfieldValue = getFieldValue(node, getDisabled);\n\t\t\tresult = [ { name: fieldName.replace(/\\[\\]$/, ''), value: fieldValue } ];\n\t\t}\n\t\telse {\n\t\t\tresult = getSubFormValues(node, nodeCallback, useIdIfEmptyName, getDisabled);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction getFieldName(node, useIdIfEmptyName)\n\t{\n\t\tif (node.name && node.name != '') return node.name;\n\t\telse if (useIdIfEmptyName && node.id && node.id != '') return node.id;\n\t\telse return '';\n\t}\n\n\n\tfunction getFieldValue(fieldNode, getDisabled)\n\t{\n\t\tif (fieldNode.disabled && !getDisabled) return null;\n\n\t\tswitch (fieldNode.nodeName) {\n\t\t\tcase 'INPUT':\n\t\t\tcase 'TEXTAREA':\n\t\t\t\tswitch (fieldNode.type.toLowerCase()) {\n\t\t\t\t\tcase 'radio':\n\t\t\t\t\t\tif (fieldNode.checked && fieldNode.value === \"false\") return false;\n\t\t\t\t\tcase 'checkbox':\n\t\t\t\t\t\tif (fieldNode.checked && fieldNode.value === \"true\") return true;\n\t\t\t\t\t\tif (!fieldNode.checked && fieldNode.value === \"true\") return false;\n\t\t\t\t\t\tif (fieldNode.checked) return fieldNode.value;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'button':\n\t\t\t\t\tcase 'reset':\n\t\t\t\t\tcase 'submit':\n\t\t\t\t\tcase 'image':\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn fieldNode.value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'SELECT':\n\t\t\t\treturn getSelectedOptionValue(fieldNode);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction getSelectedOptionValue(selectNode)\n\t{\n\t\tvar multiple = selectNode.multiple,\n\t\t\tresult = [],\n\t\t\toptions,\n\t\t\ti, l;\n\n\t\tif (!multiple) return selectNode.value;\n\n\t\tfor (options = selectNode.getElementsByTagName(\"option\"), i = 0, l = options.length; i < l; i++)\n\t\t{\n\t\t\tif (options[i].selected) result.push(options[i].value);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\treturn form2js;\n\n}));\n},{}],5:[function(require,module,exports){\n// get successful control from form and assemble into object\n// http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2\n\n// types which indicate a submit action and are not successful controls\n// these will be ignored\nvar k_r_submitter = /^(?:submit|button|image|reset|file)$/i;\n\n// node names which could be successful controls\nvar k_r_success_contrls = /^(?:input|select|textarea|keygen)/i;\n\n// Matches bracket notation.\nvar brackets = /(\\[[^\\[\\]]*\\])/g;\n\n// serializes form fields\n// @param form MUST be an HTMLForm element\n// @param options is an optional argument to configure the serialization. Default output\n// with no options specified is a url encoded string\n// - hash: [true | false] Configure the output type. If true, the output will\n// be a js object.\n// - serializer: [function] Optional serializer function to override the default one.\n// The function takes 3 arguments (result, key, value) and should return new result\n// hash and url encoded str serializers are provided with this module\n// - disabled: [true | false]. If true serialize disabled fields.\n// - empty: [true | false]. If true serialize empty fields\nfunction serialize(form, options) {\n\tif (typeof options != 'object') {\n\t\toptions = { hash: !!options };\n\t}\n\telse if (options.hash === undefined) {\n\t\toptions.hash = true;\n\t}\n\n\tvar result = (options.hash) ? {} : '';\n\tvar serializer = options.serializer || ((options.hash) ? hash_serializer : str_serialize);\n\n\tvar elements = form && form.elements ? form.elements : [];\n\n\t//Object store each radio and set if it's empty or not\n\tvar radio_store = Object.create(null);\n\n\tfor (var i=0 ; i<elements.length ; ++i) {\n\t\tvar element = elements[i];\n\n\t\t// ingore disabled fields\n\t\tif ((!options.disabled && element.disabled) || !element.name) {\n\t\t\tcontinue;\n\t\t}\n\t\t// ignore anyhting that is not considered a success field\n\t\tif (!k_r_success_contrls.test(element.nodeName) ||\n\t\t\tk_r_submitter.test(element.type)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar key = element.name;\n\t\tvar val = element.value;\n\n\t\t// we can't just use element.value for checkboxes cause some browsers lie to us\n\t\t// they say \"on\" for value when the box isn't checked\n\t\tif ((element.type === 'checkbox' || element.type === 'radio') && !element.checked) {\n\t\t\tval = undefined;\n\t\t}\n\n\t\t// If we want empty elements\n\t\tif (options.empty) {\n\t\t\t// for checkbox\n\t\t\tif (element.type === 'checkbox' && !element.checked) {\n\t\t\t\tval = '';\n\t\t\t}\n\n\t\t\t// for radio\n\t\t\tif (element.type === 'radio') {\n\t\t\t\tif (!radio_store[element.name] && !element.checked) {\n\t\t\t\t\tradio_store[element.name] = false;\n\t\t\t\t}\n\t\t\t\telse if (element.checked) {\n\t\t\t\t\tradio_store[element.name] = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if options empty is true, continue only if its radio\n\t\t\tif (!val && element.type == 'radio') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// value-less fields are ignored unless options.empty is true\n\t\t\tif (!val) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// multi select boxes\n\t\tif (element.type === 'select-multiple') {\n\t\t\tval = [];\n\n\t\t\tvar selectOptions = element.options;\n\t\t\tvar isSelectedOptions = false;\n\t\t\tfor (var j=0 ; j<selectOptions.length ; ++j) {\n\t\t\t\tvar option = selectOptions[j];\n\t\t\t\tvar allowedEmpty = options.empty && !option.value;\n\t\t\t\tvar hasValue = (option.value || allowedEmpty);\n\t\t\t\tif (option.selected && hasValue) {\n\t\t\t\t\tisSelectedOptions = true;\n\n\t\t\t\t\t// If using a hash serializer be sure to add the\n\t\t\t\t\t// correct notation for an array in the multi-select\n\t\t\t\t\t// context. Here the name attribute on the select element\n\t\t\t\t\t// might be missing the trailing bracket pair. Both names\n\t\t\t\t\t// \"foo\" and \"foo[]\" should be arrays.\n\t\t\t\t\tif (options.hash && key.slice(key.length - 2) !== '[]') {\n\t\t\t\t\t\tresult = serializer(result, key + '[]', option.value);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresult = serializer(result, key, option.value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Serialize if no selected options and options.empty is true\n\t\t\tif (!isSelectedOptions && options.empty) {\n\t\t\t\tresult = serializer(result, key, '');\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult = serializer(result, key, val);\n\t}\n\n\t// Check for all empty radio buttons and serialize them with key=\"\"\n\tif (options.empty) {\n\t\tfor (var key in radio_store) {\n\t\t\tif (!radio_store[key]) {\n\t\t\t\tresult = serializer(result, key, '');\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction parse_keys(string) {\n\tvar keys = [];\n\tvar prefix = /^([^\\[\\]]*)/;\n\tvar children = new RegExp(brackets);\n\tvar match = prefix.exec(string);\n\n\tif (match[1]) {\n\t\tkeys.push(match[1]);\n\t}\n\n\twhile ((match = children.exec(string)) !== null) {\n\t\tkeys.push(match[1]);\n\t}\n\n\treturn keys;\n}\n\nfunction hash_assign(result, keys, value) {\n\tif (keys.length === 0) {\n\t\tresult = value;\n\t\treturn result;\n\t}\n\n\tvar key = keys.shift();\n\tvar between = key.match(/^\\[(.+?)\\]$/);\n\n\tif (key === '[]') {\n\t\tresult = result || [];\n\n\t\tif (Array.isArray(result)) {\n\t\t\tresult.push(hash_assign(null, keys, value));\n\t\t}\n\t\telse {\n\t\t\t// This might be the result of bad name attributes like \"[][foo]\",\n\t\t\t// in this case the original `result` object will already be\n\t\t\t// assigned to an object literal. Rather than coerce the object to\n\t\t\t// an array, or cause an exception the attribute \"_values\" is\n\t\t\t// assigned as an array.\n\t\t\tresult._values = result._values || [];\n\t\t\tresult._values.push(hash_assign(null, keys, value));\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// Key is an attribute name and can be assigned directly.\n\tif (!between) {\n\t\tresult[key] = hash_assign(result[key], keys, value);\n\t}\n\telse {\n\t\tvar string = between[1];\n\t\tvar index = parseInt(string, 10);\n\n\t\t// If the characters between the brackets is not a number it is an\n\t\t// attribute name and can be assigned directly.\n\t\tif (isNaN(index)) {\n\t\t\tresult = result || {};\n\t\t\tresult[string] = hash_assign(result[string], keys, value);\n\t\t}\n\t\telse {\n\t\t\tresult = result || [];\n\t\t\tresult[index] = hash_assign(result[index], keys, value);\n\t\t}\n\t}\n\n\treturn result;\n}\n\n// Object/hash encoding serializer.\nfunction hash_serializer(result, key, value) {\n\tvar matches = key.match(brackets);\n\n\t// Has brackets? Use the recursive assignment function to walk the keys,\n\t// construct any missing objects in the result tree and make the assignment\n\t// at the end of the chain.\n\tif (matches) {\n\t\tvar keys = parse_keys(key);\n\t\thash_assign(result, keys, value);\n\t}\n\telse {\n\t\t// Non bracket notation can make assignments directly.\n\t\tvar existing = result[key];\n\n\t\t// If the value has been assigned already (for instance when a radio and\n\t\t// a checkbox have the same name attribute) convert the previous value\n\t\t// into an array before pushing into it.\n\t\t//\n\t\t// NOTE: If this requirement were removed all hash creation and\n\t\t// assignment could go through `hash_assign`.\n\t\tif (existing) {\n\t\t\tif (!Array.isArray(existing)) {\n\t\t\t\tresult[key] = [ existing ];\n\t\t\t}\n\n\t\t\tresult[key].push(value);\n\t\t}\n\t\telse {\n\t\t\tresult[key] = value;\n\t\t}\n\t}\n\n\treturn result;\n}\n\n// urlform encoding serializer\nfunction str_serialize(result, key, value) {\n\t// encode newlines as \\r\\n cause the html spec says so\n\tvalue = value.replace(/(\\r)?\\n/g, '\\r\\n');\n\tvalue = encodeURIComponent(value);\n\n\t// spaces should be '+' rather than '%20'.\n\tvalue = value.replace(/%20/g, '+');\n\treturn result + (result ? '&' : '') + encodeURIComponent(key) + '=' + value;\n}\n\nmodule.exports = serialize;\n},{}],6:[function(require,module,exports){\n/**\n * Copyright 2014 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * GATOR.JS\n * Simple Event Delegation\n *\n * @version 1.2.4\n *\n * Compatible with IE 9+, FF 3.6+, Safari 5+, Chrome\n *\n * Include legacy.js for compatibility with older browsers\n *\n * .-._ _ _ _ _ _ _ _ _\n * .-''-.__.-'00 '-' ' ' ' ' ' ' ' '-.\n * '.___ ' . .--_'-' '-' '-' _'-' '._\n * V: V 'vv-' '_ '. .' _..' '.'.\n * '=.____.=_.--' :_.__.__:_ '. : :\n * (((____.-' '-. / : :\n * (((-'\\ .' /\n * _____..' .'\n * '-._____.-'\n */\n(function() {\n var _matcher,\n _level = 0,\n _id = 0,\n _handlers = {},\n _gatorInstances = {};\n\n function _addEvent(gator, type, callback) {\n\n // blur and focus do not bubble up but if you use event capturing\n // then you will get them\n var useCapture = type == 'blur' || type == 'focus';\n gator.element.addEventListener(type, callback, useCapture);\n }\n\n function _cancel(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n /**\n * returns function to use for determining if an element\n * matches a query selector\n *\n * @returns {Function}\n */\n function _getMatcher(element) {\n if (_matcher) {\n return _matcher;\n }\n\n if (element.matches) {\n _matcher = element.matches;\n return _matcher;\n }\n\n if (element.webkitMatchesSelector) {\n _matcher = element.webkitMatchesSelector;\n return _matcher;\n }\n\n if (element.mozMatchesSelector) {\n _matcher = element.mozMatchesSelector;\n return _matcher;\n }\n\n if (element.msMatchesSelector) {\n _matcher = element.msMatchesSelector;\n return _matcher;\n }\n\n if (element.oMatchesSelector) {\n _matcher = element.oMatchesSelector;\n return _matcher;\n }\n\n // if it doesn't match a native browser method\n // fall back to the gator function\n _matcher = Gator.matchesSelector;\n return _matcher;\n }\n\n /**\n * determines if the specified element matches a given selector\n *\n * @param {Node} element - the element to compare against the selector\n * @param {string} selector\n * @param {Node} boundElement - the element the listener was attached to\n * @returns {void|Node}\n */\n function _matchesSelector(element, selector, boundElement) {\n\n // no selector means this event was bound directly to this element\n if (selector == '_root') {\n return boundElement;\n }\n\n // if we have moved up to the element you bound the event to\n // then we have come too far\n if (element === boundElement) {\n return;\n }\n\n // if this is a match then we are done!\n if (_getMatcher(element).call(element, selector)) {\n return element;\n }\n\n // if this element did not match but has a parent we should try\n // going up the tree to see if any of the parent elements match\n // for example if you are looking for a click on an <a> tag but there\n // is a <span> inside of the a tag that it is the target,\n // it should still work\n if (element.parentNode) {\n _level++;\n return _matchesSelector(element.parentNode, selector, boundElement);\n }\n }\n\n function _addHandler(gator, event, selector, callback) {\n if (!_handlers[gator.id]) {\n _handlers[gator.id] = {};\n }\n\n if (!_handlers[gator.id][event]) {\n _handlers[gator.id][event] = {};\n }\n\n if (!_handlers[gator.id][event][selector]) {\n _handlers[gator.id][event][selector] = [];\n }\n\n _handlers[gator.id][event][selector].push(callback);\n }\n\n function _removeHandler(gator, event, selector, callback) {\n\n // if there are no events tied to this element at all\n // then don't do anything\n if (!_handlers[gator.id]) {\n return;\n }\n\n // if there is no event type specified then remove all events\n // example: Gator(element).off()\n if (!event) {\n for (var type in _handlers[gator.id]) {\n if (_handlers[gator.id].hasOwnProperty(type)) {\n _handlers[gator.id][type] = {};\n }\n }\n return;\n }\n\n // if no callback or selector is specified remove all events of this type\n // example: Gator(element).off('click')\n if (!callback && !selector) {\n _handlers[gator.id][event] = {};\n return;\n }\n\n // if a selector is specified but no callback remove all events\n // for this selector\n // example: Gator(element).off('click', '.sub-element')\n if (!callback) {\n delete _handlers[gator.id][event][selector];\n return;\n }\n\n // if we have specified an event type, selector, and callback then we\n // need to make sure there are callbacks tied to this selector to\n // begin with. if there aren't then we can stop here\n if (!_handlers[gator.id][event][selector]) {\n return;\n }\n\n // if there are then loop through all the callbacks and if we find\n // one that matches remove it from the array\n for (var i = 0; i < _handlers[gator.id][event][selector].length; i++) {\n if (_handlers[gator.id][event][selector][i] === callback) {\n _handlers[gator.id][event][selector].splice(i, 1);\n break;\n }\n }\n }\n\n function _handleEvent(id, e, type) {\n if (!_handlers[id][type]) {\n return;\n }\n\n var target = e.target || e.srcElement,\n selector,\n match,\n matches = {},\n i = 0,\n j = 0;\n\n // find all events that match\n _level = 0;\n for (selector in _handlers[id][type]) {\n if (_handlers[id][type].hasOwnProperty(selector)) {\n match = _matchesSelector(target, selector, _gatorInstances[id].element);\n\n if (match && Gator.matchesEvent(type, _gatorInstances[id].element, match, selector == '_root', e)) {\n _level++;\n _handlers[id][type][selector].match = match;\n matches[_level] = _handlers[id][type][selector];\n }\n }\n }\n\n // stopPropagation() fails to set cancelBubble to true in Webkit\n // @see http://code.google.com/p/chromium/issues/detail?id=162270\n e.stopPropagation = function() {\n e.cancelBubble = true;\n };\n\n for (i = 0; i <= _level; i++) {\n if (matches[i]) {\n for (j = 0; j < matches[i].length; j++) {\n if (matches[i][j].call(matches[i].match, e) === false) {\n Gator.cancel(e);\n return;\n }\n\n if (e.cancelBubble) {\n return;\n }\n }\n }\n }\n }\n\n /**\n * binds the specified events to the element\n *\n * @param {string|Array} events\n * @param {string} selector\n * @param {Function} callback\n * @param {boolean=} remove\n * @returns {Object}\n */\n function _bind(events, selector, callback, remove) {\n\n // fail silently if you pass null or undefined as an alement\n // in the Gator constructor\n if (!this.element) {\n return;\n }\n\n if (!(events instanceof Array)) {\n events = [events];\n }\n\n if (!callback && typeof(selector) == 'function') {\n callback = selector;\n selector = '_root';\n }\n\n var id = this.id,\n i;\n\n function _getGlobalCallback(type) {\n return function(e) {\n _handleEvent(id, e, type);\n };\n }\n\n for (i = 0; i < events.length; i++) {\n if (remove) {\n _removeHandler(this, events[i], selector, callback);\n continue;\n }\n\n if (!_handlers[id] || !_handlers[id][events[i]]) {\n Gator.addEvent(this, events[i], _getGlobalCallback(events[i]));\n }\n\n _addHandler(this, events[i], selector, callback);\n }\n\n return this;\n }\n\n /**\n * Gator object constructor\n *\n * @param {Node} element\n */\n function Gator(element, id) {\n\n // called as function\n if (!(this instanceof Gator)) {\n // only keep one Gator instance per node to make sure that\n // we don't create a ton of new objects if you want to delegate\n // multiple events from the same node\n //\n // for example: Gator(document).on(...\n for (var key in _gatorInstances) {\n if (_gatorInstances[key].element === element) {\n return _gatorInstances[key];\n }\n }\n\n _id++;\n _gatorInstances[_id] = new Gator(element, _id);\n\n return _gatorInstances[_id];\n }\n\n this.element = element;\n this.id = id;\n }\n\n /**\n * adds an event\n *\n * @param {string|Array} events\n * @param {string} selector\n * @param {Function} callback\n * @returns {Object}\n */\n Gator.prototype.on = function(events, selector, callback) {\n return _bind.call(this, events, selector, callback);\n };\n\n /**\n * removes an event\n *\n * @param {string|Array} events\n * @param {string} selector\n * @param {Function} callback\n * @returns {Object}\n */\n Gator.prototype.off = function(events, selector, callback) {\n return _bind.call(this, events, selector, callback, true);\n };\n\n Gator.matchesSelector = function() {};\n Gator.cancel = _cancel;\n Gator.addEvent = _addEvent;\n Gator.matchesEvent = function() {\n return true;\n };\n\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Gator;\n }\n\n window.Gator = Gator;\n}) ();\n\n},{}],7:[function(require,module,exports){\n/*! populate.js v1.0.2 by @dannyvankooten | MIT license */\n;(function(root) {\n\n\t/**\n\t * Populate form fields from a JSON object.\n\t *\n\t * @param form object The form element containing your input fields.\n\t * @param data array JSON data to populate the fields with.\n\t * @param basename string Optional basename which is added to `name` attributes\n\t */\n\tvar populate = function( form, data, basename) {\n\n\t\tfor(var key in data) {\n\n\t\t\tif( ! data.hasOwnProperty( key ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar name = key;\n\t\t\tvar value = data[key];\n\n\t\t\t// handle array name attributes\n\t\t\tif(typeof(basename) !== \"undefined\") {\n\t\t\t\tname = basename + \"[\" + key + \"]\";\n\t\t\t}\n\n\t\t\tif(value.constructor === Array) {\n\t\t\t\tname += '[]';\n\t\t\t} else if(typeof value == \"object\") {\n\t\t\t\tpopulate( form, value, name);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// only proceed if element is set\n\t\t\tvar element = form.elements.namedItem( name );\n\t\t\tif( ! element ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar type = element.type || element[0].type;\n\n\t\t\tswitch(type ) {\n\t\t\t\tdefault:\n\t\t\t\t\telement.value = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'radio':\n\t\t\t\tcase 'checkbox':\n\t\t\t\t\tfor( var j=0; j < element.length; j++ ) {\n\t\t\t\t\t\telement[j].checked = ( value.indexOf(element[j].value) > -1 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'select-multiple':\n\t\t\t\t\tvar values = value.constructor == Array ? value : [value];\n\n\t\t\t\t\tfor(var k = 0; k < element.options.length; k++) {\n\t\t\t\t\t\telement.options[k].selected |= (values.indexOf(element.options[k].value) > -1 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'select':\n\t\t\t\tcase 'select-one':\n\t\t\t\t\telement.value = value.toString() || value;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t// Play nice with AMD, CommonJS or a plain global object.\n\tif ( typeof define == 'function' && typeof define.amd == 'object' && define.amd ) {\n\t\tdefine(function() {\n\t\t\treturn populate;\n\t\t});\n\t}\telse if ( typeof module !== 'undefined' && module.exports ) {\n\t\tmodule.exports = populate;\n\t} else {\n\t\troot.populate = populate;\n\t}\n\n}(this));\n},{}],8:[function(require,module,exports){\n/*!\n * EventEmitter v4.2.11 - git.io/ee\n * Unlicense - http://unlicense.org/\n * Oliver Caldwell - http://oli.me.uk/\n * @preserve\n */\n\n;(function () {\n 'use strict';\n\n /**\n * Class for managing events.\n * Can be extended to provide event functionality in other classes.\n *\n * @class EventEmitter Manages event registering and emitting.\n */\n function EventEmitter() {}\n\n // Shortcuts to improve speed and size\n var proto = EventEmitter.prototype;\n var exports = this;\n var originalGlobalValue = exports.EventEmitter;\n\n /**\n * Finds the index of the listener for the event in its storage array.\n *\n * @param {Function[]} listeners Array of listeners to search through.\n * @param {Function} listener Method to look for.\n * @return {Number} Index of the specified listener, -1 if not found\n * @api private\n */\n function indexOfListener(listeners, listener) {\n var i = listeners.length;\n while (i--) {\n if (listeners[i].listener === listener) {\n return i;\n }\n }\n\n return -1;\n }\n\n /**\n * Alias a method while keeping the context correct, to allow for overwriting of target method.\n *\n * @param {String} name The name of the target method.\n * @return {Function} The aliased method\n * @api private\n */\n function alias(name) {\n return function aliasClosure() {\n return this[name].apply(this, arguments);\n };\n }\n\n /**\n * Returns the listener array for the specified event.\n * Will initialise the event object and listener arrays if required.\n * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.\n * Each property in the object response is an array of listener functions.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Function[]|Object} All listener functions for the event.\n */\n proto.getListeners = function getListeners(evt) {\n var events = this._getEvents();\n var response;\n var key;\n\n // Return a concatenated array of all matching events if\n // the selector is a regular expression.\n if (evt instanceof RegExp) {\n response = {};\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n response[key] = events[key];\n }\n }\n }\n else {\n response = events[evt] || (events[evt] = []);\n }\n\n return response;\n };\n\n /**\n * Takes a list of listener objects and flattens it into a list of listener functions.\n *\n * @param {Object[]} listeners Raw listener objects.\n * @return {Function[]} Just the listener functions.\n */\n proto.flattenListeners = function flattenListeners(listeners) {\n var flatListeners = [];\n var i;\n\n for (i = 0; i < listeners.length; i += 1) {\n flatListeners.push(listeners[i].listener);\n }\n\n return flatListeners;\n };\n\n /**\n * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Object} All listener functions for an event in an object.\n */\n proto.getListenersAsObject = function getListenersAsObject(evt) {\n var listeners = this.getListeners(evt);\n var response;\n\n if (listeners instanceof Array) {\n response = {};\n response[evt] = listeners;\n }\n\n return response || listeners;\n };\n\n /**\n * Adds a listener function to the specified event.\n * The listener will not be added if it is a duplicate.\n * If the listener returns true then it will be removed after it is called.\n * If you pass a regular expression as the event name then the listener will be added to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListener = function addListener(evt, listener) {\n var listeners = this.getListenersAsObject(evt);\n var listenerIsWrapped = typeof listener === 'object';\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {\n listeners[key].push(listenerIsWrapped ? listener : {\n listener: listener,\n once: false\n });\n }\n }\n\n return this;\n };\n\n /**\n * Alias of addListener\n */\n proto.on = alias('addListener');\n\n /**\n * Semi-alias of addListener. It will add a listener that will be\n * automatically removed after its first execution.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addOnceListener = function addOnceListener(evt, listener) {\n return this.addListener(evt, {\n listener: listener,\n once: true\n });\n };\n\n /**\n * Alias of addOnceListener.\n */\n proto.once = alias('addOnceListener');\n\n /**\n * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.\n * You need to tell it what event names should be matched by a regex.\n *\n * @param {String} evt Name of the event to create.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvent = function defineEvent(evt) {\n this.getListeners(evt);\n return this;\n };\n\n /**\n * Uses defineEvent to define multiple events.\n *\n * @param {String[]} evts An array of event names to define.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvents = function defineEvents(evts) {\n for (var i = 0; i < evts.length; i += 1) {\n this.defineEvent(evts[i]);\n }\n return this;\n };\n\n /**\n * Removes a listener function from the specified event.\n * When passed a regular expression as the event name, it will remove the listener from all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to remove the listener from.\n * @param {Function} listener Method to remove from the event.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListener = function removeListener(evt, listener) {\n var listeners = this.getListenersAsObject(evt);\n var index;\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key)) {\n index = indexOfListener(listeners[key], listener);\n\n if (index !== -1) {\n listeners[key].splice(index, 1);\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of removeListener\n */\n proto.off = alias('removeListener');\n\n /**\n * Adds listeners in bulk using the manipulateListeners method.\n * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.\n * You can also pass it a regular expression to add the array of listeners to all events that match it.\n * Yeah, this function does quite a bit. That's probably a bad thing.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListeners = function addListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(false, evt, listeners);\n };\n\n /**\n * Removes listeners in bulk using the manipulateListeners method.\n * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be removed.\n * You can also pass it a regular expression to remove the listeners from all events that match it.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListeners = function removeListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(true, evt, listeners);\n };\n\n /**\n * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.\n * The first argument will determine if the listeners are removed (true) or added (false).\n * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be added/removed.\n * You can also pass it a regular expression to manipulate the listeners of all events that match it.\n *\n * @param {Boolean} remove True if you want to remove listeners, false if you want to add.\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add/remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {\n var i;\n var value;\n var single = remove ? this.removeListener : this.addListener;\n var multiple = remove ? this.removeListeners : this.addListeners;\n\n // If evt is an object then pass each of its properties to this method\n if (typeof evt === 'object' && !(evt instanceof RegExp)) {\n for (i in evt) {\n if (evt.hasOwnProperty(i) && (value = evt[i])) {\n // Pass the single listener straight through to the singular method\n if (typeof value === 'function') {\n single.call(this, i, value);\n }\n else {\n // Otherwise pass back to the multiple function\n multiple.call(this, i, value);\n }\n }\n }\n }\n else {\n // So evt must be a string\n // And listeners must be an array of listeners\n // Loop over it and pass each one to the multiple method\n i = listeners.length;\n while (i--) {\n single.call(this, evt, listeners[i]);\n }\n }\n\n return this;\n };\n\n /**\n * Removes all listeners from a specified event.\n * If you do not specify an event then all listeners will be removed.\n * That means every event will be emptied.\n * You can also pass a regex to remove all events that match it.\n *\n * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeEvent = function removeEvent(evt) {\n var type = typeof evt;\n var events = this._getEvents();\n var key;\n\n // Remove different things depending on the state of evt\n if (type === 'string') {\n // Remove all listeners for the specified event\n delete events[evt];\n }\n else if (evt instanceof RegExp) {\n // Remove all events matching the regex.\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n delete events[key];\n }\n }\n }\n else {\n // Remove all listeners in all events\n delete this._events;\n }\n\n return this;\n };\n\n /**\n * Alias of removeEvent.\n *\n * Added to mirror the node API.\n */\n proto.removeAllListeners = alias('removeEvent');\n\n /**\n * Emits an event of your choice.\n * When emitted, every listener attached to that event will be executed.\n * If you pass the optional argument array then those arguments will be passed to every listener upon execution.\n * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.\n * So they will not arrive within the array on the other side, they will be separate.\n * You can also pass a regular expression to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {Array} [args] Optional array of arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emitEvent = function emitEvent(evt, args) {\n var listenersMap = this.getListenersAsObject(evt);\n var listeners;\n var listener;\n var i;\n var key;\n var response;\n\n for (key in listenersMap) {\n if (listenersMap.hasOwnProperty(key)) {\n listeners = listenersMap[key].slice(0);\n i = listeners.length;\n\n while (i--) {\n // If the listener returns true then it shall be removed from the event\n // The function is executed either with a basic call or an apply if there is an args array\n listener = listeners[i];\n\n if (listener.once === true) {\n this.removeListener(evt, listener.listener);\n }\n\n response = listener.listener.apply(this, args || []);\n\n if (response === this._getOnceReturnValue()) {\n this.removeListener(evt, listener.listener);\n }\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of emitEvent\n */\n proto.trigger = alias('emitEvent');\n\n /**\n * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.\n * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {...*} Optional additional arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emit = function emit(evt) {\n var args = Array.prototype.slice.call(arguments, 1);\n return this.emitEvent(evt, args);\n };\n\n /**\n * Sets the current value to check against when executing listeners. If a\n * listeners return value matches the one set here then it will be removed\n * after execution. This value defaults to true.\n *\n * @param {*} value The new value to check for when executing listeners.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.setOnceReturnValue = function setOnceReturnValue(value) {\n this._onceReturnValue = value;\n return this;\n };\n\n /**\n * Fetches the current value to check against when executing listeners. If\n * the listeners return value matches this one then it should be removed\n * automatically. It will return true by default.\n *\n * @return {*|Boolean} The current value to check for or the default, true.\n * @api private\n */\n proto._getOnceReturnValue = function _getOnceReturnValue() {\n if (this.hasOwnProperty('_onceReturnValue')) {\n return this._onceReturnValue;\n }\n else {\n return true;\n }\n };\n\n /**\n * Fetches the events object and creates one if required.\n *\n * @return {Object} The events storage object.\n * @api private\n */\n proto._getEvents = function _getEvents() {\n return this._events || (this._events = {});\n };\n\n /**\n * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version.\n *\n * @return {Function} Non conflicting EventEmitter class.\n */\n EventEmitter.noConflict = function noConflict() {\n exports.EventEmitter = originalGlobalValue;\n return EventEmitter;\n };\n\n // Expose the class either via AMD, CommonJS or the global object\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return EventEmitter;\n });\n }\n else if (typeof module === 'object' && module.exports){\n module.exports = EventEmitter;\n }\n else {\n exports.EventEmitter = EventEmitter;\n }\n}.call(this));\n\n},{}]},{},[1]);\n })();"],"sourceRoot":"/source/"}
|
config/default-form-messages.php
CHANGED
@@ -32,4 +32,8 @@ return array(
|
|
32 |
'type' => 'error',
|
33 |
'text' => __( 'Please select at least one list.', 'mailchimp-for-wp' )
|
34 |
),
|
|
|
|
|
|
|
|
|
35 |
);
|
32 |
'type' => 'error',
|
33 |
'text' => __( 'Please select at least one list.', 'mailchimp-for-wp' )
|
34 |
),
|
35 |
+
'previously_unsubscribed' => array(
|
36 |
+
'type' => 'error',
|
37 |
+
'text' => __( 'It seems that you have previously unsubscribed, so we can not automatically resubscribe you.', 'mailchimp-for-wp' )
|
38 |
+
),
|
39 |
);
|
includes/admin/class-admin.php
CHANGED
@@ -58,10 +58,14 @@ class MC4WP_Admin {
|
|
58 |
// Actions used globally throughout WP Admin
|
59 |
add_action( 'admin_menu', array( $this, 'build_menu' ) );
|
60 |
add_action( 'admin_init', array( $this, 'initialize' ) );
|
|
|
61 |
add_action( 'current_screen', array( $this, 'customize_admin_texts' ) );
|
62 |
add_action( 'wp_dashboard_setup', array( $this, 'register_dashboard_widgets' ) );
|
63 |
add_action( 'mc4wp_admin_empty_lists_cache', array( $this, 'renew_lists_cache' ) );
|
64 |
add_action( 'mc4wp_admin_empty_debug_log', array( $this, 'empty_debug_log' ) );
|
|
|
|
|
|
|
65 |
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
|
66 |
|
67 |
$this->ads->add_hooks();
|
@@ -454,6 +458,45 @@ class MC4WP_Admin {
|
|
454 |
$this->messages->flash( __( 'Log successfully emptied.', 'mailchimp-for-wp' ) );
|
455 |
}
|
456 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
457 |
/**
|
458 |
* @return MC4WP_Debug_Log
|
459 |
*/
|
58 |
// Actions used globally throughout WP Admin
|
59 |
add_action( 'admin_menu', array( $this, 'build_menu' ) );
|
60 |
add_action( 'admin_init', array( $this, 'initialize' ) );
|
61 |
+
|
62 |
add_action( 'current_screen', array( $this, 'customize_admin_texts' ) );
|
63 |
add_action( 'wp_dashboard_setup', array( $this, 'register_dashboard_widgets' ) );
|
64 |
add_action( 'mc4wp_admin_empty_lists_cache', array( $this, 'renew_lists_cache' ) );
|
65 |
add_action( 'mc4wp_admin_empty_debug_log', array( $this, 'empty_debug_log' ) );
|
66 |
+
|
67 |
+
add_action( 'admin_notices', array( $this, 'show_api_key_notice' ) );
|
68 |
+
add_action( 'mc4wp_admin_dismiss_api_key_notice', array( $this, 'dismiss_api_key_notice' ) );
|
69 |
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
|
70 |
|
71 |
$this->ads->add_hooks();
|
458 |
$this->messages->flash( __( 'Log successfully emptied.', 'mailchimp-for-wp' ) );
|
459 |
}
|
460 |
|
461 |
+
/**
|
462 |
+
* Shows a notice when API key is not set.
|
463 |
+
*/
|
464 |
+
public function show_api_key_notice() {
|
465 |
+
|
466 |
+
// don't show if on settings page already
|
467 |
+
if( isset( $_GET['page'] ) && $_GET['page'] === 'mailchimp-for-wp' ) {
|
468 |
+
return;
|
469 |
+
}
|
470 |
+
|
471 |
+
// only show to user with proper permissions
|
472 |
+
if( ! $this->is_user_authorized() ) {
|
473 |
+
return;
|
474 |
+
}
|
475 |
+
|
476 |
+
// don't show if dismissed
|
477 |
+
if( get_transient( 'mc4wp_api_key_notice_dismissed' ) ) {
|
478 |
+
return;
|
479 |
+
}
|
480 |
+
|
481 |
+
// don't show if api key is set already
|
482 |
+
$options = mc4wp_get_options();
|
483 |
+
if( ! empty( $options['api_key'] ) ) {
|
484 |
+
return;
|
485 |
+
}
|
486 |
+
|
487 |
+
echo '<div class="notice notice-warning" style="position: relative; padding-right: 36px;">';
|
488 |
+
echo '<p>' . sprintf( __( 'To get started with MailChimp for WordPress, please <a href="%s">enter your MailChimp API key on the settings page of the plugin</a>.', 'mailchimp-for-wp' ), admin_url( 'admin.php?page=mailchimp-for-wp' ) ) . '</p>';
|
489 |
+
echo '<form method="post"><input type="hidden" name="_mc4wp_action" value="dismiss_api_key_notice" /><button type="submit" class="notice-dismiss"><span class="screen-reader-text">Dismiss this notice.</span></button></form>';
|
490 |
+
echo '</div>';
|
491 |
+
}
|
492 |
+
|
493 |
+
/**
|
494 |
+
* Dismisses the API key notice for 1 week
|
495 |
+
*/
|
496 |
+
public function dismiss_api_key_notice() {
|
497 |
+
set_transient( 'mc4wp_api_key_notice_dismissed', 1, 3600 * 24 * 7 );
|
498 |
+
}
|
499 |
+
|
500 |
/**
|
501 |
* @return MC4WP_Debug_Log
|
502 |
*/
|
includes/class-api.php
CHANGED
@@ -363,6 +363,7 @@ class MC4WP_API {
|
|
363 |
* @return boolean
|
364 |
*/
|
365 |
public function add_ecommerce_order( array $order_data ) {
|
|
|
366 |
$response = $this->call( 'ecomm/order-add', array( 'order' => $order_data ) );
|
367 |
|
368 |
if( is_object( $response ) ) {
|
@@ -372,8 +373,8 @@ class MC4WP_API {
|
|
372 |
return true;
|
373 |
}
|
374 |
|
375 |
-
//
|
376 |
-
if( isset( $response->code ) && $response->code == 330 ) {
|
377 |
return true;
|
378 |
}
|
379 |
}
|
@@ -430,6 +431,8 @@ class MC4WP_API {
|
|
430 |
|
431 |
// do not make request when no api key was provided.
|
432 |
if( empty( $this->api_key ) ) {
|
|
|
|
|
433 |
return false;
|
434 |
}
|
435 |
|
363 |
* @return boolean
|
364 |
*/
|
365 |
public function add_ecommerce_order( array $order_data ) {
|
366 |
+
|
367 |
$response = $this->call( 'ecomm/order-add', array( 'order' => $order_data ) );
|
368 |
|
369 |
if( is_object( $response ) ) {
|
373 |
return true;
|
374 |
}
|
375 |
|
376 |
+
// if order was already added: great
|
377 |
+
if( isset( $response->code, $response->error ) && $response->code == 330 && strpos( $response->error, 'already been recorded' ) !== false ) {
|
378 |
return true;
|
379 |
}
|
380 |
}
|
431 |
|
432 |
// do not make request when no api key was provided.
|
433 |
if( empty( $this->api_key ) ) {
|
434 |
+
$this->error_message = "Missing MailChimp API key.";
|
435 |
+
$this->error_code = 001;
|
436 |
return false;
|
437 |
}
|
438 |
|
includes/forms/class-form-listener.php
CHANGED
@@ -91,7 +91,10 @@ class MC4WP_Form_Listener {
|
|
91 |
// do stuff on failure
|
92 |
if( ! $result ) {
|
93 |
|
94 |
-
if( $api->get_error_code() ==
|
|
|
|
|
|
|
95 |
// handle "already_subscribed" as a soft-error
|
96 |
$form->errors[] = 'already_subscribed';
|
97 |
$this->get_log()->warning( sprintf( "Form %d > %s is already subscribed to the selected list(s)", $form->ID, mc4wp_obfuscate_string( $form->data['EMAIL'] ) ) );
|
91 |
// do stuff on failure
|
92 |
if( ! $result ) {
|
93 |
|
94 |
+
if( $api->get_error_code() == 212 ) {
|
95 |
+
$form->errors[] = 'previously_unsubscribed';
|
96 |
+
$this->get_log()->warning( sprintf( 'Form %d > %s has unsubscribed before and cannot be resubscribed by the plugin.', $form->ID, $form->data['EMAIL'] ) );
|
97 |
+
} elseif( $api->get_error_code() == 214 ) {
|
98 |
// handle "already_subscribed" as a soft-error
|
99 |
$form->errors[] = 'already_subscribed';
|
100 |
$this->get_log()->warning( sprintf( "Form %d > %s is already subscribed to the selected list(s)", $form->ID, mc4wp_obfuscate_string( $form->data['EMAIL'] ) ) );
|
includes/forms/class-form-previewer.php
CHANGED
@@ -163,6 +163,10 @@ class MC4WP_Form_Previewer {
|
|
163 |
* @return string
|
164 |
*/
|
165 |
public function set_page_title( $title ) {
|
|
|
|
|
|
|
|
|
166 |
return __( 'Form preview', 'mailchimp-for-wp' );
|
167 |
}
|
168 |
|
@@ -171,6 +175,10 @@ class MC4WP_Form_Previewer {
|
|
171 |
* @return string
|
172 |
*/
|
173 |
public function set_page_content( $content ) {
|
|
|
|
|
|
|
|
|
174 |
return $this->form;
|
175 |
}
|
176 |
|
163 |
* @return string
|
164 |
*/
|
165 |
public function set_page_title( $title ) {
|
166 |
+
if( ! in_the_loop() ) {
|
167 |
+
return $title;
|
168 |
+
}
|
169 |
+
|
170 |
return __( 'Form preview', 'mailchimp-for-wp' );
|
171 |
}
|
172 |
|
175 |
* @return string
|
176 |
*/
|
177 |
public function set_page_content( $content ) {
|
178 |
+
if( ! in_the_loop() ) {
|
179 |
+
return $content;
|
180 |
+
}
|
181 |
+
|
182 |
return $this->form;
|
183 |
}
|
184 |
|
includes/forms/views/tabs/form-messages.php
CHANGED
@@ -63,6 +63,14 @@
|
|
63 |
</td>
|
64 |
</tr>
|
65 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
<?php do_action( 'mc4wp_admin_form_after_messages_settings_rows', $messages, $form ); ?>
|
67 |
|
68 |
<tr valign="top">
|
63 |
</td>
|
64 |
</tr>
|
65 |
|
66 |
+
<tr valign="top">
|
67 |
+
<th scope="row"><label for="mc4wp_form_previously_unsubscribed"><?php _e( 'Previously unsubscribed', 'mailchimp-for-wp' ); ?></label></th>
|
68 |
+
<td>
|
69 |
+
<input type="text" class="widefat" id="mc4wp_form_previously_unsubscribed" name="mc4wp_form[messages][previously_unsubscribed]" value="<?php echo esc_attr( $form->messages['previously_unsubscribed'] ); ?>" required />
|
70 |
+
<p class="help"><?php _e( 'When someone previously unsubscribed, the plugin can not resubscribe them automatically. Refer to your MailChimp hosted sign-up form here.', 'mailchimp-for-wp' ); ?></p>
|
71 |
+
</td>
|
72 |
+
</tr>
|
73 |
+
|
74 |
<?php do_action( 'mc4wp_admin_form_after_messages_settings_rows', $messages, $form ); ?>
|
75 |
|
76 |
<tr valign="top">
|
languages/mailchimp-for-wp-ca_ES.mo
CHANGED
Binary file
|
languages/mailchimp-for-wp-ca_ES.po
CHANGED
@@ -1,2099 +1,879 @@
|
|
1 |
-
# Copyright (C) 2015
|
2 |
-
# This file is distributed under the
|
3 |
# Translators:
|
|
|
4 |
# Xavier Gimeno Torrent, 2015
|
5 |
msgid ""
|
6 |
msgstr ""
|
7 |
"Project-Id-Version: MailChimp for WordPress\n"
|
8 |
-
"Report-Msgid-Bugs-To:
|
9 |
-
"POT-Creation-Date: 2015-
|
10 |
-
"PO-Revision-Date:
|
11 |
-
"Last-Translator:
|
12 |
"Language-Team: Catalan (Spain) (http://www.transifex.com/ibericode/mailchimp-for-wordpress/language/ca_ES/)\n"
|
13 |
"MIME-Version: 1.0\n"
|
14 |
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
"Content-Transfer-Encoding: 8bit\n"
|
16 |
"Language: ca_ES\n"
|
17 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
-
"X-Generator: grunt-wp-i18n 0.4.4\n"
|
19 |
-
"X-Poedit-Basepath: .\n"
|
20 |
-
"X-Poedit-Bookmarks: \n"
|
21 |
-
"X-Poedit-Country: UNITED STATES\n"
|
22 |
-
"X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2; _nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__; esc_html__;esc_attr_e; esc_html_e;esc_attr_x:1,2c; esc_html_x:1,2c;\n"
|
23 |
-
"X-Poedit-Language: English\n"
|
24 |
-
"X-Poedit-SearchPath-0: .\n"
|
25 |
-
"X-Poedit-SourceCharset: utf-8\n"
|
26 |
-
"X-Textdomain-Support: yes\n"
|
27 |
-
|
28 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:141
|
29 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:157
|
30 |
-
msgid "Settings"
|
31 |
-
msgstr "Configuració"
|
32 |
-
|
33 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:160
|
34 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-need-support.php:16
|
35 |
-
msgid "Upgrade to MailChimp for WordPress Pro"
|
36 |
-
msgstr "Actualitza a MailChimp per a WordPress Pro"
|
37 |
-
|
38 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:179
|
39 |
-
msgid "MailChimp API Settings"
|
40 |
-
msgstr "Configuració d'API de MailChimp"
|
41 |
-
|
42 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:180
|
43 |
-
msgid "MailChimp"
|
44 |
-
msgstr "MailChimp"
|
45 |
-
|
46 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:185
|
47 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:11
|
48 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:506
|
49 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:11
|
50 |
-
msgid "Checkbox Settings"
|
51 |
-
msgstr "Ajustos de les caselles de verificació"
|
52 |
-
|
53 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:186
|
54 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:507
|
55 |
-
msgid "Checkboxes"
|
56 |
-
msgstr "Caselles de verificació"
|
57 |
-
|
58 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:191
|
59 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:9
|
60 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:364
|
61 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:512
|
62 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:91
|
63 |
-
msgid "Form Settings"
|
64 |
-
msgstr "Ajustos del formulari"
|
65 |
-
|
66 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:192
|
67 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:513
|
68 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-form-settings.php:10
|
69 |
-
msgid "Forms"
|
70 |
-
msgstr "Formularis"
|
71 |
-
|
72 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:196
|
73 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:197
|
74 |
-
msgid "Upgrade to Pro"
|
75 |
-
msgstr "Actualitzar a Pro"
|
76 |
-
|
77 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:283
|
78 |
-
msgid "This option is only available in MailChimp for WordPress Pro."
|
79 |
-
msgstr "Aquesta opció només està disponible a MailChimp per a WordPress Pro."
|
80 |
-
|
81 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:285
|
82 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:29
|
83 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:36
|
84 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:21
|
85 |
-
msgid "(PRO ONLY)"
|
86 |
-
msgstr "(NOMÉS PRO)"
|
87 |
-
|
88 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:286
|
89 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:610
|
90 |
-
msgid "Button text"
|
91 |
-
msgstr "Text del botó"
|
92 |
-
|
93 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:287
|
94 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:39
|
95 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:611
|
96 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:59
|
97 |
-
msgid "Initial value"
|
98 |
-
msgstr "Valor inicial"
|
99 |
-
|
100 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:288
|
101 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:29
|
102 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:34
|
103 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:39
|
104 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:612
|
105 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:49
|
106 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:54
|
107 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:59
|
108 |
-
msgid "(optional)"
|
109 |
-
msgstr "(opcional)"
|
110 |
-
|
111 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:289
|
112 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:613
|
113 |
-
msgid "Label for"
|
114 |
-
msgstr "Etiqueta per a"
|
115 |
-
|
116 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:290
|
117 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:614
|
118 |
-
msgid "(or leave empty)"
|
119 |
-
msgstr "(o deixa en blanc)"
|
120 |
-
|
121 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:291
|
122 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:615
|
123 |
-
msgid "Subscribe"
|
124 |
-
msgstr "Subscriure's"
|
125 |
-
|
126 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:292
|
127 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:616
|
128 |
-
msgid "Unsubscribe"
|
129 |
-
msgstr "Dessubscriure's"
|
130 |
-
|
131 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:316
|
132 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:654
|
133 |
-
msgid "Comment form"
|
134 |
-
msgstr "Formulari de comentaris"
|
135 |
-
|
136 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:317
|
137 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:655
|
138 |
-
msgid "Registration form"
|
139 |
-
msgstr "Formulari de registre"
|
140 |
-
|
141 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:321
|
142 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:659
|
143 |
-
msgid "MultiSite forms"
|
144 |
-
msgstr "Formularis Multi-Lloc"
|
145 |
-
|
146 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:325
|
147 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:663
|
148 |
-
#: mailchimp-for-wordpress-pro/includes/tables/class-log-table.php:337
|
149 |
-
msgid "BuddyPress registration"
|
150 |
-
msgstr "Registre BuddyPress"
|
151 |
-
|
152 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:333
|
153 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:337
|
154 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:671
|
155 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:675
|
156 |
-
msgid "%s checkout"
|
157 |
-
msgstr "Verificació de %s"
|
158 |
-
|
159 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:365
|
160 |
-
msgid ""
|
161 |
-
"The plugin can only fetch a maximum of 100 lists from MailChimp, only your "
|
162 |
-
"first 100 lists are shown."
|
163 |
-
msgstr "Aquest plugin pot obtenir un màxim de 100 llistes de MailChimp. Només es mostren les teves 100 primeres llistes."
|
164 |
-
|
165 |
-
#: mailchimp-for-wordpress/includes/admin/class-admin.php:370
|
166 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:719
|
167 |
-
msgid "Renewed MailChimp cache."
|
168 |
-
msgstr "Memòria cau de MailChimp renovada."
|
169 |
|
170 |
-
#:
|
171 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:721
|
172 |
-
msgid "Failed to renew MailChimp cache - please try again later."
|
173 |
-
msgstr "Ha fallat la renovació de la memòria cau de MailChimp - Sisplau, torna a provar-ho més tard."
|
174 |
-
|
175 |
-
#: mailchimp-for-wordpress/includes/class-widget.php:21
|
176 |
-
msgid "MailChimp Sign-Up Form"
|
177 |
-
msgstr "Formulari de subscripció de MailChimp"
|
178 |
-
|
179 |
-
#: mailchimp-for-wordpress/includes/class-widget.php:23
|
180 |
-
msgid "Displays your MailChimp for WordPress sign-up form"
|
181 |
-
msgstr "Mostra el teu formulari de subscripció de MailChimp per a WordPress"
|
182 |
-
|
183 |
-
#: mailchimp-for-wordpress/includes/class-widget.php:67
|
184 |
-
#: mailchimp-for-wordpress-pro/includes/class-widget.php:71
|
185 |
-
msgid "Newsletter"
|
186 |
-
msgstr "Llista de correu"
|
187 |
-
|
188 |
-
#: mailchimp-for-wordpress/includes/class-widget.php:70
|
189 |
-
#: mailchimp-for-wordpress-pro/includes/class-widget.php:82
|
190 |
-
msgid "Title:"
|
191 |
-
msgstr "Títol:"
|
192 |
-
|
193 |
-
#: mailchimp-for-wordpress/includes/class-widget.php:74
|
194 |
-
msgid ""
|
195 |
-
"You can edit your sign-up form in the <a href=\"%s\">MailChimp for WordPress"
|
196 |
-
" form settings</a>."
|
197 |
-
msgstr "Pots editar el teu formulari de subscripció a la <a href=\"%s\">configuració dels formularis de MailChimp per a Wordpress</a>."
|
198 |
-
|
199 |
-
#: mailchimp-for-wordpress/includes/functions/general.php:15
|
200 |
-
#: mailchimp-for-wordpress-pro/includes/class-mailchimp.php:135
|
201 |
-
#: mailchimp-for-wordpress-pro/includes/config/default-form.php:3
|
202 |
msgid "Email address"
|
203 |
msgstr "Adreça de correu electrònic"
|
204 |
|
205 |
-
#:
|
206 |
-
#: mailchimp-for-wordpress-pro/includes/config/default-form.php:4
|
207 |
-
#: mailchimp-for-wordpress-pro/includes/config/inline-form.php:2
|
208 |
msgid "Your email address"
|
209 |
msgstr "La teva adreça de correu electrònic"
|
210 |
|
211 |
-
#:
|
212 |
-
#: mailchimp-for-wordpress-pro/includes/config/default-form.php:5
|
213 |
-
#: mailchimp-for-wordpress-pro/includes/config/inline-form.php:3
|
214 |
msgid "Sign up"
|
215 |
msgstr "Registre"
|
216 |
|
217 |
-
#:
|
218 |
-
#: mailchimp-for-wordpress-pro/includes/config/default-options.php:9
|
219 |
-
msgid "Sign me up for the newsletter!"
|
220 |
-
msgstr "Subscriu-me a la llista de correu!"
|
221 |
-
|
222 |
-
#: mailchimp-for-wordpress/includes/functions/general.php:44
|
223 |
msgid ""
|
224 |
-
"Thank you, your sign-up request was successful! Please check your
|
225 |
-
"inbox."
|
226 |
-
msgstr "Gràcies, la teva sol·licitud de
|
227 |
|
228 |
-
#:
|
229 |
-
#: mailchimp-for-wordpress-pro/includes/config/default-options.php:35
|
230 |
msgid "Oops. Something went wrong. Please try again later."
|
231 |
msgstr "Vaja! Alguna cosa ha anat malament. Sisplau, torna a provar-ho més tard."
|
232 |
|
233 |
-
#:
|
234 |
-
#: mailchimp-for-wordpress-pro/includes/config/default-options.php:36
|
235 |
msgid "Please provide a valid email address."
|
236 |
msgstr "Sisplau, introdueix una adreça de correu electrònic vàlida."
|
237 |
|
238 |
-
#:
|
239 |
-
#: mailchimp-for-wordpress-pro/includes/config/default-options.php:37
|
240 |
msgid "Given email address is already subscribed, thank you!"
|
241 |
msgstr "Gràcies, però l'adreça de correu electrònic facilitada ja està subscrita."
|
242 |
|
243 |
-
#:
|
244 |
-
#: mailchimp-for-wordpress-pro/includes/config/default-options.php:38
|
245 |
-
msgid "Please complete the CAPTCHA."
|
246 |
-
msgstr "Sisplau, introdueix el codi de verificació CAPTCHA."
|
247 |
-
|
248 |
-
#: mailchimp-for-wordpress/includes/functions/general.php:49
|
249 |
-
#: mailchimp-for-wordpress-pro/includes/config/default-options.php:39
|
250 |
msgid "Please fill in the required fields."
|
251 |
msgstr "Sisplau omple els camps sol·licitats."
|
252 |
|
253 |
-
#:
|
254 |
-
#: mailchimp-for-wordpress-pro/includes/config/default-options.php:40
|
255 |
msgid "You were successfully unsubscribed."
|
256 |
msgstr "Has estat dessubscrit correctament."
|
257 |
|
258 |
-
#:
|
259 |
-
#: mailchimp-for-wordpress-pro/includes/config/default-options.php:41
|
260 |
msgid "Given email address is not subscribed."
|
261 |
msgstr "El correu proporcionat no està subscrit."
|
262 |
|
263 |
-
#:
|
264 |
-
|
265 |
-
|
266 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:96
|
267 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:106
|
268 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:121
|
269 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:134
|
270 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:145
|
271 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:164
|
272 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:178
|
273 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-cf7.php:57
|
274 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:17
|
275 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:37
|
276 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:56
|
277 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:75
|
278 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:98
|
279 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:116
|
280 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:139
|
281 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:52
|
282 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:60
|
283 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:71
|
284 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:113
|
285 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:118
|
286 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:59
|
287 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:72
|
288 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:82
|
289 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:97
|
290 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:115
|
291 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:123
|
292 |
-
msgid "Yes"
|
293 |
-
msgstr "Sí"
|
294 |
-
|
295 |
-
#: mailchimp-for-wordpress/includes/integrations/class-cf7.php:55
|
296 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:56
|
297 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:91
|
298 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:96
|
299 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:27
|
300 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:110
|
301 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:125
|
302 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:136
|
303 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:149
|
304 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:168
|
305 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:182
|
306 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-cf7.php:57
|
307 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:21
|
308 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:41
|
309 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:60
|
310 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:79
|
311 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:102
|
312 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:120
|
313 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:140
|
314 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:52
|
315 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:62
|
316 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:75
|
317 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:113
|
318 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:118
|
319 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:22
|
320 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:63
|
321 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:73
|
322 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:86
|
323 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:101
|
324 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:116
|
325 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:124
|
326 |
-
msgid "No"
|
327 |
-
msgstr "No"
|
328 |
-
|
329 |
-
#: mailchimp-for-wordpress/includes/integrations/class-integration.php:235
|
330 |
-
#: mailchimp-for-wordpress/includes/integrations/class-integration.php:238
|
331 |
-
#: mailchimp-for-wordpress/includes/integrations/class-integration.php:300
|
332 |
-
#: mailchimp-for-wordpress/includes/integrations/class-integration.php:309
|
333 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-integration.php:235
|
334 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-integration.php:238
|
335 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-integration.php:300
|
336 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-integration.php:309
|
337 |
-
msgid "MailChimp for WordPress - Error"
|
338 |
-
msgstr "MailChimp per a WordPress - Error"
|
339 |
-
|
340 |
-
#: mailchimp-for-wordpress/includes/integrations/class-integration.php:236
|
341 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-integration.php:236
|
342 |
-
msgid ""
|
343 |
-
"Please select a list to subscribe to in the <a href=\"%s\">checkbox "
|
344 |
-
"settings</a>."
|
345 |
-
msgstr "Sisplau selecciona una llista de subscripció a la <a href=\"%s\">configuració de caselles de verificació</a>."
|
346 |
-
|
347 |
-
#: mailchimp-for-wordpress/includes/integrations/class-integration.php:237
|
348 |
-
#: mailchimp-for-wordpress/includes/integrations/class-integration.php:308
|
349 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-integration.php:237
|
350 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-integration.php:308
|
351 |
-
msgid "This message is only visible to administrators for debugging purposes."
|
352 |
-
msgstr "Aquest missatge només és visible als administradors per a fins de correcció d'errors."
|
353 |
-
|
354 |
-
#: mailchimp-for-wordpress/includes/integrations/class-integration.php:301
|
355 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-integration.php:301
|
356 |
-
msgid ""
|
357 |
-
"The MailChimp server returned the following error message as a response to "
|
358 |
-
"our sign-up request:"
|
359 |
-
msgstr "El servidor de MailChimp ha retornat el següent missatge d'error com a resposta a la teva sol·licitud de subscripció:"
|
360 |
-
|
361 |
-
#: mailchimp-for-wordpress/includes/integrations/class-integration.php:303
|
362 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-integration.php:303
|
363 |
-
msgid "This is the data that was sent to MailChimp:"
|
364 |
-
msgstr "Aquestes són les dades enviades a MailChimp:"
|
365 |
-
|
366 |
-
#: mailchimp-for-wordpress/includes/integrations/class-integration.php:304
|
367 |
-
#: mailchimp-for-wordpress-pro/includes/class-subscribe-request.php:216
|
368 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-integration.php:304
|
369 |
-
msgid "Email address:"
|
370 |
-
msgstr "Adreça de correu electrònic:"
|
371 |
-
|
372 |
-
#: mailchimp-for-wordpress/includes/integrations/class-integration.php:306
|
373 |
-
#: mailchimp-for-wordpress-pro/includes/integrations/class-integration.php:306
|
374 |
-
msgid "Merge variables:"
|
375 |
-
msgstr "Combinar variables:"
|
376 |
-
|
377 |
-
#. Plugin Name of the plugin/theme
|
378 |
-
msgid "MailChimp for WordPress"
|
379 |
-
msgstr "MailChimp per a WordPress"
|
380 |
-
|
381 |
-
#: mailchimp-for-wordpress/includes/views/api-settings.php:12
|
382 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:99
|
383 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:10
|
384 |
-
msgid "MailChimp Settings"
|
385 |
-
msgstr "Configuració de MailChimp"
|
386 |
-
|
387 |
-
#: mailchimp-for-wordpress/includes/views/api-settings.php:22
|
388 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-general-settings.php:19
|
389 |
-
msgid "API Settings"
|
390 |
-
msgstr "Configuració de la API"
|
391 |
-
|
392 |
-
#: mailchimp-for-wordpress/includes/views/api-settings.php:24
|
393 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-general-settings.php:21
|
394 |
-
msgid "CONNECTED"
|
395 |
-
msgstr "CONNECTAT"
|
396 |
-
|
397 |
-
#: mailchimp-for-wordpress/includes/views/api-settings.php:26
|
398 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-general-settings.php:23
|
399 |
-
msgid "NOT CONNECTED"
|
400 |
-
msgstr "NO CONNECTAT"
|
401 |
-
|
402 |
-
#: mailchimp-for-wordpress/includes/views/api-settings.php:32
|
403 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-general-settings.php:29
|
404 |
-
msgid "API Key"
|
405 |
-
msgstr "Clau API"
|
406 |
-
|
407 |
-
#: mailchimp-for-wordpress/includes/views/api-settings.php:34
|
408 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-general-settings.php:31
|
409 |
-
msgid "Your MailChimp API key"
|
410 |
-
msgstr "La teva clau API de MailChimp"
|
411 |
-
|
412 |
-
#: mailchimp-for-wordpress/includes/views/api-settings.php:35
|
413 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-general-settings.php:32
|
414 |
-
msgid "Get your API key here."
|
415 |
-
msgstr "Obté la teva clau API aquí."
|
416 |
-
|
417 |
-
#: mailchimp-for-wordpress/includes/views/api-settings.php:47
|
418 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-general-settings.php:48
|
419 |
-
msgid "MailChimp Data"
|
420 |
-
msgstr "Dades de MailChimp"
|
421 |
-
|
422 |
-
#: mailchimp-for-wordpress/includes/views/api-settings.php:48
|
423 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-general-settings.php:49
|
424 |
-
msgid ""
|
425 |
-
"The table below shows your MailChimp lists data. If you applied changes to "
|
426 |
-
"your MailChimp lists, please use the following button to renew your cached "
|
427 |
-
"data."
|
428 |
-
msgstr "La següent taula mostra les dades de les teves llistes de MailChimp. Si has efectuat canvis en les llistes de MailChimp, sisplau utilitza el botó següent per renovar les seves dades a la memòria cau."
|
429 |
-
|
430 |
-
#: mailchimp-for-wordpress/includes/views/api-settings.php:54
|
431 |
-
#: mailchimp-for-wordpress/includes/views/api-settings.php:125
|
432 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-general-settings.php:55
|
433 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-general-settings.php:126
|
434 |
-
msgid "Renew MailChimp lists"
|
435 |
-
msgstr "Actualitzar les llistes de MailChimp"
|
436 |
-
|
437 |
-
#: mailchimp-for-wordpress/includes/views/api-settings.php:112
|
438 |
-
msgid "No lists were found in your MailChimp account"
|
439 |
-
msgstr "No s'ha trobat cap llista al teu compte de MailChimp"
|
440 |
-
|
441 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:16
|
442 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:14
|
443 |
-
msgid ""
|
444 |
-
"To use sign-up checkboxes, select at least one list and one form to add the "
|
445 |
-
"checkbox to."
|
446 |
-
msgstr "Per emprar caselles de verificació en el registre, selecciona com a mínim una llista i un formulari on afegir aquesta casella de verificació."
|
447 |
-
|
448 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:21
|
449 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:21
|
450 |
-
msgid "MailChimp settings for checkboxes"
|
451 |
-
msgstr "Ajustos de MailChimp per a les caselles de verificació"
|
452 |
-
|
453 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:25
|
454 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:26
|
455 |
-
msgid ""
|
456 |
-
"If you want to use sign-up checkboxes, select at least one MailChimp list to"
|
457 |
-
" subscribe people to."
|
458 |
-
msgstr "Si vols emprar caselles de verificació en el registre, selecciona com a mínim una llista de MailChimp a què subscriure's."
|
459 |
-
|
460 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:31
|
461 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:34
|
462 |
-
msgid "MailChimp Lists"
|
463 |
-
msgstr "Llistes de MailChimp"
|
464 |
-
|
465 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:35
|
466 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:48
|
467 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:17
|
468 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:38
|
469 |
-
msgid "No lists found, <a href=\"%s\">are you connected to MailChimp</a>?"
|
470 |
-
msgstr "No s'han trobat llistes, ¿<a href=\"%s\">estàs connectat a MailChimp</a>?"
|
471 |
-
|
472 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:42
|
473 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:45
|
474 |
-
msgid ""
|
475 |
-
"Select the list(s) to which people who check the checkbox should be "
|
476 |
-
"subscribed."
|
477 |
-
msgstr "Selecciona la(es) llista(es) a què es subscriuran els que marquin les caselles de verificació."
|
478 |
-
|
479 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:48
|
480 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:102
|
481 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:13
|
482 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:51
|
483 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:55
|
484 |
-
msgid "Double opt-in?"
|
485 |
-
msgstr "Vols que confirmin el registre?"
|
486 |
-
|
487 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:59
|
488 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:113
|
489 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:28
|
490 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:53
|
491 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:66
|
492 |
-
msgid ""
|
493 |
-
"Select \"yes\" if you want people to confirm their email address before "
|
494 |
-
"being subscribed (recommended)"
|
495 |
-
msgstr "Selecciona \"sí\" si vols que els subscriptors confirmin la seva adreça de correu electrònic abans de subscriure's (recomanat)"
|
496 |
-
|
497 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:63
|
498 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:82
|
499 |
-
msgid "Checkbox settings"
|
500 |
-
msgstr "Configuració de la casella de verificació"
|
501 |
-
|
502 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:67
|
503 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:85
|
504 |
-
msgid "Add the checkbox to these forms"
|
505 |
-
msgstr "Afegir caselles de verificació en aquests formularis"
|
506 |
-
|
507 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:79
|
508 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:92
|
509 |
-
msgid "Selecting a form will automatically add the sign-up checkbox to it."
|
510 |
-
msgstr "Al seleccionar un formulari s'afegirà automàticament la casella de verificació de registre."
|
511 |
-
|
512 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:83
|
513 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:105
|
514 |
-
msgid "Checkbox label text"
|
515 |
-
msgstr "Text de la casella de verificació."
|
516 |
-
|
517 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:86
|
518 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:108
|
519 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:148
|
520 |
-
msgid "HTML tags like %s are allowed in the label text."
|
521 |
-
msgstr "Les etiquetes HTML com % s estan permeses en el text de l'etiqueta."
|
522 |
-
|
523 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:90
|
524 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:112
|
525 |
-
msgid "Pre-check the checkbox?"
|
526 |
-
msgstr "Deixem pre-marcada la casella de verificació?"
|
527 |
-
|
528 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:95
|
529 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:117
|
530 |
-
msgid "Load some default CSS?"
|
531 |
-
msgstr "Carreguem alguns estils CSS per defecte?"
|
532 |
-
|
533 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:97
|
534 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:119
|
535 |
-
msgid "Select \"yes\" if the checkbox appears in a weird place."
|
536 |
-
msgstr "Seleccioneu \"sí\" si la casella de verificació apareix en un lloc inadequat."
|
537 |
-
|
538 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:100
|
539 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:122
|
540 |
-
msgid "WooCommerce checkbox position"
|
541 |
-
msgstr "Posició de la casella de verificació a WooCommerce"
|
542 |
-
|
543 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:103
|
544 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:125
|
545 |
-
msgid "After the billing details"
|
546 |
-
msgstr "Detalls després de la factura"
|
547 |
-
|
548 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:104
|
549 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:126
|
550 |
-
msgid "After the additional information"
|
551 |
-
msgstr "Després de la informació extra"
|
552 |
-
|
553 |
-
#: mailchimp-for-wordpress/includes/views/checkbox-settings.php:107
|
554 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:129
|
555 |
-
msgid ""
|
556 |
-
"Choose the position for the checkbox in your WooCommerce checkout form."
|
557 |
-
msgstr "Escull la posició de les caselles de verificació en el teu formulari de pagament de WooCommerce."
|
558 |
-
|
559 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:15
|
560 |
-
msgid ""
|
561 |
-
"To use the MailChimp sign-up form, configure the form below and then either "
|
562 |
-
"paste %s in the content of a post or page or use the widget."
|
563 |
-
msgstr "Per emprar el formulari de subscripció de MailChimp, configura el següent formulari i després enganxa % s al contingut de l'article, pàgina, o giny."
|
564 |
-
|
565 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:20
|
566 |
-
msgid "Required form settings"
|
567 |
-
msgstr "Configuració de formulari requerida"
|
568 |
-
|
569 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:24
|
570 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:19
|
571 |
-
msgid "Load form styles (CSS)?"
|
572 |
-
msgstr "Carreguem els estils de formulari (CSS)?"
|
573 |
-
|
574 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:28
|
575 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:23
|
576 |
-
msgid "Yes, load basic form styles"
|
577 |
-
msgstr "Sí, carrega els estils de formulari bàsics"
|
578 |
-
|
579 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:29
|
580 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:24
|
581 |
-
msgid "Yes, load my custom form styles"
|
582 |
-
msgstr "Sí, carrega els meus estils de formulari personalitzats"
|
583 |
-
|
584 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:30
|
585 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:25
|
586 |
-
msgid "Yes, load default form theme"
|
587 |
-
msgstr "Sí, carrega els estils de formulari del tema per defecte"
|
588 |
-
|
589 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:31
|
590 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:26
|
591 |
-
msgid "Light Theme"
|
592 |
-
msgstr "Tema clar"
|
593 |
-
|
594 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:32
|
595 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:27
|
596 |
-
msgid "Red Theme"
|
597 |
-
msgstr "Tema vermell"
|
598 |
-
|
599 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:33
|
600 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:28
|
601 |
-
msgid "Green Theme"
|
602 |
-
msgstr "Tema verd"
|
603 |
-
|
604 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:34
|
605 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:29
|
606 |
-
msgid "Blue Theme"
|
607 |
-
msgstr "Tema blau"
|
608 |
-
|
609 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:35
|
610 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:30
|
611 |
-
msgid "Dark Theme"
|
612 |
-
msgstr "Tema fosc"
|
613 |
-
|
614 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:36
|
615 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:31
|
616 |
-
msgid "Custom Color Theme"
|
617 |
-
msgstr "Color de tema personalitzat"
|
618 |
-
|
619 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:41
|
620 |
-
msgid ""
|
621 |
-
"If you want to load some default CSS styles, select \"basic formatting "
|
622 |
-
"styles\" or choose one of the color themes"
|
623 |
-
msgstr "Si vols carregar els fulls d'estils CSS per defecte, selecciona \"Estils de formulari bàsics\" o escull un dels temes de colors."
|
624 |
-
|
625 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:45
|
626 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:14
|
627 |
-
msgid "Lists this form subscribes to"
|
628 |
-
msgstr "Les llistes d'aquest formulari subscriuen a"
|
629 |
-
|
630 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:63
|
631 |
-
msgid ""
|
632 |
-
"Select the list(s) to which people who submit this form should be "
|
633 |
-
"subscribed."
|
634 |
-
msgstr "Selecciona la(es) llista(es) a què es subscriuran els que usin aquest formulari."
|
635 |
-
|
636 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:69
|
637 |
-
msgid "Form mark-up"
|
638 |
-
msgstr "Codi del formulari"
|
639 |
-
|
640 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:79
|
641 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:91
|
642 |
-
msgid ""
|
643 |
-
"Use the shortcode %s to display this form inside a post, page or text "
|
644 |
-
"widget."
|
645 |
-
msgstr "Insereix el shortcode % s per mostrar aquest formulari en una entrada, article o giny de text."
|
646 |
-
|
647 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:92
|
648 |
-
#: mailchimp-for-wordpress-pro/includes/views/parts/missing-fields-notice.php:4
|
649 |
-
msgid "Your form is missing the following (required) form fields:"
|
650 |
-
msgstr "Cal que afegeixis els següents camps (requerits) al teu formulari:"
|
651 |
-
|
652 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:117
|
653 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:71
|
654 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:57
|
655 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:70
|
656 |
-
msgid "Send Welcome Email?"
|
657 |
-
msgstr "Vols que enviem un correu electrònic de benvinguda?"
|
658 |
-
|
659 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:128
|
660 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:86
|
661 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:64
|
662 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:75
|
663 |
-
msgid ""
|
664 |
-
"Select \"yes\" if you want to send your lists Welcome Email if a subscribe "
|
665 |
-
"succeeds (only when double opt-in is disabled)."
|
666 |
-
msgstr "Selecciona \"sí\" si vols enviar a les teves llistes un correu electrònic de benvinguda quan es realitzi una subscripció correctament (només quan la confirmació de registre està desactivada)."
|
667 |
-
|
668 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:131
|
669 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:33
|
670 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-checkbox-settings.php:67
|
671 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:78
|
672 |
-
msgid "Update existing subscribers?"
|
673 |
-
msgstr "Vols actualitzar els subscriptors existents?"
|
674 |
-
|
675 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:138
|
676 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:47
|
677 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:89
|
678 |
-
msgid ""
|
679 |
-
"Select \"yes\" if you want to update existing subscribers (instead of "
|
680 |
-
"showing the \"already subscribed\" message)."
|
681 |
-
msgstr "Selecciona \"sí\" si vols actualitzar els subscriptors existents (en lloc de mostrar el missatge \"ja subscrit\")."
|
682 |
-
|
683 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:141
|
684 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:52
|
685 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:93
|
686 |
-
msgid "Replace interest groups?"
|
687 |
-
msgstr "Vols reemplaçar els grups d'interessos?"
|
688 |
|
689 |
-
#:
|
690 |
-
|
691 |
-
|
692 |
-
msgid ""
|
693 |
-
"Select \"yes\" if you want to replace the interest groups with the groups "
|
694 |
-
"provided instead of adding the provided groups to the member's interest "
|
695 |
-
"groups (only when updating a subscriber)."
|
696 |
-
msgstr "Selecciona \"sí\" si vols reemplaçar els grups d'interessos pels grups previstos en lloc d'afegir els grups previstos als grups d'interessos de l'usuari (només quan s'actualitza un subscriptor)."
|
697 |
-
|
698 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:156
|
699 |
-
msgid "Form Settings & Messages"
|
700 |
-
msgstr "Configuració de formularis i missatges"
|
701 |
-
|
702 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:160
|
703 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:94
|
704 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:113
|
705 |
-
msgid "Enable AJAX form submission?"
|
706 |
-
msgstr "Habilitem AJAX als formularis de registre?"
|
707 |
-
|
708 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:171
|
709 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:108
|
710 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:118
|
711 |
-
msgid "Select \"yes\" if you want to use AJAX (JavaScript) to submit forms."
|
712 |
-
msgstr "Selecciona \"sí\" si vols utilitzar AJAX (JavaScript) en els formularis de registre."
|
713 |
-
|
714 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:174
|
715 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:112
|
716 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:121
|
717 |
-
msgid "Hide form after a successful sign-up?"
|
718 |
-
msgstr "Vols que s'oculti el formulari després d'un registre satisfactori?"
|
719 |
-
|
720 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:185
|
721 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:126
|
722 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:126
|
723 |
-
msgid "Select \"yes\" to hide the form fields after a successful sign-up."
|
724 |
-
msgstr "Selecciona \"sí\" per ocultar els camps del formulari després d'un registre satisfactori."
|
725 |
|
726 |
-
#:
|
727 |
-
#:
|
728 |
-
|
729 |
-
|
730 |
-
msgstr "Redireccionar a una URL després d'una subscripció satisfactòria."
|
731 |
|
732 |
-
#:
|
733 |
-
msgid "
|
734 |
-
msgstr "
|
735 |
|
736 |
-
#:
|
737 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:133
|
738 |
msgid ""
|
739 |
-
"
|
740 |
-
|
741 |
-
msgstr "Deixa en blanc o introdueix <code>0</ code> per no redireccionar. En cas contrari, utilitza URL completes (absolutes), incloent <code>http://</code>."
|
742 |
-
|
743 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:195
|
744 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:140
|
745 |
-
msgid "Successfully subscribed"
|
746 |
-
msgstr "Subscripció satisfactòria"
|
747 |
|
748 |
-
#:
|
749 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:156
|
750 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:143
|
751 |
msgid ""
|
752 |
-
"
|
753 |
-
"
|
754 |
-
msgstr "
|
755 |
|
756 |
-
#:
|
757 |
-
|
758 |
-
|
759 |
-
msgid "Invalid email address"
|
760 |
-
msgstr "Adreça de correu electrònic no vàlida"
|
761 |
|
762 |
-
#:
|
763 |
-
#:
|
764 |
-
|
765 |
-
|
766 |
-
msgstr "Text a mostrar quan es proporciona una adreça de correu electrònic no vàlida."
|
767 |
|
768 |
-
#:
|
769 |
-
|
770 |
-
|
771 |
-
msgid "Required field missing"
|
772 |
-
msgstr "Introdueix el camp requerit"
|
773 |
|
774 |
-
#:
|
775 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:170
|
776 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:157
|
777 |
msgid ""
|
778 |
-
"
|
779 |
-
"
|
780 |
-
msgstr "
|
781 |
|
782 |
-
#:
|
783 |
-
|
784 |
-
|
785 |
-
msgid "Already subscribed"
|
786 |
-
msgstr "Ja estàs subscrit"
|
787 |
|
788 |
-
#:
|
789 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:177
|
790 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:164
|
791 |
msgid ""
|
792 |
-
"
|
793 |
-
"
|
794 |
-
msgstr "
|
795 |
-
|
796 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:224
|
797 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:182
|
798 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:169
|
799 |
-
msgid "Invalid CAPTCHA"
|
800 |
-
msgstr "Codi de verificació CAPTCHA no vàlid"
|
801 |
-
|
802 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:229
|
803 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:174
|
804 |
-
msgid "General error"
|
805 |
-
msgstr "Error general"
|
806 |
-
|
807 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:232
|
808 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:193
|
809 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-general-settings.php:177
|
810 |
-
msgid "The text that shows when a general error occured."
|
811 |
-
msgstr "Text a mostrar quan es produeix un error general."
|
812 |
|
813 |
-
#:
|
814 |
-
|
815 |
-
|
816 |
-
msgid "Unsubscribed"
|
817 |
-
msgstr "Dessubscrit"
|
818 |
|
819 |
-
#:
|
820 |
-
|
821 |
-
|
822 |
-
msgid ""
|
823 |
-
"When using the unsubscribe method, this is the text that shows when the "
|
824 |
-
"given email address is successfully unsubscribed from the selected list(s)."
|
825 |
-
msgstr "Quan s'empra el mètode dessubscriure's, aquest és el text a mostrar quan l'adreça de correu electrònic facilitada s'ha dessubscrit correctament de la(es) llista(es) seleccionada(es)."
|
826 |
|
827 |
-
#:
|
828 |
-
|
829 |
-
|
830 |
-
msgid "Not subscribed"
|
831 |
-
msgstr "No subscrit"
|
832 |
|
833 |
-
#:
|
834 |
-
|
835 |
-
|
836 |
-
msgid ""
|
837 |
-
"When using the unsubscribe method, this is the text that shows when the "
|
838 |
-
"given email address is not on the selected list(s)."
|
839 |
-
msgstr "Quan s'empra el mètode dessubscriure's, aquest és el text a mostrar quan l'adreça de correu electrònic facilitada no és a la(es) llista(es) seleccionada(es)."
|
840 |
|
841 |
-
#:
|
842 |
-
|
843 |
-
|
844 |
-
msgid "HTML tags like %s are allowed in the message fields."
|
845 |
-
msgstr "Les etiquetes HTML com %s estan permeses en els camps del missatge."
|
846 |
|
847 |
-
#:
|
848 |
-
msgid "
|
849 |
-
msgstr "
|
850 |
|
851 |
-
#:
|
852 |
-
|
853 |
-
|
|
|
854 |
|
855 |
-
#:
|
856 |
-
msgid ""
|
857 |
-
|
858 |
-
"href=\"%s\">Theme Editor</a> or by using a plugin like %s"
|
859 |
-
msgstr "Pots afegir regles CSS al full d'estils del teu tema emprant l'<a href=\"%s\">Editor de Temes</a> o usant plugins com ara %s"
|
860 |
|
861 |
-
#:
|
862 |
-
msgid ""
|
863 |
-
|
864 |
-
"selectors you can use to target the different form elements."
|
865 |
-
msgstr "A les <a href=\"%s\" target=\"_blank\">preguntes més freqüents del plugin</a> hi ha una llista dels diversos selectors CSS que pots emprar per modificar els diferents elements del formulari."
|
866 |
|
867 |
-
#:
|
868 |
-
msgid ""
|
869 |
-
|
870 |
-
"href=\"%s\">upgrading to MailChimp for WordPress Pro</a> which comes with an"
|
871 |
-
" easy Styles Builder."
|
872 |
-
msgstr "Si necessites donar estil als teus formularis de forma sencilla, <a href=\"%s\">actualitza a MailChimp per a WordPress Pro</a>. Inclou un \"Constructor d'Estils\" que et permet personalitzar estils de formulari sense haver d'escriure gens de codi."
|
873 |
-
|
874 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:272
|
875 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:366
|
876 |
-
msgid "Variables"
|
877 |
-
msgstr "Variables"
|
878 |
-
|
879 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:274
|
880 |
-
#: mailchimp-for-wordpress-pro/includes/views/parts/admin-text-variables.php:11
|
881 |
-
msgid ""
|
882 |
-
"The following list of variables can be used to <a href=\"%s\">add some "
|
883 |
-
"dynamic content to your form or success and error messages</a>."
|
884 |
-
msgstr "La següent llista de variables es pot emprar per a <a href=\"%s\">afegir continguts dinàmics al teu formulari o als seus missatges d'éxit i error</a>."
|
885 |
|
886 |
-
#:
|
887 |
-
|
888 |
-
|
889 |
-
msgstr "Això et permet personalitzar el formulari o els seus missatges de resposta."
|
890 |
|
891 |
-
#:
|
892 |
-
|
893 |
-
|
894 |
-
msgstr "Es substitueix pel correu electrònic del visitant (si s'ha configurat a la URL o a les galetes)."
|
895 |
|
896 |
-
#:
|
897 |
-
#: mailchimp-for-wordpress-pro/includes/views/parts/admin-text-variables.php:20
|
898 |
msgid "Replaced with the form response (error or success messages)."
|
899 |
msgstr "Es substitueix per la resposta del formulari (missatges d'error o èxit)."
|
900 |
|
901 |
-
#:
|
902 |
-
|
903 |
-
|
904 |
-
msgstr "Es substitueix per un camp de verificació captcha."
|
905 |
|
906 |
-
#:
|
907 |
-
#:
|
908 |
msgid "Replaced with the number of subscribers on the selected list(s)"
|
909 |
msgstr "Es substitueix pel nombre de subscriptors de la(es) llista(es) seleccionada(es)"
|
910 |
|
911 |
-
#:
|
912 |
-
|
913 |
-
|
914 |
-
msgstr "Es substitueix per l'idioma actual del lloc, per exemple: %s"
|
915 |
-
|
916 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:304
|
917 |
-
#: mailchimp-for-wordpress-pro/includes/views/parts/admin-text-variables.php:38
|
918 |
-
msgid "Replaced with the visitor's IP address"
|
919 |
-
msgstr "Es substitueix per l'adreça IP del visitant"
|
920 |
-
|
921 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:308
|
922 |
-
#: mailchimp-for-wordpress-pro/includes/views/parts/admin-text-variables.php:42
|
923 |
-
msgid "Replaced with the current date (yyyy/mm/dd eg: %s)"
|
924 |
-
msgstr "Es substitueix per la data actual (aaaa/mm/dd per exemple: %s)"
|
925 |
-
|
926 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:312
|
927 |
-
#: mailchimp-for-wordpress-pro/includes/views/parts/admin-text-variables.php:46
|
928 |
-
msgid "Replaced with the current time (hh:mm:ss eg: %s)"
|
929 |
-
msgstr "Es substitueix per l'hora actual (hh:mm:ss per exemple: %s)"
|
930 |
|
931 |
-
#:
|
932 |
-
|
933 |
-
|
934 |
-
"Replaced with the logged in user's email (or nothing, if there is no logged "
|
935 |
-
"in user)"
|
936 |
-
msgstr "Es substitueix per l'adreça de correu electrònic de l'usuari que s'ha registrat (o per res, si no s'ha registrat cap usuari)"
|
937 |
-
|
938 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:320
|
939 |
-
#: mailchimp-for-wordpress-pro/includes/views/parts/admin-text-variables.php:54
|
940 |
-
msgid "First name of the current user"
|
941 |
-
msgstr "Nom de l'usuari actual"
|
942 |
-
|
943 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:324
|
944 |
-
#: mailchimp-for-wordpress-pro/includes/views/parts/admin-text-variables.php:58
|
945 |
-
msgid "Last name of the current user"
|
946 |
-
msgstr "Cognom(s) de l'usuari actual"
|
947 |
-
|
948 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:328
|
949 |
-
#: mailchimp-for-wordpress-pro/includes/views/parts/admin-text-variables.php:62
|
950 |
-
msgid "Current user ID"
|
951 |
-
msgstr "ID de l'usuari actual"
|
952 |
-
|
953 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:332
|
954 |
-
#: mailchimp-for-wordpress-pro/includes/views/parts/admin-text-variables.php:66
|
955 |
-
msgid "Current URL"
|
956 |
-
msgstr "URL actual"
|
957 |
-
|
958 |
-
#: mailchimp-for-wordpress/includes/views/form-settings.php:336
|
959 |
-
#: mailchimp-for-wordpress-pro/includes/views/parts/admin-text-variables.php:70
|
960 |
-
msgid "The value of the <strong>FNAME</strong> field, if set."
|
961 |
-
msgstr "El valor del camp <strong>FNAME</strong>, si s'ha definit."
|
962 |
-
|
963 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:10
|
964 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:31
|
965 |
-
msgid "Add a new field"
|
966 |
-
msgstr "Afegir un nou camp"
|
967 |
-
|
968 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:12
|
969 |
-
msgid "Use the tool below to generate the HTML for your form fields."
|
970 |
-
msgstr "Utilitza la següent eina per a generar el codi HTML del teu formulari."
|
971 |
-
|
972 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:15
|
973 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:35
|
974 |
-
msgid "Select MailChimp field.."
|
975 |
-
msgstr "Selecciona el camp de MailChimp ..."
|
976 |
-
|
977 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:19
|
978 |
-
msgid "Submit Button"
|
979 |
-
msgstr "Botó enviar"
|
980 |
-
|
981 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:20
|
982 |
-
msgid "Subscribe / unsubscribe choice"
|
983 |
-
msgstr "Opció de subscriure's / dessubscriure's"
|
984 |
-
|
985 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:21
|
986 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:40
|
987 |
-
msgid "List choice"
|
988 |
-
msgstr "Llista d'opcions"
|
989 |
-
|
990 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:29
|
991 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:49
|
992 |
-
msgid "Label"
|
993 |
-
msgstr "Etiqueta"
|
994 |
-
|
995 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:34
|
996 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:54
|
997 |
-
msgid "Placeholder"
|
998 |
-
msgstr "Indicador de posició"
|
999 |
-
|
1000 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:44
|
1001 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:64
|
1002 |
-
msgid "Labels"
|
1003 |
-
msgstr "Etiquetes"
|
1004 |
-
|
1005 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:44
|
1006 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:64
|
1007 |
-
msgid "(leave empty to hide)"
|
1008 |
-
msgstr "(deixar en blanc per ocultar)"
|
1009 |
-
|
1010 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:49
|
1011 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:69
|
1012 |
-
msgid "Wrap in paragraph %s tags?"
|
1013 |
-
msgstr "Embolicar les etiquetes %s al paràgraf?"
|
1014 |
-
|
1015 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:54
|
1016 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:73
|
1017 |
-
msgid "Required field?"
|
1018 |
-
msgstr "Camp obligatori?"
|
1019 |
-
|
1020 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:58
|
1021 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:77
|
1022 |
-
msgid "Add to form"
|
1023 |
-
msgstr "Afegir al formulari"
|
1024 |
-
|
1025 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:62
|
1026 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/required-form-settings.php:81
|
1027 |
-
msgid "Generated HTML"
|
1028 |
-
msgstr "HTML generat"
|
1029 |
-
|
1030 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-field-wizard.php:69
|
1031 |
-
msgid "Select at least one list first."
|
1032 |
-
msgstr "Selecciona almenys una llista primer."
|
1033 |
-
|
1034 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-footer.php:11
|
1035 |
-
msgid ""
|
1036 |
-
"MailChimp for WordPress is in need of translations. Is the plugin not "
|
1037 |
-
"translated in your language or do you spot errors with the current "
|
1038 |
-
"translations? Helping out is easy! Head over to <a href=\"%s\">the "
|
1039 |
-
"translation project and click \"help translate\"</a>."
|
1040 |
-
msgstr "Mailchimp per a Wordpress necessita que el tradueixin. No està traduït al teu idioma o hi ha errors en la traducció actual? Ajudar-nos és fàcil. Visita <a href=\"%s\">el projecte de traducció i selecciona \"help translate\"</a>."
|
1041 |
|
1042 |
-
#:
|
1043 |
-
msgid ""
|
1044 |
-
|
1045 |
-
"Pro</a> for an even better plugin, you will love it."
|
1046 |
-
msgstr "T'agrada el plugin? <a href=\"%s\">Actualitza a MailChimp per a WordPress Pro ara</a> per gaudir d'un plugin encara millor. T'encantarà."
|
1047 |
|
1048 |
-
#:
|
1049 |
-
|
1050 |
-
|
1051 |
-
"This plugin is not developed by or affiliated with MailChimp in any way."
|
1052 |
-
msgstr "Aquest plugin no està desenvolupat per ni està afiliat a MailChimp en cap sentit."
|
1053 |
|
1054 |
-
#:
|
1055 |
-
msgid "
|
1056 |
-
msgstr "
|
1057 |
|
1058 |
-
#:
|
1059 |
-
msgid ""
|
1060 |
-
|
1061 |
-
"documentation</a>, the plugin <a href=\"%s\">FAQ</a> or use the <a "
|
1062 |
-
"href=\"%s\">support forums</a> on WordPress.org."
|
1063 |
-
msgstr "Assegura't de llegir <a href=\"%s\">la documentació de MailChimp per a WordPress</a>, les <a href=\"%s\">preguntes més freqüents</a> del plugin o utilitza els <a href=\"%s\">fòrums de suport</a> a WordPress.org."
|
1064 |
|
1065 |
-
#:
|
1066 |
-
msgid "
|
1067 |
-
msgstr "
|
1068 |
|
1069 |
-
#:
|
1070 |
-
msgid "
|
1071 |
-
msgstr "
|
1072 |
|
1073 |
-
#:
|
1074 |
-
msgid "
|
1075 |
-
msgstr "
|
1076 |
|
1077 |
-
#:
|
1078 |
-
msgid "
|
1079 |
-
msgstr "
|
1080 |
|
1081 |
-
#:
|
1082 |
-
msgid ""
|
1083 |
-
"
|
1084 |
-
"page</a>."
|
1085 |
-
msgstr "Valora el plugin al teu bloc i enllaça'ns a <a href=\"%s\">la pàgina del plugin</a>."
|
1086 |
|
1087 |
-
#:
|
1088 |
-
msgid "
|
1089 |
-
msgstr "
|
1090 |
|
1091 |
-
#:
|
1092 |
-
msgid "
|
1093 |
-
msgstr "
|
1094 |
|
1095 |
-
#:
|
1096 |
msgid ""
|
1097 |
-
"
|
1098 |
-
|
1099 |
-
|
1100 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-upgrade-to-pro.php:11
|
1101 |
-
msgid "Some differences with this free version of the plugin:"
|
1102 |
-
msgstr "Diferències amb la versió gratuïta del plugin:"
|
1103 |
-
|
1104 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-upgrade-to-pro.php:14
|
1105 |
-
msgid "Multiple forms"
|
1106 |
-
msgstr "Múltiples formularis"
|
1107 |
-
|
1108 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-upgrade-to-pro.php:15
|
1109 |
-
msgid "Each subscribing to one or multiple MailChimp lists."
|
1110 |
-
msgstr "Subscripció a una o vàries llistes de MailChimp."
|
1111 |
-
|
1112 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-upgrade-to-pro.php:18
|
1113 |
-
msgid "AJAX forms"
|
1114 |
-
msgstr "Formularis AJAX"
|
1115 |
-
|
1116 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-upgrade-to-pro.php:19
|
1117 |
-
msgid "Forms do not require a full page reload."
|
1118 |
-
msgstr "Els formularis no requereixen una recàrrega completa de pàgina."
|
1119 |
-
|
1120 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-upgrade-to-pro.php:22
|
1121 |
-
#: mailchimp-for-wordpress-pro/includes/views/pages/admin-reports.php:14
|
1122 |
-
msgid "Statistics"
|
1123 |
-
msgstr "Estadístiques"
|
1124 |
-
|
1125 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-upgrade-to-pro.php:23
|
1126 |
-
msgid "Every form interaction is logged and visualised in insightful charts."
|
1127 |
-
msgstr "Cada interacció del formulari es registra i visualitza amb gràfics intuïtius."
|
1128 |
-
|
1129 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-upgrade-to-pro.php:26
|
1130 |
-
msgid "Styles Builder"
|
1131 |
-
msgstr "Creador d'estils CSS"
|
1132 |
-
|
1133 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-upgrade-to-pro.php:27
|
1134 |
-
msgid "Create beautiful form themes with ease."
|
1135 |
-
msgstr "Crea fàcilment bonics temes per a formularis."
|
1136 |
-
|
1137 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-upgrade-to-pro.php:31
|
1138 |
-
msgid "Upgrade Now"
|
1139 |
-
msgstr "Actualitza ara"
|
1140 |
-
|
1141 |
-
#: mailchimp-for-wordpress/includes/views/parts/admin-upgrade-to-pro.php:32
|
1142 |
-
msgid "View Demo"
|
1143 |
-
msgstr "Veure demo"
|
1144 |
-
|
1145 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:176
|
1146 |
-
msgid "Documentation"
|
1147 |
-
msgstr "Documentació"
|
1148 |
-
|
1149 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:240
|
1150 |
-
msgid "Save Form"
|
1151 |
-
msgstr "Guardar formulari"
|
1152 |
-
|
1153 |
-
#: mailchimp-for-wordpress-pro/includes/admin/class-admin.php:244
|
1154 |
-
msgid "Update Form"
|
1155 |
-
msgstr "Actualitzar formulari"
|
1156 |
|
1157 |
-
#:
|
1158 |
-
msgid "
|
1159 |
-
msgstr "
|
1160 |
|
1161 |
-
#:
|
1162 |
-
msgid "
|
1163 |
-
msgstr "
|
1164 |
|
1165 |
-
#:
|
1166 |
-
msgid "
|
1167 |
-
msgstr "
|
1168 |
|
1169 |
-
#:
|
1170 |
-
msgid "
|
1171 |
-
msgstr "
|
1172 |
|
1173 |
-
#:
|
1174 |
-
msgid "
|
1175 |
-
msgstr "
|
1176 |
|
1177 |
-
#:
|
1178 |
-
msgid "
|
1179 |
-
msgstr "
|
1180 |
|
1181 |
-
#:
|
1182 |
-
|
1183 |
-
|
1184 |
-
msgid "Reports"
|
1185 |
-
msgstr "Informes"
|
1186 |
|
1187 |
-
#:
|
1188 |
-
msgid ""
|
1189 |
-
|
1190 |
-
"href=\"%s\">Provide a valid API key.</a>"
|
1191 |
-
msgstr "Sisplau, assegura't que el plugin està connectat a MailChimp. <a href=\"%s\">Proporciona una clau d'API vàlida.</a>"
|
1192 |
|
1193 |
-
#:
|
1194 |
-
|
1195 |
-
|
1196 |
-
|
1197 |
-
|
|
|
1198 |
|
1199 |
-
#:
|
1200 |
-
msgid ""
|
1201 |
-
"
|
1202 |
-
"settings you set in the Lite version, you can safely <a "
|
1203 |
-
"href=\"%s\">deactivate it now</a>."
|
1204 |
-
msgstr "<strong>Benvingut a MailChimp per a WordPress Pro!</ Strong> Hem transferit la configuració de la versió Lite, i la pots desactivar de manera segura <a href=\"%s\">ara</a>."
|
1205 |
|
1206 |
-
#:
|
1207 |
-
msgid "
|
1208 |
-
msgstr "
|
1209 |
|
1210 |
-
#:
|
1211 |
-
msgid ""
|
1212 |
-
|
1213 |
-
" stylesheet or use a plugin like <em>%s</em>."
|
1214 |
-
msgstr "No s'ha pogut crear el full d'estils. Afegeix manualment el CSS generat al full d'estils del teu tema o fes servir plugins com ara <em>%s</em>."
|
1215 |
|
1216 |
-
#:
|
1217 |
-
msgid "
|
1218 |
-
msgstr "
|
1219 |
|
1220 |
-
#:
|
1221 |
-
msgid "
|
1222 |
-
msgstr "
|
1223 |
|
1224 |
-
#:
|
1225 |
-
|
1226 |
-
|
|
|
1227 |
|
1228 |
-
#:
|
1229 |
msgid ""
|
1230 |
-
"
|
1231 |
-
"
|
1232 |
-
msgstr "
|
1233 |
-
|
1234 |
-
#: mailchimp-for-wordpress-pro/includes/class-mailchimp.php:140
|
1235 |
-
msgid "IP Address"
|
1236 |
-
msgstr "Adreça IP"
|
1237 |
|
1238 |
-
#:
|
1239 |
-
msgid "
|
1240 |
-
msgstr "
|
1241 |
|
1242 |
-
#:
|
1243 |
-
msgid "
|
1244 |
-
msgstr "
|
1245 |
|
1246 |
-
#:
|
1247 |
-
msgid "
|
1248 |
-
msgstr "
|
1249 |
|
1250 |
-
#:
|
1251 |
-
|
1252 |
-
|
1253 |
-
msgstr "Llista"
|
1254 |
|
1255 |
-
#:
|
1256 |
-
msgid "
|
1257 |
-
msgstr "
|
1258 |
|
1259 |
-
#:
|
1260 |
msgid ""
|
1261 |
-
"
|
1262 |
-
"
|
1263 |
-
"
|
1264 |
-
msgstr "Has habilitat la confirmació de registre per al formulari \"%s\". L'usuari no s'afegirà a les llistes seleccionades de MailChimp fins que confirmi la seva adreça de correu electrònic."
|
1265 |
-
|
1266 |
-
#: mailchimp-for-wordpress-pro/includes/class-subscribe-request.php:277
|
1267 |
-
msgid "This email was auto-sent by the MailChimp for WordPress plugin."
|
1268 |
-
msgstr "Aquest correu ha estat autoenviat pel plugin MailChimp per a WordPress."
|
1269 |
|
1270 |
-
#:
|
1271 |
-
|
1272 |
-
|
|
|
1273 |
|
1274 |
-
#:
|
1275 |
-
msgid "
|
1276 |
-
msgstr "
|
1277 |
|
1278 |
-
#:
|
1279 |
msgid ""
|
1280 |
-
"
|
1281 |
-
"
|
1282 |
-
msgstr "
|
1283 |
|
1284 |
-
#:
|
1285 |
-
msgid "
|
1286 |
-
msgstr "
|
1287 |
|
1288 |
-
#:
|
1289 |
-
msgid "
|
1290 |
-
msgstr "
|
1291 |
|
1292 |
-
#:
|
1293 |
-
msgid "
|
1294 |
-
msgstr "
|
1295 |
|
1296 |
-
#:
|
1297 |
-
msgid ""
|
1298 |
-
|
1299 |
-
"inbox to confirm."
|
1300 |
-
msgstr "Gràcies, la teva sol·licitud de registre s'ha realitzat amb èxit. Sisplau revisa la safata d'entrada del teu correu electrònic."
|
1301 |
|
1302 |
-
#:
|
1303 |
-
msgid "
|
1304 |
-
msgstr "
|
1305 |
|
1306 |
-
#:
|
1307 |
-
msgid ""
|
1308 |
-
"
|
1309 |
-
"able to get %s updates. Please add %s to %s."
|
1310 |
-
msgstr "<b>Avís!</b> Estàs bloquejant les sol·licituds externes el que significa que no podràs obtenir les actualitzacions de %s. Sisplau, afegeix %s per a %s."
|
1311 |
|
1312 |
-
#:
|
1313 |
-
msgid "
|
1314 |
-
msgstr "
|
1315 |
|
1316 |
-
#:
|
1317 |
-
msgid "
|
1318 |
-
msgstr "
|
1319 |
|
1320 |
-
#:
|
1321 |
-
msgid "
|
1322 |
-
msgstr "
|
1323 |
|
1324 |
-
#:
|
1325 |
-
msgid ""
|
1326 |
-
|
1327 |
-
" it?</a>"
|
1328 |
-
msgstr "<a href=\"%s\">La teva llicència expira en %d dies, la vols renovar?</a>"
|
1329 |
|
1330 |
-
#:
|
1331 |
-
msgid ""
|
1332 |
-
|
1333 |
-
"<a href=\"%s\">upgrade your license</a> to use it on this site."
|
1334 |
-
msgstr "Has arribat al límit de les teves activacions. Has de <a href=\"%s\">restablir</a> o <a href=\"%s\">ampliar la teva llicència</a> per usar-la en aquest lloc."
|
1335 |
|
1336 |
-
#:
|
1337 |
msgid ""
|
1338 |
-
"
|
1339 |
-
"
|
1340 |
-
msgstr "
|
1341 |
|
1342 |
-
#:
|
1343 |
-
msgid "
|
1344 |
-
msgstr "
|
1345 |
|
1346 |
-
#:
|
1347 |
-
msgid "
|
1348 |
-
msgstr "
|
1349 |
|
1350 |
-
#:
|
1351 |
-
|
1352 |
-
|
1353 |
-
msgid ""
|
1354 |
-
"Your plugin license has expired. You will no longer have access to plugin "
|
1355 |
-
"updates unless you <a href=\"%s\">renew your license</a>."
|
1356 |
-
msgstr "La teva llicència del plugin ha caducat. No tindràs accés a les actualitzacions del plugin si no <a href=\"%s\">renoves la teva llicència</a>."
|
1357 |
|
1358 |
-
#:
|
1359 |
-
msgid "
|
1360 |
-
msgstr "
|
1361 |
|
1362 |
-
#:
|
1363 |
-
msgid "
|
1364 |
-
|
|
|
|
|
1365 |
|
1366 |
-
#:
|
1367 |
-
msgid "
|
1368 |
-
msgstr "
|
1369 |
|
1370 |
-
#:
|
1371 |
-
msgid ""
|
1372 |
-
"
|
1373 |
-
"the license."
|
1374 |
-
msgstr "%s està activada a la xarxa, sisplau contacta amb l'administrador del lloc per gestionar la llicència."
|
1375 |
|
1376 |
-
#:
|
1377 |
msgid ""
|
1378 |
-
"
|
1379 |
-
|
|
|
1380 |
|
1381 |
-
#:
|
1382 |
-
msgid ""
|
1383 |
-
"
|
1384 |
-
" for future updates. Please activate your site with a valid license key."
|
1385 |
-
msgstr "Aquest lloc no s'ha activat correctament a mc4wp.com i per tant no es pot comprovar si hi ha actualitzacions. Sisplau, activa el teu lloc amb una llicència vàlida."
|
1386 |
|
1387 |
-
#:
|
1388 |
-
msgid "
|
1389 |
-
msgstr "
|
1390 |
|
1391 |
-
#:
|
1392 |
-
msgid "
|
1393 |
-
msgstr "
|
1394 |
|
1395 |
-
#:
|
1396 |
-
msgid "
|
1397 |
-
|
|
|
|
|
1398 |
|
1399 |
-
#:
|
1400 |
-
msgid "
|
1401 |
-
msgstr "
|
1402 |
|
1403 |
-
#:
|
1404 |
-
|
1405 |
-
|
1406 |
-
|
|
|
1407 |
|
1408 |
-
#:
|
1409 |
-
msgid "
|
1410 |
-
msgstr "
|
1411 |
|
1412 |
-
#:
|
1413 |
-
msgid "
|
1414 |
-
msgstr "
|
1415 |
|
1416 |
-
#:
|
1417 |
-
msgid "
|
1418 |
-
msgstr "
|
1419 |
|
1420 |
-
#:
|
1421 |
msgid ""
|
1422 |
-
"
|
1423 |
-
|
|
|
1424 |
|
1425 |
-
#:
|
1426 |
-
msgid "
|
1427 |
-
msgstr "
|
1428 |
|
1429 |
-
#:
|
1430 |
-
msgid "
|
1431 |
-
|
|
|
|
|
1432 |
|
1433 |
-
#:
|
1434 |
-
msgid "
|
1435 |
-
msgstr "
|
1436 |
|
1437 |
-
#:
|
1438 |
-
msgid "
|
1439 |
-
msgstr "
|
1440 |
|
1441 |
-
#:
|
1442 |
-
msgid "
|
1443 |
-
msgstr "
|
1444 |
|
1445 |
-
#:
|
1446 |
-
msgid "
|
1447 |
-
msgstr "
|
1448 |
|
1449 |
-
#:
|
1450 |
-
|
1451 |
-
|
|
|
1452 |
|
1453 |
-
#:
|
1454 |
-
|
1455 |
-
|
1456 |
-
|
1457 |
-
msgstr "
|
1458 |
|
1459 |
-
#:
|
1460 |
-
msgid "
|
1461 |
-
msgstr "
|
1462 |
|
1463 |
-
#:
|
1464 |
-
|
1465 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1466 |
|
1467 |
-
#:
|
1468 |
-
|
1469 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1470 |
|
1471 |
-
#:
|
1472 |
-
#:
|
1473 |
-
msgid "
|
1474 |
-
|
|
|
|
|
1475 |
|
1476 |
-
#:
|
1477 |
-
|
1478 |
-
|
1479 |
-
msgstr "Eliminar"
|
1480 |
|
1481 |
-
#:
|
1482 |
-
|
1483 |
-
|
|
|
|
|
|
|
1484 |
|
1485 |
-
#:
|
1486 |
-
|
1487 |
-
|
|
|
1488 |
|
1489 |
-
#:
|
1490 |
-
#:
|
1491 |
-
msgid "
|
1492 |
-
|
|
|
|
|
1493 |
|
1494 |
-
#:
|
1495 |
-
|
1496 |
-
|
|
|
1497 |
|
1498 |
-
#:
|
1499 |
-
|
1500 |
-
|
|
|
|
|
|
|
1501 |
|
1502 |
-
#:
|
1503 |
-
|
1504 |
-
|
|
|
1505 |
|
1506 |
-
#:
|
1507 |
-
|
1508 |
-
|
1509 |
-
msgstr "Completat"
|
1510 |
|
1511 |
-
#:
|
1512 |
-
msgid "
|
1513 |
-
msgstr "
|
1514 |
|
1515 |
-
#:
|
1516 |
-
msgid "
|
1517 |
-
msgstr "
|
1518 |
|
1519 |
-
#:
|
1520 |
-
msgid "
|
1521 |
-
msgstr "
|
1522 |
|
1523 |
-
#:
|
1524 |
-
msgid "
|
1525 |
-
msgstr "
|
1526 |
|
1527 |
-
#:
|
1528 |
-
msgid "
|
1529 |
-
|
|
|
|
|
1530 |
|
1531 |
-
#:
|
1532 |
-
|
1533 |
-
|
|
|
|
|
|
|
|
|
1534 |
|
1535 |
-
#:
|
1536 |
-
msgid "
|
1537 |
-
msgstr "
|
1538 |
|
1539 |
-
#:
|
1540 |
-
msgid "
|
1541 |
-
msgstr "
|
1542 |
|
1543 |
-
#:
|
1544 |
-
msgid "
|
1545 |
-
|
|
|
1546 |
|
1547 |
-
#:
|
1548 |
-
msgid "
|
1549 |
-
msgstr "
|
1550 |
|
1551 |
-
#:
|
1552 |
-
msgid "
|
1553 |
-
|
|
|
|
|
1554 |
|
1555 |
-
#:
|
1556 |
-
msgid "
|
1557 |
-
msgstr "
|
1558 |
|
1559 |
-
#:
|
1560 |
-
msgid "
|
1561 |
-
|
|
|
|
|
1562 |
|
1563 |
-
#:
|
1564 |
-
msgid "Checkbox"
|
1565 |
-
msgstr "
|
1566 |
|
1567 |
-
#:
|
1568 |
-
|
1569 |
-
|
1570 |
-
msgstr "Ordenar"
|
1571 |
|
1572 |
-
#:
|
1573 |
-
|
1574 |
-
|
1575 |
-
msgstr "Verificar"
|
1576 |
|
1577 |
-
#:
|
1578 |
-
|
1579 |
-
|
1580 |
-
msgstr "Comentar"
|
1581 |
|
1582 |
-
#:
|
1583 |
-
msgid "
|
1584 |
-
msgstr "
|
1585 |
|
1586 |
-
#:
|
1587 |
-
msgid ""
|
1588 |
-
"
|
1589 |
-
"settings</a>. If no setting is specified, the corresponding general setting "
|
1590 |
-
"value will be used."
|
1591 |
-
msgstr "Els ajustos que especifiquis aquí anul·laran la <a href=\"%s\">configuració general dels formularis</a>. Si no especifiques cap valor, s'utilitzarà el valor de la configuració general corresponent."
|
1592 |
-
|
1593 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:25
|
1594 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:45
|
1595 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:64
|
1596 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:83
|
1597 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:106
|
1598 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:124
|
1599 |
-
msgid "Inherit"
|
1600 |
-
msgstr "Heretat"
|
1601 |
-
|
1602 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:137
|
1603 |
-
msgid "Send an email copy of the form data?"
|
1604 |
-
msgstr "Vols una còpia per correu electrònic de les dades del formulari?"
|
1605 |
-
|
1606 |
-
#: mailchimp-for-wordpress-pro/includes/views/metaboxes/optional-form-settings.php:141
|
1607 |
-
msgid ""
|
1608 |
-
"Tick \"yes\" if you want to receive an email with the form data for every "
|
1609 |
-
"sign-up request."
|
1610 |
-
msgstr "Marca \"sí\" si vols rebre un correu electrònic amb les dades del formulari de cada sol·licitud de registre."
|
1611 |
|
1612 |
-
#:
|
1613 |
-
msgid "
|
1614 |
-
msgstr "
|
1615 |
|
1616 |
-
#:
|
1617 |
-
msgid "
|
1618 |
-
msgstr "
|
1619 |
|
1620 |
-
#:
|
1621 |
-
msgid "
|
1622 |
-
|
|
|
|
|
1623 |
|
1624 |
-
#:
|
1625 |
-
msgid "
|
1626 |
-
|
|
|
|
|
|
|
|
|
1627 |
|
1628 |
-
#:
|
1629 |
-
msgid "
|
1630 |
-
msgstr "
|
1631 |
|
1632 |
-
#:
|
1633 |
-
msgid "
|
1634 |
-
msgstr "
|
1635 |
|
1636 |
-
#:
|
1637 |
-
msgid ""
|
1638 |
-
|
1639 |
-
" is sent."
|
1640 |
-
msgstr "Selecciona \"sí\" si vols actualitzar els subscriptors existents amb les dades enviades."
|
1641 |
|
1642 |
-
#:
|
1643 |
msgid ""
|
1644 |
-
"
|
1645 |
-
"
|
1646 |
-
msgstr "
|
1647 |
|
1648 |
-
#:
|
1649 |
-
msgid "
|
1650 |
-
msgstr "
|
1651 |
|
1652 |
-
#:
|
1653 |
-
msgid ""
|
1654 |
-
|
1655 |
-
"fields below."
|
1656 |
-
msgstr "Sobreescriure l'etiqueta de text per defecte de la casella de verificació en qualsevol casella de verificació emprant els camps següents."
|
1657 |
|
1658 |
-
#:
|
1659 |
-
msgid "
|
1660 |
-
msgstr "
|
1661 |
|
1662 |
-
#:
|
1663 |
-
msgid "
|
1664 |
-
msgstr "
|
1665 |
|
1666 |
-
#:
|
1667 |
-
msgid "
|
1668 |
-
msgstr "
|
1669 |
|
1670 |
-
#:
|
1671 |
-
msgid "
|
1672 |
-
msgstr "
|
1673 |
|
1674 |
-
#:
|
1675 |
-
msgid ""
|
1676 |
-
"
|
1677 |
-
"email us directly at <a href=\"%s\">support@mc4wp.com</a>."
|
1678 |
-
msgstr "Necessites ajut? Fes-li una ullada a la <a href=\"%s\">documentació del plugin</a> o envia'ns un correu directe a <a href=\"%s\">support@mc4wp.com</a>."
|
1679 |
|
1680 |
-
#:
|
1681 |
-
msgid ""
|
1682 |
-
|
1683 |
-
msgstr "Sisplau, utilitza la mateixa adreça de correu que vas emprar quan vas adquirir el plugin."
|
1684 |
|
1685 |
-
#:
|
1686 |
-
msgid "
|
1687 |
-
msgstr "
|
1688 |
|
1689 |
-
#:
|
1690 |
-
msgid ""
|
1691 |
-
|
1692 |
-
"href=\"%s\">creating an inline form</a> or <a href=\"%s\">styling your "
|
1693 |
-
"form</a> in general."
|
1694 |
-
msgstr "Recomanació: fes un cop d'ull en el nostre <a href=\"%s\">repertori de coneixements</a> als articles sobre com <a href=\"%s\">crear un formulari en files</a> o <a href = \"% s\">donar-li estil al teu formulari</a> en general."
|
1695 |
|
1696 |
-
#:
|
1697 |
msgid ""
|
1698 |
-
"
|
1699 |
-
"
|
1700 |
-
"
|
1701 |
-
msgstr "En aquest moment el full d'estils personalitzats no està carregat. Per aplicar aquests estils al teu lloc web, selecciona \"carregar estils personalitzats de formulari\" als <a href=\"%s\">ajustos de formulari de MailChimp per a WordPress</a>."
|
1702 |
-
|
1703 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:30
|
1704 |
-
msgid "Select form to build styles for:"
|
1705 |
-
msgstr "Selecciona el formulari al qual vols aplicar els estils:"
|
1706 |
-
|
1707 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:41
|
1708 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:285
|
1709 |
-
msgid "Create at least one form first."
|
1710 |
-
msgstr "Primer crea almenys un formulari."
|
1711 |
-
|
1712 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:57
|
1713 |
-
msgid "You need to have JavaScript enabled to see a preview of your form."
|
1714 |
-
msgstr "Necessites tenir habilitat el JavaScript per a previsualitzar el teu formulari:"
|
1715 |
-
|
1716 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:62
|
1717 |
-
msgid "Form container style"
|
1718 |
-
msgstr "Estil del contenidor del formulari"
|
1719 |
-
|
1720 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:66
|
1721 |
-
msgid "Form width"
|
1722 |
-
msgstr "Amplada del formulari"
|
1723 |
-
|
1724 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:66
|
1725 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:118
|
1726 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:160
|
1727 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:202
|
1728 |
-
msgid "px or %"
|
1729 |
-
msgstr "px o %"
|
1730 |
-
|
1731 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:70
|
1732 |
-
msgid "Text alignment"
|
1733 |
-
msgstr "Alineació del text"
|
1734 |
-
|
1735 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:73
|
1736 |
-
msgid "Choose alignment"
|
1737 |
-
msgstr "Escull alineació"
|
1738 |
-
|
1739 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:74
|
1740 |
-
msgid "Left"
|
1741 |
-
msgstr "Esquerra"
|
1742 |
-
|
1743 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:75
|
1744 |
-
msgid "Center"
|
1745 |
-
msgstr "Centre"
|
1746 |
-
|
1747 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:76
|
1748 |
-
msgid "Right"
|
1749 |
-
msgstr "Dreta"
|
1750 |
-
|
1751 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:81
|
1752 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:210
|
1753 |
-
msgid "Background color"
|
1754 |
-
msgstr "Color del fons"
|
1755 |
-
|
1756 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:83
|
1757 |
-
msgid "Padding"
|
1758 |
-
msgstr "Farcit (padding)"
|
1759 |
-
|
1760 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:89
|
1761 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:168
|
1762 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:219
|
1763 |
-
msgid "Border color"
|
1764 |
-
msgstr "Color de vora (border)"
|
1765 |
-
|
1766 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:91
|
1767 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:170
|
1768 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:215
|
1769 |
-
msgid "Border width"
|
1770 |
-
msgstr "Amplada de vora (border)"
|
1771 |
-
|
1772 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:95
|
1773 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:126
|
1774 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:228
|
1775 |
-
msgid "Text color"
|
1776 |
-
msgstr "Color del text"
|
1777 |
-
|
1778 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:97
|
1779 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:128
|
1780 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:230
|
1781 |
-
msgid "Text size"
|
1782 |
-
msgstr "Mida del text"
|
1783 |
-
|
1784 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:101
|
1785 |
-
msgid "Background image"
|
1786 |
-
msgstr "Imatge de fons"
|
1787 |
-
|
1788 |
-
#: mailchimp-for-wordpress-pro/includes/views/tabs/admin-forms-css-builder.php:114
|
1789 |
-
msgid "Label styles"
|
1790 |
|