Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/BookReader/
/dist/
/BookReaderDev/
node_modules/
.DS_Store
Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/demo-advanced.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<!-- BookReader and plugins -->
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>
<script type="text/javascript" src="../BookReader/plugins/plugin.url.js"></script>

<!-- Custom CSS overrides -->
Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/demo-embed-iframe-src.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<script src="../BookReader/jquery-3.js"></script>


<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>

<!-- Plugins -->
<script src="../BookReader/plugins/plugin.iframe.js"></script>
Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/demo-fullscreen-mobile.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<!-- BookReader and plugins -->
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>

<!-- URL-changing plugin -->
<script src="../BookReader/plugins/plugin.url.js"></script>
Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/demo-fullscreen.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<!-- BookReader and plugins -->
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>

<!-- URL-changing plugin -->
<script src="../BookReader/plugins/plugin.url.js"></script>
Expand Down
3 changes: 1 addition & 2 deletions BookReaderDemo/demo-iiif.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,10 @@

<!-- BookReader -->
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>
<script src="../BookReader/plugins/plugin.iiif.js"></script>
<script src="../BookReader/plugins/plugin.url.js"></script>

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

<!-- Custom CSS overrides -->
<link rel="stylesheet" href="BookReaderDemo.css"/>
Expand Down
3 changes: 1 addition & 2 deletions BookReaderDemo/demo-internetarchive.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<script src="/BookReader/jquery-3.js"></script>

<!-- Bookreader -->
<script src="/BookReader/BookReader.js"></script>
<script src="/BookReader/ia-bookreader.js"></script>
<link rel="stylesheet" href="/BookReader/BookReader.css"/>

<!-- plugins needed for archive.org, in same order as archive.org -->
Expand All @@ -31,7 +31,6 @@
<script src="/BookReader/plugins/plugin.text_selection.js"></script>
<script src="/BookReader/plugins/plugin.experiments.js"></script>

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

<link rel="stylesheet" href="/BookReaderDemo/BookReaderDemo.css"/>

Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/demo-multiple.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<!-- BookReader and plugins -->
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>

<!-- Custom CSS overrides -->
<link rel="stylesheet" href="BookReaderDemo.css"/>
Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/demo-preview-pages.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

<!-- BookReader and plugins -->
<link rel="stylesheet" href="../BookReader/BookReader.css" />
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>

<!-- Custom CSS overrides -->
<link rel="stylesheet" href="BookReaderDemo.css" />
Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/demo-simple.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<!-- BookReader and plugins -->
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>

<!-- Custom CSS overrides -->
<link rel="stylesheet" href="BookReaderDemo.css"/>
Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/demo-vendor-fullscreen.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<!-- BookReader and plugins -->
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>

<!-- URL-changing plugin -->
<script src="../BookReader/plugins/plugin.url.js"></script>
Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/immersion-1up.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@


<!-- Bookreader -->
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>
<link rel="stylesheet" href="../BookReader/BookReader.css"/>

<!-- plugins needed for archive.org, in same order as archive.org -->
Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/immersion-mode.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<!-- BookReader and plugins -->
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>

<!-- URL-changing plugin -->
<script src="../BookReader/plugins/plugin.url.js"></script>
Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/toggle_controls.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<!-- BookReader and plugins -->
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>

<!-- Custom CSS overrides -->
<link rel="stylesheet" href="BookReaderDemo.css"/>
Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/view_mode.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<!-- BookReader and plugins -->
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>

<!-- Custom CSS overrides -->
<link rel="stylesheet" href="BookReaderDemo.css"/>
Expand Down
2 changes: 1 addition & 1 deletion BookReaderDemo/viewmode-cycle.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

<!-- BookReader and plugins -->
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
<script src="../BookReader/BookReader.js"></script>
<script src="../BookReader/ia-bookreader.js"></script>

