$45 GRAYBYTE WORDPRESS FILE MANAGER $79

SERVER : premium201.web-hosting.com #1 SMP Wed Mar 26 12:08:09 UTC 2025
SERVER IP : 104.21.43.35 | ADMIN IP 216.73.216.157
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/home/bravrvjk/dantho.rw/wp-content/plugins/extendify/src/Agent/lib/

HOME
Current File : /home/bravrvjk/dantho.rw/wp-content/plugins/extendify/src/Agent/lib//svg-blocks-scanner.js
/** Recursively builds a unique duotone to the parent map from the block tree. */
export const getDynamicDuotoneMap = (blocks) => {
	const map = new Map();
	const seen = new Set();
	const duotonePrefix = 'var:preset|duotone|';
	const duotonePrefixLength = duotonePrefix.length;

	const scan = (blocks) => {
		if (!blocks || !blocks.length) return;

		for (const block of blocks) {
			if (block.name !== 'core/image') {
				scan(block.innerBlocks || []);
				continue;
			}

			const url = block.attributes?.url || '';
			if (
				!url ||
				!url.startsWith('data:image/svg+xml;') ||
				seen.has(block.clientId)
			) {
				scan(block.innerBlocks || []);
				continue;
			}

			// slice the duotone value to remove the prefix and get the slug
			const duotoneValue = block.attributes?.style?.color?.duotone;
			const duotone = duotoneValue?.startsWith(duotonePrefix)
				? duotoneValue.slice(duotonePrefixLength)
				: null;

			const parents = getImageParentsByBlockIdAndUrl(
				block.clientId,
				url,
			)?.filter(Boolean);

			if (duotone && parents.length && !map.has(duotone)) {
				parents.forEach((parent) => map.set(parent, duotone));
			}
			seen.add(block.clientId);

			scan(block.innerBlocks || []);
		}
	};

	scan(blocks);
	return Object.fromEntries(map);
};

const doc =
	document.querySelector('iframe[name="editor-canvas"]')?.contentDocument ||
	document;

const getImageParentsByBlockIdAndUrl = (id, url) => {
	if (!doc) return [];

	const blockElement = doc.querySelector(`[data-block="${id}"]`);
	if (blockElement && blockElement.classList) {
		const duotoneClass = [];
		for (const cls of blockElement.classList) {
			if (cls.startsWith('wp-duotone-')) duotoneClass.push(cls);
		}
		if (duotoneClass.length) return duotoneClass;
	}

	const images = doc.querySelectorAll(`img[src="${url}"]`);
	const elements = [];

	for (const image of images) {
		const parent = image.closest('figure[data-block]');
		if (parent && parent.classList) {
			for (const cls of parent.classList) {
				if (cls.startsWith('wp-duotone-')) elements.push(cls);
			}
		}
	}

	return elements;
};


Current_dir [ WRITEABLE ] Document_root [ NOT WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
6 Nov 2025 10.43 AM
bravrvjk / bravrvjk
0755
blocks.js
1.965 KB
23 Oct 2025 8.20 PM
bravrvjk / bravrvjk
0644
editor.js
0.729 KB
27 Aug 2025 5.47 PM
bravrvjk / bravrvjk
0644
page-tours.js
0.706 KB
25 Sep 2025 8.59 PM
bravrvjk / bravrvjk
0644
svg-blocks-scanner.js
2.044 KB
27 Aug 2025 5.47 PM
bravrvjk / bravrvjk
0644
svg-helpers.js
4.263 KB
27 Aug 2025 5.47 PM
bravrvjk / bravrvjk
0644
tour-helpers.js
0.45 KB
27 Aug 2025 5.47 PM
bravrvjk / bravrvjk
0644
util.js
0.168 KB
27 Aug 2025 5.47 PM
bravrvjk / bravrvjk
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025 CONTACT ME
Static GIF