Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(web): fixes touch form-factor default kbd on cookieless keymanweb.com page load #9786

Merged
merged 1 commit into from
Oct 18, 2023

Conversation

jahorton
Copy link
Contributor

Fixes keymanapp/keymanweb.com#86.

Refer to #9304, which provides lots of very relevant context for the issue and the needed fix.

Unfortunately, the main way I know to test this fix... is to wait for the next alpha build and try then.

It should be possible to build a test page with a similar rigging when time permits, come to think of it, but no such test page exists yet.

@keymanapp-test-bot skip

@keymanapp-test-bot keymanapp-test-bot bot added this to the A17S24 milestone Oct 18, 2023
Copy link
Member

@mcdurdin mcdurdin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really understand the fix -- it seems complex. But LGTM

@@ -175,6 +175,19 @@ export default class KeymanEngine extends KeymanEngineBase<BrowserConfiguration,

await super.init(totalOptions);

// Used by keymanweb.com; if no keyboard-cookie exists, we need this to trigger
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really only used by keymanweb.com? Not by almost every single site that uses keymanweb? After all, no sites will have cookies on initial use.

Copy link
Contributor Author

@jahorton jahorton Oct 18, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Most sites don't directly call keyman.register.

keymanweb.com's cdn/prog/keyboards.php resolves to this due to caching:

/* tier alpha, version 17.0, cached 2023-10-18T02:25:03+00:00 */
function addKeyboards() {
    keyman.register({
        "options": {
// ...

which is then called here:

https://github.com/keymanapp/keymanweb.com/blob/0dba6472d3300ef15a4820ee53953d0051333aa0/inc/head.php#L207-L215

  keyman.init({
    attachType:'auto',
    setActiveOnRegister: setActiveOnRegister
  }).then(function() {
    if(typeof afterInit == 'function') {
      afterInit();
    }
    if(typeof addKeyboards == 'function') {
      addKeyboards();

Thus, it completely bypasses KeymanWeb's addKeyboards API - there's no use of keyman.addKeyboards() or similar - instead using an unofficial, undocumented optimization. Therefore...

not by almost every single site that uses keymanweb

// globe key - are accessible.
//
// The `super` call above initializes `keyboardRequisitioner`, as needed here.
this.keyboardRequisitioner.cloudQueryEngine.once('unboundregister', () => {
Copy link
Contributor Author

@jahorton jahorton Oct 18, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This event was added in #9304 to facilitate handling of keymanweb.com's direct call of keyman.register with cached keyboard lists.

@jahorton jahorton merged commit 8c3099b into master Oct 18, 2023
16 checks passed
@jahorton jahorton deleted the fix/web/keymanweb.com-cookieless-default-kbd branch October 18, 2023 06:43
@keyman-server
Copy link
Collaborator

Changes in this pull request will be available for download in Keyman version 17.0.194-alpha

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

bug: KeymanWeb 17.0.193-alpha does not function in the Chrome browser when accessed via a mobile device
3 participants