react-application-core
Version:
A react-based application core for the business applications.
239 lines • 8.74 kB
JavaScript
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GenericPdfPlugin = void 0;
var R = require("ramda");
var Promise = require("bluebird");
var pdfjsLib = require("pdfjs-dist");
var ts_smart_logger_1 = require("ts-smart-logger");
var util_1 = require("../../../util");
var di_1 = require("../../../di");
var GenericPdfPlugin = /** @class */ (function () {
/**
* @stable [23.03.2020]
* @param {string} workerSrc
* @param {() => HTMLCanvasElement} canvasResolver
* @param {(callback: (page: IPdfViewerPageEntity) => void) => void} onFinish
*/
function GenericPdfPlugin(workerSrc, canvasResolver, onFinish) {
this.workerSrc = workerSrc;
this.canvasResolver = canvasResolver;
this.onFinish = onFinish;
this.autoScale = true;
this.page = 1;
this.onLoadError = this.onLoadError.bind(this);
this.onLoadPage = this.onLoadPage.bind(this);
this.onLoad = this.onLoad.bind(this);
pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc;
}
/**
* @stable [23.03.2020]
* @param {() => void} onStart
* @returns {IGenericPdfPlugin}
*/
GenericPdfPlugin.prototype.setOnStart = function (onStart) {
this.onStart = onStart;
return this;
};
/**
* @stable [23.03.2020]
* @param {(error: AnyT) => void} onError
* @returns {IGenericPdfPlugin}
*/
GenericPdfPlugin.prototype.setOnError = function (onError) {
this.onError = onError;
return this;
};
/**
* @stable [14.11.2018]
* @param {number} page
* @returns {IGenericPdfPlugin}
*/
GenericPdfPlugin.prototype.setPage = function (page) {
this.page = page;
return this;
};
/**
* @stable [14.11.2018]
* @param {string} src
* @returns {IGenericPdfPlugin}
*/
GenericPdfPlugin.prototype.setSrc = function (src) {
this.src = src;
return this;
};
/**
* @stable [14.11.2018]
* @param {number} scale
* @returns {IGenericPdfPlugin}
*/
GenericPdfPlugin.prototype.setScale = function (scale) {
this.scale = scale;
return this;
};
/**
* @stable [23.03.2020]
* @param {boolean} autoScale
* @returns {IGenericPdfPlugin}
*/
GenericPdfPlugin.prototype.setAutoScale = function (autoScale) {
this.autoScale = autoScale;
return this;
};
/**
* @stable [14.11.2018]
*/
GenericPdfPlugin.prototype.loadDocument = function () {
this.cancel();
if (!this.src) {
GenericPdfPlugin.logger.warn('[$GenericPdfPlugin][loadDocument] The src is not defined!');
return;
}
if (util_1.isFn(this.onStart)) {
this.onStart();
}
this.loadTask = Promise.resolve(pdfjsLib.getDocument(this.src).promise)
.then(this.onLoad, this.onLoadError);
};
/**
* @stable [18.03.2020]
*/
GenericPdfPlugin.prototype.refreshPage = function () {
var _this = this;
if (!this.hasLoadedDocument) {
GenericPdfPlugin.logger.warn('[$GenericPdfPlugin][refreshPage] The document is not defined!');
return;
}
this.loadPageTask = new Promise(function (resolve, reject) {
return _this.loadedDocument.getPage(_this.page).then(resolve, reject);
}).then(function (page) { return _this.onFinish(function () { return _this.onLoadPage(page); }); }, this.onLoadError);
};
Object.defineProperty(GenericPdfPlugin.prototype, "hasLoadedDocument", {
/**
* @stable [18.03.2020]
* @returns {boolean}
*/
get: function () {
return !R.isNil(this.loadedDocument);
},
enumerable: false,
configurable: true
});
Object.defineProperty(GenericPdfPlugin.prototype, "pagesCount", {
/**
* @stable [23.03.2020]
* @returns {number}
*/
get: function () {
return this.loadedDocument.numPages;
},
enumerable: false,
configurable: true
});
/**
* @stable [14.11.2018]
*/
GenericPdfPlugin.prototype.cancel = function () {
this.cancelTask();
this.cancelPageTask();
this.initialScale = null;
this.loadTask = null;
this.loadPageTask = null;
this.loadedDocument = null;
};
/**
* @stable [14.11.2018]
* @param {IPdfViewerDocumentEntity} pdf
* @returns {IPdfViewerDocumentEntity}
*/
GenericPdfPlugin.prototype.onLoad = function (pdf) {
this.loadedDocument = pdf;
this.refreshPage();
return pdf;
};
/**
* @stable [14.11.2018]
* @param {IPdfViewerPageEntity} page
* @returns {IPdfViewerPageEntity}
*/
GenericPdfPlugin.prototype.onLoadPage = function (page) {
var renderArea = this.renderArea;
var w = this.domAccessor.getWidth(renderArea.parentElement);
var h = this.domAccessor.getHeight(renderArea.parentElement);
var unscaledViewport = page.getViewport(GenericPdfPlugin.DEFAULT_VIEWPORT_SCALE);
var outerScale = this.scale;
var hasOuterScale = util_1.TypeUtils.isNumber(this.scale);
if (this.autoScale) {
this.initialScale = R.isNil(this.initialScale)
? Math.min(h / unscaledViewport.height, w / unscaledViewport.width)
: this.initialScale;
}
else {
this.initialScale = 0;
}
var viewport = page.getViewport(this.initialScale + (hasOuterScale ? outerScale : 0));
var canvasContext = renderArea.getContext('2d');
renderArea.height = hasOuterScale ? viewport.height : h;
renderArea.width = hasOuterScale ? viewport.width : w;
page.render({ canvasContext: canvasContext, viewport: viewport });
return page;
};
/**
* @stable [14.11.2018]
* @param {AnyT} error
* @returns {AnyT}
*/
GenericPdfPlugin.prototype.onLoadError = function (error) {
GenericPdfPlugin.logger.error("[$GenericPdfPlugin][onLoadError] Error:", error);
if (util_1.isFn(this.onError)) {
this.onError(error);
}
return error;
};
/**
* @stable [14.11.2018]
*/
GenericPdfPlugin.prototype.cancelTask = function () {
if (this.loadTask && this.loadTask.isPending()) {
this.loadTask.cancel();
GenericPdfPlugin.logger.warn("[$GenericPdfPlugin][cancelTask] The pdf task has been cancelled.");
}
};
/**
* @stable [14.11.2018]
*/
GenericPdfPlugin.prototype.cancelPageTask = function () {
if (this.loadPageTask && this.loadPageTask.isPending()) {
this.loadPageTask.cancel();
GenericPdfPlugin.logger.warn("[$GenericPdfPlugin][cancelPageTask] The pdf page task has been cancelled.");
}
};
Object.defineProperty(GenericPdfPlugin.prototype, "renderArea", {
/**
* @stable [14.11.2018]
* @returns {HTMLCanvasElement}
*/
get: function () {
return this.canvasResolver();
},
enumerable: false,
configurable: true
});
GenericPdfPlugin.logger = ts_smart_logger_1.LoggerFactory.makeLogger('GenericPdfPlugin');
GenericPdfPlugin.DEFAULT_VIEWPORT_SCALE = 1;
__decorate([
di_1.lazyInject(di_1.DI_TYPES.DomAccessor),
__metadata("design:type", Object)
], GenericPdfPlugin.prototype, "domAccessor", void 0);
return GenericPdfPlugin;
}());
exports.GenericPdfPlugin = GenericPdfPlugin;
//# sourceMappingURL=generic-pdf.plugin.js.map