@canopycanopycanopy/b-ber-tasks 3.0.8-nav-memo.4 → 3.0.8-next.101
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.
- package/README.md +34 -4
- package/dist/index.d.ts +144 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2109 -176
- package/dist/web/search.js +1 -1
- package/dist/web/worker.js +1 -1
- package/package.json +22 -23
- package/dist/clean/index.js +0 -25
- package/dist/container/index.js +0 -48
- package/dist/copy/index.js +0 -60
- package/dist/cover/index.js +0 -217
- package/dist/deploy/index.js +0 -188
- package/dist/epub/index.js +0 -24
- package/dist/footnotes/index.js +0 -56
- package/dist/generate/index.js +0 -79
- package/dist/init/index.js +0 -73
- package/dist/inject/index.js +0 -80
- package/dist/loi/index.js +0 -130
- package/dist/mobi/index.js +0 -39
- package/dist/mobi/mobi-css.js +0 -85
- package/dist/opf/ManifestAndMetadata.js +0 -96
- package/dist/opf/Navigation.js +0 -199
- package/dist/opf/Opf.js +0 -56
- package/dist/opf/helpers.js +0 -57
- package/dist/opf/index.js +0 -31
- package/dist/pdf/index.js +0 -59
- package/dist/reader/index.js +0 -205
- package/dist/render/index.js +0 -53
- package/dist/sample/index.js +0 -11
- package/dist/sass/index.js +0 -185
- package/dist/scripts/index.js +0 -54
- package/dist/serialize.js +0 -57
- package/dist/serve/index.js +0 -83
- package/dist/validate/index.js +0 -51
- package/dist/web/Template.js +0 -171
- package/dist/web/index.js +0 -371
- package/dist/xml/index.js +0 -57
package/dist/validate/index.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
|
4
|
-
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
|
5
|
-
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
|
6
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
7
|
-
_Object$defineProperty(exports, "__esModule", {
|
|
8
|
-
value: true
|
|
9
|
-
});
|
|
10
|
-
exports.default = void 0;
|
|
11
|
-
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
12
|
-
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
|
|
13
|
-
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
|
|
14
|
-
var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
|
|
15
|
-
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
16
|
-
var _path = _interopRequireDefault(require("path"));
|
|
17
|
-
var _State = _interopRequireDefault(require("@canopycanopycanopy/b-ber-lib/State"));
|
|
18
|
-
var _bBerLogger = _interopRequireDefault(require("@canopycanopycanopy/b-ber-logger"));
|
|
19
|
-
var _bBerValidator = _interopRequireWildcard(require("@canopycanopycanopy/b-ber-validator"));
|
|
20
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof _WeakMap) return null; var r = new _WeakMap(), t = new _WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
21
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? _Object$getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? _Object$defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
22
|
-
const validate = async ({
|
|
23
|
-
project
|
|
24
|
-
}) => {
|
|
25
|
-
var _context, _context2;
|
|
26
|
-
const markdownPath = _path.default.resolve(process.cwd(), project, _State.default.src.markdown());
|
|
27
|
-
if (!_fsExtra.default.pathExists(markdownPath)) {
|
|
28
|
-
_bBerLogger.default.error('Project path does not exist, aborting');
|
|
29
|
-
}
|
|
30
|
-
const files = (0, _map.default)(_context = (0, _filter.default)(_context2 = await _fsExtra.default.readdir(markdownPath)).call(_context2, f => (0, _slice.default)(f).call(f, -2).toLowerCase() === 'md')).call(_context, f => _path.default.join(markdownPath, f));
|
|
31
|
-
const errors = [];
|
|
32
|
-
const check = (0, _map.default)(files).call(files, async file => {
|
|
33
|
-
const data = await _fsExtra.default.readFile(file, 'utf8');
|
|
34
|
-
const res = (0, _bBerValidator.default)({
|
|
35
|
-
text: data,
|
|
36
|
-
index: 0
|
|
37
|
-
});
|
|
38
|
-
if (res.success === false) {
|
|
39
|
-
(0, _bBerValidator.report)(_path.default.basename(file), res);
|
|
40
|
-
errors.push(res);
|
|
41
|
-
} else {
|
|
42
|
-
_bBerLogger.default.info('Syntax valid %s', _path.default.basename(file));
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
await _promise.default.all(check);
|
|
46
|
-
if (!errors.length) {
|
|
47
|
-
_bBerLogger.default.info('Directives valid');
|
|
48
|
-
}
|
|
49
|
-
_bBerLogger.default.info(errors);
|
|
50
|
-
};
|
|
51
|
-
var _default = exports.default = validate;
|
package/dist/web/Template.js
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
|
4
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
5
|
-
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.default = void 0;
|
|
9
|
-
var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
|
|
10
|
-
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
|
|
11
|
-
class Template {
|
|
12
|
-
static header(title) {
|
|
13
|
-
return `
|
|
14
|
-
<header class="publication__header" role="navigation">
|
|
15
|
-
<div class="header__item header__item__toggle header__item__toggle--toc">
|
|
16
|
-
<button class="material-icons">view_list</button>
|
|
17
|
-
</div>
|
|
18
|
-
|
|
19
|
-
<div class="header__item header__item__title">
|
|
20
|
-
<h1>${title}</h1>
|
|
21
|
-
</div>
|
|
22
|
-
|
|
23
|
-
<div class="header__item publication__search">
|
|
24
|
-
<button class="material-icons publication__search__button publication__search__button--open">search</button>
|
|
25
|
-
<input type="text" disabled="disabled" class="publication__search__input" placeholder="" name="s" value="" />
|
|
26
|
-
<button class="material-icons publication__search__button publication__search__button--close">close</button>
|
|
27
|
-
</div>
|
|
28
|
-
|
|
29
|
-
<div class="header__item header__item__toggle header__item__toggle--info">
|
|
30
|
-
<button class="material-icons">info</button>
|
|
31
|
-
</div>
|
|
32
|
-
</header>
|
|
33
|
-
`;
|
|
34
|
-
}
|
|
35
|
-
static metadata(data) {
|
|
36
|
-
return `
|
|
37
|
-
<dl>
|
|
38
|
-
${(0, _reduce.default)(data).call(data, (acc, curr) => (0, _concat.default)(acc).call(acc, `
|
|
39
|
-
<dt>${curr.term}</dt>
|
|
40
|
-
<dd>${curr.value}</dd>
|
|
41
|
-
`), '')}
|
|
42
|
-
</dl>
|
|
43
|
-
`;
|
|
44
|
-
}
|
|
45
|
-
static toc(baseURL, title, content) {
|
|
46
|
-
return `
|
|
47
|
-
<nav class="publication__toc" role="navigation">
|
|
48
|
-
<div class="publication__title">
|
|
49
|
-
<a href="${baseURL}">${title}</a>
|
|
50
|
-
</div>
|
|
51
|
-
${content}
|
|
52
|
-
</nav>
|
|
53
|
-
`;
|
|
54
|
-
}
|
|
55
|
-
static info(content) {
|
|
56
|
-
return `
|
|
57
|
-
<nav class="publication__info" role="navigation">
|
|
58
|
-
${content}
|
|
59
|
-
</nav>
|
|
60
|
-
`;
|
|
61
|
-
}
|
|
62
|
-
static prev(baseURL, href) {
|
|
63
|
-
return `
|
|
64
|
-
<div class="publication__nav__prev">
|
|
65
|
-
<a class="publication__nav__link" href="${baseURL}text/${href}">
|
|
66
|
-
<i class="material-icons">arrow_back</i>
|
|
67
|
-
</a>
|
|
68
|
-
</div>
|
|
69
|
-
`;
|
|
70
|
-
}
|
|
71
|
-
static next(baseURL, href) {
|
|
72
|
-
return `
|
|
73
|
-
<div class="publication__nav__next">
|
|
74
|
-
<a class="publication__nav__link" href="${baseURL}text/${href}">
|
|
75
|
-
<i class="material-icons">arrow_forward</i>
|
|
76
|
-
</a>
|
|
77
|
-
</div>
|
|
78
|
-
`;
|
|
79
|
-
}
|
|
80
|
-
static pagination(prev, next) {
|
|
81
|
-
return `
|
|
82
|
-
<nav class="publication__nav" role="navigation">
|
|
83
|
-
${prev}
|
|
84
|
-
${next}
|
|
85
|
-
</nav>
|
|
86
|
-
`;
|
|
87
|
-
}
|
|
88
|
-
static styles() {
|
|
89
|
-
return `
|
|
90
|
-
<style>
|
|
91
|
-
body { opacity: 0; transition: opacity 250ms ease; }
|
|
92
|
-
body.ready { opacity: 1 !important; }
|
|
93
|
-
</style>
|
|
94
|
-
`;
|
|
95
|
-
}
|
|
96
|
-
static scripts(content) {
|
|
97
|
-
return `
|
|
98
|
-
<script type="text/javascript">
|
|
99
|
-
// <![CDATA[
|
|
100
|
-
${content}
|
|
101
|
-
// ]]>
|
|
102
|
-
</script>
|
|
103
|
-
`;
|
|
104
|
-
}
|
|
105
|
-
static cover(firstPage, coverImageSrc) {
|
|
106
|
-
return `
|
|
107
|
-
<a class="cover__image__link" href="${firstPage}">
|
|
108
|
-
<img class="cover__image" src="${coverImageSrc}" alt="Cover" />
|
|
109
|
-
</a>
|
|
110
|
-
`;
|
|
111
|
-
}
|
|
112
|
-
static robots(isPrivate) {
|
|
113
|
-
return isPrivate ? '<meta name="robots" content="noindex,nofollow"/>' : '<meta name="robots" content="index,follow"/>';
|
|
114
|
-
}
|
|
115
|
-
static body(styleBlock, headerElement) {
|
|
116
|
-
return `
|
|
117
|
-
<body style="opacity: 0;">
|
|
118
|
-
${styleBlock}
|
|
119
|
-
<div class="publication">
|
|
120
|
-
${headerElement}
|
|
121
|
-
<div class="publication__contents">
|
|
122
|
-
`;
|
|
123
|
-
}
|
|
124
|
-
static footer(pageNavigation, tocElement, infoElement, navigationToggleScript, webWorkerScript, evenHandlerScript) {
|
|
125
|
-
return `
|
|
126
|
-
</div> <!-- / .publication__contents -->
|
|
127
|
-
${pageNavigation}
|
|
128
|
-
</div> <!-- / .publication -->
|
|
129
|
-
${tocElement}
|
|
130
|
-
${infoElement}
|
|
131
|
-
${navigationToggleScript}
|
|
132
|
-
${webWorkerScript}
|
|
133
|
-
${evenHandlerScript}
|
|
134
|
-
$1
|
|
135
|
-
`;
|
|
136
|
-
}
|
|
137
|
-
static index(baseURL, robotsMeta, title, styleBlock, tocElement, infoElement, headerElement, coverImage, navigationToggleScript, webWorkerScript) {
|
|
138
|
-
return `
|
|
139
|
-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
140
|
-
<html xmlns="http://www.w3.org/1999/xhtml"
|
|
141
|
-
xmlns:epub="http://www.idpf.org/2007/ops"
|
|
142
|
-
xmlns:ibooks="http://vocabulary.itunes.apple.com/rdf/ibooks/vocabulary-extensions-1.0"
|
|
143
|
-
epub:prefix="ibooks: http://vocabulary.itunes.apple.com/rdf/ibooks/vocabulary-extensions-1.0">
|
|
144
|
-
<meta http-equiv="default-style" content="text/html charset=utf-8"/>
|
|
145
|
-
${robotsMeta}
|
|
146
|
-
<link rel="manifest" type="application/webpub+json" href="${baseURL}manifest.json">
|
|
147
|
-
<link rel="stylesheet" type="text/css" href="${baseURL}stylesheets/application.css"/>
|
|
148
|
-
|
|
149
|
-
<head>
|
|
150
|
-
<title>${title}</title>
|
|
151
|
-
${styleBlock}
|
|
152
|
-
</head>
|
|
153
|
-
<body style="opacity: 0;">
|
|
154
|
-
${tocElement}
|
|
155
|
-
${infoElement}
|
|
156
|
-
<div class="publication">
|
|
157
|
-
${headerElement}
|
|
158
|
-
<div class="publication__contents">
|
|
159
|
-
<section>
|
|
160
|
-
${coverImage}
|
|
161
|
-
</section>
|
|
162
|
-
</div>
|
|
163
|
-
</div>
|
|
164
|
-
${navigationToggleScript}
|
|
165
|
-
${webWorkerScript}
|
|
166
|
-
</body>
|
|
167
|
-
</html>
|
|
168
|
-
`;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
var _default = exports.default = Template;
|
package/dist/web/index.js
DELETED
|
@@ -1,371 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
|
|
4
|
-
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
|
|
5
|
-
var _filterInstanceProperty2 = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
|
|
6
|
-
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
|
7
|
-
var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
|
|
8
|
-
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
|
|
9
|
-
var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
|
|
10
|
-
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
|
11
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
12
|
-
_Object$defineProperty(exports, "__esModule", {
|
|
13
|
-
value: true
|
|
14
|
-
});
|
|
15
|
-
exports.default = void 0;
|
|
16
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
|
17
|
-
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
18
|
-
var _splice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/splice"));
|
|
19
|
-
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
|
|
20
|
-
var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
|
|
21
|
-
var _indexOf = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/index-of"));
|
|
22
|
-
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/json/stringify"));
|
|
23
|
-
var _path = _interopRequireDefault(require("path"));
|
|
24
|
-
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
25
|
-
var _find = _interopRequireDefault(require("lodash/find"));
|
|
26
|
-
var _findIndex = _interopRequireDefault(require("lodash/findIndex"));
|
|
27
|
-
var _has = _interopRequireDefault(require("lodash/has"));
|
|
28
|
-
var _cheerio = _interopRequireDefault(require("cheerio"));
|
|
29
|
-
var _bBerLogger = _interopRequireDefault(require("@canopycanopycanopy/b-ber-logger"));
|
|
30
|
-
var _State = _interopRequireDefault(require("@canopycanopycanopy/b-ber-lib/State"));
|
|
31
|
-
var _bBerLib = require("@canopycanopycanopy/b-ber-lib");
|
|
32
|
-
var _utils = require("@canopycanopycanopy/b-ber-lib/utils");
|
|
33
|
-
var _Toc = _interopRequireDefault(require("@canopycanopycanopy/b-ber-templates/Toc"));
|
|
34
|
-
var _recursiveReaddir = _interopRequireDefault(require("recursive-readdir"));
|
|
35
|
-
var _Template = _interopRequireDefault(require("./Template"));
|
|
36
|
-
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty2(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
37
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context7, _context8; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context7 = ownKeys(Object(t), !0)).call(_context7, function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context8 = ownKeys(Object(t))).call(_context8, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } // Since the file structure for the `web` build is quite different from the
|
|
38
|
-
// other (ebook-style) builds, it's better for maintainability to rearrange
|
|
39
|
-
// the ebook-style directory structure rather than inserting a bunch of
|
|
40
|
-
// conditionals into the various build scripts.
|
|
41
|
-
//
|
|
42
|
-
// This script can also be modularized in the future as an `ebook-to-static-
|
|
43
|
-
// site` module for external use
|
|
44
|
-
let ASSETS_TO_UNLINK;
|
|
45
|
-
let DIST_PATH;
|
|
46
|
-
let OPS_PATH;
|
|
47
|
-
let OMIT_FROM_SEARCH;
|
|
48
|
-
let BASE_URL;
|
|
49
|
-
let flow; // copy of spine for web task, see `WebFlow` below
|
|
50
|
-
|
|
51
|
-
// Class to manage pagination for web layout. when building an epub, figures are
|
|
52
|
-
// handled outside of the spine, mostly so that they can have hashed file names
|
|
53
|
-
// (since they're generated on the fly), and so that the individual figures
|
|
54
|
-
// pages are not listed in the YAML files. the `WebFlow` class creates a new
|
|
55
|
-
// spine by merging in the loi
|
|
56
|
-
class WebFlow {
|
|
57
|
-
constructor({
|
|
58
|
-
spine,
|
|
59
|
-
loi
|
|
60
|
-
}) {
|
|
61
|
-
this.spine = spine;
|
|
62
|
-
this.loi = loi;
|
|
63
|
-
this.prepareLoi();
|
|
64
|
-
this.addFiguresToSpine();
|
|
65
|
-
this.removeNonLinearEntriesFromSpine();
|
|
66
|
-
this.removeTocFromSpine();
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// TODO: the naming scheme for figures is slightly different for figures (the
|
|
70
|
-
// `fileName` property has a file extension). @issue:
|
|
71
|
-
// https://github.com/triplecanopy/b-ber/issues/208
|
|
72
|
-
prepareLoi() {
|
|
73
|
-
var _context;
|
|
74
|
-
this.loi = (0, _map.default)(_context = this.loi).call(_context, a => {
|
|
75
|
-
const b = _objectSpread({}, a);
|
|
76
|
-
b.fileName = b.fileName.replace(/\.xhtml$/, '');
|
|
77
|
-
b.relativePath = b.relativePath.replace(/\.xhtml$/, '');
|
|
78
|
-
return b;
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
getFiguresPageIndex() {
|
|
82
|
-
const fileName = 'figures-titlepage';
|
|
83
|
-
return (0, _findIndex.default)(this.spine.flattened, {
|
|
84
|
-
fileName
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
addFiguresToSpine() {
|
|
88
|
-
var _context2;
|
|
89
|
-
if (!this.loi.length) return;
|
|
90
|
-
const figuresPageIndex = this.getFiguresPageIndex();
|
|
91
|
-
if (figuresPageIndex < 0) return;
|
|
92
|
-
(0, _splice.default)(_context2 = this.spine.flattened).call(_context2, figuresPageIndex + 1, 0, ...this.loi);
|
|
93
|
-
}
|
|
94
|
-
removeNonLinearEntriesFromSpine() {
|
|
95
|
-
var _context3;
|
|
96
|
-
this.spine = (0, _filter.default)(_context3 = this.spine.flattened).call(_context3, a => a.linear);
|
|
97
|
-
}
|
|
98
|
-
removeTocFromSpine() {
|
|
99
|
-
var _context4;
|
|
100
|
-
this.spine = (0, _filter.default)(_context4 = this.spine).call(_context4, a => a.fileName !== 'toc');
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Make sure we're using the correct build variables
|
|
105
|
-
async function initialize() {
|
|
106
|
-
DIST_PATH = _State.default.distDir;
|
|
107
|
-
OPS_PATH = _path.default.join(DIST_PATH, 'OPS');
|
|
108
|
-
BASE_URL = _bBerLib.Url.addTrailingSlash(_State.default.config.base_url);
|
|
109
|
-
ASSETS_TO_UNLINK = [_path.default.join(DIST_PATH, 'mimetype'), _path.default.join(DIST_PATH, 'META-INF'), _path.default.join(DIST_PATH, 'OPS/content.opf'), _path.default.join(DIST_PATH, 'OPS/toc.ncx')];
|
|
110
|
-
|
|
111
|
-
// List of spine item entry `fileName`s
|
|
112
|
-
OMIT_FROM_SEARCH = ['toc'];
|
|
113
|
-
const {
|
|
114
|
-
spine,
|
|
115
|
-
loi
|
|
116
|
-
} = _State.default;
|
|
117
|
-
flow = new WebFlow({
|
|
118
|
-
spine,
|
|
119
|
-
loi
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
async function moveAssetsToRootDirctory() {
|
|
123
|
-
const files = _fsExtra.default.readdirSync(OPS_PATH);
|
|
124
|
-
const dirs = (0, _filter.default)(files).call(files, file => file.charAt(0) !== '.' && _fsExtra.default.statSync(_path.default.join(OPS_PATH, file)).isDirectory());
|
|
125
|
-
const promises = (0, _map.default)(dirs).call(dirs, dir => {
|
|
126
|
-
const from = _path.default.join(OPS_PATH, dir);
|
|
127
|
-
const to = _path.default.join(DIST_PATH, dir);
|
|
128
|
-
_bBerLogger.default.info('Moving [%s]', dir);
|
|
129
|
-
return _fsExtra.default.move(from, to);
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
// Remove the OPS dir once all the moving assets have been moved
|
|
133
|
-
await _promise.default.all(promises);
|
|
134
|
-
return _fsExtra.default.remove(OPS_PATH);
|
|
135
|
-
}
|
|
136
|
-
function unlinkRedundantAssets() {
|
|
137
|
-
const promises = (0, _map.default)(ASSETS_TO_UNLINK).call(ASSETS_TO_UNLINK, file => {
|
|
138
|
-
_bBerLogger.default.info('Removing [%s]', _path.default.basename(file));
|
|
139
|
-
return _fsExtra.default.remove(file);
|
|
140
|
-
});
|
|
141
|
-
return _promise.default.all(promises);
|
|
142
|
-
}
|
|
143
|
-
function getProjectTitle() {
|
|
144
|
-
let title = '';
|
|
145
|
-
const titleEntry = (0, _utils.getBookMetadata)('title', _State.default);
|
|
146
|
-
if (titleEntry && titleEntry.value) {
|
|
147
|
-
title = titleEntry.value;
|
|
148
|
-
}
|
|
149
|
-
return title;
|
|
150
|
-
}
|
|
151
|
-
function getChapterTitle(fileName) {
|
|
152
|
-
if (typeof fileName !== 'string') return getProjectTitle();
|
|
153
|
-
const meta = _State.default.spine.frontMatter.get(fileName);
|
|
154
|
-
if (!(meta !== null && meta !== void 0 && meta.title)) return getProjectTitle();
|
|
155
|
-
return meta.title;
|
|
156
|
-
}
|
|
157
|
-
function getProjectMetadataHTML() {
|
|
158
|
-
return _Template.default.metadata(_State.default.metadata.json());
|
|
159
|
-
}
|
|
160
|
-
function getHeaderElement(fileName) {
|
|
161
|
-
const title = getChapterTitle(fileName);
|
|
162
|
-
return _Template.default.header(title);
|
|
163
|
-
}
|
|
164
|
-
function createNavigationElement() {
|
|
165
|
-
const {
|
|
166
|
-
toc: prevToc
|
|
167
|
-
} = _State.default;
|
|
168
|
-
|
|
169
|
-
// Filter out toc entry if it exists
|
|
170
|
-
const toc = (0, _filter.default)(prevToc).call(prevToc, item => item.fileName !== 'toc');
|
|
171
|
-
const tocHTML = _Toc.default.items(toc).replace(/a href="/g, `a href="${BASE_URL}`);
|
|
172
|
-
const metadataHTML = getProjectMetadataHTML();
|
|
173
|
-
const title = getProjectTitle();
|
|
174
|
-
const tocElement = _Template.default.toc(BASE_URL, title, tocHTML);
|
|
175
|
-
const infoElement = _Template.default.info(metadataHTML);
|
|
176
|
-
return {
|
|
177
|
-
tocElement,
|
|
178
|
-
infoElement
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
function buttonPrev(filePath) {
|
|
182
|
-
const fileName = _path.default.basename(filePath, '.xhtml');
|
|
183
|
-
const index = (0, _findIndex.default)(flow.spine, {
|
|
184
|
-
fileName
|
|
185
|
-
});
|
|
186
|
-
const prevIndex = index - 1;
|
|
187
|
-
let html = '';
|
|
188
|
-
if (index > -1 && flow.spine[prevIndex]) {
|
|
189
|
-
const href = `${flow.spine[prevIndex].fileName}.xhtml`;
|
|
190
|
-
html = _Template.default.prev(BASE_URL, href);
|
|
191
|
-
}
|
|
192
|
-
return html;
|
|
193
|
-
}
|
|
194
|
-
function buttonNext(filePath) {
|
|
195
|
-
const fileName = _path.default.basename(filePath, '.xhtml');
|
|
196
|
-
const index = (0, _findIndex.default)(flow.spine, {
|
|
197
|
-
fileName
|
|
198
|
-
});
|
|
199
|
-
const nextIndex = index + 1;
|
|
200
|
-
let html = '';
|
|
201
|
-
if (index > -1 && flow.spine[nextIndex]) {
|
|
202
|
-
const href = `${flow.spine[nextIndex].fileName}.xhtml`;
|
|
203
|
-
html = _Template.default.next(BASE_URL, href);
|
|
204
|
-
}
|
|
205
|
-
return html;
|
|
206
|
-
}
|
|
207
|
-
function paginate(filePath) {
|
|
208
|
-
return {
|
|
209
|
-
prev: buttonPrev(filePath),
|
|
210
|
-
next: buttonNext(filePath)
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
function paginationNavigation(filePath) {
|
|
214
|
-
const {
|
|
215
|
-
prev,
|
|
216
|
-
next
|
|
217
|
-
} = paginate(filePath);
|
|
218
|
-
return _Template.default.pagination(prev, next);
|
|
219
|
-
}
|
|
220
|
-
function injectBaseURL(script) {
|
|
221
|
-
const script_ = typeof script === 'string' ? script : String(script);
|
|
222
|
-
return Buffer.from(script_.replace(/%BASE_URL%/g, BASE_URL));
|
|
223
|
-
}
|
|
224
|
-
function getStyleBlock() {
|
|
225
|
-
return _Template.default.styles();
|
|
226
|
-
}
|
|
227
|
-
function getNavigationToggleScript() {
|
|
228
|
-
const content = injectBaseURL(_fsExtra.default.readFileSync(_path.default.join(__dirname, 'navigation.js')));
|
|
229
|
-
return _Template.default.scripts(content);
|
|
230
|
-
}
|
|
231
|
-
function getWebWorkerScript() {
|
|
232
|
-
const content = injectBaseURL(_fsExtra.default.readFileSync(_path.default.join(__dirname, 'search.js')));
|
|
233
|
-
return _Template.default.scripts(content);
|
|
234
|
-
}
|
|
235
|
-
function getEventHandlerScript() {
|
|
236
|
-
const content = injectBaseURL(_fsExtra.default.readFileSync(_path.default.join(__dirname, 'event-handlers.js')));
|
|
237
|
-
return _Template.default.scripts(content);
|
|
238
|
-
}
|
|
239
|
-
function injectPageElementsIntoFile(filePath) {
|
|
240
|
-
const {
|
|
241
|
-
tocElement,
|
|
242
|
-
infoElement
|
|
243
|
-
} = createNavigationElement();
|
|
244
|
-
const pageNavigation = paginationNavigation(filePath);
|
|
245
|
-
const styleBlock = getStyleBlock();
|
|
246
|
-
const navigationToggleScript = getNavigationToggleScript();
|
|
247
|
-
const webWorkerScript = getWebWorkerScript();
|
|
248
|
-
const evenHandlerScript = getEventHandlerScript();
|
|
249
|
-
const headerElement = getHeaderElement(_path.default.basename(filePath, _path.default.extname(filePath)));
|
|
250
|
-
_bBerLogger.default.info(`Adding pagination to ${_path.default.basename(filePath)}`);
|
|
251
|
-
const data = _fsExtra.default.readFileSync(filePath, 'utf8');
|
|
252
|
-
|
|
253
|
-
// Prepare to modify publication content
|
|
254
|
-
let contents;
|
|
255
|
-
|
|
256
|
-
// Prepend the dynamically generated elements to body, adding a
|
|
257
|
-
// wrapper around the main publication content. this allows us to
|
|
258
|
-
// create a sliding nav, fixed header, etc.
|
|
259
|
-
contents = data.replace(/(<body[^>]*?>)/, _Template.default.body(styleBlock, headerElement));
|
|
260
|
-
|
|
261
|
-
// Close the wrapper element, adding a little javascript for the
|
|
262
|
-
// navigation toggle. should be moved to core when stable
|
|
263
|
-
contents = contents.replace(/(<\/body>)/, _Template.default.footer(pageNavigation, tocElement, infoElement, navigationToggleScript, webWorkerScript, evenHandlerScript));
|
|
264
|
-
_bBerLogger.default.info(`web writing ${_path.default.basename(filePath)}`);
|
|
265
|
-
return _fsExtra.default.writeFile(filePath, contents);
|
|
266
|
-
}
|
|
267
|
-
function injectPageElementsIntoFiles(elements) {
|
|
268
|
-
var _context5;
|
|
269
|
-
const textPath = _path.default.join(DIST_PATH, 'text');
|
|
270
|
-
const files = (0, _filter.default)(_context5 = _fsExtra.default.readdirSync(textPath)).call(_context5, file => _path.default.extname(file) === '.xhtml');
|
|
271
|
-
const promises = (0, _map.default)(files).call(files, file => {
|
|
272
|
-
const filePath = _path.default.resolve(textPath, file);
|
|
273
|
-
return injectPageElementsIntoFile(filePath, elements);
|
|
274
|
-
});
|
|
275
|
-
return _promise.default.all(promises).then(() => elements);
|
|
276
|
-
}
|
|
277
|
-
function indexPageContent() {
|
|
278
|
-
var _context6;
|
|
279
|
-
const {
|
|
280
|
-
spine
|
|
281
|
-
} = flow;
|
|
282
|
-
const records = [];
|
|
283
|
-
let fileIndex = -1;
|
|
284
|
-
const promises = (0, _map.default)(_context6 = (0, _filter.default)(spine).call(spine, a => (0, _indexOf.default)(OMIT_FROM_SEARCH).call(OMIT_FROM_SEARCH, a.fileName) < 0)).call(_context6, entry => _fsExtra.default.readFile(_path.default.join(OPS_PATH, `${entry.relativePath}.xhtml`), 'utf8').then(data => {
|
|
285
|
-
const $ = _cheerio.default.load(data);
|
|
286
|
-
const title = $('h1,h2,h3,h4,h5,h6').first().text();
|
|
287
|
-
const body = $('body').text();
|
|
288
|
-
const url = `${BASE_URL}text/${entry.fileName}.xhtml`;
|
|
289
|
-
fileIndex += 1;
|
|
290
|
-
records.push({
|
|
291
|
-
id: fileIndex,
|
|
292
|
-
title,
|
|
293
|
-
body,
|
|
294
|
-
url
|
|
295
|
-
});
|
|
296
|
-
}));
|
|
297
|
-
return _promise.default.all(promises).then(() => (0, _stringify.default)(records));
|
|
298
|
-
}
|
|
299
|
-
function writeJSONPageData(json) {
|
|
300
|
-
return _fsExtra.default.writeFile(_path.default.join(DIST_PATH, 'search-index.json'), json);
|
|
301
|
-
}
|
|
302
|
-
function importVendorScripts() {
|
|
303
|
-
const lunrPath = require.resolve('lunr');
|
|
304
|
-
const outputPath = _path.default.join(DIST_PATH, 'lunr.js');
|
|
305
|
-
return _fsExtra.default.copy(lunrPath, outputPath);
|
|
306
|
-
}
|
|
307
|
-
function writeWebWorker() {
|
|
308
|
-
const worker = injectBaseURL(_fsExtra.default.readFileSync(_path.default.join(__dirname, 'worker.js')));
|
|
309
|
-
return _fsExtra.default.writeFile(_path.default.join(DIST_PATH, 'worker.js'), worker);
|
|
310
|
-
}
|
|
311
|
-
function writeWebpubManifest() {
|
|
312
|
-
return new _promise.default((resolve, reject) => {
|
|
313
|
-
(0, _recursiveReaddir.default)(_State.default.distDir, (err1, files) => {
|
|
314
|
-
if (err1) reject(err1);
|
|
315
|
-
const manifest = (0, _utils.generateWebpubManifest)(files);
|
|
316
|
-
_fsExtra.default.writeJson(_path.default.join(DIST_PATH, 'manifest.json'), manifest).then(resolve);
|
|
317
|
-
});
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
// subtracts 1 from `n` argument since `getPage` refrerences state.spine,
|
|
322
|
-
// which is 0-indexed
|
|
323
|
-
function getPage(_n = -1) {
|
|
324
|
-
const n = _n - 1;
|
|
325
|
-
const url = `${BASE_URL}text/${flow.spine[n].fileName}.xhtml`;
|
|
326
|
-
return url;
|
|
327
|
-
}
|
|
328
|
-
function getFirstPage() {
|
|
329
|
-
return getPage(1);
|
|
330
|
-
}
|
|
331
|
-
function getCoverImage() {
|
|
332
|
-
const metadata = _State.default.metadata.json();
|
|
333
|
-
const coverEntry = (0, _find.default)(metadata, {
|
|
334
|
-
term: 'cover'
|
|
335
|
-
});
|
|
336
|
-
const firstPage = getFirstPage();
|
|
337
|
-
let coverImageSrc = 'images/';
|
|
338
|
-
if (coverEntry && (0, _has.default)(coverEntry, 'value')) {
|
|
339
|
-
coverImageSrc += coverEntry.value;
|
|
340
|
-
}
|
|
341
|
-
return _Template.default.cover(firstPage, coverImageSrc);
|
|
342
|
-
}
|
|
343
|
-
function createIndexHTML() {
|
|
344
|
-
const {
|
|
345
|
-
tocElement,
|
|
346
|
-
infoElement
|
|
347
|
-
} = createNavigationElement();
|
|
348
|
-
const title = getProjectTitle();
|
|
349
|
-
const coverImage = getCoverImage();
|
|
350
|
-
const navigationToggleScript = getNavigationToggleScript();
|
|
351
|
-
const webWorkerScript = getWebWorkerScript();
|
|
352
|
-
const headerElement = getHeaderElement();
|
|
353
|
-
const styleBlock = getStyleBlock();
|
|
354
|
-
const robotsMeta = _Template.default.robots(_State.default.config.private);
|
|
355
|
-
|
|
356
|
-
// TODO: should get dynamic page template here to ensure asset hash on production build
|
|
357
|
-
// @issue: https://github.com/triplecanopy/b-ber/issues/232
|
|
358
|
-
const indexHTML = _Template.default.index(BASE_URL, robotsMeta, title, styleBlock, tocElement, infoElement, headerElement, coverImage, navigationToggleScript, webWorkerScript);
|
|
359
|
-
return _fsExtra.default.writeFile(_path.default.resolve(DIST_PATH, 'index.html'), indexHTML);
|
|
360
|
-
}
|
|
361
|
-
const web = () => initialize().then(unlinkRedundantAssets)
|
|
362
|
-
|
|
363
|
-
// Create search index
|
|
364
|
-
.then(indexPageContent).then(writeJSONPageData)
|
|
365
|
-
|
|
366
|
-
// move files to root directory and create an index.html
|
|
367
|
-
.then(moveAssetsToRootDirctory).then(injectPageElementsIntoFiles).then(createIndexHTML)
|
|
368
|
-
|
|
369
|
-
// write scripts into HTML files
|
|
370
|
-
.then(importVendorScripts).then(writeWebpubManifest).then(writeWebWorker).catch(_bBerLogger.default.error);
|
|
371
|
-
var _default = exports.default = web;
|
package/dist/xml/index.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
|
4
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
5
|
-
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.default = void 0;
|
|
9
|
-
var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
|
|
10
|
-
var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
|
|
11
|
-
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
|
|
12
|
-
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
|
|
13
|
-
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
14
|
-
var _splice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/splice"));
|
|
15
|
-
var _path = _interopRequireDefault(require("path"));
|
|
16
|
-
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
17
|
-
var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
|
|
18
|
-
var _isString = _interopRequireDefault(require("lodash/isString"));
|
|
19
|
-
var _findIndex = _interopRequireDefault(require("lodash/findIndex"));
|
|
20
|
-
var _bBerLogger = _interopRequireDefault(require("@canopycanopycanopy/b-ber-logger"));
|
|
21
|
-
var _HtmlToXml = _interopRequireDefault(require("@canopycanopycanopy/b-ber-lib/HtmlToXml"));
|
|
22
|
-
var _State = _interopRequireDefault(require("@canopycanopycanopy/b-ber-lib/State"));
|
|
23
|
-
var _utils = require("@canopycanopycanopy/b-ber-lib/utils");
|
|
24
|
-
const fileExtension = '.xhtml';
|
|
25
|
-
const writeXML = str => {
|
|
26
|
-
const cwd = process.cwd();
|
|
27
|
-
const uuid = (0, _utils.getBookMetadata)('identifier', _State.default);
|
|
28
|
-
const filePath = _path.default.join(cwd, `${uuid}.xml`);
|
|
29
|
-
return _fsExtra.default.writeFile(filePath, str, 'utf8');
|
|
30
|
-
};
|
|
31
|
-
const parseHTMLFiles = files => new _promise.default(resolve => {
|
|
32
|
-
const content = (0, _reduce.default)(files).call(files, (acc, curr) => {
|
|
33
|
-
const filePath = (0, _isPlainObject.default)(curr) ? (0, _keys.default)(curr)[0] : (0, _isString.default)(curr) ? curr : null;
|
|
34
|
-
if (!filePath) return acc;
|
|
35
|
-
const data = _fsExtra.default.readFileSync(filePath, 'utf8');
|
|
36
|
-
return (0, _concat.default)(acc).call(acc, `${data}`);
|
|
37
|
-
}, []).join('<pagebreak></pagebreak>');
|
|
38
|
-
const parser = new _HtmlToXml.default({
|
|
39
|
-
content,
|
|
40
|
-
onEndCallback: resolve
|
|
41
|
-
});
|
|
42
|
-
parser.parse();
|
|
43
|
-
});
|
|
44
|
-
const xml = () => {
|
|
45
|
-
let files = [..._State.default.spine.flattened];
|
|
46
|
-
const figuresTitlePageIndex = (0, _findIndex.default)(files, {
|
|
47
|
-
fileName: 'figures-titlepage'
|
|
48
|
-
});
|
|
49
|
-
files = (0, _map.default)(files).call(files, entry => `${entry.absolutePath}${fileExtension}`);
|
|
50
|
-
if (figuresTitlePageIndex > -1 && _State.default.loi.length) {
|
|
51
|
-
var _context;
|
|
52
|
-
const loi = (0, _map.default)(_context = _State.default.loi).call(_context, entry => entry.absolutePath);
|
|
53
|
-
(0, _splice.default)(files).call(files, figuresTitlePageIndex + 1, 0, ...loi);
|
|
54
|
-
}
|
|
55
|
-
return parseHTMLFiles(files).then(writeXML).catch(_bBerLogger.default.error);
|
|
56
|
-
};
|
|
57
|
-
var _default = exports.default = xml;
|