This repository was archived by the owner on Dec 15, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 276
/
Copy pathpackage-grammars-view.js
97 lines (80 loc) · 3.16 KB
/
package-grammars-view.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/** @babel */
import path from 'path'
import {CompositeDisposable} from 'atom'
import SettingsPanel from './settings-panel'
// View to display the grammars that a package has registered.
export default class PackageGrammarsView {
constructor (packagePath) {
this.element = document.createElement('section')
this.element.classList.add('package-grammars')
this.grammarSettings = document.createElement('div')
this.element.appendChild(this.grammarSettings)
this.disposables = new CompositeDisposable()
this.packagePath = path.join(packagePath, path.sep)
this.addGrammars()
this.disposables.add(atom.grammars.onDidAddGrammar(() => this.addGrammars()))
this.disposables.add(atom.grammars.onDidUpdateGrammar(() => this.addGrammars()))
}
destroy () {
this.disposables.dispose()
this.element.remove()
}
getPackageGrammars () {
const packageGrammars = []
const grammars = atom.grammars.grammars != null ? atom.grammars.grammars : []
for (let grammar of grammars) {
if (grammar.path) {
if (grammar.path.indexOf(this.packagePath) === 0) {
packageGrammars.push(grammar)
}
}
}
return packageGrammars.sort(function (grammar1, grammar2) {
const name1 = grammar1.name || grammar1.scopeName || ''
const name2 = grammar2.name || grammar2.scopeName || ''
return name1.localeCompare(name2)
})
}
addGrammarHeading (grammar, panel) {
const container = document.createElement('div')
container.classList.add('native-key-bindings', 'text')
container.tabIndex = -1
const grammarScope = document.createElement('div')
grammarScope.classList.add('grammar-scope')
const scopeStrong = document.createElement('strong')
scopeStrong.textContent = 'Scope: '
grammarScope.appendChild(scopeStrong)
const scopeSpan = document.createElement('span')
scopeSpan.textContent = grammar.scopeName != null ? grammar.scopeName : ''
grammarScope.appendChild(scopeSpan)
container.appendChild(grammarScope)
const grammarFileTypes = document.createElement('div')
grammarFileTypes.classList.add('grammar-filetypes')
const fileTypesStrong = document.createElement('strong')
fileTypesStrong.textContent = 'File Types: '
grammarFileTypes.appendChild(fileTypesStrong)
const fileTypes = grammar.fileTypes || []
const fileTypesSpan = document.createElement('span')
fileTypesSpan.textContent = fileTypes.join(', ')
grammarFileTypes.appendChild(fileTypesSpan)
container.appendChild(grammarFileTypes)
const sectionBody = panel.element.querySelector('.section-body')
sectionBody.parentElement.insertBefore(container, sectionBody)
}
addGrammars () {
this.grammarSettings.innerHTML = ''
for (let grammar of this.getPackageGrammars()) {
let {scopeName, name} = grammar
if (!scopeName || !name) {
continue
}
if (!scopeName.startsWith('.')) {
scopeName = `.${scopeName}`
}
const title = `${name} Grammar`
const panel = new SettingsPanel({title, scopeName, icon: 'puzzle'})
this.addGrammarHeading(grammar, panel)
this.grammarSettings.appendChild(panel.element)
}
}
}