PluginProbe
YeeMail — Email Template Builder & Customizer / trunk
YeeMail — Email Template Builder & Customizer vtrunk
3.0.1 2.2.1 3.0.0 2.2.0 trunk 2.0.0 2.0.3 2.0.5 2.0.8 2.1.6 2.1.7 2.1.8
yeemail / backend / src / main.js

main.js in YeeMail — Email Template Builder & Customizer trunk, at backend/src/main.js

513 lines 25.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function($) {
2 "use strict";
3 $( document ).ready( function () {
4 // Save bulder to josn
5 $.fn.yeemail_save_type = function (type) {
6 var html_emlement = $(this);
7 var type = $(this).data("type");
8 var container_style = {};
9 var container_attr = {};
10 var inner_style = {};
11 var inner_attr = {};
12 var style_container_element = yeemail_builder["block"][type]["editor"]["container"]["style"];
13 var style_inner_element = yeemail_builder["block"][type]["editor"]["inner"]["style"];
14 var attr_inner_element = yeemail_builder["block"][type]["editor"]["inner"]["attr"];
15 //Save style container
16 $.each( style_container_element, function( key, value ) {
17 var data = html_emlement.css(value);
18 container_style[value] = data;
19 });
20 //Save style inner
21 $.each( style_inner_element, function( key, value ) {
22 var style_content= {};
23 $.each( value , function( index, style ) {
24 var data = html_emlement.find(key).css(style);
25 style_content[style] = data
26 })
27 inner_style[key] = style_content;
28 });
29 //Save attr
30 $.each( attr_inner_element, function( key, value ) {
31 var attr_content= {};
32 $.each( value , function( index, style ) {
33 switch(style) {
34 case "text":
35 var data = html_emlement.find(key).html();
36 break;
37 case "menu":
38 var menu = {};
39 var i =0;
40 html_emlement.find( ".yeemail-menu td" ).each(function() {
41 var text_menu = $(this).find("a").html();
42 var href = $(this).find("a").attr("href");
43 var background = $(this).css("background-color");
44 var color = $(this).find("a").css("color");
45 color = $.email_builder_cover_color(color);
46 background = $.email_builder_cover_color(background);
47 menu[i] = {"text":text_menu,"background":background,"color":color,"href":href} ;
48 i++;
49 });
50 var data = menu;
51 break;
52 case "html":
53 case "html_hide":
54 case "html1":
55 case "html_hide1":
56 var data = html_emlement.find(key).html();
57 break;
58 default:
59 var data = html_emlement.find(key).attr(style);
60 }
61 attr_content[style] = data
62 })
63 inner_attr[key] = attr_content;
64 });
65 var condition = "";
66 condition = html_emlement.attr("data-condition");
67 if( condition === undefined || condition == "" ){
68 condition = "";
69 }
70 return {"type":type,"container_style":container_style,"inner_style":inner_style,"inner_attr":inner_attr,"condition":condition };
71 }
72 //Click editor -> set element
73 $.fn.yeemail_set_type_editor = function ( row ) {
74 var builder = $(this);
75 var type = $(this).data("type");
76 if (typeof type === "undefined") {
77 return
78 }
79 var style_container_element = yeemail_builder["block"][type]["editor"]["container"]["style"];
80 var attr_container_element = yeemail_builder["block"][type]["editor"]["container"]["attr"];
81 //set editor in container element style
82 $.each( style_container_element, function( key, value ) {
83 $.yeemail_set_css_element(key,value,builder);
84 });
85 $.each( attr_container_element, function( key, value ) {
86 var data = $(key).val();
87 if( $(key).attr("type") == "checkbox" ){
88 if( $(key).is(':checked') ){
89 data = "ok";
90 }else{
91 data = "not";
92 }
93 }
94 builder.attr(value,data);
95 });
96 var condition = $(".builder__editor--item-conditional_logic .builder__editor--condition").val();
97 builder.attr("data-condition",condition);
98 //Element
99 if( builder.closest(".builder-elements").length > 0 ) {
100 var attr_inner_element = yeemail_builder["block"][type]["editor"]["inner"]["attr"];
101 var style_inner_element = yeemail_builder["block"][type]["editor"]["inner"]["style"];
102 //set editor in element style
103 $.each( style_inner_element, function( key, value ) {
104 $.each( value , function( index, style ) {
105 $.yeemail_set_css_element(index,style,builder,key);
106 })
107 });
108 //set editor in element attr
109 $.each( attr_inner_element, function( key, value ) {
110 $.each( value , function( index, attr ) {
111 var data = $(index).val();
112 var data_value = $(index).data("after_value");
113 if (data_value !== undefined) {
114 data +=data_value;
115 }
116 switch(attr) {
117 case "html":
118 //change shortcode
119 if(data == ""){
120 data = tinyMCE.get('.builder__editor--js').getContent();
121 }
122 builder.find(key).html($.yeemail_replace_shorcode(data));
123 break;
124 case "html_hide":
125 builder.find(key).html(data);
126 break;
127 case "text":
128 builder.find(key).html(data);
129 break;
130 case "data-showimg":
131 case "data-sku":
132 case "data-totals":
133 case "data-showdes":
134 var showimg = $(".builder__editor--item-detail-template .detail-img");
135 if( showimg.is(":checked")){
136 showimg ="yes";
137 }else{
138 showimg ="hidden";
139 }
140 var totals = $(".builder__editor--item-detail-template .detail-totals");
141 if( totals.is(":checked")){
142 totals ="yes";
143 }else{
144 totals ="hidden";
145 }
146 var sku = $(".builder__editor--item-detail-template .detail-sku");
147 if( sku.is(":checked")){
148 sku ="yes";
149 }else{
150 sku ="hidden";
151 }
152 var des = $(".builder__editor--item-detail-template .detail-des");
153 if( des.is(":checked")){
154 des ="yes";
155 }else{
156 des ="hidden";
157 }
158 var value = "";
159 value = $(index).val();
160 if($(index).attr("type") == "checkbox"){
161 if( $(index).is(":checked")){
162 value = "yes";
163 }else{
164 value = "hidden";
165 }
166 }else{
167 value = data;
168 }
169 var shortcode ="[yeemail_woo_order_detail show_img='"+showimg+"' item_totals='"+totals+"' item_sku='"+sku+"' show_des='"+des+"']";
170 let count_hidden = $('th[data-sku="yes"],th[data-showimg="yes"],th[data-showdes="yes"]',builder).length;
171 builder.find(".woo_totals th").attr("colspan",2 + parseInt(count_hidden));
172 $(".builder-elements-content.yeemail_builder_focus .text-content-data").html(shortcode);
173 builder.find(key).attr(attr,value);
174 break;
175 case "menu":
176 var tr = $('<tr class="links"></tr');
177 var i_menu = 0;
178 $( ".builder__editor--item-menu .menu-content-tool li.data" ).each(function() {
179 var text_menu = $(this).find(".text").val();
180 var href = $(this).find(".text_url").val();
181 var background = $(this).find(".text_background").val();
182 var color = $(this).find(".text_color").val();
183 var td = $('<td align="center" valign="top"><a target="_blank" href=""></a></td>');
184 td.css("background-color",background);
185 td.find("a").css("color",color);
186 td.find("a").attr("href",href);
187 td.find("a").html(text_menu);
188 td.appendTo(tr);
189 i_menu++;
190 });
191 builder.find("tr").remove();
192 tr.appendTo(builder.find("table"));
193 var menu_width = 100 / i_menu;
194 builder.find("td").css("width",menu_width);
195 $.each( style_inner_element, function( key, value ) {
196 $.each( value , function( index, style ) {
197 $.yeemail_set_css_element(index,style,builder,key);
198 })
199 });
200 break;
201 default:
202 builder.find(key).attr(attr,data);
203 }
204 })
205 });
206 }
207 }
208 //Click emlement -> get and show editor
209 $.fn.yeemail_load_type_editor = function (row ) {
210 var type = $(this).data("type");
211 var builder = $(this);
212 var type_text = type;
213 if( yeemail_builder["block"][type]["type_text"] !== undefined){
214 type_text = yeemail_builder["block"][type]["type_text"];
215 }
216 $(".yeemail-builder-goback .yeemail-builder-goback_block").html(type_text);
217 var show_class_container = yeemail_builder["block"][type]["editor"]["container"]["show"];
218 var style_container_element = yeemail_builder["block"][type]["editor"]["container"]["style"];
219 var attr_container_element = yeemail_builder["block"][type]["editor"]["container"]["attr"];
220 //Show eidtor
221 $.each( show_class_container, function( key, value ) {
222 $(".builder__editor--item-"+value).removeClass("hidden");
223 });
224 //set editor in container element style
225 $.each( style_container_element, function( key, value ) {
226 var data = builder.css(value);
227 $.yeemail_set_css_editor(value,key,data);
228 });
229 $.each( attr_container_element, function( key, value ) {
230 var data = builder.attr(value);
231 var type = $(key).attr("type");
232 if( type == "checkbox"){
233 if( data != "ok"){
234 $(key).prop('checked', false);;
235 }else{
236 $(key).prop('checked', true);
237 }
238 }
239 $(key).val(data);
240 });
241 var condition = builder.attr("data-condition");
242 if( condition === undefined || condition == "" ){
243 condition = "";
244 }
245 $(".builder__editor--item-conditional_logic .builder__editor--condition").val(condition);
246 if( !row ){
247 var attr_inner_element = yeemail_builder["block"][type]["editor"]["inner"]["attr"];
248 var style_inner_element = yeemail_builder["block"][type]["editor"]["inner"]["style"];
249 //set editor in element style
250 $.each( style_inner_element, function( key, value ) {
251 $.each( value , function( index, style ) {
252 var data = builder.find(key).css(style);
253 $.yeemail_set_css_editor(style,index,data);
254 })
255 });
256 //set editor in element attr
257 $.each( attr_inner_element, function( key, value ) {
258 $.each( value , function( index, attr ) {
259 switch(attr) {
260 case "html_hide":
261 case "data-src":
262 break;
263 case "text":
264 var data = builder.find(key).html();
265 $(index).val(data);
266 break;
267 case "html":
268 if( builder.find(key+"-data").length > 0 ){
269 var data = builder.find(key +"-data").html();
270 }else{
271 var data = builder.find(key).html();
272 }
273 tinyMCE.activeEditor.setContent(data);
274 $(index).val(data);
275 break;
276 case "html_ajax":
277 var data = builder.find(key+"-data").html();
278 tinyMCE.activeEditor.setContent(data);
279 break;
280 case "menu":
281 var html_menu=$("<ul></ul>");
282 $( builder.find(".yeemail-menu td") ).each(function() {
283 var text_menu = $(this).find("a").html();
284 var href = $(this).find("a").attr("href");
285 var background = $(this).find("a").css("background-color");
286 var color = $(this).find("a").css("color");
287 color = $.email_builder_cover_color(color);
288 background = $.email_builder_cover_color(background);
289 var menu = $(".builder__editor--item-menu-hidden").clone().removeClass('hidden builder__editor--item-menu-hidden');
290 menu.find(".text").val(text_menu);
291 menu.find(".text_url").val(href);
292 menu.find(".text_background").val(background);
293 menu.find(".text_color").val(color);
294 var container_li = $("<li class='data'></li>");
295 menu.appendTo(container_li);
296 container_li.appendTo(html_menu);
297 });
298 html_menu.removeClass('hidden');
299 $(".builder__editor--item-menu .menu-content-tool ul").remove();
300 html_menu.appendTo($(".menu-content-tool"));
301 $('.menu-content-tool .text_background,.menu-content-tool .text_color').wpColorPicker({
302 change: function(event, ui){
303 $(".yeemail_builder_focus").yeemail_set_type_editor();
304 }
305 });
306 break;
307 default:
308 var data = builder.find(key).attr(attr);
309 var type = $(index).attr("type");
310 if(type == "checkbox"){
311 if( data == "ok" || data == "yes"){
312 $(index).prop('checked', true);
313 }else{
314 $(index).prop('checked', false);
315 }
316 }else{
317 $(index).val(data);
318 }
319 }
320 })
321 });
322 }
323 }
324 $.yeemail_replace_shorcode = function (str) {
325 if( str === undefined){
326 return str;
327 }
328 let re = new RegExp(yeemail_script.builder_shorcode_re, "gi");
329 str = str.replaceAll(re, function (matched) {
330 matched = matched.replace(/\[|\]/gi, "");
331 if( yeemail_script.builder_shorcode[matched] === undefined ){
332 return "["+matched+"]";
333 }else{
334 return yeemail_script.builder_shorcode[matched];
335 }
336 })
337 return str;
338 }
339 // Drop emlement and load builder -> show data builder
340 $.yeemail_load_type = function (type,elements,email) {
341 if (typeof yeemail_builder["block"][type] === undefined){
342 return "Type undefined";
343 }else{
344 var html = $(yeemail_builder["block"][type]["builder"]);
345 }
346 if( elements ){
347 var container_style = elements.container_style;
348 var inner_style = elements.inner_style;
349 var inner_attr = elements.inner_attr;
350 html.find(".builder-elements-content").css(container_style);
351 $.each( inner_style, function( key, value ) {
352 if( value != "") {
353 html.find(key).css(value);
354 }
355 });
356 if( elements.condition != ""){
357 html.find(".builder-elements-content").attr("data-condition",elements.condition);
358 }
359 $.each( inner_attr, function( key, value ) {
360 $.each( value, function( k, v ) {
361 switch(k) {
362 case "html":
363 var v_hide = inner_attr[".text-content-data"]["html_hide"];
364 if(v_hide != ""){
365 if(v_hide.search("=")>0){
366 v_hide = v;
367 }
368 }
369 v_hide = $.yeemail_replace_shorcode(v_hide);
370 html.find(key).html(v_hide);
371 break;
372 case "text":
373 case "html_hide":
374 html.find(key).html(v);
375 break;
376 case "data-src":
377 html.find(key).attr("src",v);
378 html.find(key).attr(k,v);
379 break;
380 case "menu":
381 var menu_main ="";
382 $.each( v, function(menu_key, menu ) {
383 menu_main += '<td style="background-color:'+menu.background+';padding:10px 0;" align="center" valign="top"><a style="color:'+menu.color+';" target="_blank" href="'+menu.href+'">'+menu.text+'</a></td>';
384 })
385 html.find("tr").html(menu_main);
386 $.each( inner_style, function( key, value ) {
387 if( value != "") {
388 html.find(key).css(value);
389 }
390 });
391 break;
392 default:
393 html.find(key).attr(k,v);
394 break;
395 }
396 })
397 });
398 }
399 return html;
400 }
401 //Cover grb to hex
402 $.email_builder_cover_color = function (rgb) {
403 if( rgb === undefined){
404 return "";
405 }
406 if( rgb == "" ){
407 return "transparent";
408 }
409 if( "rgba(0,0,0,0)" == rgb.replace(/\s/g, '') ){
410 return "transparent";
411 }
412 rgb = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);
413 return (rgb && rgb.length === 4) ? "#" +
414 ("0" + parseInt(rgb[1],10).toString(16)).slice(-2) +
415 ("0" + parseInt(rgb[2],10).toString(16)).slice(-2) +
416 ("0" + parseInt(rgb[3],10).toString(16)).slice(-2) : '';
417 }
418 //set css edit
419 $.youtube_parser =function( url ) {
420 var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
421 var match = url.match(regExp);
422 return (match&&match[7].length==11)? match[7] : false;
423 }
424 $.yeemail_background_img =function( data ) {
425 if( data === undefined){
426 return "";
427 }
428 var img = data.replace('url(','').replace(')','').replace(/\"/gi, "");
429 return img;
430 }
431 $.yeemail_set_css_editor =function( style, index,data) {
432 switch(style) {
433 case "border-color":
434 case "background-color":
435 case "color":
436 data = $.email_builder_cover_color(data);
437 $(index).val(data);
438 $(index).closest(".wp-picker-container").find(".button").css("background-color",data);
439 break;
440 case "background-image":
441 if( data == "none"){
442 data = "";
443 }else{
444 data = $.yeemail_background_img(data);
445 }
446 $(index).val(data);
447 break;
448 case "border-style":
449 $(index).val(data);
450 break;
451 case "text-align":
452 $(index).val(data);
453 $(index).closest(".builder__editor--item").find(".button__align").removeClass("active");
454 $(index).closest(".builder__editor--item").find(".builder__editor--align-"+data).addClass("active");
455 if( data == "stat")
456 break;
457 default:
458 data = data.replace("px","");
459 if(!isNaN(data)){
460 data = Math.ceil(data);
461 }
462 var type_text = $(index).attr("type");
463 if( type_text == "checkbox"){
464 if( data== "none"){
465 $(index).prop('checked', false);;
466 }else{
467 $(index).prop('checked', true);
468 }
469 }
470 $(index).val(data);
471 }
472 }
473 $.yeemail_set_css_element =function( selector, style,builder,key) {
474 var data = $(selector).val();
475 var data_value = $(selector).data("after_value");
476 if (data_value !== undefined) {
477 data +=data_value;
478 }
479 if(key){
480 builder = builder.find(key);
481 }
482 switch(style) {
483 case "display":
484 if( $(selector).is(':checked') ) {
485 builder.css(style,"inline-block");
486 }else{
487 builder.css(style,"none");
488 }
489 break;
490 case "text":
491 builder.html(data);
492 break;
493 case "border-style":
494 builder.css(style,data);
495 break;
496 case "background-image":
497 if( data == ""){
498 builder.css("background-image","");
499 }else{
500 builder.css({"background-image":'url("' + data + '")',
501 "background-position": "center",
502 "background-repeat": "no-repeat",
503 "background-size": "cover"
504 });
505 }
506 break;
507 default:
508 builder.css(style,data);
509 break;
510 }
511 }
512 })
513 })(jQuery);