From 32baa6af7a00b20172200ed0fd0757d3a0cc40ae Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Fri, 5 May 2017 17:55:02 +0200 Subject: [PATCH] Convert the `DOMCMapReaderFactory` to an ES6 class Given that we only create *one* instance of this class per `getDocument` call, this shouldn't matter performance wise. --- src/display/dom_utils.js | 87 +++++++++++++++++++--------------------- test/unit/test_utils.js | 13 +++--- 2 files changed, 47 insertions(+), 53 deletions(-) diff --git a/src/display/dom_utils.js b/src/display/dom_utils.js index e89123dba..cd359ee9a 100644 --- a/src/display/dom_utils.js +++ b/src/display/dom_utils.js @@ -52,59 +52,54 @@ DOMCanvasFactory.prototype = { } }; -var DOMCMapReaderFactory = (function DOMCMapReaderFactoryClosure() { - function DOMCMapReaderFactory(params) { - this.baseUrl = params.baseUrl || null; - this.isCompressed = params.isCompressed || false; +class DOMCMapReaderFactory { + constructor({ baseUrl = null, isCompressed = false, }) { + this.baseUrl = baseUrl; + this.isCompressed = isCompressed; } - DOMCMapReaderFactory.prototype = { - fetch(params) { - var name = params.name; - if (!name) { - return Promise.reject(new Error('CMap name must be specified.')); + fetch({ name, }) { + if (!name) { + return Promise.reject(new Error('CMap name must be specified.')); + } + return new Promise((resolve, reject) => { + let url = this.baseUrl + name + (this.isCompressed ? '.bcmap' : ''); + + let request = new XMLHttpRequest(); + request.open('GET', url, true); + + if (this.isCompressed) { + request.responseType = 'arraybuffer'; } - return new Promise((resolve, reject) => { - var url = this.baseUrl + name + (this.isCompressed ? '.bcmap' : ''); - - var request = new XMLHttpRequest(); - request.open('GET', url, true); - - if (this.isCompressed) { - request.responseType = 'arraybuffer'; + request.onreadystatechange = () => { + if (request.readyState !== XMLHttpRequest.DONE) { + return; } - request.onreadystatechange = () => { - if (request.readyState !== XMLHttpRequest.DONE) { + if (request.status === 200 || request.status === 0) { + let data; + if (this.isCompressed && request.response) { + data = new Uint8Array(request.response); + } else if (!this.isCompressed && request.responseText) { + data = stringToBytes(request.responseText); + } + if (data) { + resolve({ + cMapData: data, + compressionType: this.isCompressed ? + CMapCompressionType.BINARY : CMapCompressionType.NONE, + }); return; } - if (request.status === 200 || request.status === 0) { - var data; - if (this.isCompressed && request.response) { - data = new Uint8Array(request.response); - } else if (!this.isCompressed && request.responseText) { - data = stringToBytes(request.responseText); - } - if (data) { - resolve({ - cMapData: data, - compressionType: this.isCompressed ? - CMapCompressionType.BINARY : CMapCompressionType.NONE, - }); - return; - } - } - reject(new Error('Unable to load ' + - (this.isCompressed ? 'binary ' : '') + - 'CMap at: ' + url)); - }; + } + reject(new Error('Unable to load ' + + (this.isCompressed ? 'binary ' : '') + + 'CMap at: ' + url)); + }; - request.send(null); - }); - }, - }; - - return DOMCMapReaderFactory; -})(); + request.send(null); + }); + } +} /** * Optimised CSS custom property getter/setter. diff --git a/test/unit/test_utils.js b/test/unit/test_utils.js index 64280cac1..7dab9f1e4 100644 --- a/test/unit/test_utils.js +++ b/test/unit/test_utils.js @@ -16,20 +16,19 @@ import { CMapCompressionType } from '../../src/shared/util'; class NodeCMapReaderFactory { - constructor(params) { - this.baseUrl = params.baseUrl || null; - this.isCompressed = params.isCompressed || false; + constructor({ baseUrl = null, isCompressed = false, }) { + this.baseUrl = baseUrl; + this.isCompressed = isCompressed; } - fetch(params) { - var name = params.name; + fetch({ name, }) { if (!name) { return Promise.reject(new Error('CMap name must be specified.')); } return new Promise((resolve, reject) => { - var url = this.baseUrl + name + (this.isCompressed ? '.bcmap' : ''); + let url = this.baseUrl + name + (this.isCompressed ? '.bcmap' : ''); - var fs = require('fs'); + let fs = require('fs'); fs.readFile(url, (error, data) => { if (error || !data) { reject(new Error('Unable to load ' +