jegtheme

composer-atts.js

Aug 18th, 2014
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* =========================================================
  2.  * composer-atts.js v0.2.1
  3.  * =========================================================
  4.  * Copyright 2013 Wpbakery
  5.  *
  6.  * Visual composer backbone/underscore shortcodes attributes
  7.  * form field and parsing controls
  8.  * ========================================================= */
  9. var vc = {filters:{templates:[]}, addTemplateFilter:function (callback) {
  10.     if (_.isFunction(callback)) this.filters.templates.push(callback);
  11. }};
  12. (function ($) {
  13.     var i18n = window.i18nLocale;
  14.     vc.edit_form_callbacks = [];
  15.     vc.atts = {
  16.         parse:function (param) {
  17.             var value;
  18.             var $field = this.content().find('.wpb_vc_param_value[name=' + param.param_name + ']');
  19.           if (!_.isUndefined(vc.atts[param.type]) && !_.isUndefined(vc.atts[param.type].parse)) {
  20.                 value = vc.atts[param.type].parse.call(this, param);
  21.             } else {
  22.                 value = $field.length ? $field.val() : null;
  23.             }
  24.             if ($field.data('js-function') !== undefined && typeof(window[$field.data('js-function')]) !== 'undefined') {
  25.                 var fn = window[$field.data('js-function')];
  26.                 fn(this.$el, this);
  27.             }
  28.             return value;
  29.         },
  30.         parseFrame:function (param) {
  31.           var value;
  32.           var $field = this.content().find('.wpb_vc_param_value[name=' + param.param_name + ']');
  33.           if (!_.isUndefined(vc.atts[param.type]) && !_.isUndefined(vc.atts[param.type].parse)) {
  34.             value = vc.atts[param.type].parse.call(this, param);
  35.           } else {
  36.             value = $field.length ? $field.val() : null;
  37.           }
  38.           if ($field.data('js-function') !== undefined && typeof(window[$field.data('js-function')]) !== 'undefined') {
  39.             var fn = window[$field.data('js-function')];
  40.             fn(this.$el, this);
  41.           }
  42.           return value;
  43.         }
  44.     };
  45.  
  46.     // Default atts
  47.     _.extend(vc.atts, {
  48.         textarea_html:{
  49.             parse:function (param) {
  50.                 var $field = this.content().find('textarea.wpb_vc_param_value.' + param.param_name + ''),
  51.                     mce_id = $field.attr('id');
  52.                 // try {
  53.                 return this.window().tinyMCE.activeEditor.save();
  54.                 // } catch (err) {
  55.                 // }
  56.                 return vc_wpnop($field.val()); // !_.isUndefined(window.switchEditors) ? window.switchEditors._wp_Nop($field.val()) : $field.val();
  57.             },
  58.             render:function (param, value) {
  59.                 return _.isUndefined(value) ? value : vc_wpautop(value);
  60.             }
  61.         },
  62.         textarea_safe: {
  63.           parse:function (param) {
  64.             var $field = this.content().find('.wpb_vc_param_value[name=' + param.param_name + ']'),
  65.                 new_value = $field.val();
  66.             return new_value.match(/"/) ? '#E-8_' + base64_encode(rawurlencode(new_value)) : new_value;
  67.           },
  68.           render:function (param, value) {
  69.             return value && value.match(/^#E\-8_/) ? $("<div/>").text(rawurldecode(base64_decode(value.replace(/^#E\-8_/, '')))).html() : value;
  70.           }
  71.         },
  72.         checkbox:{
  73.             parse:function (param) {
  74.                 var arr = [],
  75.                     new_value = '';
  76.                 $('input[name=' + param.param_name + ']', this.content()).each(function (index) {
  77.                     var self = $(this);
  78.                     if (self.is(':checked')) {
  79.                         arr.push(self.attr("value"));
  80.                     }
  81.                 });
  82.                 if (arr.length > 0) {
  83.                     new_value = arr.join(',');
  84.                 }
  85.                 return new_value;
  86.             }
  87.         },
  88.         posttypes:{
  89.             parse:function (param) {
  90.                 var posstypes_arr = [],
  91.                     new_value = '';
  92.                 $('input[name=' + param.param_name + ']', this.content()).each(function (index) {
  93.                     var self = $(this);
  94.                     if (self.is(':checked')) {
  95.                         posstypes_arr.push(self.attr("value"));
  96.                     }
  97.                 });
  98.                 if (posstypes_arr.length > 0) {
  99.                     new_value = posstypes_arr.join(',');
  100.                 }
  101.                 return new_value;
  102.             }
  103.         },
  104.         taxonomies:{
  105.             parse:function (param) {
  106.                 var posstypes_arr = [],
  107.                     new_value = '';
  108.                 $('input[name=' + param.param_name + ']', this.content()).each(function (index) {
  109.                     var self = $(this);
  110.                     if (self.is(':checked')) {
  111.                         posstypes_arr.push(self.attr("value"));
  112.                     }
  113.                 });
  114.                 if (posstypes_arr.length > 0) {
  115.                     new_value = posstypes_arr.join(',');
  116.                 }
  117.                 return new_value;
  118.             }
  119.         },
  120.         exploded_textarea:{
  121.             parse:function (param) {
  122.                 var $field = this.content().find('.wpb_vc_param_value[name=' + param.param_name + ']');
  123.                 return $field.val().replace(/\n/g, ",");
  124.             }
  125.         },
  126.         textarea_raw_html:{
  127.             parse:function (param) {
  128.                 var $field = this.content().find('.wpb_vc_param_value[name=' + param.param_name + ']'),
  129.                     new_value = $field.val();
  130.                 return base64_encode(rawurlencode(new_value));
  131.             },
  132.             render:function (param, value) {
  133.                 return $("<div/>").text(rawurldecode(base64_decode(value))).html();
  134.             }
  135.         },
  136.         dropdown:{
  137.             render:function (param, value) {
  138.                 var all_classes = _.isObject(param.value) ? _.values(param.value).join(' ') : '';
  139.                 //  this.$el.find('> .wpb_element_wrapper').removeClass(all_classes).addClass(value); // remove all possible class names and add only selected one
  140.                 return value;
  141.             }
  142.         },
  143.         attach_images:{
  144.             parse:function (param) {
  145.                 var $field = this.content().find('.wpb_vc_param_value[name=' + param.param_name + ']'),
  146.                     thumbnails_html = '';
  147.                 // TODO: Check image search with Wordpress
  148.                 $field.parent().find('li.added').each(function () {
  149.                     thumbnails_html += '<li><img src="' + $(this).find('img').attr('src') + '" alt=""></li>';
  150.                 });
  151.                 $('[data-model-id=' + this.model.id + ']').data('field-' + param.param_name + '-attach-images', thumbnails_html);
  152.                 return $field.length ? $field.val() : null;
  153.             },
  154.             render:function (param, value) {
  155.                 var $thumbnails = this.$el.find('.attachment-thumbnails[data-name=' + param.param_name + ']'),
  156.                     thumbnails_html = this.$el.data('field-' + param.param_name + '-attach-images');
  157.                 if (_.isUndefined(thumbnails_html)) {
  158.                     $.ajax({
  159.                         type:'POST',
  160.                         url:window.ajaxurl,
  161.                         data:{
  162.                             action:'wpb_gallery_html',
  163.                             content:value
  164.                         },
  165.                         dataType:'html',
  166.                         context:this
  167.                     }).done(function (html) {
  168.                             vc.atts.attach_images.updateImages($thumbnails, html);
  169.                         });
  170.                 } else {
  171.                     this.$el.removeData('field-' + param.param_name + '-attach-images');
  172.                     vc.atts.attach_images.updateImages($thumbnails, thumbnails_html);
  173.                 }
  174.                 return value;
  175.             },
  176.             updateImages:function ($thumbnails, thumbnails_html) {
  177.                 $thumbnails.html(thumbnails_html);
  178.                 if (thumbnails_html.length) {
  179.                     $thumbnails.removeClass('image-exists').next().addClass('image-exists');
  180.                 } else {
  181.                     $thumbnails.addClass('image-exists').next().removeClass('image-exists');
  182.                 }
  183.             }
  184.         },
  185.         href: {
  186.             parse: function(param) {
  187.                 var $field = this.content().find('.wpb_vc_param_value[name=' + param.param_name + ']'),
  188.                     val = '';
  189.                 if($field.length && $field.val() != 'http://') val = $field.val();
  190.                 return val;
  191.             }
  192.         },
  193.         attach_image:{
  194.             parse:function (param) {
  195.                 var $field = this.content().find('.wpb_vc_param_value[name=' + param.param_name + ']'),
  196.                     image_src = '';
  197.                 if ($field.parent().find('li.added').length) {
  198.                     image_src = $field.parent().find('li.added img').attr('src');
  199.                 }
  200.                 $('[data-model-id=' + this.model.id + ']').data('field-' + param.param_name + '-attach-image', image_src);
  201.                 return $field.length ? $field.val() : null;
  202.             },
  203.             render:function (param, value) {
  204.                 var image_src = $('[data-model-id=' + this.model.id + ']').data('field-' + param.param_name + '-attach-image');
  205.                 var $thumbnail = this.$el.find('.attachment-thumbnail[data-name=' + param.param_name + ']');
  206.                 if (_.isUndefined(image_src)) {
  207.                     if(!_.isUndefined(value)) {
  208.                         $.ajax({
  209.                             type:'POST',
  210.                             url:window.ajaxurl,
  211.                             data:{
  212.                                 action:'wpb_single_image_src',
  213.                                 content:value
  214.                             },
  215.                             dataType:'html',
  216.                             context:this
  217.                         }).done(function (src) {
  218.                             vc.atts['attach_image'].updateImage($thumbnail, src);
  219.                         });
  220.                     }
  221.                 } else {
  222.                     $('[data-model-id=' + this.model.id + ']').removeData('field-' + param.param_name + '-attach-image');
  223.                     vc.atts['attach_image'].updateImage($thumbnail, image_src);
  224.                 }
  225.  
  226.                 return value;
  227.             },
  228.             updateImage:function ($thumbnail, image_src) {
  229.                 if (_.isEmpty(image_src)) {
  230.                     $thumbnail.attr('src', '').hide();
  231.                     $thumbnail.next().removeClass('image-exists').next().removeClass('image-exists');
  232.                 } else {
  233.                     $thumbnail.attr('src', image_src).show();
  234.                     $thumbnail.next().addClass('image-exists').next().addClass('image-exists');
  235.                 }
  236.             }
  237.         }
  238.     });
  239.  
  240. })(window.jQuery);
Add Comment
Please, Sign In to add comment