ru-se.com

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

customizer-menu.js (11916B)


      1 (function (root, CP_Customizer, $) {
      2 
      3     CP_Customizer.addModule(function (CP_Customizer) {
      4         _.extend(CP_Customizer, {
      5             menu: {
      6 
      7                 getGlobalOption: function(name, defaultValue){
      8                     if (cpCustomizerGlobal && cpCustomizerGlobal.pluginOptions && cpCustomizerGlobal.pluginOptions.hasOwnProperty(name)) {
      9                         return cpCustomizerGlobal.pluginOptions[name];
     10                     }
     11 
     12                     return defaultValue;
     13                 },
     14 
     15                 getPrimaryLocationModName: function() {
     16                     var primaryLocation = this.getGlobalOption("primaryMenuLocation", "primary");
     17                     return 'nav_menu_locations[' + primaryLocation + ']';
     18                 },
     19 
     20                 getHomeUrl: function() {
     21                     var primaryMenuHomeUrl = this.getGlobalOption("homeUrl", CP_Customizer.preview.data().siteURL);
     22                     return primaryMenuHomeUrl;
     23                 },
     24 
     25                 canSetPrimaryLocation: function() {
     26                     var canSetPrimaryLocation = this.getGlobalOption("canSetPrimaryLocation", true);
     27                     return canSetPrimaryLocation;
     28                 },
     29 
     30                 getPrimaryLocationDefaultLanguageMenu: function() {
     31                     var primaryLocationDefaultLanguageMenu = this.getGlobalOption("primaryLocationDefaultLanguageMenu", -1);
     32                     return primaryLocationDefaultLanguageMenu;
     33                 },
     34 
     35                 createPrimaryMenu: function () {
     36                     var api = root.wp.customize;
     37                     var customizeId,
     38                         name = name || root.CP_Customizer.translateCompanionString("Main Menu"),
     39                         placeholderId = api.Menus.generatePlaceholderAutoIncrementId();
     40 
     41                     customizeId = 'nav_menu[' + String(placeholderId) + ']';
     42 
     43                     api.create(customizeId, customizeId, {}, {
     44                         type: 'nav_menu',
     45                         transport: api.Menus.data.settingTransport,
     46                         previewer: api.previewer
     47                     });
     48 
     49                     api(customizeId).set($.extend({},
     50                         api.Menus.data.defaultSettingValues.nav_menu, {
     51                             name: name
     52                         }
     53                     ));
     54 
     55 
     56                     menuSection = new api.Menus.MenuSection(customizeId, {
     57                         params: {
     58                             id: customizeId,
     59                             panel: 'nav_menus',
     60                             title: name,
     61                             customizeAction: api.Menus.data.l10n.customizingMenus,
     62                             type: 'nav_menu',
     63                             priority: 10,
     64                             menu_id: placeholderId
     65                         }
     66                     });
     67                     api.section.add(customizeId, menuSection);
     68 
     69                     if (this.canSetPrimaryLocation()) {
     70                         // set location
     71                         api(this.getPrimaryLocationModName()).set(placeholderId);
     72                     }
     73 
     74                     var defaultMenu = this.getPrimaryLocationDefaultLanguageMenu();
     75 
     76                     if (defaultMenu !== -1) {
     77                         wp.customize.bind("save-request-params", function (query) {
     78                             query.icl_translation_of = defaultMenu;
     79                             return query;
     80                         });
     81                     }
     82 
     83 
     84                     // create home page menu item;
     85 
     86                     this.addAnchorToPrimaryMenu('#page-top', 'Home');
     87                 },
     88 
     89 
     90                 getPrimaryMenuID: function () {
     91                     var menuId = wp.customize(this.getPrimaryLocationModName()).get();
     92                     if (wp.customize('nav_menu[' + menuId + ']')) {
     93                         return menuId;
     94                     } else {
     95                         return false;
     96                     }
     97                 },
     98 
     99                 getPrimaryMenu: function () {
    100                     var menuId = CP_Customizer.menu.getPrimaryMenuID();
    101                     if (menuId !== false) {
    102                         return wp.customize('nav_menu[' + menuId + ']').get();
    103                     } else {
    104                         return false;
    105                     }
    106                 },
    107 
    108                 focusPrimaryMenuCustomize: function () {
    109                     var menuId = CP_Customizer.menu.getPrimaryMenuID();
    110                     if (menuId !== false) {
    111                         wp.customize.section('nav_menu[' + menuId + ']').focus();
    112                         return true;
    113                     }
    114 
    115                     return false;
    116                 },
    117 
    118                 getPrimaryMenuControl: function () {
    119                     var api = root.wp.customize;
    120                     var menuId = CP_Customizer.menu.getPrimaryMenuID();
    121 
    122                     if (menuId) {
    123                         return api.Menus.getMenuControl(menuId);
    124                     } else {
    125                         return false;
    126                     }
    127                 },
    128 
    129                 addAnchorToPrimaryMenu: function (anchor, title) {
    130                     var api = root.wp.customize;
    131                     var customizeId, placeholderId, settingArgs, setting, menuItemControl, menuId, menuControl, position = 0,
    132                         priority = 10;
    133 
    134                     menuId = CP_Customizer.menu.getPrimaryMenuID();
    135                     menuControl = CP_Customizer.menu.getPrimaryMenuControl();
    136 
    137                     if (!menuId || !menuControl) {
    138                         return;
    139                     }
    140 
    141                     _.each(menuControl.getMenuItemControls(), function (control) {
    142                         if (false === control.setting()) {
    143                             return;
    144                         }
    145                         priority = Math.max(priority, control.priority());
    146                         if (0 === control.setting().menu_item_parent) {
    147                             position = Math.max(position, control.setting().position);
    148                         }
    149                     });
    150                     position += 1;
    151                     priority += 1;
    152 
    153                     var url = CP_Customizer.menu.getHomeUrl();
    154                     if (anchor.replace(/#/, '').length) {
    155                         url = CP_Customizer.preview.data().pageURL + "#" + anchor.replace(/#/, '');
    156                     }
    157 
    158                     var item = $.extend({},
    159                         api.Menus.data.defaultSettingValues.nav_menu_item, {
    160                             'title': title,
    161                             'url': url,
    162                             'type': 'custom',
    163                             'type_label': api.Menus.data.l10n.custom_label,
    164                             'object': 'custom'
    165                         }, {
    166                             nav_menu_term_id: menuId,
    167                             original_title: title,
    168                             position: position
    169                         });
    170 
    171 
    172                     placeholderId = api.Menus.generatePlaceholderAutoIncrementId();
    173                     customizeId = 'nav_menu_item[' + String(placeholderId) + ']';
    174                     settingArgs = {
    175                         type: 'nav_menu_item',
    176                         transport: api.Menus.data.settingTransport,
    177                         previewer: api.previewer
    178                     };
    179 
    180                     setting = api.create(customizeId, customizeId, {}, settingArgs);
    181                     setting.set(item);
    182 
    183                     menuItemControl = new api.controlConstructor.nav_menu_item(customizeId, {
    184                         params: {
    185                             type: 'nav_menu_item',
    186                             content: '<li id="customize-control-nav_menu_item-' + String(placeholderId) + '" class="customize-control customize-control-nav_menu_item"></li>',
    187                             section: menuControl.id,
    188                             priority: priority,
    189                             active: true,
    190                             settings: {
    191                                 'default': customizeId
    192                             },
    193                             menu_item_id: placeholderId
    194                         },
    195                         previewer: api.previewer
    196                     });
    197 
    198                     api.control.add(customizeId, menuItemControl);
    199                     menuControl.debouncedReflowMenuItems();
    200 
    201 
    202 
    203                 },
    204 
    205                 anchorExistsInPrimaryMenu: function (anchor) {
    206                     var menuControl = CP_Customizer.menu.getPrimaryMenuControl();
    207 
    208                     if (!menuControl) {
    209                         return false;
    210                     }
    211 
    212                     anchor = anchor.replace(/#/, '');
    213 
    214                     var itemsControl = menuControl.getMenuItemControls();
    215                     for (var i = 0; i < itemsControl.length; i++) {
    216                         var itemControl = itemsControl[i];
    217                         var url = (itemControl.setting.get().url || "").split("#").pop().trim();
    218                         if (url === anchor) {
    219                             return true;
    220                         }
    221                     }
    222 
    223                     return false;
    224                 },
    225 
    226 
    227                 updatePrimaryMenuAnchor: function (oldAnchor, options) {
    228                     var menuControl = CP_Customizer.menu.getPrimaryMenuControl();
    229 
    230                     if (!menuControl) {
    231                         return false;
    232                     }
    233 
    234                     oldAnchor = oldAnchor.replace(/#/, '');
    235                     var newAnchor = options.anchor.replace(/#/, '');
    236                     var title = options.title;
    237 
    238                     var itemsControl = menuControl.getMenuItemControls();
    239                     for (var i = 0; i < itemsControl.length; i++) {
    240                         var itemControl = itemsControl[i];
    241                         var url = (itemControl.setting.get().url || "").split("#").pop().trim();
    242                         if (url === oldAnchor) {
    243                             var itemData = itemControl.setting();
    244                             if (itemData) {
    245                                 itemData = _.clone(itemData);
    246                                 itemData.title = title;
    247                                 itemData.url = CP_Customizer.preview.data().pageURL + "#" + newAnchor;
    248                                 itemControl.setting.set(itemData);
    249                                 return true;
    250                             }
    251                         }
    252                     }
    253 
    254                     return false;
    255                 },
    256 
    257                 removeAnchorFromPrimaryMenu: function (anchor) {
    258                     var api = root.wp.customize;
    259                     var menuControl = CP_Customizer.menu.getPrimaryMenuControl();
    260 
    261                     if (!menuControl) {
    262                         return false;
    263                     }
    264 
    265                     anchor = anchor.replace(/#/, '');
    266 
    267                     var itemsControl = menuControl.getMenuItemControls();
    268                     for (var i = 0; i < itemsControl.length; i++) {
    269                         var itemControl = itemsControl[i];
    270                         var url = (itemControl.setting.get().url || "").split("#").pop();
    271                         if (url === anchor) {
    272                             itemControl.setting.set(false);
    273                             api.control.remove(itemControl.id);
    274                             return true;
    275                         }
    276                     }
    277 
    278                     return false;
    279                 }
    280             }
    281         });
    282     });
    283 
    284 })(window, CP_Customizer, jQuery);