Skip to content

Commit 7bb87f5

Browse files
authored
Merge pull request #1509 from cdrini/feature/urlmode-history-demo
Use custom live server to handle BR url mode history
2 parents 5c571e0 + 16131c0 commit 7bb87f5

File tree

6 files changed

+66
-29
lines changed

6 files changed

+66
-29
lines changed

BookReaderDemo/IADemoBr.js

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,24 @@ function getFromUrl(name, def) {
1313
}
1414
}
1515

16-
const ocaid = urlParams.get('ocaid');
16+
const isDetailsPage = window.location.pathname.startsWith('/details/');
17+
const ocaid = isDetailsPage ? window.location.pathname.split('/')[2] : urlParams.get('ocaid');
1718
const openFullImmersionTheater = urlParams.get('view') === 'theater';
1819
const ui = urlParams.get('ui');
1920
const searchTerm = urlParams.get('q');
2021

22+
if (isDetailsPage) {
23+
/** @type {NodeListOf<HTMLAnchorElement>} */
24+
const links = document.querySelectorAll(`a[href^="/BookReaderDemo/demo-internetarchive.html"]`);
25+
links.forEach(anchor => {
26+
const url = new URL(anchor.href);
27+
const anchorOcaid = url.searchParams.get('ocaid');
28+
url.searchParams.delete('ocaid');
29+
const paramsString = url.searchParams.toString();
30+
anchor.href = `/details/${anchorOcaid}` + (paramsString ? '?' + paramsString : '');
31+
});
32+
}
33+
2134
const iaBookReader = document.querySelector('ia-bookreader');
2235

