aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/MenuItem.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'src/MenuItem.mjs')
-rw-r--r--src/MenuItem.mjs25
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 @@
1import { shiftByWindow } from './utils.mjs' 1import { shiftByWindow } from './utils.mjs'
2import { GeoLink, removeLeaderLines } from './Link.mjs' 2import { GeoLink, removeLeaderLines } from './Link.mjs'
3import * 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 */
438export const setGeoLinkTypeItem = ({ link, text, type }) => { 439export 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 */
459export const setGeoLinkType = (link) => new Folder({ 460export 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})