/** * Copyright JS Foundation and other contributors, http://js.foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. **/ RED.menu = (function() { var menuItems = {}; function createMenuItem(opt) { var item; if (opt !== null && opt.id) { var themeSetting = RED.settings.theme("menu."+opt.id); if (themeSetting === false) { return null; } } function setInitialState() { var savedStateActive = RED.settings.get("menu-" + opt.id); if (opt.setting) { // May need to migrate pre-0.17 setting if (savedStateActive !== null) { RED.settings.set(opt.setting,savedStateActive); RED.settings.remove("menu-" + opt.id); } else { savedStateActive = RED.settings.get(opt.setting); } } if (savedStateActive) { link.addClass("active"); triggerAction(opt.id,true); } else if (savedStateActive === false) { link.removeClass("active"); triggerAction(opt.id,false); } else if (opt.hasOwnProperty("selected")) { if (opt.selected) { link.addClass("active"); } else { link.removeClass("active"); } triggerAction(opt.id,opt.selected); } } if (opt === null) { item = $('
'); } else { item = $(''); if (opt.group) { item.addClass("menu-group-"+opt.group); } var linkContent = ''; if (opt.toggle) { linkContent += ''; linkContent += ''; } if (opt.icon !== undefined) { if (/\.png/.test(opt.icon)) { linkContent += ' '; } else { linkContent += ' '; } } if (opt.sublabel) { linkContent += ' ' } else { linkContent += ' ' } linkContent += ''; var link = $(linkContent).appendTo(item); menuItems[opt.id] = opt; if (opt.onselect) { link.click(function(e) { e.preventDefault(); if ($(this).parent().hasClass("disabled")) { return; } if (opt.toggle) { var selected = isSelected(opt.id); if (typeof opt.toggle === "string") { if (!selected) { for (var m in menuItems) { if (menuItems.hasOwnProperty(m)) { var mi = menuItems[m]; if (mi.id != opt.id && opt.toggle == mi.toggle) { setSelected(mi.id,false); } } } setSelected(opt.id,true); } } else { setSelected(opt.id, !selected); } } else { triggerAction(opt.id); } }); if (opt.toggle) { setInitialState(); } } else if (opt.href) { link.attr("target","_blank").attr("href",opt.href); } else if (!opt.options) { item.addClass("disabled"); link.click(function(event) { event.preventDefault(); }); } if (opt.options) { item.addClass("dropdown-submenu pull-left"); var submenu = $(' ').appendTo(item); for (var i=0;i