Closed Dimdim28 closed 2 years ago
Система работает, но есть небольшие проблемы. Я надеюсь, вы понимаете, что, кроме знакомства с системой и решения самого issue, задачи в этой группе показать вам относительно правильный подход, стиль и логику написания систем такой сложности. 1) package-lock.json - попал в pull request. это зря. 2) изменения в baseCodeEditor - ни на что не влияют, поэтому лишние 3) как и this.modules.events.emit('disableLineNumbers', flag); 4) прохождение по циклу детей - лишнее, достаточно так:
`` disableLineNumbers() {
const gutterWrappers = document.querySelectorAll(".CodeMirror-gutter-wrapper");
const gutters = document.querySelectorAll(".CodeMirror-gutters");
let flag = true;
for (const wrapper of gutterWrappers) {
flag = wrapper.classList.toggle('display-none');
}
for (const gutter of gutters) {
flag = gutter.classList.toggle('display-none');
}
this.modules.store.set('displayLineNumbers', flag, true);
} `` Обратите внимание на последний аргумент store.set - true означает сохранить в LocalStorage. Так что, что при следующем открытии страницы вам достаточно проверить store.get('displayLineNumbers', true) и если он не undefined, но false - сразу запустить disableLineNumbers() при инициации контроллера
5) Самое сложное. Он не работает на длинных файлах, то есть часть за экраном к которой вы прокручиваете остаётся видимой (проверьте на client -> /js/index.js). Кроме этого, при переключении между эдиторами номера строк остаются видимыми. Это связано с тем как работает CodeMirror, и изначально предложенное мной решение не работает. Надо разбираться, я покопаю в чём дело, но вы тоже можете.
И, собственно, через 5 минут, посмотрев в документацию CodeMirror абсолютное решение немедленно нашлось. Убираем всё из controller_toppanel, а в baseCodeEditor добавляем:
this.modules.events.listen('Ctrl+l', () => {
this.editor.setOption('lineNumbers', !this.editor.getOption('lineNumbers'));
});
в контроллере можно оставить проверку на чтение и запись этой переменной в LocalStorage и начальную проверку на её негативное значение. Тогда контроллер будет отлавливать эвент 'Ctrl+l' и дальше будет запускать свой эвент на который уже будут реагировать эдиторы. Ну или запускать свой эвент при инциализации, если он сохранился false с прошлой сессии.
Вроде исправил: https://github.com/Dimdim28/Console/commit/6828f547918330622bda75edd9e6044a3d080aa1 Кидать новый пулл реквест?
Происходить должно следущее: 1) сохранять и проверять LocalStorage нужно в ОДНОМ месте, а не во всех инстансах, хоть в toзheader_controller, хоть где. И в этом же месте - надо ловить Ctrl + L эвент (фактически - проверка при загрузке это сохранённый с прошлой сессии Ctrl + L эвент). И оттуда посылать другой эвент, который будет ловиться всеми инстансами - и включать-выключать номера строк. 2) package-lock.json фвйла в пулл реквесте быть не должно
Я написал решение - в issue, у меня не очень много времени это дальше объяснять.
Использовал в качестве сочетания клавиш для скрытия / отображения номеров строк CTRL + L, так как при сочетании CTRL + N и на Linux и на Windows открывается в браузере новая окно.