@zeesoft/i18n-verify 2.0.2 → 2.1.0
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/driver/adapters/cypress.js +2 -1
- package/dist/driver/adapters/nightwatch.js +43 -2
- package/dist/driver/baseDriver.js +24 -0
- package/dist/index.js +10 -5
- package/dist/lib/i18n.js +125 -43
- package/dist/{utils → lib}/reports.js +42 -27
- package/dist/lib/validator/string.js +2 -2
- package/dist/template/report.html +1678 -0
- package/dist/utils/cache.js +15 -15
- package/dist/utils/constants.js +8 -5
- package/dist/utils/file.js +8 -4
- package/dist/utils/logs.js +30 -11
- package/dist/utils/objects/cacheData.js +14 -33
- package/dist/utils/objects/metaData.js +7 -26
- package/dist/utils/objects/reportData.js +0 -18
- package/dist/utils/objects/statData.js +43 -28
- package/dist/utils/objects/stringData.js +4 -7
- package/dist/utils/reportFactory/base.js +15 -7
- package/dist/utils/reportFactory/html/index.js +13 -9
- package/dist/utils/reportFactory/html/template/body.js +110 -0
- package/dist/utils/reportFactory/html/template/css.js +446 -409
- package/dist/utils/reportFactory/html/template/html.js +15 -112
- package/dist/utils/reportFactory/html/template/javascript/data.js +59 -1
- package/dist/utils/reportFactory/html/template/javascript/global.js +19 -0
- package/dist/utils/reportFactory/html/template/javascript/grid.js +54 -80
- package/dist/utils/reportFactory/html/template/javascript/index.js +7 -7
- package/dist/utils/reportFactory/html/template/javascript/insight.js +226 -201
- package/dist/utils/reportFactory/html/template/javascript/menuBar.js +40 -35
- package/dist/utils/reportFactory/html/template/javascript/overview.js +725 -533
- package/dist/utils/reportFactory/index.js +4 -6
- package/dist/utils/reportFactory/table.js +95 -0
- package/dist/utils/resource.js +10 -6
- package/dist/utils/runtime.js +23 -3
- package/dist/utils/scripts/postinstall.js +3 -2
- package/package.json +8 -3
- package/types/index.d.ts +46 -0
- package/dist/utils/reportsTable.js +0 -71
|
@@ -4,221 +4,246 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var _default = () =>
|
|
8
|
-
|
|
9
|
-
(()
|
|
10
|
-
document.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
7
|
+
var _default = () => `// insights content
|
|
8
|
+
(() => {
|
|
9
|
+
if (!DataStore.ranSuccessfully()) {
|
|
10
|
+
document.getElementById('overview').innerHTML =
|
|
11
|
+
'Unable to prepare zQA automation report for the project.';
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
document.addEventListener('DOMContentLoaded', function () {
|
|
16
|
+
renderCards();
|
|
17
|
+
|
|
18
|
+
// helper methods to generate cards and its sections
|
|
19
|
+
function createStatSection(locale, data) {
|
|
20
|
+
const isDefaultLocale = DataStore.isDefaultLocale(locale);
|
|
21
|
+
const holder = document.createElement('div');
|
|
22
|
+
const table = document.createElement('table');
|
|
23
|
+
const tbody = document.createElement('tbody');
|
|
24
|
+
const name = document.createElement('div');
|
|
25
|
+
const tableData = {
|
|
26
|
+
Reviewed: data.reviewed,
|
|
27
|
+
'Internationlized Strings':
|
|
28
|
+
data.localizedStrings +
|
|
29
|
+
data.untranslatedStrings +
|
|
30
|
+
data.partialStrings,
|
|
31
|
+
'Not Internationlized Strings': data.notLocalizedStrings,
|
|
32
|
+
'Untranslated Strings': data.untranslatedStrings,
|
|
33
|
+
'Encoding Issue Strings': data.encoding,
|
|
34
|
+
'DNT Strings': data.dnt,
|
|
35
|
+
'Ignored Strings': data.ignored,
|
|
36
|
+
'Auto Ignored Strings': data.autoIgnored,
|
|
37
|
+
'User Input Strings': data.userInput,
|
|
38
|
+
'Internationlized Numbers': data.localizedNumber,
|
|
39
|
+
'Not Internationlized Numbers': data.notLocalizedNumber,
|
|
40
|
+
'Internationlized Currency': data.localizedCurrency,
|
|
41
|
+
'Not Internationlized Currency': data.notLocalizedCurrency,
|
|
42
|
+
'Not Internationlized Numbers': data.notLocalizedNumber,
|
|
43
|
+
'Internationlized Percentage': data.localizedPercentage,
|
|
44
|
+
'Not Internationlized Percentage': data.notLocalizedPercentage,
|
|
45
|
+
'Internationlized Date': data.localizedDate,
|
|
46
|
+
'Not Internationlized Date': data.notLocalizedDate,
|
|
47
|
+
'Internationlized Time': data.localizedTime,
|
|
48
|
+
'Not Internationlized Time': data.notLocalizedTime,
|
|
49
|
+
'Internationlized DateTime': data.localizedDate,
|
|
50
|
+
'Not Internationlized DateTime': data.notLocalizedDateTime
|
|
51
|
+
};
|
|
52
|
+
const addRow = (name, value) => {
|
|
53
|
+
const row = document.createElement('tr');
|
|
54
|
+
|
|
55
|
+
const col1 = document.createElement('td');
|
|
56
|
+
col1.classList.add('name');
|
|
57
|
+
col1.textContent = name;
|
|
58
|
+
|
|
59
|
+
const col2 = document.createElement('td');
|
|
60
|
+
col2.classList.add('value');
|
|
61
|
+
col2.textContent = value;
|
|
62
|
+
|
|
63
|
+
row.appendChild(col1);
|
|
64
|
+
row.appendChild(col2);
|
|
65
|
+
return row;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
for (const rowData of Object.entries(tableData)) {
|
|
69
|
+
if (!isDefaultLocale || rowData[0] !== 'Untranslated Strings') {
|
|
70
|
+
tbody.appendChild(addRow(rowData[0], rowData[1]));
|
|
59
71
|
}
|
|
60
|
-
|
|
61
|
-
holder.classList.add("stat");
|
|
62
|
-
name.classList.add("name");
|
|
63
|
-
name.textContent = "Summary";
|
|
64
|
-
holder.append(name);
|
|
65
|
-
|
|
66
|
-
table.appendChild(tbody);
|
|
67
|
-
holder.appendChild(table);
|
|
68
|
-
return holder;
|
|
69
72
|
}
|
|
70
73
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return holder;
|
|
74
|
+
holder.classList.add('stat');
|
|
75
|
+
name.classList.add('name');
|
|
76
|
+
name.textContent = 'Summary';
|
|
77
|
+
holder.append(name);
|
|
78
|
+
|
|
79
|
+
table.appendChild(tbody);
|
|
80
|
+
holder.appendChild(table);
|
|
81
|
+
return holder;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function createStatusBarSection(locale, data) {
|
|
85
|
+
const holder = document.createElement('div');
|
|
86
|
+
holder.classList.add('status-bar');
|
|
87
|
+
|
|
88
|
+
const generateBarEl = (name, total, current) => {
|
|
89
|
+
const getColorClass = (value) => {
|
|
90
|
+
if (value <= 25) {
|
|
91
|
+
return 'red';
|
|
92
|
+
} else if (value <= 50) {
|
|
93
|
+
return 'yellow';
|
|
94
|
+
} else if (value <= 75) {
|
|
95
|
+
return 'blue';
|
|
96
|
+
} else if (value <= 100) {
|
|
97
|
+
return 'green';
|
|
98
|
+
}
|
|
97
99
|
};
|
|
100
|
+
current = (current / total) * 100;
|
|
101
|
+
current = isNaN(current) || !isFinite(current) ? 0 : current;
|
|
102
|
+
const holder = document.createElement('div');
|
|
103
|
+
holder.classList.add('bar-container');
|
|
98
104
|
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
const totalLocStr = isDefaultLocale ? 100 : 90;
|
|
103
|
-
const totalI18nedNum = isDefaultLocale ? 100 : 50;
|
|
104
|
-
const totalI18nedDateTime = isDefaultLocale ? 100 : 80;
|
|
105
|
+
const nameHolder = document.createElement('div');
|
|
106
|
+
nameHolder.classList.add('name');
|
|
107
|
+
nameHolder.textContent = name;
|
|
105
108
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
);
|
|
109
|
-
holder.appendChild(
|
|
110
|
-
generateBarEl("String L10n level", totalStrings, totalLocStr)
|
|
111
|
-
);
|
|
112
|
-
holder.appendChild(
|
|
113
|
-
generateBarEl("Number I18n level", totalStrings, totalI18nedNum)
|
|
114
|
-
);
|
|
115
|
-
holder.appendChild(
|
|
116
|
-
generateBarEl(
|
|
117
|
-
"DateTime I18n level",
|
|
118
|
-
totalStrings,
|
|
119
|
-
totalI18nedDateTime
|
|
120
|
-
)
|
|
121
|
-
);
|
|
122
|
-
return holder;
|
|
123
|
-
}
|
|
109
|
+
const barHolder = document.createElement('div');
|
|
110
|
+
barHolder.classList.add('bar-holder');
|
|
124
111
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
112
|
+
const bar = document.createElement('div');
|
|
113
|
+
bar.classList.add('bar');
|
|
114
|
+
bar.classList.add(\`--\${getColorClass(current)}\`);
|
|
115
|
+
bar.style.width = \`\${current}%\`;
|
|
116
|
+
bar.textContent = \`\${current.toFixed(0)}%\`;
|
|
128
117
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}
|
|
118
|
+
barHolder.appendChild(bar);
|
|
119
|
+
holder.appendChild(nameHolder);
|
|
120
|
+
holder.appendChild(barHolder);
|
|
133
121
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
122
|
+
return holder;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const isDefaultLocale = DataStore.isDefaultLocale(locale),
|
|
126
|
+
totalI18nCount = isDefaultLocale
|
|
127
|
+
? 100
|
|
128
|
+
: data.localizedStrings +
|
|
129
|
+
data.untranslatedStrings +
|
|
130
|
+
data.partialStrings +
|
|
131
|
+
data.notLocalizedStrings,
|
|
132
|
+
i18nStrings = isDefaultLocale
|
|
133
|
+
? 100
|
|
134
|
+
: data.localizedStrings +
|
|
135
|
+
data.untranslatedStrings +
|
|
136
|
+
data.partialStrings,
|
|
137
|
+
totalLocCount = isDefaultLocale
|
|
138
|
+
? 100
|
|
139
|
+
: totalI18nCount -
|
|
140
|
+
data.untranslatedStrings -
|
|
141
|
+
data.notLocalizedStrings,
|
|
142
|
+
totalNumberCount = isDefaultLocale
|
|
143
|
+
? 100
|
|
144
|
+
: data.localizedNumber +
|
|
145
|
+
data.localizedCurrency +
|
|
146
|
+
data.localizedPercentage +
|
|
147
|
+
data.notLocalizedPercentage +
|
|
148
|
+
data.notLocalizedCurrency +
|
|
149
|
+
data.notLocalizedNumber,
|
|
150
|
+
i18nNumbers = isDefaultLocale
|
|
151
|
+
? 100
|
|
152
|
+
: totalNumberCount -
|
|
153
|
+
data.notLocalizedPercentage -
|
|
154
|
+
data.notLocalizedCurrency -
|
|
155
|
+
data.notLocalizedNumber,
|
|
156
|
+
totalI18nDateTimeCount = isDefaultLocale
|
|
157
|
+
? 100
|
|
158
|
+
: data.localizedDate +
|
|
159
|
+
data.localizedDateTime +
|
|
160
|
+
data.localizedTime +
|
|
161
|
+
data.notLocalizedDate +
|
|
162
|
+
data.notLocalizedDateTime +
|
|
163
|
+
data.notLocalizedTime,
|
|
164
|
+
i18nDateTime = isDefaultLocale
|
|
165
|
+
? 100
|
|
166
|
+
: totalI18nDateTimeCount -
|
|
167
|
+
data.notLocalizedDate -
|
|
168
|
+
data.notLocalizedDateTime -
|
|
169
|
+
data.notLocalizedTime;
|
|
170
|
+
|
|
171
|
+
holder.appendChild(
|
|
172
|
+
generateBarEl('String I18n level', totalI18nCount, i18nStrings)
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
holder.appendChild(
|
|
176
|
+
generateBarEl('String L10n level', totalI18nCount, totalLocCount)
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
holder.appendChild(
|
|
180
|
+
generateBarEl('Number I18n level', totalNumberCount, i18nNumbers)
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
holder.appendChild(
|
|
184
|
+
generateBarEl(
|
|
185
|
+
'DateTime I18n level',
|
|
186
|
+
totalI18nDateTimeCount,
|
|
187
|
+
i18nDateTime
|
|
188
|
+
)
|
|
189
|
+
);
|
|
190
|
+
return holder;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function generateCardContents(locale, data) {
|
|
194
|
+
const cardContent = document.createElement('div');
|
|
195
|
+
cardContent.classList.add('card-content');
|
|
196
|
+
|
|
197
|
+
cardContent.appendChild(createStatusBarSection(locale, data));
|
|
198
|
+
cardContent.appendChild(createStatSection(locale, data));
|
|
199
|
+
return cardContent;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function createCardEl(locale, data) {
|
|
203
|
+
const card = document.createElement('div');
|
|
204
|
+
const title = document.createElement('div');
|
|
205
|
+
card.classList.add('card');
|
|
206
|
+
card.dataset.locale = locale;
|
|
207
|
+
title.classList.add('title');
|
|
208
|
+
title.textContent = \`\${locale} details\`;
|
|
209
|
+
|
|
210
|
+
// fire menu selection event on clicking the card
|
|
211
|
+
card.addEventListener('click', () => {
|
|
212
|
+
const previousSelectedSubMenu = document.querySelector(
|
|
213
|
+
'.sub-menu-item.selected'
|
|
214
|
+
);
|
|
215
|
+
if (previousSelectedSubMenu) {
|
|
216
|
+
window.previousSelectedLocale =
|
|
217
|
+
previousSelectedSubMenu.dataset.locale;
|
|
218
|
+
}
|
|
151
219
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
220
|
+
document
|
|
221
|
+
.querySelector(\`.sub-menu-item[data-locale="\${locale}"]\`)
|
|
222
|
+
.click();
|
|
223
|
+
});
|
|
156
224
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
225
|
+
card.appendChild(title);
|
|
226
|
+
card.appendChild(generateCardContents(locale, data));
|
|
227
|
+
return card;
|
|
228
|
+
}
|
|
161
229
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
en_US: {
|
|
166
|
-
total: 1000,
|
|
167
|
-
localized: 700,
|
|
168
|
-
notLocalized: 100,
|
|
169
|
-
untranslated: 50,
|
|
170
|
-
encodingIssue: 20,
|
|
171
|
-
dnt: 15,
|
|
172
|
-
ignored: 10,
|
|
173
|
-
autoIgnored: 5,
|
|
174
|
-
currency: 20,
|
|
175
|
-
number: 20,
|
|
176
|
-
percentage: 15,
|
|
177
|
-
dateTime: 15,
|
|
178
|
-
date: 15,
|
|
179
|
-
time: 15,
|
|
180
|
-
notLocalizedcurrency: 20,
|
|
181
|
-
notLocalizednumber: 20,
|
|
182
|
-
notLocalizedpercentage: 15,
|
|
183
|
-
notLocalizeddateTime: 15,
|
|
184
|
-
notLocalizeddate: 15,
|
|
185
|
-
notLocalizedtime: 15,
|
|
186
|
-
},
|
|
187
|
-
fr_FR: {
|
|
188
|
-
total: 1000,
|
|
189
|
-
localized: 700,
|
|
190
|
-
notLocalized: 100,
|
|
191
|
-
untranslated: 50,
|
|
192
|
-
encodingIssue: 20,
|
|
193
|
-
dnt: 15,
|
|
194
|
-
ignored: 10,
|
|
195
|
-
autoIgnored: 5,
|
|
196
|
-
currency: 20,
|
|
197
|
-
number: 20,
|
|
198
|
-
percentage: 15,
|
|
199
|
-
dateTime: 15,
|
|
200
|
-
date: 15,
|
|
201
|
-
time: 15,
|
|
202
|
-
notLocalizedCurrency: 20,
|
|
203
|
-
notLocalizedNumber: 20,
|
|
204
|
-
notLocalizedPercentage: 15,
|
|
205
|
-
notLocalizedDateTime: 15,
|
|
206
|
-
notLocalizedDate: 15,
|
|
207
|
-
notLocalizedTime: 15,
|
|
208
|
-
},
|
|
209
|
-
};
|
|
230
|
+
function renderCards() {
|
|
231
|
+
// read from global variable appData;
|
|
232
|
+
const localeInfo = DataStore.getLocalesData();
|
|
210
233
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
234
|
+
if (Object.keys(localeInfo).length) {
|
|
235
|
+
const cardHolder = document.querySelector(
|
|
236
|
+
'#insights .cards .holder'
|
|
237
|
+
);
|
|
238
|
+
for (const locale in localeInfo) {
|
|
239
|
+
const cardEl = createCardEl(
|
|
240
|
+
locale,
|
|
241
|
+
DataStore.getStatByLocale(locale)
|
|
214
242
|
);
|
|
215
|
-
|
|
216
|
-
const cardEl = createCardEl(locale, localeInfo[locale]);
|
|
217
|
-
cardHolder.appendChild(cardEl);
|
|
218
|
-
}
|
|
243
|
+
cardHolder.appendChild(cardEl);
|
|
219
244
|
}
|
|
220
245
|
}
|
|
221
|
-
}
|
|
222
|
-
})
|
|
223
|
-
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
})();`;
|
|
224
249
|
exports.default = _default;
|
|
@@ -4,22 +4,22 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var _default =
|
|
7
|
+
var _default = metaData => `(() => {
|
|
8
8
|
// for sidebar menu
|
|
9
9
|
const loadContent = (section, highlightMenu = false) => {
|
|
10
10
|
if (highlightMenu) {
|
|
11
11
|
document
|
|
12
12
|
.querySelector('li[data-page="overview"]')
|
|
13
|
-
?.classList.add(
|
|
13
|
+
?.classList.add('selected');
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
const contents = document.querySelectorAll(
|
|
16
|
+
const contents = document.querySelectorAll('.content');
|
|
17
17
|
contents.forEach((content) => {
|
|
18
18
|
content.id !== section
|
|
19
|
-
? content.classList.remove(
|
|
20
|
-
: content.classList.add(
|
|
19
|
+
? content.classList.remove('active')
|
|
20
|
+
: content.classList.add('active');
|
|
21
21
|
|
|
22
|
-
section ===
|
|
22
|
+
section === 'overview' &&
|
|
23
23
|
window.persistOverviewCharts &&
|
|
24
24
|
window.persistOverviewCharts();
|
|
25
25
|
|
|
@@ -27,92 +27,97 @@ var _default = () => `(() => {
|
|
|
27
27
|
});
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
document.addEventListener(
|
|
30
|
+
document.addEventListener('DOMContentLoaded', function () {
|
|
31
31
|
const createMenuItems = (() => {
|
|
32
|
-
const ul = document.querySelector(
|
|
32
|
+
const ul = document.querySelector('.sidebar .submenu');
|
|
33
33
|
const createListItems = (locale) => {
|
|
34
|
-
const li = document.createElement(
|
|
35
|
-
li.classList.add(
|
|
34
|
+
const li = document.createElement('li');
|
|
35
|
+
li.classList.add('sub-menu-item');
|
|
36
36
|
li.dataset.locale = locale;
|
|
37
37
|
|
|
38
|
-
const a = document.createElement(
|
|
39
|
-
a.href =
|
|
38
|
+
const a = document.createElement('a');
|
|
39
|
+
a.href = '#';
|
|
40
40
|
a.textContent = locale;
|
|
41
41
|
|
|
42
42
|
li.appendChild(a);
|
|
43
43
|
return li;
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
-
for (const locale of
|
|
46
|
+
for (const locale of DataStore.getLocales()) {
|
|
47
47
|
ul.appendChild(createListItems(locale));
|
|
48
48
|
}
|
|
49
49
|
})();
|
|
50
50
|
|
|
51
|
-
const menuItems = document.querySelectorAll(
|
|
52
|
-
submenuItems = document.querySelectorAll(
|
|
51
|
+
const menuItems = document.querySelectorAll('.menu-item'),
|
|
52
|
+
submenuItems = document.querySelectorAll('.sub-menu-item');
|
|
53
53
|
|
|
54
54
|
menuItems.forEach((item) => {
|
|
55
|
-
item.addEventListener(
|
|
55
|
+
item.addEventListener('click', function (event) {
|
|
56
56
|
const selectedMenuItem = document.querySelector(
|
|
57
|
-
|
|
57
|
+
'.menu-item.selected'
|
|
58
58
|
),
|
|
59
|
-
selectedSubmenu = document.querySelector(
|
|
59
|
+
selectedSubmenu = document.querySelector('.submenu.active'),
|
|
60
60
|
page = item.dataset.page;
|
|
61
61
|
|
|
62
62
|
if (selectedMenuItem) {
|
|
63
|
-
selectedMenuItem.classList.remove(
|
|
63
|
+
selectedMenuItem.classList.remove('selected');
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
if (selectedSubmenu) {
|
|
67
|
-
selectedSubmenu.classList.remove(
|
|
67
|
+
selectedSubmenu.classList.remove('active');
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
if (item.classList.contains(
|
|
70
|
+
if (item.classList.contains('has-submenu')) {
|
|
71
71
|
event.preventDefault();
|
|
72
|
-
item.classList.add(
|
|
73
|
-
const submenu = item.querySelector(
|
|
74
|
-
submenu.classList.add(
|
|
72
|
+
item.classList.add('selected');
|
|
73
|
+
const submenu = item.querySelector('.submenu');
|
|
74
|
+
submenu.classList.add('active');
|
|
75
75
|
} else {
|
|
76
|
-
item.classList.add(
|
|
76
|
+
item.classList.add('selected');
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
if (selectedSubmenu) {
|
|
80
80
|
selectedSubmenu
|
|
81
|
-
.querySelectorAll(
|
|
81
|
+
.querySelectorAll('.sub-menu-item')
|
|
82
82
|
.forEach((submenuItem) => {
|
|
83
83
|
submenuItem.textContent !== item.textContent &&
|
|
84
|
-
submenuItem.classList.remove(
|
|
84
|
+
submenuItem.classList.remove('selected');
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
loadContent(page);
|
|
89
89
|
});
|
|
90
90
|
|
|
91
|
-
loadContent(
|
|
91
|
+
loadContent('overview', true);
|
|
92
92
|
});
|
|
93
93
|
|
|
94
94
|
submenuItems.forEach((sItem) => {
|
|
95
|
-
sItem.addEventListener(
|
|
95
|
+
sItem.addEventListener('click', function (event) {
|
|
96
96
|
const selectedSubMenuItem = document.querySelector(
|
|
97
|
-
|
|
97
|
+
'.sub-menu-item.selected'
|
|
98
98
|
);
|
|
99
99
|
event.preventDefault();
|
|
100
100
|
event.stopPropagation();
|
|
101
101
|
|
|
102
102
|
if (selectedSubMenuItem) {
|
|
103
|
-
selectedSubMenuItem.classList.remove(
|
|
103
|
+
selectedSubMenuItem.classList.remove('selected');
|
|
104
104
|
window.previousSelectedLocale =
|
|
105
105
|
selectedSubMenuItem.dataset.locale;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
sItem.classList.add(
|
|
109
|
-
loadContent(
|
|
108
|
+
sItem.classList.add('selected');
|
|
109
|
+
loadContent('locale');
|
|
110
110
|
});
|
|
111
111
|
});
|
|
112
112
|
|
|
113
113
|
// update footer info
|
|
114
|
-
const footer = document.querySelector(
|
|
115
|
-
footer.textContent =
|
|
114
|
+
const footer = document.querySelector('.sidebar .footer');
|
|
115
|
+
footer.textContent = \`\${new Date().getFullYear()} @ Zeesoft. All rights reserved.\`;
|
|
116
|
+
|
|
117
|
+
// update project info
|
|
118
|
+
document.querySelector(
|
|
119
|
+
'header .logo'
|
|
120
|
+
).innerHTML = \`zQA Report | \${DataStore.getAppName()}<span class="project-info"><span class="time">Report generated at: \${DataStore.getTimestamp()}</span></span>\`;
|
|
116
121
|
});
|
|
117
122
|
})();`;
|
|
118
123
|
exports.default = _default;
|