@phoenix-plugin-registry/hirse.outline-list
Version:
Displays a list of the functions or definitions in the currently opened document. Works with CSS, CoffeeScript, HTML, Haxe, Jade, JavaScript, JSX, LESS, Markdown, PHP, Python, Ruby, SCSS, SVG, Stylus, and XML.
73 lines (68 loc) • 2.31 kB
JavaScript
define(function Stylus(require, exports, module) {
"use strict";
/**
* Get the type class based on the the function name.
* @private
* @param {string} name List entry name.
* @returns {string} CSS type classes.
*/
function _getTypeClass(name) {
var classes = {
"#": "id",
".": "class",
"@": "at-rules",
"[": "attribute"
};
return " outline-entry-stylus-" + (classes[name[0]] || "tag");
}
/**
* Create the HTML list entry.
* @private
* @param {string} name List entry name.
* @param {string} args Arguments as single string.
* @returns {object} Entry object with an $html property.
*/
function _createListEntry(name, args) {
var $elements = [];
var $name = $(document.createElement("span"));
$name.addClass("outline-entry-name");
$name.text(name);
$elements.push($name);
if (args) {
var $arguments = $(document.createElement("span"));
$arguments.addClass("outline-entry-stylus-args");
$arguments.text(args);
$elements.push($arguments);
}
return {
name: name,
classes: "outline-entry-css outline-entry-icon" + _getTypeClass(name),
$html: $elements
};
}
/**
* Create the entry list of functions language dependent.
* @param {string} text Documents text with normalized line endings.
* @returns {object[]} List of outline entries.
*/
function getOutlineList(text) {
var lines = text.split("\n");
var regex = /^(@?[\w-.#]+[\w-.# ]*)(\(.*?\))?/;
var result = [];
lines.forEach(function (line, index) {
var match = line.match(regex);
if (match) {
var name = match[1].trim();
var args = (match[2] || "").trim();
var entry = _createListEntry(name, args);
entry.line = index;
entry.ch = line.length;
result.push(entry);
}
});
return result;
}
module.exports = {
getOutlineList: getOutlineList
};
});