if (!global.p5UI__MenuStore) throw 'Missing global.p5UI__MenuStore' var DBG = DBG || 0 var DBG1 = 1 if (!global.p5UI__MenuStore) throw 'Missing global.p5UI__MenuStore' function makeRenderDropdownListItem(data) { return function renderDropdownListItem(idx) { var item = data.urls[idx] if (!item) return ''; var star = (-1 !== data.idsBookmarks.indexOf(item.id)) ? '' : '' ; return '
  • ' + '' + star + ' ' + '' + item.id + '' + ' ' + item.label + '' + '
  • ' ; } } function renderP5UrlsMenuDropdown(data, idSubMenu) { var renderDropdownListItem = makeRenderDropdownListItem(data) var labels = data.urls.map(function (item, idx) { return { idx: idx, label: item.label, } }); var groupeByLabel = labels.reduce(function (ret, item) { if (!ret.length) return [{ prefix: item.label, labels: [ item ] }]; var last = ret.pop() var labelLast = last.prefix.replace('_', ' ').split(" ") var labelItem = item.label.replace('_', ' ').split(" ") if (labelLast[0] === labelItem[0]) { last.labels.push(item) last.prefix = labelLast[0] + " (" + last.labels.length + ")" ret.push(last) } else { ret.push(last) ret.push({ prefix: item.label, labels: [item] }) return ret; } return ret; }, []) DBG && console.log('DBG:renderP5UrlsMenuDropdown groupeByLabel ', { groupeByLabel }) var nodesGroupedByLabel = groupeByLabel.map(function (item) { if (item.labels.length === 1) { return renderDropdownListItem(item.labels[0].idx) } else { return '' + "\n" ; } }) var jqDropdownMenu = jQuery('#' + idSubMenu) jqDropdownMenu.empty() jqDropdownMenu.append(nodesGroupedByLabel) } function initP5UrlsMenuDropdown(btnNode, idSubMenu) { if (!btnNode._initialized) { var jqDropdownTrigger = jQuery(btnNode) var rerenderDropdown = (function (global, idSubMenu) { return function (data) { DBG && console.log('DBG renderP5MainMenuDropdown', { data, idSubMenu }); renderP5UrlsMenuDropdown(data, idSubMenu); } })(global, idSubMenu); global.p5UI__MenuStore.subscribe(rerenderDropdown) jqDropdownTrigger.attr('data-toggle', 'dropdown') // is required by bootstrap dorpdown.js evenf if is called via js global.p5UI__MenuStore.forceUpdate() jQuery(btnNode).dropdown() } btnNode._initialized = true return true; } global.initP5UrlsMenuDropdown = initP5UrlsMenuDropdown