657798d219
* pull editing-only stuff from codemirror-default.js * switch throttledSetOption to IntersectionObserver
82 lines
2.7 KiB
JavaScript
82 lines
2.7 KiB
JavaScript
/* global CodeMirror showHelp cmFactory onDOMready $ prefs t createHotkeyInput */
|
|
'use strict';
|
|
|
|
(() => {
|
|
onDOMready().then(() => {
|
|
$('#colorpicker-settings').onclick = configureColorpicker;
|
|
});
|
|
prefs.subscribe('editor.colorpicker.hotkey', registerHotkey);
|
|
prefs.subscribe('editor.colorpicker', setColorpickerOption, {now: true});
|
|
|
|
function setColorpickerOption(id, enabled) {
|
|
const defaults = CodeMirror.defaults;
|
|
const keyName = prefs.get('editor.colorpicker.hotkey');
|
|
defaults.colorpicker = enabled;
|
|
if (enabled) {
|
|
if (keyName) {
|
|
CodeMirror.commands.colorpicker = invokeColorpicker;
|
|
defaults.extraKeys = defaults.extraKeys || {};
|
|
defaults.extraKeys[keyName] = 'colorpicker';
|
|
}
|
|
defaults.colorpicker = {
|
|
tooltip: t('colorpickerTooltip'),
|
|
popup: {
|
|
tooltipForSwitcher: t('colorpickerSwitchFormatTooltip'),
|
|
paletteLine: t('numberedLine'),
|
|
paletteHint: t('colorpickerPaletteHint'),
|
|
hexUppercase: prefs.get('editor.colorpicker.hexUppercase'),
|
|
embedderCallback: state => {
|
|
['hexUppercase', 'color']
|
|
.filter(name => state[name] !== prefs.get('editor.colorpicker.' + name))
|
|
.forEach(name => prefs.set('editor.colorpicker.' + name, state[name]));
|
|
},
|
|
get maxHeight() {
|
|
return prefs.get('editor.colorpicker.maxHeight');
|
|
},
|
|
set maxHeight(h) {
|
|
prefs.set('editor.colorpicker.maxHeight', h);
|
|
},
|
|
},
|
|
};
|
|
} else {
|
|
if (defaults.extraKeys) {
|
|
delete defaults.extraKeys[keyName];
|
|
}
|
|
}
|
|
cmFactory.globalSetOption('colorpicker', defaults.colorpicker);
|
|
}
|
|
|
|
function registerHotkey(id, hotkey) {
|
|
CodeMirror.commands.colorpicker = invokeColorpicker;
|
|
const extraKeys = CodeMirror.defaults.extraKeys;
|
|
for (const key in extraKeys) {
|
|
if (extraKeys[key] === 'colorpicker') {
|
|
delete extraKeys[key];
|
|
break;
|
|
}
|
|
}
|
|
if (hotkey) {
|
|
extraKeys[hotkey] = 'colorpicker';
|
|
}
|
|
}
|
|
|
|
function invokeColorpicker(cm) {
|
|
cm.state.colorpicker.openPopup(prefs.get('editor.colorpicker.color'));
|
|
}
|
|
|
|
function configureColorpicker(event) {
|
|
event.preventDefault();
|
|
const input = createHotkeyInput('editor.colorpicker.hotkey', () => {
|
|
$('#help-popup .dismiss').onclick();
|
|
});
|
|
const popup = showHelp(t('helpKeyMapHotkey'), input);
|
|
if (this instanceof Element) {
|
|
const bounds = this.getBoundingClientRect();
|
|
popup.style.left = bounds.right + 10 + 'px';
|
|
popup.style.top = bounds.top - popup.clientHeight / 2 + 'px';
|
|
popup.style.right = 'auto';
|
|
}
|
|
input.focus();
|
|
}
|
|
})();
|