diff --git a/common/predictive-text/package.json b/common/predictive-text/package.json index 7557082ad5d..1d9be13fc16 100644 --- a/common/predictive-text/package.json +++ b/common/predictive-text/package.json @@ -23,7 +23,7 @@ "@keymanapp/resources-gosh": "*", "@types/node": "^10.17.21", "chai": "^4.3.4", - "karma": "^6.3.4", + "karma": "^6.4.1", "karma-browserstack-launcher": "^1.6.0", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^2.2.0", diff --git a/common/web/keyboard-processor/src/text/outputTarget.ts b/common/web/keyboard-processor/src/text/outputTarget.ts index 403f1e56119..c8150357386 100644 --- a/common/web/keyboard-processor/src/text/outputTarget.ts +++ b/common/web/keyboard-processor/src/text/outputTarget.ts @@ -439,12 +439,14 @@ namespace com.keyman.text { if(dn > this.caretIndex) { dn = this.caretIndex; } + this.adjustDeadkeys(-dn); this.text = this.text.kmwSubstr(0, this.caretIndex - dn) + this.getTextAfterCaret(); this.caretIndex -= dn; } } insertTextBeforeCaret(s: string): void { + this.adjustDeadkeys(s._kmwLength()); this.text = this.getTextBeforeCaret() + s + this.getTextAfterCaret(); this.caretIndex += s.kmwLength(); } diff --git a/common/web/lm-worker/build.sh b/common/web/lm-worker/build.sh index 771069eb1b3..487d564da6e 100755 --- a/common/web/lm-worker/build.sh +++ b/common/web/lm-worker/build.sh @@ -95,12 +95,16 @@ fi # of typescript, we need to avoid this! # TODO: we should try and rework this to avoid the need to manually wrap -if builder_start_action clean || builder_has_action build; then +if builder_start_action clean; then npm run clean builder_finish_action success clean fi if builder_start_action build; then + if ! builder_has_action clean; then + npm run clean + fi + # Ensure keyman-version is properly build (requires build script) "$KEYMAN_ROOT/common/web/keyman-version/build.sh" || fail "Could not build keyman-version" diff --git a/common/web/lm-worker/package.json b/common/web/lm-worker/package.json index a93712c564e..d7a3a1bfd31 100644 --- a/common/web/lm-worker/package.json +++ b/common/web/lm-worker/package.json @@ -15,7 +15,7 @@ "@keymanapp/resources-gosh": "*", "@types/node": "^10.17.21", "chai": "^4.3.4", - "karma": "^6.3.4", + "karma": "^6.4.1", "karma-browserstack-launcher": "^1.6.0", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^2.2.0", diff --git a/package-lock.json b/package-lock.json index 32a9ebb1e64..463353e98ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -170,7 +170,7 @@ "@keymanapp/resources-gosh": "*", "@types/node": "^10.17.21", "chai": "^4.3.4", - "karma": "^6.3.4", + "karma": "^6.4.1", "karma-browserstack-launcher": "^1.6.0", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^2.2.0", @@ -294,7 +294,7 @@ "@keymanapp/resources-gosh": "*", "@types/node": "^10.17.21", "chai": "^4.3.4", - "karma": "^6.3.4", + "karma": "^6.4.1", "karma-browserstack-launcher": "^1.6.0", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^2.2.0", @@ -2093,9 +2093,9 @@ } }, "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" @@ -3690,9 +3690,9 @@ "dev": true }, "node_modules/karma": { - "version": "6.3.17", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.17.tgz", - "integrity": "sha512-2TfjHwrRExC8yHoWlPBULyaLwAFmXmxQrcuFImt/JsAsSZu1uOWTZ1ZsWjqQtWpHLiatJOHL5jFjXSJIgCd01g==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", + "integrity": "sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA==", "dev": true, "dependencies": { "@colors/colors": "1.5.0", @@ -3714,7 +3714,7 @@ "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", - "socket.io": "^4.2.0", + "socket.io": "^4.4.1", "source-map": "^0.6.1", "tmp": "^0.2.1", "ua-parser-js": "^0.7.30", @@ -6405,9 +6405,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" @@ -6600,9 +6600,9 @@ } }, "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" @@ -6908,7 +6908,7 @@ "@sentry/cli": "2.2.0", "chai": "^4.3.4", "google-closure-compiler-java": "^20200224.0.0", - "karma": "^6.3.4", + "karma": "^6.4.1", "karma-browserstack-launcher": "^1.6.0", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^2.2.0", @@ -7392,7 +7392,7 @@ "@types/node": "^10.17.21", "chai": "^4.3.4", "es6-shim": "^0.35.5", - "karma": "^6.3.4", + "karma": "^6.4.1", "karma-browserstack-launcher": "^1.6.0", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^2.2.0", @@ -7440,7 +7440,7 @@ "@types/node": "^10.17.21", "chai": "^4.3.4", "es6-shim": "^0.35.5", - "karma": "^6.3.4", + "karma": "^6.4.1", "karma-browserstack-launcher": "^1.6.0", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^2.2.0", @@ -8671,9 +8671,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "is-fullwidth-code-point": { @@ -9919,9 +9919,9 @@ "dev": true }, "karma": { - "version": "6.3.17", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.17.tgz", - "integrity": "sha512-2TfjHwrRExC8yHoWlPBULyaLwAFmXmxQrcuFImt/JsAsSZu1uOWTZ1ZsWjqQtWpHLiatJOHL5jFjXSJIgCd01g==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", + "integrity": "sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA==", "dev": true, "requires": { "@colors/colors": "1.5.0", @@ -9943,7 +9943,7 @@ "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", - "socket.io": "^4.2.0", + "socket.io": "^4.4.1", "source-map": "^0.6.1", "tmp": "^0.2.1", "ua-parser-js": "^0.7.30", @@ -10178,7 +10178,7 @@ "chai": "^4.3.4", "eventemitter3": "^4.0.0", "google-closure-compiler-java": "^20200224.0.0", - "karma": "^6.3.4", + "karma": "^6.4.1", "karma-browserstack-launcher": "^1.6.0", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^2.2.0", @@ -12039,9 +12039,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "is-fullwidth-code-point": { @@ -12135,9 +12135,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "is-fullwidth-code-point": { diff --git a/web/package.json b/web/package.json index 8cd671bf35e..7821dffba80 100644 --- a/web/package.json +++ b/web/package.json @@ -22,7 +22,7 @@ "@sentry/cli": "2.2.0", "chai": "^4.3.4", "google-closure-compiler-java": "^20200224.0.0", - "karma": "^6.3.4", + "karma": "^6.4.1", "karma-browserstack-launcher": "^1.6.0", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^2.2.0", diff --git a/web/source/dom/domEventHandlers.ts b/web/source/dom/domEventHandlers.ts index 3ff134fe55f..83b37a1bf9d 100644 --- a/web/source/dom/domEventHandlers.ts +++ b/web/source/dom/domEventHandlers.ts @@ -405,7 +405,7 @@ namespace com.keyman.dom { doChangeEvent(_target: HTMLElement) { if(DOMEventHandlers.states.changed) { let event = new Event('change', {"bubbles": true, "cancelable": false}); - + // Ensure that touch-aliased elements fire as if from the aliased element. if(_target['base'] && _target['base']['kmw_ip']) { _target = _target['base']; @@ -772,7 +772,7 @@ namespace com.keyman.dom { const x = touch.screenX; const y = touch.screenY; - + // Allow content of input elements to be dragged horizontally or vertically if(typeof this.firstTouch == 'undefined' || this.firstTouch == null) { this.firstTouch={x:x,y:y}; diff --git a/web/testing/attachment-api/index.html b/web/testing/attachment-api/index.html index 37cb68476c8..c02c66d3fd1 100644 --- a/web/testing/attachment-api/index.html +++ b/web/testing/attachment-api/index.html @@ -87,8 +87,7 @@

KeymanWeb Sample Page - Attachment API Testing

Inputs:

Textareas:

IFrames:

-

Note: The iframe section should not actually attach/enable for touch devices - and does not support setKeyboardForControl.

+

Note: The iframe section does not support setKeyboardForControl.

Design-mode IFrames:

Note: The iframe section should not actually attach/enable for touch devices diff --git a/web/unit_tests/cases/element_interfaces.js b/web/unit_tests/cases/element_interfaces.js index bbfb41a90c7..88b99a225c6 100644 --- a/web/unit_tests/cases/element_interfaces.js +++ b/web/unit_tests/cases/element_interfaces.js @@ -1455,7 +1455,7 @@ describe('Element Input/Output Interfacing', function() { }); it('correctly maintains deadkeys', function() { - InterfaceTests.Tests.deadkeyMaintenance(InterfaceTests.TouchAlias); + InterfaceTests.Tests.deadkeyMaintenance(InterfaceTests.Mock); }); }); }); diff --git a/web/unit_tests/test.sh b/web/unit_tests/test.sh index e31d80893f5..a43c37e9706 100755 --- a/web/unit_tests/test.sh +++ b/web/unit_tests/test.sh @@ -61,7 +61,7 @@ get_browser_set_for_OS ( ) { if [ $os_id = "mac" ]; then BROWSERS="--browsers Firefox,Chrome,Safari" elif [ $os_id = "win" ]; then - BROWSERS="--browsers Firefox,Chrome,IE,Edge" + BROWSERS="--browsers Firefox,Chrome,Edge" else BROWSERS="--browsers Firefox,Chrome" fi