-
Notifications
You must be signed in to change notification settings - Fork 3
/
less.js
17 lines (15 loc) · 39 KB
/
less.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//
// LESS - Leaner CSS v1.1.0
// http://lesscss.org
//
// Copyright (c) 2010, Alexis Sellier
// Licensed under the Apache 2.0 License.
//
/* CSS3.less initiated by [email protected]
Use as you like
Added formatString method to less.js
*/
(function (a, b) {
function v(a, b) { var c = "less-error-message:" + p(b), e = ["<ul>", '<li><label>[-1]</label><pre class="ctx">{0}</pre></li>', "<li><label>[0]</label><pre>{current}</pre></li>", '<li><label>[1]</label><pre class="ctx">{2}</pre></li>', "</ul>"].join("\n"), f = document.createElement("div"), g, h; f.id = c, f.className = "less-error-message", h = "<h3>" + (a.message || "There is an error in your .less file") + "</h3>" + '<p><a href="' + b + '">' + b + "</a> ", a.extract && (h += "on line " + a.line + ", column " + (a.column + 1) + ":</p>" + e.replace(/\[(-?\d)\]/g, function (b, c) { return parseInt(a.line) + parseInt(c) || "" }).replace(/\{(\d)\}/g, function (b, c) { return a.extract[parseInt(c)] || "" }).replace(/\{current\}/, a.extract[1].slice(0, a.column) + '<span class="error">' + a.extract[1].slice(a.column) + "</span>")), f.innerHTML = h, q([".less-error-message ul, .less-error-message li {", "list-style-type: none;", "margin-right: 15px;", "padding: 4px 0;", "margin: 0;", "}", ".less-error-message label {", "font-size: 12px;", "margin-right: 15px;", "padding: 4px 0;", "color: #cc7777;", "}", ".less-error-message pre {", "color: #ee4444;", "padding: 4px 0;", "margin: 0;", "display: inline-block;", "}", ".less-error-message pre.ctx {", "color: #dd4444;", "}", ".less-error-message h3 {", "font-size: 20px;", "font-weight: bold;", "padding: 15px 0 5px 0;", "margin: 0;", "}", ".less-error-message a {", "color: #10a", "}", ".less-error-message .error {", "color: red;", "font-weight: bold;", "padding-bottom: 2px;", "border-bottom: 1px dashed red;", "}"].join("\n"), { title: "error-message" }), f.style.cssText = ["font-family: Arial, sans-serif", "border: 1px solid #e00", "background-color: #eee", "border-radius: 5px", "-webkit-border-radius: 5px", "-moz-border-radius: 5px", "color: #e00", "padding: 15px", "margin-bottom: 15px"].join(";"), d.env == "development" && (g = setInterval(function () { document.body && (document.getElementById(c) ? document.body.replaceChild(f, document.getElementById(c)) : document.body.insertBefore(f, document.body.firstChild), clearInterval(g)) }, 10)) } function u(a) { d.env == "development" && typeof console != "undefined" && console.log("less: " + a) } function t(a) { return a && a.parentNode.removeChild(a) } function s() { if (a.XMLHttpRequest) return new XMLHttpRequest; try { return new ActiveXObject("MSXML2.XMLHTTP.3.0") } catch (b) { u("browser doesn't support AJAX."); return null } } function r(a, b, c, e) { function i(b, c, d) { b.status >= 200 && b.status < 300 ? c(b.responseText, b.getResponseHeader("Last-Modified")) : typeof d == "function" && d(b.status, a) } var f = s(), h = g ? !1 : d.async; typeof f.overrideMimeType == "function" && f.overrideMimeType("text/css"), f.open("GET", a, h), f.setRequestHeader("Accept", b || "text/x-less, text/css; q=0.9, */*; q=0.5"), f.send(null), g ? f.status === 0 ? c(f.responseText) : e(f.status, a) : h ? f.onreadystatechange = function () { f.readyState == 4 && i(f, c, e) } : i(f, c, e) } function q(a, b, c) { var d, e = b.href ? b.href.replace(/\?.*$/, "") : "", f = "less:" + (b.title || p(e)); (d = document.getElementById(f)) === null && (d = document.createElement("style"), d.type = "text/css", d.media = b.media || "screen", d.id = f, document.getElementsByTagName("head")[0].appendChild(d)); if (d.styleSheet) try { d.styleSheet.cssText = a } catch (g) { throw new Error("Couldn't reassign styleSheet.cssText.") } else (function (a) { d.childNodes.length > 0 ? d.firstChild.nodeValue !== a.nodeValue && d.replaceChild(a, d.firstChild) : d.appendChild(a) })(document.createTextNode(a)); c && h && (u("saving " + e + " to cache."), h.setItem(e, a), h.setItem(e + ":timestamp", c)) } function p(a) { return a.replace(/^[a-z]+:\/\/?[^\/]+/, "").replace(/^\//, "").replace(/\?.*$/, "").replace(/\.[^\.\/]+$/, "").replace(/[^\.\w-]+/g, "-").replace(/\./g, ":") } function o(b, c, e, f) { var g = a.location.href.replace(/[#?].*$/, ""), i = b.href.replace(/\?.*$/, ""), j = h && h.getItem(i), k = h && h.getItem(i + ":timestamp"), l = { css: j, timestamp: k }; /^(https?|file):/.test(i) || (i = g.slice(0, g.lastIndexOf("/") + 1) + i), r(b.href, b.type, function (a, g) { if (!e && l && g && (new Date(g)).valueOf() === (new Date(l.timestamp)).valueOf()) q(l.css, b), c(null, b, { local: !0, remaining: f }); else try { (new d.Parser({ optimization: d.optimization, paths: [i.replace(/[\w\.-]+$/, "")], mime: b.type })).parse(a, function (a, d) { if (a) return v(a, i); try { c(d, b, { local: !1, lastModified: g, remaining: f }), t(document.getElementById("less-error-message:" + p(i))) } catch (a) { v(a, i) } }) } catch (h) { v(h, i) } }, function (a, b) { throw new Error("Couldn't load " + b + " (" + a + ")") }) } function n(a, b) { for (var c = 0; c < d.sheets.length; c++) o(d.sheets[c], a, b, d.sheets.length - (c + 1)) } function m() { var a = document.getElementsByTagName("style"); for (var b = 0; b < a.length; b++) a[b].type.match(k) && (new d.Parser).parse(a[b].innerHTML || "", function (c, d) { a[b].type = "text/css", a[b].innerHTML = d.toCSS() }) } function c(b) { return a.less[b.split("/")[1]] } Array.isArray || (Array.isArray = function (a) { return Object.prototype.toString.call(a) === "[object Array]" || a instanceof Array }), Array.prototype.forEach || (Array.prototype.forEach = function (a, b) { var c = this.length >>> 0; for (var d = 0; d < c; d++) d in this && a.call(b, this[d], d, this) }), Array.prototype.map || (Array.prototype.map = function (a) { var b = this.length >>> 0, c = Array(b), d = arguments[1]; for (var e = 0; e < b; e++) e in this && (c[e] = a.call(d, this[e], e, this)); return c }), Array.prototype.filter || (Array.prototype.filter = function (a) { var b = [], c = arguments[1]; for (var d = 0; d < this.length; d++) a.call(c, this[d]) && b.push(this[d]); return b }), Array.prototype.reduce || (Array.prototype.reduce = function (a) { var b = this.length >>> 0, c = 0; if (b === 0 && arguments.length === 1) throw new TypeError; if (arguments.length >= 2) var d = arguments[1]; else for (; ; ) { if (c in this) { d = this[c++]; break } if (++c >= b) throw new TypeError } for (; c < b; c++) c in this && (d = a.call(null, d, this[c], c, this)); return d }), Array.prototype.indexOf || (Array.prototype.indexOf = function (a) { var b = this.length, c = arguments[1] || 0; if (!b) return -1; if (c >= b) return -1; c < 0 && (c += b); for (; c < b; c++) { if (!Object.prototype.hasOwnProperty.call(this, c)) continue; if (a === this[c]) return c } return -1 }), Object.keys || (Object.keys = function (a) { var b = []; for (var c in a) Object.prototype.hasOwnProperty.call(a, c) && b.push(c); return b }), String.prototype.trim || (String.prototype.trim = function () { return String(this).replace(/^\s\s*/, "").replace(/\s\s*$/, "") }); var d, e; typeof a == "undefined" ? (d = exports, e = c("less/tree")) : (typeof a.less == "undefined" && (a.less = {}), d = a.less, e = a.less.tree = {}), d.Parser = function (a) { function t(a) { return typeof a == "string" ? b.charAt(c) === a : a.test(j[f]) ? !0 : !1 } function s(a) { var d, e, g, h, i, m, n, o; if (a instanceof Function) return a.call(l.parsers); if (typeof a == "string") d = b.charAt(c) === a ? a : null, g = 1, r(); else { r(); if (d = a.exec(j[f])) g = d[0].length; else return null } if (d) { o = c += g, m = c + j[f].length - g; while (c < m) { h = b.charCodeAt(c); if (h !== 32 && h !== 10 && h !== 9) break; c++ } j[f] = j[f].slice(g + (c - o)), k = c, j[f].length === 0 && f < j.length - 1 && f++; return typeof d == "string" ? d : d.length === 1 ? d[0] : d } } function r() { c > k && (j[f] = j[f].slice(c - k), k = c) } function q() { j[f] = g, c = h, k = c } function p() { g = j[f], h = c, k = c } var b, c, f, g, h, i, j, k, l, m = this, n = function () { }, o = this.imports = { paths: a && a.paths || [], queue: [], files: {}, mime: a && a.mime, push: function (b, c) { var e = this; this.queue.push(b), d.Parser.importer(b, this.paths, function (a) { e.queue.splice(e.queue.indexOf(b), 1), e.files[b] = a, c(a), e.queue.length === 0 && n() }, a) } }; this.env = a = a || {}, this.optimization = "optimization" in this.env ? this.env.optimization : 1, this.env.filename = this.env.filename || null; return l = { imports: o, parse: function (d, g) { var h, l, m, o, p, q, r = [], t, u = null; c = f = k = i = 0, j = [], b = d.replace(/\r\n/g, "\n"), j = function (c) { var d = 0, e = /[^"'`\{\}\/\(\)]+/g, f = /\/\*(?:[^*]|\*+[^\/*])*\*+\/|\/\/.*/g, g = 0, h, i = c[0], j, k; for (var l = 0, m, n; l < b.length; l++) { e.lastIndex = l, (h = e.exec(b)) && h.index === l && (l += h[0].length, i.push(h[0])), m = b.charAt(l), f.lastIndex = l, !k && !j && m === "/" && (n = b.charAt(l + 1), (n === "/" || n === "*") && (h = f.exec(b)) && h.index === l && (l += h[0].length, i.push(h[0]), m = b.charAt(l))); if (m === "{" && !k && !j) g++, i.push(m); else if (m === "}" && !k && !j) g--, i.push(m), c[++d] = i = []; else if (m === "(" && !k && !j) i.push(m), j = !0; else if (m === ")" && !k && j) i.push(m), j = !1; else { if (m === '"' || m === "'" || m === "`") k ? k = k === m ? !1 : k : k = m; i.push(m) } } if (g > 0) throw { type: "Syntax", message: "Missing closing `}`", filename: a.filename }; return c.map(function (a) { return a.join("") }) } ([[]]), h = new e.Ruleset([], s(this.parsers.primary)), h.root = !0, h.toCSS = function (c) { var d, f, g; return function (g, h) { function n(a) { return a ? (b.slice(0, a).match(/\n/g) || "").length : null } var i = []; g = g || {}, typeof h == "object" && !Array.isArray(h) && (h = Object.keys(h).map(function (a) { var b = h[a]; b instanceof e.Value || (b instanceof e.Expression || (b = new e.Expression([b])), b = new e.Value([b])); return new e.Rule("@" + a, b, !1, 0) }), i = [new e.Ruleset(null, h)]); try { var j = c.call(this, { frames: i }).toCSS([], { compress: g.compress || !1 }) } catch (k) { f = b.split("\n"), d = n(k.index); for (var l = k.index, m = -1; l >= 0 && b.charAt(l) !== "\n"; l--) m++; throw { type: k.type, message: k.message, filename: a.filename, index: k.index, line: typeof d == "number" ? d + 1 : null, callLine: k.call && n(k.call) + 1, callExtract: f[n(k.call)], stack: k.stack, column: m, extract: [f[d - 1], f[d], f[d + 1]]} } return g.compress ? j.replace(/(\s)+/g, "$1") : j } } (h.eval); if (c < b.length - 1) { c = i, q = b.split("\n"), p = (b.slice(0, c).match(/\n/g) || "").length + 1; for (var v = c, w = -1; v >= 0 && b.charAt(v) !== "\n"; v--) w++; u = { name: "ParseError", message: "Syntax Error on line " + p, index: c, filename: a.filename, line: p, column: w, extract: [q[p - 2], q[p - 1], q[p]]} } this.imports.queue.length > 0 ? n = function () { g(u, h) } : g(u, h) }, parsers: { primary: function () { var a, b = []; while ((a = s(this.mixin.definition) || s(this.rule) || s(this.ruleset) || s(this.mixin.call) || s(this.comment) || s(this.directive)) || s(/^[\s\n]+/)) a && b.push(a); return b }, comment: function () { var a; if (b.charAt(c) === "/") { if (b.charAt(c + 1) === "/") return new e.Comment(s(/^\/\/.*/), !0); if (a = s(/^\/\*(?:[^*]|\*+[^\/*])*\*+\/\n?/)) return new e.Comment(a) } }, entities: { quoted: function () { var a, d = c, f; b.charAt(d) === "~" && (d++, f = !0); if (b.charAt(d) === '"' || b.charAt(d) === "'") { f && s("~"); if (a = s(/^"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'/)) return new e.Quoted(a[0], a[1] || a[2], f) } }, keyword: function () { var a; if (a = s(/^[A-Za-z-]+/)) return new e.Keyword(a) }, call: function () { var a, b; if (!!(a = /^([\w-]+|%)\(/.exec(j[f]))) { a = a[1].toLowerCase(); if (a === "url") return null; c += a.length; if (a === "alpha") return s(this.alpha); s("("), b = s(this.entities.arguments); if (!s(")")) return; if (a) return new e.Call(a, b) } }, arguments: function () { var a = [], b; while (b = s(this.expression)) { a.push(b); if (!s(",")) break } return a }, literal: function () { return s(this.entities.dimension) || s(this.entities.color) || s(this.entities.quoted) }, url: function () { var a; if (b.charAt(c) === "u" && !!s(/^url\(/)) { a = s(this.entities.quoted) || s(this.entities.variable) || s(this.entities.dataURI) || s(/^[-\w%@$\/.&=:;#+?~]+/) || ""; if (!s(")")) throw new Error("missing closing ) for url()"); return new e.URL(a.value || a.data || a instanceof e.Variable ? a : new e.Anonymous(a), o.paths) } }, dataURI: function () { var a; if (s(/^data:/)) { a = {}, a.mime = s(/^[^\/]+\/[^,;)]+/) || "", a.charset = s(/^;\s*charset=[^,;)]+/) || "", a.base64 = s(/^;\s*base64/) || "", a.data = s(/^,\s*[^)]+/); if (a.data) return a } }, variable: function () { var a, d = c; if (b.charAt(c) === "@" && (a = s(/^@@?[\w-]+/))) return new e.Variable(a, d) }, color: function () { var a; if (b.charAt(c) === "#" && (a = s(/^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})/))) return new e.Color(a[1]) }, dimension: function () { var a, d = b.charCodeAt(c); if (!(d > 57 || d < 45 || d === 47)) if (a = s(/^(-?\d*\.?\d+)(px|%|em|pc|ex|in|deg|s|ms|pt|cm|mm|rad|grad|turn)?/)) return new e.Dimension(a[1], a[2]) }, javascript: function () { var a, d = c, f; b.charAt(d) === "~" && (d++, f = !0); if (b.charAt(d) === "`") { f && s("~"); if (a = s(/^`([^`]*)`/)) return new e.JavaScript(a[1], c, f) } } }, variable: function () { var a; if (b.charAt(c) === "@" && (a = s(/^(@[\w-]+)\s*:/))) return a[1] }, shorthand: function () { var a, b; if (!!t(/^[@\w.%-]+\/[@\w.-]+/) && (a = s(this.entity)) && s("/") && (b = s(this.entity))) return new e.Shorthand(a, b) }, mixin: { call: function () { var a = [], d, f, g, h = c, i = b.charAt(c); if (i === "." || i === "#") { while (d = s(/^[#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/)) a.push(new e.Element(f, d)), f = s(">"); s("(") && (g = s(this.entities.arguments)) && s(")"); if (a.length > 0 && (s(";") || t("}"))) return new e.mixin.Call(a, g, h) } }, definition: function () { var a, d = [], f, g, h, i; if (!(b.charAt(c) !== "." && b.charAt(c) !== "#" || t(/^[^{]*(;|})/))) if (f = s(/^([#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+)\s*\(/)) { a = f[1]; while (h = s(this.entities.variable) || s(this.entities.literal) || s(this.entities.keyword)) { if (h instanceof e.Variable) if (s(":")) if (i = s(this.expression)) d.push({ name: h.name, value: i }); else throw new Error("Expected value"); else d.push({ name: h.name }); else d.push({ value: h }); if (!s(",")) break } if (!s(")")) throw new Error("Expected )"); g = s(this.block); if (g) return new e.mixin.Definition(a, d, g) } } }, entity: function () { return s(this.entities.literal) || s(this.entities.variable) || s(this.entities.url) || s(this.entities.call) || s(this.entities.keyword) || s(this.entities.javascript) || s(this.comment) }, end: function () { return s(";") || t("}") }, alpha: function () { var a; if (!!s(/^opacity=/i)) if (a = s(/^\d+/) || s(this.entities.variable)) { if (!s(")")) throw new Error("missing closing ) for alpha()"); return new e.Alpha(a) } }, element: function () { var a, b, c; c = s(this.combinator), a = s(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/) || s("*") || s(this.attribute) || s(/^\([^)@]+\)/); if (a) return new e.Element(c, a) }, combinator: function () { var a, d = b.charAt(c); if (d === ">" || d === "&" || d === "+" || d === "~") { c++; while (b.charAt(c) === " ") c++; return new e.Combinator(d) } if (d === ":" && b.charAt(c + 1) === ":") { c += 2; while (b.charAt(c) === " ") c++; return new e.Combinator("::") } return b.charAt(c - 1) === " " ? new e.Combinator(" ") : new e.Combinator(null) }, selector: function () { var a, d, f = [], g, h; while (d = s(this.element)) { g = b.charAt(c), f.push(d); if (g === "{" || g === "}" || g === ";" || g === ",") break } if (f.length > 0) return new e.Selector(f) }, tag: function () { return s(/^[a-zA-Z][a-zA-Z-]*[0-9]?/) || s("*") }, attribute: function () { var a = "", b, c, d; if (!!s("[")) { if (b = s(/^[a-zA-Z-]+/) || s(this.entities.quoted)) (d = s(/^[|~*$^]?=/)) && (c = s(this.entities.quoted) || s(/^[\w-]+/)) ? a = [b, d, c.toCSS ? c.toCSS() : c].join("") : a = b; if (!s("]")) return; if (a) return "[" + a + "]" } }, block: function () { var a; if (s("{") && (a = s(this.primary)) && s("}")) return a }, ruleset: function () { var a = [], b, d, g; p(); if (g = /^([.#: \w-]+)[\s\n]*\{/.exec(j[f])) c += g[0].length - 1, a = [new e.Selector([new e.Element(null, g[1])])]; else while (b = s(this.selector)) { a.push(b), s(this.comment); if (!s(",")) break; s(this.comment) } if (a.length > 0 && (d = s(this.block))) return new e.Ruleset(a, d); i = c, q() }, rule: function () { var a, d, g = b.charAt(c), k, l; p(); if (g !== "." && g !== "#" && g !== "&") if (a = s(this.variable) || s(this.property)) { a.charAt(0) != "@" && (l = /^([^@+\/'"*`(;{}-]*);/.exec(j[f])) ? (c += l[0].length - 1, d = new e.Anonymous(l[1])) : a === "font" ? d = s(this.font) : d = s(this.value), k = s(this.important); if (d && s(this.end)) return new e.Rule(a, d, k, h); i = c, q() } }, "import": function () { var a; if (s(/^@import\s+/) && (a = s(this.entities.quoted) || s(this.entities.url)) && s(";")) return new e.Import(a, o) }, directive: function () { var a, d, f, g; if (b.charAt(c) === "@") { if (d = s(this["import"])) return d; if (a = s(/^@media|@page|@-[-a-z]+/)) { g = (s(/^[^{]+/) || "").trim(); if (f = s(this.block)) return new e.Directive(a + " " + g, f) } else if (a = s(/^@[-a-z]+/)) if (a === "@font-face") { if (f = s(this.block)) return new e.Directive(a, f) } else if ((d = s(this.entity)) && s(";")) return new e.Directive(a, d) } }, font: function () { var a = [], b = [], c, d, f, g; while (g = s(this.shorthand) || s(this.entity)) b.push(g); a.push(new e.Expression(b)); if (s(",")) while (g = s(this.expression)) { a.push(g); if (!s(",")) break } return new e.Value(a) }, value: function () { var a, b = [], c; while (a = s(this.expression)) { b.push(a); if (!s(",")) break } if (b.length > 0) return new e.Value(b) }, important: function () { if (b.charAt(c) === "!") return s(/^! *important/) }, sub: function () { var a; if (s("(") && (a = s(this.expression)) && s(")")) return a }, multiplication: function () { var a, b, c, d; if (a = s(this.operand)) { while ((c = s("/") || s("*")) && (b = s(this.operand))) d = new e.Operation(c, [d || a, b]); return d || a } }, addition: function () { var a, d, f, g; if (a = s(this.multiplication)) { while ((f = s(/^[-+]\s+/) || b.charAt(c - 1) != " " && (s("+") || s("-"))) && (d = s(this.multiplication))) g = new e.Operation(f, [g || a, d]); return g || a } }, operand: function () { var a, d = b.charAt(c + 1); b.charAt(c) === "-" && (d === "@" || d === "(") && (a = s("-")); var f = s(this.sub) || s(this.entities.dimension) || s(this.entities.color) || s(this.entities.variable) || s(this.entities.call); return a ? new e.Operation("*", [new e.Dimension(-1), f]) : f }, expression: function () { var a, b, c = [], d; while (a = s(this.addition) || s(this.entity)) c.push(a); if (c.length > 0) return new e.Expression(c) }, property: function () { var a; if (a = s(/^(\*?-?[-a-z_0-9]+)\s*:/)) return a[1] } }} }, typeof a != "undefined" && (d.Parser.importer = function (a, b, c, d) { a.charAt(0) !== "/" && b.length > 0 && (a = b[0] + a), o({ href: a, title: a, type: d.mime }, c, !0) }), function (a) { function d(a) { return Math.min(1, Math.max(0, a)) } function c(b) { if (b instanceof a.Dimension) return parseFloat(b.unit == "%" ? b.value / 100 : b.value); if (typeof b == "number") return b; throw { error: "RuntimeError", message: "color functions take numbers as parameters"} } function b(b) { return a.functions.hsla(b.h, b.s, b.l, b.a) } a.functions = { rgb: function (a, b, c) { return this.rgba(a, b, c, 1) }, rgba: function (b, d, e, f) { var g = [b, d, e].map(function (a) { return c(a) }), f = c(f); return new a.Color(g, f) }, hsl: function (a, b, c) { return this.hsla(a, b, c, 1) }, hsla: function (a, b, d, e) { function h(a) { a = a < 0 ? a + 1 : a > 1 ? a - 1 : a; return a * 6 < 1 ? g + (f - g) * a * 6 : a * 2 < 1 ? f : a * 3 < 2 ? g + (f - g) * (2 / 3 - a) * 6 : g } a = c(a) % 360 / 360, b = c(b), d = c(d), e = c(e); var f = d <= .5 ? d * (b + 1) : d + b - d * b, g = d * 2 - f; return this.rgba(h(a + 1 / 3) * 255, h(a) * 255, h(a - 1 / 3) * 255, e) }, hue: function (b) { return new a.Dimension(Math.round(b.toHSL().h)) }, saturation: function (b) { return new a.Dimension(Math.round(b.toHSL().s * 100), "%") }, alpha: function (b) { return new a.Dimension(b.toHSL().a) }, saturate: function (a, c) { var e = a.toHSL(); e.s += c.value / 100, e.s = d(e.s); return b(e) }, desaturate: function (a, c) { var e = a.toHSL(); e.s -= c.value / 100, e.s = d(e.s); return b(e) }, lightness: function (a, c) { var e = a.toHSL(); e.l += c.value / 100, e.l = d(e.l); return b(e) }, darken: function (a, c) { var e = a.toHSL(); e.l -= c.value / 100, e.l = d(e.l); return b(e) }, fadein: function (a, c) { var e = a.toHSL(); e.a += c.value / 100, e.a = d(e.a); return b(e) }, fadeout: function (a, c) { var e = a.toHSL(); e.a -= c.value / 100, e.a = d(e.a); return b(e) }, spin: function (a, c) { var d = a.toHSL(), e = (d.h + c.value) % 360; d.h = e < 0 ? 360 + e : e; return b(d) }, mix: function (b, c, d) { var e = d.value / 100, f = e * 2 - 1, g = b.toHSL().a - c.toHSL().a, h = ((f * g == -1 ? f : (f + g) / (1 + f * g)) + 1) / 2, i = 1 - h, j = [b.rgb[0] * h + c.rgb[0] * i, b.rgb[1] * h + c.rgb[1] * i, b.rgb[2] * h + c.rgb[2] * i], k = b.alpha * e + c.alpha * (1 - e); return new a.Color(j, k) }, greyscale: function (b) { return this.desaturate(b, new a.Dimension(100)) }, formatstring: function (x, y, z) { return new (a.Anonymous)(x.value.replace(/\{0\}/, y ? y.toCSS() : '').replace(/\{1\}/, z ? z.toCSS() : '')) }, e: function (b) { return new a.Anonymous(b instanceof a.JavaScript ? b.evaluated : b) }, escape: function (b) { return new a.Anonymous(encodeURI(b.value).replace(/=/g, "%3D").replace(/:/g, "%3A").replace(/#/g, "%23").replace(/;/g, "%3B").replace(/\(/g, "%28").replace(/\)/g, "%29")) }, "%": function (b) { var c = Array.prototype.slice.call(arguments, 1), d = b.value; for (var e = 0; e < c.length; e++) d = d.replace(/%[sda]/i, function (a) { var b = a.match(/s/i) ? c[e].value : c[e].toCSS(); return a.match(/[A-Z]$/) ? encodeURIComponent(b) : b }); d = d.replace(/%%/g, "%"); return new a.Quoted('"' + d + '"', d) }, round: function (b) { if (b instanceof a.Dimension) return new a.Dimension(Math.round(c(b)), b.unit); if (typeof b == "number") return Math.round(b); throw { error: "RuntimeError", message: "math functions take numbers as parameters"} } } } (c("less/tree")), function (a) { a.Alpha = function (a) { this.value = a }, a.Alpha.prototype = { toCSS: function () { return "alpha(opacity=" + (this.value.toCSS ? this.value.toCSS() : this.value) + ")" }, eval: function () { return this } } } (c("less/tree")), function (a) { a.Anonymous = function (a) { this.value = a.value || a }, a.Anonymous.prototype = { toCSS: function () { return this.value }, eval: function () { return this } } } (c("less/tree")), function (a) { a.Call = function (a, b) { this.name = a, this.args = b }, a.Call.prototype = { eval: function (b) { var c = this.args.map(function (a) { return a.eval(b) }); return this.name in a.functions ? a.functions[this.name].apply(a.functions, c) : new a.Anonymous(this.name + "(" + c.map(function (a) { return a.toCSS() }).join(", ") + ")") }, toCSS: function (a) { return this.eval(a).toCSS() } } } (c("less/tree")), function (a) { a.Color = function (a, b) { Array.isArray(a) ? this.rgb = a : a.length == 6 ? this.rgb = a.match(/.{2}/g).map(function (a) { return parseInt(a, 16) }) : a.length == 8 ? (this.alpha = parseInt(a.substring(0, 2), 16) / 255, this.rgb = a.substr(2).match(/.{2}/g).map(function (a) { return parseInt(a, 16) })) : this.rgb = a.split("").map(function (a) { return parseInt(a + a, 16) }), this.alpha = typeof b == "number" ? b : 1 }, a.Color.prototype = { eval: function () { return this }, toCSS: function () { return this.alpha < 1 ? "rgba(" + this.rgb.map(function (a) { return Math.round(a) }).concat(this.alpha).join(", ") + ")" : "#" + this.rgb.map(function (a) { a = Math.round(a), a = (a > 255 ? 255 : a < 0 ? 0 : a).toString(16); return a.length === 1 ? "0" + a : a }).join("") }, operate: function (b, c) { var d = []; c instanceof a.Color || (c = c.toColor()); for (var e = 0; e < 3; e++) d[e] = a.operate(b, this.rgb[e], c.rgb[e]); return new a.Color(d, this.alpha + c.alpha) }, toHSL: function () { var a = this.rgb[0] / 255, b = this.rgb[1] / 255, c = this.rgb[2] / 255, d = this.alpha, e = Math.max(a, b, c), f = Math.min(a, b, c), g, h, i = (e + f) / 2, j = e - f; if (e === f) g = h = 0; else { h = i > .5 ? j / (2 - e - f) : j / (e + f); switch (e) { case a: g = (b - c) / j + (b < c ? 6 : 0); break; case b: g = (c - a) / j + 2; break; case c: g = (a - b) / j + 4 } g /= 6 } return { h: g * 360, s: h, l: i, a: d} } } } (c("less/tree")), function (a) { a.Comment = function (a, b) { this.value = a, this.silent = !!b }, a.Comment.prototype = { toCSS: function (a) { return a.compress ? "" : this.value }, eval: function () { return this } } } (c("less/tree")), function (a) { a.Dimension = function (a, b) { this.value = parseFloat(a), this.unit = b || null }, a.Dimension.prototype = { eval: function () { return this }, toColor: function () { return new a.Color([this.value, this.value, this.value]) }, toCSS: function () { var a = this.value + this.unit; return a }, operate: function (b, c) { return new a.Dimension(a.operate(b, this.value, c.value), this.unit || c.unit) } } } (c("less/tree")), function (a) { a.Directive = function (b, c) { this.name = b, Array.isArray(c) ? this.ruleset = new a.Ruleset([], c) : this.value = c }, a.Directive.prototype = { toCSS: function (a, b) { if (this.ruleset) { this.ruleset.root = !0; return this.name + (b.compress ? "{" : " {\n ") + this.ruleset.toCSS(a, b).trim().replace(/\n/g, "\n ") + (b.compress ? "}" : "\n}\n") } return this.name + " " + this.value.toCSS() + ";\n" }, eval: function (a) { a.frames.unshift(this), this.ruleset = this.ruleset && this.ruleset.eval(a), a.frames.shift(); return this }, variable: function (b) { return a.Ruleset.prototype.variable.call(this.ruleset, b) }, find: function () { return a.Ruleset.prototype.find.apply(this.ruleset, arguments) }, rulesets: function () { return a.Ruleset.prototype.rulesets.apply(this.ruleset) } } } (c("less/tree")), function (a) { a.Element = function (b, c) { this.combinator = b instanceof a.Combinator ? b : new a.Combinator(b), this.value = c.trim() }, a.Element.prototype.toCSS = function (a) { return this.combinator.toCSS(a || {}) + this.value }, a.Combinator = function (a) { a === " " ? this.value = " " : this.value = a ? a.trim() : "" }, a.Combinator.prototype.toCSS = function (a) { return { "": "", " ": " ", "&": "", ":": " :", "::": "::", "+": a.compress ? "+" : " + ", "~": a.compress ? "~" : " ~ ", ">": a.compress ? ">" : " > "}[this.value] } } (c("less/tree")), function (a) { a.Expression = function (a) { this.value = a }, a.Expression.prototype = { eval: function (b) { return this.value.length > 1 ? new a.Expression(this.value.map(function (a) { return a.eval(b) })) : this.value[0].eval(b) }, toCSS: function (a) { return this.value.map(function (b) { return b.toCSS(a) }).join(" ") } } } (c("less/tree")), function (a) { a.Import = function (b, c) { var d = this; this._path = b, b instanceof a.Quoted ? this.path = /\.(le?|c)ss$/.test(b.value) ? b.value : b.value + ".less" : this.path = b.value.value || b.value, this.css = /css$/.test(this.path), this.css || c.push(this.path, function (a) { if (!a) throw new Error("Error parsing " + d.path); d.root = a }) }, a.Import.prototype = { toCSS: function () { return this.css ? "@import " + this._path.toCSS() + ";\n" : "" }, eval: function (b) { var c; if (this.css) return this; c = new a.Ruleset(null, this.root.rules.slice(0)); for (var d = 0; d < c.rules.length; d++) c.rules[d] instanceof a.Import && Array.prototype.splice.apply(c.rules, [d, 1].concat(c.rules[d].eval(b))); return c.rules } } } (c("less/tree")), function (a) { a.JavaScript = function (a, b, c) { this.escaped = c, this.expression = a, this.index = b }, a.JavaScript.prototype = { toCSS: function () { return this.escaped ? this.evaluated : JSON.stringify(this.evaluated) }, eval: function (b) { var c, d = {}, e = this.expression.replace(/@\{([\w-]+)\}/g, function (c, d) { return (new a.Variable("@" + d)).eval(b).value }); e = new Function("return (" + e + ")"); for (var f in b.frames[0].variables()) d[f.slice(1)] = { value: b.frames[0].variables()[f].value, toJS: function () { return this.value.eval(b).toCSS() } }; try { this.evaluated = e.call(d) } catch (g) { throw { message: "JavaScript evaluation error: '" + g.name + ": " + g.message + "'", index: this.index} } return this } } } (c("less/tree")), function (a) { a.Keyword = function (a) { this.value = a }, a.Keyword.prototype = { eval: function () { return this }, toCSS: function () { return this.value } } } (c("less/tree")), function (a) { a.mixin = {}, a.mixin.Call = function (b, c, d) { this.selector = new a.Selector(b), this.arguments = c, this.index = d }, a.mixin.Call.prototype = { eval: function (a) { var b, c = [], d = !1; for (var e = 0; e < a.frames.length; e++) if ((b = a.frames[e].find(this.selector)).length > 0) { for (var f = 0; f < b.length; f++) if (b[f].match(this.arguments, a)) try { Array.prototype.push.apply(c, b[f].eval(a, this.arguments).rules), d = !0 } catch (g) { throw { message: g.message, index: g.index, stack: g.stack, call: this.index} } if (d) return c; throw { message: "No matching definition was found for `" + this.selector.toCSS().trim() + "(" + this.arguments.map(function (a) { return a.toCSS() }).join(", ") + ")`", index: this.index} } throw { message: this.selector.toCSS().trim() + " is undefined", index: this.index} } }, a.mixin.Definition = function (b, c, d) { this.name = b, this.selectors = [new a.Selector([new a.Element(null, b)])], this.params = c, this.arity = c.length, this.rules = d, this._lookups = {}, this.required = c.reduce(function (a, b) { return !b.name || b.name && !b.value ? a + 1 : a }, 0), this.parent = a.Ruleset.prototype, this.frames = [] }, a.mixin.Definition.prototype = { toCSS: function () { return "" }, variable: function (a) { return this.parent.variable.call(this, a) }, variables: function () { return this.parent.variables.call(this) }, find: function () { return this.parent.find.apply(this, arguments) }, rulesets: function () { return this.parent.rulesets.apply(this) }, eval: function (b, c) { var d = new a.Ruleset(null, []), e, f = []; for (var g = 0, h; g < this.params.length; g++) if (this.params[g].name) if (h = c && c[g] || this.params[g].value) d.rules.unshift(new a.Rule(this.params[g].name, h.eval(b))); else throw { message: "wrong number of arguments for " + this.name + " (" + c.length + " for " + this.arity + ")" }; for (var g = 0; g < Math.max(this.params.length, c && c.length); g++) f.push(c[g] || this.params[g].value); d.rules.unshift(new a.Rule("@arguments", new a.Expression(f))); return (new a.Ruleset(null, this.rules.slice(0))).eval({ frames: [this, d].concat(this.frames, b.frames) }) }, match: function (a, b) { var c = a && a.length || 0, d; if (c < this.required) return !1; if (this.required > 0 && c > this.params.length) return !1; d = Math.min(c, this.arity); for (var e = 0; e < d; e++) if (!this.params[e].name && a[e].eval(b).toCSS() != this.params[e].value.eval(b).toCSS()) return !1; return !0 } } } (c("less/tree")), function (a) { a.Operation = function (a, b) { this.op = a.trim(), this.operands = b }, a.Operation.prototype.eval = function (b) { var c = this.operands[0].eval(b), d = this.operands[1].eval(b), e; if (c instanceof a.Dimension && d instanceof a.Color) if (this.op === "*" || this.op === "+") e = d, d = c, c = e; else throw { name: "OperationError", message: "Can't substract or divide a color from a number" }; return c.operate(this.op, d) }, a.operate = function (a, b, c) { switch (a) { case "+": return b + c; case "-": return b - c; case "*": return b * c; case "/": return b / c } } } (c("less/tree")), function (a) { a.Quoted = function (a, b, c, d) { this.escaped = c, this.value = b || "", this.quote = a.charAt(0), this.index = d }, a.Quoted.prototype = { toCSS: function () { return this.escaped ? this.value : this.quote + this.value + this.quote }, eval: function (b) { this.value = this.value.replace(/@\{([\w-]+)\}/g, function (c, d) { return (new a.Variable("@" + d)).eval(b).value }).replace(/`([^`]+)`/g, function (c, d) { return (new a.JavaScript(d, this.index, !0)).eval(b).toCSS() }); return this } } } (c("less/tree")), function (a) { a.Rule = function (b, c, d, e) { this.name = b, this.value = c instanceof a.Value ? c : new a.Value([c]), this.important = d ? " " + d.trim() : "", this.index = e, b.charAt(0) === "@" ? this.variable = !0 : this.variable = !1 }, a.Rule.prototype.toCSS = function (a) { return this.variable ? "" : this.name + (a.compress ? ":" : ": ") + this.value.toCSS(a) + this.important + ";" }, a.Rule.prototype.eval = function (b) { return new a.Rule(this.name, this.value.eval(b), this.important, this.index) }, a.Shorthand = function (a, b) { this.a = a, this.b = b }, a.Shorthand.prototype = { toCSS: function (a) { return this.a.toCSS(a) + "/" + this.b.toCSS(a) }, eval: function () { return this } } } (c("less/tree")), function (a) { a.Ruleset = function (a, b) { this.selectors = a, this.rules = b, this._lookups = {} }, a.Ruleset.prototype = { eval: function (b) { var c = new a.Ruleset(this.selectors, this.rules.slice(0)); c.root = this.root, b.frames.unshift(c); if (c.root) for (var d = 0; d < c.rules.length; d++) c.rules[d] instanceof a.Import && Array.prototype.splice.apply(c.rules, [d, 1].concat(c.rules[d].eval(b))); for (var d = 0; d < c.rules.length; d++) c.rules[d] instanceof a.mixin.Definition && (c.rules[d].frames = b.frames.slice(0)); for (var d = 0; d < c.rules.length; d++) c.rules[d] instanceof a.mixin.Call && Array.prototype.splice.apply(c.rules, [d, 1].concat(c.rules[d].eval(b))); for (var d = 0, e; d < c.rules.length; d++) e = c.rules[d], e instanceof a.mixin.Definition || (c.rules[d] = e.eval ? e.eval(b) : e); b.frames.shift(); return c }, match: function (a) { return !a || a.length === 0 }, variables: function () { return this._variables ? this._variables : this._variables = this.rules.reduce(function (b, c) { c instanceof a.Rule && c.variable === !0 && (b[c.name] = c); return b }, {}) }, variable: function (a) { return this.variables()[a] }, rulesets: function () { return this._rulesets ? this._rulesets : this._rulesets = this.rules.filter(function (b) { return b instanceof a.Ruleset || b instanceof a.mixin.Definition }) }, find: function (b, c) { c = c || this; var d = [], e, f, g = b.toCSS(); if (g in this._lookups) return this._lookups[g]; this.rulesets().forEach(function (e) { if (e !== c) for (var g = 0; g < e.selectors.length; g++) if (f = b.match(e.selectors[g])) { b.elements.length > 1 ? Array.prototype.push.apply(d, e.find(new a.Selector(b.elements.slice(1)), c)) : d.push(e); break } }); return this._lookups[g] = d }, toCSS: function (b, c) { var d = [], e = [], f = [], g = [], h, i; if (!this.root) if (b.length === 0) g = this.selectors.map(function (a) { return [a] }); else for (var j = 0; j < this.selectors.length; j++) for (var k = 0; k < b.length; k++) g.push(b[k].concat([this.selectors[j]])); for (var l = 0; l < this.rules.length; l++) i = this.rules[l], i.rules || i instanceof a.Directive ? f.push(i.toCSS(g, c)) : i instanceof a.Comment ? i.silent || (this.root ? f.push(i.toCSS(c)) : e.push(i.toCSS(c))) : i.toCSS && !i.variable ? e.push(i.toCSS(c)) : i.value && !i.variable && e.push(i.value.toString()); f = f.join(""), this.root ? d.push(e.join(c.compress ? "" : "\n")) : e.length > 0 && (h = g.map(function (a) { return a.map(function (a) { return a.toCSS(c) }).join("").trim() }).join(c.compress ? "," : g.length > 3 ? ",\n" : ", "), d.push(h, (c.compress ? "{" : " {\n ") + e.join(c.compress ? "" : "\n ") + (c.compress ? "}" : "\n}\n"))), d.push(f); return d.join("") + (c.compress ? "\n" : "") } } } (c("less/tree")), function (a) { a.Selector = function (a) { this.elements = a, this.elements[0].combinator.value === "" && (this.elements[0].combinator.value = " ") }, a.Selector.prototype.match = function (a) { return this.elements[0].value === a.elements[0].value ? !0 : !1 }, a.Selector.prototype.toCSS = function (a) { if (this._css) return this._css; return this._css = this.elements.map(function (b) { return typeof b == "string" ? " " + b.trim() : b.toCSS(a) }).join("") } } (c("less/tree")), function (b) { b.URL = function (b, c) { b.data ? this.attrs = b : (!/^(?:https?:\/|file:\/|data:\/)?\//.test(b.value) && c.length > 0 && typeof a != "undefined" && (b.value = c[0] + (b.value.charAt(0) === "/" ? b.value.slice(1) : b.value)), this.value = b, this.paths = c) }, b.URL.prototype = { toCSS: function () { return "url(" + (this.attrs ? "data:" + this.attrs.mime + this.attrs.charset + this.attrs.base64 + this.attrs.data : this.value.toCSS()) + ")" }, eval: function (a) { return this.attrs ? this : new b.URL(this.value.eval(a), this.paths) } } } (c("less/tree")), function (a) { a.Value = function (a) { this.value = a, this.is = "value" }, a.Value.prototype = { eval: function (b) { return this.value.length === 1 ? this.value[0].eval(b) : new a.Value(this.value.map(function (a) { return a.eval(b) })) }, toCSS: function (a) { return this.value.map(function (b) { return b.toCSS(a) }).join(a.compress ? "," : ", ") } } } (c("less/tree")), function (a) { a.Variable = function (a, b) { this.name = a, this.index = b }, a.Variable.prototype = { eval: function (b) { var c, d, e = this.name; e.indexOf("@@") == 0 && (e = "@" + (new a.Variable(e.slice(1))).eval(b).value); if (c = a.find(b.frames, function (a) { if (d = a.variable(e)) return d.value.eval(b) })) return c; throw { message: "variable " + e + " is undefined", index: this.index} } } } (c("less/tree")), c("less/tree").find = function (a, b) { for (var c = 0, d; c < a.length; c++) if (d = b.call(a, a[c])) return d; return null }; var g = location.protocol === "file:" || location.protocol === "chrome:" || location.protocol === "resource:"; d.env = d.env || (location.hostname == "127.0.0.1" ||
location.hostname == "0.0.0.0" || location.hostname == "localhost" || location.port.length > 0 || g ? "development" : "production"), d.async = !1, d.poll = d.poll || (g ? 1e3 : 1500), d.watch = function () { return this.watchMode = !0 }, d.unwatch = function () { return this.watchMode = !1 }, d.env === "development" ? (d.optimization = 0, /!watch/.test(location.hash) && d.watch(), d.watchTimer = setInterval(function () { d.watchMode && n(function (a, b, c) { a && q(a.toCSS(), b, c.lastModified) }) }, d.poll)) : d.optimization = 3; var h; try { h = typeof a.localStorage == "undefined" ? null : a.localStorage } catch (i) { h = null } var j = document.getElementsByTagName("link"), k = /^text\/(x-)?less$/; d.sheets = []; for (var l = 0; l < j.length; l++) (j[l].rel === "stylesheet/less" || j[l].rel.match(/stylesheet/) && j[l].type.match(k)) && d.sheets.push(j[l]); d.refresh = function (a) { var b, c; b = c = new Date, n(function (a, d, e) { e.local ? u("loading " + d.href + " from cache.") : (u("parsed " + d.href + " successfully."), q(a.toCSS(), d, e.lastModified)), u("css for " + d.href + " generated in " + (new Date - c) + "ms"), e.remaining === 0 && u("css generated in " + (new Date - b) + "ms"), c = new Date }, a), m() }, d.refreshStyles = m, d.refresh(d.env === "development")
})(window)