Dispatch page change events
This commit is contained in:
parent
485e7e4fba
commit
7163d1e4fe
4 changed files with 32 additions and 3 deletions
12
README.md
12
README.md
|
|
@ -244,6 +244,18 @@ document.addEventListener("on_update_available", (event) => {
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Непосредственно перед заменой содержимого при переходе между страницами отправляется всплывающее событие `on_page_change`. В `page` находится полная запись целевой страницы из manifest, а в `previousPage` — предыдущая страница или `null` при первом рендере:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
document.addEventListener("on_page_change", (event) => {
|
||||||
|
const { page, previousPage, number, title, index } = event.detail;
|
||||||
|
console.log(`${previousPage?.number ?? "—"} → ${number}: ${title}`, {
|
||||||
|
page,
|
||||||
|
index,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
Код из `custom_js` считается доверенным и выполняется в контексте страницы. Изменение системного или пользовательского CSS/JS меняет `revision`, поэтому обновлённый runtime сохраняется в IndexedDB и применяется после перезагрузки клиента.
|
Код из `custom_js` считается доверенным и выполняется в контексте страницы. Изменение системного или пользовательского CSS/JS меняет `revision`, поэтому обновлённый runtime сохраняется в IndexedDB и применяется после перезагрузки клиента.
|
||||||
|
|
||||||
Версия библиотеки, которой был скомпилирован физический `index.html`, доступна пользовательскому JavaScript в глобальной строковой переменной:
|
Версия библиотеки, которой был скомпилирован физический `index.html`, доступна пользовательскому JavaScript в глобальной строковой переменной:
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
"""Single source of truth for the SharedDocsLib package version."""
|
"""Single source of truth for the SharedDocsLib package version."""
|
||||||
|
|
||||||
__version__ = "0.4.3"
|
__version__ = "0.4.4"
|
||||||
|
|
|
||||||
|
|
@ -358,6 +358,17 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function applyPage(page, index) {
|
function applyPage(page, index) {
|
||||||
|
const previousPage = manifest.pages.find((candidate) => candidate.number === currentNumber) || null;
|
||||||
|
document.dispatchEvent(new CustomEvent("on_page_change", {
|
||||||
|
bubbles: true,
|
||||||
|
detail: {
|
||||||
|
page,
|
||||||
|
previousPage,
|
||||||
|
number: page.number,
|
||||||
|
title: page.title,
|
||||||
|
index,
|
||||||
|
},
|
||||||
|
}));
|
||||||
currentNumber = page.number;
|
currentNumber = page.number;
|
||||||
if (routeNumber() !== page.number) history.replaceState(null, "", `#/page/${encodeURIComponent(page.number)}`);
|
if (routeNumber() !== page.number) history.replaceState(null, "", `#/page/${encodeURIComponent(page.number)}`);
|
||||||
document.title = `${page.title} · ${manifest.title}`;
|
document.title = `${page.title} · ${manifest.title}`;
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ def test_all_endpoints_and_self_contained_build(tmp_path):
|
||||||
assert html_response.status_code == 200
|
assert html_response.status_code == 200
|
||||||
assert "http://127.0.0.1:9000/manifest.json" in html
|
assert "http://127.0.0.1:9000/manifest.json" in html
|
||||||
assert "http://127.0.0.1:9000/version" in html
|
assert "http://127.0.0.1:9000/version" in html
|
||||||
assert 'globalThis.COMPILED_FROM_VERSION = "0.4.3";' in html
|
assert 'globalThis.COMPILED_FROM_VERSION = "0.4.4";' in html
|
||||||
assert ".content { --custom-test: yes; }" in html
|
assert ".content { --custom-test: yes; }" in html
|
||||||
assert r'document.body.dataset.customTest = \"yes\";' in html
|
assert r'document.body.dataset.customTest = \"yes\";' in html
|
||||||
assert 'id="docslib-loading"' in html
|
assert 'id="docslib-loading"' in html
|
||||||
|
|
@ -116,6 +116,12 @@ def test_all_endpoints_and_self_contained_build(tmp_path):
|
||||||
assert "cached," in system_js
|
assert "cached," in system_js
|
||||||
assert "applied: false" in system_js
|
assert "applied: false" in system_js
|
||||||
assert 'new CustomEvent("on_update_available"' in system_js
|
assert 'new CustomEvent("on_update_available"' in system_js
|
||||||
|
assert 'new CustomEvent("on_page_change"' in system_js
|
||||||
|
assert "page," in system_js
|
||||||
|
assert "previousPage," in system_js
|
||||||
|
assert "number: page.number" in system_js
|
||||||
|
assert "title: page.title" in system_js
|
||||||
|
assert system_js.index('new CustomEvent("on_page_change"') < system_js.index("currentNumber = page.number")
|
||||||
assert "currentRevision: lastSyncedRevision" in system_js
|
assert "currentRevision: lastSyncedRevision" in system_js
|
||||||
assert 'config.versionUrl || siblingResourceUrl(config.manifestUrl, "version")' in system_js
|
assert 'config.versionUrl || siblingResourceUrl(config.manifestUrl, "version")' in system_js
|
||||||
assert 'target.searchParams.set(' in system_js
|
assert 'target.searchParams.set(' in system_js
|
||||||
|
|
@ -242,7 +248,7 @@ def test_all_endpoints_and_self_contained_build(tmp_path):
|
||||||
|
|
||||||
|
|
||||||
def test_build_writes_static_bundle(tmp_path):
|
def test_build_writes_static_bundle(tmp_path):
|
||||||
assert __version__ == "0.4.3"
|
assert __version__ == "0.4.4"
|
||||||
|
|
||||||
@Page("1", "Static page")
|
@Page("1", "Static page")
|
||||||
def static_page():
|
def static_page():
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue