diff --git a/.eslintrc.es5.json b/.eslintrc.es5.json
index c31cea73e8..01950644f3 100644
--- a/.eslintrc.es5.json
+++ b/.eslintrc.es5.json
@@ -46,7 +46,6 @@
"camelcase": 0,
"padded-blocks": 0,
"strict": 0,
- "vars-on-top": 0,
"no-var": 0,
"no-unused-vars": 0,
"object-shorthand": 0,
diff --git a/assets/js/src/ajax.js b/assets/js/src/ajax.js
index d2d057ac09..28b3d3c78a 100644
--- a/assets/js/src/ajax.js
+++ b/assets/js/src/ajax.js
@@ -2,11 +2,10 @@ function requestFailed(errorMessage, xhr) {
if (xhr.responseJSON) {
return xhr.responseJSON;
}
- var message = errorMessage.replace('%d', xhr.status);
return {
errors: [
{
- message: message
+ message: errorMessage.replace('%d', xhr.status)
}
]
};
@@ -53,22 +52,24 @@ define('ajax', ['mailpoet', 'jquery', 'underscore'], function (mp, jQuery, _) {
data: this.options.data || {}
};
},
- request: function (method, options) {
- // set options
+ request: function(method, options) {
+ var params;
+ var deferred;
+ // set options
this.init(options);
- // set request params
- var params = this.getParams();
+ // set request params
+ params = this.getParams();
- // remove null values from the data object
+ // remove null values from the data object
if (_.isObject(params.data)) {
params.data = _.pick(params.data, function (value) {
return (value !== null);
});
}
- // ajax request
- var deferred = jQuery.post(
+ // ajax request
+ deferred = jQuery.post(
this.options.url,
params,
null,
diff --git a/assets/js/src/date.js b/assets/js/src/date.js
index 11956c7306..f9dc20e0ed 100644
--- a/assets/js/src/date.js
+++ b/assets/js/src/date.js
@@ -43,9 +43,10 @@ define('date',
},
format: function (date, opts) {
var options = opts || {};
+ var momentDate;
this.init(options);
- var momentDate = Moment(date, this.convertFormat(options.parseFormat));
+ momentDate = Moment(date, this.convertFormat(options.parseFormat));
if (options.offset === 0) momentDate = momentDate.utc();
return momentDate.format(this.convertFormat(this.options.format));
},
@@ -70,7 +71,12 @@ define('date',
format: 'H:i:s'
});
},
- convertFormat: function (format) {
+ convertFormat: function(format) {
+ var replacements;
+ var convertedFormat;
+ var escapeToken;
+ var index;
+ var token;
var format_mappings = {
date: {
d: 'DD',
@@ -140,12 +146,11 @@ define('date',
if (!format || format.length <= 0) return format;
- var replacements = format_mappings['date'];
+ replacements = format_mappings['date'];
+ convertedFormat = [];
+ escapeToken = false;
- var convertedFormat = [];
- var escapeToken = false;
-
- for (var index = 0, token = ''; format.charAt(index); index += 1) {
+ for(index = 0, token = ''; format.charAt(index); index += 1){
token = format.charAt(index);
if (escapeToken === true) {
convertedFormat.push('[' + token + ']');
diff --git a/assets/js/src/form_editor/form_editor.js b/assets/js/src/form_editor/form_editor.js
index c0233f6976..9ab2b13820 100644
--- a/assets/js/src/form_editor/form_editor.js
+++ b/assets/js/src/form_editor/form_editor.js
@@ -7,6 +7,10 @@
'use strict';
+var Observable;
+var WysijaHistory;
+var WysijaForm;
+
Event.cacheDelegated = {};
Object.extend(document, (function () {
var cache = Event.cacheDelegated;
@@ -30,20 +34,22 @@ Object.extend(document, (function () {
}
function destroyWrapper(selector, eventName, handler) {
+ var wrapper;
var c = getCacheForSelector(selector);
- if (!c[eventName]) return false;
- var wrapper = findWrapper(selector, eventName, handler);
+ if(!c[eventName]) return false;
+ wrapper = findWrapper(selector, eventName, handler);
c[eventName] = c[eventName].without(wrapper);
return wrapper;
}
function createWrapper(selector, eventName, handler, context) {
var wrapper;
+ var element;
var c = getWrappersForSelector(selector, eventName);
if(c.pluck('handler').include(handler)) return false;
wrapper = function(event) {
- var element = event.findElement(selector);
- if (element) handler.call(context || element, event, element);
+ element = event.findElement(selector);
+ if(element) handler.call(context || element, event, element);
};
wrapper.handler = handler;
c.push(wrapper);
@@ -57,7 +63,8 @@ Object.extend(document, (function () {
},
stopDelegating: function (selector, eventName, handler) {
var length = arguments.length;
- switch (length) {
+ var wrapper;
+ switch(length) {
case 2:
getWrappersForSelector(selector, eventName).each(function (wrapper) {
document.stopDelegating(selector, eventName, wrapper.handler);
@@ -74,15 +81,15 @@ Object.extend(document, (function () {
});
break;
default:
- var wrapper = destroyWrapper.apply(null, arguments);
- if (wrapper) document.stopObserving(eventName, wrapper);
+ wrapper = destroyWrapper.apply(null, arguments);
+ if(wrapper) document.stopObserving(eventName, wrapper);
}
return document;
}
};
})());
-var Observable = (function () {
+Observable = (function() {
function getEventName(nameA, namespace) {
var name = nameA.substring(2);
if (namespace) name = namespace + ':' + name;
@@ -111,12 +118,12 @@ var Observable = (function () {
});
}
return {
- observe: function (selector) {
- if (!this.handlers) this.handlers = {};
- if (this.handlers[selector]) return;
+ observe: function(selector) {
var klass = this;
- if (this.prototype.onDomLoaded) {
- if (document.loaded) {
+ if(!this.handlers) this.handlers = {};
+ if(this.handlers[selector]) return;
+ if(this.prototype.onDomLoaded) {
+ if(document.loaded) {
onDomLoad(selector, klass);
} else {
document.observe('dom:loaded', onDomLoad.curry(selector, klass));
@@ -147,9 +154,9 @@ Object.extend(window.Droppables, {
return proceed(drop);
}),
show: function(point, element) {
- if(!this.drops.length) return;
var drop;
var affected = [];
+ if(!this.drops.length) return;
this.drops.each(function(drop) {
if(window.Droppables.isAffected(point, element, drop)) affected.push(drop);
});
@@ -197,7 +204,7 @@ Object.extend(window.Droppables, {
- set a maximum number of items to be stored
*/
-var WysijaHistory = {
+WysijaHistory = {
container: 'mailpoet_form_history',
size: 30,
enqueue: function (element) {
@@ -241,7 +248,7 @@ var WysijaHistory = {
};
/* MailPoet Form */
-var WysijaForm = {
+WysijaForm = {
version: '0.7',
options: {
container: 'mailpoet_form_container',
@@ -293,8 +300,9 @@ var WysijaForm = {
WysijaForm.Block.create(block, window.$('block_placeholder'));
});
},
- load: function (data) {
- if (data === undefined) return;
+ load: function(data) {
+ var settings_elements;
+ if(data === undefined) return;
// load body
if (data.body !== undefined) {
@@ -304,8 +312,8 @@ var WysijaForm = {
});
// load settings
- var settings_elements = window.$('mailpoet_form_settings').getElements();
- settings_elements.each(function (setting) {
+ settings_elements = window.$('mailpoet_form_settings').getElements();
+ settings_elements.each(function(setting) {
// skip lists
if (setting.name === 'segments') {
return true;
@@ -402,7 +410,8 @@ var WysijaForm = {
}
return data;
},
- toggleWidgets: function () {
+ toggleWidgets: function() {
+ var hasSegmentSelection;
window.$$('a[wysija_unique="1"]').invoke('removeClassName', 'disabled');
// loop through each unique field already inserted in the editor and disable its toolbar equivalent
@@ -413,7 +422,7 @@ var WysijaForm = {
}
});
- var hasSegmentSelection = WysijaForm.hasSegmentSelection();
+ hasSegmentSelection = WysijaForm.hasSegmentSelection();
if (hasSegmentSelection) {
window.$('mailpoet_form_segments').writeAttribute('required', false).disable();
@@ -428,8 +437,9 @@ var WysijaForm = {
},
isSegmentSelectionValid: function () {
var segment_selection = window.$$('#' + WysijaForm.options.editor + ' [wysija_id="segments"]')[0];
- if (segment_selection !== undefined) {
- var block = WysijaForm.get(segment_selection).block.getData();
+ var block;
+ if(segment_selection !== undefined) {
+ block = WysijaForm.get(segment_selection).block.getData();
return (
(block.params.values !== undefined)
&&
@@ -438,12 +448,14 @@ var WysijaForm = {
}
return false;
},
- setBlockPositions: function (event, target) {
+ setBlockPositions: function(event, target) {
+ var index = 1;
+ var block_placeholder;
+ var previous_placeholder;
// release dragging lock
WysijaForm.locks.dragging = false;
- var index = 1;
- WysijaForm.getBlocks().each(function (container) {
+ WysijaForm.getBlocks().each(function(container) {
container.setPosition(index++);
// remove z-index value to avoid issues when resizing images
if (container['block'] !== undefined) {
@@ -455,8 +467,8 @@ var WysijaForm = {
if (target !== undefined) {
// get placeholders (previous placeholder matches the placeholder linked to the next block)
- var block_placeholder = window.$(target.element.readAttribute('wysija_placeholder'));
- var previous_placeholder = target.element.previous('.block_placeholder');
+ block_placeholder = window.$(target.element.readAttribute('wysija_placeholder'));
+ previous_placeholder = target.element.previous('.block_placeholder');
if (block_placeholder !== null) {
// put block placeholder before the current block
@@ -491,12 +503,15 @@ var WysijaForm = {
var is_visible = (parentPos.top <= (WysijaForm.scroll.top + viewportHeight));
var buttonMargin = 5;
var relativeTop = buttonMargin;
+ var absoluteTop;
+ var parentTop;
+ var parentBottom;
if (is_visible) {
// desired position is set to center of viewport
- var absoluteTop = parseInt(WysijaForm.scroll.top + ((viewportHeight / 2) - (element.getHeight() / 2)), 10);
- var parentTop = parseInt(parentPos.top - blockPadding, 10);
- var parentBottom = parseInt(parentPos.top + parentDim.height - blockPadding, 10);
+ absoluteTop = parseInt(WysijaForm.scroll.top + ((viewportHeight / 2) - (element.getHeight() / 2)), 10);
+ parentTop = parseInt(parentPos.top - blockPadding, 10);
+ parentBottom = parseInt(parentPos.top + parentDim.height - blockPadding, 10);
// always center
relativeTop = parseInt((parentDim.height / 2) - (element.getHeight() / 2), 10);
@@ -520,10 +535,11 @@ var WysijaForm = {
if (WysijaForm.toolbar.x === null) WysijaForm.toolbar.x = parseInt(WysijaForm.toolbar.left + window.$(WysijaForm.options.container).getDimensions().width + 15);
},
- setToolbarPosition: function () {
+ setToolbarPosition: function() {
+ var position;
WysijaForm.initToolbarPosition();
- var position = {
+ position = {
top: WysijaForm.toolbar.y + 'px',
visibility: 'visible'
};
@@ -587,10 +603,12 @@ var WysijaForm = {
instances: {},
get: function (element, typ) {
var type = typ;
- if (type === undefined) type = 'block';
+ var id;
+ var instance;
+ if(type === undefined) type = 'block';
// identify element
- var id = element.identify();
- var instance = WysijaForm.instances[id] || new WysijaForm[type.capitalize().camelize()](id);
+ id = element.identify();
+ instance = WysijaForm.instances[id] || new WysijaForm[type.capitalize().camelize()](id);
WysijaForm.instances[id] = instance;
return instance;
@@ -768,16 +786,18 @@ WysijaForm.Block = window.Class.create({
}
}
},
- makeBlockDroppable: function () {
- if (this.isBlockDroppableEnabled() === false) {
- var block_placeholder = this.getBlockDroppable();
+ makeBlockDroppable: function() {
+ var block_placeholder;
+ if(this.isBlockDroppableEnabled() === false) {
+ block_placeholder = this.getBlockDroppable();
window.Droppables.add(block_placeholder.identify(), WysijaForm.blockDropOptions);
block_placeholder.addClassName('enabled');
}
},
- removeBlockDroppable: function () {
- if (this.isBlockDroppableEnabled()) {
- var block_placeholder = this.getBlockDroppable();
+ removeBlockDroppable: function() {
+ var block_placeholder;
+ if(this.isBlockDroppableEnabled()) {
+ block_placeholder = this.getBlockDroppable();
window.Droppables.remove(block_placeholder.identify());
block_placeholder.removeClassName('enabled');
}
@@ -808,7 +828,9 @@ WysijaForm.Block = window.Class.create({
getControls: function () {
return this.element.down('.wysija_controls');
},
- setupControls: function () {
+ setupControls: function() {
+ var block;
+ var field;
// enable controls
this.controls = this.getControls();
@@ -859,9 +881,9 @@ WysijaForm.Block = window.Class.create({
if (this.settingsButton !== null) {
this.settingsButton.observe('click', function (event) {
// TODO: refactor
- var block = window.$(event.target).up('.mailpoet_form_block') || null;
- if (block !== null) {
- var field = WysijaForm.getFieldData(block);
+ block = window.$(event.target).up('.mailpoet_form_block') || null;
+ if(block !== null) {
+ field = WysijaForm.getFieldData(block);
this.editSettings();
}
}.bind(this));
@@ -907,20 +929,26 @@ WysijaForm.Block = window.Class.create({
/* Invoked on item dropped */
WysijaForm.Block.create = function (createBlock, target) {
var block = createBlock;
- if (window.$('form_template_' + block.type) === null) {
+ var body;
+ var block_template;
+ var template;
+ var output;
+ var settings_segments;
+ var element;
+ if(window.$('form_template_' + block.type) === null) {
return false;
}
- var body = window.$(WysijaForm.options.body);
- var block_template = window.Handlebars.compile(window.$('form_template_block').innerHTML);
- var template = window.Handlebars.compile(window.$('form_template_' + block.type).innerHTML);
- var output = '';
+ body = window.$(WysijaForm.options.body);
+ block_template = window.Handlebars.compile(window.$('form_template_block').innerHTML);
+ template = window.Handlebars.compile(window.$('form_template_' + block.type).innerHTML);
+ output = '';
- if (block.type === 'segment') {
- if (block.params.values === undefined) {
- var settings_segments = window.jQuery('#mailpoet_form_segments').val();
- if (settings_segments !== null && settings_segments.length > 0) {
- block.params.values = window.mailpoet_segments.filter(function (segment) {
+ if(block.type === 'segment') {
+ if(block.params.values === undefined) {
+ settings_segments = window.jQuery('#mailpoet_form_segments').val();
+ if(settings_segments !== null && settings_segments.length > 0){
+ block.params.values = window.mailpoet_segments.filter(function(segment) {
return (settings_segments.indexOf(segment.id) !== -1);
});
}
@@ -938,8 +966,8 @@ WysijaForm.Block.create = function (createBlock, target) {
}
// if the drop target was the bottom placeholder
- var element = null;
- if (target.identify() === 'block_placeholder') {
+ element = null;
+ if(target.identify() === 'block_placeholder') {
// insert block at the bottom
element = body.insert(output);
// block = body.childElements().last();
@@ -985,9 +1013,9 @@ WysijaForm.Widget = window.Class.create(WysijaForm.Block, {
info('widget -> setup');
this.setupControls();
},
- save: function () {
- info('widget -> save');
+ save: function() {
var data = this.getData();
+ info('widget -> save');
if (data.element !== undefined) {
delete data.element;
@@ -1021,17 +1049,21 @@ WysijaForm.Widget = window.Class.create(WysijaForm.Block, {
remove: function () {
this.removeBlock();
},
- redraw: function (data) {
+ redraw: function(data) {
+ var options;
+ var block_template;
+ var template;
+ var params;
// set parameters
this.setData(data);
- var options = this.getData();
+ options = this.getData();
// redraw block
- var block_template = window.Handlebars.compile(window.$('form_template_block').innerHTML);
- var template = window.Handlebars.compile(window.$('form_template_' + options.type).innerHTML);
- var data = window.$H(options).merge({
+ block_template = window.Handlebars.compile(window.$('form_template_block').innerHTML);
+ template = window.Handlebars.compile(window.$('form_template_' + options.type).innerHTML);
+ params = window.$H(options).merge({
template: template(options)
}).toObject();
- this.element.replace(block_template(data));
+ this.element.replace(block_template(params));
WysijaForm.init();
},
@@ -1063,9 +1095,9 @@ function info(value) {
var noop = function () {};
var methods = ['assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'markTimeline', 'profile', 'profileEnd', 'markTimeline', 'table', 'time', 'timeEnd', 'timeStamp', 'trace', 'warn'];
var length = methods.length;
- window.console = {};
var console = {};
- while (length--) {
+ window.console = {};
+ while(length--) {
console[methods[length]] = noop;
}
}());
diff --git a/assets/js/src/handlebars_helpers.js b/assets/js/src/handlebars_helpers.js
index aa61f9e1b3..e3796c2384 100644
--- a/assets/js/src/handlebars_helpers.js
+++ b/assets/js/src/handlebars_helpers.js
@@ -3,7 +3,8 @@ define('handlebars_helpers', ['handlebars'], function (Handlebars) {
Handlebars.registerHelper('concat', function() {
var size = (arguments.length - 1);
var output = '';
- for(var i = 0; i < size; i++) {
+ var i;
+ for(i = 0; i < size; i++) {
output += arguments[i];
}
return output;
@@ -12,16 +13,17 @@ define('handlebars_helpers', ['handlebars'], function (Handlebars) {
Handlebars.registerHelper('number_format', function (value, block) {
return Number(value).toLocaleString();
});
- Handlebars.registerHelper('date_format', function (timestamp, block) {
- if (window.moment) {
- if (timestamp === undefined || isNaN(timestamp) || timestamp <= 0) {
+ Handlebars.registerHelper('date_format', function(timestamp, block) {
+ var f;
+ if(window.moment) {
+ if(timestamp === undefined || isNaN(timestamp) || timestamp <= 0) {
return;
}
- // set date format
- var f = block.hash.format || 'MMM Do, YYYY';
- // check if we passed a timestamp
- if (parseInt(timestamp, 10) == timestamp) {
+ // set date format
+ f = block.hash.format || 'MMM Do, YYYY';
+ // check if we passed a timestamp
+ if(parseInt(timestamp, 10) == timestamp) {
return window.moment.unix(timestamp).format(f);
} else {
return window.moment.utc(timestamp).format(f);
@@ -37,6 +39,7 @@ define('handlebars_helpers', ['handlebars'], function (Handlebars) {
});
Handlebars.registerHelper('ifCond', function (v1, operator, v2, options) {
+ var values;
switch (operator) {
case '==':
return (v1 == v2) ? options.fn(this) : options.inverse(this);
@@ -59,7 +62,7 @@ define('handlebars_helpers', ['handlebars'], function (Handlebars) {
case '||':
return (v1 || v2) ? options.fn(this) : options.inverse(this);
case 'in':
- var values = v2.split(',');
+ values = v2.split(',');
return (v2.indexOf(v1) !== -1) ? options.fn(this) : options.inverse(this);
default:
return options.inverse(this);
@@ -95,11 +98,12 @@ define('handlebars_helpers', ['handlebars'], function (Handlebars) {
});
- Handlebars.registerHelper('rsa_key', function (value, block) {
- // extract all lines into an array
- if (value === undefined) return '';
+ Handlebars.registerHelper('rsa_key', function(value, block) {
+ var lines;
+ // extract all lines into an array
+ if(value === undefined) return '';
- var lines = value.trim().split('\n');
+ lines = value.trim().split('\n');
// remove header & footer
lines.shift();
@@ -126,10 +130,10 @@ define('handlebars_helpers', ['handlebars'], function (Handlebars) {
*/
Handlebars.registerHelper('ellipsis', function (str, limit, append) {
var strAppend = append;
+ var sanitized = str.replace(/(<([^>]+)>)/g, '');
if (strAppend === undefined) {
strAppend = '';
}
- var sanitized = str.replace(/(<([^>]+)>)/g, '');
if (sanitized.length > limit) {
return sanitized.substr(0, limit - strAppend.length) + strAppend;
} else {
diff --git a/assets/js/src/modal.js b/assets/js/src/modal.js
index c197c180b4..1d0842ce2d 100644
--- a/assets/js/src/modal.js
+++ b/assets/js/src/modal.js
@@ -115,8 +115,9 @@ define('modal', ['mailpoet', 'jquery'],
return window.Handlebars.compile(template);
}
},
- init: function (options) {
- if (this.initialized === true) {
+ init: function(options) {
+ var modal;
+ if(this.initialized === true) {
this.close();
}
// merge options
@@ -133,8 +134,8 @@ define('modal', ['mailpoet', 'jquery'],
if (this.options.type !== null) {
// insert modal depending on its type
- if (this.options.type === 'popup') {
- var modal = this.compileTemplate(
+ if(this.options.type === 'popup') {
+ modal = this.compileTemplate(
this.templates[this.options.type]
);
// create modal
@@ -342,21 +343,22 @@ define('modal', ['mailpoet', 'jquery'],
return this;
},
- setPosition: function () {
- switch (this.options.type) {
+ setPosition: function() {
+ var screenWidth;
+ var screenHeight;
+ var modalWidth;
+ var modalHeight;
+ switch(this.options.type) {
case 'popup':
- var screenWidth = jQuery(window).width();
- var screenHeight = jQuery(window).height();
- var modalWidth = jQuery('.mailpoet_'+ this.options.type +'_wrapper').width();
- var modalHeight = jQuery('.mailpoet_'+ this.options.type +'_wrapper').height();
+ screenWidth = jQuery(window).width();
+ screenHeight = jQuery(window).height();
+ modalWidth = jQuery('.mailpoet_'+ this.options.type +'_wrapper').width();
+ modalHeight = jQuery('.mailpoet_'+ this.options.type +'_wrapper').height();
- var top = Math.max(48, parseInt((screenHeight / 2) - (modalHeight / 2)));
- var left = Math.max(0, parseInt((screenWidth / 2) - (modalWidth / 2)));
-
- // set position of popup depending on screen dimensions.
+ // set position of popup depending on screen dimensions.
jQuery('#mailpoet_popup').css({
- top: top,
- left: left
+ top: Math.max(48, parseInt((screenHeight / 2) - (modalHeight / 2))),
+ left: Math.max(0, parseInt((screenWidth / 2) - (modalWidth / 2)))
});
break;
case 'panel':
diff --git a/assets/js/src/newsletter_editor/behaviors/ContainerDropZoneBehavior.js b/assets/js/src/newsletter_editor/behaviors/ContainerDropZoneBehavior.js
index d71f8d0f4e..893ac8cf3b 100644
--- a/assets/js/src/newsletter_editor/behaviors/ContainerDropZoneBehavior.js
+++ b/assets/js/src/newsletter_editor/behaviors/ContainerDropZoneBehavior.js
@@ -197,6 +197,7 @@ define([
var index;
var tempCollection;
var tempCollection2;
+ var tempModel;
if (dropPosition === undefined) return;
@@ -220,7 +221,7 @@ define([
} else {
// Special insertion by replacing target block with collection
// and inserting dropModel into that
- var tempModel = viewCollection.at(dropPosition.index);
+ tempModel = viewCollection.at(dropPosition.index);
tempCollection = new (window.EditorApplication.getBlockTypeModel('container'))({
orientation: (view.model.get('orientation') === 'vertical') ? 'horizontal' : 'vertical'
diff --git a/assets/js/src/newsletter_editor/behaviors/DraggableBehavior.js b/assets/js/src/newsletter_editor/behaviors/DraggableBehavior.js
index 8ef4679fb1..5b03e9e536 100644
--- a/assets/js/src/newsletter_editor/behaviors/DraggableBehavior.js
+++ b/assets/js/src/newsletter_editor/behaviors/DraggableBehavior.js
@@ -49,18 +49,21 @@ define([
onstart: function (startEvent) {
var event = startEvent;
+ var centerXOffset;
+ var centerYOffset;
+ var parentOffset;
+ var tempClone;
+ var clone;
+ var $original;
+ var $clone;
if (that.options.cloneOriginal === true) {
// Use substitution instead of a clone
- var tempClone = (_.isFunction(that.options.onDragSubstituteBy)) ? that.options.onDragSubstituteBy(that) : undefined;
+ tempClone = (_.isFunction(that.options.onDragSubstituteBy)) ? that.options.onDragSubstituteBy(that) : undefined;
// Or use a clone
- var clone = tempClone || event.target.cloneNode(true);
-
- var $original = jQuery(event.target);
- var $clone = jQuery(clone);
- var centerXOffset;
- var centerYOffset;
- var parentOffset;
+ clone = tempClone || event.target.cloneNode(true);
+ $original = jQuery(event.target);
+ $clone = jQuery(clone);
$clone.addClass('mailpoet_droppable_active');
$clone.css('position', 'absolute');
diff --git a/assets/js/src/newsletter_editor/blocks/automatedLatestContent.js b/assets/js/src/newsletter_editor/blocks/automatedLatestContent.js
index 69683ed11f..6356c97ccb 100644
--- a/assets/js/src/newsletter_editor/blocks/automatedLatestContent.js
+++ b/assets/js/src/newsletter_editor/blocks/automatedLatestContent.js
@@ -42,13 +42,14 @@ define([
_.debounce(this.refresh, DELAY_REFRESH_FOR_MS)
);
},
- refresh: function () {
- var models = App.findModels(function (model) {
+ refresh: function() {
+ var blocks;
+ var models = App.findModels(function(model) {
return model.get('type') === 'automatedLatestContent';
}) || [];
if (models.length === 0) return;
- var blocks = _.map(models, function (model) {
+ blocks = _.map(models, function(model) {
return model.toJSON();
});
@@ -213,12 +214,13 @@ define([
},
transport: function (options, success, failure) {
var taxonomies;
+ var termsPromise;
var promise = CommunicationComponent.getTaxonomies(
that.model.get('contentType')
).then(function (tax) {
taxonomies = tax;
// Fetch available terms based on the list of taxonomies already fetched
- var promise = CommunicationComponent.getTerms({
+ termsPromise = CommunicationComponent.getTerms({
search: options.data.term,
taxonomies: _.keys(taxonomies)
}).then(function (terms) {
@@ -227,7 +229,7 @@ define([
terms: terms
};
});
- return promise;
+ return termsPromise;
});
promise.then(success);
diff --git a/assets/js/src/newsletter_editor/blocks/base.js b/assets/js/src/newsletter_editor/blocks/base.js
index c01fb4c9c1..f32f667e5f 100644
--- a/assets/js/src/newsletter_editor/blocks/base.js
+++ b/assets/js/src/newsletter_editor/blocks/base.js
@@ -240,9 +240,10 @@ define([
behaviors: {
ColorPickerBehavior: {}
},
- initialize: function (params) {
+ initialize: function(params) {
+ var panelParams;
this.model.trigger('startEditing');
- var panelParams = {
+ panelParams = {
element: this.$el,
template: '',
position: 'right',
diff --git a/assets/js/src/newsletter_editor/blocks/divider.js b/assets/js/src/newsletter_editor/blocks/divider.js
index df9bae50f0..70fdcb8518 100644
--- a/assets/js/src/newsletter_editor/blocks/divider.js
+++ b/assets/js/src/newsletter_editor/blocks/divider.js
@@ -47,10 +47,10 @@ define([
ignoreFrom: '.mailpoet_resize_handle'
}
}, base.BlockView.prototype.behaviors),
- onDragSubstituteBy: function () { return Module.DividerWidgetView; },
- initialize: function () {
- base.BlockView.prototype.initialize.apply(this, arguments);
+ onDragSubstituteBy: function() { return Module.DividerWidgetView; },
+ initialize: function() {
var that = this;
+ base.BlockView.prototype.initialize.apply(this, arguments);
// Listen for attempts to change all dividers in one go
this._replaceDividerHandler = function (data) { that.model.set(data); that.model.trigger('applyToAll'); };
diff --git a/assets/js/src/newsletter_editor/blocks/image.js b/assets/js/src/newsletter_editor/blocks/image.js
index 2597ab4c40..30feb47a8e 100644
--- a/assets/js/src/newsletter_editor/blocks/image.js
+++ b/assets/js/src/newsletter_editor/blocks/image.js
@@ -126,14 +126,17 @@ define([
this.showMediaManager();
}
},
- showMediaManager: function () {
+ showMediaManager: function() {
+ var that = this;
+ var MediaManager;
+ var theFrame;
if (this._mediaManager) {
this._mediaManager.resetSelections();
this._mediaManager.open();
return;
}
- var MediaManager = window.wp.media.view.MediaFrame.Select.extend({
+ MediaManager = window.wp.media.view.MediaFrame.Select.extend({
initialize: function () {
window.wp.media.view.MediaFrame.prototype.initialize.apply(this, arguments);
@@ -195,7 +198,8 @@ define([
}
},
- bindHandlers: function () {
+ bindHandlers: function() {
+ var handlers;
// from Select
this.on('router:create:browse', this.createRouter, this);
this.on('router:render:browse', this.browseRouter, this);
@@ -210,7 +214,7 @@ define([
this.on('updateExcluded', this.browseContent, this);
- var handlers = {
+ handlers = {
content: {
embed: 'embedContent',
'edit-selection': 'editSelectionContent'
@@ -321,7 +325,7 @@ define([
});
- var theFrame = new MediaManager({
+ theFrame = new MediaManager({
id: 'mailpoet-media-manager',
frame: 'select',
title: 'Select image',
@@ -335,7 +339,6 @@ define([
text: 'Select'
}
});
- var that = this;
this._mediaManager = theFrame;
this._mediaManager.on('insert', function () {
diff --git a/assets/js/src/newsletter_editor/blocks/posts.js b/assets/js/src/newsletter_editor/blocks/posts.js
index d96786d7d1..aae548391f 100644
--- a/assets/js/src/newsletter_editor/blocks/posts.js
+++ b/assets/js/src/newsletter_editor/blocks/posts.js
@@ -41,6 +41,11 @@ define([
var Module = {};
var base = BaseBlock;
+ var PostsDisplayOptionsSettingsView;
+ var SinglePostSelectionSettingsView;
+ var EmptyPostSelectionSettingsView;
+ var PostSelectionSettingsView;
+ var PostsSelectionCollectionView;
Module.PostsBlockModel = base.BlockModel.extend({
stale: ['_selectedPosts', '_availablePosts', '_transformedPosts'],
@@ -189,14 +194,16 @@ define([
this.toolsView = new Module.PostsBlockToolsView({ model: this.model });
this.model.reply('blockView', this.notifyAboutSelf, this);
},
- onRender: function () {
+ onRender: function() {
+ var ContainerView;
+ var renderOptions;
if (!this.getRegion('toolsRegion').hasView()) {
this.showChildView('toolsRegion', this.toolsView);
}
this.trigger('showSettings');
- var ContainerView = App.getBlockTypeView('container');
- var renderOptions = {
+ ContainerView = App.getBlockTypeView('container');
+ renderOptions = {
disableTextEditor: true,
disableDragAndDrop: true,
emptyContainerMessage: MailPoet.I18n.t('noPostsToDisplay')
@@ -283,7 +290,7 @@ define([
}
});
- var PostsSelectionCollectionView = Marionette.CollectionView.extend({
+ PostsSelectionCollectionView = Marionette.CollectionView.extend({
className: 'mailpoet_post_scroll_container',
childView: function () { return SinglePostSelectionSettingsView; },
emptyView: function () { return EmptyPostSelectionSettingsView; },
@@ -307,8 +314,8 @@ define([
}
});
- var PostSelectionSettingsView = Marionette.View.extend({
- getTemplate: function () { return window.templates.postSelectionPostsBlockSettings; },
+ PostSelectionSettingsView = Marionette.View.extend({
+ getTemplate: function() { return window.templates.postSelectionPostsBlockSettings; },
regions: {
posts: '.mailpoet_post_selection_container'
},
@@ -333,10 +340,11 @@ define([
this.$('.mailpoet_post_selection_loading').css('visibility', 'hidden');
}
},
- onRender: function () {
+ onRender: function() {
+ var postsView;
// Dynamically update available post types
CommunicationComponent.getPostTypes().done(_.bind(this._updateContentTypes, this));
- var postsView = new PostsSelectionCollectionView({
+ postsView = new PostsSelectionCollectionView({
collection: this.model.get('_availablePosts'),
blockModel: this.model
});
@@ -358,12 +366,13 @@ define([
},
transport: function (options, success, failure) {
var taxonomies;
+ var termsPromise;
var promise = CommunicationComponent.getTaxonomies(
that.model.get('contentType')
).then(function (tax) {
taxonomies = tax;
// Fetch available terms based on the list of taxonomies already fetched
- var promise = CommunicationComponent.getTerms({
+ termsPromise = CommunicationComponent.getTerms({
search: options.data.term,
taxonomies: _.keys(taxonomies)
}).then(function (terms) {
@@ -372,7 +381,7 @@ define([
terms: terms
};
});
- return promise;
+ return termsPromise;
});
promise.then(success);
@@ -427,13 +436,13 @@ define([
}
});
- var EmptyPostSelectionSettingsView = Marionette.View.extend({
- getTemplate: function () { return window.templates.emptyPostPostsBlockSettings; }
+ EmptyPostSelectionSettingsView = Marionette.View.extend({
+ getTemplate: function() { return window.templates.emptyPostPostsBlockSettings; }
});
-
- var SinglePostSelectionSettingsView = Marionette.View.extend({
- getTemplate: function () { return window.templates.singlePostPostsBlockSettings; },
- events: function () {
+
+ SinglePostSelectionSettingsView = Marionette.View.extend({
+ getTemplate: function() { return window.templates.singlePostPostsBlockSettings; },
+ events: function() {
return {
'change .mailpoet_select_post_checkbox': 'postSelectionChange'
};
@@ -458,9 +467,9 @@ define([
}
});
- var PostsDisplayOptionsSettingsView = base.BlockSettingsView.extend({
- getTemplate: function () { return window.templates.displayOptionsPostsBlockSettings; },
- events: function () {
+ PostsDisplayOptionsSettingsView = base.BlockSettingsView.extend({
+ getTemplate: function() { return window.templates.displayOptionsPostsBlockSettings; },
+ events: function() {
return {
'click .mailpoet_posts_select_button': 'showButtonSettings',
'click .mailpoet_posts_select_divider': 'showDividerSettings',
diff --git a/assets/js/src/newsletter_editor/blocks/social.js b/assets/js/src/newsletter_editor/blocks/social.js
index f0d3e50215..019c331eb6 100644
--- a/assets/js/src/newsletter_editor/blocks/social.js
+++ b/assets/js/src/newsletter_editor/blocks/social.js
@@ -19,6 +19,7 @@ define([
var SocialBlockSettingsIconView;
var SocialBlockSettingsIconCollectionView;
var SocialBlockSettingsStylesView;
+ var SocialIconView;
Module.SocialIconModel = SuperModel.extend({
defaults: function () {
@@ -83,7 +84,7 @@ define([
}
});
- var SocialIconView = Marionette.View.extend({
+ SocialIconView = Marionette.View.extend({
tagName: 'span',
getTemplate: function () { return window.templates.socialIconBlock; },
modelEvents: {
diff --git a/assets/js/src/newsletter_editor/communicationsFix.js b/assets/js/src/newsletter_editor/communicationsFix.js
index 0b8eb46be0..372aaf3826 100644
--- a/assets/js/src/newsletter_editor/communicationsFix.js
+++ b/assets/js/src/newsletter_editor/communicationsFix.js
@@ -6,16 +6,16 @@
* Courtesy of https://gist.github.com/jmeas/7992474cdb1c5672d88b
*/
-(function (root, factory) {
+(function(root, factory) {
+ var Marionette = require('backbone.marionette');
+ var Radio = require('backbone.radio');
+ var _ = require('underscore');
if (typeof define === 'function' && define.amd) {
define(['backbone.marionette', 'backbone.radio', 'underscore'], function (Marionette, Radio, _) {
return factory(Marionette, Radio, _);
});
}
else if (typeof exports !== 'undefined') {
- var Marionette = require('backbone.marionette');
- var Radio = require('backbone.radio');
- var _ = require('underscore');
module.exports = factory(Marionette, Radio, _);
}
else {
diff --git a/assets/js/src/newsletter_editor/components/save.js b/assets/js/src/newsletter_editor/components/save.js
index 985aee4bf1..a00ba7c0ea 100644
--- a/assets/js/src/newsletter_editor/components/save.js
+++ b/assets/js/src/newsletter_editor/components/save.js
@@ -290,13 +290,14 @@ define([
});
}
},
- validateNewsletter: function (jsonObject) {
+ validateNewsletter: function(jsonObject) {
+ var contents;
if (!App._contentContainer.isValid()) {
this.showValidationError(App._contentContainer.validationError);
return;
}
- var contents = JSON.stringify(jsonObject);
+ contents = JSON.stringify(jsonObject);
if (App.getConfig().get('validation.validateUnsubscribeLinkPresent') &&
contents.indexOf('[link:subscription_unsubscribe_url]') < 0 &&
contents.indexOf('[link:subscription_unsubscribe]') < 0) {
@@ -339,10 +340,12 @@ define([
saveTimeout = undefined;
};
- Module.beforeExitWithUnsavedChanges = function (e) {
+ Module.beforeExitWithUnsavedChanges = function(e) {
+ var message;
+ var event;
if (saveTimeout) {
- var message = MailPoet.I18n.t('unsavedChangesWillBeLost');
- var event = e || window.event;
+ message = MailPoet.I18n.t('unsavedChangesWillBeLost');
+ event = e || window.event;
if (event) {
event.returnValue = message;
diff --git a/assets/js/src/newsletter_editor/components/sidebar.js b/assets/js/src/newsletter_editor/components/sidebar.js
index f509264e73..c764e08213 100644
--- a/assets/js/src/newsletter_editor/components/sidebar.js
+++ b/assets/js/src/newsletter_editor/components/sidebar.js
@@ -23,7 +23,7 @@ define([
'use strict';
var Module = {};
-
+ var SidebarView;
// Widget handlers for use to create new content blocks via drag&drop
Module._contentWidgets = new (Backbone.Collection.extend({
model: SuperModel.extend({
@@ -52,8 +52,8 @@ define([
Module.registerLayoutWidget = function (widget) { return Module._layoutWidgets.add(widget); };
Module.getLayoutWidgets = function () { return Module._layoutWidgets; };
- var SidebarView = Marionette.View.extend({
- getTemplate: function () { return window.templates.sidebar; },
+ SidebarView = Marionette.View.extend({
+ getTemplate: function() { return window.templates.sidebar; },
regions: {
contentRegion: '.mailpoet_content_region',
layoutRegion: '.mailpoet_layout_region',
@@ -265,12 +265,13 @@ define([
data: json
}).always(function () {
MailPoet.Modal.loading(false);
- }).done(function (response) {
+ }).done(function(response) {
+ var view;
this.previewView = new Module.NewsletterPreviewView({
previewUrl: response.meta.preview_url
});
- var view = this.previewView.render();
+ view = this.previewView.render();
this.previewView.$el.css('height', '100%');
MailPoet.Modal.popup({
diff --git a/assets/js/src/newsletter_editor/components/styles.js b/assets/js/src/newsletter_editor/components/styles.js
index dc6efd4efc..53a1db9b11 100644
--- a/assets/js/src/newsletter_editor/components/styles.js
+++ b/assets/js/src/newsletter_editor/components/styles.js
@@ -71,13 +71,15 @@ define([
App.on('before:start', function (App, options) {
var Application = App;
+ var body;
+ var globalStyles;
// Expose style methods to global application
Application.getGlobalStyles = Module.getGlobalStyles;
Application.setGlobalStyles = Module.setGlobalStyles;
Application.getAvailableStyles = Module.getAvailableStyles;
- var body = options.newsletter.body;
- var globalStyles = (_.has(body, 'globalStyles')) ? body.globalStyles : {};
+ body = options.newsletter.body;
+ globalStyles = (_.has(body, 'globalStyles')) ? body.globalStyles : {};
this.setGlobalStyles(globalStyles);
});
diff --git a/assets/js/src/newsletter_editor/tinymce/mailpoet_shortcodes/plugin.js b/assets/js/src/newsletter_editor/tinymce/mailpoet_shortcodes/plugin.js
index f6493d40c6..05c3dc622c 100644
--- a/assets/js/src/newsletter_editor/tinymce/mailpoet_shortcodes/plugin.js
+++ b/assets/js/src/newsletter_editor/tinymce/mailpoet_shortcodes/plugin.js
@@ -26,15 +26,17 @@ tinymce.PluginManager.add('mailpoet_shortcodes', function(editor, url) {
onclick: function() {
var shortcodes = [];
var configShortcodes = editor.settings.mailpoet_shortcodes;
+ var segment;
+ var i;
- for (var segment in configShortcodes) {
+ for (segment in configShortcodes) {
if (configShortcodes.hasOwnProperty(segment)) {
shortcodes.push({
type: 'label',
text: segment
});
- for (var i = 0; i < configShortcodes[segment].length; i += 1) {
+ for (i = 0; i < configShortcodes[segment].length; i += 1) {
shortcodes.push({
type: 'button',
text: configShortcodes[segment][i].text,
diff --git a/assets/js/src/notice.js b/assets/js/src/notice.js
index 4ef6b55d52..919d3ba9e5 100644
--- a/assets/js/src/notice.js
+++ b/assets/js/src/notice.js
@@ -46,7 +46,9 @@ define('notice', ['mailpoet', 'jquery'], function (mp, jQuery) {
return this;
},
- createNotice: function () {
+ createNotice: function() {
+ var onClose;
+ var positionAfter;
// clone element
this.element = jQuery('#mailpoet_notice_' + this.options.type).clone();
@@ -62,7 +64,6 @@ define('notice', ['mailpoet', 'jquery'], function (mp, jQuery) {
this.element.removeAttr('id');
// insert notice after its parent
- var positionAfter;
if (typeof this.options.positionAfter === 'object') {
positionAfter = this.options.positionAfter;
} else if (typeof this.options.positionAfter === 'string') {
@@ -73,7 +74,7 @@ define('notice', ['mailpoet', 'jquery'], function (mp, jQuery) {
positionAfter.after(this.element);
// setup onClose callback
- var onClose = null;
+ onClose = null;
if (this.options.onClose !== null) {
onClose = this.options.onClose;
}
@@ -176,13 +177,14 @@ define('notice', ['mailpoet', 'jquery'], function (mp, jQuery) {
this.options.onOpen(this.element);
}
},
- hide: function (all) {
+ hide: function(all) {
+ var id;
if (all !== undefined && all === true) {
// all notices
jQuery('.mailpoet_notice:not([id])').trigger('close');
} else if (all !== undefined && jQuery.isArray(all)) {
// array of ids
- for (var id in all) {
+ for (id in all) {
jQuery('[data-id="' + all[id] + '"]').trigger('close');
}
} if (all !== undefined) {
diff --git a/assets/js/src/settings/reinstall_from_scratch.js b/assets/js/src/settings/reinstall_from_scratch.js
index 2fd1c994aa..afc1348ff9 100644
--- a/assets/js/src/settings/reinstall_from_scratch.js
+++ b/assets/js/src/settings/reinstall_from_scratch.js
@@ -5,7 +5,7 @@ define(
function (
MailPoet
) {
-
+ var element;
function eventHandler() {
if (confirm(MailPoet.I18n.t('reinstallConfirmation'))) {
MailPoet.trackEvent(
@@ -36,8 +36,8 @@ define(
return false;
}
- var element = document.getElementById('mailpoet_reinstall');
+ element = document.getElementById('mailpoet_reinstall');
if (element) {
element.addEventListener('click', eventHandler, false);
}
- });
\ No newline at end of file
+ });
diff --git a/assets/js/src/subscribers/importExport/export.js b/assets/js/src/subscribers/importExport/export.js
index 6a49e0a8f8..7eb7f315b9 100644
--- a/assets/js/src/subscribers/importExport/export.js
+++ b/assets/js/src/subscribers/importExport/export.js
@@ -17,22 +17,29 @@ define(
return;
}
jQuery(document).ready(function () {
+ var segmentsContainerElement;
+ var subscriberFieldsContainerElement;
+ var exportConfirmedOptionElement;
+ var groupBySegmentOptionElement;
+ var nextStepButton;
+ var renderSegmentsAndFields;
+ var subscribers_export_template;
if (!window.exportData.segments) {
return;
}
- var subscribers_export_template =
+ subscribers_export_template =
Handlebars.compile(jQuery('#mailpoet_subscribers_export_template').html());
// render template
jQuery('#mailpoet_subscribers_export > div.inside').html(subscribers_export_template(window.exportData));
// define reusable variables
- var segmentsContainerElement = jQuery('#export_lists');
- var subscriberFieldsContainerElement = jQuery('#export_columns');
- var exportConfirmedOptionElement = jQuery(':radio[name="option_confirmed"]');
- var groupBySegmentOptionElement = jQuery(':checkbox[name="option_group_by_list"]');
- var nextStepButton = jQuery('a.mailpoet_export_process');
- var renderSegmentsAndFields = function (container, data) {
+ segmentsContainerElement = jQuery('#export_lists');
+ subscriberFieldsContainerElement = jQuery('#export_columns');
+ exportConfirmedOptionElement = jQuery(':radio[name="option_confirmed"]');
+ groupBySegmentOptionElement = jQuery(':checkbox[name="option_group_by_list"]');
+ nextStepButton = jQuery('a.mailpoet_export_process');
+ renderSegmentsAndFields = function (container, data) {
if (container.data('select2')) {
container
.html('')
@@ -60,12 +67,13 @@ define(
'select',
'deselect'
];
+ var allOptions;
if (_.contains(fieldsToExclude, selectedOptionId)) {
selectEvent.preventDefault();
if (selectedOptionId === 'deselect') {
jQuery(selectElement).val('').trigger('change');
} else {
- var allOptions = [];
+ allOptions = [];
_.each(container.find('option'), function (field) {
if (!_.contains(fieldsToExclude, field.value)) {
allOptions.push(field.value);
@@ -133,11 +141,12 @@ define(
}
nextStepButton.click(function () {
+ var exportFormat;
if (jQuery(this).hasClass('button-disabled')) {
return;
}
MailPoet.Modal.loading(true);
- var exportFormat = jQuery(':radio[name="option_format"]:checked').val();
+ exportFormat = jQuery(':radio[name="option_format"]:checked').val();
MailPoet.Ajax.post({
api_version: window.mailpoet_api_version,
endpoint: 'ImportExport',
diff --git a/assets/js/src/subscribers/importExport/import.js b/assets/js/src/subscribers/importExport/import.js
index 63129837f0..49ac11ae94 100644
--- a/assets/js/src/subscribers/importExport/import.js
+++ b/assets/js/src/subscribers/importExport/import.js
@@ -25,9 +25,10 @@ define(
return;
}
jQuery(document).ready(function () {
+ var router;
jQuery('input[name="select_method"]').attr('checked', false);
// configure router
- var router = new (Backbone.Router.extend({
+ router = new (Backbone.Router.extend({
routes: {
'': 'home',
step1: 'step1',
@@ -50,6 +51,18 @@ define(
* 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, columnIndex) {
var col = column;
@@ -63,34 +76,34 @@ define(
}
// render process button for each method
- var methodProcessContainerTemplate =
+ methodProcessContainerTemplate =
Handlebars.compile(jQuery('#method_process_template').html());
jQuery('.mailpoet_method_process').html(methodProcessContainerTemplate());
// define reusable variables
- var currentStepE = jQuery(location.hash);
- var methodSelectionElement = jQuery('#select_method');
- var pasteInputElement = jQuery('#paste_input');
- var pasteInputPlaceholderElement =
+ currentStepE = jQuery(location.hash);
+ methodSelectionElement = jQuery('#select_method');
+ pasteInputElement = jQuery('#paste_input');
+ pasteInputPlaceholderElement =
pasteInputElement.data('placeholder').replace(/\\n/g, '\n');
- var pasteProcessButtonElement =
+ pasteProcessButtonElement =
jQuery('#method_paste > div.mailpoet_method_process')
.find('a.mailpoet_process');
- var mailChimpKeyInputElement = jQuery('#mailchimp_key');
- var mailChimpKeyVerifyButtonElement = jQuery('#mailchimp_key_verify');
- var mailChimpListsContainerElement = jQuery('#mailchimp_lists');
- var mailChimpProcessButtonElement = jQuery('#method_mailchimp > div.mailpoet_method_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');
- var uploadElement = jQuery('#file_local');
- var uploadProcessButtonElement =
+ uploadElement = jQuery('#file_local');
+ uploadProcessButtonElement =
jQuery('#method_file > div.mailpoet_method_process')
.find('a.mailpoet_process');
// define method change behavior
methodSelectionElement.change(function () {
- MailPoet.Notice.hide();
var available_methods = jQuery(':radio[name="select_method"]');
var selected_method = available_methods.index(available_methods.filter(':checked'));
+ MailPoet.Notice.hide();
// hide all methods
currentStepE.find('.inside')
.children('div[id^="method_"]')
@@ -129,9 +142,9 @@ define(
});
pasteProcessButtonElement.click(function () {
+ var pasteSize = encodeURI(pasteInputElement.val()).split(/%..|./).length - 1;
MailPoet.Notice.hide();
// get an approximate size of textarea paste in bytes
- var pasteSize = encodeURI(pasteInputElement.val()).split(/%..|./).length - 1;
if (pasteSize > window.maxPostSizeBytes) {
MailPoet.Notice.error(MailPoet.I18n.t('maxPostSizeNotice'));
return;
@@ -147,8 +160,8 @@ define(
* CSV file
*/
uploadElement.change(function () {
- MailPoet.Notice.hide();
var ext = this.value.match(/\.(.+)$/);
+ MailPoet.Notice.hide();
if (ext === null || ext[1].toLowerCase() !== 'csv') {
this.value = '';
MailPoet.Notice.error(MailPoet.I18n.t('wrongFileFormat'));
@@ -345,11 +358,18 @@ define(
MailPoet.Notice.error(MailPoet.I18n.t('dataProcessingError'));
},
complete: function (CSV) {
- for (var rowCount in CSV.data) {
- var rowData = CSV.data[rowCount].map(function (el) {
+ var email;
+ var emailAddress;
+ var column;
+ var rowCount;
+ var rowData;
+ var rowColumnCount;
+ var errorNotice;
+ for (rowCount in CSV.data) {
+ rowData = CSV.data[rowCount].map(function (el) {
return el.trim();
});
- var rowColumnCount = rowData.length;
+ rowColumnCount = rowData.length;
// set the number of row elements based on the first non-empty row
if (columnCount === null) {
columnCount = rowColumnCount;
@@ -363,8 +383,8 @@ define(
// determine position of email address inside an array; this is
// done once and then email regex is run just on that element for each row
if (emailColumnPosition === null) {
- for (var column in rowData) {
- var emailAddress = detectAndCleanupEmail(rowData[column]);
+ for (column in rowData) {
+ emailAddress = detectAndCleanupEmail(rowData[column]);
if (emailColumnPosition === null
&& window.emailRegex.test(emailAddress)) {
emailColumnPosition = column;
@@ -381,7 +401,7 @@ define(
}
}
else if (rowData[emailColumnPosition] !== '') {
- var email = detectAndCleanupEmail(rowData[emailColumnPosition]);
+ email = detectAndCleanupEmail(rowData[emailColumnPosition]);
if (_.has(parsedEmails, email)) {
duplicateEmails.push(email);
}
@@ -425,7 +445,7 @@ define(
}
else {
MailPoet.Modal.loading(false);
- var errorNotice = MailPoet.I18n.t('noValidRecords');
+ errorNotice = MailPoet.I18n.t('noValidRecords');
errorNotice = errorNotice.replace('[link]', MailPoet.I18n.t('csvKBLink'));
errorNotice = errorNotice.replace('[/link]', '');
MailPoet.Notice.error(errorNotice);
@@ -436,28 +456,41 @@ define(
});
router.on('route:step2', function () {
+ var nextStepButton;
+ var previousStepButton;
+ var subscribers;
+ var subscribersDataTemplate;
+ var subscribersDataTemplatePartial;
+ var subscribersDataParseResultsTemplate;
+ var segmentSelectElement;
+ var maxRowsToShow;
+ var filler;
+ var fillerArray;
+ var fillerPosition;
+ var import_results;
+ var duplicates;
+ var email;
if (typeof (window.importData.step1) === 'undefined') {
router.navigate('step1', { trigger: true });
return;
}
// define reusable variables
- var nextStepButton = jQuery('#step2_process');
- var previousStepButton = jQuery('#return_to_step1');
+ nextStepButton = jQuery('#step2_process');
+ previousStepButton = jQuery('#return_to_step1');
// create a copy of subscribers object for further manipulation
- var subscribers = jQuery.extend(true, {}, window.importData.step1);
- var subscribersDataTemplate = Handlebars.compile(jQuery('#subscribers_data_template').html());
- var subscribersDataTemplatePartial = Handlebars.compile(jQuery('#subscribers_data_template_partial').html());
- var subscribersDataParseResultsTemplate = Handlebars.compile(jQuery('#subscribers_data_parse_results_template').html());
- var segmentSelectElement = jQuery('#mailpoet_segments_select');
- var maxRowsToShow = 10;
- var filler = '. . .';
+ subscribers = jQuery.extend(true, {}, window.importData.step1);
+ subscribersDataTemplate = Handlebars.compile(jQuery('#subscribers_data_template').html());
+ subscribersDataTemplatePartial = Handlebars.compile(jQuery('#subscribers_data_template_partial').html());
+ subscribersDataParseResultsTemplate = Handlebars.compile(jQuery('#subscribers_data_parse_results_template').html());
+ segmentSelectElement = jQuery('#mailpoet_segments_select');
+ maxRowsToShow = 10;
+ filler = '. . .';
// create an array of filler data with the same number of
// elements as in the subscribers' data row
- var fillerArray = Array.apply(
+ fillerArray = Array.apply(
null,
new Array(subscribers.subscribers[0].length)
).map(String.prototype.valueOf, filler);
- var fillerPosition;
showCurrentStep();
@@ -469,12 +502,12 @@ define(
if (subscribers.invalid.length || subscribers.duplicate.length) {
// count repeating e-mails inside duplicate array and present them in
// 'email (xN)' format
- var duplicates = {};
+ duplicates = {};
subscribers.duplicate.forEach(function (email) {
duplicates[email] = (duplicates[email] || 0) + 1;
});
subscribers.duplicate = [];
- for (var email in duplicates) {
+ for (email in duplicates) {
if (duplicates[email] > 1) {
subscribers.duplicate.push(email + ' (x' + duplicates[email] + ')');
}
@@ -483,7 +516,7 @@ define(
}
}
- var import_results = {
+ import_results = {
notice: MailPoet.I18n.t('importNoticeSkipped').replace(
'%1$s',
'' + (subscribers.invalid.length + subscribers.duplicate.length) + ''
@@ -587,14 +620,15 @@ define(
name: segmentName,
description: segmentDescription
}
- }).done(function (response) {
+ }).done(function(response) {
+ var selected_values;
window.mailpoetSegments.push({
id: response.data.id,
name: response.data.name,
subscriberCount: 0
});
- var selected_values = segmentSelectElement.val();
+ selected_values = segmentSelectElement.val();
if (selected_values === null) {
selected_values = [response.data.id];
} else {
@@ -633,16 +667,21 @@ define(
function (subscribers, options) {
var displayedColumns = [];
var displayedColumnsIds = [];
+ var i;
+ var columnData;
+ var columnId;
+ var headerName;
+ var headerNameMatch;
// go through all elements of the first row in subscribers data
- for (var i in subscribers.subscribers[0]) {
- var columnData = subscribers.subscribers[0][i];
- var columnId = 'ignore'; // set default column type
+ for (i in subscribers.subscribers[0]) {
+ columnData = subscribers.subscribers[0][i];
+ columnId = 'ignore'; // set default column type
// if the column is not undefined and has a valid e-mail, set type as email
if (columnData % 1 !== 0 && window.emailRegex.test(columnData)) {
columnId = 'email';
} else if (subscribers.header) {
- var headerName = subscribers.header[i];
- var headerNameMatch = window.mailpoetColumns.map(function (el) {
+ headerName = subscribers.header[i];
+ headerNameMatch = window.mailpoetColumns.map(function (el) {
return el.name;
}).indexOf(headerName);
// set column type using header
@@ -821,12 +860,13 @@ define(
// filter subscribers' data to detect dates, emails, etc.
function filterSubscribers() {
+ var subscribersClone = jQuery.extend(true, {}, subscribers);
+ var preventNextStep = false;
+ var displayedColumns;
jQuery(
'[data-id="notice_invalidEmail"], [data-id="notice_invalidDate"]')
.remove();
- var subscribersClone = jQuery.extend(true, {}, subscribers);
- var preventNextStep = false;
- var displayedColumns = jQuery.map(
+ displayedColumns = jQuery.map(
jQuery('.mailpoet_subscribers_column_data_match'), function (element, elementIndex) {
var columnId = jQuery(element).data('column-id');
var validationRule = jQuery(element).data('validation-rule');
@@ -835,6 +875,11 @@ define(
});
// iterate through the object of mailpoet columns
jQuery.map(window.mailpoetColumns, function (column, columnIndex) {
+ var firstRowData;
+ var validationRule;
+ var testedFormat;
+ var format;
+ var allowedDateFormats;
// check if the column id matches the selected id of one of the
// subscriber's data columns
var matchedColumn = _.find(displayedColumns, function (data) { return data.id === column.id; });
@@ -858,7 +903,7 @@ define(
}
// DATE filter: if column type is date, check if we can recognize it
if (column.type === 'date' && matchedColumn) {
- var allowedDateFormats = [
+ allowedDateFormats = [
Moment.ISO_8601,
'YYYY/MM/DD',
'MM/DD/YYYY',
@@ -869,9 +914,8 @@ define(
'YYYY/MM',
'YYYY'
];
- var firstRowData = subscribersClone.subscribers[0][matchedColumn.index];
- var validationRule = false;
- var testedFormat;
+ firstRowData = subscribersClone.subscribers[0][matchedColumn.index];
+ validationRule = false;
// check if date exists
if (firstRowData.trim() === '') {
subscribersClone.subscribers[0][matchedColumn.index] =
@@ -882,7 +926,7 @@ define(
preventNextStep = true;
}
else {
- for (var format in allowedDateFormats) {
+ for (format in allowedDateFormats) {
testedFormat = allowedDateFormats[format];
if (Moment(firstRowData, testedFormat, true).isValid()) {
validationRule = (typeof(testedFormat) === 'function') ?
@@ -900,8 +944,8 @@ define(
jQuery.map(subscribersClone.subscribers, function (dataSubscribers, index) {
var data = dataSubscribers;
var rowData = data[matchedColumn.index];
- if (index === fillerPosition || rowData.trim() === '') return;
var date = Moment(rowData, testedFormat, true);
+ if (index === fillerPosition || rowData.trim() === '') return;
// validate date
if (date.isValid()) {
data[matchedColumn.index] = new Handlebars.SafeString(
@@ -960,11 +1004,6 @@ define(
});
nextStepButton.off().on('click', function () {
- if (jQuery(this).hasClass('button-disabled')) {
- return;
- }
- MailPoet.Modal.loading(true);
-
var columns = {};
var queue = new jQuery.AsyncQueue();
var batchNumber = 0;
@@ -977,7 +1016,14 @@ define(
errors: [],
segments: []
};
- var splitSubscribers = function (subscribers, size) {
+ var subscribers;
+ var splitSubscribers;
+
+ if (jQuery(this).hasClass('button-disabled')) {
+ return;
+ }
+ MailPoet.Modal.loading(true);
+ splitSubscribers = function (subscribers, size) {
return subscribers.reduce(function (res, item, index) {
if (index % size === 0) {
res.push([]);
@@ -986,7 +1032,7 @@ define(
return res;
}, []);
};
- var subscribers = splitSubscribers(window.importData.step1.subscribers, batchSize);
+ subscribers = splitSubscribers(window.importData.step1.subscribers, batchSize);
_.each(jQuery('select.mailpoet_subscribers_column_data_match'),
function (column, columnIndex) {
@@ -1057,6 +1103,9 @@ define(
});
router.on('route:step3', function () {
+ var subscribersDataImportResultsTemplate;
+ var exportMenuElement;
+ var importResults;
if (typeof (window.importData.step2) === 'undefined') {
router.navigate('step2', { trigger: true });
return;
@@ -1075,10 +1124,10 @@ define(
});
// display statistics
- var subscribersDataImportResultsTemplate =
+ subscribersDataImportResultsTemplate =
Handlebars.compile(jQuery('#subscribers_data_import_results_template').html());
- var exportMenuElement = jQuery('span.mailpoet_export');
- var importResults = {
+ exportMenuElement = jQuery('span.mailpoet_export');
+ importResults = {
created: (window.importData.step2.created)
? MailPoet.I18n.t('subscribersCreated')
.replace('%1$s', '' + window.importData.step2.created.toLocaleString() + '')