mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-09-07 16:37:02 +03:00
Remove cmd imterface
This commit is contained in:
parent
e449261277
commit
23451c032a
9 changed files with 0 additions and 367 deletions
|
|
@ -20,7 +20,6 @@ import {
|
||||||
import {KeyState, Magics} from 'Common/Enums';
|
import {KeyState, Magics} from 'Common/Enums';
|
||||||
import {root, rootAdmin, rootUser, populateAuthSuffix} from 'Common/Links';
|
import {root, rootAdmin, rootUser, populateAuthSuffix} from 'Common/Links';
|
||||||
import {initOnStartOrLangChange, initNotificationLanguage} from 'Common/Translator';
|
import {initOnStartOrLangChange, initNotificationLanguage} from 'Common/Translator';
|
||||||
import {toggle as toggleCmd} from 'Common/Cmd';
|
|
||||||
import * as Events from 'Common/Events';
|
import * as Events from 'Common/Events';
|
||||||
import * as Settings from 'Storage/Settings';
|
import * as Settings from 'Storage/Settings';
|
||||||
|
|
||||||
|
|
@ -120,13 +119,6 @@ class AbstractApp extends AbstractBoot
|
||||||
key('esc, enter', KeyState.All, () => {
|
key('esc, enter', KeyState.All, () => {
|
||||||
detectDropdownVisibility();
|
detectDropdownVisibility();
|
||||||
});
|
});
|
||||||
|
|
||||||
if (Settings.appSettingsGet('allowCmdInterface'))
|
|
||||||
{
|
|
||||||
key('ctrl+shift+`', KeyState.All, () => {
|
|
||||||
toggleCmd();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
remote() {
|
remote() {
|
||||||
|
|
|
||||||
|
|
@ -1,352 +0,0 @@
|
||||||
|
|
||||||
import window from 'window';
|
|
||||||
import $ from '$';
|
|
||||||
import _ from '_';
|
|
||||||
import ko from 'ko';
|
|
||||||
import {$body} from 'Common/Globals';
|
|
||||||
import {EventKeyCode, Magics} from 'Common/Enums';
|
|
||||||
import {trim, deModule, inArray, changeTheme} from 'Common/Utils';
|
|
||||||
import {reload as translatorReload} from 'Common/Translator';
|
|
||||||
|
|
||||||
import * as Settings from 'Storage/Settings';
|
|
||||||
|
|
||||||
import ThemeStore from 'Stores/Theme';
|
|
||||||
import LanguageStore from 'Stores/Language';
|
|
||||||
|
|
||||||
let
|
|
||||||
cmdDom = null,
|
|
||||||
contoller = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @params {string} cmd
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
function cmdError(cmd) {
|
|
||||||
return deModule(require('Html/Cmds/Error.html')).replace('{{ cmd }}', cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
function cmdClear(dom) {
|
|
||||||
dom.find('.rl-cmd-history-data').empty();
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
function cmdHelp(cmds) {
|
|
||||||
return deModule(require('Html/Cmds/Help.html')).replace('{{ commands }}', cmds.join(' '));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
function cmdTheme(param, themes) {
|
|
||||||
if (param && -1 < inArray(param, themes))
|
|
||||||
{
|
|
||||||
changeTheme(param);
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
return deModule(require('Html/Cmds/ThemeEmpty.html')).replace('{{ themes }}', themes.join(', '));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
function cmdLang(param, isAdmin, langs) {
|
|
||||||
if (param && -1 < inArray(param, langs))
|
|
||||||
{
|
|
||||||
translatorReload(isAdmin, param);
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
return deModule(require('Html/Cmds/LangEmpty.html')).replace('{{ langs }}', langs.join(', '));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
function cmdVersion() {
|
|
||||||
return deModule(require('Html/Cmds/Version.html')).replace('{{ version }}',
|
|
||||||
Settings.appSettingsGet('version') + ' (' + Settings.appSettingsGet('appVersionType') + ')');
|
|
||||||
}
|
|
||||||
|
|
||||||
class CmdContoller
|
|
||||||
{
|
|
||||||
dom = null;
|
|
||||||
|
|
||||||
opened = ko.observable(false);
|
|
||||||
cmd = ko.observable('');
|
|
||||||
focused = ko.observable(false);
|
|
||||||
|
|
||||||
themes = ThemeStore.themes;
|
|
||||||
|
|
||||||
cmdHistory = [];
|
|
||||||
cmdHistoryShift = 0;
|
|
||||||
|
|
||||||
cmdHelper = ko.observable('');
|
|
||||||
|
|
||||||
cmds = ['help', 'version', 'clear', 'theme', 'lang'];
|
|
||||||
cmdsWithParameters = ['theme', 'lang'];
|
|
||||||
|
|
||||||
isAdmin = false;
|
|
||||||
|
|
||||||
constructor(dom)
|
|
||||||
{
|
|
||||||
this.dom = dom;
|
|
||||||
this.isAdmin = !!Settings.appSettingsGet('admin');
|
|
||||||
}
|
|
||||||
|
|
||||||
runCmd(cmd, params, isTab) {
|
|
||||||
|
|
||||||
let
|
|
||||||
result = '',
|
|
||||||
values = null;
|
|
||||||
|
|
||||||
this.cmdHelper('');
|
|
||||||
|
|
||||||
if (isTab)
|
|
||||||
{
|
|
||||||
switch (cmd) {
|
|
||||||
case 'lang':
|
|
||||||
values = (this.isAdmin ? LanguageStore.languagesAdmin() : LanguageStore.languages())
|
|
||||||
.filter((line) => 0 === line.lastIndexOf(params, 0));
|
|
||||||
break;
|
|
||||||
case 'theme':
|
|
||||||
values = ThemeStore.themes().filter((line) => 0 === line.lastIndexOf(params, 0));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmd && values)
|
|
||||||
{
|
|
||||||
if (1 === values.length && values[0])
|
|
||||||
{
|
|
||||||
this.cmd(cmd + ' ' + values[0]);
|
|
||||||
}
|
|
||||||
else if (1 < values.length && values[0] && values[1])
|
|
||||||
{
|
|
||||||
let
|
|
||||||
sub = '',
|
|
||||||
index = 0;
|
|
||||||
|
|
||||||
const
|
|
||||||
list = values[0].split(''),
|
|
||||||
len = list.length;
|
|
||||||
|
|
||||||
for (; index < len; index++)
|
|
||||||
{
|
|
||||||
if (values[1][index] === list[index])
|
|
||||||
{
|
|
||||||
sub += list[index];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sub)
|
|
||||||
{
|
|
||||||
this.cmdHelper('[' + values.join(', ') + ']');
|
|
||||||
this.cmd(cmd + ' ' + sub);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (cmd) {
|
|
||||||
case 'hi':
|
|
||||||
result = 'hello';
|
|
||||||
break;
|
|
||||||
case '?':
|
|
||||||
case 'ls':
|
|
||||||
case 'help':
|
|
||||||
result = cmdHelp(this.cmds);
|
|
||||||
break;
|
|
||||||
case 'v':
|
|
||||||
case 'version':
|
|
||||||
result = cmdVersion();
|
|
||||||
break;
|
|
||||||
case 'clear':
|
|
||||||
result = cmdClear(this.dom);
|
|
||||||
break;
|
|
||||||
case 'theme':
|
|
||||||
result = cmdTheme(params, ThemeStore.themes());
|
|
||||||
break;
|
|
||||||
case 'lang':
|
|
||||||
result = cmdLang(params, this.isAdmin, this.isAdmin ? LanguageStore.languagesAdmin() : LanguageStore.languages());
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
result = cmdError(cmd);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
onCmd(isTab) {
|
|
||||||
const
|
|
||||||
cmdLine = this.cmd().replace(/[\s]+/, ' '),
|
|
||||||
cmdParts = trim(cmdLine).replace().split(/[\s]+/),
|
|
||||||
cmd = cmdParts.shift();
|
|
||||||
|
|
||||||
if ('' === trim(cmdLine))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isTab)
|
|
||||||
{
|
|
||||||
if (-1 < inArray(cmd, this.cmds))
|
|
||||||
{
|
|
||||||
const result = this.runCmd(cmd, cmdParts.join(' '), true);
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
this.cmd(result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const values = this.cmds.filter((line) => line !== cmd && 0 === line.lastIndexOf(cmd, 0));
|
|
||||||
if (1 === values.length && values[0])
|
|
||||||
{
|
|
||||||
this.cmd(values[0] + (-1 < inArray(values[0], this.cmdsWithParameters) ? ' ' : ''));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.cmdHistory.unshift(cmdLine);
|
|
||||||
this.cmdHistory = _.uniq(this.cmdHistory);
|
|
||||||
this.cmdHistoryShift = 0;
|
|
||||||
|
|
||||||
const
|
|
||||||
result = this.runCmd(cmd, cmdParts.join(' '), false),
|
|
||||||
h = this.dom.find('.rl-cmd-history-data');
|
|
||||||
|
|
||||||
if (h && h[0])
|
|
||||||
{
|
|
||||||
h.append($('<div></div>').html(deModule(require('Html/Cmds/Main.html')).replace('{{ cmd }}', cmdLine)));
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
h.append($('<div></div>').html(result));
|
|
||||||
}
|
|
||||||
|
|
||||||
_.delay(() => {
|
|
||||||
this.dom.find('.rl-cmd-history').scrollTop(h.height());
|
|
||||||
}, 50);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
onEsc() {
|
|
||||||
this.opened(false);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
onTab() {
|
|
||||||
this.onCmd(true);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
onEnter() {
|
|
||||||
this.onCmd(false);
|
|
||||||
this.cmd('');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
onKeyDown(event) {
|
|
||||||
if (event && event.keyCode &&
|
|
||||||
!event.metaKey && !event.ctrlKey && !event.shiftKey && 0 < this.cmdHistory.length)
|
|
||||||
{
|
|
||||||
const code = window.parseInt(event.keyCode, 10);
|
|
||||||
if (EventKeyCode.Up === code || EventKeyCode.Down === code)
|
|
||||||
{
|
|
||||||
if (this.cmdHistory[this.cmdHistoryShift])
|
|
||||||
{
|
|
||||||
this.cmd(this.cmdHistory[this.cmdHistoryShift]);
|
|
||||||
if (EventKeyCode.Up === code)
|
|
||||||
{
|
|
||||||
this.cmdHistoryShift += 1;
|
|
||||||
}
|
|
||||||
else if (EventKeyCode.Down === code)
|
|
||||||
{
|
|
||||||
this.cmdHistoryShift -= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.cmdHistoryShift = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {void}
|
|
||||||
*/
|
|
||||||
export function bind(dom)
|
|
||||||
{
|
|
||||||
if (!contoller)
|
|
||||||
{
|
|
||||||
contoller = new CmdContoller(dom);
|
|
||||||
|
|
||||||
ko.applyBindingAccessorsToNode(dom[0], {
|
|
||||||
translatorInit: true,
|
|
||||||
template: () => ({name: 'Cmd'})
|
|
||||||
}, contoller);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {void}
|
|
||||||
*/
|
|
||||||
function init()
|
|
||||||
{
|
|
||||||
if (null === cmdDom)
|
|
||||||
{
|
|
||||||
cmdDom = $('<div></div>');
|
|
||||||
cmdDom.appendTo($body);
|
|
||||||
|
|
||||||
bind(cmdDom);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {void}
|
|
||||||
*/
|
|
||||||
export function toggle()
|
|
||||||
{
|
|
||||||
if (Settings.appSettingsGet('allowCmdInterface'))
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
|
|
||||||
_.delay(() => {
|
|
||||||
if (contoller)
|
|
||||||
{
|
|
||||||
contoller.opened(!contoller.opened());
|
|
||||||
if (contoller.opened())
|
|
||||||
{
|
|
||||||
_.delay(() => {
|
|
||||||
if (contoller && contoller.focused)
|
|
||||||
{
|
|
||||||
contoller.focused(true);
|
|
||||||
}
|
|
||||||
}, Magics.Time50ms);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, Magics.Time50ms);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
<span class="rl-cmd-clr-success">done!</span>
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
<span class="rl-cmd-clr-error">Command not found:</span> {{ cmd }}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
<span class="rl-cmd-clr-info">commands:</span> {{ commands }}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
lang <span class="rl-cmd-clr-info">[{{ langs }}]</span>
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
<span class="rl-cmd-clr-success">></span> {{ cmd }}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
theme <span class="rl-cmd-clr-info">[{{ themes }}]</span>
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
<span class="rl-cmd-clr-info">version:</span> {{ version }}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue