-
-
Save indutny/6073202c100f4df2599a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// | |
/// Generated code | |
/// See benchmarking code below | |
/// | |
var BEMHTML = function() { | |
var cache, | |
xjst = (function(exports) { | |
function $38(__$ctx) { | |
return undefined; | |
return; | |
} | |
function $42(__$ctx) { | |
var __r67, __r68, __r69, __r70; | |
var _$18ctx = __$ctx.ctx, _$18props = [ "title", "target" ], _$18p = typeof _$18ctx.url, _$18a = { | |
href: _$18p === "undefined" || _$18p === "string" ? _$18ctx.url : (_$18p = '', "", __r67 = __$ctx._buf, __$ctx._buf = _$18p, __r68 = __$ctx._mode, __$ctx._mode = "", __r69 = __$ctx.ctx, __$ctx.ctx = _$18ctx.url, __r70 = applyc(__$ctx), _$18p = __$ctx._buf, __$ctx._buf = __r67, __$ctx._mode = __r68, __$ctx.ctx = __r69, "", __r70, _$18p) | |
}; | |
while (_$18p = _$18props.pop()) { | |
_$18ctx[_$18p] && (_$18a[_$18p] = _$18ctx[_$18p]); | |
} | |
return _$18a; | |
return; | |
} | |
function $63(__$ctx) { | |
return undefined; | |
return; | |
} | |
function $86(__$ctx) { | |
return undefined; | |
return; | |
} | |
function $92(__$ctx) { | |
var _$11ie = __$ctx.ctx.ie; | |
if (_$11ie === true) { | |
{ | |
""; | |
var __r61 = __$ctx._mode; | |
__$ctx._mode = ""; | |
var __r62 = __$ctx.ctx; | |
__$ctx.ctx = [ 6, 7, 8, 9 ].map(function(v) { | |
return { | |
elem: "css", | |
url: this.ctx.url + ".ie" + v + ".css", | |
ie: "IE " + v | |
}; | |
}, __$ctx); | |
applyc(__$ctx); | |
__$ctx._mode = __r61; | |
__$ctx.ctx = __r62; | |
""; | |
} | |
undefined; | |
} else { | |
var _$11hideRule = !_$11ie ? [ "gt IE 9", "<!-->", "<!--" ] : _$11ie === "!IE" ? [ _$11ie, "<!-->", "<!--" ] : [ _$11ie, "", "" ]; | |
{ | |
""; | |
var __r63 = __$ctx._mode; | |
__$ctx._mode = ""; | |
var __r64 = __$ctx.ctx, __r65 = __r64._ieCommented; | |
__r64._ieCommented = true; | |
var __r66 = __$ctx.ctx; | |
__$ctx.ctx = [ "<!--[if " + _$11hideRule[0] + "]>", _$11hideRule[1], __$ctx.ctx, _$11hideRule[2], "<![endif]-->" ]; | |
applyc(__$ctx); | |
__$ctx._mode = __r63; | |
__r64._ieCommented = __r65; | |
__$ctx.ctx = __r66; | |
""; | |
} | |
undefined; | |
} | |
return; | |
} | |
function $97(__$ctx) { | |
if (!(__$ctx["__$anflg349244400"] !== true) === false) { | |
if (!!__$ctx.elem === false) { | |
return $100(__$ctx); | |
} else { | |
return $165(__$ctx); | |
} | |
} else { | |
return $165(__$ctx); | |
} | |
} | |
function $100(__$ctx) { | |
var __r52, __r53, __r54, __r55; | |
var _$lctx = __$ctx.ctx, _$ldtype = ("", __r52 = __$ctx._mode, __$ctx._mode = "doctype", __r53 = applyc(__$ctx), __$ctx._mode = __r52, "", __r53), _$lxUA = ("", __r54 = __$ctx._mode, __$ctx._mode = "xUACompatible", __r55 = applyc(__$ctx), __$ctx._mode = __r54, "", __r55), _$lbuf = [ _$ldtype, { | |
elem: "root", | |
content: [ { | |
elem: "head", | |
content: [ { | |
tag: "meta", | |
attrs: { | |
charset: "utf-8" | |
} | |
}, _$lxUA, { | |
tag: "title", | |
content: _$lctx.title | |
}, _$lctx.favicon ? { | |
elem: "favicon", | |
url: _$lctx.favicon | |
} : "", _$lctx.meta, { | |
block: "i-ua" | |
}, _$lctx.head ] | |
}, _$lctx ] | |
} ]; | |
{ | |
""; | |
var __r56 = __$ctx["__$anflg349244400"]; | |
__$ctx["__$anflg349244400"] = true; | |
{ | |
""; | |
var __r57 = __$ctx.ctx; | |
__$ctx.ctx = _$lbuf; | |
var __r58 = __$ctx._mode; | |
__$ctx._mode = ""; | |
applyc(__$ctx); | |
__$ctx.ctx = __r57; | |
__$ctx._mode = __r58; | |
""; | |
} | |
__$ctx["__$anflg349244400"] = __r56; | |
""; | |
} | |
undefined; | |
return; | |
} | |
function $107(__$ctx) { | |
var __r49, __r50, __r51; | |
return "", __r49 = __$ctx._mode, __$ctx._mode = "", __r50 = __$ctx.ctx, __$ctx.ctx = { | |
block: "b-page", | |
elem: "js", | |
url: "//yandex.st/jquery/1.7.2/jquery.min.js" | |
}, __r51 = applyc(__$ctx), __$ctx._mode = __r49, __$ctx.ctx = __r50, "", __r51; | |
return; | |
} | |
function $119(__$ctx) { | |
return undefined; | |
return; | |
} | |
function $127(__$ctx) { | |
return undefined; | |
return; | |
} | |
function $131(__$ctx) { | |
return __$ctx.ctx["x-ua-compatible"] === false ? false : { | |
tag: "meta", | |
attrs: { | |
"http-equiv": "X-UA-Compatible", | |
content: __$ctx.ctx["x-ua-compatible"] || "IE=edge" | |
} | |
}; | |
return; | |
} | |
function $147(__$ctx) { | |
return ';(function(d,e,c,r){e=d.documentElement;c="className";r="replace";e[c]=e[c][r]("i-ua_js_no","i-ua_js_yes");if(d.compatMode!="CSS1Compat")e[c]=e[c][r]("i-ua_css_standart","i-ua_css_quirks")})(document);'; | |
return; | |
} | |
function $151(__$ctx) { | |
return __$ctx.ctx.content; | |
return; | |
} | |
function $160(__$ctx) { | |
var __r47, __r48; | |
function _$6follow() { | |
if (this.ctx.link === "no-follow") { | |
return undefined; | |
} else { | |
undefined; | |
} | |
var data = this._links[this.ctx.link]; | |
return "", __r47 = this.ctx, this.ctx = data, __r48 = applyc(__$ctx), this.ctx = __r47, "", __r48; | |
} | |
if (!cache || !__$ctx._cacheLog) { | |
return _$6follow.call(__$ctx); | |
} else { | |
undefined; | |
} | |
var _$6contents = __$ctx._buf.slice(__$ctx._cachePos).join(""); | |
__$ctx._cachePos = __$ctx._buf.length; | |
__$ctx._cacheLog.push(_$6contents, { | |
log: __$ctx._localLog.slice(), | |
link: __$ctx.ctx.link | |
}); | |
var _$6res = _$6follow.call(__$ctx); | |
__$ctx._cachePos = __$ctx._buf.length; | |
return _$6res; | |
return; | |
} | |
function $165(__$ctx) { | |
switch (__$ctx._mode) { | |
case "default": | |
return $176(__$ctx); | |
break; | |
case "": | |
if (!__$ctx._.isArray(__$ctx.ctx) === false) { | |
return $185(__$ctx); | |
} else { | |
if (typeof __$ctx.ctx === 'object') { | |
return $188(__$ctx); | |
} else { | |
if (!__$ctx._.isSimple(__$ctx.ctx) === false) { | |
return $179(__$ctx); | |
} else { | |
if (!!__$ctx.ctx === false) { | |
__$ctx._listLength--; | |
return; | |
} else { | |
return $e(__$ctx); | |
} | |
} | |
} | |
} | |
break; | |
default: | |
return $e(__$ctx); | |
break; | |
} | |
} | |
function $169(__$ctx) { | |
var _$5cached; | |
function _$5setProperty(obj, key, value) { | |
if (key.length === 0) { | |
return undefined; | |
} else { | |
undefined; | |
} | |
if (Array.isArray(value)) { | |
var target = obj; | |
for (var i = 0; i < value.length - 1; i++) { | |
target = target[value[i]]; | |
} | |
value = target[value[i]]; | |
} else { | |
undefined; | |
} | |
var host = obj, previous; | |
for (var i = 0; i < key.length - 1; i++) { | |
host = host[key[i]]; | |
} | |
previous = host[key[i]]; | |
host[key[i]] = value; | |
return previous; | |
} | |
if (_$5cached = cache.get(__$ctx.ctx.cache)) { | |
var _$5oldLinks = __$ctx._links; | |
if (__$ctx.ctx.links) { | |
__$ctx._links = __$ctx.ctx.links; | |
} else { | |
undefined; | |
} | |
for (var _$5i = 0; _$5i < _$5cached.log.length; _$5i++) { | |
if (typeof _$5cached.log[_$5i] === "string") { | |
__$ctx._buf.push(_$5cached.log[_$5i]); | |
continue; | |
} else { | |
undefined; | |
} | |
var _$5log = _$5cached.log[_$5i], _$5reverseLog; | |
_$5reverseLog = _$5log.log.map(function(entry) { | |
return { | |
key: entry[0], | |
value: _$5setProperty(this, entry[0], entry[1]) | |
}; | |
}, __$ctx).reverse(); | |
{ | |
""; | |
var __r37 = __$ctx.ctx, __r38 = __r37.cache; | |
__r37.cache = null; | |
var __r39 = __$ctx._cacheLog; | |
__$ctx._cacheLog = null; | |
var __r40 = __$ctx.ctx, __r41 = __r40.link; | |
__r40.link = _$5log.link; | |
applyc(__$ctx); | |
__r37.cache = __r38; | |
__$ctx._cacheLog = __r39; | |
__r40.link = __r41; | |
""; | |
} | |
undefined; | |
_$5reverseLog.forEach(function(entry) { | |
_$5setProperty(this, entry.key, entry.value); | |
}, __$ctx); | |
} | |
__$ctx._links = _$5oldLinks; | |
return _$5cached.res; | |
} else { | |
undefined; | |
} | |
var _$5cacheLog = [], _$5res; | |
{ | |
""; | |
var __r42 = __$ctx.ctx, __r43 = __r42.cache; | |
__r42.cache = null; | |
var __r44 = __$ctx._cachePos; | |
__$ctx._cachePos = __$ctx._buf.length; | |
var __r45 = __$ctx._cacheLog; | |
__$ctx._cacheLog = _$5cacheLog; | |
var __r46 = __$ctx._localLog; | |
__$ctx._localLog = []; | |
{ | |
_$5res = applyc(__$ctx); | |
var _$5tail = __$ctx._buf.slice(__$ctx._cachePos).join(""); | |
if (_$5tail) { | |
_$5cacheLog.push(_$5tail); | |
} else { | |
undefined; | |
} | |
} | |
__r42.cache = __r43; | |
__$ctx._cachePos = __r44; | |
__$ctx._cacheLog = __r45; | |
__$ctx._localLog = __r46; | |
""; | |
} | |
cache.set(__$ctx.ctx.cache, { | |
log: _$5cacheLog, | |
res: _$5res | |
}); | |
return _$5res; | |
return; | |
} | |
function $176(__$ctx) { | |
var __r20, __r8, __r12, __r13, __r14, __r15, __r16, __r17, __r18, __r19, __r9, __r21, __r22, __r23, __r26, __r27, __r28, __r29, __r30, __r31; | |
var _$4_this = __$ctx, _$4BEM_ = _$4_this.BEM, _$4v = __$ctx.ctx, _$4tag; | |
_$4tag = ("", __r8 = __$ctx._mode, __$ctx._mode = "tag", __r9 = applyc(__$ctx), __$ctx._mode = __r8, "", __r9); | |
typeof _$4tag != "undefined" || (_$4tag = _$4v.tag); | |
typeof _$4tag != "undefined" || (_$4tag = "div"); | |
if (_$4tag) { | |
var _$4jsParams, _$4js; | |
if (__$ctx.block && _$4v.js !== false) { | |
_$4js = ("", __r12 = __$ctx._mode, __$ctx._mode = "js", __r13 = applyc(__$ctx), __$ctx._mode = __r12, "", __r13); | |
_$4js = _$4js ? __$ctx._.extend(_$4v.js, _$4js === true ? {} : _$4js) : _$4v.js === true ? {} : _$4v.js; | |
_$4js && ((_$4jsParams = {})[_$4BEM_.INTERNAL.buildClass(__$ctx.block, _$4v.elem)] = _$4js); | |
} else { | |
undefined; | |
} | |
__$ctx._buf += "<" + _$4tag; | |
var _$4isBEM = ("", __r14 = __$ctx._mode, __$ctx._mode = "bem", __r15 = applyc(__$ctx), __$ctx._mode = __r14, "", __r15); | |
typeof _$4isBEM != "undefined" || (_$4isBEM = typeof _$4v.bem != "undefined" ? _$4v.bem : _$4v.block || _$4v.elem); | |
var _$4cls = ("", __r16 = __$ctx._mode, __$ctx._mode = "cls", __r17 = applyc(__$ctx), __$ctx._mode = __r16, "", __r17); | |
_$4cls || (_$4cls = _$4v.cls); | |
var _$4addJSInitClass = _$4v.block && _$4jsParams; | |
if (_$4isBEM || _$4cls) { | |
__$ctx._buf += ' class="'; | |
if (_$4isBEM) { | |
__$ctx._buf += _$4BEM_.INTERNAL.buildClasses(__$ctx.block, _$4v.elem, _$4v.elemMods || _$4v.mods); | |
var _$4mix = ("", __r18 = __$ctx._mode, __$ctx._mode = "mix", __r19 = applyc(__$ctx), __$ctx._mode = __r18, "", __r19); | |
_$4v.mix && (_$4mix = _$4mix ? _$4mix.concat(_$4v.mix) : _$4v.mix); | |
if (_$4mix) { | |
var _$4visited = {}; | |
function _$4visitedKey(block, elem) { | |
return (block || "") + "__" + (elem || ""); | |
} | |
_$4visited[_$4visitedKey(__$ctx.block, __$ctx.elem)] = true; | |
if (!__$ctx._.isArray(_$4mix)) { | |
_$4mix = [ _$4mix ]; | |
} else { | |
undefined; | |
} | |
for (var _$4i = 0; _$4i < _$4mix.length; _$4i++) { | |
var _$4mixItem = _$4mix[_$4i], _$4hasItem = _$4mixItem.block || _$4mixItem.elem, _$4block = _$4mixItem.block || _$4mixItem._block || _$4_this.block, _$4elem = _$4mixItem.elem || _$4mixItem._elem || _$4_this.elem; | |
if (_$4hasItem) __$ctx._buf += ' '; | |
__$ctx._buf += _$4BEM_.INTERNAL[_$4hasItem ? "buildClasses" : "buildModsClasses"](_$4block, _$4mixItem.elem || _$4mixItem._elem || (_$4mixItem.block ? undefined : _$4_this.elem), _$4mixItem.elemMods || _$4mixItem.mods); | |
if (_$4mixItem.js) { | |
(_$4jsParams || (_$4jsParams = {}))[_$4BEM_.INTERNAL.buildClass(_$4block, _$4mixItem.elem)] = _$4mixItem.js === true ? {} : _$4mixItem.js; | |
_$4addJSInitClass || (_$4addJSInitClass = _$4block && !_$4mixItem.elem); | |
} else { | |
undefined; | |
} | |
if (_$4hasItem && !_$4visited[_$4visitedKey(_$4block, _$4elem)]) { | |
_$4visited[_$4visitedKey(_$4block, _$4elem)] = true; | |
var _$4nestedMix = ("", __r20 = __$ctx.block, __$ctx.block = _$4block, __r21 = __$ctx.elem, __$ctx.elem = _$4elem, __r22 = __$ctx._mode, __$ctx._mode = "mix", __r23 = applyc(__$ctx), __$ctx.block = __r20, __$ctx.elem = __r21, __$ctx._mode = __r22, "", __r23); | |
if (_$4nestedMix) { | |
for (var _$4j = 0; _$4j < _$4nestedMix.length; _$4j++) { | |
var _$4nestedItem = _$4nestedMix[_$4j]; | |
if (!_$4nestedItem.block && !_$4nestedItem.elem || !_$4visited[_$4visitedKey(_$4nestedItem.block, _$4nestedItem.elem)]) { | |
_$4nestedItem._block = _$4block; | |
_$4nestedItem._elem = _$4elem; | |
_$4mix.splice(_$4i + 1, 0, _$4nestedItem); | |
} else { | |
undefined; | |
} | |
} | |
} else { | |
undefined; | |
} | |
} else { | |
undefined; | |
} | |
} | |
} else { | |
undefined; | |
} | |
} else { | |
undefined; | |
} | |
if (_$4cls) __$ctx._buf += (_$4isBEM ? " " : "") + _$4cls; | |
if (_$4addJSInitClass) __$ctx._buf += " i-bem"; | |
__$ctx._buf += '"'; | |
} else { | |
undefined; | |
} | |
if (_$4jsParams) { | |
var _$4jsAttr = ("", __r26 = __$ctx._mode, __$ctx._mode = "jsAttr", __r27 = applyc(__$ctx), __$ctx._mode = __r26, "", __r27); | |
__$ctx._buf += " " + (_$4jsAttr || "onclick") + '="return ' + __$ctx._.attrEscape(JSON.stringify(_$4jsParams)) + '"'; | |
} else { | |
undefined; | |
} | |
var _$4attrs = ("", __r28 = __$ctx._mode, __$ctx._mode = "attrs", __r29 = applyc(__$ctx), __$ctx._mode = __r28, "", __r29); | |
_$4attrs = __$ctx._.extend(_$4attrs, _$4v.attrs); | |
if (_$4attrs) { | |
var _$4name; | |
for (_$4name in _$4attrs) { | |
if (_$4attrs[_$4name] === undefined) { | |
continue; | |
} else { | |
undefined; | |
} | |
__$ctx._buf += ' ' + _$4name + '="' + __$ctx._.attrEscape(_$4attrs[_$4name]) + '"'; | |
} | |
} else { | |
undefined; | |
} | |
} else { | |
undefined; | |
} | |
if (__$ctx._.isShortTag(_$4tag)) { | |
__$ctx._buf += '/>'; | |
} else { | |
if (_$4tag) __$ctx._buf += '>'; | |
var _$4content = ("", __r30 = __$ctx._mode, __$ctx._mode = "content", __r31 = applyc(__$ctx), __$ctx._mode = __r30, "", __r31); | |
if (_$4content || _$4content === 0) { | |
var _$4isBEM = __$ctx.block || __$ctx.elem; | |
{ | |
""; | |
var __r32 = __$ctx._notNewList; | |
__$ctx._notNewList = false; | |
var __r33 = __$ctx.position; | |
__$ctx.position = _$4isBEM ? 1 : __$ctx.position; | |
var __r34 = __$ctx._listLength; | |
__$ctx._listLength = _$4isBEM ? 1 : __$ctx._listLength; | |
var __r35 = __$ctx.ctx; | |
__$ctx.ctx = _$4content; | |
var __r36 = __$ctx._mode; | |
__$ctx._mode = ""; | |
applyc(__$ctx); | |
__$ctx._notNewList = __r32; | |
__$ctx.position = __r33; | |
__$ctx._listLength = __r34; | |
__$ctx.ctx = __r35; | |
__$ctx._mode = __r36; | |
""; | |
} | |
undefined; | |
} else { | |
undefined; | |
} | |
if (_$4tag) __$ctx._buf += "</" + _$4tag + ">"; | |
} | |
return; | |
} | |
function $179(__$ctx) { | |
__$ctx._listLength--; | |
var _$3ctx = __$ctx.ctx; | |
if (_$3ctx && _$3ctx !== true || _$3ctx === 0) __$ctx._buf += _$3ctx; | |
return; | |
} | |
function $185(__$ctx) { | |
var _$1v = __$ctx.ctx, _$1l = _$1v.length, _$1i = 0, _$1prevPos = __$ctx.position, _$1prevNotNewList = __$ctx._notNewList; | |
if (_$1prevNotNewList) { | |
__$ctx._listLength += _$1l - 1; | |
} else { | |
__$ctx.position = 0; | |
__$ctx._listLength = _$1l; | |
} | |
__$ctx._notNewList = true; | |
while (_$1i < _$1l) { | |
var _$1newCtx = _$1v[_$1i++]; | |
{ | |
""; | |
var __r7 = __$ctx.ctx; | |
__$ctx.ctx = _$1newCtx === null ? "" : _$1newCtx; | |
applyc(__$ctx); | |
__$ctx.ctx = __r7; | |
""; | |
} | |
undefined; | |
} | |
_$1prevNotNewList || (__$ctx.position = _$1prevPos); | |
return; | |
} | |
function $188(__$ctx) { | |
var _$0vBlock = __$ctx.ctx.block, _$0vElem = __$ctx.ctx.elem, _$0block = __$ctx._currBlock || __$ctx.block; | |
__$ctx.ctx || (__$ctx.ctx = {}); | |
{ | |
""; | |
var __r0 = __$ctx._mode; | |
__$ctx._mode = "default"; | |
var __r1 = __$ctx._links; | |
__$ctx._links = __$ctx.ctx.links || __$ctx._links; | |
var __r2 = __$ctx.block; | |
__$ctx.block = _$0vBlock || (_$0vElem ? _$0block : undefined); | |
var __r3 = __$ctx._currBlock; | |
__$ctx._currBlock = _$0vBlock || _$0vElem ? undefined : _$0block; | |
var __r4 = __$ctx.elem; | |
__$ctx.elem = __$ctx.ctx.elem; | |
var __r5 = __$ctx.mods; | |
__$ctx.mods = (_$0vBlock ? __$ctx.ctx.mods : __$ctx.mods) || {}; | |
var __r6 = __$ctx.elemMods; | |
__$ctx.elemMods = __$ctx.ctx.elemMods || {}; | |
{ | |
__$ctx.block || __$ctx.elem ? __$ctx.position = (__$ctx.position || 0) + 1 : __$ctx._listLength--; | |
applyc(__$ctx); | |
undefined; | |
} | |
__$ctx._mode = __r0; | |
__$ctx._links = __r1; | |
__$ctx.block = __r2; | |
__$ctx._currBlock = __r3; | |
__$ctx.elem = __r4; | |
__$ctx.mods = __r5; | |
__$ctx.elemMods = __r6; | |
""; | |
} | |
return; | |
} | |
function $e(__$ctx) { | |
throw new Error(this); | |
return; | |
} | |
!function() { | |
var BEM_ = {}, toString = Object.prototype.toString, SHORT_TAGS = { | |
area: 1, | |
base: 1, | |
br: 1, | |
col: 1, | |
command: 1, | |
embed: 1, | |
hr: 1, | |
img: 1, | |
input: 1, | |
keygen: 1, | |
link: 1, | |
meta: 1, | |
param: 1, | |
source: 1, | |
wbr: 1 | |
}; | |
(function(BEM, undefined) { | |
var MOD_DELIM = "_", ELEM_DELIM = "__", NAME_PATTERN = "[a-zA-Z0-9-]+"; | |
function buildModPostfix(modName, modVal) { | |
return MOD_DELIM + modName + MOD_DELIM + modVal; | |
} | |
function buildBlockClass(name, modName, modVal) { | |
return name + | |
(modVal ? buildModPostfix(modName, modVal) : ''); | |
} | |
function buildElemClass(block, name, modName, modVal) { | |
return buildBlockClass(block, undefined, undefined) + | |
ELEM_DELIM + name + | |
(modVal ? buildModPostfix(modName, modVal) : ''); | |
} | |
BEM.INTERNAL = { | |
NAME_PATTERN: NAME_PATTERN, | |
MOD_DELIM: MOD_DELIM, | |
ELEM_DELIM: ELEM_DELIM, | |
buildModPostfix: function(modName, modVal) { | |
return buildModPostfix(modName, modVal, res); | |
}, | |
buildClass: function(block, elem, modName, modVal, buffer) { | |
var typeOf = typeof modName; | |
if (typeOf == "string") { | |
if (typeof modVal != "string") { | |
buffer = modVal; | |
modVal = modName; | |
modName = elem; | |
elem = undefined; | |
} else { | |
undefined; | |
} | |
} else { | |
if (typeOf != "undefined") { | |
buffer = modName; | |
modName = undefined; | |
} else { | |
if (elem && typeof elem != "string") { | |
buffer = elem; | |
elem = undefined; | |
} else { | |
undefined; | |
} | |
} | |
} | |
if (!(elem || modName || buffer)) { | |
return block; | |
} else { | |
undefined; | |
} | |
return elem ? buildElemClass(block, elem, modName, modVal) : buildBlockClass(block, modName, modVal); | |
}, | |
buildModsClasses: function(block, elem, mods) { | |
var res = ''; | |
if (mods) { | |
var modName; | |
for (modName in mods) { | |
if (!mods.hasOwnProperty(modName)) { | |
continue; | |
} else { | |
undefined; | |
} | |
var modVal = mods[modName]; | |
if (modVal == null) { | |
continue; | |
} else { | |
undefined; | |
} | |
modVal = mods[modName] + ""; | |
if (!modVal) { | |
continue; | |
} else { | |
undefined; | |
} | |
res += ' '; | |
if (elem) { | |
res += buildElemClass(block, elem, modName, modVal); | |
} else { | |
res += buildBlockClass(block, modName, modVal); | |
} | |
} | |
} else { | |
undefined; | |
} | |
return res; | |
}, | |
buildClasses: function(block, elem, mods) { | |
var res = ''; | |
res += elem ? buildElemClass(block, elem, undefined, undefined) : buildBlockClass(block, undefined, undefined); | |
res += this.buildModsClasses(block, elem, mods); | |
return res; | |
} | |
}; | |
})(BEM_); | |
var buildEscape = function() { | |
var ts = { | |
'"': """, | |
"&": "&", | |
"<": "<", | |
">": ">" | |
}, f = function(t) { | |
return ts[t] || t; | |
}; | |
return function(r) { | |
r = new RegExp(r, "g"); | |
return function(s) { | |
return ("" + s).replace(r, f); | |
}; | |
}; | |
}(); | |
function BEMContext(context, apply_) { | |
this.ctx = typeof context === null ? "" : context; | |
this.apply = apply_; | |
this._buf = ''; | |
this._ = this; | |
this._start = true; | |
this._mode = ""; | |
this._listLength = 0; | |
this._notNewList = false; | |
this.position = 0; | |
this.block = undefined; | |
this.elem = undefined; | |
this.mods = undefined; | |
this.elemMods = undefined; | |
} | |
BEMContext.prototype.isArray = Array.isArray ? Array.isArray : function isArray(obj) { | |
return toString.call(obj) === "[object Array]"; | |
}; | |
BEMContext.prototype.isSimple = function isSimple(obj) { | |
var t = typeof obj; | |
return t === "string" || t === "number" || t === "boolean"; | |
}; | |
BEMContext.prototype.isShortTag = function isShortTag(t) { | |
return SHORT_TAGS.hasOwnProperty(t); | |
}; | |
BEMContext.prototype.extend = function extend(o1, o2) { | |
if (!o1 || !o2) { | |
return o1 || o2; | |
} else { | |
undefined; | |
} | |
var res = {}, n; | |
for (n in o1) { | |
o1.hasOwnProperty(n) && (res[n] = o1[n]); | |
} | |
for (n in o2) { | |
o2.hasOwnProperty(n) && (res[n] = o2[n]); | |
} | |
return res; | |
}; | |
BEMContext.prototype.identify = function() { | |
var cnt = 0, id = BEM_["__id"] = +(new Date), expando = "__" + id, get = function() { | |
return "uniq" + id + ++cnt; | |
}; | |
return function(obj, onlyGet) { | |
if (!obj) { | |
return get(); | |
} else { | |
undefined; | |
} | |
if (onlyGet || obj[expando]) { | |
return obj[expando]; | |
} else { | |
return obj[expando] = get(); | |
} | |
}; | |
}(); | |
BEMContext.prototype.xmlEscape = buildEscape("[&<>]"); | |
BEMContext.prototype.attrEscape = buildEscape('["&<>]'); | |
BEMContext.prototype.BEM = BEM_; | |
BEMContext.prototype.isFirst = function isFirst() { | |
return this.position === 1; | |
}; | |
BEMContext.prototype.isLast = function isLast() { | |
return this.position === this._listLength; | |
}; | |
BEMContext.prototype.generateId = function generateId() { | |
return this.identify(this.ctx); | |
}; | |
exports.apply = BEMContext.apply = function _apply(ctx) { | |
var ctx = new BEMContext(ctx, apply); | |
ctx.apply(); | |
return ctx._buf; | |
}; | |
}(); | |
return exports; | |
exports.apply = apply; | |
function apply(ctx) { | |
return applyc(ctx || this); | |
} | |
function applyc(__$ctx) { | |
switch (__$ctx._mode) { | |
case "tag": | |
switch (__$ctx.block) { | |
case "b-link": | |
if (__$ctx.elem === "inner") { | |
return "span"; | |
return; | |
} else { | |
if (!!__$ctx.elem === false) { | |
return "a"; | |
return; | |
} else { | |
return $38(__$ctx); | |
} | |
} | |
break; | |
case "b-page": | |
switch (__$ctx.elem) { | |
case "js": | |
return "script"; | |
return; | |
break; | |
case "css": | |
if (!__$ctx.ctx.url === false) { | |
return "link"; | |
return; | |
} else { | |
return "style"; | |
return; | |
} | |
break; | |
case "favicon": | |
return "link"; | |
return; | |
break; | |
case "meta": | |
return "meta"; | |
return; | |
break; | |
case "head": | |
return "head"; | |
return; | |
break; | |
case "root": | |
return "html"; | |
return; | |
break; | |
default: | |
if (!!__$ctx.elem === false) { | |
return "body"; | |
return; | |
} else { | |
return $38(__$ctx); | |
} | |
break; | |
} | |
break; | |
case "i-ua": | |
if (!!__$ctx.elem === false) { | |
return "script"; | |
return; | |
} else { | |
return $38(__$ctx); | |
} | |
break; | |
default: | |
return $38(__$ctx); | |
break; | |
} | |
break; | |
case "bem": | |
switch (__$ctx.block) { | |
case "b-page": | |
switch (__$ctx.elem) { | |
case "js": | |
return false; | |
return; | |
break; | |
case "css": | |
return false; | |
return; | |
break; | |
case "favicon": | |
return false; | |
return; | |
break; | |
case "meta": | |
return false; | |
return; | |
break; | |
case "head": | |
return false; | |
return; | |
break; | |
case "root": | |
return false; | |
return; | |
break; | |
default: | |
return $86(__$ctx); | |
break; | |
} | |
break; | |
case "i-ua": | |
if (!!__$ctx.elem === false) { | |
return false; | |
return; | |
} else { | |
return $86(__$ctx); | |
} | |
break; | |
default: | |
return $86(__$ctx); | |
break; | |
} | |
break; | |
case "default": | |
switch (__$ctx.block) { | |
case "b-page": | |
if (__$ctx.elem === "css") { | |
if (!__$ctx.ctx.hasOwnProperty("ie") === false) { | |
if (!!__$ctx.ctx._ieCommented === false) { | |
return $92(__$ctx); | |
} else { | |
return $97(__$ctx); | |
} | |
} else { | |
return $97(__$ctx); | |
} | |
} else { | |
return $97(__$ctx); | |
} | |
break; | |
case "i-jquery": | |
if (__$ctx.elem === "core") { | |
return $107(__$ctx); | |
} else { | |
return $165(__$ctx); | |
} | |
break; | |
default: | |
return $165(__$ctx); | |
break; | |
} | |
break; | |
case "cls": | |
if (__$ctx.block === "b-page") { | |
if (__$ctx.elem === "root") { | |
return "i-ua_js_no i-ua_css_standard"; | |
return; | |
} else { | |
return $119(__$ctx); | |
} | |
} else { | |
return $119(__$ctx); | |
} | |
break; | |
case "attrs": | |
switch (__$ctx.block) { | |
case "b-link": | |
if (!!__$ctx.elem === false) { | |
return $42(__$ctx); | |
} else { | |
return $63(__$ctx); | |
} | |
break; | |
case "b-page": | |
switch (__$ctx.elem) { | |
case "js": | |
if (!__$ctx.ctx.url === false) { | |
return { | |
src: __$ctx.ctx.url | |
}; | |
return; | |
} else { | |
return $63(__$ctx); | |
} | |
break; | |
case "css": | |
if (!__$ctx.ctx.url === false) { | |
return { | |
rel: "stylesheet", | |
href: __$ctx.ctx.url | |
}; | |
return; | |
} else { | |
return $63(__$ctx); | |
} | |
break; | |
case "favicon": | |
return { | |
rel: "shortcut icon", | |
href: __$ctx.ctx.url | |
}; | |
return; | |
break; | |
case "meta": | |
return __$ctx.ctx.attrs; | |
return; | |
break; | |
default: | |
return $63(__$ctx); | |
break; | |
} | |
break; | |
default: | |
return $63(__$ctx); | |
break; | |
} | |
break; | |
case "xUACompatible": | |
if (__$ctx.block === "b-page") { | |
if (!!__$ctx.elem === false) { | |
return $131(__$ctx); | |
} else { | |
return $165(__$ctx); | |
} | |
} else { | |
return $165(__$ctx); | |
} | |
break; | |
case "doctype": | |
if (__$ctx.block === "b-page") { | |
if (!!__$ctx.elem === false) { | |
return __$ctx.ctx.doctype || "<!DOCTYPE html>"; | |
return; | |
} else { | |
return $165(__$ctx); | |
} | |
} else { | |
return $165(__$ctx); | |
} | |
break; | |
case "content": | |
if (__$ctx.block === "i-ua") { | |
if (!!__$ctx.elem === false) { | |
return $147(__$ctx); | |
} else { | |
return $151(__$ctx); | |
} | |
} else { | |
return $151(__$ctx); | |
} | |
break; | |
case "jsAttr": | |
return undefined; | |
return; | |
break; | |
case "js": | |
return undefined; | |
return; | |
break; | |
case "mix": | |
if (__$ctx.block === "b-page") { | |
if (!!__$ctx.elem === false) { | |
return [ { | |
elem: "body" | |
} ]; | |
return; | |
} else { | |
return $127(__$ctx); | |
} | |
} else { | |
return $127(__$ctx); | |
} | |
break; | |
default: | |
return $165(__$ctx); | |
break; | |
} | |
} | |
return exports; | |
})(typeof exports === "undefined" ? {} : exports);; | |
return function(data) { | |
return xjst.apply(data); | |
}; | |
}(); | |
/// | |
/// | |
/// Benchmark | |
/// | |
/// | |
// | |
var json = [{ | |
"block": "b-page", | |
"title": "Pseudo link", | |
"head": [ | |
{ "elem": "css", "url": "example.css"}, | |
{ "elem": "css", "url": "example.ie.css", "ie": "lt IE 8" }, | |
{ "block": "i-jquery", "elem": "core" }, | |
{ "elem": "js", "url": "example.js" } | |
], | |
"content": [ | |
{ | |
"block": "b-link", | |
"mods" : { "pseudo" : "yes", "togcolor" : "yes", "color": "green" }, | |
"url": "#", | |
"target": "_blank", | |
"title": "Click me", | |
"content": "This pseudo link changes its color after click" | |
} | |
] | |
}]; | |
var start = +new Date; | |
for (var i = 0; i < 100000; i++) { | |
BEMHTML(json); | |
} | |
var end = +new Date; | |
print(end - start); | |
print(BEMHTML(json)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment