summaryrefslogtreecommitdiff
path: root/ext/js/settings/scan-inputs-simple-controller.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/js/settings/scan-inputs-simple-controller.js')
-rw-r--r--ext/js/settings/scan-inputs-simple-controller.js246
1 files changed, 0 insertions, 246 deletions
diff --git a/ext/js/settings/scan-inputs-simple-controller.js b/ext/js/settings/scan-inputs-simple-controller.js
deleted file mode 100644
index b011af5d..00000000
--- a/ext/js/settings/scan-inputs-simple-controller.js
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (C) 2020-2021 Yomichan Authors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
-/* global
- * HotkeyUtil
- * ScanInputsController
- */
-
-class ScanInputsSimpleController {
- constructor(settingsController) {
- this._settingsController = settingsController;
- this._middleMouseButtonScan = null;
- this._mainScanModifierKeyInput = null;
- this._mainScanModifierKeyInputHasOther = false;
- this._hotkeyUtil = new HotkeyUtil();
- }
-
- async prepare() {
- this._middleMouseButtonScan = document.querySelector('#middle-mouse-button-scan');
- this._mainScanModifierKeyInput = document.querySelector('#main-scan-modifier-key');
-
- const {platform: {os}} = await yomichan.api.getEnvironmentInfo();
- this._hotkeyUtil.os = os;
-
- this._mainScanModifierKeyInputHasOther = false;
- this._populateSelect(this._mainScanModifierKeyInput, this._mainScanModifierKeyInputHasOther);
-
- const options = await this._settingsController.getOptions();
-
- this._middleMouseButtonScan.addEventListener('change', this.onMiddleMouseButtonScanChange.bind(this), false);
- this._mainScanModifierKeyInput.addEventListener('change', this._onMainScanModifierKeyInputChange.bind(this), false);
-
- this._settingsController.on('scanInputsChanged', this._onScanInputsChanged.bind(this));
- this._settingsController.on('optionsChanged', this._onOptionsChanged.bind(this));
- this._onOptionsChanged({options});
- }
-
- async refresh() {
- const options = await this._settingsController.getOptions();
- this._onOptionsChanged({options});
- }
-
- // Private
-
- _onScanInputsChanged({source}) {
- if (source === this) { return; }
- this.refresh();
- }
-
- _onOptionsChanged({options}) {
- const {scanning: {inputs}} = options;
- const middleMouseSupportedIndex = this._getIndexOfMiddleMouseButtonScanInput(inputs);
- const mainScanInputIndex = this._getIndexOfMainScanInput(inputs);
- const hasMainScanInput = (mainScanInputIndex >= 0);
-
- let middleMouseSupported = false;
- if (middleMouseSupportedIndex >= 0) {
- const includeValues = this._splitValue(inputs[middleMouseSupportedIndex].include);
- if (includeValues.includes('mouse2')) {
- middleMouseSupported = true;
- }
- }
-
- let mainScanInput = 'none';
- if (hasMainScanInput) {
- const includeValues = this._splitValue(inputs[mainScanInputIndex].include);
- if (includeValues.length > 0) {
- mainScanInput = includeValues[0];
- }
- } else {
- mainScanInput = 'other';
- }
-
- this._setHasMainScanInput(hasMainScanInput);
-
- this._middleMouseButtonScan.checked = middleMouseSupported;
- this._mainScanModifierKeyInput.value = mainScanInput;
- }
-
- onMiddleMouseButtonScanChange(e) {
- const middleMouseSupported = e.currentTarget.checked;
- this._setMiddleMouseSuppported(middleMouseSupported);
- }
-
- _onMainScanModifierKeyInputChange(e) {
- const mainScanKey = e.currentTarget.value;
- if (mainScanKey === 'other') { return; }
- const mainScanInputs = (mainScanKey === 'none' ? [] : [mainScanKey]);
- this._setMainScanInputs(mainScanInputs);
- }
-
- _populateSelect(select, hasOther) {
- const modifierKeys = [
- {value: 'none', name: 'No key'}
- ];
- for (const value of ['alt', 'ctrl', 'shift', 'meta']) {
- const name = this._hotkeyUtil.getModifierDisplayValue(value);
- modifierKeys.push({value, name});
- }
-
- if (hasOther) {
- modifierKeys.push({value: 'other', name: 'Other'});
- }
-
- const fragment = document.createDocumentFragment();
- for (const {value, name} of modifierKeys) {
- const option = document.createElement('option');
- option.value = value;
- option.textContent = name;
- fragment.appendChild(option);
- }
- select.textContent = '';
- select.appendChild(fragment);
- }
-
- _splitValue(value) {
- return value.split(/[,;\s]+/).map((v) => v.trim().toLowerCase()).filter((v) => v.length > 0);
- }
-
- async _setMiddleMouseSuppported(value) {
- // Find target index
- const options = await this._settingsController.getOptions();
- const {scanning: {inputs}} = options;
- const index = this._getIndexOfMiddleMouseButtonScanInput(inputs);
-
- if (value) {
- // Add new
- if (index >= 0) { return; }
- let insertionPosition = this._getIndexOfMainScanInput(inputs);
- insertionPosition = (insertionPosition >= 0 ? insertionPosition + 1 : inputs.length);
- const input = ScanInputsController.createDefaultMouseInput('mouse2', '');
- await this._modifyProfileSettings([{
- action: 'splice',
- path: 'scanning.inputs',
- start: insertionPosition,
- deleteCount: 0,
- items: [input]
- }]);
- } else {
- // Modify existing
- if (index < 0) { return; }
- await this._modifyProfileSettings([{
- action: 'splice',
- path: 'scanning.inputs',
- start: index,
- deleteCount: 1,
- items: []
- }]);
- }
- }
-
- async _setMainScanInputs(value) {
- value = value.join(', ');
-
- // Find target index
- const options = await this._settingsController.getOptions();
- const {scanning: {inputs}} = options;
- const index = this._getIndexOfMainScanInput(inputs);
-
- this._setHasMainScanInput(true);
-
- if (index < 0) {
- // Add new
- const input = ScanInputsController.createDefaultMouseInput(value, 'mouse0');
- await this._modifyProfileSettings([{
- action: 'splice',
- path: 'scanning.inputs',
- start: inputs.length,
- deleteCount: 0,
- items: [input]
- }]);
- } else {
- // Modify existing
- await this._modifyProfileSettings([{
- action: 'set',
- path: `scanning.inputs[${index}].include`,
- value
- }]);
- }
- }
-
- async _modifyProfileSettings(targets) {
- await this._settingsController.modifyProfileSettings(targets);
- this._settingsController.trigger('scanInputsChanged', {source: this});
- }
-
- _getIndexOfMainScanInput(inputs) {
- for (let i = 0, ii = inputs.length; i < ii; ++i) {
- const {include, exclude, types: {mouse}} = inputs[i];
- if (!mouse) { continue; }
- const includeValues = this._splitValue(include);
- const excludeValues = this._splitValue(exclude);
- if (
- (
- includeValues.length === 0 ||
- (includeValues.length === 1 && !this._isMouseInput(includeValues[0]))
- ) &&
- excludeValues.length === 1 &&
- excludeValues[0] === 'mouse0'
- ) {
- return i;
- }
- }
- return -1;
- }
-
- _getIndexOfMiddleMouseButtonScanInput(inputs) {
- for (let i = 0, ii = inputs.length; i < ii; ++i) {
- const {include, exclude, types: {mouse}} = inputs[i];
- if (!mouse) { continue; }
- const includeValues = this._splitValue(include);
- const excludeValues = this._splitValue(exclude);
- if (
- (includeValues.length === 1 && includeValues[0] === 'mouse2') &&
- excludeValues.length === 0
- ) {
- return i;
- }
- }
- return -1;
- }
-
- _isMouseInput(input) {
- return /^mouse\d+$/.test(input);
- }
-
- _setHasMainScanInput(hasMainScanInput) {
- if (this._mainScanModifierKeyInputHasOther !== hasMainScanInput) { return; }
- this._mainScanModifierKeyInputHasOther = !hasMainScanInput;
- this._populateSelect(this._mainScanModifierKeyInput, this._mainScanModifierKeyInputHasOther);
- }
-} \ No newline at end of file