UNPKG

8.28 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = void 0;
9
10var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
12var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
14var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
16var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
18var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
20var _eventEmitter = _interopRequireDefault(require("event-emitter"));
21
22var _hook = _interopRequireDefault(require("../utils/hook"));
23
24var _chunker = _interopRequireDefault(require("../chunker/chunker"));
25
26var _polisher = _interopRequireDefault(require("../polisher/polisher"));
27
28var _handlers = require("../utils/handlers");
29
30function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
31
32function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
33
34function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
35
36var Previewer = /*#__PURE__*/function () {
37 function Previewer(options) {
38 var _this = this;
39
40 (0, _classCallCheck2["default"])(this, Previewer);
41 // this.preview = this.getParams("preview") !== "false";
42 this.settings = options || {}; // Process styles
43
44 this.polisher = new _polisher["default"](false); // Chunk contents
45
46 this.chunker = new _chunker["default"](undefined, undefined, this.settings); // Hooks
47
48 this.hooks = {};
49 this.hooks.beforePreview = new _hook["default"](this);
50 this.hooks.afterPreview = new _hook["default"](this); // default size
51
52 this.size = {
53 width: {
54 value: 8.5,
55 unit: "in"
56 },
57 height: {
58 value: 11,
59 unit: "in"
60 },
61 format: undefined,
62 orientation: undefined
63 };
64 this.chunker.on("page", function (page) {
65 _this.emit("page", page);
66 });
67 this.chunker.on("rendering", function () {
68 _this.emit("rendering", _this.chunker);
69 });
70 }
71
72 (0, _createClass2["default"])(Previewer, [{
73 key: "initializeHandlers",
74 value: function initializeHandlers() {
75 var _this2 = this;
76
77 var handlers = (0, _handlers.initializeHandlers)(this.chunker, this.polisher, this);
78 handlers.on("size", function (size) {
79 _this2.size = size;
80
81 _this2.emit("size", size);
82 });
83 handlers.on("atpages", function (pages) {
84 _this2.atpages = pages;
85
86 _this2.emit("atpages", pages);
87 });
88 return handlers;
89 }
90 }, {
91 key: "registerHandlers",
92 value: function registerHandlers() {
93 return _handlers.registerHandlers.apply(_handlers.registerHandlers, arguments);
94 }
95 }, {
96 key: "getParams",
97 value: function getParams(name) {
98 var param;
99 var url = new URL(window.location);
100 var params = new URLSearchParams(url.search);
101
102 var _iterator = _createForOfIteratorHelper(params.entries()),
103 _step;
104
105 try {
106 for (_iterator.s(); !(_step = _iterator.n()).done;) {
107 var pair = _step.value;
108
109 if (pair[0] === name) {
110 param = pair[1];
111 }
112 }
113 } catch (err) {
114 _iterator.e(err);
115 } finally {
116 _iterator.f();
117 }
118
119 return param;
120 }
121 }, {
122 key: "wrapContent",
123 value: function wrapContent() {
124 // Wrap body in template tag
125 var body = document.querySelector("body"); // Check if a template exists
126
127 var template;
128 template = body.querySelector(":scope > template[data-ref='pagedjs-content']");
129
130 if (!template) {
131 // Otherwise create one
132 template = document.createElement("template");
133 template.dataset.ref = "pagedjs-content";
134 template.innerHTML = body.innerHTML;
135 body.innerHTML = "";
136 body.appendChild(template);
137 }
138
139 return template.content;
140 }
141 }, {
142 key: "removeStyles",
143 value: function removeStyles() {
144 var doc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;
145 // Get all stylesheets
146 var stylesheets = Array.from(doc.querySelectorAll("link[rel='stylesheet']"));
147 var hrefs = stylesheets.map(function (sheet) {
148 sheet.remove();
149 return sheet.href;
150 }); // Get inline styles
151
152 var inlineStyles = Array.from(doc.querySelectorAll("style:not([data-pagedjs-inserted-styles])"));
153 inlineStyles.forEach(function (inlineStyle) {
154 var obj = {};
155 obj[window.location.href] = inlineStyle.textContent;
156 hrefs.push(obj);
157 inlineStyle.remove();
158 });
159 return hrefs;
160 }
161 }, {
162 key: "preview",
163 value: function () {
164 var _preview = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(content, stylesheets, renderTo) {
165 var _this$polisher;
166
167 var startTime, flow, endTime;
168 return _regenerator["default"].wrap(function _callee$(_context) {
169 while (1) {
170 switch (_context.prev = _context.next) {
171 case 0:
172 _context.next = 2;
173 return this.hooks.beforePreview.trigger(content, renderTo);
174
175 case 2:
176 if (!content) {
177 content = this.wrapContent();
178 }
179
180 if (!stylesheets) {
181 stylesheets = this.removeStyles();
182 }
183
184 this.polisher.setup();
185 this.handlers = this.initializeHandlers();
186 _context.next = 8;
187 return (_this$polisher = this.polisher).add.apply(_this$polisher, (0, _toConsumableArray2["default"])(stylesheets));
188
189 case 8:
190 startTime = performance.now(); // Render flow
191
192 _context.next = 11;
193 return this.chunker.flow(content, renderTo);
194
195 case 11:
196 flow = _context.sent;
197 endTime = performance.now();
198 flow.performance = endTime - startTime;
199 flow.size = this.size;
200 this.emit("rendered", flow);
201 _context.next = 18;
202 return this.hooks.afterPreview.trigger(flow.pages);
203
204 case 18:
205 return _context.abrupt("return", flow);
206
207 case 19:
208 case "end":
209 return _context.stop();
210 }
211 }
212 }, _callee, this);
213 }));
214
215 function preview(_x, _x2, _x3) {
216 return _preview.apply(this, arguments);
217 }
218
219 return preview;
220 }()
221 }]);
222 return Previewer;
223}();
224
225(0, _eventEmitter["default"])(Previewer.prototype);
226var _default = Previewer;
227exports["default"] = _default;
\No newline at end of file