UNPKG

@r74tech/docusaurus-plugin-panzoom

Version:

A plugin to enable the panzoom component on SVG and other elements

56 lines (55 loc) 2.19 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const panzoom_1 = __importDefault(require("@panzoom/panzoom")); const config = require('@generated/docusaurus.config').default; const { themeConfig } = config; const { zoom } = themeConfig; const { selectors = ['div.mermaid[data-processed="true"]', 'div.docusaurus-mermaid-container', '.drawio'], wrap = true, timeout = 1000, excludeClass = 'panzoom-exclude', ...panZoomConfig } = zoom; /** * Main work method to zoom the set of elements. You can pass in global options to the pan zoom component * as well as control whether the items will be wrapped. * @param selectors */ const zoomElements = (selectors) => { const foundElements = []; selectors.forEach((selector) => { foundElements.push(...document.querySelectorAll(selector)); }); foundElements.forEach((element) => { const instance = (0, panzoom_1.default)(element, { excludeClass, ...panZoomConfig }); if (wrap) { const wrapper = document.createElement('div'); wrapper.setAttribute('style', "overflow: hidden"); element.parentElement?.insertBefore(wrapper, element); wrapper.appendChild(element); wrapper.addEventListener('wheel', (event) => { instance.zoomWithWheel(event); }); wrapper.addEventListener('dblclick', (event) => { instance.reset(); }); } if (!wrap) { element.addEventListener('wheel', (event) => { instance.zoomWithWheel(event); }); element.addEventListener('dblclick', (event) => { instance.reset(); }); } }); }; /** * Client module implementation. Wait a bit before trying this, some components like mermaid take a second to process / render */ const ZoomModule = { onRouteDidUpdate() { setTimeout(() => { zoomElements(selectors); }, timeout); }, }; exports.default = ZoomModule;