ui/lib/shared/addon/code-mirror/service.js

69 lines
1.5 KiB
JavaScript

import CodeMirror from 'codemirror';
import { singleton } from 'shared/utils/pipelineStep';
import Service from '@ember/service';
export default Service.extend({
init() {
this._super(...arguments);
this._instances = Object.create(null);
},
fromTextArea(id, textarea) {
return this.registerInstance(id, CodeMirror.fromTextArea(textarea));
},
instanceFor(id) {
return this._instances[id];
},
registerInstance(id, instance) {
this._instances[id] = instance;
return instance;
},
signal(emitter, type, ...values) {
CodeMirror.signal(emitter, type, ...values);
},
unregisterInstance(id) {
delete this._instances[id];
},
getMatchedHint(value, editor) {
var hintAry = singleton.hintAry;
var cur = editor.getCursor();
var cursorPosition = cur.ch;
var cursorValue = editor.getLine(cur.line).slice(0, cursorPosition);
var matched = false;
var _$valueIndex = cursorValue.lastIndexOf('$');
var _$value = cursorValue.slice(_$valueIndex, cursorValue.length);
var matchedArry = [];
if (_$value) {
for (var i = 0; i < hintAry.length; i++) {
var item = hintAry[i];
// if matched on end
if ((item.indexOf(_$value) === 0)) {
matched = true;
matchedArry.push(item);
}
}
if (matched) {
return {
matchedArry,
index: cursorPosition - _$valueIndex
};
}
}
return {
matchedArry: [],
index: -1
};
}
});