UNPKG

automizy-email-editor

Version:

Design mobile friendly HTML emails in your application.

435 lines (413 loc) 17.7 kB
define([ "js/functions/core/ready", "js/functions/core/layoutReady" ], function () { $AEE.layoutReady(function(){ var ImagePicker = function (obj) { var t = this; t.d = { $content:$('<div id="automizy-image-picker-content"></div>'), $previewBox:$('<div id="automizy-image-picker-preview-box"></div>'), $previewImageHelper:$('<span id="automizy-image-picker-preview-image-helper"></span>'), $previewImage:$('<img id="automizy-image-picker-preview-image" />'), $controlImageBox:$('<div id="automizy-image-picker-control-box"></div>'), image:false, inputs:{}, buttons:{}, dialogs:{}, forms:{}, img:{ src:'', link:'', alt:'', title:'', align:'center', $elem:false, $img:false }, save:function(){}, delete:function(){} }; t.d.$previewBox.appendTo(t.d.$content); t.d.$previewImageHelper.appendTo(t.d.$previewBox); t.d.$previewImage.appendTo(t.d.$previewBox); t.d.$controlImageBox.appendTo(t.d.$content); t.d.buttons.cancel = $A.newButton({ skin: 'nobox-green', text: $A.translate('Cancel'), float: 'left', click: function () { t.d.dialogs.widget.close(); } }); t.d.buttons.save = $A.newButton({ skin: 'simple-orange', text: $A.translate('Save'), float: 'right', click: function () { t.save(); t.d.dialogs.widget.close(); } }); t.d.buttons.delete = $A.newButton({ text: $A.translate('Delete image'), float: 'right', click: function () { t.delete(); } }); t.d.buttons.cancelGallery = $A.newButton({ skin: 'nobox-green', text: $A.translate('Cancel'), float: 'left', click: function () { t.d.dialogs.gallery.close(); } }); t.d.dialogs.widget = $A.newDialog({ id:'automizy-image-picker', positionY:'30px', content:t.d.$content, buttons:[ t.d.buttons.cancel, t.d.buttons.save, t.d.buttons.delete ] }); t.d.dialogs.gallery = $A.newDialog({ id:'automizy-image-picker-gallery', title:$A.translate('Image gallery'), buttons:[ t.d.buttons.cancelGallery ], open:function(){ $A.ajaxDocumentCover(true); $.ajax({ url: $AA.u.images, type:'GET', dataType: 'json', data:{directory: 'emaileditor'}, headers: {Authorization: 'Bearer ' + $AA.token().get()} }).complete(function(){ $A.ajaxDocumentCover(false); }).done(function(data){ t.d.dialogs.gallery.content().empty(); var $content = $('<div id="automizy-image-picker-gallery-content"></div>'); for(var i = 0; i < data.length; i++){ if(data[i].type !== 'file' || $.inArray(data[i].extension, ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'ico']) <= -1){ continue; } var $box = $('<span class="automizy-image-picker-gallery-element"></span>').data({ src:data[i].url, alt:data[i].alt, title:data[i].title }).click(function(){ var $this = $(this); t.d.img.src = $this.data('src'); t.d.img.alt = $this.data('alt'); t.d.img.title = $this.data('title'); t.d.$previewImage.attr({ src:t.d.img.src }).show(); t.d.inputs.url.val(t.d.img.src); t.d.inputs.alt.val(t.d.img.alt); t.d.inputs.title.val(t.d.img.title); t.d.dialogs.gallery.close(); }); var $helper = $('<span class="automizy-image-picker-gallery-image-helper"></span>'); var $img = $('<img/>').attr({ src:data[i].thumbnailUrl, alt:data[i].alt, title:data[i].title }).data('url', data[i].url).error(function() { var $t = $(this); $t.attr('src', $t.data('url')); }); $box.appendTo($content); $helper.appendTo($box); $img.appendTo($box); } t.d.dialogs.gallery.content($content); }) } }); t.d.inputs.upload = $A.newInput({ type:'file', name:'upload_file', target: t.d.$controlImageBox, accept: ['.jpg', '.jpeg', '.bmp', '.gif', '.png', '.ico'], create:function(){ t.d.inputs.upload.data('$automizyTd1').hide(); t.d.inputs.upload.data('automizyButton').width('300px'); } }); t.d.inputs.upload.input().change(function(){ /*if (this.files && this.files[0]) { var reader = new FileReader(); reader.onload = function (e) { t.d.$previewImage.attr('src', e.target.result).show(); }; reader.readAsDataURL(this.files[0]); }*/ }).fileupload({ url: $AA.u.images, dataType: 'json', singleFileUploads: true, formData: {directory: 'emaileditor'}, dropZone: t.d.dialogs.gallery.widget(), beforeSend: function (xhr, data) { var file = data.files[0]; xhr.setRequestHeader('Authorization', 'Bearer ' + $AA.token().get()); t.d.inputs.upload.data('automizyButton').disable(); t.d.inputs.upload.widget().find('input[type="file"]').prop('disabled', true); t.d.inputs.url.disable(); t.d.buttons.gallery.disable(); t.d.buttons.cancel.disable(); t.d.buttons.save.disable(); t.closable(false); }, progressall: function (e, data) { t.d.inputs.upload.data('automizyButton').text(parseInt(data.loaded / data.total * 100, 10) + '%'); }, complete: function () { t.d.inputs.upload.data('automizyButton').enable().text($A.translate('Select an other image from local computer')); t.d.inputs.upload.widget().find('input[type="file"]').prop('disabled', false); t.d.inputs.url.enable(); t.d.buttons.gallery.enable(); t.d.buttons.cancel.enable(); t.d.buttons.save.enable(); t.closable(true); }, error: function () { alert('Something wrong'); }, done: function (e, data) { t.d.img.src = data.result[Object.keys(data.result)[0]].url; t.d.$previewImage.attr({ src:t.d.img.src }).show(); t.d.inputs.url.val(t.d.img.src); } }); t.d.buttons.gallery = $A.newButton({ id:'automizy-image-picker-gallery-button', text:$A.translate('Select image from gallery'), target: t.d.$controlImageBox, width:'300px', click:function(){ t.d.dialogs.gallery.open(); } }); t.d.inputs.url = $A.newInput({ placeholder:$A.translate('Enter the image url here'), target:t.d.$controlImageBox, type:'text', labelWidth: 'auto', breakInput: false, create:function(){ this.input().focus(function(){ var $this = $(this); $this.select(); $this.mouseup(function() { $this.unbind("mouseup"); return false; }); }); }, change:function(){ t.d.img.src = this.val(); t.d.$previewImage.attr('src', t.d.img.src).show(); } }); t.d.inputs.link = $A.newInput({ label:$A.translate('Link to'), help:$A.translate('Defines a hyperlink, which is used to link to another page.'), value:'http://', change:function(){ t.d.img.link = this.val(); } }); t.d.inputs.alt = $A.newInput({ label:$A.translate('ALT text'), help:$A.translate('The required alt attribute specifies an alternate text for an image, if the image cannot be displayed.'), change:function(){ t.d.img.alt = this.val(); } }); t.d.inputs.title = $A.newInput({ label:$A.translate('Image title'), help:$A.translate('Provides additional information related to the element when a user places their mouse over the element.'), change:function(){ t.d.img.title = this.val(); } }); t.d.inputs.align = $A.newInput({ label:$A.translate('Alignment'), help:$A.translate('Specifies the horizontal alignment'), type:'select', options:[ ['left', $A.translate('Left')], ['center', $A.translate('Center'), true], ['right', $A.translate('Right')] ], change:function(){ t.d.img.align = this.val(); } }); t.d.forms.moreSettigns = $A.newForm().draw().addGroup({ text: 'Advanced settings', inputs: [ t.d.inputs.link, t.d.inputs.alt, t.d.inputs.title, t.d.inputs.align ] }).drawTo(t.d.$content); t.d.$widget = t.d.dialogs.widget.widget(); t.init(); if (typeof obj !== 'undefined') { t.initParameter(obj); } }; var p = ImagePicker.prototype; p.open = function(){ return this.d.dialogs.widget.open.apply(this.d.dialogs.widget, arguments); }; p.close = function(){ return this.d.dialogs.widget.close.apply(this.d.dialogs.widget, arguments); }; p.closable = function(){ return this.d.dialogs.widget.closable.apply(this.d.dialogs.widget, arguments); }; p.dialogTitle = function(){ this.d.dialogs.widget.title.apply(this.d.dialogs.widget, arguments); return this; }; p.url = p.src = function (value) { var t = this; if (typeof value !== 'undefined') { if(value === '' || typeof value !== 'string') { t.d.img.src = ''; t.d.inputs.url.val(''); t.d.$previewImage.attr('src', '').hide(); t.d.inputs.upload.data('automizyButton').text($A.translate('Select image from local computer')); }else{ t.d.img.src = value; t.d.inputs.url.val(value); t.d.$previewImage.attr('src', value).show(); t.d.inputs.upload.data('automizyButton').text($A.translate('Select an other image from local computer')); } return t; } return t.d.inputs.url.val(); }; p.link = function (value) { console.log(value, typeof value); var t = this; if (typeof value !== 'undefined') { t.d.img.link = value; t.d.inputs.link.val(value); return t; } return t.d.inputs.link.val(); }; p.alt = function (value) { console.log(value, typeof value); var t = this; if (typeof value !== 'undefined') { t.d.img.alt = value; t.d.inputs.alt.val(value); return t; } return t.d.inputs.alt.val(); }; p.title = function (value) { var t = this; if (typeof value !== 'undefined') { t.d.img.title = value; t.d.inputs.title.val(value); return t; } return t.d.inputs.title.val(); }; p.align = function (value) { var t = this; if (typeof value !== 'undefined') { t.d.img.align = value; t.d.inputs.align.val(value); return t; } return t.d.inputs.align.val(); }; p.enableAlign = function(){ this.d.inputs.align.show(); return this; }; p.disableAlign = function(){ this.d.inputs.align.hide(); return this; }; p.delete = function(func){ var t = this; if (typeof func === 'function') { t.d.delete = func; } else { t.d.delete.apply(this, []); } return t; }; p.enableDelete = function(){ this.d.buttons.delete.show(); return this; }; p.disableDelete = function(){ this.d.buttons.delete.hide(); return this; }; p.save = function (func) { var t = this; if (typeof func === 'function') { t.d.save = func; } else { if(typeof t.d.img.src === 'string' && t.d.img.src.length > 0) { var $elem; var $img = $('<img/>').attr({ src: t.d.img.src, alt: t.d.img.alt, title: t.d.img.title }).css({maxWidth: '100%'}).addClass('aee-imagepicker-image'); if($.inArray(t.d.inputs.link.val(), ['', 'http://', 'https://']) <= -1){ $elem = $('<a href="'+t.d.inputs.link.val()+'" class="aee-imagepicker-image-link"></a>'); $img.appendTo($elem); }else{ $elem = $img; } t.d.img.$elem = $elem; t.d.img.$img = $img; /* $AEE.elements.$activeBlock.data('$contentCell').css({ textAlign: t.d.inputs.align.val() }).html($img); $AEE.elements.$activeBlock.removeClass('aee-empty'); $img.automizyResizabe(); */ }else{ t.d.img.$elem = false; } t.d.save.apply(t, [t.d.img]); } return t; }; p.reset = function(){ return this.dialogTitle($A.translate('Upload image')) .enableAlign() .disableDelete() .src('') .link('http://') .alt('') .title('') .align('center'); }; $A.initBasicFunctions(ImagePicker, "ImagePicker"); }); });