diff --git a/Makefile b/Makefile index d02b0b30..85f08034 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ BASE_DIR:=$(dir $(realpath $(firstword $(MAKEFILE_LIST)))) DIST_DIR:=$(BASE_DIR)dist/libraries -GLOBAL_CFLAGS:=-O3 +GLOBAL_CFLAGS:=-O3 -s ENVIRONMENT=web,webview all: subtitleoctopus @@ -334,6 +334,8 @@ dist/js/subtitles-octopus-worker-legacy.js: src/subtitles-octopus-worker.bc src/ --post-js src/post-worker.js \ -s WASM=0 \ -s LEGACY_VM_SUPPORT=1 \ + -s MIN_CHROME_VERSION=27 \ + -s MIN_SAFARI_VERSION=60005 \ $(EMCC_COMMON_ARGS) dist/js/subtitles-octopus.js: dist/license/all src/subtitles-octopus.js diff --git a/src/post-worker.js b/src/post-worker.js index 7c1cbe4c..04ded335 100644 --- a/src/post-worker.js +++ b/src/post-worker.js @@ -469,6 +469,14 @@ function messageResender() { } } +function _applyKeys(input, output) { + var vargs = Object.keys(input); + + for (var i = 0; i < vargs.length; i++) { + output[vargs[i]] = input[vargs[i]]; + } +} + function onMessageFromMainEmscriptenThread(message) { if (!calledMain && !message.data.preMain) { if (!messageBuffer) { @@ -562,11 +570,7 @@ function onMessageFromMainEmscriptenThread(message) { var event = message.data.event; var i = self.octObj.allocEvent(); var evnt_ptr = self.octObj.track.get_events(i); - var vargs = Object.keys(event); - - for (const varg of vargs) { - evnt_ptr[varg] = event[varg]; - } + _applyKeys(event, evnt_ptr); break; case 'get-events': var events = []; @@ -598,12 +602,7 @@ function onMessageFromMainEmscriptenThread(message) { var event = message.data.event; var i = message.data.index; var evnt_ptr = self.octObj.track.get_events(i); - - var vargs = Object.keys(event); - - for (const varg of vargs) { - evnt_ptr[varg] = event[varg]; - } + _applyKeys(event, evnt_ptr); break; case 'remove-event': var i = message.data.index; @@ -613,11 +612,7 @@ function onMessageFromMainEmscriptenThread(message) { var style = message.data.style; var i = self.octObj.allocStyle(); var styl_ptr = self.octObj.track.get_styles(i); - var vargs = Object.keys(style); - - for (const varg of vargs) { - styl_ptr[varg] = style[varg]; - } + _applyKeys(style, styl_ptr); break; case 'get-styles': var styles = []; @@ -663,11 +658,7 @@ function onMessageFromMainEmscriptenThread(message) { var style = message.data.style; var i = message.data.index; var styl_ptr = self.octObj.track.get_styles(i); - var vargs = Object.keys(style); - - for (const varg of vargs) { - styl_ptr[varg] = style[varg]; - } + _applyKeys(style, styl_ptr); break; case 'remove-style': var i = message.data.index; diff --git a/src/pre-worker.js b/src/pre-worker.js index 8b1ed9ad..1be8fecb 100644 --- a/src/pre-worker.js +++ b/src/pre-worker.js @@ -1,3 +1,12 @@ +if (!String.prototype.startsWith) { + String.prototype.startsWith = function (search, pos) { + if (pos === undefined) { + pos = 0; + } + return this.substring(pos, search.length) === search; + }; +} + if (!String.prototype.endsWith) { String.prototype.endsWith = function(search, this_len) { if (this_len === undefined || this_len > this.length) { @@ -7,6 +16,40 @@ if (!String.prototype.endsWith) { }; } +if (!String.prototype.includes) { + String.prototype.includes = function (search, pos) { + return this.indexOf(search, pos) !== -1; + }; +} + +if (!Uint8Array.prototype.slice) { + Object.defineProperty(Uint8Array.prototype, 'slice', { + value: function (begin, end) + { + return new Uint8Array(this.subarray(begin, end)); + } + }); +} + +if (!Int16Array.from) { + // Doesn't work for String + Int16Array.from = function (source) { + var arr = new Int16Array(source.length); + arr.set(source, 0); + return arr; + }; +} + +if (!Int32Array.from) { + // Doesn't work for String + Int32Array.from = function (source) { + var arr = new Int32Array(source.length); + arr.set(source, 0); + return arr; + }; +} + + var hasNativeConsole = typeof console !== "undefined"; // implement console methods if they're missing