chore(web): Merge branch 'stable-15.0' into fix/web/stable/help-doc-keyboard

This commit is contained in:
jahorton 2022-06-21 12:37:11 +07:00
commit 20fba30524
34 changed files with 93 additions and 79 deletions

View file

@ -1,5 +1,9 @@
# Keyman Version History
## 15.0.261 stable 2022-06-18
* fix(web): crash on custom modifier keys (#6789)
## 15.0.260 stable 2022-06-15
* chore: Release version 15.0

View file

@ -1 +1 @@
15.0.261
15.0.262

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/input-processor",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/input-processor",
"version": "15.0.261",
"version": "15.0.262",
"description": "The core text and prediction processing engine for KeymanWeb",
"repository": {
"type": "git",
@ -18,8 +18,8 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/lexical-model-compiler": "^15.0.261",
"@keymanapp/resources-gosh": "^15.0.261",
"@keymanapp/lexical-model-compiler": "^15.0.262",
"@keymanapp/resources-gosh": "^15.0.262",
"@types/node": "^11.9.4",
"chai": "^4.3.4",
"mocha": "^8.4.0",
@ -34,11 +34,11 @@
"mocha": "mocha"
},
"dependencies": {
"@keymanapp/keyboard-processor": "^15.0.261",
"@keymanapp/lexical-model-layer": "^15.0.261",
"@keymanapp/models-types": "^15.0.261",
"@keymanapp/web-environment": "^15.0.261",
"@keymanapp/web-utils": "^15.0.261",
"@keymanapp/keyboard-processor": "^15.0.262",
"@keymanapp/lexical-model-layer": "^15.0.262",
"@keymanapp/models-types": "^15.0.262",
"@keymanapp/web-environment": "^15.0.262",
"@keymanapp/web-utils": "^15.0.262",
"eventemitter3": "^4.0.0"
}
}

View file

