gbu-accessibility-package 3.0.0 → 3.1.3
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/CHANGELOG.md +139 -0
- package/README-vi.md +720 -0
- package/README.md +394 -119
- package/cli.js +6 -6
- package/demo/no-backup-test.html +12 -0
- package/demo/no-backup-test.html.backup +12 -0
- package/lib/fixer.js +1 -1
- package/package.json +19 -5
package/README-vi.md
ADDED
|
@@ -0,0 +1,720 @@
|
|
|
1
|
+
# GBU Accessibility Package
|
|
2
|
+
|
|
3
|
+
🚀 **Công cụ tự động sửa lỗi accessibility cho file HTML** - Cải thiện khả năng tiếp cận thông minh, nhận biết ngữ cảnh mà không cần cấu hình.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/gbu-accessibility-package)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
[](https://nodejs.org/)
|
|
8
|
+
|
|
9
|
+
## ✨ Tính năng
|
|
10
|
+
|
|
11
|
+
- 🖼️ **Tạo Alt Text thông minh** - Tự động tạo alt attributes dựa trên ngữ cảnh
|
|
12
|
+
- 🏷️ **Hỗ trợ Aria Label** - Tự động thêm aria-label khớp với alt text
|
|
13
|
+
- 🌐 **HTML Lang Attributes** - Tự động sửa thuộc tính ngôn ngữ
|
|
14
|
+
- 🎭 **Role Attributes** - Quản lý role attributes tuân thủ WCAG
|
|
15
|
+
- 📋 **Form Labels** - Sửa lỗi label thiếu cho form inputs
|
|
16
|
+
- 🔘 **Button Names** - Sửa button rỗng và input button thiếu tên
|
|
17
|
+
- 🔗 **Link Names** - Sửa link rỗng và text link chung chung
|
|
18
|
+
- 🏛️ **Landmarks** - Thêm main và navigation landmarks
|
|
19
|
+
- 📑 **Phân tích Headings** - Phân tích cấu trúc heading với đề xuất
|
|
20
|
+
- 🧹 **Dọn dẹp trùng lặp** - Xóa role attributes trùng lặp
|
|
21
|
+
- 📁 **Xử lý hàng loạt** - Xử lý toàn bộ thư mục đệ quy
|
|
22
|
+
- 💾 **Backup tùy chọn** - Tạo file backup khi cần với flag --backup
|
|
23
|
+
- 🔍 **Chế độ xem trước** - Xem trước thay đổi trước khi áp dụng
|
|
24
|
+
- 📊 **Báo cáo chi tiết** - Tóm tắt sửa chữa toàn diện
|
|
25
|
+
|
|
26
|
+
## 🚀 Bắt đầu nhanh
|
|
27
|
+
|
|
28
|
+
### Cài đặt
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Cài đặt toàn cục (khuyến nghị)
|
|
32
|
+
npm install -g gbu-accessibility-package
|
|
33
|
+
|
|
34
|
+
# Cài đặt cục bộ
|
|
35
|
+
npm install gbu-accessibility-package
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Sử dụng cơ bản
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Sửa toàn diện (mặc định)
|
|
42
|
+
gbu-a11y
|
|
43
|
+
|
|
44
|
+
# Xem trước thay đổi
|
|
45
|
+
gbu-a11y --dry-run
|
|
46
|
+
|
|
47
|
+
# Sửa thư mục cụ thể
|
|
48
|
+
gbu-a11y ./src
|
|
49
|
+
|
|
50
|
+
# Sửa file cụ thể
|
|
51
|
+
gbu-a11y index.html
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 📖 Hướng dẫn chi tiết
|
|
55
|
+
|
|
56
|
+
### Tùy chọn dòng lệnh
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
gbu-a11y [options] [directory/file]
|
|
60
|
+
|
|
61
|
+
Tùy chọn:
|
|
62
|
+
-d, --directory <path> Thư mục đích (mặc định: thư mục hiện tại)
|
|
63
|
+
-l, --language <lang> Ngôn ngữ cho thuộc tính lang (mặc định: ja)
|
|
64
|
+
--backup Tạo file backup
|
|
65
|
+
--no-backup Không tạo file backup (mặc định)
|
|
66
|
+
--dry-run Xem trước thay đổi mà không áp dụng
|
|
67
|
+
--comprehensive, --all Chạy sửa toàn diện (giống mặc định)
|
|
68
|
+
--cleanup-only Chỉ dọn dẹp role attributes trùng lặp
|
|
69
|
+
--alt-only Sửa alt attributes + dọn dẹp
|
|
70
|
+
--lang-only Sửa HTML lang attributes + dọn dẹp
|
|
71
|
+
--role-only Sửa role attributes + dọn dẹp
|
|
72
|
+
--forms-only Sửa form labels + dọn dẹp
|
|
73
|
+
--buttons-only Sửa button names + dọn dẹp
|
|
74
|
+
--links-only Sửa link names + dọn dẹp
|
|
75
|
+
--landmarks-only Sửa landmarks + dọn dẹp
|
|
76
|
+
--headings-only Phân tích cấu trúc heading (không tự động sửa)
|
|
77
|
+
-h, --help Hiển thị thông báo trợ giúp
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Ví dụ
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Sửa toàn diện (mặc định - bao gồm dọn dẹp)
|
|
84
|
+
gbu-a11y
|
|
85
|
+
|
|
86
|
+
# Xem trước tất cả thay đổi
|
|
87
|
+
gbu-a11y --dry-run
|
|
88
|
+
|
|
89
|
+
# Sửa với ngôn ngữ tiếng Anh
|
|
90
|
+
gbu-a11y -l en ./public
|
|
91
|
+
|
|
92
|
+
# Các loại sửa riêng lẻ (tất cả đều bao gồm dọn dẹp)
|
|
93
|
+
gbu-a11y --alt-only # Sửa alt attributes + dọn dẹp
|
|
94
|
+
gbu-a11y --forms-only # Sửa form labels + dọn dẹp
|
|
95
|
+
gbu-a11y --buttons-only # Sửa button names + dọn dẹp
|
|
96
|
+
gbu-a11y --links-only # Sửa link names + dọn dẹp
|
|
97
|
+
gbu-a11y --landmarks-only # Sửa landmarks + dọn dẹp
|
|
98
|
+
gbu-a11y --headings-only # Phân tích heading structure
|
|
99
|
+
gbu-a11y --cleanup-only # Chỉ dọn dẹp trùng lặp
|
|
100
|
+
|
|
101
|
+
# Kết hợp với các tùy chọn khác
|
|
102
|
+
gbu-a11y --alt-only --dry-run ./src # Xem trước sửa alt
|
|
103
|
+
gbu-a11y --forms-only -l en ./public # Sửa form với tiếng Anh
|
|
104
|
+
|
|
105
|
+
# Tùy chọn backup
|
|
106
|
+
gbu-a11y --backup ./dist # Bật backup để an toàn
|
|
107
|
+
gbu-a11y --no-backup ./dist # Tắt backup (mặc định - xử lý nhanh hơn)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 🔧 Sử dụng lập trình
|
|
111
|
+
|
|
112
|
+
```javascript
|
|
113
|
+
const AccessibilityFixer = require("gbu-accessibility-package");
|
|
114
|
+
|
|
115
|
+
const fixer = new AccessibilityFixer({
|
|
116
|
+
language: "vi",
|
|
117
|
+
backupFiles: true,
|
|
118
|
+
dryRun: false,
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// Sửa tất cả vấn đề accessibility
|
|
122
|
+
async function fixAccessibility() {
|
|
123
|
+
try {
|
|
124
|
+
const results = await fixer.fixAllAccessibilityIssues("./src");
|
|
125
|
+
console.log("File đã sửa:", results);
|
|
126
|
+
} catch (error) {
|
|
127
|
+
console.error("Lỗi:", error);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
fixAccessibility();
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## 🎯 Chế độ sửa
|
|
135
|
+
|
|
136
|
+
### Chế độ toàn diện (Mặc định)
|
|
137
|
+
|
|
138
|
+
Chạy tất cả các bước sửa bao gồm dọn dẹp:
|
|
139
|
+
|
|
140
|
+
1. **HTML lang attributes** - Thêm thuộc tính ngôn ngữ
|
|
141
|
+
2. **Alt attributes** - Tạo alt text thông minh + aria-label
|
|
142
|
+
3. **Role attributes** - Thêm role phù hợp + xử lý picture/img
|
|
143
|
+
4. **Form labels** - Sửa input thiếu label
|
|
144
|
+
5. **Button names** - Sửa button rỗng
|
|
145
|
+
6. **Link names** - Sửa link rỗng và generic text
|
|
146
|
+
7. **Landmarks** - Thêm main và navigation landmarks
|
|
147
|
+
8. **Heading analysis** - Phân tích cấu trúc (chỉ đề xuất)
|
|
148
|
+
9. **Cleanup** - Dọn dẹp role attributes trùng lặp
|
|
149
|
+
|
|
150
|
+
### Chế độ riêng lẻ
|
|
151
|
+
|
|
152
|
+
Mỗi chế độ riêng lẻ đều bao gồm bước dọn dẹp:
|
|
153
|
+
|
|
154
|
+
- `--alt-only` - Chỉ sửa alt attributes + dọn dẹp
|
|
155
|
+
- `--forms-only` - Chỉ sửa form labels + dọn dẹp
|
|
156
|
+
- `--buttons-only` - Chỉ sửa button names + dọn dẹp
|
|
157
|
+
- `--links-only` - Chỉ sửa link names + dọn dẹp
|
|
158
|
+
- `--landmarks-only` - Chỉ sửa landmarks + dọn dẹp
|
|
159
|
+
- `--headings-only` - Chỉ phân tích headings (không dọn dẹp)
|
|
160
|
+
|
|
161
|
+
## 🔧 Những gì được sửa
|
|
162
|
+
|
|
163
|
+
### 1. Alt Attributes
|
|
164
|
+
|
|
165
|
+
- **Alt attributes thiếu** → Thêm alt text theo ngữ cảnh
|
|
166
|
+
- **Alt attributes rỗng** → Tạo mô tả có ý nghĩa
|
|
167
|
+
- **Tạo theo ngữ cảnh** → Sử dụng text xung quanh, tiêu đề, chú thích
|
|
168
|
+
|
|
169
|
+
```html
|
|
170
|
+
<!-- Trước -->
|
|
171
|
+
<img src="logo.png" />
|
|
172
|
+
<img src="chart.jpg" alt="" />
|
|
173
|
+
|
|
174
|
+
<!-- Sau -->
|
|
175
|
+
<img src="logo.png" alt="ロゴ" role="img" aria-label="ロゴ" />
|
|
176
|
+
<img src="chart.jpg" alt="グラフ" role="img" aria-label="グラフ" />
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### 2. HTML Lang Attributes
|
|
180
|
+
|
|
181
|
+
- **Lang attributes thiếu** → Thêm ngôn ngữ được chỉ định
|
|
182
|
+
- **Lang attributes rỗng** → Đặt mã ngôn ngữ phù hợp
|
|
183
|
+
|
|
184
|
+
```html
|
|
185
|
+
<!-- Trước -->
|
|
186
|
+
<html>
|
|
187
|
+
<html lang="">
|
|
188
|
+
<!-- Sau -->
|
|
189
|
+
<html lang="ja">
|
|
190
|
+
<html lang="ja"></html>
|
|
191
|
+
</html>
|
|
192
|
+
</html>
|
|
193
|
+
</html>
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 3. Role Attributes & Aria Labels
|
|
197
|
+
|
|
198
|
+
- **Images** → `role="img"` + `aria-label` (khớp với alt text)
|
|
199
|
+
- **Picture elements** → Di chuyển `role="img"` từ `<picture>` vào `<img>` bên trong
|
|
200
|
+
- **Links** → `role="link"`
|
|
201
|
+
- **Clickable elements** → `role="button"`
|
|
202
|
+
- **Navigation lists** → `role="menubar"`
|
|
203
|
+
- **Menu items** → `role="menuitem"`
|
|
204
|
+
|
|
205
|
+
```html
|
|
206
|
+
<!-- Trước -->
|
|
207
|
+
<img src="icon.png" alt="Icon" />
|
|
208
|
+
<picture role="img">
|
|
209
|
+
<img src="photo.jpg" alt="Photo" />
|
|
210
|
+
</picture>
|
|
211
|
+
<a href="/home">Home</a>
|
|
212
|
+
<div class="btn-click">Click me</div>
|
|
213
|
+
|
|
214
|
+
<!-- Sau -->
|
|
215
|
+
<img src="icon.png" alt="Icon" role="img" aria-label="Icon" />
|
|
216
|
+
<picture>
|
|
217
|
+
<img src="photo.jpg" alt="Photo" role="img" aria-label="Photo" />
|
|
218
|
+
</picture>
|
|
219
|
+
<a href="/home" role="link">Home</a>
|
|
220
|
+
<div class="btn-click" role="button">Click me</div>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### 4. Form Labels
|
|
224
|
+
|
|
225
|
+
- **Input thiếu label** → Thêm `aria-label` phù hợp
|
|
226
|
+
- **Hỗ trợ nhiều loại input** → text, email, password, tel, etc.
|
|
227
|
+
|
|
228
|
+
```html
|
|
229
|
+
<!-- Trước -->
|
|
230
|
+
<input type="text" placeholder="Name" />
|
|
231
|
+
<input type="email" />
|
|
232
|
+
<input type="password" />
|
|
233
|
+
|
|
234
|
+
<!-- Sau -->
|
|
235
|
+
<input type="text" placeholder="Name" aria-label="テキスト入力" />
|
|
236
|
+
<input type="email" aria-label="メールアドレス" />
|
|
237
|
+
<input type="password" aria-label="パスワード" />
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### 5. Button Names
|
|
241
|
+
|
|
242
|
+
- **Button rỗng** → Thêm text và aria-label
|
|
243
|
+
- **Input button thiếu value** → Thêm value phù hợp
|
|
244
|
+
|
|
245
|
+
```html
|
|
246
|
+
<!-- Trước -->
|
|
247
|
+
<button></button>
|
|
248
|
+
<input type="submit" />
|
|
249
|
+
<input type="button" />
|
|
250
|
+
|
|
251
|
+
<!-- Sau -->
|
|
252
|
+
<button aria-label="ボタン">ボタン</button>
|
|
253
|
+
<input type="submit" value="送信" />
|
|
254
|
+
<input type="button" value="ボタン" />
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### 6. Link Names
|
|
258
|
+
|
|
259
|
+
- **Link rỗng** → Thêm aria-label
|
|
260
|
+
- **Generic text** → Phát hiện "Click here", "Read more"
|
|
261
|
+
- **Image links** → Xử lý link chỉ chứa hình ảnh
|
|
262
|
+
|
|
263
|
+
```html
|
|
264
|
+
<!-- Trước -->
|
|
265
|
+
<a href="/home"></a>
|
|
266
|
+
<a href="/more">Click here</a>
|
|
267
|
+
<a href="/image"><img src="icon.png" /></a>
|
|
268
|
+
|
|
269
|
+
<!-- Sau -->
|
|
270
|
+
<a href="/home" aria-label="リンク">リンク</a>
|
|
271
|
+
<a href="/more">Click here</a>
|
|
272
|
+
<!-- Được phát hiện nhưng không tự động sửa -->
|
|
273
|
+
<a href="/image" aria-label="画像リンク"><img src="icon.png" /></a>
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### 7. Landmarks
|
|
277
|
+
|
|
278
|
+
- **Main landmark thiếu** → Thêm `role="main"`
|
|
279
|
+
- **Navigation landmark thiếu** → Thêm `role="navigation"`
|
|
280
|
+
|
|
281
|
+
```html
|
|
282
|
+
<!-- Trước -->
|
|
283
|
+
<div class="content">
|
|
284
|
+
<p>Main content</p>
|
|
285
|
+
</div>
|
|
286
|
+
<ul class="navigation">
|
|
287
|
+
<li><a href="/home">Home</a></li>
|
|
288
|
+
</ul>
|
|
289
|
+
|
|
290
|
+
<!-- Sau -->
|
|
291
|
+
<div class="content" role="main">
|
|
292
|
+
<p>Main content</p>
|
|
293
|
+
</div>
|
|
294
|
+
<ul class="navigation" role="navigation">
|
|
295
|
+
<li><a href="/home">Home</a></li>
|
|
296
|
+
</ul>
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### 8. Heading Analysis
|
|
300
|
+
|
|
301
|
+
- **Multiple h1** → Phát hiện và đề xuất
|
|
302
|
+
- **Heading level skip** → Phát hiện nhảy cấp (h1 → h3)
|
|
303
|
+
- **Empty headings** → Phát hiện heading rỗng
|
|
304
|
+
- **Chỉ phân tích, không tự động sửa** → An toàn cho cấu trúc nội dung
|
|
305
|
+
|
|
306
|
+
### 9. Aria Label Enhancement
|
|
307
|
+
|
|
308
|
+
- **Tự động aria-label** → Thêm `aria-label` khớp với `alt` text cho images
|
|
309
|
+
- **Bảo tồn hiện có** → Không ghi đè `aria-label` đã có
|
|
310
|
+
- **Phát hiện thông minh** → Chỉ thêm khi `alt` text tồn tại và không rỗng
|
|
311
|
+
|
|
312
|
+
### 10. Dọn dẹp trùng lặp
|
|
313
|
+
|
|
314
|
+
- **Xóa role attributes trùng lặp** → Giữ lại occurrence đầu tiên
|
|
315
|
+
- **Xử lý mixed quotes** → role="button" role='button'
|
|
316
|
+
|
|
317
|
+
```html
|
|
318
|
+
<!-- Trước -->
|
|
319
|
+
<img src="test.jpg" role="img" role="img" alt="Test" />
|
|
320
|
+
|
|
321
|
+
<!-- Sau -->
|
|
322
|
+
<img src="test.jpg" role="img" alt="Test" />
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
## 🌟 Tạo Alt Text thông minh
|
|
326
|
+
|
|
327
|
+
Package sử dụng phân tích ngữ cảnh thông minh để tạo alt text có ý nghĩa:
|
|
328
|
+
|
|
329
|
+
### Nguồn ngữ cảnh
|
|
330
|
+
|
|
331
|
+
1. **Title attributes**
|
|
332
|
+
2. **Aria-label attributes**
|
|
333
|
+
3. **Definition terms (dt elements)**
|
|
334
|
+
4. **Parent link text**
|
|
335
|
+
5. **Nearby headings**
|
|
336
|
+
6. **Figure captions**
|
|
337
|
+
7. **Surrounding text content**
|
|
338
|
+
|
|
339
|
+
### Mẫu dự phòng
|
|
340
|
+
|
|
341
|
+
- `logo.png` → "ロゴ" (Logo)
|
|
342
|
+
- `icon.svg` → "アイコン" (Icon)
|
|
343
|
+
- `banner.jpg` → "バナー" (Banner)
|
|
344
|
+
- `chart.png` → "グラフ" (Chart)
|
|
345
|
+
- Hình ảnh chung → "画像" (Image)
|
|
346
|
+
|
|
347
|
+
## 📊 Ví dụ đầu ra
|
|
348
|
+
|
|
349
|
+
### Chế độ toàn diện
|
|
350
|
+
|
|
351
|
+
```
|
|
352
|
+
🚀 Starting Accessibility Fixer...
|
|
353
|
+
🎯 Running comprehensive accessibility fixes...
|
|
354
|
+
|
|
355
|
+
📝 Step 1: HTML lang attributes...
|
|
356
|
+
✅ Fixed lang attributes in 5 files
|
|
357
|
+
|
|
358
|
+
🖼️ Step 2: Alt attributes...
|
|
359
|
+
✅ Fixed alt attributes in 12 files (34 issues)
|
|
360
|
+
|
|
361
|
+
🎭 Step 3: Role attributes...
|
|
362
|
+
✅ Fixed role attributes in 8 files (67 issues)
|
|
363
|
+
|
|
364
|
+
📋 Step 4: Form labels...
|
|
365
|
+
✅ Fixed form labels in 6 files (15 issues)
|
|
366
|
+
|
|
367
|
+
🔘 Step 5: Button names...
|
|
368
|
+
✅ Fixed button names in 4 files (8 issues)
|
|
369
|
+
|
|
370
|
+
🔗 Step 6: Link names...
|
|
371
|
+
✅ Fixed link names in 7 files (12 issues)
|
|
372
|
+
|
|
373
|
+
🏛️ Step 7: Landmarks...
|
|
374
|
+
✅ Fixed landmarks in 3 files (5 issues)
|
|
375
|
+
|
|
376
|
+
📑 Step 8: Heading analysis...
|
|
377
|
+
✅ Analyzed headings in 10 files (18 suggestions)
|
|
378
|
+
|
|
379
|
+
🧹 Step 9: Cleanup duplicate roles...
|
|
380
|
+
✅ Cleaned duplicate roles in 2 files
|
|
381
|
+
|
|
382
|
+
🎉 All accessibility fixes completed!
|
|
383
|
+
📊 Final Summary:
|
|
384
|
+
Total files scanned: 25
|
|
385
|
+
Files fixed: 20
|
|
386
|
+
Total issues resolved: 164
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### Chế độ riêng lẻ
|
|
390
|
+
|
|
391
|
+
```
|
|
392
|
+
🚀 Starting Accessibility Fixer...
|
|
393
|
+
📋 Running form label fixes + cleanup...
|
|
394
|
+
|
|
395
|
+
📁 contact.html:
|
|
396
|
+
📋 Missing label/id: Input 1 (type: text) needs an id and label, or aria-label
|
|
397
|
+
📋 Missing label: Input 2 (type: email) needs a label or aria-label
|
|
398
|
+
📋 Added aria-label="テキスト入力" to text input
|
|
399
|
+
📋 Added aria-label="メールアドレス" to email input
|
|
400
|
+
|
|
401
|
+
✅ Fixed form labels in 1 files (2 issues)
|
|
402
|
+
|
|
403
|
+
🧹 Running cleanup for duplicate role attributes...
|
|
404
|
+
✅ Cleaned duplicate roles in 0 files
|
|
405
|
+
|
|
406
|
+
🎉 Form label fixes + cleanup completed successfully!
|
|
407
|
+
📁 Backup files created with .backup extension
|
|
408
|
+
💡 Use --no-backup to disable backups in future runs
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
## 🔒 Tính năng an toàn
|
|
412
|
+
|
|
413
|
+
### Tùy chọn Backup
|
|
414
|
+
|
|
415
|
+
- **Hành vi mặc định**: Không tạo backup files để xử lý nhanh hơn
|
|
416
|
+
- **Bật backup**: Sử dụng `--backup` để an toàn khi cần
|
|
417
|
+
- **Tắt rõ ràng**: Sử dụng `--no-backup` để rõ ràng (giống mặc định)
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
# Chế độ nhanh (mặc định) - không backup
|
|
421
|
+
gbu-a11y --comprehensive
|
|
422
|
+
|
|
423
|
+
# Chế độ an toàn - tạo backup
|
|
424
|
+
gbu-a11y --backup --comprehensive
|
|
425
|
+
|
|
426
|
+
# Chế độ không backup rõ ràng (giống mặc định)
|
|
427
|
+
gbu-a11y --no-backup --comprehensive
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### Các tính năng an toàn khác
|
|
431
|
+
|
|
432
|
+
- **Chế độ xem trước** để xem trước an toàn với `--dry-run`
|
|
433
|
+
- **Không phá hoại** - chỉ thêm attributes thiếu
|
|
434
|
+
- **Ngăn chặn trùng lặp** - không thêm attributes đã có
|
|
435
|
+
- **Xử lý lỗi** - tiếp tục xử lý khi có lỗi file riêng lẻ
|
|
436
|
+
|
|
437
|
+
## 🔧 Quản lý Package
|
|
438
|
+
|
|
439
|
+
### Gỡ cài đặt và Cài đặt lại
|
|
440
|
+
|
|
441
|
+
Nếu bạn gặp vấn đề hoặc muốn cập nhật lên phiên bản mới nhất:
|
|
442
|
+
|
|
443
|
+
```bash
|
|
444
|
+
# Gỡ cài đặt package global
|
|
445
|
+
npm uninstall -g gbu-accessibility-package
|
|
446
|
+
|
|
447
|
+
# Xóa npm cache
|
|
448
|
+
npm cache clean --force
|
|
449
|
+
|
|
450
|
+
# Cài đặt lại phiên bản mới nhất
|
|
451
|
+
npm install -g gbu-accessibility-package@latest
|
|
452
|
+
|
|
453
|
+
# Kiểm tra cài đặt
|
|
454
|
+
gbu-a11y --version
|
|
455
|
+
gbu-a11y --help
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
### Quản lý dự án cục bộ
|
|
459
|
+
|
|
460
|
+
```bash
|
|
461
|
+
# Xóa khỏi dự án cục bộ
|
|
462
|
+
npm uninstall gbu-accessibility-package
|
|
463
|
+
|
|
464
|
+
# Xóa package-lock và node_modules
|
|
465
|
+
rm -rf node_modules package-lock.json
|
|
466
|
+
|
|
467
|
+
# Cài đặt lại dependencies
|
|
468
|
+
npm install
|
|
469
|
+
|
|
470
|
+
# Thêm phiên bản mới nhất
|
|
471
|
+
npm install gbu-accessibility-package@latest
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### Xóa file Backup
|
|
475
|
+
|
|
476
|
+
```bash
|
|
477
|
+
# Xóa tất cả file backup trong thư mục hiện tại
|
|
478
|
+
find . -name "*.backup" -type f -delete
|
|
479
|
+
|
|
480
|
+
# Xóa file backup trong thư mục cụ thể
|
|
481
|
+
find ./src -name "*.backup" -type f -delete
|
|
482
|
+
|
|
483
|
+
# Sử dụng npm script (nếu đã cấu hình)
|
|
484
|
+
npm run cleanup-backups
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
### Khắc phục sự cố cài đặt
|
|
488
|
+
|
|
489
|
+
```bash
|
|
490
|
+
# Kiểm tra cấu hình npm
|
|
491
|
+
npm config list
|
|
492
|
+
|
|
493
|
+
# Reset npm registry (nếu cần)
|
|
494
|
+
npm config set registry https://registry.npmjs.org/
|
|
495
|
+
|
|
496
|
+
# Kiểm tra global packages
|
|
497
|
+
npm list -g --depth=0
|
|
498
|
+
|
|
499
|
+
# Sửa quyền (macOS/Linux)
|
|
500
|
+
sudo chown -R $(whoami) ~/.npm
|
|
501
|
+
sudo chown -R $(whoami) /usr/local/lib/node_modules
|
|
502
|
+
|
|
503
|
+
# Thay thế: Sử dụng npx mà không cài global
|
|
504
|
+
npx gbu-accessibility-package --help
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
### Quản lý phiên bản
|
|
508
|
+
|
|
509
|
+
```bash
|
|
510
|
+
# Kiểm tra phiên bản hiện tại
|
|
511
|
+
gbu-a11y --version
|
|
512
|
+
|
|
513
|
+
# Kiểm tra các phiên bản có sẵn
|
|
514
|
+
npm view gbu-accessibility-package versions --json
|
|
515
|
+
|
|
516
|
+
# Cài đặt phiên bản cụ thể
|
|
517
|
+
npm install -g gbu-accessibility-package@2.0.0
|
|
518
|
+
|
|
519
|
+
# Cập nhật lên mới nhất
|
|
520
|
+
npm update -g gbu-accessibility-package
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
## 🛠️ Cấu hình
|
|
524
|
+
|
|
525
|
+
### Package.json Scripts
|
|
526
|
+
|
|
527
|
+
```json
|
|
528
|
+
{
|
|
529
|
+
"scripts": {
|
|
530
|
+
"a11y:fix": "gbu-a11y",
|
|
531
|
+
"a11y:check": "gbu-a11y --dry-run",
|
|
532
|
+
"a11y:comprehensive": "gbu-a11y --comprehensive",
|
|
533
|
+
"a11y:forms": "gbu-a11y --forms-only",
|
|
534
|
+
"a11y:buttons": "gbu-a11y --buttons-only",
|
|
535
|
+
"a11y:links": "gbu-a11y --links-only",
|
|
536
|
+
"a11y:landmarks": "gbu-a11y --landmarks-only",
|
|
537
|
+
"a11y:headings": "gbu-a11y --headings-only",
|
|
538
|
+
"a11y:cleanup": "gbu-a11y --cleanup-only",
|
|
539
|
+
"cleanup-backups": "find . -name '*.backup' -type f -delete"
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### Tích hợp CI/CD
|
|
545
|
+
|
|
546
|
+
```yaml
|
|
547
|
+
# Ví dụ GitHub Actions
|
|
548
|
+
- name: Check Accessibility
|
|
549
|
+
run: npx gbu-accessibility-package --dry-run
|
|
550
|
+
|
|
551
|
+
- name: Fix Accessibility Issues
|
|
552
|
+
run: npx gbu-accessibility-package --comprehensive
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
## 🤝 Đóng góp
|
|
556
|
+
|
|
557
|
+
1. Fork repository
|
|
558
|
+
2. Tạo feature branch (`git checkout -b feature/amazing-feature`)
|
|
559
|
+
3. Commit thay đổi (`git commit -m 'Add amazing feature'`)
|
|
560
|
+
4. Push lên branch (`git push origin feature/amazing-feature`)
|
|
561
|
+
5. Mở Pull Request
|
|
562
|
+
|
|
563
|
+
## 📝 Giấy phép
|
|
564
|
+
|
|
565
|
+
Dự án này được cấp phép theo Giấy phép MIT - xem file [LICENSE](LICENSE) để biết chi tiết.
|
|
566
|
+
|
|
567
|
+
## 🔧 Khắc phục sự cố
|
|
568
|
+
|
|
569
|
+
### Các vấn đề thường gặp và giải pháp
|
|
570
|
+
|
|
571
|
+
#### Package không tìm thấy hoặc lệnh không hoạt động
|
|
572
|
+
|
|
573
|
+
```bash
|
|
574
|
+
# Kiểm tra package đã cài global chưa
|
|
575
|
+
npm list -g gbu-accessibility-package
|
|
576
|
+
|
|
577
|
+
# Nếu không tìm thấy, cài đặt global
|
|
578
|
+
npm install -g gbu-accessibility-package
|
|
579
|
+
|
|
580
|
+
# Kiểm tra PATH có chứa npm global bin không
|
|
581
|
+
echo $PATH | grep npm
|
|
582
|
+
|
|
583
|
+
# Thêm npm global bin vào PATH (nếu cần)
|
|
584
|
+
export PATH=$PATH:$(npm config get prefix)/bin
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
#### Lỗi quyền truy cập
|
|
588
|
+
|
|
589
|
+
```bash
|
|
590
|
+
# macOS/Linux: Sửa quyền npm
|
|
591
|
+
sudo chown -R $(whoami) ~/.npm
|
|
592
|
+
sudo chown -R $(whoami) $(npm config get prefix)
|
|
593
|
+
|
|
594
|
+
# Thay thế: Sử dụng npx
|
|
595
|
+
npx gbu-accessibility-package --help
|
|
596
|
+
|
|
597
|
+
# Windows: Chạy với quyền Administrator hoặc dùng npx
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
#### Package không hoạt động sau khi cập nhật
|
|
601
|
+
|
|
602
|
+
```bash
|
|
603
|
+
# Cài đặt lại hoàn toàn
|
|
604
|
+
npm uninstall -g gbu-accessibility-package
|
|
605
|
+
npm cache clean --force
|
|
606
|
+
npm install -g gbu-accessibility-package@latest
|
|
607
|
+
|
|
608
|
+
# Kiểm tra cài đặt
|
|
609
|
+
gbu-a11y --version
|
|
610
|
+
which gbu-a11y
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
#### File không được xử lý
|
|
614
|
+
|
|
615
|
+
```bash
|
|
616
|
+
# Kiểm tra phần mở rộng file (chỉ hỗ trợ .html)
|
|
617
|
+
ls -la *.html
|
|
618
|
+
|
|
619
|
+
# Kiểm tra quyền file
|
|
620
|
+
ls -la your-file.html
|
|
621
|
+
|
|
622
|
+
# Chạy với output chi tiết
|
|
623
|
+
gbu-a11y --dry-run your-file.html
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
#### File backup tích tụ quá nhiều
|
|
627
|
+
|
|
628
|
+
```bash
|
|
629
|
+
# Xóa tất cả file backup
|
|
630
|
+
find . -name "*.backup" -type f -delete
|
|
631
|
+
|
|
632
|
+
# Ngăn tạo backup
|
|
633
|
+
gbu-a11y --no-backup
|
|
634
|
+
|
|
635
|
+
# Cấu hình script cleanup
|
|
636
|
+
echo 'alias cleanup-backups="find . -name \"*.backup\" -type f -delete"' >> ~/.bashrc
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
#### Vấn đề hiệu suất
|
|
640
|
+
|
|
641
|
+
```bash
|
|
642
|
+
# Sử dụng --no-backup để xử lý nhanh hơn
|
|
643
|
+
gbu-a11y --no-backup
|
|
644
|
+
|
|
645
|
+
# Xử lý thư mục cụ thể thay vì toàn bộ dự án
|
|
646
|
+
gbu-a11y ./src
|
|
647
|
+
|
|
648
|
+
# Sử dụng individual modes cho sửa chữa có mục tiêu
|
|
649
|
+
gbu-a11y --alt-only ./images
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
#### Vấn đề phiên bản Node.js
|
|
653
|
+
|
|
654
|
+
```bash
|
|
655
|
+
# Kiểm tra phiên bản Node.js (yêu cầu >=12.0.0)
|
|
656
|
+
node --version
|
|
657
|
+
|
|
658
|
+
# Cập nhật Node.js nếu cần
|
|
659
|
+
# Truy cập: https://nodejs.org/
|
|
660
|
+
|
|
661
|
+
# Sử dụng nvm để quản lý phiên bản Node.js
|
|
662
|
+
nvm install 18
|
|
663
|
+
nvm use 18
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
### Nhận trợ giúp
|
|
667
|
+
|
|
668
|
+
Nếu bạn vẫn gặp vấn đề:
|
|
669
|
+
|
|
670
|
+
1. **Kiểm tra phiên bản**: `gbu-a11y --version`
|
|
671
|
+
2. **Thử dry run trước**: `gbu-a11y --dry-run`
|
|
672
|
+
3. **Kiểm tra quyền file**: `ls -la your-files.html`
|
|
673
|
+
4. **Xóa cache và cài lại**: Xem phần quản lý package ở trên
|
|
674
|
+
5. **Sử dụng npx thay thế**: `npx gbu-accessibility-package --help`
|
|
675
|
+
|
|
676
|
+
## 🆘 Hỗ trợ
|
|
677
|
+
|
|
678
|
+
- 📧 **Issues**: [GitHub Issues](https://github.com/dangpv94/gbu-accessibility-tool/issues)
|
|
679
|
+
- 📖 **Tài liệu**: [GitHub Wiki](https://github.com/dangpv94/gbu-accessibility-tool/wiki)
|
|
680
|
+
- 💬 **Thảo luận**: [GitHub Discussions](https://github.com/dangpv94/gbu-accessibility-tool/discussions)
|
|
681
|
+
|
|
682
|
+
## 🏆 Tại sao chọn GBU Accessibility Package?
|
|
683
|
+
|
|
684
|
+
- ✅ **Không cần cấu hình** - Hoạt động ngay lập tức
|
|
685
|
+
- ✅ **Thông minh & nhận biết ngữ cảnh** - Không chỉ sửa chung chung
|
|
686
|
+
- ✅ **An toàn & đáng tin cậy** - Backup tự động và xem trước
|
|
687
|
+
- ✅ **Toàn diện** - Bao gồm tất cả vấn đề accessibility chính
|
|
688
|
+
- ✅ **Nhanh & hiệu quả** - Xử lý hàng loạt với báo cáo chi tiết
|
|
689
|
+
- ✅ **Tuân thủ WCAG** - Theo tiêu chuẩn accessibility
|
|
690
|
+
- ✅ **Hỗ trợ axe DevTools** - Sửa các lỗi phổ biến từ axe
|
|
691
|
+
- ✅ **Phân tích heading an toàn** - Đề xuất thay vì tự động sửa
|
|
692
|
+
- ✅ **Hỗ trợ đa ngôn ngữ** - Tiếng Nhật, tiếng Anh và có thể mở rộng
|
|
693
|
+
|
|
694
|
+
## 📋 Danh sách kiểm tra Accessibility
|
|
695
|
+
|
|
696
|
+
Package này giải quyết các vấn đề accessibility phổ biến từ axe DevTools:
|
|
697
|
+
|
|
698
|
+
### ✅ Đã hỗ trợ
|
|
699
|
+
|
|
700
|
+
- `image-alt` - Images must have alternate text
|
|
701
|
+
- `html-has-lang` - HTML element must have lang attribute
|
|
702
|
+
- `label` - Form elements must have labels (cơ bản)
|
|
703
|
+
- `button-name` - Buttons must have discernible text
|
|
704
|
+
- `link-name` - Links must have discernible text (cơ bản)
|
|
705
|
+
- `landmark-one-main` - Document should have one main landmark
|
|
706
|
+
- `region` - Page content should be contained by landmarks
|
|
707
|
+
- `heading-order` - Heading levels analysis (chỉ phân tích)
|
|
708
|
+
- Duplicate role attributes cleanup
|
|
709
|
+
|
|
710
|
+
### 🔄 Đang phát triển
|
|
711
|
+
|
|
712
|
+
- `color-contrast` - Color contrast checking
|
|
713
|
+
- `focus-order-semantics` - Focus order validation
|
|
714
|
+
- `aria-*` attributes validation
|
|
715
|
+
- Table accessibility features
|
|
716
|
+
- List structure validation
|
|
717
|
+
|
|
718
|
+
---
|
|
719
|
+
|
|
720
|
+
Được tạo với ❤️ bởi GBU Team
|