|
@@ -0,0 +1,102 @@
|
|
|
|
|
+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
|