initP5UrlsMenuDropdown.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. if (!global.p5UI__MenuStore) throw 'Missing global.p5UI__MenuStore'
  2. var DBG = DBG || 0
  3. var DBG1 = 1
  4. if (!global.p5UI__MenuStore) throw 'Missing global.p5UI__MenuStore'
  5. function makeRenderDropdownListItem(data) {
  6. return function renderDropdownListItem(idx) {
  7. var item = data.urls[idx]
  8. if (!item) return '';
  9. var star = (-1 !== data.idsBookmarks.indexOf(item.id))
  10. ? '<i class=\"bookmark-item-rem glyphicon glyphicon-star\" title=\"Usuń z ulubionych\" onClick=\"return p5BookmarksRemove(event, ' + item.id + ')\"></i>'
  11. : '<i class=\"bookmark-item-add glyphicon glyphicon-star-empty\" title=\"Dodaj do ulubionych\" onClick=\"return p5BookmarksAdd(event, ' + item.id + ')\"></i>'
  12. ;
  13. return '<li>' +
  14. '<a href=\"index.php?FUNCTION_INIT=URL_INIT&ZASOB_ID=' + item.id + '\" target=\"_blank\" title=\"' + item.raw_label + '\">' +
  15. star +
  16. ' ' + '<code>' + item.id + '</code>' +
  17. ' ' + item.label +
  18. '</a>' +
  19. '</li>'
  20. ;
  21. }
  22. }
  23. function renderP5UrlsMenuDropdown(data, idSubMenu) {
  24. var renderDropdownListItem = makeRenderDropdownListItem(data)
  25. var labels = data.urls.map(function (item, idx) {
  26. return {
  27. idx: idx,
  28. label: item.label,
  29. }
  30. });
  31. var groupeByLabel = labels.reduce(function (ret, item) {
  32. if (!ret.length) return [{ prefix: item.label, labels: [ item ] }];
  33. var last = ret.pop()
  34. var labelLast = last.prefix.replace('_', ' ').split(" ")
  35. var labelItem = item.label.replace('_', ' ').split(" ")
  36. if (labelLast[0] === labelItem[0]) {
  37. last.labels.push(item)
  38. last.prefix = labelLast[0] + " <em>(" + last.labels.length + ")</em>"
  39. ret.push(last)
  40. } else {
  41. ret.push(last)
  42. ret.push({ prefix: item.label, labels: [item] })
  43. return ret;
  44. }
  45. return ret;
  46. }, [])
  47. DBG && console.log('DBG:renderP5UrlsMenuDropdown groupeByLabel ', { groupeByLabel })
  48. var nodesGroupedByLabel = groupeByLabel.map(function (item) {
  49. if (item.labels.length === 1) {
  50. return renderDropdownListItem(item.labels[0].idx)
  51. } else {
  52. return '<li class="dropdown-submenu">' +
  53. '<a href=\"#\" onClick="return false">' +
  54. // '<b style="padding-left:18px">' + item.prefix + '</b>' +
  55. '<i class="glyphicon glyphicon-folder-open" style="opacity:0.5; font-size:90%; padding-right:3px"></i>' + " " +
  56. '<b>' + item.prefix + '</b>' +
  57. '</a>' + "\n" +
  58. '<ul class="dropdown-menu">' +
  59. item.labels.map(function (label) {
  60. return renderDropdownListItem(label.idx);
  61. }).join("\n") +
  62. '</ul>' +
  63. '</li>' + "\n"
  64. ;
  65. }
  66. })
  67. var jqDropdownMenu = jQuery('#' + idSubMenu)
  68. jqDropdownMenu.empty()
  69. jqDropdownMenu.append(nodesGroupedByLabel)
  70. }
  71. function initP5UrlsMenuDropdown(btnNode, idSubMenu) {
  72. if (!btnNode._initialized) {
  73. var jqDropdownTrigger = jQuery(btnNode)
  74. var rerenderDropdown = (function (global, idSubMenu) {
  75. return function (data) {
  76. DBG && console.log('DBG renderP5MainMenuDropdown', { data, idSubMenu });
  77. renderP5UrlsMenuDropdown(data, idSubMenu);
  78. }
  79. })(global, idSubMenu);
  80. global.p5UI__MenuStore.subscribe(rerenderDropdown)
  81. jqDropdownTrigger.attr('data-toggle', 'dropdown') // is required by bootstrap dorpdown.js evenf if is called via js
  82. global.p5UI__MenuStore.forceUpdate()
  83. jQuery(btnNode).dropdown()
  84. }
  85. btnNode._initialized = true
  86. return true;
  87. }
  88. global.initP5UrlsMenuDropdown = initP5UrlsMenuDropdown