<!-- Custom CSS overrides -->
<link rel="stylesheet" href="BookReaderDemo.css"/>
Expand Down
10 changes: 8 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"type": "module",
"files": [
"BookReader/",
"dist/",
"src/",
"jsconfig.json"
],
Expand All @@ -15,7 +16,12 @@
"publishConfig": {
"access": "public"
},
"module": "src/ia-bookreader/ia-bookreader.js",
"module": "dist/esm/ia-bookreader.js",
"exports": {
".": "./dist/esm/ia-bookreader.js",
"./esm/*": "./dist/esm/*",
"./*": "./*"
},
"keywords": [
"online",
"bookreader",
Expand Down Expand Up @@ -125,7 +131,7 @@
"build-js:watch": "npx webpack --mode=development --watch",
"build-css": "npx sass --silence-deprecation=import --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css",
"build-css:watch": "npx sass --silence-deprecation=import --watch --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css",
"clean": "rm -r BookReader/ || true",
"clean": "rm -rf BookReader/ dist/",
"lint": "npx eslint src/ tests/ *.js *.cjs",
"lint:fix": "npx eslint --fix src/ tests/ *.js *.cjs",
"serve": "npx http-server . --port=8000",
Expand Down
2 changes: 2 additions & 0 deletions src/ia-bookreader/ia-bookreader.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

import { LitElement, html, css } from 'lit';

// Loads the BookReader core (defines window.BookReader), so this is the one entrypoint
import '../BookReader.js';
import '@internetarchive/ia-item-navigator';
import '@internetarchive/modal-manager';
import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
Expand Down Expand Up @@ -229,7 +231,7 @@
/** Creates modal DOM & attaches to `<body>` */
setModalManager() {
/** @type {ModalManager} */
let modalManager = document.querySelector('modal-manager');

Check warning on line 234 in src/ia-bookreader/ia-bookreader.js

View workflow job for this annotation

GitHub Actions / tests

'document.querySelector' is restricted from being used. Doesn't reach into shadow roots; query from a scoped element (e.g. br.refs.$br) instead
if (!modalManager) {
modalManager = /** @type {ModalManager} */(document.createElement('modal-manager'));
document.body.appendChild(modalManager);
Expand Down
112 changes: 93 additions & 19 deletions webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,20 @@
import path from 'path';
import webpack from 'webpack';
import { fileURLToPath } from 'url';
import PACKAGE_JSON from './package.json' with { type: 'json' };

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// The ESM build needs ES modules and import() (for chunks) anyway.
const ESM_TARGETS = 'supports es6-module-dynamic-import';

/** @type {webpack.Configuration} */
const shared = {
mode: 'production',

watchOptions: {
ignored: ['BookReader/**', 'node_modules/**', 'tests/**'],
ignored: ['BookReader/**', 'dist/**', 'node_modules/**', 'tests/**'],
},

target: ['web', 'es5'],
Expand Down Expand Up @@ -42,6 +46,27 @@ const shared = {
},
};

/** Output file -> srcfile, for the classic and ESM builds */
const bookreaderEntries = {
// BookReader (core + <ia-bookreader> shell)
'ia-bookreader.js': './src/ia-bookreader/ia-bookreader.js',

// Plugins (sorted!)
'plugins/plugin.archive_analytics.js': { import: './src/plugins/plugin.archive_analytics.js', dependOn: 'ia-bookreader.js' },
'plugins/plugin.autoplay.js': { import: './src/plugins/plugin.autoplay.js', dependOn: 'ia-bookreader.js' },
'plugins/plugin.chapters.js': { import: './src/plugins/plugin.chapters.js', dependOn: 'ia-bookreader.js' },
'plugins/plugin.experiments.js': { import: './src/plugins/plugin.experiments.js', dependOn: 'ia-bookreader.js' },
'plugins/plugin.iframe.js': { import: './src/plugins/plugin.iframe.js', dependOn: 'ia-bookreader.js' },
'plugins/plugin.iiif.js': { import: './src/plugins/plugin.iiif.js', dependOn: 'ia-bookreader.js' },
'plugins/plugin.resume.js': { import: './src/plugins/plugin.resume.js', dependOn: 'ia-bookreader.js' },
'plugins/plugin.search.js': { import: './src/plugins/search/plugin.search.js', dependOn: 'ia-bookreader.js' },
'plugins/plugin.text_selection.js': { import: './src/plugins/plugin.text_selection.js', dependOn: 'ia-bookreader.js' },
'plugins/plugin.translate.js': { import: './src/plugins/translate/plugin.translate.js', dependOn: 'ia-bookreader.js' },
'plugins/plugin.tts.js': { import: './src/plugins/tts/plugin.tts.js', dependOn: 'ia-bookreader.js' },
'plugins/plugin.url.js': { import: './src/plugins/url/plugin.url.js', dependOn: 'ia-bookreader.js' },
'plugins/plugin.vendor-fullscreen.js': { import: './src/plugins/plugin.vendor-fullscreen.js', dependOn: 'ia-bookreader.js' },
};

/** @type {webpack.Configuration[]} */
export default [
{
Expand All @@ -52,25 +77,8 @@ export default [
// Polyfill bundles
'webcomponents-bundle.js': { import: '@webcomponents/webcomponentsjs/webcomponents-bundle.js' },

// BookReader
'BookReader.js': './src/BookReader.js',

// Plugins (sorted!)
'plugins/plugin.archive_analytics.js': { import: './src/plugins/plugin.archive_analytics.js', dependOn: 'BookReader.js' },
'plugins/plugin.autoplay.js': { import: './src/plugins/plugin.autoplay.js', dependOn: 'BookReader.js' },
'plugins/plugin.chapters.js': { import: './src/plugins/plugin.chapters.js', dependOn: 'BookReader.js' },
'plugins/plugin.experiments.js': { import: './src/plugins/plugin.experiments.js', dependOn: 'BookReader.js' },
'plugins/plugin.iframe.js': { import: './src/plugins/plugin.iframe.js', dependOn: 'BookReader.js' },
'plugins/plugin.iiif.js': { import: './src/plugins/plugin.iiif.js', dependOn: 'BookReader.js' },
'plugins/plugin.resume.js': { import: './src/plugins/plugin.resume.js', dependOn: 'BookReader.js' },
'plugins/plugin.search.js': { import: './src/plugins/search/plugin.search.js', dependOn: 'BookReader.js' },
'plugins/plugin.text_selection.js': { import: './src/plugins/plugin.text_selection.js', dependOn: 'BookReader.js' },
'plugins/plugin.translate.js': { import: './src/plugins/translate/plugin.translate.js', dependOn: 'BookReader.js' },
...bookreaderEntries,
'plugins/translator-worker.js': { import: '@internetarchive/bergamot-translator/worker/translator-worker.js' },
'plugins/plugin.tts.js': { import: './src/plugins/tts/plugin.tts.js', dependOn: 'BookReader.js' },
'plugins/plugin.url.js': { import: './src/plugins/url/plugin.url.js', dependOn: 'BookReader.js' },
'plugins/plugin.vendor-fullscreen.js': { import: './src/plugins/plugin.vendor-fullscreen.js', dependOn: 'BookReader.js' },
'ia-bookreader-bundle.js': { import: './src/ia-bookreader/ia-bookreader.js', dependOn: 'BookReader.js' },
},

externals: {
Expand Down Expand Up @@ -98,6 +106,72 @@ export default [
devtool: 'source-map',
},

// ESM build of the same entries, for consumers that bundle BookReader
// themselves (e.g. with Vite) rather than loading it via <script> tags.
{
...shared,
name: 'esm',
Comment thread
cdrini marked this conversation as resolved.

target: `browserslist:${ESM_TARGETS}`,

module: {
rules: [
{
...shared.module.rules[0],
options: {
presets: [
['@babel/preset-env', {
targets: ESM_TARGETS,
useBuiltIns: 'usage',
corejs: 3,
}],
],
},
},
shared.module.rules[1],
],
},

entry: bookreaderEntries,

// Dependencies stay bare imports so the consumer can dedupe them; e.g. a
// second copy of a web component throws re-registering its element name.
externals: [
{ jquery: 'var jQuery' },
({ request }, callback) => {
const pkg = request?.match(/^(@[^/]+\/)?[^/.][^/]*/)?.[0];
// lit is bundled: our 2018-09 decorators need lit 2's decorators, and
// the consumer may be on lit 3.
if (pkg && pkg in PACKAGE_JSON.dependencies && pkg !== 'lit') {
return callback(null, `module ${request}`);
}
callback();
},
],
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
}),
],

experiments: {
outputModule: true,
},

output: {
module: true,
library: { type: 'module' },
chunkFormat: 'module',
chunkLoading: 'import',
filename: '[name]',
chunkFilename: 'chunks/[id].js',
path: path.resolve(__dirname, 'dist/esm'),
},

devtool: 'source-map',
},

// jQuery gets its own build, so that it can be used as an "external" in
// everything else.
{
Expand Down
Loading