@elementor/editor-audits 4.4.0-1114 → 4.4.0-1116
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +327 -781
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +301 -755
- package/dist/index.mjs.map +1 -1
- package/package.json +15 -15
- package/src/components/audit-panel.tsx +3 -1
- package/src/components/pages/overview-page.tsx +24 -29
- package/src/components/report-shell.tsx +10 -91
- package/src/components/severity-summary-cards.tsx +52 -0
- package/src/components/violation-row.tsx +3 -3
- package/src/utils/audit-status-summary.ts +0 -57
- package/src/components/audit-statuses-section.tsx +0 -65
- package/src/components/count-summary-circle.tsx +0 -66
- package/src/components/pages/all-audits-page.tsx +0 -84
- package/src/components/pages/issues-page.tsx +0 -65
- package/src/components/score-bar.tsx +0 -56
- package/src/components/score-circle.tsx +0 -60
- package/src/components/severity-filter-chips.tsx +0 -57
- package/src/utils/score-thresholds.ts +0 -23
package/dist/index.mjs
CHANGED
|
@@ -7,17 +7,18 @@ import { utilitiesMenu } from "@elementor/editor-app-bar";
|
|
|
7
7
|
|
|
8
8
|
// src/hooks/use-audit-toggle-props.ts
|
|
9
9
|
import { ShieldCheckIcon as ShieldCheckIcon2 } from "@elementor/icons";
|
|
10
|
-
import { __ as
|
|
10
|
+
import { __ as __17 } from "@wordpress/i18n";
|
|
11
11
|
|
|
12
12
|
// src/editor-panel.tsx
|
|
13
13
|
import { createFloatingPanel } from "@elementor/editor-floating-panels";
|
|
14
14
|
|
|
15
15
|
// src/components/audit-panel.tsx
|
|
16
|
-
import * as
|
|
16
|
+
import * as React19 from "react";
|
|
17
17
|
import { getHostDocumentId as getHostDocumentId3 } from "@elementor/editor-elements";
|
|
18
18
|
import { FloatingPanelBody, FloatingPanelFooter, FloatingPanelHeader } from "@elementor/editor-floating-panels";
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
19
|
+
import { ReloadIcon } from "@elementor/icons";
|
|
20
|
+
import { Box as Box15, Button as Button5, Typography as Typography12 } from "@elementor/ui";
|
|
21
|
+
import { __ as __16 } from "@wordpress/i18n";
|
|
21
22
|
|
|
22
23
|
// src/constants.ts
|
|
23
24
|
import { __ } from "@wordpress/i18n";
|
|
@@ -137,9 +138,6 @@ function getRegisteredAudits() {
|
|
|
137
138
|
return Array.from(registry.values());
|
|
138
139
|
}
|
|
139
140
|
|
|
140
|
-
// src/utils/audit-status-summary.ts
|
|
141
|
-
import { __ as __2 } from "@wordpress/i18n";
|
|
142
|
-
|
|
143
141
|
// src/utils/is-scored-audit.ts
|
|
144
142
|
function isScoredAudit(audit26) {
|
|
145
143
|
return audit26.weight > 0;
|
|
@@ -194,52 +192,6 @@ function partitionAuditResults(report, options = {}) {
|
|
|
194
192
|
totalViolations
|
|
195
193
|
};
|
|
196
194
|
}
|
|
197
|
-
function auditStatusDisplayCounts(report) {
|
|
198
|
-
let pass = 0;
|
|
199
|
-
let skipped = 0;
|
|
200
|
-
let totalViolations = 0;
|
|
201
|
-
for (const { audit: audit26, result } of report.auditResults) {
|
|
202
|
-
if (!isScoredAudit(audit26)) {
|
|
203
|
-
continue;
|
|
204
|
-
}
|
|
205
|
-
switch (result.status) {
|
|
206
|
-
case "fail":
|
|
207
|
-
totalViolations += result.violations.length;
|
|
208
|
-
break;
|
|
209
|
-
case "pass":
|
|
210
|
-
pass++;
|
|
211
|
-
break;
|
|
212
|
-
case "skipped":
|
|
213
|
-
skipped++;
|
|
214
|
-
break;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
return {
|
|
218
|
-
fail: totalViolations,
|
|
219
|
-
pass,
|
|
220
|
-
skipped
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
function auditStatusColor(status) {
|
|
224
|
-
switch (status) {
|
|
225
|
-
case "fail":
|
|
226
|
-
return "error";
|
|
227
|
-
case "pass":
|
|
228
|
-
return "success";
|
|
229
|
-
case "skipped":
|
|
230
|
-
return "default";
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
function auditStatusLabel(status) {
|
|
234
|
-
switch (status) {
|
|
235
|
-
case "fail":
|
|
236
|
-
return __2("Failed audits", "elementor");
|
|
237
|
-
case "pass":
|
|
238
|
-
return __2("Passed audits", "elementor");
|
|
239
|
-
case "skipped":
|
|
240
|
-
return __2("Skipped audits", "elementor");
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
195
|
function getPopulatedCategories(categoryTotals, categories) {
|
|
244
196
|
return categories.filter((category) => categoryTotals[category].total > 0);
|
|
245
197
|
}
|
|
@@ -713,9 +665,9 @@ import {
|
|
|
713
665
|
Tooltip,
|
|
714
666
|
Typography
|
|
715
667
|
} from "@elementor/ui";
|
|
716
|
-
import { __ as
|
|
668
|
+
import { __ as __2 } from "@wordpress/i18n";
|
|
717
669
|
var FEEDBACK_SUBJECT = "Page Audit Tool";
|
|
718
|
-
var FEEDBACK_SUBJECT_LABEL =
|
|
670
|
+
var FEEDBACK_SUBJECT_LABEL = __2("Page Audit Tool", "elementor");
|
|
719
671
|
var SUCCESS_NOTIFICATION_ID = "audit-feedback-success";
|
|
720
672
|
var ERROR_NOTIFICATION_ID = "audit-feedback-error";
|
|
721
673
|
var DIALOG_TITLE_ID = "audit-feedback-dialog-title";
|
|
@@ -724,12 +676,12 @@ var isUserConnected = () => Boolean(window.elementorCommon?.config?.library_conn
|
|
|
724
676
|
var notifySuccess = () => notify({
|
|
725
677
|
id: SUCCESS_NOTIFICATION_ID,
|
|
726
678
|
type: "success",
|
|
727
|
-
message:
|
|
679
|
+
message: __2("Feedback sent. Thanks for helping us out.", "elementor")
|
|
728
680
|
});
|
|
729
681
|
var notifyError = () => notify({
|
|
730
682
|
id: ERROR_NOTIFICATION_ID,
|
|
731
683
|
type: "error",
|
|
732
|
-
message:
|
|
684
|
+
message: __2("Something went wrong. Please try sending your feedback again.", "elementor")
|
|
733
685
|
});
|
|
734
686
|
function AuditFeedback() {
|
|
735
687
|
const [isOpen, setIsOpen] = useState(false);
|
|
@@ -745,7 +697,7 @@ function AuditFeedback() {
|
|
|
745
697
|
if (!connected && !connectUrl) {
|
|
746
698
|
return null;
|
|
747
699
|
}
|
|
748
|
-
const triggerLabel =
|
|
700
|
+
const triggerLabel = __2("Give feedback", "elementor");
|
|
749
701
|
const handleOpen = () => {
|
|
750
702
|
if (!connected) {
|
|
751
703
|
window.open(connectUrl, "_blank", "noopener");
|
|
@@ -787,11 +739,11 @@ function AuditFeedback() {
|
|
|
787
739
|
"aria-describedby": DIALOG_DESCRIPTION_ID,
|
|
788
740
|
PaperProps: { sx: { borderRadius: 1 } }
|
|
789
741
|
},
|
|
790
|
-
/* @__PURE__ */ React.createElement(DialogHeader, { logo: false, onClose: handleClose }, /* @__PURE__ */ React.createElement(DialogTitle, { id: DIALOG_TITLE_ID },
|
|
742
|
+
/* @__PURE__ */ React.createElement(DialogHeader, { logo: false, onClose: handleClose }, /* @__PURE__ */ React.createElement(DialogTitle, { id: DIALOG_TITLE_ID }, __2("Let us know what you think", "elementor"))),
|
|
791
743
|
/* @__PURE__ */ React.createElement(DialogContent, { dividers: true }, /* @__PURE__ */ React.createElement(Stack, { direction: "column", gap: 2 }, /* @__PURE__ */ React.createElement(TextField, { value: FEEDBACK_SUBJECT_LABEL, disabled: true, fullWidth: true, size: "small" }), /* @__PURE__ */ React.createElement(
|
|
792
744
|
TextField,
|
|
793
745
|
{
|
|
794
|
-
placeholder:
|
|
746
|
+
placeholder: __2(
|
|
795
747
|
"Tell us what you had in mind, what we can improve or fix to make this feature better.",
|
|
796
748
|
"elementor"
|
|
797
749
|
),
|
|
@@ -802,11 +754,11 @@ function AuditFeedback() {
|
|
|
802
754
|
onChange: (event) => setFeedbackText(event.target.value),
|
|
803
755
|
value: feedbackText
|
|
804
756
|
}
|
|
805
|
-
), /* @__PURE__ */ React.createElement(Typography, { id: DIALOG_DESCRIPTION_ID, variant: "caption", color: "text.secondary" },
|
|
757
|
+
), /* @__PURE__ */ React.createElement(Typography, { id: DIALOG_DESCRIPTION_ID, variant: "caption", color: "text.secondary" }, __2(
|
|
806
758
|
"We appreciate your feedback! While we review all submissions, we can't guarantee that every suggestion will result in a change or update.",
|
|
807
759
|
"elementor"
|
|
808
760
|
)))),
|
|
809
|
-
/* @__PURE__ */ React.createElement(DialogActions, null, /* @__PURE__ */ React.createElement(Button, { variant: "text", color: "secondary", onClick: handleCancel },
|
|
761
|
+
/* @__PURE__ */ React.createElement(DialogActions, null, /* @__PURE__ */ React.createElement(Button, { variant: "text", color: "secondary", onClick: handleCancel }, __2("Cancel", "elementor")), /* @__PURE__ */ React.createElement(
|
|
810
762
|
Button,
|
|
811
763
|
{
|
|
812
764
|
variant: "contained",
|
|
@@ -814,7 +766,7 @@ function AuditFeedback() {
|
|
|
814
766
|
disabled: isSubmitting || feedbackText.trim().length === 0,
|
|
815
767
|
onClick: handleSubmit
|
|
816
768
|
},
|
|
817
|
-
|
|
769
|
+
__2("Send", "elementor")
|
|
818
770
|
))
|
|
819
771
|
));
|
|
820
772
|
}
|
|
@@ -822,23 +774,23 @@ function AuditFeedback() {
|
|
|
822
774
|
// src/components/pages/error-page.tsx
|
|
823
775
|
import * as React2 from "react";
|
|
824
776
|
import { Box, Button as Button2, Typography as Typography2 } from "@elementor/ui";
|
|
825
|
-
import { __ as
|
|
777
|
+
import { __ as __3 } from "@wordpress/i18n";
|
|
826
778
|
function ErrorPage({ message, onRetry }) {
|
|
827
|
-
return /* @__PURE__ */ React2.createElement(Box, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React2.createElement(Typography2, { variant: "body2", color: "error", textAlign: "center" }, message), /* @__PURE__ */ React2.createElement(Button2, { variant: "contained", size: "small", onClick: onRetry },
|
|
779
|
+
return /* @__PURE__ */ React2.createElement(Box, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React2.createElement(Typography2, { variant: "body2", color: "error", textAlign: "center" }, message), /* @__PURE__ */ React2.createElement(Button2, { variant: "contained", size: "small", onClick: onRetry }, __3("Try again", "elementor")));
|
|
828
780
|
}
|
|
829
781
|
|
|
830
782
|
// src/components/pages/loading-page.tsx
|
|
831
783
|
import * as React3 from "react";
|
|
832
784
|
import { Box as Box2, CircularProgress, Typography as Typography3 } from "@elementor/ui";
|
|
833
|
-
import { __ as
|
|
785
|
+
import { __ as __4 } from "@wordpress/i18n";
|
|
834
786
|
function LoadingPage() {
|
|
835
|
-
return /* @__PURE__ */ React3.createElement(Box2, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React3.createElement(CircularProgress, { size: 32 }), /* @__PURE__ */ React3.createElement(Typography3, { variant: "body2" },
|
|
787
|
+
return /* @__PURE__ */ React3.createElement(Box2, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React3.createElement(CircularProgress, { size: 32 }), /* @__PURE__ */ React3.createElement(Typography3, { variant: "body2" }, __4("Audit in progress.", "elementor")));
|
|
836
788
|
}
|
|
837
789
|
|
|
838
790
|
// src/components/pages/welcome-page.tsx
|
|
839
791
|
import * as React4 from "react";
|
|
840
792
|
import { Box as Box3, Typography as Typography4 } from "@elementor/ui";
|
|
841
|
-
import { __ as
|
|
793
|
+
import { __ as __5 } from "@wordpress/i18n";
|
|
842
794
|
var INFORMATION_IMAGE_PATH = "images/information.svg";
|
|
843
795
|
function WelcomePage() {
|
|
844
796
|
const assetsUrl = window.elementorCommon?.config?.urls?.assets ?? "";
|
|
@@ -860,11 +812,11 @@ function WelcomePage() {
|
|
|
860
812
|
className: "elementor-nerd-box-icon",
|
|
861
813
|
src: `${assetsUrl}${INFORMATION_IMAGE_PATH}`,
|
|
862
814
|
loading: "lazy",
|
|
863
|
-
alt:
|
|
815
|
+
alt: __5("Elementor", "elementor")
|
|
864
816
|
}
|
|
865
817
|
),
|
|
866
|
-
/* @__PURE__ */ React4.createElement(Typography4, { variant: "subtitle1", component: "h3", sx: { marginBlockStart: 2 } },
|
|
867
|
-
/* @__PURE__ */ React4.createElement(Typography4, { variant: "caption", textAlign: "center" },
|
|
818
|
+
/* @__PURE__ */ React4.createElement(Typography4, { variant: "subtitle1", component: "h3", sx: { marginBlockStart: 2 } }, __5("Audit your page!", "elementor")),
|
|
819
|
+
/* @__PURE__ */ React4.createElement(Typography4, { variant: "caption", textAlign: "center" }, __5(
|
|
868
820
|
'Check SEO, accessibility, performance, and best practices. Click "Run page audit" to begin.',
|
|
869
821
|
"elementor"
|
|
870
822
|
))
|
|
@@ -872,15 +824,14 @@ function WelcomePage() {
|
|
|
872
824
|
}
|
|
873
825
|
|
|
874
826
|
// src/components/report-shell.tsx
|
|
875
|
-
import * as
|
|
876
|
-
import { useState as
|
|
877
|
-
import { Box as
|
|
878
|
-
import { __ as __22 } from "@wordpress/i18n";
|
|
827
|
+
import * as React18 from "react";
|
|
828
|
+
import { useState as useState4 } from "react";
|
|
829
|
+
import { Box as Box14 } from "@elementor/ui";
|
|
879
830
|
|
|
880
|
-
// src/components/pages/
|
|
831
|
+
// src/components/pages/category-page.tsx
|
|
881
832
|
import * as React12 from "react";
|
|
882
833
|
import { Box as Box8 } from "@elementor/ui";
|
|
883
|
-
import { __ as
|
|
834
|
+
import { __ as __11 } from "@wordpress/i18n";
|
|
884
835
|
|
|
885
836
|
// src/hooks/use-single-expanded-card.ts
|
|
886
837
|
import { useState as useState2 } from "react";
|
|
@@ -892,12 +843,22 @@ function useSingleExpandedCard(initialId = null) {
|
|
|
892
843
|
return { expandedId, toggle };
|
|
893
844
|
}
|
|
894
845
|
|
|
846
|
+
// src/components/category-icons.ts
|
|
847
|
+
import { BoltIcon, ElementorAccessibilityIcon, FileSearchIcon, Settings2Icon, ShieldCheckIcon } from "@elementor/icons";
|
|
848
|
+
var CATEGORY_ICONS = {
|
|
849
|
+
"best-practices": Settings2Icon,
|
|
850
|
+
seo: FileSearchIcon,
|
|
851
|
+
accessibility: ElementorAccessibilityIcon,
|
|
852
|
+
performance: BoltIcon,
|
|
853
|
+
compliance: ShieldCheckIcon
|
|
854
|
+
};
|
|
855
|
+
|
|
895
856
|
// src/components/status-section.tsx
|
|
896
857
|
import * as React5 from "react";
|
|
897
858
|
import { useState as useState3 } from "react";
|
|
898
859
|
import { ChevronDownIcon } from "@elementor/icons";
|
|
899
860
|
import { Box as Box4, Chip, Collapse, IconButton as IconButton2 } from "@elementor/ui";
|
|
900
|
-
import { __ as
|
|
861
|
+
import { __ as __6 } from "@wordpress/i18n";
|
|
901
862
|
function StatusSection({ label, count, color = "default", defaultExpanded = false, children }) {
|
|
902
863
|
const [expanded, setExpanded] = useState3(defaultExpanded);
|
|
903
864
|
if (React5.Children.count(children) === 0) {
|
|
@@ -913,7 +874,7 @@ function StatusSection({ label, count, color = "default", defaultExpanded = fals
|
|
|
913
874
|
IconButton2,
|
|
914
875
|
{
|
|
915
876
|
size: "small",
|
|
916
|
-
"aria-label": expanded ?
|
|
877
|
+
"aria-label": expanded ? __6("Collapse", "elementor") : __6("Expand", "elementor")
|
|
917
878
|
},
|
|
918
879
|
/* @__PURE__ */ React5.createElement(
|
|
919
880
|
ChevronDownIcon,
|
|
@@ -934,10 +895,10 @@ function StatusSection({ label, count, color = "default", defaultExpanded = fals
|
|
|
934
895
|
import * as React6 from "react";
|
|
935
896
|
import { ArrowLeftIcon } from "@elementor/icons";
|
|
936
897
|
import { Box as Box5, IconButton as IconButton3, Rotate, Typography as Typography5, useTheme } from "@elementor/ui";
|
|
937
|
-
import { __ as
|
|
898
|
+
import { __ as __7 } from "@wordpress/i18n";
|
|
938
899
|
function SubpageHeader({ title, onBack, backLabel, icon }) {
|
|
939
900
|
const isRtl = "rtl" === useTheme().direction;
|
|
940
|
-
return /* @__PURE__ */ React6.createElement(Box5, { sx: { display: "flex", alignItems: "center", gap: 0.5, p: 1 } }, /* @__PURE__ */ React6.createElement(IconButton3, { size: "small", onClick: onBack, "aria-label": backLabel ??
|
|
901
|
+
return /* @__PURE__ */ React6.createElement(Box5, { sx: { display: "flex", alignItems: "center", gap: 0.5, p: 1 } }, /* @__PURE__ */ React6.createElement(IconButton3, { size: "small", onClick: onBack, "aria-label": backLabel ?? __7("Back", "elementor") }, /* @__PURE__ */ React6.createElement(Rotate, { in: isRtl }, /* @__PURE__ */ React6.createElement(ArrowLeftIcon, { fontSize: "small" }))), icon, /* @__PURE__ */ React6.createElement(Typography5, { variant: "subtitle2", fontWeight: "bold" }, title));
|
|
941
902
|
}
|
|
942
903
|
|
|
943
904
|
// src/components/violation-row.tsx
|
|
@@ -946,7 +907,7 @@ import { getElementIcon, getElementTitle } from "@elementor/editor-elements";
|
|
|
946
907
|
import { useFloatingPanelZIndex as useFloatingPanelZIndex2 } from "@elementor/editor-floating-panels";
|
|
947
908
|
import { CheckIcon, ChevronDownIcon as ChevronDownIcon2, HelpIcon, InfoCircleIcon, WandIcon as WandIcon2 } from "@elementor/icons";
|
|
948
909
|
import { Alert, Box as Box7, Collapse as Collapse2, IconButton as IconButton5, Tooltip as Tooltip3, Typography as Typography6 } from "@elementor/ui";
|
|
949
|
-
import { __ as
|
|
910
|
+
import { __ as __10 } from "@wordpress/i18n";
|
|
950
911
|
|
|
951
912
|
// src/hooks/focus-violation.ts
|
|
952
913
|
import { getContainer, selectElement } from "@elementor/editor-elements";
|
|
@@ -987,11 +948,11 @@ function focusViolation(violation) {
|
|
|
987
948
|
}
|
|
988
949
|
|
|
989
950
|
// src/utils/build-angie-prompt.ts
|
|
990
|
-
import { __ as
|
|
951
|
+
import { __ as __8, sprintf } from "@wordpress/i18n";
|
|
991
952
|
function buildAngiePrompt(violationText) {
|
|
992
953
|
return sprintf(
|
|
993
954
|
/* translators: %s: audit violation description. */
|
|
994
|
-
|
|
955
|
+
__8("Help me fix: %s", "elementor"),
|
|
995
956
|
violationText
|
|
996
957
|
);
|
|
997
958
|
}
|
|
@@ -1011,9 +972,9 @@ import * as React7 from "react";
|
|
|
1011
972
|
import { isAngieAvailable, sendPromptToAngie } from "@elementor/editor-mcp";
|
|
1012
973
|
import { AngieIcon } from "@elementor/icons";
|
|
1013
974
|
import { IconButton as IconButton4, Tooltip as Tooltip2 } from "@elementor/ui";
|
|
1014
|
-
import { __ as
|
|
975
|
+
import { __ as __9 } from "@wordpress/i18n";
|
|
1015
976
|
function FixViolationWithAngie({ prompt, panelZIndex }) {
|
|
1016
|
-
const label =
|
|
977
|
+
const label = __9("Fix with Angie", "elementor");
|
|
1017
978
|
const href = `#angie-prompt=${encodeURIComponent(prompt)}`;
|
|
1018
979
|
const handleClick = (event) => {
|
|
1019
980
|
event.stopPropagation();
|
|
@@ -1110,7 +1071,7 @@ function GuidanceAction({ violation }) {
|
|
|
1110
1071
|
if (!hasPrimaryCta) {
|
|
1111
1072
|
return null;
|
|
1112
1073
|
}
|
|
1113
|
-
return /* @__PURE__ */ React11.createElement(Box7, {
|
|
1074
|
+
return /* @__PURE__ */ React11.createElement(Box7, { display: "flex", alignItems: "center", gap: 1, mt: 1 }, /* @__PURE__ */ React11.createElement(
|
|
1114
1075
|
ViolationCtaButton,
|
|
1115
1076
|
{
|
|
1116
1077
|
ctaLabel: violation.ctaLabel,
|
|
@@ -1154,7 +1115,7 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
|
|
|
1154
1115
|
IconButton5,
|
|
1155
1116
|
{
|
|
1156
1117
|
size: "small",
|
|
1157
|
-
"aria-label": expanded ?
|
|
1118
|
+
"aria-label": expanded ? __10("Collapse", "elementor") : __10("Expand", "elementor"),
|
|
1158
1119
|
onClick: onToggleExpand
|
|
1159
1120
|
},
|
|
1160
1121
|
/* @__PURE__ */ React11.createElement(
|
|
@@ -1167,7 +1128,7 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
|
|
|
1167
1128
|
}
|
|
1168
1129
|
}
|
|
1169
1130
|
)
|
|
1170
|
-
)), /* @__PURE__ */ React11.createElement(Collapse2, { in: expanded }, /* @__PURE__ */ React11.createElement(Box7, {
|
|
1131
|
+
)), /* @__PURE__ */ React11.createElement(Collapse2, { in: expanded }, /* @__PURE__ */ React11.createElement(Box7, { paddingBlock: 1 }, /* @__PURE__ */ React11.createElement(Tooltip3, { title: audit26.fixHint, placement: "top" }, /* @__PURE__ */ React11.createElement(
|
|
1171
1132
|
Alert,
|
|
1172
1133
|
{
|
|
1173
1134
|
severity: "secondary",
|
|
@@ -1178,8 +1139,9 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
|
|
|
1178
1139
|
onClick: isGuidanceFocusable ? handleGuidanceClick : void 0,
|
|
1179
1140
|
onKeyDown: isGuidanceFocusable ? onKeyboardClick(handleGuidanceClick) : void 0
|
|
1180
1141
|
},
|
|
1181
|
-
/* @__PURE__ */ React11.createElement(Typography6, { variant: "caption", component: "p", color: "text.secondary" }, audit26.description)
|
|
1182
|
-
|
|
1142
|
+
/* @__PURE__ */ React11.createElement(Typography6, { variant: "caption", component: "p", color: "text.secondary" }, audit26.description),
|
|
1143
|
+
primaryViolation && /* @__PURE__ */ React11.createElement(GuidanceAction, { violation: primaryViolation })
|
|
1144
|
+
))), violations && violations.length > 0 && /* @__PURE__ */ React11.createElement(Box7, { role: "list", sx: { paddingBlockEnd: 1 } }, violations.map((violation, idx) => {
|
|
1183
1145
|
const widgetIcon = violation.elementId ? getElementIcon(violation.elementId) : null;
|
|
1184
1146
|
const elementTitle = violation.elementId ? getElementTitle(violation.elementId) : null;
|
|
1185
1147
|
const rowLabel = elementTitle ? `${elementTitle} - ${violation.label}` : violation.label;
|
|
@@ -1215,106 +1177,28 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
|
|
|
1215
1177
|
}))));
|
|
1216
1178
|
}
|
|
1217
1179
|
|
|
1218
|
-
// src/components/pages/all-audits-page.tsx
|
|
1219
|
-
function AllAuditsPage({ initialExpandedStatus, onBack, report }) {
|
|
1220
|
-
const { failed, passed, skipped, totalViolations } = partitionAuditResults(report);
|
|
1221
|
-
const expandFail = !initialExpandedStatus || initialExpandedStatus === "fail";
|
|
1222
|
-
const expandPass = initialExpandedStatus === "pass";
|
|
1223
|
-
const expandSkipped = initialExpandedStatus === "skipped";
|
|
1224
|
-
const { expandedId, toggle } = useSingleExpandedCard();
|
|
1225
|
-
return /* @__PURE__ */ React12.createElement(Box8, { key: initialExpandedStatus ?? "default" }, /* @__PURE__ */ React12.createElement(SubpageHeader, { title: __12("All audits", "elementor"), onBack }), /* @__PURE__ */ React12.createElement(Box8, { sx: { p: 1 } }, /* @__PURE__ */ React12.createElement(
|
|
1226
|
-
StatusSection,
|
|
1227
|
-
{
|
|
1228
|
-
label: auditStatusLabel("fail"),
|
|
1229
|
-
count: totalViolations,
|
|
1230
|
-
color: auditStatusColor("fail"),
|
|
1231
|
-
defaultExpanded: expandFail
|
|
1232
|
-
},
|
|
1233
|
-
failed.map((r) => /* @__PURE__ */ React12.createElement(
|
|
1234
|
-
ViolationRow,
|
|
1235
|
-
{
|
|
1236
|
-
key: r.audit.id,
|
|
1237
|
-
audit: r.audit,
|
|
1238
|
-
violations: r.result.violations,
|
|
1239
|
-
expanded: expandedId === r.audit.id,
|
|
1240
|
-
onToggleExpand: () => toggle(r.audit.id)
|
|
1241
|
-
}
|
|
1242
|
-
))
|
|
1243
|
-
), /* @__PURE__ */ React12.createElement(
|
|
1244
|
-
StatusSection,
|
|
1245
|
-
{
|
|
1246
|
-
label: auditStatusLabel("pass"),
|
|
1247
|
-
count: passed.length,
|
|
1248
|
-
color: auditStatusColor("pass"),
|
|
1249
|
-
defaultExpanded: expandPass
|
|
1250
|
-
},
|
|
1251
|
-
passed.map((r) => /* @__PURE__ */ React12.createElement(
|
|
1252
|
-
ViolationRow,
|
|
1253
|
-
{
|
|
1254
|
-
key: r.audit.id,
|
|
1255
|
-
audit: r.audit,
|
|
1256
|
-
expanded: expandedId === r.audit.id,
|
|
1257
|
-
onToggleExpand: () => toggle(r.audit.id)
|
|
1258
|
-
}
|
|
1259
|
-
))
|
|
1260
|
-
), /* @__PURE__ */ React12.createElement(
|
|
1261
|
-
StatusSection,
|
|
1262
|
-
{
|
|
1263
|
-
label: auditStatusLabel("skipped"),
|
|
1264
|
-
count: skipped.length,
|
|
1265
|
-
color: auditStatusColor("skipped"),
|
|
1266
|
-
defaultExpanded: expandSkipped
|
|
1267
|
-
},
|
|
1268
|
-
skipped.map((r) => /* @__PURE__ */ React12.createElement(
|
|
1269
|
-
ViolationRow,
|
|
1270
|
-
{
|
|
1271
|
-
key: r.audit.id,
|
|
1272
|
-
audit: r.audit,
|
|
1273
|
-
skipReason: r.result.reason,
|
|
1274
|
-
expanded: expandedId === r.audit.id,
|
|
1275
|
-
onToggleExpand: () => toggle(r.audit.id)
|
|
1276
|
-
}
|
|
1277
|
-
))
|
|
1278
|
-
)));
|
|
1279
|
-
}
|
|
1280
|
-
|
|
1281
|
-
// src/components/pages/category-page.tsx
|
|
1282
|
-
import * as React13 from "react";
|
|
1283
|
-
import { Box as Box9 } from "@elementor/ui";
|
|
1284
|
-
import { __ as __13 } from "@wordpress/i18n";
|
|
1285
|
-
|
|
1286
|
-
// src/components/category-icons.ts
|
|
1287
|
-
import { BoltIcon, ElementorAccessibilityIcon, FileSearchIcon, Settings2Icon, ShieldCheckIcon } from "@elementor/icons";
|
|
1288
|
-
var CATEGORY_ICONS = {
|
|
1289
|
-
"best-practices": Settings2Icon,
|
|
1290
|
-
seo: FileSearchIcon,
|
|
1291
|
-
accessibility: ElementorAccessibilityIcon,
|
|
1292
|
-
performance: BoltIcon,
|
|
1293
|
-
compliance: ShieldCheckIcon
|
|
1294
|
-
};
|
|
1295
|
-
|
|
1296
1180
|
// src/components/pages/category-page.tsx
|
|
1297
1181
|
function CategoryPage({ category, report, onBack }) {
|
|
1298
1182
|
const Icon = CATEGORY_ICONS[category];
|
|
1299
1183
|
const { failed, passed, skipped, totalViolations } = partitionAuditResults(report, { category });
|
|
1300
1184
|
const { expandedId, toggle } = useSingleExpandedCard();
|
|
1301
|
-
return /* @__PURE__ */
|
|
1185
|
+
return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(
|
|
1302
1186
|
SubpageHeader,
|
|
1303
1187
|
{
|
|
1304
1188
|
title: CATEGORY_LABELS[category],
|
|
1305
1189
|
onBack,
|
|
1306
|
-
backLabel:
|
|
1307
|
-
icon: /* @__PURE__ */
|
|
1190
|
+
backLabel: __11("Back to all issues", "elementor"),
|
|
1191
|
+
icon: /* @__PURE__ */ React12.createElement(Icon, { fontSize: "small", color: "action" })
|
|
1308
1192
|
}
|
|
1309
|
-
), /* @__PURE__ */
|
|
1193
|
+
), /* @__PURE__ */ React12.createElement(Box8, { sx: { p: 1 } }, /* @__PURE__ */ React12.createElement(
|
|
1310
1194
|
StatusSection,
|
|
1311
1195
|
{
|
|
1312
|
-
label:
|
|
1196
|
+
label: __11("Failed audits", "elementor"),
|
|
1313
1197
|
count: totalViolations,
|
|
1314
1198
|
color: "error",
|
|
1315
1199
|
defaultExpanded: true
|
|
1316
1200
|
},
|
|
1317
|
-
failed.map((r) => /* @__PURE__ */
|
|
1201
|
+
failed.map((r) => /* @__PURE__ */ React12.createElement(
|
|
1318
1202
|
ViolationRow,
|
|
1319
1203
|
{
|
|
1320
1204
|
key: r.audit.id,
|
|
@@ -1324,7 +1208,7 @@ function CategoryPage({ category, report, onBack }) {
|
|
|
1324
1208
|
onToggleExpand: () => toggle(r.audit.id)
|
|
1325
1209
|
}
|
|
1326
1210
|
))
|
|
1327
|
-
), /* @__PURE__ */
|
|
1211
|
+
), /* @__PURE__ */ React12.createElement(StatusSection, { label: __11("Passed audits", "elementor"), count: passed.length, color: "success" }, passed.map((r) => /* @__PURE__ */ React12.createElement(
|
|
1328
1212
|
ViolationRow,
|
|
1329
1213
|
{
|
|
1330
1214
|
key: r.audit.id,
|
|
@@ -1332,7 +1216,7 @@ function CategoryPage({ category, report, onBack }) {
|
|
|
1332
1216
|
expanded: expandedId === r.audit.id,
|
|
1333
1217
|
onToggleExpand: () => toggle(r.audit.id)
|
|
1334
1218
|
}
|
|
1335
|
-
))), /* @__PURE__ */
|
|
1219
|
+
))), /* @__PURE__ */ React12.createElement(StatusSection, { label: __11("Skipped audits", "elementor"), count: skipped.length, color: "default" }, skipped.map((r) => /* @__PURE__ */ React12.createElement(
|
|
1336
1220
|
ViolationRow,
|
|
1337
1221
|
{
|
|
1338
1222
|
key: r.audit.id,
|
|
@@ -1344,14 +1228,13 @@ function CategoryPage({ category, report, onBack }) {
|
|
|
1344
1228
|
)))));
|
|
1345
1229
|
}
|
|
1346
1230
|
|
|
1347
|
-
// src/components/pages/
|
|
1348
|
-
import * as
|
|
1349
|
-
import {
|
|
1350
|
-
import {
|
|
1351
|
-
import { __ as __17 } from "@wordpress/i18n";
|
|
1231
|
+
// src/components/pages/overview-page.tsx
|
|
1232
|
+
import * as React17 from "react";
|
|
1233
|
+
import { Box as Box13, Typography as Typography11 } from "@elementor/ui";
|
|
1234
|
+
import { __ as __15 } from "@wordpress/i18n";
|
|
1352
1235
|
|
|
1353
1236
|
// src/utils/severity-counts.ts
|
|
1354
|
-
import { __ as
|
|
1237
|
+
import { __ as __12 } from "@wordpress/i18n";
|
|
1355
1238
|
var ALL_SEVERITIES = ["error", "warning", "info"];
|
|
1356
1239
|
function countSeverities(report, category) {
|
|
1357
1240
|
const counts = { error: 0, warning: 0, info: 0 };
|
|
@@ -1372,119 +1255,23 @@ function countSeverities(report, category) {
|
|
|
1372
1255
|
function severityPluralLabel(severity) {
|
|
1373
1256
|
switch (severity) {
|
|
1374
1257
|
case "error":
|
|
1375
|
-
return
|
|
1258
|
+
return __12("Errors", "elementor");
|
|
1376
1259
|
case "warning":
|
|
1377
|
-
return
|
|
1260
|
+
return __12("Warnings", "elementor");
|
|
1378
1261
|
case "info":
|
|
1379
|
-
return
|
|
1262
|
+
return __12("Suggestions", "elementor");
|
|
1380
1263
|
}
|
|
1381
1264
|
}
|
|
1382
1265
|
|
|
1383
|
-
// src/components/audit-statuses-section.tsx
|
|
1384
|
-
import * as React15 from "react";
|
|
1385
|
-
import { Box as Box11, Divider, Typography as Typography8 } from "@elementor/ui";
|
|
1386
|
-
import { __ as __15, sprintf as sprintf2 } from "@wordpress/i18n";
|
|
1387
|
-
|
|
1388
|
-
// src/components/count-summary-circle.tsx
|
|
1389
|
-
import * as React14 from "react";
|
|
1390
|
-
import { Box as Box10, Chip as Chip2, Typography as Typography7 } from "@elementor/ui";
|
|
1391
|
-
var COUNT_SUMMARY_CIRCLE_SIZE = 64;
|
|
1392
|
-
var COUNT_SUMMARY_BORDER_WIDTH = 4;
|
|
1393
|
-
function chipBorderColor(theme, color) {
|
|
1394
|
-
if (color === "default" || !color) {
|
|
1395
|
-
return theme.palette.text.secondary;
|
|
1396
|
-
}
|
|
1397
|
-
return theme.palette[color].main;
|
|
1398
|
-
}
|
|
1399
|
-
function CountSummaryCircle({ ariaLabel, color, count, label, onClick }) {
|
|
1400
|
-
return /* @__PURE__ */ React14.createElement(
|
|
1401
|
-
Box10,
|
|
1402
|
-
{
|
|
1403
|
-
"aria-label": ariaLabel,
|
|
1404
|
-
component: "button",
|
|
1405
|
-
onClick,
|
|
1406
|
-
type: "button",
|
|
1407
|
-
sx: {
|
|
1408
|
-
alignItems: "center",
|
|
1409
|
-
background: "none",
|
|
1410
|
-
border: "none",
|
|
1411
|
-
cursor: "pointer",
|
|
1412
|
-
display: "flex",
|
|
1413
|
-
flex: 1,
|
|
1414
|
-
flexDirection: "column",
|
|
1415
|
-
gap: 0.5,
|
|
1416
|
-
padding: 0
|
|
1417
|
-
}
|
|
1418
|
-
},
|
|
1419
|
-
/* @__PURE__ */ React14.createElement(
|
|
1420
|
-
Chip2,
|
|
1421
|
-
{
|
|
1422
|
-
color,
|
|
1423
|
-
label: count,
|
|
1424
|
-
size: "small",
|
|
1425
|
-
variant: "standard",
|
|
1426
|
-
sx: (theme) => ({
|
|
1427
|
-
border: `${COUNT_SUMMARY_BORDER_WIDTH}px solid ${chipBorderColor(theme, color)}`,
|
|
1428
|
-
borderRadius: "50%",
|
|
1429
|
-
height: COUNT_SUMMARY_CIRCLE_SIZE,
|
|
1430
|
-
maxWidth: COUNT_SUMMARY_CIRCLE_SIZE,
|
|
1431
|
-
width: COUNT_SUMMARY_CIRCLE_SIZE,
|
|
1432
|
-
"& .MuiChip-label": {
|
|
1433
|
-
fontSize: theme.typography.body2.fontSize,
|
|
1434
|
-
fontWeight: 700,
|
|
1435
|
-
lineHeight: 1,
|
|
1436
|
-
padding: 0
|
|
1437
|
-
}
|
|
1438
|
-
})
|
|
1439
|
-
}
|
|
1440
|
-
),
|
|
1441
|
-
/* @__PURE__ */ React14.createElement(Typography7, { color: "text.secondary", sx: { textAlign: "center" }, variant: "caption" }, label)
|
|
1442
|
-
);
|
|
1443
|
-
}
|
|
1444
|
-
|
|
1445
|
-
// src/components/audit-statuses-section.tsx
|
|
1446
|
-
var STATUS_ARIA_LABELS = {
|
|
1447
|
-
pass: (count) => sprintf2(
|
|
1448
|
-
/* translators: %d: number of passed audits. */
|
|
1449
|
-
__15("%d passed audits, view all", "elementor"),
|
|
1450
|
-
count
|
|
1451
|
-
),
|
|
1452
|
-
fail: (count) => sprintf2(
|
|
1453
|
-
/* translators: %d: number of failed audit violations. */
|
|
1454
|
-
__15("%d failed audits, view all", "elementor"),
|
|
1455
|
-
count
|
|
1456
|
-
),
|
|
1457
|
-
skipped: (count) => sprintf2(
|
|
1458
|
-
/* translators: %d: number of skipped audits. */
|
|
1459
|
-
__15("%d skipped audits, view all", "elementor"),
|
|
1460
|
-
count
|
|
1461
|
-
)
|
|
1462
|
-
};
|
|
1463
|
-
var STATUS_GROUPS = ["fail", "pass", "skipped"];
|
|
1464
|
-
function AuditStatusesSection({ report, onStatusClick }) {
|
|
1465
|
-
const statusCounts = auditStatusDisplayCounts(report);
|
|
1466
|
-
return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Typography8, { variant: "subtitle1", fontWeight: "bold" }, __15("Audit statuses", "elementor")), /* @__PURE__ */ React15.createElement(Box11, { sx: { display: "flex", justifyContent: "space-around", gap: 2 } }, STATUS_GROUPS.map((status) => /* @__PURE__ */ React15.createElement(
|
|
1467
|
-
CountSummaryCircle,
|
|
1468
|
-
{
|
|
1469
|
-
key: status,
|
|
1470
|
-
ariaLabel: STATUS_ARIA_LABELS[status](statusCounts[status]),
|
|
1471
|
-
color: auditStatusColor(status),
|
|
1472
|
-
count: statusCounts[status],
|
|
1473
|
-
label: auditStatusLabel(status),
|
|
1474
|
-
onClick: () => onStatusClick(status)
|
|
1475
|
-
}
|
|
1476
|
-
))), /* @__PURE__ */ React15.createElement(Divider, null));
|
|
1477
|
-
}
|
|
1478
|
-
|
|
1479
1266
|
// src/components/issues-category-row.tsx
|
|
1480
|
-
import * as
|
|
1267
|
+
import * as React13 from "react";
|
|
1481
1268
|
import { ChevronRightIcon } from "@elementor/icons";
|
|
1482
|
-
import { Box as
|
|
1269
|
+
import { Box as Box9, Rotate as Rotate2, Typography as Typography7, useTheme as useTheme2 } from "@elementor/ui";
|
|
1483
1270
|
function IssuesCategoryRow({ category, label, counts, onClick }) {
|
|
1484
1271
|
const isRtl = "rtl" === useTheme2().direction;
|
|
1485
1272
|
const Icon = CATEGORY_ICONS[category];
|
|
1486
|
-
return /* @__PURE__ */
|
|
1487
|
-
|
|
1273
|
+
return /* @__PURE__ */ React13.createElement(
|
|
1274
|
+
Box9,
|
|
1488
1275
|
{
|
|
1489
1276
|
role: "button",
|
|
1490
1277
|
tabIndex: 0,
|
|
@@ -1505,112 +1292,21 @@ function IssuesCategoryRow({ category, label, counts, onClick }) {
|
|
|
1505
1292
|
"&:focus-visible": { outline: "2px solid", outlineColor: "primary.main" }
|
|
1506
1293
|
}
|
|
1507
1294
|
},
|
|
1508
|
-
/* @__PURE__ */
|
|
1509
|
-
/* @__PURE__ */
|
|
1510
|
-
/* @__PURE__ */
|
|
1511
|
-
/* @__PURE__ */
|
|
1512
|
-
);
|
|
1513
|
-
}
|
|
1514
|
-
|
|
1515
|
-
// src/components/severity-filter-chips.tsx
|
|
1516
|
-
import * as React17 from "react";
|
|
1517
|
-
import { Box as Box13, Chip as Chip3 } from "@elementor/ui";
|
|
1518
|
-
import { __ as __16 } from "@wordpress/i18n";
|
|
1519
|
-
function SeverityFilterChips({ selected, onChange }) {
|
|
1520
|
-
return /* @__PURE__ */ React17.createElement(Box13, { sx: { display: "flex", alignItems: "center", gap: 1 } }, /* @__PURE__ */ React17.createElement(
|
|
1521
|
-
FilterChip,
|
|
1522
|
-
{
|
|
1523
|
-
label: __16("All", "elementor"),
|
|
1524
|
-
isSelected: selected === "all",
|
|
1525
|
-
onClick: () => onChange("all")
|
|
1526
|
-
}
|
|
1527
|
-
), ALL_SEVERITIES.map((severity) => /* @__PURE__ */ React17.createElement(
|
|
1528
|
-
FilterChip,
|
|
1529
|
-
{
|
|
1530
|
-
key: severity,
|
|
1531
|
-
label: severityPluralLabel(severity),
|
|
1532
|
-
icon: /* @__PURE__ */ React17.createElement(SeverityIcon, { severity }),
|
|
1533
|
-
isSelected: selected === severity,
|
|
1534
|
-
onClick: () => onChange(severity)
|
|
1535
|
-
}
|
|
1536
|
-
)));
|
|
1537
|
-
}
|
|
1538
|
-
function FilterChip({ label, icon, isSelected, onClick }) {
|
|
1539
|
-
return /* @__PURE__ */ React17.createElement(
|
|
1540
|
-
Chip3,
|
|
1541
|
-
{
|
|
1542
|
-
label,
|
|
1543
|
-
icon,
|
|
1544
|
-
size: "small",
|
|
1545
|
-
variant: "filled",
|
|
1546
|
-
color: "default",
|
|
1547
|
-
onClick,
|
|
1548
|
-
"aria-pressed": isSelected,
|
|
1549
|
-
sx: { bgcolor: isSelected ? "action.selected" : "transparent" }
|
|
1550
|
-
}
|
|
1295
|
+
/* @__PURE__ */ React13.createElement(Icon, { fontSize: "small", color: "action" }),
|
|
1296
|
+
/* @__PURE__ */ React13.createElement(Typography7, { variant: "body2", fontWeight: "bold", sx: { flex: 1 } }, label),
|
|
1297
|
+
/* @__PURE__ */ React13.createElement(Box9, { sx: { display: "flex", alignItems: "center", gap: 0.5 } }, ALL_SEVERITIES.filter((s) => counts[s] > 0).map((severity) => /* @__PURE__ */ React13.createElement(Box9, { key: severity, sx: { display: "flex", alignItems: "center", gap: 0.25 } }, /* @__PURE__ */ React13.createElement(SeverityIcon, { severity }), /* @__PURE__ */ React13.createElement(Typography7, { variant: "caption", color: "text.primary", fontWeight: "bold" }, counts[severity])))),
|
|
1298
|
+
/* @__PURE__ */ React13.createElement(Rotate2, { in: isRtl }, /* @__PURE__ */ React13.createElement(ChevronRightIcon, { fontSize: "small", color: "action" }))
|
|
1551
1299
|
);
|
|
1552
1300
|
}
|
|
1553
1301
|
|
|
1554
|
-
// src/components/pages/issues-page.tsx
|
|
1555
|
-
function filterCounts(counts, filter) {
|
|
1556
|
-
if (filter === "all") {
|
|
1557
|
-
return counts;
|
|
1558
|
-
}
|
|
1559
|
-
return { error: 0, warning: 0, info: 0, [filter]: counts[filter] };
|
|
1560
|
-
}
|
|
1561
|
-
function IssuesPage({ report, onCategoryClick, onAllAuditsClick, onStatusClick }) {
|
|
1562
|
-
const [filter, setFilter] = useState4("all");
|
|
1563
|
-
const populatedCategories = getPopulatedCategories(report.categories, ALL_CATEGORIES);
|
|
1564
|
-
const categoryRows = populatedCategories.map((category) => ({ category, counts: filterCounts(countSeverities(report, category), filter) })).filter(({ counts }) => Object.values(counts).some((count) => count > 0));
|
|
1565
|
-
return /* @__PURE__ */ React18.createElement(Box14, { sx: { display: "flex", flexDirection: "column", gap: 4, p: 2 } }, /* @__PURE__ */ React18.createElement(AuditStatusesSection, { report, onStatusClick }), /* @__PURE__ */ React18.createElement(
|
|
1566
|
-
Link,
|
|
1567
|
-
{
|
|
1568
|
-
component: "button",
|
|
1569
|
-
underline: "none",
|
|
1570
|
-
color: "inherit",
|
|
1571
|
-
onClick: onAllAuditsClick,
|
|
1572
|
-
sx: { textAlign: "start" }
|
|
1573
|
-
},
|
|
1574
|
-
/* @__PURE__ */ React18.createElement(Typography10, { variant: "subtitle1", component: "h2" }, __17("All issues", "elementor"))
|
|
1575
|
-
), /* @__PURE__ */ React18.createElement(SeverityFilterChips, { selected: filter, onChange: setFilter }), /* @__PURE__ */ React18.createElement(Box14, { sx: { display: "flex", flexDirection: "column", gap: 1 } }, categoryRows.map(({ category, counts }) => /* @__PURE__ */ React18.createElement(
|
|
1576
|
-
IssuesCategoryRow,
|
|
1577
|
-
{
|
|
1578
|
-
key: category,
|
|
1579
|
-
category,
|
|
1580
|
-
label: CATEGORY_LABELS[category],
|
|
1581
|
-
counts,
|
|
1582
|
-
onClick: () => onCategoryClick(category)
|
|
1583
|
-
}
|
|
1584
|
-
))));
|
|
1585
|
-
}
|
|
1586
|
-
|
|
1587
|
-
// src/components/pages/overview-page.tsx
|
|
1588
|
-
import * as React23 from "react";
|
|
1589
|
-
import { Box as Box19, Chip as Chip4, Typography as Typography15 } from "@elementor/ui";
|
|
1590
|
-
import { __ as __21 } from "@wordpress/i18n";
|
|
1591
|
-
|
|
1592
|
-
// src/utils/score-thresholds.ts
|
|
1593
|
-
import { __ as __18 } from "@wordpress/i18n";
|
|
1594
|
-
var GOOD_THRESHOLD = 90;
|
|
1595
|
-
var OK_THRESHOLD = 50;
|
|
1596
|
-
function getScoreTier(score) {
|
|
1597
|
-
if (score >= GOOD_THRESHOLD) {
|
|
1598
|
-
return { color: "success", label: __18("Good", "elementor") };
|
|
1599
|
-
}
|
|
1600
|
-
if (score >= OK_THRESHOLD) {
|
|
1601
|
-
return { color: "warning", label: __18("Needs work", "elementor") };
|
|
1602
|
-
}
|
|
1603
|
-
return { color: "error", label: __18("At risk", "elementor") };
|
|
1604
|
-
}
|
|
1605
|
-
|
|
1606
1302
|
// src/components/promotions.tsx
|
|
1607
|
-
import * as
|
|
1608
|
-
import { Box as
|
|
1609
|
-
import { __ as
|
|
1303
|
+
import * as React15 from "react";
|
|
1304
|
+
import { Box as Box11, Divider, Typography as Typography9 } from "@elementor/ui";
|
|
1305
|
+
import { __ as __14 } from "@wordpress/i18n";
|
|
1610
1306
|
|
|
1611
1307
|
// src/register-promotions.ts
|
|
1612
1308
|
import { ElementorCookieIcon, PhotoIcon, ShieldHalfFilledIcon } from "@elementor/icons";
|
|
1613
|
-
import { __ as
|
|
1309
|
+
import { __ as __13, _n, sprintf as sprintf2 } from "@wordpress/i18n";
|
|
1614
1310
|
function firstFailExternalUrl(run) {
|
|
1615
1311
|
return run.result.status === "fail" ? run.result.violations[0]?.externalUrl : void 0;
|
|
1616
1312
|
}
|
|
@@ -1618,7 +1314,7 @@ var PROMOTIONS = [
|
|
|
1618
1314
|
{
|
|
1619
1315
|
auditId: "audits/images-alt-text",
|
|
1620
1316
|
icon: PhotoIcon,
|
|
1621
|
-
ctaLabel:
|
|
1317
|
+
ctaLabel: __13("Fix with Ally", "elementor"),
|
|
1622
1318
|
formatSubtitle: (run) => {
|
|
1623
1319
|
if (run.result.status !== "fail") {
|
|
1624
1320
|
return null;
|
|
@@ -1627,7 +1323,7 @@ var PROMOTIONS = [
|
|
|
1627
1323
|
if (count === 0) {
|
|
1628
1324
|
return null;
|
|
1629
1325
|
}
|
|
1630
|
-
return
|
|
1326
|
+
return sprintf2(
|
|
1631
1327
|
/* translators: %d: number of images missing alt text. */
|
|
1632
1328
|
_n("%d image", "%d images", count, "elementor"),
|
|
1633
1329
|
count
|
|
@@ -1638,21 +1334,21 @@ var PROMOTIONS = [
|
|
|
1638
1334
|
{
|
|
1639
1335
|
auditId: "audits/cookie-policy",
|
|
1640
1336
|
icon: ElementorCookieIcon,
|
|
1641
|
-
ctaLabel:
|
|
1642
|
-
formatSubtitle: (run) => run.result.status === "fail" ?
|
|
1337
|
+
ctaLabel: __13("Fix with Cookiez", "elementor"),
|
|
1338
|
+
formatSubtitle: (run) => run.result.status === "fail" ? __13("Generate cookie policy", "elementor") : null,
|
|
1643
1339
|
getCtaUrl: firstFailExternalUrl
|
|
1644
1340
|
},
|
|
1645
1341
|
{
|
|
1646
1342
|
auditId: "audits/scan-for-cookies",
|
|
1647
1343
|
icon: ElementorCookieIcon,
|
|
1648
|
-
ctaLabel:
|
|
1649
|
-
formatSubtitle: (run) => run.result.status === "fail" ?
|
|
1344
|
+
ctaLabel: __13("Scan", "elementor"),
|
|
1345
|
+
formatSubtitle: (run) => run.result.status === "fail" ? __13("Scan this page for cookies", "elementor") : null,
|
|
1650
1346
|
getCtaUrl: firstFailExternalUrl
|
|
1651
1347
|
},
|
|
1652
1348
|
{
|
|
1653
1349
|
auditId: "audits/images-too-large",
|
|
1654
1350
|
icon: ShieldHalfFilledIcon,
|
|
1655
|
-
ctaLabel:
|
|
1351
|
+
ctaLabel: __13("Optimize all", "elementor"),
|
|
1656
1352
|
formatSubtitle: (run) => {
|
|
1657
1353
|
if (run.result.status !== "fail") {
|
|
1658
1354
|
return null;
|
|
@@ -1661,7 +1357,7 @@ var PROMOTIONS = [
|
|
|
1661
1357
|
if (count === 0) {
|
|
1662
1358
|
return null;
|
|
1663
1359
|
}
|
|
1664
|
-
return
|
|
1360
|
+
return sprintf2(
|
|
1665
1361
|
/* translators: %d: number of oversized images. */
|
|
1666
1362
|
_n("%d image", "%d images", count, "elementor"),
|
|
1667
1363
|
count
|
|
@@ -1677,11 +1373,11 @@ function findAuditRun(report, auditId) {
|
|
|
1677
1373
|
}
|
|
1678
1374
|
|
|
1679
1375
|
// src/components/promotion-card.tsx
|
|
1680
|
-
import * as
|
|
1681
|
-
import { Box as
|
|
1376
|
+
import * as React14 from "react";
|
|
1377
|
+
import { Box as Box10, Button as Button4, Typography as Typography8 } from "@elementor/ui";
|
|
1682
1378
|
function PromotionCard({ ctaDisabled, ctaLabel, icon: Icon, onCtaClick, subtitle, title }) {
|
|
1683
|
-
return /* @__PURE__ */
|
|
1684
|
-
|
|
1379
|
+
return /* @__PURE__ */ React14.createElement(
|
|
1380
|
+
Box10,
|
|
1685
1381
|
{
|
|
1686
1382
|
sx: {
|
|
1687
1383
|
alignItems: "center",
|
|
@@ -1694,9 +1390,9 @@ function PromotionCard({ ctaDisabled, ctaLabel, icon: Icon, onCtaClick, subtitle
|
|
|
1694
1390
|
py: 1.5
|
|
1695
1391
|
}
|
|
1696
1392
|
},
|
|
1697
|
-
/* @__PURE__ */
|
|
1698
|
-
/* @__PURE__ */
|
|
1699
|
-
/* @__PURE__ */
|
|
1393
|
+
/* @__PURE__ */ React14.createElement(Icon, { fontSize: "small", color: "action" }),
|
|
1394
|
+
/* @__PURE__ */ React14.createElement(Box10, { sx: { display: "flex", flex: 1, flexDirection: "column", gap: 0.25, minWidth: 0 } }, /* @__PURE__ */ React14.createElement(Typography8, { variant: "body2", fontWeight: "bold" }, title), /* @__PURE__ */ React14.createElement(Typography8, { variant: "caption", color: "text.secondary" }, subtitle)),
|
|
1395
|
+
/* @__PURE__ */ React14.createElement(Button4, { variant: "outlined", color: "secondary", size: "small", disabled: ctaDisabled, onClick: onCtaClick }, ctaLabel)
|
|
1700
1396
|
);
|
|
1701
1397
|
}
|
|
1702
1398
|
|
|
@@ -1725,7 +1421,7 @@ function Promotions({ report }) {
|
|
|
1725
1421
|
if (cards.length === 0) {
|
|
1726
1422
|
return null;
|
|
1727
1423
|
}
|
|
1728
|
-
return /* @__PURE__ */
|
|
1424
|
+
return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Divider, null), /* @__PURE__ */ React15.createElement(Typography9, { variant: "subtitle1", fontWeight: "bold" }, __14("Quick actions", "elementor")), /* @__PURE__ */ React15.createElement(Box11, { sx: { display: "flex", flexDirection: "column", gap: 1 } }, cards.map(({ config, ctaUrl, key, run, subtitle }) => /* @__PURE__ */ React15.createElement(
|
|
1729
1425
|
PromotionCard,
|
|
1730
1426
|
{
|
|
1731
1427
|
key,
|
|
@@ -1743,207 +1439,56 @@ function Promotions({ report }) {
|
|
|
1743
1439
|
))));
|
|
1744
1440
|
}
|
|
1745
1441
|
|
|
1746
|
-
// src/components/
|
|
1747
|
-
import * as
|
|
1748
|
-
import {
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
return /* @__PURE__ */ React21.createElement(
|
|
1753
|
-
Box17,
|
|
1754
|
-
{
|
|
1755
|
-
role: onClick ? "button" : void 0,
|
|
1756
|
-
tabIndex: onClick ? 0 : void 0,
|
|
1757
|
-
onClick,
|
|
1758
|
-
onKeyDown: onClick ? onKeyboardClick(onClick) : void 0,
|
|
1759
|
-
sx: {
|
|
1760
|
-
display: "flex",
|
|
1761
|
-
alignItems: "center",
|
|
1762
|
-
gap: 1,
|
|
1763
|
-
cursor: onClick ? "pointer" : "default",
|
|
1764
|
-
outline: "none",
|
|
1765
|
-
"&:focus-visible": { outline: "2px solid", outlineColor: "primary.main", borderRadius: 1 },
|
|
1766
|
-
py: 0.5
|
|
1767
|
-
}
|
|
1768
|
-
},
|
|
1769
|
-
/* @__PURE__ */ React21.createElement(Typography13, { variant: "body2", sx: { minWidth: 96 } }, label),
|
|
1770
|
-
/* @__PURE__ */ React21.createElement(
|
|
1771
|
-
LinearProgress,
|
|
1772
|
-
{
|
|
1773
|
-
variant: "determinate",
|
|
1774
|
-
value: score,
|
|
1775
|
-
color: getScoreTier(score).color,
|
|
1776
|
-
sx: { flex: 1, height: 6, borderRadius: 4, bgcolor: "action.disabledBackground" }
|
|
1777
|
-
}
|
|
1778
|
-
),
|
|
1779
|
-
/* @__PURE__ */ React21.createElement(
|
|
1780
|
-
Typography13,
|
|
1781
|
-
{
|
|
1782
|
-
variant: "body2",
|
|
1783
|
-
color: "text.primary",
|
|
1784
|
-
sx: { minWidth: 24, textAlign: "right", fontWeight: 900 }
|
|
1785
|
-
},
|
|
1786
|
-
score
|
|
1787
|
-
),
|
|
1788
|
-
onClick && /* @__PURE__ */ React21.createElement(Rotate3, { in: isRtl }, /* @__PURE__ */ React21.createElement(ChevronRightIcon2, { fontSize: "small", color: "action" }))
|
|
1789
|
-
);
|
|
1442
|
+
// src/components/severity-summary-cards.tsx
|
|
1443
|
+
import * as React16 from "react";
|
|
1444
|
+
import { Box as Box12, Typography as Typography10 } from "@elementor/ui";
|
|
1445
|
+
function SeveritySummaryCards({ report }) {
|
|
1446
|
+
const counts = countSeverities(report);
|
|
1447
|
+
return /* @__PURE__ */ React16.createElement(Box12, { display: "flex", gap: 1.5 }, ALL_SEVERITIES.map((severity) => /* @__PURE__ */ React16.createElement(SeverityCard, { key: severity, severity, count: counts[severity] })));
|
|
1790
1448
|
}
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
import { Box as Box18, CircularProgress as CircularProgress2, Typography as Typography14 } from "@elementor/ui";
|
|
1795
|
-
var SCORE_CIRCLE_SIZE = 88;
|
|
1796
|
-
var SCORE_CIRCLE_THICKNESS = 3;
|
|
1797
|
-
function ScoreCircle({ color, score }) {
|
|
1798
|
-
const progressColor = color ?? getScoreTier(score).color;
|
|
1799
|
-
return /* @__PURE__ */ React22.createElement(
|
|
1800
|
-
Box18,
|
|
1449
|
+
function SeverityCard({ severity, count }) {
|
|
1450
|
+
return /* @__PURE__ */ React16.createElement(
|
|
1451
|
+
Box12,
|
|
1801
1452
|
{
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
"
|
|
1805
|
-
|
|
1806
|
-
|
|
1453
|
+
display: "flex",
|
|
1454
|
+
flex: 1,
|
|
1455
|
+
flexDirection: "column",
|
|
1456
|
+
gap: 1,
|
|
1457
|
+
bgcolor: "grey.50",
|
|
1458
|
+
borderRadius: 1.5,
|
|
1459
|
+
px: 1.5,
|
|
1460
|
+
py: 1
|
|
1807
1461
|
},
|
|
1808
|
-
/* @__PURE__ */
|
|
1809
|
-
|
|
1810
|
-
{
|
|
1811
|
-
variant: "determinate",
|
|
1812
|
-
value: 100,
|
|
1813
|
-
size: SCORE_CIRCLE_SIZE,
|
|
1814
|
-
thickness: SCORE_CIRCLE_THICKNESS,
|
|
1815
|
-
sx: { color: "action.disabledBackground" }
|
|
1816
|
-
}
|
|
1817
|
-
),
|
|
1818
|
-
/* @__PURE__ */ React22.createElement(
|
|
1819
|
-
CircularProgress2,
|
|
1820
|
-
{
|
|
1821
|
-
variant: "determinate",
|
|
1822
|
-
value: score,
|
|
1823
|
-
size: SCORE_CIRCLE_SIZE,
|
|
1824
|
-
thickness: SCORE_CIRCLE_THICKNESS,
|
|
1825
|
-
color: progressColor,
|
|
1826
|
-
sx: { position: "absolute", left: 0 }
|
|
1827
|
-
}
|
|
1828
|
-
),
|
|
1829
|
-
/* @__PURE__ */ React22.createElement(
|
|
1830
|
-
Box18,
|
|
1831
|
-
{
|
|
1832
|
-
sx: {
|
|
1833
|
-
position: "absolute",
|
|
1834
|
-
inset: 0,
|
|
1835
|
-
display: "flex",
|
|
1836
|
-
alignItems: "center",
|
|
1837
|
-
justifyContent: "center"
|
|
1838
|
-
}
|
|
1839
|
-
},
|
|
1840
|
-
/* @__PURE__ */ React22.createElement(
|
|
1841
|
-
Typography14,
|
|
1842
|
-
{
|
|
1843
|
-
variant: "h4",
|
|
1844
|
-
component: "span",
|
|
1845
|
-
color: "text.primary",
|
|
1846
|
-
sx: { fontWeight: 700, lineHeight: 1 }
|
|
1847
|
-
},
|
|
1848
|
-
score
|
|
1849
|
-
)
|
|
1850
|
-
)
|
|
1462
|
+
/* @__PURE__ */ React16.createElement(SeverityIcon, { severity }),
|
|
1463
|
+
/* @__PURE__ */ React16.createElement(Box12, { display: "flex", flexDirection: "column" }, /* @__PURE__ */ React16.createElement(Typography10, { variant: "h5", fontWeight: 700, component: "span" }, count), /* @__PURE__ */ React16.createElement(Typography10, { variant: "caption", color: "text.secondary" }, severityPluralLabel(severity)))
|
|
1851
1464
|
);
|
|
1852
1465
|
}
|
|
1853
1466
|
|
|
1854
1467
|
// src/components/pages/overview-page.tsx
|
|
1855
1468
|
function OverviewPage({ onCategoryClick, report }) {
|
|
1856
1469
|
const populatedCategories = getPopulatedCategories(report.categories, ALL_CATEGORIES);
|
|
1857
|
-
const
|
|
1858
|
-
return /* @__PURE__ */
|
|
1859
|
-
|
|
1860
|
-
{
|
|
1861
|
-
label: overallScore.label,
|
|
1862
|
-
color: overallScore.color,
|
|
1863
|
-
variant: "standard",
|
|
1864
|
-
size: "small",
|
|
1865
|
-
sx: { fontWeight: 600, alignSelf: "flex-start" }
|
|
1866
|
-
}
|
|
1867
|
-
), /* @__PURE__ */ React23.createElement(Typography15, { variant: "body2", color: "text.secondary" }, __21("Overall score", "elementor")))), /* @__PURE__ */ React23.createElement(Box19, { sx: { display: "flex", flexDirection: "column", gap: 2 } }, populatedCategories.map((category) => /* @__PURE__ */ React23.createElement(
|
|
1868
|
-
ScoreBar,
|
|
1470
|
+
const categoryRows = populatedCategories.map((category) => ({ category, counts: countSeverities(report, category) })).filter(({ counts }) => Object.values(counts).some((count) => count > 0));
|
|
1471
|
+
return /* @__PURE__ */ React17.createElement(Box13, { display: "flex", flexDirection: "column", gap: 3, p: 2 }, /* @__PURE__ */ React17.createElement(SeveritySummaryCards, { report }), /* @__PURE__ */ React17.createElement(Box13, { display: "flex", flexDirection: "column", gap: 1 }, /* @__PURE__ */ React17.createElement(Typography11, { variant: "subtitle1", component: "h2" }, __15("All issues", "elementor")), /* @__PURE__ */ React17.createElement(Box13, { display: "flex", flexDirection: "column", gap: 1 }, categoryRows.map(({ category, counts }) => /* @__PURE__ */ React17.createElement(
|
|
1472
|
+
IssuesCategoryRow,
|
|
1869
1473
|
{
|
|
1870
1474
|
key: category,
|
|
1475
|
+
category,
|
|
1871
1476
|
label: CATEGORY_LABELS[category],
|
|
1872
|
-
|
|
1477
|
+
counts,
|
|
1873
1478
|
onClick: () => onCategoryClick(category)
|
|
1874
1479
|
}
|
|
1875
|
-
))), /* @__PURE__ */
|
|
1480
|
+
)))), /* @__PURE__ */ React17.createElement(Promotions, { report }));
|
|
1876
1481
|
}
|
|
1877
1482
|
|
|
1878
1483
|
// src/components/report-shell.tsx
|
|
1879
|
-
function activeTab(page) {
|
|
1880
|
-
if (page === "overview") {
|
|
1881
|
-
return "overview";
|
|
1882
|
-
}
|
|
1883
|
-
if (page === "issues") {
|
|
1884
|
-
return "issues";
|
|
1885
|
-
}
|
|
1886
|
-
return page.backTo;
|
|
1887
|
-
}
|
|
1888
|
-
function isAllAuditsPage(page) {
|
|
1889
|
-
return typeof page === "object" && "page" in page && page.page === "all-audits";
|
|
1890
|
-
}
|
|
1891
1484
|
function isCategoryPage(page) {
|
|
1892
1485
|
return typeof page === "object" && "category" in page;
|
|
1893
1486
|
}
|
|
1894
1487
|
function ReportShell({ report }) {
|
|
1895
|
-
const [activePage, setActivePage] =
|
|
1896
|
-
const
|
|
1897
|
-
const
|
|
1898
|
-
|
|
1899
|
-
};
|
|
1900
|
-
const openCategory = (category, backTo) => {
|
|
1901
|
-
setActivePage({ category, backTo });
|
|
1902
|
-
};
|
|
1903
|
-
const openAllAudits = (expand, backTo = "issues") => {
|
|
1904
|
-
setActivePage({ page: "all-audits", expand, backTo });
|
|
1905
|
-
};
|
|
1906
|
-
const backFromSubPage = () => {
|
|
1907
|
-
if (isAllAuditsPage(activePage) || isCategoryPage(activePage)) {
|
|
1908
|
-
setActivePage(activePage.backTo);
|
|
1909
|
-
}
|
|
1910
|
-
};
|
|
1911
|
-
return /* @__PURE__ */ React24.createElement(Box20, { sx: { display: "flex", flexDirection: "column", flex: 1, minHeight: 0 } }, /* @__PURE__ */ React24.createElement(Box20, { sx: { flexShrink: 0 } }, /* @__PURE__ */ React24.createElement(
|
|
1912
|
-
Tabs,
|
|
1913
|
-
{
|
|
1914
|
-
"aria-label": __22("Audit navigation", "elementor"),
|
|
1915
|
-
value: currentTab,
|
|
1916
|
-
onChange: handleTabChange,
|
|
1917
|
-
textColor: "secondary",
|
|
1918
|
-
indicatorColor: "secondary",
|
|
1919
|
-
size: "small",
|
|
1920
|
-
centered: true,
|
|
1921
|
-
variant: "fullWidth"
|
|
1922
|
-
},
|
|
1923
|
-
/* @__PURE__ */ React24.createElement(Tab, { value: "overview", label: __22("Overview", "elementor") }),
|
|
1924
|
-
/* @__PURE__ */ React24.createElement(Tab, { value: "issues", label: __22("Issues", "elementor") })
|
|
1925
|
-
), /* @__PURE__ */ React24.createElement(Divider3, null)), /* @__PURE__ */ React24.createElement(Box20, { sx: { flex: 1, minHeight: 0, overflowY: "auto" } }, activePage === "overview" && /* @__PURE__ */ React24.createElement(
|
|
1926
|
-
OverviewPage,
|
|
1927
|
-
{
|
|
1928
|
-
report,
|
|
1929
|
-
onCategoryClick: (category) => openCategory(category, "overview")
|
|
1930
|
-
}
|
|
1931
|
-
), activePage === "issues" && /* @__PURE__ */ React24.createElement(
|
|
1932
|
-
IssuesPage,
|
|
1933
|
-
{
|
|
1934
|
-
report,
|
|
1935
|
-
onCategoryClick: (category) => openCategory(category, "issues"),
|
|
1936
|
-
onAllAuditsClick: () => openAllAudits(),
|
|
1937
|
-
onStatusClick: (status) => openAllAudits(status)
|
|
1938
|
-
}
|
|
1939
|
-
), isAllAuditsPage(activePage) && /* @__PURE__ */ React24.createElement(
|
|
1940
|
-
AllAuditsPage,
|
|
1941
|
-
{
|
|
1942
|
-
report,
|
|
1943
|
-
initialExpandedStatus: activePage.expand,
|
|
1944
|
-
onBack: backFromSubPage
|
|
1945
|
-
}
|
|
1946
|
-
), isCategoryPage(activePage) && /* @__PURE__ */ React24.createElement(CategoryPage, { category: activePage.category, report, onBack: backFromSubPage })));
|
|
1488
|
+
const [activePage, setActivePage] = useState4("overview");
|
|
1489
|
+
const openCategory = (category) => setActivePage({ category });
|
|
1490
|
+
const backToOverview = () => setActivePage("overview");
|
|
1491
|
+
return /* @__PURE__ */ React18.createElement(Box14, { sx: { flex: 1, minHeight: 0, overflowY: "auto" } }, activePage === "overview" && /* @__PURE__ */ React18.createElement(OverviewPage, { report, onCategoryClick: openCategory }), isCategoryPage(activePage) && /* @__PURE__ */ React18.createElement(CategoryPage, { category: activePage.category, report, onBack: backToOverview }));
|
|
1947
1492
|
}
|
|
1948
1493
|
|
|
1949
1494
|
// src/components/audit-panel.tsx
|
|
@@ -1952,32 +1497,33 @@ function AuditPanel() {
|
|
|
1952
1497
|
const hostDocumentId = getHostDocumentId3() ?? 0;
|
|
1953
1498
|
const onRun = () => run(hostDocumentId);
|
|
1954
1499
|
const lastScanLabel = report ? new Date(report.runAt).toLocaleTimeString() : null;
|
|
1955
|
-
return /* @__PURE__ */
|
|
1500
|
+
return /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement(
|
|
1956
1501
|
FloatingPanelHeader,
|
|
1957
1502
|
{
|
|
1958
1503
|
panelId: AUDIT_PANEL_ID,
|
|
1959
|
-
title:
|
|
1960
|
-
badge:
|
|
1504
|
+
title: __16("Page Audit", "elementor"),
|
|
1505
|
+
badge: __16("Beta", "elementor"),
|
|
1961
1506
|
titleVariant: "subtitle2"
|
|
1962
1507
|
}
|
|
1963
|
-
), /* @__PURE__ */
|
|
1508
|
+
), /* @__PURE__ */ React19.createElement(
|
|
1964
1509
|
FloatingPanelBody,
|
|
1965
1510
|
{
|
|
1966
1511
|
sx: status === "ready" ? { display: "flex", flexDirection: "column", overflow: "hidden", minHeight: 0 } : void 0
|
|
1967
1512
|
},
|
|
1968
|
-
status === "idle" && /* @__PURE__ */
|
|
1969
|
-
status === "loading" && /* @__PURE__ */
|
|
1970
|
-
status === "error" && /* @__PURE__ */
|
|
1971
|
-
status === "ready" && report && /* @__PURE__ */
|
|
1972
|
-
), /* @__PURE__ */
|
|
1513
|
+
status === "idle" && /* @__PURE__ */ React19.createElement(WelcomePage, null),
|
|
1514
|
+
status === "loading" && /* @__PURE__ */ React19.createElement(LoadingPage, null),
|
|
1515
|
+
status === "error" && /* @__PURE__ */ React19.createElement(ErrorPage, { message: error ?? "", onRetry: onRun }),
|
|
1516
|
+
status === "ready" && report && /* @__PURE__ */ React19.createElement(ReportShell, { report })
|
|
1517
|
+
), /* @__PURE__ */ React19.createElement(FloatingPanelFooter, null, lastScanLabel ? /* @__PURE__ */ React19.createElement(Typography12, { variant: "caption", sx: { flex: 1 } }, __16("Last scan:", "elementor"), " ", lastScanLabel) : /* @__PURE__ */ React19.createElement(Box15, { sx: { flex: 1 } }), lastScanLabel && /* @__PURE__ */ React19.createElement(AuditFeedback, null), /* @__PURE__ */ React19.createElement(
|
|
1973
1518
|
Button5,
|
|
1974
1519
|
{
|
|
1975
1520
|
variant: "contained",
|
|
1976
1521
|
size: "small",
|
|
1522
|
+
startIcon: lastScanLabel ? /* @__PURE__ */ React19.createElement(ReloadIcon, { fontSize: "small" }) : void 0,
|
|
1977
1523
|
onClick: onRun,
|
|
1978
1524
|
disabled: status === "loading" || hostDocumentId === 0
|
|
1979
1525
|
},
|
|
1980
|
-
lastScanLabel ?
|
|
1526
|
+
lastScanLabel ? __16("Rescan", "elementor") : __16("Run page audit", "elementor")
|
|
1981
1527
|
)));
|
|
1982
1528
|
}
|
|
1983
1529
|
|
|
@@ -2002,7 +1548,7 @@ function useAuditToggleProps() {
|
|
|
2002
1548
|
const { isOpen } = auditPanel.useFloatingPanelStatus();
|
|
2003
1549
|
const { toggle } = auditPanel.useFloatingPanelActions();
|
|
2004
1550
|
return {
|
|
2005
|
-
title:
|
|
1551
|
+
title: __17("Audit Page", "elementor"),
|
|
2006
1552
|
icon: ShieldCheckIcon2,
|
|
2007
1553
|
selected: isOpen,
|
|
2008
1554
|
onClick: () => toggle()
|
|
@@ -2020,15 +1566,15 @@ function registerAppBarAuditsToggle() {
|
|
|
2020
1566
|
}
|
|
2021
1567
|
|
|
2022
1568
|
// src/audits/accessibility-policy.ts
|
|
2023
|
-
import { __ as
|
|
1569
|
+
import { __ as __18 } from "@wordpress/i18n";
|
|
2024
1570
|
var audit = {
|
|
2025
1571
|
id: "audits/accessibility-policy",
|
|
2026
|
-
title:
|
|
2027
|
-
description:
|
|
1572
|
+
title: __18("Accessibility policy", "elementor"),
|
|
1573
|
+
description: __18(
|
|
2028
1574
|
"An accessibility policy demonstrates your commitment to digital inclusion and may be legally required in some regions.",
|
|
2029
1575
|
"elementor"
|
|
2030
1576
|
),
|
|
2031
|
-
fixHint:
|
|
1577
|
+
fixHint: __18("Install the Ally plugin to add an accessibility policy to your website.", "elementor"),
|
|
2032
1578
|
categories: ["compliance"],
|
|
2033
1579
|
severity: "info",
|
|
2034
1580
|
weight: 1,
|
|
@@ -2041,7 +1587,7 @@ var audit = {
|
|
|
2041
1587
|
violations: [
|
|
2042
1588
|
{
|
|
2043
1589
|
auditId: audit.id,
|
|
2044
|
-
label:
|
|
1590
|
+
label: __18("Ally plugin is not installed or active.", "elementor"),
|
|
2045
1591
|
externalUrl: ctx.pageContext.ally_plugin_url
|
|
2046
1592
|
}
|
|
2047
1593
|
]
|
|
@@ -2050,15 +1596,15 @@ var audit = {
|
|
|
2050
1596
|
};
|
|
2051
1597
|
|
|
2052
1598
|
// src/audits/accessibility-statement.ts
|
|
2053
|
-
import { __ as
|
|
1599
|
+
import { __ as __19 } from "@wordpress/i18n";
|
|
2054
1600
|
var audit2 = {
|
|
2055
1601
|
id: "audits/accessibility-statement",
|
|
2056
|
-
title:
|
|
2057
|
-
description:
|
|
1602
|
+
title: __19("Create an accessibility statement", "elementor"),
|
|
1603
|
+
description: __19(
|
|
2058
1604
|
"An accessibility statement showcases your efforts to create an inclusive online space, highlighting helpful features and a commitment to accessibility.",
|
|
2059
1605
|
"elementor"
|
|
2060
1606
|
),
|
|
2061
|
-
fixHint:
|
|
1607
|
+
fixHint: __19("Use Ally to create and publish an accessibility statement for your site.", "elementor"),
|
|
2062
1608
|
categories: ["accessibility"],
|
|
2063
1609
|
severity: "info",
|
|
2064
1610
|
weight: 1,
|
|
@@ -2072,10 +1618,10 @@ var audit2 = {
|
|
|
2072
1618
|
violations: [
|
|
2073
1619
|
{
|
|
2074
1620
|
auditId: audit2.id,
|
|
2075
|
-
label:
|
|
1621
|
+
label: __19("No accessibility statement has been created for this site.", "elementor"),
|
|
2076
1622
|
externalUrl: isReady ? ctx.pageContext.ally_accessibility_statement_url : ctx.pageContext.ally_plugin_url,
|
|
2077
|
-
ctaLabel:
|
|
2078
|
-
secondaryCtaLabel:
|
|
1623
|
+
ctaLabel: __19("Create", "elementor"),
|
|
1624
|
+
secondaryCtaLabel: __19("Learn more", "elementor"),
|
|
2079
1625
|
secondaryCtaUrl: "https://elementor.com/help/start-using-ally/#statement"
|
|
2080
1626
|
}
|
|
2081
1627
|
]
|
|
@@ -2084,7 +1630,7 @@ var audit2 = {
|
|
|
2084
1630
|
};
|
|
2085
1631
|
|
|
2086
1632
|
// src/audits/accessibility-widget.ts
|
|
2087
|
-
import { __ as
|
|
1633
|
+
import { __ as __20 } from "@wordpress/i18n";
|
|
2088
1634
|
|
|
2089
1635
|
// src/utils/scan-accessibility-widgets.ts
|
|
2090
1636
|
var ACCESSIBILITY_WIDGET_SCRIPT_SOURCES = ["cdn.elementor.com/a11y/widget.js"];
|
|
@@ -2095,18 +1641,18 @@ function hasAccessibilityWidgetScript(html) {
|
|
|
2095
1641
|
// src/audits/accessibility-widget.ts
|
|
2096
1642
|
var audit3 = {
|
|
2097
1643
|
id: "audits/accessibility-widget",
|
|
2098
|
-
title:
|
|
2099
|
-
description:
|
|
2100
|
-
fixHint:
|
|
1644
|
+
title: __20("Add an accessibility widget", "elementor"),
|
|
1645
|
+
description: __20("Make your site more inclusive by adding an accessibility widget.", "elementor"),
|
|
1646
|
+
fixHint: __20("Activate Ally\u2019s accessibility widget to give visitors on-page accessibility tools.", "elementor"),
|
|
2101
1647
|
categories: ["accessibility"],
|
|
2102
1648
|
severity: "info",
|
|
2103
1649
|
weight: 1,
|
|
2104
1650
|
evaluate: (ctx) => {
|
|
2105
1651
|
if (!ctx.pageContext.frontend_url) {
|
|
2106
|
-
return { status: "skipped", reason:
|
|
1652
|
+
return { status: "skipped", reason: __20("Page is not published.", "elementor") };
|
|
2107
1653
|
}
|
|
2108
1654
|
if (!ctx.renderedHtml) {
|
|
2109
|
-
return { status: "skipped", reason:
|
|
1655
|
+
return { status: "skipped", reason: __20("Could not fetch the published page.", "elementor") };
|
|
2110
1656
|
}
|
|
2111
1657
|
if (hasAccessibilityWidgetScript(ctx.renderedHtml)) {
|
|
2112
1658
|
return { status: "pass" };
|
|
@@ -2117,9 +1663,9 @@ var audit3 = {
|
|
|
2117
1663
|
violations: [
|
|
2118
1664
|
{
|
|
2119
1665
|
auditId: audit3.id,
|
|
2120
|
-
label:
|
|
1666
|
+
label: __20("No accessibility widget is active on this site.", "elementor"),
|
|
2121
1667
|
externalUrl: isReady ? ctx.pageContext.ally_widget_settings_url : ctx.pageContext.ally_plugin_url,
|
|
2122
|
-
ctaLabel:
|
|
1668
|
+
ctaLabel: __20("Activate", "elementor")
|
|
2123
1669
|
}
|
|
2124
1670
|
]
|
|
2125
1671
|
};
|
|
@@ -2127,15 +1673,15 @@ var audit3 = {
|
|
|
2127
1673
|
};
|
|
2128
1674
|
|
|
2129
1675
|
// src/audits/cookie-policy.ts
|
|
2130
|
-
import { __ as
|
|
1676
|
+
import { __ as __21 } from "@wordpress/i18n";
|
|
2131
1677
|
var audit4 = {
|
|
2132
1678
|
id: "audits/cookie-policy",
|
|
2133
|
-
title:
|
|
2134
|
-
description:
|
|
1679
|
+
title: __21("Cookie policy", "elementor"),
|
|
1680
|
+
description: __21(
|
|
2135
1681
|
"A cookie policy is required by privacy regulations such as GDPR (EU) or CCPA (US) to inform visitors about tracking and data collection.",
|
|
2136
1682
|
"elementor"
|
|
2137
1683
|
),
|
|
2138
|
-
fixHint:
|
|
1684
|
+
fixHint: __21("Install the Cookiez plugin to add a cookie policy to your website.", "elementor"),
|
|
2139
1685
|
categories: ["compliance"],
|
|
2140
1686
|
severity: "info",
|
|
2141
1687
|
weight: 1,
|
|
@@ -2148,9 +1694,9 @@ var audit4 = {
|
|
|
2148
1694
|
violations: [
|
|
2149
1695
|
{
|
|
2150
1696
|
auditId: audit4.id,
|
|
2151
|
-
label:
|
|
1697
|
+
label: __21("Cookiez plugin is not installed or active.", "elementor"),
|
|
2152
1698
|
externalUrl: ctx.pageContext.cookiez_plugin_url,
|
|
2153
|
-
ctaLabel:
|
|
1699
|
+
ctaLabel: __21("Set up cookie consent", "elementor")
|
|
2154
1700
|
}
|
|
2155
1701
|
]
|
|
2156
1702
|
};
|
|
@@ -2159,7 +1705,7 @@ var audit4 = {
|
|
|
2159
1705
|
|
|
2160
1706
|
// src/audits/deep-nesting.ts
|
|
2161
1707
|
import { getWidgetsCache } from "@elementor/editor-elements";
|
|
2162
|
-
import { __ as
|
|
1708
|
+
import { __ as __22 } from "@wordpress/i18n";
|
|
2163
1709
|
var MAX_NESTING_DEPTH = 6;
|
|
2164
1710
|
function isNestingElement(node, widgetsCache) {
|
|
2165
1711
|
if (node.elType === "container") {
|
|
@@ -2169,18 +1715,18 @@ function isNestingElement(node, widgetsCache) {
|
|
|
2169
1715
|
}
|
|
2170
1716
|
var audit5 = {
|
|
2171
1717
|
id: "audits/deep-nesting",
|
|
2172
|
-
title:
|
|
2173
|
-
description:
|
|
1718
|
+
title: __22("Deep container nesting", "elementor"),
|
|
1719
|
+
description: __22(
|
|
2174
1720
|
"Container nesting exceeds the recommended depth. Deep DOM trees hurt rendering performance and readability.",
|
|
2175
1721
|
"elementor"
|
|
2176
1722
|
),
|
|
2177
|
-
fixHint:
|
|
1723
|
+
fixHint: __22("Flatten the layout by removing unnecessary wrapper containers.", "elementor"),
|
|
2178
1724
|
categories: ["performance", "best-practices"],
|
|
2179
1725
|
severity: "warning",
|
|
2180
1726
|
weight: 5,
|
|
2181
1727
|
evaluate: (ctx) => {
|
|
2182
1728
|
if (ctx.elements.tree.length === 0) {
|
|
2183
|
-
return { status: "skipped", reason:
|
|
1729
|
+
return { status: "skipped", reason: __22("No elements", "elementor") };
|
|
2184
1730
|
}
|
|
2185
1731
|
const widgetsCache = getWidgetsCache();
|
|
2186
1732
|
const violations = [];
|
|
@@ -2194,7 +1740,7 @@ var audit5 = {
|
|
|
2194
1740
|
auditId: audit5.id,
|
|
2195
1741
|
elementId: node.id,
|
|
2196
1742
|
targetHint: "element-settings",
|
|
2197
|
-
label:
|
|
1743
|
+
label: __22("Container nesting is too deep.", "elementor")
|
|
2198
1744
|
});
|
|
2199
1745
|
}
|
|
2200
1746
|
});
|
|
@@ -2203,15 +1749,15 @@ var audit5 = {
|
|
|
2203
1749
|
};
|
|
2204
1750
|
|
|
2205
1751
|
// src/audits/default-design-system.ts
|
|
2206
|
-
import { __ as
|
|
1752
|
+
import { __ as __23 } from "@wordpress/i18n";
|
|
2207
1753
|
var audit6 = {
|
|
2208
1754
|
id: "audits/default-design-system",
|
|
2209
|
-
title:
|
|
2210
|
-
description:
|
|
1755
|
+
title: __23("Default website kit", "elementor"),
|
|
1756
|
+
description: __23(
|
|
2211
1757
|
"Your website is using the default design system colors and fonts. Custom branding makes the website feel uniquely yours.",
|
|
2212
1758
|
"elementor"
|
|
2213
1759
|
),
|
|
2214
|
-
fixHint:
|
|
1760
|
+
fixHint: __23("Open Site Settings and customize your kit (colors, fonts, layout).", "elementor"),
|
|
2215
1761
|
categories: ["best-practices"],
|
|
2216
1762
|
severity: "info",
|
|
2217
1763
|
weight: 1,
|
|
@@ -2224,7 +1770,7 @@ var audit6 = {
|
|
|
2224
1770
|
violations: [
|
|
2225
1771
|
{
|
|
2226
1772
|
auditId: audit6.id,
|
|
2227
|
-
label:
|
|
1773
|
+
label: __23("Kit appears unchanged from default.", "elementor"),
|
|
2228
1774
|
targetHint: "site-settings"
|
|
2229
1775
|
}
|
|
2230
1776
|
]
|
|
@@ -2234,16 +1780,16 @@ var audit6 = {
|
|
|
2234
1780
|
|
|
2235
1781
|
// src/audits/deprecated-widgets.ts
|
|
2236
1782
|
import { getWidgetsCache as getWidgetsCache2 } from "@elementor/editor-elements";
|
|
2237
|
-
import { __ as
|
|
1783
|
+
import { __ as __24 } from "@wordpress/i18n";
|
|
2238
1784
|
var DEPRECATION_CONTROL_NAME = "deprecation_message";
|
|
2239
1785
|
var audit7 = {
|
|
2240
1786
|
id: "audits/deprecated-widgets",
|
|
2241
|
-
title:
|
|
2242
|
-
description:
|
|
1787
|
+
title: __24("Deprecated widgets", "elementor"),
|
|
1788
|
+
description: __24(
|
|
2243
1789
|
"Deprecated widgets should not be used. For better capabilities use the recommended replacement.",
|
|
2244
1790
|
"elementor"
|
|
2245
1791
|
),
|
|
2246
|
-
fixHint:
|
|
1792
|
+
fixHint: __24("Replace each deprecated widget with the recommended new widget shown in its panel.", "elementor"),
|
|
2247
1793
|
categories: ["best-practices", "performance"],
|
|
2248
1794
|
severity: "warning",
|
|
2249
1795
|
weight: 7,
|
|
@@ -2270,7 +1816,7 @@ var audit7 = {
|
|
|
2270
1816
|
auditId: audit7.id,
|
|
2271
1817
|
elementId: node.id,
|
|
2272
1818
|
targetHint: "element-settings",
|
|
2273
|
-
label:
|
|
1819
|
+
label: __24("Using deprecated widget.", "elementor")
|
|
2274
1820
|
});
|
|
2275
1821
|
});
|
|
2276
1822
|
return violations.length === 0 ? { status: "pass" } : { status: "fail", violations };
|
|
@@ -2278,7 +1824,7 @@ var audit7 = {
|
|
|
2278
1824
|
};
|
|
2279
1825
|
|
|
2280
1826
|
// src/audits/google-consent-mode.ts
|
|
2281
|
-
import { __ as
|
|
1827
|
+
import { __ as __25 } from "@wordpress/i18n";
|
|
2282
1828
|
|
|
2283
1829
|
// src/utils/scan-consent-signals.ts
|
|
2284
1830
|
var GOOGLE_TRACKING_PATTERNS = [
|
|
@@ -2301,12 +1847,12 @@ function hasConsentDefaultCall(html) {
|
|
|
2301
1847
|
// src/audits/google-consent-mode.ts
|
|
2302
1848
|
var audit8 = {
|
|
2303
1849
|
id: "audits/google-consent-mode",
|
|
2304
|
-
title:
|
|
2305
|
-
description:
|
|
1850
|
+
title: __25("Google Consent Mode", "elementor"),
|
|
1851
|
+
description: __25(
|
|
2306
1852
|
"Google Analytics, Ads, or Tag Manager are running on this site and may not receive a consent signal, which risks losing conversion/analytics data and compliance exposure.",
|
|
2307
1853
|
"elementor"
|
|
2308
1854
|
),
|
|
2309
|
-
fixHint:
|
|
1855
|
+
fixHint: __25(
|
|
2310
1856
|
"Turn on Google Consent Mode in your cookie consent plugin so Google tags respect visitor consent choices.",
|
|
2311
1857
|
"elementor"
|
|
2312
1858
|
),
|
|
@@ -2315,18 +1861,18 @@ var audit8 = {
|
|
|
2315
1861
|
weight: 1,
|
|
2316
1862
|
evaluate: (ctx) => {
|
|
2317
1863
|
if (!ctx.pageContext.frontend_url) {
|
|
2318
|
-
return { status: "skipped", reason:
|
|
1864
|
+
return { status: "skipped", reason: __25("Page is not published.", "elementor") };
|
|
2319
1865
|
}
|
|
2320
1866
|
if (!ctx.renderedHtml) {
|
|
2321
|
-
return { status: "skipped", reason:
|
|
1867
|
+
return { status: "skipped", reason: __25("Could not fetch the published page.", "elementor") };
|
|
2322
1868
|
}
|
|
2323
1869
|
if (!hasGoogleTracking(ctx.renderedHtml)) {
|
|
2324
|
-
return { status: "skipped", reason:
|
|
1870
|
+
return { status: "skipped", reason: __25("No Google tracking product detected.", "elementor") };
|
|
2325
1871
|
}
|
|
2326
1872
|
if (hasConsentDefaultCall(ctx.renderedHtml)) {
|
|
2327
1873
|
return { status: "pass" };
|
|
2328
1874
|
}
|
|
2329
|
-
const label =
|
|
1875
|
+
const label = __25("No Google Consent Mode signal was found on the page.", "elementor");
|
|
2330
1876
|
const isCookiezReady = ctx.pageContext.cookiez_plugin_installed && ctx.pageContext.cookiez_plugin_active;
|
|
2331
1877
|
if (isCookiezReady) {
|
|
2332
1878
|
return {
|
|
@@ -2335,7 +1881,7 @@ var audit8 = {
|
|
|
2335
1881
|
{
|
|
2336
1882
|
auditId: audit8.id,
|
|
2337
1883
|
label,
|
|
2338
|
-
ctaLabel:
|
|
1884
|
+
ctaLabel: __25("Enable", "elementor"),
|
|
2339
1885
|
externalUrl: ctx.pageContext.cookiez_consent_mode_settings_url
|
|
2340
1886
|
}
|
|
2341
1887
|
]
|
|
@@ -2355,7 +1901,7 @@ var audit8 = {
|
|
|
2355
1901
|
};
|
|
2356
1902
|
|
|
2357
1903
|
// src/audits/heading-structure.ts
|
|
2358
|
-
import { __ as
|
|
1904
|
+
import { __ as __26 } from "@wordpress/i18n";
|
|
2359
1905
|
var HEADING_LEVELS = ["h1", "h2", "h3", "h4", "h5", "h6"];
|
|
2360
1906
|
var HEADING_CONTROLS_REGISTRY = {
|
|
2361
1907
|
// Core
|
|
@@ -2533,27 +2079,27 @@ function extractPageHeadings(tree) {
|
|
|
2533
2079
|
}
|
|
2534
2080
|
var audit9 = {
|
|
2535
2081
|
id: "audits/heading-structure",
|
|
2536
|
-
title:
|
|
2537
|
-
description:
|
|
2538
|
-
fixHint:
|
|
2082
|
+
title: __26("Heading structure", "elementor"),
|
|
2083
|
+
description: __26("Pages should have exactly one H1 and a non-skipping heading order.", "elementor"),
|
|
2084
|
+
fixHint: __26("Ensure your page has one H1 and that heading levels do not skip (no H2 \u2192 H4).", "elementor"),
|
|
2539
2085
|
categories: ["seo", "accessibility"],
|
|
2540
2086
|
severity: "error",
|
|
2541
2087
|
weight: 10,
|
|
2542
2088
|
evaluate: (ctx) => {
|
|
2543
2089
|
if (ctx.elements.tree.length === 0) {
|
|
2544
|
-
return { status: "skipped", reason:
|
|
2090
|
+
return { status: "skipped", reason: __26("No elements", "elementor") };
|
|
2545
2091
|
}
|
|
2546
2092
|
const headings = extractPageHeadings(ctx.elements.tree);
|
|
2547
2093
|
const violations = [];
|
|
2548
2094
|
if (headings.length === 0) {
|
|
2549
2095
|
violations.push({
|
|
2550
2096
|
auditId: audit9.id,
|
|
2551
|
-
label:
|
|
2097
|
+
label: __26("No headings found on the page.", "elementor")
|
|
2552
2098
|
});
|
|
2553
2099
|
} else {
|
|
2554
2100
|
const h1Count = headings.filter((h) => h.level === 1).length;
|
|
2555
2101
|
if (h1Count === 0) {
|
|
2556
|
-
violations.push({ auditId: audit9.id, label:
|
|
2102
|
+
violations.push({ auditId: audit9.id, label: __26("No H1 on the page.", "elementor") });
|
|
2557
2103
|
}
|
|
2558
2104
|
if (h1Count > 1) {
|
|
2559
2105
|
headings.filter((h) => h.level === 1).slice(1).forEach(
|
|
@@ -2561,7 +2107,7 @@ var audit9 = {
|
|
|
2561
2107
|
auditId: audit9.id,
|
|
2562
2108
|
elementId: h.elementId,
|
|
2563
2109
|
targetHint: "element-settings",
|
|
2564
|
-
label:
|
|
2110
|
+
label: __26("More than one H1 on the page.", "elementor")
|
|
2565
2111
|
})
|
|
2566
2112
|
);
|
|
2567
2113
|
}
|
|
@@ -2571,7 +2117,7 @@ var audit9 = {
|
|
|
2571
2117
|
auditId: audit9.id,
|
|
2572
2118
|
elementId: headings[i].elementId,
|
|
2573
2119
|
targetHint: "element-settings",
|
|
2574
|
-
label:
|
|
2120
|
+
label: __26("Heading level skipped.", "elementor")
|
|
2575
2121
|
});
|
|
2576
2122
|
}
|
|
2577
2123
|
}
|
|
@@ -2581,24 +2127,24 @@ var audit9 = {
|
|
|
2581
2127
|
};
|
|
2582
2128
|
|
|
2583
2129
|
// src/audits/hidden-elements.ts
|
|
2584
|
-
import { __ as
|
|
2130
|
+
import { __ as __27 } from "@wordpress/i18n";
|
|
2585
2131
|
function isHiddenOnAllDevices(settings) {
|
|
2586
2132
|
return Boolean(settings.hide_desktop) && Boolean(settings.hide_tablet) && Boolean(settings.hide_mobile);
|
|
2587
2133
|
}
|
|
2588
2134
|
var audit10 = {
|
|
2589
2135
|
id: "audits/hidden-elements",
|
|
2590
|
-
title:
|
|
2591
|
-
description:
|
|
2136
|
+
title: __27("Hidden elements", "elementor"),
|
|
2137
|
+
description: __27(
|
|
2592
2138
|
"Elements hidden on all devices simultaneously are effectively dead code in the page tree.",
|
|
2593
2139
|
"elementor"
|
|
2594
2140
|
),
|
|
2595
|
-
fixHint:
|
|
2141
|
+
fixHint: __27("Remove the element or make it visible on at least one device breakpoint.", "elementor"),
|
|
2596
2142
|
categories: ["best-practices", "performance"],
|
|
2597
2143
|
severity: "info",
|
|
2598
2144
|
weight: 3,
|
|
2599
2145
|
evaluate: (ctx) => {
|
|
2600
2146
|
if (ctx.elements.tree.length === 0) {
|
|
2601
|
-
return { status: "skipped", reason:
|
|
2147
|
+
return { status: "skipped", reason: __27("No elements", "elementor") };
|
|
2602
2148
|
}
|
|
2603
2149
|
const violations = [];
|
|
2604
2150
|
walkElements(ctx.elements.tree, (node) => {
|
|
@@ -2607,7 +2153,7 @@ var audit10 = {
|
|
|
2607
2153
|
auditId: audit10.id,
|
|
2608
2154
|
elementId: node.id,
|
|
2609
2155
|
targetHint: "element-settings",
|
|
2610
|
-
label:
|
|
2156
|
+
label: __27("Element is hidden on all devices.", "elementor")
|
|
2611
2157
|
});
|
|
2612
2158
|
}
|
|
2613
2159
|
});
|
|
@@ -2616,7 +2162,7 @@ var audit10 = {
|
|
|
2616
2162
|
};
|
|
2617
2163
|
|
|
2618
2164
|
// src/audits/images-alt-text.ts
|
|
2619
|
-
import { __ as
|
|
2165
|
+
import { __ as __28 } from "@wordpress/i18n";
|
|
2620
2166
|
|
|
2621
2167
|
// src/utils/image-alt.ts
|
|
2622
2168
|
function hasMeaningfulAlt(media, pageContext) {
|
|
@@ -2637,15 +2183,15 @@ function isImageSourcePresent(media) {
|
|
|
2637
2183
|
// src/audits/images-alt-text.ts
|
|
2638
2184
|
var audit11 = {
|
|
2639
2185
|
id: "audits/images-alt-text",
|
|
2640
|
-
title:
|
|
2641
|
-
description:
|
|
2642
|
-
fixHint:
|
|
2186
|
+
title: __28("Images alt text", "elementor"),
|
|
2187
|
+
description: __28("Every image needs a meaningful alt attribute for screen readers and image-search.", "elementor"),
|
|
2188
|
+
fixHint: __28("Open the image's settings and add an Alt Text describing the image.", "elementor"),
|
|
2643
2189
|
categories: ["seo", "accessibility"],
|
|
2644
2190
|
severity: "error",
|
|
2645
2191
|
weight: 10,
|
|
2646
2192
|
evaluate: (ctx) => {
|
|
2647
2193
|
if (!hasPageImages(ctx.elements.tree)) {
|
|
2648
|
-
return { status: "skipped", reason:
|
|
2194
|
+
return { status: "skipped", reason: __28("No images", "elementor") };
|
|
2649
2195
|
}
|
|
2650
2196
|
const violations = [];
|
|
2651
2197
|
const failedWidgetIds = /* @__PURE__ */ new Set();
|
|
@@ -2661,9 +2207,9 @@ var audit11 = {
|
|
|
2661
2207
|
auditId: audit11.id,
|
|
2662
2208
|
elementId: node.id,
|
|
2663
2209
|
targetHint: "element-settings",
|
|
2664
|
-
label:
|
|
2210
|
+
label: __28("Image is missing alt text.", "elementor"),
|
|
2665
2211
|
externalUrl: ctx.pageContext.ally_plugin_url,
|
|
2666
|
-
ctaLabel:
|
|
2212
|
+
ctaLabel: __28("Fix with Ally", "elementor")
|
|
2667
2213
|
});
|
|
2668
2214
|
}
|
|
2669
2215
|
});
|
|
@@ -2672,13 +2218,13 @@ var audit11 = {
|
|
|
2672
2218
|
};
|
|
2673
2219
|
|
|
2674
2220
|
// src/audits/images-inefficient-format.ts
|
|
2675
|
-
import { __ as
|
|
2221
|
+
import { __ as __29 } from "@wordpress/i18n";
|
|
2676
2222
|
var LEGACY_RASTER_MIME_TYPES = /* @__PURE__ */ new Set(["image/jpeg", "image/png", "image/gif", "image/bmp", "image/tiff"]);
|
|
2677
2223
|
var audit12 = {
|
|
2678
2224
|
id: "audits/images-inefficient-format",
|
|
2679
|
-
title:
|
|
2680
|
-
description:
|
|
2681
|
-
fixHint:
|
|
2225
|
+
title: __29("Inefficient image format", "elementor"),
|
|
2226
|
+
description: __29("Image isn't served in a modern, efficient format like WebP or AVIF.", "elementor"),
|
|
2227
|
+
fixHint: __29("Convert the image to a modern format like WebP or AVIF, or enable image optimization.", "elementor"),
|
|
2682
2228
|
categories: ["performance"],
|
|
2683
2229
|
severity: "info",
|
|
2684
2230
|
weight: 1,
|
|
@@ -2706,29 +2252,29 @@ var audit12 = {
|
|
|
2706
2252
|
walkAtomicImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
|
|
2707
2253
|
walkAtomicBackgroundImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
|
|
2708
2254
|
if (!hasAnyImage) {
|
|
2709
|
-
return { status: "skipped", reason:
|
|
2255
|
+
return { status: "skipped", reason: __29("No images", "elementor") };
|
|
2710
2256
|
}
|
|
2711
2257
|
const violations = Array.from(offendingElementIds).map((elementId) => ({
|
|
2712
2258
|
auditId: audit12.id,
|
|
2713
2259
|
elementId,
|
|
2714
2260
|
targetHint: "element-settings",
|
|
2715
|
-
label:
|
|
2261
|
+
label: __29("Image isn't served in a modern format like WebP or AVIF.", "elementor"),
|
|
2716
2262
|
externalUrl: ctx.pageContext.image_optimization_plugin_url,
|
|
2717
|
-
ctaLabel:
|
|
2263
|
+
ctaLabel: __29("Optimize all", "elementor")
|
|
2718
2264
|
}));
|
|
2719
2265
|
return violations.length === 0 ? { status: "pass" } : { status: "fail", violations, metadata: { inefficientImageFormatCount } };
|
|
2720
2266
|
}
|
|
2721
2267
|
};
|
|
2722
2268
|
|
|
2723
2269
|
// src/audits/images-too-large.ts
|
|
2724
|
-
import { __ as
|
|
2270
|
+
import { __ as __30, sprintf as sprintf3 } from "@wordpress/i18n";
|
|
2725
2271
|
var SIZE_THRESHOLD_BYTES = 500 * 1024;
|
|
2726
2272
|
var BYTES_PER_KB = 1024;
|
|
2727
2273
|
var audit13 = {
|
|
2728
2274
|
id: "audits/images-too-large",
|
|
2729
|
-
title:
|
|
2730
|
-
description:
|
|
2731
|
-
fixHint:
|
|
2275
|
+
title: __30("Oversized images", "elementor"),
|
|
2276
|
+
description: __30("Large image files slow down the page.", "elementor"),
|
|
2277
|
+
fixHint: __30("Replace the image with a smaller version or enable image optimization.", "elementor"),
|
|
2732
2278
|
categories: ["performance"],
|
|
2733
2279
|
severity: "warning",
|
|
2734
2280
|
weight: 7,
|
|
@@ -2758,40 +2304,40 @@ var audit13 = {
|
|
|
2758
2304
|
walkAtomicImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
|
|
2759
2305
|
walkAtomicBackgroundImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
|
|
2760
2306
|
if (!hasAnyImage) {
|
|
2761
|
-
return { status: "skipped", reason:
|
|
2307
|
+
return { status: "skipped", reason: __30("No images", "elementor") };
|
|
2762
2308
|
}
|
|
2763
2309
|
const violations = Array.from(widgetMaxKb.entries()).map(([elementId, kb]) => ({
|
|
2764
2310
|
auditId: audit13.id,
|
|
2765
2311
|
elementId,
|
|
2766
2312
|
targetHint: "element-settings",
|
|
2767
|
-
label:
|
|
2313
|
+
label: sprintf3(
|
|
2768
2314
|
/* translators: %d is the image file size in kilobytes. */
|
|
2769
|
-
|
|
2315
|
+
__30("Image is %d KB (over 500 KB).", "elementor"),
|
|
2770
2316
|
kb
|
|
2771
2317
|
),
|
|
2772
2318
|
externalUrl: ctx.pageContext.image_optimization_plugin_url,
|
|
2773
|
-
ctaLabel:
|
|
2319
|
+
ctaLabel: __30("Optimize all", "elementor")
|
|
2774
2320
|
}));
|
|
2775
2321
|
return violations.length === 0 ? { status: "pass" } : { status: "fail", violations, metadata: { oversizedImageCount } };
|
|
2776
2322
|
}
|
|
2777
2323
|
};
|
|
2778
2324
|
|
|
2779
2325
|
// src/audits/nested-boxed-containers.ts
|
|
2780
|
-
import { __ as
|
|
2326
|
+
import { __ as __31 } from "@wordpress/i18n";
|
|
2781
2327
|
function isBoxed(settings) {
|
|
2782
2328
|
return settings.content_width === "boxed";
|
|
2783
2329
|
}
|
|
2784
2330
|
var audit14 = {
|
|
2785
2331
|
id: "audits/nested-boxed-containers",
|
|
2786
|
-
title:
|
|
2787
|
-
description:
|
|
2788
|
-
fixHint:
|
|
2332
|
+
title: __31("Boxed container nested inside a boxed parent", "elementor"),
|
|
2333
|
+
description: __31("An inner container does not need to be boxed when its parent already is.", "elementor"),
|
|
2334
|
+
fixHint: __31("Change the inner container's content width to Full Width.", "elementor"),
|
|
2789
2335
|
categories: ["best-practices", "performance"],
|
|
2790
2336
|
severity: "info",
|
|
2791
2337
|
weight: 5,
|
|
2792
2338
|
evaluate: (ctx) => {
|
|
2793
2339
|
if (ctx.elements.tree.length === 0) {
|
|
2794
|
-
return { status: "skipped", reason:
|
|
2340
|
+
return { status: "skipped", reason: __31("No elements", "elementor") };
|
|
2795
2341
|
}
|
|
2796
2342
|
const violations = [];
|
|
2797
2343
|
walkElements(ctx.elements.tree, (node, parents) => {
|
|
@@ -2804,7 +2350,7 @@ var audit14 = {
|
|
|
2804
2350
|
auditId: audit14.id,
|
|
2805
2351
|
elementId: node.id,
|
|
2806
2352
|
targetHint: "element-settings",
|
|
2807
|
-
label:
|
|
2353
|
+
label: __31("Nested boxed container.", "elementor")
|
|
2808
2354
|
});
|
|
2809
2355
|
}
|
|
2810
2356
|
});
|
|
@@ -2813,12 +2359,12 @@ var audit14 = {
|
|
|
2813
2359
|
};
|
|
2814
2360
|
|
|
2815
2361
|
// src/audits/page-excerpt.ts
|
|
2816
|
-
import { __ as
|
|
2362
|
+
import { __ as __32 } from "@wordpress/i18n";
|
|
2817
2363
|
var audit15 = {
|
|
2818
2364
|
id: "audits/page-excerpt",
|
|
2819
|
-
title:
|
|
2820
|
-
description:
|
|
2821
|
-
fixHint:
|
|
2365
|
+
title: __32("Page excerpt", "elementor"),
|
|
2366
|
+
description: __32("A descriptive excerpt helps search engines and previews summarize the page.", "elementor"),
|
|
2367
|
+
fixHint: __32("Open Page Settings and write a short excerpt.", "elementor"),
|
|
2822
2368
|
categories: ["seo"],
|
|
2823
2369
|
severity: "warning",
|
|
2824
2370
|
weight: 5,
|
|
@@ -2831,7 +2377,7 @@ var audit15 = {
|
|
|
2831
2377
|
violations: [
|
|
2832
2378
|
{
|
|
2833
2379
|
auditId: audit15.id,
|
|
2834
|
-
label:
|
|
2380
|
+
label: __32("Page has no excerpt.", "elementor"),
|
|
2835
2381
|
targetHint: "page-settings",
|
|
2836
2382
|
angieFix: true
|
|
2837
2383
|
}
|
|
@@ -2841,12 +2387,12 @@ var audit15 = {
|
|
|
2841
2387
|
};
|
|
2842
2388
|
|
|
2843
2389
|
// src/audits/page-featured-image.ts
|
|
2844
|
-
import { __ as
|
|
2390
|
+
import { __ as __33 } from "@wordpress/i18n";
|
|
2845
2391
|
var audit16 = {
|
|
2846
2392
|
id: "audits/page-featured-image",
|
|
2847
|
-
title:
|
|
2848
|
-
description:
|
|
2849
|
-
fixHint:
|
|
2393
|
+
title: __33("Page featured image", "elementor"),
|
|
2394
|
+
description: __33("Featured images are used by social shares and many themes for hero visuals.", "elementor"),
|
|
2395
|
+
fixHint: __33("Open Page Settings and set a featured image.", "elementor"),
|
|
2850
2396
|
categories: ["seo"],
|
|
2851
2397
|
severity: "info",
|
|
2852
2398
|
weight: 5,
|
|
@@ -2859,7 +2405,7 @@ var audit16 = {
|
|
|
2859
2405
|
violations: [
|
|
2860
2406
|
{
|
|
2861
2407
|
auditId: audit16.id,
|
|
2862
|
-
label:
|
|
2408
|
+
label: __33("No featured image set.", "elementor"),
|
|
2863
2409
|
targetHint: "page-settings"
|
|
2864
2410
|
}
|
|
2865
2411
|
]
|
|
@@ -2868,13 +2414,13 @@ var audit16 = {
|
|
|
2868
2414
|
};
|
|
2869
2415
|
|
|
2870
2416
|
// src/audits/page-title.ts
|
|
2871
|
-
import { __ as
|
|
2417
|
+
import { __ as __34 } from "@wordpress/i18n";
|
|
2872
2418
|
var MAX_TITLE_LENGTH = 60;
|
|
2873
2419
|
var audit17 = {
|
|
2874
2420
|
id: "audits/page-title",
|
|
2875
|
-
title:
|
|
2876
|
-
description:
|
|
2877
|
-
fixHint:
|
|
2421
|
+
title: __34("Page title", "elementor"),
|
|
2422
|
+
description: __34("Pages need a clear title for SEO and screen-reader navigation.", "elementor"),
|
|
2423
|
+
fixHint: __34("Open Page Settings and add a title.", "elementor"),
|
|
2878
2424
|
categories: ["seo"],
|
|
2879
2425
|
severity: "error",
|
|
2880
2426
|
weight: 10,
|
|
@@ -2886,10 +2432,10 @@ var audit17 = {
|
|
|
2886
2432
|
violations: [
|
|
2887
2433
|
{
|
|
2888
2434
|
auditId: audit17.id,
|
|
2889
|
-
label:
|
|
2435
|
+
label: __34("Page has no title.", "elementor"),
|
|
2890
2436
|
targetHint: "page-settings",
|
|
2891
2437
|
angieFix: true,
|
|
2892
|
-
angiePrompt:
|
|
2438
|
+
angiePrompt: __34(
|
|
2893
2439
|
"Based on this page's contents, generate a title for this page.",
|
|
2894
2440
|
"elementor"
|
|
2895
2441
|
)
|
|
@@ -2903,7 +2449,7 @@ var audit17 = {
|
|
|
2903
2449
|
violations: [
|
|
2904
2450
|
{
|
|
2905
2451
|
auditId: audit17.id,
|
|
2906
|
-
label:
|
|
2452
|
+
label: __34("Page title is too long.", "elementor"),
|
|
2907
2453
|
targetHint: "page-settings",
|
|
2908
2454
|
angieFix: true
|
|
2909
2455
|
}
|
|
@@ -2915,7 +2461,7 @@ var audit17 = {
|
|
|
2915
2461
|
};
|
|
2916
2462
|
|
|
2917
2463
|
// src/audits/prefer-global-colors.ts
|
|
2918
|
-
import { __ as
|
|
2464
|
+
import { __ as __35, sprintf as sprintf4 } from "@wordpress/i18n";
|
|
2919
2465
|
|
|
2920
2466
|
// src/utils/collect-hardcoded-colors.ts
|
|
2921
2467
|
var RESERVED_SETTING_KEYS = /* @__PURE__ */ new Set(["__globals__", "__dynamic__"]);
|
|
@@ -2983,18 +2529,18 @@ function findMatchingGlobalByValue(value, globals) {
|
|
|
2983
2529
|
// src/audits/prefer-global-colors.ts
|
|
2984
2530
|
var audit18 = {
|
|
2985
2531
|
id: "audits/prefer-global-colors",
|
|
2986
|
-
title:
|
|
2987
|
-
description:
|
|
2988
|
-
fixHint:
|
|
2532
|
+
title: __35("Prefer global colors", "elementor"),
|
|
2533
|
+
description: __35("Global colors make the design consistent and easy to update site-wide.", "elementor"),
|
|
2534
|
+
fixHint: __35("Replace the hard-coded value with the matching global color.", "elementor"),
|
|
2989
2535
|
categories: ["best-practices"],
|
|
2990
2536
|
severity: "info",
|
|
2991
2537
|
weight: 3,
|
|
2992
2538
|
evaluate: (ctx) => {
|
|
2993
2539
|
if (ctx.elements.tree.length === 0) {
|
|
2994
|
-
return { status: "skipped", reason:
|
|
2540
|
+
return { status: "skipped", reason: __35("No elements", "elementor") };
|
|
2995
2541
|
}
|
|
2996
2542
|
if (ctx.kit.globals.colors.length === 0) {
|
|
2997
|
-
return { status: "skipped", reason:
|
|
2543
|
+
return { status: "skipped", reason: __35("No global colors", "elementor") };
|
|
2998
2544
|
}
|
|
2999
2545
|
const violations = [];
|
|
3000
2546
|
walkElements(ctx.elements.tree, (node) => {
|
|
@@ -3008,9 +2554,9 @@ var audit18 = {
|
|
|
3008
2554
|
elementId: node.id,
|
|
3009
2555
|
targetHint: "element-settings",
|
|
3010
2556
|
angieFix: true,
|
|
3011
|
-
label:
|
|
2557
|
+
label: sprintf4(
|
|
3012
2558
|
/* translators: 1: hard-coded color value, 2: global color title. */
|
|
3013
|
-
|
|
2559
|
+
__35('replace "%1$s" with "%2$s" global color', "elementor"),
|
|
3014
2560
|
value,
|
|
3015
2561
|
global.title
|
|
3016
2562
|
)
|
|
@@ -3022,7 +2568,7 @@ var audit18 = {
|
|
|
3022
2568
|
};
|
|
3023
2569
|
|
|
3024
2570
|
// src/audits/prefer-global-fonts.ts
|
|
3025
|
-
import { __ as
|
|
2571
|
+
import { __ as __36, sprintf as sprintf5 } from "@wordpress/i18n";
|
|
3026
2572
|
|
|
3027
2573
|
// src/utils/collect-hardcoded-fonts.ts
|
|
3028
2574
|
var RESERVED_SETTING_KEYS2 = /* @__PURE__ */ new Set(["__globals__", "__dynamic__"]);
|
|
@@ -3082,18 +2628,18 @@ function collectHardcodedFonts(settings, pathPrefix = "") {
|
|
|
3082
2628
|
// src/audits/prefer-global-fonts.ts
|
|
3083
2629
|
var audit19 = {
|
|
3084
2630
|
id: "audits/prefer-global-fonts",
|
|
3085
|
-
title:
|
|
3086
|
-
description:
|
|
3087
|
-
fixHint:
|
|
2631
|
+
title: __36("Prefer global fonts", "elementor"),
|
|
2632
|
+
description: __36("Global fonts make the design consistent and easy to update site-wide.", "elementor"),
|
|
2633
|
+
fixHint: __36("Replace the hard-coded value with the matching global font.", "elementor"),
|
|
3088
2634
|
categories: ["best-practices", "performance"],
|
|
3089
2635
|
severity: "info",
|
|
3090
2636
|
weight: 3,
|
|
3091
2637
|
evaluate: (ctx) => {
|
|
3092
2638
|
if (ctx.elements.tree.length === 0) {
|
|
3093
|
-
return { status: "skipped", reason:
|
|
2639
|
+
return { status: "skipped", reason: __36("No elements", "elementor") };
|
|
3094
2640
|
}
|
|
3095
2641
|
if (ctx.kit.globals.fonts.length === 0) {
|
|
3096
|
-
return { status: "skipped", reason:
|
|
2642
|
+
return { status: "skipped", reason: __36("No global fonts", "elementor") };
|
|
3097
2643
|
}
|
|
3098
2644
|
const violations = [];
|
|
3099
2645
|
walkElements(ctx.elements.tree, (node) => {
|
|
@@ -3106,9 +2652,9 @@ var audit19 = {
|
|
|
3106
2652
|
auditId: audit19.id,
|
|
3107
2653
|
elementId: node.id,
|
|
3108
2654
|
targetHint: "element-settings",
|
|
3109
|
-
label:
|
|
2655
|
+
label: sprintf5(
|
|
3110
2656
|
/* translators: %s: global font title. */
|
|
3111
|
-
|
|
2657
|
+
__36('replace hardcoded typography with "%s" global font', "elementor"),
|
|
3112
2658
|
global.title
|
|
3113
2659
|
)
|
|
3114
2660
|
});
|
|
@@ -3119,15 +2665,15 @@ var audit19 = {
|
|
|
3119
2665
|
};
|
|
3120
2666
|
|
|
3121
2667
|
// src/audits/privacy-policy.ts
|
|
3122
|
-
import { __ as
|
|
2668
|
+
import { __ as __37 } from "@wordpress/i18n";
|
|
3123
2669
|
var audit20 = {
|
|
3124
2670
|
id: "audits/privacy-policy",
|
|
3125
|
-
title:
|
|
3126
|
-
description:
|
|
2671
|
+
title: __37("Privacy policy", "elementor"),
|
|
2672
|
+
description: __37(
|
|
3127
2673
|
"A privacy policy page is required by privacy regulations such as GDPR (EU) and CCPA (US).",
|
|
3128
2674
|
"elementor"
|
|
3129
2675
|
),
|
|
3130
|
-
fixHint:
|
|
2676
|
+
fixHint: __37(
|
|
3131
2677
|
"Go to Settings > Privacy in the WordPress admin and assign a published privacy policy page.",
|
|
3132
2678
|
"elementor"
|
|
3133
2679
|
),
|
|
@@ -3143,9 +2689,9 @@ var audit20 = {
|
|
|
3143
2689
|
violations: [
|
|
3144
2690
|
{
|
|
3145
2691
|
auditId: audit20.id,
|
|
3146
|
-
label:
|
|
2692
|
+
label: __37("No privacy policy page is set.", "elementor"),
|
|
3147
2693
|
externalUrl: ctx.pageContext.privacy_settings_url,
|
|
3148
|
-
ctaLabel:
|
|
2694
|
+
ctaLabel: __37("Create", "elementor")
|
|
3149
2695
|
}
|
|
3150
2696
|
]
|
|
3151
2697
|
};
|
|
@@ -3153,15 +2699,15 @@ var audit20 = {
|
|
|
3153
2699
|
};
|
|
3154
2700
|
|
|
3155
2701
|
// src/audits/robots-noindex.ts
|
|
3156
|
-
import { __ as
|
|
2702
|
+
import { __ as __38 } from "@wordpress/i18n";
|
|
3157
2703
|
var audit21 = {
|
|
3158
2704
|
id: "audits/robots-noindex",
|
|
3159
|
-
title:
|
|
3160
|
-
description:
|
|
2705
|
+
title: __38("Search engine visibility", "elementor"),
|
|
2706
|
+
description: __38(
|
|
3161
2707
|
"When search engine visibility is checked in WordPress Settings -> Reading -> Search Engine Visibility, search engines are discouraged from indexing the website.",
|
|
3162
2708
|
"elementor"
|
|
3163
2709
|
),
|
|
3164
|
-
fixHint:
|
|
2710
|
+
fixHint: __38(
|
|
3165
2711
|
'Go to Settings \u2192 Reading in the WordPress admin and uncheck "Discourage search engines from indexing this site" when the website should be indexed.',
|
|
3166
2712
|
"elementor"
|
|
3167
2713
|
),
|
|
@@ -3177,7 +2723,7 @@ var audit21 = {
|
|
|
3177
2723
|
violations: [
|
|
3178
2724
|
{
|
|
3179
2725
|
auditId: audit21.id,
|
|
3180
|
-
label:
|
|
2726
|
+
label: __38("Search engines are discouraged from indexing this website.", "elementor"),
|
|
3181
2727
|
externalUrl: ctx.pageContext.reading_settings_url
|
|
3182
2728
|
}
|
|
3183
2729
|
]
|
|
@@ -3186,15 +2732,15 @@ var audit21 = {
|
|
|
3186
2732
|
};
|
|
3187
2733
|
|
|
3188
2734
|
// src/audits/scan-for-cookies.ts
|
|
3189
|
-
import { __ as
|
|
2735
|
+
import { __ as __39 } from "@wordpress/i18n";
|
|
3190
2736
|
var audit22 = {
|
|
3191
2737
|
id: "audits/scan-for-cookies",
|
|
3192
|
-
title:
|
|
3193
|
-
description:
|
|
2738
|
+
title: __39("Scan for cookies", "elementor"),
|
|
2739
|
+
description: __39(
|
|
3194
2740
|
"Your site may be setting cookies you haven't disclosed. Some countries require a banner even without a full consent policy. Scan to see what needs disclosure.",
|
|
3195
2741
|
"elementor"
|
|
3196
2742
|
),
|
|
3197
|
-
fixHint:
|
|
2743
|
+
fixHint: __39("Run a Cookiez scan on this page to see which cookies need disclosure.", "elementor"),
|
|
3198
2744
|
categories: ["compliance"],
|
|
3199
2745
|
severity: "info",
|
|
3200
2746
|
weight: 0,
|
|
@@ -3205,7 +2751,7 @@ var audit22 = {
|
|
|
3205
2751
|
violations: [
|
|
3206
2752
|
{
|
|
3207
2753
|
auditId: audit22.id,
|
|
3208
|
-
label:
|
|
2754
|
+
label: __39("This page has not been scanned for cookies yet.", "elementor"),
|
|
3209
2755
|
externalUrl: isReady ? ctx.pageContext.cookiez_scan_url : ctx.pageContext.cookiez_plugin_action_url
|
|
3210
2756
|
}
|
|
3211
2757
|
]
|
|
@@ -3214,21 +2760,21 @@ var audit22 = {
|
|
|
3214
2760
|
};
|
|
3215
2761
|
|
|
3216
2762
|
// src/audits/sections-and-columns.ts
|
|
3217
|
-
import { __ as
|
|
2763
|
+
import { __ as __40 } from "@wordpress/i18n";
|
|
3218
2764
|
var audit23 = {
|
|
3219
2765
|
id: "audits/sections-and-columns",
|
|
3220
|
-
title:
|
|
3221
|
-
description:
|
|
2766
|
+
title: __40("Sections and columns", "elementor"),
|
|
2767
|
+
description: __40(
|
|
3222
2768
|
"Sections and columns are legacy elements. Containers render fewer DOM nodes and are more flexible.",
|
|
3223
2769
|
"elementor"
|
|
3224
2770
|
),
|
|
3225
|
-
fixHint:
|
|
2771
|
+
fixHint: __40("Use the Container Converter to replace each section/column with a container.", "elementor"),
|
|
3226
2772
|
categories: ["best-practices", "performance"],
|
|
3227
2773
|
severity: "warning",
|
|
3228
2774
|
weight: 7,
|
|
3229
2775
|
evaluate: (ctx) => {
|
|
3230
2776
|
if (ctx.elements.tree.length === 0) {
|
|
3231
|
-
return { status: "skipped", reason:
|
|
2777
|
+
return { status: "skipped", reason: __40("No elements", "elementor") };
|
|
3232
2778
|
}
|
|
3233
2779
|
const violations = [];
|
|
3234
2780
|
walkElements(ctx.elements.tree, (node) => {
|
|
@@ -3236,7 +2782,7 @@ var audit23 = {
|
|
|
3236
2782
|
violations.push({
|
|
3237
2783
|
auditId: audit23.id,
|
|
3238
2784
|
elementId: node.id,
|
|
3239
|
-
label: node.elType === "section" ?
|
|
2785
|
+
label: node.elType === "section" ? __40("Section element", "elementor") : __40("Column element", "elementor")
|
|
3240
2786
|
});
|
|
3241
2787
|
}
|
|
3242
2788
|
});
|
|
@@ -3245,15 +2791,15 @@ var audit23 = {
|
|
|
3245
2791
|
};
|
|
3246
2792
|
|
|
3247
2793
|
// src/audits/site-identity.ts
|
|
3248
|
-
import { __ as
|
|
2794
|
+
import { __ as __41 } from "@wordpress/i18n";
|
|
3249
2795
|
var audit24 = {
|
|
3250
2796
|
id: "audits/site-identity",
|
|
3251
|
-
title:
|
|
3252
|
-
description:
|
|
2797
|
+
title: __41("Site identity", "elementor"),
|
|
2798
|
+
description: __41(
|
|
3253
2799
|
"Site name, description, logo, and favicon establish your brand and appear in search results and browser tabs.",
|
|
3254
2800
|
"elementor"
|
|
3255
2801
|
),
|
|
3256
|
-
fixHint:
|
|
2802
|
+
fixHint: __41("Open Site Settings \u2192 Site Identity and complete all the missing fields.", "elementor"),
|
|
3257
2803
|
categories: ["best-practices", "seo"],
|
|
3258
2804
|
severity: "info",
|
|
3259
2805
|
weight: 7,
|
|
@@ -3263,14 +2809,14 @@ var audit24 = {
|
|
|
3263
2809
|
if (!identity.site_name_set) {
|
|
3264
2810
|
violations.push({
|
|
3265
2811
|
auditId: audit24.id,
|
|
3266
|
-
label:
|
|
2812
|
+
label: __41("Site name is missing or still uses the default.", "elementor"),
|
|
3267
2813
|
targetHint: "site-identity-settings"
|
|
3268
2814
|
});
|
|
3269
2815
|
}
|
|
3270
2816
|
if (!identity.site_description_set) {
|
|
3271
2817
|
violations.push({
|
|
3272
2818
|
auditId: audit24.id,
|
|
3273
|
-
label:
|
|
2819
|
+
label: __41("Site description is missing or still uses the default.", "elementor"),
|
|
3274
2820
|
targetHint: "site-identity-settings",
|
|
3275
2821
|
angieFix: true
|
|
3276
2822
|
});
|
|
@@ -3278,14 +2824,14 @@ var audit24 = {
|
|
|
3278
2824
|
if (!identity.site_logo_set) {
|
|
3279
2825
|
violations.push({
|
|
3280
2826
|
auditId: audit24.id,
|
|
3281
|
-
label:
|
|
2827
|
+
label: __41("Site logo is not set.", "elementor"),
|
|
3282
2828
|
targetHint: "site-identity-settings"
|
|
3283
2829
|
});
|
|
3284
2830
|
}
|
|
3285
2831
|
if (!identity.site_favicon_set) {
|
|
3286
2832
|
violations.push({
|
|
3287
2833
|
auditId: audit24.id,
|
|
3288
|
-
label:
|
|
2834
|
+
label: __41("Site favicon is not set.", "elementor"),
|
|
3289
2835
|
targetHint: "site-identity-settings"
|
|
3290
2836
|
});
|
|
3291
2837
|
}
|
|
@@ -3301,7 +2847,7 @@ var audit24 = {
|
|
|
3301
2847
|
|
|
3302
2848
|
// src/audits/too-many-widgets.ts
|
|
3303
2849
|
import { getWidgetsCache as getWidgetsCache3 } from "@elementor/editor-elements";
|
|
3304
|
-
import { __ as
|
|
2850
|
+
import { __ as __42 } from "@wordpress/i18n";
|
|
3305
2851
|
var WIDGET_COUNT_THRESHOLD = 100;
|
|
3306
2852
|
function isCountableWidget(node, widgetsCache) {
|
|
3307
2853
|
if (node.elType === "widget") {
|
|
@@ -3311,15 +2857,15 @@ function isCountableWidget(node, widgetsCache) {
|
|
|
3311
2857
|
}
|
|
3312
2858
|
var audit25 = {
|
|
3313
2859
|
id: "audits/too-many-widgets",
|
|
3314
|
-
title:
|
|
3315
|
-
description:
|
|
3316
|
-
fixHint:
|
|
2860
|
+
title: __42("Too many widgets", "elementor"),
|
|
2861
|
+
description: __42("Excessive DOM size caused by too many widgets degrades rendering performance.", "elementor"),
|
|
2862
|
+
fixHint: __42("Reduce the number of widgets on the page by removing or combining elements.", "elementor"),
|
|
3317
2863
|
categories: ["best-practices", "performance"],
|
|
3318
2864
|
severity: "warning",
|
|
3319
2865
|
weight: 5,
|
|
3320
2866
|
evaluate: (ctx) => {
|
|
3321
2867
|
if (ctx.elements.tree.length === 0) {
|
|
3322
|
-
return { status: "skipped", reason:
|
|
2868
|
+
return { status: "skipped", reason: __42("No elements", "elementor") };
|
|
3323
2869
|
}
|
|
3324
2870
|
const widgetsCache = getWidgetsCache3();
|
|
3325
2871
|
let widgetCount = 0;
|
|
@@ -3336,7 +2882,7 @@ var audit25 = {
|
|
|
3336
2882
|
violations: [
|
|
3337
2883
|
{
|
|
3338
2884
|
auditId: audit25.id,
|
|
3339
|
-
label:
|
|
2885
|
+
label: __42("Page has too many widgets.", "elementor")
|
|
3340
2886
|
}
|
|
3341
2887
|
]
|
|
3342
2888
|
};
|