tourfp 0.3.2 → 0.3.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.
Files changed (3) hide show
  1. package/README.md +7 -4
  2. package/package.json +1 -1
  3. package/tourfp.js +9 -2
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.2/tourfp.js"></script>
32
+ <script src="https://cdn.jsdelivr.net/npm/tourfp@0.3.3/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.2/tourfp.js' }));
38
+ document.head.appendChild(Object.assign(document.createElement('script'), { src: 'https://cdn.jsdelivr.net/npm/tourfp@0.3.3/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** — đặt tên rồi dán JSON lấy bằng `copy(TourFP.export())`, hoặc chọn file `.json`.
89
- - **Chạy thử** — chép một đoạn mã gồm cả thư viện lẫn tour; mở màn bắt đầu của tour, dán vào console là tour phát ngay.
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tourfp",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "Ghi và phát tour hướng dẫn trên giao diện web bằng dấu vân tay phần tử, không cần sửa mã nguồn của app.",
5
5
  "main": "tourfp.js",
6
6
  "browser": "tourfp.js",
package/tourfp.js CHANGED
@@ -1,4 +1,4 @@
1
- /* TourFP 0.3.2 — bản thử: ghi tour theo thao tác và khớp phần tử bằng "dấu vân tay".
1
+ /* TourFP 0.3.3 — 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>).
@@ -1062,8 +1062,11 @@
1062
1062
  }
1063
1063
  // 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
1064
  let serverOk = null;
1065
- const setSaveMode = () => { bSave.textContent = serverOk === false ? 'Chép JSON' : 'Lưu'; };
1065
+ // 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 đó
1066
+ const host = () => typeof window.__tourfpHost === 'function';
1067
+ const setSaveMode = () => { bSave.textContent = host() ? 'Gửi' : serverOk === false ? 'Chép JSON' : 'Lưu'; };
1066
1068
  async function probe() {
1069
+ if (host()) return setSaveMode();
1067
1070
  if (serverOk !== null) return;
1068
1071
  try { serverOk = (await fetch(SERVER + '/api/config')).ok; } catch (_) { serverOk = false; }
1069
1072
  setSaveMode();
@@ -1074,6 +1077,10 @@
1074
1077
  scrub();
1075
1078
  if (recording) stop();
1076
1079
  if (!steps.length) return setInfo('Chưa có bước nào để lưu');
1080
+ if (host()) {
1081
+ 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 ở đó`); }
1082
+ catch (_) { return setInfo('Không gửi được về trang quản trị'); }
1083
+ }
1077
1084
  if (serverOk === false) {
1078
1085
  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
1086
  }