From 683e9c9fa1b14bdbb7f144e658611774ffa95fbb Mon Sep 17 00:00:00 2001
From: Pavel Dohnal
{event.description}
diff --git a/assets/js/src/newsletters/types/automatic_emails/events_list.jsx b/assets/js/src/newsletters/types/automatic_emails/events_list.jsx index f09d31ad95..03c45e49c4 100644 --- a/assets/js/src/newsletters/types/automatic_emails/events_list.jsx +++ b/assets/js/src/newsletters/types/automatic_emails/events_list.jsx @@ -25,7 +25,7 @@ class AutomaticEmailEventsList extends React.Component { key={index} eventsConfigurator={this.eventsConfigurator} /> - ) + ) ); return ( diff --git a/assets/js/src/newsletters/types/welcome/scheduling.jsx b/assets/js/src/newsletters/types/welcome/scheduling.jsx index 17d9b0d4fd..764d25fcd8 100644 --- a/assets/js/src/newsletters/types/welcome/scheduling.jsx +++ b/assets/js/src/newsletters/types/welcome/scheduling.jsx @@ -111,9 +111,9 @@ const WelcomeScheduling = React.createClass({ }).fail((response) => { if (response.errors.length > 0) { MailPoet.Notice.error( - response.errors.map(error => error.message), - { scroll: true } - ); + response.errors.map(error => error.message), + { scroll: true } + ); } }); }, diff --git a/assets/js/src/num.js b/assets/js/src/num.js index a26a0cfacd..ef55cf7186 100644 --- a/assets/js/src/num.js +++ b/assets/js/src/num.js @@ -3,7 +3,7 @@ define('num', 'mailpoet' ], function ( // eslint-disable-line func-names mp -) { + ) { 'use strict'; var MailPoet = mp; @@ -12,10 +12,10 @@ define('num', var precision = precisionOpts || 0; var factor = Math.pow(10, precision); return (Math.round(num * factor) / factor) - .toLocaleString( - undefined, - { minimumFractionDigits: precision, maximumFractionDigits: precision } - ); + .toLocaleString( + undefined, + { minimumFractionDigits: precision, maximumFractionDigits: precision } + ); } }; }); diff --git a/assets/js/src/public.js b/assets/js/src/public.js index f82089f7c0..787da900b6 100644 --- a/assets/js/src/public.js +++ b/assets/js/src/public.js @@ -64,43 +64,43 @@ function ( // eslint-disable-line func-names data: formData.data }).fail(function (response) { // eslint-disable-line func-names form.find('.mailpoet_validate_error').html( - response.errors.map(function (error) { // eslint-disable-line func-names - return error.message; - }).join('{ ReactStringReplace( - MailPoet.I18n.t('WPUserEditNotice'), - /\[link\](.*?)\[\/link\]/g, - (match, i) => ( - { match } - ) + MailPoet.I18n.t('WPUserEditNotice'), + /\[link\](.*?)\[\/link\]/g, + (match, i) => ( + { match } ) + ) }
); diff --git a/assets/js/src/subscribers/importExport/export.js b/assets/js/src/subscribers/importExport/export.js index 1266609c2b..e1f017411c 100644 --- a/assets/js/src/subscribers/importExport/export.js +++ b/assets/js/src/subscribers/importExport/export.js @@ -5,149 +5,149 @@ define( 'mailpoet', 'handlebars' ], - function exportSubscribers( - _, - jQuery, - MailPoet, - Handlebars - ) { - if (!jQuery('#mailpoet_subscribers_export').length) { - return; - } - jQuery(document).ready(function documentReady() { - var segmentsContainerElement; - var subscriberFieldsContainerElement; - var nextStepButton; - var renderSegmentsAndFields; - var subscribersExportTemplate; - if (!window.exportData.segments) { - return; - } - subscribersExportTemplate = + function exportSubscribers( + _, + jQuery, + MailPoet, + Handlebars + ) { + if (!jQuery('#mailpoet_subscribers_export').length) { + return; + } + jQuery(document).ready(function documentReady() { + var segmentsContainerElement; + var subscriberFieldsContainerElement; + var nextStepButton; + var renderSegmentsAndFields; + var subscribersExportTemplate; + if (!window.exportData.segments) { + return; + } + subscribersExportTemplate = Handlebars.compile(jQuery('#mailpoet_subscribers_export_template').html()); - // render template - jQuery('#mailpoet_subscribers_export > div.inside').html(subscribersExportTemplate(window.exportData)); + // render template + jQuery('#mailpoet_subscribers_export > div.inside').html(subscribersExportTemplate(window.exportData)); - function toggleNextStepButton(condition) { - var disabled = 'button-disabled'; - if (condition === 'on') { - nextStepButton.removeClass(disabled); - } else { - nextStepButton.addClass(disabled); - } - } + function toggleNextStepButton(condition) { + var disabled = 'button-disabled'; + if (condition === 'on') { + nextStepButton.removeClass(disabled); + } else { + nextStepButton.addClass(disabled); + } + } - // define reusable variables - segmentsContainerElement = jQuery('#export_lists'); - subscriberFieldsContainerElement = jQuery('#export_columns'); - nextStepButton = jQuery('a.mailpoet_export_process'); - renderSegmentsAndFields = function renderSegmentsFields(container, data) { - if (container.data('select2')) { - container - .html('') - .select2('destroy'); - } - container - .select2({ - data: data, - width: '20em', - templateResult: function templateResult(item) { - return (item.subscriberCount > 0) - ? item.name + ' (' + parseInt(item.subscriberCount, 10).toLocaleString() + ')' - : item.name; - }, - templateSelection: function templateSelection(item) { - return (item.subscriberCount > 0) - ? item.name + ' (' + parseInt(item.subscriberCount, 10).toLocaleString() + ')' - : item.name; - } - }) - .on('select2:selecting', function onSelect2Selecting(selectEvent) { - var selectElement = this; - var selectedOptionId = selectEvent.params.args.data.id; - var fieldsToExclude = [ - 'select', - 'deselect' - ]; - var allOptions; - if (_.contains(fieldsToExclude, selectedOptionId)) { - selectEvent.preventDefault(); - if (selectedOptionId === 'deselect') { - jQuery(selectElement).val('').trigger('change'); - } else { - allOptions = []; - _.each(container.find('option'), function eachOption(field) { - if (!_.contains(fieldsToExclude, field.value)) { - allOptions.push(field.value); - } - }); - jQuery(selectElement).val(allOptions).trigger('change'); - } - jQuery(selectElement).select2('close'); - } - }) - .on('change', function onCHange() { - if ((window.exportData.segments && segmentsContainerElement.select2('data').length && subscriberFieldsContainerElement.select2('data').length) + // define reusable variables + segmentsContainerElement = jQuery('#export_lists'); + subscriberFieldsContainerElement = jQuery('#export_columns'); + nextStepButton = jQuery('a.mailpoet_export_process'); + renderSegmentsAndFields = function renderSegmentsFields(container, data) { + if (container.data('select2')) { + container + .html('') + .select2('destroy'); + } + container + .select2({ + data: data, + width: '20em', + templateResult: function templateResult(item) { + return (item.subscriberCount > 0) + ? item.name + ' (' + parseInt(item.subscriberCount, 10).toLocaleString() + ')' + : item.name; + }, + templateSelection: function templateSelection(item) { + return (item.subscriberCount > 0) + ? item.name + ' (' + parseInt(item.subscriberCount, 10).toLocaleString() + ')' + : item.name; + } + }) + .on('select2:selecting', function onSelect2Selecting(selectEvent) { + var selectElement = this; + var selectedOptionId = selectEvent.params.args.data.id; + var fieldsToExclude = [ + 'select', + 'deselect' + ]; + var allOptions; + if (_.contains(fieldsToExclude, selectedOptionId)) { + selectEvent.preventDefault(); + if (selectedOptionId === 'deselect') { + jQuery(selectElement).val('').trigger('change'); + } else { + allOptions = []; + _.each(container.find('option'), function eachOption(field) { + if (!_.contains(fieldsToExclude, field.value)) { + allOptions.push(field.value); + } + }); + jQuery(selectElement).val(allOptions).trigger('change'); + } + jQuery(selectElement).select2('close'); + } + }) + .on('change', function onCHange() { + if ((window.exportData.segments && segmentsContainerElement.select2('data').length && subscriberFieldsContainerElement.select2('data').length) || (!window.exportData.segments && subscriberFieldsContainerElement.select2('data').length) - ) { - toggleNextStepButton('on'); - } else { - toggleNextStepButton('off'); - } - }); - }; + ) { + toggleNextStepButton('on'); + } else { + toggleNextStepButton('off'); + } + }); + }; - renderSegmentsAndFields(subscriberFieldsContainerElement, window.subscriberFieldsSelect2); - renderSegmentsAndFields(segmentsContainerElement, window.segments); + renderSegmentsAndFields(subscriberFieldsContainerElement, window.subscriberFieldsSelect2); + renderSegmentsAndFields(segmentsContainerElement, window.segments); - subscriberFieldsContainerElement.val([ - 'email', - 'first_name', - 'last_name', - 'list_status', - 'global_status' - ]).trigger('change'); + subscriberFieldsContainerElement.val([ + 'email', + 'first_name', + 'last_name', + 'list_status', + 'global_status' + ]).trigger('change'); - nextStepButton.click(function nextClick() { - var exportFormat; - if (jQuery(this).hasClass('button-disabled')) { - return; - } - MailPoet.Modal.loading(true); - exportFormat = jQuery(':radio[name="option_format"]:checked').val(); - MailPoet.Ajax.post({ - api_version: window.mailpoet_api_version, - endpoint: 'ImportExport', - action: 'processExport', - data: JSON.stringify({ - export_format_option: exportFormat, - segments: (window.exportData.segments) ? segmentsContainerElement.val() : false, - subscriber_fields: subscriberFieldsContainerElement.val() - }) - }).always(function always() { - MailPoet.Modal.loading(false); - }).done(function done(response) { - var resultMessage = MailPoet.I18n.t('exportMessage') - .replace('%1$s', '' + parseInt(response.data.totalExported, 133).toLocaleString() + '') - .replace('[link]', '') - .replace('[/link]', ''); - jQuery('#export_result_notice').html('' + resultMessage + '
').show(); - window.location.href = response.data.exportFileURL; - MailPoet.trackEvent('Subscribers export completed', { - 'Total exported': response.data.totalExported, - 'File Format': exportFormat, - 'MailPoet Free version': window.mailpoet_version - }); - }).fail(function fail(response) { - if (response.errors.length > 0) { - MailPoet.Notice.error( + nextStepButton.click(function nextClick() { + var exportFormat; + if (jQuery(this).hasClass('button-disabled')) { + return; + } + MailPoet.Modal.loading(true); + exportFormat = jQuery(':radio[name="option_format"]:checked').val(); + MailPoet.Ajax.post({ + api_version: window.mailpoet_api_version, + endpoint: 'ImportExport', + action: 'processExport', + data: JSON.stringify({ + export_format_option: exportFormat, + segments: (window.exportData.segments) ? segmentsContainerElement.val() : false, + subscriber_fields: subscriberFieldsContainerElement.val() + }) + }).always(function always() { + MailPoet.Modal.loading(false); + }).done(function done(response) { + var resultMessage = MailPoet.I18n.t('exportMessage') + .replace('%1$s', '' + parseInt(response.data.totalExported, 133).toLocaleString() + '') + .replace('[link]', '') + .replace('[/link]', ''); + jQuery('#export_result_notice').html('' + resultMessage + '
').show(); + window.location.href = response.data.exportFileURL; + MailPoet.trackEvent('Subscribers export completed', { + 'Total exported': response.data.totalExported, + 'File Format': exportFormat, + 'MailPoet Free version': window.mailpoet_version + }); + }).fail(function fail(response) { + if (response.errors.length > 0) { + MailPoet.Notice.error( response.errors.map(function mapError(error) { return error.message; }), { scroll: true } ); - } - }); - }); - }); - }); + } + }); + }); + }); + }); diff --git a/assets/js/src/subscribers/importExport/import.js b/assets/js/src/subscribers/importExport/import.js index 2a96f26b41..087bed22ef 100644 --- a/assets/js/src/subscribers/importExport/import.js +++ b/assets/js/src/subscribers/importExport/import.js @@ -10,885 +10,283 @@ define( 'asyncqueue', 'moment' ], - function ( - Backbone, - _, - jQuery, - MailPoet, - Handlebars, - Papa, - AsyncQueue, - Moment - ) { - if (!jQuery('#mailpoet_subscribers_import').length) { - return; - } - jQuery(document).ready(function () { - var router; - jQuery('input[name="select_method"]').attr('checked', false); - // configure router - router = new (Backbone.Router.extend({ - routes: { - '': 'home', - step1: 'step1', - step2: 'step2', - step3: 'step3' - }, - home: function () { - this.navigate('step1', { trigger: true }); - } - }))(); - - function showCurrentStep() { - MailPoet.Notice.hide(); - MailPoet.Modal.loading(false); - jQuery('#mailpoet_subscribers_import > div[id^="step"]').hide(); - jQuery(location.hash).show(); + function ( + Backbone, + _, + jQuery, + MailPoet, + Handlebars, + Papa, + AsyncQueue, + Moment + ) { + if (!jQuery('#mailpoet_subscribers_import').length) { + return; + } + jQuery(document).ready(function () { + var router; + jQuery('input[name="select_method"]').attr('checked', false); + // configure router + router = new (Backbone.Router.extend({ + routes: { + '': 'home', + step1: 'step1', + step2: 'step2', + step3: 'step3' + }, + home: function () { + this.navigate('step1', { trigger: true }); } + }))(); - /* + function showCurrentStep() { + MailPoet.Notice.hide(); + MailPoet.Modal.loading(false); + jQuery('#mailpoet_subscribers_import > div[id^="step"]').hide(); + jQuery(location.hash).show(); + } + + /* * STEP 1 (upload or copy/paste) */ - router.on('route:step1', function () { - var methodProcessContainerTemplate; - var currentStepE; - var methodSelectionElement; - var pasteInputElement; - var pasteInputPlaceholderElement; - var pasteProcessButtonElement; - var mailChimpKeyInputElement; - var mailChimpKeyVerifyButtonElement; - var mailChimpListsContainerElement; - var mailChimpProcessButtonElement; - var uploadElement; - var uploadProcessButtonElement; - // set or reset temporary validation rule on all columns - window.mailpoetColumns = jQuery.map(window.mailpoetColumns, function (column) { - var col = column; - col.validation_rule = false; - return col; - }); + router.on('route:step1', function () { + var methodProcessContainerTemplate; + var currentStepE; + var methodSelectionElement; + var pasteInputElement; + var pasteInputPlaceholderElement; + var pasteProcessButtonElement; + var mailChimpKeyInputElement; + var mailChimpKeyVerifyButtonElement; + var mailChimpListsContainerElement; + var mailChimpProcessButtonElement; + var uploadElement; + var uploadProcessButtonElement; + // set or reset temporary validation rule on all columns + window.mailpoetColumns = jQuery.map(window.mailpoetColumns, function (column) { + var col = column; + col.validation_rule = false; + return col; + }); - if (typeof (window.importData.step1) !== 'undefined') { - showCurrentStep(); - return; - } + if (typeof (window.importData.step1) !== 'undefined') { + showCurrentStep(); + return; + } - // render process button for each method - methodProcessContainerTemplate = + // render process button for each method + methodProcessContainerTemplate = Handlebars.compile(jQuery('#method_process_template').html()); - jQuery('.mailpoet_method_process').html(methodProcessContainerTemplate()); + jQuery('.mailpoet_method_process').html(methodProcessContainerTemplate()); - // define reusable variables - currentStepE = jQuery(location.hash); - methodSelectionElement = jQuery('#select_method'); - pasteInputElement = jQuery('#paste_input'); - pasteInputPlaceholderElement = + // define reusable variables + currentStepE = jQuery(location.hash); + methodSelectionElement = jQuery('#select_method'); + pasteInputElement = jQuery('#paste_input'); + pasteInputPlaceholderElement = pasteInputElement.data('placeholder').replace(/\\n/g, '\n'); - pasteProcessButtonElement = + pasteProcessButtonElement = jQuery('#method_paste > div.mailpoet_method_process') .find('a.mailpoet_process'); - mailChimpKeyInputElement = jQuery('#mailchimp_key'); - mailChimpKeyVerifyButtonElement = jQuery('#mailchimp_key_verify'); - mailChimpListsContainerElement = jQuery('#mailchimp_lists'); - mailChimpProcessButtonElement = jQuery('#method_mailchimp > div.mailpoet_method_process') - .find('a.mailpoet_process'); - uploadElement = jQuery('#file_local'); - uploadProcessButtonElement = + mailChimpKeyInputElement = jQuery('#mailchimp_key'); + mailChimpKeyVerifyButtonElement = jQuery('#mailchimp_key_verify'); + mailChimpListsContainerElement = jQuery('#mailchimp_lists'); + mailChimpProcessButtonElement = jQuery('#method_mailchimp > div.mailpoet_method_process') + .find('a.mailpoet_process'); + uploadElement = jQuery('#file_local'); + uploadProcessButtonElement = jQuery('#method_file > div.mailpoet_method_process') .find('a.mailpoet_process'); - // define method change behavior - methodSelectionElement.change(function () { - var availableMethods = jQuery(':radio[name="select_method"]'); - var selectedMethod = availableMethods.index(availableMethods.filter(':checked')); - MailPoet.Notice.hide(); - // hide all methods - currentStepE.find('.inside') - .children('div[id^="method_"]') - .hide(); - // show selected method - currentStepE.find('.inside') - .children('div[id^="method_"]:eq(' + selectedMethod + ')') - .show() - .find('table') - .show(); - }); + // define method change behavior + methodSelectionElement.change(function () { + var availableMethods = jQuery(':radio[name="select_method"]'); + var selectedMethod = availableMethods.index(availableMethods.filter(':checked')); + MailPoet.Notice.hide(); + // hide all methods + currentStepE.find('.inside') + .children('div[id^="method_"]') + .hide(); + // show selected method + currentStepE.find('.inside') + .children('div[id^="method_"]:eq(' + selectedMethod + ')') + .show() + .find('table') + .show(); + }); - // start step 1 - showCurrentStep(); + // start step 1 + showCurrentStep(); - function toggleNextStepButton(element, condition) { - var disabled = 'button-disabled'; - if (condition === 'on') { - element.closest('table a').removeClass(disabled); - return; - } - element.closest('table a').addClass(disabled); + function toggleNextStepButton(element, condition) { + var disabled = 'button-disabled'; + if (condition === 'on') { + element.closest('table a').removeClass(disabled); + return; } + element.closest('table a').addClass(disabled); + } - function parseCSV(isFile) { - var processedSubscribers = []; - var parsedEmails = []; - var duplicateEmails = []; - var invalidEmails = []; - var emailColumnPosition = null; - var columnCount = null; - var isHeaderFound = false; - var advancedOptionHeader = true; - var advancedOptionDelimiter = ''; - var advancedOptionNewline = ''; - var advancedOptionComments = false; - // trim spaces, commas, periods, - // single/double quotes and convert to lowercase - var detectAndCleanupEmail = function (emailString) { - var test; - // decode HTML entities - var email = jQuery('').html(emailString).text(); - email = email - .toLowerCase() - // left/right trim spaces, punctuation (e.g., " 'email@email.com'; ") - // right trim non-printable characters (e.g., "email@email.com�") - .replace(/^["';.,\s]+|[^\x20-\x7E]+$|["';.,_\s]+$/g, '') - // remove spaces (e.g., "email @ email . com") - // remove urlencoded characters - .replace(/\s+|%\d+|,+/g, ''); - // detect e-mails that will be otherwise rejected by email regex - test = /<(.*?)>/.exec(email); - if (test) { - // is the email inside angle brackets (e.g., 'some@email.com