diff options
Diffstat (limited to 'dgbuilder/public/red/ui/menu.js')
-rw-r--r-- | dgbuilder/public/red/ui/menu.js | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/dgbuilder/public/red/ui/menu.js b/dgbuilder/public/red/ui/menu.js new file mode 100644 index 00000000..07ea5fd2 --- /dev/null +++ b/dgbuilder/public/red/ui/menu.js @@ -0,0 +1,122 @@ +/** + * 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 + } +})(); |