/** * Copyright 2014 IBM Corp. * * 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) { item = $('<li class="divider"></li>'); } else { item = $('<li></li>'); var link = $('<a '+(opt.id?'id="'+opt.id+'" ':'')+'tabindex="-1" href="#">'+ (opt.toggle?'<i class="fa fa-check pull-right"></i>':'')+ (opt.icon?'<i class="'+opt.icon+'"></i> ':'')+ opt.label+ '</a>').appendTo(item); menuItems[opt.id] = opt; if (opt.onselect) { link.click(function() { if ($(this).parent().hasClass("disabled")) { return; } if (opt.toggle) { setSelected(opt.id,!isSelected(opt.id)); } else { opt.onselect.call(opt); } }) } else if (opt.href) { link.attr("target","_blank").attr("href",opt.href); } if (opt.options) { item.addClass("dropdown-submenu pull-left"); var submenu = $('<ul id="'+opt.id+'-submenu" class="dropdown-menu"></ul>').appendTo(item); for (var i=0;i<opt.options.length;i++) { createMenuItem(opt.options[i]).appendTo(submenu); } } if (opt.disabled) { item.addClass("disabled"); } } return item; } function createMenu(options) { var button = $("#"+options.id); var topMenu = $("<ul/>",{class:"dropdown-menu"}).insertAfter(button); for (var i=0;i<options.options.length;i++) { var opt = options.options[i]; createMenuItem(opt).appendTo(topMenu); } } function isSelected(id) { return $("#"+id).hasClass("active"); } function setSelected(id,state) { if (isSelected(id) == state) { return; } var opt = menuItems[id]; if (state) { $("#"+id).addClass("active"); } else { $("#"+id).removeClass("active"); } if (opt.onselect) { opt.onselect.call(opt,state); } } function setDisabled(id,state) { if (state) { $("#"+id).parent().addClass("disabled"); } else { $("#"+id).parent().removeClass("disabled"); } } function addItem(id,opt) { createMenuItem(opt).appendTo("#"+id+"-submenu"); } function removeItem(id) { $("#"+id).parent().remove(); } return { init: createMenu, setSelected: setSelected, isSelected: isSelected, setDisabled: setDisabled, addItem: addItem, removeItem: removeItem //TODO: add an api for replacing a submenu - see library.js:loadFlowLibrary } })();