diff options
Diffstat (limited to 'src/MenuItem.mjs')
-rw-r--r-- | src/MenuItem.mjs | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/MenuItem.mjs b/src/MenuItem.mjs index 912080b..64e82d1 100644 --- a/src/MenuItem.mjs +++ b/src/MenuItem.mjs | |||
@@ -1,5 +1,6 @@ | |||
1 | import { shiftByWindow } from './utils.mjs' | 1 | import { shiftByWindow } from './utils.mjs' |
2 | import { GeoLink, removeLeaderLines } from './Link.mjs' | 2 | import { GeoLink, removeLeaderLines } from './Link.mjs' |
3 | import * as markers from './marker.mjs' | ||
3 | 4 | ||
4 | /** | 5 | /** |
5 | * @typedef {Object} RefLink | 6 | * @typedef {Object} RefLink |
@@ -59,7 +60,7 @@ export class Folder extends window.HTMLDivElement { | |||
59 | * @param {string} [options.innerHTML] - The HTML content of the folder | 60 | * @param {string} [options.innerHTML] - The HTML content of the folder |
60 | * @param {Item[]} options.items - The submenu items | 61 | * @param {Item[]} options.items - The submenu items |
61 | */ | 62 | */ |
62 | constructor ({ text, innerHTML, items }) { | 63 | constructor ({ text, innerHTML, items, style }) { |
63 | super() | 64 | super() |
64 | this.innerHTML = innerHTML ?? text | 65 | this.innerHTML = innerHTML ?? text |
65 | this.classList.add('folder', 'menu-item') | 66 | this.classList.add('folder', 'menu-item') |
@@ -70,7 +71,7 @@ export class Folder extends window.HTMLDivElement { | |||
70 | const submenu = document.createElement('div') | 71 | const submenu = document.createElement('div') |
71 | submenu.className = 'sub-menu' | 72 | submenu.className = 'sub-menu' |
72 | const offset = this.items.length > 1 ? '-20px' : '0px' | 73 | const offset = this.items.length > 1 ? '-20px' : '0px' |
73 | submenu.style.cssText = `position: absolute; left: 105%; top: ${offset};` | 74 | submenu.style.cssText = `${style ?? ''}position: absolute; left: 105%; top: ${offset};` |
74 | this.items.forEach(item => submenu.appendChild(item)) | 75 | this.items.forEach(item => submenu.appendChild(item)) |
75 | submenu.onmouseleave = () => submenu.remove() | 76 | submenu.onmouseleave = () => submenu.remove() |
76 | 77 | ||
@@ -435,10 +436,10 @@ export const addRefLink = (cm, refLinks) => | |||
435 | * @param {String} text | 436 | * @param {String} text |
436 | * @param {String} type | 437 | * @param {String} type |
437 | */ | 438 | */ |
438 | export const setGeoLinkTypeItem = ({ link, text, type }) => { | 439 | export const setGeoLinkTypeItem = ({ link, type, ...others }) => { |
439 | const params = new URLSearchParams(link.search) | 440 | const params = new URLSearchParams(link.search) |
440 | return new Item({ | 441 | return new Item({ |
441 | text, | 442 | ...others, |
442 | className: ['keep-menu'], | 443 | className: ['keep-menu'], |
443 | onclick: () => { | 444 | onclick: () => { |
444 | params.set('type', type) | 445 | params.set('type', type) |
@@ -458,8 +459,16 @@ export const setGeoLinkTypeItem = ({ link, text, type }) => { | |||
458 | */ | 459 | */ |
459 | export const setGeoLinkType = (link) => new Folder({ | 460 | export const setGeoLinkType = (link) => new Folder({ |
460 | text: 'Marker Type', | 461 | text: 'Marker Type', |
461 | items: [ | 462 | style: 'min-width: unset; display: grid; grid-template-columns: repeat(5, 1fr);', |
462 | setGeoLinkTypeItem({ link, text: 'Pin', type: 'pin' }), | 463 | items: Object.entries(markers) |
463 | setGeoLinkTypeItem({ link, text: 'Circle', type: 'circle' }), | 464 | .sort(([, a], [, b]) => (a.order ?? 9999) > (b.order ?? 9999)) |
464 | ], | 465 | .map(([key, value]) => { |
466 | return setGeoLinkTypeItem({ | ||
467 | link, | ||
468 | title: key.at(0).toUpperCase() + key.slice(1), | ||
469 | innerHTML: value.html, | ||
470 | type: key, | ||
471 | style: 'min-width: unset; width: fit-content; padding: 10px; margin: auto auto;', | ||
472 | }) | ||
473 | }), | ||
465 | }) | 474 | }) |