PATH:
home
/
lab2454c
/
financial.datmont.com
/
wp-content
/
plugins
/
elementor
/
assets
/
js
/*! elementor - v3.18.0 - 20-12-2023 */ "use strict"; (self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["text-path"],{ /***/ "../modules/shapes/assets/js/frontend/handlers/text-path.js": /*!******************************************************************!*\ !*** ../modules/shapes/assets/js/frontend/handlers/text-path.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _utils = __webpack_require__(/*! elementor-frontend/utils/utils */ "../assets/dev/js/frontend/utils/utils.js"); class TextPathHandler extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { pathContainer: '.e-text-path', svg: '.e-text-path > svg' } }; } getDefaultElements() { const { selectors } = this.getSettings(); const element = this.$element[0]; return { widgetWrapper: element, pathContainer: element.querySelector(selectors.pathContainer), svg: element.querySelector(selectors.svg), textPath: element.querySelector(selectors.textPath) }; } /** * Initialize the object. * * @return {void} */ onInit() { this.elements = this.getDefaultElements(); this.fetchSVG().then(() => { // Generate unique IDs using the wrapper's `data-id`. this.pathId = `e-path-${this.elements.widgetWrapper.dataset.id}`; this.textPathId = `e-text-path-${this.elements.widgetWrapper.dataset.id}`; if (!this.elements.svg) { return; } this.initTextPath(); }); } /** * Fetch & Inject the SVG markup. * * @return {Promise} success */ fetchSVG() { const { url } = this.elements.pathContainer.dataset; if (!url || !url.endsWith('.svg')) { return Promise.reject(url); } return fetch(url).then(res => res.text()).then(svg => { this.elements.pathContainer.innerHTML = svg; // Re-initialize the elements, so the SVG tag will be added. this.elements = this.getDefaultElements(); }); } /** * Gets a text offset (relative to the starting point) as a string or int, and set it as percents to the * `startOffset` attribute of the `<textPath>` element. * * @param {string|number} offset The text start offset. * * @return {void} */ setOffset(offset) { if (!this.elements.textPath) { return; } if (this.isRTL()) { offset = 100 - parseInt(offset); } this.elements.textPath.setAttribute('startOffset', offset + '%'); } /** * Handle element settings changes. * * @param {Object} setting The settings object from the editor. * * @return {void} */ onElementChange(setting) { const { start_point: startPoint, text } = this.getElementSettings(); switch (setting) { case 'start_point': this.setOffset(startPoint.size); break; case 'text': this.setText(text); break; case 'text_path_direction': this.setOffset(startPoint.size); this.setText(text); break; default: break; } } /** * Attach a unique ID to the `path` element in the SVG, based on the container's ID. * This function selects the first `path` with a `data-path-anchor` attribute, or defaults to the first `path` element. * * @return {void} */ attachIdToPath() { // Prioritize the custom `data` attribute over the `path` element, and fallback to the first `path`. const path = this.elements.svg.querySelector('[data-path-anchor]') || this.elements.svg.querySelector('path'); path.id = this.pathId; } /** * Initialize & build the SVG markup of the widget using the settings from the panel. * * @return {void} */ initTextPath() { const { start_point: startPoint } = this.getElementSettings(); const text = this.elements.pathContainer.dataset.text; this.attachIdToPath(); // Generate the `textPath` element with its settings. this.elements.svg.innerHTML += ` <text> <textPath id="${this.textPathId}" href="#${this.pathId}"></textPath> </text> `; // Regenerate the elements object to have access to `this.elements.textPath`. this.elements.textPath = this.elements.svg.querySelector(`#${this.textPathId}`); this.setOffset(startPoint.size); this.setText(text); } /** * Sets the text on the SVG path, including the link (if set) and its properties. * * @param {string} newText The new text to put in the text path. * * @return {void} */ setText(newText) { const { is_external: isExternal, nofollow } = this.getElementSettings().link; const { linkUrl: url } = this.elements.pathContainer.dataset; const target = isExternal ? '_blank' : '', rel = nofollow ? 'nofollow' : ''; // Add link attributes. if (url) { newText = `<a href="${(0, _utils.escapeHTML)(url)}" rel="${rel}" target="${target}">${(0, _utils.escapeHTML)(newText)}</a>`; } // Set the text. this.elements.textPath.innerHTML = newText; // Remove the cloned element if exists. const existingClone = this.elements.svg.querySelector(`#${this.textPathId}-clone`); if (existingClone) { existingClone.remove(); } // Reverse the text if needed. if (this.shouldReverseText()) { // Keep an invisible selectable copy of original element for better a11y. const clone = this.elements.textPath.cloneNode(); clone.id += '-clone'; clone.classList.add('elementor-hidden'); clone.textContent = newText; this.elements.textPath.parentNode.appendChild(clone); this.reverseToRTL(); } } /** * Determine if the text direction of the widget should be RTL or not, based on the site direction and the widget's settings. * * @return {boolean} is RTL */ isRTL() { const { text_path_direction: direction } = this.getElementSettings(); let isRTL = elementorFrontend.config.is_rtl; if (direction) { isRTL = 'rtl' === direction; } return isRTL; } /** * Determine if it should RTL the text (reversing it, etc.). * * @return {boolean} should RTL */ shouldReverseText() { if (!this.isRTL()) { return false; } const isFirefox = elementorFrontend.utils.environment.firefox; if (isFirefox) { return false; } const isChromium = elementorFrontend.utils.environment.blink; if (isChromium) { return !this.isFixedChromiumVersion(); } return true; } /** * Chromium >= 96 fixed the issue with RTL text in SVG. * * @see https://chromium-review.googlesource.com/c/chromium/src/+/3159942 * @see https://chromium.googlesource.com/chromium/src/+/4f1bc7d6ff8bfbf6348613bdb970fcdc2a706b5a/chrome/VERSION */ isFixedChromiumVersion() { const FIXED_CHROMIUM_VERSION = 96; const currentChromiumVersion = parseInt(navigator.userAgent.match(/(?:Chrom(?:e|ium)|Edg)\/([0-9]+)\./)[1]); return currentChromiumVersion >= FIXED_CHROMIUM_VERSION; } /** * Reverse the text path to support RTL. * * @return {void} */ reverseToRTL() { // Make sure to use the inner `a` tag if exists. let parentElement = this.elements.textPath; parentElement = parentElement.querySelector('a') || parentElement; // Catch all RTL chars and reverse their order. const pattern = /([\u0591-\u07FF\u200F\u202B\u202E\uFB1D-\uFDFD\uFE70-\uFEFC\s$&+,:;=?@#|'<>.^*()%!-]+)/ig; // Reverse the text. parentElement.textContent = parentElement.textContent.replace(pattern, word => { return word.split('').reverse().join(''); }); // Add a11y attributes. parentElement.setAttribute('aria-hidden', true); } } exports["default"] = TextPathHandler; /***/ }) }]); //# sourceMappingURL=text-path.bfa8a1f6fcf6c803aaa9.bundle.js.map
[+]
..
[-] editor-environment-v2.js
[edit]
[-] frontend.min.js
[edit]
[-] nested-accordion.js
[edit]
[-] be69c0d71c69e96d6a96.bundle.min.js
[edit]
[-] editor.js
[edit]
[-] alert.cbc2a0fee74ee3ed0419.bundle.min.js
[edit]
[-] accordion.c16b88b2e8a0c50189bc.bundle.js
[edit]
[-] alert.c3c6a3fdf4745bd26b7f.bundle.js
[edit]
[-] admin-feedback.min.js
[edit]
[-] c1dd514ac8d43fbb6919.bundle.js
[edit]
[-] fd6a00ae23a1bc2c6190.bundle.js
[edit]
[-] nested-tabs.min.js
[edit]
[-] frontend.js
[edit]
[-] editor-modules.min.js.LICENSE.txt
[edit]
[-] lightbox.1b6e05e0607040eb8929.bundle.min.js
[edit]
[-] container.dfea7c883442d5ae61c8.bundle.js
[edit]
[-] container-converter.min.js
[edit]
[-] kit-elements-defaults-editor.js
[edit]
[-] notes.min.js
[edit]
[-] video.bb330f394f46f2666bc1.bundle.js
[edit]
[-] 081ef1d595d61b745bca.bundle.min.js.LICENSE.txt
[edit]
[-] progress.ca55d33bb06cee4e6f02.bundle.min.js
[edit]
[-] admin-top-bar.min.js
[edit]
[-] editor-loader-v1.min.js
[edit]
[-] tabs.c2af5be7f9cb3cdcf3d5.bundle.min.js
[edit]
[-] import-export-admin.min.js
[edit]
[-] 08fb6203eac56d9441a9.bundle.min.js
[edit]
[-] admin.js
[edit]
[-] 4fdaa70e951ad90db2f2.bundle.min.js
[edit]
[-] admin-modules.js
[edit]
[-] styleguide-app-initiator.js
[edit]
[-] admin-top-bar.js
[edit]
[-] editor-modules.min.js
[edit]
[-] gutenberg.min.js
[edit]
[-] app.min.js
[edit]
[-] element-manager-admin.min.js
[edit]
[-] nested-tabs.js
[edit]
[-] app.js
[edit]
[-] editor-loader-v1.js
[edit]
[-] kit-library.bc62cb5d05e39b3a233b.bundle.min.js
[edit]
[-] editor.min.js.LICENSE.txt
[edit]
[-] preloaded-modules.min.js
[edit]
[+]
packages
[-] preloaded-modules.js
[edit]
[-] nested-elements.min.js
[edit]
[-] kit-elements-defaults-editor.min.js
[edit]
[-] gutenberg.js
[edit]
[-] ai-admin.min.js.LICENSE.txt
[edit]
[-] lightbox.755daee67033f198467b.bundle.js
[edit]
[-] dev-tools.js
[edit]
[-] editor-document.js
[edit]
[-] text-path.bfa8a1f6fcf6c803aaa9.bundle.js
[edit]
[-] ai-layout.min.js
[edit]
[-] admin-modules.min.js.LICENSE.txt
[edit]
[-] app-packages.js
[edit]
[-] common.min.js
[edit]
[-] styleguide-app-initiator.min.js.LICENSE.txt
[edit]
[-] web-cli.min.js
[edit]
[-] common-modules.min.js
[edit]
[-] common-modules.js
[edit]
[-] frontend-modules.min.js
[edit]
[-] element-manager-admin.js
[edit]
[-] common.js
[edit]
[-] new-template.min.js
[edit]
[-] app-loader.js
[edit]
[-] admin.min.js.LICENSE.txt
[edit]
[-] editor.min.js
[edit]
[-] elementor-admin-bar.js
[edit]
[-] editor-loader-v2.js
[edit]
[-] kit-elements-defaults-editor.min.js.LICENSE.txt
[edit]
[-] onboarding.f2f8af9f7327abc100f1.bundle.js
[edit]
[-] elementor-admin-bar.min.js
[edit]
[-] text-editor.2f2f7e0ea1e16387a004.bundle.js
[edit]
[-] d3bdd130eb38d3b07f85.bundle.js
[edit]
[-] nested-elements.js
[edit]
[-] toggle.31881477c45ff5cf9d4d.bundle.min.js
[edit]
[-] frontend-modules.js
[edit]
[-] webpack.runtime.min.js
[edit]
[-] styleguide-app-initiator.min.js
[edit]
[-] video.fea4f8dfdf17262f23e8.bundle.min.js
[edit]
[-] ab59172d5784d868ebd9.bundle.min.js
[edit]
[-] text-path.b50b3e74488a4e302613.bundle.min.js
[edit]
[-] image-carousel.9399f19d95d7300cbc2e.bundle.js
[edit]
[-] app-loader.min.js
[edit]
[-] e8a7573e654d921656ab.bundle.js
[edit]
[-] web-cli.js
[edit]
[-] styleguide.js
[edit]
[-] webpack.runtime.js
[edit]
[-] tabs.520bc2ed4560c561029e.bundle.js
[edit]
[-] editor-modules.js
[edit]
[-] announcements-app.min.js
[edit]
[-] a730ee9caa710006b307.bundle.js
[edit]
[-] 040b7af5d80abfa2be44.bundle.js
[edit]
[-] counter.02cef29c589e742d4c8c.bundle.min.js
[edit]
[-] app-packages.min.js.LICENSE.txt
[edit]
[-] styleguide.min.js
[edit]
[-] new-template.js
[edit]
[-] app.min.js.LICENSE.txt
[edit]
[-] responsive-bar.min.js
[edit]
[-] 46e544e5863270fc32f2.bundle.js
[edit]
[-] admin-feedback.js
[edit]
[-] accordion.8799675460c73eb48972.bundle.min.js
[edit]
[-] editor-document.min.js
[edit]
[-] f9b37afff6a65f7b9541.bundle.js
[edit]
[-] beta-tester.js
[edit]
[-] common.min.js.LICENSE.txt
[edit]
[-] wp-audio.b8efdc046bc9df72a075.bundle.js
[edit]
[-] nested-accordion.min.js.LICENSE.txt
[edit]
[-] ai.min.js.LICENSE.txt
[edit]
[-] announcements-app.js
[edit]
[-] toggle.d79746a764407a0828ee.bundle.js
[edit]
[-] web-cli.min.js.LICENSE.txt
[edit]
[-] 081ef1d595d61b745bca.bundle.min.js
[edit]
[-] ai-layout.js
[edit]
[-] app-packages.min.js
[edit]
[-] text-editor.2c35aafbe5bf0e127950.bundle.min.js
[edit]
[-] admin.min.js
[edit]
[-] editor-environment-v2.min.js
[edit]
[-] nested-accordion.min.js
[edit]
[-] onboarding.94a8ac732fd1698fee56.bundle.min.js
[edit]
[-] kit-library.411b75eeafae7457107e.bundle.js
[edit]
[-] 79d91b3af4aa6bc1c967.bundle.min.js
[edit]
[-] admin-modules.min.js
[edit]
[-] ai-layout.min.js.LICENSE.txt
[edit]
[-] 906cf49fecec599e1a67.bundle.min.js
[edit]
[-] container-converter.js
[edit]
[-] responsive-bar.js
[edit]
[-] ai.min.js
[edit]
[-] counter.3f74a246dff765f39aea.bundle.js
[edit]
[-] editor-loader-v2.min.js
[edit]
[-] ai-admin.min.js
[edit]
[-] a493d490206d9432cc8b.bundle.js
[edit]
[-] 1bef795bdeaafc779b19.bundle.min.js
[edit]
[-] element-manager-admin.min.js.LICENSE.txt
[edit]
[-] ai-admin.js
[edit]
[-] image-carousel.4455c6362492d9067512.bundle.min.js
[edit]
[-] progress.553d43a5b3903206bedc.bundle.js
[edit]
[-] container.284c9bf9b36eadd05080.bundle.min.js
[edit]
[-] ai.js
[edit]
[-] nested-tabs.min.js.LICENSE.txt
[edit]
[-] import-export-admin.js
[edit]
[-] notes.js
[edit]
[-] wp-audio.75f0ced143febb8cd31a.bundle.min.js
[edit]
[-] dev-tools.min.js
[edit]
[-] beta-tester.min.js
[edit]
[-] announcements-app.min.js.LICENSE.txt
[edit]