File: /www/server/panel/BTPanel/static/editor/worker-css.js
'no use strict'
!(function (e) {
function t(e, t) {
var n = e,
r = ''
while (n) {
var i = t[n]
if (typeof i == 'string') return i + r
if (i) return i.location.replace(/\/*$/, '/') + (r || i.main || i.name)
if (i === !1) return ''
var s = n.lastIndexOf('/')
if (s === -1) break
;(r = n.substr(s) + r), (n = n.slice(0, s))
}
return e
}
if (typeof e.window != 'undefined' && e.document) return
if (e.require && e.define) return
e.console ||
((e.console = function () {
var e = Array.prototype.slice.call(arguments, 0)
postMessage({ type: 'log', data: e })
}),
(e.console.error = e.console.warn = e.console.log = e.console.trace = e.console)),
(e.window = e),
(e.ace = e),
(e.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 },
})
}),
(e.normalizeModule = function (t, n) {
if (n.indexOf('!') !== -1) {
var r = n.split('!')
return e.normalizeModule(t, r[0]) + '!' + e.normalizeModule(t, r[1])
}
if (n.charAt(0) == '.') {
var i = t.split('/').slice(0, -1).join('/')
n = (i ? i + '/' : '') + n
while (n.indexOf('.') !== -1 && s != n) {
var s = n
n = n
.replace(/^\.\//, '')
.replace(/\/\.\//, '/')
.replace(/[^\/]+\/\.\.\//, '')
}
}
return n
}),
(e.require = function (r, i) {
i || ((i = r), (r = null))
if (!i.charAt) throw new Error('worker.js require() accepts only (parentId, id) as arguments')
i = e.normalizeModule(r, i)
var s = e.require.modules[i]
if (s)
return s.initialized || ((s.initialized = !0), (s.exports = s.factory().exports)), s.exports
if (!e.require.tlns) return console.log('unable to load ' + i)
var o = t(i, e.require.tlns)
return (
o.slice(-3) != '.js' && (o += '.js'),
(e.require.id = i),
(e.require.modules[i] = {}),
importScripts(o),
e.require(r, i)
)
}),
(e.require.modules = {}),
(e.require.tlns = {}),
(e.define = function (t, n, r) {
arguments.length == 2
? ((r = n), typeof t != 'string' && ((n = t), (t = e.require.id)))
: arguments.length == 1 && ((r = t), (n = []), (t = e.require.id))
if (typeof r != 'function') {
e.require.modules[t] = { exports: r, initialized: !0 }
return
}
n.length || (n = ['require', 'exports', 'module'])
var i = function (n) {
return e.require(t, n)
}
e.require.modules[t] = {
exports: {},
factory: function () {
var e = this,
t = r.apply(
this,
n.slice(0, r.length).map(function (t) {
switch (t) {
case 'require':
return i
case 'exports':
return e.exports
case 'module':
return e
default:
return i(t)
}
})
)
return t && (e.exports = t), e
},
}
}),
(e.define.amd = {}),
(require.tlns = {}),
(e.initBaseUrls = function (t) {
for (var n in t) require.tlns[n] = t[n]
}),
(e.initSender = function () {
var n = e.require('ace/lib/event_emitter').EventEmitter,
r = e.require('ace/lib/oop'),
i = function () {}
return (
function () {
r.implement(this, n),
(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(i.prototype),
new i()
)
})
var n = (e.main = null),
r = (e.sender = null)
e.onmessage = function (t) {
var i = t.data
if (i.event && r) r._signal(i.event, i.data)
else if (i.command)
if (n[i.command]) n[i.command].apply(n, i.args)
else {
if (!e[i.command]) throw new Error('Unknown command:' + i.command)
e[i.command].apply(e, i.args)
}
else if (i.init) {
e.initBaseUrls(i.tlns), (r = e.sender = e.initSender())
var s = require(i.module)[i.classname]
n = e.main = new s(r)
}
}
})(this),
ace.define('ace/lib/oop', [], function (e, t, n) {
'use strict'
;(t.inherits = function (e, t) {
;(e.super_ = t),
(e.prototype = Object.create(t.prototype, {
constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 },
}))
}),
(t.mixin = function (e, t) {
for (var n in t) e[n] = t[n]
return e
}),
(t.implement = function (e, n) {
t.mixin(e, n)
})
}),
ace.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) {
var n = ''
while (t > 0) {
t & 1 && (n += e)
if ((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) {
var t = []
for (var n = 0, r = e.length; n < r; n++)
e[n] && typeof e[n] == 'object' ? (t[n] = this.copyObject(e[n])) : (t[n] = e[n])
return t
}),
(t.deepCopy = function s(e) {
if (typeof e != 'object' || !e) return e
var t
if (Array.isArray(e)) {
t = []
for (var n = 0; n < e.length; n++) t[n] = s(e[n])
return t
}
if (Object.prototype.toString.call(e) !== '[object Object]') return e
t = {}
for (var n in e) t[n] = s(e[n])
return t
}),
(t.arrayToMap = function (e) {
var t = {}
for (var 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, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
}),
(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) {
var t = null,
n = function () {
;(t = null), e()
},
r = function (e) {
return r.cancel(), (t = setTimeout(n, e || 0)), r
}
return (
(r.schedule = r),
(r.call = function () {
return this.cancel(), e(), r
}),
(r.cancel = function () {
return clearTimeout(t), (t = null), r
}),
(r.isPending = function () {
return t
}),
r
)
}),
(t.delayedCall = function (e, t) {
var n = null,
r = function () {
;(n = null), e()
},
i = function (e) {
n == null && (n = setTimeout(r, e || t))
}
return (
(i.delay = function (e) {
n && clearTimeout(n), (n = setTimeout(r, e || t))
}),
(i.schedule = i),
(i.call = function () {
this.cancel(), e()
}),
(i.cancel = function () {
n && clearTimeout(n), (n = null)
}),
(i.isPending = function () {
return n
}),
i
)
})
}),
ace.define('ace/range', [], function (e, t, n) {
'use strict'
var r = function (e, t) {
return e.row - t.row || e.column - t.column
},
i = function (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 this.compare(e, t) == 0
}),
(this.compareRange = function (e) {
var t,
n = e.end,
r = e.start
return (
(t = this.compare(n.row, n.column)),
t == 1
? ((t = this.compare(r.row, r.column)), t == 1 ? 2 : t == 0 ? 1 : 0)
: t == -1
? -2
: ((t = this.compare(r.row, r.column)), t == -1 ? -1 : t == 1 ? 42 : 0)
)
}),
(this.comparePoint = function (e) {
return this.compare(e.row, e.column)
}),
(this.containsRange = function (e) {
return this.comparePoint(e.start) == 0 && this.comparePoint(e.end) == 0
}),
(this.intersects = function (e) {
var t = this.compareRange(e)
return t == -1 || t == 0 || t == 1
}),
(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) {
typeof e == 'object'
? ((this.start.column = e.column), (this.start.row = e.row))
: ((this.start.row = e), (this.start.column = t))
}),
(this.setEnd = function (e, t) {
typeof e == 'object'
? ((this.end.column = e.column), (this.end.row = e.row))
: ((this.end.row = e), (this.end.column = t))
}),
(this.inside = function (e, t) {
return this.compare(e, t) == 0 ? (this.isEnd(e, t) || this.isStart(e, t) ? !1 : !0) : !1
}),
(this.insideStart = function (e, t) {
return this.compare(e, t) == 0 ? (this.isEnd(e, t) ? !1 : !0) : !1
}),
(this.insideEnd = function (e, t) {
return this.compare(e, t) == 0 ? (this.isStart(e, t) ? !1 : !0) : !1
}),
(this.compare = function (e, t) {
return !this.isMultiLine() && e === this.start.row
? t < this.start.column
? -1
: t > this.end.column
? 1
: 0
: 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
: 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) {
if (this.end.row > t) var n = { row: t + 1, column: 0 }
else if (this.end.row < e) var n = { row: e, column: 0 }
if (this.start.row > t) var r = { row: t + 1, column: 0 }
else if (this.start.row < e) var r = { row: e, column: 0 }
return i.fromPoints(r || this.start, n || this.end)
}),
(this.extend = function (e, t) {
var n = this.compare(e, t)
if (n == 0) return this
if (n == -1) var r = { row: e, column: t }
else var s = { row: e, column: t }
return i.fromPoints(r || this.start, s || 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 i.fromPoints(this.start, this.end)
}),
(this.collapseRows = function () {
return this.end.column == 0
? new i(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0)
: new i(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 i(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(i.prototype),
(i.fromPoints = function (e, t) {
return new i(e.row, e.column, t.row, t.column)
}),
(i.comparePoints = r),
(i.comparePoints = function (e, t) {
return e.row - t.row || e.column - t.column
}),
(t.Range = i)
}),
ace.define('ace/apply_delta', [], function (e, t, n) {
'use strict'
function r(e, t) {
throw (console.log('Invalid Delta:', e), 'Invalid Delta: ' + t)
}
function i(e, t) {
return t.row >= 0 && t.row < e.length && t.column >= 0 && t.column <= e[t.row].length
}
function s(e, t) {
t.action != 'insert' &&
t.action != 'remove' &&
r(t, "delta.action must be 'insert' or 'remove'"),
t.lines instanceof Array || r(t, 'delta.lines must be an Array'),
(!t.start || !t.end) && r(t, 'delta.start/end must be an present')
var n = t.start
i(e, t.start) || r(t, 'delta.start must be contained in document')
var s = t.end
t.action == 'remove' &&
!i(e, s) &&
r(t, "delta.end must contained in document for 'remove' actions")
var o = s.row - n.row,
u = s.column - (o == 0 ? n.column : 0)
;(o != t.lines.length - 1 || t.lines[o].length != u) &&
r(t, 'delta.range must match delta lines')
}
t.applyDelta = function (e, t, n) {
var r = t.start.row,
i = t.start.column,
s = e[r] || ''
switch (t.action) {
case 'insert':
var o = t.lines
if (o.length === 1) e[r] = s.substring(0, i) + t.lines[0] + s.substring(i)
else {
var u = [r, 1].concat(t.lines)
e.splice.apply(e, u),
(e[r] = s.substring(0, i) + e[r]),
(e[r + t.lines.length - 1] += s.substring(i))
}
break
case 'remove':
var a = t.end.column,
f = t.end.row
r === f
? (e[r] = s.substring(0, i) + s.substring(a))
: e.splice(r, f - r + 1, s.substring(0, i) + e[f].substring(a))
}
}
}),
ace.define('ace/lib/event_emitter', [], function (e, t, n) {
'use strict'
var r = {},
i = function () {
this.propagationStopped = !0
},
s = function () {
this.defaultPrevented = !0
}
;(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) return
if (typeof t != 'object' || !t) t = {}
t.type || (t.type = e),
t.stopPropagation || (t.stopPropagation = i),
t.preventDefault || (t.preventDefault = s),
(n = n.slice())
for (var o = 0; o < n.length; o++) {
n[o](t, this)
if (t.propagationStopped) break
}
if (r && !t.defaultPrevented) return r(t, this)
}),
(r._signal = function (e, t) {
var n = (this._eventRegistry || {})[e]
if (!n) return
n = n.slice()
for (var r = 0; r < n.length; r++) n[r](t, this)
}),
(r.once = function (e, t) {
var n = this
this.on(e, function r() {
n.off(e, r), t.apply(null, arguments)
})
if (!t)
return new Promise(function (e) {
t = e
})
}),
(r.setDefaultHandler = function (e, t) {
var n = this._defaultHandlers
n || (n = this._defaultHandlers = { _disabled_: {} })
if (n[e]) {
var r = n[e],
i = n._disabled_[e]
i || (n._disabled_[e] = i = []), i.push(r)
var s = i.indexOf(t)
s != -1 && i.splice(s, 1)
}
n[e] = t
}),
(r.removeDefaultHandler = function (e, t) {
var n = this._defaultHandlers
if (!n) return
var r = n._disabled_[e]
if (n[e] == t) r && this.setDefaultHandler(e, r.pop())
else if (r) {
var i = r.indexOf(t)
i != -1 && r.splice(i, 1)
}
}),
(r.on = r.addEventListener =
function (e, t, n) {
this._eventRegistry = this._eventRegistry || {}
var r = this._eventRegistry[e]
return (
r || (r = this._eventRegistry[e] = []),
r.indexOf(t) == -1 && r[n ? 'unshift' : 'push'](t),
t
)
}),
(r.off =
r.removeListener =
r.removeEventListener =
function (e, t) {
this._eventRegistry = this._eventRegistry || {}
var n = this._eventRegistry[e]
if (!n) return
var r = n.indexOf(t)
r !== -1 && n.splice(r, 1)
}),
(r.removeAllListeners = function (e) {
e || (this._eventRegistry = this._defaultHandlers = undefined),
this._eventRegistry && (this._eventRegistry[e] = undefined),
this._defaultHandlers && (this._defaultHandlers[e] = undefined)
}),
(t.EventEmitter = r)
}),
ace.define('ace/anchor', [], function (e, t, n) {
'use strict'
var r = e('./lib/oop'),
i = e('./lib/event_emitter').EventEmitter,
s = (t.Anchor = function (e, t, n) {
;(this.$onChange = this.onChange.bind(this)),
this.attach(e),
typeof n == 'undefined' ? this.setPosition(t.row, t.column) : this.setPosition(t, n)
})
;(function () {
function e(e, t, n) {
var r = n ? e.column <= t.column : e.column < t.column
return e.row < t.row || (e.row == t.row && r)
}
function t(t, n, r) {
var i = t.action == 'insert',
s = (i ? 1 : -1) * (t.end.row - t.start.row),
o = (i ? 1 : -1) * (t.end.column - t.start.column),
u = t.start,
a = i ? u : t.end
return e(n, u, r)
? { row: n.row, column: n.column }
: e(a, n, !r)
? { row: n.row + s, column: n.column + (n.row == a.row ? o : 0) }
: { row: u.row, column: u.column }
}
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) {
if (e.start.row == e.end.row && e.start.row != this.row) return
if (e.start.row > this.row) return
var n = t(e, { row: this.row, column: this.column }, this.$insertRight)
this.setPosition(n.row, n.column, !0)
}),
(this.setPosition = function (e, t, n) {
var r
n ? (r = { row: e, column: t }) : (r = this.$clipPositionToDocument(e, t))
if (this.row == r.row && this.column == r.column) return
var i = { row: this.row, column: this.column }
;(this.row = r.row),
(this.column = r.column),
this._signal('change', { old: i, value: r })
}),
(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(s.prototype)
}),
ace.define('ace/document', [], function (e, t, n) {
'use strict'
var r = e('./lib/oop'),
i = e('./apply_delta').applyDelta,
s = e('./lib/event_emitter').EventEmitter,
o = e('./range').Range,
u = e('./anchor').Anchor,
a = function (e) {
;(this.$lines = ['']),
e.length === 0
? (this.$lines = [''])
: Array.isArray(e)
? this.insertMergedLines({ row: 0, column: 0 }, e)
: this.insert({ row: 0, column: 0 }, e)
}
;(function () {
r.implement(this, s),
(this.setValue = function (e) {
var t = this.getLength() - 1
this.remove(new o(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 u(this, e, t)
}),
'aaa'.split(/a/).length === 0
? (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) {
if (this.$newLineMode === e) return
;(this.$newLineMode = e), this._signal('changeNewLineMode')
}),
(this.getNewLineMode = function () {
return this.$newLineMode
}),
(this.isNewLine = function (e) {
return e == '\r\n' || e == '\r' || e == '\n'
}),
(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
if (e.start.row === e.end.row)
t = [this.getLine(e.start.row).substring(e.start.column, e.end.column)]
else {
;(t = this.getLines(e.start.row, e.end.row)),
(t[0] = (t[0] || '').substring(e.start.column))
var n = t.length - 1
e.end.row - e.start.row == n && (t[n] = t[n].substring(0, e.end.column))
}
return 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()
e === undefined ? (e = n) : e < 0 ? (e = 0) : e >= n && ((e = n - 1), (t = undefined))
var r = this.getLine(e)
return (
t == undefined && (t = r.length),
(t = Math.min(Math.max(t, 0), r.length)),
{ row: e, column: t }
)
}),
(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) {
e = Math.min(Math.max(e, 0), this.getLength())
var n = 0
e < this.getLength()
? ((t = t.concat([''])), (n = 0))
: ((t = [''].concat(t)), e--, (n = 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: (t.length == 1 ? 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)),
(t = Math.min(Math.max(0, t), this.getLength() - 1))
var n = t == this.getLength() - 1 && e > 0,
r = t < this.getLength() - 1,
i = n ? e - 1 : e,
s = n ? this.getLine(i).length : 0,
u = r ? t + 1 : t,
a = r ? 0 : this.getLine(u).length,
f = new o(i, s, u, a),
l = this.$lines.slice(e, t + 1)
return (
this.applyDelta({
start: f.start,
end: f.end,
action: 'remove',
lines: this.getLinesForRange(f),
}),
l
)
}),
(this.removeNewLine = function (e) {
e < this.getLength() - 1 &&
e >= 0 &&
this.applyDelta({
start: this.pos(e, this.getLine(e).length),
end: this.pos(e + 1, 0),
action: 'remove',
lines: ['', ''],
})
}),
(this.replace = function (e, t) {
e instanceof o || (e = o.fromPoints(e.start, e.end))
if (t.length === 0 && e.isEmpty()) return e.start
if (t == this.getTextRange(e)) return e.end
this.remove(e)
var n
return t ? (n = this.insert(e.start, t)) : (n = e.start), n
}),
(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; t >= 0; t--) this.revertDelta(e[t])
}),
(this.applyDelta = function (e, t) {
var n = e.action == 'insert'
if (n ? e.lines.length <= 1 && !e.lines[0] : !o.comparePoints(e.start, e.end)) return
n && e.lines.length > 2e4
? this.$splitAndapplyLargeDelta(e, 2e4)
: (i(this.$lines, e, t), this._signal('change', e))
}),
(this.$safeApplyDelta = function (e) {
var t = this.$lines.length
;((e.action == 'remove' && e.start.row < t && e.end.row < t) ||
(e.action == 'insert' && e.start.row <= t)) &&
this.applyDelta(e)
}),
(this.$splitAndapplyLargeDelta = function (e, t) {
var n = e.lines,
r = n.length - t + 1,
i = e.start.row,
s = e.start.column
for (var o = 0, u = 0; o < r; o = u) {
u += t - 1
var a = n.slice(o, u)
a.push(''),
this.applyDelta(
{
start: this.pos(i + o, s),
end: this.pos(i + u, (s = 0)),
action: e.action,
lines: a,
},
!0
)
}
;(e.lines = n.slice(o)),
(e.start.row = i + o),
(e.start.column = s),
this.applyDelta(e, !0)
}),
(this.revertDelta = function (e) {
this.$safeApplyDelta({
start: this.clonePos(e.start),
end: this.clonePos(e.end),
action: e.action == 'insert' ? 'remove' : 'insert',
lines: e.lines.slice(),
})
}),
(this.indexToPosition = function (e, t) {
var n = this.$lines || this.getAllLines(),
r = this.getNewLineCharacter().length
for (var i = t || 0, s = n.length; i < s; i++) {
e -= n[i].length + r
if (e < 0) return { row: i, column: e + n[i].length + r }
}
return { row: s - 1, column: e + n[s - 1].length + r }
}),
(this.positionToIndex = function (e, t) {
var n = this.$lines || this.getAllLines(),
r = this.getNewLineCharacter().length,
i = 0,
s = Math.min(e.row, n.length)
for (var o = t || 0; o < s; ++o) i += n[o].length + r
return i + e.column
})
}).call(a.prototype),
(t.Document = a)
}),
ace.define('ace/worker/mirror', [], function (e, t, n) {
'use strict'
var r = e('../range').Range,
i = e('../document').Document,
s = e('../lib/lang'),
o = (t.Mirror = function (e) {
this.sender = e
var t = (this.doc = new i('')),
n = (this.deferredUpdate = s.delayedCall(this.onUpdate.bind(this))),
r = this
e.on('change', function (e) {
var i = e.data
if (i[0].start) t.applyDeltas(i)
else
for (var s = 0; s < i.length; s += 2) {
if (Array.isArray(i[s + 1]))
var o = { action: 'insert', start: i[s], lines: i[s + 1] }
else var o = { action: 'remove', start: i[s], end: i[s + 1] }
t.applyDelta(o, !0)
}
if (r.$timeout) return n.schedule(r.$timeout)
r.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(o.prototype)
}),
ace.define('ace/mode/css/csslint', [], function (require, exports, module) {
function objectToString(e) {
return Object.prototype.toString.call(e)
}
function clone(e, t, n, r) {
function u(e, n) {
if (e === null) return null
if (n == 0) return e
var a
if (typeof e != 'object') return e
if (util.isArray(e)) a = []
else if (util.isRegExp(e))
(a = new RegExp(e.source, util.getRegExpFlags(e))),
e.lastIndex && (a.lastIndex = e.lastIndex)
else if (util.isDate(e)) a = new Date(e.getTime())
else {
if (o && Buffer.isBuffer(e)) return (a = new Buffer(e.length)), e.copy(a), a
typeof r == 'undefined'
? (a = Object.create(Object.getPrototypeOf(e)))
: (a = Object.create(r))
}
if (t) {
var f = i.indexOf(e)
if (f != -1) return s[f]
i.push(e), s.push(a)
}
for (var l in e) a[l] = u(e[l], n - 1)
return a
}
var i = [],
s = [],
o = typeof Buffer != 'undefined'
return typeof t == 'undefined' && (t = !0), typeof n == 'undefined' && (n = Infinity), u(e, n)
}
function Reporter(e, t) {
;(this.messages = []), (this.stats = []), (this.lines = e), (this.ruleset = t)
}
var parserlib = {}
;(function () {
function e() {
this._listeners = {}
}
function t(e) {
;(this._input = e.replace(/\n\r?/g, '\n')),
(this._line = 1),
(this._col = 1),
(this._cursor = 0)
}
function n(e, t, n) {
;(this.col = n), (this.line = t), (this.message = e)
}
function r(e, t, n, r) {
;(this.col = n), (this.line = t), (this.text = e), (this.type = r)
}
function i(e, n) {
;(this._reader = e ? new t(e.toString()) : null),
(this._token = null),
(this._tokenData = n),
(this._lt = []),
(this._ltIndex = 0),
(this._ltIndexCache = [])
}
;(e.prototype = {
constructor: e,
addListener: function (e, t) {
this._listeners[e] || (this._listeners[e] = []), this._listeners[e].push(t)
},
fire: function (e) {
typeof e == 'string' && (e = { type: e }),
typeof e.target != 'undefined' && (e.target = this)
if (typeof e.type == 'undefined') throw new Error("Event object missing 'type' property.")
if (this._listeners[e.type]) {
var t = this._listeners[e.type].concat()
for (var n = 0, r = t.length; n < r; n++) t[n].call(this, e)
}
},
removeListener: function (e, t) {
if (this._listeners[e]) {
var n = this._listeners[e]
for (var r = 0, i = n.length; r < i; r++)
if (n[r] === t) {
n.splice(r, 1)
break
}
}
},
}),
(t.prototype = {
constructor: t,
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 = typeof e == 'undefined' ? 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 &&
(this._input.charAt(this._cursor) == '\n'
? (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) {
var t = '',
n
while (t.length < e.length || t.lastIndexOf(e) != t.length - e.length) {
n = this.read()
if (!n)
throw new Error(
'Expected "' + e + '" at line ' + this._line + ', col ' + this._col + '.'
)
t += n
}
return t
},
readWhile: function (e) {
var t = '',
n = this.read()
while (n !== null && e(n)) (t += n), (n = this.read())
return t
},
readMatch: function (e) {
var t = this._input.substring(this._cursor),
n = null
return (
typeof e == 'string'
? t.indexOf(e) === 0 && (n = this.readCount(e.length))
: e instanceof RegExp && e.test(t) && (n = this.readCount(RegExp.lastMatch.length)),
n
)
},
readCount: function (e) {
var t = ''
while (e--) t += this.read()
return t
},
}),
(n.prototype = new Error()),
(r.fromToken = function (e) {
return new r(e.value, e.startLine, e.startCol)
}),
(r.prototype = {
constructor: r,
valueOf: function () {
return this.text
},
toString: function () {
return this.text
},
}),
(i.createTokenData = function (e) {
var t = [],
n = {},
r = e.concat([]),
i = 0,
s = r.length + 1
;(r.UNKNOWN = -1), r.unshift({ name: 'EOF' })
for (; i < s; 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
)
}),
(i.prototype = {
constructor: i,
match: function (e, t) {
e instanceof Array || (e = [e])
var n = this.get(t),
r = 0,
i = e.length
while (r < i) if (n == e[r++]) return !0
return this.unget(), !1
},
mustMatch: function (e, t) {
var r
e instanceof Array || (e = [e])
if (!this.match.apply(this, arguments))
throw (
((r = this.LT(1)),
new n(
'Expected ' +
this._tokenData[e[0]].name +
' at line ' +
r.startLine +
', col ' +
r.startCol +
'.',
r.startLine,
r.startCol
))
)
},
advance: function (e, t) {
while (this.LA(0) !== 0 && !this.match(e, t)) this.get()
return this.LA(0)
},
get: function (e) {
var t = this._tokenData,
n = this._reader,
r,
i = 0,
s = t.length,
o = !1,
u,
a
if (this._lt.length && this._ltIndex >= 0 && this._ltIndex < this._lt.length) {
i++, (this._token = this._lt[this._ltIndex++]), (a = t[this._token.type])
while (a.channel !== undefined && e !== a.channel && this._ltIndex < this._lt.length)
(this._token = this._lt[this._ltIndex++]), (a = t[this._token.type]), i++
if ((a.channel === undefined || e === a.channel) && this._ltIndex <= this._lt.length)
return this._ltIndexCache.push(i), this._token.type
}
return (
(u = this._getToken()),
u.type > -1 &&
!t[u.type].hide &&
((u.channel = t[u.type].channel),
(this._token = u),
this._lt.push(u),
this._ltIndexCache.push(this._lt.length - this._ltIndex + i),
this._lt.length > 5 && this._lt.shift(),
this._ltIndexCache.length > 5 && this._ltIndexCache.shift(),
(this._ltIndex = this._lt.length)),
(a = t[u.type]),
a && (a.hide || (a.channel !== undefined && e !== a.channel)) ? this.get(e) : u.type
)
},
LA: function (e) {
var t = e,
n
if (e > 0) {
if (e > 5) throw new Error('Too much lookahead.')
while (t) (n = this.get()), t--
while (t < e) this.unget(), t++
} else if (e < 0) {
if (!this._lt[this._ltIndex + e]) throw new Error('Too much lookbehind.')
n = this._lt[this._ltIndex + e].type
} else n = this._token.type
return n
},
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: t,
SyntaxError: n,
SyntaxUnit: r,
EventTarget: e,
TokenStreamBase: i,
})
})(),
(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 + (t !== null ? ':' + 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 : '') +
(t && n.length > 0 ? ' 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) {
SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_VALUE_PART_TYPE),
(this.type = 'unknown')
var temp
if (/^([+\-]?[\d\.]+)([a-z]+)$/i.test(text)) {
;(this.type = 'dimension'), (this.value = +RegExp.$1), (this.units = RegExp.$2)
switch (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),
temp.length == 3
? ((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 = (+RegExp.$1 * 255) / 100),
(this.green = (+RegExp.$2 * 255) / 100),
(this.blue = (+RegExp.$3 * 255) / 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 = (+RegExp.$1 * 255) / 100),
(this.green = (+RegExp.$2 * 255) / 100),
(this.blue = (+RegExp.$3 * 255) / 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 e !== null && h.test(e)
}
function isDigit(e) {
return e !== null && /\d/.test(e)
}
function isWhitespace(e) {
return e !== null && /\s/.test(e)
}
function isNewLine(e) {
return e !== null && nl.test(e)
}
function isNameStart(e) {
return e !== null && /[a-z_\u0080-\uFFFF\\]/i.test(e)
}
function isNameChar(e) {
return e !== null && (isNameStart(e) || /[0-9\-\\]/.test(e))
}
function isIdentStart(e) {
return e !== null && (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 = new EventTarget(),
t,
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 = this._tokenStream,
t = null,
n,
r,
i
this.fire('startstylesheet'), this._charset(), this._skipCruft()
while (e.peek() == Tokens.IMPORT_SYM) this._import(), this._skipCruft()
while (e.peek() == Tokens.NAMESPACE_SYM) this._namespace(), this._skipCruft()
i = e.peek()
while (i > Tokens.EOF) {
try {
switch (i) {
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:
e.get()
if (!!this.options.strict)
throw new SyntaxError(
'Unknown @ rule.',
e.LT(0).startLine,
e.LT(0).startCol
)
this.fire({
type: 'error',
error: null,
message: 'Unknown @ rule: ' + e.LT(0).value + '.',
line: e.LT(0).startLine,
col: e.LT(0).startCol,
}),
(n = 0)
while (e.advance([Tokens.LBRACE, Tokens.RBRACE]) == Tokens.LBRACE) n++
while (n) e.advance([Tokens.RBRACE]), n--
break
case Tokens.S:
this._readWhitespace()
break
default:
if (!this._ruleset())
switch (i) {
case Tokens.CHARSET_SYM:
throw (
((r = e.LT(1)),
this._charset(!1),
new SyntaxError(
'@charset not allowed here.',
r.startLine,
r.startCol
))
)
case Tokens.IMPORT_SYM:
throw (
((r = e.LT(1)),
this._import(!1),
new SyntaxError(
'@import not allowed here.',
r.startLine,
r.startCol
))
)
case Tokens.NAMESPACE_SYM:
throw (
((r = e.LT(1)),
this._namespace(!1),
new SyntaxError(
'@namespace not allowed here.',
r.startLine,
r.startCol
))
)
default:
e.get(), this._unexpectedToken(e.token())
}
}
} catch (s) {
if (!(s instanceof SyntaxError && !this.options.strict)) throw s
this.fire({
type: 'error',
error: s,
message: s.message,
line: s.line,
col: s.col,
})
}
i = e.peek()
}
i != Tokens.EOF && this._unexpectedToken(e.token()), this.fire('endstylesheet')
},
_charset: function (e) {
var t = this._tokenStream,
n,
r,
i,
s
t.match(Tokens.CHARSET_SYM) &&
((i = t.token().startLine),
(s = t.token().startCol),
this._readWhitespace(),
t.mustMatch(Tokens.STRING),
(r = t.token()),
(n = r.value),
this._readWhitespace(),
t.mustMatch(Tokens.SEMICOLON),
e !== !1 && this.fire({ type: 'charset', charset: n, line: i, col: s }))
},
_import: function (e) {
var t = this._tokenStream,
n,
r,
i,
s = []
t.mustMatch(Tokens.IMPORT_SYM),
(i = t.token()),
this._readWhitespace(),
t.mustMatch([Tokens.STRING, Tokens.URI]),
(r = t.token().value.replace(/^(?:url\()?["']?([^"']+?)["']?\)?$/, '$1')),
this._readWhitespace(),
(s = this._media_query_list()),
t.mustMatch(Tokens.SEMICOLON),
this._readWhitespace(),
e !== !1 &&
this.fire({
type: 'import',
uri: r,
media: s,
line: i.startLine,
col: i.startCol,
})
},
_namespace: function (e) {
var t = this._tokenStream,
n,
r,
i,
s
t.mustMatch(Tokens.NAMESPACE_SYM),
(n = t.token().startLine),
(r = t.token().startCol),
this._readWhitespace(),
t.match(Tokens.IDENT) && ((i = t.token().value), this._readWhitespace()),
t.mustMatch([Tokens.STRING, Tokens.URI]),
(s = t.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/, '$1')),
this._readWhitespace(),
t.mustMatch(Tokens.SEMICOLON),
this._readWhitespace(),
e !== !1 && this.fire({ type: 'namespace', prefix: i, uri: s, line: n, col: r })
},
_media: function () {
var e = this._tokenStream,
t,
n,
r
e.mustMatch(Tokens.MEDIA_SYM),
(t = e.token().startLine),
(n = e.token().startCol),
this._readWhitespace(),
(r = this._media_query_list()),
e.mustMatch(Tokens.LBRACE),
this._readWhitespace(),
this.fire({ type: 'startmedia', media: r, line: t, col: n })
for (;;)
if (e.peek() == Tokens.PAGE_SYM) this._page()
else if (e.peek() == Tokens.FONT_FACE_SYM) this._font_face()
else if (e.peek() == Tokens.VIEWPORT_SYM) this._viewport()
else if (!this._ruleset()) break
e.mustMatch(Tokens.RBRACE),
this._readWhitespace(),
this.fire({ type: 'endmedia', media: r, line: t, col: n })
},
_media_query_list: function () {
var e = this._tokenStream,
t = []
this._readWhitespace(),
(e.peek() == Tokens.IDENT || e.peek() == Tokens.LPAREN) &&
t.push(this._media_query())
while (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 = []
e.match(Tokens.IDENT) &&
((n = e.token().value.toLowerCase()),
n != 'only' && n != 'not' ? (e.unget(), (n = null)) : (r = e.token())),
this._readWhitespace(),
e.peek() == Tokens.IDENT
? ((t = this._media_type()), r === null && (r = e.token()))
: e.peek() == Tokens.LPAREN &&
(r === null && (r = e.LT(1)), i.push(this._media_expression()))
if (t === null && i.length === 0) return null
this._readWhitespace()
while (e.match(Tokens.IDENT))
e.token().value.toLowerCase() != 'and' && 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 = this._tokenStream,
t = null,
n,
r = null
return (
e.mustMatch(Tokens.LPAREN),
this._readWhitespace(),
(t = this._media_feature()),
this._readWhitespace(),
e.match(Tokens.COLON) &&
(this._readWhitespace(), (n = e.LT(1)), (r = this._expression())),
e.mustMatch(Tokens.RPAREN),
this._readWhitespace(),
new MediaFeature(t, r ? new SyntaxUnit(r, n.startLine, n.startCol) : null)
)
},
_media_feature: function () {
var e = this._tokenStream
return e.mustMatch(Tokens.IDENT), SyntaxUnit.fromToken(e.token())
},
_page: function () {
var e = this._tokenStream,
t,
n,
r = null,
i = null
e.mustMatch(Tokens.PAGE_SYM),
(t = e.token().startLine),
(n = e.token().startCol),
this._readWhitespace(),
e.match(Tokens.IDENT) &&
((r = e.token().value),
r.toLowerCase() === 'auto' && this._unexpectedToken(e.token())),
e.peek() == Tokens.COLON && (i = this._pseudo_page()),
this._readWhitespace(),
this.fire({ type: 'startpage', id: r, pseudo: i, line: t, col: n }),
this._readDeclarations(!0, !0),
this.fire({ type: 'endpage', id: r, pseudo: i, line: t, col: n })
},
_margin: function () {
var e = this._tokenStream,
t,
n,
r = this._margin_sym()
return r
? ((t = e.token().startLine),
(n = e.token().startCol),
this.fire({ type: 'startpagemargin', margin: r, line: t, col: n }),
this._readDeclarations(!0),
this.fire({ type: 'endpagemargin', margin: r, line: t, col: n }),
!0)
: !1
},
_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 = this._tokenStream,
t,
n
e.mustMatch(Tokens.FONT_FACE_SYM),
(t = e.token().startLine),
(n = e.token().startCol),
this._readWhitespace(),
this.fire({ type: 'startfontface', line: t, col: n }),
this._readDeclarations(!0),
this.fire({ type: 'endfontface', line: t, col: n })
},
_viewport: function () {
var e = this._tokenStream,
t,
n
e.mustMatch(Tokens.VIEWPORT_SYM),
(t = e.token().startLine),
(n = e.token().startCol),
this._readWhitespace(),
this.fire({ type: 'startviewport', line: t, col: n }),
this._readDeclarations(!0),
this.fire({ type: 'endviewport', line: t, col: n })
},
_operator: function (e) {
var t = this._tokenStream,
n = null
if (
t.match([Tokens.SLASH, Tokens.COMMA]) ||
(e && t.match([Tokens.PLUS, Tokens.STAR, Tokens.MINUS]))
)
(n = t.token()), this._readWhitespace()
return n ? PropertyValuePart.fromToken(n) : null
},
_combinator: function () {
var e = this._tokenStream,
t = null,
n
return (
e.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE]) &&
((n = e.token()),
(t = new Combinator(n.value, n.startLine, n.startCol)),
this._readWhitespace()),
t
)
},
_unary_operator: function () {
var e = this._tokenStream
return e.match([Tokens.MINUS, Tokens.PLUS]) ? e.token().value : null
},
_property: function () {
var e = this._tokenStream,
t = null,
n = null,
r,
i,
s,
o
return (
e.peek() == Tokens.STAR &&
this.options.starHack &&
(e.get(),
(i = e.token()),
(n = i.value),
(s = i.startLine),
(o = i.startCol)),
e.match(Tokens.IDENT) &&
((i = e.token()),
(r = i.value),
r.charAt(0) == '_' &&
this.options.underscoreHack &&
((n = '_'), (r = r.substring(1))),
(t = new PropertyName(r, n, s || i.startLine, o || i.startCol)),
this._readWhitespace()),
t
)
},
_ruleset: function () {
var e = this._tokenStream,
t,
n
try {
n = this._selectors_group()
} catch (r) {
if (r instanceof SyntaxError && !this.options.strict) {
this.fire({
type: 'error',
error: r,
message: r.message,
line: r.line,
col: r.col,
}),
(t = e.advance([Tokens.RBRACE]))
if (t != Tokens.RBRACE) throw r
return !0
}
throw r
}
return (
n &&
(this.fire({
type: 'startrule',
selectors: n,
line: n[0].line,
col: n[0].col,
}),
this._readDeclarations(!0),
this.fire({ type: 'endrule', selectors: n, line: n[0].line, col: n[0].col })),
n
)
},
_selectors_group: function () {
var e = this._tokenStream,
t = [],
n
n = this._selector()
if (n !== null) {
t.push(n)
while (e.match(Tokens.COMMA))
this._readWhitespace(),
(n = this._selector()),
n !== null ? 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
n = this._simple_selector_sequence()
if (n === null) return null
t.push(n)
do {
r = this._combinator()
if (r !== null)
t.push(r),
(n = this._simple_selector_sequence()),
n === null ? 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()),
(n = this._simple_selector_sequence()),
n === null
? r !== null && this._unexpectedToken(e.LT(1))
: (r !== null ? t.push(r) : t.push(i), t.push(n))
}
} while (!0)
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,
],
s = 0,
o = i.length,
u = null,
a = !1,
f,
l
;(f = e.LT(1).startLine),
(l = e.LT(1).startCol),
(t = this._type_selector()),
t || (t = this._universal()),
t !== null && (r += t)
for (;;) {
if (e.peek() === Tokens.S) break
while (s < o && u === null) u = i[s++].call(this)
if (u === null) {
if (r === '') return null
break
}
;(s = 0), n.push(u), (r += u.toString()), (u = null)
}
return r !== '' ? new SelectorPart(t, n, r, f, l) : 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(), t.length > 1 && e.unget()), null)
},
_class: function () {
var e = this._tokenStream,
t
return e.match(Tokens.DOT)
? (e.mustMatch(Tokens.IDENT),
(t = e.token()),
new SelectorSubPart('.' + t.value, 'class', t.startLine, t.startCol - 1))
: null
},
_element_name: function () {
var e = this._tokenStream,
t
return e.match(Tokens.IDENT)
? ((t = e.token()),
new SelectorSubPart(t.value, 'elementName', t.startLine, t.startCol))
: null
},
_namespace_prefix: function () {
var e = this._tokenStream,
t = ''
if (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 += '|')
return t.length ? t : null
},
_universal: function () {
var e = this._tokenStream,
t = '',
n
return (
(n = this._namespace_prefix()),
n && (t += n),
e.match(Tokens.STAR) && (t += '*'),
t.length ? t : null
)
},
_attrib: function () {
var e = this._tokenStream,
t = null,
n,
r
return e.match(Tokens.LBRACKET)
? ((r = e.token()),
(t = r.value),
(t += this._readWhitespace()),
(n = this._namespace_prefix()),
n && (t += n),
e.mustMatch(Tokens.IDENT),
(t += e.token().value),
(t += this._readWhitespace()),
e.match([
Tokens.PREFIXMATCH,
Tokens.SUFFIXMATCH,
Tokens.SUBSTRINGMATCH,
Tokens.EQUALS,
Tokens.INCLUDES,
Tokens.DASHMATCH,
]) &&
((t += e.token().value),
(t += this._readWhitespace()),
e.mustMatch([Tokens.IDENT, Tokens.STRING]),
(t += e.token().value),
(t += this._readWhitespace())),
e.mustMatch(Tokens.RBRACKET),
new SelectorSubPart(t + ']', 'attribute', r.startLine, r.startCol))
: null
},
_pseudo: function () {
var e = this._tokenStream,
t = null,
n = ':',
r,
i
return (
e.match(Tokens.COLON) &&
(e.match(Tokens.COLON) && (n += ':'),
e.match(Tokens.IDENT)
? ((t = e.token().value),
(r = e.token().startLine),
(i = e.token().startCol - n.length))
: e.peek() == Tokens.FUNCTION &&
((r = e.LT(1).startLine),
(i = e.LT(1).startCol - n.length),
(t = this._functional_pseudo())),
t && (t = new SelectorSubPart(n + t, 'pseudo', r, i))),
t
)
},
_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 () {
var e = this._tokenStream,
t = ''
while (
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 = this._tokenStream,
t,
n,
r = '',
i,
s = null
return (
e.match(Tokens.NOT) &&
((r = e.token().value),
(t = e.token().startLine),
(n = e.token().startCol),
(r += this._readWhitespace()),
(i = this._negation_arg()),
(r += i),
(r += this._readWhitespace()),
e.match(Tokens.RPAREN),
(r += e.token().value),
(s = new SelectorSubPart(r, 'not', t, n)),
s.args.push(i)),
s
)
},
_negation_arg: function () {
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,
s,
o,
u,
a
;(o = e.LT(1).startLine), (u = e.LT(1).startCol)
while (r < i && n === null) (n = t[r].call(this)), r++
return (
n === null && this._unexpectedToken(e.LT(1)),
n.type == 'elementName'
? (a = new SelectorPart(n, [], n.toString(), o, u))
: (a = new SelectorPart(null, [n], n.toString(), o, u)),
a
)
},
_declaration: function () {
var e = this._tokenStream,
t = null,
n = null,
r = null,
i = null,
s = null,
o = ''
t = this._property()
if (t !== null) {
e.mustMatch(Tokens.COLON),
this._readWhitespace(),
(n = this._expr()),
(!n || n.length === 0) && this._unexpectedToken(e.LT(1)),
(r = this._prio()),
(o = t.toString())
if (
(this.options.starHack && t.hack == '*') ||
(this.options.underscoreHack && t.hack == '_')
)
o = t.text
try {
this._validateProperty(o, n)
} catch (u) {
s = u
}
return (
this.fire({
type: 'property',
property: t,
value: n,
important: r,
line: t.line,
col: t.col,
invalid: s,
}),
!0
)
}
return !1
},
_prio: function () {
var e = this._tokenStream,
t = e.match(Tokens.IMPORTANT_SYM)
return this._readWhitespace(), t
},
_expr: function (e) {
var t = this._tokenStream,
n = [],
r = null,
i = null
r = this._term(e)
if (r !== null) {
n.push(r)
do {
;(i = this._operator(e)), i && n.push(i), (r = this._term(e))
if (r === null) break
n.push(r)
} while (!0)
}
return n.length > 0 ? new PropertyValue(n, n[0].line, n[0].col) : null
},
_term: function (e) {
var t = this._tokenStream,
n = null,
r = null,
i = null,
s,
o,
u
return (
(n = this._unary_operator()),
n !== null && ((o = t.token().startLine), (u = t.token().startCol)),
t.peek() == Tokens.IE_FUNCTION && this.options.ieFilters
? ((r = this._ie_function()),
n === null && ((o = t.token().startLine), (u = t.token().startCol)))
: e && t.match([Tokens.LPAREN, Tokens.LBRACE, Tokens.LBRACKET])
? ((s = t.token()),
(i = s.endChar),
(r = s.value + this._expr(e).text),
n === null && ((o = t.token().startLine), (u = t.token().startCol)),
t.mustMatch(Tokens.type(i)),
(r += i),
this._readWhitespace())
: t.match([
Tokens.NUMBER,
Tokens.PERCENTAGE,
Tokens.LENGTH,
Tokens.ANGLE,
Tokens.TIME,
Tokens.FREQ,
Tokens.STRING,
Tokens.IDENT,
Tokens.URI,
Tokens.UNICODE_RANGE,
])
? ((r = t.token().value),
n === null && ((o = t.token().startLine), (u = t.token().startCol)),
this._readWhitespace())
: ((s = this._hexcolor()),
s === null
? (n === null && ((o = t.LT(1).startLine), (u = t.LT(1).startCol)),
r === null &&
(t.LA(3) == Tokens.EQUALS && this.options.ieFilters
? (r = this._ie_function())
: (r = this._function())))
: ((r = s.value),
n === null && ((o = s.startLine), (u = s.startCol)))),
r !== null ? new PropertyValuePart(n !== null ? n + r : r, o, u) : null
)
},
_function: function () {
var e = this._tokenStream,
t = null,
n = null,
r
if (e.match(Tokens.FUNCTION)) {
;(t = e.token().value), this._readWhitespace(), (n = this._expr(!0)), (t += n)
if (this.options.ieFilters && e.peek() == Tokens.EQUALS)
do {
this._readWhitespace() && (t += e.token().value),
e.LA(0) == Tokens.COMMA && (t += e.token().value),
e.match(Tokens.IDENT),
(t += e.token().value),
e.match(Tokens.EQUALS),
(t += e.token().value),
(r = e.peek())
while (r != Tokens.COMMA && r != Tokens.S && r != Tokens.RPAREN)
e.get(), (t += e.token().value), (r = e.peek())
} while (e.match([Tokens.COMMA, Tokens.S]))
e.match(Tokens.RPAREN), (t += ')'), this._readWhitespace()
}
return t
},
_ie_function: function () {
var e = this._tokenStream,
t = null,
n = null,
r
if (e.match([Tokens.IE_FUNCTION, Tokens.FUNCTION])) {
t = e.token().value
do {
this._readWhitespace() && (t += e.token().value),
e.LA(0) == Tokens.COMMA && (t += e.token().value),
e.match(Tokens.IDENT),
(t += e.token().value),
e.match(Tokens.EQUALS),
(t += e.token().value),
(r = e.peek())
while (r != Tokens.COMMA && r != Tokens.S && r != Tokens.RPAREN)
e.get(), (t += e.token().value), (r = e.peek())
} while (e.match([Tokens.COMMA, Tokens.S]))
e.match(Tokens.RPAREN), (t += ')'), this._readWhitespace()
}
return t
},
_hexcolor: function () {
var e = this._tokenStream,
t = null,
n
if (e.match(Tokens.HASH)) {
;(t = e.token()), (n = t.value)
if (!/#[a-f0-9]{3,6}/i.test(n))
throw new SyntaxError(
"Expected a hex color but found '" +
n +
"' at line " +
t.startLine +
', col ' +
t.startCol +
'.',
t.startLine,
t.startCol
)
this._readWhitespace()
}
return t
},
_keyframes: function () {
var e = this._tokenStream,
t,
n,
r,
i = ''
e.mustMatch(Tokens.KEYFRAMES_SYM),
(t = e.token()),
/^@\-([^\-]+)\-/.test(t.value) && (i = RegExp.$1),
this._readWhitespace(),
(r = this._keyframe_name()),
this._readWhitespace(),
e.mustMatch(Tokens.LBRACE),
this.fire({
type: 'startkeyframes',
name: r,
prefix: i,
line: t.startLine,
col: t.startCol,
}),
this._readWhitespace(),
(n = e.peek())
while (n == Tokens.IDENT || n == Tokens.PERCENTAGE)
this._keyframe_rule(), this._readWhitespace(), (n = e.peek())
this.fire({
type: 'endkeyframes',
name: r,
prefix: i,
line: t.startLine,
col: t.startCol,
}),
this._readWhitespace(),
e.mustMatch(Tokens.RBRACE)
},
_keyframe_name: function () {
var e = this._tokenStream,
t
return e.mustMatch([Tokens.IDENT, Tokens.STRING]), SyntaxUnit.fromToken(e.token())
},
_keyframe_rule: function () {
var e = this._tokenStream,
t,
n = this._key_list()
this.fire({ type: 'startkeyframerule', keys: n, line: n[0].line, col: n[0].col }),
this._readDeclarations(!0),
this.fire({ type: 'endkeyframerule', keys: n, line: n[0].line, col: n[0].col })
},
_key_list: function () {
var e = this._tokenStream,
t,
n,
r = []
r.push(this._key()), this._readWhitespace()
while (e.match(Tokens.COMMA))
this._readWhitespace(), r.push(this._key()), this._readWhitespace()
return r
},
_key: function () {
var e = this._tokenStream,
t
if (e.match(Tokens.PERCENTAGE)) return SyntaxUnit.fromToken(e.token())
if (e.match(Tokens.IDENT)) {
t = e.token()
if (/from|to/i.test(t.value)) return SyntaxUnit.fromToken(t)
e.unget()
}
this._unexpectedToken(e.LT(1))
},
_skipCruft: function () {
while (this._tokenStream.match([Tokens.S, Tokens.CDO, Tokens.CDC]));
},
_readDeclarations: function (e, t) {
var n = this._tokenStream,
r
this._readWhitespace(), e && n.mustMatch(Tokens.LBRACE), this._readWhitespace()
try {
for (;;) {
if (!(n.match(Tokens.SEMICOLON) || (t && this._margin()))) {
if (!this._declaration()) break
if (!n.match(Tokens.SEMICOLON)) break
}
this._readWhitespace()
}
n.mustMatch(Tokens.RBRACE), this._readWhitespace()
} catch (i) {
if (!(i instanceof SyntaxError && !this.options.strict)) throw i
this.fire({
type: 'error',
error: i,
message: i.message,
line: i.line,
col: i.col,
}),
(r = n.advance([Tokens.SEMICOLON, Tokens.RBRACE]))
if (r == Tokens.SEMICOLON) this._readDeclarations(!1, t)
else if (r != Tokens.RBRACE) throw i
}
},
_readWhitespace: function () {
var e = this._tokenStream,
t = ''
while (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 (t in n) n.hasOwnProperty(t) && (e[t] = n[t])
return e
})())
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 = '<angle> | leftwards | rightwards | inherit',
n =
'left-side | far-left | left | center-left | center | center-right | right | far-right | right-side',
r = !1,
i = !1,
s
ValidationTypes.isAny(e, t) ||
(ValidationTypes.isAny(e, 'behind') && ((r = !0), (i = !0)),
ValidationTypes.isAny(e, n) && ((i = !0), r || ValidationTypes.isAny(e, 'behind')))
if (e.hasNext())
throw (
((s = e.next()),
i
? new ValidationError(
"Expected end of value but found '" + s + "'.",
s.line,
s.col
)
: new ValidationError(
"Expected (<'azimuth'>) but found '" + s + "'.",
s.line,
s.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 = !1,
n = '<number> | <percentage>',
r = !1,
i = 0,
s = 4,
o
ValidationTypes.isAny(e, 'fill') && ((r = !0), (t = !0))
while (e.hasNext() && i < s) {
t = ValidationTypes.isAny(e, n)
if (!t) break
i++
}
r ? (t = !0) : ValidationTypes.isAny(e, 'fill')
if (e.hasNext())
throw (
((o = e.next()),
t
? new ValidationError(
"Expected end of value but found '" + o + "'.",
o.line,
o.col
)
: new ValidationError(
"Expected ([<number> | <percentage>]{1,4} && fill?) but found '" + o + "'.",
o.line,
o.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) {
var t = !1,
n = '<length> | <percentage> | inherit',
r = !1,
i = !1,
s = 0,
o = 8,
u
while (e.hasNext() && s < o) {
t = ValidationTypes.isAny(e, n)
if (!t) {
if (!(e.peek() == '/' && s > 0 && !r)) break
;(r = !0), (o = s + 5), e.next()
}
s++
}
if (e.hasNext())
throw (
((u = e.next()),
t
? new ValidationError(
"Expected end of value but found '" + u + "'.",
u.line,
u.col
)
: new ValidationError(
"Expected (<'border-radius'>) but found '" + u + "'.",
u.line,
u.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 = !1,
n
if (!ValidationTypes.isAny(e, 'none'))
Validation.multiProperty('<shadow>', e, !0, Infinity)
else if (e.hasNext())
throw (
((n = e.next()),
new ValidationError("Expected end of value but found '" + n + "'.", n.line, n.col))
)
},
'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 this._i === 0
}),
(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 this._i > 0 ? 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 }
;(Pseudos.ELEMENT = 1),
(Pseudos.CLASS = 2),
(Pseudos.isElement = function (e) {
return e.indexOf('::') === 0 || 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) {
var t = ['a', 'b', 'c', 'd'],
n,
r
for (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 this.a * 1e3 + this.b * 100 + this.c * 10 + this.d
},
toString: function () {
return this.a + ',' + this.b + ',' + this.c + ',' + this.d
},
}),
(Specificity.calculate = function (e) {
function u(e) {
var t,
n,
r,
a,
f = e.elementName ? e.elementName.text : '',
l
f && f.charAt(f.length - 1) != '*' && o++
for (t = 0, r = e.modifiers.length; t < r; t++) {
l = e.modifiers[t]
switch (l.type) {
case 'class':
case 'attribute':
s++
break
case 'id':
i++
break
case 'pseudo':
Pseudos.isElement(l.text) ? o++ : s++
break
case 'not':
for (n = 0, a = l.args.length; n < a; n++) u(l.args[n])
}
}
}
var t,
n,
r,
i = 0,
s = 0,
o = 0
for (t = 0, n = e.parts.length; t < n; t++)
(r = e.parts[t]), r instanceof SelectorPart && u(r)
return new Specificity(0, i, s, o)
})
var h = /^[0-9a-fA-F]$/,
nonascii = /^[\u0080-\uFFFF]$/,
nl = /\n|\r\n|\r|\f/
TokenStream.prototype = mix(new TokenStreamBase(), {
_getToken: function (e) {
var t,
n = this._reader,
r = null,
i = n.getLine(),
s = n.getCol()
t = n.read()
while (t) {
switch (t) {
case '/':
n.peek() == '*' ? (r = this.commentToken(t, i, s)) : (r = this.charToken(t, i, s))
break
case '|':
case '~':
case '^':
case '$':
case '*':
n.peek() == '='
? (r = this.comparisonToken(t, i, s))
: (r = this.charToken(t, i, s))
break
case '"':
case "'":
r = this.stringToken(t, i, s)
break
case '#':
isNameChar(n.peek())
? (r = this.hashToken(t, i, s))
: (r = this.charToken(t, i, s))
break
case '.':
isDigit(n.peek())
? (r = this.numberToken(t, i, s))
: (r = this.charToken(t, i, s))
break
case '-':
n.peek() == '-'
? (r = this.htmlCommentEndToken(t, i, s))
: isNameStart(n.peek())
? (r = this.identOrFunctionToken(t, i, s))
: (r = this.charToken(t, i, s))
break
case '!':
r = this.importantToken(t, i, s)
break
case '@':
r = this.atRuleToken(t, i, s)
break
case ':':
r = this.notToken(t, i, s)
break
case '<':
r = this.htmlCommentStartToken(t, i, s)
break
case 'U':
case 'u':
if (n.peek() == '+') {
r = this.unicodeRangeToken(t, i, s)
break
}
default:
isDigit(t)
? (r = this.numberToken(t, i, s))
: isWhitespace(t)
? (r = this.whitespaceToken(t, i, s))
: isIdentStart(t)
? (r = this.identOrFunctionToken(t, i, s))
: (r = this.charToken(t, i, s))
}
break
}
return !r && t === null && (r = this.createToken(Tokens.EOF, null, i, s)), r
},
createToken: function (e, t, n, r, i) {
var s = this._reader
return (
(i = i || {}),
{
value: t,
type: e,
channel: i.channel,
endChar: i.endChar,
hide: i.hide || !1,
startLine: n,
startCol: r,
endLine: s.getLine(),
endCol: s.getCol(),
}
)
},
atRuleToken: function (e, t, n) {
var r = e,
i = this._reader,
s = Tokens.CHAR,
o = !1,
u,
a
i.mark(), (u = this.readName()), (r = e + u), (s = Tokens.type(r.toLowerCase()))
if (s == Tokens.CHAR || s == Tokens.UNKNOWN)
r.length > 1 ? (s = Tokens.UNKNOWN_SYM) : ((s = Tokens.CHAR), (r = e), i.reset())
return this.createToken(s, r, t, n)
},
charToken: function (e, t, n) {
var r = Tokens.type(e),
i = {}
return (
r == -1 ? (r = Tokens.CHAR) : (i.endChar = Tokens[r].endChar),
this.createToken(r, e, t, n, i)
)
},
commentToken: function (e, t, n) {
var r = this._reader,
i = this.readComment(e)
return this.createToken(Tokens.COMMENT, i, t, n)
},
comparisonToken: function (e, t, n) {
var r = this._reader,
i = e + r.read(),
s = Tokens.type(i) || Tokens.CHAR
return this.createToken(s, i, t, n)
},
hashToken: function (e, t, n) {
var r = this._reader,
i = this.readName(e)
return this.createToken(Tokens.HASH, i, t, n)
},
htmlCommentStartToken: function (e, t, n) {
var r = this._reader,
i = e
return (
r.mark(),
(i += r.readCount(3)),
i == '<!--'
? 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(),
(i += r.readCount(2)),
i == '-->'
? 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),
s = Tokens.IDENT
return (
r.peek() == '('
? ((i += r.read()),
i.toLowerCase() == 'url('
? ((s = Tokens.URI),
(i = this.readURI(i)),
i.toLowerCase() == 'url(' && (s = Tokens.FUNCTION))
: (s = Tokens.FUNCTION))
: r.peek() == ':' &&
i.toLowerCase() == 'progid' &&
((i += r.readTo('(')), (s = Tokens.IE_FUNCTION)),
this.createToken(s, i, t, n)
)
},
importantToken: function (e, t, n) {
var r = this._reader,
i = e,
s = Tokens.CHAR,
o,
u
r.mark(), (u = r.read())
while (u) {
if (u == '/') {
if (r.peek() != '*') break
o = this.readComment(u)
if (o === '') break
} else {
if (!isWhitespace(u)) {
if (/i/i.test(u)) {
;(o = r.readCount(8)),
/mportant/i.test(o) && ((i += u + o), (s = Tokens.IMPORTANT_SYM))
break
}
break
}
i += u + this.readWhitespace()
}
u = r.read()
}
return s == Tokens.CHAR
? (r.reset(), this.charToken(e, t, n))
: this.createToken(s, i, t, n)
},
notToken: function (e, t, n) {
var r = this._reader,
i = e
return (
r.mark(),
(i += r.readCount(4)),
i.toLowerCase() == ':not('
? this.createToken(Tokens.NOT, i, t, n)
: (r.reset(), this.charToken(e, t, n))
)
},
numberToken: function (e, t, n) {
var r = this._reader,
i = this.readNumber(e),
s,
o = Tokens.NUMBER,
u = r.peek()
return (
isIdentStart(u)
? ((s = this.readName(r.read())),
(i += s),
/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^fr$|^vmax$|^vmin$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(
s
)
? (o = Tokens.LENGTH)
: /^deg|^rad$|^grad$/i.test(s)
? (o = Tokens.ANGLE)
: /^ms$|^s$/i.test(s)
? (o = Tokens.TIME)
: /^hz$|^khz$/i.test(s)
? (o = Tokens.FREQ)
: /^dpi$|^dpcm$/i.test(s)
? (o = Tokens.RESOLUTION)
: (o = Tokens.DIMENSION))
: u == '%' && ((i += r.read()), (o = Tokens.PERCENTAGE)),
this.createToken(o, i, t, n)
)
},
stringToken: function (e, t, n) {
var r = e,
i = e,
s = this._reader,
o = e,
u = Tokens.STRING,
a = s.read()
while (a) {
i += a
if (a == r && o != '\\') break
if (isNewLine(s.peek()) && a != '\\') {
u = Tokens.INVALID
break
}
;(o = a), (a = s.read())
}
return a === null && (u = Tokens.INVALID), this.createToken(u, i, t, n)
},
unicodeRangeToken: function (e, t, n) {
var r = this._reader,
i = e,
s,
o = Tokens.CHAR
return (
r.peek() == '+' &&
(r.mark(),
(i += r.read()),
(i += this.readUnicodeRangePart(!0)),
i.length == 2
? r.reset()
: ((o = Tokens.UNICODE_RANGE),
i.indexOf('?') == -1 &&
r.peek() == '-' &&
(r.mark(),
(s = r.read()),
(s += this.readUnicodeRangePart(!1)),
s.length == 1 ? r.reset() : (i += s)))),
this.createToken(o, i, t, n)
)
},
whitespaceToken: function (e, t, n) {
var r = this._reader,
i = e + this.readWhitespace()
return this.createToken(Tokens.S, i, t, n)
},
readUnicodeRangePart: function (e) {
var t = this._reader,
n = '',
r = t.peek()
while (isHexDigit(r) && n.length < 6) t.read(), (n += r), (r = t.peek())
if (e) while (r == '?' && n.length < 6) t.read(), (n += r), (r = t.peek())
return n
},
readWhitespace: function () {
var e = this._reader,
t = '',
n = e.peek()
while (isWhitespace(n)) e.read(), (t += n), (n = e.peek())
return t
},
readNumber: function (e) {
var t = this._reader,
n = e,
r = e == '.',
i = t.peek()
while (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 () {
var e = this._reader,
t = e.read(),
n = t,
r = t,
i = e.peek()
while (i) {
;(i = e.read()), (n += i)
if (i == t && r != '\\') break
if (isNewLine(e.peek()) && i != '\\') {
n = ''
break
}
;(r = i), (i = e.peek())
}
return i === null && (n = ''), n
},
readURI: function (e) {
var t = this._reader,
n = e,
r = '',
i = t.peek()
t.mark()
while (i && isWhitespace(i)) t.read(), (i = t.peek())
i == "'" || i == '"' ? (r = this.readString()) : (r = this.readURL()), (i = t.peek())
while (i && isWhitespace(i)) t.read(), (i = t.peek())
return r === '' || i != ')' ? ((n = e), t.reset()) : (n += r + t.read()), n
},
readURL: function () {
var e = this._reader,
t = '',
n = e.peek()
while (/^[!#$%&\\*-~]$/.test(n)) (t += e.read()), (n = e.peek())
return t
},
readName: function (e) {
var t = this._reader,
n = e || '',
r = t.peek()
for (;;)
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))
do (n += t.read()), (i = t.peek())
while (i && isHexDigit(i) && ++r < 6)
return (
(n.length == 3 && /\s/.test(i)) || n.length == 7 || n.length == 1
? t.read()
: (i = ''),
n + i
)
},
readComment: function (e) {
var t = this._reader,
n = e || '',
r = t.read()
if (r == '*') {
while (r) {
n += r
if (n.length > 2 && r == '*' && t.peek() == '/') {
n += t.read()
break
}
r = t.read()
}
return n
}
return ''
},
})
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 e = [],
t = {}
;(Tokens.UNKNOWN = -1), Tokens.unshift({ name: 'EOF' })
for (var n = 0, r = Tokens.length; n < r; n++) {
e.push(Tokens[n].name), (Tokens[Tokens[n].name] = n)
if (Tokens[n].text)
if (Tokens[n].text instanceof Array)
for (var i = 0; i < Tokens[n].text.length; i++) t[Tokens[n].text[i]] = n
else t[Tokens[n].text] = n
}
;(Tokens.name = function (t) {
return e[t]
}),
(Tokens.type = function (e) {
return t[e] || -1
})
})()
var Validation = {
validate: function (e, t) {
var n = e.toString().toLowerCase(),
r = t.parts,
i = new PropertyValueIterator(t),
s = Properties[n],
o,
u,
a,
f,
l,
c,
h,
p,
d,
v,
m
if (!s) {
if (n.indexOf('-') !== 0)
throw new ValidationError("Unknown property '" + e + "'.", e.line, e.col)
} else
typeof s != 'number' &&
(typeof s == 'string'
? s.indexOf('||') > -1
? this.groupProperty(s, i)
: this.singleProperty(s, i, 1)
: s.multi
? this.multiProperty(s.multi, i, s.comma, s.max || Infinity)
: typeof s == 'function' && s(i))
},
singleProperty: function (e, t, n, r) {
var i = !1,
s = t.value,
o = 0,
u
while (t.hasNext() && o < n) {
i = ValidationTypes.isAny(t, e)
if (!i) break
o++
}
if (!i)
throw t.hasNext() && !t.isFirst()
? ((u = t.peek()),
new ValidationError(
"Expected end of value but found '" + u + "'.",
u.line,
u.col
))
: new ValidationError('Expected (' + e + ") but found '" + s + "'.", s.line, s.col)
if (t.hasNext())
throw (
((u = t.next()),
new ValidationError("Expected end of value but found '" + u + "'.", u.line, u.col))
)
},
multiProperty: function (e, t, n, r) {
var i = !1,
s = t.value,
o = 0,
u = !1,
a
while (t.hasNext() && !i && o < r) {
if (!ValidationTypes.isAny(t, e)) break
o++
if (!t.hasNext()) i = !0
else if (n) {
if (t.peek() != ',') break
a = t.next()
}
}
if (!i)
throw t.hasNext() && !t.isFirst()
? ((a = t.peek()),
new ValidationError(
"Expected end of value but found '" + a + "'.",
a.line,
a.col
))
: ((a = t.previous()),
n && a == ','
? new ValidationError(
"Expected end of value but found '" + a + "'.",
a.line,
a.col
)
: new ValidationError(
'Expected (' + e + ") but found '" + s + "'.",
s.line,
s.col
))
if (t.hasNext())
throw (
((a = t.next()),
new ValidationError("Expected end of value but found '" + a + "'.", a.line, a.col))
)
},
groupProperty: function (e, t, n) {
var r = !1,
i = t.value,
s = e.split('||').length,
o = { count: 0 },
u = !1,
a,
f
while (t.hasNext() && !r) {
a = ValidationTypes.isAnyOfGroup(t, e)
if (!a) break
if (o[a]) break
;(o[a] = 1), o.count++, (u = !0)
if (o.count == s || !t.hasNext()) r = !0
}
if (!r)
throw u && t.hasNext()
? ((f = t.peek()),
new ValidationError(
"Expected end of value but found '" + f + "'.",
f.line,
f.col
))
: new ValidationError('Expected (' + e + ") but found '" + i + "'.", i.line, i.col)
if (t.hasNext())
throw (
((f = t.next()),
new ValidationError("Expected end of value but found '" + f + "'.", f.line, f.col))
)
},
}
ValidationError.prototype = new Error()
var ValidationTypes = {
isLiteral: function (e, t) {
var n = e.text.toString().toLowerCase(),
r = t.split(' | '),
i,
s,
o = !1
for (i = 0, s = r.length; i < s && !o; i++) n == r[i].toLowerCase() && (o = !0)
return o
},
isSimple: function (e) {
return !!this.simple[e]
},
isComplex: function (e) {
return !!this.complex[e]
},
isAny: function (e, t) {
var n = t.split(' | '),
r,
i,
s = !1
for (r = 0, i = n.length; r < i && !s && e.hasNext(); r++) s = this.isType(e, n[r])
return s
},
isAnyOfGroup: function (e, t) {
var n = t.split(' || '),
r,
i,
s = !1
for (r = 0, i = n.length; r < i && !s; r++) s = this.isType(e, n[r])
return s ? n[r - 1] : !1
},
isType: function (e, t) {
var n = e.peek(),
r = !1
return (
t.charAt(0) != '<'
? ((r = this.isLiteral(n, t)), r && e.next())
: this.simple[t]
? ((r = this.simple[t](n)), r && 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 e.type == 'function' && e.name == 'attr'
},
'<bg-image>': function (e) {
return this['<image>'](e) || this['<gradient>'](e) || e == 'none'
},
'<gradient>': function (e) {
return (
e.type == 'function' &&
/^(?:\-(?: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 e.type == 'function' && e.name == 'content'
},
'<relative-size>': function (e) {
return ValidationTypes.isLiteral(e, 'smaller | larger')
},
'<ident>': function (e) {
return e.type == 'identifier'
},
'<length>': function (e) {
return e.type == 'function' && /^(?:\-(?:ms|moz|o|webkit)\-)?calc/i.test(e)
? !0
: e.type == 'length' || e.type == 'number' || e.type == 'integer' || e == '0'
},
'<color>': function (e) {
return e.type == 'color' || e == 'transparent'
},
'<number>': function (e) {
return e.type == 'number' || this['<integer>'](e)
},
'<integer>': function (e) {
return e.type == 'integer'
},
'<line>': function (e) {
return e.type == 'integer'
},
'<angle>': function (e) {
return e.type == 'angle'
},
'<uri>': function (e) {
return e.type == 'uri'
},
'<image>': function (e) {
return this['<uri>'](e)
},
'<percentage>': function (e) {
return e.type == 'percentage' || e == '0'
},
'<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 e.type == 'function' && (e.name == 'rect' || e.name == 'inset-rect')
},
'<time>': function (e) {
return e.type == 'time'
},
'<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) {
var t = this,
n = !1,
r = '<percentage> | <length>',
i = 'left | right',
s = 'top | bottom',
o = 0,
u = function () {
return e.hasNext() && e.peek() != ','
}
while (e.peek(o) && e.peek(o) != ',') o++
return (
o < 3
? ValidationTypes.isAny(e, i + ' | center | ' + r)
? ((n = !0), ValidationTypes.isAny(e, s + ' | center | ' + r))
: ValidationTypes.isAny(e, s) &&
((n = !0), ValidationTypes.isAny(e, i + ' | center'))
: ValidationTypes.isAny(e, i)
? ValidationTypes.isAny(e, s)
? ((n = !0), ValidationTypes.isAny(e, r))
: ValidationTypes.isAny(e, r) &&
(ValidationTypes.isAny(e, s)
? ((n = !0), ValidationTypes.isAny(e, r))
: ValidationTypes.isAny(e, 'center') && (n = !0))
: ValidationTypes.isAny(e, s)
? ValidationTypes.isAny(e, i)
? ((n = !0), ValidationTypes.isAny(e, r))
: ValidationTypes.isAny(e, r) &&
(ValidationTypes.isAny(e, i)
? ((n = !0), ValidationTypes.isAny(e, r))
: ValidationTypes.isAny(e, 'center') && (n = !0))
: ValidationTypes.isAny(e, 'center') &&
ValidationTypes.isAny(e, i + ' | ' + s) &&
((n = !0), ValidationTypes.isAny(e, r)),
n
)
},
'<bg-size>': function (e) {
var t = this,
n = !1,
r = '<percentage> | <length> | auto',
i,
s,
o
return (
ValidationTypes.isAny(e, 'cover | contain')
? (n = !0)
: ValidationTypes.isAny(e, r) && ((n = !0), ValidationTypes.isAny(e, r)),
n
)
},
'<repeat-style>': function (e) {
var t = !1,
n = 'repeat | space | round | no-repeat',
r
return (
e.hasNext() &&
((r = e.next()),
ValidationTypes.isLiteral(r, 'repeat-x | repeat-y')
? (t = !0)
: ValidationTypes.isLiteral(r, n) &&
((t = !0),
e.hasNext() && ValidationTypes.isLiteral(e.peek(), n) && e.next())),
t
)
},
'<shadow>': function (e) {
var t = !1,
n = 0,
r = !1,
i = !1,
s
if (e.hasNext()) {
ValidationTypes.isAny(e, 'inset') && (r = !0),
ValidationTypes.isAny(e, '<color>') && (i = !0)
while (ValidationTypes.isAny(e, '<length>') && n < 4) n++
e.hasNext() &&
(i || ValidationTypes.isAny(e, '<color>'),
r || ValidationTypes.isAny(e, 'inset')),
(t = n >= 2 && 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
ValidationTypes.isAny(e, 'none | inherit')
? (n = !0)
: ValidationTypes.isType(e, '<flex-grow>')
? e.peek()
? ValidationTypes.isType(e, '<flex-shrink>')
? e.peek()
? (n = ValidationTypes.isType(e, '<flex-basis>'))
: (n = !0)
: ValidationTypes.isType(e, '<flex-basis>') && (n = e.peek() === null)
: (n = !0)
: ValidationTypes.isType(e, '<flex-basis>') && (n = !0)
if (!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) || (typeof e == 'object' && objectToString(e) === '[object Array]')
},
isDate: function (e) {
return typeof e == 'object' && objectToString(e) === '[object Date]'
},
isRegExp: function (e) {
return typeof e == 'object' && objectToString(e) === '[object RegExp]'
},
getRegExpFlags: function (e) {
var t = ''
return e.global && (t += 'g'), e.ignoreCase && (t += 'i'), e.multiline && (t += 'm'), t
},
}
typeof module == 'object' && (module.exports = clone),
(clone.clonePrototype = function (e) {
if (e === null) return null
var t = function () {}
return (t.prototype = e), new t()
})
var CSSLint = (function () {
function i(e, t) {
var r,
i = e && e.match(n),
s = i && i[1]
return (
s &&
((r = { true: 2, '': 1, false: 0, 2: 2, 1: 1, 0: 0 }),
s
.toLowerCase()
.split(',')
.forEach(function (e) {
var n = e.split(':'),
i = n[0] || '',
s = n[1] || ''
t[i.trim()] = r[s.trim()]
})),
t
)
}
var e = [],
t = [],
n = /\/\*csslint([^\*]*)\*\//,
r = new parserlib.util.EventTarget()
return (
(r.version = '@VERSION@'),
(r.addRule = function (t) {
e.push(t), (e[t.id] = t)
}),
(r.clearRules = function () {
e = []
}),
(r.getRules = function () {
return [].concat(e).sort(function (e, t) {
return e.id > t.id ? 1 : 0
})
}),
(r.getRuleset = function () {
var t = {},
n = 0,
r = e.length
while (n < r) t[e[n++].id] = 1
return t
}),
(r.addFormatter = function (e) {
t[e.id] = e
}),
(r.getFormatter = function (e) {
return t[e]
}),
(r.format = function (e, t, n, r) {
var i = this.getFormatter(n),
s = null
return (
i &&
((s = i.startFormat()), (s += i.formatResults(e, t, r || {})), (s += i.endFormat())),
s
)
}),
(r.hasFormat = function (e) {
return t.hasOwnProperty(e)
}),
(r.verify = function (t, r) {
var s = 0,
o,
u,
a,
f = new parserlib.css.Parser({
starHack: !0,
ieFilters: !0,
underscoreHack: !0,
strict: !1,
})
;(u = t.replace(/\n\r?/g, '$split$').split('$split$')),
r || (r = this.getRuleset()),
n.test(t) && ((r = clone(r)), (r = i(t, r))),
(o = new Reporter(u, r)),
(r.errors = 2)
for (s in r) r.hasOwnProperty(s) && r[s] && e[s] && e[s].init(f, o)
try {
f.parse(t)
} catch (l) {
o.error('Fatal error, cannot continue: ' + l.message, l.line, l.col, {})
}
return (
(a = { messages: o.messages, stats: o.stats, ruleset: o.ruleset }),
a.messages.sort(function (e, t) {
return e.rollup && !t.rollup ? 1 : !e.rollup && t.rollup ? -1 : e.line - t.line
}),
a
)
}),
r
)
})()
;(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: this.ruleset[r.id] === 2 ? '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 (e, t) {
var n = this
e.addListener('startrule', function (r) {
var i = r.selectors,
s,
o,
u,
a,
f,
l,
c
for (f = 0; f < i.length; f++) {
s = i[f]
for (l = 0; l < s.parts.length; l++) {
o = s.parts[l]
if (o.type === e.SELECTOR_PART_TYPE) {
a = 0
for (c = 0; c < o.modifiers.length; c++)
(u = o.modifiers[c]),
u.type === 'class' && a++,
a > 1 && t.report("Don't use adjoining classes.", o.line, o.col, n)
}
}
}
})
},
}),
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, t) {
function u() {
;(s = {}), (o = !1)
}
function a() {
var e, u
if (!o) {
if (s.height)
for (e in i)
i.hasOwnProperty(e) &&
s[e] &&
((u = s[e].value),
(e !== 'padding' || u.parts.length !== 2 || u.parts[0].value !== 0) &&
t.report(
'Using height with ' +
e +
' can sometimes make elements larger than you expect.',
s[e].line,
s[e].col,
n
))
if (s.width)
for (e in r)
r.hasOwnProperty(e) &&
s[e] &&
((u = s[e].value),
(e !== 'padding' || u.parts.length !== 2 || u.parts[1].value !== 0) &&
t.report(
'Using width with ' +
e +
' can sometimes make elements larger than you expect.',
s[e].line,
s[e].col,
n
))
}
}
var n = this,
r = {
border: 1,
'border-left': 1,
'border-right': 1,
padding: 1,
'padding-left': 1,
'padding-right': 1,
},
i = {
border: 1,
'border-bottom': 1,
'border-top': 1,
padding: 1,
'padding-bottom': 1,
'padding-top': 1,
},
s,
o = !1
e.addListener('startrule', u),
e.addListener('startfontface', u),
e.addListener('startpage', u),
e.addListener('startpagemargin', u),
e.addListener('startkeyframerule', u),
e.addListener('property', function (e) {
var t = e.property.text.toLowerCase()
i[t] || r[t]
? !/^0\S*$/.test(e.value) &&
(t !== 'border' || e.value.toString() !== 'none') &&
(s[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)
? (s[t] = 1)
: t === 'box-sizing' && (o = !0)
}),
e.addListener('endrule', a),
e.addListener('endfontface', a),
e.addListener('endpage', a),
e.addListener('endpagemargin', a),
e.addListener('endkeyframerule', a)
},
}),
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) {
var r = e.property.text.toLowerCase()
r === 'box-sizing' &&
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 n = this,
r = !1,
i = !0,
s = !1,
o,
u
e.addListener('startfontface', function () {
r = !0
}),
e.addListener('property', function (e) {
if (!r) return
var t = e.property.toString().toLowerCase(),
n = e.value.toString()
;(o = e.line), (u = e.col)
if (t === 'src') {
var a = /^\s?url\(['"].+\.eot\?.*['"]\)\s*format\(['"]embedded-opentype['"]\).*$/i
!n.match(a) && i ? ((s = !0), (i = !1)) : n.match(a) && !i && (s = !1)
}
}),
e.addListener('endfontface', function () {
;(r = !1),
s &&
t.report(
"@font-face declaration doesn't follow the fontspring bulletproof syntax.",
o,
u,
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, t) {
var n = this,
r,
i,
s,
o,
u,
a,
f,
l = !1,
c = Array.prototype.push,
h = []
r = {
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 (s in r)
if (r.hasOwnProperty(s)) {
;(o = []), (u = r[s].split(' '))
for (a = 0, f = u.length; a < f; a++) o.push('-' + u[a] + '-' + s)
;(r[s] = o), c.apply(h, o)
}
e.addListener('startrule', function () {
i = []
}),
e.addListener('startkeyframes', function (e) {
l = e.prefix || !0
}),
e.addListener('endkeyframes', function () {
l = !1
}),
e.addListener('property', function (e) {
var t = e.property
CSSLint.Util.indexOf(h, t.text) > -1 &&
(!l || typeof l != 'string' || t.text.indexOf('-' + l + '-') !== 0) &&
i.push(t)
}),
e.addListener('endrule', function () {
if (!i.length) return
var e = {},
s,
o,
u,
a,
f,
l,
c,
h,
p,
d
for (s = 0, o = i.length; s < o; s++) {
u = i[s]
for (a in r)
r.hasOwnProperty(a) &&
((f = r[a]),
CSSLint.Util.indexOf(f, u.text) > -1 &&
(e[a] || (e[a] = { full: f.slice(0), actual: [], actualNodes: [] }),
CSSLint.Util.indexOf(e[a].actual, u.text) === -1 &&
(e[a].actual.push(u.text), e[a].actualNodes.push(u))))
}
for (a in e)
if (e.hasOwnProperty(a)) {
;(l = e[a]), (c = l.full), (h = l.actual)
if (c.length > h.length)
for (s = 0, o = c.length; s < o; s++)
(p = c[s]),
CSSLint.Util.indexOf(h, p) === -1 &&
((d =
h.length === 1
? h[0]
: h.length === 2
? h.join(' and ')
: h.join(', ')),
t.report(
'The property ' +
p +
' is compatible with ' +
d +
' and should be included as well.',
l.actualNodes[0].line,
l.actualNodes[0].col,
n
))
}
})
},
}),
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, t) {
function s(e, s, o) {
i[e] &&
(typeof r[e] != 'string' || i[e].value.toLowerCase() !== r[e]) &&
t.report(o || e + " can't be used with display: " + s + '.', i[e].line, i[e].col, n)
}
function o() {
i = {}
}
function u() {
var e = i.display ? i.display.value : null
if (e)
switch (e) {
case 'inline':
s('height', e),
s('width', e),
s('margin', e),
s('margin-top', e),
s('margin-bottom', e),
s(
'float',
e,
'display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).'
)
break
case 'block':
s('vertical-align', e)
break
case 'inline-block':
s('float', e)
break
default:
e.indexOf('table-') === 0 &&
(s('margin', e),
s('margin-left', e),
s('margin-right', e),
s('margin-top', e),
s('margin-bottom', e),
s('float', e))
}
}
var n = this,
r = {
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,
},
i
e.addListener('startrule', o),
e.addListener('startfontface', o),
e.addListener('startkeyframerule', o),
e.addListener('startpagemargin', o),
e.addListener('startpage', o),
e.addListener('property', function (e) {
var t = e.property.text.toLowerCase()
r[t] && (i[t] = { value: e.value.text, line: e.property.line, col: e.property.col })
}),
e.addListener('endrule', u),
e.addListener('endfontface', u),
e.addListener('endkeyframerule', u),
e.addListener('endpagemargin', u),
e.addListener('endpage', u)
},
}),
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, t) {
var n = this,
r = {}
e.addListener('property', function (e) {
var i = e.property.text,
s = e.value,
o,
u
if (i.match(/background/i))
for (o = 0, u = s.parts.length; o < u; o++)
s.parts[o].type === 'uri' &&
(typeof r[s.parts[o].uri] == 'undefined'
? (r[s.parts[o].uri] = e)
: t.report(
"Background image '" +
s.parts[o].uri +
"' was used multiple times, first declared at line " +
r[s.parts[o].uri].line +
', col ' +
r[s.parts[o].uri].col +
'.',
e.line,
e.col,
n
))
})
},
}),
CSSLint.addRule({
id: 'duplicate-properties',
name: 'Disallow duplicate properties',
desc: 'Duplicate properties must appear one after the other.',
browsers: 'All',
init: function (e, t) {
function s() {
r = {}
}
var n = this,
r,
i
e.addListener('startrule', s),
e.addListener('startfontface', s),
e.addListener('startpage', s),
e.addListener('startpagemargin', s),
e.addListener('startkeyframerule', s),
e.addListener('property', function (e) {
var s = e.property,
o = s.text.toLowerCase()
r[o] &&
(i !== o || r[o] === e.value.text) &&
t.report("Duplicate property '" + e.property + "' found.", e.line, e.col, n),
(r[o] = e.value.text),
(i = o)
})
},
}),
CSSLint.addRule({
id: 'empty-rules',
name: 'Disallow empty rules',
desc: 'Rules without any properties specified should be removed.',
browsers: 'All',
init: function (e, t) {
var n = this,
r = 0
e.addListener('startrule', function () {
r = 0
}),
e.addListener('property', function () {
r++
}),
e.addListener('endrule', function (e) {
var i = e.selectors
r === 0 && t.report('Rule is empty.', i[0].line, i[0].col, n)
})
},
}),
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, t) {
function o() {
;(s = {}), (r = null)
}
var n = this,
r,
i = {
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,
},
s
e.addListener('startrule', o),
e.addListener('startfontface', o),
e.addListener('startpage', o),
e.addListener('startpagemargin', o),
e.addListener('startkeyframerule', o),
e.addListener('property', function (e) {
var s = e.property,
o = s.text.toLowerCase(),
u = e.value.parts,
a = 0,
f = '',
l = u.length
if (i[o])
while (a < l)
u[a].type === 'color' &&
('alpha' in u[a] || 'hue' in u[a]
? (/([^\)]+)\(/.test(u[a]) && (f = RegExp.$1.toUpperCase()),
(!r || r.property.text.toLowerCase() !== o || r.colorType !== 'compat') &&
t.report(
'Fallback ' + o + ' (hex or RGB) should precede ' + f + ' ' + o + '.',
e.line,
e.col,
n
))
: (e.colorType = 'compat')),
a++
r = 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) {
e.property.text.toLowerCase() === 'float' &&
e.value.text.toLowerCase() !== 'none' &&
r++
}),
e.addListener('endstylesheet', function () {
t.stat('floats', r),
r >= 10 &&
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 () {
r > 5 && 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) {
e.property.toString() === 'font-size' && r++
}),
e.addListener('endstylesheet', function () {
t.stat('font-sizes', r),
r >= 10 &&
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, t) {
var n = this,
r
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 i = []
r.moz || i.push('Firefox 3.6+'),
r.webkit || i.push('Webkit (Safari 5+, Chrome)'),
r.oldWebkit || i.push('Old Webkit (Safari 4+, Chrome)'),
r.o || i.push('Opera 11.1+'),
i.length &&
i.length < 4 &&
t.report(
'Missing vendor-prefixed CSS gradients for ' + i.join(', ') + '.',
e.selectors[0].line,
e.selectors[0].col,
n
)
})
},
}),
CSSLint.addRule({
id: 'ids',
name: 'Disallow IDs in selectors',
desc: 'Selectors should not contain IDs.',
browsers: 'All',
init: function (e, t) {
var n = this
e.addListener('startrule', function (r) {
var i = r.selectors,
s,
o,
u,
a,
f,
l,
c
for (f = 0; f < i.length; f++) {
;(s = i[f]), (a = 0)
for (l = 0; l < s.parts.length; l++) {
o = s.parts[l]
if (o.type === e.SELECTOR_PART_TYPE)
for (c = 0; c < o.modifiers.length; c++)
(u = o.modifiers[c]), u.type === 'id' && a++
}
a === 1
? t.report("Don't use IDs in selectors.", s.line, s.col, n)
: a > 1 && t.report(a + ' IDs in the selector, really?', s.line, s.col, n)
}
})
},
}),
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) {
e.important === !0 && (r++, t.report('Use of !important', e.line, e.col, n))
}),
e.addListener('endstylesheet', function () {
t.stat('important', r),
r >= 10 &&
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) {
var n = this,
r,
i = function () {
r = []
}
e.addListener('startrule', i),
e.addListener('startfontface', i),
e.addListener('startpage', i),
e.addListener('startpagemargin', i),
e.addListener('startkeyframerule', i),
e.addListener('property', function (e) {
var t = e.property.text,
n = t.toLowerCase().replace(/^-.*?-/, '')
r.push(n)
}),
e.addListener('endrule', function (e) {
var i = r.join(','),
s = r.sort().join(',')
i !== s &&
t.report(
"Rule doesn't have all its properties in alphabetical ordered.",
e.line,
e.col,
n
)
})
},
}),
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 i(e) {
e.selectors
? (r = {
line: e.line,
col: e.col,
selectors: e.selectors,
propCount: 0,
outline: !1,
})
: (r = null)
}
function s() {
r &&
r.outline &&
(r.selectors.toString().toLowerCase().indexOf(':focus') === -1
? t.report('Outlines should only be modified using :focus.', r.line, r.col, n)
: r.propCount === 1 &&
t.report(
"Outlines shouldn't be hidden unless other visual changes are made.",
r.line,
r.col,
n
))
}
var n = this,
r
e.addListener('startrule', i),
e.addListener('startfontface', i),
e.addListener('startpage', i),
e.addListener('startpagemargin', i),
e.addListener('startkeyframerule', i),
e.addListener('property', function (e) {
var t = e.property.text.toLowerCase(),
n = e.value
r &&
(r.propCount++,
t === 'outline' &&
(n.toString() === 'none' || n.toString() === '0') &&
(r.outline = !0))
}),
e.addListener('endrule', s),
e.addListener('endfontface', s),
e.addListener('endpage', s),
e.addListener('endpagemargin', s),
e.addListener('endkeyframerule', s)
},
}),
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 (e, t) {
var n = this,
r = {}
e.addListener('startrule', function (i) {
var s = i.selectors,
o,
u,
a,
f,
l,
c
for (f = 0; f < s.length; f++) {
o = s[f]
for (l = 0; l < o.parts.length; l++) {
u = o.parts[l]
if (u.type === e.SELECTOR_PART_TYPE)
for (c = 0; c < u.modifiers.length; c++)
(a = u.modifiers[c]),
u.elementName && a.type === 'id'
? t.report(
'Element (' +
u +
') is overqualified, just use ' +
a +
' without element name.',
u.line,
u.col,
n
)
: a.type === 'class' &&
(r[a] || (r[a] = []), r[a].push({ modifier: a, part: u }))
}
}
}),
e.addListener('endstylesheet', function () {
var e
for (e in r)
r.hasOwnProperty(e) &&
r[e].length === 1 &&
r[e][0].part.elementName &&
t.report(
'Element (' +
r[e][0].part +
') is overqualified, just use ' +
r[e][0].modifier +
' without element name.',
r[e][0].part.line,
r[e][0].part.col,
n
)
})
},
}),
CSSLint.addRule({
id: 'qualified-headings',
name: 'Disallow qualified headings',
desc: 'Headings should not be qualified (namespaced).',
browsers: 'All',
init: function (e, t) {
var n = this
e.addListener('startrule', function (r) {
var i = r.selectors,
s,
o,
u,
a
for (u = 0; u < i.length; u++) {
s = i[u]
for (a = 0; a < s.parts.length; a++)
(o = s.parts[a]),
o.type === e.SELECTOR_PART_TYPE &&
o.elementName &&
/h[1-6]/.test(o.elementName.toString()) &&
a > 0 &&
t.report(
'Heading (' + o.elementName + ') should not be qualified.',
o.line,
o.col,
n
)
}
})
},
}),
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 (e, t) {
var n = this
e.addListener('startrule', function (r) {
var i = r.selectors,
s,
o,
u,
a,
f,
l
for (a = 0; a < i.length; a++) {
s = i[a]
for (f = 0; f < s.parts.length; f++) {
o = s.parts[f]
if (o.type === e.SELECTOR_PART_TYPE)
for (l = 0; l < o.modifiers.length; l++)
(u = o.modifiers[l]),
u.type === 'attribute' &&
/([\~\|\^\$\*]=)/.test(u) &&
t.report(
'Attribute selectors with ' + RegExp.$1 + ' are slow!',
u.line,
u.col,
n
)
}
}
})
},
}),
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 () {
r >= 3800 &&
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 () {
r > 4095 &&
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, t) {
function r(e) {
var r,
i,
s,
o,
u,
a,
f,
l,
c,
h,
p,
d = e.selectors
for (r = 0, i = d.length; r < i; r++) {
s = d[r]
for (o = 0, a = s.parts.length; o < a; o++)
for (u = o + 1; u < a; u++)
(f = s.parts[o]),
(l = s.parts[u]),
(c = f.type),
(h = f.line),
(p = l.line),
c === 'descendant' &&
p > h &&
t.report(
'newline character found in selector (forgot a comma?)',
h,
d[r].parts[0].col,
n
)
}
}
var n = this
e.addListener('startrule', r)
},
}),
CSSLint.addRule({
id: 'shorthand',
name: 'Require shorthand properties',
desc: 'Use shorthand properties where possible.',
browsers: 'All',
init: function (e, t) {
function f() {
u = {}
}
function l(e) {
var r, i, s, o
for (r in a)
if (a.hasOwnProperty(r)) {
o = 0
for (i = 0, s = a[r].length; i < s; i++) o += u[a[r][i]] ? 1 : 0
o === a[r].length &&
t.report(
'The properties ' + a[r].join(', ') + ' can be replaced by ' + r + '.',
e.line,
e.col,
n
)
}
}
var n = this,
r,
i,
s,
o = {},
u,
a = {
margin: ['margin-top', 'margin-bottom', 'margin-left', 'margin-right'],
padding: ['padding-top', 'padding-bottom', 'padding-left', 'padding-right'],
}
for (r in a)
if (a.hasOwnProperty(r)) for (i = 0, s = a[r].length; i < s; i++) o[a[r][i]] = r
e.addListener('startrule', f),
e.addListener('startfontface', f),
e.addListener('property', function (e) {
var t = e.property.toString().toLowerCase()
o[t] && (u[t] = 1)
}),
e.addListener('endrule', l),
e.addListener('endfontface', l)
},
}),
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) {
var r = e.property
r.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 s() {
;(r = !1), (i = 'inherit')
}
function o() {
r &&
i !== 'ltr' &&
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.",
r.line,
r.col,
n
)
}
var n = this,
r,
i
e.addListener('startrule', s),
e.addListener('startfontface', s),
e.addListener('property', function (e) {
var t = e.property.toString().toLowerCase(),
n = e.value
t === 'text-indent' && n.parts[0].value < -99
? (r = e.property)
: t === 'direction' && n.toString() === 'ltr' && (i = 'ltr')
}),
e.addListener('endrule', o),
e.addListener('endfontface', o)
},
}),
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) {
var r = e.property
r.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, t) {
var n = this,
r = { h1: 0, h2: 0, h3: 0, h4: 0, h5: 0, h6: 0 }
e.addListener('startrule', function (e) {
var i = e.selectors,
s,
o,
u,
a,
f
for (a = 0; a < i.length; a++) {
;(s = i[a]), (o = s.parts[s.parts.length - 1])
if (o.elementName && /(h[1-6])/i.test(o.elementName.toString())) {
for (f = 0; f < o.modifiers.length; f++)
if (o.modifiers[f].type === 'pseudo') {
u = !0
break
}
u ||
(r[RegExp.$1]++,
r[RegExp.$1] > 1 &&
t.report(
'Heading (' + o.elementName + ') has already been defined.',
o.line,
o.col,
n
))
}
}
}),
e.addListener('endstylesheet', function () {
var e,
i = []
for (e in r) r.hasOwnProperty(e) && r[e] > 1 && i.push(r[e] + ' ' + e + 's')
i.length &&
t.rollupWarn('You have ' + i.join(', ') + ' defined in this stylesheet.', n)
})
},
}),
CSSLint.addRule({
id: 'universal-selector',
name: 'Disallow universal selector',
desc: 'The universal selector (*) is known to be slow.',
browsers: 'All',
init: function (e, t) {
var n = this
e.addListener('startrule', function (e) {
var r = e.selectors,
i,
s,
o
for (o = 0; o < r.length; o++)
(i = r[o]),
(s = i.parts[i.parts.length - 1]),
s.elementName === '*' && t.report(n.desc, s.line, s.col, n)
})
},
}),
CSSLint.addRule({
id: 'unqualified-attributes',
name: 'Disallow unqualified attribute selectors',
desc: 'Unqualified attribute selectors are known to be slow.',
browsers: 'All',
init: function (e, t) {
var n = this
e.addListener('startrule', function (r) {
var i = r.selectors,
s,
o,
u,
a,
f
for (a = 0; a < i.length; a++) {
;(s = i[a]), (o = s.parts[s.parts.length - 1])
if (o.type === e.SELECTOR_PART_TYPE)
for (f = 0; f < o.modifiers.length; f++)
(u = o.modifiers[f]),
u.type === 'attribute' &&
(!o.elementName || o.elementName === '*') &&
t.report(n.desc, o.line, o.col, n)
}
})
},
}),
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, t) {
function o() {
;(r = {}), (i = 1)
}
function u() {
var e,
i,
o,
u,
a,
f = []
for (e in r) s[e] && f.push({ actual: e, needed: s[e] })
for (i = 0, o = f.length; i < o; i++)
(u = f[i].needed),
(a = f[i].actual),
r[u]
? r[u][0].pos < r[a][0].pos &&
t.report(
"Standard property '" +
u +
"' should come after vendor-prefixed property '" +
a +
"'.",
r[a][0].name.line,
r[a][0].name.col,
n
)
: t.report(
"Missing standard property '" + u + "' to go along with '" + a + "'.",
r[a][0].name.line,
r[a][0].name.col,
n
)
}
var n = this,
r,
i,
s = {
'-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', o),
e.addListener('startfontface', o),
e.addListener('startpage', o),
e.addListener('startpagemargin', o),
e.addListener('startkeyframerule', o),
e.addListener('property', function (e) {
var t = e.property.text.toLowerCase()
r[t] || (r[t] = []), r[t].push({ name: e.property, value: e.value, pos: i++ })
}),
e.addListener('endrule', u),
e.addListener('endfontface', u),
e.addListener('endpage', u),
e.addListener('endpagemargin', u),
e.addListener('endkeyframerule', u)
},
}),
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, t) {
var n = this
e.addListener('property', function (e) {
var r = e.value.parts,
i = 0,
s = r.length
while (i < s)
(r[i].units || r[i].type === 'percentage') &&
r[i].value === 0 &&
r[i].type !== 'time' &&
t.report("Values of 0 shouldn't have units specified.", r[i].line, r[i].col, n),
i++
})
},
}),
(function () {
var e = function (e) {
return !e || e.constructor !== String
? ''
: e.replace(/[\"&><]/g, function (e) {
switch (e) {
case '"':
return '"'
case '&':
return '&'
case '<':
return '<'
case '>':
return '>'
}
})
}
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 (t, n) {
return (
'<file name="' +
e(t) +
'"><error line="0" column="0" severty="error" message="' +
e(n) +
'"></error></file>'
)
},
formatResults: function (t, n) {
var r = t.messages,
i = [],
s = function (e) {
return !!e && 'name' in e ? 'net.csslint.' + e.name.replace(/\s/g, '') : ''
}
return (
r.length > 0 &&
(i.push('<file name="' + n + '">'),
CSSLint.Util.forEach(r, function (t) {
t.rollup ||
i.push(
'<error line="' +
t.line +
'" column="' +
t.col +
'" severity="' +
t.type +
'"' +
' message="' +
e(t.message) +
'" source="' +
s(t.rule) +
'"/>'
)
}),
i.push('</file>')),
i.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 || {}
var s = function (e) {
return e.charAt(0).toUpperCase() + e.slice(1)
}
return r.length === 0
? n.quiet
? ''
: t + ': Lint Free!'
: (CSSLint.Util.forEach(r, function (e) {
e.rollup
? (i += t + ': ' + s(e.type) + ' - ' + e.message + '\n')
: (i +=
t +
': ' +
'line ' +
e.line +
', col ' +
e.col +
', ' +
s(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) {
var n = e.messages,
r = [],
i = function (e) {
return !e || e.constructor !== String
? ''
: e
.replace(/\"/g, "'")
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
}
return (
n.length > 0 &&
(r.push('<file name="' + t + '">'),
CSSLint.Util.forEach(n, function (e) {
e.rollup
? r.push(
'<issue severity="' +
e.type +
'" reason="' +
i(e.message) +
'" evidence="' +
i(e.evidence) +
'"/>'
)
: r.push(
'<issue line="' +
e.line +
'" char="' +
e.col +
'" severity="' +
e.type +
'"' +
' reason="' +
i(e.message) +
'" evidence="' +
i(e.evidence) +
'"/>'
)
}),
r.push('</file>')),
r.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) {
var n = e.messages,
r = [],
i = { error: 0, failure: 0 },
s = function (e) {
return !!e && 'name' in e ? 'net.csslint.' + e.name.replace(/\s/g, '') : ''
},
o = function (e) {
return !e || e.constructor !== String
? ''
: e.replace(/\"/g, "'").replace(/</g, '<').replace(/>/g, '>')
}
return (
n.length > 0 &&
(n.forEach(function (e) {
var t = e.type === 'warning' ? 'error' : e.type
e.rollup ||
(r.push('<testcase time="0" name="' + s(e.rule) + '">'),
r.push(
'<' +
t +
' message="' +
o(e.message) +
'"><![CDATA[' +
e.line +
':' +
e.col +
':' +
o(e.evidence) +
']]></' +
t +
'>'
),
r.push('</testcase>'),
(i[t] += 1))
}),
r.unshift(
'<testsuite time="0" tests="' +
n.length +
'" skipped="0" errors="' +
i.error +
'" failures="' +
i.failure +
'" package="net.csslint" name="' +
t +
'">'
),
r.push('</testsuite>')),
r.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) {
var n = e.messages,
r = [],
i = function (e) {
return !e || e.constructor !== String
? ''
: e
.replace(/\"/g, "'")
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
}
return (
n.length > 0 &&
(r.push('<file name="' + t + '">'),
CSSLint.Util.forEach(n, function (e) {
e.rollup
? r.push(
'<issue severity="' +
e.type +
'" reason="' +
i(e.message) +
'" evidence="' +
i(e.evidence) +
'"/>'
)
: r.push(
'<issue line="' +
e.line +
'" char="' +
e.col +
'" severity="' +
e.type +
'"' +
' reason="' +
i(e.message) +
'" evidence="' +
i(e.evidence) +
'"/>'
)
}),
r.push('</file>')),
r.join('')
)
},
}),
CSSLint.addFormatter({
id: 'text',
name: 'Plain Text',
startFormat: function () {
return ''
},
endFormat: function () {
return ''
},
formatResults: function (e, t, n) {
var r = e.messages,
i = ''
n = n || {}
if (r.length === 0) return n.quiet ? '' : '\n\ncsslint: No errors in ' + t + '.'
;(i = '\n\ncsslint: There '),
r.length === 1 ? (i += 'is 1 problem') : (i += 'are ' + r.length + ' problems'),
(i += ' in ' + t + '.')
var s = t.lastIndexOf('/'),
o = t
return (
s === -1 && (s = t.lastIndexOf('\\')),
s > -1 && (o = t.substring(s + 1)),
CSSLint.Util.forEach(r, function (e, t) {
;(i = i + '\n\n' + o),
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)
}),
ace.define('ace/mode/css_worker', [], function (e, t, n) {
'use strict'
var r = e('../lib/oop'),
i = e('../lib/lang'),
s = e('../worker/mirror').Mirror,
o = e('./css/csslint').CSSLint,
u = (t.Worker = function (e) {
s.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(u, s),
function () {
;(this.setInfoRules = function (e) {
typeof e == 'string' && (e = e.split('|')),
(this.infoRules = i.arrayToMap(e)),
this.doc.getValue() && this.deferredUpdate.schedule(100)
}),
(this.setDisabledRules = function (e) {
if (!e) this.ruleset = null
else {
typeof e == 'string' && (e = e.split('|'))
var t = {}
o.getRules().forEach(function (e) {
t[e.id] = !0
}),
e.forEach(function (e) {
delete t[e]
}),
(this.ruleset = t)
}
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 = o.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(u.prototype)
})