HEX
Server: Apache
System: Linux cpanelx.inxs.ro 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: crowdandsafety (1041)
PHP: 8.1.34
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/crowdandsafety/public_html/wp-content/plugins/convertplug/admin/assets/js/worker-css.js
!function (o) { var r, i; void 0 !== o.window && o.document || o.require && o.define || (o.console || (o.console = function () { var e = Array.prototype.slice.call(arguments, 0); postMessage({ type: "log", data: e }) }, o.console.error = o.console.warn = o.console.log = o.console.trace = o.console), ((o.window = o).ace = o).onerror = function (e, t, n, r, i) { postMessage({ type: "error", data: { message: e, data: i.data, file: t, line: n, col: r, stack: i.stack } }) }, o.normalizeModule = function (e, t) { if (-1 !== t.indexOf("!")) { var n = t.split("!"); return o.normalizeModule(e, n[0]) + "!" + o.normalizeModule(e, n[1]) } if ("." == t.charAt(0)) { var r = e.split("/").slice(0, -1).join("/"); for (t = (r ? r + "/" : "") + t; -1 !== t.indexOf(".") && i != t;) { var i = t; t = t.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "") } } return t }, o.require = function (e, t) { if (t || (t = e, e = null), !t.charAt) throw new Error("worker.js require() accepts only (parentId, id) as arguments"); t = o.normalizeModule(e, t); var n = o.require.modules[t]; if (n) return n.initialized || (n.initialized = !0, n.exports = n.factory().exports), n.exports; if (!o.require.tlns) return console.log("unable to load " + t); var r = function (e, t) { for (var n = e, r = ""; n;) { var i = t[n]; if ("string" == typeof i) return i + r; if (i) return i.location.replace(/\/*$/, "/") + (r || i.main || i.name); if (!1 === i) return ""; var o = n.lastIndexOf("/"); if (-1 === o) break; r = n.substr(o) + r, n = n.slice(0, o) } return e }(t, o.require.tlns); return ".js" != r.slice(-3) && (r += ".js"), o.require.id = t, o.require.modules[t] = {}, importScripts(r), o.require(e, t) }, o.require.modules = {}, o.require.tlns = {}, o.define = function (t, n, r) { var i; 2 == arguments.length ? (r = n, "string" != typeof t && (n = t, t = o.require.id)) : 1 == arguments.length && (r = t, n = [], t = o.require.id), "function" == typeof r ? (n.length || (n = ["require", "exports", "module"]), i = function (e) { return o.require(t, e) }, o.require.modules[t] = { exports: {}, factory: function () { var t = this, e = r.apply(this, n.slice(0, r.length).map(function (e) { switch (e) { case "require": return i; case "exports": return t.exports; case "module": return t; default: return i(e) } })); return e && (t.exports = e), t } }) : o.require.modules[t] = { exports: r, initialized: !0 } }, o.define.amd = {}, require.tlns = {}, o.initBaseUrls = function (e) { for (var t in e) require.tlns[t] = e[t] }, o.initSender = function () { function e() { } var t = o.require("ace/lib/event_emitter").EventEmitter, n = o.require("ace/lib/oop"); return function () { n.implement(this, t), this.callback = function (e, t) { postMessage({ type: "call", id: t, data: e }) }, this.emit = function (e, t) { postMessage({ type: "event", name: e, data: t }) } }.call(e.prototype), new e }, r = o.main = null, i = o.sender = null, o.onmessage = function (e) { var t, n = e.data; if (n.event && i) i._signal(n.event, n.data); else if (n.command) if (r[n.command]) r[n.command].apply(r, n.args); else { if (!o[n.command]) throw new Error("Unknown command:" + n.command); o[n.command].apply(o, n.args) } else { n.init && (o.initBaseUrls(n.tlns), i = o.sender = o.initSender(), t = require(n.module)[n.classname], r = o.main = new t(i)) } }) }(this), define("ace/lib/oop", [], function (e, n, t) { "use strict"; n.inherits = function (e, t) { e.super_ = t, e.prototype = Object.create(t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }) }, n.mixin = function (e, t) { for (var n in t) e[n] = t[n]; return e }, n.implement = function (e, t) { n.mixin(e, t) } }), define("ace/lib/lang", [], function (e, t, n) { "use strict"; t.last = function (e) { return e[e.length - 1] }, t.stringReverse = function (e) { return e.split("").reverse().join("") }, t.stringRepeat = function (e, t) { for (var n = ""; 0 < t;)1 & t && (n += e), (t >>= 1) && (e += e); return n }; var r = /^\s\s*/, i = /\s\s*$/; t.stringTrimLeft = function (e) { return e.replace(r, "") }, t.stringTrimRight = function (e) { return e.replace(i, "") }, t.copyObject = function (e) { var t = {}; for (var n in e) t[n] = e[n]; return t }, t.copyArray = function (e) { for (var t = [], n = 0, r = e.length; n < r; n++)e[n] && "object" == typeof e[n] ? t[n] = this.copyObject(e[n]) : t[n] = e[n]; return t }, t.deepCopy = function e(t) { if ("object" != typeof t || !t) return t; var n; if (Array.isArray(t)) { n = []; for (var r = 0; r < t.length; r++)n[r] = e(t[r]); return n } if ("[object Object]" !== Object.prototype.toString.call(t)) return t; for (var r in n = {}, t) n[r] = e(t[r]); return n }, t.arrayToMap = function (e) { for (var t = {}, n = 0; n < e.length; n++)t[e[n]] = 1; return t }, t.createMap = function (e) { var t = Object.create(null); for (var n in e) t[n] = e[n]; return t }, t.arrayRemove = function (e, t) { for (var n = 0; n <= e.length; n++)t === e[n] && e.splice(n, 1) }, t.escapeRegExp = function (e) { return e.replace(/([.*+?^${}()|[\]\/\\])/g, "\\$1") }, t.escapeHTML = function (e) { return ("" + e).replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;") }, t.getMatchOffsets = function (e, t) { var n = []; return e.replace(t, function (e) { n.push({ offset: arguments[arguments.length - 2], length: e.length }) }), n }, t.deferredCall = function (e) { function t() { n = null, e() } var n = null, r = function (e) { return r.cancel(), n = setTimeout(t, e || 0), r }; return (r.schedule = r).call = function () { return this.cancel(), e(), r }, r.cancel = function () { return clearTimeout(n), n = null, r }, r.isPending = function () { return n }, r }, t.delayedCall = function (e, t) { function n() { i = null, e() } function r(e) { null == i && (i = setTimeout(n, e || t)) } var i = null; return r.delay = function (e) { i && clearTimeout(i), i = setTimeout(n, e || t) }, (r.schedule = r).call = function () { this.cancel(), e() }, r.cancel = function () { i && clearTimeout(i), i = null }, r.isPending = function () { return i }, r } }), define("ace/range", [], function (e, t, n) { "use strict"; function o(e, t, n, r) { this.start = { row: e, column: t }, this.end = { row: n, column: r } } (function () { this.isEqual = function (e) { return this.start.row === e.start.row && this.end.row === e.end.row && this.start.column === e.start.column && this.end.column === e.end.column }, this.toString = function () { return "Range: [" + this.start.row + "/" + this.start.column + "] -> [" + this.end.row + "/" + this.end.column + "]" }, this.contains = function (e, t) { return 0 == this.compare(e, t) }, this.compareRange = function (e) { var t = e.end, n = e.start, r = this.compare(t.row, t.column); return 1 == r ? 1 == (r = this.compare(n.row, n.column)) ? 2 : 0 == r ? 1 : 0 : -1 == r ? -2 : -1 == (r = this.compare(n.row, n.column)) ? -1 : 1 == r ? 42 : 0 }, this.comparePoint = function (e) { return this.compare(e.row, e.column) }, this.containsRange = function (e) { return 0 == this.comparePoint(e.start) && 0 == this.comparePoint(e.end) }, this.intersects = function (e) { var t = this.compareRange(e); return -1 == t || 0 == t || 1 == t }, this.isEnd = function (e, t) { return this.end.row == e && this.end.column == t }, this.isStart = function (e, t) { return this.start.row == e && this.start.column == t }, this.setStart = function (e, t) { "object" == typeof e ? (this.start.column = e.column, this.start.row = e.row) : (this.start.row = e, this.start.column = t) }, this.setEnd = function (e, t) { "object" == typeof e ? (this.end.column = e.column, this.end.row = e.row) : (this.end.row = e, this.end.column = t) }, this.inside = function (e, t) { return 0 == this.compare(e, t) && (!this.isEnd(e, t) && !this.isStart(e, t)) }, this.insideStart = function (e, t) { return 0 == this.compare(e, t) && !this.isEnd(e, t) }, this.insideEnd = function (e, t) { return 0 == this.compare(e, t) && !this.isStart(e, t) }, this.compare = function (e, t) { return this.isMultiLine() || e !== this.start.row ? e < this.start.row ? -1 : e > this.end.row ? 1 : this.start.row === e ? t >= this.start.column ? 0 : -1 : this.end.row !== e || t <= this.end.column ? 0 : 1 : t < this.start.column ? -1 : t > this.end.column ? 1 : 0 }, this.compareStart = function (e, t) { return this.start.row == e && this.start.column == t ? -1 : this.compare(e, t) }, this.compareEnd = function (e, t) { return this.end.row == e && this.end.column == t ? 1 : this.compare(e, t) }, this.compareInside = function (e, t) { return this.end.row == e && this.end.column == t ? 1 : this.start.row == e && this.start.column == t ? -1 : this.compare(e, t) }, this.clipRows = function (e, t) { var n, r; return this.end.row > t ? n = { row: t + 1, column: 0 } : this.end.row < e && (n = { row: e, column: 0 }), this.start.row > t ? r = { row: t + 1, column: 0 } : this.start.row < e && (r = { row: e, column: 0 }), o.fromPoints(r || this.start, n || this.end) }, this.extend = function (e, t) { var n, r, i = this.compare(e, t); return 0 == i ? this : (-1 == i ? n = { row: e, column: t } : r = { row: e, column: t }, o.fromPoints(n || this.start, r || this.end)) }, this.isEmpty = function () { return this.start.row === this.end.row && this.start.column === this.end.column }, this.isMultiLine = function () { return this.start.row !== this.end.row }, this.clone = function () { return o.fromPoints(this.start, this.end) }, this.collapseRows = function () { return 0 == this.end.column ? new o(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0) : new o(this.start.row, 0, this.end.row, 0) }, this.toScreenRange = function (e) { var t = e.documentToScreenPosition(this.start), n = e.documentToScreenPosition(this.end); return new o(t.row, t.column, n.row, n.column) }, this.moveBy = function (e, t) { this.start.row += e, this.start.column += t, this.end.row += e, this.end.column += t } }).call(o.prototype), o.fromPoints = function (e, t) { return new o(e.row, e.column, t.row, t.column) }, o.comparePoints = function (e, t) { return e.row - t.row || e.column - t.column }, o.comparePoints = function (e, t) { return e.row - t.row || e.column - t.column }, t.Range = o }), define("ace/apply_delta", [], function (e, t, n) { "use strict"; t.applyDelta = function (e, t, n) { var r, i = t.start.row, o = t.start.column, a = e[i] || ""; switch (t.action) { case "insert": 1 === t.lines.length ? e[i] = a.substring(0, o) + t.lines[0] + a.substring(o) : (r = [i, 1].concat(t.lines), e.splice.apply(e, r), e[i] = a.substring(0, o) + e[i], e[i + t.lines.length - 1] += a.substring(o)); break; case "remove": var s = t.end.column, l = t.end.row; i === l ? e[i] = a.substring(0, o) + a.substring(s) : e.splice(i, l - i + 1, a.substring(0, o) + e[l].substring(s)) } } }), define("ace/lib/event_emitter", [], function (e, t, n) { "use strict"; function o() { this.propagationStopped = !0 } function a() { this.defaultPrevented = !0 } var r = {}; r._emit = r._dispatchEvent = function (e, t) { this._eventRegistry || (this._eventRegistry = {}), this._defaultHandlers || (this._defaultHandlers = {}); var n = this._eventRegistry[e] || [], r = this._defaultHandlers[e]; if (n.length || r) { "object" == typeof t && t || (t = {}), t.type || (t.type = e), t.stopPropagation || (t.stopPropagation = o), t.preventDefault || (t.preventDefault = a), n = n.slice(); for (var i = 0; i < n.length && (n[i](t, this), !t.propagationStopped); i++); return r && !t.defaultPrevented ? r(t, this) : void 0 } }, r._signal = function (e, t) { var n = (this._eventRegistry || {})[e]; if (n) { n = n.slice(); for (var r = 0; r < n.length; r++)n[r](t, this) } }, r.once = function (t, n) { var r = this; if (this.on(t, function e() { r.off(t, e), n.apply(null, arguments) }), !n) return new Promise(function (e) { n = e }) }, r.setDefaultHandler = function (e, t) { var n, r, i, o = this._defaultHandlers; (o = o || (this._defaultHandlers = { _disabled_: {} }))[e] && (n = o[e], (r = o._disabled_[e]) || (o._disabled_[e] = r = []), r.push(n), -1 != (i = r.indexOf(t)) && r.splice(i, 1)), o[e] = t }, r.removeDefaultHandler = function (e, t) { var n, r, i = this._defaultHandlers; i && (n = i._disabled_[e], i[e] == t ? n && this.setDefaultHandler(e, n.pop()) : !n || -1 != (r = n.indexOf(t)) && n.splice(r, 1)) }, r.on = r.addEventListener = function (e, t, n) { this._eventRegistry = this._eventRegistry || {}; var r = this._eventRegistry[e]; return -1 == (r = r || (this._eventRegistry[e] = [])).indexOf(t) && r[n ? "unshift" : "push"](t), t }, r.off = r.removeListener = r.removeEventListener = function (e, t) { this._eventRegistry = this._eventRegistry || {}; var n, r = this._eventRegistry[e]; !r || -1 !== (n = r.indexOf(t)) && r.splice(n, 1) }, r.removeAllListeners = function (e) { e || (this._eventRegistry = this._defaultHandlers = void 0), this._eventRegistry && (this._eventRegistry[e] = void 0), this._defaultHandlers && (this._defaultHandlers[e] = void 0) }, t.EventEmitter = r }), define("ace/anchor", [], function (e, t, n) { "use strict"; var r = e("./lib/oop"), i = e("./lib/event_emitter").EventEmitter, o = t.Anchor = function (e, t, n) { this.$onChange = this.onChange.bind(this), this.attach(e), void 0 === n ? this.setPosition(t.row, t.column) : this.setPosition(t, n) }; (function () { function c(e, t, n) { var r = n ? e.column <= t.column : e.column < t.column; return e.row < t.row || e.row == t.row && r } r.implement(this, i), this.getPosition = function () { return this.$clipPositionToDocument(this.row, this.column) }, this.getDocument = function () { return this.document }, this.$insertRight = !1, this.onChange = function (e) { var t, n, r, i, o, a, s, l, u; e.start.row == e.end.row && e.start.row != this.row || e.start.row > this.row || (n = e, r = { row: this.row, column: this.column }, i = this.$insertRight, o = "insert" == n.action, a = (o ? 1 : -1) * (n.end.row - n.start.row), s = (o ? 1 : -1) * (n.end.column - n.start.column), l = n.start, u = o ? l : n.end, t = c(r, l, i) ? { row: r.row, column: r.column } : c(u, r, !i) ? { row: r.row + a, column: r.column + (r.row == u.row ? s : 0) } : { row: l.row, column: l.column }, this.setPosition(t.row, t.column, !0)) }, this.setPosition = function (e, t, n) { var r, i = n ? { row: e, column: t } : this.$clipPositionToDocument(e, t); this.row == i.row && this.column == i.column || (r = { row: this.row, column: this.column }, this.row = i.row, this.column = i.column, this._signal("change", { old: r, value: i })) }, this.detach = function () { this.document.off("change", this.$onChange) }, this.attach = function (e) { this.document = e || this.document, this.document.on("change", this.$onChange) }, this.$clipPositionToDocument = function (e, t) { var n = {}; return e >= this.document.getLength() ? (n.row = Math.max(0, this.document.getLength() - 1), n.column = this.document.getLine(n.row).length) : e < 0 ? (n.row = 0, n.column = 0) : (n.row = e, n.column = Math.min(this.document.getLine(n.row).length, Math.max(0, t))), t < 0 && (n.column = 0), n } }).call(o.prototype) }), define("ace/document", [], function (e, t, n) { "use strict"; function r(e) { this.$lines = [""], 0 === e.length ? this.$lines = [""] : Array.isArray(e) ? this.insertMergedLines({ row: 0, column: 0 }, e) : this.insert({ row: 0, column: 0 }, e) } var i = e("./lib/oop"), o = e("./apply_delta").applyDelta, a = e("./lib/event_emitter").EventEmitter, c = e("./range").Range, s = e("./anchor").Anchor; (function () { i.implement(this, a), this.setValue = function (e) { var t = this.getLength() - 1; this.remove(new c(0, 0, t, this.getLine(t).length)), this.insert({ row: 0, column: 0 }, e) }, this.getValue = function () { return this.getAllLines().join(this.getNewLineCharacter()) }, this.createAnchor = function (e, t) { return new s(this, e, t) }, 0 === "aaa".split(/a/).length ? this.$split = function (e) { return e.replace(/\r\n|\r/g, "\n").split("\n") } : this.$split = function (e) { return e.split(/\r\n|\r|\n/) }, this.$detectNewLine = function (e) { var t = e.match(/^.*?(\r\n|\r|\n)/m); this.$autoNewLine = t ? t[1] : "\n", this._signal("changeNewLineMode") }, this.getNewLineCharacter = function () { switch (this.$newLineMode) { case "windows": return "\r\n"; case "unix": return "\n"; default: return this.$autoNewLine || "\n" } }, this.$autoNewLine = "", this.$newLineMode = "auto", this.setNewLineMode = function (e) { this.$newLineMode !== e && (this.$newLineMode = e, this._signal("changeNewLineMode")) }, this.getNewLineMode = function () { return this.$newLineMode }, this.isNewLine = function (e) { return "\r\n" == e || "\r" == e || "\n" == e }, this.getLine = function (e) { return this.$lines[e] || "" }, this.getLines = function (e, t) { return this.$lines.slice(e, t + 1) }, this.getAllLines = function () { return this.getLines(0, this.getLength()) }, this.getLength = function () { return this.$lines.length }, this.getTextRange = function (e) { return this.getLinesForRange(e).join(this.getNewLineCharacter()) }, this.getLinesForRange = function (e) { var t, n; return e.start.row === e.end.row ? t = [this.getLine(e.start.row).substring(e.start.column, e.end.column)] : ((t = this.getLines(e.start.row, e.end.row))[0] = (t[0] || "").substring(e.start.column), n = t.length - 1, e.end.row - e.start.row == n && (t[n] = t[n].substring(0, e.end.column))), t }, this.insertLines = function (e, t) { return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."), this.insertFullLines(e, t) }, this.removeLines = function (e, t) { return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."), this.removeFullLines(e, t) }, this.insertNewLine = function (e) { return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."), this.insertMergedLines(e, ["", ""]) }, this.insert = function (e, t) { return this.getLength() <= 1 && this.$detectNewLine(t), this.insertMergedLines(e, this.$split(t)) }, this.insertInLine = function (e, t) { var n = this.clippedPos(e.row, e.column), r = this.pos(e.row, e.column + t.length); return this.applyDelta({ start: n, end: r, action: "insert", lines: [t] }, !0), this.clonePos(r) }, this.clippedPos = function (e, t) { var n = this.getLength(); void 0 === e ? e = n : e < 0 ? e = 0 : n <= e && (e = n - 1, t = void 0); var r = this.getLine(e); return null == t && (t = r.length), { row: e, column: t = Math.min(Math.max(t, 0), r.length) } }, this.clonePos = function (e) { return { row: e.row, column: e.column } }, this.pos = function (e, t) { return { row: e, column: t } }, this.$clipPosition = function (e) { var t = this.getLength(); return e.row >= t ? (e.row = Math.max(0, t - 1), e.column = this.getLine(t - 1).length) : (e.row = Math.max(0, e.row), e.column = Math.min(Math.max(e.column, 0), this.getLine(e.row).length)), e }, this.insertFullLines = function (e, t) { var n = 0, n = (e = Math.min(Math.max(e, 0), this.getLength())) < this.getLength() ? (t = t.concat([""]), 0) : (t = [""].concat(t), e--, this.$lines[e].length); this.insertMergedLines({ row: e, column: n }, t) }, this.insertMergedLines = function (e, t) { var n = this.clippedPos(e.row, e.column), r = { row: n.row + t.length - 1, column: (1 == t.length ? n.column : 0) + t[t.length - 1].length }; return this.applyDelta({ start: n, end: r, action: "insert", lines: t }), this.clonePos(r) }, this.remove = function (e) { var t = this.clippedPos(e.start.row, e.start.column), n = this.clippedPos(e.end.row, e.end.column); return this.applyDelta({ start: t, end: n, action: "remove", lines: this.getLinesForRange({ start: t, end: n }) }), this.clonePos(t) }, this.removeInLine = function (e, t, n) { var r = this.clippedPos(e, t), i = this.clippedPos(e, n); return this.applyDelta({ start: r, end: i, action: "remove", lines: this.getLinesForRange({ start: r, end: i }) }, !0), this.clonePos(r) }, this.removeFullLines = function (e, t) { e = Math.min(Math.max(0, e), this.getLength() - 1); var n = (t = Math.min(Math.max(0, t), this.getLength() - 1)) == this.getLength() - 1 && 0 < e, r = t < this.getLength() - 1, i = n ? e - 1 : e, o = n ? this.getLine(i).length : 0, a = r ? t + 1 : t, s = r ? 0 : this.getLine(a).length, l = new c(i, o, a, s), u = this.$lines.slice(e, t + 1); return this.applyDelta({ start: l.start, end: l.end, action: "remove", lines: this.getLinesForRange(l) }), u }, this.removeNewLine = function (e) { e < this.getLength() - 1 && 0 <= e && this.applyDelta({ start: this.pos(e, this.getLine(e).length), end: this.pos(e + 1, 0), action: "remove", lines: ["", ""] }) }, this.replace = function (e, t) { return e instanceof c || (e = c.fromPoints(e.start, e.end)), 0 === t.length && e.isEmpty() ? e.start : t == this.getTextRange(e) ? e.end : (this.remove(e), t ? this.insert(e.start, t) : e.start) }, this.applyDeltas = function (e) { for (var t = 0; t < e.length; t++)this.applyDelta(e[t]) }, this.revertDeltas = function (e) { for (var t = e.length - 1; 0 <= t; t--)this.revertDelta(e[t]) }, this.applyDelta = function (e, t) { var n = "insert" == e.action; (n ? e.lines.length <= 1 && !e.lines[0] : !c.comparePoints(e.start, e.end)) || (n && 2e4 < e.lines.length ? this.$splitAndapplyLargeDelta(e, 2e4) : (o(this.$lines, e, t), this._signal("change", e))) }, this.$safeApplyDelta = function (e) { var t = this.$lines.length; ("remove" == e.action && e.start.row < t && e.end.row < t || "insert" == e.action && e.start.row <= t) && this.applyDelta(e) }, this.$splitAndapplyLargeDelta = function (e, t) { for (var n = e.lines, r = n.length - t + 1, i = e.start.row, o = e.start.column, a = 0, s = 0; a < r; a = s) { s += t - 1; var l = n.slice(a, s); l.push(""), this.applyDelta({ start: this.pos(i + a, o), end: this.pos(i + s, o = 0), action: e.action, lines: l }, !0) } e.lines = n.slice(a), e.start.row = i + a, e.start.column = o, this.applyDelta(e, !0) }, this.revertDelta = function (e) { this.$safeApplyDelta({ start: this.clonePos(e.start), end: this.clonePos(e.end), action: "insert" == e.action ? "remove" : "insert", lines: e.lines.slice() }) }, this.indexToPosition = function (e, t) { for (var n = this.$lines || this.getAllLines(), r = this.getNewLineCharacter().length, i = t || 0, o = n.length; i < o; i++)if ((e -= n[i].length + r) < 0) return { row: i, column: e + n[i].length + r }; return { row: o - 1, column: e + n[o - 1].length + r } }, this.positionToIndex = function (e, t) { for (var n = this.$lines || this.getAllLines(), r = this.getNewLineCharacter().length, i = 0, o = Math.min(e.row, n.length), a = t || 0; a < o; ++a)i += n[a].length + r; return i + e.column } }).call(r.prototype), t.Document = r }), define("ace/worker/mirror", [], function (e, t, n) { "use strict"; e("../range").Range; var r = e("../document").Document, s = e("../lib/lang"), i = t.Mirror = function (e) { this.sender = e; var i = this.doc = new r(""), o = this.deferredUpdate = s.delayedCall(this.onUpdate.bind(this)), a = this; e.on("change", function (e) { var t, n = e.data; if (n[0].start) i.applyDeltas(n); else for (var r = 0; r < n.length; r += 2) { t = Array.isArray(n[r + 1]) ? { action: "insert", start: n[r], lines: n[r + 1] } : { action: "remove", start: n[r], end: n[r + 1] }, i.applyDelta(t, !0) } if (a.$timeout) return o.schedule(a.$timeout); a.onUpdate() }) }; (function () { this.$timeout = 500, this.setTimeout = function (e) { this.$timeout = e }, this.setValue = function (e) { this.doc.setValue(e), this.deferredUpdate.schedule(this.$timeout) }, this.getValue = function (e) { this.sender.callback(this.doc.getValue(), e) }, this.onUpdate = function () { }, this.isPending = function () { return this.deferredUpdate.isPending() } }).call(i.prototype) }), define("ace/mode/css/csslint", [], function (require, exports, module) { function objectToString(e) { return Object.prototype.toString.call(e) } function clone(e, a, t, s) { var l = [], u = [], c = "undefined" != typeof Buffer; return void 0 === a && (a = !0), void 0 === t && (t = 1 / 0), function e(t, n) { if (null === t) return null; if (0 == n) return t; var r; if ("object" != typeof t) return t; if (util.isArray(t)) r = []; else if (util.isRegExp(t)) r = new RegExp(t.source, util.getRegExpFlags(t)), t.lastIndex && (r.lastIndex = t.lastIndex); else if (util.isDate(t)) r = new Date(t.getTime()); else { if (c && Buffer.isBuffer(t)) return r = new Buffer(t.length), t.copy(r), r; r = void 0 === s ? Object.create(Object.getPrototypeOf(t)) : Object.create(s) } if (a) { var i = l.indexOf(t); if (-1 != i) return u[i]; l.push(t), u.push(r) } for (var o in t) r[o] = e(t[o], n - 1); return r }(e, t) } function Reporter(e, t) { this.messages = [], this.stats = [], this.lines = e, this.ruleset = t } var parserlib = {}; function Hg() { this._listeners = {} } function Ig(e) { this._input = e.replace(/\n\r?/g, "\n"), this._line = 1, this._col = 1, this._cursor = 0 } function Jg(e, t, n) { this.col = n, this.line = t, this.message = e } function Kg(e, t, n, r) { this.col = n, this.line = t, this.text = e, this.type = r } function Lg(e, t) { this._reader = e ? new Ig(e.toString()) : null, this._token = null, this._tokenData = t, this._lt = [], this._ltIndex = 0, this._ltIndexCache = [] } Hg.prototype = { constructor: Hg, addListener: function (e, t) { this._listeners[e] || (this._listeners[e] = []), this._listeners[e].push(t) }, fire: function (e) { if ("string" == typeof e && (e = { type: e }), void 0 !== e.target && (e.target = this), void 0 === e.type) throw new Error("Event object missing 'type' property."); if (this._listeners[e.type]) for (var t = this._listeners[e.type].concat(), n = 0, r = t.length; n < r; n++)t[n].call(this, e) }, removeListener: function (e, t) { if (this._listeners[e]) for (var n = this._listeners[e], r = 0, i = n.length; r < i; r++)if (n[r] === t) { n.splice(r, 1); break } } }, Ig.prototype = { constructor: Ig, getCol: function () { return this._col }, getLine: function () { return this._line }, eof: function () { return this._cursor == this._input.length }, peek: function (e) { var t = null; return e = void 0 === e ? 1 : e, this._cursor < this._input.length && (t = this._input.charAt(this._cursor + e - 1)), t }, read: function () { var e = null; return this._cursor < this._input.length && ("\n" == this._input.charAt(this._cursor) ? (this._line++, this._col = 1) : this._col++, e = this._input.charAt(this._cursor++)), e }, mark: function () { this._bookmark = { cursor: this._cursor, line: this._line, col: this._col } }, reset: function () { this._bookmark && (this._cursor = this._bookmark.cursor, this._line = this._bookmark.line, this._col = this._bookmark.col, delete this._bookmark) }, readTo: function (e) { for (var t, n = ""; n.length < e.length || n.lastIndexOf(e) != n.length - e.length;) { if (!(t = this.read())) throw new Error('Expected "' + e + '" at line ' + this._line + ", col " + this._col + "."); n += t } return n }, readWhile: function (e) { for (var t = "", n = this.read(); null !== n && e(n);)t += n, n = this.read(); return t }, readMatch: function (e) { var t = this._input.substring(this._cursor), n = null; return "string" == typeof e ? 0 === t.indexOf(e) && (n = this.readCount(e.length)) : e instanceof RegExp && e.test(t) && (n = this.readCount(RegExp.lastMatch.length)), n }, readCount: function (e) { for (var t = ""; e--;)t += this.read(); return t } }, Jg.prototype = new Error, Kg.fromToken = function (e) { return new Kg(e.value, e.startLine, e.startCol) }, Kg.prototype = { constructor: Kg, valueOf: function () { return this.text }, toString: function () { return this.text } }, Lg.createTokenData = function (e) { var t = [], n = {}, r = e.concat([]), i = 0, o = r.length + 1; for (r.UNKNOWN = -1, r.unshift({ name: "EOF" }); i < o; i++)t.push(r[i].name), r[r[i].name] = i, r[i].text && (n[r[i].text] = i); return r.name = function (e) { return t[e] }, r.type = function (e) { return n[e] }, r }, Lg.prototype = { constructor: Lg, match: function (e, t) { e instanceof Array || (e = [e]); for (var n = this.get(t), r = 0, i = e.length; r < i;)if (n == e[r++]) return !0; return this.unget(), !1 }, mustMatch: function (e, t) { var n; if (e instanceof Array || (e = [e]), !this.match.apply(this, arguments)) throw n = this.LT(1), new Jg("Expected " + this._tokenData[e[0]].name + " at line " + n.startLine + ", col " + n.startCol + ".", n.startLine, n.startCol) }, advance: function (e, t) { for (; 0 !== this.LA(0) && !this.match(e, t);)this.get(); return this.LA(0) }, get: function (e) { var t, n, r = this._tokenData, i = (this._reader, 0); r.length; if (this._lt.length && 0 <= this._ltIndex && this._ltIndex < this._lt.length) { for (i++, this._token = this._lt[this._ltIndex++], n = r[this._token.type]; void 0 !== n.channel && e !== n.channel && this._ltIndex < this._lt.length;)this._token = this._lt[this._ltIndex++], n = r[this._token.type], i++; if ((void 0 === n.channel || e === n.channel) && this._ltIndex <= this._lt.length) return this._ltIndexCache.push(i), this._token.type } return -1 < (t = this._getToken()).type && !r[t.type].hide && (t.channel = r[t.type].channel, this._token = t, this._lt.push(t), this._ltIndexCache.push(this._lt.length - this._ltIndex + i), 5 < this._lt.length && this._lt.shift(), 5 < this._ltIndexCache.length && this._ltIndexCache.shift(), this._ltIndex = this._lt.length), (n = r[t.type]) && (n.hide || void 0 !== n.channel && e !== n.channel) ? this.get(e) : t.type }, LA: function (e) { var t, n = e; if (0 < e) { if (5 < e) throw new Error("Too much lookahead."); for (; n;)t = this.get(), n--; for (; n < e;)this.unget(), n++ } else if (e < 0) { if (!this._lt[this._ltIndex + e]) throw new Error("Too much lookbehind."); t = this._lt[this._ltIndex + e].type } else t = this._token.type; return t }, LT: function (e) { return this.LA(e), this._lt[this._ltIndex + e - 1] }, peek: function () { return this.LA(1) }, token: function () { return this._token }, tokenName: function (e) { return e < 0 || e > this._tokenData.length ? "UNKNOWN_TOKEN" : this._tokenData[e].name }, tokenType: function (e) { return this._tokenData[e] || -1 }, unget: function () { if (!this._ltIndexCache.length) throw new Error("Too much lookahead."); this._ltIndex -= this._ltIndexCache.pop(), this._token = this._lt[this._ltIndex - 1] } }, parserlib.util = { StringReader: Ig, SyntaxError: Jg, SyntaxUnit: Kg, EventTarget: Hg, TokenStreamBase: Lg }, function () { function Combinator(e, t, n) { SyntaxUnit.call(this, e, t, n, Parser.COMBINATOR_TYPE), this.type = "unknown", /^\s+$/.test(e) ? this.type = "descendant" : ">" == e ? this.type = "child" : "+" == e ? this.type = "adjacent-sibling" : "~" == e && (this.type = "sibling") } function MediaFeature(e, t) { SyntaxUnit.call(this, "(" + e + (null !== t ? ":" + t : "") + ")", e.startLine, e.startCol, Parser.MEDIA_FEATURE_TYPE), this.name = e, this.value = t } function MediaQuery(e, t, n, r, i) { SyntaxUnit.call(this, (e ? e + " " : "") + (t || "") + (t && 0 < n.length ? " and " : "") + n.join(" and "), r, i, Parser.MEDIA_QUERY_TYPE), this.modifier = e, this.mediaType = t, this.features = n } function Parser(e) { EventTarget.call(this), this.options = e || {}, this._tokenStream = null } function PropertyName(e, t, n, r) { SyntaxUnit.call(this, e, n, r, Parser.PROPERTY_NAME_TYPE), this.hack = t } function PropertyValue(e, t, n) { SyntaxUnit.call(this, e.join(" "), t, n, Parser.PROPERTY_VALUE_TYPE), this.parts = e } function PropertyValueIterator(e) { this._i = 0, this._parts = e.parts, this._marks = [], this.value = e } function PropertyValuePart(text, line, col) { var temp; if (SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_VALUE_PART_TYPE), this.type = "unknown", /^([+\-]?[\d\.]+)([a-z]+)$/i.test(text)) switch (this.type = "dimension", this.value = +RegExp.$1, this.units = RegExp.$2, this.units.toLowerCase()) { case "em": case "rem": case "ex": case "px": case "cm": case "mm": case "in": case "pt": case "pc": case "ch": case "vh": case "vw": case "fr": case "vmax": case "vmin": this.type = "length"; break; case "deg": case "rad": case "grad": this.type = "angle"; break; case "ms": case "s": this.type = "time"; break; case "hz": case "khz": this.type = "frequency"; break; case "dpi": case "dpcm": this.type = "resolution" } else /^([+\-]?[\d\.]+)%$/i.test(text) ? (this.type = "percentage", this.value = +RegExp.$1) : /^([+\-]?\d+)$/i.test(text) ? (this.type = "integer", this.value = +RegExp.$1) : /^([+\-]?[\d\.]+)$/i.test(text) ? (this.type = "number", this.value = +RegExp.$1) : /^#([a-f0-9]{3,6})/i.test(text) ? (this.type = "color", temp = RegExp.$1, 3 == temp.length ? (this.red = parseInt(temp.charAt(0) + temp.charAt(0), 16), this.green = parseInt(temp.charAt(1) + temp.charAt(1), 16), this.blue = parseInt(temp.charAt(2) + temp.charAt(2), 16)) : (this.red = parseInt(temp.substring(0, 2), 16), this.green = parseInt(temp.substring(2, 4), 16), this.blue = parseInt(temp.substring(4, 6), 16))) : /^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/i.test(text) ? (this.type = "color", this.red = +RegExp.$1, this.green = +RegExp.$2, this.blue = +RegExp.$3) : /^rgb\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)/i.test(text) ? (this.type = "color", this.red = 255 * RegExp.$1 / 100, this.green = 255 * RegExp.$2 / 100, this.blue = 255 * RegExp.$3 / 100) : /^rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d\.]+)\s*\)/i.test(text) ? (this.type = "color", this.red = +RegExp.$1, this.green = +RegExp.$2, this.blue = +RegExp.$3, this.alpha = +RegExp.$4) : /^rgba\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*,\s*([\d\.]+)\s*\)/i.test(text) ? (this.type = "color", this.red = 255 * RegExp.$1 / 100, this.green = 255 * RegExp.$2 / 100, this.blue = 255 * RegExp.$3 / 100, this.alpha = +RegExp.$4) : /^hsl\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)/i.test(text) ? (this.type = "color", this.hue = +RegExp.$1, this.saturation = RegExp.$2 / 100, this.lightness = RegExp.$3 / 100) : /^hsla\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*,\s*([\d\.]+)\s*\)/i.test(text) ? (this.type = "color", this.hue = +RegExp.$1, this.saturation = RegExp.$2 / 100, this.lightness = RegExp.$3 / 100, this.alpha = +RegExp.$4) : /^url\(["']?([^\)"']+)["']?\)/i.test(text) ? (this.type = "uri", this.uri = RegExp.$1) : /^([^\(]+)\(/i.test(text) ? (this.type = "function", this.name = RegExp.$1, this.value = text) : /^["'][^"']*["']/.test(text) ? (this.type = "string", this.value = eval(text)) : Colors[text.toLowerCase()] ? (this.type = "color", temp = Colors[text.toLowerCase()].substring(1), this.red = parseInt(temp.substring(0, 2), 16), this.green = parseInt(temp.substring(2, 4), 16), this.blue = parseInt(temp.substring(4, 6), 16)) : /^[\,\/]$/.test(text) ? (this.type = "operator", this.value = text) : /^[a-z\-_\u0080-\uFFFF][a-z0-9\-_\u0080-\uFFFF]*$/i.test(text) && (this.type = "identifier", this.value = text) } function Selector(e, t, n) { SyntaxUnit.call(this, e.join(" "), t, n, Parser.SELECTOR_TYPE), this.parts = e, this.specificity = Specificity.calculate(this) } function SelectorPart(e, t, n, r, i) { SyntaxUnit.call(this, n, r, i, Parser.SELECTOR_PART_TYPE), this.elementName = e, this.modifiers = t } function SelectorSubPart(e, t, n, r) { SyntaxUnit.call(this, e, n, r, Parser.SELECTOR_SUB_PART_TYPE), this.type = t, this.args = [] } function Specificity(e, t, n, r) { this.a = e, this.b = t, this.c = n, this.d = r } function isHexDigit(e) { return null !== e && h.test(e) } function isDigit(e) { return null !== e && /\d/.test(e) } function isWhitespace(e) { return null !== e && /\s/.test(e) } function isNewLine(e) { return null !== e && nl.test(e) } function isNameStart(e) { return null !== e && /[a-z_\u0080-\uFFFF\\]/i.test(e) } function isNameChar(e) { return null !== e && (isNameStart(e) || /[0-9\-\\]/.test(e)) } function isIdentStart(e) { return null !== e && (isNameStart(e) || /\-\\/.test(e)) } function mix(e, t) { for (var n in t) t.hasOwnProperty(n) && (e[n] = t[n]); return e } function TokenStream(e) { TokenStreamBase.call(this, e, Tokens) } function ValidationError(e, t, n) { this.col = n, this.line = t, this.message = e } var EventTarget = parserlib.util.EventTarget, TokenStreamBase = parserlib.util.TokenStreamBase, StringReader = parserlib.util.StringReader, SyntaxError = parserlib.util.SyntaxError, SyntaxUnit = parserlib.util.SyntaxUnit, Colors = { aliceblue: "#f0f8ff", antiquewhite: "#faebd7", aqua: "#00ffff", aquamarine: "#7fffd4", azure: "#f0ffff", beige: "#f5f5dc", bisque: "#ffe4c4", black: "#000000", blanchedalmond: "#ffebcd", blue: "#0000ff", blueviolet: "#8a2be2", brown: "#a52a2a", burlywood: "#deb887", cadetblue: "#5f9ea0", chartreuse: "#7fff00", chocolate: "#d2691e", coral: "#ff7f50", cornflowerblue: "#6495ed", cornsilk: "#fff8dc", crimson: "#dc143c", cyan: "#00ffff", darkblue: "#00008b", darkcyan: "#008b8b", darkgoldenrod: "#b8860b", darkgray: "#a9a9a9", darkgrey: "#a9a9a9", darkgreen: "#006400", darkkhaki: "#bdb76b", darkmagenta: "#8b008b", darkolivegreen: "#556b2f", darkorange: "#ff8c00", darkorchid: "#9932cc", darkred: "#8b0000", darksalmon: "#e9967a", darkseagreen: "#8fbc8f", darkslateblue: "#483d8b", darkslategray: "#2f4f4f", darkslategrey: "#2f4f4f", darkturquoise: "#00ced1", darkviolet: "#9400d3", deeppink: "#ff1493", deepskyblue: "#00bfff", dimgray: "#696969", dimgrey: "#696969", dodgerblue: "#1e90ff", firebrick: "#b22222", floralwhite: "#fffaf0", forestgreen: "#228b22", fuchsia: "#ff00ff", gainsboro: "#dcdcdc", ghostwhite: "#f8f8ff", gold: "#ffd700", goldenrod: "#daa520", gray: "#808080", grey: "#808080", green: "#008000", greenyellow: "#adff2f", honeydew: "#f0fff0", hotpink: "#ff69b4", indianred: "#cd5c5c", indigo: "#4b0082", ivory: "#fffff0", khaki: "#f0e68c", lavender: "#e6e6fa", lavenderblush: "#fff0f5", lawngreen: "#7cfc00", lemonchiffon: "#fffacd", lightblue: "#add8e6", lightcoral: "#f08080", lightcyan: "#e0ffff", lightgoldenrodyellow: "#fafad2", lightgray: "#d3d3d3", lightgrey: "#d3d3d3", lightgreen: "#90ee90", lightpink: "#ffb6c1", lightsalmon: "#ffa07a", lightseagreen: "#20b2aa", lightskyblue: "#87cefa", lightslategray: "#778899", lightslategrey: "#778899", lightsteelblue: "#b0c4de", lightyellow: "#ffffe0", lime: "#00ff00", limegreen: "#32cd32", linen: "#faf0e6", magenta: "#ff00ff", maroon: "#800000", mediumaquamarine: "#66cdaa", mediumblue: "#0000cd", mediumorchid: "#ba55d3", mediumpurple: "#9370d8", mediumseagreen: "#3cb371", mediumslateblue: "#7b68ee", mediumspringgreen: "#00fa9a", mediumturquoise: "#48d1cc", mediumvioletred: "#c71585", midnightblue: "#191970", mintcream: "#f5fffa", mistyrose: "#ffe4e1", moccasin: "#ffe4b5", navajowhite: "#ffdead", navy: "#000080", oldlace: "#fdf5e6", olive: "#808000", olivedrab: "#6b8e23", orange: "#ffa500", orangered: "#ff4500", orchid: "#da70d6", palegoldenrod: "#eee8aa", palegreen: "#98fb98", paleturquoise: "#afeeee", palevioletred: "#d87093", papayawhip: "#ffefd5", peachpuff: "#ffdab9", peru: "#cd853f", pink: "#ffc0cb", plum: "#dda0dd", powderblue: "#b0e0e6", purple: "#800080", red: "#ff0000", rosybrown: "#bc8f8f", royalblue: "#4169e1", saddlebrown: "#8b4513", salmon: "#fa8072", sandybrown: "#f4a460", seagreen: "#2e8b57", seashell: "#fff5ee", sienna: "#a0522d", silver: "#c0c0c0", skyblue: "#87ceeb", slateblue: "#6a5acd", slategray: "#708090", slategrey: "#708090", snow: "#fffafa", springgreen: "#00ff7f", steelblue: "#4682b4", tan: "#d2b48c", teal: "#008080", thistle: "#d8bfd8", tomato: "#ff6347", turquoise: "#40e0d0", violet: "#ee82ee", wheat: "#f5deb3", white: "#ffffff", whitesmoke: "#f5f5f5", yellow: "#ffff00", yellowgreen: "#9acd32", activeBorder: "Active window border.", activecaption: "Active window caption.", appworkspace: "Background color of multiple document interface.", background: "Desktop background.", buttonface: "The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.", buttonhighlight: "The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.", buttonshadow: "The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.", buttontext: "Text on push buttons.", captiontext: "Text in caption, size box, and scrollbar arrow box.", graytext: "Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.", greytext: "Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.", highlight: "Item(s) selected in a control.", highlighttext: "Text of item(s) selected in a control.", inactiveborder: "Inactive window border.", inactivecaption: "Inactive window caption.", inactivecaptiontext: "Color of text in an inactive caption.", infobackground: "Background color for tooltip controls.", infotext: "Text color for tooltip controls.", menu: "Menu background.", menutext: "Text in menus.", scrollbar: "Scroll bar gray area.", threeddarkshadow: "The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedface: "The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedhighlight: "The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedlightshadow: "The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedshadow: "The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", window: "Window background.", windowframe: "Window frame.", windowtext: "Text in windows." }; Combinator.prototype = new SyntaxUnit, Combinator.prototype.constructor = Combinator, MediaFeature.prototype = new SyntaxUnit, MediaFeature.prototype.constructor = MediaFeature, MediaQuery.prototype = new SyntaxUnit, MediaQuery.prototype.constructor = MediaQuery, Parser.DEFAULT_TYPE = 0, Parser.COMBINATOR_TYPE = 1, Parser.MEDIA_FEATURE_TYPE = 2, Parser.MEDIA_QUERY_TYPE = 3, Parser.PROPERTY_NAME_TYPE = 4, Parser.PROPERTY_VALUE_TYPE = 5, Parser.PROPERTY_VALUE_PART_TYPE = 6, Parser.SELECTOR_TYPE = 7, Parser.SELECTOR_PART_TYPE = 8, Parser.SELECTOR_SUB_PART_TYPE = 9, Parser.prototype = function () { var e, t = new EventTarget, n = { constructor: Parser, DEFAULT_TYPE: 0, COMBINATOR_TYPE: 1, MEDIA_FEATURE_TYPE: 2, MEDIA_QUERY_TYPE: 3, PROPERTY_NAME_TYPE: 4, PROPERTY_VALUE_TYPE: 5, PROPERTY_VALUE_PART_TYPE: 6, SELECTOR_TYPE: 7, SELECTOR_PART_TYPE: 8, SELECTOR_SUB_PART_TYPE: 9, _stylesheet: function () { var e, t, n, r = this._tokenStream; for (this.fire("startstylesheet"), this._charset(), this._skipCruft(); r.peek() == Tokens.IMPORT_SYM;)this._import(), this._skipCruft(); for (; r.peek() == Tokens.NAMESPACE_SYM;)this._namespace(), this._skipCruft(); for (n = r.peek(); n > Tokens.EOF;) { try { switch (n) { case Tokens.MEDIA_SYM: this._media(), this._skipCruft(); break; case Tokens.PAGE_SYM: this._page(), this._skipCruft(); break; case Tokens.FONT_FACE_SYM: this._font_face(), this._skipCruft(); break; case Tokens.KEYFRAMES_SYM: this._keyframes(), this._skipCruft(); break; case Tokens.VIEWPORT_SYM: this._viewport(), this._skipCruft(); break; case Tokens.UNKNOWN_SYM: if (r.get(), this.options.strict) throw new SyntaxError("Unknown @ rule.", r.LT(0).startLine, r.LT(0).startCol); for (this.fire({ type: "error", error: null, message: "Unknown @ rule: " + r.LT(0).value + ".", line: r.LT(0).startLine, col: r.LT(0).startCol }), e = 0; r.advance([Tokens.LBRACE, Tokens.RBRACE]) == Tokens.LBRACE;)e++; for (; e;)r.advance([Tokens.RBRACE]), e--; break; case Tokens.S: this._readWhitespace(); break; default: if (!this._ruleset()) switch (n) { case Tokens.CHARSET_SYM: throw t = r.LT(1), this._charset(!1), new SyntaxError("@charset not allowed here.", t.startLine, t.startCol); case Tokens.IMPORT_SYM: throw t = r.LT(1), this._import(!1), new SyntaxError("@import not allowed here.", t.startLine, t.startCol); case Tokens.NAMESPACE_SYM: throw t = r.LT(1), this._namespace(!1), new SyntaxError("@namespace not allowed here.", t.startLine, t.startCol); default: r.get(), this._unexpectedToken(r.token()) } } } catch (e) { if (!(e instanceof SyntaxError) || this.options.strict) throw e; this.fire({ type: "error", error: e, message: e.message, line: e.line, col: e.col }) } n = r.peek() } n != Tokens.EOF && this._unexpectedToken(r.token()), this.fire("endstylesheet") }, _charset: function (e) { var t, n, r, i = this._tokenStream; i.match(Tokens.CHARSET_SYM) && (n = i.token().startLine, r = i.token().startCol, this._readWhitespace(), i.mustMatch(Tokens.STRING), t = i.token().value, this._readWhitespace(), i.mustMatch(Tokens.SEMICOLON), !1 !== e && this.fire({ type: "charset", charset: t, line: n, col: r })) }, _import: function (e) { var t, n, r, i = this._tokenStream; i.mustMatch(Tokens.IMPORT_SYM), n = i.token(), this._readWhitespace(), i.mustMatch([Tokens.STRING, Tokens.URI]), t = i.token().value.replace(/^(?:url\()?["']?([^"']+?)["']?\)?$/, "$1"), this._readWhitespace(), r = this._media_query_list(), i.mustMatch(Tokens.SEMICOLON), this._readWhitespace(), !1 !== e && this.fire({ type: "import", uri: t, media: r, line: n.startLine, col: n.startCol }) }, _namespace: function (e) { var t, n, r, i, o = this._tokenStream; o.mustMatch(Tokens.NAMESPACE_SYM), t = o.token().startLine, n = o.token().startCol, this._readWhitespace(), o.match(Tokens.IDENT) && (r = o.token().value, this._readWhitespace()), o.mustMatch([Tokens.STRING, Tokens.URI]), i = o.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/, "$1"), this._readWhitespace(), o.mustMatch(Tokens.SEMICOLON), this._readWhitespace(), !1 !== e && this.fire({ type: "namespace", prefix: r, uri: i, line: t, col: n }) }, _media: function () { var e, t, n, r = this._tokenStream; for (r.mustMatch(Tokens.MEDIA_SYM), e = r.token().startLine, t = r.token().startCol, this._readWhitespace(), n = this._media_query_list(), r.mustMatch(Tokens.LBRACE), this._readWhitespace(), this.fire({ type: "startmedia", media: n, line: e, col: t }); ;)if (r.peek() == Tokens.PAGE_SYM) this._page(); else if (r.peek() == Tokens.FONT_FACE_SYM) this._font_face(); else if (r.peek() == Tokens.VIEWPORT_SYM) this._viewport(); else if (!this._ruleset()) break; r.mustMatch(Tokens.RBRACE), this._readWhitespace(), this.fire({ type: "endmedia", media: n, line: e, col: t }) }, _media_query_list: function () { var e = this._tokenStream, t = []; for (this._readWhitespace(), e.peek() != Tokens.IDENT && e.peek() != Tokens.LPAREN || t.push(this._media_query()); e.match(Tokens.COMMA);)this._readWhitespace(), t.push(this._media_query()); return t }, _media_query: function () { var e = this._tokenStream, t = null, n = null, r = null, i = []; if (e.match(Tokens.IDENT) && ("only" != (n = e.token().value.toLowerCase()) && "not" != n ? (e.unget(), n = null) : r = e.token()), this._readWhitespace(), e.peek() == Tokens.IDENT ? (t = this._media_type(), null === r && (r = e.token())) : e.peek() == Tokens.LPAREN && (null === r && (r = e.LT(1)), i.push(this._media_expression())), null === t && 0 === i.length) return null; for (this._readWhitespace(); e.match(Tokens.IDENT);)"and" != e.token().value.toLowerCase() && this._unexpectedToken(e.token()), this._readWhitespace(), i.push(this._media_expression()); return new MediaQuery(n, t, i, r.startLine, r.startCol) }, _media_type: function () { return this._media_feature() }, _media_expression: function () { var e, t, n = this._tokenStream, r = null; return n.mustMatch(Tokens.LPAREN), this._readWhitespace(), e = this._media_feature(), this._readWhitespace(), n.match(Tokens.COLON) && (this._readWhitespace(), t = n.LT(1), r = this._expression()), n.mustMatch(Tokens.RPAREN), this._readWhitespace(), new MediaFeature(e, r ? new SyntaxUnit(r, t.startLine, t.startCol) : null) }, _media_feature: function () { var e = this._tokenStream; return e.mustMatch(Tokens.IDENT), SyntaxUnit.fromToken(e.token()) }, _page: function () { var e, t, n = this._tokenStream, r = null, i = null; n.mustMatch(Tokens.PAGE_SYM), e = n.token().startLine, t = n.token().startCol, this._readWhitespace(), !n.match(Tokens.IDENT) || "auto" === (r = n.token().value).toLowerCase() && this._unexpectedToken(n.token()), n.peek() == Tokens.COLON && (i = this._pseudo_page()), this._readWhitespace(), this.fire({ type: "startpage", id: r, pseudo: i, line: e, col: t }), this._readDeclarations(!0, !0), this.fire({ type: "endpage", id: r, pseudo: i, line: e, col: t }) }, _margin: function () { var e, t, n = this._tokenStream, r = this._margin_sym(); return !!r && (e = n.token().startLine, t = n.token().startCol, this.fire({ type: "startpagemargin", margin: r, line: e, col: t }), this._readDeclarations(!0), this.fire({ type: "endpagemargin", margin: r, line: e, col: t }), !0) }, _margin_sym: function () { var e = this._tokenStream; return e.match([Tokens.TOPLEFTCORNER_SYM, Tokens.TOPLEFT_SYM, Tokens.TOPCENTER_SYM, Tokens.TOPRIGHT_SYM, Tokens.TOPRIGHTCORNER_SYM, Tokens.BOTTOMLEFTCORNER_SYM, Tokens.BOTTOMLEFT_SYM, Tokens.BOTTOMCENTER_SYM, Tokens.BOTTOMRIGHT_SYM, Tokens.BOTTOMRIGHTCORNER_SYM, Tokens.LEFTTOP_SYM, Tokens.LEFTMIDDLE_SYM, Tokens.LEFTBOTTOM_SYM, Tokens.RIGHTTOP_SYM, Tokens.RIGHTMIDDLE_SYM, Tokens.RIGHTBOTTOM_SYM]) ? SyntaxUnit.fromToken(e.token()) : null }, _pseudo_page: function () { var e = this._tokenStream; return e.mustMatch(Tokens.COLON), e.mustMatch(Tokens.IDENT), e.token().value }, _font_face: function () { var e, t, n = this._tokenStream; n.mustMatch(Tokens.FONT_FACE_SYM), e = n.token().startLine, t = n.token().startCol, this._readWhitespace(), this.fire({ type: "startfontface", line: e, col: t }), this._readDeclarations(!0), this.fire({ type: "endfontface", line: e, col: t }) }, _viewport: function () { var e, t, n = this._tokenStream; n.mustMatch(Tokens.VIEWPORT_SYM), e = n.token().startLine, t = n.token().startCol, this._readWhitespace(), this.fire({ type: "startviewport", line: e, col: t }), this._readDeclarations(!0), this.fire({ type: "endviewport", line: e, col: t }) }, _operator: function (e) { var t = this._tokenStream, n = null; return (t.match([Tokens.SLASH, Tokens.COMMA]) || e && t.match([Tokens.PLUS, Tokens.STAR, Tokens.MINUS])) && (n = t.token(), this._readWhitespace()), n ? PropertyValuePart.fromToken(n) : null }, _combinator: function () { var e, t = this._tokenStream, n = null; return t.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE]) && (n = new Combinator((e = t.token()).value, e.startLine, e.startCol), this._readWhitespace()), n }, _unary_operator: function () { var e = this._tokenStream; return e.match([Tokens.MINUS, Tokens.PLUS]) ? e.token().value : null }, _property: function () { var e, t, n, r, i = this._tokenStream, o = null, a = null; return i.peek() == Tokens.STAR && this.options.starHack && (i.get(), a = (t = i.token()).value, n = t.startLine, r = t.startCol), i.match(Tokens.IDENT) && ("_" == (e = (t = i.token()).value).charAt(0) && this.options.underscoreHack && (a = "_", e = e.substring(1)), o = new PropertyName(e, a, n || t.startLine, r || t.startCol), this._readWhitespace()), o }, _ruleset: function () { var e, t = this._tokenStream; try { e = this._selectors_group() } catch (e) { if (e instanceof SyntaxError && !this.options.strict) { if (this.fire({ type: "error", error: e, message: e.message, line: e.line, col: e.col }), t.advance([Tokens.RBRACE]) != Tokens.RBRACE) throw e; return !0 } throw e } return e && (this.fire({ type: "startrule", selectors: e, line: e[0].line, col: e[0].col }), this._readDeclarations(!0), this.fire({ type: "endrule", selectors: e, line: e[0].line, col: e[0].col })), e }, _selectors_group: function () { var e = this._tokenStream, t = [], n = this._selector(); if (null !== n) for (t.push(n); e.match(Tokens.COMMA);)this._readWhitespace(), null !== (n = this._selector()) ? t.push(n) : this._unexpectedToken(e.LT(1)); return t.length ? t : null }, _selector: function () { var e = this._tokenStream, t = [], n = null, r = null, i = null; if (null === (n = this._simple_selector_sequence())) return null; for (t.push(n); ;)if (null !== (r = this._combinator())) t.push(r), null === (n = this._simple_selector_sequence()) ? this._unexpectedToken(e.LT(1)) : t.push(n); else { if (!this._readWhitespace()) break; i = new Combinator(e.token().value, e.token().startLine, e.token().startCol), r = this._combinator(), null === (n = this._simple_selector_sequence()) ? null !== r && this._unexpectedToken(e.LT(1)) : (null !== r ? t.push(r) : t.push(i), t.push(n)) } return new Selector(t, t[0].line, t[0].col) }, _simple_selector_sequence: function () { var e = this._tokenStream, t = null, n = [], r = "", i = [function () { return e.match(Tokens.HASH) ? new SelectorSubPart(e.token().value, "id", e.token().startLine, e.token().startCol) : null }, this._class, this._attrib, this._pseudo, this._negation], o = 0, a = i.length, s = null, l = e.LT(1).startLine, u = e.LT(1).startCol; for (null !== (t = (t = this._type_selector()) || this._universal()) && (r += t); e.peek() !== Tokens.S;) { for (; o < a && null === s;)s = i[o++].call(this); if (null === s) { if ("" === r) return null; break } o = 0, n.push(s), r += s.toString(), s = null } return "" !== r ? new SelectorPart(t, n, r, l, u) : null }, _type_selector: function () { var e = this._tokenStream, t = this._namespace_prefix(), n = this._element_name(); return n ? (t && (n.text = t + n.text, n.col -= t.length), n) : (t && (e.unget(), 1 < t.length && e.unget()), null) }, _class: function () { var e, t = this._tokenStream; return t.match(Tokens.DOT) ? (t.mustMatch(Tokens.IDENT), new SelectorSubPart("." + (e = t.token()).value, "class", e.startLine, e.startCol - 1)) : null }, _element_name: function () { var e, t = this._tokenStream; return t.match(Tokens.IDENT) ? new SelectorSubPart((e = t.token()).value, "elementName", e.startLine, e.startCol) : null }, _namespace_prefix: function () { var e = this._tokenStream, t = ""; return e.LA(1) !== Tokens.PIPE && e.LA(2) !== Tokens.PIPE || (e.match([Tokens.IDENT, Tokens.STAR]) && (t += e.token().value), e.mustMatch(Tokens.PIPE), t += "|"), t.length ? t : null }, _universal: function () { var e = this._tokenStream, t = "", n = this._namespace_prefix(); return n && (t += n), e.match(Tokens.STAR) && (t += "*"), t.length ? t : null }, _attrib: function () { var e, t, n = this._tokenStream, r = null; return n.match(Tokens.LBRACKET) ? (r = (t = n.token()).value, r += this._readWhitespace(), (e = this._namespace_prefix()) && (r += e), n.mustMatch(Tokens.IDENT), r += n.token().value, r += this._readWhitespace(), n.match([Tokens.PREFIXMATCH, Tokens.SUFFIXMATCH, Tokens.SUBSTRINGMATCH, Tokens.EQUALS, Tokens.INCLUDES, Tokens.DASHMATCH]) && (r += n.token().value, r += this._readWhitespace(), n.mustMatch([Tokens.IDENT, Tokens.STRING]), r += n.token().value, r += this._readWhitespace()), n.mustMatch(Tokens.RBRACKET), new SelectorSubPart(r + "]", "attribute", t.startLine, t.startCol)) : null }, _pseudo: function () { var e, t, n = this._tokenStream, r = null, i = ":"; return n.match(Tokens.COLON) && (n.match(Tokens.COLON) && (i += ":"), n.match(Tokens.IDENT) ? (r = n.token().value, e = n.token().startLine, t = n.token().startCol - i.length) : n.peek() == Tokens.FUNCTION && (e = n.LT(1).startLine, t = n.LT(1).startCol - i.length, r = this._functional_pseudo()), r = r && new SelectorSubPart(i + r, "pseudo", e, t)), r }, _functional_pseudo: function () { var e = this._tokenStream, t = null; return e.match(Tokens.FUNCTION) && (t = e.token().value, t += this._readWhitespace(), t += this._expression(), e.mustMatch(Tokens.RPAREN), t += ")"), t }, _expression: function () { for (var e = this._tokenStream, t = ""; e.match([Tokens.PLUS, Tokens.MINUS, Tokens.DIMENSION, Tokens.NUMBER, Tokens.STRING, Tokens.IDENT, Tokens.LENGTH, Tokens.FREQ, Tokens.ANGLE, Tokens.TIME, Tokens.RESOLUTION, Tokens.SLASH]);)t += e.token().value, t += this._readWhitespace(); return t.length ? t : null }, _negation: function () { var e, t, n, r = this._tokenStream, i = "", o = null; return r.match(Tokens.NOT) && (i = r.token().value, e = r.token().startLine, t = r.token().startCol, i += this._readWhitespace(), i += n = this._negation_arg(), i += this._readWhitespace(), r.match(Tokens.RPAREN), (o = new SelectorSubPart(i += r.token().value, "not", e, t)).args.push(n)), o }, _negation_arg: function () { for (var e = this._tokenStream, t = [this._type_selector, this._universal, function () { return e.match(Tokens.HASH) ? new SelectorSubPart(e.token().value, "id", e.token().startLine, e.token().startCol) : null }, this._class, this._attrib, this._pseudo], n = null, r = 0, i = t.length, o = e.LT(1).startLine, a = e.LT(1).startCol; r < i && null === n;)n = t[r].call(this), r++; return null === n && this._unexpectedToken(e.LT(1)), "elementName" == n.type ? new SelectorPart(n, [], n.toString(), o, a) : new SelectorPart(null, [n], n.toString(), o, a) }, _declaration: function () { var e = this._tokenStream, t = null, n = null, r = null, i = null, o = ""; if (null === (t = this._property())) return !1; e.mustMatch(Tokens.COLON), this._readWhitespace(), (n = this._expr()) && 0 !== n.length || this._unexpectedToken(e.LT(1)), r = this._prio(), o = t.toString(), (this.options.starHack && "*" == t.hack || this.options.underscoreHack && "_" == t.hack) && (o = t.text); try { this._validateProperty(o, n) } catch (e) { i = e } return this.fire({ type: "property", property: t, value: n, important: r, line: t.line, col: t.col, invalid: i }), !0 }, _prio: function () { var e = this._tokenStream.match(Tokens.IMPORTANT_SYM); return this._readWhitespace(), e }, _expr: function (e) { this._tokenStream; var t = [], n = null, r = null; if (null !== (n = this._term(e))) for (t.push(n); ;) { if ((r = this._operator(e)) && t.push(r), null === (n = this._term(e))) break; t.push(n) } return 0 < t.length ? new PropertyValue(t, t[0].line, t[0].col) : null }, _term: function (e) { var t, n, r, i, o = this._tokenStream, a = null, s = null; return null !== (i = this._unary_operator()) && (n = o.token().startLine, r = o.token().startCol), o.peek() == Tokens.IE_FUNCTION && this.options.ieFilters ? (a = this._ie_function(), null === i && (n = o.token().startLine, r = o.token().startCol)) : e && o.match([Tokens.LPAREN, Tokens.LBRACE, Tokens.LBRACKET]) ? (s = (t = o.token()).endChar, a = t.value + this._expr(e).text, null === i && (n = o.token().startLine, r = o.token().startCol), o.mustMatch(Tokens.type(s)), a += s, this._readWhitespace()) : o.match([Tokens.NUMBER, Tokens.PERCENTAGE, Tokens.LENGTH, Tokens.ANGLE, Tokens.TIME, Tokens.FREQ, Tokens.STRING, Tokens.IDENT, Tokens.URI, Tokens.UNICODE_RANGE]) ? (a = o.token().value, null === i && (n = o.token().startLine, r = o.token().startCol), this._readWhitespace()) : null === (t = this._hexcolor()) ? (null === i && (n = o.LT(1).startLine, r = o.LT(1).startCol), null === a && (a = o.LA(3) == Tokens.EQUALS && this.options.ieFilters ? this._ie_function() : this._function())) : (a = t.value, null === i && (n = t.startLine, r = t.startCol)), null !== a ? new PropertyValuePart(null !== i ? i + a : a, n, r) : null }, _function: function () { var e, t = this._tokenStream, n = null; if (t.match(Tokens.FUNCTION)) { if (n = t.token().value, this._readWhitespace(), n += this._expr(!0), this.options.ieFilters && t.peek() == Tokens.EQUALS) do { for (this._readWhitespace() && (n += t.token().value), t.LA(0) == Tokens.COMMA && (n += t.token().value), t.match(Tokens.IDENT), n += t.token().value, t.match(Tokens.EQUALS), n += t.token().value, e = t.peek(); e != Tokens.COMMA && e != Tokens.S && e != Tokens.RPAREN;)t.get(), n += t.token().value, e = t.peek() } while (t.match([Tokens.COMMA, Tokens.S])); t.match(Tokens.RPAREN), n += ")", this._readWhitespace() } return n }, _ie_function: function () { var e, t = this._tokenStream, n = null; if (t.match([Tokens.IE_FUNCTION, Tokens.FUNCTION])) { n = t.token().value; do { for (this._readWhitespace() && (n += t.token().value), t.LA(0) == Tokens.COMMA && (n += t.token().value), t.match(Tokens.IDENT), n += t.token().value, t.match(Tokens.EQUALS), n += t.token().value, e = t.peek(); e != Tokens.COMMA && e != Tokens.S && e != Tokens.RPAREN;)t.get(), n += t.token().value, e = t.peek() } while (t.match([Tokens.COMMA, Tokens.S])); t.match(Tokens.RPAREN), n += ")", this._readWhitespace() } return n }, _hexcolor: function () { var e, t = this._tokenStream, n = null; if (t.match(Tokens.HASH)) { if (e = (n = t.token()).value, !/#[a-f0-9]{3,6}/i.test(e)) throw new SyntaxError("Expected a hex color but found '" + e + "' at line " + n.startLine + ", col " + n.startCol + ".", n.startLine, n.startCol); this._readWhitespace() } return n }, _keyframes: function () { var e, t, n, r = this._tokenStream, i = ""; for (r.mustMatch(Tokens.KEYFRAMES_SYM), e = r.token(), /^@\-([^\-]+)\-/.test(e.value) && (i = RegExp.$1), this._readWhitespace(), n = this._keyframe_name(), this._readWhitespace(), r.mustMatch(Tokens.LBRACE), this.fire({ type: "startkeyframes", name: n, prefix: i, line: e.startLine, col: e.startCol }), this._readWhitespace(), t = r.peek(); t == Tokens.IDENT || t == Tokens.PERCENTAGE;)this._keyframe_rule(), this._readWhitespace(), t = r.peek(); this.fire({ type: "endkeyframes", name: n, prefix: i, line: e.startLine, col: e.startCol }), this._readWhitespace(), r.mustMatch(Tokens.RBRACE) }, _keyframe_name: function () { var e = this._tokenStream; return e.mustMatch([Tokens.IDENT, Tokens.STRING]), SyntaxUnit.fromToken(e.token()) }, _keyframe_rule: function () { this._tokenStream; var e = this._key_list(); this.fire({ type: "startkeyframerule", keys: e, line: e[0].line, col: e[0].col }), this._readDeclarations(!0), this.fire({ type: "endkeyframerule", keys: e, line: e[0].line, col: e[0].col }) }, _key_list: function () { var e = this._tokenStream, t = []; for (t.push(this._key()), this._readWhitespace(); e.match(Tokens.COMMA);)this._readWhitespace(), t.push(this._key()), this._readWhitespace(); return t }, _key: function () { var e, t = this._tokenStream; if (t.match(Tokens.PERCENTAGE)) return SyntaxUnit.fromToken(t.token()); if (t.match(Tokens.IDENT)) { if (e = t.token(), /from|to/i.test(e.value)) return SyntaxUnit.fromToken(e); t.unget() } this._unexpectedToken(t.LT(1)) }, _skipCruft: function () { for (; this._tokenStream.match([Tokens.S, Tokens.CDO, Tokens.CDC]);); }, _readDeclarations: function (e, t) { var n, r = this._tokenStream; this._readWhitespace(), e && r.mustMatch(Tokens.LBRACE), this._readWhitespace(); try { for (; ;) { if (!(r.match(Tokens.SEMICOLON) || t && this._margin())) { if (!this._declaration()) break; if (!r.match(Tokens.SEMICOLON)) break } this._readWhitespace() } r.mustMatch(Tokens.RBRACE), this._readWhitespace() } catch (e) { if (!(e instanceof SyntaxError) || this.options.strict) throw e; if (this.fire({ type: "error", error: e, message: e.message, line: e.line, col: e.col }), (n = r.advance([Tokens.SEMICOLON, Tokens.RBRACE])) == Tokens.SEMICOLON) this._readDeclarations(!1, t); else if (n != Tokens.RBRACE) throw e } }, _readWhitespace: function () { for (var e = this._tokenStream, t = ""; e.match(Tokens.S);)t += e.token().value; return t }, _unexpectedToken: function (e) { throw new SyntaxError("Unexpected token '" + e.value + "' at line " + e.startLine + ", col " + e.startCol + ".", e.startLine, e.startCol) }, _verifyEnd: function () { this._tokenStream.LA(1) != Tokens.EOF && this._unexpectedToken(this._tokenStream.LT(1)) }, _validateProperty: function (e, t) { Validation.validate(e, t) }, parse: function (e) { this._tokenStream = new TokenStream(e, Tokens), this._stylesheet() }, parseStyleSheet: function (e) { return this.parse(e) }, parseMediaQuery: function (e) { this._tokenStream = new TokenStream(e, Tokens); var t = this._media_query(); return this._verifyEnd(), t }, parsePropertyValue: function (e) { this._tokenStream = new TokenStream(e, Tokens), this._readWhitespace(); var t = this._expr(); return this._readWhitespace(), this._verifyEnd(), t }, parseRule: function (e) { this._tokenStream = new TokenStream(e, Tokens), this._readWhitespace(); var t = this._ruleset(); return this._readWhitespace(), this._verifyEnd(), t }, parseSelector: function (e) { this._tokenStream = new TokenStream(e, Tokens), this._readWhitespace(); var t = this._selector(); return this._readWhitespace(), this._verifyEnd(), t }, parseStyleAttribute: function (e) { e += "}", this._tokenStream = new TokenStream(e, Tokens), this._readDeclarations() } }; for (e in n) n.hasOwnProperty(e) && (t[e] = n[e]); return t }(); var Properties = { "align-items": "flex-start | flex-end | center | baseline | stretch", "align-content": "flex-start | flex-end | center | space-between | space-around | stretch", "align-self": "auto | flex-start | flex-end | center | baseline | stretch", "-webkit-align-items": "flex-start | flex-end | center | baseline | stretch", "-webkit-align-content": "flex-start | flex-end | center | space-between | space-around | stretch", "-webkit-align-self": "auto | flex-start | flex-end | center | baseline | stretch", "alignment-adjust": "auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | <percentage> | <length>", "alignment-baseline": "baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical", animation: 1, "animation-delay": { multi: "<time>", comma: !0 }, "animation-direction": { multi: "normal | reverse | alternate | alternate-reverse", comma: !0 }, "animation-duration": { multi: "<time>", comma: !0 }, "animation-fill-mode": { multi: "none | forwards | backwards | both", comma: !0 }, "animation-iteration-count": { multi: "<number> | infinite", comma: !0 }, "animation-name": { multi: "none | <ident>", comma: !0 }, "animation-play-state": { multi: "running | paused", comma: !0 }, "animation-timing-function": 1, "-moz-animation-delay": { multi: "<time>", comma: !0 }, "-moz-animation-direction": { multi: "normal | reverse | alternate | alternate-reverse", comma: !0 }, "-moz-animation-duration": { multi: "<time>", comma: !0 }, "-moz-animation-iteration-count": { multi: "<number> | infinite", comma: !0 }, "-moz-animation-name": { multi: "none | <ident>", comma: !0 }, "-moz-animation-play-state": { multi: "running | paused", comma: !0 }, "-ms-animation-delay": { multi: "<time>", comma: !0 }, "-ms-animation-direction": { multi: "normal | reverse | alternate | alternate-reverse", comma: !0 }, "-ms-animation-duration": { multi: "<time>", comma: !0 }, "-ms-animation-iteration-count": { multi: "<number> | infinite", comma: !0 }, "-ms-animation-name": { multi: "none | <ident>", comma: !0 }, "-ms-animation-play-state": { multi: "running | paused", comma: !0 }, "-webkit-animation-delay": { multi: "<time>", comma: !0 }, "-webkit-animation-direction": { multi: "normal | reverse | alternate | alternate-reverse", comma: !0 }, "-webkit-animation-duration": { multi: "<time>", comma: !0 }, "-webkit-animation-fill-mode": { multi: "none | forwards | backwards | both", comma: !0 }, "-webkit-animation-iteration-count": { multi: "<number> | infinite", comma: !0 }, "-webkit-animation-name": { multi: "none | <ident>", comma: !0 }, "-webkit-animation-play-state": { multi: "running | paused", comma: !0 }, "-o-animation-delay": { multi: "<time>", comma: !0 }, "-o-animation-direction": { multi: "normal | reverse | alternate | alternate-reverse", comma: !0 }, "-o-animation-duration": { multi: "<time>", comma: !0 }, "-o-animation-iteration-count": { multi: "<number> | infinite", comma: !0 }, "-o-animation-name": { multi: "none | <ident>", comma: !0 }, "-o-animation-play-state": { multi: "running | paused", comma: !0 }, appearance: "icon | window | desktop | workspace | document | tooltip | dialog | button | push-button | hyperlink | radio-button | checkbox | menu-item | tab | menu | menubar | pull-down-menu | pop-up-menu | list-menu | radio-group | checkbox-group | outline-tree | range | field | combo-box | signature | password | normal | none | inherit", azimuth: function (e) { var t, n = !1, r = !1; if (ValidationTypes.isAny(e, "<angle> | leftwards | rightwards | inherit") || (ValidationTypes.isAny(e, "behind") && (r = n = !0), ValidationTypes.isAny(e, "left-side | far-left | left | center-left | center | center-right | right | far-right | right-side") && (r = !0, n || ValidationTypes.isAny(e, "behind"))), e.hasNext()) throw t = e.next(), new ValidationError(r ? "Expected end of value but found '" + t + "'." : "Expected (<'azimuth'>) but found '" + t + "'.", t.line, t.col) }, "backface-visibility": "visible | hidden", background: 1, "background-attachment": { multi: "<attachment>", comma: !0 }, "background-clip": { multi: "<box>", comma: !0 }, "background-color": "<color> | inherit", "background-image": { multi: "<bg-image>", comma: !0 }, "background-origin": { multi: "<box>", comma: !0 }, "background-position": { multi: "<bg-position>", comma: !0 }, "background-repeat": { multi: "<repeat-style>" }, "background-size": { multi: "<bg-size>", comma: !0 }, "baseline-shift": "baseline | sub | super | <percentage> | <length>", behavior: 1, binding: 1, bleed: "<length>", "bookmark-label": "<content> | <attr> | <string>", "bookmark-level": "none | <integer>", "bookmark-state": "open | closed", "bookmark-target": "none | <uri> | <attr>", border: "<border-width> || <border-style> || <color>", "border-bottom": "<border-width> || <border-style> || <color>", "border-bottom-color": "<color> | inherit", "border-bottom-left-radius": "<x-one-radius>", "border-bottom-right-radius": "<x-one-radius>", "border-bottom-style": "<border-style>", "border-bottom-width": "<border-width>", "border-collapse": "collapse | separate | inherit", "border-color": { multi: "<color> | inherit", max: 4 }, "border-image": 1, "border-image-outset": { multi: "<length> | <number>", max: 4 }, "border-image-repeat": { multi: "stretch | repeat | round", max: 2 }, "border-image-slice": function (e) { var t, n = !1, r = !1, i = 0; for (ValidationTypes.isAny(e, "fill") && (n = r = !0); e.hasNext() && i < 4 && (n = ValidationTypes.isAny(e, "<number> | <percentage>"));)i++; if (r ? n = !0 : ValidationTypes.isAny(e, "fill"), e.hasNext()) throw t = e.next(), new ValidationError(n ? "Expected end of value but found '" + t + "'." : "Expected ([<number> | <percentage>]{1,4} && fill?) but found '" + t + "'.", t.line, t.col) }, "border-image-source": "<image> | none", "border-image-width": { multi: "<length> | <percentage> | <number> | auto", max: 4 }, "border-left": "<border-width> || <border-style> || <color>", "border-left-color": "<color> | inherit", "border-left-style": "<border-style>", "border-left-width": "<border-width>", "border-radius": function (e) { for (var t, n = !1, r = !1, i = 0, o = 8; e.hasNext() && i < o;) { if (!(n = ValidationTypes.isAny(e, "<length> | <percentage> | inherit"))) { if (!("/" == e.peek() && 0 < i) || r) break; r = !0, o = i + 5, e.next() } i++ } if (e.hasNext()) throw t = e.next(), new ValidationError(n ? "Expected end of value but found '" + t + "'." : "Expected (<'border-radius'>) but found '" + t + "'.", t.line, t.col) }, "border-right": "<border-width> || <border-style> || <color>", "border-right-color": "<color> | inherit", "border-right-style": "<border-style>", "border-right-width": "<border-width>", "border-spacing": { multi: "<length> | inherit", max: 2 }, "border-style": { multi: "<border-style>", max: 4 }, "border-top": "<border-width> || <border-style> || <color>", "border-top-color": "<color> | inherit", "border-top-left-radius": "<x-one-radius>", "border-top-right-radius": "<x-one-radius>", "border-top-style": "<border-style>", "border-top-width": "<border-width>", "border-width": { multi: "<border-width>", max: 4 }, bottom: "<margin-width> | inherit", "-moz-box-align": "start | end | center | baseline | stretch", "-moz-box-decoration-break": "slice |clone", "-moz-box-direction": "normal | reverse | inherit", "-moz-box-flex": "<number>", "-moz-box-flex-group": "<integer>", "-moz-box-lines": "single | multiple", "-moz-box-ordinal-group": "<integer>", "-moz-box-orient": "horizontal | vertical | inline-axis | block-axis | inherit", "-moz-box-pack": "start | end | center | justify", "-webkit-box-align": "start | end | center | baseline | stretch", "-webkit-box-decoration-break": "slice |clone", "-webkit-box-direction": "normal | reverse | inherit", "-webkit-box-flex": "<number>", "-webkit-box-flex-group": "<integer>", "-webkit-box-lines": "single | multiple", "-webkit-box-ordinal-group": "<integer>", "-webkit-box-orient": "horizontal | vertical | inline-axis | block-axis | inherit", "-webkit-box-pack": "start | end | center | justify", "box-shadow": function (e) { var t; if (ValidationTypes.isAny(e, "none")) { if (e.hasNext()) throw new ValidationError("Expected end of value but found '" + (t = e.next()) + "'.", t.line, t.col) } else Validation.multiProperty("<shadow>", e, !0, 1 / 0) }, "box-sizing": "content-box | border-box | inherit", "break-after": "auto | always | avoid | left | right | page | column | avoid-page | avoid-column", "break-before": "auto | always | avoid | left | right | page | column | avoid-page | avoid-column", "break-inside": "auto | avoid | avoid-page | avoid-column", "caption-side": "top | bottom | inherit", clear: "none | right | left | both | inherit", clip: 1, color: "<color> | inherit", "color-profile": 1, "column-count": "<integer> | auto", "column-fill": "auto | balance", "column-gap": "<length> | normal", "column-rule": "<border-width> || <border-style> || <color>", "column-rule-color": "<color>", "column-rule-style": "<border-style>", "column-rule-width": "<border-width>", "column-span": "none | all", "column-width": "<length> | auto", columns: 1, content: 1, "counter-increment": 1, "counter-reset": 1, crop: "<shape> | auto", cue: "cue-after | cue-before | inherit", "cue-after": 1, "cue-before": 1, cursor: 1, direction: "ltr | rtl | inherit", display: "inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | grid | inline-grid | none | inherit | -moz-box | -moz-inline-block | -moz-inline-box | -moz-inline-grid | -moz-inline-stack | -moz-inline-table | -moz-grid | -moz-grid-group | -moz-grid-line | -moz-groupbox | -moz-deck | -moz-popup | -moz-stack | -moz-marker | -webkit-box | -webkit-inline-box | -ms-flexbox | -ms-inline-flexbox | flex | -webkit-flex | inline-flex | -webkit-inline-flex", "dominant-baseline": 1, "drop-initial-after-adjust": "central | middle | after-edge | text-after-edge | ideographic | alphabetic | mathematical | <percentage> | <length>", "drop-initial-after-align": "baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical", "drop-initial-before-adjust": "before-edge | text-before-edge | central | middle | hanging | mathematical | <percentage> | <length>", "drop-initial-before-align": "caps-height | baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical", "drop-initial-size": "auto | line | <length> | <percentage>", "drop-initial-value": "initial | <integer>", elevation: "<angle> | below | level | above | higher | lower | inherit", "empty-cells": "show | hide | inherit", filter: 1, fit: "fill | hidden | meet | slice", "fit-position": 1, flex: "<flex>", "flex-basis": "<width>", "flex-direction": "row | row-reverse | column | column-reverse", "flex-flow": "<flex-direction> || <flex-wrap>", "flex-grow": "<number>", "flex-shrink": "<number>", "flex-wrap": "nowrap | wrap | wrap-reverse", "-webkit-flex": "<flex>", "-webkit-flex-basis": "<width>", "-webkit-flex-direction": "row | row-reverse | column | column-reverse", "-webkit-flex-flow": "<flex-direction> || <flex-wrap>", "-webkit-flex-grow": "<number>", "-webkit-flex-shrink": "<number>", "-webkit-flex-wrap": "nowrap | wrap | wrap-reverse", "-ms-flex": "<flex>", "-ms-flex-align": "start | end | center | stretch | baseline", "-ms-flex-direction": "row | row-reverse | column | column-reverse | inherit", "-ms-flex-order": "<number>", "-ms-flex-pack": "start | end | center | justify", "-ms-flex-wrap": "nowrap | wrap | wrap-reverse", float: "left | right | none | inherit", "float-offset": 1, font: 1, "font-family": 1, "font-size": "<absolute-size> | <relative-size> | <length> | <percentage> | inherit", "font-size-adjust": "<number> | none | inherit", "font-stretch": "normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit", "font-style": "normal | italic | oblique | inherit", "font-variant": "normal | small-caps | inherit", "font-weight": "normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit", "grid-cell-stacking": "columns | rows | layer", "grid-column": 1, "grid-columns": 1, "grid-column-align": "start | end | center | stretch", "grid-column-sizing": 1, "grid-column-span": "<integer>", "grid-flow": "none | rows | columns", "grid-layer": "<integer>", "grid-row": 1, "grid-rows": 1, "grid-row-align": "start | end | center | stretch", "grid-row-gap": 1, "grid-row-span": "<integer>", "grid-row-sizing": 1, "grid-template": 1, "grid-template-areas": 1, "grid-template-columns": 1, "grid-template-rows": 1, "hanging-punctuation": 1, height: "<margin-width> | <content-sizing> | inherit", "hyphenate-after": "<integer> | auto", "hyphenate-before": "<integer> | auto", "hyphenate-character": "<string> | auto", "hyphenate-lines": "no-limit | <integer>", "hyphenate-resource": 1, hyphens: "none | manual | auto", icon: 1, "image-orientation": "angle | auto", "image-rendering": 1, "image-resolution": 1, "inline-box-align": "initial | last | <integer>", "justify-content": "flex-start | flex-end | center | space-between | space-around", "-webkit-justify-content": "flex-start | flex-end | center | space-between | space-around", left: "<margin-width> | inherit", "letter-spacing": "<length> | normal | inherit", "line-height": "<number> | <length> | <percentage> | normal | inherit", "line-break": "auto | loose | normal | strict", "line-stacking": 1, "line-stacking-ruby": "exclude-ruby | include-ruby", "line-stacking-shift": "consider-shifts | disregard-shifts", "line-stacking-strategy": "inline-line-height | block-line-height | max-height | grid-height", "list-style": 1, "list-style-image": "<uri> | none | inherit", "list-style-position": "inside | outside | inherit", "list-style-type": "disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit", margin: { multi: "<margin-width> | inherit", max: 4 }, "margin-bottom": "<margin-width> | inherit", "margin-left": "<margin-width> | inherit", "margin-right": "<margin-width> | inherit", "margin-top": "<margin-width> | inherit", mark: 1, "mark-after": 1, "mark-before": 1, marks: 1, "marquee-direction": 1, "marquee-play-count": 1, "marquee-speed": 1, "marquee-style": 1, "max-height": "<length> | <percentage> | <content-sizing> | none | inherit", "max-width": "<length> | <percentage> | <content-sizing> | none | inherit", "max-zoom": "<number> | <percentage> | auto", "min-height": "<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit", "min-width": "<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit", "min-zoom": "<number> | <percentage> | auto", "move-to": 1, "nav-down": 1, "nav-index": 1, "nav-left": 1, "nav-right": 1, "nav-up": 1, opacity: "<number> | inherit", order: "<integer>", "-webkit-order": "<integer>", orphans: "<integer> | inherit", outline: 1, "outline-color": "<color> | invert | inherit", "outline-offset": 1, "outline-style": "<border-style> | inherit", "outline-width": "<border-width> | inherit", overflow: "visible | hidden | scroll | auto | inherit", "overflow-style": 1, "overflow-wrap": "normal | break-word", "overflow-x": 1, "overflow-y": 1, padding: { multi: "<padding-width> | inherit", max: 4 }, "padding-bottom": "<padding-width> | inherit", "padding-left": "<padding-width> | inherit", "padding-right": "<padding-width> | inherit", "padding-top": "<padding-width> | inherit", page: 1, "page-break-after": "auto | always | avoid | left | right | inherit", "page-break-before": "auto | always | avoid | left | right | inherit", "page-break-inside": "auto | avoid | inherit", "page-policy": 1, pause: 1, "pause-after": 1, "pause-before": 1, perspective: 1, "perspective-origin": 1, phonemes: 1, pitch: 1, "pitch-range": 1, "play-during": 1, "pointer-events": "auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit", position: "static | relative | absolute | fixed | inherit", "presentation-level": 1, "punctuation-trim": 1, quotes: 1, "rendering-intent": 1, resize: 1, rest: 1, "rest-after": 1, "rest-before": 1, richness: 1, right: "<margin-width> | inherit", rotation: 1, "rotation-point": 1, "ruby-align": 1, "ruby-overhang": 1, "ruby-position": 1, "ruby-span": 1, size: 1, speak: "normal | none | spell-out | inherit", "speak-header": "once | always | inherit", "speak-numeral": "digits | continuous | inherit", "speak-punctuation": "code | none | inherit", "speech-rate": 1, src: 1, stress: 1, "string-set": 1, "table-layout": "auto | fixed | inherit", "tab-size": "<integer> | <length>", target: 1, "target-name": 1, "target-new": 1, "target-position": 1, "text-align": "left | right | center | justify | inherit", "text-align-last": 1, "text-decoration": 1, "text-emphasis": 1, "text-height": 1, "text-indent": "<length> | <percentage> | inherit", "text-justify": "auto | none | inter-word | inter-ideograph | inter-cluster | distribute | kashida", "text-outline": 1, "text-overflow": 1, "text-rendering": "auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit", "text-shadow": 1, "text-transform": "capitalize | uppercase | lowercase | none | inherit", "text-wrap": "normal | none | avoid", top: "<margin-width> | inherit", "-ms-touch-action": "auto | none | pan-x | pan-y", "touch-action": "auto | none | pan-x | pan-y", transform: 1, "transform-origin": 1, "transform-style": 1, transition: 1, "transition-delay": 1, "transition-duration": 1, "transition-property": 1, "transition-timing-function": 1, "unicode-bidi": "normal | embed | isolate | bidi-override | isolate-override | plaintext | inherit", "user-modify": "read-only | read-write | write-only | inherit", "user-select": "none | text | toggle | element | elements | all | inherit", "user-zoom": "zoom | fixed", "vertical-align": "auto | use-script | baseline | sub | super | top | text-top | central | middle | bottom | text-bottom | <percentage> | <length>", visibility: "visible | hidden | collapse | inherit", "voice-balance": 1, "voice-duration": 1, "voice-family": 1, "voice-pitch": 1, "voice-pitch-range": 1, "voice-rate": 1, "voice-stress": 1, "voice-volume": 1, volume: 1, "white-space": "normal | pre | nowrap | pre-wrap | pre-line | inherit | -pre-wrap | -o-pre-wrap | -moz-pre-wrap | -hp-pre-wrap", "white-space-collapse": 1, widows: "<integer> | inherit", width: "<length> | <percentage> | <content-sizing> | auto | inherit", "word-break": "normal | keep-all | break-all", "word-spacing": "<length> | normal | inherit", "word-wrap": "normal | break-word", "writing-mode": "horizontal-tb | vertical-rl | vertical-lr | lr-tb | rl-tb | tb-rl | bt-rl | tb-lr | bt-lr | lr-bt | rl-bt | lr | rl | tb | inherit", "z-index": "<integer> | auto | inherit", zoom: "<number> | <percentage> | normal" }; PropertyName.prototype = new SyntaxUnit, PropertyName.prototype.constructor = PropertyName, PropertyName.prototype.toString = function () { return (this.hack ? this.hack : "") + this.text }, PropertyValue.prototype = new SyntaxUnit, PropertyValue.prototype.constructor = PropertyValue, PropertyValueIterator.prototype.count = function () { return this._parts.length }, PropertyValueIterator.prototype.isFirst = function () { return 0 === this._i }, PropertyValueIterator.prototype.hasNext = function () { return this._i < this._parts.length }, PropertyValueIterator.prototype.mark = function () { this._marks.push(this._i) }, PropertyValueIterator.prototype.peek = function (e) { return this.hasNext() ? this._parts[this._i + (e || 0)] : null }, PropertyValueIterator.prototype.next = function () { return this.hasNext() ? this._parts[this._i++] : null }, PropertyValueIterator.prototype.previous = function () { return 0 < this._i ? this._parts[--this._i] : null }, PropertyValueIterator.prototype.restore = function () { this._marks.length && (this._i = this._marks.pop()) }, PropertyValuePart.prototype = new SyntaxUnit, PropertyValuePart.prototype.constructor = PropertyValuePart, PropertyValuePart.fromToken = function (e) { return new PropertyValuePart(e.value, e.startLine, e.startCol) }; var Pseudos = { ":first-letter": 1, ":first-line": 1, ":before": 1, ":after": 1, ELEMENT: 1, CLASS: 2, isElement: function (e) { return 0 === e.indexOf("::") || Pseudos[e.toLowerCase()] == Pseudos.ELEMENT } }; Selector.prototype = new SyntaxUnit, Selector.prototype.constructor = Selector, SelectorPart.prototype = new SyntaxUnit, SelectorPart.prototype.constructor = SelectorPart, SelectorSubPart.prototype = new SyntaxUnit, SelectorSubPart.prototype.constructor = SelectorSubPart, Specificity.prototype = { constructor: Specificity, compare: function (e) { for (var t = ["a", "b", "c", "d"], n = 0, r = t.length; n < r; n++) { if (this[t[n]] < e[t[n]]) return -1; if (this[t[n]] > e[t[n]]) return 1 } return 0 }, valueOf: function () { return 1e3 * this.a + 100 * this.b + 10 * this.c + this.d }, toString: function () { return this.a + "," + this.b + "," + this.c + "," + this.d } }, Specificity.calculate = function (e) { function s(e) { var t, n, r, i, o, a = e.elementName ? e.elementName.text : ""; for (a && "*" != a.charAt(a.length - 1) && c++, t = 0, r = e.modifiers.length; t < r; t++)switch ((o = e.modifiers[t]).type) { case "class": case "attribute": u++; break; case "id": l++; break; case "pseudo": Pseudos.isElement(o.text) ? c++ : u++; break; case "not": for (n = 0, i = o.args.length; n < i; n++)s(o.args[n]) } } for (var t, l = 0, u = 0, c = 0, n = 0, r = e.parts.length; n < r; n++)(t = e.parts[n]) instanceof SelectorPart && s(t); return new Specificity(0, l, u, c) }; var h = /^[0-9a-fA-F]$/, nonascii = /^[\u0080-\uFFFF]$/, nl = /\n|\r\n|\r|\f/; TokenStream.prototype = mix(new TokenStreamBase, { _getToken: function (e) { for (var t = this._reader, n = null, r = t.getLine(), i = t.getCol(), o = t.read(); o;) { switch (o) { case "/": n = "*" == t.peek() ? this.commentToken(o, r, i) : this.charToken(o, r, i); break; case "|": case "~": case "^": case "$": case "*": n = "=" == t.peek() ? this.comparisonToken(o, r, i) : this.charToken(o, r, i); break; case '"': case "'": n = this.stringToken(o, r, i); break; case "#": n = isNameChar(t.peek()) ? this.hashToken(o, r, i) : this.charToken(o, r, i); break; case ".": n = isDigit(t.peek()) ? this.numberToken(o, r, i) : this.charToken(o, r, i); break; case "-": n = "-" == t.peek() ? this.htmlCommentEndToken(o, r, i) : isNameStart(t.peek()) ? this.identOrFunctionToken(o, r, i) : this.charToken(o, r, i); break; case "!": n = this.importantToken(o, r, i); break; case "@": n = this.atRuleToken(o, r, i); break; case ":": n = this.notToken(o, r, i); break; case "<": n = this.htmlCommentStartToken(o, r, i); break; case "U": case "u": if ("+" == t.peek()) { n = this.unicodeRangeToken(o, r, i); break } default: n = isDigit(o) ? this.numberToken(o, r, i) : isWhitespace(o) ? this.whitespaceToken(o, r, i) : isIdentStart(o) ? this.identOrFunctionToken(o, r, i) : this.charToken(o, r, i) }break } return n || null !== o || (n = this.createToken(Tokens.EOF, null, r, i)), n }, createToken: function (e, t, n, r, i) { var o = this._reader; return { value: t, type: e, channel: (i = i || {}).channel, endChar: i.endChar, hide: i.hide || !1, startLine: n, startCol: r, endLine: o.getLine(), endCol: o.getCol() } }, atRuleToken: function (e, t, n) { var r = e, i = this._reader, o = Tokens.CHAR; return i.mark(), r = e + this.readName(), (o = Tokens.type(r.toLowerCase())) != Tokens.CHAR && o != Tokens.UNKNOWN || (1 < r.length ? o = Tokens.UNKNOWN_SYM : (o = Tokens.CHAR, r = e, i.reset())), this.createToken(o, r, t, n) }, charToken: function (e, t, n) { var r = Tokens.type(e), i = {}; return -1 == r ? r = Tokens.CHAR : i.endChar = Tokens[r].endChar, this.createToken(r, e, t, n, i) }, commentToken: function (e, t, n) { this._reader; var r = this.readComment(e); return this.createToken(Tokens.COMMENT, r, t, n) }, comparisonToken: function (e, t, n) { var r = e + this._reader.read(), i = Tokens.type(r) || Tokens.CHAR; return this.createToken(i, r, t, n) }, hashToken: function (e, t, n) { this._reader; var r = this.readName(e); return this.createToken(Tokens.HASH, r, t, n) }, htmlCommentStartToken: function (e, t, n) { var r = this._reader, i = e; return r.mark(), "\x3c!--" == (i += r.readCount(3)) ? this.createToken(Tokens.CDO, i, t, n) : (r.reset(), this.charToken(e, t, n)) }, htmlCommentEndToken: function (e, t, n) { var r = this._reader, i = e; return r.mark(), "--\x3e" == (i += r.readCount(2)) ? this.createToken(Tokens.CDC, i, t, n) : (r.reset(), this.charToken(e, t, n)) }, identOrFunctionToken: function (e, t, n) { var r = this._reader, i = this.readName(e), o = Tokens.IDENT; return "(" == r.peek() ? "url(" == (i += r.read()).toLowerCase() ? (o = Tokens.URI, "url(" == (i = this.readURI(i)).toLowerCase() && (o = Tokens.FUNCTION)) : o = Tokens.FUNCTION : ":" == r.peek() && "progid" == i.toLowerCase() && (i += r.readTo("("), o = Tokens.IE_FUNCTION), this.createToken(o, i, t, n) }, importantToken: function (e, t, n) { var r, i, o = this._reader, a = e, s = Tokens.CHAR; for (o.mark(), i = o.read(); i;) { if ("/" == i) { if ("*" != o.peek()) break; if ("" === (r = this.readComment(i))) break } else { if (!isWhitespace(i)) { if (/i/i.test(i)) { r = o.readCount(8), /mportant/i.test(r) && (a += i + r, s = Tokens.IMPORTANT_SYM); break } break } a += i + this.readWhitespace() } i = o.read() } return s == Tokens.CHAR ? (o.reset(), this.charToken(e, t, n)) : this.createToken(s, a, t, n) }, notToken: function (e, t, n) { var r = this._reader, i = e; return r.mark(), ":not(" == (i += r.readCount(4)).toLowerCase() ? this.createToken(Tokens.NOT, i, t, n) : (r.reset(), this.charToken(e, t, n)) }, numberToken: function (e, t, n) { var r, i = this._reader, o = this.readNumber(e), a = Tokens.NUMBER, s = i.peek(); return isIdentStart(s) ? (o += r = this.readName(i.read()), a = /^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^fr$|^vmax$|^vmin$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(r) ? Tokens.LENGTH : /^deg|^rad$|^grad$/i.test(r) ? Tokens.ANGLE : /^ms$|^s$/i.test(r) ? Tokens.TIME : /^hz$|^khz$/i.test(r) ? Tokens.FREQ : /^dpi$|^dpcm$/i.test(r) ? Tokens.RESOLUTION : Tokens.DIMENSION) : "%" == s && (o += i.read(), a = Tokens.PERCENTAGE), this.createToken(a, o, t, n) }, stringToken: function (e, t, n) { for (var r = e, i = e, o = this._reader, a = e, s = Tokens.STRING, l = o.read(); l && (i += l, l != r || "\\" == a);) { if (isNewLine(o.peek()) && "\\" != l) { s = Tokens.INVALID; break } a = l, l = o.read() } return null === l && (s = Tokens.INVALID), this.createToken(s, i, t, n) }, unicodeRangeToken: function (e, t, n) { var r, i = this._reader, o = e, a = Tokens.CHAR; return "+" == i.peek() && (i.mark(), o += i.read(), 2 == (o += this.readUnicodeRangePart(!0)).length ? i.reset() : (a = Tokens.UNICODE_RANGE, -1 == o.indexOf("?") && "-" == i.peek() && (i.mark(), r = i.read(), 1 == (r += this.readUnicodeRangePart(!1)).length ? i.reset() : o += r))), this.createToken(a, o, t, n) }, whitespaceToken: function (e, t, n) { this._reader; var r = e + this.readWhitespace(); return this.createToken(Tokens.S, r, t, n) }, readUnicodeRangePart: function (e) { for (var t = this._reader, n = "", r = t.peek(); isHexDigit(r) && n.length < 6;)t.read(), n += r, r = t.peek(); if (e) for (; "?" == r && n.length < 6;)t.read(), n += r, r = t.peek(); return n }, readWhitespace: function () { for (var e = this._reader, t = "", n = e.peek(); isWhitespace(n);)e.read(), t += n, n = e.peek(); return t }, readNumber: function (e) { for (var t = this._reader, n = e, r = "." == e, i = t.peek(); i;) { if (isDigit(i)) n += t.read(); else { if ("." != i) break; if (r) break; r = !0, n += t.read() } i = t.peek() } return n }, readString: function () { for (var e = this._reader, t = e.read(), n = t, r = t, i = e.peek(); i && (n += i = e.read(), i != t || "\\" == r);) { if (isNewLine(e.peek()) && "\\" != i) { n = ""; break } r = i, i = e.peek() } return null === i && (n = ""), n }, readURI: function (e) { var t = this._reader, n = e, r = "", i = t.peek(); for (t.mark(); i && isWhitespace(i);)t.read(), i = t.peek(); for (r = "'" == i || '"' == i ? this.readString() : this.readURL(), i = t.peek(); i && isWhitespace(i);)t.read(), i = t.peek(); return "" === r || ")" != i ? (n = e, t.reset()) : n += r + t.read(), n }, readURL: function () { for (var e = this._reader, t = "", n = e.peek(); /^[!#$%&\\*-~]$/.test(n);)t += e.read(), n = e.peek(); return t }, readName: function (e) { for (var t = this._reader, n = e || "", r = t.peek(); ;)if ("\\" == r) n += this.readEscape(t.read()), r = t.peek(); else { if (!r || !isNameChar(r)) break; n += t.read(), r = t.peek() } return n }, readEscape: function (e) { var t = this._reader, n = e || "", r = 0, i = t.peek(); if (isHexDigit(i)) for (; n += t.read(), (i = t.peek()) && isHexDigit(i) && ++r < 6;); return 3 == n.length && /\s/.test(i) || 7 == n.length || 1 == n.length ? t.read() : i = "", n + i }, readComment: function (e) { var t = this._reader, n = e || "", r = t.read(); if ("*" != r) return ""; for (; r;) { if (2 < (n += r).length && "*" == r && "/" == t.peek()) { n += t.read(); break } r = t.read() } return n } }); var Tokens = [{ name: "CDO" }, { name: "CDC" }, { name: "S", whitespace: !0 }, { name: "COMMENT", comment: !0, hide: !0, channel: "comment" }, { name: "INCLUDES", text: "~=" }, { name: "DASHMATCH", text: "|=" }, { name: "PREFIXMATCH", text: "^=" }, { name: "SUFFIXMATCH", text: "$=" }, { name: "SUBSTRINGMATCH", text: "*=" }, { name: "STRING" }, { name: "IDENT" }, { name: "HASH" }, { name: "IMPORT_SYM", text: "@import" }, { name: "PAGE_SYM", text: "@page" }, { name: "MEDIA_SYM", text: "@media" }, { name: "FONT_FACE_SYM", text: "@font-face" }, { name: "CHARSET_SYM", text: "@charset" }, { name: "NAMESPACE_SYM", text: "@namespace" }, { name: "VIEWPORT_SYM", text: ["@viewport", "@-ms-viewport"] }, { name: "UNKNOWN_SYM" }, { name: "KEYFRAMES_SYM", text: ["@keyframes", "@-webkit-keyframes", "@-moz-keyframes", "@-o-keyframes"] }, { name: "IMPORTANT_SYM" }, { name: "LENGTH" }, { name: "ANGLE" }, { name: "TIME" }, { name: "FREQ" }, { name: "DIMENSION" }, { name: "PERCENTAGE" }, { name: "NUMBER" }, { name: "URI" }, { name: "FUNCTION" }, { name: "UNICODE_RANGE" }, { name: "INVALID" }, { name: "PLUS", text: "+" }, { name: "GREATER", text: ">" }, { name: "COMMA", text: "," }, { name: "TILDE", text: "~" }, { name: "NOT" }, { name: "TOPLEFTCORNER_SYM", text: "@top-left-corner" }, { name: "TOPLEFT_SYM", text: "@top-left" }, { name: "TOPCENTER_SYM", text: "@top-center" }, { name: "TOPRIGHT_SYM", text: "@top-right" }, { name: "TOPRIGHTCORNER_SYM", text: "@top-right-corner" }, { name: "BOTTOMLEFTCORNER_SYM", text: "@bottom-left-corner" }, { name: "BOTTOMLEFT_SYM", text: "@bottom-left" }, { name: "BOTTOMCENTER_SYM", text: "@bottom-center" }, { name: "BOTTOMRIGHT_SYM", text: "@bottom-right" }, { name: "BOTTOMRIGHTCORNER_SYM", text: "@bottom-right-corner" }, { name: "LEFTTOP_SYM", text: "@left-top" }, { name: "LEFTMIDDLE_SYM", text: "@left-middle" }, { name: "LEFTBOTTOM_SYM", text: "@left-bottom" }, { name: "RIGHTTOP_SYM", text: "@right-top" }, { name: "RIGHTMIDDLE_SYM", text: "@right-middle" }, { name: "RIGHTBOTTOM_SYM", text: "@right-bottom" }, { name: "RESOLUTION", state: "media" }, { name: "IE_FUNCTION" }, { name: "CHAR" }, { name: "PIPE", text: "|" }, { name: "SLASH", text: "/" }, { name: "MINUS", text: "-" }, { name: "STAR", text: "*" }, { name: "LBRACE", endChar: "}", text: "{" }, { name: "RBRACE", text: "}" }, { name: "LBRACKET", endChar: "]", text: "[" }, { name: "RBRACKET", text: "]" }, { name: "EQUALS", text: "=" }, { name: "COLON", text: ":" }, { name: "SEMICOLON", text: ";" }, { name: "LPAREN", endChar: ")", text: "(" }, { name: "RPAREN", text: ")" }, { name: "DOT", text: "." }]; !function () { var t = [], n = {}; Tokens.UNKNOWN = -1, Tokens.unshift({ name: "EOF" }); for (var e = 0, r = Tokens.length; e < r; e++)if (t.push(Tokens[e].name), Tokens[Tokens[e].name] = e, Tokens[e].text) if (Tokens[e].text instanceof Array) for (var i = 0; i < Tokens[e].text.length; i++)n[Tokens[e].text[i]] = e; else n[Tokens[e].text] = e; Tokens.name = function (e) { return t[e] }, Tokens.type = function (e) { return n[e] || -1 } }(); var Validation = { validate: function (e, t) { var n = e.toString().toLowerCase(), r = (t.parts, new PropertyValueIterator(t)), i = Properties[n]; if (i) "number" != typeof i && ("string" == typeof i ? -1 < i.indexOf("||") ? this.groupProperty(i, r) : this.singleProperty(i, r, 1) : i.multi ? this.multiProperty(i.multi, r, i.comma, i.max || 1 / 0) : "function" == typeof i && i(r)); else if (0 !== n.indexOf("-")) throw new ValidationError("Unknown property '" + e + "'.", e.line, e.col) }, singleProperty: function (e, t, n, r) { for (var i, o = !1, a = t.value, s = 0; t.hasNext() && s < n && (o = ValidationTypes.isAny(t, e));)s++; if (!o) throw t.hasNext() && !t.isFirst() ? new ValidationError("Expected end of value but found '" + (i = t.peek()) + "'.", i.line, i.col) : new ValidationError("Expected (" + e + ") but found '" + a + "'.", a.line, a.col); if (t.hasNext()) throw new ValidationError("Expected end of value but found '" + (i = t.next()) + "'.", i.line, i.col) }, multiProperty: function (e, t, n, r) { for (var i, o = !1, a = t.value, s = 0; t.hasNext() && !o && s < r && ValidationTypes.isAny(t, e);)if (s++, t.hasNext()) { if (n) { if ("," != t.peek()) break; i = t.next() } } else o = !0; if (!o) throw t.hasNext() && !t.isFirst() ? new ValidationError("Expected end of value but found '" + (i = t.peek()) + "'.", i.line, i.col) : (i = t.previous(), n && "," == i ? new ValidationError("Expected end of value but found '" + i + "'.", i.line, i.col) : new ValidationError("Expected (" + e + ") but found '" + a + "'.", a.line, a.col)); if (t.hasNext()) throw new ValidationError("Expected end of value but found '" + (i = t.next()) + "'.", i.line, i.col) }, groupProperty: function (e, t, n) { for (var r, i, o = !1, a = t.value, s = e.split("||").length, l = { count: 0 }, u = !1; t.hasNext() && !o && (r = ValidationTypes.isAnyOfGroup(t, e)) && !l[r];)l[r] = 1, l.count++, u = !0, l.count != s && t.hasNext() || (o = !0); if (!o) throw u && t.hasNext() ? new ValidationError("Expected end of value but found '" + (i = t.peek()) + "'.", i.line, i.col) : new ValidationError("Expected (" + e + ") but found '" + a + "'.", a.line, a.col); if (t.hasNext()) throw new ValidationError("Expected end of value but found '" + (i = t.next()) + "'.", i.line, i.col) } }; ValidationError.prototype = new Error; var ValidationTypes = { isLiteral: function (e, t) { for (var n = e.text.toString().toLowerCase(), r = t.split(" | "), i = !1, o = 0, a = r.length; o < a && !i; o++)n == r[o].toLowerCase() && (i = !0); return i }, isSimple: function (e) { return !!this.simple[e] }, isComplex: function (e) { return !!this.complex[e] }, isAny: function (e, t) { for (var n = t.split(" | "), r = !1, i = 0, o = n.length; i < o && !r && e.hasNext(); i++)r = this.isType(e, n[i]); return r }, isAnyOfGroup: function (e, t) { for (var n = t.split(" || "), r = !1, i = 0, o = n.length; i < o && !r; i++)r = this.isType(e, n[i]); return !!r && n[i - 1] }, isType: function (e, t) { var n = e.peek(), r = !1; return "<" != t.charAt(0) ? (r = this.isLiteral(n, t)) && e.next() : this.simple[t] ? (r = this.simple[t](n)) && e.next() : r = this.complex[t](e), r }, simple: { "<absolute-size>": function (e) { return ValidationTypes.isLiteral(e, "xx-small | x-small | small | medium | large | x-large | xx-large") }, "<attachment>": function (e) { return ValidationTypes.isLiteral(e, "scroll | fixed | local") }, "<attr>": function (e) { return "function" == e.type && "attr" == e.name }, "<bg-image>": function (e) { return this["<image>"](e) || this["<gradient>"](e) || "none" == e }, "<gradient>": function (e) { return "function" == e.type && /^(?:\-(?:ms|moz|o|webkit)\-)?(?:repeating\-)?(?:radial\-|linear\-)?gradient/i.test(e) }, "<box>": function (e) { return ValidationTypes.isLiteral(e, "padding-box | border-box | content-box") }, "<content>": function (e) { return "function" == e.type && "content" == e.name }, "<relative-size>": function (e) { return ValidationTypes.isLiteral(e, "smaller | larger") }, "<ident>": function (e) { return "identifier" == e.type }, "<length>": function (e) { return !("function" != e.type || !/^(?:\-(?:ms|moz|o|webkit)\-)?calc/i.test(e)) || ("length" == e.type || "number" == e.type || "integer" == e.type || "0" == e) }, "<color>": function (e) { return "color" == e.type || "transparent" == e }, "<number>": function (e) { return "number" == e.type || this["<integer>"](e) }, "<integer>": function (e) { return "integer" == e.type }, "<line>": function (e) { return "integer" == e.type }, "<angle>": function (e) { return "angle" == e.type }, "<uri>": function (e) { return "uri" == e.type }, "<image>": function (e) { return this["<uri>"](e) }, "<percentage>": function (e) { return "percentage" == e.type || "0" == e }, "<border-width>": function (e) { return this["<length>"](e) || ValidationTypes.isLiteral(e, "thin | medium | thick") }, "<border-style>": function (e) { return ValidationTypes.isLiteral(e, "none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset") }, "<content-sizing>": function (e) { return ValidationTypes.isLiteral(e, "fill-available | -moz-available | -webkit-fill-available | max-content | -moz-max-content | -webkit-max-content | min-content | -moz-min-content | -webkit-min-content | fit-content | -moz-fit-content | -webkit-fit-content") }, "<margin-width>": function (e) { return this["<length>"](e) || this["<percentage>"](e) || ValidationTypes.isLiteral(e, "auto") }, "<padding-width>": function (e) { return this["<length>"](e) || this["<percentage>"](e) }, "<shape>": function (e) { return "function" == e.type && ("rect" == e.name || "inset-rect" == e.name) }, "<time>": function (e) { return "time" == e.type }, "<flex-grow>": function (e) { return this["<number>"](e) }, "<flex-shrink>": function (e) { return this["<number>"](e) }, "<width>": function (e) { return this["<margin-width>"](e) }, "<flex-basis>": function (e) { return this["<width>"](e) }, "<flex-direction>": function (e) { return ValidationTypes.isLiteral(e, "row | row-reverse | column | column-reverse") }, "<flex-wrap>": function (e) { return ValidationTypes.isLiteral(e, "nowrap | wrap | wrap-reverse") } }, complex: { "<bg-position>": function (e) { for (var t = !1, n = "<percentage> | <length>", r = "left | right", i = "top | bottom", o = 0; e.peek(o) && "," != e.peek(o);)o++; return o < 3 ? ValidationTypes.isAny(e, r + " | center | " + n) ? (t = !0, ValidationTypes.isAny(e, i + " | center | " + n)) : ValidationTypes.isAny(e, i) && (t = !0, ValidationTypes.isAny(e, r + " | center")) : ValidationTypes.isAny(e, r) ? ValidationTypes.isAny(e, i) ? (t = !0, ValidationTypes.isAny(e, n)) : ValidationTypes.isAny(e, n) && (ValidationTypes.isAny(e, i) ? (t = !0, ValidationTypes.isAny(e, n)) : ValidationTypes.isAny(e, "center") && (t = !0)) : ValidationTypes.isAny(e, i) ? ValidationTypes.isAny(e, r) ? (t = !0, ValidationTypes.isAny(e, n)) : ValidationTypes.isAny(e, n) && (ValidationTypes.isAny(e, r) ? (t = !0, ValidationTypes.isAny(e, n)) : ValidationTypes.isAny(e, "center") && (t = !0)) : ValidationTypes.isAny(e, "center") && ValidationTypes.isAny(e, r + " | " + i) && (t = !0, ValidationTypes.isAny(e, n)), t }, "<bg-size>": function (e) { var t = !1, n = "<percentage> | <length> | auto"; return ValidationTypes.isAny(e, "cover | contain") ? t = !0 : ValidationTypes.isAny(e, n) && (t = !0, ValidationTypes.isAny(e, n)), t }, "<repeat-style>": function (e) { var t, n = !1, r = "repeat | space | round | no-repeat"; return e.hasNext() && (t = e.next(), ValidationTypes.isLiteral(t, "repeat-x | repeat-y") ? n = !0 : ValidationTypes.isLiteral(t, r) && (n = !0, e.hasNext() && ValidationTypes.isLiteral(e.peek(), r) && e.next())), n }, "<shadow>": function (e) { var t = !1, n = 0, r = !1, i = !1; if (e.hasNext()) { for (ValidationTypes.isAny(e, "inset") && (r = !0), ValidationTypes.isAny(e, "<color>") && (i = !0); ValidationTypes.isAny(e, "<length>") && n < 4;)n++; e.hasNext() && (i || ValidationTypes.isAny(e, "<color>"), r || ValidationTypes.isAny(e, "inset")), t = 2 <= n && n <= 4 } return t }, "<x-one-radius>": function (e) { var t = !1, n = "<length> | <percentage> | inherit"; return ValidationTypes.isAny(e, n) && (t = !0, ValidationTypes.isAny(e, n)), t }, "<flex>": function (e) { var t, n = !1; if (ValidationTypes.isAny(e, "none | inherit") ? n = !0 : ValidationTypes.isType(e, "<flex-grow>") ? e.peek() ? ValidationTypes.isType(e, "<flex-shrink>") ? n = !e.peek() || ValidationTypes.isType(e, "<flex-basis>") : ValidationTypes.isType(e, "<flex-basis>") && (n = null === e.peek()) : n = !0 : ValidationTypes.isType(e, "<flex-basis>") && (n = !0), !n) throw t = e.peek(), new ValidationError("Expected (none | [ <flex-grow> <flex-shrink>? || <flex-basis> ]) but found '" + e.value.text + "'.", t.line, t.col); return n } } }; parserlib.css = { Colors: Colors, Combinator: Combinator, Parser: Parser, PropertyName: PropertyName, PropertyValue: PropertyValue, PropertyValuePart: PropertyValuePart, MediaFeature: MediaFeature, MediaQuery: MediaQuery, Selector: Selector, SelectorPart: SelectorPart, SelectorSubPart: SelectorSubPart, Specificity: Specificity, TokenStream: TokenStream, Tokens: Tokens, ValidationError: ValidationError } }(), function () { for (var e in parserlib) exports[e] = parserlib[e] }(); var util = { isArray: function (e) { return Array.isArray(e) || "object" == typeof e && "[object Array]" === objectToString(e) }, isDate: function (e) { return "object" == typeof e && "[object Date]" === objectToString(e) }, isRegExp: function (e) { return "object" == typeof e && "[object RegExp]" === objectToString(e) }, getRegExpFlags: function (e) { var t = ""; return e.global && (t += "g"), e.ignoreCase && (t += "i"), e.multiline && (t += "m"), t } }; "object" == typeof module && (module.exports = clone), clone.clonePrototype = function (e) { if (null === e) return null; function t() { } return t.prototype = e, new t }; var CSSLint = (Ys = [], Zs = [], $s = /\/\*csslint([^\*]*)\*\//, _s = new parserlib.util.EventTarget, _s.version = "@VERSION@", _s.addRule = function (e) { Ys.push(e), Ys[e.id] = e }, _s.clearRules = function () { Ys = [] }, _s.getRules = function () { return [].concat(Ys).sort(function (e, t) { return e.id > t.id ? 1 : 0 }) }, _s.getRuleset = function () { for (var e = {}, t = 0, n = Ys.length; t < n;)e[Ys[t++].id] = 1; return e }, _s.addFormatter = function (e) { Zs[e.id] = e }, _s.getFormatter = function (e) { return Zs[e] }, _s.format = function (e, t, n, r) { var i = this.getFormatter(n), o = null; return i && (o = i.startFormat(), o += i.formatResults(e, t, r || {}), o += i.endFormat()), o }, _s.hasFormat = function (e) { return Zs.hasOwnProperty(e) }, _s.verify = function (e, t) { var n, r, i, o, a, s, l, u = 0, c = new parserlib.css.Parser({ starHack: !0, ieFilters: !0, underscoreHack: !0, strict: !1 }), h = e.replace(/\n\r?/g, "$split$").split("$split$"); for (u in t = t || this.getRuleset(), $s.test(e) && (t = clone(t), o = t, s = (i = e) && i.match($s), (l = s && s[1]) && (a = { true: 2, "": 1, false: 0, 2: 2, 1: 1, 0: 0 }, l.toLowerCase().split(",").forEach(function (e) { var t = e.split(":"), n = t[0] || "", r = t[1] || ""; o[n.trim()] = a[r.trim()] })), t = o), n = new Reporter(h, t), t.errors = 2, t) t.hasOwnProperty(u) && t[u] && Ys[u] && Ys[u].init(c, n); try { c.parse(e) } catch (e) { n.error("Fatal error, cannot continue: " + e.message, e.line, e.col, {}) } return (r = { messages: n.messages, stats: n.stats, ruleset: n.ruleset }).messages.sort(function (e, t) { return e.rollup && !t.rollup ? 1 : !e.rollup && t.rollup ? -1 : e.line - t.line }), r }, _s), Ys, Zs, $s, _s; function KA(e) { return e && e.constructor === String ? e.replace(/[\"&><]/g, function (e) { switch (e) { case '"': return "&quot;"; case "&": return "&amp;"; case "<": return "&lt;"; case ">": return "&gt;" } }) : "" } Reporter.prototype = { constructor: Reporter, error: function (e, t, n, r) { this.messages.push({ type: "error", line: t, col: n, message: e, evidence: this.lines[t - 1], rule: r || {} }) }, warn: function (e, t, n, r) { this.report(e, t, n, r) }, report: function (e, t, n, r) { this.messages.push({ type: 2 === this.ruleset[r.id] ? "error" : "warning", line: t, col: n, message: e, evidence: this.lines[t - 1], rule: r }) }, info: function (e, t, n, r) { this.messages.push({ type: "info", line: t, col: n, message: e, evidence: this.lines[t - 1], rule: r }) }, rollupError: function (e, t) { this.messages.push({ type: "error", rollup: !0, message: e, rule: t }) }, rollupWarn: function (e, t) { this.messages.push({ type: "warning", rollup: !0, message: e, rule: t }) }, stat: function (e, t) { this.stats[e] = t } }, CSSLint._Reporter = Reporter, CSSLint.Util = { mix: function (e, t) { var n; for (n in t) t.hasOwnProperty(n) && (e[n] = t[n]); return n }, indexOf: function (e, t) { if (e.indexOf) return e.indexOf(t); for (var n = 0, r = e.length; n < r; n++)if (e[n] === t) return n; return -1 }, forEach: function (e, t) { if (e.forEach) return e.forEach(t); for (var n = 0, r = e.length; n < r; n++)t(e[n], n, e) } }, CSSLint.addRule({ id: "adjoining-classes", name: "Disallow adjoining classes", desc: "Don't use adjoining classes.", browsers: "IE6", init: function (l, u) { var c = this; l.addListener("startrule", function (e) { for (var t, n, r, i, o, a = e.selectors, s = 0; s < a.length; s++)for (t = a[s], i = 0; i < t.parts.length; i++)if ((n = t.parts[i]).type === l.SELECTOR_PART_TYPE) for (o = r = 0; o < n.modifiers.length; o++)"class" === n.modifiers[o].type && r++, 1 < r && u.report("Don't use adjoining classes.", n.line, n.col, c) }) } }), CSSLint.addRule({ id: "box-model", name: "Beware of broken box size", desc: "Don't use width or height when using padding or border.", browsers: "All", init: function (e, n) { function t() { l = !(i = {}) } function r() { var e, t; if (!l) { if (i.height) for (e in s) s.hasOwnProperty(e) && i[e] && (t = i[e].value, "padding" === e && 2 === t.parts.length && 0 === t.parts[0].value || n.report("Using height with " + e + " can sometimes make elements larger than you expect.", i[e].line, i[e].col, o)); if (i.width) for (e in a) a.hasOwnProperty(e) && i[e] && (t = i[e].value, "padding" === e && 2 === t.parts.length && 0 === t.parts[1].value || n.report("Using width with " + e + " can sometimes make elements larger than you expect.", i[e].line, i[e].col, o)) } } var i, o = this, a = { border: 1, "border-left": 1, "border-right": 1, padding: 1, "padding-left": 1, "padding-right": 1 }, s = { border: 1, "border-bottom": 1, "border-top": 1, padding: 1, "padding-bottom": 1, "padding-top": 1 }, l = !1; e.addListener("startrule", t), e.addListener("startfontface", t), e.addListener("startpage", t), e.addListener("startpagemargin", t), e.addListener("startkeyframerule", t), e.addListener("property", function (e) { var t = e.property.text.toLowerCase(); s[t] || a[t] ? /^0\S*$/.test(e.value) || "border" === t && "none" === e.value.toString() || (i[t] = { line: e.property.line, col: e.property.col, value: e.value }) : /^(width|height)/i.test(t) && /^(length|percentage)/.test(e.value.parts[0].type) ? i[t] = 1 : "box-sizing" === t && (l = !0) }), e.addListener("endrule", r), e.addListener("endfontface", r), e.addListener("endpage", r), e.addListener("endpagemargin", r), e.addListener("endkeyframerule", r) } }), CSSLint.addRule({ id: "box-sizing", name: "Disallow use of box-sizing", desc: "The box-sizing properties isn't supported in IE6 and IE7.", browsers: "IE6, IE7", tags: ["Compatibility"], init: function (e, t) { var n = this; e.addListener("property", function (e) { "box-sizing" === e.property.text.toLowerCase() && t.report("The box-sizing property isn't supported in IE6 and IE7.", e.line, e.col, n) }) } }), CSSLint.addRule({ id: "bulletproof-font-face", name: "Use the bulletproof @font-face syntax", desc: "Use the bulletproof @font-face syntax to avoid 404's in old IE (http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax).", browsers: "All", init: function (e, t) { var i, o, n = this, a = !1, s = !0, l = !1; e.addListener("startfontface", function () { a = !0 }), e.addListener("property", function (e) { var t, n, r; a && (t = e.property.toString().toLowerCase(), n = e.value.toString(), i = e.line, o = e.col, "src" === t && (r = /^\s?url\(['"].+\.eot\?.*['"]\)\s*format\(['"]embedded-opentype['"]\).*$/i, !n.match(r) && s ? s = !(l = !0) : n.match(r) && !s && (l = !1))) }), e.addListener("endfontface", function () { a = !1, l && t.report("@font-face declaration doesn't follow the fontspring bulletproof syntax.", i, o, n) }) } }), CSSLint.addRule({ id: "compatible-vendor-prefixes", name: "Require compatible vendor prefixes", desc: "Include all compatible vendor prefixes to reach a wider range of users.", browsers: "All", init: function (e, h) { var d, t, n, r, i, o, p = this, a = !1, s = Array.prototype.push, l = [], m = { animation: "webkit moz", "animation-delay": "webkit moz", "animation-direction": "webkit moz", "animation-duration": "webkit moz", "animation-fill-mode": "webkit moz", "animation-iteration-count": "webkit moz", "animation-name": "webkit moz", "animation-play-state": "webkit moz", "animation-timing-function": "webkit moz", appearance: "webkit moz", "border-end": "webkit moz", "border-end-color": "webkit moz", "border-end-style": "webkit moz", "border-end-width": "webkit moz", "border-image": "webkit moz o", "border-radius": "webkit", "border-start": "webkit moz", "border-start-color": "webkit moz", "border-start-style": "webkit moz", "border-start-width": "webkit moz", "box-align": "webkit moz ms", "box-direction": "webkit moz ms", "box-flex": "webkit moz ms", "box-lines": "webkit ms", "box-ordinal-group": "webkit moz ms", "box-orient": "webkit moz ms", "box-pack": "webkit moz ms", "box-sizing": "webkit moz", "box-shadow": "webkit moz", "column-count": "webkit moz ms", "column-gap": "webkit moz ms", "column-rule": "webkit moz ms", "column-rule-color": "webkit moz ms", "column-rule-style": "webkit moz ms", "column-rule-width": "webkit moz ms", "column-width": "webkit moz ms", hyphens: "epub moz", "line-break": "webkit ms", "margin-end": "webkit moz", "margin-start": "webkit moz", "marquee-speed": "webkit wap", "marquee-style": "webkit wap", "padding-end": "webkit moz", "padding-start": "webkit moz", "tab-size": "moz o", "text-size-adjust": "webkit ms", transform: "webkit moz ms o", "transform-origin": "webkit moz ms o", transition: "webkit moz o", "transition-delay": "webkit moz o", "transition-duration": "webkit moz o", "transition-property": "webkit moz o", "transition-timing-function": "webkit moz o", "user-modify": "webkit moz", "user-select": "webkit moz ms", "word-break": "epub ms", "writing-mode": "epub ms" }; for (t in m) if (m.hasOwnProperty(t)) { for (n = [], i = 0, o = (r = m[t].split(" ")).length; i < o; i++)n.push("-" + r[i] + "-" + t); m[t] = n, s.apply(l, n) } e.addListener("startrule", function () { d = [] }), e.addListener("startkeyframes", function (e) { a = e.prefix || !0 }), e.addListener("endkeyframes", function () { a = !1 }), e.addListener("property", function (e) { var t = e.property; -1 < CSSLint.Util.indexOf(l, t.text) && (!a || "string" != typeof a || 0 !== t.text.indexOf("-" + a + "-")) && d.push(t) }), e.addListener("endrule", function () { if (d.length) { for (var e, t, n, r, i, o, a, s, l = {}, u = 0, c = d.length; u < c; u++)for (t in e = d[u], m) m.hasOwnProperty(t) && (n = m[t], -1 < CSSLint.Util.indexOf(n, e.text) && (l[t] || (l[t] = { full: n.slice(0), actual: [], actualNodes: [] }), -1 === CSSLint.Util.indexOf(l[t].actual, e.text) && (l[t].actual.push(e.text), l[t].actualNodes.push(e)))); for (t in l) if (l.hasOwnProperty(t) && (i = (r = l[t]).full, o = r.actual, i.length > o.length)) for (u = 0, c = i.length; u < c; u++)a = i[u], -1 === CSSLint.Util.indexOf(o, a) && (s = 1 === o.length ? o[0] : 2 === o.length ? o.join(" and ") : o.join(", "), h.report("The property " + a + " is compatible with " + s + " and should be included as well.", r.actualNodes[0].line, r.actualNodes[0].col, p)) } }) } }), CSSLint.addRule({ id: "display-property-grouping", name: "Require properties appropriate for display", desc: "Certain properties shouldn't be used with certain display property values.", browsers: "All", init: function (e, r) { function t(e, t, n) { !o[e] || "string" == typeof s[e] && o[e].value.toLowerCase() === s[e] || r.report(n || e + " can't be used with display: " + t + ".", o[e].line, o[e].col, a) } function n() { o = {} } function i() { var e = o.display ? o.display.value : null; if (e) switch (e) { case "inline": t("height", e), t("width", e), t("margin", e), t("margin-top", e), t("margin-bottom", e), t("float", e, "display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug)."); break; case "block": t("vertical-align", e); break; case "inline-block": t("float", e); break; default: 0 === e.indexOf("table-") && (t("margin", e), t("margin-left", e), t("margin-right", e), t("margin-top", e), t("margin-bottom", e), t("float", e)) } } var o, a = this, s = { display: 1, float: "none", height: 1, width: 1, margin: 1, "margin-left": 1, "margin-right": 1, "margin-bottom": 1, "margin-top": 1, padding: 1, "padding-left": 1, "padding-right": 1, "padding-bottom": 1, "padding-top": 1, "vertical-align": 1 }; e.addListener("startrule", n), e.addListener("startfontface", n), e.addListener("startkeyframerule", n), e.addListener("startpagemargin", n), e.addListener("startpage", n), e.addListener("property", function (e) { var t = e.property.text.toLowerCase(); s[t] && (o[t] = { value: e.value.text, line: e.property.line, col: e.property.col }) }), e.addListener("endrule", i), e.addListener("endfontface", i), e.addListener("endkeyframerule", i), e.addListener("endpagemargin", i), e.addListener("endpage", i) } }), CSSLint.addRule({ id: "duplicate-background-images", name: "Disallow duplicate background images", desc: "Every background-image should be unique. Use a common class for e.g. sprites.", browsers: "All", init: function (e, o) { var a = this, s = {}; e.addListener("property", function (e) { var t, n, r = e.property.text, i = e.value; if (r.match(/background/i)) for (t = 0, n = i.parts.length; t < n; t++)"uri" === i.parts[t].type && (void 0 === s[i.parts[t].uri] ? s[i.parts[t].uri] = e : o.report("Background image '" + i.parts[t].uri + "' was used multiple times, first declared at line " + s[i.parts[t].uri].line + ", col " + s[i.parts[t].uri].col + ".", e.line, e.col, a)) }) } }), CSSLint.addRule({ id: "duplicate-properties", name: "Disallow duplicate properties", desc: "Duplicate properties must appear one after the other.", browsers: "All", init: function (e, n) { function t() { r = {} } var r, i, o = this; e.addListener("startrule", t), e.addListener("startfontface", t), e.addListener("startpage", t), e.addListener("startpagemargin", t), e.addListener("startkeyframerule", t), e.addListener("property", function (e) { var t = e.property.text.toLowerCase(); !r[t] || i === t && r[t] !== e.value.text || n.report("Duplicate property '" + e.property + "' found.", e.line, e.col, o), r[t] = e.value.text, i = t }) } }), CSSLint.addRule({ id: "empty-rules", name: "Disallow empty rules", desc: "Rules without any properties specified should be removed.", browsers: "All", init: function (e, n) { var r = this, i = 0; e.addListener("startrule", function () { i = 0 }), e.addListener("property", function () { i++ }), e.addListener("endrule", function (e) { var t = e.selectors; 0 === i && n.report("Rule is empty.", t[0].line, t[0].col, r) }) } }), CSSLint.addRule({ id: "errors", name: "Parsing Errors", desc: "This rule looks for recoverable syntax errors.", browsers: "All", init: function (e, t) { var n = this; e.addListener("error", function (e) { t.error(e.message, e.line, e.col, n) }) } }), CSSLint.addRule({ id: "fallback-colors", name: "Require fallback colors", desc: "For older browsers that don't support RGBA, HSL, or HSLA, provide a fallback color.", browsers: "IE6,IE7,IE8", init: function (e, a) { function t() { s = null } var s, l = this, u = { color: 1, background: 1, "border-color": 1, "border-top-color": 1, "border-right-color": 1, "border-bottom-color": 1, "border-left-color": 1, border: 1, "border-top": 1, "border-right": 1, "border-bottom": 1, "border-left": 1, "background-color": 1 }; e.addListener("startrule", t), e.addListener("startfontface", t), e.addListener("startpage", t), e.addListener("startpagemargin", t), e.addListener("startkeyframerule", t), e.addListener("property", function (e) { var t = e.property.text.toLowerCase(), n = e.value.parts, r = 0, i = "", o = n.length; if (u[t]) for (; r < o;)"color" === n[r].type && ("alpha" in n[r] || "hue" in n[r] ? (/([^\)]+)\(/.test(n[r]) && (i = RegExp.$1.toUpperCase()), s && s.property.text.toLowerCase() === t && "compat" === s.colorType || a.report("Fallback " + t + " (hex or RGB) should precede " + i + " " + t + ".", e.line, e.col, l)) : e.colorType = "compat"), r++; s = e }) } }), CSSLint.addRule({ id: "floats", name: "Disallow too many floats", desc: "This rule tests if the float property is used too many times", browsers: "All", init: function (e, t) { var n = this, r = 0; e.addListener("property", function (e) { "float" === e.property.text.toLowerCase() && "none" !== e.value.text.toLowerCase() && r++ }), e.addListener("endstylesheet", function () { t.stat("floats", r), 10 <= r && t.rollupWarn("Too many floats (" + r + "), you're probably using them for layout. Consider using a grid system instead.", n) }) } }), CSSLint.addRule({ id: "font-faces", name: "Don't use too many web fonts", desc: "Too many different web fonts in the same stylesheet.", browsers: "All", init: function (e, t) { var n = this, r = 0; e.addListener("startfontface", function () { r++ }), e.addListener("endstylesheet", function () { 5 < r && t.rollupWarn("Too many @font-face declarations (" + r + ").", n) }) } }), CSSLint.addRule({ id: "font-sizes", name: "Disallow too many font sizes", desc: "Checks the number of font-size declarations.", browsers: "All", init: function (e, t) { var n = this, r = 0; e.addListener("property", function (e) { "font-size" === e.property.toString() && r++ }), e.addListener("endstylesheet", function () { t.stat("font-sizes", r), 10 <= r && t.rollupWarn("Too many font-size declarations (" + r + "), abstraction needed.", n) }) } }), CSSLint.addRule({ id: "gradients", name: "Require all gradient definitions", desc: "When using a vendor-prefixed gradient, make sure to use them all.", browsers: "All", init: function (e, n) { var r, i = this; e.addListener("startrule", function () { r = { moz: 0, webkit: 0, oldWebkit: 0, o: 0 } }), e.addListener("property", function (e) { /\-(moz|o|webkit)(?:\-(?:linear|radial))\-gradient/i.test(e.value) ? r[RegExp.$1] = 1 : /\-webkit\-gradient/i.test(e.value) && (r.oldWebkit = 1) }), e.addListener("endrule", function (e) { var t = []; r.moz || t.push("Firefox 3.6+"), r.webkit || t.push("Webkit (Safari 5+, Chrome)"), r.oldWebkit || t.push("Old Webkit (Safari 4+, Chrome)"), r.o || t.push("Opera 11.1+"), t.length && t.length < 4 && n.report("Missing vendor-prefixed CSS gradients for " + t.join(", ") + ".", e.selectors[0].line, e.selectors[0].col, i) }) } }), CSSLint.addRule({ id: "ids", name: "Disallow IDs in selectors", desc: "Selectors should not contain IDs.", browsers: "All", init: function (l, u) { var c = this; l.addListener("startrule", function (e) { for (var t, n, r, i, o, a = e.selectors, s = 0; s < a.length; s++) { for (t = a[s], i = r = 0; i < t.parts.length; i++)if ((n = t.parts[i]).type === l.SELECTOR_PART_TYPE) for (o = 0; o < n.modifiers.length; o++)"id" === n.modifiers[o].type && r++; 1 === r ? u.report("Don't use IDs in selectors.", t.line, t.col, c) : 1 < r && u.report(r + " IDs in the selector, really?", t.line, t.col, c) } }) } }), CSSLint.addRule({ id: "import", name: "Disallow @import", desc: "Don't use @import, use <link> instead.", browsers: "All", init: function (e, t) { var n = this; e.addListener("import", function (e) { t.report("@import prevents parallel downloads, use <link> instead.", e.line, e.col, n) }) } }), CSSLint.addRule({ id: "important", name: "Disallow !important", desc: "Be careful when using !important declaration", browsers: "All", init: function (e, t) { var n = this, r = 0; e.addListener("property", function (e) { !0 === e.important && (r++, t.report("Use of !important", e.line, e.col, n)) }), e.addListener("endstylesheet", function () { t.stat("important", r), 10 <= r && t.rollupWarn("Too many !important declarations (" + r + "), try to use less than 10 to avoid specificity issues.", n) }) } }), CSSLint.addRule({ id: "known-properties", name: "Require use of known properties", desc: "Properties should be known (listed in CSS3 specification) or be a vendor-prefixed property.", browsers: "All", init: function (e, t) { var n = this; e.addListener("property", function (e) { e.invalid && t.report(e.invalid.message, e.line, e.col, n) }) } }), CSSLint.addRule({ id: "order-alphabetical", name: "Alphabetical order", desc: "Assure properties are in alphabetical order", browsers: "All", init: function (e, t) { function n() { r = [] } var r, i = this; e.addListener("startrule", n), e.addListener("startfontface", n), e.addListener("startpage", n), e.addListener("startpagemargin", n), e.addListener("startkeyframerule", n), e.addListener("property", function (e) { var t = e.property.text.toLowerCase().replace(/^-.*?-/, ""); r.push(t) }), e.addListener("endrule", function (e) { r.join(",") !== r.sort().join(",") && t.report("Rule doesn't have all its properties in alphabetical ordered.", e.line, e.col, i) }) } }), CSSLint.addRule({ id: "outline-none", name: "Disallow outline: none", desc: "Use of outline: none or outline: 0 should be limited to :focus rules.", browsers: "All", tags: ["Accessibility"], init: function (e, t) { function n(e) { i = e.selectors ? { line: e.line, col: e.col, selectors: e.selectors, propCount: 0, outline: !1 } : null } function r() { i && i.outline && (-1 === i.selectors.toString().toLowerCase().indexOf(":focus") ? t.report("Outlines should only be modified using :focus.", i.line, i.col, o) : 1 === i.propCount && t.report("Outlines shouldn't be hidden unless other visual changes are made.", i.line, i.col, o)) } var i, o = this; e.addListener("startrule", n), e.addListener("startfontface", n), e.addListener("startpage", n), e.addListener("startpagemargin", n), e.addListener("startkeyframerule", n), e.addListener("property", function (e) { var t = e.property.text.toLowerCase(), n = e.value; i && (i.propCount++, "outline" !== t || "none" !== n.toString() && "0" !== n.toString() || (i.outline = !0)) }), e.addListener("endrule", r), e.addListener("endfontface", r), e.addListener("endpage", r), e.addListener("endpagemargin", r), e.addListener("endkeyframerule", r) } }), CSSLint.addRule({ id: "overqualified-elements", name: "Disallow overqualified elements", desc: "Don't use classes or IDs with elements (a.foo or a#foo).", browsers: "All", init: function (l, u) { var c = this, h = {}; l.addListener("startrule", function (e) { for (var t, n, r, i, o, a = e.selectors, s = 0; s < a.length; s++)for (t = a[s], i = 0; i < t.parts.length; i++)if ((n = t.parts[i]).type === l.SELECTOR_PART_TYPE) for (o = 0; o < n.modifiers.length; o++)r = n.modifiers[o], n.elementName && "id" === r.type ? u.report("Element (" + n + ") is overqualified, just use " + r + " without element name.", n.line, n.col, c) : "class" === r.type && (h[r] || (h[r] = []), h[r].push({ modifier: r, part: n })) }), l.addListener("endstylesheet", function () { var e; for (e in h) h.hasOwnProperty(e) && 1 === h[e].length && h[e][0].part.elementName && u.report("Element (" + h[e][0].part + ") is overqualified, just use " + h[e][0].modifier + " without element name.", h[e][0].part.line, h[e][0].part.col, c) }) } }), CSSLint.addRule({ id: "qualified-headings", name: "Disallow qualified headings", desc: "Headings should not be qualified (namespaced).", browsers: "All", init: function (a, s) { var l = this; a.addListener("startrule", function (e) { for (var t, n, r, i = e.selectors, o = 0; o < i.length; o++)for (t = i[o], r = 0; r < t.parts.length; r++)(n = t.parts[r]).type === a.SELECTOR_PART_TYPE && n.elementName && /h[1-6]/.test(n.elementName.toString()) && 0 < r && s.report("Heading (" + n.elementName + ") should not be qualified.", n.line, n.col, l) }) } }), CSSLint.addRule({ id: "regex-selectors", name: "Disallow selectors that look like regexs", desc: "Selectors that look like regular expressions are slow and should be avoided.", browsers: "All", init: function (l, u) { var c = this; l.addListener("startrule", function (e) { for (var t, n, r, i, o, a = e.selectors, s = 0; s < a.length; s++)for (t = a[s], i = 0; i < t.parts.length; i++)if ((n = t.parts[i]).type === l.SELECTOR_PART_TYPE) for (o = 0; o < n.modifiers.length; o++)"attribute" === (r = n.modifiers[o]).type && /([\~\|\^\$\*]=)/.test(r) && u.report("Attribute selectors with " + RegExp.$1 + " are slow!", r.line, r.col, c) }) } }), CSSLint.addRule({ id: "rules-count", name: "Rules Count", desc: "Track how many rules there are.", browsers: "All", init: function (e, t) { var n = 0; e.addListener("startrule", function () { n++ }), e.addListener("endstylesheet", function () { t.stat("rule-count", n) }) } }), CSSLint.addRule({ id: "selector-max-approaching", name: "Warn when approaching the 4095 selector limit for IE", desc: "Will warn when selector count is >= 3800 selectors.", browsers: "IE", init: function (e, t) { var n = this, r = 0; e.addListener("startrule", function (e) { r += e.selectors.length }), e.addListener("endstylesheet", function () { 3800 <= r && t.report("You have " + r + " selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.", 0, 0, n) }) } }), CSSLint.addRule({ id: "selector-max", name: "Error when past the 4095 selector limit for IE", desc: "Will error when selector count is > 4095.", browsers: "IE", init: function (e, t) { var n = this, r = 0; e.addListener("startrule", function (e) { r += e.selectors.length }), e.addListener("endstylesheet", function () { 4095 < r && t.report("You have " + r + " selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.", 0, 0, n) }) } }), CSSLint.addRule({ id: "selector-newline", name: "Disallow new-line characters in selectors", desc: "New-line characters in selectors are usually a forgotten comma and not a descendant combinator.", browsers: "All", init: function (e, p) { var m = this; e.addListener("startrule", function (e) { for (var t, n, r, i, o, a, s, l, u, c = e.selectors, h = 0, d = c.length; h < d; h++)for (n = 0, i = (t = c[h]).parts.length; n < i; n++)for (r = n + 1; r < i; r++)o = t.parts[n], a = t.parts[r], s = o.type, l = o.line, u = a.line, "descendant" === s && l < u && p.report("newline character found in selector (forgot a comma?)", l, c[h].parts[0].col, m) }) } }), CSSLint.addRule({ id: "shorthand", name: "Require shorthand properties", desc: "Use shorthand properties where possible.", browsers: "All", init: function (e, o) { function t() { s = {} } function n(e) { var t, n, r, i; for (t in c) if (c.hasOwnProperty(t)) { for (n = i = 0, r = c[t].length; n < r; n++)i += s[c[t][n]] ? 1 : 0; i === c[t].length && o.report("The properties " + c[t].join(", ") + " can be replaced by " + t + ".", e.line, e.col, l) } } var r, i, a, s, l = this, u = {}, c = { margin: ["margin-top", "margin-bottom", "margin-left", "margin-right"], padding: ["padding-top", "padding-bottom", "padding-left", "padding-right"] }; for (r in c) if (c.hasOwnProperty(r)) for (i = 0, a = c[r].length; i < a; i++)u[c[r][i]] = r; e.addListener("startrule", t), e.addListener("startfontface", t), e.addListener("property", function (e) { var t = e.property.toString().toLowerCase(); u[t] && (s[t] = 1) }), e.addListener("endrule", n), e.addListener("endfontface", n) } }), CSSLint.addRule({ id: "star-property-hack", name: "Disallow properties with a star prefix", desc: "Checks for the star property hack (targets IE6/7)", browsers: "All", init: function (e, t) { var n = this; e.addListener("property", function (e) { "*" === e.property.hack && t.report("Property with star prefix found.", e.property.line, e.property.col, n) }) } }), CSSLint.addRule({ id: "text-indent", name: "Disallow negative text-indent", desc: "Checks for text indent less than -99px", browsers: "All", init: function (e, t) { function n() { i = !1, o = "inherit" } function r() { i && "ltr" !== o && t.report("Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set direction for that item to ltr.", i.line, i.col, a) } var i, o, a = this; e.addListener("startrule", n), e.addListener("startfontface", n), e.addListener("property", function (e) { var t = e.property.toString().toLowerCase(), n = e.value; "text-indent" === t && n.parts[0].value < -99 ? i = e.property : "direction" === t && "ltr" === n.toString() && (o = "ltr") }), e.addListener("endrule", r), e.addListener("endfontface", r) } }), CSSLint.addRule({ id: "underscore-property-hack", name: "Disallow properties with an underscore prefix", desc: "Checks for the underscore property hack (targets IE6)", browsers: "All", init: function (e, t) { var n = this; e.addListener("property", function (e) { "_" === e.property.hack && t.report("Property with underscore prefix found.", e.property.line, e.property.col, n) }) } }), CSSLint.addRule({ id: "unique-headings", name: "Headings should only be defined once", desc: "Headings should be defined only once.", browsers: "All", init: function (e, s) { var l = this, u = { h1: 0, h2: 0, h3: 0, h4: 0, h5: 0, h6: 0 }; e.addListener("startrule", function (e) { for (var t, n, r, i, o = e.selectors, a = 0; a < o.length; a++)if ((n = (t = o[a]).parts[t.parts.length - 1]).elementName && /(h[1-6])/i.test(n.elementName.toString())) { for (i = 0; i < n.modifiers.length; i++)if ("pseudo" === n.modifiers[i].type) { r = !0; break } r || (u[RegExp.$1]++, 1 < u[RegExp.$1] && s.report("Heading (" + n.elementName + ") has already been defined.", n.line, n.col, l)) } }), e.addListener("endstylesheet", function () { var e, t = []; for (e in u) u.hasOwnProperty(e) && 1 < u[e] && t.push(u[e] + " " + e + "s"); t.length && s.rollupWarn("You have " + t.join(", ") + " defined in this stylesheet.", l) }) } }), CSSLint.addRule({ id: "universal-selector", name: "Disallow universal selector", desc: "The universal selector (*) is known to be slow.", browsers: "All", init: function (e, o) { var a = this; e.addListener("startrule", function (e) { for (var t, n, r = e.selectors, i = 0; i < r.length; i++)"*" === (n = (t = r[i]).parts[t.parts.length - 1]).elementName && o.report(a.desc, n.line, n.col, a) }) } }), CSSLint.addRule({ id: "unqualified-attributes", name: "Disallow unqualified attribute selectors", desc: "Unqualified attribute selectors are known to be slow.", browsers: "All", init: function (a, s) { var l = this; a.addListener("startrule", function (e) { for (var t, n, r, i = e.selectors, o = 0; o < i.length; o++)if ((n = (t = i[o]).parts[t.parts.length - 1]).type === a.SELECTOR_PART_TYPE) for (r = 0; r < n.modifiers.length; r++)"attribute" !== n.modifiers[r].type || n.elementName && "*" !== n.elementName || s.report(l.desc, n.line, n.col, l) }) } }), CSSLint.addRule({ id: "vendor-prefix", name: "Require standard property with vendor prefix", desc: "When using a vendor-prefixed property, make sure to include the standard one.", browsers: "All", init: function (e, a) { function t() { s = {}, r = 1 } function n() { var e, t, n, r, i, o = []; for (e in s) u[e] && o.push({ actual: e, needed: u[e] }); for (t = 0, n = o.length; t < n; t++)r = o[t].needed, i = o[t].actual, s[r] ? s[r][0].pos < s[i][0].pos && a.report("Standard property '" + r + "' should come after vendor-prefixed property '" + i + "'.", s[i][0].name.line, s[i][0].name.col, l) : a.report("Missing standard property '" + r + "' to go along with '" + i + "'.", s[i][0].name.line, s[i][0].name.col, l) } var s, r, l = this, u = { "-webkit-border-radius": "border-radius", "-webkit-border-top-left-radius": "border-top-left-radius", "-webkit-border-top-right-radius": "border-top-right-radius", "-webkit-border-bottom-left-radius": "border-bottom-left-radius", "-webkit-border-bottom-right-radius": "border-bottom-right-radius", "-o-border-radius": "border-radius", "-o-border-top-left-radius": "border-top-left-radius", "-o-border-top-right-radius": "border-top-right-radius", "-o-border-bottom-left-radius": "border-bottom-left-radius", "-o-border-bottom-right-radius": "border-bottom-right-radius", "-moz-border-radius": "border-radius", "-moz-border-radius-topleft": "border-top-left-radius", "-moz-border-radius-topright": "border-top-right-radius", "-moz-border-radius-bottomleft": "border-bottom-left-radius", "-moz-border-radius-bottomright": "border-bottom-right-radius", "-moz-column-count": "column-count", "-webkit-column-count": "column-count", "-moz-column-gap": "column-gap", "-webkit-column-gap": "column-gap", "-moz-column-rule": "column-rule", "-webkit-column-rule": "column-rule", "-moz-column-rule-style": "column-rule-style", "-webkit-column-rule-style": "column-rule-style", "-moz-column-rule-color": "column-rule-color", "-webkit-column-rule-color": "column-rule-color", "-moz-column-rule-width": "column-rule-width", "-webkit-column-rule-width": "column-rule-width", "-moz-column-width": "column-width", "-webkit-column-width": "column-width", "-webkit-column-span": "column-span", "-webkit-columns": "columns", "-moz-box-shadow": "box-shadow", "-webkit-box-shadow": "box-shadow", "-moz-transform": "transform", "-webkit-transform": "transform", "-o-transform": "transform", "-ms-transform": "transform", "-moz-transform-origin": "transform-origin", "-webkit-transform-origin": "transform-origin", "-o-transform-origin": "transform-origin", "-ms-transform-origin": "transform-origin", "-moz-box-sizing": "box-sizing", "-webkit-box-sizing": "box-sizing" }; e.addListener("startrule", t), e.addListener("startfontface", t), e.addListener("startpage", t), e.addListener("startpagemargin", t), e.addListener("startkeyframerule", t), e.addListener("property", function (e) { var t = e.property.text.toLowerCase(); s[t] || (s[t] = []), s[t].push({ name: e.property, value: e.value, pos: r++ }) }), e.addListener("endrule", n), e.addListener("endfontface", n), e.addListener("endpage", n), e.addListener("endpagemargin", n), e.addListener("endkeyframerule", n) } }), CSSLint.addRule({ id: "zero-units", name: "Disallow units for 0 values", desc: "You don't need to specify units when a value is 0.", browsers: "All", init: function (e, i) { var o = this; e.addListener("property", function (e) { for (var t = e.value.parts, n = 0, r = t.length; n < r;)!t[n].units && "percentage" !== t[n].type || 0 !== t[n].value || "time" === t[n].type || i.report("Values of 0 shouldn't have units specified.", t[n].line, t[n].col, o), n++ }) } }), CSSLint.addFormatter({ id: "checkstyle-xml", name: "Checkstyle XML format", startFormat: function () { return '<?xml version="1.0" encoding="utf-8"?><checkstyle>' }, endFormat: function () { return "</checkstyle>" }, readError: function (e, t) { return '<file name="' + KA(e) + '"><error line="0" column="0" severty="error" message="' + KA(t) + '"></error></file>' }, formatResults: function (e, t) { var n = e.messages, r = []; return 0 < n.length && (r.push('<file name="' + t + '">'), CSSLint.Util.forEach(n, function (e) { var t; e.rollup || r.push('<error line="' + e.line + '" column="' + e.col + '" severity="' + e.type + '" message="' + KA(e.message) + '" source="' + ((t = e.rule) && "name" in t ? "net.csslint." + t.name.replace(/\s/g, "") : "") + '"/>') }), r.push("</file>")), r.join("") } }), CSSLint.addFormatter({ id: "compact", name: "Compact, 'porcelain' format", startFormat: function () { return "" }, endFormat: function () { return "" }, formatResults: function (e, t, n) { var r = e.messages, i = ""; n = n || {}; function o(e) { return e.charAt(0).toUpperCase() + e.slice(1) } return 0 === r.length ? n.quiet ? "" : t + ": Lint Free!" : (CSSLint.Util.forEach(r, function (e) { e.rollup ? i += t + ": " + o(e.type) + " - " + e.message + "\n" : i += t + ": line " + e.line + ", col " + e.col + ", " + o(e.type) + " - " + e.message + " (" + e.rule.id + ")\n" }), i) } }), CSSLint.addFormatter({ id: "csslint-xml", name: "CSSLint XML format", startFormat: function () { return '<?xml version="1.0" encoding="utf-8"?><csslint>' }, endFormat: function () { return "</csslint>" }, formatResults: function (e, t) { function n(e) { return e && e.constructor === String ? e.replace(/\"/g, "'").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;") : "" } var r = e.messages, i = []; return 0 < r.length && (i.push('<file name="' + t + '">'), CSSLint.Util.forEach(r, function (e) { e.rollup ? i.push('<issue severity="' + e.type + '" reason="' + n(e.message) + '" evidence="' + n(e.evidence) + '"/>') : i.push('<issue line="' + e.line + '" char="' + e.col + '" severity="' + e.type + '" reason="' + n(e.message) + '" evidence="' + n(e.evidence) + '"/>') }), i.push("</file>")), i.join("") } }), CSSLint.addFormatter({ id: "junit-xml", name: "JUNIT XML format", startFormat: function () { return '<?xml version="1.0" encoding="utf-8"?><testsuites>' }, endFormat: function () { return "</testsuites>" }, formatResults: function (e, t) { function r(e) { return e && e.constructor === String ? e.replace(/\"/g, "'").replace(/</g, "&lt;").replace(/>/g, "&gt;") : "" } var n = e.messages, i = [], o = { error: 0, failure: 0 }; return 0 < n.length && (n.forEach(function (e) { var t, n = "warning" === e.type ? "error" : e.type; e.rollup || (i.push('<testcase time="0" name="' + ((t = e.rule) && "name" in t ? "net.csslint." + t.name.replace(/\s/g, "") : "") + '">'), i.push("<" + n + ' message="' + r(e.message) + '"><![CDATA[' + e.line + ":" + e.col + ":" + r(e.evidence) + "]]></" + n + ">"), i.push("</testcase>"), o[n] += 1) }), i.unshift('<testsuite time="0" tests="' + n.length + '" skipped="0" errors="' + o.error + '" failures="' + o.failure + '" package="net.csslint" name="' + t + '">'), i.push("</testsuite>")), i.join("") } }), CSSLint.addFormatter({ id: "lint-xml", name: "Lint XML format", startFormat: function () { return '<?xml version="1.0" encoding="utf-8"?><lint>' }, endFormat: function () { return "</lint>" }, formatResults: function (e, t) { function n(e) { return e && e.constructor === String ? e.replace(/\"/g, "'").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;") : "" } var r = e.messages, i = []; return 0 < r.length && (i.push('<file name="' + t + '">'), CSSLint.Util.forEach(r, function (e) { e.rollup ? i.push('<issue severity="' + e.type + '" reason="' + n(e.message) + '" evidence="' + n(e.evidence) + '"/>') : i.push('<issue line="' + e.line + '" char="' + e.col + '" severity="' + e.type + '" reason="' + n(e.message) + '" evidence="' + n(e.evidence) + '"/>') }), i.push("</file>")), i.join("") } }), CSSLint.addFormatter({ id: "text", name: "Plain Text", startFormat: function () { return "" }, endFormat: function () { return "" }, formatResults: function (e, t, n) { var r = e.messages, i = ""; if (n = n || {}, 0 === r.length) return n.quiet ? "" : "\n\ncsslint: No errors in " + t + "."; i = "\n\ncsslint: There ", 1 === r.length ? i += "is 1 problem" : i += "are " + r.length + " problems", i += " in " + t + "."; var o = t.lastIndexOf("/"), a = t; return -1 === o && (o = t.lastIndexOf("\\")), -1 < o && (a = t.substring(o + 1)), CSSLint.Util.forEach(r, function (e, t) { i = i + "\n\n" + a, e.rollup ? (i += "\n" + (t + 1) + ": " + e.type, i += "\n" + e.message) : (i += "\n" + (t + 1) + ": " + e.type + " at line " + e.line + ", col " + e.col, i += "\n" + e.message, i += "\n" + e.evidence) }), i } }), module.exports.CSSLint = CSSLint }), define("ace/mode/css_worker", [], function (e, t, n) { "use strict"; var r = e("../lib/oop"), i = e("../lib/lang"), o = e("../worker/mirror").Mirror, a = e("./css/csslint").CSSLint, s = t.Worker = function (e) { o.call(this, e), this.setTimeout(400), this.ruleset = null, this.setDisabledRules("ids|order-alphabetical"), this.setInfoRules("adjoining-classes|qualified-headings|zero-units|gradients|import|outline-none|vendor-prefix") }; r.inherits(s, o), function () { this.setInfoRules = function (e) { "string" == typeof e && (e = e.split("|")), this.infoRules = i.arrayToMap(e), this.doc.getValue() && this.deferredUpdate.schedule(100) }, this.setDisabledRules = function (e) { var t; e ? ("string" == typeof e && (e = e.split("|")), t = {}, a.getRules().forEach(function (e) { t[e.id] = !0 }), e.forEach(function (e) { delete t[e] }), this.ruleset = t) : this.ruleset = null, this.doc.getValue() && this.deferredUpdate.schedule(100) }, this.onUpdate = function () { var e = this.doc.getValue(); if (!e) return this.sender.emit("annotate", []); var t = this.infoRules, n = a.verify(e, this.ruleset); this.sender.emit("annotate", n.messages.map(function (e) { return { row: e.line - 1, column: e.col - 1, text: e.message, type: t[e.rule.id] ? "info" : e.type, rule: e.rule.name } })) } }.call(s.prototype) });