Metaserverless / Console

Web IDE for Metarhia Cloud Application 🛸
MIT License
7 stars 11 forks source link

Оключение и включение номеров строк в редакторах соурс файлов #27

Closed leonpolak closed 2 years ago

leonpolak commented 2 years ago

По сочетанию клавиш и в настройках. Попозже расшифрую подробнее, но пока можно скопировать сочетание клавиш из VS Code и просто показывать - не показывать по селектору класса "CodeMirror-gutters".

Dimdim28 commented 2 years ago

Добрый день! Могу попробовать реализовать это.

leonpolak commented 2 years ago

Посмотрите - как dsystem/keyboard.js рассылаются эвенты с сочетаниями клавиш (строки 20-30). В editors/BaseCodeEditor надо их перехватывать (как в TreesManager.js строка 79) и делать глобальный document.querySelectorAll('CodeMirror-gutters').classList.toggle('display-none'). Неплохо было-бы ещё это запоминать в LocalStorage через modules.store, и проверять при загрузке

shatanov commented 2 years ago

Как продвигается данный issues? Нужна ли помощь?

leonpolak commented 2 years ago

Так. Написать этот код заняло у меня в несколько раз меньше времени, чем написание ТЗ.


controller_topheader.js
constructor(id, modules) {
....
 this.modules.events.listen('Ctrl+l', ()=>this.toggleLineNumbers(true));
    const storedFromLastSession  = this.modules.store.get('displayLineNumbers', true);
    if (storedFromLastSession === false) this.toggleLineNumbers(false);
    else this.modules.store.set('displayLineNumbers', true, true);
}
 toggleLineNumbers(storeChanges) {
    this.modules.events.emit('toggleLineNumbers');
    if (storeChanges) {
      const storedFromLastSession  = this.modules.store.get('displayLineNumbers', true);
      this.modules.store.set('displayLineNumbers', !storedFromLastSession, true);
    }
  }
  }

baseCodeEditor.js

constructor(id, modules, view, config = {}) {
....
  this.modules.events.listen('toggleLineNumbers', () => {
      this.editor.setOption('lineNumbers', !this.editor.getOption('lineNumbers'));
    });
}

index.js 

 this.controllerTopHeader = new controllerTopHeader('top-header', modules); - инициализируем последним
shatanov commented 2 years ago

Так. Написать этот код заняло у меня в несколько раз меньше времени, чем написание ТЗ.


controller_topheader.js
constructor(id, modules) {
....
 this.modules.events.listen('Ctrl+l', ()=>this.toggleLineNumbers(true));
    const storedFromLastSession  = this.modules.store.get('displayLineNumbers', true);
    if (storedFromLastSession === false) this.toggleLineNumbers(false);
    else this.modules.store.set('displayLineNumbers', true, true);
}
 toggleLineNumbers(storeChanges) {
    this.modules.events.emit('toggleLineNumbers');
    if (storeChanges) {
      const storedFromLastSession  = this.modules.store.get('displayLineNumbers', true);
      this.modules.store.set('displayLineNumbers', !storedFromLastSession, true);
    }
  }
  }

baseCodeEditor.js

constructor(id, modules, view, config = {}) {
....
  this.modules.events.listen('toggleLineNumbers', () => {
      this.editor.setOption('lineNumbers', !this.editor.getOption('lineNumbers'));
    });
}

index.js 

 this.controllerTopHeader = new controllerTopHeader('top-header', modules); - инициализируем последним

Значит issues уже решен?

leonpolak commented 2 years ago

Да