VulpesOS/assets/webapps/settings.gaiamobile.org/js/modules/keyboard_context.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

13 lines
No EOL
4.2 KiB
JavaScript

define(['require','modules/mvvm/observable','modules/mvvm/observable_array','shared/keyboard_helper','shared/manifest_helper'],function(require){'use strict';var Observable=require('modules/mvvm/observable');var ObservableArray=require('modules/mvvm/observable_array');var KeyboardHelper=require('shared/keyboard_helper');var ManifestHelper=require('shared/manifest_helper');var _layoutDict=null;var _keyboards=ObservableArray([]);var _enabledLayouts=ObservableArray([]);var _isReady=false;var _parsingApps=false;var _callbacks=[];var _defaultEnabledCallbacks=[];var Keyboard=function(name,description,launchPath,layouts,app){var _observable=Observable({name:name,description:description,launchPath:launchPath,layouts:layouts,app:app});return _observable;};var Layout=function(options){var _observable=Observable({id:options.id,appName:options.appName,name:options.name,nameL10nId:options.nameL10nId,description:options.description,types:options.types,enabled:options.enabled});_observable.observe('enabled',function(newValue,oldValue){if(!_parsingApps){KeyboardHelper.setLayoutEnabled(options.appManifestURL,options.id,newValue);if(!newValue){KeyboardHelper.checkDefaults(function(layouts,missingTypes){refreshEnabledLayouts(layouts);notifyDefaultEnabled(layouts,missingTypes);});}}});return _observable;};var _waitForLayouts;function refreshEnabledLayouts(reEnabledLayouts){reEnabledLayouts.forEach(function(layout){var app=_layoutDict[layout.app.manifestURL];if(app){app[layout.layoutId].enabled=true;}});}
function notifyDefaultEnabled(layouts,missingTypes){_defaultEnabledCallbacks.forEach(function withCallbacks(callback){callback(layouts[0],missingTypes[0]);});}
function updateLayouts(layouts,reason){function mapLayout(layout){var app=_layoutDict[layout.app.manifestURL];if(!app){app=_layoutDict[layout.app.manifestURL]={};}
if(app[layout.layoutId]){app[layout.layoutId].enabled=layout.enabled;return app[layout.layoutId];}
app[layout.layoutId]=Layout({id:layout.layoutId,appName:layout.manifest.name,appManifestURL:layout.app.manifestURL,name:layout.inputManifest.name,nameL10nId:layout.inputManifest.nameL10nId,description:layout.inputManifest.description,types:layout.inputManifest.types,enabled:layout.enabled});return app[layout.layoutId];}
function reduceApps(carry,layout){if(!carry.some(function checkApp(app){if(app.app===layout.app){app.layouts.push(mapLayout(layout));return true;}})){carry.push({app:layout.app,manifest:layout.manifest,layouts:[mapLayout(layout)]});}
return carry;}
function mapKeyboard(app){return Keyboard(app.manifest.name,app.manifest.description,app.manifest.launch_path,app.layouts,app.app);}
_parsingApps=true;if(reason.apps){_layoutDict={};var apps=layouts.reduce(reduceApps,[]);var keyboards=apps.map(mapKeyboard);_keyboards.reset(keyboards);}
var enabled=layouts.filter(function filterEnabled(layout){return layout.enabled;}).map(mapLayout);_enabledLayouts.reset(enabled);_parsingApps=false;if(_waitForLayouts){_waitForLayouts();_waitForLayouts=undefined;}}
var _init=function(callback){document.addEventListener('DOMRetranslated',function(){_keyboards.forEach(function(keyboard){var keyboardAppInstance=keyboard.app;var keyboardManifest=new ManifestHelper(keyboardAppInstance.manifest);keyboard.name=keyboardManifest.name;keyboard.description=keyboardManifest.description;keyboard.layouts.forEach(function(layout){layout.appName=keyboardManifest.name;});});});_waitForLayouts=callback;KeyboardHelper.stopWatching();KeyboardHelper.watchLayouts(updateLayouts);};var _ready=function(callback){if(!callback){return;}
if(_isReady){callback();}else{_callbacks.push(callback);}};return{reset:function kc_reset(){_layoutDict=null;_keyboards=ObservableArray([]);_enabledLayouts=ObservableArray([]);_isReady=false;_parsingApps=false;_callbacks=[];_defaultEnabledCallbacks=[];},init:function kc_init(callback){_defaultEnabledCallbacks=[];_isReady=false;_init(function(){_isReady=true;_callbacks.forEach(function(callback){callback();});});_ready(callback);},keyboards:function kc_keyboards(callback){_ready(function(){callback(_keyboards);});},enabledLayouts:function kc_enabledLayouts(callback){_ready(function(){callback(_enabledLayouts);});},defaultKeyboardEnabled:function kc_defaultKeyboardEnabled(callback){_defaultEnabledCallbacks.push(callback);}};});