UNPKG

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.

63 lines 9.66 kB
export class UnitToPx { // cache this.con, el for reused static con = undefined; static el = undefined; // high sample will more accurate? static sample = 100; static pxPerUnitCache = {}; 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] === undefined) { if (!this.con || !this.el) { this.initElements(); } if (!this.con || !this.el) { // dummy implementation for server-side rendering this.pxPerUnitCache[unit] = 1; 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) { if (length == null || length === '') { throw new TypeError('Error parsing length'); } const unitRe = /^\s*([+-]?[\d\.]*)\s*(.*?)\s*$/i; // NOSONAR - trim trailing whitespace too 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].trim(); // Explicitly trim the unit const valid = !isNaN(val) && unit && (bare || match[1] !== 'NaN'); // Validate that we have a proper unit (known CSS units) const knownUnits = ['px', 'em', 'rem', 'pt', 'pc', 'in', 'cm', 'mm', '%', 'vh', 'vw', 'ex', 'ch']; const hasValidUnit = knownUnits.includes(unit); // Only allow bare units (like "px" without number) for known units if (valid && hasValidUnit) { return unit === 'px' ? val : this.pxPerUnit(unit) * val; } } throw new TypeError('Error parsing length'); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdC10by1weC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvdW5pdC10by1weC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sUUFBUTtJQUNuQixnQ0FBZ0M7SUFDeEIsTUFBTSxDQUFDLEdBQUcsR0FBK0IsU0FBUyxDQUFDO0lBQ25ELE1BQU0sQ0FBQyxFQUFFLEdBQStCLFNBQVMsQ0FBQztJQUUxRCxrQ0FBa0M7SUFDMUIsTUFBTSxDQUFVLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFFN0IsTUFBTSxDQUFDLGNBQWMsR0FBOEIsRUFBRSxDQUFDO0lBRXRELE1BQU0sQ0FBQyxZQUFZO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxD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QUFHLEdBQUcsQ0FBQzthQUN6RDtTQUNGO1FBQ0QsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVW5pdFRvUHgge1xuICAvLyBjYWNoZSB0aGlzLmNvbiwgZWwgZm9yIHJldXNlZFxuICBwcml2YXRlIHN0YXRpYyBjb246IEhUTUxEaXZFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHN0YXRpYyBlbDogSFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgLy8gaGlnaCBzYW1wbGUgd2lsbCBtb3JlIGFjY3VyYXRlP1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBzYW1wbGUgPSAxMDA7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcHhQZXJVbml0Q2FjaGU6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuICBwcml2YXRlIHN0YXRpYyBpbml0RWxlbWVudHMoKTogdm9pZCB7XG4gICAgaWYgKCFkb2N1bWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29uIHx8ICF0aGlzLmVsKSB7XG4gICAgICB0aGlzLmNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGhpcy5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIH1cbiAgICB0aGlzLmNvbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgdGhpcy5jb24uc3R5bGUud2lkdGggPSAnMCc7XG4gICAgdGhpcy5jb24uc3R5bGUuaGVpZ2h0ID0gJzAnO1xuICAgIHRoaXMuY29uLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICB0aGlzLmNvbi5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIHRoaXMuY29uLmFwcGVuZENoaWxkKHRoaXMuZWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcHhQZXJVbml0KHVuaXQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMucHhQZXJVbml0Q2FjaGVbdW5pdF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCF0aGlzLmNvbiB8fCAhdGhpcy5lbCkge1xuICAgICAgICB0aGlzLmluaXRFbGVtZW50cygpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmNvbiB8fCAhdGhpcy5lbCkge1xuICAgICAgICAvLyBkdW1teSBpbXBsZW1lbnRhdGlvbiBmb3Igc2VydmVyLXNpZGUgcmVuZGVyaW5nXG4gICAgICAgIHRoaXMucHhQZXJVbml0Q2FjaGVbdW5pdF0gPSAxO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWwuc3R5bGUud2lkdGggPSB0aGlzLnNhbXBsZSArIHVuaXQ7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29uKTtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLmNvbi5wYXJlbnROb2RlIS5yZW1vdmVDaGlsZCh0aGlzLmNvbik7XG4gICAgICB0aGlzLnB4UGVyVW5pdENhY2hlW3VuaXRdID0gZGltZW5zaW9uLndpZHRoIC8gdGhpcy5zYW1wbGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnB4UGVyVW5pdENhY2hlW3VuaXRdO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB0b1B4KGxlbmd0aCk6IG51bWJlciB7XG4gICAgaWYgKGxlbmd0aCA9PSBudWxsIHx8IGxlbmd0aCA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Vycm9yIHBhcnNpbmcgbGVuZ3RoJyk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHVuaXRSZSA9IC9eXFxzKihbKy1dP1tcXGRcXC5dKilcXHMqKC4qPylcXHMqJC9pOyAvLyBOT1NPTkFSIC0gdHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlIHRvb1xuICAgIGNvbnN0IG1hdGNoID0gdW5pdFJlLmV4ZWMobGVuZ3RoKTtcbiAgICBpZiAobWF0Y2ggIT0gbnVsbCAmJiBtYXRjaC5sZW5ndGggPiAyKSB7XG4gICAgICBjb25zdCBiYXJlID0gbWF0Y2hbMV0gPT09ICcnO1xuICAgICAgY29uc3QgdmFsID0gYmFyZSA/IDEgOiBOdW1iZXIobWF0Y2hbMV0pO1xuICAgICAgY29uc3QgdW5pdCA9IG1hdGNoWzJdLnRyaW0oKTsgLy8gRXhwbGljaXRseSB0cmltIHRoZSB1bml0XG4gICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWwpICYmIHVuaXQgJiYgKGJhcmUgfHwgbWF0Y2hbMV0gIT09ICdOYU4nKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgdGhhdCB3ZSBoYXZlIGEgcHJvcGVyIHVuaXQgKGtub3duIENTUyB1bml0cylcbiAgICAgIGNvbnN0IGtub3duVW5pdHMgPSBbJ3B4JywgJ2VtJywgJ3JlbScsICdwdCcsICdwYycsICdpbicsICdjbScsICdtbScsICclJywgJ3ZoJywgJ3Z3JywgJ2V4JywgJ2NoJ107XG4gICAgICBjb25zdCBoYXNWYWxpZFVuaXQgPSBrbm93blVuaXRzLmluY2x1ZGVzKHVuaXQpO1xuICAgICAgXG4gICAgICAvLyBPbmx5IGFsbG93IGJhcmUgdW5pdHMgKGxpa2UgXCJweFwiIHdpdGhvdXQgbnVtYmVyKSBmb3Iga25vd24gdW5pdHNcbiAgICAgIGlmICh2YWxpZCAmJiBoYXNWYWxpZFVuaXQpIHtcbiAgICAgICAgcmV0dXJuIHVuaXQgPT09ICdweCcgPyB2YWwgOiB0aGlzLnB4UGVyVW5pdCh1bml0KSAqIHZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXJyb3IgcGFyc2luZyBsZW5ndGgnKTtcbiAgfVxufVxuIl19