var require = function (file, cwd) { var resolved = require.resolve(file, cwd || '/'); var mod = require.modules[resolved]; if (!mod) throw new Error( 'Failed to resolve module ' + file + ', tried ' + resolved ); var res = mod._cached ? mod._cached : mod(); return res; } require.paths = []; require.modules = {}; require.extensions = [".js",".coffee"]; require._core = { 'assert': true, 'events': true, 'fs': true, 'path': true, 'vm': true }; require.resolve = (function () { return function (x, cwd) { if (!cwd) cwd = '/'; if (require._core[x]) return x; var path = require.modules.path(); var y = cwd || '.'; if (x.match(/^(?:\.\.?\/|\/)/)) { var m = loadAsFileSync(path.resolve(y, x)) || loadAsDirectorySync(path.resolve(y, x)); if (m) return m; } var n = loadNodeModulesSync(x, y); if (n) return n; throw new Error("Cannot find module '" + x + "'"); function loadAsFileSync (x) { if (require.modules[x]) { return x; } for (var i = 0; i < require.extensions.length; i++) { var ext = require.extensions[i]; if (require.modules[x + ext]) return x + ext; } } function loadAsDirectorySync (x) { x = x.replace(/\/+$/, ''); var pkgfile = x + '/package.json'; if (require.modules[pkgfile]) { var pkg = require.modules[pkgfile](); var b = pkg.browserify; if (typeof b === 'object' && b.main) { var m = loadAsFileSync(path.resolve(x, b.main)); if (m) return m; } else if (typeof b === 'string') { var m = loadAsFileSync(path.resolve(x, b)); if (m) return m; } else if (pkg.main) { var m = loadAsFileSync(path.resolve(x, pkg.main)); if (m) return m; } } return loadAsFileSync(x + '/index'); } function loadNodeModulesSync (x, start) { var dirs = nodeModulesPathsSync(start); for (var i = 0; i < dirs.length; i++) { var dir = dirs[i]; var m = loadAsFileSync(dir + '/' + x); if (m) return m; var n = loadAsDirectorySync(dir + '/' + x); if (n) return n; } var m = loadAsFileSync(x); if (m) return m; } function nodeModulesPathsSync (start) { var parts; if (start === '/') parts = [ '' ]; else parts = path.normalize(start).split('/'); var dirs = []; for (var i = parts.length - 1; i >= 0; i--) { if (parts[i] === 'node_modules') continue; var dir = parts.slice(0, i + 1).join('/') + '/node_modules'; dirs.push(dir); } return dirs; } }; })(); require.alias = function (from, to) { var path = require.modules.path(); var res = null; try { res = require.resolve(from + '/package.json', '/'); } catch (err) { res = require.resolve(from, '/'); } var basedir = path.dirname(res); var keys = (Object.keys || function (obj) { var res = []; for (var key in obj) res.push(key) return res; })(require.modules); for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (key.slice(0, basedir.length + 1) === basedir + '/') { var f = key.slice(basedir.length); require.modules[to + f] = require.modules[basedir + f]; } else if (key === basedir) { require.modules[to] = require.modules[basedir]; } } }; require.define = function (filename, fn) { var dirname = require._core[filename] ? '' : require.modules.path().dirname(filename) ; var require_ = function (file) { return require(file, dirname) }; require_.resolve = function (name) { return require.resolve(name, dirname); }; require_.modules = require.modules; require_.define = require.define; var module_ = { exports : {} }; require.modules[filename] = function () { require.modules[filename]._cached = module_.exports; fn.call( module_.exports, require_, module_, module_.exports, dirname, filename ); require.modules[filename]._cached = module_.exports; return module_.exports; }; }; if (typeof process === 'undefined') process = {}; if (!process.nextTick) process.nextTick = (function () { var queue = []; var canPost = typeof window !== 'undefined' && window.postMessage && window.addEventListener ; if (canPost) { window.addEventListener('message', function (ev) { if (ev.source === window && ev.data === 'browserify-tick') { ev.stopPropagation(); if (queue.length > 0) { var fn = queue.shift(); fn(); } } }, true); } return function (fn) { if (canPost) { queue.push(fn); window.postMessage('browserify-tick', '*'); } else setTimeout(fn, 0); }; })(); if (!process.title) process.title = 'browser'; if (!process.binding) process.binding = function (name) { if (name === 'evals') return require('vm') else throw new Error('No such module') }; if (!process.cwd) process.cwd = function () { return '.' }; require.define("path", function (require, module, exports, __dirname, __filename) { function filter (xs, fn) { var res = []; for (var i = 0; i < xs.length; i++) { if (fn(xs[i], i, xs)) res.push(xs[i]); } return res; } // resolves . and .. elements in a path array with directory names there // must be no slashes, empty elements, or device names (c:\) in the array // (so also no leading and trailing slashes - it does not distinguish // relative and absolute paths) function normalizeArray(parts, allowAboveRoot) { // if the path tries to go above the root, `up` ends up > 0 var up = 0; for (var i = parts.length; i >= 0; i--) { var last = parts[i]; if (last == '.') { parts.splice(i, 1); } else if (last === '..') { parts.splice(i, 1); up++; } else if (up) { parts.splice(i, 1); up--; } } // if the path is allowed to go above the root, restore leading ..s if (allowAboveRoot) { for (; up--; up) { parts.unshift('..'); } } return parts; } // Regex to split a filename into [*, dir, basename, ext] // posix version var splitPathRe = /^(.+\/(?!$)|\/)?((?:.+?)?(\.[^.]*)?)$/; // path.resolve([from ...], to) // posix version exports.resolve = function() { var resolvedPath = '', resolvedAbsolute = false; for (var i = arguments.length; i >= -1 && !resolvedAbsolute; i--) { var path = (i >= 0) ? arguments[i] : process.cwd(); // Skip empty and invalid entries if (typeof path !== 'string' || !path) { continue; } resolvedPath = path + '/' + resolvedPath; resolvedAbsolute = path.charAt(0) === '/'; } // At this point the path should be resolved to a full absolute path, but // handle relative paths to be safe (might happen when process.cwd() fails) // Normalize the path resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { return !!p; }), !resolvedAbsolute).join('/'); return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; }; // path.normalize(path) // posix version exports.normalize = function(path) { var isAbsolute = path.charAt(0) === '/', trailingSlash = path.slice(-1) === '/'; // Normalize the path path = normalizeArray(filter(path.split('/'), function(p) { return !!p; }), !isAbsolute).join('/'); if (!path && !isAbsolute) { path = '.'; } if (path && trailingSlash) { path += '/'; } return (isAbsolute ? '/' : '') + path; }; // posix version exports.join = function() { var paths = Array.prototype.slice.call(arguments, 0); return exports.normalize(filter(paths, function(p, index) { return p && typeof p === 'string'; }).join('/')); }; exports.dirname = function(path) { var dir = splitPathRe.exec(path)[1] || ''; var isWindows = false; if (!dir) { // No dirname return '.'; } else if (dir.length === 1 || (isWindows && dir.length <= 3 && dir.charAt(1) === ':')) { // It is just a slash or a drive letter with a slash return dir; } else { // It is a full dirname, strip trailing slash return dir.substring(0, dir.length - 1); } }; exports.basename = function(path, ext) { var f = splitPathRe.exec(path)[2] || ''; // TODO: make this comparison case-insensitive on windows? if (ext && f.substr(-1 * ext.length) === ext) { f = f.substr(0, f.length - ext.length); } return f; }; exports.extname = function(path) { return splitPathRe.exec(path)[3] || ''; }; }); require.define("/prettycss.js", function (require, module, exports, __dirname, __filename) { "use strict"; require('./shim'); var cssBucket = require('./cssbucket'); var tokenizer = require('./tokenizer'); var util = require('./util'); var languages = { 'en-us': require('./lang/en-us.js') }; var PrettyCSS = function (options) { this.options = util.setOptions(options); this.errors = []; this.warnings = []; this.stylesheet = null; this.languageSelected = 'en-us'; }; util.extend(PrettyCSS.prototype, { addError: function (code, token) { this.errors.push({ "code": code, "token": token }); }, addWarning: function (code, token) { this.warnings.push({ "code": code, "token": token }); }, debug: function (message) { if (! this.options.debug) { return; } console.log(message); }, getProblems: function () { var out = []; var lang = languages[this.languageSelected]; var replace = function (message, spot, withWhat) { var parts = message.split(spot); return parts.join(withWhat); }; var reformat = function (type, item) { var message; var code = item.code.match(/^([^:]*)(:(.*))?$/); var messages = lang[type + 'Messages']; var replaceSpot = lang.replacementMarker; var more = null; if (! code) { throw new Error('Invalid warning/error code: ' + item.code); } if (code[3]) { more = code[3]; } code = code[1]; if (messages[code]) { message = messages[code]; } else { message = lang.noMessageDefined; more = item.code; } if (more) { var additional = more; if (code.substr(0, 8) == 'browser-') { var browserMatch = additional.match(/^([^0-9]+)(.*)$/); if (browserMatch && lang.browsers[browserMatch[1]]) { additional = lang.browsers[browserMatch[1]] + " " + browserMatch[2]; additional = additional.replace(/ $/, ''); } } message = replace(message, replaceSpot, additional); } var tokenCopy = null; if (item.token) { tokenCopy = item.token.clone(); } return { typeCode: type, typeText: lang[type + 'Text'], fullCode: item.code, code: code, more: more, token: tokenCopy, message: message }; }; this.errors.forEach(function (item) { out.push(reformat('error', item)); }); this.warnings.forEach(function (item) { out.push(reformat('warning', item)); }); return out; }, language: function (newLang) { if (! languages[newLang]) { throw new Error(newLang + " is not a defined language"); } this.languageSelected = newLang; }, parse: function (tokens) { cssBucket.parser = this; cssBucket.options = this.options; cssBucket.tokenizer = tokenizer; this.stylesheet = cssBucket.stylesheet.parse(tokens, cssBucket, this); }, toString: function () { var out = ""; if (this.stylesheet) { out = this.stylesheet.toString(); out = out.replace(/^[\s\r\n]+/, '').replace(/[\s\r\n]+$/, ''); } return out; } }); exports.parse = function (str, options) { var p = new PrettyCSS(options); var t = tokenizer.tokenize(str, options); p.parse(t); return p; }; exports.parseFile = function (filename, callback, options) { tokenizer.tokenizeFile(filename, function (err, t) { if (err) { callback(err); } else { p = new PrettyCSS(options); p.parse(t); callback(err, p); } }, options); }; }); require.define("/shim.js", function (require, module, exports, __dirname, __filename) { "use strict"; if (! Array.prototype.every) { Array.prototype.every = function (callback, context) { var l = this.length >>> 0; var t = Object(this); var keepGoing = true; for (var i = 0; i < l; i ++) { if (i in t) { keepGoing = callback.call(context, this[i], i, this); if (! keepGoing) { return keepGoing; } } } return keepGoing; }; } if (! Array.prototype.filter) { Array.prototype.filter = function (callback, context) { var l = this.length >>> 0; var t = Object(this); var newArray = []; for (var i = 0; i < l; i ++) { if (i in t) { var elem = this[i]; // In case the callback changes it if (callback.call(context, elem, i, this)) { newArray.push(elem); } } } return newArray; }; } if (! Array.prototype.some) { Array.prototype.some = function (callback, context) { var l = this.length >>> 0; var t = Object(this); for (var i = 0; i < l; i ++) { if (i in t) { if (callback.call(context, this[i], i, this)) { return true; } } } return false; }; } if (! Array.prototype.forEach) { Array.prototype.forEach = function (callback, context) { var l = this.length >>> 0; var t = Object(this); for (var i = 0; i < l; i ++) { if (i in t) { callback.call(context, this[i], i, this); } } }; } }); require.define("/cssbucket.js", function (require, module, exports, __dirname, __filename) { exports.atRule = require('./css/at-rule'); exports.block = require('./css/block'); exports.cdc = require('./css/cdc'); exports.cdo = require('./css/cdo'); exports.comment = require('./css/comment'); exports['font-face'] = require('./css/font-face'); exports.invalid = require('./css/invalid'); exports.keyframe = require('./css/keyframe'); exports.keyframes = require('./css/keyframes'); exports.page = require('./css/page'); exports.property = require('./css/property'); exports.pseudoclass = require('./css/pseudoclass'); exports.pseudoelement = require('./css/pseudoelement'); exports.ruleset = require('./css/ruleset'); exports.rule = require('./css/rule'); exports.selector = require('./css/selector'); exports.stylesheet = require('./css/stylesheet'); exports.value = require('./css/value'); exports.whitespace = require('./css/whitespace'); }); require.define("/css/at-rule.js", function (require, module, exports, __dirname, __filename) { "use strict"; var base = require('./base'); var util = require('../util'); var At = base.baseConstructor(); util.extend(At.prototype, base.base, { name: "at-rule", toString: function () { this.debug('toString', this.list); var ws = this.bucket.options.at_whitespace; var out = ""; this.list.forEach(function (value) { if (value.type == "S") { out += ws; } else { out += value.content; } }); if (this.block) { out += this.block.toString(); } return this.addWhitespace('at', out); } }); exports.canStartWith = function (token, tokens, bucket) { return token.type == 'AT_SYMBOL'; }; exports.parse = function (tokens, bucket, container) { var at = new At(bucket, container); at.block = null; at.debug('parse', tokens); var token = tokens.getToken(); if (token) { var type = token.content.toLowerCase(); } // Eat until the first semicolon or the ending of a block while (token && token.type != 'SEMICOLON' && token.type != 'BLOCK_OPEN') { at.add(token); token = tokens.nextToken(); } if (! token) { // Finished without hitting a semicolon nor a block return at; } if (token.type == 'SEMICOLON') { at.add(token); tokens.next(); return at; } at.block = bucket.block.parse(tokens, bucket, at); switch (type) { case '@font-face': // Add a font at.block.reparseAs('font-face'); break; case '@keyframes': case '@-moz-keyframes': case '@-ms-keyframes': case '@-o-keyframes': case '@-webkit-keyframes': // CSS3 animations at.block.reparseAs('keyframes'); break; case '@media': // Stylesheet parser at.block.reparseAs('stylesheet'); break; case '@page': // Paged media at.block.reparseAs('page'); break; default: at.debug('Invalid type, so no block parsing for ' + type); break; } return at; }; }); require.define("/css/base.js", function (require, module, exports, __dirname, __filename) { "use strict"; exports.base = { add: function (t) { this.list.push(t); }, addList: function (l) { for (var i in l) { this.list.push(l[i]); } }, addWhitespace: function (type, data) { var opt = this.bucket.options; var out = this.makeString(data); return opt[type + '_pre'] + out + opt[type + '_post']; }, convertToString: function (token) { // Check if it is a token if (token.type && token.line) { return token.type + "@" + token.line + ":" + JSON.stringify(token.content); } // It is probably one of our value objects // Avoid the "toString" method since that also calls debug var out = token.name; if (token.list instanceof Array) { out += '(' + token.list.length + ')'; } return out; }, debug: function (message, info) { if (! this.bucket.options.debug) { return; } // Count depth var lead = ""; var ptr = this.container; if (ptr) { while (ptr.container) { lead += "...."; ptr = ptr.container; } } message = lead + "[" + this.name + "] " + message; if (info !== null && typeof info == "object") { if (typeof info.getToken == "function") { // Tokenizer object - safe to call toString() message += "\n" + JSON.stringify(info.getToken().toString()); } else if (info instanceof Array) { // Array of tokens or CSS objects var outArr = []; message += "\narray(" + info.length + ")"; for (var i = 0; i < info.length; i ++) { outArr.push(this.convertToString(info[i])); } message += "\n[" + outArr.join(" ") + "]"; } else { // Single token object or CSS object message += "\n" + this.convertToString(info); } } else if (info === null) { message += "\nnull"; } else if (typeof info != "undefined") { message += "\nUnknown type: " + typeof info; } this.bucket.parser.debug(message); }, init: function () { this.container = null; this.list = []; this.bucket = null; }, makeString: function (data, joiner) { if (typeof data != 'object') { return data; } if (typeof joiner == 'undefined') { joiner = ''; } var out = ""; data.forEach(function (elem) { out += elem.toString() + joiner; }); return out; }, parseTokenList: [], parseTokens: function (tokens) { var token = tokens.getToken(); var myself = this; var failed = this.parseTokenList.every(function (typeString) { var type = typeString; if (myself.bucket[typeString]) { type = myself.bucket[typeString]; } if (type.canStartWith(token, tokens, myself.bucket)) { myself.add(type.parse(tokens, myself.bucket, myself)); // Return false - do not keep scanning return false; } // Return true - continue to next type return true; }); if (failed) { throw new Error("Could not find valid type for token " + token.type); } }, reindent: function (str) { var indent = this.bucket.options.indent; if (! indent) { return str; } str = str.replace(/\n/g, "\n" + indent); // At this point, comments with newlines also were reindented. // This change should be removed to preserve the comment intact. str = str.replace(/\/\*[^*]*\*+([^\/][^*]*\*+)*\//g, function (match) { var r = new RegExp("\n" + indent, 'g'); return match.replace(r, "\n"); }); return str; }, setBucket: function (bucket) { if (! bucket) { throw new Error("Invalid bucket"); } this.bucket = bucket; }, setContainer: function (container) { if (! container) { throw new Error("Invalid container"); } this.container = container; }, toString: function () { throw new Error("Did not override toString() of base class"); } }; exports.baseConstructor = function () { return function (bucket, container) { this.init(); this.setBucket(bucket); this.setContainer(container); return this; }; }; exports.selectorCanStartWith = function (token, tokens, bucket) { switch (token.type) { case "ATTRIB": case "CLASS": case "COLON": case "COMBINATOR": case 'HASH': case 'IDENT': return true; case 'CHAR': if (token.content == '*') { return true; } return false; default: return false; } }; }); require.define("/util.js", function (require, module, exports, __dirname, __filename) { "use strict"; exports.setOptions = function (override) { if (typeof override != "object") { override = {}; } var options = { at_post: "", at_pre: "", at_whitespace: " ", atblock_post: "\n}", // Must contain } atblock_pre: "{\n\t", // Must contain { autocorrect: true, block_post: "\n}", // Must contain } block_pre: "{", // Must contain { cdc: "\n-->", // Either {w} or {w}CDC{w} cdo: "" }, COMMENT: { leading: "/", all: false, pattern: "\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/" }, MATCH: { leading: "~|^$*=", all: false, pattern: "[~|^$*]?=" }, // All of the matching tokens stay here BOM: { leading: "\xfeff", all: false, pattern: "\xfeff" }, // Byte order mark IMPORTANT: { leading: "!", all: false, pattern: "!{w}important" }, COMBINATOR: { leading: "~+>", all: false, pattern: "[~+>]" }, OPERATOR: { leading: "/,", all: false, pattern: "[/,]" }, COMMA: { leading: ",", all: false, pattern: "," }, COLON: { leading: ":", all: false, pattern: ":" }, SEMICOLON: { leading: ";", all: false, pattern: ";" }, BLOCK_OPEN: { leading: "{", all: false, pattern: "\\{" }, BLOCK_CLOSE: { leading: "}", all: false, pattern: "\\}" }, PAREN_CLOSE: { leading: ")", all: false, pattern: "\\)" }, URL: { leading: "uU", all: false, pattern: "url\\({w}({string}|{urlchar}*){w}\\)" }, // Always test against these patterns FUNCTION: { leading: "", all: true, pattern: "{ident}([\\.]{ident})*\\(" }, // URI lands in here IDENT: { leading: "-", all: true, pattern: "{ident}" }, CHAR: { leading: "", all: true, pattern: "[^'\"]" }, // Matches nearly anything - must be near the end UNMATCHED: { leading: "", all: true, pattern: "." } // Must be last, shouldn't be hit with valid CSS }; for (var t1 in tokens) { expansion[t1] = tokens[t1].pattern; } // Expand all RegExp strings, set initial count for (var t2 in tokens) { tokens[t2].regexp = expandPatternToRegExp(tokens[t2].pattern, expansion); tokens[t2].count = 0; } return tokens; }; var getDefsByLetter = function (tokens) { var out = {}; var all = {}; for (var tIndex in tokens) { var token1 = tokens[tIndex]; var letters = token1.leading.split(''); for (var j = 0; j < letters.length; j ++) { var letter1 = letters[j]; if (! out[letter1]) { out[letter1] = {}; } if (! out[letter1][tIndex]) { out[letter1][tIndex] = token1; } } if (token1.all) { all[tIndex] = token1; } } for (var letter2 in out) { for (var token2 in all) { out[letter2][token2] = all[token2]; } } out[''] = all; return out; }; var defs = getTokenDefs(); var defsByLetter = getDefsByLetter(defs); var Token = function (line, charNum, type, content) { this.line = line; this.charNum = charNum; this.type = type; this.content = content; }; Token.prototype.clone = function () { var newToken = new Token(this.line, this.charNum, this.type, this.content); return newToken; }; Token.prototype.toString = function () { return this.content; }; Token.prototype.toStringChangeCase = function (changeCase) { if (changeCase) { return this.content.toLowerCase(); } return this.content; }; var Tokenizer = function (options) { this.options = util.setOptions(options); this.tokenIndex = 0; this.tokens = []; }; Tokenizer.prototype.addToken = function (tokenSpot, type, content) { var token = new Token(tokenSpot.line, tokenSpot.charNum, type, content); this.tokens.push(token); defs[type].count ++; var splitByLine = content.split(/\r?\n|\r/g); if (splitByLine.length > 1) { tokenSpot.line += splitByLine.length - 1; tokenSpot.charNum = 1; } tokenSpot.charNum += splitByLine[splitByLine.length - 1].length; }; Tokenizer.prototype.anyLeft = function () { if (this.tokenIndex < this.tokens.length) { return true; } return false; }; Tokenizer.prototype.getToken = function (offset) { if (! offset) { offset = 0; } if (this.tokens[this.tokenIndex + offset]) { return this.tokens[this.tokenIndex + offset]; } return null; }; Tokenizer.prototype.next = function () { this.tokenIndex ++; return this; }; Tokenizer.prototype.nextToken = function () { this.tokenIndex ++; return this.getToken(); }; Tokenizer.prototype.tokenCounts = function () { var out = {}; for (var i in defs) { out[i] = defs[i].count; } return out; }; Tokenizer.prototype.tokenize = function (str) { var tokenSpot = { line: 1, charNum: 1 }; var wsAtEnd = new RegExp(wsPatternString + '+$'); var wsAtStart = new RegExp("^" + wsPatternString + "+"); matches = str.match(wsAtStart); if (matches) { str = str.substr(matches[0].length); this.addToken(tokenSpot, "S", matches[0]); } while (str.length) { // Blank out the info var type = null; var match = ''; var defsToMatch = defsByLetter['']; var firstLetter = str.charAt(0); if (defsByLetter[firstLetter]) { defsToMatch = defsByLetter[firstLetter]; } // Find the pattern that matches the best for (var idx in defsToMatch) { if (type === null) { var matches = str.match(defsToMatch[idx].regexp); if (matches) { type = idx; match = matches[0]; } } } str = str.substr(match.length); var ws = match.match(wsAtEnd); if (ws) { ws = ws[0]; if (match != ws) { match = match.replace(wsAtEnd, ''); } else { ws = null; } } this.addToken(tokenSpot, type, match); if (ws) { this.addToken(tokenSpot, "S", ws); } } }; Tokenizer.prototype.toString = function () { var tokenList = []; var myself = this; this.tokens.forEach(function (token, index) { var str = JSON.stringify(token); tokenList.push(str); }); return "[\n" + tokenList.join(",\n") + "\n]"; }; exports.tokenize = function (str, options) { var cr = new Tokenizer(options); str = str.replace(/^\uFEFF/, ''); // Remove UTF byte order mark cr.tokenize(str); return cr; }; exports.tokenizeFile = function (filename, callback, options) { options = util.setOptions(options); fs.readFile(filename, options.fileEncoding, function (err, data) { if (err) { callback(err); } else { var cr = new Tokenizer(options); cr.tokenize(data); callback(err, cr); } }); }; }); require.define("fs", function (require, module, exports, __dirname, __filename) { // nothing to see here... no file methods for the browser }); require.define("/lang/en-us.js", function (require, module, exports, __dirname, __filename) { exports.replacementMarker = '##'; exports.noMessageDefined = 'No message defined for code ##'; exports.browsers = { 'c': 'Google Chrome', 'ff': 'Mozilla Firefox', 'ie': 'Microsoft Internet Explorer', 'o': 'Opera', 's': 'Safari' }; exports.errorText = 'Error'; exports.errorMessages = { 'block-expected': 'After selectors, an open brace is expected for defining a ruleset block; alternately there was a problem with a selector', 'colon-expected': 'After property names in a declaration, a colon is required', 'ident-after-colon': 'A colon must be followed by an identifier or a second colon', 'ident-after-double-colon': 'A double colon must be followed by an identifier', 'invalid-token': 'An invalid token was encountered - removing content until a semicolon or a block open + block close is found', 'illegal-token-after-combinator': 'There was an illegal token after a combinator - combinators must be followed by another selector', 'selector-expected': 'A selector is expected after a comma' }; exports.warningText = 'Warning'; exports.warningMessages = { 'add-quotes': 'To avoid confusion, this value should have quotes', 'angle': 'Angles should start at 0 and be less than 360', 'autocorrect': 'The value (##) has been autocorrected', 'autocorrect-swap': 'The values have been autocorrected by swapping', 'browser-only': 'Only works in one browser (##)', 'browser-quirk': 'Behaves poorly in a browser (##)', 'browser-unsupported': 'Unsupported in a browser (##)', 'css-deprecated': 'Marked as deprecated in CSS version ##', 'css-draft': 'This property is only in a working draft and is subject to change', 'css-maximum': 'This works only up to CSS version ##', 'css-minimum': 'This was introduced in CSS version ##', 'css-unsupported': 'This is not supported in CSS version ##', 'deprecated': 'Deprecated and should not be used - use ## instead', 'extra-tokens-after-value': 'Extra tokens were found after a valid value - browsers may discard this entire property', 'filter-case-sensitive': 'You used the wrong capitalization for a case sensitive property', 'filter-use-equals-instead': 'You must use an equals here instead of colon', 'font-family-one-generic': 'Only one generic font family should be used and it should be at the end', 'hack': 'You use a ## hack at this location', 'inherit-not-allowed': 'The value "inherit" is not allowed here', 'illegal': 'This value is illegal', 'invalid-value': 'The value for this property is invalid', 'minmax-p-q': 'For minmax(p,q), the p should not be bigger than q', 'mixing-percentages': 'You are not allowed to mix percentages with non-percentage values', 'not-forward-compatible': 'This is not compatible with CSS version ## and forward', 'range-max': 'The maximum value allowed is ##', 'range-min': 'The minimum value allowed is ##', 'remove-quotes': 'This value should not be quoted', 'require-integer': 'This value must be an integer', 'require-positive-value': 'This value must be positive', 'require-value': 'Properties require a value', 'reserved': 'Reserved for future use', 'suggest-relative-unit': 'You should use a relative unit instead of ##', 'suggest-remove-unit': 'You should remove ## from this', 'suggest-using': 'You should use ## instead', 'text-align-invalid-string': 'If a string is specified, it must contain just one character', 'unknown-property': '## is not a known property', 'wrong-property': 'This is the wrong property name or is poorly supported - use ## instead' }; });