File: /home/lucendi/www/wp-content/plugins/mesmerize-companion/assets/js/customizer/customizer-menu.js
(function (root, CP_Customizer, $) {
CP_Customizer.addModule(function (CP_Customizer) {
_.extend(CP_Customizer, {
menu: {
getGlobalOption: function(name, defaultValue){
if (cpCustomizerGlobal && cpCustomizerGlobal.pluginOptions && cpCustomizerGlobal.pluginOptions.hasOwnProperty(name)) {
return cpCustomizerGlobal.pluginOptions[name];
}
return defaultValue;
},
getPrimaryLocationModName: function() {
var primaryLocation = this.getGlobalOption("primaryMenuLocation", "primary");
return 'nav_menu_locations[' + primaryLocation + ']';
},
getHomeUrl: function() {
var primaryMenuHomeUrl = this.getGlobalOption("homeUrl", CP_Customizer.preview.data().siteURL);
return primaryMenuHomeUrl;
},
canSetPrimaryLocation: function() {
var canSetPrimaryLocation = this.getGlobalOption("canSetPrimaryLocation", true);
return canSetPrimaryLocation;
},
getPrimaryLocationDefaultLanguageMenu: function() {
var primaryLocationDefaultLanguageMenu = this.getGlobalOption("primaryLocationDefaultLanguageMenu", -1);
return primaryLocationDefaultLanguageMenu;
},
createPrimaryMenu: function () {
var api = root.wp.customize;
var customizeId,
name = name || root.CP_Customizer.translateCompanionString("Main Menu"),
placeholderId = api.Menus.generatePlaceholderAutoIncrementId();
customizeId = 'nav_menu[' + String(placeholderId) + ']';
api.create(customizeId, customizeId, {}, {
type: 'nav_menu',
transport: api.Menus.data.settingTransport,
previewer: api.previewer
});
api(customizeId).set($.extend({},
api.Menus.data.defaultSettingValues.nav_menu, {
name: name
}
));
menuSection = new api.Menus.MenuSection(customizeId, {
params: {
id: customizeId,
panel: 'nav_menus',
title: name,
customizeAction: api.Menus.data.l10n.customizingMenus,
type: 'nav_menu',
priority: 10,
menu_id: placeholderId
}
});
api.section.add(customizeId, menuSection);
if (this.canSetPrimaryLocation()) {
// set location
api(this.getPrimaryLocationModName()).set(placeholderId);
}
var defaultMenu = this.getPrimaryLocationDefaultLanguageMenu();
if (defaultMenu !== -1) {
wp.customize.bind("save-request-params", function (query) {
query.icl_translation_of = defaultMenu;
return query;
});
}
// create home page menu item;
this.addAnchorToPrimaryMenu('#page-top', 'Home');
},
getPrimaryMenuID: function () {
var menuId = wp.customize(this.getPrimaryLocationModName()).get();
if (wp.customize('nav_menu[' + menuId + ']')) {
return menuId;
} else {
return false;
}
},
getPrimaryMenu: function () {
var menuId = CP_Customizer.menu.getPrimaryMenuID();
if (menuId !== false) {
return wp.customize('nav_menu[' + menuId + ']').get();
} else {
return false;
}
},
focusPrimaryMenuCustomize: function () {
var menuId = CP_Customizer.menu.getPrimaryMenuID();
if (menuId !== false) {
wp.customize.section('nav_menu[' + menuId + ']').focus();
return true;
}
return false;
},
getPrimaryMenuControl: function () {
var api = root.wp.customize;
var menuId = CP_Customizer.menu.getPrimaryMenuID();
if (menuId) {
return api.Menus.getMenuControl(menuId);
} else {
return false;
}
},
addAnchorToPrimaryMenu: function (anchor, title) {
var api = root.wp.customize;
var customizeId, placeholderId, settingArgs, setting, menuItemControl, menuId, menuControl, position = 0,
priority = 10;
menuId = CP_Customizer.menu.getPrimaryMenuID();
menuControl = CP_Customizer.menu.getPrimaryMenuControl();
if (!menuId || !menuControl) {
return;
}
_.each(menuControl.getMenuItemControls(), function (control) {
if (false === control.setting()) {
return;
}
priority = Math.max(priority, control.priority());
if (0 === control.setting().menu_item_parent) {
position = Math.max(position, control.setting().position);
}
});
position += 1;
priority += 1;
var url = CP_Customizer.menu.getHomeUrl();
if (anchor.replace(/#/, '').length) {
url = CP_Customizer.preview.data().pageURL + "#" + anchor.replace(/#/, '');
}
var item = $.extend({},
api.Menus.data.defaultSettingValues.nav_menu_item, {
'title': title,
'url': url,
'type': 'custom',
'type_label': api.Menus.data.l10n.custom_label,
'object': 'custom'
}, {
nav_menu_term_id: menuId,
original_title: title,
position: position
});
placeholderId = api.Menus.generatePlaceholderAutoIncrementId();
customizeId = 'nav_menu_item[' + String(placeholderId) + ']';
settingArgs = {
type: 'nav_menu_item',
transport: api.Menus.data.settingTransport,
previewer: api.previewer
};
setting = api.create(customizeId, customizeId, {}, settingArgs);
setting.set(item);
menuItemControl = new api.controlConstructor.nav_menu_item(customizeId, {
params: {
type: 'nav_menu_item',
content: '<li id="customize-control-nav_menu_item-' + String(placeholderId) + '" class="customize-control customize-control-nav_menu_item"></li>',
section: menuControl.id,
priority: priority,
active: true,
settings: {
'default': customizeId
},
menu_item_id: placeholderId
},
previewer: api.previewer
});
api.control.add(customizeId, menuItemControl);
menuControl.debouncedReflowMenuItems();
},
anchorExistsInPrimaryMenu: function (anchor) {
var menuControl = CP_Customizer.menu.getPrimaryMenuControl();
if (!menuControl) {
return false;
}
anchor = anchor.replace(/#/, '');
var itemsControl = menuControl.getMenuItemControls();
for (var i = 0; i < itemsControl.length; i++) {
var itemControl = itemsControl[i];
var url = (itemControl.setting.get().url || "").split("#").pop().trim();
if (url === anchor) {
return true;
}
}
return false;
},
updatePrimaryMenuAnchor: function (oldAnchor, options) {
var menuControl = CP_Customizer.menu.getPrimaryMenuControl();
if (!menuControl) {
return false;
}
oldAnchor = oldAnchor.replace(/#/, '');
var newAnchor = options.anchor.replace(/#/, '');
var title = options.title;
var itemsControl = menuControl.getMenuItemControls();
for (var i = 0; i < itemsControl.length; i++) {
var itemControl = itemsControl[i];
var url = (itemControl.setting.get().url || "").split("#").pop().trim();
if (url === oldAnchor) {
var itemData = itemControl.setting();
if (itemData) {
itemData = _.clone(itemData);
itemData.title = title;
itemData.url = CP_Customizer.preview.data().pageURL + "#" + newAnchor;
itemControl.setting.set(itemData);
return true;
}
}
}
return false;
},
removeAnchorFromPrimaryMenu: function (anchor) {
var api = root.wp.customize;
var menuControl = CP_Customizer.menu.getPrimaryMenuControl();
if (!menuControl) {
return false;
}
anchor = anchor.replace(/#/, '');
var itemsControl = menuControl.getMenuItemControls();
for (var i = 0; i < itemsControl.length; i++) {
var itemControl = itemsControl[i];
var url = (itemControl.setting.get().url || "").split("#").pop();
if (url === anchor) {
itemControl.setting.set(false);
api.control.remove(itemControl.id);
return true;
}
}
return false;
}
}
});
});
})(window, CP_Customizer, jQuery);