c9-core/plugins/c9.ide.language.core/completedp.js

98 wiersze
3.6 KiB
JavaScript

define(function(require, exports, module) {
var guidToShortString = exports.guidToShortString = function(guid) {
var result = guid && guid.replace(/^[^:]+:(([^\/]+)\/)*?([^\/]*?)(\[\d+[^\]]*\])?(\/prototype)?$|.*/, "$3");
return result && result !== "Object" ? result : "";
};
var guidToLongString = exports.guidToLongString = function(guid, name) {
if (guid.substr(0, 6) === "local:")
return guidToShortString(guid);
var result = guid && guid.replace(/^[^:]+:(([^\/]+\/)*)*?([^\/]*?)$|.*/, "$1$3");
if (!result || result === "Object")
return "";
result = result.replace(/\//g, ".").replace(/\[\d+[^\]]*\]/g, "");
if (name !== "prototype")
result = result.replace(/\.prototype$/, "");
return result;
};
function addStylesheetRule(cssText) {
var s = document.styleSheets[document.styleSheets.length - 1];
s.insertRule(cssText, s.cssRules.length);
}
var iconClass = {};
function defineIcon(icon) {
var path = (this.staticUrl || "/static") + "/plugins/c9.ide.language/images/";
iconClass[icon] = "lang-icon-" + icon;
var cssText = "." + iconClass[icon] + "{"
+ "background-image:url('" + path + icon + ".png')"
+ "}";
//console.log(cssText)
addStylesheetRule(cssText);
return iconClass[icon];
}
function tokenizeRow() {
return [];
}
function renderLine(lineEl, row, foldLine) {
var match = this.popup.data[row];
var icon = this.dom.createElement("span");
icon.className = "completer-img " + (match.icon
? iconClass[match.icon] || this.popup.$defineIcon(match.icon)
: "");
lineEl.appendChild(icon);
if (match.type) {
var shortType = guidToShortString(match.type);
if (shortType)
match.meta = shortType;
}
var name = match.name;
var prefix = match.identifierRegex
? this.popup.calcPrefix(match.identifierRegex)
: name.substr(0, this.popup.prefix.length);
var trim = match.meta ? " maintrim" : "";
if (!this.ignoreGenericMatches || !match.isGeneric) {
var simpleName = match.replaceText.replace("^^", "").replace(/\(\)$/, "");
if (name.indexOf(simpleName) === 0) {
this.dom.buildDom([["span", { class: "main" + trim },
["u", prefix], simpleName.substring(prefix.length)],
["span", { class: "deferred" }, name.substring(Math.max(simpleName.length, prefix.length))]
], lineEl);
}
else {
this.dom.buildDom(["span", { class: "main" + trim },
["u", prefix], name.substring(prefix.length)
], lineEl);
}
}
else {
this.dom.buildDom(["span", { class: "main" + trim },
["span", { class: "deferred" }, ["u", prefix], name.substring(prefix.length)]
], lineEl);
}
if (match.meta) {
this.dom.buildDom(["span", { class: "meta"}, match.meta], lineEl);
}
}
exports.initPopup = function(popup, staticUrl) {
popup.session.bgTokenizer.popup = popup;
popup.session.bgTokenizer.$tokenizeRow = tokenizeRow;
popup.renderer.$textLayer.popup = popup;
popup.$defineIcon = defineIcon;
popup.renderer.$textLayer.$renderLine = renderLine;
popup.staticUrl = staticUrl;
};
});