[Libreoffice-commits] online.git: loleaflet/js
Michael Meeks (via logerrit)
logerrit at kemper.freedesktop.org
Mon May 25 20:17:30 UTC 2020
loleaflet/js/global.js | 59 ++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 53 insertions(+), 6 deletions(-)
New commits:
commit 9fd905563b9d2949263f8b7913375d8833662784
Author: Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Mon May 25 20:44:31 2020 +0100
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Mon May 25 22:17:12 2020 +0200
Proxy: horrible re-implementation of array / string bits for IE11.
Change-Id: Iccb2f98b5529a2f923dba8763b17f895067c1e0c
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/94808
Tested-by: Jenkins
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/loleaflet/js/global.js b/loleaflet/js/global.js
index a0d719eb3..2a789e98e 100644
--- a/loleaflet/js/global.js
+++ b/loleaflet/js/global.js
@@ -235,8 +235,55 @@
};
this.onmessage = function() {
};
+ // IE11 compatibility ...
+ if (!!window.MSInputMethodContext && !!document.documentMode) {
+ this.decoder = {};
+ this.decoder.decode = function(bytes) {
+ var decoded = '';
+ var code = 0;
+ for (var i = 0; i < bytes.length;) {
+ var b = bytes[i];
+ var seqLen = 1;
+ // get bits off the top.
+ if (b <= 0x7f)
+ code = b & 0xff;
+ else if (b <= 0xdf) {
+ code = b & 0x1f;
+ seqLen = 2;
+ } else if (b <= 0xdf) {
+ code = b & 0x0f;
+ seqLen = 3;
+ } else if (b <= 0xf4) {
+ code = b & 0x07;
+ seqLen = 4;
+ }
+ var left = bytes.length - i;
+ if (left >= seqLen) {
+ for (var j = 1; j < seqLen; ++j)
+ code = (code << 6) | (bytes[i + j] & 0x3f);
+ } else { // skip to end
+ seqLen = left;
+ code = 0xfffd;
+ }
+ decoded += String.fromCharCode(code);
+ i += seqLen;
+ }
+ return decoded;
+ };
+ this.doSlice = function(bytes,start,end) {
+ var data = new Uint8Array(end - start + 1);
+ for (var i = 0; i <= (end - start); ++i)
+ data[i] = bytes[start + i];
+ return data;
+ };
+ } else {
+ this.decoder = new TextDecoder();
+ this.doSlice = function(bytes,start,end) { return bytes.slice(start,end); };
+ }
+ this.decode = function(bytes,start,end) {
+ return this.decoder.decode(this.doSlice(bytes, start,end));
+ };
this.parseIncomingArray = function(arr) {
- var decoder = new TextDecoder();
console.debug('proxy: parse incoming array of length ' + arr.length);
for (var i = 0; i < arr.length; ++i)
{
@@ -265,7 +312,7 @@
var start = i;
while (arr[i] != 10) // '\n'
i++;
- numStr = decoder.decode(arr.slice(start, i)); // FIXME: IE11
+ numStr = this.decode(arr, start, i);
var serial = parseInt(numStr, 16);
i++; // skip \n
@@ -280,16 +327,16 @@
start = i;
while (arr[i] != 10) // '\n'
i++;
- numStr = decoder.decode(arr.slice(start, i)); // FIXME: IE11
+ numStr = this.decode(arr, start, i);
var size = parseInt(numStr, 16);
i++; // skip \n
var data;
- if (type == 'T') // FIXME: IE11
- data = decoder.decode(arr.slice(i, i + size));
+ if (type == 'T')
+ data = this.decode(arr, i, i + size);
else
- data = arr.slice(i, i + size);
+ data = this.doSlice(arr, i, i + size);
if (serial !== that.inSerial + 1) {
console.debug('Error: serial mismatch ' + serial + ' vs. ' + (that.inSerial + 1));
More information about the Libreoffice-commits
mailing list