ru-se.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

preview.js (8549B)


      1 (function ($) {
      2     if (!NodeList.prototype.forEach) {
      3         NodeList.prototype.forEach = Array.prototype.forEach;
      4         HTMLCollection.prototype.forEach = Array.prototype.forEach; // Because of https://bugzilla.mozilla.org/show_bug.cgi?id=14869
      5 
      6     }
      7 
      8     if (!Array.from) {
      9         Array.from = function (object) {
     10             return [].slice.call(object);
     11         };
     12     }
     13 
     14     $(function () {
     15 
     16         // WebKit contentEditable focus bug workaround:
     17         if (/AppleWebKit\/([\d.]+)/.exec(navigator.userAgent)) {
     18             var editableFix = $('<input style="position:fixed;z-index-1;width:1px;height:1px;border:none;margin:0;padding:0;" tabIndex="-1">').appendTo('html');
     19 
     20             $('body').on('blur', "i.mdi[contenteditable]", function () {
     21                 editableFix[0].setSelectionRange(0, 0);
     22                 editableFix.blur();
     23             });
     24         }
     25     });
     26 
     27 
     28 })(jQuery);
     29 
     30 
     31 jQuery.fn.addFixedOverlay = function (options) {
     32     var $ = jQuery;
     33     var root = parent;
     34     options = $.extend(true, {
     35         'types': [],
     36         'classes': [],
     37         'callback': function () {
     38         }
     39     }, options);
     40 
     41     this.each(function (index, el) {
     42         var $node = $(el);
     43         var ovItems = ($node.data('type') || "").trim().replace(/\s\s+/g, ' ').split(' ');
     44         var ov = $('<div class="node-overlay"><div class="overlay-top overlay-border"></div><div class="overlay-left overlay-border"></div><div class="overlay-right overlay-border"></div><div class="overlay-bottom overlay-border"></div></div>');
     45         var overlay = root.jQuery('#toolbar-template').html();
     46         var toolbar = $(overlay);
     47         var overlaysContainer = root.CP_Customizer.overlays.overlaysContainer();
     48         var optionsGroupOnHoverIN = function (event) {
     49             $(this).find('.options-group.cog').addClass('active');
     50 
     51             if (this.ownerDocument.defaultView.innerHeight - this.getClientRects()[0].top < 400) {
     52                 $(this).find('.options-group.cog').addClass('reverse');
     53             } else {
     54                 $(this).find('.options-group.cog').removeClass('reverse');
     55             }
     56 
     57 
     58         };
     59         var optionsGroupOnHoverOUT = function (event) {
     60             $(this).find('.options-group.cog').removeClass('active');
     61         };
     62 
     63         $.each(options.classes, function (index, val) {
     64             ov.addClass(val);
     65         });
     66 
     67         ovItems = ovItems.concat(options.types);
     68         ovItems = ovItems.filter(function (type) {
     69             return type.length;
     70         });
     71 
     72         if (ovItems.length === 0) {
     73             return;
     74         }
     75         root.CP_Customizer.overlays.assignNode(ov, $node);
     76         toolbar.find('.overlay-toolbar-element-type').html('Settings');
     77         toolbar.find('.edit-group').hide();
     78         ov.append(toolbar);
     79         $node.data('overlay', ov);
     80         $(ov).data('node', this);
     81         overlaysContainer.append(ov);
     82         $('.overlay-toolbar').hover(optionsGroupOnHoverIN, optionsGroupOnHoverOUT);
     83 
     84         // look for overlay cog items
     85 
     86         function addCogCallback(itemData) {
     87             if (itemData.toolbarTitle) {
     88                 var title = itemData.toolbarTitle;
     89                 if (typeof itemData.toolbarTitle === "function") {
     90                     title = itemData.toolbarTitle($node);
     91                 }
     92 
     93                 toolbar.find('.overlay-toolbar-element-type').html(title);
     94             }
     95             options.callback.apply($node, itemData);
     96         }
     97 
     98         for (var i = 0; i < ovItems.length; i++) {
     99             var itemType = ovItems[i];
    100             root.CP_Customizer.overlays.addOptionsToFixedOverlay(toolbar.find('.overlay-contextual-menu'), itemType, $node, addCogCallback);
    101         }
    102 
    103         if ($(this).width() < $(this).closest('body').width()) {
    104             ov.addClass('cog-outside');
    105         }
    106     });
    107     return this;
    108 };
    109 
    110 
    111 var cpHeaderOverlaySS = false;
    112 
    113 jQuery(document).ready(function ($) {
    114     var style = jQuery('style[data-name="overlay-opacity"]')[0];
    115     cpHeaderOverlaySS = Array.from(document.styleSheets).filter(function (ss) {
    116         return ss.ownerNode === style;
    117     }).pop();
    118 });
    119 
    120 function setOverlayProperty(prop, value) {
    121     var rule = (cpHeaderOverlaySS.cssRules || cpHeaderOverlaySS.rules)[0];
    122     rule.style.setProperty(prop, value);
    123 }
    124 
    125 function liveUpdate(setting, callback) {
    126     var cb = function (value) {
    127         value.bind(callback);
    128     };
    129     var _setting = setting;
    130     var _prefixedSetting = parent.CP_Customizer.slugPrefix() + "_" + setting;
    131     wp.customize(_setting, cb);
    132     wp.customize(_prefixedSetting, cb);
    133 
    134 
    135 }
    136 
    137 var __addedSettings = [];
    138 
    139 function liveUpdateAutoSetting(setting, callback) {
    140 
    141     if (__addedSettings.indexOf(setting) !== -1) {
    142         return;
    143     }
    144 
    145     __addedSettings.push(setting);
    146 
    147     var cb = function (value) {
    148         value.bind(callback);
    149     };
    150 
    151     var _setting = 'CP_AUTO_SETTING[' + setting + ']';
    152     var _prefixedSetting = 'CP_AUTO_SETTING[' + parent.CP_Customizer.slugPrefix() + "_" + setting + ']';
    153     wp.customize(_setting, cb);
    154     wp.customize(_prefixedSetting, cb);
    155 
    156     if (parent.wp.customize(_setting)) {
    157         callback(parent.wp.customize(_setting).get());
    158     } else {
    159         if (parent.wp.customize(_prefixedSetting)) {
    160             callback(parent.wp.customize(_prefixedSetting).get());
    161         }
    162     }
    163 }
    164 
    165 function bindLiveUpdates(root, $) {
    166     // live update will fallback for slug prefixed themes options
    167 
    168     // $('[data-theme]').each(function () {
    169     //     var option = $(this).attr('data-theme');
    170     //     var self = $(this);
    171     //     liveUpdateAutoSetting(option, function (to) {
    172     //         self.add($('[data-theme="' + option + '"]')).html(to);
    173     //     });
    174     // });
    175 
    176     $('[data-theme-href]').each(function () {
    177         var option = $(this).attr('data-theme-href');
    178         var self = $(this);
    179         liveUpdateAutoSetting(option, function (to) {
    180             self.attr('href', to);
    181         });
    182     });
    183 
    184     $('[data-theme-src]').each(function () {
    185         var option = $(this).attr('data-theme-src');
    186         var self = $(this);
    187         liveUpdateAutoSetting(option, function (to) {
    188             self.attr('src', to);
    189         });
    190     });
    191 
    192     $('[data-theme-target]').each(function () {
    193         var option = $(this).attr('data-theme-target');
    194         var self = $(this);
    195         liveUpdateAutoSetting(option, function (to) {
    196             var classAttr = self.attr('class');
    197             var newClassAttr = classAttr.replace(/mdi\-[a-z\-]+/ig, "").replace(/\s[\s]+/ig, " ").trim() + " " + to;
    198             self.attr('class', newClassAttr);
    199         });
    200     });
    201 
    202     $('[data-theme-mdi]').each(function () {
    203         var option = $(this).attr('data-theme');
    204         var self = $(this);
    205         liveUpdateAutoSetting(option, function (to) {
    206             self.html(to);
    207         });
    208     });
    209 }
    210 
    211 function doPreviewDecoration(root, $) {
    212 
    213 
    214     root.CP_Customizer.on(root.CP_Customizer.events.ELEMENT_DECORATED, function (event, $element) {
    215 
    216         // $element.find('[data-hover-fx]').delay(500).find('.overlay').css({
    217         //     display: 'block',
    218         //     opacity: 0.75
    219         // });
    220         // $element.find('[data-hover-fx]').delay(500).find('.swap-inner').css({
    221         //     display: 'block',
    222         //     opacity: 1
    223         // });
    224         //
    225         // if ($element.is('[data-hover-fx]')) {
    226         //     $element.delay(500).find('.overlay').css({
    227         //         display: 'block',
    228         //         opacity: 0.75
    229         //     });
    230         //     $element.delay(500).find('.swap-inner').css({
    231         //         display: 'block',
    232         //         opacity: 1
    233         //     });
    234         // }
    235 
    236     });
    237 
    238 
    239     $(document).find('[data-theme]').find(root.CP_Customizer.CONTENT_ELEMENTS).each(function (index, el) {
    240         $(this).attr('data-content-editable', true);
    241         $(this).attr('data-content-code-editable', true);
    242         $(this).attr('contenteditable', true);
    243     });
    244 }
    245 
    246 
    247 jQuery(document).ready(function ($) {
    248 
    249     if (wp.customize && wp.customize.mutationObserver) {
    250         wp.customize.mutationObserver.disconnect();
    251     }
    252     // if page is not maintainable with companion do not decorate
    253     if (!parent.CP_Customizer.preview.data().maintainable) {
    254         return;
    255     }
    256 
    257     // bindLiveUpdates(parent, jQuery);
    258     doPreviewDecoration(parent, $);
    259 });