PluginProbe
Extendify / 3.2.3
Extendify v3.2.3
3.2.3 3.2.2 3.2.1 3.2.0 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.6 3.0.5 3.0.4 trunk 0.1.0 0.10.0 0.10.1 0.10.2 0.11.0 0.11.1 0.2.0 0.3.0 0.3.1 0.4.0 All 129 releases
extendify / src / Assist / lib / domains.js

domains.js in Extendify 3.2.3, at src/Assist/lib/domains.js

107 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { safeParseJson } from '@shared/lib/parsing';
2 import { siteHost } from '@shared/lib/site-host';
3 import apiFetch from '@wordpress/api-fetch';
4 import { decodeEntities } from '@wordpress/html-entities';
5
6 const { hostname } = window.location;
7 const { devbuild, siteTitle, wpLanguage } = window.extSharedData;
8 const {
9 showBanner,
10 showTask,
11 searchUrl,
12 showSecondaryBanner,
13 showSecondaryTask,
14 stagingSites,
15 } = window.extAssistData?.domainsSuggestionSettings || {};
16
17 const parsedDomains = safeParseJson(window.extSharedData.resourceData)?.domains;
18 export const domains = Array.isArray(parsedDomains) ? parsedDomains : [];
19
20 const hasDomains = domains.length > 0;
21
22 const domainByLanguage = (lang, urlList) => {
23 try {
24 const urls = JSON.parse(decodeEntities(urlList));
25 return urls?.[lang] ?? urls?.default ?? false;
26 } catch (_e) {
27 return decodeEntities(urlList) || false;
28 }
29 };
30
31 export const domainSearchUrl =
32 devbuild && !searchUrl
33 ? 'https://extendify.com?s={DOMAIN}'
34 : domainByLanguage(wpLanguage, searchUrl);
35
36 const isStagingDomain = (stagingSites || []).some((l) =>
37 hostname.toLowerCase().includes(l),
38 );
39
40 // Show if it's not a staging domain, has a title, and is enabled
41 export const showDomainBanner = (() => {
42 if (devbuild) return true;
43 if (!showBanner) return false;
44 if (!hasDomains) return false;
45 if (!siteTitle) return false;
46 return isStagingDomain;
47 })();
48
49 // Show if it's not a staging domain, has a title, and is enabled
50 export const showDomainTask = (() => {
51 if (devbuild) return true;
52 if (!showTask) return false;
53 if (!hasDomains) return false;
54 if (!siteTitle) return false;
55 return isStagingDomain;
56 })();
57
58 // Show if it's a staging domain, has a title, and is enabled
59 export const showSecondaryDomainBanner = (() => {
60 if (devbuild) return true;
61 if (!showSecondaryBanner) return false;
62 if (!hasDomains) return false;
63 if (!siteTitle) return false;
64 return !isStagingDomain;
65 })();
66
67 // Show if it's a staging domain, has a title, and is enabled
68 export const showSecondaryDomainTask = (() => {
69 if (devbuild) return true;
70 if (!showSecondaryTask) return false;
71 if (!hasDomains) return false;
72 if (!siteTitle) return false;
73 return !isStagingDomain;
74 })();
75
76 /**
77 * The domainSearchUrl may contain both {SLD} and {TLD} placeholders
78 * e.g., https://example.com?sld={SLD}&tld={TLD}
79 * If not present, fallback to {DOMAIN} format
80 */
81 export const createDomainUrlLink = (
82 domainSearchUrl,
83 domain,
84 host = siteHost(),
85 ) => {
86 const url = domainSearchUrl.replaceAll('{SITEURL}', host);
87 if (url.includes('{SLD}') && url.includes('{TLD}')) {
88 const parts = domain.toLowerCase().split('.');
89 const sld = parts[0];
90 const tld = parts.slice(1).join('.');
91 return url.replace('{SLD}', sld).replace('{TLD}', `.${tld}`);
92 }
93 return url.replace('{DOMAIN}', domain.toLowerCase());
94 };
95
96 export const deleteDomainCache = () =>
97 apiFetch({
98 path: 'extendify/v1/assist/delete-domains-recommendations',
99 method: 'POST',
100 });
101
102 export const buildDomainViewItems = (domains) =>
103 domains.map((domain, i) => ({
104 domain,
105 type: i === 0 ? 'primary' : 'secondary',
106 }));
107