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 и применяется после перезагрузки клиента.
|
||||
|
||||
Версия библиотеки, которой был скомпилирован физический `index.html`, доступна пользовательскому JavaScript в глобальной строковой переменной:
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
"""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) {
|
||||
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;
|
||||
if (routeNumber() !== page.number) history.replaceState(null, "", `#/page/${encodeURIComponent(page.number)}`);
|
||||
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 "http://127.0.0.1:9000/manifest.json" 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 r'document.body.dataset.customTest = \"yes\";' 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 "applied: false" 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 'config.versionUrl || siblingResourceUrl(config.manifestUrl, "version")' 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):
|
||||
assert __version__ == "0.4.3"
|
||||
assert __version__ == "0.4.4"
|
||||
|
||||
@Page("1", "Static page")
|
||||
def static_page():
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue