/
githubmirror
/
atom
Обзор
Документация
Войти
/
githubmirror
/
atom
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
packages/dev-live-reload/lib/ui-watcher.js
114 строк
3 KB
Rafael Oleza
Reformat all JS files using prettier
31 май 2019, 19:33
31 май 2019, 19:33
7f3f040
Код
Авторство
О чём код?
const { CompositeDisposable } = require('atom'); const BaseThemeWatcher = require('./base-theme-watcher'); const PackageWatcher = require('./package-watcher'); module.exports = class UIWatcher { constructor() { this.subscriptions = new CompositeDisposable(); this.reloadAll = this.reloadAll.bind(this); this.watchers = []; this.baseTheme = this.createWatcher(new BaseThemeWatcher()); this.watchPackages(); } watchPackages() { this.watchedThemes = new Map(); this.watchedPackages = new Map(); for (const theme of atom.themes.getActiveThemes()) { this.watchTheme(theme); } for (const pack of atom.packages.getActivePackages()) { this.watchPackage(pack); } this.watchForPackageChanges(); } watchForPackageChanges() { this.subscriptions.add( atom.themes.onDidChangeActiveThemes(() => { // We need to destroy all theme watchers as all theme packages are destroyed // when a theme changes. for (const theme of this.watchedThemes.values()) { theme.destroy(); } this.watchedThemes.clear(); // Rewatch everything! for (const theme of atom.themes.getActiveThemes()) { this.watchTheme(theme); } }) ); this.subscriptions.add( atom.packages.onDidActivatePackage(pack => this.watchPackage(pack)) ); this.subscriptions.add( atom.packages.onDidDeactivatePackage(pack => { // This only handles packages - onDidChangeActiveThemes handles themes const watcher = this.watchedPackages.get(pack.name); if (watcher) watcher.destroy(); this.watchedPackages.delete(pack.name); }) ); } watchTheme(theme) { if (PackageWatcher.supportsPackage(theme, 'theme')) { this.watchedThemes.set( theme.name, this.createWatcher(new PackageWatcher(theme)) ); } } watchPackage(pack) { if (PackageWatcher.supportsPackage(pack, 'atom')) { this.watchedPackages.set( pack.name, this.createWatcher(new PackageWatcher(pack)) ); } } createWatcher(watcher) { watcher.onDidChangeGlobals(() => { console.log('Global changed, reloading all styles'); this.reloadAll(); }); watcher.onDidDestroy(() => this.watchers.splice(this.watchers.indexOf(watcher), 1) ); this.watchers.push(watcher); return watcher; } reloadAll() { this.baseTheme.loadAllStylesheets(); for (const pack of atom.packages.getActivePackages()) { if (PackageWatcher.supportsPackage(pack, 'atom')) { pack.reloadStylesheets(); } } for (const theme of atom.themes.getActiveThemes()) { if (PackageWatcher.supportsPackage(theme, 'theme')) { theme.reloadStylesheets(); } } } destroy() { this.subscriptions.dispose(); this.baseTheme.destroy(); for (const pack of this.watchedPackages.values()) { pack.destroy(); } for (const theme of this.watchedThemes.values()) { theme.destroy(); } } };