| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- 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))
- ? '<i class=\"bookmark-item-rem glyphicon glyphicon-star\" title=\"Usuń z ulubionych\" onClick=\"return p5BookmarksRemove(event, ' + item.id + ')\"></i>'
- : '<i class=\"bookmark-item-add glyphicon glyphicon-star-empty\" title=\"Dodaj do ulubionych\" onClick=\"return p5BookmarksAdd(event, ' + item.id + ')\"></i>'
- ;
- return '<li>' +
- '<a href=\"index.php?FUNCTION_INIT=URL_INIT&ZASOB_ID=' + item.id + '\" target=\"_blank\" title=\"' + item.raw_label + '\">' +
- star +
- ' ' + '<code>' + item.id + '</code>' +
- ' ' + item.label +
- '</a>' +
- '</li>'
- ;
- }
- }
- 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] + " <em>(" + last.labels.length + ")</em>"
- 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 '<li class="dropdown-submenu">' +
- '<a href=\"#\" onClick="return false">' +
- // '<b style="padding-left:18px">' + item.prefix + '</b>' +
- '<i class="glyphicon glyphicon-folder-open" style="opacity:0.5; font-size:90%; padding-right:3px"></i>' + " " +
- '<b>' + item.prefix + '</b>' +
- '</a>' + "\n" +
- '<ul class="dropdown-menu">' +
- item.labels.map(function (label) {
- return renderDropdownListItem(label.idx);
- }).join("\n") +
- '</ul>' +
- '</li>' + "\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
|