c9-core/plugins/c9.ide.language.css/css_handler.js

95 wiersze
2.3 KiB
JavaScript

/**
* Cloud9 Language Foundation
*
* @copyright 2013, Ajax.org B.V.
*/
define(function(require, exports, module) {
var baseLanguageHandler = require("plugins/c9.ide.language/base_handler");
var CSSLint = null;
var handler = module.exports = Object.create(baseLanguageHandler);
handler.handlesLanguage = function(language) {
return language === "css" || language === "less";
};
handler.analyze = function(value, ast, options, callback) {
if (this.language === "less")
return callback();
if (!CSSLint) {
return require(["ace/mode/css/csslint"], function(m) {
CSSLint = m.CSSLint;
callback(handler.analyzeSync(value, ast));
});
}
callback(handler.analyzeSync(value, ast));
};
// 0: ignore, 1: warning, 2: error, 3: info
var CSSLint_RULESET = {
"adjoining-classes": 0,
"box-model": 1,
"box-sizing": 1,
"compatible-vendor-prefixes": 3,
"display-property-grouping": 1,
"duplicate-background-images": 1,
"duplicate-properties": 1,
"empty-rules": 1,
"errors": 2,
"fallback-colors": 3,
"floats": 1,
"font-faces": 1,
"font-sizes": 1,
"gradients": 3,
"ids": 0,
"import": 0,
"important": 3,
"known-properties": 1,
"outline-none": 3,
"overqualified-elements": 1,
"qualified-headings": 3,
"regex-selectors": 1,
"rules-count": 1,
"shorthand": 1,
"star-property-hack": 1,
"text-indent": 1,
"underscore-property-hack": 1,
"unique-headings": 1,
"universal-selector": 1,
"unqualified-attributes": 1,
"vendor-prefix": 3,
"zero-units": 0
};
handler.analyzeSync = function(value, ast) {
value = value.replace(/^(#!.*\n)/, "//$1");
if (!CSSLint)
return;
var results = value && CSSLint.verify(value, CSSLint_RULESET);
var warnings = results ? results.messages : [];
return warnings.map(function(warning) {
if (CSSLint_RULESET[warning.rule.id] === 3)
warning.type = "info";
return {
pos: {
sl: warning.line - 1,
sc: warning.col - 1
},
type: warning.type,
level: warning.type,
message: warning.message
};
});
};
handler.getIdentifierRegex = function() {
return (/[_a-zA-Z0-9-]/);
};
});