forked from microsoft/vscode-atom-keybindings
-
Notifications
You must be signed in to change notification settings - Fork 0
/
extension.js
94 lines (76 loc) · 2.94 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
85
86
87
88
89
90
91
92
93
94
const vscode = require('vscode');
const showInformationMessage = vscode.window.showInformationMessage;
const isGlobalConfigValue = true;
class Setting {
constructor(name, value) {
this.name = name;
this.value = value;
}
}
const versionThreeSettings = [
new Setting('multiCursorModifier', 'ctrlCmd'),
new Setting('formatOnPaste', true)
];
function updateSettings(editorConfig, settings) {
settings.forEach((setting) => {
editorConfig.update(setting.name, setting.value, isGlobalConfigValue);
});
}
function isDefaultValueSet(editorConfig, settings) {
for (var i = 0; i < settings.length; i++) {
var setting = editorConfig.inspect(settings[i].name);
const dv = setting ? setting.defaultValue : null;
const gv = setting ? setting.globalValue : null;
if (gv === dv || gv === undefined) {
return true;
}
}
return false;
}
class VersionThreeUpdateSetting {
constructor() {
this.name = 'promptV3Features';
this.config = vscode.workspace.getConfiguration('atomKeymap');
this.hasPrompted = this.config.get(this.name) || false;
}
persist() {
this.config.update(this.name, true, isGlobalConfigValue);
}
}
class View {
constructor(updateSetting, editorConfig) {
this.updateSetting = updateSetting;
this.editorConfig = editorConfig;
this.messages = {
yes: 'Yes',
no: 'No',
learnMore: 'Learn More',
prompt: 'New features are available for Atom Keymap 3.0. Do you want to enable the new features?',
noChange: 'Atom Keymap: New features have not been enable.',
change: 'Atom Keymap: New features have been added.',
};
}
showMessage() {
const answer = showInformationMessage(this.messages.prompt, this.messages.yes, this.messages.no, this.messages.learnMore);
answer.then((selectedOption) => {
if (selectedOption === this.messages.yes) {
this.updateSetting.persist();
updateSettings(this.editorConfig, versionThreeSettings);
showInformationMessage(this.messages.change);
} else if (selectedOption === this.messages.no) {
this.updateSetting.persist();
showInformationMessage(this.messages.noChange);
} else if (selectedOption === this.messages.learnMore) {
vscode.commands.executeCommand('vscode.open', vscode.Uri.parse('https://marketplace.visualstudio.com/items?itemName=ms-vscode.atom-keybindings'));
}
});
}
}
const activate = () => {
const editorConfig = vscode.workspace.getConfiguration('editor');
const updateSetting = new VersionThreeUpdateSetting();
if (!updateSetting.hasPrompted && isDefaultValueSet(editorConfig, versionThreeSettings)) {
new View(updateSetting, editorConfig).showMessage();
}
}
module.exports = { activate };