51 lines
1.4 KiB
JavaScript
51 lines
1.4 KiB
JavaScript
(function () {
|
|
"use strict";
|
|
|
|
function getHints(cm) {
|
|
var cur = cm.getCursor(), token = cm.getTokenAt(cur);
|
|
var inner = CodeMirror.innerMode(cm.getMode(), token.state);
|
|
if (inner.mode.name != "css") return;
|
|
|
|
// If it's not a 'word-style' token, ignore the token.
|
|
if (!/^[\w$_-]*$/.test(token.string)) {
|
|
token = {
|
|
start: cur.ch, end: cur.ch, string: "", state: token.state,
|
|
type: null
|
|
};
|
|
var stack = token.state.stack;
|
|
var lastToken = stack && stack.length > 0 ? stack[stack.length - 1] : "";
|
|
if (token.string == ":" || lastToken.indexOf("property") == 0)
|
|
token.type = "variable";
|
|
else if (token.string == "{" || lastToken.indexOf("rule") == 0)
|
|
token.type = "property";
|
|
}
|
|
|
|
if (!token.type)
|
|
return;
|
|
|
|
var spec = CodeMirror.resolveMode("text/css");
|
|
var keywords = null;
|
|
if (token.type.indexOf("property") == 0)
|
|
keywords = spec.propertyKeywords;
|
|
else if (token.type.indexOf("variable") == 0)
|
|
keywords = spec.valueKeywords;
|
|
|
|
if (!keywords)
|
|
return;
|
|
|
|
var result = [];
|
|
for (var name in keywords) {
|
|
if (name.indexOf(token.string) == 0 /* > -1 */)
|
|
result.push(name);
|
|
}
|
|
|
|
return {
|
|
list: result,
|
|
from: CodeMirror.Pos(cur.line, token.start),
|
|
to: CodeMirror.Pos(cur.line, token.end)
|
|
};
|
|
}
|
|
|
|
CodeMirror.registerHelper("hint", "css", getHints);
|
|
})();
|