ngx-extended-pdf-viewer
Version:
Embedding PDF files in your Angular application. Highly configurable viewer including the toolbar, sidebar, and all the features you're used to.
55 lines • 7.53 kB
JavaScript
export class UnitToPx {
static initElements() {
if (!document) {
return;
}
if (!this.con || !this.el) {
this.con = document.createElement('div');
this.el = document.createElement('div');
}
this.con.style.position = 'absolute';
this.con.style.width = '0';
this.con.style.height = '0';
this.con.style.visibility = 'hidden';
this.con.style.overflow = 'hidden';
this.con.appendChild(this.el);
}
static pxPerUnit(unit) {
if (!this.pxPerUnitCache[unit]) {
if (!this.con || !this.el) {
this.initElements();
}
if (!this.con || !this.el) {
// dummy implementation for server-side rendering
return 1;
}
this.el.style.width = this.sample + unit;
document.body.appendChild(this.con);
const dimension = this.el.getBoundingClientRect();
this.con.parentNode.removeChild(this.con);
this.pxPerUnitCache[unit] = dimension.width / this.sample;
}
return this.pxPerUnitCache[unit];
}
static toPx(length) {
const unitRe = /^\s*([+-]?[\d\.]*)\s*(.*)\s*$/i; // NOSONAR
const match = unitRe.exec(length);
if (match != null && match.length > 2) {
const bare = match[1] === '';
const val = bare ? 1 : Number(match[1]);
const unit = match[2];
const valid = !isNaN(val) && unit;
if (valid) {
return unit === 'px' ? val : this.pxPerUnit(unit) * val;
}
}
throw new TypeError('Error parsing length');
}
}
// cache this.con, el for reused
UnitToPx.con = undefined;
UnitToPx.el = undefined;
// high sample will more accurate?
UnitToPx.sample = 100;
UnitToPx.pxPerUnitCache = {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdC10by1weC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvdW5pdC10by1weC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sUUFBUTtJQVVYLE1BQU0sQ0FBQyxZQUFZO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBWTtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUNyQjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDekIsaURBQWlEO2dCQUNqRCxPQUFPLENBQUMsQ0FBQzthQUNWO1lBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUMzRDtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLGdDQUFnQyxDQUFDLENBQUMsVUFBVTtRQUMzRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztZQUNsQyxJQUFJLEtBQUssRUFBRTtnQkFDVCxPQUFPLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDekQ7U0FDRjtRQUNELE1BQU0sSUFBSSxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM5QyxDQUFDOztBQXhERCxnQ0FBZ0M7QUFDakIsWUFBRyxHQUErQixTQUFTLENBQUM7QUFDNUMsV0FBRSxHQUErQixTQUFTLENBQUM7QUFFMUQsa0NBQWtDO0FBQ1YsZUFBTSxHQUFHLEdBQUcsQ0FBQztBQUV0Qix1QkFBYyxHQUE4QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVW5pdFRvUHgge1xuICAvLyBjYWNoZSB0aGlzLmNvbiwgZWwgZm9yIHJldXNlZFxuICBwcml2YXRlIHN0YXRpYyBjb246IEhUTUxEaXZFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHN0YXRpYyBlbDogSFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgLy8gaGlnaCBzYW1wbGUgd2lsbCBtb3JlIGFjY3VyYXRlP1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBzYW1wbGUgPSAxMDA7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcHhQZXJVbml0Q2FjaGU6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuICBwcml2YXRlIHN0YXRpYyBpbml0RWxlbWVudHMoKTogdm9pZCB7XG4gICAgaWYgKCFkb2N1bWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29uIHx8ICF0aGlzLmVsKSB7XG4gICAgICB0aGlzLmNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGhpcy5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIH1cbiAgICB0aGlzLmNvbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgdGhpcy5jb24uc3R5bGUud2lkdGggPSAnMCc7XG4gICAgdGhpcy5jb24uc3R5bGUuaGVpZ2h0ID0gJzAnO1xuICAgIHRoaXMuY29uLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICB0aGlzLmNvbi5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIHRoaXMuY29uLmFwcGVuZENoaWxkKHRoaXMuZWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcHhQZXJVbml0KHVuaXQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLnB4UGVyVW5pdENhY2hlW3VuaXRdKSB7XG4gICAgICBpZiAoIXRoaXMuY29uIHx8ICF0aGlzLmVsKSB7XG4gICAgICAgIHRoaXMuaW5pdEVsZW1lbnRzKCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY29uIHx8ICF0aGlzLmVsKSB7XG4gICAgICAgIC8vIGR1bW15IGltcGxlbWVudGF0aW9uIGZvciBzZXJ2ZXItc2lkZSByZW5kZXJpbmdcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICB0aGlzLmVsLnN0eWxlLndpZHRoID0gdGhpcy5zYW1wbGUgKyB1bml0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbik7XG4gICAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5jb24ucGFyZW50Tm9kZSEucmVtb3ZlQ2hpbGQodGhpcy5jb24pO1xuICAgICAgdGhpcy5weFBlclVuaXRDYWNoZVt1bml0XSA9IGRpbWVuc2lvbi53aWR0aCAvIHRoaXMuc2FtcGxlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5weFBlclVuaXRDYWNoZVt1bml0XTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdG9QeChsZW5ndGgpOiBudW1iZXIge1xuICAgIGNvbnN0IHVuaXRSZSA9IC9eXFxzKihbKy1dP1tcXGRcXC5dKilcXHMqKC4qKVxccyokL2k7IC8vIE5PU09OQVJcbiAgICBjb25zdCBtYXRjaCA9IHVuaXRSZS5leGVjKGxlbmd0aCk7XG4gICAgaWYgKG1hdGNoICE9IG51bGwgJiYgbWF0Y2gubGVuZ3RoID4gMikge1xuICAgICAgY29uc3QgYmFyZSA9IG1hdGNoWzFdID09PSAnJztcbiAgICAgIGNvbnN0IHZhbCA9IGJhcmUgPyAxIDogTnVtYmVyKG1hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXQgPSBtYXRjaFsyXTtcbiAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbCkgJiYgdW5pdDtcbiAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICByZXR1cm4gdW5pdCA9PT0gJ3B4JyA/IHZhbCA6IHRoaXMucHhQZXJVbml0KHVuaXQpICogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFcnJvciBwYXJzaW5nIGxlbmd0aCcpO1xuICB9XG59XG4iXX0=