import { createElement, getAttributes, parseSVG, setAttributes, setElementRole, } from '../../utils'; const ADD_ICON_ID = 'btn-add-icon'; const REMOVE_ICON_ID = 'btn-remove-icon'; export function renderButtonsGroup(svg: SVGSVGElement, group: SVGGElement) { setAttributes(group, { display: 'none' }); const addBtns = group.querySelectorAll('[id^="btn-add-"]'); const removeBtns = group.querySelectorAll( '[id^="btn-remove-"]', ); defineButtonIcon(svg); addBtns.forEach(renderAddButton); removeBtns.forEach(renderRemoveButton); } const btnIconDefRole = 'btn-icon-defs'; function defineButtonIcon(svg: SVGSVGElement) { const defs = createElement('defs'); setElementRole(defs, btnIconDefRole); const addIconSymbol = parseSVG(` `); if (addIconSymbol) { addIconSymbol.setAttribute('id', ADD_ICON_ID); defs.appendChild(addIconSymbol); } const removeIconSymbol = parseSVG(` `); if (removeIconSymbol) { removeIconSymbol.setAttribute('id', REMOVE_ICON_ID); defs.appendChild(removeIconSymbol); } svg.prepend(defs); } function renderButtonIcon(node: SVGElement, name: string) { const { id, x = 0, y = 0, width = 0, height = 0, } = getAttributes(node, ['id', 'x', 'y', 'width', 'height']); const group = createElement('g', { id, class: 'btn-group', transform: `translate(${x}, ${y})`, }); const dataItems = node.getAttribute('data-items'); if (dataItems) { group.setAttribute('data-items', dataItems); } const r = Math.max(+width!, +height!) / 2; const bkg = createElement('circle', { cx: r, cy: r, r, fill: '#fff', stroke: 'transparent', }); group.appendChild(bkg); const icon = createElement('use', { href: `#${name}`, width, height, }); group.appendChild(icon); group.style.cursor = 'pointer'; node.replaceWith(group); } function renderAddButton(node: SVGElement) { renderButtonIcon(node, ADD_ICON_ID); } function renderRemoveButton(node: SVGElement) { renderButtonIcon(node, REMOVE_ICON_ID); }