PageSourceSearch

https://agroytec.com/wp-content/plugins/lamason-sku-list-url-builder/assets/sku-url-builder.js?ver=1783093983

js agroytec.com collected 2026-10-07 04:11:19 UTC 5,288 bytes, 192 lines download raw bytes

1(function () {
2    'use strict';
3
4    const config = window.LamasonSkuListUrlBuilder || {};
5    const i18n = Object.assign({
6        generating: 'Generando URL...',
7        generated: 'URL generada.',
8        copied: 'URL copiada.',
9        copyError: 'No se pudo copiar la URL.',
10        openError: 'No se pudo abrir la URL.'
11    }, config.i18n || {});
12
13    function findRoot(element) {
14        return element.closest('[data-lamason-sku-url-builder]');
15    }
16
17    function setFeedback(root, message, type) {
18        const feedback = root.querySelector('[data-lamason-sku-url-feedback]');
19
20        if (!feedback) {
21            return;
22        }
23
24        feedback.textContent = message || '';
25        feedback.classList.remove('is-error', 'is-success');
26
27        if (type) {
28            feedback.classList.add('is-' + type);
29        }
30    }
31
32    function setLoading(root, isLoading) {
33        const submit = root.querySelector('[data-lamason-sku-url-submit]');
34
35        if (!submit) {
36            return;
37        }
38
39        submit.disabled = isLoading;
40        submit.setAttribute('aria-busy', isLoading ? 'true' : 'false');
41    }
42
43    function showResult(root, url) {
44        const result = root.querySelector('[data-lamason-sku-url-result]');
45        const output = root.querySelector('[data-lamason-sku-url-output]');
46
47        if (!result || !output) {
48            return;
49        }
50
51        output.value = url;
52        result.hidden = false;
53    }
54
55    function getResultUrl(root) {
56        const output = root.querySelector('[data-lamason-sku-url-output]');
57
58        return output ? output.value : '';
59    }
60
61    function copyWithFallback(input) {
62        input.focus();
63        input.select();
64        input.setSelectionRange(0, input.value.length);
65
66        return document.execCommand('copy');
67    }
68
69    function copyUrl(root) {
70        const output = root.querySelector('[data-lamason-sku-url-output]');
71
72        if (!output || !output.value) {
73            return;
74        }
75
76        if (navigator.clipboard && navigator.clipboard.writeText) {
77            navigator.clipboard.writeText(output.value)
78                .then(function () {
79                    setFeedback(root, i18n.copied, 'success');
80                })
81                .catch(function () {
82                    const copied = copyWithFallback(output);
83                    setFeedback(root, copied ? i18n.copied : i18n.copyError, copied ? 'success' : 'error');
84                });
85
86            return;
87        }
88
89        const copied = copyWithFallback(output);
90        setFeedback(root, copied ? i18n.copied : i18n.copyError, copied ? 'success' : 'error');
91    }
92
93    function openUrl(root) {
94        const url = getResultUrl(root);
95
96        if (!url) {
97            return;
98        }
99
100        const opened = window.open(url, '_blank', 'noopener');
101
102        if (!opened) {
103            setFeedback(root, i18n.openError, 'error');
104        }
105    }
106
107    function generateUrl(root) {
108        const input = root.querySelector('[data-lamason-sku-url-input]');
109        const result = root.querySelector('[data-lamason-sku-url-result]');
110        const skus = input ? input.value.trim() : '';
111
112        if (!skus) {
113            setFeedback(root, 'Ingresa al menos un SKU.', 'error');
114            return;
115        }
116
117        if (result) {
118            result.hidden = true;
119        }
120
121        setLoading(root, true);
122        setFeedback(root, i18n.generating, '');
123
124        const data = new FormData();
125        data.append('action', config.action);
126        data.append('nonce', config.nonce);
127        data.append('skus', skus);
128
129        fetch(config.ajaxUrl, {
130            method: 'POST',
131            credentials: 'same-origin',
132            body: data
133        })
134            .then(function (response) {
135                return response.json();
136            })
137            .then(function (payload) {
138                if (!payload || !payload.success) {
139                    throw new Error(payload && payload.data && payload.data.message ? payload.data.message : 'No se pudo generar la URL.');
140                }
141
142                showResult(root, payload.data.url);
143                setFeedback(root, i18n.generated, 'success');
144            })
145            .catch(function (error) {
146                setFeedback(root, error.message, 'error');
147            })
148            .finally(function () {
149                setLoading(root, false);
150            });
151    }
152
153    document.addEventListener('submit', function (event) {
154        const form = event.target.closest('[data-lamason-sku-url-form]');
155
156        if (!form) {
157            return;
158        }
159
160        event.preventDefault();
161
162        const root = findRoot(form);
163
164        if (root) {
165            generateUrl(root);
166        }
167    });
168
169    document.addEventListener('click', function (event) {
170        const copyButton = event.target.closest('[data-lamason-sku-url-copy]');
171        const openButton = event.target.closest('[data-lamason-sku-url-open]');
172        const button = copyButton || openButton;
173
174        if (!button) {
175            return;
176        }
177
178        const root = findRoot(button);
179
180        if (!root) {
181            return;
182        }
183
184        if (copyButton) {
185            copyUrl(root);
186        }
187
188        if (openButton) {
189            openUrl(root);
190        }
191    });
192})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.