Version Description
Download this release
Release Info
Developer | DvanKooten |
Plugin | MailChimp for WordPress |
Version | 4.1.4 |
Comparing to | |
See all releases |
Code changes from version 4.1.3 to 4.1.4
- CHANGELOG.md +11 -2
- assets/js/forms-api.js +1 -1
- assets/js/forms-api.min.js +1 -1
- assets/js/forms-api.min.js.map +1 -1
- includes/admin/class-admin-texts.php +1 -1
- includes/admin/class-admin.php +1 -1
- includes/admin/class-ads.php +9 -9
- includes/admin/class-review-notice.php +0 -1
- includes/api/class-api.php +1 -1
- includes/forms/views/parts/dynamic-content-tags.php +1 -1
- includes/forms/views/tabs/form-settings.php +1 -1
- includes/integrations/views/integration-settings.php +2 -2
- includes/views/other-settings.php +2 -2
- includes/views/parts/admin-sidebar.php +1 -2
- integrations/wp-registration-form/class-registration-form.php +1 -0
- languages/mailchimp-for-wp-fa_IR.mo +0 -0
- languages/mailchimp-for-wp-fa_IR.po +717 -503
- languages/mailchimp-for-wp-fr_FR.mo +0 -0
- languages/mailchimp-for-wp-fr_FR.po +13 -12
- languages/mailchimp-for-wp-it_IT.mo +0 -0
- languages/mailchimp-for-wp-it_IT.po +42 -41
- languages/mailchimp-for-wp-pt_BR.mo +0 -0
- languages/mailchimp-for-wp-pt_BR.po +94 -94
- languages/mailchimp-for-wp.pot +2 -6
- mailchimp-for-wp.php +2 -2
- readme.txt +12 -3
- vendor/autoload_52.php +1 -1
- vendor/composer/autoload_real_52.php +3 -3
CHANGELOG.md
CHANGED
@@ -1,6 +1,15 @@
|
|
1 |
Changelog
|
2 |
=========
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
#### 4.1.3 - May 24, 2017
|
5 |
|
6 |
**Improvements**
|
@@ -116,7 +125,7 @@ Changelog
|
|
116 |
|
117 |
**Additions**
|
118 |
|
119 |
-
- Add `data-hide-if` attribute logic to forms. See [conditionally hide form fields](https://mc4wp.com/
|
120 |
- Add hooks for delayed BuddyPress sign-up. Thanks to [Christian Wach](https://profiles.wordpress.org/needle).
|
121 |
|
122 |
|
@@ -554,7 +563,7 @@ Added `mc4wp_use_sslverify` filter to disable or explicitly enable SSL certifica
|
|
554 |
|
555 |
**Improvements**
|
556 |
|
557 |
-
- Add form-specific classes to preview form element. This allows the [Styles Builder](https://mc4wp.com/features/) to work with the Form Preview.
|
558 |
- Form events are now triggered _after_ the page has finished loading, so all scripts are loaded & ready to use.
|
559 |
- Reset background-color in Form Themes stylesheets.
|
560 |
|
1 |
Changelog
|
2 |
=========
|
3 |
|
4 |
+
#### 4.1.4 - June 15, 2017
|
5 |
+
|
6 |
+
**Fixes**
|
7 |
+
|
8 |
+
- Some form specific JS events were not firing due to incorrect event names.
|
9 |
+
- Registration form integration now works with WooCommerce registration form.
|
10 |
+
- Notice that asks for a plugin review would re-appear after dismissing it.
|
11 |
+
|
12 |
+
|
13 |
#### 4.1.3 - May 24, 2017
|
14 |
|
15 |
**Improvements**
|
125 |
|
126 |
**Additions**
|
127 |
|
128 |
+
- Add `data-hide-if` attribute logic to forms. See [conditionally hide form fields](https://kb.mc4wp.com/conditional-fields-elements/). Thanks to [Kurt Zenisek](http://kurtzenisek.com/).
|
129 |
- Add hooks for delayed BuddyPress sign-up. Thanks to [Christian Wach](https://profiles.wordpress.org/needle).
|
130 |
|
131 |
|
563 |
|
564 |
**Improvements**
|
565 |
|
566 |
+
- Add form-specific classes to preview form element. This allows the [Styles Builder](https://mc4wp.com/premium-features/) to work with the Form Preview.
|
567 |
- Form events are now triggered _after_ the page has finished loading, so all scripts are loaded & ready to use.
|
568 |
- Reset background-color in Form Themes stylesheets.
|
569 |
|
assets/js/forms-api.js
CHANGED
@@ -50,7 +50,7 @@ function handleFormRequest(form, action, errors, data) {
|
|
50 |
} else {
|
51 |
// form was successfully submitted
|
52 |
forms.trigger('success', [form, data]);
|
53 |
-
forms.trigger(form.id + '
|
54 |
|
55 |
// subscribed / unsubscribed
|
56 |
forms.trigger(action + "d", [form, data]);
|
50 |
} else {
|
51 |
// form was successfully submitted
|
52 |
forms.trigger('success', [form, data]);
|
53 |
+
forms.trigger(form.id + '.success', [form, data]);
|
54 |
|
55 |
// subscribed / unsubscribed
|
56 |
forms.trigger(action + "d", [form, data]);
|
assets/js/forms-api.min.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
!function(){var e=void 0,t=void 0;!function t(n,r,i){function o(a,c){if(!r[a]){if(!n[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:{}};n[a][0].call(l.exports,function(e){var t=n[a][1][e];return o(t||e)},l,l.exports,t,n,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){var t="animated"===u.auto_scroll,n={behavior:t?"smooth":"instant"};e.element.scrollIntoView(n)}function i(e,t,n){return function(){var r=this.value.trim(),i="radio"!==this.getAttribute("type")&&"checked"!==this.getAttribute("type")||this.checked,o=i&&(r===t&&""!==t||""===t&&r.length>0);e.style.display=n?o?"":"none":o?"none":""}}function o(){var e=this,t=e.form.querySelectorAll("[data-show-if], [data-hide-if]"),n=(e.getAttribute("name")||"").toLowerCase();[].forEach.call(t,function(t){var r=!!t.getAttribute("data-show-if"),o=r?t.getAttribute("data-show-if").split(":"):t.getAttribute("data-hide-if").split(":"),s=o[0],a=o[1]||"";if(n===s.toLowerCase()){i(t,a,r).call(e)}})}var s=window.mc4wp||{},a=e("gator"),c=e("./forms/forms.js"),u=window.mc4wp_forms_config||{};if(a(document.body).on("keyup",".mc4wp-form input, .mc4wp-form textarea, .mc4wp-form select",o),a(document.body).on("change",".mc4wp-form input, .mc4wp-form textarea, .mc4wp-form select",o),window.addEventListener("load",function(){[].forEach.call(document.querySelectorAll(".mc4wp-form input, .mc4wp-form textarea, .mc4wp-form select"),function(e){o.call(e)})}),a(document.body).on("submit",".mc4wp-form",function(e){var t=c.getByElement(e.target||e.srcElement);c.trigger("submit",[t,e]),c.trigger(t.id+".submit",[t,e])}),a(document.body).on("focus",".mc4wp-form",function(e){var t=c.getByElement(e.target||e.srcElement);t.started||(c.trigger("started",[t,e]),c.trigger(t.id+".started",[t,e]),t.started=!0)}),a(document.body).on("change",".mc4wp-form",function(e){var t=c.getByElement(e.target||e.srcElement);c.trigger("change",[t,e]),c.trigger(t.id+".change",[t,e])}),s.listeners){for(var f=s.listeners,l=0;l<f.length;l++)c.on(f[l].event,f[l].callback);delete s.listeners}if(s.forms=c,u.submitted_form){var h=u.submitted_form,d=document.getElementById(h.element_id),m=c.getByElement(d);!function(e,t,n,i){var o=document.body.clientHeight,s=Date.now();n&&e.setData(i),u.auto_scroll&&r(e),window.addEventListener("load",function(){var a=Date.now()-s;u.auto_scroll&&a<800&&document.body.clientHeight!=o&&r(e),c.trigger("submitted",[e]),c.trigger(e.id+".submitted",[e]),n?(c.trigger("error",[e,n]),c.trigger(e.id+".error",[e,n])):(c.trigger("success",[e,i]),c.trigger(e.id+",success",[e,i]),c.trigger(t+"d",[e,i]),c.trigger(e.id+"."+t+"d",[e,i]))})}(m,h.action,h.errors,h.data)}window.mc4wp=s},{"./forms/forms.js":3,gator:5}],2:[function(e,t,n){"use strict";var r=e("form-serialize"),i=e("populate.js"),o=function(e,t){this.id=e,this.element=t||document.createElement("form"),this.name=this.element.getAttribute("data-name")||"Form #"+this.id,this.errors=[],this.started=!1};o.prototype.setData=function(e){try{i(this.element,e)}catch(e){console.error(e)}},o.prototype.getData=function(){return r(this.element,{hash:!0})},o.prototype.getSerializedData=function(){return r(this.element)},o.prototype.setResponse=function(e){this.element.querySelector(".mc4wp-response").innerHTML=e},o.prototype.reset=function(){this.setResponse(""),this.element.querySelector(".mc4wp-form-fields").style.display="",this.element.reset()},t.exports=o},{"form-serialize":4,"populate.js":6}],3:[function(e,t,n){"use strict";function r(e){for(var t=0;t<f.length;t++)if(f[t].id==e)return f[t];return o(document.querySelector(".mc4wp-form-"+e),e)}function i(e){for(var t=e.form||e,n=0;n<f.length;n++)if(f[n].element==t)return f[n];return o(t)}function o(e,t){t=t||parseInt(e.getAttribute("data-id"))||0;var n=new c(t,e);return f.push(n),n}function s(){return f}var a=e("wolfy87-eventemitter"),c=e("./form.js"),u=new a,f=[];t.exports={all:s,get:r,getByElement:i,on:u.on.bind(u),trigger:u.trigger.bind(u),off:u.off.bind(u)}},{"./form.js":2,"wolfy87-eventemitter":7}],4:[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=+s;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){if(t.match(f))o(e,i(t),n);else{var r=e[t];r?(Array.isArray(r)||(e[t]=[r]),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},{}],5:[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=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))&&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;c<=l;c++)if(a[c])for(f=0;f<a[c].length;f++){if(!1===a[c][f].call(a[c].match,t))return void u.cancel(t);if(t.cancelBubble)return}}}function c(e,t,n,r){if(this.element){e instanceof Array||(e=[e]),n||"function"!=typeof t||(n=t,t="_root");var i,c=this.id;for(i=0;i<e.length;i++)r?s(this,e[i],t,n):(d[c]&&d[c][e[i]]||u.addEvent(this,e[i],function(e){return function(t){a(c,t,e)}}(e[i])),o(this,e[i],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},void 0!==t&&t.exports&&(t.exports=u),window.Gator=u}()},{}],6:[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(void 0===s&&(s=""),null===s&&(s=""),void 0!==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;break;case"date":a.value=new Date(s).toISOString().split("T")[0]}}}};"function"==typeof t&&"object"==typeof t.amd&&t.amd?t(function(){return r}):void 0!==n&&n.exports?n.exports=r:e.populate=r}(this)},{}],7:[function(e,n,r){!function(e){"use strict";function r(){}function i(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function o(e){return function(){return this[e].apply(this,arguments)}}function s(e){return"function"==typeof e||e instanceof RegExp||!(!e||"object"!=typeof e)&&s(e.listener)}var a=r.prototype,c=e.EventEmitter;a.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},a.flattenListeners=function(e){var t,n=[];for(t=0;t<e.length;t+=1)n.push(e[t].listener);return n},a.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},a.addListener=function(e,t){if(!s(t))throw new TypeError("listener must be a function");var n,r=this.getListenersAsObject(e),o="object"==typeof t;for(n in r)r.hasOwnProperty(n)&&-1===i(r[n],t)&&r[n].push(o?t:{listener:t,once:!1});return this},a.on=o("addListener"),a.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},a.once=o("addOnceListener"),a.defineEvent=function(e){return this.getListeners(e),this},a.defineEvents=function(e){for(var t=0;t<e.length;t+=1)this.defineEvent(e[t]);return this},a.removeListener=function(e,t){var n,r,o=this.getListenersAsObject(e);for(r in o)o.hasOwnProperty(r)&&-1!==(n=i(o[r],t))&&o[r].splice(n,1);return this},a.off=o("removeListener"),a.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},a.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},a.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},a.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},a.removeAllListeners=o("removeEvent"),a.emitEvent=function(e,t){var n,r,i,o,s=this.getListenersAsObject(e);for(o in s)if(s.hasOwnProperty(o))for(n=s[o].slice(0),i=0;i<n.length;i++)r=n[i],!0===r.once&&this.removeListener(e,r.listener),r.listener.apply(this,t||[])===this._getOnceReturnValue()&&this.removeListener(e,r.listener);return this},a.trigger=o("emitEvent"),a.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},a.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},a._getOnceReturnValue=function(){return!this.hasOwnProperty("_onceReturnValue")||this._onceReturnValue},a._getEvents=function(){return this._events||(this._events={})},r.noConflict=function(){return e.EventEmitter=c,r},"function"==typeof t&&t.amd?t(function(){return r}):"object"==typeof n&&n.exports?n.exports=r:e.EventEmitter=r}(this||{})},{}]},{},[1])}();
|
2 |
//# sourceMappingURL=forms-api.min.js.map
|
1 |
+
!function(){var e=void 0,t=void 0;!function t(n,r,i){function o(a,c){if(!r[a]){if(!n[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:{}};n[a][0].call(l.exports,function(e){var t=n[a][1][e];return o(t||e)},l,l.exports,t,n,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){var t="animated"===u.auto_scroll,n={behavior:t?"smooth":"instant"};e.element.scrollIntoView(n)}function i(e,t,n){return function(){var r=this.value.trim(),i="radio"!==this.getAttribute("type")&&"checked"!==this.getAttribute("type")||this.checked,o=i&&(r===t&&""!==t||""===t&&r.length>0);e.style.display=n?o?"":"none":o?"none":""}}function o(){var e=this,t=e.form.querySelectorAll("[data-show-if], [data-hide-if]"),n=(e.getAttribute("name")||"").toLowerCase();[].forEach.call(t,function(t){var r=!!t.getAttribute("data-show-if"),o=r?t.getAttribute("data-show-if").split(":"):t.getAttribute("data-hide-if").split(":"),s=o[0],a=o[1]||"";if(n===s.toLowerCase()){i(t,a,r).call(e)}})}var s=window.mc4wp||{},a=e("gator"),c=e("./forms/forms.js"),u=window.mc4wp_forms_config||{};if(a(document.body).on("keyup",".mc4wp-form input, .mc4wp-form textarea, .mc4wp-form select",o),a(document.body).on("change",".mc4wp-form input, .mc4wp-form textarea, .mc4wp-form select",o),window.addEventListener("load",function(){[].forEach.call(document.querySelectorAll(".mc4wp-form input, .mc4wp-form textarea, .mc4wp-form select"),function(e){o.call(e)})}),a(document.body).on("submit",".mc4wp-form",function(e){var t=c.getByElement(e.target||e.srcElement);c.trigger("submit",[t,e]),c.trigger(t.id+".submit",[t,e])}),a(document.body).on("focus",".mc4wp-form",function(e){var t=c.getByElement(e.target||e.srcElement);t.started||(c.trigger("started",[t,e]),c.trigger(t.id+".started",[t,e]),t.started=!0)}),a(document.body).on("change",".mc4wp-form",function(e){var t=c.getByElement(e.target||e.srcElement);c.trigger("change",[t,e]),c.trigger(t.id+".change",[t,e])}),s.listeners){for(var f=s.listeners,l=0;l<f.length;l++)c.on(f[l].event,f[l].callback);delete s.listeners}if(s.forms=c,u.submitted_form){var h=u.submitted_form,d=document.getElementById(h.element_id),m=c.getByElement(d);!function(e,t,n,i){var o=document.body.clientHeight,s=Date.now();n&&e.setData(i),u.auto_scroll&&r(e),window.addEventListener("load",function(){var a=Date.now()-s;u.auto_scroll&&a<800&&document.body.clientHeight!=o&&r(e),c.trigger("submitted",[e]),c.trigger(e.id+".submitted",[e]),n?(c.trigger("error",[e,n]),c.trigger(e.id+".error",[e,n])):(c.trigger("success",[e,i]),c.trigger(e.id+".success",[e,i]),c.trigger(t+"d",[e,i]),c.trigger(e.id+"."+t+"d",[e,i]))})}(m,h.action,h.errors,h.data)}window.mc4wp=s},{"./forms/forms.js":3,gator:5}],2:[function(e,t,n){"use strict";var r=e("form-serialize"),i=e("populate.js"),o=function(e,t){this.id=e,this.element=t||document.createElement("form"),this.name=this.element.getAttribute("data-name")||"Form #"+this.id,this.errors=[],this.started=!1};o.prototype.setData=function(e){try{i(this.element,e)}catch(e){console.error(e)}},o.prototype.getData=function(){return r(this.element,{hash:!0})},o.prototype.getSerializedData=function(){return r(this.element)},o.prototype.setResponse=function(e){this.element.querySelector(".mc4wp-response").innerHTML=e},o.prototype.reset=function(){this.setResponse(""),this.element.querySelector(".mc4wp-form-fields").style.display="",this.element.reset()},t.exports=o},{"form-serialize":4,"populate.js":6}],3:[function(e,t,n){"use strict";function r(e){for(var t=0;t<f.length;t++)if(f[t].id==e)return f[t];return o(document.querySelector(".mc4wp-form-"+e),e)}function i(e){for(var t=e.form||e,n=0;n<f.length;n++)if(f[n].element==t)return f[n];return o(t)}function o(e,t){t=t||parseInt(e.getAttribute("data-id"))||0;var n=new c(t,e);return f.push(n),n}function s(){return f}var a=e("wolfy87-eventemitter"),c=e("./form.js"),u=new a,f=[];t.exports={all:s,get:r,getByElement:i,on:u.on.bind(u),trigger:u.trigger.bind(u),off:u.off.bind(u)}},{"./form.js":2,"wolfy87-eventemitter":7}],4:[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=+s;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){if(t.match(f))o(e,i(t),n);else{var r=e[t];r?(Array.isArray(r)||(e[t]=[r]),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},{}],5:[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=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))&&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;c<=l;c++)if(a[c])for(f=0;f<a[c].length;f++){if(!1===a[c][f].call(a[c].match,t))return void u.cancel(t);if(t.cancelBubble)return}}}function c(e,t,n,r){if(this.element){e instanceof Array||(e=[e]),n||"function"!=typeof t||(n=t,t="_root");var i,c=this.id;for(i=0;i<e.length;i++)r?s(this,e[i],t,n):(d[c]&&d[c][e[i]]||u.addEvent(this,e[i],function(e){return function(t){a(c,t,e)}}(e[i])),o(this,e[i],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},void 0!==t&&t.exports&&(t.exports=u),window.Gator=u}()},{}],6:[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(void 0===s&&(s=""),null===s&&(s=""),void 0!==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;break;case"date":a.value=new Date(s).toISOString().split("T")[0]}}}};"function"==typeof t&&"object"==typeof t.amd&&t.amd?t(function(){return r}):void 0!==n&&n.exports?n.exports=r:e.populate=r}(this)},{}],7:[function(e,n,r){!function(e){"use strict";function r(){}function i(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function o(e){return function(){return this[e].apply(this,arguments)}}function s(e){return"function"==typeof e||e instanceof RegExp||!(!e||"object"!=typeof e)&&s(e.listener)}var a=r.prototype,c=e.EventEmitter;a.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},a.flattenListeners=function(e){var t,n=[];for(t=0;t<e.length;t+=1)n.push(e[t].listener);return n},a.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},a.addListener=function(e,t){if(!s(t))throw new TypeError("listener must be a function");var n,r=this.getListenersAsObject(e),o="object"==typeof t;for(n in r)r.hasOwnProperty(n)&&-1===i(r[n],t)&&r[n].push(o?t:{listener:t,once:!1});return this},a.on=o("addListener"),a.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},a.once=o("addOnceListener"),a.defineEvent=function(e){return this.getListeners(e),this},a.defineEvents=function(e){for(var t=0;t<e.length;t+=1)this.defineEvent(e[t]);return this},a.removeListener=function(e,t){var n,r,o=this.getListenersAsObject(e);for(r in o)o.hasOwnProperty(r)&&-1!==(n=i(o[r],t))&&o[r].splice(n,1);return this},a.off=o("removeListener"),a.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},a.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},a.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},a.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},a.removeAllListeners=o("removeEvent"),a.emitEvent=function(e,t){var n,r,i,o,s=this.getListenersAsObject(e);for(o in s)if(s.hasOwnProperty(o))for(n=s[o].slice(0),i=0;i<n.length;i++)r=n[i],!0===r.once&&this.removeListener(e,r.listener),r.listener.apply(this,t||[])===this._getOnceReturnValue()&&this.removeListener(e,r.listener);return this},a.trigger=o("emitEvent"),a.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},a.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},a._getOnceReturnValue=function(){return!this.hasOwnProperty("_onceReturnValue")||this._onceReturnValue},a._getEvents=function(){return this._events||(this._events={})},r.noConflict=function(){return e.EventEmitter=c,r},"function"==typeof t&&t.amd?t(function(){return r}):"object"==typeof n&&n.exports?n.exports=r:e.EventEmitter=r}(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","scrollToForm","form","animate","config","auto_scroll","args","behavior","element","scrollIntoView","toggleElement","el","expectedValue","show","value","this","trim","checked","getAttribute","conditionMet","style","display","toggleConditionalElements","input","elements","querySelectorAll","inputName","toLowerCase","forEach","conditions","split","nameCondition","valueCondition","mc4wp","window","Gator","forms","mc4wp_forms_config","document","body","on","addEventListener","event","getByElement","target","srcElement","trigger","id","started","listeners","callback","submitted_form","formConfig","getElementById","element_id","action","errors","data","pageHeight","clientHeight","timeStart","Date","now","setData","timeElapsed","./forms/forms.js","gator","2","serialize","populate","Form","createElement","name","prototype","console","error","getData","hash","getSerializedData","setResponse","msg","querySelector","innerHTML","reset","form-serialize","populate.js","3","get","formId","createFromElement","formElement","parseInt","push","all","EventEmitter","events","bind","off","./form.js","wolfy87-eventemitter","4","options","result","serializer","hash_serializer","str_serialize","radio_store","Object","create","disabled","k_r_success_contrls","test","nodeName","k_r_submitter","type","key","val","empty","selectOptions","isSelectedOptions","j","option","allowedEmpty","hasValue","selected","slice","parse_keys","string","keys","prefix","children","RegExp","brackets","match","exec","hash_assign","shift","between","Array","isArray","_values","index","isNaN","existing","replace","encodeURIComponent","5","_addEvent","useCapture","_cancel","preventDefault","stopPropagation","_getMatcher","_matcher","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","matchesSelector","_matchesSelector","selector","boundElement","parentNode","_level","_addHandler","_handlers","_removeHandler","splice","hasOwnProperty","_handleEvent","_gatorInstances","matchesEvent","cancelBubble","cancel","_bind","remove","addEvent","_id","6","root","basename","constructor","namedItem","indexOf","values","k","toString","toISOString","amd","7","indexOfListener","listener","alias","apply","arguments","isValidListener","proto","originalGlobalValue","getListeners","evt","response","_getEvents","flattenListeners","flatListeners","getListenersAsObject","addListener","TypeError","listenerIsWrapped","once","addOnceListener","defineEvent","defineEvents","evts","removeListener","addListeners","manipulateListeners","removeListeners","single","multiple","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\n// deps & vars\n\nvar mc4wp = window.mc4wp || {};\nvar Gator = require('gator');\nvar forms = require('./forms/forms.js');\nvar config = window.mc4wp_forms_config || {};\n\n// funcs\nfunction scrollToForm(form) {\n\tvar animate = config.auto_scroll === 'animated';\n\tvar args = {\n\t\tbehavior: animate ? \"smooth\" : \"instant\"\n\t};\n\tform.element.scrollIntoView(args);\n}\n\nfunction handleFormRequest(form, action, errors, data) {\n\tvar pageHeight = document.body.clientHeight;\n\tvar timeStart = Date.now();\n\n\t// re-populate form\n\tif (errors) {\n\t\tform.setData(data);\n\t}\n\n\tif (config.auto_scroll) {\n\t\tscrollToForm(form);\n\t}\n\n\t// trigger events on window.load so all other scripts have loaded\n\twindow.addEventListener('load', function () {\n\t\tvar timeElapsed = Date.now() - timeStart;\n\n\t\t// scroll to form again if page height changed since last scroll\n\t\t// (only if load didn't take more than 0.8 seconds to prevent overtaking user scroll)\n\t\tif (config.auto_scroll && timeElapsed < 800 && document.body.clientHeight != pageHeight) {\n\t\t\tscrollToForm(form);\n\t\t}\n\n\t\t// trigger events\n\t\tforms.trigger('submitted', [form]);\n\t\tforms.trigger(form.id + '.submitted', [form]);\n\n\t\tif (errors) {\n\t\t\tforms.trigger('error', [form, errors]);\n\t\t\tforms.trigger(form.id + '.error', [form, errors]);\n\t\t} else {\n\t\t\t// form was successfully submitted\n\t\t\tforms.trigger('success', [form, data]);\n\t\t\tforms.trigger(form.id + ',success', [form, data]);\n\n\t\t\t// subscribed / unsubscribed\n\t\t\tforms.trigger(action + \"d\", [form, data]);\n\t\t\tforms.trigger(form.id + \".\" + action + \"d\", [form, data]);\n\t\t}\n\t});\n}\n\nfunction toggleElement(el, expectedValue, show) {\n\treturn function () {\n\t\tvar value = this.value.trim();\n\t\tvar checked = this.getAttribute('type') !== 'radio' && this.getAttribute('type') !== 'checked' || this.checked;\n\t\tvar conditionMet = checked && (value === expectedValue && expectedValue !== \"\" || expectedValue === \"\" && value.length > 0);\n\t\tif (show) {\n\t\t\tel.style.display = conditionMet ? '' : 'none';\n\t\t} else {\n\t\t\tel.style.display = conditionMet ? 'none' : '';\n\t\t}\n\t};\n}\n\nfunction toggleConditionalElements() {\n\tvar input = this;\n\tvar elements = input.form.querySelectorAll('[data-show-if], [data-hide-if]');\n\tvar inputName = (input.getAttribute('name') || '').toLowerCase();\n\n\t[].forEach.call(elements, function (el) {\n\t\tvar show = !!el.getAttribute('data-show-if');\n\t\tvar conditions = show ? el.getAttribute('data-show-if').split(':') : el.getAttribute('data-hide-if').split(':');\n\t\tvar nameCondition = conditions[0];\n\t\tvar valueCondition = conditions[1] || \"\";\n\n\t\tif (inputName !== nameCondition.toLowerCase()) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar callback = toggleElement(el, valueCondition, show);\n\t\tcallback.call(input);\n\t});\n}\n\nGator(document.body).on('keyup', '.mc4wp-form input, .mc4wp-form textarea, .mc4wp-form select', toggleConditionalElements);\nGator(document.body).on('change', '.mc4wp-form input, .mc4wp-form textarea, .mc4wp-form select', toggleConditionalElements);\nwindow.addEventListener('load', function () {\n\t[].forEach.call(document.querySelectorAll('.mc4wp-form input, .mc4wp-form textarea, .mc4wp-form select'), function (el) {\n\t\ttoggleConditionalElements.call(el);\n\t});\n});\n\n// Bind browser events to form events (using delegation)\nGator(document.body).on('submit', '.mc4wp-form', function (event) {\n\tvar form = forms.getByElement(event.target || event.srcElement);\n\tforms.trigger('submit', [form, event]);\n\tforms.trigger(form.id + '.submit', [form, event]);\n});\n\nGator(document.body).on('focus', '.mc4wp-form', function (event) {\n\tvar form = forms.getByElement(event.target || event.srcElement);\n\n\tif (!form.started) {\n\t\tforms.trigger('started', [form, event]);\n\t\tforms.trigger(form.id + '.started', [form, event]);\n\t\tform.started = true;\n\t}\n});\n\nGator(document.body).on('change', '.mc4wp-form', function (event) {\n\tvar form = forms.getByElement(event.target || event.srcElement);\n\tforms.trigger('change', [form, event]);\n\tforms.trigger(form.id + '.change', [form, event]);\n});\n\n// register early listeners\nif (mc4wp.listeners) {\n\tvar listeners = mc4wp.listeners;\n\tfor (var i = 0; i < listeners.length; i++) {\n\t\tforms.on(listeners[i].event, listeners[i].callback);\n\t}\n\n\t// delete temp listeners array, so we don't bind twice\n\tdelete mc4wp[\"listeners\"];\n}\n\n// expose forms object\nmc4wp.forms = forms;\n\n// handle submitted form\nif (config.submitted_form) {\n\tvar formConfig = config.submitted_form,\n\t element = document.getElementById(formConfig.element_id),\n\t form = forms.getByElement(element);\n\n\thandleFormRequest(form, formConfig.action, formConfig.errors, formConfig.data);\n}\n\n// expose mc4wp object globally\nwindow.mc4wp = mc4wp;\n\n},{\"./forms/forms.js\":3,\"gator\":5}],2:[function(require,module,exports){\n'use strict';\n\nvar serialize = require('form-serialize');\nvar populate = require('populate.js');\n\nvar Form = function Form(id, element) {\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\nForm.prototype.setData = function (data) {\n\ttry {\n\t\tpopulate(this.element, data);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n};\n\nForm.prototype.getData = function () {\n\treturn serialize(this.element, { hash: true });\n};\n\nForm.prototype.getSerializedData = function () {\n\treturn serialize(this.element);\n};\n\nForm.prototype.setResponse = function (msg) {\n\tthis.element.querySelector('.mc4wp-response').innerHTML = msg;\n};\n\n// revert back to original state\nForm.prototype.reset = function () {\n\tthis.setResponse('');\n\tthis.element.querySelector('.mc4wp-form-fields').style.display = '';\n\tthis.element.reset();\n};\n\nmodule.exports = Form;\n\n},{\"form-serialize\":4,\"populate.js\":6}],3:[function(require,module,exports){\n'use strict';\n\n// deps\n\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\nmodule.exports = {\n\t\"all\": all,\n\t\"get\": get,\n\t\"getByElement\": getByElement,\n\t\"on\": events.on.bind(events),\n\t\"trigger\": events.trigger.bind(events),\n\t\"off\": events.off.bind(events)\n};\n\n},{\"./form.js\":2,\"wolfy87-eventemitter\":7}],4:[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 if (typeof options != 'object') {\n options = { hash: !!options };\n }\n else if (options.hash === undefined) {\n options.hash = true;\n }\n\n var result = (options.hash) ? {} : '';\n var serializer = options.serializer || ((options.hash) ? hash_serializer : str_serialize);\n\n var elements = form && form.elements ? form.elements : [];\n\n //Object store each radio and set if it's empty or not\n var radio_store = Object.create(null);\n\n for (var i=0 ; i<elements.length ; ++i) {\n var element = elements[i];\n\n // ingore disabled fields\n if ((!options.disabled && element.disabled) || !element.name) {\n continue;\n }\n // ignore anyhting that is not considered a success field\n if (!k_r_success_contrls.test(element.nodeName) ||\n k_r_submitter.test(element.type)) {\n continue;\n }\n\n var key = element.name;\n var val = element.value;\n\n // we can't just use element.value for checkboxes cause some browsers lie to us\n // they say \"on\" for value when the box isn't checked\n if ((element.type === 'checkbox' || element.type === 'radio') && !element.checked) {\n val = undefined;\n }\n\n // If we want empty elements\n if (options.empty) {\n // for checkbox\n if (element.type === 'checkbox' && !element.checked) {\n val = '';\n }\n\n // for radio\n if (element.type === 'radio') {\n if (!radio_store[element.name] && !element.checked) {\n radio_store[element.name] = false;\n }\n else if (element.checked) {\n radio_store[element.name] = true;\n }\n }\n\n // if options empty is true, continue only if its radio\n if (!val && element.type == 'radio') {\n continue;\n }\n }\n else {\n // value-less fields are ignored unless options.empty is true\n if (!val) {\n continue;\n }\n }\n\n // multi select boxes\n if (element.type === 'select-multiple') {\n val = [];\n\n var selectOptions = element.options;\n var isSelectedOptions = false;\n for (var j=0 ; j<selectOptions.length ; ++j) {\n var option = selectOptions[j];\n var allowedEmpty = options.empty && !option.value;\n var hasValue = (option.value || allowedEmpty);\n if (option.selected && hasValue) {\n isSelectedOptions = true;\n\n // If using a hash serializer be sure to add the\n // correct notation for an array in the multi-select\n // context. Here the name attribute on the select element\n // might be missing the trailing bracket pair. Both names\n // \"foo\" and \"foo[]\" should be arrays.\n if (options.hash && key.slice(key.length - 2) !== '[]') {\n result = serializer(result, key + '[]', option.value);\n }\n else {\n result = serializer(result, key, option.value);\n }\n }\n }\n\n // Serialize if no selected options and options.empty is true\n if (!isSelectedOptions && options.empty) {\n result = serializer(result, key, '');\n }\n\n continue;\n }\n\n result = serializer(result, key, val);\n }\n\n // Check for all empty radio buttons and serialize them with key=\"\"\n if (options.empty) {\n for (var key in radio_store) {\n if (!radio_store[key]) {\n result = serializer(result, key, '');\n }\n }\n }\n\n return result;\n}\n\nfunction parse_keys(string) {\n var keys = [];\n var prefix = /^([^\\[\\]]*)/;\n var children = new RegExp(brackets);\n var match = prefix.exec(string);\n\n if (match[1]) {\n keys.push(match[1]);\n }\n\n while ((match = children.exec(string)) !== null) {\n keys.push(match[1]);\n }\n\n return keys;\n}\n\nfunction hash_assign(result, keys, value) {\n if (keys.length === 0) {\n result = value;\n return result;\n }\n\n var key = keys.shift();\n var between = key.match(/^\\[(.+?)\\]$/);\n\n if (key === '[]') {\n result = result || [];\n\n if (Array.isArray(result)) {\n result.push(hash_assign(null, keys, value));\n }\n else {\n // This might be the result of bad name attributes like \"[][foo]\",\n // in this case the original `result` object will already be\n // assigned to an object literal. Rather than coerce the object to\n // an array, or cause an exception the attribute \"_values\" is\n // assigned as an array.\n result._values = result._values || [];\n result._values.push(hash_assign(null, keys, value));\n }\n\n return result;\n }\n\n // Key is an attribute name and can be assigned directly.\n if (!between) {\n result[key] = hash_assign(result[key], keys, value);\n }\n else {\n var string = between[1];\n // +var converts the variable into a number\n // better than parseInt because it doesn't truncate away trailing\n // letters and actually fails if whole thing is not a number\n var index = +string;\n\n // If the characters between the brackets is not a number it is an\n // attribute name and can be assigned directly.\n if (isNaN(index)) {\n result = result || {};\n result[string] = hash_assign(result[string], keys, value);\n }\n else {\n result = result || [];\n result[index] = hash_assign(result[index], keys, value);\n }\n }\n\n return result;\n}\n\n// Object/hash encoding serializer.\nfunction hash_serializer(result, key, value) {\n var matches = key.match(brackets);\n\n // Has brackets? Use the recursive assignment function to walk the keys,\n // construct any missing objects in the result tree and make the assignment\n // at the end of the chain.\n if (matches) {\n var keys = parse_keys(key);\n hash_assign(result, keys, value);\n }\n else {\n // Non bracket notation can make assignments directly.\n var existing = result[key];\n\n // If the value has been assigned already (for instance when a radio and\n // a checkbox have the same name attribute) convert the previous value\n // into an array before pushing into it.\n //\n // NOTE: If this requirement were removed all hash creation and\n // assignment could go through `hash_assign`.\n if (existing) {\n if (!Array.isArray(existing)) {\n result[key] = [ existing ];\n }\n\n result[key].push(value);\n }\n else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\n// urlform encoding serializer\nfunction str_serialize(result, key, value) {\n // encode newlines as \\r\\n cause the html spec says so\n value = value.replace(/(\\r)?\\n/g, '\\r\\n');\n value = encodeURIComponent(value);\n\n // spaces should be '+' rather than '%20'.\n value = value.replace(/%20/g, '+');\n return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + value;\n}\n\nmodule.exports = serialize;\n\n},{}],5:[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},{}],6:[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 if ('undefined' === typeof value) {\n value = '';\n }\n\n if (null === value) {\n value = '';\n }\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\t\t\t\tcase 'date':\n \t\t\t\telement.value = new Date(value).toISOString().split('T')[0];\t\n\t\t\t\t\tbreak;\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\n},{}],7:[function(require,module,exports){\n/*!\n * EventEmitter v5.1.0 - git.io/ee\n * Unlicense - http://unlicense.org/\n * Oliver Caldwell - http://oli.me.uk/\n * @preserve\n */\n\n;(function (exports) {\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 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 function isValidListener (listener) {\n if (typeof listener === 'function' || listener instanceof RegExp) {\n return true\n } else if (listener && typeof listener === 'object') {\n return isValidListener(listener.listener)\n } else {\n return false\n }\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 if (!isValidListener(listener)) {\n throw new TypeError('listener must be a function');\n }\n\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\n for (i = 0; i < listeners.length; 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}(this || {}));\n\n},{}]},{},[1]);\n })();"]}
|
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","scrollToForm","form","animate","config","auto_scroll","args","behavior","element","scrollIntoView","toggleElement","el","expectedValue","show","value","this","trim","checked","getAttribute","conditionMet","style","display","toggleConditionalElements","input","elements","querySelectorAll","inputName","toLowerCase","forEach","conditions","split","nameCondition","valueCondition","mc4wp","window","Gator","forms","mc4wp_forms_config","document","body","on","addEventListener","event","getByElement","target","srcElement","trigger","id","started","listeners","callback","submitted_form","formConfig","getElementById","element_id","action","errors","data","pageHeight","clientHeight","timeStart","Date","now","setData","timeElapsed","./forms/forms.js","gator","2","serialize","populate","Form","createElement","name","prototype","console","error","getData","hash","getSerializedData","setResponse","msg","querySelector","innerHTML","reset","form-serialize","populate.js","3","get","formId","createFromElement","formElement","parseInt","push","all","EventEmitter","events","bind","off","./form.js","wolfy87-eventemitter","4","options","result","serializer","hash_serializer","str_serialize","radio_store","Object","create","disabled","k_r_success_contrls","test","nodeName","k_r_submitter","type","key","val","empty","selectOptions","isSelectedOptions","j","option","allowedEmpty","hasValue","selected","slice","parse_keys","string","keys","prefix","children","RegExp","brackets","match","exec","hash_assign","shift","between","Array","isArray","_values","index","isNaN","existing","replace","encodeURIComponent","5","_addEvent","useCapture","_cancel","preventDefault","stopPropagation","_getMatcher","_matcher","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","matchesSelector","_matchesSelector","selector","boundElement","parentNode","_level","_addHandler","_handlers","_removeHandler","splice","hasOwnProperty","_handleEvent","_gatorInstances","matchesEvent","cancelBubble","cancel","_bind","remove","addEvent","_id","6","root","basename","constructor","namedItem","indexOf","values","k","toString","toISOString","amd","7","indexOfListener","listener","alias","apply","arguments","isValidListener","proto","originalGlobalValue","getListeners","evt","response","_getEvents","flattenListeners","flatListeners","getListenersAsObject","addListener","TypeError","listenerIsWrapped","once","addOnceListener","defineEvent","defineEvents","evts","removeListener","addListeners","manipulateListeners","removeListeners","single","multiple","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\n// deps & vars\n\nvar mc4wp = window.mc4wp || {};\nvar Gator = require('gator');\nvar forms = require('./forms/forms.js');\nvar config = window.mc4wp_forms_config || {};\n\n// funcs\nfunction scrollToForm(form) {\n\tvar animate = config.auto_scroll === 'animated';\n\tvar args = {\n\t\tbehavior: animate ? \"smooth\" : \"instant\"\n\t};\n\tform.element.scrollIntoView(args);\n}\n\nfunction handleFormRequest(form, action, errors, data) {\n\tvar pageHeight = document.body.clientHeight;\n\tvar timeStart = Date.now();\n\n\t// re-populate form\n\tif (errors) {\n\t\tform.setData(data);\n\t}\n\n\tif (config.auto_scroll) {\n\t\tscrollToForm(form);\n\t}\n\n\t// trigger events on window.load so all other scripts have loaded\n\twindow.addEventListener('load', function () {\n\t\tvar timeElapsed = Date.now() - timeStart;\n\n\t\t// scroll to form again if page height changed since last scroll\n\t\t// (only if load didn't take more than 0.8 seconds to prevent overtaking user scroll)\n\t\tif (config.auto_scroll && timeElapsed < 800 && document.body.clientHeight != pageHeight) {\n\t\t\tscrollToForm(form);\n\t\t}\n\n\t\t// trigger events\n\t\tforms.trigger('submitted', [form]);\n\t\tforms.trigger(form.id + '.submitted', [form]);\n\n\t\tif (errors) {\n\t\t\tforms.trigger('error', [form, errors]);\n\t\t\tforms.trigger(form.id + '.error', [form, errors]);\n\t\t} else {\n\t\t\t// form was successfully submitted\n\t\t\tforms.trigger('success', [form, data]);\n\t\t\tforms.trigger(form.id + '.success', [form, data]);\n\n\t\t\t// subscribed / unsubscribed\n\t\t\tforms.trigger(action + \"d\", [form, data]);\n\t\t\tforms.trigger(form.id + \".\" + action + \"d\", [form, data]);\n\t\t}\n\t});\n}\n\nfunction toggleElement(el, expectedValue, show) {\n\treturn function () {\n\t\tvar value = this.value.trim();\n\t\tvar checked = this.getAttribute('type') !== 'radio' && this.getAttribute('type') !== 'checked' || this.checked;\n\t\tvar conditionMet = checked && (value === expectedValue && expectedValue !== \"\" || expectedValue === \"\" && value.length > 0);\n\t\tif (show) {\n\t\t\tel.style.display = conditionMet ? '' : 'none';\n\t\t} else {\n\t\t\tel.style.display = conditionMet ? 'none' : '';\n\t\t}\n\t};\n}\n\nfunction toggleConditionalElements() {\n\tvar input = this;\n\tvar elements = input.form.querySelectorAll('[data-show-if], [data-hide-if]');\n\tvar inputName = (input.getAttribute('name') || '').toLowerCase();\n\n\t[].forEach.call(elements, function (el) {\n\t\tvar show = !!el.getAttribute('data-show-if');\n\t\tvar conditions = show ? el.getAttribute('data-show-if').split(':') : el.getAttribute('data-hide-if').split(':');\n\t\tvar nameCondition = conditions[0];\n\t\tvar valueCondition = conditions[1] || \"\";\n\n\t\tif (inputName !== nameCondition.toLowerCase()) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar callback = toggleElement(el, valueCondition, show);\n\t\tcallback.call(input);\n\t});\n}\n\nGator(document.body).on('keyup', '.mc4wp-form input, .mc4wp-form textarea, .mc4wp-form select', toggleConditionalElements);\nGator(document.body).on('change', '.mc4wp-form input, .mc4wp-form textarea, .mc4wp-form select', toggleConditionalElements);\nwindow.addEventListener('load', function () {\n\t[].forEach.call(document.querySelectorAll('.mc4wp-form input, .mc4wp-form textarea, .mc4wp-form select'), function (el) {\n\t\ttoggleConditionalElements.call(el);\n\t});\n});\n\n// Bind browser events to form events (using delegation)\nGator(document.body).on('submit', '.mc4wp-form', function (event) {\n\tvar form = forms.getByElement(event.target || event.srcElement);\n\tforms.trigger('submit', [form, event]);\n\tforms.trigger(form.id + '.submit', [form, event]);\n});\n\nGator(document.body).on('focus', '.mc4wp-form', function (event) {\n\tvar form = forms.getByElement(event.target || event.srcElement);\n\n\tif (!form.started) {\n\t\tforms.trigger('started', [form, event]);\n\t\tforms.trigger(form.id + '.started', [form, event]);\n\t\tform.started = true;\n\t}\n});\n\nGator(document.body).on('change', '.mc4wp-form', function (event) {\n\tvar form = forms.getByElement(event.target || event.srcElement);\n\tforms.trigger('change', [form, event]);\n\tforms.trigger(form.id + '.change', [form, event]);\n});\n\n// register early listeners\nif (mc4wp.listeners) {\n\tvar listeners = mc4wp.listeners;\n\tfor (var i = 0; i < listeners.length; i++) {\n\t\tforms.on(listeners[i].event, listeners[i].callback);\n\t}\n\n\t// delete temp listeners array, so we don't bind twice\n\tdelete mc4wp[\"listeners\"];\n}\n\n// expose forms object\nmc4wp.forms = forms;\n\n// handle submitted form\nif (config.submitted_form) {\n\tvar formConfig = config.submitted_form,\n\t element = document.getElementById(formConfig.element_id),\n\t form = forms.getByElement(element);\n\n\thandleFormRequest(form, formConfig.action, formConfig.errors, formConfig.data);\n}\n\n// expose mc4wp object globally\nwindow.mc4wp = mc4wp;\n\n},{\"./forms/forms.js\":3,\"gator\":5}],2:[function(require,module,exports){\n'use strict';\n\nvar serialize = require('form-serialize');\nvar populate = require('populate.js');\n\nvar Form = function Form(id, element) {\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\nForm.prototype.setData = function (data) {\n\ttry {\n\t\tpopulate(this.element, data);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n};\n\nForm.prototype.getData = function () {\n\treturn serialize(this.element, { hash: true });\n};\n\nForm.prototype.getSerializedData = function () {\n\treturn serialize(this.element);\n};\n\nForm.prototype.setResponse = function (msg) {\n\tthis.element.querySelector('.mc4wp-response').innerHTML = msg;\n};\n\n// revert back to original state\nForm.prototype.reset = function () {\n\tthis.setResponse('');\n\tthis.element.querySelector('.mc4wp-form-fields').style.display = '';\n\tthis.element.reset();\n};\n\nmodule.exports = Form;\n\n},{\"form-serialize\":4,\"populate.js\":6}],3:[function(require,module,exports){\n'use strict';\n\n// deps\n\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\nmodule.exports = {\n\t\"all\": all,\n\t\"get\": get,\n\t\"getByElement\": getByElement,\n\t\"on\": events.on.bind(events),\n\t\"trigger\": events.trigger.bind(events),\n\t\"off\": events.off.bind(events)\n};\n\n},{\"./form.js\":2,\"wolfy87-eventemitter\":7}],4:[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 if (typeof options != 'object') {\n options = { hash: !!options };\n }\n else if (options.hash === undefined) {\n options.hash = true;\n }\n\n var result = (options.hash) ? {} : '';\n var serializer = options.serializer || ((options.hash) ? hash_serializer : str_serialize);\n\n var elements = form && form.elements ? form.elements : [];\n\n //Object store each radio and set if it's empty or not\n var radio_store = Object.create(null);\n\n for (var i=0 ; i<elements.length ; ++i) {\n var element = elements[i];\n\n // ingore disabled fields\n if ((!options.disabled && element.disabled) || !element.name) {\n continue;\n }\n // ignore anyhting that is not considered a success field\n if (!k_r_success_contrls.test(element.nodeName) ||\n k_r_submitter.test(element.type)) {\n continue;\n }\n\n var key = element.name;\n var val = element.value;\n\n // we can't just use element.value for checkboxes cause some browsers lie to us\n // they say \"on\" for value when the box isn't checked\n if ((element.type === 'checkbox' || element.type === 'radio') && !element.checked) {\n val = undefined;\n }\n\n // If we want empty elements\n if (options.empty) {\n // for checkbox\n if (element.type === 'checkbox' && !element.checked) {\n val = '';\n }\n\n // for radio\n if (element.type === 'radio') {\n if (!radio_store[element.name] && !element.checked) {\n radio_store[element.name] = false;\n }\n else if (element.checked) {\n radio_store[element.name] = true;\n }\n }\n\n // if options empty is true, continue only if its radio\n if (!val && element.type == 'radio') {\n continue;\n }\n }\n else {\n // value-less fields are ignored unless options.empty is true\n if (!val) {\n continue;\n }\n }\n\n // multi select boxes\n if (element.type === 'select-multiple') {\n val = [];\n\n var selectOptions = element.options;\n var isSelectedOptions = false;\n for (var j=0 ; j<selectOptions.length ; ++j) {\n var option = selectOptions[j];\n var allowedEmpty = options.empty && !option.value;\n var hasValue = (option.value || allowedEmpty);\n if (option.selected && hasValue) {\n isSelectedOptions = true;\n\n // If using a hash serializer be sure to add the\n // correct notation for an array in the multi-select\n // context. Here the name attribute on the select element\n // might be missing the trailing bracket pair. Both names\n // \"foo\" and \"foo[]\" should be arrays.\n if (options.hash && key.slice(key.length - 2) !== '[]') {\n result = serializer(result, key + '[]', option.value);\n }\n else {\n result = serializer(result, key, option.value);\n }\n }\n }\n\n // Serialize if no selected options and options.empty is true\n if (!isSelectedOptions && options.empty) {\n result = serializer(result, key, '');\n }\n\n continue;\n }\n\n result = serializer(result, key, val);\n }\n\n // Check for all empty radio buttons and serialize them with key=\"\"\n if (options.empty) {\n for (var key in radio_store) {\n if (!radio_store[key]) {\n result = serializer(result, key, '');\n }\n }\n }\n\n return result;\n}\n\nfunction parse_keys(string) {\n var keys = [];\n var prefix = /^([^\\[\\]]*)/;\n var children = new RegExp(brackets);\n var match = prefix.exec(string);\n\n if (match[1]) {\n keys.push(match[1]);\n }\n\n while ((match = children.exec(string)) !== null) {\n keys.push(match[1]);\n }\n\n return keys;\n}\n\nfunction hash_assign(result, keys, value) {\n if (keys.length === 0) {\n result = value;\n return result;\n }\n\n var key = keys.shift();\n var between = key.match(/^\\[(.+?)\\]$/);\n\n if (key === '[]') {\n result = result || [];\n\n if (Array.isArray(result)) {\n result.push(hash_assign(null, keys, value));\n }\n else {\n // This might be the result of bad name attributes like \"[][foo]\",\n // in this case the original `result` object will already be\n // assigned to an object literal. Rather than coerce the object to\n // an array, or cause an exception the attribute \"_values\" is\n // assigned as an array.\n result._values = result._values || [];\n result._values.push(hash_assign(null, keys, value));\n }\n\n return result;\n }\n\n // Key is an attribute name and can be assigned directly.\n if (!between) {\n result[key] = hash_assign(result[key], keys, value);\n }\n else {\n var string = between[1];\n // +var converts the variable into a number\n // better than parseInt because it doesn't truncate away trailing\n // letters and actually fails if whole thing is not a number\n var index = +string;\n\n // If the characters between the brackets is not a number it is an\n // attribute name and can be assigned directly.\n if (isNaN(index)) {\n result = result || {};\n result[string] = hash_assign(result[string], keys, value);\n }\n else {\n result = result || [];\n result[index] = hash_assign(result[index], keys, value);\n }\n }\n\n return result;\n}\n\n// Object/hash encoding serializer.\nfunction hash_serializer(result, key, value) {\n var matches = key.match(brackets);\n\n // Has brackets? Use the recursive assignment function to walk the keys,\n // construct any missing objects in the result tree and make the assignment\n // at the end of the chain.\n if (matches) {\n var keys = parse_keys(key);\n hash_assign(result, keys, value);\n }\n else {\n // Non bracket notation can make assignments directly.\n var existing = result[key];\n\n // If the value has been assigned already (for instance when a radio and\n // a checkbox have the same name attribute) convert the previous value\n // into an array before pushing into it.\n //\n // NOTE: If this requirement were removed all hash creation and\n // assignment could go through `hash_assign`.\n if (existing) {\n if (!Array.isArray(existing)) {\n result[key] = [ existing ];\n }\n\n result[key].push(value);\n }\n else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\n// urlform encoding serializer\nfunction str_serialize(result, key, value) {\n // encode newlines as \\r\\n cause the html spec says so\n value = value.replace(/(\\r)?\\n/g, '\\r\\n');\n value = encodeURIComponent(value);\n\n // spaces should be '+' rather than '%20'.\n value = value.replace(/%20/g, '+');\n return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + value;\n}\n\nmodule.exports = serialize;\n\n},{}],5:[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},{}],6:[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 if ('undefined' === typeof value) {\n value = '';\n }\n\n if (null === value) {\n value = '';\n }\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\t\t\t\tcase 'date':\n \t\t\t\telement.value = new Date(value).toISOString().split('T')[0];\t\n\t\t\t\t\tbreak;\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\n},{}],7:[function(require,module,exports){\n/*!\n * EventEmitter v5.1.0 - git.io/ee\n * Unlicense - http://unlicense.org/\n * Oliver Caldwell - http://oli.me.uk/\n * @preserve\n */\n\n;(function (exports) {\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 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 function isValidListener (listener) {\n if (typeof listener === 'function' || listener instanceof RegExp) {\n return true\n } else if (listener && typeof listener === 'object') {\n return isValidListener(listener.listener)\n } else {\n return false\n }\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 if (!isValidListener(listener)) {\n throw new TypeError('listener must be a function');\n }\n\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\n for (i = 0; i < listeners.length; 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}(this || {}));\n\n},{}]},{},[1]);\n })();"]}
|
includes/admin/class-admin-texts.php
CHANGED
@@ -77,7 +77,7 @@ class MC4WP_Admin_Texts {
|
|
77 |
return $links;
|
78 |
}
|
79 |
|
80 |
-
$links[] = '<a href="https://mc4wp.com
|
81 |
|
82 |
/**
|
83 |
* Filters meta links shown on the Plugins overview page
|
77 |
return $links;
|
78 |
}
|
79 |
|
80 |
+
$links[] = '<a href="https://kb.mc4wp.com/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=plugins-page">'. __( 'Documentation', 'mailchimp-for-wp' ) . '</a>';
|
81 |
|
82 |
/**
|
83 |
* Filters meta links shown on the Plugins overview page
|
includes/admin/class-admin.php
CHANGED
@@ -413,7 +413,7 @@ class MC4WP_Admin {
|
|
413 |
$connected = $this->get_api()->is_connected();
|
414 |
} catch( MC4WP_API_Connection_Exception $e ) {
|
415 |
$message = sprintf( "<strong>%s</strong><br /> %s", __( "Error connecting to MailChimp:", 'mailchimp-for-wp' ), $e );
|
416 |
-
$message .= '<br /><br />' . sprintf( '<a href="%s">' . __( 'Here\'s some info on solving common connectivity issues.', 'mailchimp-for-wp' ) . '</a>', 'https://mc4wp.com/
|
417 |
$this->messages->flash( $message, 'error' );
|
418 |
$connected = false;
|
419 |
} catch( MC4WP_API_Exception $e ) {
|
413 |
$connected = $this->get_api()->is_connected();
|
414 |
} catch( MC4WP_API_Connection_Exception $e ) {
|
415 |
$message = sprintf( "<strong>%s</strong><br /> %s", __( "Error connecting to MailChimp:", 'mailchimp-for-wp' ), $e );
|
416 |
+
$message .= '<br /><br />' . sprintf( '<a href="%s">' . __( 'Here\'s some info on solving common connectivity issues.', 'mailchimp-for-wp' ) . '</a>', 'https://kb.mc4wp.com/solving-connectivity-issues/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=settings-notice' );
|
417 |
$this->messages->flash( $message, 'error' );
|
418 |
$connected = false;
|
419 |
} catch( MC4WP_API_Exception $e ) {
|
includes/admin/class-ads.php
CHANGED
@@ -36,7 +36,7 @@ class MC4WP_Admin_Ads {
|
|
36 |
echo '<tr valign="top">';
|
37 |
echo '<td colspan="2">';
|
38 |
echo '<p class="help">';
|
39 |
-
echo sprintf( __( 'Want to customize the style of your form? <a href="%s">Try our Styles Builder</a> & edit the look of your forms with just a few clicks.', 'mailchimp-for-wp' ), 'https://mc4wp.com/features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=form-settings-link' );
|
40 |
echo '</p>';
|
41 |
echo '</td>';
|
42 |
echo '</tr>';
|
@@ -51,9 +51,9 @@ class MC4WP_Admin_Ads {
|
|
51 |
echo '<p class="help">';
|
52 |
|
53 |
if( rand( 1, 2 ) === 1 ) {
|
54 |
-
echo sprintf( __( 'Be notified whenever someone subscribes? <a href="%s">MailChimp for WordPress Premium</a> allows you to set up email notifications for your forms.', 'mailchimp-for-wp' ), 'https://mc4wp.com/features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=footer-link' );
|
55 |
} else {
|
56 |
-
echo sprintf( __( 'Increased conversions? <a href="%s">MailChimp for WordPress Premium</a> submits forms without reloading the entire page, resulting in a much better experience for your visitors.', 'mailchimp-for-wp' ), 'https://mc4wp.com/features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=form-settings-link' );
|
57 |
}
|
58 |
|
59 |
echo '</p>';
|
@@ -67,7 +67,7 @@ class MC4WP_Admin_Ads {
|
|
67 |
* @return array
|
68 |
*/
|
69 |
public function plugin_meta_links( $links ) {
|
70 |
-
$links[] = '<a href="https://mc4wp.com/features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=plugins-upgrade-link">' . __( 'Upgrade to Premium', 'mailchimp-for-wp' ) . '</a>';
|
71 |
return $links;
|
72 |
}
|
73 |
|
@@ -80,17 +80,17 @@ class MC4WP_Admin_Ads {
|
|
80 |
|
81 |
// WPML & Polylang specific message
|
82 |
if( defined( 'ICL_LANGUAGE_CODE' ) ) {
|
83 |
-
echo '<p class="help">' . sprintf( __( 'Do you want translated forms for all of your languages? <a href="%s">Try MailChimp for WordPress Premium</a>, which does just that plus more.', 'mailchimp-for-wp' ), 'https://mc4wp.com/features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=footer-link' ) . '</p>';
|
84 |
return;
|
85 |
}
|
86 |
|
87 |
// General "edit form" message
|
88 |
-
echo '<p class="help">' . sprintf( __( 'Do you want to create more than one form? Our Premium add-on does just that! <a href="%s">Have a look at all Premium benefits</a>.', 'mailchimp-for-wp' ), 'https://mc4wp.com/features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=footer-link' ) . '</p>';
|
89 |
return;
|
90 |
}
|
91 |
|
92 |
// General message
|
93 |
-
echo '<p class="help">' . sprintf( __( 'Are you enjoying this plugin? The Premium add-on unlocks several powerful features. <a href="%s">Find out about all benefits now</a>.', 'mailchimp-for-wp' ), 'https://mc4wp.com/features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=footer-link' ) . '</p>';
|
94 |
}
|
95 |
|
96 |
/**
|
@@ -101,7 +101,7 @@ class MC4WP_Admin_Ads {
|
|
101 |
echo '<div class="mc4wp-box">';
|
102 |
echo '<div style="border: 5px dotted #cc4444; padding: 0 20px; background: white;">';
|
103 |
echo '<h3>MailChimp for WordPress Premium</h3>';
|
104 |
-
echo '<p>This plugin has a Premium add-on, unlocking several powerful features. <a href="https://mc4wp.com/features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=upgrade-box">Have a look at its benefits</a>!</p>';
|
105 |
echo '</div>';
|
106 |
echo '</div>';
|
107 |
|
@@ -152,7 +152,7 @@ class MC4WP_Admin_Ads {
|
|
152 |
echo __( 'Do you want to track all WooCommerce orders in MailChimp so you can send emails based on the purchase activity of your subscribers?', 'mailchimp-for-wp' );
|
153 |
echo '</p>';
|
154 |
echo '<p>';
|
155 |
-
echo sprintf( __( '<a href="%s">Upgrade to MailChimp for WordPress Premium</a> or <a href="%s">read more about MailChimp\'s E-Commerce features</a>.', 'mailchimp-for-wp' ) . '</p>', 'https://mc4wp.com/features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=other-settings-link', 'https://mc4wp.com/
|
156 |
echo '</p>';
|
157 |
echo '</div>';
|
158 |
}
|
36 |
echo '<tr valign="top">';
|
37 |
echo '<td colspan="2">';
|
38 |
echo '<p class="help">';
|
39 |
+
echo sprintf( __( 'Want to customize the style of your form? <a href="%s">Try our Styles Builder</a> & edit the look of your forms with just a few clicks.', 'mailchimp-for-wp' ), 'https://mc4wp.com/premium-features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=form-settings-link' );
|
40 |
echo '</p>';
|
41 |
echo '</td>';
|
42 |
echo '</tr>';
|
51 |
echo '<p class="help">';
|
52 |
|
53 |
if( rand( 1, 2 ) === 1 ) {
|
54 |
+
echo sprintf( __( 'Be notified whenever someone subscribes? <a href="%s">MailChimp for WordPress Premium</a> allows you to set up email notifications for your forms.', 'mailchimp-for-wp' ), 'https://mc4wp.com/premium-features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=footer-link' );
|
55 |
} else {
|
56 |
+
echo sprintf( __( 'Increased conversions? <a href="%s">MailChimp for WordPress Premium</a> submits forms without reloading the entire page, resulting in a much better experience for your visitors.', 'mailchimp-for-wp' ), 'https://mc4wp.com/premium-features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=form-settings-link' );
|
57 |
}
|
58 |
|
59 |
echo '</p>';
|
67 |
* @return array
|
68 |
*/
|
69 |
public function plugin_meta_links( $links ) {
|
70 |
+
$links[] = '<a href="https://mc4wp.com/premium-features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=plugins-upgrade-link">' . __( 'Upgrade to Premium', 'mailchimp-for-wp' ) . '</a>';
|
71 |
return $links;
|
72 |
}
|
73 |
|
80 |
|
81 |
// WPML & Polylang specific message
|
82 |
if( defined( 'ICL_LANGUAGE_CODE' ) ) {
|
83 |
+
echo '<p class="help">' . sprintf( __( 'Do you want translated forms for all of your languages? <a href="%s">Try MailChimp for WordPress Premium</a>, which does just that plus more.', 'mailchimp-for-wp' ), 'https://mc4wp.com/premium-features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=footer-link' ) . '</p>';
|
84 |
return;
|
85 |
}
|
86 |
|
87 |
// General "edit form" message
|
88 |
+
echo '<p class="help">' . sprintf( __( 'Do you want to create more than one form? Our Premium add-on does just that! <a href="%s">Have a look at all Premium benefits</a>.', 'mailchimp-for-wp' ), 'https://mc4wp.com/premium-features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=footer-link' ) . '</p>';
|
89 |
return;
|
90 |
}
|
91 |
|
92 |
// General message
|
93 |
+
echo '<p class="help">' . sprintf( __( 'Are you enjoying this plugin? The Premium add-on unlocks several powerful features. <a href="%s">Find out about all benefits now</a>.', 'mailchimp-for-wp' ), 'https://mc4wp.com/premium-features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=footer-link' ) . '</p>';
|
94 |
}
|
95 |
|
96 |
/**
|
101 |
echo '<div class="mc4wp-box">';
|
102 |
echo '<div style="border: 5px dotted #cc4444; padding: 0 20px; background: white;">';
|
103 |
echo '<h3>MailChimp for WordPress Premium</h3>';
|
104 |
+
echo '<p>This plugin has a Premium add-on, unlocking several powerful features. <a href="https://mc4wp.com/premium-features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=upgrade-box">Have a look at its benefits</a>!</p>';
|
105 |
echo '</div>';
|
106 |
echo '</div>';
|
107 |
|
152 |
echo __( 'Do you want to track all WooCommerce orders in MailChimp so you can send emails based on the purchase activity of your subscribers?', 'mailchimp-for-wp' );
|
153 |
echo '</p>';
|
154 |
echo '<p>';
|
155 |
+
echo sprintf( __( '<a href="%s">Upgrade to MailChimp for WordPress Premium</a> or <a href="%s">read more about MailChimp\'s E-Commerce features</a>.', 'mailchimp-for-wp' ) . '</p>', 'https://mc4wp.com/premium-features/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=other-settings-link', 'https://kb.mc4wp.com/what-is-ecommerce360/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=other-settings-link' );
|
156 |
echo '</p>';
|
157 |
echo '</div>';
|
158 |
}
|
includes/admin/class-review-notice.php
CHANGED
@@ -70,7 +70,6 @@ class MC4WP_Admin_Review_Notice {
|
|
70 |
echo '</p>';
|
71 |
echo '<form method="POST" id="mc4wp-dismiss-review-form"><button type="submit" class="notice-dismiss"><span class="screen-reader-text">'. __( 'Dismiss this notice.', 'mailchimp-for-wp' ) .'</span></button><input type="hidden" name="_mc4wp_action" value="dismiss_review_notice"/></form>';
|
72 |
echo '</div>';
|
73 |
-
echo "<script>window.jQuery('#mc4wp-review-notice form').submit(function(e) { e.preventDefault(); window.jQuery.post( ajaxurl, { _mc4wp_action: 'dismiss_review_notice' }, function() { window.jQuery('#mc4wp-review-notice').fadeOut(); }); });</script>";
|
74 |
return true;
|
75 |
}
|
76 |
|
70 |
echo '</p>';
|
71 |
echo '<form method="POST" id="mc4wp-dismiss-review-form"><button type="submit" class="notice-dismiss"><span class="screen-reader-text">'. __( 'Dismiss this notice.', 'mailchimp-for-wp' ) .'</span></button><input type="hidden" name="_mc4wp_action" value="dismiss_review_notice"/></form>';
|
72 |
echo '</div>';
|
|
|
73 |
return true;
|
74 |
}
|
75 |
|
includes/api/class-api.php
CHANGED
@@ -81,7 +81,7 @@ class MC4WP_API {
|
|
81 |
* @return bool
|
82 |
*/
|
83 |
private function show_connection_error( $message ) {
|
84 |
-
$message .= '<br /><br />' . sprintf( '<a href="%s">' . __( 'Read more about common connectivity issues.', 'mailchimp-for-wp' ) . '</a>', 'https://mc4wp.com/
|
85 |
return $this->show_error( $message );
|
86 |
}
|
87 |
|
81 |
* @return bool
|
82 |
*/
|
83 |
private function show_connection_error( $message ) {
|
84 |
+
$message .= '<br /><br />' . sprintf( '<a href="%s">' . __( 'Read more about common connectivity issues.', 'mailchimp-for-wp' ) . '</a>', 'https://kb.mc4wp.com/solving-connectivity-issues/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=settings-notice' );
|
85 |
return $this->show_error( $message );
|
86 |
}
|
87 |
|
includes/forms/views/parts/dynamic-content-tags.php
CHANGED
@@ -5,7 +5,7 @@ $tags = mc4wp('forms')->get_tags();
|
|
5 |
?>
|
6 |
<h2><?php _e( 'Add dynamic form variable', 'mailchimp-for-wp' ); ?></h2>
|
7 |
<p>
|
8 |
-
<?php echo sprintf( __( 'The following list of variables can be used to <a href="%s">add some dynamic content to your form or success and error messages</a>.', 'mailchimp-for-wp' ), 'https://mc4wp.com/
|
9 |
</p>
|
10 |
<table class="widefat striped">
|
11 |
<?php foreach( $tags as $tag => $config ) {
|
5 |
?>
|
6 |
<h2><?php _e( 'Add dynamic form variable', 'mailchimp-for-wp' ); ?></h2>
|
7 |
<p>
|
8 |
+
<?php echo sprintf( __( 'The following list of variables can be used to <a href="%s">add some dynamic content to your form or success and error messages</a>.', 'mailchimp-for-wp' ), 'https://kb.mc4wp.com/using-variables-in-your-form-or-messages/' ) . ' ' . __( 'This allows you to personalise your form or response messages.', 'mailchimp-for-wp' ); ?>
|
9 |
</p>
|
10 |
<table class="widefat striped">
|
11 |
<?php foreach( $tags as $tag => $config ) {
|
includes/forms/views/tabs/form-settings.php
CHANGED
@@ -77,7 +77,7 @@
|
|
77 |
</label>
|
78 |
<p class="help">
|
79 |
<?php _e( 'Select "no" if you want to add the selected interests to any previously selected interests when updating a subscriber.', 'mailchimp-for-wp' ); ?>
|
80 |
-
<?php printf( ' <a href="%s" target="_blank">' . __( 'What does this do?', 'mailchimp-for-wp' ) . '</a>', 'https://mc4wp.com/
|
81 |
</p>
|
82 |
</td>
|
83 |
</tr>
|
77 |
</label>
|
78 |
<p class="help">
|
79 |
<?php _e( 'Select "no" if you want to add the selected interests to any previously selected interests when updating a subscriber.', 'mailchimp-for-wp' ); ?>
|
80 |
+
<?php printf( ' <a href="%s" target="_blank">' . __( 'What does this do?', 'mailchimp-for-wp' ) . '</a>', 'https://kb.mc4wp.com/what-does-replace-groupings-mean/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=settings-page' ); ?>
|
81 |
</p>
|
82 |
</td>
|
83 |
</tr>
|
includes/integrations/views/integration-settings.php
CHANGED
@@ -25,7 +25,7 @@
|
|
25 |
|
26 |
<div id="notice-additional-fields" class="notice notice-info" style="display: none;">
|
27 |
<p><?php _e( 'The selected MailChimp lists require non-default fields, which may prevent this integration from working.', 'mailchimp-for-wp' ); ?></p>
|
28 |
-
<p><?php echo sprintf( __( 'Please ensure you <a href="%s">configure the plugin to send all required fields</a> or <a href="%s">log into your MailChimp account</a> and make sure only the email & name fields are marked as required fields for the selected list(s).', 'mailchimp-for-wp' ), 'https://mc4wp.com/
|
29 |
</div>
|
30 |
|
31 |
<p>
|
@@ -199,7 +199,7 @@
|
|
199 |
</label>
|
200 |
<p class="help">
|
201 |
<?php _e( 'Select "no" if you want to add the selected interests to any previously selected interests when updating a subscriber.', 'mailchimp-for-wp' ); ?>
|
202 |
-
<?php printf( ' <a href="%s" target="_blank">' . __( 'What does this do?', 'mailchimp-for-wp' ) . '</a>', 'https://mc4wp.com/
|
203 |
</p>
|
204 |
</td>
|
205 |
</tr>
|
25 |
|
26 |
<div id="notice-additional-fields" class="notice notice-info" style="display: none;">
|
27 |
<p><?php _e( 'The selected MailChimp lists require non-default fields, which may prevent this integration from working.', 'mailchimp-for-wp' ); ?></p>
|
28 |
+
<p><?php echo sprintf( __( 'Please ensure you <a href="%s">configure the plugin to send all required fields</a> or <a href="%s">log into your MailChimp account</a> and make sure only the email & name fields are marked as required fields for the selected list(s).', 'mailchimp-for-wp' ), 'https://kb.mc4wp.com/send-additional-fields-from-integrations/', 'https://admin.mailchimp.com/lists/' ); ?></p>
|
29 |
</div>
|
30 |
|
31 |
<p>
|
199 |
</label>
|
200 |
<p class="help">
|
201 |
<?php _e( 'Select "no" if you want to add the selected interests to any previously selected interests when updating a subscriber.', 'mailchimp-for-wp' ); ?>
|
202 |
+
<?php printf( ' <a href="%s" target="_blank">' . __( 'What does this do?', 'mailchimp-for-wp' ) . '</a>', 'https://kb.mc4wp.com/what-does-replace-groupings-mean/' ); ?>
|
203 |
</p>
|
204 |
</td>
|
205 |
</tr>
|
includes/views/other-settings.php
CHANGED
@@ -27,7 +27,7 @@ function _mc4wp_usage_tracking_setting( $opts ) {
|
|
27 |
|
28 |
<p class="help">
|
29 |
<?php echo __( 'Allow us to anonymously track how this plugin is used to help us make it better fit your needs.', 'mailchimp-for-wp' ); ?>
|
30 |
-
<a href="https://mc4wp.com/
|
31 |
<?php _e( 'This is what we track.', 'mailchimp-for-wp' ); ?>
|
32 |
</a>
|
33 |
</p>
|
@@ -41,7 +41,7 @@ function _mc4wp_usage_tracking_setting( $opts ) {
|
|
41 |
<option value="debug" <?php selected( 'debug', $opts['debug_log_level'] ); ?>><?php _e( 'Everything', 'mc4wp-ecommerce' ); ?></option>
|
42 |
</select>
|
43 |
<p class="help">
|
44 |
-
<?php printf( __( 'Determines what events should be written to <a href="%s">the debug log</a> (see below).', 'mailchimp-for-wp' ), 'https://mc4wp.com/
|
45 |
</p>
|
46 |
</td>
|
47 |
</tr>
|
27 |
|
28 |
<p class="help">
|
29 |
<?php echo __( 'Allow us to anonymously track how this plugin is used to help us make it better fit your needs.', 'mailchimp-for-wp' ); ?>
|
30 |
+
<a href="https://kb.mc4wp.com/what-is-usage-tracking/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=settings-page" target="_blank">
|
31 |
<?php _e( 'This is what we track.', 'mailchimp-for-wp' ); ?>
|
32 |
</a>
|
33 |
</p>
|
41 |
<option value="debug" <?php selected( 'debug', $opts['debug_log_level'] ); ?>><?php _e( 'Everything', 'mc4wp-ecommerce' ); ?></option>
|
42 |
</select>
|
43 |
<p class="help">
|
44 |
+
<?php printf( __( 'Determines what events should be written to <a href="%s">the debug log</a> (see below).', 'mailchimp-for-wp' ), 'https://kb.mc4wp.com/how-to-enable-log-debugging/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=settings-page' ); ?>
|
45 |
</p>
|
46 |
</td>
|
47 |
</tr>
|
includes/views/parts/admin-sidebar.php
CHANGED
@@ -11,9 +11,8 @@ function _mc4wp_admin_sidebar_support_notice() {
|
|
11 |
<h4 class="mc4wp-title"><?php echo esc_html__( 'Looking for help?', 'mailchimp-for-wp' ); ?></h4>
|
12 |
<p><?php echo __( 'We have some resources available to help you in the right direction.', 'mailchimp-for-wp' ); ?></p>
|
13 |
<ul class="ul-square">
|
14 |
-
<li><a href="https://mc4wp.com
|
15 |
<li><a href="https://wordpress.org/plugins/mailchimp-for-wp/faq/"><?php echo esc_html__( 'Frequently Asked Questions', 'mailchimp-for-wp' ); ?></a></li>
|
16 |
-
<li><a href="http://developer.mc4wp.com/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=sidebar"><?php echo esc_html__( 'Code reference for developers', 'mailchimp-for-wp' ); ?></a></li>
|
17 |
</ul>
|
18 |
<p><?php echo sprintf( __( 'If your answer can not be found in the resources listed above, please use the <a href="%s">support forums on WordPress.org</a>.' ), 'https://wordpress.org/support/plugin/mailchimp-for-wp' ); ?></p>
|
19 |
<p><?php echo sprintf( __( 'Found a bug? Please <a href="%s">open an issue on GitHub</a>.' ), 'https://github.com/ibericode/mailchimp-for-wordpress/issues' ); ?></p>
|
11 |
<h4 class="mc4wp-title"><?php echo esc_html__( 'Looking for help?', 'mailchimp-for-wp' ); ?></h4>
|
12 |
<p><?php echo __( 'We have some resources available to help you in the right direction.', 'mailchimp-for-wp' ); ?></p>
|
13 |
<ul class="ul-square">
|
14 |
+
<li><a href="https://kb.mc4wp.com/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=sidebar"><?php echo esc_html__( 'Knowledge Base', 'mailchimp-for-wp' ); ?></a></li>
|
15 |
<li><a href="https://wordpress.org/plugins/mailchimp-for-wp/faq/"><?php echo esc_html__( 'Frequently Asked Questions', 'mailchimp-for-wp' ); ?></a></li>
|
|
|
16 |
</ul>
|
17 |
<p><?php echo sprintf( __( 'If your answer can not be found in the resources listed above, please use the <a href="%s">support forums on WordPress.org</a>.' ), 'https://wordpress.org/support/plugin/mailchimp-for-wp' ); ?></p>
|
18 |
<p><?php echo sprintf( __( 'Found a bug? Please <a href="%s">open an issue on GitHub</a>.' ), 'https://github.com/ibericode/mailchimp-for-wordpress/issues' ); ?></p>
|
integrations/wp-registration-form/class-registration-form.php
CHANGED
@@ -26,6 +26,7 @@ class MC4WP_Registration_Form_Integration extends MC4WP_User_Integration {
|
|
26 |
if( ! $this->options['implicit'] ) {
|
27 |
add_action( 'login_head', array( $this, 'print_css_reset' ) );
|
28 |
add_action( 'register_form', array( $this, 'output_checkbox' ), 20 );
|
|
|
29 |
}
|
30 |
|
31 |
add_action( 'user_register', array( $this, 'subscribe_from_registration' ), 90, 1 );
|
26 |
if( ! $this->options['implicit'] ) {
|
27 |
add_action( 'login_head', array( $this, 'print_css_reset' ) );
|
28 |
add_action( 'register_form', array( $this, 'output_checkbox' ), 20 );
|
29 |
+
add_action( 'woocommerce_register_form', array( $this, 'output_checkbox' ), 20 );
|
30 |
}
|
31 |
|
32 |
add_action( 'user_register', array( $this, 'subscribe_from_registration' ), 90, 1 );
|
languages/mailchimp-for-wp-fa_IR.mo
CHANGED
Binary file
|
languages/mailchimp-for-wp-fa_IR.po
CHANGED
@@ -1,74 +1,28 @@
|
|
1 |
-
# Copyright (C)
|
2 |
-
# This file is distributed under the same license as the
|
3 |
# Translators:
|
4 |
# A.Mehraban <Mehr.Ban@chmail.ir>, 2015
|
5 |
# Ardavan Afrasiyabi <abox@usa.com>, 2015
|
6 |
# mahnaz vahedi <mahnazvn@yahoo.com>, 2016
|
|
|
7 |
msgid ""
|
8 |
msgstr ""
|
9 |
"Project-Id-Version: MailChimp for WordPress\n"
|
10 |
-
"
|
11 |
-
"
|
12 |
-
"PO-Revision-Date: 2016-01-04 11:57+0000\n"
|
13 |
-
"Last-Translator: mahnaz vahedi <mahnazvn@yahoo.com>\n"
|
14 |
"Language-Team: Persian (Iran) (http://www.transifex.com/ibericode/mailchimp-for-wordpress/language/fa_IR/)\n"
|
15 |
"MIME-Version: 1.0\n"
|
16 |
"Content-Type: text/plain; charset=UTF-8\n"
|
17 |
"Content-Transfer-Encoding: 8bit\n"
|
18 |
"Language: fa_IR\n"
|
19 |
"Plural-Forms: nplurals=1; plural=0;\n"
|
|
|
|
|
|
|
|
|
|
|
20 |
|
21 |
-
#:
|
22 |
-
msgid "Email address"
|
23 |
-
msgstr "آدرس ایمیل"
|
24 |
-
|
25 |
-
#: config/default-form-content.php:4
|
26 |
-
msgid "Your email address"
|
27 |
-
msgstr "ایمیل شما"
|
28 |
-
|
29 |
-
#: config/default-form-content.php:5
|
30 |
-
msgid "Sign up"
|
31 |
-
msgstr "ثبت نام"
|
32 |
-
|
33 |
-
#: config/default-form-messages.php:5
|
34 |
-
msgid ""
|
35 |
-
"Thank you, your sign-up request was successful! Please check your email "
|
36 |
-
"inbox to confirm."
|
37 |
-
msgstr "باتشکر از شما, درخواست ثبت نام شما با موفق آمیز بود! لطفا ایمیلتان را برای تایید چک کنید."
|
38 |
-
|
39 |
-
#: config/default-form-messages.php:9
|
40 |
-
msgid "Oops. Something went wrong. Please try again later."
|
41 |
-
msgstr "متاسفیم ! مشکلی پیش آمده ، لطفا دوباره تلاش کنید."
|
42 |
-
|
43 |
-
#: config/default-form-messages.php:13
|
44 |
-
msgid "Please provide a valid email address."
|
45 |
-
msgstr "لطفا یک ایمیل معتبر وارد کنید."
|
46 |
-
|
47 |
-
#: config/default-form-messages.php:17
|
48 |
-
msgid "Given email address is already subscribed, thank you!"
|
49 |
-
msgstr "این آدرس ایمیل هم اکنون در سایت ثبت شده و جزو مشترکین خبرنامه ما می باشد. ممنون از شما!"
|
50 |
-
|
51 |
-
#: config/default-form-messages.php:21
|
52 |
-
msgid "Please fill in the required fields."
|
53 |
-
msgstr "لطفا موارد ضروری را وارد نمایید."
|
54 |
-
|
55 |
-
#: config/default-form-messages.php:25
|
56 |
-
msgid "You were successfully unsubscribed."
|
57 |
-
msgstr "با موفقیت اشتراک شما لغو شد."
|
58 |
-
|
59 |
-
#: config/default-form-messages.php:29
|
60 |
-
msgid "Given email address is not subscribed."
|
61 |
-
msgstr "آدرس ایمیل داده شده جزو مشترکین نیست."
|
62 |
-
|
63 |
-
#: config/default-form-messages.php:33
|
64 |
-
msgid "Please select at least one list."
|
65 |
-
msgstr "لطفا حداقل یک لیست را انتخاب نمایید"
|
66 |
-
|
67 |
-
#: config/default-integration-options.php:5
|
68 |
-
msgid "Sign me up for the newsletter!"
|
69 |
-
msgstr "من را در خبرنامه ثبت نام کن!"
|
70 |
-
|
71 |
-
#: includes/admin/class-admin-texts.php:62
|
72 |
#: includes/forms/views/edit-form.php:6
|
73 |
msgid "Settings"
|
74 |
msgstr "تنظیمات"
|
@@ -77,141 +31,388 @@ msgstr "تنظیمات"
|
|
77 |
msgid "Documentation"
|
78 |
msgstr "مستندات"
|
79 |
|
80 |
-
#: includes/admin/class-admin.php:
|
81 |
msgid ""
|
82 |
"Success! The cached configuration for your MailChimp lists has been renewed."
|
83 |
msgstr "تبریک می گوییم! تنظیمات مربوط به لیست های MailChimp که در سیستم شما کش شده بودند مجددا بارگزرای و بروز شدند."
|
84 |
|
85 |
-
#: includes/admin/class-admin.php:
|
86 |
msgid ""
|
87 |
"This is a pro-only feature. Please upgrade to the premium version to be able"
|
88 |
" to use it."
|
89 |
msgstr "این ویژگی تنها در نسخه پیشرفته این افزونه در دسترس است به همین دلیل اگر تمایل به استفاده از آن را دارید باید نسخه MailChimp خود را به نسخه پیشرفته ارتقا دهید."
|
90 |
|
91 |
-
#: includes/admin/class-admin.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
msgid "MailChimp API Settings"
|
93 |
msgstr "تنظیمات API مربوط به MailChimp"
|
94 |
|
95 |
-
#: includes/admin/class-admin.php:
|
96 |
-
#: integrations/ninja-forms/class-ninja-forms.php:34
|
97 |
msgid "MailChimp"
|
98 |
msgstr "MailChimp"
|
99 |
|
100 |
-
#: includes/admin/class-
|
101 |
-
|
102 |
-
|
|
|
103 |
|
104 |
-
#: includes/admin/class-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
msgid ""
|
106 |
-
"
|
107 |
-
"features
|
108 |
-
msgstr "
|
109 |
|
110 |
-
#: includes/admin/class-ads.php:
|
111 |
msgid "More subscribers, better newsletters."
|
112 |
msgstr "داشتن مشترکین بیشتر منجر به داشتن خبرنامه بهتر می شود"
|
113 |
|
114 |
-
#: includes/admin/class-ads.php:
|
115 |
msgid ""
|
116 |
"Learn how to best grow your lists & write better emails by subscribing to "
|
117 |
"our monthly tips."
|
118 |
msgstr "با اتشراک در خبرنامه ما با دریافت نکات ماهانه می آموزید که چگونه لیستها و ایمیلهای بهتری بسازید."
|
119 |
|
120 |
-
#: includes/admin/class-ads.php:
|
121 |
msgid "Email Address"
|
122 |
msgstr "آدرس ایمیل"
|
123 |
|
124 |
-
#: includes/admin/class-ads.php:
|
125 |
msgid "First Name"
|
126 |
msgstr "نام"
|
127 |
|
128 |
-
#: includes/admin/class-ads.php:
|
129 |
msgid "Subscribe"
|
130 |
msgstr "اشتراک"
|
131 |
|
132 |
-
#: includes/admin/class-
|
133 |
-
msgid "
|
134 |
-
|
|
|
|
|
135 |
|
136 |
-
#: includes/admin/
|
137 |
-
msgid "
|
138 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
|
140 |
-
#: includes/class-
|
|
|
|
|
|
|
|
|
141 |
msgid "Read more about common connectivity issues."
|
142 |
msgstr "درباره خطاهای متداول اتصال می توانید در این قسمت مطالعه بیشتری داشته باشید."
|
143 |
|
144 |
-
#: includes/forms/class-admin.php:
|
145 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
msgid "Forms"
|
147 |
msgstr "فرمها"
|
148 |
|
149 |
-
#: includes/forms/class-admin.
|
150 |
msgid "<strong>Success!</strong> Form successfully saved."
|
151 |
msgstr "فرم با موفقیت ذخیره شد."
|
152 |
|
153 |
-
#: includes/forms/class-admin.php:
|
154 |
msgid "Preview form"
|
155 |
msgstr "پیش نمایش فرم"
|
156 |
|
157 |
-
#: includes/forms/class-admin.php:
|
158 |
-
msgid "
|
159 |
-
msgstr "فرم
|
160 |
|
161 |
-
#: includes/forms/class-admin.php:
|
162 |
-
msgid "
|
163 |
-
msgstr "
|
164 |
|
165 |
-
#: includes/forms/class-form-previewer.php:
|
166 |
msgid "Form preview"
|
167 |
msgstr "پیش نمایش فرم"
|
168 |
|
169 |
-
#: includes/forms/class-form-tags.php:
|
170 |
msgid "Replaced with the form response (error or success messages)."
|
171 |
msgstr "جایگزین با فرم پاسخگو ( پیام های خطا یا موفقیت آمیز)."
|
172 |
|
173 |
-
#: includes/forms/class-form-tags.php:
|
174 |
msgid "Data from the URL or a submitted form."
|
175 |
msgstr "داده دریافتی از آدرس مشخص یا فرم ثبت نام"
|
176 |
|
177 |
-
#: includes/forms/class-form-tags.php:
|
|
|
|
|
|
|
|
|
178 |
#: includes/integrations/class-integration-tags.php:45
|
179 |
msgid "Replaced with the number of subscribers on the selected list(s)"
|
180 |
msgstr "جایگزین با تعداد مشترکینی که از لیست انتخاب شده اند."
|
181 |
|
182 |
-
#: includes/forms/class-form-tags.php:
|
183 |
msgid "The email address of the current visitor (if known)."
|
184 |
msgstr "آدرس ایمیل کاربر فعلی (در صورت تشخیص)"
|
185 |
|
186 |
-
#: includes/forms/class-form-tags.php:
|
187 |
msgid "The URL of the page."
|
188 |
msgstr "آدرس صفحه (URL)"
|
189 |
|
190 |
-
#: includes/forms/class-form-tags.php:
|
191 |
msgid "The path of the page."
|
192 |
msgstr "مسیر صفحه"
|
193 |
|
194 |
-
#: includes/forms/class-form-tags.php:
|
195 |
msgid "The current date. Example: %s."
|
196 |
msgstr "تاریخ جاری. مثال : %s."
|
197 |
|
198 |
-
#: includes/forms/class-form-tags.php:
|
199 |
msgid "The current time. Example: %s."
|
200 |
msgstr "زمان جاری. مثال: %s."
|
201 |
|
202 |
-
#: includes/forms/class-form-tags.php:
|
203 |
msgid "The site's language. Example: %s."
|
204 |
msgstr "زبان سایت. مثال: %s."
|
205 |
|
206 |
-
#: includes/forms/class-form-tags.php:
|
207 |
msgid "The visitor's IP address. Example: %s."
|
208 |
msgstr "آدرس آی پی کاربر. مثال : %s."
|
209 |
|
210 |
-
#: includes/forms/class-form-tags.php:
|
211 |
msgid "The property of the currently logged-in user."
|
212 |
msgstr "مشخصه های کاربر حاضر در سایت"
|
213 |
|
214 |
-
#: includes/forms/class-form.php:
|
|
|
|
|
|
|
|
|
215 |
msgid "There is no form with ID %d, perhaps it was deleted?"
|
216 |
msgstr "هیچ فرمی با شناسه %d, یافت نشد شاید این فرم پاک شده باشد؟"
|
217 |
|
@@ -219,10 +420,6 @@ msgstr "هیچ فرمی با شناسه %d, یافت نشد شاید این فر
|
|
219 |
msgid "Newsletter"
|
220 |
msgstr "خبرنامه"
|
221 |
|
222 |
-
#: includes/forms/class-widget.php:30
|
223 |
-
msgid "MailChimp Sign-Up Form"
|
224 |
-
msgstr "فرم ثبت نام MailChimp"
|
225 |
-
|
226 |
#: includes/forms/class-widget.php:32
|
227 |
msgid "Displays your MailChimp for WordPress sign-up form"
|
228 |
msgstr "نمایش فرم ثبت نام MailChimp for WordPress شما"
|
@@ -237,7 +434,114 @@ msgid ""
|
|
237 |
" form settings</a>."
|
238 |
msgstr "شما می توانید فرم ثبت نام خود را از<a href=\"%s\">بخش تنظیمات میل چمپ</a> ویرایش کنید."
|
239 |
|
240 |
-
#: includes/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
241 |
msgid "Add new form"
|
242 |
msgstr "اضافه نمودن فرم جدید"
|
243 |
|
@@ -265,38 +569,266 @@ msgstr "فیلدها"
|
|
265 |
msgid "Messages"
|
266 |
msgstr "پیغام ها"
|
267 |
|
268 |
-
#: includes/forms/views/edit-form.php:7
|
269 |
-
msgid "Appearance"
|
270 |
-
msgstr "ظاهر"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
271 |
|
272 |
-
#: includes/
|
273 |
-
|
274 |
-
|
275 |
-
#: includes/views/general-settings.php:7
|
276 |
-
msgid "You are here: "
|
277 |
-
msgstr "شما اینجا هستید:"
|
278 |
|
279 |
-
#: includes/
|
280 |
-
msgid "
|
281 |
-
msgstr "
|
282 |
|
283 |
-
#: includes/
|
284 |
-
msgid "
|
285 |
-
msgstr "
|
286 |
|
287 |
-
#: includes/
|
288 |
-
msgid "
|
289 |
-
msgstr "
|
290 |
|
291 |
-
#: includes/
|
292 |
-
msgid "
|
293 |
-
msgstr "
|
294 |
|
295 |
-
#: includes/
|
296 |
-
msgid "
|
297 |
-
msgstr "
|
298 |
|
299 |
-
#: includes/forms/views/parts/add-fields-help.
|
300 |
#: includes/forms/views/tabs/form-fields.php:10
|
301 |
msgid "Add more fields"
|
302 |
msgstr "اضافه نمودن فیلدهای بیشتر"
|
@@ -333,11 +865,6 @@ msgid ""
|
|
333 |
"changes."
|
334 |
msgstr "برای آنکه افزونه خبرنامه MailChimp تغیرات شما را برداشته و دائما بروز باشد این دکمه را انتخاب نمایید."
|
335 |
|
336 |
-
#: includes/forms/views/parts/add-fields-help.php:43
|
337 |
-
#: includes/views/parts/lists-overview.php:8
|
338 |
-
msgid "Renew MailChimp lists"
|
339 |
-
msgstr "تازه سازی لیست های MailChimp"
|
340 |
-
|
341 |
#: includes/forms/views/parts/dynamic-content-tags.php:6
|
342 |
msgid "Add dynamic form variable"
|
343 |
msgstr "اضافه نمودنمتغیرهای داینامیک به فرم"
|
@@ -410,87 +937,101 @@ msgstr "فیلدهای فرم"
|
|
410 |
msgid "Enter the HTML code for your form fields.."
|
411 |
msgstr "کد HTML مربوط به فیلدهای فرم خود را وارد کنید..."
|
412 |
|
413 |
-
#: includes/forms/views/tabs/form-fields.php:
|
414 |
-
msgid "Your form is missing the following (required) form fields:"
|
415 |
-
msgstr "یکی از فیلد های (ضروری) که در زیر میبینید وجود ندارد:"
|
416 |
-
|
417 |
-
#: includes/forms/views/tabs/form-fields.php:34
|
418 |
msgid ""
|
419 |
"Use the shortcode %s to display this form inside a post, page or text "
|
420 |
"widget."
|
421 |
msgstr "از کدکوتاه %s برای نمایش این فرم در داخل ویجت، پست ، برگه و یا متن استفاده کنید."
|
422 |
|
423 |
-
#: includes/forms/views/tabs/form-messages.php:
|
424 |
msgid "Form Messages"
|
425 |
msgstr "پیام های فرم"
|
426 |
|
427 |
-
#: includes/forms/views/tabs/form-messages.php:
|
428 |
msgid "Successfully subscribed"
|
429 |
msgstr "اشتراک با موفقیت انجام شد"
|
430 |
|
431 |
-
#: includes/forms/views/tabs/form-messages.php:
|
432 |
msgid ""
|
433 |
"The text that shows when an email address is successfully subscribed to the "
|
434 |
"selected list(s)."
|
435 |
msgstr "این نوشته وقتی که آدرس ایمیلی با موفقیت در لیست انتخاب شده مشترک میشود نشان داده میشود."
|
436 |
|
437 |
-
#: includes/forms/views/tabs/form-messages.php:
|
438 |
msgid "Invalid email address"
|
439 |
msgstr "آدرس ایمیل نامعتبر"
|
440 |
|
441 |
-
#: includes/forms/views/tabs/form-messages.php:
|
442 |
msgid "The text that shows when an invalid email address is given."
|
443 |
msgstr "این نوشته وقتی که آدرس ایمیل نا معتبر باشد نمایش داده میشود."
|
444 |
|
445 |
-
#: includes/forms/views/tabs/form-messages.php:
|
446 |
msgid "Required field missing"
|
447 |
msgstr "فیلد های فراموش شده"
|
448 |
|
449 |
-
#: includes/forms/views/tabs/form-messages.php:
|
450 |
msgid ""
|
451 |
"The text that shows when a required field for the selected list(s) is "
|
452 |
"missing."
|
453 |
msgstr "این نوشته وقتی که فیلدهای ضروری فراموش و یا پرنشده باشد نمایش داده میشود."
|
454 |
|
455 |
-
#: includes/forms/views/tabs/form-messages.php:
|
456 |
msgid "Already subscribed"
|
457 |
msgstr "از قبل مشترک شده"
|
458 |
|
459 |
-
#: includes/forms/views/tabs/form-messages.php:
|
460 |
msgid ""
|
461 |
"The text that shows when the given email is already subscribed to the "
|
462 |
"selected list(s)."
|
463 |
msgstr "این نوشته وقتی که ایمیل دریافتی از قبل در لیست انتخاب شده مشترک شده باشد نمایش داده میشود."
|
464 |
|
465 |
-
#: includes/forms/views/tabs/form-messages.php:
|
466 |
msgid "General error"
|
467 |
msgstr "خطا عمومی"
|
468 |
|
469 |
-
#: includes/forms/views/tabs/form-messages.php:
|
470 |
msgid "The text that shows when a general error occured."
|
471 |
msgstr "این نوشته وقتی خطای عمومی رخ دهد نمایش داده میشود."
|
472 |
|
473 |
-
#: includes/forms/views/tabs/form-messages.php:
|
474 |
msgid "Unsubscribed"
|
475 |
msgstr "لغو اشتراک"
|
476 |
|
477 |
-
#: includes/forms/views/tabs/form-messages.php:
|
478 |
msgid ""
|
479 |
"When using the unsubscribe method, this is the text that shows when the "
|
480 |
"given email address is successfully unsubscribed from the selected list(s)."
|
481 |
msgstr "وقتی که از متد لغو اشتراک استفاده شده این نوشته برای ایمیل هایی که با موفقیت اشتراکشان از لیست لغو شده نشان داده میشود."
|
482 |
|
483 |
-
#: includes/forms/views/tabs/form-messages.php:
|
484 |
msgid "Not subscribed"
|
485 |
msgstr "مشترک نشده"
|
486 |
|
487 |
-
#: includes/forms/views/tabs/form-messages.php:
|
488 |
msgid ""
|
489 |
"When using the unsubscribe method, this is the text that shows when the "
|
490 |
"given email address is not on the selected list(s)."
|
491 |
msgstr "وقتی که از متد لغو اشتراک استفاده شود ، این نوشته برای ایمیل هایی که جزو مشترکین نبوده اند نمایش داده میشود."
|
492 |
|
493 |
-
#: includes/forms/views/tabs/form-messages.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
494 |
msgid "HTML tags like %s are allowed in the message fields."
|
495 |
msgstr "برچسب های HTML مانند %s را در فیلدهای پیام مجاز می باشد."
|
496 |
|
@@ -502,379 +1043,52 @@ msgstr "تنظیمات فرم"
|
|
502 |
msgid "MailChimp specific settings"
|
503 |
msgstr "تنظیمات اختصاصی MailChimp "
|
504 |
|
505 |
-
#: includes/forms/views/tabs/form-settings.php:
|
506 |
msgid "Lists this form subscribes to"
|
507 |
msgstr "لیستی که مشترک آن میشوند"
|
508 |
|
509 |
-
#: includes/forms/views/tabs/form-settings.php:
|
510 |
-
#: includes/integrations/views/integration-settings.php:93
|
511 |
-
msgid "No lists found, <a href=\"%s\">are you connected to MailChimp</a>?"
|
512 |
-
msgstr "هیچ لیستی پیدا نشد ، %s شما به MailChimp متصل هستید؟%s"
|
513 |
-
|
514 |
-
#: includes/forms/views/tabs/form-settings.php:29
|
515 |
msgid ""
|
516 |
"Select the list(s) to which people who submit this form should be "
|
517 |
"subscribed."
|
518 |
msgstr "لیستی که می خواهید افرادی که پس از ارسال فرم مشترک آن شوند را انتخاب کنید."
|
519 |
|
520 |
-
#: includes/forms/views/tabs/form-settings.php:
|
521 |
msgid "Use double opt-in?"
|
522 |
msgstr "استفاده از قابلیت double opt-in؟"
|
523 |
|
524 |
-
#: includes/forms/views/tabs/form-settings.php:
|
525 |
-
|
526 |
-
|
527 |
-
#: includes/forms/views/tabs/form-settings.php:85
|
528 |
-
#: includes/forms/views/tabs/form-settings.php:115
|
529 |
-
#: includes/integrations/views/integration-settings.php:53
|
530 |
-
#: includes/integrations/views/integration-settings.php:66
|
531 |
-
#: includes/integrations/views/integration-settings.php:117
|
532 |
-
#: includes/integrations/views/integration-settings.php:129
|
533 |
-
#: includes/integrations/views/integration-settings.php:142
|
534 |
-
#: includes/integrations/views/integration-settings.php:163
|
535 |
-
#: includes/integrations/views/integration-settings.php:180
|
536 |
-
#: includes/integrations/views/integration-settings.php:199
|
537 |
-
#: integrations/contact-form-7/class-contact-form-7.php:69
|
538 |
-
msgid "Yes"
|
539 |
-
msgstr "بله"
|
540 |
-
|
541 |
-
#: includes/forms/views/tabs/form-settings.php:43
|
542 |
-
#: includes/forms/views/tabs/form-settings.php:58
|
543 |
-
#: includes/forms/views/tabs/form-settings.php:73
|
544 |
-
#: includes/forms/views/tabs/form-settings.php:89
|
545 |
-
#: includes/forms/views/tabs/form-settings.php:119
|
546 |
-
#: includes/integrations/views/integration-settings.php:54
|
547 |
-
#: includes/integrations/views/integration-settings.php:67
|
548 |
-
#: includes/integrations/views/integration-settings.php:118
|
549 |
-
#: includes/integrations/views/integration-settings.php:130
|
550 |
-
#: includes/integrations/views/integration-settings.php:146
|
551 |
-
#: includes/integrations/views/integration-settings.php:167
|
552 |
-
#: includes/integrations/views/integration-settings.php:184
|
553 |
-
#: includes/integrations/views/integration-settings.php:203
|
554 |
-
#: integrations/contact-form-7/class-contact-form-7.php:69
|
555 |
-
msgid "No"
|
556 |
-
msgstr "خیر"
|
557 |
-
|
558 |
-
#: includes/forms/views/tabs/form-settings.php:45
|
559 |
-
#: includes/integrations/views/integration-settings.php:149
|
560 |
-
msgid ""
|
561 |
-
"Select \"yes\" if you want people to confirm their email address before "
|
562 |
-
"being subscribed (recommended)"
|
563 |
-
msgstr "اگر می خواهید افراد قبل از مشترک شدن ایمیل تایید دریافت کنند \"بله\" را انتخاب کنید. ( توصیه میشود)"
|
564 |
-
|
565 |
-
#: includes/forms/views/tabs/form-settings.php:50
|
566 |
-
msgid "Send final welcome email?"
|
567 |
-
msgstr "ارسال ایمیل خوش آمدگویی نهایی؟"
|
568 |
-
|
569 |
-
#: includes/forms/views/tabs/form-settings.php:60
|
570 |
-
#: includes/integrations/views/integration-settings.php:169
|
571 |
-
msgid ""
|
572 |
-
"Select \"yes\" if you want to send your lists Welcome Email if a subscribe "
|
573 |
-
"succeeds (only when double opt-in is disabled)."
|
574 |
-
msgstr "اگر می خواهید ایمیل خوش آمدگویی برای مشترکینی که عضویتشان موفق بوده ارسال شود \"بله\" را انتخاب کنید."
|
575 |
-
|
576 |
-
#: includes/forms/views/tabs/form-settings.php:65
|
577 |
-
#: includes/integrations/views/integration-settings.php:176
|
578 |
-
msgid "Update existing subscribers?"
|
579 |
-
msgstr "بروزرسانی مشترکین موجود؟"
|
580 |
-
|
581 |
-
#: includes/forms/views/tabs/form-settings.php:75
|
582 |
-
#: includes/integrations/views/integration-settings.php:186
|
583 |
-
msgid ""
|
584 |
-
"Select \"yes\" if you want to update existing subscribers with the data that"
|
585 |
-
" is sent."
|
586 |
-
msgstr "اگر می خواهید به روزرسانی مشترکین موجود همرا با داده ها ارسال شود \"بله\" را انتخاب کنید."
|
587 |
-
|
588 |
-
#: includes/forms/views/tabs/form-settings.php:81
|
589 |
-
#: includes/integrations/views/integration-settings.php:195
|
590 |
-
msgid "Replace interest groups?"
|
591 |
-
msgstr "جایگزین interest groups؟"
|
592 |
|
593 |
-
#: includes/forms/views/tabs/form-settings.php:
|
594 |
-
#: includes/integrations/views/integration-settings.php:206
|
595 |
msgid ""
|
596 |
-
"
|
597 |
-
"
|
598 |
-
msgstr "
|
599 |
-
|
600 |
-
#: includes/forms/views/tabs/form-settings.php:93
|
601 |
-
#: includes/integrations/views/integration-settings.php:207
|
602 |
-
msgid "What does this do?"
|
603 |
-
msgstr "این گزینه چه کاری انجام می دهد؟"
|
604 |
|
605 |
-
#: includes/forms/views/tabs/form-settings.php:
|
606 |
msgid "Form behaviour"
|
607 |
msgstr "رفتار فرم"
|
608 |
|
609 |
-
#: includes/forms/views/tabs/form-settings.php:
|
610 |
msgid "Hide form after a successful sign-up?"
|
611 |
msgstr "پنهان کردن فرم پس از ثبت نام موفق؟"
|
612 |
|
613 |
-
#: includes/forms/views/tabs/form-settings.php:
|
614 |
msgid "Select \"yes\" to hide the form fields after a successful sign-up."
|
615 |
msgstr "اگر می خواهید بعد از آن که ثبت نام با موفقیت به پایان رسید فرم پنهان شود \"بله\" را انتخاب کنید."
|
616 |
|
617 |
-
#: includes/forms/views/tabs/form-settings.php:
|
618 |
msgid "Redirect to URL after successful sign-ups"
|
619 |
msgstr "انتقال به آدرس دلخواه بعد از اتمام موفق ثبت نام"
|
620 |
|
621 |
-
#: includes/forms/views/tabs/form-settings.php:
|
622 |
msgid "Example: %s"
|
623 |
msgstr "مثال: %s"
|
624 |
|
625 |
-
#: includes/forms/views/tabs/form-settings.php:
|
626 |
msgid ""
|
627 |
"Leave empty or enter <code>0</code> for no redirect. Otherwise, use complete"
|
628 |
" (absolute) URLs, including <code>http://</code>."
|
629 |
msgstr "برای عدم انتقال خالی بگذارید و یا <code>0</code> وارد کنید. و در صورت تمایل به انتقال آدرس را کامل وارد کنید، همراه با <code>http://</code>."
|
630 |
-
|
631 |
-
#: includes/integrations/class-admin.php:79
|
632 |
-
#: includes/integrations/class-admin.php:80
|
633 |
-
#: includes/integrations/views/integration-settings.php:10
|
634 |
-
#: includes/integrations/views/integrations.php:9
|
635 |
-
#: includes/integrations/views/integrations.php:17
|
636 |
-
msgid "Integrations"
|
637 |
-
msgstr "انضمامها "
|
638 |
-
|
639 |
-
#: includes/integrations/views/integration-settings.php:20
|
640 |
-
msgid "%s integration"
|
641 |
-
msgstr "انضمام %s"
|
642 |
-
|
643 |
-
#: includes/integrations/views/integration-settings.php:51
|
644 |
-
msgid "Enabled?"
|
645 |
-
msgstr "فعال شده؟"
|
646 |
-
|
647 |
-
#: includes/integrations/views/integration-settings.php:55
|
648 |
-
msgid ""
|
649 |
-
"Enable the %s integration? This will add a sign-up checkbox to the form."
|
650 |
-
msgstr "فعال نمودن انضمام %s ؟ این گزینه یک چک باکس جهت اشتراک در فرم قرار می دهد."
|
651 |
-
|
652 |
-
#: includes/integrations/views/integration-settings.php:64
|
653 |
-
msgid "Implicit?"
|
654 |
-
msgstr "مجازی؟"
|
655 |
-
|
656 |
-
#: includes/integrations/views/integration-settings.php:68
|
657 |
-
msgid ""
|
658 |
-
"Select \"no\" if you want to ask your visitors before they are subscribed "
|
659 |
-
"(recommended)."
|
660 |
-
msgstr "در صورتیکه می خواهید از بازدیدکنندگانتان قبل از اشتراک در خبرنامه پرسیده شود این گزینه را روی خیر تنظیم نمایید(پیشنهاد می شود)"
|
661 |
-
|
662 |
-
#: includes/integrations/views/integration-settings.php:78
|
663 |
-
msgid "MailChimp Lists"
|
664 |
-
msgstr "لیست های MailChimp"
|
665 |
-
|
666 |
-
#: includes/integrations/views/integration-settings.php:89
|
667 |
-
msgid ""
|
668 |
-
"Select the list(s) to which people who check the checkbox should be "
|
669 |
-
"subscribed."
|
670 |
-
msgstr "لیستی که می خواهید افرادی که چک باکس را پرکرده اند مشترک آن شوند را انتخاب کنید."
|
671 |
-
|
672 |
-
#: includes/integrations/views/integration-settings.php:102
|
673 |
-
msgid "Checkbox label text"
|
674 |
-
msgstr "نوشته برچسب چک باکس"
|
675 |
-
|
676 |
-
#: includes/integrations/views/integration-settings.php:105
|
677 |
-
msgid "HTML tags like %s are allowed in the label text."
|
678 |
-
msgstr "برچسب های HTML مانند %s در نوشته برچسب مجاز می باشد."
|
679 |
-
|
680 |
-
#: includes/integrations/views/integration-settings.php:115
|
681 |
-
msgid "Pre-check the checkbox?"
|
682 |
-
msgstr "کنترل مقدماتی چک باکس؟"
|
683 |
-
|
684 |
-
#: includes/integrations/views/integration-settings.php:119
|
685 |
-
msgid "Select \"yes\" if the checkbox should be pre-checked."
|
686 |
-
msgstr "در صورتیکه تمایل دارید چک باکس به صورت پیش فرض تیک خورده باشد این گزینه را روی بله تنظیم نمایید."
|
687 |
-
|
688 |
-
#: includes/integrations/views/integration-settings.php:127
|
689 |
-
msgid "Load some default CSS?"
|
690 |
-
msgstr "بارگیری برخی از CSS های پیشفرض"
|
691 |
-
|
692 |
-
#: includes/integrations/views/integration-settings.php:131
|
693 |
-
msgid "Select \"yes\" if the checkbox appears in a weird place."
|
694 |
-
msgstr "اگر چک باکس در یک مکان عجیب و غریب ظاهر شده است \"بله\" را انتخاب کنید."
|
695 |
-
|
696 |
-
#: includes/integrations/views/integration-settings.php:138
|
697 |
-
msgid "Double opt-in?"
|
698 |
-
msgstr "تکرار تایید؟"
|
699 |
-
|
700 |
-
#: includes/integrations/views/integration-settings.php:159
|
701 |
-
msgid "Send Welcome Email?"
|
702 |
-
msgstr "ارسال ایمیل خوش آمدگویی؟"
|
703 |
-
|
704 |
-
#: includes/integrations/views/integration-settings.php:244
|
705 |
-
msgid ""
|
706 |
-
"The selected MailChimp lists require non-default fields, which may prevent "
|
707 |
-
"this integration from working."
|
708 |
-
msgstr "لیستهای انتخابی MailChimp شما نیازمند فیلدهای هستند که به صورت پیش فرض وجود ندارند و همین امر منجز به این می شود که الحاقات شما کار نکند."
|
709 |
-
|
710 |
-
#: includes/integrations/views/integration-settings.php:245
|
711 |
-
msgid ""
|
712 |
-
"Please ensure you <a href=\"%s\">configure the plugin to send all required "
|
713 |
-
"fields</a> or <a href=\"%s\">log into your MailChimp account</a> and make "
|
714 |
-
"sure only the email & name fields are marked as required fields for the "
|
715 |
-
"selected list(s)."
|
716 |
-
msgstr "لطفا اطمینان حاصل نمایید که <a href=\"%s\">پلاگین را به گونه ای تنظیم نموده اید که تمامی فیلدهای اجباری را ارسال نماید</a> یا <a href=\"%s\">وارد حساب کاربری خود در MailChimp </a> شوید و اطمینان حاصل کنید که تنها فیلدهای ایمیل و نام به عنوان فیلدهای الزامی برای لیست یا لیستهای انتخابی برگزیده شده باشند."
|
717 |
-
|
718 |
-
#: includes/integrations/views/integrations.php:30
|
719 |
-
msgid "Enabled"
|
720 |
-
msgstr "فعال"
|
721 |
-
|
722 |
-
#: includes/integrations/views/integrations.php:31
|
723 |
-
msgid "Name"
|
724 |
-
msgstr "نام"
|
725 |
-
|
726 |
-
#: includes/integrations/views/integrations.php:32
|
727 |
-
msgid "Description"
|
728 |
-
msgstr "توضیحات"
|
729 |
-
|
730 |
-
#: includes/integrations/views/integrations.php:50
|
731 |
-
msgid ""
|
732 |
-
"This integration is enabled by default as it requires manual actions to "
|
733 |
-
"work."
|
734 |
-
msgstr "این الحاق به صورت پیش فرض فعال است زیرا نیازمند اعمال دستی برای کار است."
|
735 |
-
|
736 |
-
#: includes/integrations/views/integrations.php:57
|
737 |
-
msgid "Configure this integration"
|
738 |
-
msgstr "تنظیم این افزونه"
|
739 |
-
|
740 |
-
#: includes/views/general-settings.php:18
|
741 |
-
msgid "General Settings"
|
742 |
-
msgstr "تنظیمات عمومی"
|
743 |
-
|
744 |
-
#: includes/views/general-settings.php:35
|
745 |
-
msgid "Status"
|
746 |
-
msgstr "وضعیت"
|
747 |
-
|
748 |
-
#: includes/views/general-settings.php:39
|
749 |
-
msgid "CONNECTED"
|
750 |
-
msgstr "وصل شده"
|
751 |
-
|
752 |
-
#: includes/views/general-settings.php:41
|
753 |
-
msgid "NOT CONNECTED"
|
754 |
-
msgstr "وصل نشده"
|
755 |
-
|
756 |
-
#: includes/views/general-settings.php:48
|
757 |
-
msgid "API Key"
|
758 |
-
msgstr "کلید API"
|
759 |
-
|
760 |
-
#: includes/views/general-settings.php:50
|
761 |
-
msgid "Your MailChimp API key"
|
762 |
-
msgstr "کلید API مربوط MailChimp شما"
|
763 |
-
|
764 |
-
#: includes/views/general-settings.php:52
|
765 |
-
msgid "The API key for connecting with your MailChimp account."
|
766 |
-
msgstr "کلید API جهت ارتباط با حساب کاربری شما در MailChimp "
|
767 |
-
|
768 |
-
#: includes/views/general-settings.php:53
|
769 |
-
msgid "Get your API key here."
|
770 |
-
msgstr "کلید API خود را از اینجا دریافت کنید."
|
771 |
-
|
772 |
-
#: includes/views/general-settings.php:65
|
773 |
-
msgid "Usage Tracking"
|
774 |
-
msgstr "پیگیری مصرف"
|
775 |
-
|
776 |
-
#: includes/views/general-settings.php:71
|
777 |
-
msgid ""
|
778 |
-
"Allow us to anonymously track how this plugin is used to help us make it "
|
779 |
-
"better fit your needs."
|
780 |
-
msgstr "به ما اجازه دهید تا به صورت ناشناس بررسی کنیم که این پلاگین چگونه عمل می کند تا بتوانیم از نتایج به دست امده از بررسی های برای بهبود عملکرد این خبرنامه استفاده نماییم."
|
781 |
-
|
782 |
-
#: includes/views/general-settings.php:73
|
783 |
-
msgid "This is what we track."
|
784 |
-
msgstr "این مواردی است که ما بررسی می کنیم."
|
785 |
-
|
786 |
-
#: includes/views/parts/admin-footer.php:11
|
787 |
-
msgid ""
|
788 |
-
"MailChimp for WordPress is in need of translations. Is the plugin not "
|
789 |
-
"translated in your language or do you spot errors with the current "
|
790 |
-
"translations? Helping out is easy! Head over to <a href=\"%s\">the "
|
791 |
-
"translation project and click \"help translate\"</a>."
|
792 |
-
msgstr "این افزونه به زبان فارسی توسط <a href=\"https://profiles.wordpress.org/mehrban\"> Mehr@ban </a> ترجمه شده است و با ارایه هر بروزرسانی افزونه بهینه تر خواهد شد. اگر مایل هستید که ترجمه های دیگری را از این افزونه ارایه دهید و به بهود آن کمک کنید از بخش <a href=\"%s\"> پروژه ترجمه بازدید کنید</a>."
|
793 |
-
|
794 |
-
#: includes/views/parts/admin-footer.php:31
|
795 |
-
msgid ""
|
796 |
-
"This plugin is not developed by or affiliated with MailChimp in any way."
|
797 |
-
msgstr "این افزونه به هیچ عنوان وابسته و یا توسط میل چمپ توسعه نیافته است ."
|
798 |
-
|
799 |
-
#: includes/views/parts/lists-overview.php:1
|
800 |
-
msgid "Your MailChimp Account"
|
801 |
-
msgstr "حساب کاربری MailChimp شما"
|
802 |
-
|
803 |
-
#: includes/views/parts/lists-overview.php:2
|
804 |
-
msgid ""
|
805 |
-
"The table below shows your MailChimp lists and their details. If you just "
|
806 |
-
"applied changes to your MailChimp lists, please use the following button to "
|
807 |
-
"renew the cached lists configuration."
|
808 |
-
msgstr "جدول زیر لیستهایی را که شما در MailChimp تعریف نموده اید را به همراه جزئیات هر یک از آنها نمایش می دهد. درصورتیکه در حساب کاربری خود در سایت MailChimp تغییراتی روی هر یک از فرمها اعمال نموده اید لطفا از دکمه زیر برای بروزرسانی لیستها در سایت وردپرسی خود بهره بگیرید."
|
809 |
-
|
810 |
-
#: includes/views/parts/lists-overview.php:14
|
811 |
-
msgid "No lists were found in your MailChimp account"
|
812 |
-
msgstr "هیچ لیستی در حساب MailChimp یافت نشد"
|
813 |
-
|
814 |
-
#: includes/views/parts/lists-overview.php:16
|
815 |
-
msgid "A total of %d lists were found in your MailChimp account."
|
816 |
-
msgstr "%d لیست در حساب کاربری شما در سایت MailChimp وجود دارد."
|
817 |
-
|
818 |
-
#: includes/views/parts/lists-overview.php:21
|
819 |
-
msgid "List Name"
|
820 |
-
msgstr "نام لیست"
|
821 |
-
|
822 |
-
#: includes/views/parts/lists-overview.php:22
|
823 |
-
msgid "ID"
|
824 |
-
msgstr "شناسه"
|
825 |
-
|
826 |
-
#: includes/views/parts/lists-overview.php:23
|
827 |
-
msgid "Subscribers"
|
828 |
-
msgstr "مشترکین"
|
829 |
-
|
830 |
-
#: includes/views/parts/lists-overview.php:45
|
831 |
-
msgid "Edit this list in MailChimp"
|
832 |
-
msgstr "ویرایش این لیست در MailChimp "
|
833 |
-
|
834 |
-
#: includes/views/parts/lists-overview.php:59
|
835 |
-
msgid "%s (%s) with field type %s."
|
836 |
-
msgstr "%s (%s) با نوع فیلد %s."
|
837 |
-
|
838 |
-
#: includes/views/parts/lists-overview.php:83
|
839 |
-
msgid "%s (ID: %s) with type %s."
|
840 |
-
msgstr "%s (ID: %s) از نوع %s."
|
841 |
-
|
842 |
-
#: integrations/contact-form-7/admin-before.php:2
|
843 |
-
msgid ""
|
844 |
-
"To integrate with Contact Form 7, configure the settings below and then add "
|
845 |
-
"%s to your CF7 form mark-up."
|
846 |
-
msgstr "برای الحاق افزونه Contact Form 7 تنظیمات زیر را انجام داده و سپس %s را به کد Contact Form 7 خود اضافه نمایید."
|
847 |
-
|
848 |
-
#: integrations/custom/admin-before.php:2
|
849 |
-
msgid ""
|
850 |
-
"To get a custom integration to work, include the following HTML in the form "
|
851 |
-
"you are trying to integrate with."
|
852 |
-
msgstr "برای الحاق یک قابلیت شخصی سازی شده کد HTML زیر را به فرمی که قصد الحاق این قابلیت به آن را دارید اضافه کنید"
|
853 |
-
|
854 |
-
#: integrations/woocommerce/class-woocommerce.php:102
|
855 |
-
msgid "Order #%d"
|
856 |
-
msgstr "مرتب سازی #%d"
|
857 |
-
|
858 |
-
#. Plugin Name of the plugin/theme
|
859 |
-
msgid "MailChimp for WordPress"
|
860 |
-
msgstr "MailChimp for WordPress"
|
861 |
-
|
862 |
-
#. Plugin URI of the plugin/theme
|
863 |
-
msgid ""
|
864 |
-
"https://mc4wp.com/#utm_source=wp-plugin&utm_medium=mailchimp-for-"
|
865 |
-
"wp&utm_campaign=plugins-page"
|
866 |
-
msgstr "https://mc4wp.com/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=plugins-page"
|
867 |
-
|
868 |
-
#. Description of the plugin/theme
|
869 |
-
msgid ""
|
870 |
-
"MailChimp for WordPress by ibericode. Adds various highly effective sign-up "
|
871 |
-
"methods to your site."
|
872 |
-
msgstr "MailChimp برای وردپرس توسط ibericode. این افزونه متدهای موثر و متعددی را جهت ثبت نام و اشتراک به سایت شما اضافه می کند."
|
873 |
-
|
874 |
-
#. Author of the plugin/theme
|
875 |
-
msgid "ibericode"
|
876 |
-
msgstr "ibericode"
|
877 |
-
|
878 |
-
#. Author URI of the plugin/theme
|
879 |
-
msgid "https://ibericode.com/"
|
880 |
-
msgstr "https://ibericode.com/"
|
1 |
+
# Copyright (C) 2017 mailchimp-for-wp
|
2 |
+
# This file is distributed under the same license as the mailchimp-for-wp package.
|
3 |
# Translators:
|
4 |
# A.Mehraban <Mehr.Ban@chmail.ir>, 2015
|
5 |
# Ardavan Afrasiyabi <abox@usa.com>, 2015
|
6 |
# mahnaz vahedi <mahnazvn@yahoo.com>, 2016
|
7 |
+
# zeinab bakhtiari <carolinazb9@gmail.com>, 2017
|
8 |
msgid ""
|
9 |
msgstr ""
|
10 |
"Project-Id-Version: MailChimp for WordPress\n"
|
11 |
+
"PO-Revision-Date: 2017-06-11 11:48+0000\n"
|
12 |
+
"Last-Translator: zeinab bakhtiari <carolinazb9@gmail.com>\n"
|
|
|
|
|
13 |
"Language-Team: Persian (Iran) (http://www.transifex.com/ibericode/mailchimp-for-wordpress/language/fa_IR/)\n"
|
14 |
"MIME-Version: 1.0\n"
|
15 |
"Content-Type: text/plain; charset=UTF-8\n"
|
16 |
"Content-Transfer-Encoding: 8bit\n"
|
17 |
"Language: fa_IR\n"
|
18 |
"Plural-Forms: nplurals=1; plural=0;\n"
|
19 |
+
"X-Poedit-Basepath: ..\n"
|
20 |
+
"X-Poedit-KeywordsList: __;_e;_ex:1,2c;_n:1,2;_n_noop:1,2;_nx:1,2,4c;_nx_noop:1,2,3c;_x:1,2c;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\n"
|
21 |
+
"X-Poedit-SearchPath-0: .\n"
|
22 |
+
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
23 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
24 |
|
25 |
+
#: includes/admin/class-admin-texts.php62,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
#: includes/forms/views/edit-form.php:6
|
27 |
msgid "Settings"
|
28 |
msgstr "تنظیمات"
|
31 |
msgid "Documentation"
|
32 |
msgstr "مستندات"
|
33 |
|
34 |
+
#: includes/admin/class-admin.php:204
|
35 |
msgid ""
|
36 |
"Success! The cached configuration for your MailChimp lists has been renewed."
|
37 |
msgstr "تبریک می گوییم! تنظیمات مربوط به لیست های MailChimp که در سیستم شما کش شده بودند مجددا بارگزرای و بروز شدند."
|
38 |
|
39 |
+
#: includes/admin/class-admin.php:304
|
40 |
msgid ""
|
41 |
"This is a pro-only feature. Please upgrade to the premium version to be able"
|
42 |
" to use it."
|
43 |
msgstr "این ویژگی تنها در نسخه پیشرفته این افزونه در دسترس است به همین دلیل اگر تمایل به استفاده از آن را دارید باید نسخه MailChimp خود را به نسخه پیشرفته ارتقا دهید."
|
44 |
|
45 |
+
#: includes/admin/class-admin.php305,
|
46 |
+
#: includes/views/parts/lists-overview.php10,
|
47 |
+
#: includes/forms/views/parts/add-fields-help.php:43
|
48 |
+
msgid "Renew MailChimp lists"
|
49 |
+
msgstr "تازه سازی لیست های MailChimp"
|
50 |
+
|
51 |
+
#: includes/admin/class-admin.php:306
|
52 |
+
msgid "Fetching MailChimp lists"
|
53 |
+
msgstr "تازه سازی لیست های MailChimp"
|
54 |
+
|
55 |
+
#: includes/admin/class-admin.php:307
|
56 |
+
msgid "Done! MailChimp lists renewed."
|
57 |
+
msgstr ""
|
58 |
+
|
59 |
+
#: includes/admin/class-admin.php:308
|
60 |
+
msgid "This can take a while if you have many MailChimp lists."
|
61 |
+
msgstr ""
|
62 |
+
|
63 |
+
#: includes/admin/class-admin.php336, includes/views/general-settings.php:31
|
64 |
msgid "MailChimp API Settings"
|
65 |
msgstr "تنظیمات API مربوط به MailChimp"
|
66 |
|
67 |
+
#: includes/admin/class-admin.php:337
|
|
|
68 |
msgid "MailChimp"
|
69 |
msgstr "MailChimp"
|
70 |
|
71 |
+
#: includes/admin/class-admin.php343, includes/views/other-settings.php60,
|
72 |
+
#: includes/views/other-settings.php:70
|
73 |
+
msgid "Other Settings"
|
74 |
+
msgstr "سایر تنظیمات"
|
75 |
|
76 |
+
#: includes/admin/class-admin.php:344
|
77 |
+
msgid "Other"
|
78 |
+
msgstr "سایر"
|
79 |
+
|
80 |
+
#: includes/admin/class-admin.php:458
|
81 |
+
msgid "Log successfully emptied."
|
82 |
+
msgstr "اشتراک با موفقیت انجام شد"
|
83 |
+
|
84 |
+
#: includes/admin/class-admin.php:488
|
85 |
+
msgid ""
|
86 |
+
"To get started with MailChimp for WordPress, please <a href=\"%s\">enter "
|
87 |
+
"your MailChimp API key on the settings page of the plugin</a>."
|
88 |
+
msgstr "برای شروع به کار میل چیمپ برای وردپرس لطفا کد API را در تنطیمات پلاگین وارد کنید."
|
89 |
+
|
90 |
+
#: includes/admin/class-ads.php:39
|
91 |
+
msgid ""
|
92 |
+
"Want to customize the style of your form? <a href=\"%s\">Try our Styles "
|
93 |
+
"Builder</a> & edit the look of your forms with just a few clicks."
|
94 |
+
msgstr ""
|
95 |
+
|
96 |
+
#: includes/admin/class-ads.php:54
|
97 |
+
msgid ""
|
98 |
+
"Be notified whenever someone subscribes? <a href=\"%s\">MailChimp for "
|
99 |
+
"WordPress Premium</a> allows you to set up email notifications for your "
|
100 |
+
"forms."
|
101 |
+
msgstr ""
|
102 |
+
|
103 |
+
#: includes/admin/class-ads.php:56
|
104 |
+
msgid ""
|
105 |
+
"Increased conversions? <a href=\"%s\">MailChimp for WordPress Premium</a> "
|
106 |
+
"submits forms without reloading the entire page, resulting in a much better "
|
107 |
+
"experience for your visitors."
|
108 |
+
msgstr ""
|
109 |
+
|
110 |
+
#: includes/admin/class-ads.php:70
|
111 |
+
msgid "Upgrade to Premium"
|
112 |
+
msgstr "بروز رسانی به نسخه حرفه ای"
|
113 |
+
|
114 |
+
#: includes/admin/class-ads.php:83
|
115 |
+
msgid ""
|
116 |
+
"Do you want translated forms for all of your languages? <a href=\"%s\">Try "
|
117 |
+
"MailChimp for WordPress Premium</a>, which does just that plus more."
|
118 |
+
msgstr ""
|
119 |
+
|
120 |
+
#: includes/admin/class-ads.php:88
|
121 |
+
msgid ""
|
122 |
+
"Do you want to create more than one form? Our Premium add-on does just that!"
|
123 |
+
" <a href=\"%s\">Have a look at all Premium benefits</a>."
|
124 |
+
msgstr ""
|
125 |
+
|
126 |
+
#: includes/admin/class-ads.php:93
|
127 |
msgid ""
|
128 |
+
"Are you enjoying this plugin? The Premium add-on unlocks several powerful "
|
129 |
+
"features. <a href=\"%s\">Find out about all benefits now</a>."
|
130 |
+
msgstr ""
|
131 |
|
132 |
+
#: includes/admin/class-ads.php:112
|
133 |
msgid "More subscribers, better newsletters."
|
134 |
msgstr "داشتن مشترکین بیشتر منجر به داشتن خبرنامه بهتر می شود"
|
135 |
|
136 |
+
#: includes/admin/class-ads.php:113
|
137 |
msgid ""
|
138 |
"Learn how to best grow your lists & write better emails by subscribing to "
|
139 |
"our monthly tips."
|
140 |
msgstr "با اتشراک در خبرنامه ما با دریافت نکات ماهانه می آموزید که چگونه لیستها و ایمیلهای بهتری بسازید."
|
141 |
|
142 |
+
#: includes/admin/class-ads.php:116
|
143 |
msgid "Email Address"
|
144 |
msgstr "آدرس ایمیل"
|
145 |
|
146 |
+
#: includes/admin/class-ads.php:120
|
147 |
msgid "First Name"
|
148 |
msgstr "نام"
|
149 |
|
150 |
+
#: includes/admin/class-ads.php127, includes/forms/class-admin.php:94
|
151 |
msgid "Subscribe"
|
152 |
msgstr "اشتراک"
|
153 |
|
154 |
+
#: includes/admin/class-ads.php:150
|
155 |
+
msgid ""
|
156 |
+
"Do you want to track all WooCommerce orders in MailChimp so you can send "
|
157 |
+
"emails based on the purchase activity of your subscribers?"
|
158 |
+
msgstr ""
|
159 |
|
160 |
+
#: includes/admin/class-ads.php:153
|
161 |
+
msgid ""
|
162 |
+
"<a href=\"%s\">Upgrade to MailChimp for WordPress Premium</a> or <a "
|
163 |
+
"href=\"%s\">read more about MailChimp's E-Commerce features</a>."
|
164 |
+
msgstr ""
|
165 |
+
|
166 |
+
#: includes/admin/class-review-notice.php:68
|
167 |
+
msgid ""
|
168 |
+
"You've been using MailChimp for WordPress for some time now; we hope you "
|
169 |
+
"love it!"
|
170 |
+
msgstr ""
|
171 |
+
|
172 |
+
#: includes/admin/class-review-notice.php:69
|
173 |
+
msgid ""
|
174 |
+
"If you do, please <a href=\"%s\">leave us a 5★ rating on WordPress.org</a>. "
|
175 |
+
"It would be of great help to us."
|
176 |
+
msgstr ""
|
177 |
|
178 |
+
#: includes/admin/class-review-notice.php:71
|
179 |
+
msgid "Dismiss this notice."
|
180 |
+
msgstr ""
|
181 |
+
|
182 |
+
#: includes/api/class-api.php:84
|
183 |
msgid "Read more about common connectivity issues."
|
184 |
msgstr "درباره خطاهای متداول اتصال می توانید در این قسمت مطالعه بیشتری داشته باشید."
|
185 |
|
186 |
+
#: includes/forms/class-admin.php:62
|
187 |
+
msgid "Add to form"
|
188 |
+
msgstr "اضافه کردن فرم"
|
189 |
+
|
190 |
+
#: includes/forms/class-admin.php:63
|
191 |
+
msgid "City"
|
192 |
+
msgstr "شهر"
|
193 |
+
|
194 |
+
#: includes/forms/class-admin.php:64
|
195 |
+
msgid "Checkboxes"
|
196 |
+
msgstr "چک باکس"
|
197 |
+
|
198 |
+
#: includes/forms/class-admin.php:65
|
199 |
+
msgid "Choices"
|
200 |
+
msgstr "انتخاب"
|
201 |
+
|
202 |
+
#: includes/forms/class-admin.php:66
|
203 |
+
msgid "Choice type"
|
204 |
+
msgstr ""
|
205 |
+
|
206 |
+
#: includes/forms/class-admin.php:67
|
207 |
+
msgid "Choose a field to add to the form"
|
208 |
+
msgstr ""
|
209 |
+
|
210 |
+
#: includes/forms/class-admin.php:68
|
211 |
+
msgid "Close"
|
212 |
+
msgstr ""
|
213 |
+
|
214 |
+
#: includes/forms/class-admin.php:69
|
215 |
+
msgid "Country"
|
216 |
+
msgstr ""
|
217 |
+
|
218 |
+
#: includes/forms/class-admin.php:70
|
219 |
+
msgid "Dropdown"
|
220 |
+
msgstr ""
|
221 |
+
|
222 |
+
#: includes/forms/class-admin.php:71
|
223 |
+
msgid "Field type"
|
224 |
+
msgstr ""
|
225 |
+
|
226 |
+
#: includes/forms/class-admin.php:72
|
227 |
+
msgid "Field label"
|
228 |
+
msgstr ""
|
229 |
+
|
230 |
+
#: includes/forms/class-admin.php:73
|
231 |
+
msgid "Form action"
|
232 |
+
msgstr ""
|
233 |
+
|
234 |
+
#: includes/forms/class-admin.php:74
|
235 |
+
msgid ""
|
236 |
+
"This field will allow your visitors to choose whether they would like to "
|
237 |
+
"subscribe or unsubscribe"
|
238 |
+
msgstr ""
|
239 |
+
|
240 |
+
#: includes/forms/class-admin.php:75
|
241 |
+
msgid "Form fields"
|
242 |
+
msgstr ""
|
243 |
+
|
244 |
+
#: includes/forms/class-admin.php:76
|
245 |
+
msgid "This field is marked as required in MailChimp."
|
246 |
+
msgstr ""
|
247 |
+
|
248 |
+
#: includes/forms/class-admin.php:77
|
249 |
+
msgid "Initial value"
|
250 |
+
msgstr ""
|
251 |
+
|
252 |
+
#: includes/forms/class-admin.php:78
|
253 |
+
msgid "Interest categories"
|
254 |
+
msgstr ""
|
255 |
+
|
256 |
+
#: includes/forms/class-admin.php:79
|
257 |
+
msgid "Is this field required?"
|
258 |
+
msgstr ""
|
259 |
+
|
260 |
+
#: includes/forms/class-admin.php:80
|
261 |
+
msgid "List choice"
|
262 |
+
msgstr ""
|
263 |
+
|
264 |
+
#: includes/forms/class-admin.php:81
|
265 |
+
msgid "This field will allow your visitors to choose a list to subscribe to."
|
266 |
+
msgstr ""
|
267 |
+
|
268 |
+
#: includes/forms/class-admin.php:82
|
269 |
+
msgid "List fields"
|
270 |
+
msgstr ""
|
271 |
+
|
272 |
+
#: includes/forms/class-admin.php:83
|
273 |
+
msgid "Min"
|
274 |
+
msgstr ""
|
275 |
+
|
276 |
+
#: includes/forms/class-admin.php:84
|
277 |
+
msgid "Max"
|
278 |
+
msgstr ""
|
279 |
+
|
280 |
+
#: includes/forms/class-admin.php:85
|
281 |
+
msgid ""
|
282 |
+
"No available fields. Did you select a MailChimp list in the form settings?"
|
283 |
+
msgstr ""
|
284 |
+
|
285 |
+
#: includes/forms/class-admin.php:86
|
286 |
+
msgid "Optional"
|
287 |
+
msgstr ""
|
288 |
+
|
289 |
+
#: includes/forms/class-admin.php:87
|
290 |
+
msgid "Placeholder"
|
291 |
+
msgstr ""
|
292 |
+
|
293 |
+
#: includes/forms/class-admin.php:88
|
294 |
+
msgid "Text to show when field has no value."
|
295 |
+
msgstr ""
|
296 |
+
|
297 |
+
#: includes/forms/class-admin.php:89
|
298 |
+
msgid "Preselect"
|
299 |
+
msgstr ""
|
300 |
+
|
301 |
+
#: includes/forms/class-admin.php:90
|
302 |
+
msgid "Remove"
|
303 |
+
msgstr ""
|
304 |
+
|
305 |
+
#: includes/forms/class-admin.php:91
|
306 |
+
msgid "Radio buttons"
|
307 |
+
msgstr ""
|
308 |
+
|
309 |
+
#: includes/forms/class-admin.php:92
|
310 |
+
msgid "Street Address"
|
311 |
+
msgstr ""
|
312 |
+
|
313 |
+
#: includes/forms/class-admin.php:93
|
314 |
+
msgid "State"
|
315 |
+
msgstr ""
|
316 |
+
|
317 |
+
#: includes/forms/class-admin.php:95
|
318 |
+
msgid "Submit button"
|
319 |
+
msgstr ""
|
320 |
+
|
321 |
+
#: includes/forms/class-admin.php:96
|
322 |
+
msgid "Wrap in paragraph tags?"
|
323 |
+
msgstr ""
|
324 |
+
|
325 |
+
#: includes/forms/class-admin.php:97
|
326 |
+
msgid "Value"
|
327 |
+
msgstr ""
|
328 |
+
|
329 |
+
#: includes/forms/class-admin.php:98
|
330 |
+
msgid "Text to prefill this field with."
|
331 |
+
msgstr ""
|
332 |
+
|
333 |
+
#: includes/forms/class-admin.php:99
|
334 |
+
msgid "ZIP"
|
335 |
+
msgstr ""
|
336 |
+
|
337 |
+
#: includes/forms/class-admin.php111, includes/forms/class-admin.php112,
|
338 |
+
#: includes/forms/views/edit-form.php:24
|
339 |
msgid "Forms"
|
340 |
msgstr "فرمها"
|
341 |
|
342 |
+
#: includes/forms/class-admin.php152, includes/forms/class-admin.php:276
|
343 |
msgid "<strong>Success!</strong> Form successfully saved."
|
344 |
msgstr "فرم با موفقیت ذخیره شد."
|
345 |
|
346 |
+
#: includes/forms/class-admin.php:276
|
347 |
msgid "Preview form"
|
348 |
msgstr "پیش نمایش فرم"
|
349 |
|
350 |
+
#: includes/forms/class-admin.php449, includes/forms/class-widget.php:30
|
351 |
+
msgid "MailChimp Sign-Up Form"
|
352 |
+
msgstr "فرم ثبت نام MailChimp"
|
353 |
|
354 |
+
#: includes/forms/class-admin.php:453
|
355 |
+
msgid "Select the form to show"
|
356 |
+
msgstr "فرمی را برای نمایش انتخاب کنید"
|
357 |
|
358 |
+
#: includes/forms/class-form-previewer.php:146
|
359 |
msgid "Form preview"
|
360 |
msgstr "پیش نمایش فرم"
|
361 |
|
362 |
+
#: includes/forms/class-form-tags.php:60
|
363 |
msgid "Replaced with the form response (error or success messages)."
|
364 |
msgstr "جایگزین با فرم پاسخگو ( پیام های خطا یا موفقیت آمیز)."
|
365 |
|
366 |
+
#: includes/forms/class-form-tags.php:65
|
367 |
msgid "Data from the URL or a submitted form."
|
368 |
msgstr "داده دریافتی از آدرس مشخص یا فرم ثبت نام"
|
369 |
|
370 |
+
#: includes/forms/class-form-tags.php:71
|
371 |
+
msgid "Data from a cookie."
|
372 |
+
msgstr ""
|
373 |
+
|
374 |
+
#: includes/forms/class-form-tags.php77,
|
375 |
#: includes/integrations/class-integration-tags.php:45
|
376 |
msgid "Replaced with the number of subscribers on the selected list(s)"
|
377 |
msgstr "جایگزین با تعداد مشترکینی که از لیست انتخاب شده اند."
|
378 |
|
379 |
+
#: includes/forms/class-form-tags.php:82
|
380 |
msgid "The email address of the current visitor (if known)."
|
381 |
msgstr "آدرس ایمیل کاربر فعلی (در صورت تشخیص)"
|
382 |
|
383 |
+
#: includes/forms/class-form-tags.php:87
|
384 |
msgid "The URL of the page."
|
385 |
msgstr "آدرس صفحه (URL)"
|
386 |
|
387 |
+
#: includes/forms/class-form-tags.php:92
|
388 |
msgid "The path of the page."
|
389 |
msgstr "مسیر صفحه"
|
390 |
|
391 |
+
#: includes/forms/class-form-tags.php:97
|
392 |
msgid "The current date. Example: %s."
|
393 |
msgstr "تاریخ جاری. مثال : %s."
|
394 |
|
395 |
+
#: includes/forms/class-form-tags.php:102
|
396 |
msgid "The current time. Example: %s."
|
397 |
msgstr "زمان جاری. مثال: %s."
|
398 |
|
399 |
+
#: includes/forms/class-form-tags.php:107
|
400 |
msgid "The site's language. Example: %s."
|
401 |
msgstr "زبان سایت. مثال: %s."
|
402 |
|
403 |
+
#: includes/forms/class-form-tags.php:112
|
404 |
msgid "The visitor's IP address. Example: %s."
|
405 |
msgstr "آدرس آی پی کاربر. مثال : %s."
|
406 |
|
407 |
+
#: includes/forms/class-form-tags.php:117
|
408 |
msgid "The property of the currently logged-in user."
|
409 |
msgstr "مشخصه های کاربر حاضر در سایت"
|
410 |
|
411 |
+
#: includes/forms/class-form-tags.php:123
|
412 |
+
msgid "Property of the current page or post."
|
413 |
+
msgstr ""
|
414 |
+
|
415 |
+
#: includes/forms/class-form.php:133
|
416 |
msgid "There is no form with ID %d, perhaps it was deleted?"
|
417 |
msgstr "هیچ فرمی با شناسه %d, یافت نشد شاید این فرم پاک شده باشد؟"
|
418 |
|
420 |
msgid "Newsletter"
|
421 |
msgstr "خبرنامه"
|
422 |
|
|
|