diff --git a/_includes/2020/KeymanWebHost.php b/_includes/2020/KeymanWebHost.php new file mode 100644 index 00000000..73455496 --- /dev/null +++ b/_includes/2020/KeymanWebHost.php @@ -0,0 +1,23 @@ +api_keyman_com}/version/web"); + if($json) { + $json = json_decode($json); + } + if($json && property_exists($json, 'version')) { + $build = $json->version; + } else { + // If the get-version API fails, we'll use the latest known stable version + $build = "17.0.332"; + } + + return "{$KeymanHosts->s_keyman_com}/kmw/engine/$build"; + } +} diff --git a/_includes/includes/ui/keyboard-details.php b/_includes/includes/ui/keyboard-details.php index 4c215150..d29486e6 100644 --- a/_includes/includes/ui/keyboard-details.php +++ b/_includes/includes/ui/keyboard-details.php @@ -6,6 +6,7 @@ require_once('includes/appstore.php'); use \DateTime; + use \Keyman\Site\com\keyman\KeymanWebHost; use \Keyman\Site\Common\KeymanHosts; define('GITHUB_ROOT', 'https://github.com/keymanapp/keyboards/tree/master/'); @@ -67,7 +68,9 @@ public static function render_keyboard_details($id, $tier = 'stable', $landingPa self::LoadData(); self::WriteTitle(); + self::WriteDescription(); self::WriteDownloadBoxes(); + self::WriteKeymanWebBox(); self::WriteKeyboardDetails(); if(!empty(self::$deprecatedBy)) echo ""; } @@ -119,11 +122,11 @@ protected static function download_box($platform) { } } - protected static function WriteWebBoxes() { + protected static function WriteWebBoxes($useDescription) { global $embed_target; global $KeymanHosts; if (isset(self::$keyboard->platformSupport->desktopWeb) && self::$keyboard->platformSupport->desktopWeb != 'none' && empty(self::$deprecatedBy)) { - if(empty(self::$bcp47)) { + if(empty(self::$bcp47)) { if (isset(self::$keyboard->languages)) { if (is_array(self::$keyboard->languages)) { if (count(self::$keyboard->languages) > 0) { @@ -141,12 +144,19 @@ protected static function WriteWebBoxes() { } if (!isset($lang)) $lang = 'en'; $url = "{$KeymanHosts->keymanweb_com}/#$lang,Keyboard_" . self::$keyboard->id; - $description = htmlentities(self::$keyboard->name); - return <<name); + $description = "
Use $description in your web browser. No need to install anything.
"; + $linktext = 'Use keyboard online'; + } else { + $description = ''; + $linktext = 'Full online editor'; + } + return << - Use keyboard online -
Use $description in your web browser. No need to install anything.
- + $linktext + $description + END; } return FALSE; @@ -385,24 +395,95 @@ protected static function WriteDownloadBoxes() { } if ($embed == 'none') { - $webtext = self::WriteWebBoxes(); - if ($webtext) { - echo $webtext; + if(self::GetWebDeviceFromPageDevice() == null) { + $webtext = self::WriteWebBoxes(true); + if ($webtext) { + // If we have a web keyboard, and we are not embedded, and this is a + // mobile device, then show the link to keymanweb.com + echo $webtext; + } } - if(empty(self::$deprecatedBy)) { self::WriteQRCode('other'); } } } + protected static function GetWebDeviceFromPageDevice() { + global $pageDevice; + switch($pageDevice) { + case 'Windows': return 'windows'; + case 'mac': return 'macosx'; + case 'Linux': return 'linux'; + } + return null; + } + + protected static function WriteKeymanWebBox() { + global $embed; + + // don't show if we are embedded into a Keyman app + if($embed != 'none') { + return; + } + + // only show if we have a web keyboard and we are not deprecated + if(!isset(self::$keyboard->platformSupport->desktopWeb) || + self::$keyboard->platformSupport->desktopWeb == 'none' || + !empty(self::$deprecatedBy)) { + return; + } + + // only inject on desktop platforms + $webDevice = self::GetWebDeviceFromPageDevice(); + if(!$webDevice) { + return; + } + + $webtext = self::WriteWebBoxes(false); + $cdnUrlBase = KeymanWebHost::getKeymanWebUrlBase(); + ?> +

Try this keyboard

+
+ +
+ +
+ + + " . self::$description . "

"; + } + protected static function WriteKeyboardDetails() { global $embed_target, $session_query_q, $KeymanHosts; // this is html, trusted in database ?>

Keyboard Details

-

diff --git a/cdn/dev/keyboard-search/search.css b/cdn/dev/keyboard-search/search.css index 239b69ac..bf49b8b0 100644 --- a/cdn/dev/keyboard-search/search.css +++ b/cdn/dev/keyboard-search/search.css @@ -314,6 +314,44 @@ p#permalink { font-size: 8pt; } +/* Try this keyboard */ + +#try-box { + display: none; + margin: 0px 0px 16px 16px; + display: flex; + flex-direction: column; + align-items: center; +} + +html[data-platform~='windows linux macos'] #try-header, +html[data-platform~='windows linux macos'] #try-box { + display: block; +} + +#try-keyboard { + font-size: 1.5em; + width: 632px; + height: 44px; + margin: 0 auto 8px auto; + display: block; +} + +#osk-host { + width: 640px; + height: 300px; +} + +#osk-host .kmw-key-square { + /* Note: this is a hack to override the incorrect z-index that KMW is using for embedded OSK */ + z-index: auto; +} + +#try-keymanweb-link { + margin-top: 8px; + display: block; +} + /* Download boxes */ .download { diff --git a/developer/keymanweb/index.php b/developer/keymanweb/index.php index 0f1199df..3c625e5a 100644 --- a/developer/keymanweb/index.php +++ b/developer/keymanweb/index.php @@ -2,6 +2,7 @@ require_once('includes/template.php'); require_once __DIR__ . '/../../_includes/autoload.php'; use Keyman\Site\Common\KeymanHosts; + use Keyman\Site\com\keyman\KeymanWebHost; // Required head([ @@ -10,18 +11,7 @@ 'showMenu' => true ]); - $json = @file_get_contents("{$KeymanHosts->api_keyman_com}/version/web"); - if($json) { - $json = json_decode($json); - } - if($json && property_exists($json, 'version')) { - $build = $json->version; - } else { - // If the get-version API fails, we'll use the latest known stable version - $build = "16.0.145"; - } - - $cdnUrlBase = "{$KeymanHosts->s_keyman_com}/kmw/engine/$build"; + $cdnUrlBase = KeymanWebHost::getKeymanWebUrlBase(); ?> @@ -42,18 +32,15 @@ <script src='/keymanweb.js'></script> <script src='/kmwuitoggle.js'></script> <script> - (function(kmw) { - kmw.init({attachType:'auto'}); - kmw.addKeyboards('@en'); // Loads default English keyboard from Keyman Cloud (CDN) - kmw.addKeyboards('@th'); // Loads default Thai keyboard from Keyman Cloud (CDN) - })(keyman); + (function() { + keyman.init({attachType:'auto'}); + keyman.addKeyboards('@en'); // Loads default English keyboard from Keyman Cloud (CDN) + keyman.addKeyboards('@th'); // Loads default Thai keyboard from Keyman Cloud (CDN) + })(); </script>
-

Upgrade Note: with KeymanWeb , the unminified version is no longer served from our CDN. -Instead, we use source maps to make the full source available in web developer tools.

-

Live Examples

    diff --git a/go/.htaccess b/go/.htaccess index 56e046cf..9f8e81e2 100644 --- a/go/.htaccess +++ b/go/.htaccess @@ -8,7 +8,8 @@ RedirectMatch "/go/(([1-9][0-9])([.]?)([0-9]))/developer-help-(mobile|packages)( # Download redirects for keyboard permalinks (TODO: these three rules need refresh) # download-kmp -RedirectMatch "/go/keyboard/([^/?]+)/download/kmp$" "/keyboards/download?id=$1&platform=windows&mode=standalone" +# Modified to match download-package below +RewriteRule "^keyboard/([^/]+)/download/kmp$" "package/download.php?type=keyboard&id=$1" [END,QSA] #download-exe RedirectMatch "/go/keyboard/([^/?]+)/download/exe$" "/keyboards/download?id=$1&platform=windows&mode=bundle"