diff --git a/.htaccess b/.htaccess index 1342041a..5ab52712 100644 --- a/.htaccess +++ b/.htaccess @@ -108,7 +108,7 @@ RewriteRule "^keyboards/(?!index\.php|install|keyboard|session|share)([^/]+)$" " # RewriteRule "^keyboards$" "/keyboards/index.php" [L] # /keyboards/languages to /keyboards/index.php -RewriteRule "^keyboards/languages/(.*)" "/keyboards/index.php?q=l:id:$1" [END] +RewriteRule "^keyboards/languages/(.*)" "/keyboards/index.php?q=l:id:$1" [END,QSA] # /keyboards/download to /keyboards/download.php RewriteRule "^keyboards/download(.php)?" "/keyboards/download.php" [END,QSA] diff --git a/_includes/2020/templates/Menu.php b/_includes/2020/templates/Menu.php index c47ba8e2..9374ed58 100644 --- a/_includes/2020/templates/Menu.php +++ b/_includes/2020/templates/Menu.php @@ -106,6 +106,8 @@ private static function render_top_menu(object $fields): void { " alt='Header bottom' />
+ Keyman is free and open source +
diff --git a/_includes/includes/ui/keyboard-details.php b/_includes/includes/ui/keyboard-details.php index 98d4d881..7fa37230 100644 --- a/_includes/includes/ui/keyboard-details.php +++ b/_includes/includes/ui/keyboard-details.php @@ -55,7 +55,7 @@ class KeyboardDetails /** * render_keyboard_details - display keyboard download boxes and details - * @param $id - keyboard ID + * @param $id - keyboard package ID * @param string $tier - ['stable', 'alpha', or 'beta'] * @param bool $landingPage - when true, details won't display keyboard search box or title * @param string $bcp47 - BCP 47 tag to pass as a hint to download links for apps to make connection @@ -125,41 +125,48 @@ protected static function download_box($platform) { 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 (isset(self::$keyboard->languages)) { - if (is_array(self::$keyboard->languages)) { - if (count(self::$keyboard->languages) > 0) { - $lang = self::$keyboard->languages[0]; - } - } else { - $langs = array_keys(get_object_vars(self::$keyboard->languages)); - if (count($langs) > 0) { - $lang = $langs[0]; - } + + // only show if the jsFilename property is present in the .keyboard_info + if(empty(self::$keyboard->jsFilename)) { + return FALSE; + } + + if (!isset(self::$keyboard->platformSupport->desktopWeb) || self::$keyboard->platformSupport->desktopWeb == 'none' || !empty(self::$deprecatedBy)) { + return FALSE; + } + + if(empty(self::$bcp47)) { + if (isset(self::$keyboard->languages)) { + if (is_array(self::$keyboard->languages)) { + if (count(self::$keyboard->languages) > 0) { + $lang = self::$keyboard->languages[0]; + } + } else { + $langs = array_keys(get_object_vars(self::$keyboard->languages)); + if (count($langs) > 0) { + $lang = $langs[0]; } } - } else { - $lang = self::$bcp47; - } - if (!isset($lang)) $lang = 'en'; - $url = "{$KeymanHosts->keymanweb_com}/#$lang,Keyboard_" . self::$keyboard->id; - if($useDescription) { - $description = htmlentities(self::$keyboard->name); - $description = "
Use $description in your web browser. No need to install anything.
"; - $linktext = 'Use keyboard online'; - } else { - $description = ''; - $linktext = 'Full online editor'; } - return << - $linktext - $description -
-END; + } else { + $lang = self::$bcp47; + } + if (!isset($lang)) $lang = 'en'; + $url = "{$KeymanHosts->keymanweb_com}/#$lang,Keyboard_" . self::GetWebKeyboardId(); + if($useDescription) { + $description = htmlentities(self::$keyboard->name); + $description = "
Use $description in your web browser. No need to install anything.
"; + $linktext = 'Use keyboard online'; + } else { + $description = ''; + $linktext = 'Full online editor'; } - return FALSE; + return << + $linktext + $description +
+END; } protected static function LoadData() { @@ -170,7 +177,7 @@ protected static function LoadData() { if ($s === FALSE) { // Will fail later in the script self::$error .= error_get_last()['message'] . "\n"; - self::$title = 'Failed to load keyboard ' . self::$id; + self::$title = 'Failed to load keyboard package ' . self::$id; header('HTTP/1.0 404 Keyboard not found'); } else { $s = json_decode($s); @@ -184,7 +191,7 @@ protected static function LoadData() { self::$license = self::map_license(isset(self::$keyboard->license) ? self::$keyboard->license : 'Unknown'); } else { self::$error .= "Error returned from {$KeymanHosts->api_keyman_com}: $s\n"; - self::$title = 'Failed to load keyboard ' . self::$id; + self::$title = 'Failed to load keyboard package ' . self::$id; header('HTTP/1.0 500 Internal Server Error'); } } @@ -300,7 +307,7 @@ protected static function WriteTitle() { // If parameters are missing ... ?>

-

Keyboard not found.

+

Keyboard package not found.

Important note: @@ -393,6 +399,13 @@ protected static function WriteDownloadBoxes() { } } + private static function GetWebKeyboardId() { + if(empty(self::$keyboard->jsFilename)) { + return ""; + } + return preg_replace("/\.js$/", "", self::$keyboard->jsFilename); + } + protected static function GetWebDeviceFromPageDevice() { global $pageDevice; switch($pageDevice) { @@ -418,12 +431,18 @@ protected static function WriteKeymanWebBox() { return; } + // only show if the jsFilename property is present in the .keyboard_info + if(empty(self::$keyboard->jsFilename)) { + return; + } + // only inject on desktop platforms $webDevice = self::GetWebDeviceFromPageDevice(); if(!$webDevice) { return; } + $keymanWebId = self::GetWebKeyboardId(); $webtext = self::WriteWebBoxes(false); $cdnUrlBase = KeymanWebHost::getKeymanWebUrlBase(); ?> @@ -452,7 +471,7 @@ function() { document.getElementById('osk-host').appendChild(newOSK.element); } ); - keyman.addKeyboards(''); + keyman.addKeyboards(''); })(); See the features.
  • Keyman Developer Downloads
  • Keyman Developer Support
  • +
  • Keyboard authoring service providers
  • 'Keyman is free! | Keyman', - 'css' => ['template.css', 'product-grid.css'], - 'showMenu' => true - ]); -?> - - -

    Keyman is free on all platforms!

    - -

    Following SIL International’s purchase of the Keyman intellectual property in September 2015, SIL has now completed the acquisition of Keyman from Tavultesoft.

    - -

    About SIL International

    - -

    As of August 2017, SIL has now made the entire Keyman product suite freely available to the world.

    - -

    Read the full announcement on our blog!

    - -

    Frequently Asked Questions

    - -
    -
    If I bought a license of Keyman from Tavultesoft before the free version was available, can I get a refund?
    -
    No. Tavultesoft is not offering refunds.
    - -
    Who do I go to for technical support?
    -
    -

    Support has transitioned to be primarily community based. We have two new locations for Keyman technical support:

    - - -
    -

    The Tavultesoft Forums are now read only.

    -
    - -
    I have an existing license for Keyman Desktop. What happens to that license?
    -
    Your license will continue to work. SIL and Tavultesoft are committed to keeping the license servers running. However, we would encourage you to upgrade to version , which is completely free.
    - -
    What are SIL’s long-term plans for Keyman?
    -
    -

    SIL will continue to provide Keyman as a user-friendly downloadable program with the existing and growing catalogue of high quality keyboard layouts.

    - -

    SIL’s long-term goal is to provide a freely available and extensible keyboarding platform, using Keyman as a foundation. SIL is working with standards organisations to create a global keyboarding standard, and will update Keyman to be the open source reference implementation for all major operating systems.

    -
    - -
    What is Marc Durdin doing?
    -
    You may know Marc as the primary developer of Keyman. Marc is leading the SIL team developing the Keyman projects within SIL.
    - -
    What is happening to Tavultesoft?
    -
    Tavultesoft will continue to operate as a consulting microbusiness, mostly for Keyman-related projects. As SIL now owns the Keyman IP, Tavultesoft has ceased all development and direct technical support on Keyman itself.
    - -
    How can I support the development of Keyman?
    -
    -

    You can support the Keyman project through financially partnering with Marc’s family. SIL members are funded through partnership with individuals and organisations that support the vision of SIL. Please visit https://durdin.net/ to learn more about the Durdin family’s journey.

    - -

    You can also donate directly to the Keyman project through the Keyman website at keyman_com_host ?>/donate.

    -
    -
    - -

    Keep in touch

    - -

    The Tavultesoft mailing list has now been closed down. If you would like to keep in touch, here are some options:

    - - diff --git a/index.php b/index.php index 28bc2888..8ef288fc 100644 --- a/index.php +++ b/index.php @@ -5,8 +5,8 @@ // Required head([ 'title' =>'Keyman | Type to the world in your language', - 'description' => 'Unlock the power of your language with Keyman customizable keyboard software. - Available for Windows, Mac, Linux, Android, iPhone, and web, + 'description' => 'Unlock the power of your language with Keyman customizable keyboard software. + Available for Windows, Mac, Linux, Android, iPhone, and web, we support over 2,000 languages to make communication seamless and meaningful.', 'css' => ['template.css','index.css'], 'showMenu' => true, @@ -45,6 +45,7 @@

    Keyman helps you type in over 2000 languages on just about any device — Windows, macOS, Linux, iPhone, iPad, Android tablets and phones, and even instantly in your web browser. + Keyman is completely free and open source!

    diff --git a/iphone-and-ipad/index.php b/iphone-and-ipad/index.php index 4d2c1520..03f0cab1 100644 --- a/iphone-and-ipad/index.php +++ b/iphone-and-ipad/index.php @@ -228,7 +228,7 @@ You can develop your own keyboard layouts for Keyman for iPhone and iPad with Keyman Developer. If you have existing keyboards, they can be ported to iOS with just a recompile. And of course, we include support for touch-oriented features such as touch-and-hold menus, dynamic keyboard layers and more!

    - Keyman Engine for iPhone and iPad Documentation + Keyman Engine for iPhone and iPad Documentation

    Download the latest Keyman Engine for iOS diff --git a/jobs/index.md b/jobs/index.md index 62ab13d8..a9c84794 100644 --- a/jobs/index.md +++ b/jobs/index.md @@ -6,6 +6,9 @@ title: Join the Keyman team Do you have a passion for software development? Would you be interested in joining SIL and working full-time on developing software that serves the needs of language communities around the world? + +We also welcome part-time volunteers. + [Write us](https://software.sil.org/about/contact/), or ping us on [@Keyman](https://twitter.com/keyman) and introduce yourself — we'd love to meet with you!