@elementor/editor-audits 4.4.0-1115 → 4.4.0-1117
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.js
CHANGED
|
@@ -45,17 +45,18 @@ var import_editor_app_bar = require("@elementor/editor-app-bar");
|
|
|
45
45
|
|
|
46
46
|
// src/hooks/use-audit-toggle-props.ts
|
|
47
47
|
var import_icons13 = require("@elementor/icons");
|
|
48
|
-
var
|
|
48
|
+
var import_i18n17 = require("@wordpress/i18n");
|
|
49
49
|
|
|
50
50
|
// src/editor-panel.tsx
|
|
51
51
|
var import_editor_floating_panels4 = require("@elementor/editor-floating-panels");
|
|
52
52
|
|
|
53
53
|
// src/components/audit-panel.tsx
|
|
54
|
-
var
|
|
54
|
+
var React19 = __toESM(require("react"));
|
|
55
55
|
var import_editor_elements6 = require("@elementor/editor-elements");
|
|
56
56
|
var import_editor_floating_panels3 = require("@elementor/editor-floating-panels");
|
|
57
|
-
var
|
|
58
|
-
var
|
|
57
|
+
var import_icons12 = require("@elementor/icons");
|
|
58
|
+
var import_ui18 = require("@elementor/ui");
|
|
59
|
+
var import_i18n16 = require("@wordpress/i18n");
|
|
59
60
|
|
|
60
61
|
// src/constants.ts
|
|
61
62
|
var import_i18n = require("@wordpress/i18n");
|
|
@@ -175,9 +176,6 @@ function getRegisteredAudits() {
|
|
|
175
176
|
return Array.from(registry.values());
|
|
176
177
|
}
|
|
177
178
|
|
|
178
|
-
// src/utils/audit-status-summary.ts
|
|
179
|
-
var import_i18n2 = require("@wordpress/i18n");
|
|
180
|
-
|
|
181
179
|
// src/utils/is-scored-audit.ts
|
|
182
180
|
function isScoredAudit(audit26) {
|
|
183
181
|
return audit26.weight > 0;
|
|
@@ -232,52 +230,6 @@ function partitionAuditResults(report, options = {}) {
|
|
|
232
230
|
totalViolations
|
|
233
231
|
};
|
|
234
232
|
}
|
|
235
|
-
function auditStatusDisplayCounts(report) {
|
|
236
|
-
let pass = 0;
|
|
237
|
-
let skipped = 0;
|
|
238
|
-
let totalViolations = 0;
|
|
239
|
-
for (const { audit: audit26, result } of report.auditResults) {
|
|
240
|
-
if (!isScoredAudit(audit26)) {
|
|
241
|
-
continue;
|
|
242
|
-
}
|
|
243
|
-
switch (result.status) {
|
|
244
|
-
case "fail":
|
|
245
|
-
totalViolations += result.violations.length;
|
|
246
|
-
break;
|
|
247
|
-
case "pass":
|
|
248
|
-
pass++;
|
|
249
|
-
break;
|
|
250
|
-
case "skipped":
|
|
251
|
-
skipped++;
|
|
252
|
-
break;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
return {
|
|
256
|
-
fail: totalViolations,
|
|
257
|
-
pass,
|
|
258
|
-
skipped
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
function auditStatusColor(status) {
|
|
262
|
-
switch (status) {
|
|
263
|
-
case "fail":
|
|
264
|
-
return "error";
|
|
265
|
-
case "pass":
|
|
266
|
-
return "success";
|
|
267
|
-
case "skipped":
|
|
268
|
-
return "default";
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
function auditStatusLabel(status) {
|
|
272
|
-
switch (status) {
|
|
273
|
-
case "fail":
|
|
274
|
-
return (0, import_i18n2.__)("Failed audits", "elementor");
|
|
275
|
-
case "pass":
|
|
276
|
-
return (0, import_i18n2.__)("Passed audits", "elementor");
|
|
277
|
-
case "skipped":
|
|
278
|
-
return (0, import_i18n2.__)("Skipped audits", "elementor");
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
233
|
function getPopulatedCategories(categoryTotals, categories) {
|
|
282
234
|
return categories.filter((category) => categoryTotals[category].total > 0);
|
|
283
235
|
}
|
|
@@ -729,9 +681,9 @@ var import_events = require("@elementor/events");
|
|
|
729
681
|
var import_http_client2 = require("@elementor/http-client");
|
|
730
682
|
var import_icons = require("@elementor/icons");
|
|
731
683
|
var import_ui = require("@elementor/ui");
|
|
732
|
-
var
|
|
684
|
+
var import_i18n2 = require("@wordpress/i18n");
|
|
733
685
|
var FEEDBACK_SUBJECT = "Page Audit Tool";
|
|
734
|
-
var FEEDBACK_SUBJECT_LABEL = (0,
|
|
686
|
+
var FEEDBACK_SUBJECT_LABEL = (0, import_i18n2.__)("Page Audit Tool", "elementor");
|
|
735
687
|
var SUCCESS_NOTIFICATION_ID = "audit-feedback-success";
|
|
736
688
|
var ERROR_NOTIFICATION_ID = "audit-feedback-error";
|
|
737
689
|
var DIALOG_TITLE_ID = "audit-feedback-dialog-title";
|
|
@@ -740,12 +692,12 @@ var isUserConnected = () => Boolean(window.elementorCommon?.config?.library_conn
|
|
|
740
692
|
var notifySuccess = () => (0, import_editor_notifications.notify)({
|
|
741
693
|
id: SUCCESS_NOTIFICATION_ID,
|
|
742
694
|
type: "success",
|
|
743
|
-
message: (0,
|
|
695
|
+
message: (0, import_i18n2.__)("Feedback sent. Thanks for helping us out.", "elementor")
|
|
744
696
|
});
|
|
745
697
|
var notifyError = () => (0, import_editor_notifications.notify)({
|
|
746
698
|
id: ERROR_NOTIFICATION_ID,
|
|
747
699
|
type: "error",
|
|
748
|
-
message: (0,
|
|
700
|
+
message: (0, import_i18n2.__)("Something went wrong. Please try sending your feedback again.", "elementor")
|
|
749
701
|
});
|
|
750
702
|
function AuditFeedback() {
|
|
751
703
|
const [isOpen, setIsOpen] = (0, import_react2.useState)(false);
|
|
@@ -761,7 +713,7 @@ function AuditFeedback() {
|
|
|
761
713
|
if (!connected && !connectUrl) {
|
|
762
714
|
return null;
|
|
763
715
|
}
|
|
764
|
-
const triggerLabel = (0,
|
|
716
|
+
const triggerLabel = (0, import_i18n2.__)("Give feedback", "elementor");
|
|
765
717
|
const handleOpen = () => {
|
|
766
718
|
if (!connected) {
|
|
767
719
|
window.open(connectUrl, "_blank", "noopener");
|
|
@@ -803,11 +755,11 @@ function AuditFeedback() {
|
|
|
803
755
|
"aria-describedby": DIALOG_DESCRIPTION_ID,
|
|
804
756
|
PaperProps: { sx: { borderRadius: 1 } }
|
|
805
757
|
},
|
|
806
|
-
/* @__PURE__ */ React.createElement(import_ui.DialogHeader, { logo: false, onClose: handleClose }, /* @__PURE__ */ React.createElement(import_ui.DialogTitle, { id: DIALOG_TITLE_ID }, (0,
|
|
758
|
+
/* @__PURE__ */ React.createElement(import_ui.DialogHeader, { logo: false, onClose: handleClose }, /* @__PURE__ */ React.createElement(import_ui.DialogTitle, { id: DIALOG_TITLE_ID }, (0, import_i18n2.__)("Let us know what you think", "elementor"))),
|
|
807
759
|
/* @__PURE__ */ React.createElement(import_ui.DialogContent, { dividers: true }, /* @__PURE__ */ React.createElement(import_ui.Stack, { direction: "column", gap: 2 }, /* @__PURE__ */ React.createElement(import_ui.TextField, { value: FEEDBACK_SUBJECT_LABEL, disabled: true, fullWidth: true, size: "small" }), /* @__PURE__ */ React.createElement(
|
|
808
760
|
import_ui.TextField,
|
|
809
761
|
{
|
|
810
|
-
placeholder: (0,
|
|
762
|
+
placeholder: (0, import_i18n2.__)(
|
|
811
763
|
"Tell us what you had in mind, what we can improve or fix to make this feature better.",
|
|
812
764
|
"elementor"
|
|
813
765
|
),
|
|
@@ -818,11 +770,11 @@ function AuditFeedback() {
|
|
|
818
770
|
onChange: (event) => setFeedbackText(event.target.value),
|
|
819
771
|
value: feedbackText
|
|
820
772
|
}
|
|
821
|
-
), /* @__PURE__ */ React.createElement(import_ui.Typography, { id: DIALOG_DESCRIPTION_ID, variant: "caption", color: "text.secondary" }, (0,
|
|
773
|
+
), /* @__PURE__ */ React.createElement(import_ui.Typography, { id: DIALOG_DESCRIPTION_ID, variant: "caption", color: "text.secondary" }, (0, import_i18n2.__)(
|
|
822
774
|
"We appreciate your feedback! While we review all submissions, we can't guarantee that every suggestion will result in a change or update.",
|
|
823
775
|
"elementor"
|
|
824
776
|
)))),
|
|
825
|
-
/* @__PURE__ */ React.createElement(import_ui.DialogActions, null, /* @__PURE__ */ React.createElement(import_ui.Button, { variant: "text", color: "secondary", onClick: handleCancel }, (0,
|
|
777
|
+
/* @__PURE__ */ React.createElement(import_ui.DialogActions, null, /* @__PURE__ */ React.createElement(import_ui.Button, { variant: "text", color: "secondary", onClick: handleCancel }, (0, import_i18n2.__)("Cancel", "elementor")), /* @__PURE__ */ React.createElement(
|
|
826
778
|
import_ui.Button,
|
|
827
779
|
{
|
|
828
780
|
variant: "contained",
|
|
@@ -830,7 +782,7 @@ function AuditFeedback() {
|
|
|
830
782
|
disabled: isSubmitting || feedbackText.trim().length === 0,
|
|
831
783
|
onClick: handleSubmit
|
|
832
784
|
},
|
|
833
|
-
(0,
|
|
785
|
+
(0, import_i18n2.__)("Send", "elementor")
|
|
834
786
|
))
|
|
835
787
|
));
|
|
836
788
|
}
|
|
@@ -838,23 +790,23 @@ function AuditFeedback() {
|
|
|
838
790
|
// src/components/pages/error-page.tsx
|
|
839
791
|
var React2 = __toESM(require("react"));
|
|
840
792
|
var import_ui2 = require("@elementor/ui");
|
|
841
|
-
var
|
|
793
|
+
var import_i18n3 = require("@wordpress/i18n");
|
|
842
794
|
function ErrorPage({ message, onRetry }) {
|
|
843
|
-
return /* @__PURE__ */ React2.createElement(import_ui2.Box, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React2.createElement(import_ui2.Typography, { variant: "body2", color: "error", textAlign: "center" }, message), /* @__PURE__ */ React2.createElement(import_ui2.Button, { variant: "contained", size: "small", onClick: onRetry }, (0,
|
|
795
|
+
return /* @__PURE__ */ React2.createElement(import_ui2.Box, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React2.createElement(import_ui2.Typography, { variant: "body2", color: "error", textAlign: "center" }, message), /* @__PURE__ */ React2.createElement(import_ui2.Button, { variant: "contained", size: "small", onClick: onRetry }, (0, import_i18n3.__)("Try again", "elementor")));
|
|
844
796
|
}
|
|
845
797
|
|
|
846
798
|
// src/components/pages/loading-page.tsx
|
|
847
799
|
var React3 = __toESM(require("react"));
|
|
848
800
|
var import_ui3 = require("@elementor/ui");
|
|
849
|
-
var
|
|
801
|
+
var import_i18n4 = require("@wordpress/i18n");
|
|
850
802
|
function LoadingPage() {
|
|
851
|
-
return /* @__PURE__ */ React3.createElement(import_ui3.Box, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React3.createElement(import_ui3.CircularProgress, { size: 32 }), /* @__PURE__ */ React3.createElement(import_ui3.Typography, { variant: "body2" }, (0,
|
|
803
|
+
return /* @__PURE__ */ React3.createElement(import_ui3.Box, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React3.createElement(import_ui3.CircularProgress, { size: 32 }), /* @__PURE__ */ React3.createElement(import_ui3.Typography, { variant: "body2" }, (0, import_i18n4.__)("Audit in progress.", "elementor")));
|
|
852
804
|
}
|
|
853
805
|
|
|
854
806
|
// src/components/pages/welcome-page.tsx
|
|
855
807
|
var React4 = __toESM(require("react"));
|
|
856
808
|
var import_ui4 = require("@elementor/ui");
|
|
857
|
-
var
|
|
809
|
+
var import_i18n5 = require("@wordpress/i18n");
|
|
858
810
|
var INFORMATION_IMAGE_PATH = "images/information.svg";
|
|
859
811
|
function WelcomePage() {
|
|
860
812
|
const assetsUrl = window.elementorCommon?.config?.urls?.assets ?? "";
|
|
@@ -876,11 +828,11 @@ function WelcomePage() {
|
|
|
876
828
|
className: "elementor-nerd-box-icon",
|
|
877
829
|
src: `${assetsUrl}${INFORMATION_IMAGE_PATH}`,
|
|
878
830
|
loading: "lazy",
|
|
879
|
-
alt: (0,
|
|
831
|
+
alt: (0, import_i18n5.__)("Elementor", "elementor")
|
|
880
832
|
}
|
|
881
833
|
),
|
|
882
|
-
/* @__PURE__ */ React4.createElement(import_ui4.Typography, { variant: "subtitle1", component: "h3", sx: { marginBlockStart: 2 } }, (0,
|
|
883
|
-
/* @__PURE__ */ React4.createElement(import_ui4.Typography, { variant: "caption", textAlign: "center" }, (0,
|
|
834
|
+
/* @__PURE__ */ React4.createElement(import_ui4.Typography, { variant: "subtitle1", component: "h3", sx: { marginBlockStart: 2 } }, (0, import_i18n5.__)("Audit your page!", "elementor")),
|
|
835
|
+
/* @__PURE__ */ React4.createElement(import_ui4.Typography, { variant: "caption", textAlign: "center" }, (0, import_i18n5.__)(
|
|
884
836
|
'Check SEO, accessibility, performance, and best practices. Click "Run page audit" to begin.',
|
|
885
837
|
"elementor"
|
|
886
838
|
))
|
|
@@ -888,15 +840,14 @@ function WelcomePage() {
|
|
|
888
840
|
}
|
|
889
841
|
|
|
890
842
|
// src/components/report-shell.tsx
|
|
891
|
-
var
|
|
892
|
-
var
|
|
893
|
-
var
|
|
894
|
-
var import_i18n22 = require("@wordpress/i18n");
|
|
843
|
+
var React18 = __toESM(require("react"));
|
|
844
|
+
var import_react5 = require("react");
|
|
845
|
+
var import_ui17 = require("@elementor/ui");
|
|
895
846
|
|
|
896
|
-
// src/components/pages/
|
|
847
|
+
// src/components/pages/category-page.tsx
|
|
897
848
|
var React12 = __toESM(require("react"));
|
|
898
849
|
var import_ui11 = require("@elementor/ui");
|
|
899
|
-
var
|
|
850
|
+
var import_i18n11 = require("@wordpress/i18n");
|
|
900
851
|
|
|
901
852
|
// src/hooks/use-single-expanded-card.ts
|
|
902
853
|
var import_react3 = require("react");
|
|
@@ -908,12 +859,22 @@ function useSingleExpandedCard(initialId = null) {
|
|
|
908
859
|
return { expandedId, toggle };
|
|
909
860
|
}
|
|
910
861
|
|
|
862
|
+
// src/components/category-icons.ts
|
|
863
|
+
var import_icons2 = require("@elementor/icons");
|
|
864
|
+
var CATEGORY_ICONS = {
|
|
865
|
+
"best-practices": import_icons2.Settings2Icon,
|
|
866
|
+
seo: import_icons2.FileSearchIcon,
|
|
867
|
+
accessibility: import_icons2.ElementorAccessibilityIcon,
|
|
868
|
+
performance: import_icons2.BoltIcon,
|
|
869
|
+
compliance: import_icons2.ShieldCheckIcon
|
|
870
|
+
};
|
|
871
|
+
|
|
911
872
|
// src/components/status-section.tsx
|
|
912
873
|
var React5 = __toESM(require("react"));
|
|
913
874
|
var import_react4 = require("react");
|
|
914
|
-
var
|
|
875
|
+
var import_icons3 = require("@elementor/icons");
|
|
915
876
|
var import_ui5 = require("@elementor/ui");
|
|
916
|
-
var
|
|
877
|
+
var import_i18n6 = require("@wordpress/i18n");
|
|
917
878
|
function StatusSection({ label, count, color = "default", defaultExpanded = false, children }) {
|
|
918
879
|
const [expanded, setExpanded] = (0, import_react4.useState)(defaultExpanded);
|
|
919
880
|
if (React5.Children.count(children) === 0) {
|
|
@@ -929,10 +890,10 @@ function StatusSection({ label, count, color = "default", defaultExpanded = fals
|
|
|
929
890
|
import_ui5.IconButton,
|
|
930
891
|
{
|
|
931
892
|
size: "small",
|
|
932
|
-
"aria-label": expanded ? (0,
|
|
893
|
+
"aria-label": expanded ? (0, import_i18n6.__)("Collapse", "elementor") : (0, import_i18n6.__)("Expand", "elementor")
|
|
933
894
|
},
|
|
934
895
|
/* @__PURE__ */ React5.createElement(
|
|
935
|
-
|
|
896
|
+
import_icons3.ChevronDownIcon,
|
|
936
897
|
{
|
|
937
898
|
fontSize: "small",
|
|
938
899
|
sx: {
|
|
@@ -948,21 +909,21 @@ function StatusSection({ label, count, color = "default", defaultExpanded = fals
|
|
|
948
909
|
|
|
949
910
|
// src/components/subpage-header.tsx
|
|
950
911
|
var React6 = __toESM(require("react"));
|
|
951
|
-
var
|
|
912
|
+
var import_icons4 = require("@elementor/icons");
|
|
952
913
|
var import_ui6 = require("@elementor/ui");
|
|
953
|
-
var
|
|
914
|
+
var import_i18n7 = require("@wordpress/i18n");
|
|
954
915
|
function SubpageHeader({ title, onBack, backLabel, icon }) {
|
|
955
916
|
const isRtl = "rtl" === (0, import_ui6.useTheme)().direction;
|
|
956
|
-
return /* @__PURE__ */ React6.createElement(import_ui6.Box, { sx: { display: "flex", alignItems: "center", gap: 0.5, p: 1 } }, /* @__PURE__ */ React6.createElement(import_ui6.IconButton, { size: "small", onClick: onBack, "aria-label": backLabel ?? (0,
|
|
917
|
+
return /* @__PURE__ */ React6.createElement(import_ui6.Box, { sx: { display: "flex", alignItems: "center", gap: 0.5, p: 1 } }, /* @__PURE__ */ React6.createElement(import_ui6.IconButton, { size: "small", onClick: onBack, "aria-label": backLabel ?? (0, import_i18n7.__)("Back", "elementor") }, /* @__PURE__ */ React6.createElement(import_ui6.Rotate, { in: isRtl }, /* @__PURE__ */ React6.createElement(import_icons4.ArrowLeftIcon, { fontSize: "small" }))), icon, /* @__PURE__ */ React6.createElement(import_ui6.Typography, { variant: "subtitle2", fontWeight: "bold" }, title));
|
|
957
918
|
}
|
|
958
919
|
|
|
959
920
|
// src/components/violation-row.tsx
|
|
960
921
|
var React11 = __toESM(require("react"));
|
|
961
922
|
var import_editor_elements5 = require("@elementor/editor-elements");
|
|
962
923
|
var import_editor_floating_panels2 = require("@elementor/editor-floating-panels");
|
|
963
|
-
var
|
|
924
|
+
var import_icons9 = require("@elementor/icons");
|
|
964
925
|
var import_ui10 = require("@elementor/ui");
|
|
965
|
-
var
|
|
926
|
+
var import_i18n10 = require("@wordpress/i18n");
|
|
966
927
|
|
|
967
928
|
// src/hooks/focus-violation.ts
|
|
968
929
|
var import_editor_elements4 = require("@elementor/editor-elements");
|
|
@@ -1003,11 +964,11 @@ function focusViolation(violation) {
|
|
|
1003
964
|
}
|
|
1004
965
|
|
|
1005
966
|
// src/utils/build-angie-prompt.ts
|
|
1006
|
-
var
|
|
967
|
+
var import_i18n8 = require("@wordpress/i18n");
|
|
1007
968
|
function buildAngiePrompt(violationText) {
|
|
1008
|
-
return (0,
|
|
969
|
+
return (0, import_i18n8.sprintf)(
|
|
1009
970
|
/* translators: %s: audit violation description. */
|
|
1010
|
-
(0,
|
|
971
|
+
(0, import_i18n8.__)("Help me fix: %s", "elementor"),
|
|
1011
972
|
violationText
|
|
1012
973
|
);
|
|
1013
974
|
}
|
|
@@ -1025,11 +986,11 @@ function onKeyboardClick(callback) {
|
|
|
1025
986
|
// src/components/fix-violation-with-angie.tsx
|
|
1026
987
|
var React7 = __toESM(require("react"));
|
|
1027
988
|
var import_editor_mcp = require("@elementor/editor-mcp");
|
|
1028
|
-
var
|
|
989
|
+
var import_icons5 = require("@elementor/icons");
|
|
1029
990
|
var import_ui7 = require("@elementor/ui");
|
|
1030
|
-
var
|
|
991
|
+
var import_i18n9 = require("@wordpress/i18n");
|
|
1031
992
|
function FixViolationWithAngie({ prompt, panelZIndex }) {
|
|
1032
|
-
const label = (0,
|
|
993
|
+
const label = (0, import_i18n9.__)("Fix with Angie", "elementor");
|
|
1033
994
|
const href = `#angie-prompt=${encodeURIComponent(prompt)}`;
|
|
1034
995
|
const handleClick = (event) => {
|
|
1035
996
|
event.stopPropagation();
|
|
@@ -1047,16 +1008,16 @@ function FixViolationWithAngie({ prompt, panelZIndex }) {
|
|
|
1047
1008
|
})
|
|
1048
1009
|
);
|
|
1049
1010
|
};
|
|
1050
|
-
return /* @__PURE__ */ React7.createElement(import_ui7.Tooltip, { title: label, placement: "top", PopperProps: { sx: { zIndex: panelZIndex } } }, /* @__PURE__ */ React7.createElement(import_ui7.IconButton, { component: "a", href, size: "small", "aria-label": label, onClick: handleClick }, /* @__PURE__ */ React7.createElement(
|
|
1011
|
+
return /* @__PURE__ */ React7.createElement(import_ui7.Tooltip, { title: label, placement: "top", PopperProps: { sx: { zIndex: panelZIndex } } }, /* @__PURE__ */ React7.createElement(import_ui7.IconButton, { component: "a", href, size: "small", "aria-label": label, onClick: handleClick }, /* @__PURE__ */ React7.createElement(import_icons5.AngieIcon, { fontSize: "tiny" })));
|
|
1051
1012
|
}
|
|
1052
1013
|
|
|
1053
1014
|
// src/components/severity-icons.tsx
|
|
1054
1015
|
var React8 = __toESM(require("react"));
|
|
1055
|
-
var
|
|
1016
|
+
var import_icons6 = require("@elementor/icons");
|
|
1056
1017
|
var SEVERITY_CONFIG = {
|
|
1057
|
-
error: { Icon:
|
|
1058
|
-
warning: { Icon:
|
|
1059
|
-
info: { Icon:
|
|
1018
|
+
error: { Icon: import_icons6.AlertTriangleFilledIcon, color: "error" },
|
|
1019
|
+
warning: { Icon: import_icons6.AlertCircleIcon, color: "warning" },
|
|
1020
|
+
info: { Icon: import_icons6.BulbIcon, color: "info" }
|
|
1060
1021
|
};
|
|
1061
1022
|
function SeverityIcon({ severity }) {
|
|
1062
1023
|
const { Icon, color } = SEVERITY_CONFIG[severity];
|
|
@@ -1065,7 +1026,7 @@ function SeverityIcon({ severity }) {
|
|
|
1065
1026
|
|
|
1066
1027
|
// src/components/violation-cta-button.tsx
|
|
1067
1028
|
var React9 = __toESM(require("react"));
|
|
1068
|
-
var
|
|
1029
|
+
var import_icons7 = require("@elementor/icons");
|
|
1069
1030
|
var import_ui8 = require("@elementor/ui");
|
|
1070
1031
|
function ViolationCtaButton({ ctaLabel, externalUrl, variant = "outlined", withIcon = false }) {
|
|
1071
1032
|
const handleClick = (event) => {
|
|
@@ -1079,7 +1040,7 @@ function ViolationCtaButton({ ctaLabel, externalUrl, variant = "outlined", withI
|
|
|
1079
1040
|
variant,
|
|
1080
1041
|
color: "secondary",
|
|
1081
1042
|
size: "small",
|
|
1082
|
-
startIcon: withIcon ? /* @__PURE__ */ React9.createElement(
|
|
1043
|
+
startIcon: withIcon ? /* @__PURE__ */ React9.createElement(import_icons7.WandIcon, { fontSize: "tiny", "aria-hidden": true }) : void 0,
|
|
1083
1044
|
onClick: handleClick
|
|
1084
1045
|
},
|
|
1085
1046
|
ctaLabel
|
|
@@ -1088,7 +1049,7 @@ function ViolationCtaButton({ ctaLabel, externalUrl, variant = "outlined", withI
|
|
|
1088
1049
|
|
|
1089
1050
|
// src/components/violation-icons.tsx
|
|
1090
1051
|
var React10 = __toESM(require("react"));
|
|
1091
|
-
var
|
|
1052
|
+
var import_icons8 = require("@elementor/icons");
|
|
1092
1053
|
var import_ui9 = require("@elementor/ui");
|
|
1093
1054
|
function ViolationIcon({ violation, widgetIcon }) {
|
|
1094
1055
|
if (widgetIcon) {
|
|
@@ -1103,30 +1064,30 @@ function ViolationIcon({ violation, widgetIcon }) {
|
|
|
1103
1064
|
);
|
|
1104
1065
|
}
|
|
1105
1066
|
if (violation.targetHint === "page-settings") {
|
|
1106
|
-
return /* @__PURE__ */ React10.createElement(
|
|
1067
|
+
return /* @__PURE__ */ React10.createElement(import_icons8.FileSettingsIcon, { fontSize: "inherit", "aria-hidden": true });
|
|
1107
1068
|
}
|
|
1108
1069
|
if (violation.targetHint === "site-settings" || violation.targetHint === "site-identity-settings") {
|
|
1109
|
-
return /* @__PURE__ */ React10.createElement(
|
|
1070
|
+
return /* @__PURE__ */ React10.createElement(import_icons8.SettingsIcon, { fontSize: "inherit", "aria-hidden": true });
|
|
1110
1071
|
}
|
|
1111
|
-
return /* @__PURE__ */ React10.createElement(
|
|
1072
|
+
return /* @__PURE__ */ React10.createElement(import_icons8.SettingsIcon, { fontSize: "inherit", "aria-hidden": true });
|
|
1112
1073
|
}
|
|
1113
1074
|
|
|
1114
1075
|
// src/components/violation-row.tsx
|
|
1115
1076
|
function SkipReasonTooltip({ reason }) {
|
|
1116
|
-
return /* @__PURE__ */ React11.createElement(import_ui10.Tooltip, { title: reason, placement: "top" }, /* @__PURE__ */ React11.createElement(import_ui10.Box, { "aria-label": reason, component: "span", sx: { display: "inline-flex", alignItems: "center" } }, /* @__PURE__ */ React11.createElement(
|
|
1077
|
+
return /* @__PURE__ */ React11.createElement(import_ui10.Tooltip, { title: reason, placement: "top" }, /* @__PURE__ */ React11.createElement(import_ui10.Box, { "aria-label": reason, component: "span", sx: { display: "inline-flex", alignItems: "center" } }, /* @__PURE__ */ React11.createElement(import_icons9.HelpIcon, { fontSize: "small", color: "action" })));
|
|
1117
1078
|
}
|
|
1118
1079
|
function StatusIndicator({ audit: audit26, violations }) {
|
|
1119
1080
|
if (violations) {
|
|
1120
1081
|
return /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement(SeverityIcon, { severity: audit26.severity }), isScoredAudit(audit26) && /* @__PURE__ */ React11.createElement(import_ui10.Typography, { variant: "caption", color: "text.secondary", fontWeight: "bold" }, violations.length));
|
|
1121
1082
|
}
|
|
1122
|
-
return /* @__PURE__ */ React11.createElement(
|
|
1083
|
+
return /* @__PURE__ */ React11.createElement(import_icons9.CheckIcon, { fontSize: "small", color: "success" });
|
|
1123
1084
|
}
|
|
1124
1085
|
function GuidanceAction({ violation }) {
|
|
1125
1086
|
const hasPrimaryCta = !!(violation.ctaLabel && violation.externalUrl);
|
|
1126
1087
|
if (!hasPrimaryCta) {
|
|
1127
1088
|
return null;
|
|
1128
1089
|
}
|
|
1129
|
-
return /* @__PURE__ */ React11.createElement(import_ui10.Box, {
|
|
1090
|
+
return /* @__PURE__ */ React11.createElement(import_ui10.Box, { display: "flex", alignItems: "center", gap: 1, mt: 1 }, /* @__PURE__ */ React11.createElement(
|
|
1130
1091
|
ViolationCtaButton,
|
|
1131
1092
|
{
|
|
1132
1093
|
ctaLabel: violation.ctaLabel,
|
|
@@ -1170,11 +1131,11 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
|
|
|
1170
1131
|
import_ui10.IconButton,
|
|
1171
1132
|
{
|
|
1172
1133
|
size: "small",
|
|
1173
|
-
"aria-label": expanded ? (0,
|
|
1134
|
+
"aria-label": expanded ? (0, import_i18n10.__)("Collapse", "elementor") : (0, import_i18n10.__)("Expand", "elementor"),
|
|
1174
1135
|
onClick: onToggleExpand
|
|
1175
1136
|
},
|
|
1176
1137
|
/* @__PURE__ */ React11.createElement(
|
|
1177
|
-
|
|
1138
|
+
import_icons9.ChevronDownIcon,
|
|
1178
1139
|
{
|
|
1179
1140
|
fontSize: "small",
|
|
1180
1141
|
sx: {
|
|
@@ -1183,19 +1144,20 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
|
|
|
1183
1144
|
}
|
|
1184
1145
|
}
|
|
1185
1146
|
)
|
|
1186
|
-
)), /* @__PURE__ */ React11.createElement(import_ui10.Collapse, { in: expanded }, /* @__PURE__ */ React11.createElement(import_ui10.Box, {
|
|
1147
|
+
)), /* @__PURE__ */ React11.createElement(import_ui10.Collapse, { in: expanded }, /* @__PURE__ */ React11.createElement(import_ui10.Box, { paddingBlock: 1 }, /* @__PURE__ */ React11.createElement(import_ui10.Tooltip, { title: audit26.fixHint, placement: "top" }, /* @__PURE__ */ React11.createElement(
|
|
1187
1148
|
import_ui10.Alert,
|
|
1188
1149
|
{
|
|
1189
1150
|
severity: "secondary",
|
|
1190
1151
|
sx: { p: 1, cursor: isGuidanceFocusable ? "pointer" : void 0 },
|
|
1191
|
-
icon: /* @__PURE__ */ React11.createElement(
|
|
1152
|
+
icon: /* @__PURE__ */ React11.createElement(import_icons9.InfoCircleIcon, { fontSize: "small", "aria-hidden": true }),
|
|
1192
1153
|
role: isGuidanceFocusable ? "button" : void 0,
|
|
1193
1154
|
tabIndex: isGuidanceFocusable ? 0 : void 0,
|
|
1194
1155
|
onClick: isGuidanceFocusable ? handleGuidanceClick : void 0,
|
|
1195
1156
|
onKeyDown: isGuidanceFocusable ? onKeyboardClick(handleGuidanceClick) : void 0
|
|
1196
1157
|
},
|
|
1197
|
-
/* @__PURE__ */ React11.createElement(import_ui10.Typography, { variant: "caption", component: "p", color: "text.secondary" }, audit26.description)
|
|
1198
|
-
|
|
1158
|
+
/* @__PURE__ */ React11.createElement(import_ui10.Typography, { variant: "caption", component: "p", color: "text.secondary" }, audit26.description),
|
|
1159
|
+
primaryViolation && /* @__PURE__ */ React11.createElement(GuidanceAction, { violation: primaryViolation })
|
|
1160
|
+
))), violations && violations.length > 0 && /* @__PURE__ */ React11.createElement(import_ui10.Box, { role: "list", sx: { paddingBlockEnd: 1 } }, violations.map((violation, idx) => {
|
|
1199
1161
|
const widgetIcon = violation.elementId ? (0, import_editor_elements5.getElementIcon)(violation.elementId) : null;
|
|
1200
1162
|
const elementTitle = violation.elementId ? (0, import_editor_elements5.getElementTitle)(violation.elementId) : null;
|
|
1201
1163
|
const rowLabel = elementTitle ? `${elementTitle} - ${violation.label}` : violation.label;
|
|
@@ -1226,111 +1188,33 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
|
|
|
1226
1188
|
prompt: violation.angiePrompt ?? buildAngiePrompt(rowLabel),
|
|
1227
1189
|
panelZIndex
|
|
1228
1190
|
}
|
|
1229
|
-
) : /* @__PURE__ */ React11.createElement(
|
|
1191
|
+
) : /* @__PURE__ */ React11.createElement(import_icons9.WandIcon, { fontSize: "tiny", "aria-hidden": true })
|
|
1230
1192
|
);
|
|
1231
1193
|
}))));
|
|
1232
1194
|
}
|
|
1233
1195
|
|
|
1234
|
-
// src/components/pages/all-audits-page.tsx
|
|
1235
|
-
function AllAuditsPage({ initialExpandedStatus, onBack, report }) {
|
|
1236
|
-
const { failed, passed, skipped, totalViolations } = partitionAuditResults(report);
|
|
1237
|
-
const expandFail = !initialExpandedStatus || initialExpandedStatus === "fail";
|
|
1238
|
-
const expandPass = initialExpandedStatus === "pass";
|
|
1239
|
-
const expandSkipped = initialExpandedStatus === "skipped";
|
|
1240
|
-
const { expandedId, toggle } = useSingleExpandedCard();
|
|
1241
|
-
return /* @__PURE__ */ React12.createElement(import_ui11.Box, { key: initialExpandedStatus ?? "default" }, /* @__PURE__ */ React12.createElement(SubpageHeader, { title: (0, import_i18n12.__)("All audits", "elementor"), onBack }), /* @__PURE__ */ React12.createElement(import_ui11.Box, { sx: { p: 1 } }, /* @__PURE__ */ React12.createElement(
|
|
1242
|
-
StatusSection,
|
|
1243
|
-
{
|
|
1244
|
-
label: auditStatusLabel("fail"),
|
|
1245
|
-
count: totalViolations,
|
|
1246
|
-
color: auditStatusColor("fail"),
|
|
1247
|
-
defaultExpanded: expandFail
|
|
1248
|
-
},
|
|
1249
|
-
failed.map((r) => /* @__PURE__ */ React12.createElement(
|
|
1250
|
-
ViolationRow,
|
|
1251
|
-
{
|
|
1252
|
-
key: r.audit.id,
|
|
1253
|
-
audit: r.audit,
|
|
1254
|
-
violations: r.result.violations,
|
|
1255
|
-
expanded: expandedId === r.audit.id,
|
|
1256
|
-
onToggleExpand: () => toggle(r.audit.id)
|
|
1257
|
-
}
|
|
1258
|
-
))
|
|
1259
|
-
), /* @__PURE__ */ React12.createElement(
|
|
1260
|
-
StatusSection,
|
|
1261
|
-
{
|
|
1262
|
-
label: auditStatusLabel("pass"),
|
|
1263
|
-
count: passed.length,
|
|
1264
|
-
color: auditStatusColor("pass"),
|
|
1265
|
-
defaultExpanded: expandPass
|
|
1266
|
-
},
|
|
1267
|
-
passed.map((r) => /* @__PURE__ */ React12.createElement(
|
|
1268
|
-
ViolationRow,
|
|
1269
|
-
{
|
|
1270
|
-
key: r.audit.id,
|
|
1271
|
-
audit: r.audit,
|
|
1272
|
-
expanded: expandedId === r.audit.id,
|
|
1273
|
-
onToggleExpand: () => toggle(r.audit.id)
|
|
1274
|
-
}
|
|
1275
|
-
))
|
|
1276
|
-
), /* @__PURE__ */ React12.createElement(
|
|
1277
|
-
StatusSection,
|
|
1278
|
-
{
|
|
1279
|
-
label: auditStatusLabel("skipped"),
|
|
1280
|
-
count: skipped.length,
|
|
1281
|
-
color: auditStatusColor("skipped"),
|
|
1282
|
-
defaultExpanded: expandSkipped
|
|
1283
|
-
},
|
|
1284
|
-
skipped.map((r) => /* @__PURE__ */ React12.createElement(
|
|
1285
|
-
ViolationRow,
|
|
1286
|
-
{
|
|
1287
|
-
key: r.audit.id,
|
|
1288
|
-
audit: r.audit,
|
|
1289
|
-
skipReason: r.result.reason,
|
|
1290
|
-
expanded: expandedId === r.audit.id,
|
|
1291
|
-
onToggleExpand: () => toggle(r.audit.id)
|
|
1292
|
-
}
|
|
1293
|
-
))
|
|
1294
|
-
)));
|
|
1295
|
-
}
|
|
1296
|
-
|
|
1297
|
-
// src/components/pages/category-page.tsx
|
|
1298
|
-
var React13 = __toESM(require("react"));
|
|
1299
|
-
var import_ui12 = require("@elementor/ui");
|
|
1300
|
-
var import_i18n13 = require("@wordpress/i18n");
|
|
1301
|
-
|
|
1302
|
-
// src/components/category-icons.ts
|
|
1303
|
-
var import_icons9 = require("@elementor/icons");
|
|
1304
|
-
var CATEGORY_ICONS = {
|
|
1305
|
-
"best-practices": import_icons9.Settings2Icon,
|
|
1306
|
-
seo: import_icons9.FileSearchIcon,
|
|
1307
|
-
accessibility: import_icons9.ElementorAccessibilityIcon,
|
|
1308
|
-
performance: import_icons9.BoltIcon,
|
|
1309
|
-
compliance: import_icons9.ShieldCheckIcon
|
|
1310
|
-
};
|
|
1311
|
-
|
|
1312
1196
|
// src/components/pages/category-page.tsx
|
|
1313
1197
|
function CategoryPage({ category, report, onBack }) {
|
|
1314
1198
|
const Icon = CATEGORY_ICONS[category];
|
|
1315
1199
|
const { failed, passed, skipped, totalViolations } = partitionAuditResults(report, { category });
|
|
1316
1200
|
const { expandedId, toggle } = useSingleExpandedCard();
|
|
1317
|
-
return /* @__PURE__ */
|
|
1201
|
+
return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(
|
|
1318
1202
|
SubpageHeader,
|
|
1319
1203
|
{
|
|
1320
1204
|
title: CATEGORY_LABELS[category],
|
|
1321
1205
|
onBack,
|
|
1322
|
-
backLabel: (0,
|
|
1323
|
-
icon: /* @__PURE__ */
|
|
1206
|
+
backLabel: (0, import_i18n11.__)("Back to all issues", "elementor"),
|
|
1207
|
+
icon: /* @__PURE__ */ React12.createElement(Icon, { fontSize: "small", color: "action" })
|
|
1324
1208
|
}
|
|
1325
|
-
), /* @__PURE__ */
|
|
1209
|
+
), /* @__PURE__ */ React12.createElement(import_ui11.Box, { sx: { p: 1 } }, /* @__PURE__ */ React12.createElement(
|
|
1326
1210
|
StatusSection,
|
|
1327
1211
|
{
|
|
1328
|
-
label: (0,
|
|
1212
|
+
label: (0, import_i18n11.__)("Failed audits", "elementor"),
|
|
1329
1213
|
count: totalViolations,
|
|
1330
1214
|
color: "error",
|
|
1331
1215
|
defaultExpanded: true
|
|
1332
1216
|
},
|
|
1333
|
-
failed.map((r) => /* @__PURE__ */
|
|
1217
|
+
failed.map((r) => /* @__PURE__ */ React12.createElement(
|
|
1334
1218
|
ViolationRow,
|
|
1335
1219
|
{
|
|
1336
1220
|
key: r.audit.id,
|
|
@@ -1340,7 +1224,7 @@ function CategoryPage({ category, report, onBack }) {
|
|
|
1340
1224
|
onToggleExpand: () => toggle(r.audit.id)
|
|
1341
1225
|
}
|
|
1342
1226
|
))
|
|
1343
|
-
), /* @__PURE__ */
|
|
1227
|
+
), /* @__PURE__ */ React12.createElement(StatusSection, { label: (0, import_i18n11.__)("Passed audits", "elementor"), count: passed.length, color: "success" }, passed.map((r) => /* @__PURE__ */ React12.createElement(
|
|
1344
1228
|
ViolationRow,
|
|
1345
1229
|
{
|
|
1346
1230
|
key: r.audit.id,
|
|
@@ -1348,7 +1232,7 @@ function CategoryPage({ category, report, onBack }) {
|
|
|
1348
1232
|
expanded: expandedId === r.audit.id,
|
|
1349
1233
|
onToggleExpand: () => toggle(r.audit.id)
|
|
1350
1234
|
}
|
|
1351
|
-
))), /* @__PURE__ */
|
|
1235
|
+
))), /* @__PURE__ */ React12.createElement(StatusSection, { label: (0, import_i18n11.__)("Skipped audits", "elementor"), count: skipped.length, color: "default" }, skipped.map((r) => /* @__PURE__ */ React12.createElement(
|
|
1352
1236
|
ViolationRow,
|
|
1353
1237
|
{
|
|
1354
1238
|
key: r.audit.id,
|
|
@@ -1360,14 +1244,13 @@ function CategoryPage({ category, report, onBack }) {
|
|
|
1360
1244
|
)))));
|
|
1361
1245
|
}
|
|
1362
1246
|
|
|
1363
|
-
// src/components/pages/
|
|
1364
|
-
var
|
|
1365
|
-
var
|
|
1366
|
-
var
|
|
1367
|
-
var import_i18n17 = require("@wordpress/i18n");
|
|
1247
|
+
// src/components/pages/overview-page.tsx
|
|
1248
|
+
var React17 = __toESM(require("react"));
|
|
1249
|
+
var import_ui16 = require("@elementor/ui");
|
|
1250
|
+
var import_i18n15 = require("@wordpress/i18n");
|
|
1368
1251
|
|
|
1369
1252
|
// src/utils/severity-counts.ts
|
|
1370
|
-
var
|
|
1253
|
+
var import_i18n12 = require("@wordpress/i18n");
|
|
1371
1254
|
var ALL_SEVERITIES = ["error", "warning", "info"];
|
|
1372
1255
|
function countSeverities(report, category) {
|
|
1373
1256
|
const counts = { error: 0, warning: 0, info: 0 };
|
|
@@ -1388,119 +1271,23 @@ function countSeverities(report, category) {
|
|
|
1388
1271
|
function severityPluralLabel(severity) {
|
|
1389
1272
|
switch (severity) {
|
|
1390
1273
|
case "error":
|
|
1391
|
-
return (0,
|
|
1274
|
+
return (0, import_i18n12.__)("Errors", "elementor");
|
|
1392
1275
|
case "warning":
|
|
1393
|
-
return (0,
|
|
1276
|
+
return (0, import_i18n12.__)("Warnings", "elementor");
|
|
1394
1277
|
case "info":
|
|
1395
|
-
return (0,
|
|
1278
|
+
return (0, import_i18n12.__)("Suggestions", "elementor");
|
|
1396
1279
|
}
|
|
1397
1280
|
}
|
|
1398
1281
|
|
|
1399
|
-
// src/components/audit-statuses-section.tsx
|
|
1400
|
-
var React15 = __toESM(require("react"));
|
|
1401
|
-
var import_ui14 = require("@elementor/ui");
|
|
1402
|
-
var import_i18n15 = require("@wordpress/i18n");
|
|
1403
|
-
|
|
1404
|
-
// src/components/count-summary-circle.tsx
|
|
1405
|
-
var React14 = __toESM(require("react"));
|
|
1406
|
-
var import_ui13 = require("@elementor/ui");
|
|
1407
|
-
var COUNT_SUMMARY_CIRCLE_SIZE = 64;
|
|
1408
|
-
var COUNT_SUMMARY_BORDER_WIDTH = 4;
|
|
1409
|
-
function chipBorderColor(theme, color) {
|
|
1410
|
-
if (color === "default" || !color) {
|
|
1411
|
-
return theme.palette.text.secondary;
|
|
1412
|
-
}
|
|
1413
|
-
return theme.palette[color].main;
|
|
1414
|
-
}
|
|
1415
|
-
function CountSummaryCircle({ ariaLabel, color, count, label, onClick }) {
|
|
1416
|
-
return /* @__PURE__ */ React14.createElement(
|
|
1417
|
-
import_ui13.Box,
|
|
1418
|
-
{
|
|
1419
|
-
"aria-label": ariaLabel,
|
|
1420
|
-
component: "button",
|
|
1421
|
-
onClick,
|
|
1422
|
-
type: "button",
|
|
1423
|
-
sx: {
|
|
1424
|
-
alignItems: "center",
|
|
1425
|
-
background: "none",
|
|
1426
|
-
border: "none",
|
|
1427
|
-
cursor: "pointer",
|
|
1428
|
-
display: "flex",
|
|
1429
|
-
flex: 1,
|
|
1430
|
-
flexDirection: "column",
|
|
1431
|
-
gap: 0.5,
|
|
1432
|
-
padding: 0
|
|
1433
|
-
}
|
|
1434
|
-
},
|
|
1435
|
-
/* @__PURE__ */ React14.createElement(
|
|
1436
|
-
import_ui13.Chip,
|
|
1437
|
-
{
|
|
1438
|
-
color,
|
|
1439
|
-
label: count,
|
|
1440
|
-
size: "small",
|
|
1441
|
-
variant: "standard",
|
|
1442
|
-
sx: (theme) => ({
|
|
1443
|
-
border: `${COUNT_SUMMARY_BORDER_WIDTH}px solid ${chipBorderColor(theme, color)}`,
|
|
1444
|
-
borderRadius: "50%",
|
|
1445
|
-
height: COUNT_SUMMARY_CIRCLE_SIZE,
|
|
1446
|
-
maxWidth: COUNT_SUMMARY_CIRCLE_SIZE,
|
|
1447
|
-
width: COUNT_SUMMARY_CIRCLE_SIZE,
|
|
1448
|
-
"& .MuiChip-label": {
|
|
1449
|
-
fontSize: theme.typography.body2.fontSize,
|
|
1450
|
-
fontWeight: 700,
|
|
1451
|
-
lineHeight: 1,
|
|
1452
|
-
padding: 0
|
|
1453
|
-
}
|
|
1454
|
-
})
|
|
1455
|
-
}
|
|
1456
|
-
),
|
|
1457
|
-
/* @__PURE__ */ React14.createElement(import_ui13.Typography, { color: "text.secondary", sx: { textAlign: "center" }, variant: "caption" }, label)
|
|
1458
|
-
);
|
|
1459
|
-
}
|
|
1460
|
-
|
|
1461
|
-
// src/components/audit-statuses-section.tsx
|
|
1462
|
-
var STATUS_ARIA_LABELS = {
|
|
1463
|
-
pass: (count) => (0, import_i18n15.sprintf)(
|
|
1464
|
-
/* translators: %d: number of passed audits. */
|
|
1465
|
-
(0, import_i18n15.__)("%d passed audits, view all", "elementor"),
|
|
1466
|
-
count
|
|
1467
|
-
),
|
|
1468
|
-
fail: (count) => (0, import_i18n15.sprintf)(
|
|
1469
|
-
/* translators: %d: number of failed audit violations. */
|
|
1470
|
-
(0, import_i18n15.__)("%d failed audits, view all", "elementor"),
|
|
1471
|
-
count
|
|
1472
|
-
),
|
|
1473
|
-
skipped: (count) => (0, import_i18n15.sprintf)(
|
|
1474
|
-
/* translators: %d: number of skipped audits. */
|
|
1475
|
-
(0, import_i18n15.__)("%d skipped audits, view all", "elementor"),
|
|
1476
|
-
count
|
|
1477
|
-
)
|
|
1478
|
-
};
|
|
1479
|
-
var STATUS_GROUPS = ["fail", "pass", "skipped"];
|
|
1480
|
-
function AuditStatusesSection({ report, onStatusClick }) {
|
|
1481
|
-
const statusCounts = auditStatusDisplayCounts(report);
|
|
1482
|
-
return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(import_ui14.Typography, { variant: "subtitle1", fontWeight: "bold" }, (0, import_i18n15.__)("Audit statuses", "elementor")), /* @__PURE__ */ React15.createElement(import_ui14.Box, { sx: { display: "flex", justifyContent: "space-around", gap: 2 } }, STATUS_GROUPS.map((status) => /* @__PURE__ */ React15.createElement(
|
|
1483
|
-
CountSummaryCircle,
|
|
1484
|
-
{
|
|
1485
|
-
key: status,
|
|
1486
|
-
ariaLabel: STATUS_ARIA_LABELS[status](statusCounts[status]),
|
|
1487
|
-
color: auditStatusColor(status),
|
|
1488
|
-
count: statusCounts[status],
|
|
1489
|
-
label: auditStatusLabel(status),
|
|
1490
|
-
onClick: () => onStatusClick(status)
|
|
1491
|
-
}
|
|
1492
|
-
))), /* @__PURE__ */ React15.createElement(import_ui14.Divider, null));
|
|
1493
|
-
}
|
|
1494
|
-
|
|
1495
1282
|
// src/components/issues-category-row.tsx
|
|
1496
|
-
var
|
|
1283
|
+
var React13 = __toESM(require("react"));
|
|
1497
1284
|
var import_icons10 = require("@elementor/icons");
|
|
1498
|
-
var
|
|
1285
|
+
var import_ui12 = require("@elementor/ui");
|
|
1499
1286
|
function IssuesCategoryRow({ category, label, counts, onClick }) {
|
|
1500
|
-
const isRtl = "rtl" === (0,
|
|
1287
|
+
const isRtl = "rtl" === (0, import_ui12.useTheme)().direction;
|
|
1501
1288
|
const Icon = CATEGORY_ICONS[category];
|
|
1502
|
-
return /* @__PURE__ */
|
|
1503
|
-
|
|
1289
|
+
return /* @__PURE__ */ React13.createElement(
|
|
1290
|
+
import_ui12.Box,
|
|
1504
1291
|
{
|
|
1505
1292
|
role: "button",
|
|
1506
1293
|
tabIndex: 0,
|
|
@@ -1521,112 +1308,21 @@ function IssuesCategoryRow({ category, label, counts, onClick }) {
|
|
|
1521
1308
|
"&:focus-visible": { outline: "2px solid", outlineColor: "primary.main" }
|
|
1522
1309
|
}
|
|
1523
1310
|
},
|
|
1524
|
-
/* @__PURE__ */
|
|
1525
|
-
/* @__PURE__ */
|
|
1526
|
-
/* @__PURE__ */
|
|
1527
|
-
/* @__PURE__ */
|
|
1528
|
-
);
|
|
1529
|
-
}
|
|
1530
|
-
|
|
1531
|
-
// src/components/severity-filter-chips.tsx
|
|
1532
|
-
var React17 = __toESM(require("react"));
|
|
1533
|
-
var import_ui16 = require("@elementor/ui");
|
|
1534
|
-
var import_i18n16 = require("@wordpress/i18n");
|
|
1535
|
-
function SeverityFilterChips({ selected, onChange }) {
|
|
1536
|
-
return /* @__PURE__ */ React17.createElement(import_ui16.Box, { sx: { display: "flex", alignItems: "center", gap: 1 } }, /* @__PURE__ */ React17.createElement(
|
|
1537
|
-
FilterChip,
|
|
1538
|
-
{
|
|
1539
|
-
label: (0, import_i18n16.__)("All", "elementor"),
|
|
1540
|
-
isSelected: selected === "all",
|
|
1541
|
-
onClick: () => onChange("all")
|
|
1542
|
-
}
|
|
1543
|
-
), ALL_SEVERITIES.map((severity) => /* @__PURE__ */ React17.createElement(
|
|
1544
|
-
FilterChip,
|
|
1545
|
-
{
|
|
1546
|
-
key: severity,
|
|
1547
|
-
label: severityPluralLabel(severity),
|
|
1548
|
-
icon: /* @__PURE__ */ React17.createElement(SeverityIcon, { severity }),
|
|
1549
|
-
isSelected: selected === severity,
|
|
1550
|
-
onClick: () => onChange(severity)
|
|
1551
|
-
}
|
|
1552
|
-
)));
|
|
1553
|
-
}
|
|
1554
|
-
function FilterChip({ label, icon, isSelected, onClick }) {
|
|
1555
|
-
return /* @__PURE__ */ React17.createElement(
|
|
1556
|
-
import_ui16.Chip,
|
|
1557
|
-
{
|
|
1558
|
-
label,
|
|
1559
|
-
icon,
|
|
1560
|
-
size: "small",
|
|
1561
|
-
variant: "filled",
|
|
1562
|
-
color: "default",
|
|
1563
|
-
onClick,
|
|
1564
|
-
"aria-pressed": isSelected,
|
|
1565
|
-
sx: { bgcolor: isSelected ? "action.selected" : "transparent" }
|
|
1566
|
-
}
|
|
1311
|
+
/* @__PURE__ */ React13.createElement(Icon, { fontSize: "small", color: "action" }),
|
|
1312
|
+
/* @__PURE__ */ React13.createElement(import_ui12.Typography, { variant: "body2", fontWeight: "bold", sx: { flex: 1 } }, label),
|
|
1313
|
+
/* @__PURE__ */ React13.createElement(import_ui12.Box, { sx: { display: "flex", alignItems: "center", gap: 0.5 } }, ALL_SEVERITIES.filter((s) => counts[s] > 0).map((severity) => /* @__PURE__ */ React13.createElement(import_ui12.Box, { key: severity, sx: { display: "flex", alignItems: "center", gap: 0.25 } }, /* @__PURE__ */ React13.createElement(SeverityIcon, { severity }), /* @__PURE__ */ React13.createElement(import_ui12.Typography, { variant: "caption", color: "text.primary", fontWeight: "bold" }, counts[severity])))),
|
|
1314
|
+
/* @__PURE__ */ React13.createElement(import_ui12.Rotate, { in: isRtl }, /* @__PURE__ */ React13.createElement(import_icons10.ChevronRightIcon, { fontSize: "small", color: "action" }))
|
|
1567
1315
|
);
|
|
1568
1316
|
}
|
|
1569
1317
|
|
|
1570
|
-
// src/components/pages/issues-page.tsx
|
|
1571
|
-
function filterCounts(counts, filter) {
|
|
1572
|
-
if (filter === "all") {
|
|
1573
|
-
return counts;
|
|
1574
|
-
}
|
|
1575
|
-
return { error: 0, warning: 0, info: 0, [filter]: counts[filter] };
|
|
1576
|
-
}
|
|
1577
|
-
function IssuesPage({ report, onCategoryClick, onAllAuditsClick, onStatusClick }) {
|
|
1578
|
-
const [filter, setFilter] = (0, import_react5.useState)("all");
|
|
1579
|
-
const populatedCategories = getPopulatedCategories(report.categories, ALL_CATEGORIES);
|
|
1580
|
-
const categoryRows = populatedCategories.map((category) => ({ category, counts: filterCounts(countSeverities(report, category), filter) })).filter(({ counts }) => Object.values(counts).some((count) => count > 0));
|
|
1581
|
-
return /* @__PURE__ */ React18.createElement(import_ui17.Box, { sx: { display: "flex", flexDirection: "column", gap: 4, p: 2 } }, /* @__PURE__ */ React18.createElement(AuditStatusesSection, { report, onStatusClick }), /* @__PURE__ */ React18.createElement(
|
|
1582
|
-
import_ui17.Link,
|
|
1583
|
-
{
|
|
1584
|
-
component: "button",
|
|
1585
|
-
underline: "none",
|
|
1586
|
-
color: "inherit",
|
|
1587
|
-
onClick: onAllAuditsClick,
|
|
1588
|
-
sx: { textAlign: "start" }
|
|
1589
|
-
},
|
|
1590
|
-
/* @__PURE__ */ React18.createElement(import_ui17.Typography, { variant: "subtitle1", component: "h2" }, (0, import_i18n17.__)("All issues", "elementor"))
|
|
1591
|
-
), /* @__PURE__ */ React18.createElement(SeverityFilterChips, { selected: filter, onChange: setFilter }), /* @__PURE__ */ React18.createElement(import_ui17.Box, { sx: { display: "flex", flexDirection: "column", gap: 1 } }, categoryRows.map(({ category, counts }) => /* @__PURE__ */ React18.createElement(
|
|
1592
|
-
IssuesCategoryRow,
|
|
1593
|
-
{
|
|
1594
|
-
key: category,
|
|
1595
|
-
category,
|
|
1596
|
-
label: CATEGORY_LABELS[category],
|
|
1597
|
-
counts,
|
|
1598
|
-
onClick: () => onCategoryClick(category)
|
|
1599
|
-
}
|
|
1600
|
-
))));
|
|
1601
|
-
}
|
|
1602
|
-
|
|
1603
|
-
// src/components/pages/overview-page.tsx
|
|
1604
|
-
var React23 = __toESM(require("react"));
|
|
1605
|
-
var import_ui22 = require("@elementor/ui");
|
|
1606
|
-
var import_i18n21 = require("@wordpress/i18n");
|
|
1607
|
-
|
|
1608
|
-
// src/utils/score-thresholds.ts
|
|
1609
|
-
var import_i18n18 = require("@wordpress/i18n");
|
|
1610
|
-
var GOOD_THRESHOLD = 90;
|
|
1611
|
-
var OK_THRESHOLD = 50;
|
|
1612
|
-
function getScoreTier(score) {
|
|
1613
|
-
if (score >= GOOD_THRESHOLD) {
|
|
1614
|
-
return { color: "success", label: (0, import_i18n18.__)("Good", "elementor") };
|
|
1615
|
-
}
|
|
1616
|
-
if (score >= OK_THRESHOLD) {
|
|
1617
|
-
return { color: "warning", label: (0, import_i18n18.__)("Needs work", "elementor") };
|
|
1618
|
-
}
|
|
1619
|
-
return { color: "error", label: (0, import_i18n18.__)("At risk", "elementor") };
|
|
1620
|
-
}
|
|
1621
|
-
|
|
1622
1318
|
// src/components/promotions.tsx
|
|
1623
|
-
var
|
|
1624
|
-
var
|
|
1625
|
-
var
|
|
1319
|
+
var React15 = __toESM(require("react"));
|
|
1320
|
+
var import_ui14 = require("@elementor/ui");
|
|
1321
|
+
var import_i18n14 = require("@wordpress/i18n");
|
|
1626
1322
|
|
|
1627
1323
|
// src/register-promotions.ts
|
|
1628
1324
|
var import_icons11 = require("@elementor/icons");
|
|
1629
|
-
var
|
|
1325
|
+
var import_i18n13 = require("@wordpress/i18n");
|
|
1630
1326
|
function firstFailExternalUrl(run) {
|
|
1631
1327
|
return run.result.status === "fail" ? run.result.violations[0]?.externalUrl : void 0;
|
|
1632
1328
|
}
|
|
@@ -1634,7 +1330,7 @@ var PROMOTIONS = [
|
|
|
1634
1330
|
{
|
|
1635
1331
|
auditId: "audits/images-alt-text",
|
|
1636
1332
|
icon: import_icons11.PhotoIcon,
|
|
1637
|
-
ctaLabel: (0,
|
|
1333
|
+
ctaLabel: (0, import_i18n13.__)("Fix with Ally", "elementor"),
|
|
1638
1334
|
formatSubtitle: (run) => {
|
|
1639
1335
|
if (run.result.status !== "fail") {
|
|
1640
1336
|
return null;
|
|
@@ -1643,9 +1339,9 @@ var PROMOTIONS = [
|
|
|
1643
1339
|
if (count === 0) {
|
|
1644
1340
|
return null;
|
|
1645
1341
|
}
|
|
1646
|
-
return (0,
|
|
1342
|
+
return (0, import_i18n13.sprintf)(
|
|
1647
1343
|
/* translators: %d: number of images missing alt text. */
|
|
1648
|
-
(0,
|
|
1344
|
+
(0, import_i18n13._n)("%d image", "%d images", count, "elementor"),
|
|
1649
1345
|
count
|
|
1650
1346
|
);
|
|
1651
1347
|
},
|
|
@@ -1654,21 +1350,21 @@ var PROMOTIONS = [
|
|
|
1654
1350
|
{
|
|
1655
1351
|
auditId: "audits/cookie-policy",
|
|
1656
1352
|
icon: import_icons11.ElementorCookieIcon,
|
|
1657
|
-
ctaLabel: (0,
|
|
1658
|
-
formatSubtitle: (run) => run.result.status === "fail" ? (0,
|
|
1353
|
+
ctaLabel: (0, import_i18n13.__)("Fix with Cookiez", "elementor"),
|
|
1354
|
+
formatSubtitle: (run) => run.result.status === "fail" ? (0, import_i18n13.__)("Generate cookie policy", "elementor") : null,
|
|
1659
1355
|
getCtaUrl: firstFailExternalUrl
|
|
1660
1356
|
},
|
|
1661
1357
|
{
|
|
1662
1358
|
auditId: "audits/scan-for-cookies",
|
|
1663
1359
|
icon: import_icons11.ElementorCookieIcon,
|
|
1664
|
-
ctaLabel: (0,
|
|
1665
|
-
formatSubtitle: (run) => run.result.status === "fail" ? (0,
|
|
1360
|
+
ctaLabel: (0, import_i18n13.__)("Scan", "elementor"),
|
|
1361
|
+
formatSubtitle: (run) => run.result.status === "fail" ? (0, import_i18n13.__)("Scan this page for cookies", "elementor") : null,
|
|
1666
1362
|
getCtaUrl: firstFailExternalUrl
|
|
1667
1363
|
},
|
|
1668
1364
|
{
|
|
1669
1365
|
auditId: "audits/images-too-large",
|
|
1670
1366
|
icon: import_icons11.ShieldHalfFilledIcon,
|
|
1671
|
-
ctaLabel: (0,
|
|
1367
|
+
ctaLabel: (0, import_i18n13.__)("Optimize all", "elementor"),
|
|
1672
1368
|
formatSubtitle: (run) => {
|
|
1673
1369
|
if (run.result.status !== "fail") {
|
|
1674
1370
|
return null;
|
|
@@ -1677,9 +1373,9 @@ var PROMOTIONS = [
|
|
|
1677
1373
|
if (count === 0) {
|
|
1678
1374
|
return null;
|
|
1679
1375
|
}
|
|
1680
|
-
return (0,
|
|
1376
|
+
return (0, import_i18n13.sprintf)(
|
|
1681
1377
|
/* translators: %d: number of oversized images. */
|
|
1682
|
-
(0,
|
|
1378
|
+
(0, import_i18n13._n)("%d image", "%d images", count, "elementor"),
|
|
1683
1379
|
count
|
|
1684
1380
|
);
|
|
1685
1381
|
},
|
|
@@ -1693,11 +1389,11 @@ function findAuditRun(report, auditId) {
|
|
|
1693
1389
|
}
|
|
1694
1390
|
|
|
1695
1391
|
// src/components/promotion-card.tsx
|
|
1696
|
-
var
|
|
1697
|
-
var
|
|
1392
|
+
var React14 = __toESM(require("react"));
|
|
1393
|
+
var import_ui13 = require("@elementor/ui");
|
|
1698
1394
|
function PromotionCard({ ctaDisabled, ctaLabel, icon: Icon, onCtaClick, subtitle, title }) {
|
|
1699
|
-
return /* @__PURE__ */
|
|
1700
|
-
|
|
1395
|
+
return /* @__PURE__ */ React14.createElement(
|
|
1396
|
+
import_ui13.Box,
|
|
1701
1397
|
{
|
|
1702
1398
|
sx: {
|
|
1703
1399
|
alignItems: "center",
|
|
@@ -1710,9 +1406,9 @@ function PromotionCard({ ctaDisabled, ctaLabel, icon: Icon, onCtaClick, subtitle
|
|
|
1710
1406
|
py: 1.5
|
|
1711
1407
|
}
|
|
1712
1408
|
},
|
|
1713
|
-
/* @__PURE__ */
|
|
1714
|
-
/* @__PURE__ */
|
|
1715
|
-
/* @__PURE__ */
|
|
1409
|
+
/* @__PURE__ */ React14.createElement(Icon, { fontSize: "small", color: "action" }),
|
|
1410
|
+
/* @__PURE__ */ React14.createElement(import_ui13.Box, { sx: { display: "flex", flex: 1, flexDirection: "column", gap: 0.25, minWidth: 0 } }, /* @__PURE__ */ React14.createElement(import_ui13.Typography, { variant: "body2", fontWeight: "bold" }, title), /* @__PURE__ */ React14.createElement(import_ui13.Typography, { variant: "caption", color: "text.secondary" }, subtitle)),
|
|
1411
|
+
/* @__PURE__ */ React14.createElement(import_ui13.Button, { variant: "outlined", color: "secondary", size: "small", disabled: ctaDisabled, onClick: onCtaClick }, ctaLabel)
|
|
1716
1412
|
);
|
|
1717
1413
|
}
|
|
1718
1414
|
|
|
@@ -1741,7 +1437,7 @@ function Promotions({ report }) {
|
|
|
1741
1437
|
if (cards.length === 0) {
|
|
1742
1438
|
return null;
|
|
1743
1439
|
}
|
|
1744
|
-
return /* @__PURE__ */
|
|
1440
|
+
return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(import_ui14.Divider, null), /* @__PURE__ */ React15.createElement(import_ui14.Typography, { variant: "subtitle1", fontWeight: "bold" }, (0, import_i18n14.__)("Quick actions", "elementor")), /* @__PURE__ */ React15.createElement(import_ui14.Box, { sx: { display: "flex", flexDirection: "column", gap: 1 } }, cards.map(({ config, ctaUrl, key, run, subtitle }) => /* @__PURE__ */ React15.createElement(
|
|
1745
1441
|
PromotionCard,
|
|
1746
1442
|
{
|
|
1747
1443
|
key,
|
|
@@ -1759,207 +1455,56 @@ function Promotions({ report }) {
|
|
|
1759
1455
|
))));
|
|
1760
1456
|
}
|
|
1761
1457
|
|
|
1762
|
-
// src/components/
|
|
1763
|
-
var
|
|
1764
|
-
var
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
return /* @__PURE__ */ React21.createElement(
|
|
1769
|
-
import_ui20.Box,
|
|
1770
|
-
{
|
|
1771
|
-
role: onClick ? "button" : void 0,
|
|
1772
|
-
tabIndex: onClick ? 0 : void 0,
|
|
1773
|
-
onClick,
|
|
1774
|
-
onKeyDown: onClick ? onKeyboardClick(onClick) : void 0,
|
|
1775
|
-
sx: {
|
|
1776
|
-
display: "flex",
|
|
1777
|
-
alignItems: "center",
|
|
1778
|
-
gap: 1,
|
|
1779
|
-
cursor: onClick ? "pointer" : "default",
|
|
1780
|
-
outline: "none",
|
|
1781
|
-
"&:focus-visible": { outline: "2px solid", outlineColor: "primary.main", borderRadius: 1 },
|
|
1782
|
-
py: 0.5
|
|
1783
|
-
}
|
|
1784
|
-
},
|
|
1785
|
-
/* @__PURE__ */ React21.createElement(import_ui20.Typography, { variant: "body2", sx: { minWidth: 96 } }, label),
|
|
1786
|
-
/* @__PURE__ */ React21.createElement(
|
|
1787
|
-
import_ui20.LinearProgress,
|
|
1788
|
-
{
|
|
1789
|
-
variant: "determinate",
|
|
1790
|
-
value: score,
|
|
1791
|
-
color: getScoreTier(score).color,
|
|
1792
|
-
sx: { flex: 1, height: 6, borderRadius: 4, bgcolor: "action.disabledBackground" }
|
|
1793
|
-
}
|
|
1794
|
-
),
|
|
1795
|
-
/* @__PURE__ */ React21.createElement(
|
|
1796
|
-
import_ui20.Typography,
|
|
1797
|
-
{
|
|
1798
|
-
variant: "body2",
|
|
1799
|
-
color: "text.primary",
|
|
1800
|
-
sx: { minWidth: 24, textAlign: "right", fontWeight: 900 }
|
|
1801
|
-
},
|
|
1802
|
-
score
|
|
1803
|
-
),
|
|
1804
|
-
onClick && /* @__PURE__ */ React21.createElement(import_ui20.Rotate, { in: isRtl }, /* @__PURE__ */ React21.createElement(import_icons12.ChevronRightIcon, { fontSize: "small", color: "action" }))
|
|
1805
|
-
);
|
|
1458
|
+
// src/components/severity-summary-cards.tsx
|
|
1459
|
+
var React16 = __toESM(require("react"));
|
|
1460
|
+
var import_ui15 = require("@elementor/ui");
|
|
1461
|
+
function SeveritySummaryCards({ report }) {
|
|
1462
|
+
const counts = countSeverities(report);
|
|
1463
|
+
return /* @__PURE__ */ React16.createElement(import_ui15.Box, { display: "flex", gap: 1.5 }, ALL_SEVERITIES.map((severity) => /* @__PURE__ */ React16.createElement(SeverityCard, { key: severity, severity, count: counts[severity] })));
|
|
1806
1464
|
}
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
var import_ui21 = require("@elementor/ui");
|
|
1811
|
-
var SCORE_CIRCLE_SIZE = 88;
|
|
1812
|
-
var SCORE_CIRCLE_THICKNESS = 3;
|
|
1813
|
-
function ScoreCircle({ color, score }) {
|
|
1814
|
-
const progressColor = color ?? getScoreTier(score).color;
|
|
1815
|
-
return /* @__PURE__ */ React22.createElement(
|
|
1816
|
-
import_ui21.Box,
|
|
1465
|
+
function SeverityCard({ severity, count }) {
|
|
1466
|
+
return /* @__PURE__ */ React16.createElement(
|
|
1467
|
+
import_ui15.Box,
|
|
1817
1468
|
{
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
"
|
|
1821
|
-
|
|
1822
|
-
|
|
1469
|
+
display: "flex",
|
|
1470
|
+
flex: 1,
|
|
1471
|
+
flexDirection: "column",
|
|
1472
|
+
gap: 1,
|
|
1473
|
+
bgcolor: "grey.50",
|
|
1474
|
+
borderRadius: 1.5,
|
|
1475
|
+
px: 1.5,
|
|
1476
|
+
py: 1
|
|
1823
1477
|
},
|
|
1824
|
-
/* @__PURE__ */
|
|
1825
|
-
|
|
1826
|
-
{
|
|
1827
|
-
variant: "determinate",
|
|
1828
|
-
value: 100,
|
|
1829
|
-
size: SCORE_CIRCLE_SIZE,
|
|
1830
|
-
thickness: SCORE_CIRCLE_THICKNESS,
|
|
1831
|
-
sx: { color: "action.disabledBackground" }
|
|
1832
|
-
}
|
|
1833
|
-
),
|
|
1834
|
-
/* @__PURE__ */ React22.createElement(
|
|
1835
|
-
import_ui21.CircularProgress,
|
|
1836
|
-
{
|
|
1837
|
-
variant: "determinate",
|
|
1838
|
-
value: score,
|
|
1839
|
-
size: SCORE_CIRCLE_SIZE,
|
|
1840
|
-
thickness: SCORE_CIRCLE_THICKNESS,
|
|
1841
|
-
color: progressColor,
|
|
1842
|
-
sx: { position: "absolute", left: 0 }
|
|
1843
|
-
}
|
|
1844
|
-
),
|
|
1845
|
-
/* @__PURE__ */ React22.createElement(
|
|
1846
|
-
import_ui21.Box,
|
|
1847
|
-
{
|
|
1848
|
-
sx: {
|
|
1849
|
-
position: "absolute",
|
|
1850
|
-
inset: 0,
|
|
1851
|
-
display: "flex",
|
|
1852
|
-
alignItems: "center",
|
|
1853
|
-
justifyContent: "center"
|
|
1854
|
-
}
|
|
1855
|
-
},
|
|
1856
|
-
/* @__PURE__ */ React22.createElement(
|
|
1857
|
-
import_ui21.Typography,
|
|
1858
|
-
{
|
|
1859
|
-
variant: "h4",
|
|
1860
|
-
component: "span",
|
|
1861
|
-
color: "text.primary",
|
|
1862
|
-
sx: { fontWeight: 700, lineHeight: 1 }
|
|
1863
|
-
},
|
|
1864
|
-
score
|
|
1865
|
-
)
|
|
1866
|
-
)
|
|
1478
|
+
/* @__PURE__ */ React16.createElement(SeverityIcon, { severity }),
|
|
1479
|
+
/* @__PURE__ */ React16.createElement(import_ui15.Box, { display: "flex", flexDirection: "column" }, /* @__PURE__ */ React16.createElement(import_ui15.Typography, { variant: "h5", fontWeight: 700, component: "span" }, count), /* @__PURE__ */ React16.createElement(import_ui15.Typography, { variant: "caption", color: "text.secondary" }, severityPluralLabel(severity)))
|
|
1867
1480
|
);
|
|
1868
1481
|
}
|
|
1869
1482
|
|
|
1870
1483
|
// src/components/pages/overview-page.tsx
|
|
1871
1484
|
function OverviewPage({ onCategoryClick, report }) {
|
|
1872
1485
|
const populatedCategories = getPopulatedCategories(report.categories, ALL_CATEGORIES);
|
|
1873
|
-
const
|
|
1874
|
-
return /* @__PURE__ */
|
|
1875
|
-
|
|
1876
|
-
{
|
|
1877
|
-
label: overallScore.label,
|
|
1878
|
-
color: overallScore.color,
|
|
1879
|
-
variant: "standard",
|
|
1880
|
-
size: "small",
|
|
1881
|
-
sx: { fontWeight: 600, alignSelf: "flex-start" }
|
|
1882
|
-
}
|
|
1883
|
-
), /* @__PURE__ */ React23.createElement(import_ui22.Typography, { variant: "body2", color: "text.secondary" }, (0, import_i18n21.__)("Overall score", "elementor")))), /* @__PURE__ */ React23.createElement(import_ui22.Box, { sx: { display: "flex", flexDirection: "column", gap: 2 } }, populatedCategories.map((category) => /* @__PURE__ */ React23.createElement(
|
|
1884
|
-
ScoreBar,
|
|
1486
|
+
const categoryRows = populatedCategories.map((category) => ({ category, counts: countSeverities(report, category) })).filter(({ counts }) => Object.values(counts).some((count) => count > 0));
|
|
1487
|
+
return /* @__PURE__ */ React17.createElement(import_ui16.Box, { display: "flex", flexDirection: "column", gap: 3, p: 2 }, /* @__PURE__ */ React17.createElement(SeveritySummaryCards, { report }), /* @__PURE__ */ React17.createElement(import_ui16.Box, { display: "flex", flexDirection: "column", gap: 1 }, /* @__PURE__ */ React17.createElement(import_ui16.Typography, { variant: "subtitle1", component: "h2" }, (0, import_i18n15.__)("All issues", "elementor")), /* @__PURE__ */ React17.createElement(import_ui16.Box, { display: "flex", flexDirection: "column", gap: 1 }, categoryRows.map(({ category, counts }) => /* @__PURE__ */ React17.createElement(
|
|
1488
|
+
IssuesCategoryRow,
|
|
1885
1489
|
{
|
|
1886
1490
|
key: category,
|
|
1491
|
+
category,
|
|
1887
1492
|
label: CATEGORY_LABELS[category],
|
|
1888
|
-
|
|
1493
|
+
counts,
|
|
1889
1494
|
onClick: () => onCategoryClick(category)
|
|
1890
1495
|
}
|
|
1891
|
-
))), /* @__PURE__ */
|
|
1496
|
+
)))), /* @__PURE__ */ React17.createElement(Promotions, { report }));
|
|
1892
1497
|
}
|
|
1893
1498
|
|
|
1894
1499
|
// src/components/report-shell.tsx
|
|
1895
|
-
function activeTab(page) {
|
|
1896
|
-
if (page === "overview") {
|
|
1897
|
-
return "overview";
|
|
1898
|
-
}
|
|
1899
|
-
if (page === "issues") {
|
|
1900
|
-
return "issues";
|
|
1901
|
-
}
|
|
1902
|
-
return page.backTo;
|
|
1903
|
-
}
|
|
1904
|
-
function isAllAuditsPage(page) {
|
|
1905
|
-
return typeof page === "object" && "page" in page && page.page === "all-audits";
|
|
1906
|
-
}
|
|
1907
1500
|
function isCategoryPage(page) {
|
|
1908
1501
|
return typeof page === "object" && "category" in page;
|
|
1909
1502
|
}
|
|
1910
1503
|
function ReportShell({ report }) {
|
|
1911
|
-
const [activePage, setActivePage] = (0,
|
|
1912
|
-
const
|
|
1913
|
-
const
|
|
1914
|
-
|
|
1915
|
-
};
|
|
1916
|
-
const openCategory = (category, backTo) => {
|
|
1917
|
-
setActivePage({ category, backTo });
|
|
1918
|
-
};
|
|
1919
|
-
const openAllAudits = (expand, backTo = "issues") => {
|
|
1920
|
-
setActivePage({ page: "all-audits", expand, backTo });
|
|
1921
|
-
};
|
|
1922
|
-
const backFromSubPage = () => {
|
|
1923
|
-
if (isAllAuditsPage(activePage) || isCategoryPage(activePage)) {
|
|
1924
|
-
setActivePage(activePage.backTo);
|
|
1925
|
-
}
|
|
1926
|
-
};
|
|
1927
|
-
return /* @__PURE__ */ React24.createElement(import_ui23.Box, { sx: { display: "flex", flexDirection: "column", flex: 1, minHeight: 0 } }, /* @__PURE__ */ React24.createElement(import_ui23.Box, { sx: { flexShrink: 0 } }, /* @__PURE__ */ React24.createElement(
|
|
1928
|
-
import_ui23.Tabs,
|
|
1929
|
-
{
|
|
1930
|
-
"aria-label": (0, import_i18n22.__)("Audit navigation", "elementor"),
|
|
1931
|
-
value: currentTab,
|
|
1932
|
-
onChange: handleTabChange,
|
|
1933
|
-
textColor: "secondary",
|
|
1934
|
-
indicatorColor: "secondary",
|
|
1935
|
-
size: "small",
|
|
1936
|
-
centered: true,
|
|
1937
|
-
variant: "fullWidth"
|
|
1938
|
-
},
|
|
1939
|
-
/* @__PURE__ */ React24.createElement(import_ui23.Tab, { value: "overview", label: (0, import_i18n22.__)("Overview", "elementor") }),
|
|
1940
|
-
/* @__PURE__ */ React24.createElement(import_ui23.Tab, { value: "issues", label: (0, import_i18n22.__)("Issues", "elementor") })
|
|
1941
|
-
), /* @__PURE__ */ React24.createElement(import_ui23.Divider, null)), /* @__PURE__ */ React24.createElement(import_ui23.Box, { sx: { flex: 1, minHeight: 0, overflowY: "auto" } }, activePage === "overview" && /* @__PURE__ */ React24.createElement(
|
|
1942
|
-
OverviewPage,
|
|
1943
|
-
{
|
|
1944
|
-
report,
|
|
1945
|
-
onCategoryClick: (category) => openCategory(category, "overview")
|
|
1946
|
-
}
|
|
1947
|
-
), activePage === "issues" && /* @__PURE__ */ React24.createElement(
|
|
1948
|
-
IssuesPage,
|
|
1949
|
-
{
|
|
1950
|
-
report,
|
|
1951
|
-
onCategoryClick: (category) => openCategory(category, "issues"),
|
|
1952
|
-
onAllAuditsClick: () => openAllAudits(),
|
|
1953
|
-
onStatusClick: (status) => openAllAudits(status)
|
|
1954
|
-
}
|
|
1955
|
-
), isAllAuditsPage(activePage) && /* @__PURE__ */ React24.createElement(
|
|
1956
|
-
AllAuditsPage,
|
|
1957
|
-
{
|
|
1958
|
-
report,
|
|
1959
|
-
initialExpandedStatus: activePage.expand,
|
|
1960
|
-
onBack: backFromSubPage
|
|
1961
|
-
}
|
|
1962
|
-
), isCategoryPage(activePage) && /* @__PURE__ */ React24.createElement(CategoryPage, { category: activePage.category, report, onBack: backFromSubPage })));
|
|
1504
|
+
const [activePage, setActivePage] = (0, import_react5.useState)("overview");
|
|
1505
|
+
const openCategory = (category) => setActivePage({ category });
|
|
1506
|
+
const backToOverview = () => setActivePage("overview");
|
|
1507
|
+
return /* @__PURE__ */ React18.createElement(import_ui17.Box, { 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 }));
|
|
1963
1508
|
}
|
|
1964
1509
|
|
|
1965
1510
|
// src/components/audit-panel.tsx
|
|
@@ -1968,32 +1513,33 @@ function AuditPanel() {
|
|
|
1968
1513
|
const hostDocumentId = (0, import_editor_elements6.getHostDocumentId)() ?? 0;
|
|
1969
1514
|
const onRun = () => run(hostDocumentId);
|
|
1970
1515
|
const lastScanLabel = report ? new Date(report.runAt).toLocaleTimeString() : null;
|
|
1971
|
-
return /* @__PURE__ */
|
|
1516
|
+
return /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement(
|
|
1972
1517
|
import_editor_floating_panels3.FloatingPanelHeader,
|
|
1973
1518
|
{
|
|
1974
1519
|
panelId: AUDIT_PANEL_ID,
|
|
1975
|
-
title: (0,
|
|
1976
|
-
badge: (0,
|
|
1520
|
+
title: (0, import_i18n16.__)("Page Audit", "elementor"),
|
|
1521
|
+
badge: (0, import_i18n16.__)("Beta", "elementor"),
|
|
1977
1522
|
titleVariant: "subtitle2"
|
|
1978
1523
|
}
|
|
1979
|
-
), /* @__PURE__ */
|
|
1524
|
+
), /* @__PURE__ */ React19.createElement(
|
|
1980
1525
|
import_editor_floating_panels3.FloatingPanelBody,
|
|
1981
1526
|
{
|
|
1982
1527
|
sx: status === "ready" ? { display: "flex", flexDirection: "column", overflow: "hidden", minHeight: 0 } : void 0
|
|
1983
1528
|
},
|
|
1984
|
-
status === "idle" && /* @__PURE__ */
|
|
1985
|
-
status === "loading" && /* @__PURE__ */
|
|
1986
|
-
status === "error" && /* @__PURE__ */
|
|
1987
|
-
status === "ready" && report && /* @__PURE__ */
|
|
1988
|
-
), /* @__PURE__ */
|
|
1989
|
-
|
|
1529
|
+
status === "idle" && /* @__PURE__ */ React19.createElement(WelcomePage, null),
|
|
1530
|
+
status === "loading" && /* @__PURE__ */ React19.createElement(LoadingPage, null),
|
|
1531
|
+
status === "error" && /* @__PURE__ */ React19.createElement(ErrorPage, { message: error ?? "", onRetry: onRun }),
|
|
1532
|
+
status === "ready" && report && /* @__PURE__ */ React19.createElement(ReportShell, { report })
|
|
1533
|
+
), /* @__PURE__ */ React19.createElement(import_editor_floating_panels3.FloatingPanelFooter, null, lastScanLabel ? /* @__PURE__ */ React19.createElement(import_ui18.Typography, { variant: "caption", sx: { flex: 1 } }, (0, import_i18n16.__)("Last scan:", "elementor"), " ", lastScanLabel) : /* @__PURE__ */ React19.createElement(import_ui18.Box, { sx: { flex: 1 } }), lastScanLabel && /* @__PURE__ */ React19.createElement(AuditFeedback, null), /* @__PURE__ */ React19.createElement(
|
|
1534
|
+
import_ui18.Button,
|
|
1990
1535
|
{
|
|
1991
1536
|
variant: "contained",
|
|
1992
1537
|
size: "small",
|
|
1538
|
+
startIcon: lastScanLabel ? /* @__PURE__ */ React19.createElement(import_icons12.ReloadIcon, { fontSize: "small" }) : void 0,
|
|
1993
1539
|
onClick: onRun,
|
|
1994
1540
|
disabled: status === "loading" || hostDocumentId === 0
|
|
1995
1541
|
},
|
|
1996
|
-
lastScanLabel ? (0,
|
|
1542
|
+
lastScanLabel ? (0, import_i18n16.__)("Rescan", "elementor") : (0, import_i18n16.__)("Run page audit", "elementor")
|
|
1997
1543
|
)));
|
|
1998
1544
|
}
|
|
1999
1545
|
|
|
@@ -2018,7 +1564,7 @@ function useAuditToggleProps() {
|
|
|
2018
1564
|
const { isOpen } = auditPanel.useFloatingPanelStatus();
|
|
2019
1565
|
const { toggle } = auditPanel.useFloatingPanelActions();
|
|
2020
1566
|
return {
|
|
2021
|
-
title: (0,
|
|
1567
|
+
title: (0, import_i18n17.__)("Audit Page", "elementor"),
|
|
2022
1568
|
icon: import_icons13.ShieldCheckIcon,
|
|
2023
1569
|
selected: isOpen,
|
|
2024
1570
|
onClick: () => toggle()
|
|
@@ -2036,15 +1582,15 @@ function registerAppBarAuditsToggle() {
|
|
|
2036
1582
|
}
|
|
2037
1583
|
|
|
2038
1584
|
// src/audits/accessibility-policy.ts
|
|
2039
|
-
var
|
|
1585
|
+
var import_i18n18 = require("@wordpress/i18n");
|
|
2040
1586
|
var audit = {
|
|
2041
1587
|
id: "audits/accessibility-policy",
|
|
2042
|
-
title: (0,
|
|
2043
|
-
description: (0,
|
|
1588
|
+
title: (0, import_i18n18.__)("Accessibility policy", "elementor"),
|
|
1589
|
+
description: (0, import_i18n18.__)(
|
|
2044
1590
|
"An accessibility policy demonstrates your commitment to digital inclusion and may be legally required in some regions.",
|
|
2045
1591
|
"elementor"
|
|
2046
1592
|
),
|
|
2047
|
-
fixHint: (0,
|
|
1593
|
+
fixHint: (0, import_i18n18.__)("Install the Ally plugin to add an accessibility policy to your website.", "elementor"),
|
|
2048
1594
|
categories: ["compliance"],
|
|
2049
1595
|
severity: "info",
|
|
2050
1596
|
weight: 1,
|
|
@@ -2057,7 +1603,7 @@ var audit = {
|
|
|
2057
1603
|
violations: [
|
|
2058
1604
|
{
|
|
2059
1605
|
auditId: audit.id,
|
|
2060
|
-
label: (0,
|
|
1606
|
+
label: (0, import_i18n18.__)("Ally plugin is not installed or active.", "elementor"),
|
|
2061
1607
|
externalUrl: ctx.pageContext.ally_plugin_url
|
|
2062
1608
|
}
|
|
2063
1609
|
]
|
|
@@ -2066,15 +1612,15 @@ var audit = {
|
|
|
2066
1612
|
};
|
|
2067
1613
|
|
|
2068
1614
|
// src/audits/accessibility-statement.ts
|
|
2069
|
-
var
|
|
1615
|
+
var import_i18n19 = require("@wordpress/i18n");
|
|
2070
1616
|
var audit2 = {
|
|
2071
1617
|
id: "audits/accessibility-statement",
|
|
2072
|
-
title: (0,
|
|
2073
|
-
description: (0,
|
|
1618
|
+
title: (0, import_i18n19.__)("Create an accessibility statement", "elementor"),
|
|
1619
|
+
description: (0, import_i18n19.__)(
|
|
2074
1620
|
"An accessibility statement showcases your efforts to create an inclusive online space, highlighting helpful features and a commitment to accessibility.",
|
|
2075
1621
|
"elementor"
|
|
2076
1622
|
),
|
|
2077
|
-
fixHint: (0,
|
|
1623
|
+
fixHint: (0, import_i18n19.__)("Use Ally to create and publish an accessibility statement for your site.", "elementor"),
|
|
2078
1624
|
categories: ["accessibility"],
|
|
2079
1625
|
severity: "info",
|
|
2080
1626
|
weight: 1,
|
|
@@ -2088,10 +1634,10 @@ var audit2 = {
|
|
|
2088
1634
|
violations: [
|
|
2089
1635
|
{
|
|
2090
1636
|
auditId: audit2.id,
|
|
2091
|
-
label: (0,
|
|
1637
|
+
label: (0, import_i18n19.__)("No accessibility statement has been created for this site.", "elementor"),
|
|
2092
1638
|
externalUrl: isReady ? ctx.pageContext.ally_accessibility_statement_url : ctx.pageContext.ally_plugin_url,
|
|
2093
|
-
ctaLabel: (0,
|
|
2094
|
-
secondaryCtaLabel: (0,
|
|
1639
|
+
ctaLabel: (0, import_i18n19.__)("Create", "elementor"),
|
|
1640
|
+
secondaryCtaLabel: (0, import_i18n19.__)("Learn more", "elementor"),
|
|
2095
1641
|
secondaryCtaUrl: "https://elementor.com/help/start-using-ally/#statement"
|
|
2096
1642
|
}
|
|
2097
1643
|
]
|
|
@@ -2100,7 +1646,7 @@ var audit2 = {
|
|
|
2100
1646
|
};
|
|
2101
1647
|
|
|
2102
1648
|
// src/audits/accessibility-widget.ts
|
|
2103
|
-
var
|
|
1649
|
+
var import_i18n20 = require("@wordpress/i18n");
|
|
2104
1650
|
|
|
2105
1651
|
// src/utils/scan-accessibility-widgets.ts
|
|
2106
1652
|
var ACCESSIBILITY_WIDGET_SCRIPT_SOURCES = ["cdn.elementor.com/a11y/widget.js"];
|
|
@@ -2111,18 +1657,18 @@ function hasAccessibilityWidgetScript(html) {
|
|
|
2111
1657
|
// src/audits/accessibility-widget.ts
|
|
2112
1658
|
var audit3 = {
|
|
2113
1659
|
id: "audits/accessibility-widget",
|
|
2114
|
-
title: (0,
|
|
2115
|
-
description: (0,
|
|
2116
|
-
fixHint: (0,
|
|
1660
|
+
title: (0, import_i18n20.__)("Add an accessibility widget", "elementor"),
|
|
1661
|
+
description: (0, import_i18n20.__)("Make your site more inclusive by adding an accessibility widget.", "elementor"),
|
|
1662
|
+
fixHint: (0, import_i18n20.__)("Activate Ally\u2019s accessibility widget to give visitors on-page accessibility tools.", "elementor"),
|
|
2117
1663
|
categories: ["accessibility"],
|
|
2118
1664
|
severity: "info",
|
|
2119
1665
|
weight: 1,
|
|
2120
1666
|
evaluate: (ctx) => {
|
|
2121
1667
|
if (!ctx.pageContext.frontend_url) {
|
|
2122
|
-
return { status: "skipped", reason: (0,
|
|
1668
|
+
return { status: "skipped", reason: (0, import_i18n20.__)("Page is not published.", "elementor") };
|
|
2123
1669
|
}
|
|
2124
1670
|
if (!ctx.renderedHtml) {
|
|
2125
|
-
return { status: "skipped", reason: (0,
|
|
1671
|
+
return { status: "skipped", reason: (0, import_i18n20.__)("Could not fetch the published page.", "elementor") };
|
|
2126
1672
|
}
|
|
2127
1673
|
if (hasAccessibilityWidgetScript(ctx.renderedHtml)) {
|
|
2128
1674
|
return { status: "pass" };
|
|
@@ -2133,9 +1679,9 @@ var audit3 = {
|
|
|
2133
1679
|
violations: [
|
|
2134
1680
|
{
|
|
2135
1681
|
auditId: audit3.id,
|
|
2136
|
-
label: (0,
|
|
1682
|
+
label: (0, import_i18n20.__)("No accessibility widget is active on this site.", "elementor"),
|
|
2137
1683
|
externalUrl: isReady ? ctx.pageContext.ally_widget_settings_url : ctx.pageContext.ally_plugin_url,
|
|
2138
|
-
ctaLabel: (0,
|
|
1684
|
+
ctaLabel: (0, import_i18n20.__)("Activate", "elementor")
|
|
2139
1685
|
}
|
|
2140
1686
|
]
|
|
2141
1687
|
};
|
|
@@ -2143,15 +1689,15 @@ var audit3 = {
|
|
|
2143
1689
|
};
|
|
2144
1690
|
|
|
2145
1691
|
// src/audits/cookie-policy.ts
|
|
2146
|
-
var
|
|
1692
|
+
var import_i18n21 = require("@wordpress/i18n");
|
|
2147
1693
|
var audit4 = {
|
|
2148
1694
|
id: "audits/cookie-policy",
|
|
2149
|
-
title: (0,
|
|
2150
|
-
description: (0,
|
|
1695
|
+
title: (0, import_i18n21.__)("Cookie policy", "elementor"),
|
|
1696
|
+
description: (0, import_i18n21.__)(
|
|
2151
1697
|
"A cookie policy is required by privacy regulations such as GDPR (EU) or CCPA (US) to inform visitors about tracking and data collection.",
|
|
2152
1698
|
"elementor"
|
|
2153
1699
|
),
|
|
2154
|
-
fixHint: (0,
|
|
1700
|
+
fixHint: (0, import_i18n21.__)("Install the Cookiez plugin to add a cookie policy to your website.", "elementor"),
|
|
2155
1701
|
categories: ["compliance"],
|
|
2156
1702
|
severity: "info",
|
|
2157
1703
|
weight: 1,
|
|
@@ -2164,9 +1710,9 @@ var audit4 = {
|
|
|
2164
1710
|
violations: [
|
|
2165
1711
|
{
|
|
2166
1712
|
auditId: audit4.id,
|
|
2167
|
-
label: (0,
|
|
1713
|
+
label: (0, import_i18n21.__)("Cookiez plugin is not installed or active.", "elementor"),
|
|
2168
1714
|
externalUrl: ctx.pageContext.cookiez_plugin_url,
|
|
2169
|
-
ctaLabel: (0,
|
|
1715
|
+
ctaLabel: (0, import_i18n21.__)("Set up cookie consent", "elementor")
|
|
2170
1716
|
}
|
|
2171
1717
|
]
|
|
2172
1718
|
};
|
|
@@ -2175,7 +1721,7 @@ var audit4 = {
|
|
|
2175
1721
|
|
|
2176
1722
|
// src/audits/deep-nesting.ts
|
|
2177
1723
|
var import_editor_elements7 = require("@elementor/editor-elements");
|
|
2178
|
-
var
|
|
1724
|
+
var import_i18n22 = require("@wordpress/i18n");
|
|
2179
1725
|
var MAX_NESTING_DEPTH = 6;
|
|
2180
1726
|
function isNestingElement(node, widgetsCache) {
|
|
2181
1727
|
if (node.elType === "container") {
|
|
@@ -2185,18 +1731,18 @@ function isNestingElement(node, widgetsCache) {
|
|
|
2185
1731
|
}
|
|
2186
1732
|
var audit5 = {
|
|
2187
1733
|
id: "audits/deep-nesting",
|
|
2188
|
-
title: (0,
|
|
2189
|
-
description: (0,
|
|
1734
|
+
title: (0, import_i18n22.__)("Deep container nesting", "elementor"),
|
|
1735
|
+
description: (0, import_i18n22.__)(
|
|
2190
1736
|
"Container nesting exceeds the recommended depth. Deep DOM trees hurt rendering performance and readability.",
|
|
2191
1737
|
"elementor"
|
|
2192
1738
|
),
|
|
2193
|
-
fixHint: (0,
|
|
1739
|
+
fixHint: (0, import_i18n22.__)("Flatten the layout by removing unnecessary wrapper containers.", "elementor"),
|
|
2194
1740
|
categories: ["performance", "best-practices"],
|
|
2195
1741
|
severity: "warning",
|
|
2196
1742
|
weight: 5,
|
|
2197
1743
|
evaluate: (ctx) => {
|
|
2198
1744
|
if (ctx.elements.tree.length === 0) {
|
|
2199
|
-
return { status: "skipped", reason: (0,
|
|
1745
|
+
return { status: "skipped", reason: (0, import_i18n22.__)("No elements", "elementor") };
|
|
2200
1746
|
}
|
|
2201
1747
|
const widgetsCache = (0, import_editor_elements7.getWidgetsCache)();
|
|
2202
1748
|
const violations = [];
|
|
@@ -2210,7 +1756,7 @@ var audit5 = {
|
|
|
2210
1756
|
auditId: audit5.id,
|
|
2211
1757
|
elementId: node.id,
|
|
2212
1758
|
targetHint: "element-settings",
|
|
2213
|
-
label: (0,
|
|
1759
|
+
label: (0, import_i18n22.__)("Container nesting is too deep.", "elementor")
|
|
2214
1760
|
});
|
|
2215
1761
|
}
|
|
2216
1762
|
});
|
|
@@ -2219,15 +1765,15 @@ var audit5 = {
|
|
|
2219
1765
|
};
|
|
2220
1766
|
|
|
2221
1767
|
// src/audits/default-design-system.ts
|
|
2222
|
-
var
|
|
1768
|
+
var import_i18n23 = require("@wordpress/i18n");
|
|
2223
1769
|
var audit6 = {
|
|
2224
1770
|
id: "audits/default-design-system",
|
|
2225
|
-
title: (0,
|
|
2226
|
-
description: (0,
|
|
1771
|
+
title: (0, import_i18n23.__)("Default website kit", "elementor"),
|
|
1772
|
+
description: (0, import_i18n23.__)(
|
|
2227
1773
|
"Your website is using the default design system colors and fonts. Custom branding makes the website feel uniquely yours.",
|
|
2228
1774
|
"elementor"
|
|
2229
1775
|
),
|
|
2230
|
-
fixHint: (0,
|
|
1776
|
+
fixHint: (0, import_i18n23.__)("Open Site Settings and customize your kit (colors, fonts, layout).", "elementor"),
|
|
2231
1777
|
categories: ["best-practices"],
|
|
2232
1778
|
severity: "info",
|
|
2233
1779
|
weight: 1,
|
|
@@ -2240,7 +1786,7 @@ var audit6 = {
|
|
|
2240
1786
|
violations: [
|
|
2241
1787
|
{
|
|
2242
1788
|
auditId: audit6.id,
|
|
2243
|
-
label: (0,
|
|
1789
|
+
label: (0, import_i18n23.__)("Kit appears unchanged from default.", "elementor"),
|
|
2244
1790
|
targetHint: "site-settings"
|
|
2245
1791
|
}
|
|
2246
1792
|
]
|
|
@@ -2250,16 +1796,16 @@ var audit6 = {
|
|
|
2250
1796
|
|
|
2251
1797
|
// src/audits/deprecated-widgets.ts
|
|
2252
1798
|
var import_editor_elements8 = require("@elementor/editor-elements");
|
|
2253
|
-
var
|
|
1799
|
+
var import_i18n24 = require("@wordpress/i18n");
|
|
2254
1800
|
var DEPRECATION_CONTROL_NAME = "deprecation_message";
|
|
2255
1801
|
var audit7 = {
|
|
2256
1802
|
id: "audits/deprecated-widgets",
|
|
2257
|
-
title: (0,
|
|
2258
|
-
description: (0,
|
|
1803
|
+
title: (0, import_i18n24.__)("Deprecated widgets", "elementor"),
|
|
1804
|
+
description: (0, import_i18n24.__)(
|
|
2259
1805
|
"Deprecated widgets should not be used. For better capabilities use the recommended replacement.",
|
|
2260
1806
|
"elementor"
|
|
2261
1807
|
),
|
|
2262
|
-
fixHint: (0,
|
|
1808
|
+
fixHint: (0, import_i18n24.__)("Replace each deprecated widget with the recommended new widget shown in its panel.", "elementor"),
|
|
2263
1809
|
categories: ["best-practices", "performance"],
|
|
2264
1810
|
severity: "warning",
|
|
2265
1811
|
weight: 7,
|
|
@@ -2286,7 +1832,7 @@ var audit7 = {
|
|
|
2286
1832
|
auditId: audit7.id,
|
|
2287
1833
|
elementId: node.id,
|
|
2288
1834
|
targetHint: "element-settings",
|
|
2289
|
-
label: (0,
|
|
1835
|
+
label: (0, import_i18n24.__)("Using deprecated widget.", "elementor")
|
|
2290
1836
|
});
|
|
2291
1837
|
});
|
|
2292
1838
|
return violations.length === 0 ? { status: "pass" } : { status: "fail", violations };
|
|
@@ -2294,7 +1840,7 @@ var audit7 = {
|
|
|
2294
1840
|
};
|
|
2295
1841
|
|
|
2296
1842
|
// src/audits/google-consent-mode.ts
|
|
2297
|
-
var
|
|
1843
|
+
var import_i18n25 = require("@wordpress/i18n");
|
|
2298
1844
|
|
|
2299
1845
|
// src/utils/scan-consent-signals.ts
|
|
2300
1846
|
var GOOGLE_TRACKING_PATTERNS = [
|
|
@@ -2317,12 +1863,12 @@ function hasConsentDefaultCall(html) {
|
|
|
2317
1863
|
// src/audits/google-consent-mode.ts
|
|
2318
1864
|
var audit8 = {
|
|
2319
1865
|
id: "audits/google-consent-mode",
|
|
2320
|
-
title: (0,
|
|
2321
|
-
description: (0,
|
|
1866
|
+
title: (0, import_i18n25.__)("Google Consent Mode", "elementor"),
|
|
1867
|
+
description: (0, import_i18n25.__)(
|
|
2322
1868
|
"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.",
|
|
2323
1869
|
"elementor"
|
|
2324
1870
|
),
|
|
2325
|
-
fixHint: (0,
|
|
1871
|
+
fixHint: (0, import_i18n25.__)(
|
|
2326
1872
|
"Turn on Google Consent Mode in your cookie consent plugin so Google tags respect visitor consent choices.",
|
|
2327
1873
|
"elementor"
|
|
2328
1874
|
),
|
|
@@ -2331,18 +1877,18 @@ var audit8 = {
|
|
|
2331
1877
|
weight: 1,
|
|
2332
1878
|
evaluate: (ctx) => {
|
|
2333
1879
|
if (!ctx.pageContext.frontend_url) {
|
|
2334
|
-
return { status: "skipped", reason: (0,
|
|
1880
|
+
return { status: "skipped", reason: (0, import_i18n25.__)("Page is not published.", "elementor") };
|
|
2335
1881
|
}
|
|
2336
1882
|
if (!ctx.renderedHtml) {
|
|
2337
|
-
return { status: "skipped", reason: (0,
|
|
1883
|
+
return { status: "skipped", reason: (0, import_i18n25.__)("Could not fetch the published page.", "elementor") };
|
|
2338
1884
|
}
|
|
2339
1885
|
if (!hasGoogleTracking(ctx.renderedHtml)) {
|
|
2340
|
-
return { status: "skipped", reason: (0,
|
|
1886
|
+
return { status: "skipped", reason: (0, import_i18n25.__)("No Google tracking product detected.", "elementor") };
|
|
2341
1887
|
}
|
|
2342
1888
|
if (hasConsentDefaultCall(ctx.renderedHtml)) {
|
|
2343
1889
|
return { status: "pass" };
|
|
2344
1890
|
}
|
|
2345
|
-
const label = (0,
|
|
1891
|
+
const label = (0, import_i18n25.__)("No Google Consent Mode signal was found on the page.", "elementor");
|
|
2346
1892
|
const isCookiezReady = ctx.pageContext.cookiez_plugin_installed && ctx.pageContext.cookiez_plugin_active;
|
|
2347
1893
|
if (isCookiezReady) {
|
|
2348
1894
|
return {
|
|
@@ -2351,7 +1897,7 @@ var audit8 = {
|
|
|
2351
1897
|
{
|
|
2352
1898
|
auditId: audit8.id,
|
|
2353
1899
|
label,
|
|
2354
|
-
ctaLabel: (0,
|
|
1900
|
+
ctaLabel: (0, import_i18n25.__)("Enable", "elementor"),
|
|
2355
1901
|
externalUrl: ctx.pageContext.cookiez_consent_mode_settings_url
|
|
2356
1902
|
}
|
|
2357
1903
|
]
|
|
@@ -2371,7 +1917,7 @@ var audit8 = {
|
|
|
2371
1917
|
};
|
|
2372
1918
|
|
|
2373
1919
|
// src/audits/heading-structure.ts
|
|
2374
|
-
var
|
|
1920
|
+
var import_i18n26 = require("@wordpress/i18n");
|
|
2375
1921
|
var HEADING_LEVELS = ["h1", "h2", "h3", "h4", "h5", "h6"];
|
|
2376
1922
|
var HEADING_CONTROLS_REGISTRY = {
|
|
2377
1923
|
// Core
|
|
@@ -2549,27 +2095,27 @@ function extractPageHeadings(tree) {
|
|
|
2549
2095
|
}
|
|
2550
2096
|
var audit9 = {
|
|
2551
2097
|
id: "audits/heading-structure",
|
|
2552
|
-
title: (0,
|
|
2553
|
-
description: (0,
|
|
2554
|
-
fixHint: (0,
|
|
2098
|
+
title: (0, import_i18n26.__)("Heading structure", "elementor"),
|
|
2099
|
+
description: (0, import_i18n26.__)("Pages should have exactly one H1 and a non-skipping heading order.", "elementor"),
|
|
2100
|
+
fixHint: (0, import_i18n26.__)("Ensure your page has one H1 and that heading levels do not skip (no H2 \u2192 H4).", "elementor"),
|
|
2555
2101
|
categories: ["seo", "accessibility"],
|
|
2556
2102
|
severity: "error",
|
|
2557
2103
|
weight: 10,
|
|
2558
2104
|
evaluate: (ctx) => {
|
|
2559
2105
|
if (ctx.elements.tree.length === 0) {
|
|
2560
|
-
return { status: "skipped", reason: (0,
|
|
2106
|
+
return { status: "skipped", reason: (0, import_i18n26.__)("No elements", "elementor") };
|
|
2561
2107
|
}
|
|
2562
2108
|
const headings = extractPageHeadings(ctx.elements.tree);
|
|
2563
2109
|
const violations = [];
|
|
2564
2110
|
if (headings.length === 0) {
|
|
2565
2111
|
violations.push({
|
|
2566
2112
|
auditId: audit9.id,
|
|
2567
|
-
label: (0,
|
|
2113
|
+
label: (0, import_i18n26.__)("No headings found on the page.", "elementor")
|
|
2568
2114
|
});
|
|
2569
2115
|
} else {
|
|
2570
2116
|
const h1Count = headings.filter((h) => h.level === 1).length;
|
|
2571
2117
|
if (h1Count === 0) {
|
|
2572
|
-
violations.push({ auditId: audit9.id, label: (0,
|
|
2118
|
+
violations.push({ auditId: audit9.id, label: (0, import_i18n26.__)("No H1 on the page.", "elementor") });
|
|
2573
2119
|
}
|
|
2574
2120
|
if (h1Count > 1) {
|
|
2575
2121
|
headings.filter((h) => h.level === 1).slice(1).forEach(
|
|
@@ -2577,7 +2123,7 @@ var audit9 = {
|
|
|
2577
2123
|
auditId: audit9.id,
|
|
2578
2124
|
elementId: h.elementId,
|
|
2579
2125
|
targetHint: "element-settings",
|
|
2580
|
-
label: (0,
|
|
2126
|
+
label: (0, import_i18n26.__)("More than one H1 on the page.", "elementor")
|
|
2581
2127
|
})
|
|
2582
2128
|
);
|
|
2583
2129
|
}
|
|
@@ -2587,7 +2133,7 @@ var audit9 = {
|
|
|
2587
2133
|
auditId: audit9.id,
|
|
2588
2134
|
elementId: headings[i].elementId,
|
|
2589
2135
|
targetHint: "element-settings",
|
|
2590
|
-
label: (0,
|
|
2136
|
+
label: (0, import_i18n26.__)("Heading level skipped.", "elementor")
|
|
2591
2137
|
});
|
|
2592
2138
|
}
|
|
2593
2139
|
}
|
|
@@ -2597,24 +2143,24 @@ var audit9 = {
|
|
|
2597
2143
|
};
|
|
2598
2144
|
|
|
2599
2145
|
// src/audits/hidden-elements.ts
|
|
2600
|
-
var
|
|
2146
|
+
var import_i18n27 = require("@wordpress/i18n");
|
|
2601
2147
|
function isHiddenOnAllDevices(settings) {
|
|
2602
2148
|
return Boolean(settings.hide_desktop) && Boolean(settings.hide_tablet) && Boolean(settings.hide_mobile);
|
|
2603
2149
|
}
|
|
2604
2150
|
var audit10 = {
|
|
2605
2151
|
id: "audits/hidden-elements",
|
|
2606
|
-
title: (0,
|
|
2607
|
-
description: (0,
|
|
2152
|
+
title: (0, import_i18n27.__)("Hidden elements", "elementor"),
|
|
2153
|
+
description: (0, import_i18n27.__)(
|
|
2608
2154
|
"Elements hidden on all devices simultaneously are effectively dead code in the page tree.",
|
|
2609
2155
|
"elementor"
|
|
2610
2156
|
),
|
|
2611
|
-
fixHint: (0,
|
|
2157
|
+
fixHint: (0, import_i18n27.__)("Remove the element or make it visible on at least one device breakpoint.", "elementor"),
|
|
2612
2158
|
categories: ["best-practices", "performance"],
|
|
2613
2159
|
severity: "info",
|
|
2614
2160
|
weight: 3,
|
|
2615
2161
|
evaluate: (ctx) => {
|
|
2616
2162
|
if (ctx.elements.tree.length === 0) {
|
|
2617
|
-
return { status: "skipped", reason: (0,
|
|
2163
|
+
return { status: "skipped", reason: (0, import_i18n27.__)("No elements", "elementor") };
|
|
2618
2164
|
}
|
|
2619
2165
|
const violations = [];
|
|
2620
2166
|
walkElements(ctx.elements.tree, (node) => {
|
|
@@ -2623,7 +2169,7 @@ var audit10 = {
|
|
|
2623
2169
|
auditId: audit10.id,
|
|
2624
2170
|
elementId: node.id,
|
|
2625
2171
|
targetHint: "element-settings",
|
|
2626
|
-
label: (0,
|
|
2172
|
+
label: (0, import_i18n27.__)("Element is hidden on all devices.", "elementor")
|
|
2627
2173
|
});
|
|
2628
2174
|
}
|
|
2629
2175
|
});
|
|
@@ -2632,7 +2178,7 @@ var audit10 = {
|
|
|
2632
2178
|
};
|
|
2633
2179
|
|
|
2634
2180
|
// src/audits/images-alt-text.ts
|
|
2635
|
-
var
|
|
2181
|
+
var import_i18n28 = require("@wordpress/i18n");
|
|
2636
2182
|
|
|
2637
2183
|
// src/utils/image-alt.ts
|
|
2638
2184
|
function hasMeaningfulAlt(media, pageContext) {
|
|
@@ -2653,15 +2199,15 @@ function isImageSourcePresent(media) {
|
|
|
2653
2199
|
// src/audits/images-alt-text.ts
|
|
2654
2200
|
var audit11 = {
|
|
2655
2201
|
id: "audits/images-alt-text",
|
|
2656
|
-
title: (0,
|
|
2657
|
-
description: (0,
|
|
2658
|
-
fixHint: (0,
|
|
2202
|
+
title: (0, import_i18n28.__)("Images alt text", "elementor"),
|
|
2203
|
+
description: (0, import_i18n28.__)("Every image needs a meaningful alt attribute for screen readers and image-search.", "elementor"),
|
|
2204
|
+
fixHint: (0, import_i18n28.__)("Open the image's settings and add an Alt Text describing the image.", "elementor"),
|
|
2659
2205
|
categories: ["seo", "accessibility"],
|
|
2660
2206
|
severity: "error",
|
|
2661
2207
|
weight: 10,
|
|
2662
2208
|
evaluate: (ctx) => {
|
|
2663
2209
|
if (!hasPageImages(ctx.elements.tree)) {
|
|
2664
|
-
return { status: "skipped", reason: (0,
|
|
2210
|
+
return { status: "skipped", reason: (0, import_i18n28.__)("No images", "elementor") };
|
|
2665
2211
|
}
|
|
2666
2212
|
const violations = [];
|
|
2667
2213
|
const failedWidgetIds = /* @__PURE__ */ new Set();
|
|
@@ -2677,9 +2223,9 @@ var audit11 = {
|
|
|
2677
2223
|
auditId: audit11.id,
|
|
2678
2224
|
elementId: node.id,
|
|
2679
2225
|
targetHint: "element-settings",
|
|
2680
|
-
label: (0,
|
|
2226
|
+
label: (0, import_i18n28.__)("Image is missing alt text.", "elementor"),
|
|
2681
2227
|
externalUrl: ctx.pageContext.ally_plugin_url,
|
|
2682
|
-
ctaLabel: (0,
|
|
2228
|
+
ctaLabel: (0, import_i18n28.__)("Fix with Ally", "elementor")
|
|
2683
2229
|
});
|
|
2684
2230
|
}
|
|
2685
2231
|
});
|
|
@@ -2688,13 +2234,13 @@ var audit11 = {
|
|
|
2688
2234
|
};
|
|
2689
2235
|
|
|
2690
2236
|
// src/audits/images-inefficient-format.ts
|
|
2691
|
-
var
|
|
2237
|
+
var import_i18n29 = require("@wordpress/i18n");
|
|
2692
2238
|
var LEGACY_RASTER_MIME_TYPES = /* @__PURE__ */ new Set(["image/jpeg", "image/png", "image/gif", "image/bmp", "image/tiff"]);
|
|
2693
2239
|
var audit12 = {
|
|
2694
2240
|
id: "audits/images-inefficient-format",
|
|
2695
|
-
title: (0,
|
|
2696
|
-
description: (0,
|
|
2697
|
-
fixHint: (0,
|
|
2241
|
+
title: (0, import_i18n29.__)("Inefficient image format", "elementor"),
|
|
2242
|
+
description: (0, import_i18n29.__)("Image isn't served in a modern, efficient format like WebP or AVIF.", "elementor"),
|
|
2243
|
+
fixHint: (0, import_i18n29.__)("Convert the image to a modern format like WebP or AVIF, or enable image optimization.", "elementor"),
|
|
2698
2244
|
categories: ["performance"],
|
|
2699
2245
|
severity: "info",
|
|
2700
2246
|
weight: 1,
|
|
@@ -2722,29 +2268,29 @@ var audit12 = {
|
|
|
2722
2268
|
walkAtomicImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
|
|
2723
2269
|
walkAtomicBackgroundImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
|
|
2724
2270
|
if (!hasAnyImage) {
|
|
2725
|
-
return { status: "skipped", reason: (0,
|
|
2271
|
+
return { status: "skipped", reason: (0, import_i18n29.__)("No images", "elementor") };
|
|
2726
2272
|
}
|
|
2727
2273
|
const violations = Array.from(offendingElementIds).map((elementId) => ({
|
|
2728
2274
|
auditId: audit12.id,
|
|
2729
2275
|
elementId,
|
|
2730
2276
|
targetHint: "element-settings",
|
|
2731
|
-
label: (0,
|
|
2277
|
+
label: (0, import_i18n29.__)("Image isn't served in a modern format like WebP or AVIF.", "elementor"),
|
|
2732
2278
|
externalUrl: ctx.pageContext.image_optimization_plugin_url,
|
|
2733
|
-
ctaLabel: (0,
|
|
2279
|
+
ctaLabel: (0, import_i18n29.__)("Optimize all", "elementor")
|
|
2734
2280
|
}));
|
|
2735
2281
|
return violations.length === 0 ? { status: "pass" } : { status: "fail", violations, metadata: { inefficientImageFormatCount } };
|
|
2736
2282
|
}
|
|
2737
2283
|
};
|
|
2738
2284
|
|
|
2739
2285
|
// src/audits/images-too-large.ts
|
|
2740
|
-
var
|
|
2286
|
+
var import_i18n30 = require("@wordpress/i18n");
|
|
2741
2287
|
var SIZE_THRESHOLD_BYTES = 500 * 1024;
|
|
2742
2288
|
var BYTES_PER_KB = 1024;
|
|
2743
2289
|
var audit13 = {
|
|
2744
2290
|
id: "audits/images-too-large",
|
|
2745
|
-
title: (0,
|
|
2746
|
-
description: (0,
|
|
2747
|
-
fixHint: (0,
|
|
2291
|
+
title: (0, import_i18n30.__)("Oversized images", "elementor"),
|
|
2292
|
+
description: (0, import_i18n30.__)("Large image files slow down the page.", "elementor"),
|
|
2293
|
+
fixHint: (0, import_i18n30.__)("Replace the image with a smaller version or enable image optimization.", "elementor"),
|
|
2748
2294
|
categories: ["performance"],
|
|
2749
2295
|
severity: "warning",
|
|
2750
2296
|
weight: 7,
|
|
@@ -2774,40 +2320,40 @@ var audit13 = {
|
|
|
2774
2320
|
walkAtomicImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
|
|
2775
2321
|
walkAtomicBackgroundImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
|
|
2776
2322
|
if (!hasAnyImage) {
|
|
2777
|
-
return { status: "skipped", reason: (0,
|
|
2323
|
+
return { status: "skipped", reason: (0, import_i18n30.__)("No images", "elementor") };
|
|
2778
2324
|
}
|
|
2779
2325
|
const violations = Array.from(widgetMaxKb.entries()).map(([elementId, kb]) => ({
|
|
2780
2326
|
auditId: audit13.id,
|
|
2781
2327
|
elementId,
|
|
2782
2328
|
targetHint: "element-settings",
|
|
2783
|
-
label: (0,
|
|
2329
|
+
label: (0, import_i18n30.sprintf)(
|
|
2784
2330
|
/* translators: %d is the image file size in kilobytes. */
|
|
2785
|
-
(0,
|
|
2331
|
+
(0, import_i18n30.__)("Image is %d KB (over 500 KB).", "elementor"),
|
|
2786
2332
|
kb
|
|
2787
2333
|
),
|
|
2788
2334
|
externalUrl: ctx.pageContext.image_optimization_plugin_url,
|
|
2789
|
-
ctaLabel: (0,
|
|
2335
|
+
ctaLabel: (0, import_i18n30.__)("Optimize all", "elementor")
|
|
2790
2336
|
}));
|
|
2791
2337
|
return violations.length === 0 ? { status: "pass" } : { status: "fail", violations, metadata: { oversizedImageCount } };
|
|
2792
2338
|
}
|
|
2793
2339
|
};
|
|
2794
2340
|
|
|
2795
2341
|
// src/audits/nested-boxed-containers.ts
|
|
2796
|
-
var
|
|
2342
|
+
var import_i18n31 = require("@wordpress/i18n");
|
|
2797
2343
|
function isBoxed(settings) {
|
|
2798
2344
|
return settings.content_width === "boxed";
|
|
2799
2345
|
}
|
|
2800
2346
|
var audit14 = {
|
|
2801
2347
|
id: "audits/nested-boxed-containers",
|
|
2802
|
-
title: (0,
|
|
2803
|
-
description: (0,
|
|
2804
|
-
fixHint: (0,
|
|
2348
|
+
title: (0, import_i18n31.__)("Boxed container nested inside a boxed parent", "elementor"),
|
|
2349
|
+
description: (0, import_i18n31.__)("An inner container does not need to be boxed when its parent already is.", "elementor"),
|
|
2350
|
+
fixHint: (0, import_i18n31.__)("Change the inner container's content width to Full Width.", "elementor"),
|
|
2805
2351
|
categories: ["best-practices", "performance"],
|
|
2806
2352
|
severity: "info",
|
|
2807
2353
|
weight: 5,
|
|
2808
2354
|
evaluate: (ctx) => {
|
|
2809
2355
|
if (ctx.elements.tree.length === 0) {
|
|
2810
|
-
return { status: "skipped", reason: (0,
|
|
2356
|
+
return { status: "skipped", reason: (0, import_i18n31.__)("No elements", "elementor") };
|
|
2811
2357
|
}
|
|
2812
2358
|
const violations = [];
|
|
2813
2359
|
walkElements(ctx.elements.tree, (node, parents) => {
|
|
@@ -2820,7 +2366,7 @@ var audit14 = {
|
|
|
2820
2366
|
auditId: audit14.id,
|
|
2821
2367
|
elementId: node.id,
|
|
2822
2368
|
targetHint: "element-settings",
|
|
2823
|
-
label: (0,
|
|
2369
|
+
label: (0, import_i18n31.__)("Nested boxed container.", "elementor")
|
|
2824
2370
|
});
|
|
2825
2371
|
}
|
|
2826
2372
|
});
|
|
@@ -2829,12 +2375,12 @@ var audit14 = {
|
|
|
2829
2375
|
};
|
|
2830
2376
|
|
|
2831
2377
|
// src/audits/page-excerpt.ts
|
|
2832
|
-
var
|
|
2378
|
+
var import_i18n32 = require("@wordpress/i18n");
|
|
2833
2379
|
var audit15 = {
|
|
2834
2380
|
id: "audits/page-excerpt",
|
|
2835
|
-
title: (0,
|
|
2836
|
-
description: (0,
|
|
2837
|
-
fixHint: (0,
|
|
2381
|
+
title: (0, import_i18n32.__)("Page excerpt", "elementor"),
|
|
2382
|
+
description: (0, import_i18n32.__)("A descriptive excerpt helps search engines and previews summarize the page.", "elementor"),
|
|
2383
|
+
fixHint: (0, import_i18n32.__)("Open Page Settings and write a short excerpt.", "elementor"),
|
|
2838
2384
|
categories: ["seo"],
|
|
2839
2385
|
severity: "warning",
|
|
2840
2386
|
weight: 5,
|
|
@@ -2847,7 +2393,7 @@ var audit15 = {
|
|
|
2847
2393
|
violations: [
|
|
2848
2394
|
{
|
|
2849
2395
|
auditId: audit15.id,
|
|
2850
|
-
label: (0,
|
|
2396
|
+
label: (0, import_i18n32.__)("Page has no excerpt.", "elementor"),
|
|
2851
2397
|
targetHint: "page-settings",
|
|
2852
2398
|
angieFix: true
|
|
2853
2399
|
}
|
|
@@ -2857,12 +2403,12 @@ var audit15 = {
|
|
|
2857
2403
|
};
|
|
2858
2404
|
|
|
2859
2405
|
// src/audits/page-featured-image.ts
|
|
2860
|
-
var
|
|
2406
|
+
var import_i18n33 = require("@wordpress/i18n");
|
|
2861
2407
|
var audit16 = {
|
|
2862
2408
|
id: "audits/page-featured-image",
|
|
2863
|
-
title: (0,
|
|
2864
|
-
description: (0,
|
|
2865
|
-
fixHint: (0,
|
|
2409
|
+
title: (0, import_i18n33.__)("Page featured image", "elementor"),
|
|
2410
|
+
description: (0, import_i18n33.__)("Featured images are used by social shares and many themes for hero visuals.", "elementor"),
|
|
2411
|
+
fixHint: (0, import_i18n33.__)("Open Page Settings and set a featured image.", "elementor"),
|
|
2866
2412
|
categories: ["seo"],
|
|
2867
2413
|
severity: "info",
|
|
2868
2414
|
weight: 5,
|
|
@@ -2875,7 +2421,7 @@ var audit16 = {
|
|
|
2875
2421
|
violations: [
|
|
2876
2422
|
{
|
|
2877
2423
|
auditId: audit16.id,
|
|
2878
|
-
label: (0,
|
|
2424
|
+
label: (0, import_i18n33.__)("No featured image set.", "elementor"),
|
|
2879
2425
|
targetHint: "page-settings"
|
|
2880
2426
|
}
|
|
2881
2427
|
]
|
|
@@ -2884,13 +2430,13 @@ var audit16 = {
|
|
|
2884
2430
|
};
|
|
2885
2431
|
|
|
2886
2432
|
// src/audits/page-title.ts
|
|
2887
|
-
var
|
|
2433
|
+
var import_i18n34 = require("@wordpress/i18n");
|
|
2888
2434
|
var MAX_TITLE_LENGTH = 60;
|
|
2889
2435
|
var audit17 = {
|
|
2890
2436
|
id: "audits/page-title",
|
|
2891
|
-
title: (0,
|
|
2892
|
-
description: (0,
|
|
2893
|
-
fixHint: (0,
|
|
2437
|
+
title: (0, import_i18n34.__)("Page title", "elementor"),
|
|
2438
|
+
description: (0, import_i18n34.__)("Pages need a clear title for SEO and screen-reader navigation.", "elementor"),
|
|
2439
|
+
fixHint: (0, import_i18n34.__)("Open Page Settings and add a title.", "elementor"),
|
|
2894
2440
|
categories: ["seo"],
|
|
2895
2441
|
severity: "error",
|
|
2896
2442
|
weight: 10,
|
|
@@ -2902,10 +2448,10 @@ var audit17 = {
|
|
|
2902
2448
|
violations: [
|
|
2903
2449
|
{
|
|
2904
2450
|
auditId: audit17.id,
|
|
2905
|
-
label: (0,
|
|
2451
|
+
label: (0, import_i18n34.__)("Page has no title.", "elementor"),
|
|
2906
2452
|
targetHint: "page-settings",
|
|
2907
2453
|
angieFix: true,
|
|
2908
|
-
angiePrompt: (0,
|
|
2454
|
+
angiePrompt: (0, import_i18n34.__)(
|
|
2909
2455
|
"Based on this page's contents, generate a title for this page.",
|
|
2910
2456
|
"elementor"
|
|
2911
2457
|
)
|
|
@@ -2919,7 +2465,7 @@ var audit17 = {
|
|
|
2919
2465
|
violations: [
|
|
2920
2466
|
{
|
|
2921
2467
|
auditId: audit17.id,
|
|
2922
|
-
label: (0,
|
|
2468
|
+
label: (0, import_i18n34.__)("Page title is too long.", "elementor"),
|
|
2923
2469
|
targetHint: "page-settings",
|
|
2924
2470
|
angieFix: true
|
|
2925
2471
|
}
|
|
@@ -2931,7 +2477,7 @@ var audit17 = {
|
|
|
2931
2477
|
};
|
|
2932
2478
|
|
|
2933
2479
|
// src/audits/prefer-global-colors.ts
|
|
2934
|
-
var
|
|
2480
|
+
var import_i18n35 = require("@wordpress/i18n");
|
|
2935
2481
|
|
|
2936
2482
|
// src/utils/collect-hardcoded-colors.ts
|
|
2937
2483
|
var RESERVED_SETTING_KEYS = /* @__PURE__ */ new Set(["__globals__", "__dynamic__"]);
|
|
@@ -2999,18 +2545,18 @@ function findMatchingGlobalByValue(value, globals) {
|
|
|
2999
2545
|
// src/audits/prefer-global-colors.ts
|
|
3000
2546
|
var audit18 = {
|
|
3001
2547
|
id: "audits/prefer-global-colors",
|
|
3002
|
-
title: (0,
|
|
3003
|
-
description: (0,
|
|
3004
|
-
fixHint: (0,
|
|
2548
|
+
title: (0, import_i18n35.__)("Prefer global colors", "elementor"),
|
|
2549
|
+
description: (0, import_i18n35.__)("Global colors make the design consistent and easy to update site-wide.", "elementor"),
|
|
2550
|
+
fixHint: (0, import_i18n35.__)("Replace the hard-coded value with the matching global color.", "elementor"),
|
|
3005
2551
|
categories: ["best-practices"],
|
|
3006
2552
|
severity: "info",
|
|
3007
2553
|
weight: 3,
|
|
3008
2554
|
evaluate: (ctx) => {
|
|
3009
2555
|
if (ctx.elements.tree.length === 0) {
|
|
3010
|
-
return { status: "skipped", reason: (0,
|
|
2556
|
+
return { status: "skipped", reason: (0, import_i18n35.__)("No elements", "elementor") };
|
|
3011
2557
|
}
|
|
3012
2558
|
if (ctx.kit.globals.colors.length === 0) {
|
|
3013
|
-
return { status: "skipped", reason: (0,
|
|
2559
|
+
return { status: "skipped", reason: (0, import_i18n35.__)("No global colors", "elementor") };
|
|
3014
2560
|
}
|
|
3015
2561
|
const violations = [];
|
|
3016
2562
|
walkElements(ctx.elements.tree, (node) => {
|
|
@@ -3024,9 +2570,9 @@ var audit18 = {
|
|
|
3024
2570
|
elementId: node.id,
|
|
3025
2571
|
targetHint: "element-settings",
|
|
3026
2572
|
angieFix: true,
|
|
3027
|
-
label: (0,
|
|
2573
|
+
label: (0, import_i18n35.sprintf)(
|
|
3028
2574
|
/* translators: 1: hard-coded color value, 2: global color title. */
|
|
3029
|
-
(0,
|
|
2575
|
+
(0, import_i18n35.__)('replace "%1$s" with "%2$s" global color', "elementor"),
|
|
3030
2576
|
value,
|
|
3031
2577
|
global.title
|
|
3032
2578
|
)
|
|
@@ -3038,7 +2584,7 @@ var audit18 = {
|
|
|
3038
2584
|
};
|
|
3039
2585
|
|
|
3040
2586
|
// src/audits/prefer-global-fonts.ts
|
|
3041
|
-
var
|
|
2587
|
+
var import_i18n36 = require("@wordpress/i18n");
|
|
3042
2588
|
|
|
3043
2589
|
// src/utils/collect-hardcoded-fonts.ts
|
|
3044
2590
|
var RESERVED_SETTING_KEYS2 = /* @__PURE__ */ new Set(["__globals__", "__dynamic__"]);
|
|
@@ -3098,18 +2644,18 @@ function collectHardcodedFonts(settings, pathPrefix = "") {
|
|
|
3098
2644
|
// src/audits/prefer-global-fonts.ts
|
|
3099
2645
|
var audit19 = {
|
|
3100
2646
|
id: "audits/prefer-global-fonts",
|
|
3101
|
-
title: (0,
|
|
3102
|
-
description: (0,
|
|
3103
|
-
fixHint: (0,
|
|
2647
|
+
title: (0, import_i18n36.__)("Prefer global fonts", "elementor"),
|
|
2648
|
+
description: (0, import_i18n36.__)("Global fonts make the design consistent and easy to update site-wide.", "elementor"),
|
|
2649
|
+
fixHint: (0, import_i18n36.__)("Replace the hard-coded value with the matching global font.", "elementor"),
|
|
3104
2650
|
categories: ["best-practices", "performance"],
|
|
3105
2651
|
severity: "info",
|
|
3106
2652
|
weight: 3,
|
|
3107
2653
|
evaluate: (ctx) => {
|
|
3108
2654
|
if (ctx.elements.tree.length === 0) {
|
|
3109
|
-
return { status: "skipped", reason: (0,
|
|
2655
|
+
return { status: "skipped", reason: (0, import_i18n36.__)("No elements", "elementor") };
|
|
3110
2656
|
}
|
|
3111
2657
|
if (ctx.kit.globals.fonts.length === 0) {
|
|
3112
|
-
return { status: "skipped", reason: (0,
|
|
2658
|
+
return { status: "skipped", reason: (0, import_i18n36.__)("No global fonts", "elementor") };
|
|
3113
2659
|
}
|
|
3114
2660
|
const violations = [];
|
|
3115
2661
|
walkElements(ctx.elements.tree, (node) => {
|
|
@@ -3122,9 +2668,9 @@ var audit19 = {
|
|
|
3122
2668
|
auditId: audit19.id,
|
|
3123
2669
|
elementId: node.id,
|
|
3124
2670
|
targetHint: "element-settings",
|
|
3125
|
-
label: (0,
|
|
2671
|
+
label: (0, import_i18n36.sprintf)(
|
|
3126
2672
|
/* translators: %s: global font title. */
|
|
3127
|
-
(0,
|
|
2673
|
+
(0, import_i18n36.__)('replace hardcoded typography with "%s" global font', "elementor"),
|
|
3128
2674
|
global.title
|
|
3129
2675
|
)
|
|
3130
2676
|
});
|
|
@@ -3135,15 +2681,15 @@ var audit19 = {
|
|
|
3135
2681
|
};
|
|
3136
2682
|
|
|
3137
2683
|
// src/audits/privacy-policy.ts
|
|
3138
|
-
var
|
|
2684
|
+
var import_i18n37 = require("@wordpress/i18n");
|
|
3139
2685
|
var audit20 = {
|
|
3140
2686
|
id: "audits/privacy-policy",
|
|
3141
|
-
title: (0,
|
|
3142
|
-
description: (0,
|
|
2687
|
+
title: (0, import_i18n37.__)("Privacy policy", "elementor"),
|
|
2688
|
+
description: (0, import_i18n37.__)(
|
|
3143
2689
|
"A privacy policy page is required by privacy regulations such as GDPR (EU) and CCPA (US).",
|
|
3144
2690
|
"elementor"
|
|
3145
2691
|
),
|
|
3146
|
-
fixHint: (0,
|
|
2692
|
+
fixHint: (0, import_i18n37.__)(
|
|
3147
2693
|
"Go to Settings > Privacy in the WordPress admin and assign a published privacy policy page.",
|
|
3148
2694
|
"elementor"
|
|
3149
2695
|
),
|
|
@@ -3159,9 +2705,9 @@ var audit20 = {
|
|
|
3159
2705
|
violations: [
|
|
3160
2706
|
{
|
|
3161
2707
|
auditId: audit20.id,
|
|
3162
|
-
label: (0,
|
|
2708
|
+
label: (0, import_i18n37.__)("No privacy policy page is set.", "elementor"),
|
|
3163
2709
|
externalUrl: ctx.pageContext.privacy_settings_url,
|
|
3164
|
-
ctaLabel: (0,
|
|
2710
|
+
ctaLabel: (0, import_i18n37.__)("Create", "elementor")
|
|
3165
2711
|
}
|
|
3166
2712
|
]
|
|
3167
2713
|
};
|
|
@@ -3169,15 +2715,15 @@ var audit20 = {
|
|
|
3169
2715
|
};
|
|
3170
2716
|
|
|
3171
2717
|
// src/audits/robots-noindex.ts
|
|
3172
|
-
var
|
|
2718
|
+
var import_i18n38 = require("@wordpress/i18n");
|
|
3173
2719
|
var audit21 = {
|
|
3174
2720
|
id: "audits/robots-noindex",
|
|
3175
|
-
title: (0,
|
|
3176
|
-
description: (0,
|
|
2721
|
+
title: (0, import_i18n38.__)("Search engine visibility", "elementor"),
|
|
2722
|
+
description: (0, import_i18n38.__)(
|
|
3177
2723
|
"When search engine visibility is checked in WordPress Settings -> Reading -> Search Engine Visibility, search engines are discouraged from indexing the website.",
|
|
3178
2724
|
"elementor"
|
|
3179
2725
|
),
|
|
3180
|
-
fixHint: (0,
|
|
2726
|
+
fixHint: (0, import_i18n38.__)(
|
|
3181
2727
|
'Go to Settings \u2192 Reading in the WordPress admin and uncheck "Discourage search engines from indexing this site" when the website should be indexed.',
|
|
3182
2728
|
"elementor"
|
|
3183
2729
|
),
|
|
@@ -3193,7 +2739,7 @@ var audit21 = {
|
|
|
3193
2739
|
violations: [
|
|
3194
2740
|
{
|
|
3195
2741
|
auditId: audit21.id,
|
|
3196
|
-
label: (0,
|
|
2742
|
+
label: (0, import_i18n38.__)("Search engines are discouraged from indexing this website.", "elementor"),
|
|
3197
2743
|
externalUrl: ctx.pageContext.reading_settings_url
|
|
3198
2744
|
}
|
|
3199
2745
|
]
|
|
@@ -3202,15 +2748,15 @@ var audit21 = {
|
|
|
3202
2748
|
};
|
|
3203
2749
|
|
|
3204
2750
|
// src/audits/scan-for-cookies.ts
|
|
3205
|
-
var
|
|
2751
|
+
var import_i18n39 = require("@wordpress/i18n");
|
|
3206
2752
|
var audit22 = {
|
|
3207
2753
|
id: "audits/scan-for-cookies",
|
|
3208
|
-
title: (0,
|
|
3209
|
-
description: (0,
|
|
2754
|
+
title: (0, import_i18n39.__)("Scan for cookies", "elementor"),
|
|
2755
|
+
description: (0, import_i18n39.__)(
|
|
3210
2756
|
"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.",
|
|
3211
2757
|
"elementor"
|
|
3212
2758
|
),
|
|
3213
|
-
fixHint: (0,
|
|
2759
|
+
fixHint: (0, import_i18n39.__)("Run a Cookiez scan on this page to see which cookies need disclosure.", "elementor"),
|
|
3214
2760
|
categories: ["compliance"],
|
|
3215
2761
|
severity: "info",
|
|
3216
2762
|
weight: 0,
|
|
@@ -3221,7 +2767,7 @@ var audit22 = {
|
|
|
3221
2767
|
violations: [
|
|
3222
2768
|
{
|
|
3223
2769
|
auditId: audit22.id,
|
|
3224
|
-
label: (0,
|
|
2770
|
+
label: (0, import_i18n39.__)("This page has not been scanned for cookies yet.", "elementor"),
|
|
3225
2771
|
externalUrl: isReady ? ctx.pageContext.cookiez_scan_url : ctx.pageContext.cookiez_plugin_action_url
|
|
3226
2772
|
}
|
|
3227
2773
|
]
|
|
@@ -3230,21 +2776,21 @@ var audit22 = {
|
|
|
3230
2776
|
};
|
|
3231
2777
|
|
|
3232
2778
|
// src/audits/sections-and-columns.ts
|
|
3233
|
-
var
|
|
2779
|
+
var import_i18n40 = require("@wordpress/i18n");
|
|
3234
2780
|
var audit23 = {
|
|
3235
2781
|
id: "audits/sections-and-columns",
|
|
3236
|
-
title: (0,
|
|
3237
|
-
description: (0,
|
|
2782
|
+
title: (0, import_i18n40.__)("Sections and columns", "elementor"),
|
|
2783
|
+
description: (0, import_i18n40.__)(
|
|
3238
2784
|
"Sections and columns are legacy elements. Containers render fewer DOM nodes and are more flexible.",
|
|
3239
2785
|
"elementor"
|
|
3240
2786
|
),
|
|
3241
|
-
fixHint: (0,
|
|
2787
|
+
fixHint: (0, import_i18n40.__)("Use the Container Converter to replace each section/column with a container.", "elementor"),
|
|
3242
2788
|
categories: ["best-practices", "performance"],
|
|
3243
2789
|
severity: "warning",
|
|
3244
2790
|
weight: 7,
|
|
3245
2791
|
evaluate: (ctx) => {
|
|
3246
2792
|
if (ctx.elements.tree.length === 0) {
|
|
3247
|
-
return { status: "skipped", reason: (0,
|
|
2793
|
+
return { status: "skipped", reason: (0, import_i18n40.__)("No elements", "elementor") };
|
|
3248
2794
|
}
|
|
3249
2795
|
const violations = [];
|
|
3250
2796
|
walkElements(ctx.elements.tree, (node) => {
|
|
@@ -3252,7 +2798,7 @@ var audit23 = {
|
|
|
3252
2798
|
violations.push({
|
|
3253
2799
|
auditId: audit23.id,
|
|
3254
2800
|
elementId: node.id,
|
|
3255
|
-
label: node.elType === "section" ? (0,
|
|
2801
|
+
label: node.elType === "section" ? (0, import_i18n40.__)("Section element", "elementor") : (0, import_i18n40.__)("Column element", "elementor")
|
|
3256
2802
|
});
|
|
3257
2803
|
}
|
|
3258
2804
|
});
|
|
@@ -3261,15 +2807,15 @@ var audit23 = {
|
|
|
3261
2807
|
};
|
|
3262
2808
|
|
|
3263
2809
|
// src/audits/site-identity.ts
|
|
3264
|
-
var
|
|
2810
|
+
var import_i18n41 = require("@wordpress/i18n");
|
|
3265
2811
|
var audit24 = {
|
|
3266
2812
|
id: "audits/site-identity",
|
|
3267
|
-
title: (0,
|
|
3268
|
-
description: (0,
|
|
2813
|
+
title: (0, import_i18n41.__)("Site identity", "elementor"),
|
|
2814
|
+
description: (0, import_i18n41.__)(
|
|
3269
2815
|
"Site name, description, logo, and favicon establish your brand and appear in search results and browser tabs.",
|
|
3270
2816
|
"elementor"
|
|
3271
2817
|
),
|
|
3272
|
-
fixHint: (0,
|
|
2818
|
+
fixHint: (0, import_i18n41.__)("Open Site Settings \u2192 Site Identity and complete all the missing fields.", "elementor"),
|
|
3273
2819
|
categories: ["best-practices", "seo"],
|
|
3274
2820
|
severity: "info",
|
|
3275
2821
|
weight: 7,
|
|
@@ -3279,14 +2825,14 @@ var audit24 = {
|
|
|
3279
2825
|
if (!identity.site_name_set) {
|
|
3280
2826
|
violations.push({
|
|
3281
2827
|
auditId: audit24.id,
|
|
3282
|
-
label: (0,
|
|
2828
|
+
label: (0, import_i18n41.__)("Site name is missing or still uses the default.", "elementor"),
|
|
3283
2829
|
targetHint: "site-identity-settings"
|
|
3284
2830
|
});
|
|
3285
2831
|
}
|
|
3286
2832
|
if (!identity.site_description_set) {
|
|
3287
2833
|
violations.push({
|
|
3288
2834
|
auditId: audit24.id,
|
|
3289
|
-
label: (0,
|
|
2835
|
+
label: (0, import_i18n41.__)("Site description is missing or still uses the default.", "elementor"),
|
|
3290
2836
|
targetHint: "site-identity-settings",
|
|
3291
2837
|
angieFix: true
|
|
3292
2838
|
});
|
|
@@ -3294,14 +2840,14 @@ var audit24 = {
|
|
|
3294
2840
|
if (!identity.site_logo_set) {
|
|
3295
2841
|
violations.push({
|
|
3296
2842
|
auditId: audit24.id,
|
|
3297
|
-
label: (0,
|
|
2843
|
+
label: (0, import_i18n41.__)("Site logo is not set.", "elementor"),
|
|
3298
2844
|
targetHint: "site-identity-settings"
|
|
3299
2845
|
});
|
|
3300
2846
|
}
|
|
3301
2847
|
if (!identity.site_favicon_set) {
|
|
3302
2848
|
violations.push({
|
|
3303
2849
|
auditId: audit24.id,
|
|
3304
|
-
label: (0,
|
|
2850
|
+
label: (0, import_i18n41.__)("Site favicon is not set.", "elementor"),
|
|
3305
2851
|
targetHint: "site-identity-settings"
|
|
3306
2852
|
});
|
|
3307
2853
|
}
|
|
@@ -3317,7 +2863,7 @@ var audit24 = {
|
|
|
3317
2863
|
|
|
3318
2864
|
// src/audits/too-many-widgets.ts
|
|
3319
2865
|
var import_editor_elements9 = require("@elementor/editor-elements");
|
|
3320
|
-
var
|
|
2866
|
+
var import_i18n42 = require("@wordpress/i18n");
|
|
3321
2867
|
var WIDGET_COUNT_THRESHOLD = 100;
|
|
3322
2868
|
function isCountableWidget(node, widgetsCache) {
|
|
3323
2869
|
if (node.elType === "widget") {
|
|
@@ -3327,15 +2873,15 @@ function isCountableWidget(node, widgetsCache) {
|
|
|
3327
2873
|
}
|
|
3328
2874
|
var audit25 = {
|
|
3329
2875
|
id: "audits/too-many-widgets",
|
|
3330
|
-
title: (0,
|
|
3331
|
-
description: (0,
|
|
3332
|
-
fixHint: (0,
|
|
2876
|
+
title: (0, import_i18n42.__)("Too many widgets", "elementor"),
|
|
2877
|
+
description: (0, import_i18n42.__)("Excessive DOM size caused by too many widgets degrades rendering performance.", "elementor"),
|
|
2878
|
+
fixHint: (0, import_i18n42.__)("Reduce the number of widgets on the page by removing or combining elements.", "elementor"),
|
|
3333
2879
|
categories: ["best-practices", "performance"],
|
|
3334
2880
|
severity: "warning",
|
|
3335
2881
|
weight: 5,
|
|
3336
2882
|
evaluate: (ctx) => {
|
|
3337
2883
|
if (ctx.elements.tree.length === 0) {
|
|
3338
|
-
return { status: "skipped", reason: (0,
|
|
2884
|
+
return { status: "skipped", reason: (0, import_i18n42.__)("No elements", "elementor") };
|
|
3339
2885
|
}
|
|
3340
2886
|
const widgetsCache = (0, import_editor_elements9.getWidgetsCache)();
|
|
3341
2887
|
let widgetCount = 0;
|
|
@@ -3352,7 +2898,7 @@ var audit25 = {
|
|
|
3352
2898
|
violations: [
|
|
3353
2899
|
{
|
|
3354
2900
|
auditId: audit25.id,
|
|
3355
|
-
label: (0,
|
|
2901
|
+
label: (0, import_i18n42.__)("Page has too many widgets.", "elementor")
|
|
3356
2902
|
}
|
|
3357
2903
|
]
|
|
3358
2904
|
};
|