@ -141,27 +141,29 @@ namespace com.keyman.text {
// If it's a key that we 'optimize out' of our fat-finger correction algorithm,
// we MUST NOT trigger it for this keystroke.
let isOnlyLayerShift = text.Codes.isKnownOSKModifierKey(keyEvent.kName);
let isOnlyLayerSwitchKey = text.Codes.isKnownOSKModifierKey(keyEvent.kName);
// Best-guess stopgap for possible custom modifier keys.
// If a key (1) does not affect the context and (2) shifts the active layer,
// we assume it's a modifier key. (Touch keyboards may define custom modifier keys.)
//
// Note: this could cause an issue in the niche scenario where:
// Note: this will mean we won't generate alternates in the niche scenario where:
// 1. Keypress does not alter the actual context
// 2. It DOES emit a deadkey with an earlier processing rule.
// 3. The FINAL processing rule does not match.
// 4. The key ALSO signals a layer shift.
// If any of the four above conditions aren't met - no problem!
// So it's a pretty niche scenario.
if((ruleBehavior.transcription?.transform as TextTransform).isNoOp() && keyEvent.kNextLayer) {
isOnlyLayerShift = true;
if((ruleBehavior?.transcription?.transform as TextTransform)?.isNoOp() && keyEvent.kNextLayer) {
isOnlyLayerSwitchKey = true;
}
const keepRuleBehavior = ruleBehavior != null;
// Should we swallow any further processing of keystroke events for this keydown-keypress sequence?
if(keepRuleBehavior && !isOnlyLayerShift) {
let alternates = this.buildAlternates(ruleBehavior, keyEvent, preInputMock);
if(keepRuleBehavior) {
// alternates are our fat-finger alternate outputs. We don't build these for keys we detect as
// layer switch keys
let alternates = isOnlyLayerSwitchKey ? null : this.buildAlternates(ruleBehavior, keyEvent, preInputMock);
// Now that we've done all the keystroke processing needed, ensure any extra effects triggered
// by the actual keystroke occur.
@ -173,7 +175,7 @@ namespace com.keyman.text {
if(alternates && alternates.length > 0) {
ruleBehavior.transcription.alternates = alternates;
}
} else if(ruleBehavior == null) {
} else {
// We need a dummy RuleBehavior for keys which have no output (e.g. Shift)
ruleBehavior = new RuleBehavior();
ruleBehavior.transcription = outputTarget.buildTranscriptionFrom(outputTarget, null, false);

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/keyboard-processor",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/keyboard-processor",
"version": "15.0.261",
"version": "15.0.262",
"description": "Core module for Keyman keyboard support in KeymanWeb.",
"repository": {
"type": "git",
@ -18,7 +18,7 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/resources-gosh": "^15.0.261",
"@keymanapp/resources-gosh": "^15.0.262",
"chai": "^4.3.4",
"mocha": "^8.4.0",
"mocha-teamcity-reporter": "^4.0.0",
@ -32,9 +32,9 @@
"mocha": "mocha"
},
"dependencies": {
"@keymanapp/models-types": "^15.0.261",
"@keymanapp/web-environment": "^15.0.261",
"@keymanapp/web-utils": "^15.0.261",
"@keymanapp/models-types": "^15.0.262",
"@keymanapp/web-environment": "^15.0.262",
"@keymanapp/web-utils": "^15.0.262",
"@types/node": "^11.9.4"
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/recorder-core",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/recorder-core",
"version": "15.0.261",
"version": "15.0.262",
"description": "Core classes used to develop KeymanWeb test cases based on keystrokes",
"main": "index.js",
"scripts": {
@ -17,10 +17,10 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"dependencies": {
"@keymanapp/keyboard-processor": "^15.0.261",
"@keymanapp/models-types": "^15.0.261",
"@keymanapp/web-environment": "^15.0.261",
"@keymanapp/web-utils": "^15.0.261",
"@keymanapp/keyboard-processor": "^15.0.262",
"@keymanapp/models-types": "^15.0.262",
"@keymanapp/web-environment": "^15.0.262",
"@keymanapp/web-utils": "^15.0.262",
"@types/node": "^11.9.4"
},
"devDependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-sentry-manager",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-sentry-manager",
"version": "15.0.261",
"version": "15.0.262",
"description": "Common setup for KeymanWeb's Sentry-based error reporting",
"main": "dist/index.js",
"scripts": {
@ -20,7 +20,7 @@
"typescript": "^3.8.3"
},
"dependencies": {
"@keymanapp/web-environment": "^15.0.261",
"@keymanapp/web-environment": "^15.0.262",
"@sentry/browser": "^5.27.4"
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-utils",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-utils",
"version": "15.0.261",
"version": "15.0.262",
"description": "Common utility functions used throughout other Keyman packages",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@ -20,8 +20,8 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/resources-gosh": "^15.0.261",
"@keymanapp/web-environment": "^15.0.261",
"@keymanapp/resources-gosh": "^15.0.262",
"@keymanapp/web-environment": "^15.0.262",
"@types/node": "^14.0.5",
"typescript": "^3.8.3"
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-templates",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-templates",
"version": "15.0.261",
"version": "15.0.262",
"description": "Backing model implementations (templates) for Keyman's modelling layer",
"keywords": [
"lm",
@ -42,8 +42,8 @@
"url": "https://github.com/keymanapp/keyman/issues"
},
"devDependencies": {
"@keymanapp/models-types": "^15.0.261",
"@keymanapp/web-utils": "^15.0.261",
"@keymanapp/models-types": "^15.0.262",
"@keymanapp/web-utils": "^15.0.262",
"@types/chai": "^4.2.11",
"@types/mocha": "^7.0.2",
"@types/node": "^14.0.4",
@ -52,6 +52,6 @@
"typescript": "^3.8.3"
},
"dependencies": {
"@keymanapp/models-wordbreakers": "^15.0.261"
"@keymanapp/models-wordbreakers": "^15.0.262"
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-types",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-types",
"version": "15.0.261",
"version": "15.0.262",
"description": "Type definitions in used in the modeling (lexical model/predictive text) component of Keyman.",
"types": "./index.d.ts",
"scripts": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-wordbreakers",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-wordbreakers",
"version": "15.0.261",
"version": "15.0.262",
"description": "Word breakers bundled in the modeling layer",
"keywords": [
"lexical model",
@ -40,7 +40,7 @@
"url": "https://github.com/keymanapp/keyman/issues"
},
"devDependencies": {
"@keymanapp/models-types": "^15.0.261",
"@keymanapp/models-types": "^15.0.262",
"@types/chai": "^4.2.11",
"@types/mocha": "^7.0.2",
"chai": "^4.3.4",

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-layer",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-layer",
"version": "15.0.261",
"version": "15.0.262",
"description": "Keyman/Predictive Text integration layer",
"main": "build/index.js",
"scripts": {
@ -21,8 +21,8 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/models-types": "^15.0.261",
"@keymanapp/resources-gosh": "^15.0.261",
"@keymanapp/models-types": "^15.0.262",
"@keymanapp/resources-gosh": "^15.0.262",
"@types/node": "^10.17.21",
"chai": "^4.3.4",
"karma": "^6.3.4",
@ -46,10 +46,10 @@
"typescript": "^3.8.3"
},
"dependencies": {
"@keymanapp/models-templates": "^15.0.261",
"@keymanapp/models-wordbreakers": "^15.0.261",
"@keymanapp/web-environment": "^15.0.261",
"@keymanapp/web-utils": "^15.0.261",
"@keymanapp/models-templates": "^15.0.262",
"@keymanapp/models-wordbreakers": "^15.0.262",
"@keymanapp/web-environment": "^15.0.262",
"@keymanapp/web-utils": "^15.0.262",
"es6-shim": "^0.35.5",
"string.prototype.codepointat": "^0.2.1",
"string.prototype.startswith": "^0.2.0"

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-compiler",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-compiler",
"version": "15.0.261",
"version": "15.0.262",
"description": "Keyman Developer lexical model compiler",
"keywords": [
"keyboard",
@ -37,14 +37,14 @@
"node": ">=12.0.0"
},
"dependencies": {
"@keymanapp/models-types": "^15.0.261",
"@keymanapp/models-types": "^15.0.262",
"commander": "^3.0.0",
"typescript": "^3.8.3",
"xml2js": "^0.4.19"
},
"devDependencies": {
"@keymanapp/models-templates": "^15.0.261",
"@keymanapp/models-wordbreakers": "^15.0.261",
"@keymanapp/models-templates": "^15.0.262",
"@keymanapp/models-wordbreakers": "^15.0.262",
"@types/chai": "^4.1.7",
"@types/mocha": "^5.2.7",
"@types/node": "^10.14.6",

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/developer-server",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/developer-server",
"version": "15.0.261",
"version": "15.0.262",
"description": "Keyman Developer backend server",
"main": "dist/index.js",
"scripts": {

View file

@ -21,5 +21,5 @@
"ts-node",
"typescript"
],
"version": "15.0.261"
"version": "15.0.262"
}

View file

@ -1,5 +1,5 @@
{
"name": "@keymanapp/resources-gosh",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 1
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/resources-gosh",
"version": "15.0.261",
"version": "15.0.262",
"description": "Good Ol' Shell",
"author": "Marc Durdin <marc@keyman.com> (https://github.com/mcdurdin)",
"contributors": [

View file

@ -1,5 +1,5 @@
{
"name": "@keymanapp/web-environment",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 1
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-environment",
"version": "15.0.261",
"version": "15.0.262",
"description": "A compilation utility for passing select environment variables into our TS builds",
"author": "Joshua Horton <joshua_horton@sil.org> (https://github.com/jahorton)",
"homepage": "https://github.com/keymanapp/keyman",
@ -17,6 +17,6 @@
"url": "https://github.com/keymanapp/keyman/issues"
},
"devDependencies": {
"@keymanapp/resources-gosh": "^15.0.261"
"@keymanapp/resources-gosh": "^15.0.262"
}
}

2
web/package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "keyman",
"version": "15.0.261",
"version": "15.0.262",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "keyman",
"version": "15.0.261",
"version": "15.0.262",
"description": "Facilitates text input in any language.",
"repository": {
"type": "git",
@ -18,8 +18,8 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/resources-gosh": "^15.0.261",
"@keymanapp/web-sentry-manager": "^15.0.261",
"@keymanapp/resources-gosh": "^15.0.262",
"@keymanapp/web-sentry-manager": "^15.0.262",
"@sentry/cli": "^1.52.3",
"chai": "^4.3.4",
"google-closure-compiler-java": "^20200224.0.0",
@ -52,13 +52,13 @@
"sentry-cli": "sentry-cli"
},
"dependencies": {
"@keymanapp/input-processor": "^15.0.261",
"@keymanapp/keyboard-processor": "^15.0.261",
"@keymanapp/lexical-model-layer": "^15.0.261",
"@keymanapp/models-types": "^15.0.261",
"@keymanapp/recorder-core": "^15.0.261",
"@keymanapp/web-environment": "^15.0.261",
"@keymanapp/web-utils": "^15.0.261",
"@keymanapp/input-processor": "^15.0.262",
"@keymanapp/keyboard-processor": "^15.0.262",
"@keymanapp/lexical-model-layer": "^15.0.262",
"@keymanapp/models-types": "^15.0.262",
"@keymanapp/recorder-core": "^15.0.262",
"@keymanapp/web-environment": "^15.0.262",
"@keymanapp/web-utils": "^15.0.262",
"@types/node": "^11.9.4",
"es6-shim": "^0.35.5",
"eventemitter3": "^4.0.0"

View file

@ -78,7 +78,8 @@ namespace com.keyman.osk.browser {
let canvasWidth = xWidth + Math.ceil(xWidth * 0.3) * 2;
let canvasHeight = Math.ceil(2.3 * xHeight) + (ySubPixelPadding); //
kts.top = Math.floor(y - canvasHeight) + 'px';
kts.top = 'auto';
kts.bottom = Math.floor(keyman.osk.computedHeight - y) + 'px';
kts.textAlign = 'center';
kts.overflow = 'visible';
kts.fontFamily = util.getStyleValue(kc,'font-family');

View file

@ -402,6 +402,13 @@ div.android div.kmw-keytip-tip {
background: #999;
}
div.android div.kmw-keytip-cap {
position: absolute;
background: #999;
border-radius: 0 0 5px 5px;
border-bottom: solid 1px #8a8d90
}
/* Dark mode - ensure text is colored appropriately for key tips. */
@media (prefers-color-scheme: dark) {
div.ios div.kmw-keytip {