snappymail/dev/Common/Globals.js

66 lines
1.6 KiB
JavaScript
Raw Normal View History

2016-06-07 05:57:52 +08:00
import ko from 'ko';
import { Scope } from 'Common/Enums';
2016-06-07 05:57:52 +08:00
2021-08-20 21:40:07 +08:00
let keyScopeFake = Scope.All;
2021-08-20 21:40:07 +08:00
export const
2021-08-20 21:40:07 +08:00
doc = document,
2016-06-07 05:57:52 +08:00
2021-08-20 21:40:07 +08:00
$htmlCL = doc.documentElement.classList,
2021-08-20 21:40:07 +08:00
elementById = id => doc.getElementById(id),
2016-06-07 05:57:52 +08:00
exitFullscreen = () => getFullscreenElement() && (doc.exitFullscreen || doc.webkitExitFullscreen).call(doc),
2021-09-01 17:01:13 +08:00
getFullscreenElement = () => doc.fullscreenElement || doc.webkitFullscreenElement,
2021-08-20 21:40:07 +08:00
Settings = rl.settings,
SettingsGet = Settings.get,
SettingsCapa = Settings.capa,
2016-06-07 05:57:52 +08:00
2021-08-20 21:40:07 +08:00
dropdownVisibility = ko.observable(false).extend({ rateLimit: 0 }),
2021-08-20 21:40:07 +08:00
moveAction = ko.observable(false),
leftPanelDisabled = ko.observable(false),
2021-08-20 21:40:07 +08:00
createElement = (name, attr) => {
let el = doc.createElement(name);
attr && Object.entries(attr).forEach(([k,v]) => el.setAttribute(k,v));
return el;
},
2017-02-09 01:48:53 +08:00
fireEvent = (name, detail) => dispatchEvent(new CustomEvent(name, {detail:detail})),
2021-08-20 21:40:07 +08:00
// keys
keyScopeReal = ko.observable(Scope.All),
keyScope = value => {
if (value) {
if (Scope.Menu !== value) {
keyScopeFake = value;
if (dropdownVisibility()) {
value = Scope.Menu;
}
}
keyScopeReal(value);
shortcuts.setScope(value);
} else {
return keyScopeFake;
}
};
2021-08-20 21:40:07 +08:00
dropdownVisibility.subscribe(value => {
if (value) {
keyScope(Scope.Menu);
} else if (Scope.Menu === shortcuts.getScope()) {
keyScope(keyScopeFake);
}
});
leftPanelDisabled.toggle = () => leftPanelDisabled(!leftPanelDisabled());
2021-08-20 21:40:07 +08:00
leftPanelDisabled.subscribe(value => {
value && moveAction() && moveAction(false);
$htmlCL.toggle('rl-left-panel-disabled', value);
});
moveAction.subscribe(value => value && leftPanelDisabled() && leftPanelDisabled(false));