-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathextension.js
84 lines (70 loc) · 2.71 KB
/
extension.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
const vscode = require('vscode');
const chokidar = require("chokidar");
const CompletionProvider = require("./providers/CompletionProvider");
const DocsDataProvider = require("./providers/DocsDataProvider");
const MarkdownViewerProvider = require("./providers/MarkdownViewerProvider");
const { getAlphabetCharacters, getNestedFiles } = require("./utils/utils");
function activate(context) {
try {
const workspaceFolders = vscode.workspace.workspaceFolders;
const completionProvider = new CompletionProvider();
completionProvider.loadConfig();
for (let i in workspaceFolders) {
const configFile = workspaceFolders[i].uri.fsPath + "/mojo.config.js";
const watcher = chokidar.watch(configFile);
watcher.on("change", () => {
const status = completionProvider.loadConfig();
if (status)
vscode.window.showInformationMessage('Mojo CSS Intellisense has been reconfigured.');
else
vscode.window.showErrorMessage("Failed to read the 'mojo.config.js' file.");
});
}
context.subscriptions.push(
vscode.languages.registerCompletionItemProvider(
{scheme: 'file', language: '*'},
new CompletionProvider(),
...getAlphabetCharacters()
)
);
} catch (e) {
console.log(e)
vscode.window.showErrorMessage("Initialization of the Mojo CSS Intellisense completion provider has failed.");
}
try {
const nestedFiles = getNestedFiles(__dirname, 'docs');
if (nestedFiles) {
const docsDataProvider = new DocsDataProvider(nestedFiles);
vscode.window.registerTreeDataProvider('mojocss-docs-files', docsDataProvider);
vscode.commands.registerCommand('mojocss-docs.refresh', () => docsDataProvider.refresh());
const viewerProvider = new MarkdownViewerProvider();
context.subscriptions.push(vscode.workspace.registerTextDocumentContentProvider('markdown-viewer', viewerProvider));
let openedTabs = {};
vscode.commands.registerCommand('mojocss-docs.openFile', async (filePath, title) => {
if (openedTabs[title]) {
openedTabs[title].reveal();
return;
}
const panel = vscode.window.createWebviewPanel(
'markdownViewer',
title,
vscode.ViewColumn.Active,
{
enableScripts: true
}
);
openedTabs[title] = panel;
panel.webview.html = await viewerProvider.provideTextDocumentContent(filePath, title);
panel.onDidDispose(() => {
delete openedTabs[title];
});
});
}
} catch (e) {
console.log(e)
vscode.window.showErrorMessage("Initialization of the Mojo CSS Intellisense data provider has failed.");
}
}
module.exports = {
activate
};