atom-user-support-helper
Version:
A helper for user support features in Atom.io
99 lines (90 loc) • 2.81 kB
JavaScript
'use babel';
let loophole = null;
let allowUnsafeEval = null;
let allowUnsafeNewFunction = null;
let pug = null;
let Disposable = null
let PromptViewList = null;
let PromptViewMultipleList = null
let templates = {};
// Initialize the modules
loophole = require('loophole');
allowUnsafeEval = loophole.allowUnsafeEval;
allowUnsafeNewFunction = loophole.allowUnsafeNewFunction;
Disposable = require('atom').Disposable
// Initilaize the local modules
PromptViewList = require('./prompt-view-list')
PromptViewMultipleList = require('./prompt-view-multiple-list')
// Compile the pug files
allowUnsafeEval(() => {
allowUnsafeNewFunction(() => {
pug = require('pug');
templates.promptViewDropdown = pug.compile(require('../pug/prompt-view-dropdown'))
})
});
export default class inputInterfaces {
static input(options) {
const editorElement = document.createElement('atom-text-editor');
const editor = atom.workspace.buildTextEditor({
mini: true,
lineNumberGutterVisible: false,
placeholderText: options.name || ''
});
editorElement.setModel(editor);
return {
elem: editorElement,
setValue: (v) => { editor.setText(v); },
getValue: () => { return editor.getText(); },
onChange: (callback) => { return editor.onDidChange(callback) }
};
}
static list(options) {
const view = new PromptViewList();
view.open(options.choices)
return {
elem: view.element,
setValue: (v) => { view.setSelectedItem(v); },
getValue: () => { return view.getItem(); },
onChange: (callback) => { return view.onConfirmed(callback) }
}
}
static dropdown(options) {
const html = templates.promptViewDropdown(options)
const t = document.createElement('div')
t.innerHTML = html;
const elem = t.children[0];
t.remove();
return {
elem: elem,
setValue: (v) => {
const children = elem.children;
for (let i = 0; i < children.length; i++) {
const child = children[i];
if (child.value === v) {
elem.selectedIndex = i;
}
}
elem.dispatchEvent(new Event('change'))
},
getValue: () => { return elem.options[elem.selectedIndex].value; },
onChange: (callback) => {
elem.addEventListener("change", callback);
return new Disposable(() => {
elem.removeEventListener("change", callback)
})
}
}
}
static multipleList(options) {
const view = new PromptViewMultipleList()
view.open(options.choices)
return {
elem: view.element,
setValue: (vs) => { view.setSelectedItems(vs); },
getValue: () => { return view.getSelectedItems(); },
onChange: (callback) => {
return view.onChanged(callback)
}
}
}
}