initP5MainMenuDropdown.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. if (!global.p5UI__MenuStore) throw 'Missing global.p5UI__MenuStore'
  2. var DBG = DBG || 0
  3. function renderLabel(item) {
  4. return (item.short_label !== item.desc)
  5. ? item.short_label + ' <em>' + item.desc + '</em>'
  6. : item.short_label
  7. ;
  8. }
  9. function renderTitle(item) {
  10. return (item.label !== item.desc)
  11. ? item.label + ' (' + item.desc + ')'
  12. : item.label
  13. ;
  14. }
  15. function renderStar(id, idsBookmarks) {
  16. return (-1 !== idsBookmarks.indexOf(id))
  17. ? '<i class=\"bookmark-item-rem glyphicon glyphicon-star\" title=\"Usuń z ulubionych\" onClick=\"return p5BookmarksRemove(event, ' + id + ')\"></i>'
  18. : '<i class=\"bookmark-item-add glyphicon glyphicon-star-empty\" title=\"Dodaj do ulubionych\" onClick=\"return p5BookmarksAdd(event, ' + id + ')\"></i>'
  19. ;
  20. }
  21. function renderP5MainMenuDropdown(data, idSubMenu) {
  22. DBG && console.log('DBG:renderP5MainMenuDropdown data.objects', data.objects)
  23. var grouped = data.objects.reduce(function (ret, item, idx) {
  24. ret.mapNsToIdx[ item.namespace ] = idx
  25. var nsParts = item.namespace.split('/')
  26. var baseNs = nsParts.slice(0, 2).join('/')
  27. DBG && console.log('DBG:renderP5MainMenuDropdown >> reduce loop ', { nsParts, baseNs });
  28. if (!ret.menuTreeNs[baseNs]) ret.menuTreeNs[baseNs] = []
  29. ret.menuTreeNs[baseNs].push(item.namespace)
  30. return ret;
  31. }, { mapNsToIdx: {}, menuTreeNs: {} })
  32. DBG && console.log('DBG:renderP5MainMenuDropdown grouped', grouped)
  33. var jqDropdownMenu = jQuery('#' + idSubMenu)
  34. jqDropdownMenu.empty()
  35. liNodes = Object.keys(grouped.menuTreeNs).map(function (baseNs) {
  36. var item = (baseNs in grouped.mapNsToIdx)
  37. ? data.objects[ grouped.mapNsToIdx[baseNs] ]
  38. : data.objects[ grouped.mapNsToIdx[ grouped.menuTreeNs[baseNs][0] ] ]
  39. ;
  40. DBG && console.log('DBG:renderP5MainMenuDropdown >> render loop', { baseNs, isInMap: (baseNs in grouped.mapNsToIdx), item, idx: [ grouped.mapNsToIdx[baseNs], grouped.menuTreeNs[baseNs][0] ] });
  41. return (grouped.menuTreeNs[baseNs].length > 1)
  42. ? '<li class="dropdown-submenu">' +
  43. '<a href=\"index.php?_route=ViewTableAjax&namespace=' + item.namespace + '\" title="' + renderTitle(item) + '">' +
  44. renderStar(item.id, data.idsBookmarks) +
  45. ' ' + renderLabel(item) +
  46. '</a>' + "\n" +
  47. '<ul class="dropdown-menu">' +
  48. grouped.menuTreeNs[baseNs].map(function (subItemNs) {
  49. var subItem = data.objects[ grouped.mapNsToIdx[subItemNs] ]
  50. return '<li>' +
  51. '<a href=\"index.php?_route=ViewTableAjax&namespace=' + subItem.namespace + '\" title="' + renderTitle(subItem) + '">' +
  52. renderStar(subItem.id, data.idsBookmarks) +
  53. ' ' + renderLabel(subItem) +
  54. '</a>' +
  55. '</li>'
  56. ;
  57. }).join("\n") +
  58. '</ul>' +
  59. '</li>' + "\n"
  60. : '<li>' +
  61. '<a href=\"index.php?_route=ViewTableAjax&namespace=' + item.namespace + '\" title="' + renderTitle(item) + '">' +
  62. renderStar(item.id, data.idsBookmarks) +
  63. ' ' + renderLabel(item) +
  64. '</a>' +
  65. '</li>' + "\n"
  66. ;
  67. })
  68. jqDropdownMenu.append(liNodes);
  69. }
  70. function initP5MainMenuDropdown( btnNode, idSubMenu ) {
  71. DBG && console.log('DBG:initP5MainMenuDropdown({idSubMenu: '+idSubMenu+'})');
  72. if (!btnNode._initialized) {
  73. var jqDropdownTrigger = jQuery(btnNode)
  74. var jqDropdownMenu = jQuery('#' + idSubMenu)
  75. var jqDropdownParent = jqDropdownMenu.parent()
  76. global.p5UI__MenuStore.subscribe(
  77. (function (global, idSubMenu) {
  78. return function (data) {
  79. renderP5MainMenuDropdown(data, idSubMenu);
  80. }
  81. })(global, idSubMenu)
  82. )
  83. jqDropdownTrigger.attr('data-toggle', 'dropdown') // is required by bootstrap dorpdown.js evenf if is called via js
  84. global.p5UI__MenuStore.forceUpdate()
  85. jQuery(btnNode).dropdown()
  86. }
  87. // btnNode._initialized = true // TODO: DBG TEST
  88. return true;
  89. }
  90. global.initP5MainMenuDropdown = initP5MainMenuDropdown