tourfp 0.3.2 → 0.3.4
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/README.md +7 -4
- package/package.json +1 -1
- package/tourfp.js +16 -3
package/README.md
CHANGED
|
@@ -29,13 +29,13 @@ Với Angular, nên khai báo trong `angular.json` để thư viện được n
|
|
|
29
29
|
Hoặc không cần cài, nạp bằng một thẻ script qua CDN:
|
|
30
30
|
|
|
31
31
|
```html
|
|
32
|
-
<script src="https://cdn.jsdelivr.net/npm/tourfp@0.3.
|
|
32
|
+
<script src="https://cdn.jsdelivr.net/npm/tourfp@0.3.4/tourfp.js"></script>
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Để dùng thử nhanh trên một trang đang mở (trang phải cho phép script từ `cdn.jsdelivr.net`), dán dòng này vào console:
|
|
36
36
|
|
|
37
37
|
```js
|
|
38
|
-
document.head.appendChild(Object.assign(document.createElement('script'), { src: 'https://cdn.jsdelivr.net/npm/tourfp@0.3.
|
|
38
|
+
document.head.appendChild(Object.assign(document.createElement('script'), { src: 'https://cdn.jsdelivr.net/npm/tourfp@0.3.4/tourfp.js' }));
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
Tuỳ chọn, đặt trước khi nạp thư viện:
|
|
@@ -85,8 +85,11 @@ uvicorn main:app --app-dir server --host 127.0.0.1 --port 8000
|
|
|
85
85
|
|
|
86
86
|
Mở <http://localhost:8000>:
|
|
87
87
|
|
|
88
|
-
- **Thêm tour** —
|
|
89
|
-
|
|
88
|
+
- **Thêm tour** — bấm **Ghi tour bằng Chrome**: máy chủ mở Chrome (hồ sơ kiểm thử, đã đăng nhập) có sẵn thanh ghi ở mọi
|
|
89
|
+
trang. Ghi xong bấm **Gửi** trên thanh ghi, tour tự hiện trong hộp Thêm tour; đặt tên rồi lưu. Kéo hẹp cửa sổ Chrome
|
|
90
|
+
để ghi tour cho bố cục mobile. Cũng có thể dán JSON chép từ thanh ghi trên trang khác.
|
|
91
|
+
- **Chạy thử** — bấm **Chạy trong Chrome**: máy chủ mở Chrome (hồ sơ kiểm thử, đã đăng nhập) tại màn bắt đầu của tour,
|
|
92
|
+
nạp thư viện và phát tour ngay theo chế độ và bước dừng đã chọn. Đoạn mã chạy thử vẫn lấy được ở `/api/tours/{id}/snippet.js`.
|
|
90
93
|
Khi chạy thử, thanh ghi tour không hiện (chế độ chỉ phát); gọi `TourFP.showPanel()` nếu cần hiện lại.
|
|
91
94
|
- **Xoá**, **Tải JSON**, và xem danh sách bước của từng tour.
|
|
92
95
|
- **Sửa tên**: bấm vào tên một bước để đặt tên hiển thị cho bước đó (để trống thì dùng lại tên tự lấy từ giao diện); nút **Sửa tên tour** đổi tên và mô tả của tour. Tên đã đặt được dùng trong lời hướng dẫn khi phát và trong việc tìm tour của trợ lý.
|
package/package.json
CHANGED
package/tourfp.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* TourFP 0.3.
|
|
1
|
+
/* TourFP 0.3.4 — bản thử: ghi tour theo thao tác và khớp phần tử bằng "dấu vân tay".
|
|
2
2
|
* - Không dùng class/id. Không phụ thuộc thư viện.
|
|
3
3
|
* - Chữ lấy từ API (tên, tên kế hoạch…) và chữ số bị loại khỏi dấu vân tay.
|
|
4
4
|
* Để lọc được, file này phải được nạp TRƯỚC khi app gọi API (đặt trong <head>).
|
|
@@ -819,7 +819,13 @@
|
|
|
819
819
|
}
|
|
820
820
|
|
|
821
821
|
// hộp thoại đang che màn hình mà không bước nào của tour diễn ra trong nó (quảng cáo, thông báo bất chợt)
|
|
822
|
-
|
|
822
|
+
// Hộp thoại "của tour": có bước diễn ra trong nó, hoặc nó là màn hình sau cú bấm của một bước (ví dụ bước cuối mở hộp thoại
|
|
823
|
+
// Nộp tiền: đó chính là màn đích của tour, không phải hộp thoại lạ).
|
|
824
|
+
const foreignDialog = () => {
|
|
825
|
+
const d = topDialog(); if (!d) return false;
|
|
826
|
+
const k = dialogKey(d);
|
|
827
|
+
return !steps.some(s => s.fp.ctx.dialog === k || (s.after && s.after.dialog === k));
|
|
828
|
+
};
|
|
823
829
|
// Tạm ngừng dẫn cho tới khi người dùng đóng hộp thoại lạ, rồi phát tiếp từ đúng chỗ. Không chặn cú bấm nào, không tải lại trang.
|
|
824
830
|
function holdForDialog() {
|
|
825
831
|
const my = ++token;
|
|
@@ -1062,8 +1068,11 @@
|
|
|
1062
1068
|
}
|
|
1063
1069
|
// Máy chủ có gọi được không: null = chưa biết. Trang chặn kết nối ra ngoài thì kết quả không đổi, nên chỉ cần dò một lần.
|
|
1064
1070
|
let serverOk = null;
|
|
1065
|
-
|
|
1071
|
+
// Chrome do trang quản trị mở để ghi tour: có sẵn hàm __tourfpHost, gửi tour thẳng về trang quản trị qua đó
|
|
1072
|
+
const host = () => typeof window.__tourfpHost === 'function';
|
|
1073
|
+
const setSaveMode = () => { bSave.textContent = host() ? 'Gửi' : serverOk === false ? 'Chép JSON' : 'Lưu'; };
|
|
1066
1074
|
async function probe() {
|
|
1075
|
+
if (host()) return setSaveMode();
|
|
1067
1076
|
if (serverOk !== null) return;
|
|
1068
1077
|
try { serverOk = (await fetch(SERVER + '/api/config')).ok; } catch (_) { serverOk = false; }
|
|
1069
1078
|
setSaveMode();
|
|
@@ -1074,6 +1083,10 @@
|
|
|
1074
1083
|
scrub();
|
|
1075
1084
|
if (recording) stop();
|
|
1076
1085
|
if (!steps.length) return setInfo('Chưa có bước nào để lưu');
|
|
1086
|
+
if (host()) {
|
|
1087
|
+
try { await window.__tourfpHost(JSON.stringify(steps)); return setInfo(`Đã gửi ${steps.length} bước về trang quản trị · đặt tên và lưu ở đó`); }
|
|
1088
|
+
catch (_) { return setInfo('Không gửi được về trang quản trị'); }
|
|
1089
|
+
}
|
|
1077
1090
|
if (serverOk === false) {
|
|
1078
1091
|
return setInfo(copyNow(JSON.stringify(steps)) ? 'Đã chép JSON · dán vào Thêm tour ở trang quản trị' : 'Không chép được · dùng copy(TourFP.export()) trong console');
|
|
1079
1092
|
}
|