define('notice', ['mailpoet', 'jquery'], function(MailPoet, jQuery) { "use strict"; /*================================================================================================== MailPoet Notice: description: Handles notices version: 1.0 author: Jonathan Labreuille company: Wysija dependencies: jQuery Usage: // success message (static: false) MailPoet.Notice.success('Yatta!'); // error message (static: false) MailPoet.Notice.error('Boo!'); // system message (static: true) MailPoet.Notice.system('You need to updated ASAP!'); ==================================================================================================*/ MailPoet.Notice = { version: 1.0, // default options defaults: { type: 'success', message: '', static: false, hideClose: false, id: null, positionAfter: false, scroll: false, timeout: 5000, onOpen: null, onClose: null }, options: {}, init: function(options) { // set options this.options = jQuery.extend({}, this.defaults, options); return this; }, createNotice: function() { // clone element this.element = jQuery('#mailpoet_notice_'+this.options.type).clone(); // add data-id to the element if (this.options.id) { this.element.attr( 'data-id', this.options.id ); } // remove id from clone 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') { positionAfter = jQuery(this.options.positionAfter); } else { positionAfter = jQuery('#mailpoet_notice_'+this.options.type); } positionAfter.after(this.element); // setup onClose callback var onClose = null; if (this.options.onClose !== null) { onClose = this.options.onClose; } // listen to remove event jQuery(this.element).on('close', function() { jQuery(this).fadeOut(200, function() { // on close callback if (onClose !== null) { onClose(); } // remove notice jQuery(this).remove(); }); }.bind(this.element)); // listen to message event jQuery(this.element).on('setMessage', function(e, message) { MailPoet.Notice.setMessage(message); }.bind(this.element)); return this; }, updateNotice: function() { // update notice's message jQuery('[data-id="'+this.options.id+'"').first().trigger( 'setMessage', this.options.message ); }, isHTML: function(str) { var a = document.createElement('div'); a.innerHTML = str; for (var c = a.childNodes, i = c.length; i--;) { if (c[i].nodeType == 1) return true; } return false; }, setMessage: function(message) { message = this.formatMessage(message); // if it's not an html message // let's sugar coat the message with a fancy
if (this.isHTML(message) === false) { message = '
'+message+'
'; } // set message return this.element.html(message); }, formatMessage: function(message) { if (Array.isArray(message)) { return message.join('