2336
const downloadListWithLCP = [
@@ -48,14 +61,13 @@ const initializeBookReader = (brManifest) => {
4861
const options = {
4962
el: '#BookReader',
5063
/* Url plugin - IA uses History mode for URL */
51-
// commenting these out as demo uses hash mode
52-
// keeping them here for reference
53-
// urlHistoryBasePath: `/details/{$ocaid}/`,
54-
// resumeCookiePath: `/details/{$ocaid}/`,
55-
// urlMode: 'history',
56-
// Only reflect these params onto the URL
57-
// urlTrackedParams: ['page', 'search', 'mode'],
58-
/* End url plugin */
64+
...(isDetailsPage ? {
65+
urlHistoryBasePath: `/details/${ocaid}/`,
66+
urlMode: 'history',
67+
resumeCookiePath: `/details/${ocaid}/`,
68+
// Only reflect these params onto the URL
69+
urlTrackedParams: ['page', 'search', 'mode'],
70+
} : {}),
5971
enableBookTitleLink: false,
6072
bookUri: `https://archive.org/details/${ocaid}`,
6173
bookUrlText: null,

BookReaderDemo/demo-internetarchive.html

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,27 @@
1313
<script type="text/javascript" src="https://unpkg.com/@webcomponents/webcomponentsjs@2.2.10/webcomponents-bundle.js"></script>
1414

1515
<!-- JS dependencies -->
16-
<script src="../BookReader/webcomponents-bundle.js"></script>
17-
<script src="../BookReader/jquery-3.js"></script>
16+
<script src="/BookReader/webcomponents-bundle.js"></script>
17+
<script src="/BookReader/jquery-3.js"></script>
1818

1919
<!-- Bookreader -->
20-
<script src="../BookReader/BookReader.js"></script>
21-
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
20+
<script src="/BookReader/BookReader.js"></script>
21+
<link rel="stylesheet" href="/BookReader/BookReader.css"/>
2222

2323
<!-- plugins needed for archive.org, in same order as archive.org -->
24-
<script src="../BookReader/plugins/plugin.search.js"></script>
25-
<script src="../BookReader/plugins/plugin.chapters.js"></script>
26-
<script src="../BookReader/plugins/plugin.tts.js"></script>
27-
<script src="../BookReader/plugins/plugin.url.js"></script>
28-
<script src="../BookReader/plugins/plugin.autoplay.js"></script>
29-
<script src="../BookReader/plugins/plugin.resume.js"></script>
30-
<script src="../BookReader/plugins/plugin.archive_analytics.js"></script>
31-
<script src="../BookReader/plugins/plugin.text_selection.js"></script>
32-
<script src="../BookReader/plugins/plugin.experiments.js"></script>
24+
<script src="/BookReader/plugins/plugin.search.js"></script>
25+
<script src="/BookReader/plugins/plugin.chapters.js"></script>
26+
<script src="/BookReader/plugins/plugin.tts.js"></script>
27+
<script src="/BookReader/plugins/plugin.url.js"></script>
28+
<script src="/BookReader/plugins/plugin.autoplay.js"></script>
29+
<script src="/BookReader/plugins/plugin.resume.js"></script>
30+
<script src="/BookReader/plugins/plugin.archive_analytics.js"></script>
31+
<script src="/BookReader/plugins/plugin.text_selection.js"></script>
32+
<script src="/BookReader/plugins/plugin.experiments.js"></script>
3333

34-
<script type="module" src="../BookReader/ia-bookreader-bundle.js"></script>
34+
<script type="module" src="/BookReader/ia-bookreader-bundle.js"></script>
3535

36-
<link rel="stylesheet" href="BookReaderDemo.css"/>
36+
<link rel="stylesheet" href="/BookReaderDemo/BookReaderDemo.css"/>
3737

3838
<!-- IA scripts -->
3939
<script src="https://archive.org/bookreader/BookReaderJSIA.js"></script>
@@ -272,6 +272,6 @@ <h3>Placeholder div to allow scrolling</h3>
272272
</script>
273273

274274
<!-- IA fetch demo -->
275-
<script type="module" src="IADemoBr.js"></script>
275+
<script type="module" src="/BookReaderDemo/IADemoBr.js"></script>
276276
</body>
277277
</html>

index.html

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,13 @@
1818
<li><a href="BookReaderDemo/demo-preview-pages.html">Preview Pages</a></li>
1919
<li><a href="BookReaderDemo/demo-embed.html">Embed</a></li>
2020
<li><a href="BookReaderDemo/demo-multiple.html">Multiple on same page</a></li>
21-
<!-- plugin.search.js -->
2221
<li><a href="BookReaderDemo/demo-internetarchive.html?ocaid=theworksofplato01platiala">From Internet Archive</a></li>
23-
<!-- plugin.search.js -->
2422
<li><a href="BookReaderDemo/demo-internetarchive.html?ocaid=adventureofsherl0000unse">From Internet Archive - a book with CHAPTERS</a></li>
23+
<li><a href="/details/adventureofsherl0000unse">From Internet Archive - with url mode: history</a></li>
2524
<li><a href="BookReaderDemo/demo-iiif.html">IIIF</a></li>
2625
<li><a href="BookReaderDemo/demo-internetarchive.html?ocaid=goodytwoshoes00newyiala&autoflip=1">Autoplay (kiosk mode)</a></li>
2726
<li><a href="BookReaderDemo/demo-plugin-menu-toggle.html">Plugin: Full screen menu toggle</a></li>
2827
<li><a href="BookReaderDemo/immersion-mode.html">Start in immersion (fullscreen) mode</a></li>
29-
<!-- plugin.search.js -->
3028
<li><a href="BookReaderDemo/immersion-1up.html">Start in immersion mode on 1up default item</a></li>
3129
<li><a href="BookReaderDemo/viewmode-cycle.html">Replace view mode buttons with view mode cycler</a></li>
3230
</ul>

netlify.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
# Keep in sync with CI in .github/workflows/node.js.yml
33
NODE_VERSION = "24"
44

5+
[[redirects]]
6+
from = "/details/*"
7+
to = "/BookReaderDemo/demo-internetarchive.html"
8+
status = 200
9+
force = true
10+
511
[[headers]]
612
# Define which paths this specific [[headers]] block will cover.
713
for = "/BookReader/*"

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@
124124
"lint": "npx eslint src/ tests/ *.js *.cjs",
125125
"lint:fix": "npx eslint --fix src/ tests/ *.js *.cjs",
126126
"serve": "npx http-server . --port=8000",
127-
"serve-live": "npx live-server . --cors --port=8000 --watch=index.html,BookReader,BookReaderDemo",
127+
"serve-live": "node scripts/live-server.js",
128128
"serve-dev": "env NODE_ENV='development' npm run build-css && env NODE_ENV='development' npx concurrently --kill-others npm:serve-live npm:build-*:watch",
129129
"test": "npx jest --coverage --colors",
130130
"test:watch": "npx jest --watch",

scripts/live-server.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import liveServer from 'live-server';
2+
3+
liveServer.start({
4+
root: '.',
5+
port: 8000,
6+
watch: ['index.html', 'BookReader', 'BookReaderDemo'],
7+
cors: true,
8+
middleware: [function (req, res, next) {
9+
console.log(`${req.method} ${req.url}`);
10+
11+
// Handle /details/<identifier> requests
12+
const detailsMatch = req.url.match(/^\/details\/([^/?]+)/);
13+
if (detailsMatch) {
14+
const newUrl = `/BookReaderDemo/demo-internetarchive.html`;
15+
console.log(`Rewriting ${req.url} to ${newUrl}`);
16+
req.url = newUrl;
17+
}
18+
19+
next();
20+
}],
21+
});

0 commit comments

Comments
 (0)