Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
13 lines
No EOL
4.2 KiB
JavaScript
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);}};}); |