您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
shortcuts to create DDS library component HTML
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/454586/1119772/Online%20IDE%20DDS%20Create.js
const create = { actionMenu: (options = {}) => { const classAm = options.class || ``; const trigger = options.trigger || {}; if (!options.trigger.class) { options.trigger.class = `dds__button--secondary`; } if (!options.trigger.text) { options.trigger.text = `Actions`; } const items = options.items || []; const id = options.id || `actionMenu${pen.utils.random()}`; const useChevron = options.useChevron || false; const noo = {}; noo.actionMenu = pen.utils.createElement(`div`, { id: id, class: `dds__action-menu ${classAm}`, 'data-trigger': `#${id}--trigger`, 'data-dds': `action-menu`, }); noo.trigger = pen.utils.createElement(`button`, { id: noo.actionMenu.getAttribute(`data-trigger`).replace(`#`, ''), type: `button`, class: `dds__button ${trigger.class}`, }); noo.trigger.appendChild(pen.utils.createElement(`span`, { class: `ddsc__action-menu__trigger-label`, text: trigger.text })); if (useChevron) { const handleActionClick = (e) => { e.target.querySelector(`.dds__icon`).classList.toggle(`action-rotated`); } noo.chevron = pen.utils.createElement(`i`, { class: `dds__icon dds__icon--chevron-down action-chevron`, }); noo.trigger.appendChild(noo.chevron); create.listener(`#${id}`, `ddsActionMenuOpenEvent`, handleActionClick); create.listener(`#${id}`, `ddsActionMenuCloseEvent`, handleActionClick); } noo.container = pen.utils.createElement(`div`, { class: `dds__action-menu__container`, tabindex: `-1`, role: `presentation`, 'aria-hidden': `true`, }); noo.menu = pen.utils.createElement(`div`, { class: `dds__action-menu__menu`, role: `menu`, tabindex: `-1`, }); noo.menuLi = pen.utils.createElement(`li`, { role: `presentation`, }); noo.group = pen.utils.createElement(`span`, { id: `${id}--group` }); noo.groupUl = pen.utils.createElement(`ul`, { id: `${id}--groupUl`, role: `group`, 'aria-labelledby': noo.group.getAttribute(`id`) }); noo.actionMenu.appendChild(noo.trigger); noo.actionMenu.appendChild(noo.container); noo.container.appendChild(noo.menu); noo.menu.appendChild(noo.menuLi); noo.menuLi.appendChild(noo.group); noo.group.appendChild(noo.groupUl); // Adding a method to the element doesn't seem to be work // const observerDefs = [ // { // selector: `#${id}`, // callback: (elem) => { // elem.addItem = (itemOptions) => { // document.getElementById(`${id}--groupUl`).appendChild(create.actionMenuItem(itemOptions)); // }; // } // } // ]; // createObserver(observerDefs); return noo.actionMenu; }, actionMenuItem: (options = {}) => { const noo = {}; const label = options.text || `Item Text`; const callback = options.callback || function (e) { alert(`item click`); }; const asOption = options[`data-value`] != null || false; const dataValue = options[`data-value`] || undefined; const id = `${label.replace(/[^0-9a-zA-Z]+/, ``)}_${pen.utils.random()}`; noo.item = pen.utils.createElement(`li`, { class: asOption ? `dds__action-menu__option` : `dds__action-menu__item`, role: `none`, }); noo.itemButton = pen.utils.createElement(`button`, { id: id, type: `button`, role: asOption ? `menuitemcheckbox` : `menuitem`, tabindex: `-1`, 'aria-disabled': `false`, 'aria-checked': `false`, 'data-value': dataValue, }); noo.itemSvg = pen.utils.createElement(`svg`, { class: `dds__action-menu__icon`, 'aria-hidden': `true`, }); noo.itemSvgUse = pen.utils.createElement(`use`, { 'xlink:href': `#dds__icon--copy-alt`, }); noo.itemText = pen.utils.createElement(`span`, { text: label, }); noo.item.appendChild(noo.itemButton); noo.itemButton.appendChild(noo.itemSvg); noo.itemButton.appendChild(noo.itemText); noo.itemSvg.appendChild(noo.itemSvgUse); create.listener(`#${id}`, `click`, callback); return noo.item; }, button: (options = {}) => { const bClass = options.class || ``; const bText = options.text || `Button`; const iconIsString = options.icon && typeof options.icon === `string`; const iconObjectName = !iconIsString && options.icon ? options.icon.name : undefined; const iconObjectClass = !iconIsString && options.icon.class ? options.icon.class : ``; const bIcon = { name: iconIsString ? options.icon : iconObjectName, class: iconObjectClass }; const noo = {}; noo.button = pen.utils.createElement(`button`, { class: `dds__button ${bClass}`, type: `button`, text: bText, }); if (bIcon.name) { noo.icon = pen.utils.createElement(`i`, { class: `dds__icon dds__icon--${bIcon.name} ${bIcon.class}`, 'aria-hidden': `true`, }); if (options.icon.class.indexOf(`--end`) > -1) { noo.button.appendChild(noo.icon); } else { noo.button.prepend(noo.icon); } } return noo.button; }, listener: function (selector, event, handler) { let rootElement = document.querySelector('body'); //since the root element is set to be body for our current dealings rootElement.addEventListener(event, function (evt) { var targetElement = evt.target; while (targetElement != null) { if (targetElement.matches(selector)) { handler(evt); return; } targetElement = targetElement.parentElement; } }, true ); }, }