@elementor/editor-audits 4.4.0-1101 → 4.4.0-1103
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.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +438 -413
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +436 -417
- package/dist/index.mjs.map +1 -1
- package/package.json +13 -13
- package/src/audits/page-title.ts +4 -0
- package/src/components/audit-panel.tsx +7 -1
- package/src/components/audit-statuses-section.tsx +65 -0
- package/src/components/category-icons.ts +4 -10
- package/src/components/pages/issues-page.tsx +24 -7
- package/src/components/pages/overview-page.tsx +6 -94
- package/src/components/promotions.tsx +3 -2
- package/src/components/report-shell.tsx +43 -39
- package/src/components/severity-filter-chips.tsx +57 -0
- package/src/components/severity-icons.tsx +2 -2
- package/src/components/violation-row.tsx +3 -1
- package/src/constants.ts +1 -1
- package/src/types.ts +1 -0
- package/src/utils/severity-counts.ts +2 -25
package/dist/index.js
CHANGED
|
@@ -45,17 +45,17 @@ 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_icons12 = require("@elementor/icons");
|
|
48
|
-
var
|
|
48
|
+
var import_i18n24 = require("@wordpress/i18n");
|
|
49
49
|
|
|
50
50
|
// src/editor-panel.tsx
|
|
51
51
|
var import_editor_floating_panels2 = require("@elementor/editor-floating-panels");
|
|
52
52
|
|
|
53
53
|
// src/components/audit-panel.tsx
|
|
54
|
-
var
|
|
54
|
+
var React25 = __toESM(require("react"));
|
|
55
55
|
var import_editor_elements5 = require("@elementor/editor-elements");
|
|
56
56
|
var import_editor_floating_panels = require("@elementor/editor-floating-panels");
|
|
57
|
-
var
|
|
58
|
-
var
|
|
57
|
+
var import_ui24 = require("@elementor/ui");
|
|
58
|
+
var import_i18n23 = require("@wordpress/i18n");
|
|
59
59
|
|
|
60
60
|
// src/hooks/use-audit-report.ts
|
|
61
61
|
var import_react = require("react");
|
|
@@ -172,7 +172,7 @@ var CATEGORY_LABELS = {
|
|
|
172
172
|
seo: (0, import_i18n.__)("SEO", "elementor"),
|
|
173
173
|
accessibility: (0, import_i18n.__)("Accessibility", "elementor"),
|
|
174
174
|
performance: (0, import_i18n.__)("Performance", "elementor"),
|
|
175
|
-
compliance: (0, import_i18n.__)("
|
|
175
|
+
compliance: (0, import_i18n.__)("Site compliance", "elementor")
|
|
176
176
|
};
|
|
177
177
|
|
|
178
178
|
// src/utils/audit-status-summary.ts
|
|
@@ -759,10 +759,10 @@ function WelcomePage() {
|
|
|
759
759
|
}
|
|
760
760
|
|
|
761
761
|
// src/components/report-shell.tsx
|
|
762
|
-
var
|
|
763
|
-
var
|
|
764
|
-
var
|
|
765
|
-
var
|
|
762
|
+
var React24 = __toESM(require("react"));
|
|
763
|
+
var import_react6 = require("react");
|
|
764
|
+
var import_ui23 = require("@elementor/ui");
|
|
765
|
+
var import_i18n22 = require("@wordpress/i18n");
|
|
766
766
|
|
|
767
767
|
// src/components/pages/all-audits-page.tsx
|
|
768
768
|
var React12 = __toESM(require("react"));
|
|
@@ -928,7 +928,7 @@ var import_icons5 = require("@elementor/icons");
|
|
|
928
928
|
var SEVERITY_CONFIG = {
|
|
929
929
|
error: { Icon: import_icons5.AlertTriangleFilledIcon, color: "error" },
|
|
930
930
|
warning: { Icon: import_icons5.AlertCircleIcon, color: "warning" },
|
|
931
|
-
info: { Icon: import_icons5.
|
|
931
|
+
info: { Icon: import_icons5.BulbIcon, color: "info" }
|
|
932
932
|
};
|
|
933
933
|
function SeverityIcon({ severity }) {
|
|
934
934
|
const { Icon, color } = SEVERITY_CONFIG[severity];
|
|
@@ -1064,7 +1064,12 @@ function ViolationRow({ audit: audit23, skipReason, violations }) {
|
|
|
1064
1064
|
},
|
|
1065
1065
|
/* @__PURE__ */ React11.createElement(ViolationIcon, { violation, widgetIcon }),
|
|
1066
1066
|
/* @__PURE__ */ React11.createElement(import_ui10.Box, { sx: { flex: 1 } }, /* @__PURE__ */ React11.createElement(import_ui10.Typography, { variant: "caption" }, rowLabel), violation.detail && /* @__PURE__ */ React11.createElement(import_ui10.Typography, { variant: "caption", color: "text.secondary" }, violation.detail)),
|
|
1067
|
-
violation.angieFix && /* @__PURE__ */ React11.createElement(
|
|
1067
|
+
violation.angieFix && /* @__PURE__ */ React11.createElement(
|
|
1068
|
+
FixViolationWithAngie,
|
|
1069
|
+
{
|
|
1070
|
+
prompt: violation.angiePrompt ?? buildAngiePrompt(rowLabel)
|
|
1071
|
+
}
|
|
1072
|
+
),
|
|
1068
1073
|
violation.ctaLabel && violation.externalUrl ? /* @__PURE__ */ React11.createElement(
|
|
1069
1074
|
ViolationCtaButton,
|
|
1070
1075
|
{
|
|
@@ -1128,10 +1133,10 @@ var import_i18n13 = require("@wordpress/i18n");
|
|
|
1128
1133
|
var import_icons8 = require("@elementor/icons");
|
|
1129
1134
|
var CATEGORY_ICONS = {
|
|
1130
1135
|
"best-practices": import_icons8.Settings2Icon,
|
|
1131
|
-
seo: import_icons8.
|
|
1136
|
+
seo: import_icons8.FileSearchIcon,
|
|
1132
1137
|
accessibility: import_icons8.ElementorAccessibilityIcon,
|
|
1133
|
-
performance: import_icons8.
|
|
1134
|
-
compliance: import_icons8.
|
|
1138
|
+
performance: import_icons8.BoltIcon,
|
|
1139
|
+
compliance: import_icons8.ShieldCheckIcon
|
|
1135
1140
|
};
|
|
1136
1141
|
|
|
1137
1142
|
// src/components/pages/category-page.tsx
|
|
@@ -1159,8 +1164,9 @@ function CategoryPage({ category, report, onBack }) {
|
|
|
1159
1164
|
}
|
|
1160
1165
|
|
|
1161
1166
|
// src/components/pages/issues-page.tsx
|
|
1162
|
-
var
|
|
1163
|
-
var
|
|
1167
|
+
var React18 = __toESM(require("react"));
|
|
1168
|
+
var import_react5 = require("react");
|
|
1169
|
+
var import_ui17 = require("@elementor/ui");
|
|
1164
1170
|
var import_i18n17 = require("@wordpress/i18n");
|
|
1165
1171
|
|
|
1166
1172
|
// src/utils/severity-counts.ts
|
|
@@ -1189,41 +1195,115 @@ function severityPluralLabel(severity) {
|
|
|
1189
1195
|
case "warning":
|
|
1190
1196
|
return (0, import_i18n14.__)("Warnings", "elementor");
|
|
1191
1197
|
case "info":
|
|
1192
|
-
return (0, import_i18n14.__)("
|
|
1198
|
+
return (0, import_i18n14.__)("Suggestions", "elementor");
|
|
1193
1199
|
}
|
|
1194
1200
|
}
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
case "info":
|
|
1210
|
-
return (0, import_i18n14.sprintf)(
|
|
1211
|
-
/* translators: %d: number of remaining info violations. */
|
|
1212
|
-
(0, import_i18n14.__)("%d info", "elementor"),
|
|
1213
|
-
count
|
|
1214
|
-
);
|
|
1201
|
+
|
|
1202
|
+
// src/components/audit-statuses-section.tsx
|
|
1203
|
+
var React15 = __toESM(require("react"));
|
|
1204
|
+
var import_ui14 = require("@elementor/ui");
|
|
1205
|
+
var import_i18n15 = require("@wordpress/i18n");
|
|
1206
|
+
|
|
1207
|
+
// src/components/count-summary-circle.tsx
|
|
1208
|
+
var React14 = __toESM(require("react"));
|
|
1209
|
+
var import_ui13 = require("@elementor/ui");
|
|
1210
|
+
var COUNT_SUMMARY_CIRCLE_SIZE = 64;
|
|
1211
|
+
var COUNT_SUMMARY_BORDER_WIDTH = 4;
|
|
1212
|
+
function chipBorderColor(theme, color) {
|
|
1213
|
+
if (color === "default" || !color) {
|
|
1214
|
+
return theme.palette.text.secondary;
|
|
1215
1215
|
}
|
|
1216
|
+
return theme.palette[color].main;
|
|
1217
|
+
}
|
|
1218
|
+
function CountSummaryCircle({ ariaLabel, color, count, label, onClick }) {
|
|
1219
|
+
return /* @__PURE__ */ React14.createElement(
|
|
1220
|
+
import_ui13.Box,
|
|
1221
|
+
{
|
|
1222
|
+
"aria-label": ariaLabel,
|
|
1223
|
+
component: "button",
|
|
1224
|
+
onClick,
|
|
1225
|
+
type: "button",
|
|
1226
|
+
sx: {
|
|
1227
|
+
alignItems: "center",
|
|
1228
|
+
background: "none",
|
|
1229
|
+
border: "none",
|
|
1230
|
+
cursor: "pointer",
|
|
1231
|
+
display: "flex",
|
|
1232
|
+
flex: 1,
|
|
1233
|
+
flexDirection: "column",
|
|
1234
|
+
gap: 0.5,
|
|
1235
|
+
padding: 0
|
|
1236
|
+
}
|
|
1237
|
+
},
|
|
1238
|
+
/* @__PURE__ */ React14.createElement(
|
|
1239
|
+
import_ui13.Chip,
|
|
1240
|
+
{
|
|
1241
|
+
color,
|
|
1242
|
+
label: count,
|
|
1243
|
+
size: "small",
|
|
1244
|
+
variant: "standard",
|
|
1245
|
+
sx: (theme) => ({
|
|
1246
|
+
border: `${COUNT_SUMMARY_BORDER_WIDTH}px solid ${chipBorderColor(theme, color)}`,
|
|
1247
|
+
borderRadius: "50%",
|
|
1248
|
+
height: COUNT_SUMMARY_CIRCLE_SIZE,
|
|
1249
|
+
maxWidth: COUNT_SUMMARY_CIRCLE_SIZE,
|
|
1250
|
+
width: COUNT_SUMMARY_CIRCLE_SIZE,
|
|
1251
|
+
"& .MuiChip-label": {
|
|
1252
|
+
fontSize: theme.typography.body2.fontSize,
|
|
1253
|
+
fontWeight: 700,
|
|
1254
|
+
lineHeight: 1,
|
|
1255
|
+
padding: 0
|
|
1256
|
+
}
|
|
1257
|
+
})
|
|
1258
|
+
}
|
|
1259
|
+
),
|
|
1260
|
+
/* @__PURE__ */ React14.createElement(import_ui13.Typography, { color: "text.secondary", sx: { textAlign: "center" }, variant: "caption" }, label)
|
|
1261
|
+
);
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
// src/components/audit-statuses-section.tsx
|
|
1265
|
+
var STATUS_ARIA_LABELS = {
|
|
1266
|
+
pass: (count) => (0, import_i18n15.sprintf)(
|
|
1267
|
+
/* translators: %d: number of passed audits. */
|
|
1268
|
+
(0, import_i18n15.__)("%d passed audits, view all", "elementor"),
|
|
1269
|
+
count
|
|
1270
|
+
),
|
|
1271
|
+
fail: (count) => (0, import_i18n15.sprintf)(
|
|
1272
|
+
/* translators: %d: number of failed audit violations. */
|
|
1273
|
+
(0, import_i18n15.__)("%d failed audits, view all", "elementor"),
|
|
1274
|
+
count
|
|
1275
|
+
),
|
|
1276
|
+
skipped: (count) => (0, import_i18n15.sprintf)(
|
|
1277
|
+
/* translators: %d: number of skipped audits. */
|
|
1278
|
+
(0, import_i18n15.__)("%d skipped audits, view all", "elementor"),
|
|
1279
|
+
count
|
|
1280
|
+
)
|
|
1281
|
+
};
|
|
1282
|
+
var STATUS_GROUPS = ["fail", "pass", "skipped"];
|
|
1283
|
+
function AuditStatusesSection({ report, onStatusClick }) {
|
|
1284
|
+
const statusCounts = auditStatusDisplayCounts(report);
|
|
1285
|
+
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(
|
|
1286
|
+
CountSummaryCircle,
|
|
1287
|
+
{
|
|
1288
|
+
key: status,
|
|
1289
|
+
ariaLabel: STATUS_ARIA_LABELS[status](statusCounts[status]),
|
|
1290
|
+
color: auditStatusColor(status),
|
|
1291
|
+
count: statusCounts[status],
|
|
1292
|
+
label: auditStatusLabel(status),
|
|
1293
|
+
onClick: () => onStatusClick(status)
|
|
1294
|
+
}
|
|
1295
|
+
))), /* @__PURE__ */ React15.createElement(import_ui14.Divider, null));
|
|
1216
1296
|
}
|
|
1217
1297
|
|
|
1218
1298
|
// src/components/issues-category-row.tsx
|
|
1219
|
-
var
|
|
1299
|
+
var React16 = __toESM(require("react"));
|
|
1220
1300
|
var import_icons9 = require("@elementor/icons");
|
|
1221
|
-
var
|
|
1301
|
+
var import_ui15 = require("@elementor/ui");
|
|
1222
1302
|
function IssuesCategoryRow({ category, label, counts, onClick }) {
|
|
1223
|
-
const isRtl = "rtl" === (0,
|
|
1303
|
+
const isRtl = "rtl" === (0, import_ui15.useTheme)().direction;
|
|
1224
1304
|
const Icon = CATEGORY_ICONS[category];
|
|
1225
|
-
return /* @__PURE__ */
|
|
1226
|
-
|
|
1305
|
+
return /* @__PURE__ */ React16.createElement(
|
|
1306
|
+
import_ui15.Box,
|
|
1227
1307
|
{
|
|
1228
1308
|
role: "button",
|
|
1229
1309
|
tabIndex: 0,
|
|
@@ -1244,21 +1324,112 @@ function IssuesCategoryRow({ category, label, counts, onClick }) {
|
|
|
1244
1324
|
"&:focus-visible": { outline: "2px solid", outlineColor: "primary.main" }
|
|
1245
1325
|
}
|
|
1246
1326
|
},
|
|
1247
|
-
/* @__PURE__ */
|
|
1248
|
-
/* @__PURE__ */
|
|
1249
|
-
/* @__PURE__ */
|
|
1250
|
-
/* @__PURE__ */
|
|
1327
|
+
/* @__PURE__ */ React16.createElement(Icon, { fontSize: "small", color: "action" }),
|
|
1328
|
+
/* @__PURE__ */ React16.createElement(import_ui15.Typography, { variant: "body2", fontWeight: "bold", sx: { flex: 1 } }, label),
|
|
1329
|
+
/* @__PURE__ */ React16.createElement(import_ui15.Box, { sx: { display: "flex", alignItems: "center", gap: 0.5 } }, ALL_SEVERITIES.filter((s) => counts[s] > 0).map((severity) => /* @__PURE__ */ React16.createElement(import_ui15.Box, { key: severity, sx: { display: "flex", alignItems: "center", gap: 0.25 } }, /* @__PURE__ */ React16.createElement(SeverityIcon, { severity }), /* @__PURE__ */ React16.createElement(import_ui15.Typography, { variant: "caption", color: "text.primary", fontWeight: "bold" }, counts[severity])))),
|
|
1330
|
+
/* @__PURE__ */ React16.createElement(import_ui15.Rotate, { in: isRtl }, /* @__PURE__ */ React16.createElement(import_icons9.ChevronRightIcon, { fontSize: "small", color: "action" }))
|
|
1251
1331
|
);
|
|
1252
1332
|
}
|
|
1253
1333
|
|
|
1254
|
-
// src/components/
|
|
1255
|
-
var
|
|
1256
|
-
var
|
|
1334
|
+
// src/components/severity-filter-chips.tsx
|
|
1335
|
+
var React17 = __toESM(require("react"));
|
|
1336
|
+
var import_ui16 = require("@elementor/ui");
|
|
1257
1337
|
var import_i18n16 = require("@wordpress/i18n");
|
|
1338
|
+
function SeverityFilterChips({ selected, onChange }) {
|
|
1339
|
+
return /* @__PURE__ */ React17.createElement(import_ui16.Box, { sx: { display: "flex", alignItems: "center", gap: 1 } }, /* @__PURE__ */ React17.createElement(
|
|
1340
|
+
FilterChip,
|
|
1341
|
+
{
|
|
1342
|
+
label: (0, import_i18n16.__)("All", "elementor"),
|
|
1343
|
+
isSelected: selected === "all",
|
|
1344
|
+
onClick: () => onChange("all")
|
|
1345
|
+
}
|
|
1346
|
+
), ALL_SEVERITIES.map((severity) => /* @__PURE__ */ React17.createElement(
|
|
1347
|
+
FilterChip,
|
|
1348
|
+
{
|
|
1349
|
+
key: severity,
|
|
1350
|
+
label: severityPluralLabel(severity),
|
|
1351
|
+
icon: /* @__PURE__ */ React17.createElement(SeverityIcon, { severity }),
|
|
1352
|
+
isSelected: selected === severity,
|
|
1353
|
+
onClick: () => onChange(severity)
|
|
1354
|
+
}
|
|
1355
|
+
)));
|
|
1356
|
+
}
|
|
1357
|
+
function FilterChip({ label, icon, isSelected, onClick }) {
|
|
1358
|
+
return /* @__PURE__ */ React17.createElement(
|
|
1359
|
+
import_ui16.Chip,
|
|
1360
|
+
{
|
|
1361
|
+
label,
|
|
1362
|
+
icon,
|
|
1363
|
+
size: "small",
|
|
1364
|
+
variant: "filled",
|
|
1365
|
+
color: "default",
|
|
1366
|
+
onClick,
|
|
1367
|
+
"aria-pressed": isSelected,
|
|
1368
|
+
sx: { bgcolor: isSelected ? "action.selected" : "transparent" }
|
|
1369
|
+
}
|
|
1370
|
+
);
|
|
1371
|
+
}
|
|
1372
|
+
|
|
1373
|
+
// src/components/pages/issues-page.tsx
|
|
1374
|
+
function filterCounts(counts, filter) {
|
|
1375
|
+
if (filter === "all") {
|
|
1376
|
+
return counts;
|
|
1377
|
+
}
|
|
1378
|
+
return { error: 0, warning: 0, info: 0, [filter]: counts[filter] };
|
|
1379
|
+
}
|
|
1380
|
+
function IssuesPage({ report, onCategoryClick, onAllAuditsClick, onStatusClick }) {
|
|
1381
|
+
const [filter, setFilter] = (0, import_react5.useState)("all");
|
|
1382
|
+
const populatedCategories = getPopulatedCategories(report.categories, ALL_CATEGORIES);
|
|
1383
|
+
const categoryRows = populatedCategories.map((category) => ({ category, counts: filterCounts(countSeverities(report, category), filter) })).filter(({ counts }) => Object.values(counts).some((count) => count > 0));
|
|
1384
|
+
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(
|
|
1385
|
+
import_ui17.Link,
|
|
1386
|
+
{
|
|
1387
|
+
component: "button",
|
|
1388
|
+
underline: "none",
|
|
1389
|
+
color: "inherit",
|
|
1390
|
+
onClick: onAllAuditsClick,
|
|
1391
|
+
sx: { textAlign: "start" }
|
|
1392
|
+
},
|
|
1393
|
+
/* @__PURE__ */ React18.createElement(import_ui17.Typography, { variant: "subtitle1", component: "h2" }, (0, import_i18n17.__)("All issues", "elementor"))
|
|
1394
|
+
), /* @__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(
|
|
1395
|
+
IssuesCategoryRow,
|
|
1396
|
+
{
|
|
1397
|
+
key: category,
|
|
1398
|
+
category,
|
|
1399
|
+
label: CATEGORY_LABELS[category],
|
|
1400
|
+
counts,
|
|
1401
|
+
onClick: () => onCategoryClick(category)
|
|
1402
|
+
}
|
|
1403
|
+
))));
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
// src/components/pages/overview-page.tsx
|
|
1407
|
+
var React23 = __toESM(require("react"));
|
|
1408
|
+
var import_ui22 = require("@elementor/ui");
|
|
1409
|
+
var import_i18n21 = require("@wordpress/i18n");
|
|
1410
|
+
|
|
1411
|
+
// src/utils/score-thresholds.ts
|
|
1412
|
+
var import_i18n18 = require("@wordpress/i18n");
|
|
1413
|
+
var GOOD_THRESHOLD = 90;
|
|
1414
|
+
var OK_THRESHOLD = 50;
|
|
1415
|
+
function getScoreTier(score) {
|
|
1416
|
+
if (score >= GOOD_THRESHOLD) {
|
|
1417
|
+
return { color: "success", label: (0, import_i18n18.__)("Good", "elementor") };
|
|
1418
|
+
}
|
|
1419
|
+
if (score >= OK_THRESHOLD) {
|
|
1420
|
+
return { color: "warning", label: (0, import_i18n18.__)("Needs work", "elementor") };
|
|
1421
|
+
}
|
|
1422
|
+
return { color: "error", label: (0, import_i18n18.__)("At risk", "elementor") };
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1425
|
+
// src/components/promotions.tsx
|
|
1426
|
+
var React20 = __toESM(require("react"));
|
|
1427
|
+
var import_ui19 = require("@elementor/ui");
|
|
1428
|
+
var import_i18n20 = require("@wordpress/i18n");
|
|
1258
1429
|
|
|
1259
1430
|
// src/register-promotions.ts
|
|
1260
1431
|
var import_icons10 = require("@elementor/icons");
|
|
1261
|
-
var
|
|
1432
|
+
var import_i18n19 = require("@wordpress/i18n");
|
|
1262
1433
|
function firstFailExternalUrl(run) {
|
|
1263
1434
|
return run.result.status === "fail" ? run.result.violations[0]?.externalUrl : void 0;
|
|
1264
1435
|
}
|
|
@@ -1266,7 +1437,7 @@ var PROMOTIONS = [
|
|
|
1266
1437
|
{
|
|
1267
1438
|
auditId: "audits/images-alt-text",
|
|
1268
1439
|
icon: import_icons10.PhotoIcon,
|
|
1269
|
-
ctaLabel: (0,
|
|
1440
|
+
ctaLabel: (0, import_i18n19.__)("Fix with Ally", "elementor"),
|
|
1270
1441
|
formatSubtitle: (run) => {
|
|
1271
1442
|
if (run.result.status !== "fail") {
|
|
1272
1443
|
return null;
|
|
@@ -1275,9 +1446,9 @@ var PROMOTIONS = [
|
|
|
1275
1446
|
if (count === 0) {
|
|
1276
1447
|
return null;
|
|
1277
1448
|
}
|
|
1278
|
-
return (0,
|
|
1449
|
+
return (0, import_i18n19.sprintf)(
|
|
1279
1450
|
/* translators: %d: number of images missing alt text. */
|
|
1280
|
-
(0,
|
|
1451
|
+
(0, import_i18n19._n)("%d image", "%d images", count, "elementor"),
|
|
1281
1452
|
count
|
|
1282
1453
|
);
|
|
1283
1454
|
},
|
|
@@ -1286,21 +1457,21 @@ var PROMOTIONS = [
|
|
|
1286
1457
|
{
|
|
1287
1458
|
auditId: "audits/cookie-policy",
|
|
1288
1459
|
icon: import_icons10.ElementorCookieIcon,
|
|
1289
|
-
ctaLabel: (0,
|
|
1290
|
-
formatSubtitle: (run) => run.result.status === "fail" ? (0,
|
|
1460
|
+
ctaLabel: (0, import_i18n19.__)("Fix with Cookiez", "elementor"),
|
|
1461
|
+
formatSubtitle: (run) => run.result.status === "fail" ? (0, import_i18n19.__)("Generate cookie policy", "elementor") : null,
|
|
1291
1462
|
getCtaUrl: firstFailExternalUrl
|
|
1292
1463
|
},
|
|
1293
1464
|
{
|
|
1294
1465
|
auditId: "audits/scan-for-cookies",
|
|
1295
1466
|
icon: import_icons10.ElementorCookieIcon,
|
|
1296
|
-
ctaLabel: (0,
|
|
1297
|
-
formatSubtitle: (run) => run.result.status === "fail" ? (0,
|
|
1467
|
+
ctaLabel: (0, import_i18n19.__)("Scan", "elementor"),
|
|
1468
|
+
formatSubtitle: (run) => run.result.status === "fail" ? (0, import_i18n19.__)("Scan this page for cookies", "elementor") : null,
|
|
1298
1469
|
getCtaUrl: firstFailExternalUrl
|
|
1299
1470
|
},
|
|
1300
1471
|
{
|
|
1301
1472
|
auditId: "audits/images-too-large",
|
|
1302
1473
|
icon: import_icons10.ShieldHalfFilledIcon,
|
|
1303
|
-
ctaLabel: (0,
|
|
1474
|
+
ctaLabel: (0, import_i18n19.__)("Optimize all", "elementor"),
|
|
1304
1475
|
formatSubtitle: (run) => {
|
|
1305
1476
|
if (run.result.status !== "fail") {
|
|
1306
1477
|
return null;
|
|
@@ -1309,9 +1480,9 @@ var PROMOTIONS = [
|
|
|
1309
1480
|
if (count === 0) {
|
|
1310
1481
|
return null;
|
|
1311
1482
|
}
|
|
1312
|
-
return (0,
|
|
1483
|
+
return (0, import_i18n19.sprintf)(
|
|
1313
1484
|
/* translators: %d: number of oversized images. */
|
|
1314
|
-
(0,
|
|
1485
|
+
(0, import_i18n19._n)("%d image", "%d images", count, "elementor"),
|
|
1315
1486
|
count
|
|
1316
1487
|
);
|
|
1317
1488
|
},
|
|
@@ -1325,11 +1496,11 @@ function findAuditRun(report, auditId) {
|
|
|
1325
1496
|
}
|
|
1326
1497
|
|
|
1327
1498
|
// src/components/promotion-card.tsx
|
|
1328
|
-
var
|
|
1329
|
-
var
|
|
1499
|
+
var React19 = __toESM(require("react"));
|
|
1500
|
+
var import_ui18 = require("@elementor/ui");
|
|
1330
1501
|
function PromotionCard({ ctaDisabled, ctaLabel, icon: Icon, onCtaClick, subtitle, title }) {
|
|
1331
|
-
return /* @__PURE__ */
|
|
1332
|
-
|
|
1502
|
+
return /* @__PURE__ */ React19.createElement(
|
|
1503
|
+
import_ui18.Box,
|
|
1333
1504
|
{
|
|
1334
1505
|
sx: {
|
|
1335
1506
|
alignItems: "center",
|
|
@@ -1342,9 +1513,9 @@ function PromotionCard({ ctaDisabled, ctaLabel, icon: Icon, onCtaClick, subtitle
|
|
|
1342
1513
|
py: 1.5
|
|
1343
1514
|
}
|
|
1344
1515
|
},
|
|
1345
|
-
/* @__PURE__ */
|
|
1346
|
-
/* @__PURE__ */
|
|
1347
|
-
/* @__PURE__ */
|
|
1516
|
+
/* @__PURE__ */ React19.createElement(Icon, { fontSize: "small", color: "action" }),
|
|
1517
|
+
/* @__PURE__ */ React19.createElement(import_ui18.Box, { sx: { display: "flex", flex: 1, flexDirection: "column", gap: 0.25, minWidth: 0 } }, /* @__PURE__ */ React19.createElement(import_ui18.Typography, { variant: "body2", fontWeight: "bold" }, title), /* @__PURE__ */ React19.createElement(import_ui18.Typography, { variant: "caption", color: "text.secondary" }, subtitle)),
|
|
1518
|
+
/* @__PURE__ */ React19.createElement(import_ui18.Button, { variant: "outlined", color: "secondary", size: "small", disabled: ctaDisabled, onClick: onCtaClick }, ctaLabel)
|
|
1348
1519
|
);
|
|
1349
1520
|
}
|
|
1350
1521
|
|
|
@@ -1373,7 +1544,7 @@ function Promotions({ report }) {
|
|
|
1373
1544
|
if (cards.length === 0) {
|
|
1374
1545
|
return null;
|
|
1375
1546
|
}
|
|
1376
|
-
return /* @__PURE__ */
|
|
1547
|
+
return /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement(import_ui19.Divider, null), /* @__PURE__ */ React20.createElement(import_ui19.Typography, { variant: "subtitle1", fontWeight: "bold" }, (0, import_i18n20.__)("Quick actions", "elementor")), /* @__PURE__ */ React20.createElement(import_ui19.Box, { sx: { display: "flex", flexDirection: "column", gap: 1 } }, cards.map(({ config, ctaUrl, key, run, subtitle }) => /* @__PURE__ */ React20.createElement(
|
|
1377
1548
|
PromotionCard,
|
|
1378
1549
|
{
|
|
1379
1550
|
key,
|
|
@@ -1391,115 +1562,14 @@ function Promotions({ report }) {
|
|
|
1391
1562
|
))));
|
|
1392
1563
|
}
|
|
1393
1564
|
|
|
1394
|
-
// src/components/pages/issues-page.tsx
|
|
1395
|
-
function IssuesPage({ report, onCategoryClick, onAllAuditsClick }) {
|
|
1396
|
-
const populatedCategories = getPopulatedCategories(report.categories, ALL_CATEGORIES);
|
|
1397
|
-
return /* @__PURE__ */ React17.createElement(import_ui16.Box, { sx: { display: "flex", flexDirection: "column", gap: 4, p: 2 } }, /* @__PURE__ */ React17.createElement(
|
|
1398
|
-
import_ui16.Link,
|
|
1399
|
-
{
|
|
1400
|
-
component: "button",
|
|
1401
|
-
underline: "none",
|
|
1402
|
-
color: "inherit",
|
|
1403
|
-
onClick: onAllAuditsClick,
|
|
1404
|
-
sx: { textAlign: "start" }
|
|
1405
|
-
},
|
|
1406
|
-
/* @__PURE__ */ React17.createElement(import_ui16.Typography, { variant: "subtitle1", component: "h2" }, (0, import_i18n17.__)("All issues", "elementor"))
|
|
1407
|
-
), /* @__PURE__ */ React17.createElement(import_ui16.Box, { sx: { display: "flex", flexDirection: "column", gap: 1 } }, populatedCategories.map((category) => /* @__PURE__ */ React17.createElement(
|
|
1408
|
-
IssuesCategoryRow,
|
|
1409
|
-
{
|
|
1410
|
-
key: category,
|
|
1411
|
-
category,
|
|
1412
|
-
label: CATEGORY_LABELS[category],
|
|
1413
|
-
counts: countSeverities(report, category),
|
|
1414
|
-
onClick: () => onCategoryClick(category)
|
|
1415
|
-
}
|
|
1416
|
-
))), /* @__PURE__ */ React17.createElement(Promotions, { report }));
|
|
1417
|
-
}
|
|
1418
|
-
|
|
1419
|
-
// src/components/pages/overview-page.tsx
|
|
1420
|
-
var React21 = __toESM(require("react"));
|
|
1421
|
-
var import_ui20 = require("@elementor/ui");
|
|
1422
|
-
var import_i18n19 = require("@wordpress/i18n");
|
|
1423
|
-
|
|
1424
|
-
// src/utils/score-thresholds.ts
|
|
1425
|
-
var import_i18n18 = require("@wordpress/i18n");
|
|
1426
|
-
var GOOD_THRESHOLD = 90;
|
|
1427
|
-
var OK_THRESHOLD = 50;
|
|
1428
|
-
function getScoreTier(score) {
|
|
1429
|
-
if (score >= GOOD_THRESHOLD) {
|
|
1430
|
-
return { color: "success", label: (0, import_i18n18.__)("Good", "elementor") };
|
|
1431
|
-
}
|
|
1432
|
-
if (score >= OK_THRESHOLD) {
|
|
1433
|
-
return { color: "warning", label: (0, import_i18n18.__)("Needs work", "elementor") };
|
|
1434
|
-
}
|
|
1435
|
-
return { color: "error", label: (0, import_i18n18.__)("At risk", "elementor") };
|
|
1436
|
-
}
|
|
1437
|
-
|
|
1438
|
-
// src/components/count-summary-circle.tsx
|
|
1439
|
-
var React18 = __toESM(require("react"));
|
|
1440
|
-
var import_ui17 = require("@elementor/ui");
|
|
1441
|
-
var COUNT_SUMMARY_CIRCLE_SIZE = 64;
|
|
1442
|
-
var COUNT_SUMMARY_BORDER_WIDTH = 4;
|
|
1443
|
-
function chipBorderColor(theme, color) {
|
|
1444
|
-
if (color === "default" || !color) {
|
|
1445
|
-
return theme.palette.text.secondary;
|
|
1446
|
-
}
|
|
1447
|
-
return theme.palette[color].main;
|
|
1448
|
-
}
|
|
1449
|
-
function CountSummaryCircle({ ariaLabel, color, count, label, onClick }) {
|
|
1450
|
-
return /* @__PURE__ */ React18.createElement(
|
|
1451
|
-
import_ui17.Box,
|
|
1452
|
-
{
|
|
1453
|
-
"aria-label": ariaLabel,
|
|
1454
|
-
component: "button",
|
|
1455
|
-
onClick,
|
|
1456
|
-
type: "button",
|
|
1457
|
-
sx: {
|
|
1458
|
-
alignItems: "center",
|
|
1459
|
-
background: "none",
|
|
1460
|
-
border: "none",
|
|
1461
|
-
cursor: "pointer",
|
|
1462
|
-
display: "flex",
|
|
1463
|
-
flex: 1,
|
|
1464
|
-
flexDirection: "column",
|
|
1465
|
-
gap: 0.5,
|
|
1466
|
-
padding: 0
|
|
1467
|
-
}
|
|
1468
|
-
},
|
|
1469
|
-
/* @__PURE__ */ React18.createElement(
|
|
1470
|
-
import_ui17.Chip,
|
|
1471
|
-
{
|
|
1472
|
-
color,
|
|
1473
|
-
label: count,
|
|
1474
|
-
size: "small",
|
|
1475
|
-
variant: "standard",
|
|
1476
|
-
sx: (theme) => ({
|
|
1477
|
-
border: `${COUNT_SUMMARY_BORDER_WIDTH}px solid ${chipBorderColor(theme, color)}`,
|
|
1478
|
-
borderRadius: "50%",
|
|
1479
|
-
height: COUNT_SUMMARY_CIRCLE_SIZE,
|
|
1480
|
-
maxWidth: COUNT_SUMMARY_CIRCLE_SIZE,
|
|
1481
|
-
width: COUNT_SUMMARY_CIRCLE_SIZE,
|
|
1482
|
-
"& .MuiChip-label": {
|
|
1483
|
-
fontSize: theme.typography.body2.fontSize,
|
|
1484
|
-
fontWeight: 700,
|
|
1485
|
-
lineHeight: 1,
|
|
1486
|
-
padding: 0
|
|
1487
|
-
}
|
|
1488
|
-
})
|
|
1489
|
-
}
|
|
1490
|
-
),
|
|
1491
|
-
/* @__PURE__ */ React18.createElement(import_ui17.Typography, { color: "text.secondary", sx: { textAlign: "center" }, variant: "caption" }, label)
|
|
1492
|
-
);
|
|
1493
|
-
}
|
|
1494
|
-
|
|
1495
1565
|
// src/components/score-bar.tsx
|
|
1496
|
-
var
|
|
1566
|
+
var React21 = __toESM(require("react"));
|
|
1497
1567
|
var import_icons11 = require("@elementor/icons");
|
|
1498
|
-
var
|
|
1568
|
+
var import_ui20 = require("@elementor/ui");
|
|
1499
1569
|
function ScoreBar({ label, score, onClick }) {
|
|
1500
|
-
const isRtl = "rtl" === (0,
|
|
1501
|
-
return /* @__PURE__ */
|
|
1502
|
-
|
|
1570
|
+
const isRtl = "rtl" === (0, import_ui20.useTheme)().direction;
|
|
1571
|
+
return /* @__PURE__ */ React21.createElement(
|
|
1572
|
+
import_ui20.Box,
|
|
1503
1573
|
{
|
|
1504
1574
|
role: onClick ? "button" : void 0,
|
|
1505
1575
|
tabIndex: onClick ? 0 : void 0,
|
|
@@ -1515,9 +1585,9 @@ function ScoreBar({ label, score, onClick }) {
|
|
|
1515
1585
|
py: 0.5
|
|
1516
1586
|
}
|
|
1517
1587
|
},
|
|
1518
|
-
/* @__PURE__ */
|
|
1519
|
-
/* @__PURE__ */
|
|
1520
|
-
|
|
1588
|
+
/* @__PURE__ */ React21.createElement(import_ui20.Typography, { variant: "body2", sx: { minWidth: 96 } }, label),
|
|
1589
|
+
/* @__PURE__ */ React21.createElement(
|
|
1590
|
+
import_ui20.LinearProgress,
|
|
1521
1591
|
{
|
|
1522
1592
|
variant: "determinate",
|
|
1523
1593
|
value: score,
|
|
@@ -1525,8 +1595,8 @@ function ScoreBar({ label, score, onClick }) {
|
|
|
1525
1595
|
sx: { flex: 1, height: 6, borderRadius: 4, bgcolor: "action.disabledBackground" }
|
|
1526
1596
|
}
|
|
1527
1597
|
),
|
|
1528
|
-
/* @__PURE__ */
|
|
1529
|
-
|
|
1598
|
+
/* @__PURE__ */ React21.createElement(
|
|
1599
|
+
import_ui20.Typography,
|
|
1530
1600
|
{
|
|
1531
1601
|
variant: "body2",
|
|
1532
1602
|
color: "text.primary",
|
|
@@ -1534,19 +1604,19 @@ function ScoreBar({ label, score, onClick }) {
|
|
|
1534
1604
|
},
|
|
1535
1605
|
score
|
|
1536
1606
|
),
|
|
1537
|
-
onClick && /* @__PURE__ */
|
|
1607
|
+
onClick && /* @__PURE__ */ React21.createElement(import_ui20.Rotate, { in: isRtl }, /* @__PURE__ */ React21.createElement(import_icons11.ChevronRightIcon, { fontSize: "small", color: "action" }))
|
|
1538
1608
|
);
|
|
1539
1609
|
}
|
|
1540
1610
|
|
|
1541
1611
|
// src/components/score-circle.tsx
|
|
1542
|
-
var
|
|
1543
|
-
var
|
|
1612
|
+
var React22 = __toESM(require("react"));
|
|
1613
|
+
var import_ui21 = require("@elementor/ui");
|
|
1544
1614
|
var SCORE_CIRCLE_SIZE = 88;
|
|
1545
1615
|
var SCORE_CIRCLE_THICKNESS = 3;
|
|
1546
1616
|
function ScoreCircle({ color, score }) {
|
|
1547
1617
|
const progressColor = color ?? getScoreTier(score).color;
|
|
1548
|
-
return /* @__PURE__ */
|
|
1549
|
-
|
|
1618
|
+
return /* @__PURE__ */ React22.createElement(
|
|
1619
|
+
import_ui21.Box,
|
|
1550
1620
|
{
|
|
1551
1621
|
role: "progressbar",
|
|
1552
1622
|
"aria-valuenow": score,
|
|
@@ -1554,8 +1624,8 @@ function ScoreCircle({ color, score }) {
|
|
|
1554
1624
|
"aria-valuemax": 100,
|
|
1555
1625
|
sx: { position: "relative", display: "inline-flex" }
|
|
1556
1626
|
},
|
|
1557
|
-
/* @__PURE__ */
|
|
1558
|
-
|
|
1627
|
+
/* @__PURE__ */ React22.createElement(
|
|
1628
|
+
import_ui21.CircularProgress,
|
|
1559
1629
|
{
|
|
1560
1630
|
variant: "determinate",
|
|
1561
1631
|
value: 100,
|
|
@@ -1564,8 +1634,8 @@ function ScoreCircle({ color, score }) {
|
|
|
1564
1634
|
sx: { color: "action.disabledBackground" }
|
|
1565
1635
|
}
|
|
1566
1636
|
),
|
|
1567
|
-
/* @__PURE__ */
|
|
1568
|
-
|
|
1637
|
+
/* @__PURE__ */ React22.createElement(
|
|
1638
|
+
import_ui21.CircularProgress,
|
|
1569
1639
|
{
|
|
1570
1640
|
variant: "determinate",
|
|
1571
1641
|
value: score,
|
|
@@ -1575,8 +1645,8 @@ function ScoreCircle({ color, score }) {
|
|
|
1575
1645
|
sx: { position: "absolute", left: 0 }
|
|
1576
1646
|
}
|
|
1577
1647
|
),
|
|
1578
|
-
/* @__PURE__ */
|
|
1579
|
-
|
|
1648
|
+
/* @__PURE__ */ React22.createElement(
|
|
1649
|
+
import_ui21.Box,
|
|
1580
1650
|
{
|
|
1581
1651
|
sx: {
|
|
1582
1652
|
position: "absolute",
|
|
@@ -1586,8 +1656,8 @@ function ScoreCircle({ color, score }) {
|
|
|
1586
1656
|
justifyContent: "center"
|
|
1587
1657
|
}
|
|
1588
1658
|
},
|
|
1589
|
-
/* @__PURE__ */
|
|
1590
|
-
|
|
1659
|
+
/* @__PURE__ */ React22.createElement(
|
|
1660
|
+
import_ui21.Typography,
|
|
1591
1661
|
{
|
|
1592
1662
|
variant: "h4",
|
|
1593
1663
|
component: "span",
|
|
@@ -1601,31 +1671,11 @@ function ScoreCircle({ color, score }) {
|
|
|
1601
1671
|
}
|
|
1602
1672
|
|
|
1603
1673
|
// src/components/pages/overview-page.tsx
|
|
1604
|
-
|
|
1605
|
-
pass: (count) => (0, import_i18n19.sprintf)(
|
|
1606
|
-
/* translators: %d: number of passed audits. */
|
|
1607
|
-
(0, import_i18n19.__)("%d passed audits, view all", "elementor"),
|
|
1608
|
-
count
|
|
1609
|
-
),
|
|
1610
|
-
fail: (count) => (0, import_i18n19.sprintf)(
|
|
1611
|
-
/* translators: %d: number of failed audit violations. */
|
|
1612
|
-
(0, import_i18n19.__)("%d failed audits, view all", "elementor"),
|
|
1613
|
-
count
|
|
1614
|
-
),
|
|
1615
|
-
skipped: (count) => (0, import_i18n19.sprintf)(
|
|
1616
|
-
/* translators: %d: number of skipped audits. */
|
|
1617
|
-
(0, import_i18n19.__)("%d skipped audits, view all", "elementor"),
|
|
1618
|
-
count
|
|
1619
|
-
)
|
|
1620
|
-
};
|
|
1621
|
-
var STATUS_GROUPS = ["fail", "pass", "skipped"];
|
|
1622
|
-
function OverviewPage({ onCategoryClick, onStatusClick, report }) {
|
|
1674
|
+
function OverviewPage({ onCategoryClick, report }) {
|
|
1623
1675
|
const populatedCategories = getPopulatedCategories(report.categories, ALL_CATEGORIES);
|
|
1624
|
-
const severityCounts = countSeverities(report);
|
|
1625
|
-
const statusCounts = auditStatusDisplayCounts(report);
|
|
1626
1676
|
const overallScore = getScoreTier(report.overall);
|
|
1627
|
-
return /* @__PURE__ */
|
|
1628
|
-
|
|
1677
|
+
return /* @__PURE__ */ React23.createElement(import_ui22.Box, { sx: { display: "flex", flexDirection: "column", gap: 4, p: 2 } }, /* @__PURE__ */ React23.createElement(import_ui22.Box, { sx: { display: "flex", alignItems: "center", gap: 2 } }, /* @__PURE__ */ React23.createElement(ScoreCircle, { color: overallScore.color, score: report.overall }), /* @__PURE__ */ React23.createElement(import_ui22.Box, { sx: { display: "flex", flexDirection: "column", gap: 0.5 } }, /* @__PURE__ */ React23.createElement(
|
|
1678
|
+
import_ui22.Chip,
|
|
1629
1679
|
{
|
|
1630
1680
|
label: overallScore.label,
|
|
1631
1681
|
color: overallScore.color,
|
|
@@ -1633,7 +1683,7 @@ function OverviewPage({ onCategoryClick, onStatusClick, report }) {
|
|
|
1633
1683
|
size: "small",
|
|
1634
1684
|
sx: { fontWeight: 600, alignSelf: "flex-start" }
|
|
1635
1685
|
}
|
|
1636
|
-
), /* @__PURE__ */
|
|
1686
|
+
), /* @__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(
|
|
1637
1687
|
ScoreBar,
|
|
1638
1688
|
{
|
|
1639
1689
|
key: category,
|
|
@@ -1641,45 +1691,7 @@ function OverviewPage({ onCategoryClick, onStatusClick, report }) {
|
|
|
1641
1691
|
score: report.categories[category].score,
|
|
1642
1692
|
onClick: () => onCategoryClick(category)
|
|
1643
1693
|
}
|
|
1644
|
-
))), /* @__PURE__ */
|
|
1645
|
-
CountSummaryCircle,
|
|
1646
|
-
{
|
|
1647
|
-
key: status,
|
|
1648
|
-
ariaLabel: STATUS_ARIA_LABELS[status](statusCounts[status]),
|
|
1649
|
-
color: auditStatusColor(status),
|
|
1650
|
-
count: statusCounts[status],
|
|
1651
|
-
label: auditStatusLabel(status),
|
|
1652
|
-
onClick: () => onStatusClick(status)
|
|
1653
|
-
}
|
|
1654
|
-
))), /* @__PURE__ */ React21.createElement(import_ui20.Divider, null), /* @__PURE__ */ React21.createElement(import_ui20.Typography, { variant: "subtitle1", fontWeight: "bold" }, (0, import_i18n19.__)("Remaining issues", "elementor")), /* @__PURE__ */ React21.createElement(
|
|
1655
|
-
import_ui20.Box,
|
|
1656
|
-
{
|
|
1657
|
-
component: "ul",
|
|
1658
|
-
sx: {
|
|
1659
|
-
display: "flex",
|
|
1660
|
-
flexDirection: "column",
|
|
1661
|
-
gap: 1,
|
|
1662
|
-
listStyle: "none",
|
|
1663
|
-
m: 0,
|
|
1664
|
-
p: 0
|
|
1665
|
-
}
|
|
1666
|
-
},
|
|
1667
|
-
ALL_SEVERITIES.map((severity) => {
|
|
1668
|
-
const count = severityCounts[severity];
|
|
1669
|
-
return /* @__PURE__ */ React21.createElement(
|
|
1670
|
-
import_ui20.Box,
|
|
1671
|
-
{
|
|
1672
|
-
"aria-label": severityRemainingCountLabel(severity, count),
|
|
1673
|
-
component: "li",
|
|
1674
|
-
key: severity,
|
|
1675
|
-
sx: { alignItems: "center", display: "flex", gap: 0.5 }
|
|
1676
|
-
},
|
|
1677
|
-
/* @__PURE__ */ React21.createElement(SeverityIcon, { severity }),
|
|
1678
|
-
/* @__PURE__ */ React21.createElement(import_ui20.Typography, { variant: "body2", fontWeight: "bold" }, count),
|
|
1679
|
-
/* @__PURE__ */ React21.createElement(import_ui20.Typography, { variant: "body2" }, severityPluralLabel(severity))
|
|
1680
|
-
);
|
|
1681
|
-
})
|
|
1682
|
-
));
|
|
1694
|
+
))), /* @__PURE__ */ React23.createElement(Promotions, { report }));
|
|
1683
1695
|
}
|
|
1684
1696
|
|
|
1685
1697
|
// src/components/report-shell.tsx
|
|
@@ -1699,7 +1711,7 @@ function isCategoryPage(page) {
|
|
|
1699
1711
|
return typeof page === "object" && "category" in page;
|
|
1700
1712
|
}
|
|
1701
1713
|
function ReportShell({ report }) {
|
|
1702
|
-
const [activePage, setActivePage] = (0,
|
|
1714
|
+
const [activePage, setActivePage] = (0, import_react6.useState)("overview");
|
|
1703
1715
|
const currentTab = activeTab(activePage);
|
|
1704
1716
|
const handleTabChange = (_, value) => {
|
|
1705
1717
|
setActivePage(value);
|
|
@@ -1715,10 +1727,10 @@ function ReportShell({ report }) {
|
|
|
1715
1727
|
setActivePage(activePage.backTo);
|
|
1716
1728
|
}
|
|
1717
1729
|
};
|
|
1718
|
-
return /* @__PURE__ */
|
|
1719
|
-
|
|
1730
|
+
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(
|
|
1731
|
+
import_ui23.Tabs,
|
|
1720
1732
|
{
|
|
1721
|
-
"aria-label": (0,
|
|
1733
|
+
"aria-label": (0, import_i18n22.__)("Audit navigation", "elementor"),
|
|
1722
1734
|
value: currentTab,
|
|
1723
1735
|
onChange: handleTabChange,
|
|
1724
1736
|
textColor: "secondary",
|
|
@@ -1727,30 +1739,30 @@ function ReportShell({ report }) {
|
|
|
1727
1739
|
centered: true,
|
|
1728
1740
|
variant: "fullWidth"
|
|
1729
1741
|
},
|
|
1730
|
-
/* @__PURE__ */
|
|
1731
|
-
/* @__PURE__ */
|
|
1732
|
-
), /* @__PURE__ */
|
|
1742
|
+
/* @__PURE__ */ React24.createElement(import_ui23.Tab, { value: "overview", label: (0, import_i18n22.__)("Overview", "elementor") }),
|
|
1743
|
+
/* @__PURE__ */ React24.createElement(import_ui23.Tab, { value: "issues", label: (0, import_i18n22.__)("Issues", "elementor") })
|
|
1744
|
+
), /* @__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(
|
|
1733
1745
|
OverviewPage,
|
|
1734
1746
|
{
|
|
1735
1747
|
report,
|
|
1736
|
-
onCategoryClick: (category) => openCategory(category, "overview")
|
|
1737
|
-
onStatusClick: (status) => openAllAudits(status, "overview")
|
|
1748
|
+
onCategoryClick: (category) => openCategory(category, "overview")
|
|
1738
1749
|
}
|
|
1739
|
-
), activePage === "issues" && /* @__PURE__ */
|
|
1750
|
+
), activePage === "issues" && /* @__PURE__ */ React24.createElement(
|
|
1740
1751
|
IssuesPage,
|
|
1741
1752
|
{
|
|
1742
1753
|
report,
|
|
1743
1754
|
onCategoryClick: (category) => openCategory(category, "issues"),
|
|
1744
|
-
onAllAuditsClick: () => openAllAudits()
|
|
1755
|
+
onAllAuditsClick: () => openAllAudits(),
|
|
1756
|
+
onStatusClick: (status) => openAllAudits(status)
|
|
1745
1757
|
}
|
|
1746
|
-
), isAllAuditsPage(activePage) && /* @__PURE__ */
|
|
1758
|
+
), isAllAuditsPage(activePage) && /* @__PURE__ */ React24.createElement(
|
|
1747
1759
|
AllAuditsPage,
|
|
1748
1760
|
{
|
|
1749
1761
|
report,
|
|
1750
1762
|
initialExpandedStatus: activePage.expand,
|
|
1751
1763
|
onBack: backFromSubPage
|
|
1752
1764
|
}
|
|
1753
|
-
), isCategoryPage(activePage) && /* @__PURE__ */
|
|
1765
|
+
), isCategoryPage(activePage) && /* @__PURE__ */ React24.createElement(CategoryPage, { category: activePage.category, report, onBack: backFromSubPage })));
|
|
1754
1766
|
}
|
|
1755
1767
|
|
|
1756
1768
|
// src/components/audit-panel.tsx
|
|
@@ -1759,23 +1771,32 @@ function AuditPanel() {
|
|
|
1759
1771
|
const currentDocumentId = (0, import_editor_elements5.getCurrentDocumentId)() ?? 0;
|
|
1760
1772
|
const onRun = () => run(currentDocumentId);
|
|
1761
1773
|
const lastScanLabel = report ? new Date(report.runAt).toLocaleTimeString() : null;
|
|
1762
|
-
return /* @__PURE__ */
|
|
1774
|
+
return /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement(
|
|
1763
1775
|
import_editor_floating_panels.FloatingPanelHeader,
|
|
1764
1776
|
{
|
|
1765
1777
|
panelId: "audit-panel",
|
|
1766
|
-
title: (0,
|
|
1767
|
-
badge: (0,
|
|
1778
|
+
title: (0, import_i18n23.__)("Page Audit", "elementor"),
|
|
1779
|
+
badge: (0, import_i18n23.__)("Beta", "elementor"),
|
|
1768
1780
|
titleVariant: "subtitle2"
|
|
1769
1781
|
}
|
|
1770
|
-
), /* @__PURE__ */
|
|
1771
|
-
|
|
1782
|
+
), /* @__PURE__ */ React25.createElement(
|
|
1783
|
+
import_editor_floating_panels.FloatingPanelBody,
|
|
1784
|
+
{
|
|
1785
|
+
sx: status === "ready" ? { display: "flex", flexDirection: "column", overflow: "hidden", minHeight: 0 } : void 0
|
|
1786
|
+
},
|
|
1787
|
+
status === "idle" && /* @__PURE__ */ React25.createElement(WelcomePage, null),
|
|
1788
|
+
status === "loading" && /* @__PURE__ */ React25.createElement(LoadingPage, null),
|
|
1789
|
+
status === "error" && /* @__PURE__ */ React25.createElement(ErrorPage, { message: error ?? "", onRetry: onRun }),
|
|
1790
|
+
status === "ready" && report && /* @__PURE__ */ React25.createElement(ReportShell, { report })
|
|
1791
|
+
), /* @__PURE__ */ React25.createElement(import_editor_floating_panels.FloatingPanelFooter, null, lastScanLabel ? /* @__PURE__ */ React25.createElement(import_ui24.Typography, { variant: "caption", sx: { flex: 1 } }, (0, import_i18n23.__)("Last scan:", "elementor"), " ", lastScanLabel) : /* @__PURE__ */ React25.createElement(import_ui24.Box, { sx: { flex: 1 } }), lastScanLabel && /* @__PURE__ */ React25.createElement(AuditFeedback, null), /* @__PURE__ */ React25.createElement(
|
|
1792
|
+
import_ui24.Button,
|
|
1772
1793
|
{
|
|
1773
1794
|
variant: "contained",
|
|
1774
1795
|
size: "small",
|
|
1775
1796
|
onClick: onRun,
|
|
1776
1797
|
disabled: status === "loading" || currentDocumentId === 0
|
|
1777
1798
|
},
|
|
1778
|
-
lastScanLabel ? (0,
|
|
1799
|
+
lastScanLabel ? (0, import_i18n23.__)("Re-scan", "elementor") : (0, import_i18n23.__)("Run page audit", "elementor")
|
|
1779
1800
|
)));
|
|
1780
1801
|
}
|
|
1781
1802
|
|
|
@@ -1800,7 +1821,7 @@ function useAuditToggleProps() {
|
|
|
1800
1821
|
const { isOpen } = auditPanel.useFloatingPanelStatus();
|
|
1801
1822
|
const { toggle } = auditPanel.useFloatingPanelActions();
|
|
1802
1823
|
return {
|
|
1803
|
-
title: (0,
|
|
1824
|
+
title: (0, import_i18n24.__)("Audit Page", "elementor"),
|
|
1804
1825
|
icon: import_icons12.ShieldCheckIcon,
|
|
1805
1826
|
selected: isOpen,
|
|
1806
1827
|
onClick: () => toggle()
|
|
@@ -1818,15 +1839,15 @@ function registerAppBarAuditsToggle() {
|
|
|
1818
1839
|
}
|
|
1819
1840
|
|
|
1820
1841
|
// src/audits/accessibility-policy.ts
|
|
1821
|
-
var
|
|
1842
|
+
var import_i18n25 = require("@wordpress/i18n");
|
|
1822
1843
|
var audit = {
|
|
1823
1844
|
id: "audits/accessibility-policy",
|
|
1824
|
-
title: (0,
|
|
1825
|
-
description: (0,
|
|
1845
|
+
title: (0, import_i18n25.__)("Accessibility policy", "elementor"),
|
|
1846
|
+
description: (0, import_i18n25.__)(
|
|
1826
1847
|
"An accessibility policy demonstrates your commitment to digital inclusion and may be legally required in some regions.",
|
|
1827
1848
|
"elementor"
|
|
1828
1849
|
),
|
|
1829
|
-
fixHint: (0,
|
|
1850
|
+
fixHint: (0, import_i18n25.__)("Install the Ally plugin to add an accessibility policy to your website.", "elementor"),
|
|
1830
1851
|
categories: ["compliance"],
|
|
1831
1852
|
severity: "info",
|
|
1832
1853
|
weight: 1,
|
|
@@ -1839,7 +1860,7 @@ var audit = {
|
|
|
1839
1860
|
violations: [
|
|
1840
1861
|
{
|
|
1841
1862
|
auditId: audit.id,
|
|
1842
|
-
label: (0,
|
|
1863
|
+
label: (0, import_i18n25.__)("Ally plugin is not installed or active.", "elementor"),
|
|
1843
1864
|
externalUrl: ctx.pageContext.ally_plugin_url
|
|
1844
1865
|
}
|
|
1845
1866
|
]
|
|
@@ -1848,15 +1869,15 @@ var audit = {
|
|
|
1848
1869
|
};
|
|
1849
1870
|
|
|
1850
1871
|
// src/audits/cookie-policy.ts
|
|
1851
|
-
var
|
|
1872
|
+
var import_i18n26 = require("@wordpress/i18n");
|
|
1852
1873
|
var audit2 = {
|
|
1853
1874
|
id: "audits/cookie-policy",
|
|
1854
|
-
title: (0,
|
|
1855
|
-
description: (0,
|
|
1875
|
+
title: (0, import_i18n26.__)("Cookie policy", "elementor"),
|
|
1876
|
+
description: (0, import_i18n26.__)(
|
|
1856
1877
|
"A cookie policy is required by privacy regulations such as GDPR (EU) or CCPA (US) to inform visitors about tracking and data collection.",
|
|
1857
1878
|
"elementor"
|
|
1858
1879
|
),
|
|
1859
|
-
fixHint: (0,
|
|
1880
|
+
fixHint: (0, import_i18n26.__)("Install the Cookiez plugin to add a cookie policy to your website.", "elementor"),
|
|
1860
1881
|
categories: ["compliance"],
|
|
1861
1882
|
severity: "info",
|
|
1862
1883
|
weight: 1,
|
|
@@ -1869,7 +1890,7 @@ var audit2 = {
|
|
|
1869
1890
|
violations: [
|
|
1870
1891
|
{
|
|
1871
1892
|
auditId: audit2.id,
|
|
1872
|
-
label: (0,
|
|
1893
|
+
label: (0, import_i18n26.__)("Cookiez plugin is not installed or active.", "elementor"),
|
|
1873
1894
|
externalUrl: ctx.pageContext.cookiez_plugin_url
|
|
1874
1895
|
}
|
|
1875
1896
|
]
|
|
@@ -1879,7 +1900,7 @@ var audit2 = {
|
|
|
1879
1900
|
|
|
1880
1901
|
// src/audits/deep-nesting.ts
|
|
1881
1902
|
var import_editor_elements6 = require("@elementor/editor-elements");
|
|
1882
|
-
var
|
|
1903
|
+
var import_i18n27 = require("@wordpress/i18n");
|
|
1883
1904
|
var MAX_NESTING_DEPTH = 6;
|
|
1884
1905
|
function isNestingElement(node, widgetsCache) {
|
|
1885
1906
|
if (node.elType === "container") {
|
|
@@ -1889,18 +1910,18 @@ function isNestingElement(node, widgetsCache) {
|
|
|
1889
1910
|
}
|
|
1890
1911
|
var audit3 = {
|
|
1891
1912
|
id: "audits/deep-nesting",
|
|
1892
|
-
title: (0,
|
|
1893
|
-
description: (0,
|
|
1913
|
+
title: (0, import_i18n27.__)("Deep container nesting", "elementor"),
|
|
1914
|
+
description: (0, import_i18n27.__)(
|
|
1894
1915
|
"Container nesting exceeds the recommended depth. Deep DOM trees hurt rendering performance and readability.",
|
|
1895
1916
|
"elementor"
|
|
1896
1917
|
),
|
|
1897
|
-
fixHint: (0,
|
|
1918
|
+
fixHint: (0, import_i18n27.__)("Flatten the layout by removing unnecessary wrapper containers.", "elementor"),
|
|
1898
1919
|
categories: ["performance", "best-practices"],
|
|
1899
1920
|
severity: "warning",
|
|
1900
1921
|
weight: 5,
|
|
1901
1922
|
evaluate: (ctx) => {
|
|
1902
1923
|
if (ctx.elements.tree.length === 0) {
|
|
1903
|
-
return { status: "skipped", reason: (0,
|
|
1924
|
+
return { status: "skipped", reason: (0, import_i18n27.__)("No elements", "elementor") };
|
|
1904
1925
|
}
|
|
1905
1926
|
const widgetsCache = (0, import_editor_elements6.getWidgetsCache)();
|
|
1906
1927
|
const violations = [];
|
|
@@ -1914,7 +1935,7 @@ var audit3 = {
|
|
|
1914
1935
|
auditId: audit3.id,
|
|
1915
1936
|
elementId: node.id,
|
|
1916
1937
|
targetHint: "element-settings",
|
|
1917
|
-
label: (0,
|
|
1938
|
+
label: (0, import_i18n27.__)("Container nesting is too deep.", "elementor")
|
|
1918
1939
|
});
|
|
1919
1940
|
}
|
|
1920
1941
|
});
|
|
@@ -1923,15 +1944,15 @@ var audit3 = {
|
|
|
1923
1944
|
};
|
|
1924
1945
|
|
|
1925
1946
|
// src/audits/default-design-system.ts
|
|
1926
|
-
var
|
|
1947
|
+
var import_i18n28 = require("@wordpress/i18n");
|
|
1927
1948
|
var audit4 = {
|
|
1928
1949
|
id: "audits/default-design-system",
|
|
1929
|
-
title: (0,
|
|
1930
|
-
description: (0,
|
|
1950
|
+
title: (0, import_i18n28.__)("Default website kit", "elementor"),
|
|
1951
|
+
description: (0, import_i18n28.__)(
|
|
1931
1952
|
"Your website is using the default design system colors and fonts. Custom branding makes the website feel uniquely yours.",
|
|
1932
1953
|
"elementor"
|
|
1933
1954
|
),
|
|
1934
|
-
fixHint: (0,
|
|
1955
|
+
fixHint: (0, import_i18n28.__)("Open Site Settings and customize your kit (colors, fonts, layout).", "elementor"),
|
|
1935
1956
|
categories: ["best-practices"],
|
|
1936
1957
|
severity: "info",
|
|
1937
1958
|
weight: 1,
|
|
@@ -1944,7 +1965,7 @@ var audit4 = {
|
|
|
1944
1965
|
violations: [
|
|
1945
1966
|
{
|
|
1946
1967
|
auditId: audit4.id,
|
|
1947
|
-
label: (0,
|
|
1968
|
+
label: (0, import_i18n28.__)("Kit appears unchanged from default.", "elementor"),
|
|
1948
1969
|
targetHint: "site-settings"
|
|
1949
1970
|
}
|
|
1950
1971
|
]
|
|
@@ -1954,16 +1975,16 @@ var audit4 = {
|
|
|
1954
1975
|
|
|
1955
1976
|
// src/audits/deprecated-widgets.ts
|
|
1956
1977
|
var import_editor_elements7 = require("@elementor/editor-elements");
|
|
1957
|
-
var
|
|
1978
|
+
var import_i18n29 = require("@wordpress/i18n");
|
|
1958
1979
|
var DEPRECATION_CONTROL_NAME = "deprecation_message";
|
|
1959
1980
|
var audit5 = {
|
|
1960
1981
|
id: "audits/deprecated-widgets",
|
|
1961
|
-
title: (0,
|
|
1962
|
-
description: (0,
|
|
1982
|
+
title: (0, import_i18n29.__)("Deprecated widgets", "elementor"),
|
|
1983
|
+
description: (0, import_i18n29.__)(
|
|
1963
1984
|
"Deprecated widgets should not be used. For better capabilities use the recommended replacement.",
|
|
1964
1985
|
"elementor"
|
|
1965
1986
|
),
|
|
1966
|
-
fixHint: (0,
|
|
1987
|
+
fixHint: (0, import_i18n29.__)("Replace each deprecated widget with the recommended new widget shown in its panel.", "elementor"),
|
|
1967
1988
|
categories: ["best-practices", "performance"],
|
|
1968
1989
|
severity: "warning",
|
|
1969
1990
|
weight: 7,
|
|
@@ -1990,7 +2011,7 @@ var audit5 = {
|
|
|
1990
2011
|
auditId: audit5.id,
|
|
1991
2012
|
elementId: node.id,
|
|
1992
2013
|
targetHint: "element-settings",
|
|
1993
|
-
label: (0,
|
|
2014
|
+
label: (0, import_i18n29.__)("Using deprecated widget.", "elementor")
|
|
1994
2015
|
});
|
|
1995
2016
|
});
|
|
1996
2017
|
return violations.length === 0 ? { status: "pass" } : { status: "fail", violations };
|
|
@@ -1998,7 +2019,7 @@ var audit5 = {
|
|
|
1998
2019
|
};
|
|
1999
2020
|
|
|
2000
2021
|
// src/audits/google-consent-mode.ts
|
|
2001
|
-
var
|
|
2022
|
+
var import_i18n30 = require("@wordpress/i18n");
|
|
2002
2023
|
|
|
2003
2024
|
// src/utils/fetch-rendered-html.ts
|
|
2004
2025
|
var FETCH_TIMEOUT_MS = 1e4;
|
|
@@ -2042,12 +2063,12 @@ function hasConsentDefaultCall(html) {
|
|
|
2042
2063
|
// src/audits/google-consent-mode.ts
|
|
2043
2064
|
var audit6 = {
|
|
2044
2065
|
id: "audits/google-consent-mode",
|
|
2045
|
-
title: (0,
|
|
2046
|
-
description: (0,
|
|
2066
|
+
title: (0, import_i18n30.__)("Google Consent Mode", "elementor"),
|
|
2067
|
+
description: (0, import_i18n30.__)(
|
|
2047
2068
|
"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.",
|
|
2048
2069
|
"elementor"
|
|
2049
2070
|
),
|
|
2050
|
-
fixHint: (0,
|
|
2071
|
+
fixHint: (0, import_i18n30.__)(
|
|
2051
2072
|
"Turn on Google Consent Mode in your cookie consent plugin so Google tags respect visitor consent choices.",
|
|
2052
2073
|
"elementor"
|
|
2053
2074
|
),
|
|
@@ -2056,19 +2077,19 @@ var audit6 = {
|
|
|
2056
2077
|
weight: 1,
|
|
2057
2078
|
evaluate: async (ctx) => {
|
|
2058
2079
|
if (!ctx.pageContext.frontend_url) {
|
|
2059
|
-
return { status: "skipped", reason: (0,
|
|
2080
|
+
return { status: "skipped", reason: (0, import_i18n30.__)("Page is not published.", "elementor") };
|
|
2060
2081
|
}
|
|
2061
2082
|
const html = await fetchRenderedHtml(ctx.pageContext.frontend_url);
|
|
2062
2083
|
if (!html) {
|
|
2063
|
-
return { status: "skipped", reason: (0,
|
|
2084
|
+
return { status: "skipped", reason: (0, import_i18n30.__)("Could not fetch the published page.", "elementor") };
|
|
2064
2085
|
}
|
|
2065
2086
|
if (!hasGoogleTracking(html)) {
|
|
2066
|
-
return { status: "skipped", reason: (0,
|
|
2087
|
+
return { status: "skipped", reason: (0, import_i18n30.__)("No Google tracking product detected.", "elementor") };
|
|
2067
2088
|
}
|
|
2068
2089
|
if (hasConsentDefaultCall(html)) {
|
|
2069
2090
|
return { status: "pass" };
|
|
2070
2091
|
}
|
|
2071
|
-
const label = (0,
|
|
2092
|
+
const label = (0, import_i18n30.__)("No Google Consent Mode signal was found on the page.", "elementor");
|
|
2072
2093
|
const isCookiezReady = ctx.pageContext.cookiez_plugin_installed && ctx.pageContext.cookiez_plugin_active;
|
|
2073
2094
|
if (isCookiezReady) {
|
|
2074
2095
|
return {
|
|
@@ -2077,7 +2098,7 @@ var audit6 = {
|
|
|
2077
2098
|
{
|
|
2078
2099
|
auditId: audit6.id,
|
|
2079
2100
|
label,
|
|
2080
|
-
ctaLabel: (0,
|
|
2101
|
+
ctaLabel: (0, import_i18n30.__)("Enable", "elementor"),
|
|
2081
2102
|
externalUrl: ctx.pageContext.cookiez_consent_mode_settings_url
|
|
2082
2103
|
}
|
|
2083
2104
|
]
|
|
@@ -2097,7 +2118,7 @@ var audit6 = {
|
|
|
2097
2118
|
};
|
|
2098
2119
|
|
|
2099
2120
|
// src/audits/heading-structure.ts
|
|
2100
|
-
var
|
|
2121
|
+
var import_i18n31 = require("@wordpress/i18n");
|
|
2101
2122
|
var HEADING_LEVELS = ["h1", "h2", "h3", "h4", "h5", "h6"];
|
|
2102
2123
|
var HEADING_CONTROLS_REGISTRY = {
|
|
2103
2124
|
// Core
|
|
@@ -2275,27 +2296,27 @@ function extractPageHeadings(tree) {
|
|
|
2275
2296
|
}
|
|
2276
2297
|
var audit7 = {
|
|
2277
2298
|
id: "audits/heading-structure",
|
|
2278
|
-
title: (0,
|
|
2279
|
-
description: (0,
|
|
2280
|
-
fixHint: (0,
|
|
2299
|
+
title: (0, import_i18n31.__)("Heading structure", "elementor"),
|
|
2300
|
+
description: (0, import_i18n31.__)("Pages should have exactly one H1 and a non-skipping heading order.", "elementor"),
|
|
2301
|
+
fixHint: (0, import_i18n31.__)("Ensure your page has one H1 and that heading levels do not skip (no H2 \u2192 H4).", "elementor"),
|
|
2281
2302
|
categories: ["seo", "accessibility"],
|
|
2282
2303
|
severity: "error",
|
|
2283
2304
|
weight: 10,
|
|
2284
2305
|
evaluate: (ctx) => {
|
|
2285
2306
|
if (ctx.elements.tree.length === 0) {
|
|
2286
|
-
return { status: "skipped", reason: (0,
|
|
2307
|
+
return { status: "skipped", reason: (0, import_i18n31.__)("No elements", "elementor") };
|
|
2287
2308
|
}
|
|
2288
2309
|
const headings = extractPageHeadings(ctx.elements.tree);
|
|
2289
2310
|
const violations = [];
|
|
2290
2311
|
if (headings.length === 0) {
|
|
2291
2312
|
violations.push({
|
|
2292
2313
|
auditId: audit7.id,
|
|
2293
|
-
label: (0,
|
|
2314
|
+
label: (0, import_i18n31.__)("No headings found on the page.", "elementor")
|
|
2294
2315
|
});
|
|
2295
2316
|
} else {
|
|
2296
2317
|
const h1Count = headings.filter((h) => h.level === 1).length;
|
|
2297
2318
|
if (h1Count === 0) {
|
|
2298
|
-
violations.push({ auditId: audit7.id, label: (0,
|
|
2319
|
+
violations.push({ auditId: audit7.id, label: (0, import_i18n31.__)("No H1 on the page.", "elementor") });
|
|
2299
2320
|
}
|
|
2300
2321
|
if (h1Count > 1) {
|
|
2301
2322
|
headings.filter((h) => h.level === 1).slice(1).forEach(
|
|
@@ -2303,7 +2324,7 @@ var audit7 = {
|
|
|
2303
2324
|
auditId: audit7.id,
|
|
2304
2325
|
elementId: h.elementId,
|
|
2305
2326
|
targetHint: "element-settings",
|
|
2306
|
-
label: (0,
|
|
2327
|
+
label: (0, import_i18n31.__)("More than one H1 on the page.", "elementor")
|
|
2307
2328
|
})
|
|
2308
2329
|
);
|
|
2309
2330
|
}
|
|
@@ -2313,7 +2334,7 @@ var audit7 = {
|
|
|
2313
2334
|
auditId: audit7.id,
|
|
2314
2335
|
elementId: headings[i].elementId,
|
|
2315
2336
|
targetHint: "element-settings",
|
|
2316
|
-
label: (0,
|
|
2337
|
+
label: (0, import_i18n31.__)("Heading level skipped.", "elementor")
|
|
2317
2338
|
});
|
|
2318
2339
|
}
|
|
2319
2340
|
}
|
|
@@ -2323,24 +2344,24 @@ var audit7 = {
|
|
|
2323
2344
|
};
|
|
2324
2345
|
|
|
2325
2346
|
// src/audits/hidden-elements.ts
|
|
2326
|
-
var
|
|
2347
|
+
var import_i18n32 = require("@wordpress/i18n");
|
|
2327
2348
|
function isHiddenOnAllDevices(settings) {
|
|
2328
2349
|
return Boolean(settings.hide_desktop) && Boolean(settings.hide_tablet) && Boolean(settings.hide_mobile);
|
|
2329
2350
|
}
|
|
2330
2351
|
var audit8 = {
|
|
2331
2352
|
id: "audits/hidden-elements",
|
|
2332
|
-
title: (0,
|
|
2333
|
-
description: (0,
|
|
2353
|
+
title: (0, import_i18n32.__)("Hidden elements", "elementor"),
|
|
2354
|
+
description: (0, import_i18n32.__)(
|
|
2334
2355
|
"Elements hidden on all devices simultaneously are effectively dead code in the page tree.",
|
|
2335
2356
|
"elementor"
|
|
2336
2357
|
),
|
|
2337
|
-
fixHint: (0,
|
|
2358
|
+
fixHint: (0, import_i18n32.__)("Remove the element or make it visible on at least one device breakpoint.", "elementor"),
|
|
2338
2359
|
categories: ["best-practices", "performance"],
|
|
2339
2360
|
severity: "info",
|
|
2340
2361
|
weight: 3,
|
|
2341
2362
|
evaluate: (ctx) => {
|
|
2342
2363
|
if (ctx.elements.tree.length === 0) {
|
|
2343
|
-
return { status: "skipped", reason: (0,
|
|
2364
|
+
return { status: "skipped", reason: (0, import_i18n32.__)("No elements", "elementor") };
|
|
2344
2365
|
}
|
|
2345
2366
|
const violations = [];
|
|
2346
2367
|
walkElements(ctx.elements.tree, (node) => {
|
|
@@ -2349,7 +2370,7 @@ var audit8 = {
|
|
|
2349
2370
|
auditId: audit8.id,
|
|
2350
2371
|
elementId: node.id,
|
|
2351
2372
|
targetHint: "element-settings",
|
|
2352
|
-
label: (0,
|
|
2373
|
+
label: (0, import_i18n32.__)("Element is hidden on all devices.", "elementor")
|
|
2353
2374
|
});
|
|
2354
2375
|
}
|
|
2355
2376
|
});
|
|
@@ -2358,7 +2379,7 @@ var audit8 = {
|
|
|
2358
2379
|
};
|
|
2359
2380
|
|
|
2360
2381
|
// src/audits/images-alt-text.ts
|
|
2361
|
-
var
|
|
2382
|
+
var import_i18n33 = require("@wordpress/i18n");
|
|
2362
2383
|
|
|
2363
2384
|
// src/utils/image-alt.ts
|
|
2364
2385
|
function hasMeaningfulAlt(media, pageContext) {
|
|
@@ -2378,15 +2399,15 @@ function isImageSourcePresent(media) {
|
|
|
2378
2399
|
// src/audits/images-alt-text.ts
|
|
2379
2400
|
var audit9 = {
|
|
2380
2401
|
id: "audits/images-alt-text",
|
|
2381
|
-
title: (0,
|
|
2382
|
-
description: (0,
|
|
2383
|
-
fixHint: (0,
|
|
2402
|
+
title: (0, import_i18n33.__)("Images alt text", "elementor"),
|
|
2403
|
+
description: (0, import_i18n33.__)("Every image needs a meaningful alt attribute for screen readers and image-search.", "elementor"),
|
|
2404
|
+
fixHint: (0, import_i18n33.__)("Open the image's settings and add an Alt Text describing the image.", "elementor"),
|
|
2384
2405
|
categories: ["seo", "accessibility"],
|
|
2385
2406
|
severity: "error",
|
|
2386
2407
|
weight: 10,
|
|
2387
2408
|
evaluate: (ctx) => {
|
|
2388
2409
|
if (!hasPageImages(ctx.elements.tree)) {
|
|
2389
|
-
return { status: "skipped", reason: (0,
|
|
2410
|
+
return { status: "skipped", reason: (0, import_i18n33.__)("No images", "elementor") };
|
|
2390
2411
|
}
|
|
2391
2412
|
const violations = [];
|
|
2392
2413
|
const failedWidgetIds = /* @__PURE__ */ new Set();
|
|
@@ -2402,7 +2423,7 @@ var audit9 = {
|
|
|
2402
2423
|
auditId: audit9.id,
|
|
2403
2424
|
elementId: node.id,
|
|
2404
2425
|
targetHint: "element-settings",
|
|
2405
|
-
label: (0,
|
|
2426
|
+
label: (0, import_i18n33.__)("Image is missing alt text.", "elementor"),
|
|
2406
2427
|
externalUrl: ctx.pageContext.ally_plugin_url
|
|
2407
2428
|
});
|
|
2408
2429
|
}
|
|
@@ -2412,20 +2433,20 @@ var audit9 = {
|
|
|
2412
2433
|
};
|
|
2413
2434
|
|
|
2414
2435
|
// src/audits/images-too-large.ts
|
|
2415
|
-
var
|
|
2436
|
+
var import_i18n34 = require("@wordpress/i18n");
|
|
2416
2437
|
var SIZE_THRESHOLD_BYTES = 500 * 1024;
|
|
2417
2438
|
var BYTES_PER_KB = 1024;
|
|
2418
2439
|
var audit10 = {
|
|
2419
2440
|
id: "audits/images-too-large",
|
|
2420
|
-
title: (0,
|
|
2421
|
-
description: (0,
|
|
2422
|
-
fixHint: (0,
|
|
2441
|
+
title: (0, import_i18n34.__)("Oversized images", "elementor"),
|
|
2442
|
+
description: (0, import_i18n34.__)("Large image files slow down the page.", "elementor"),
|
|
2443
|
+
fixHint: (0, import_i18n34.__)("Replace the image with a smaller version or enable image optimization.", "elementor"),
|
|
2423
2444
|
categories: ["performance"],
|
|
2424
2445
|
severity: "warning",
|
|
2425
2446
|
weight: 7,
|
|
2426
2447
|
evaluate: (ctx) => {
|
|
2427
2448
|
if (!hasPageImages(ctx.elements.tree)) {
|
|
2428
|
-
return { status: "skipped", reason: (0,
|
|
2449
|
+
return { status: "skipped", reason: (0, import_i18n34.__)("No images", "elementor") };
|
|
2429
2450
|
}
|
|
2430
2451
|
const widgetMaxKb = /* @__PURE__ */ new Map();
|
|
2431
2452
|
let oversizedImageCount = 0;
|
|
@@ -2447,9 +2468,9 @@ var audit10 = {
|
|
|
2447
2468
|
auditId: audit10.id,
|
|
2448
2469
|
elementId,
|
|
2449
2470
|
targetHint: "element-settings",
|
|
2450
|
-
label: (0,
|
|
2471
|
+
label: (0, import_i18n34.sprintf)(
|
|
2451
2472
|
/* translators: %d is the image file size in kilobytes. */
|
|
2452
|
-
(0,
|
|
2473
|
+
(0, import_i18n34.__)("Image is %d KB (over 500 KB).", "elementor"),
|
|
2453
2474
|
kb
|
|
2454
2475
|
),
|
|
2455
2476
|
externalUrl: ctx.pageContext.image_optimization_plugin_url
|
|
@@ -2459,21 +2480,21 @@ var audit10 = {
|
|
|
2459
2480
|
};
|
|
2460
2481
|
|
|
2461
2482
|
// src/audits/nested-boxed-containers.ts
|
|
2462
|
-
var
|
|
2483
|
+
var import_i18n35 = require("@wordpress/i18n");
|
|
2463
2484
|
function isBoxed(settings) {
|
|
2464
2485
|
return settings.content_width === "boxed";
|
|
2465
2486
|
}
|
|
2466
2487
|
var audit11 = {
|
|
2467
2488
|
id: "audits/nested-boxed-containers",
|
|
2468
|
-
title: (0,
|
|
2469
|
-
description: (0,
|
|
2470
|
-
fixHint: (0,
|
|
2489
|
+
title: (0, import_i18n35.__)("Boxed container nested inside a boxed parent", "elementor"),
|
|
2490
|
+
description: (0, import_i18n35.__)("An inner container does not need to be boxed when its parent already is.", "elementor"),
|
|
2491
|
+
fixHint: (0, import_i18n35.__)("Change the inner container's content width to Full Width.", "elementor"),
|
|
2471
2492
|
categories: ["best-practices", "performance"],
|
|
2472
2493
|
severity: "info",
|
|
2473
2494
|
weight: 5,
|
|
2474
2495
|
evaluate: (ctx) => {
|
|
2475
2496
|
if (ctx.elements.tree.length === 0) {
|
|
2476
|
-
return { status: "skipped", reason: (0,
|
|
2497
|
+
return { status: "skipped", reason: (0, import_i18n35.__)("No elements", "elementor") };
|
|
2477
2498
|
}
|
|
2478
2499
|
const violations = [];
|
|
2479
2500
|
walkElements(ctx.elements.tree, (node, parents) => {
|
|
@@ -2486,7 +2507,7 @@ var audit11 = {
|
|
|
2486
2507
|
auditId: audit11.id,
|
|
2487
2508
|
elementId: node.id,
|
|
2488
2509
|
targetHint: "element-settings",
|
|
2489
|
-
label: (0,
|
|
2510
|
+
label: (0, import_i18n35.__)("Nested boxed container.", "elementor")
|
|
2490
2511
|
});
|
|
2491
2512
|
}
|
|
2492
2513
|
});
|
|
@@ -2495,12 +2516,12 @@ var audit11 = {
|
|
|
2495
2516
|
};
|
|
2496
2517
|
|
|
2497
2518
|
// src/audits/page-excerpt.ts
|
|
2498
|
-
var
|
|
2519
|
+
var import_i18n36 = require("@wordpress/i18n");
|
|
2499
2520
|
var audit12 = {
|
|
2500
2521
|
id: "audits/page-excerpt",
|
|
2501
|
-
title: (0,
|
|
2502
|
-
description: (0,
|
|
2503
|
-
fixHint: (0,
|
|
2522
|
+
title: (0, import_i18n36.__)("Page excerpt", "elementor"),
|
|
2523
|
+
description: (0, import_i18n36.__)("A descriptive excerpt helps search engines and previews summarize the page.", "elementor"),
|
|
2524
|
+
fixHint: (0, import_i18n36.__)("Open Page Settings and write a short excerpt.", "elementor"),
|
|
2504
2525
|
categories: ["seo"],
|
|
2505
2526
|
severity: "warning",
|
|
2506
2527
|
weight: 5,
|
|
@@ -2513,7 +2534,7 @@ var audit12 = {
|
|
|
2513
2534
|
violations: [
|
|
2514
2535
|
{
|
|
2515
2536
|
auditId: audit12.id,
|
|
2516
|
-
label: (0,
|
|
2537
|
+
label: (0, import_i18n36.__)("Page has no excerpt.", "elementor"),
|
|
2517
2538
|
targetHint: "page-settings",
|
|
2518
2539
|
angieFix: true
|
|
2519
2540
|
}
|
|
@@ -2523,12 +2544,12 @@ var audit12 = {
|
|
|
2523
2544
|
};
|
|
2524
2545
|
|
|
2525
2546
|
// src/audits/page-featured-image.ts
|
|
2526
|
-
var
|
|
2547
|
+
var import_i18n37 = require("@wordpress/i18n");
|
|
2527
2548
|
var audit13 = {
|
|
2528
2549
|
id: "audits/page-featured-image",
|
|
2529
|
-
title: (0,
|
|
2530
|
-
description: (0,
|
|
2531
|
-
fixHint: (0,
|
|
2550
|
+
title: (0, import_i18n37.__)("Page featured image", "elementor"),
|
|
2551
|
+
description: (0, import_i18n37.__)("Featured images are used by social shares and many themes for hero visuals.", "elementor"),
|
|
2552
|
+
fixHint: (0, import_i18n37.__)("Open Page Settings and set a featured image.", "elementor"),
|
|
2532
2553
|
categories: ["seo"],
|
|
2533
2554
|
severity: "info",
|
|
2534
2555
|
weight: 5,
|
|
@@ -2541,7 +2562,7 @@ var audit13 = {
|
|
|
2541
2562
|
violations: [
|
|
2542
2563
|
{
|
|
2543
2564
|
auditId: audit13.id,
|
|
2544
|
-
label: (0,
|
|
2565
|
+
label: (0, import_i18n37.__)("No featured image set.", "elementor"),
|
|
2545
2566
|
targetHint: "page-settings"
|
|
2546
2567
|
}
|
|
2547
2568
|
]
|
|
@@ -2550,13 +2571,13 @@ var audit13 = {
|
|
|
2550
2571
|
};
|
|
2551
2572
|
|
|
2552
2573
|
// src/audits/page-title.ts
|
|
2553
|
-
var
|
|
2574
|
+
var import_i18n38 = require("@wordpress/i18n");
|
|
2554
2575
|
var MAX_TITLE_LENGTH = 60;
|
|
2555
2576
|
var audit14 = {
|
|
2556
2577
|
id: "audits/page-title",
|
|
2557
|
-
title: (0,
|
|
2558
|
-
description: (0,
|
|
2559
|
-
fixHint: (0,
|
|
2578
|
+
title: (0, import_i18n38.__)("Page title", "elementor"),
|
|
2579
|
+
description: (0, import_i18n38.__)("Pages need a clear title for SEO and screen-reader navigation.", "elementor"),
|
|
2580
|
+
fixHint: (0, import_i18n38.__)("Open Page Settings and add a title.", "elementor"),
|
|
2560
2581
|
categories: ["seo"],
|
|
2561
2582
|
severity: "error",
|
|
2562
2583
|
weight: 10,
|
|
@@ -2568,9 +2589,13 @@ var audit14 = {
|
|
|
2568
2589
|
violations: [
|
|
2569
2590
|
{
|
|
2570
2591
|
auditId: audit14.id,
|
|
2571
|
-
label: (0,
|
|
2592
|
+
label: (0, import_i18n38.__)("Page has no title.", "elementor"),
|
|
2572
2593
|
targetHint: "page-settings",
|
|
2573
|
-
angieFix: true
|
|
2594
|
+
angieFix: true,
|
|
2595
|
+
angiePrompt: (0, import_i18n38.__)(
|
|
2596
|
+
"Based on this page's contents, generate a title for this page.",
|
|
2597
|
+
"elementor"
|
|
2598
|
+
)
|
|
2574
2599
|
}
|
|
2575
2600
|
]
|
|
2576
2601
|
};
|
|
@@ -2581,7 +2606,7 @@ var audit14 = {
|
|
|
2581
2606
|
violations: [
|
|
2582
2607
|
{
|
|
2583
2608
|
auditId: audit14.id,
|
|
2584
|
-
label: (0,
|
|
2609
|
+
label: (0, import_i18n38.__)("Page title is too long.", "elementor"),
|
|
2585
2610
|
targetHint: "page-settings",
|
|
2586
2611
|
angieFix: true
|
|
2587
2612
|
}
|
|
@@ -2593,7 +2618,7 @@ var audit14 = {
|
|
|
2593
2618
|
};
|
|
2594
2619
|
|
|
2595
2620
|
// src/audits/prefer-global-colors.ts
|
|
2596
|
-
var
|
|
2621
|
+
var import_i18n39 = require("@wordpress/i18n");
|
|
2597
2622
|
|
|
2598
2623
|
// src/utils/collect-hardcoded-colors.ts
|
|
2599
2624
|
var RESERVED_SETTING_KEYS = /* @__PURE__ */ new Set(["__globals__", "__dynamic__"]);
|
|
@@ -2661,18 +2686,18 @@ function findMatchingGlobalByValue(value, globals) {
|
|
|
2661
2686
|
// src/audits/prefer-global-colors.ts
|
|
2662
2687
|
var audit15 = {
|
|
2663
2688
|
id: "audits/prefer-global-colors",
|
|
2664
|
-
title: (0,
|
|
2665
|
-
description: (0,
|
|
2666
|
-
fixHint: (0,
|
|
2689
|
+
title: (0, import_i18n39.__)("Prefer global colors", "elementor"),
|
|
2690
|
+
description: (0, import_i18n39.__)("Global colors make the design consistent and easy to update site-wide.", "elementor"),
|
|
2691
|
+
fixHint: (0, import_i18n39.__)("Replace the hard-coded value with the matching global color.", "elementor"),
|
|
2667
2692
|
categories: ["best-practices"],
|
|
2668
2693
|
severity: "info",
|
|
2669
2694
|
weight: 3,
|
|
2670
2695
|
evaluate: (ctx) => {
|
|
2671
2696
|
if (ctx.elements.tree.length === 0) {
|
|
2672
|
-
return { status: "skipped", reason: (0,
|
|
2697
|
+
return { status: "skipped", reason: (0, import_i18n39.__)("No elements", "elementor") };
|
|
2673
2698
|
}
|
|
2674
2699
|
if (ctx.kit.globals.colors.length === 0) {
|
|
2675
|
-
return { status: "skipped", reason: (0,
|
|
2700
|
+
return { status: "skipped", reason: (0, import_i18n39.__)("No global colors", "elementor") };
|
|
2676
2701
|
}
|
|
2677
2702
|
const violations = [];
|
|
2678
2703
|
walkElements(ctx.elements.tree, (node) => {
|
|
@@ -2686,9 +2711,9 @@ var audit15 = {
|
|
|
2686
2711
|
elementId: node.id,
|
|
2687
2712
|
targetHint: "element-settings",
|
|
2688
2713
|
angieFix: true,
|
|
2689
|
-
label: (0,
|
|
2714
|
+
label: (0, import_i18n39.sprintf)(
|
|
2690
2715
|
/* translators: 1: hard-coded color value, 2: global color title. */
|
|
2691
|
-
(0,
|
|
2716
|
+
(0, import_i18n39.__)('replace "%1$s" with "%2$s" global color', "elementor"),
|
|
2692
2717
|
value,
|
|
2693
2718
|
global.title
|
|
2694
2719
|
)
|
|
@@ -2700,7 +2725,7 @@ var audit15 = {
|
|
|
2700
2725
|
};
|
|
2701
2726
|
|
|
2702
2727
|
// src/audits/prefer-global-fonts.ts
|
|
2703
|
-
var
|
|
2728
|
+
var import_i18n40 = require("@wordpress/i18n");
|
|
2704
2729
|
|
|
2705
2730
|
// src/utils/collect-hardcoded-fonts.ts
|
|
2706
2731
|
var RESERVED_SETTING_KEYS2 = /* @__PURE__ */ new Set(["__globals__", "__dynamic__"]);
|
|
@@ -2760,18 +2785,18 @@ function collectHardcodedFonts(settings, pathPrefix = "") {
|
|
|
2760
2785
|
// src/audits/prefer-global-fonts.ts
|
|
2761
2786
|
var audit16 = {
|
|
2762
2787
|
id: "audits/prefer-global-fonts",
|
|
2763
|
-
title: (0,
|
|
2764
|
-
description: (0,
|
|
2765
|
-
fixHint: (0,
|
|
2788
|
+
title: (0, import_i18n40.__)("Prefer global fonts", "elementor"),
|
|
2789
|
+
description: (0, import_i18n40.__)("Global fonts make the design consistent and easy to update site-wide.", "elementor"),
|
|
2790
|
+
fixHint: (0, import_i18n40.__)("Replace the hard-coded value with the matching global font.", "elementor"),
|
|
2766
2791
|
categories: ["best-practices", "performance"],
|
|
2767
2792
|
severity: "info",
|
|
2768
2793
|
weight: 3,
|
|
2769
2794
|
evaluate: (ctx) => {
|
|
2770
2795
|
if (ctx.elements.tree.length === 0) {
|
|
2771
|
-
return { status: "skipped", reason: (0,
|
|
2796
|
+
return { status: "skipped", reason: (0, import_i18n40.__)("No elements", "elementor") };
|
|
2772
2797
|
}
|
|
2773
2798
|
if (ctx.kit.globals.fonts.length === 0) {
|
|
2774
|
-
return { status: "skipped", reason: (0,
|
|
2799
|
+
return { status: "skipped", reason: (0, import_i18n40.__)("No global fonts", "elementor") };
|
|
2775
2800
|
}
|
|
2776
2801
|
const violations = [];
|
|
2777
2802
|
walkElements(ctx.elements.tree, (node) => {
|
|
@@ -2784,9 +2809,9 @@ var audit16 = {
|
|
|
2784
2809
|
auditId: audit16.id,
|
|
2785
2810
|
elementId: node.id,
|
|
2786
2811
|
targetHint: "element-settings",
|
|
2787
|
-
label: (0,
|
|
2812
|
+
label: (0, import_i18n40.sprintf)(
|
|
2788
2813
|
/* translators: %s: global font title. */
|
|
2789
|
-
(0,
|
|
2814
|
+
(0, import_i18n40.__)('replace hardcoded typography with "%s" global font', "elementor"),
|
|
2790
2815
|
global.title
|
|
2791
2816
|
)
|
|
2792
2817
|
});
|
|
@@ -2797,15 +2822,15 @@ var audit16 = {
|
|
|
2797
2822
|
};
|
|
2798
2823
|
|
|
2799
2824
|
// src/audits/privacy-policy.ts
|
|
2800
|
-
var
|
|
2825
|
+
var import_i18n41 = require("@wordpress/i18n");
|
|
2801
2826
|
var audit17 = {
|
|
2802
2827
|
id: "audits/privacy-policy",
|
|
2803
|
-
title: (0,
|
|
2804
|
-
description: (0,
|
|
2828
|
+
title: (0, import_i18n41.__)("Privacy policy", "elementor"),
|
|
2829
|
+
description: (0, import_i18n41.__)(
|
|
2805
2830
|
"A privacy policy page is required by privacy regulations such as GDPR (EU) and CCPA (US).",
|
|
2806
2831
|
"elementor"
|
|
2807
2832
|
),
|
|
2808
|
-
fixHint: (0,
|
|
2833
|
+
fixHint: (0, import_i18n41.__)(
|
|
2809
2834
|
"Go to Settings > Privacy in the WordPress admin and assign a published privacy policy page.",
|
|
2810
2835
|
"elementor"
|
|
2811
2836
|
),
|
|
@@ -2821,9 +2846,9 @@ var audit17 = {
|
|
|
2821
2846
|
violations: [
|
|
2822
2847
|
{
|
|
2823
2848
|
auditId: audit17.id,
|
|
2824
|
-
label: (0,
|
|
2849
|
+
label: (0, import_i18n41.__)("No privacy policy page is set.", "elementor"),
|
|
2825
2850
|
externalUrl: ctx.pageContext.privacy_settings_url,
|
|
2826
|
-
ctaLabel: (0,
|
|
2851
|
+
ctaLabel: (0, import_i18n41.__)("Create", "elementor")
|
|
2827
2852
|
}
|
|
2828
2853
|
]
|
|
2829
2854
|
};
|
|
@@ -2831,15 +2856,15 @@ var audit17 = {
|
|
|
2831
2856
|
};
|
|
2832
2857
|
|
|
2833
2858
|
// src/audits/robots-noindex.ts
|
|
2834
|
-
var
|
|
2859
|
+
var import_i18n42 = require("@wordpress/i18n");
|
|
2835
2860
|
var audit18 = {
|
|
2836
2861
|
id: "audits/robots-noindex",
|
|
2837
|
-
title: (0,
|
|
2838
|
-
description: (0,
|
|
2862
|
+
title: (0, import_i18n42.__)("Search engine visibility", "elementor"),
|
|
2863
|
+
description: (0, import_i18n42.__)(
|
|
2839
2864
|
"When search engine visibility is checked in WordPress Settings -> Reading -> Search Engine Visibility, search engines are discouraged from indexing the website.",
|
|
2840
2865
|
"elementor"
|
|
2841
2866
|
),
|
|
2842
|
-
fixHint: (0,
|
|
2867
|
+
fixHint: (0, import_i18n42.__)(
|
|
2843
2868
|
'Go to Settings \u2192 Reading in the WordPress admin and uncheck "Discourage search engines from indexing this site" when the website should be indexed.',
|
|
2844
2869
|
"elementor"
|
|
2845
2870
|
),
|
|
@@ -2855,7 +2880,7 @@ var audit18 = {
|
|
|
2855
2880
|
violations: [
|
|
2856
2881
|
{
|
|
2857
2882
|
auditId: audit18.id,
|
|
2858
|
-
label: (0,
|
|
2883
|
+
label: (0, import_i18n42.__)("Search engines are discouraged from indexing this website.", "elementor"),
|
|
2859
2884
|
externalUrl: ctx.pageContext.reading_settings_url
|
|
2860
2885
|
}
|
|
2861
2886
|
]
|
|
@@ -2864,15 +2889,15 @@ var audit18 = {
|
|
|
2864
2889
|
};
|
|
2865
2890
|
|
|
2866
2891
|
// src/audits/scan-for-cookies.ts
|
|
2867
|
-
var
|
|
2892
|
+
var import_i18n43 = require("@wordpress/i18n");
|
|
2868
2893
|
var audit19 = {
|
|
2869
2894
|
id: "audits/scan-for-cookies",
|
|
2870
|
-
title: (0,
|
|
2871
|
-
description: (0,
|
|
2895
|
+
title: (0, import_i18n43.__)("Scan for cookies", "elementor"),
|
|
2896
|
+
description: (0, import_i18n43.__)(
|
|
2872
2897
|
"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.",
|
|
2873
2898
|
"elementor"
|
|
2874
2899
|
),
|
|
2875
|
-
fixHint: (0,
|
|
2900
|
+
fixHint: (0, import_i18n43.__)("Run a Cookiez scan on this page to see which cookies need disclosure.", "elementor"),
|
|
2876
2901
|
categories: ["compliance"],
|
|
2877
2902
|
severity: "info",
|
|
2878
2903
|
weight: 0,
|
|
@@ -2883,7 +2908,7 @@ var audit19 = {
|
|
|
2883
2908
|
violations: [
|
|
2884
2909
|
{
|
|
2885
2910
|
auditId: audit19.id,
|
|
2886
|
-
label: (0,
|
|
2911
|
+
label: (0, import_i18n43.__)("This page has not been scanned for cookies yet.", "elementor"),
|
|
2887
2912
|
externalUrl: isReady ? ctx.pageContext.cookiez_scan_url : ctx.pageContext.cookiez_plugin_action_url
|
|
2888
2913
|
}
|
|
2889
2914
|
]
|
|
@@ -2892,21 +2917,21 @@ var audit19 = {
|
|
|
2892
2917
|
};
|
|
2893
2918
|
|
|
2894
2919
|
// src/audits/sections-and-columns.ts
|
|
2895
|
-
var
|
|
2920
|
+
var import_i18n44 = require("@wordpress/i18n");
|
|
2896
2921
|
var audit20 = {
|
|
2897
2922
|
id: "audits/sections-and-columns",
|
|
2898
|
-
title: (0,
|
|
2899
|
-
description: (0,
|
|
2923
|
+
title: (0, import_i18n44.__)("Sections and columns", "elementor"),
|
|
2924
|
+
description: (0, import_i18n44.__)(
|
|
2900
2925
|
"Sections and columns are legacy elements. Containers render fewer DOM nodes and are more flexible.",
|
|
2901
2926
|
"elementor"
|
|
2902
2927
|
),
|
|
2903
|
-
fixHint: (0,
|
|
2928
|
+
fixHint: (0, import_i18n44.__)("Use the Container Converter to replace each section/column with a container.", "elementor"),
|
|
2904
2929
|
categories: ["best-practices", "performance"],
|
|
2905
2930
|
severity: "warning",
|
|
2906
2931
|
weight: 7,
|
|
2907
2932
|
evaluate: (ctx) => {
|
|
2908
2933
|
if (ctx.elements.tree.length === 0) {
|
|
2909
|
-
return { status: "skipped", reason: (0,
|
|
2934
|
+
return { status: "skipped", reason: (0, import_i18n44.__)("No elements", "elementor") };
|
|
2910
2935
|
}
|
|
2911
2936
|
const violations = [];
|
|
2912
2937
|
walkElements(ctx.elements.tree, (node) => {
|
|
@@ -2914,7 +2939,7 @@ var audit20 = {
|
|
|
2914
2939
|
violations.push({
|
|
2915
2940
|
auditId: audit20.id,
|
|
2916
2941
|
elementId: node.id,
|
|
2917
|
-
label: node.elType === "section" ? (0,
|
|
2942
|
+
label: node.elType === "section" ? (0, import_i18n44.__)("Section element", "elementor") : (0, import_i18n44.__)("Column element", "elementor")
|
|
2918
2943
|
});
|
|
2919
2944
|
}
|
|
2920
2945
|
});
|
|
@@ -2923,15 +2948,15 @@ var audit20 = {
|
|
|
2923
2948
|
};
|
|
2924
2949
|
|
|
2925
2950
|
// src/audits/site-identity.ts
|
|
2926
|
-
var
|
|
2951
|
+
var import_i18n45 = require("@wordpress/i18n");
|
|
2927
2952
|
var audit21 = {
|
|
2928
2953
|
id: "audits/site-identity",
|
|
2929
|
-
title: (0,
|
|
2930
|
-
description: (0,
|
|
2954
|
+
title: (0, import_i18n45.__)("Site identity", "elementor"),
|
|
2955
|
+
description: (0, import_i18n45.__)(
|
|
2931
2956
|
"Site name, description, logo, and favicon establish your brand and appear in search results and browser tabs.",
|
|
2932
2957
|
"elementor"
|
|
2933
2958
|
),
|
|
2934
|
-
fixHint: (0,
|
|
2959
|
+
fixHint: (0, import_i18n45.__)("Open Site Settings \u2192 Site Identity and complete all the missing fields.", "elementor"),
|
|
2935
2960
|
categories: ["best-practices", "seo"],
|
|
2936
2961
|
severity: "info",
|
|
2937
2962
|
weight: 7,
|
|
@@ -2941,14 +2966,14 @@ var audit21 = {
|
|
|
2941
2966
|
if (!identity.site_name_set) {
|
|
2942
2967
|
violations.push({
|
|
2943
2968
|
auditId: audit21.id,
|
|
2944
|
-
label: (0,
|
|
2969
|
+
label: (0, import_i18n45.__)("Site name is missing or still uses the default.", "elementor"),
|
|
2945
2970
|
targetHint: "site-identity-settings"
|
|
2946
2971
|
});
|
|
2947
2972
|
}
|
|
2948
2973
|
if (!identity.site_description_set) {
|
|
2949
2974
|
violations.push({
|
|
2950
2975
|
auditId: audit21.id,
|
|
2951
|
-
label: (0,
|
|
2976
|
+
label: (0, import_i18n45.__)("Site description is missing or still uses the default.", "elementor"),
|
|
2952
2977
|
targetHint: "site-identity-settings",
|
|
2953
2978
|
angieFix: true
|
|
2954
2979
|
});
|
|
@@ -2956,14 +2981,14 @@ var audit21 = {
|
|
|
2956
2981
|
if (!identity.site_logo_set) {
|
|
2957
2982
|
violations.push({
|
|
2958
2983
|
auditId: audit21.id,
|
|
2959
|
-
label: (0,
|
|
2984
|
+
label: (0, import_i18n45.__)("Site logo is not set.", "elementor"),
|
|
2960
2985
|
targetHint: "site-identity-settings"
|
|
2961
2986
|
});
|
|
2962
2987
|
}
|
|
2963
2988
|
if (!identity.site_favicon_set) {
|
|
2964
2989
|
violations.push({
|
|
2965
2990
|
auditId: audit21.id,
|
|
2966
|
-
label: (0,
|
|
2991
|
+
label: (0, import_i18n45.__)("Site favicon is not set.", "elementor"),
|
|
2967
2992
|
targetHint: "site-identity-settings"
|
|
2968
2993
|
});
|
|
2969
2994
|
}
|
|
@@ -2979,7 +3004,7 @@ var audit21 = {
|
|
|
2979
3004
|
|
|
2980
3005
|
// src/audits/too-many-widgets.ts
|
|
2981
3006
|
var import_editor_elements8 = require("@elementor/editor-elements");
|
|
2982
|
-
var
|
|
3007
|
+
var import_i18n46 = require("@wordpress/i18n");
|
|
2983
3008
|
var WIDGET_COUNT_THRESHOLD = 100;
|
|
2984
3009
|
function isCountableWidget(node, widgetsCache) {
|
|
2985
3010
|
if (node.elType === "widget") {
|
|
@@ -2989,15 +3014,15 @@ function isCountableWidget(node, widgetsCache) {
|
|
|
2989
3014
|
}
|
|
2990
3015
|
var audit22 = {
|
|
2991
3016
|
id: "audits/too-many-widgets",
|
|
2992
|
-
title: (0,
|
|
2993
|
-
description: (0,
|
|
2994
|
-
fixHint: (0,
|
|
3017
|
+
title: (0, import_i18n46.__)("Too many widgets", "elementor"),
|
|
3018
|
+
description: (0, import_i18n46.__)("Excessive DOM size caused by too many widgets degrades rendering performance.", "elementor"),
|
|
3019
|
+
fixHint: (0, import_i18n46.__)("Reduce the number of widgets on the page by removing or combining elements.", "elementor"),
|
|
2995
3020
|
categories: ["best-practices", "performance"],
|
|
2996
3021
|
severity: "warning",
|
|
2997
3022
|
weight: 5,
|
|
2998
3023
|
evaluate: (ctx) => {
|
|
2999
3024
|
if (ctx.elements.tree.length === 0) {
|
|
3000
|
-
return { status: "skipped", reason: (0,
|
|
3025
|
+
return { status: "skipped", reason: (0, import_i18n46.__)("No elements", "elementor") };
|
|
3001
3026
|
}
|
|
3002
3027
|
const widgetsCache = (0, import_editor_elements8.getWidgetsCache)();
|
|
3003
3028
|
let widgetCount = 0;
|
|
@@ -3014,7 +3039,7 @@ var audit22 = {
|
|
|
3014
3039
|
violations: [
|
|
3015
3040
|
{
|
|
3016
3041
|
auditId: audit22.id,
|
|
3017
|
-
label: (0,
|
|
3042
|
+
label: (0, import_i18n46.__)("Page has too many widgets.", "elementor")
|
|
3018
3043
|
}
|
|
3019
3044
|
]
|
|
3020
3045
|
};
|