UNPKG

snakeskin

Version:

Компилятор блочных шаблонов c поддержкой наследования.

125 lines (112 loc) 3.2 kB
/** * Вернуть данные из кеша шаблонов * * @param {?string} cacheKey - кеш-ключ * @param {string} text - исходный текст шаблона * @param {!Object} params - параметры запуска * @param {!Object} ctx - объект контекста * @param {!Object} NULL - null-объект * @return {string} */ function returnCache(cacheKey, text, params, ctx, NULL) { if (IS_NODE && ctx !== NULL && globalFnCache[cacheKey] && globalFnCache[cacheKey][text]) { forIn(globalFnCache[cacheKey][text], (el, key) => { ctx[key] = el; }); } if (globalCache[cacheKey] && globalCache[cacheKey][text]) { let tmp = globalCache[cacheKey][text], skip = false; if (params.words) { if (!tmp.words) { skip = true; } else { forIn(tmp.words, (el, key) => { params.words[key] = el; }); } } if (params.debug) { if (!tmp.debug) { skip = true; } else { forIn(tmp.debug, (el, key) => { params.debug[key] = el; }); } } if (!skip) { return tmp.text; } } } /** * Вернуть кеш-ключ * * @param {!Object} params - параметры запуска * @param {!Object} ctx - объект контекста * @param {!Object} NULL - null-объект * @return {?string} */ function returnCacheKey(params, ctx, NULL) { return params.language || params.macros ? null : [ params.exports, ctx !== NULL, escapeNextLine(params.lineSeparator), params.doctype, params.tolerateWhitespace, params.inlineIterators, params.renderAs, params.renderMode, params.replaceUndef, params.escapeOutput, params.prettyPrint, params.ignore, params.autoReplace, params.localization, params.i18nFn, params.bemFilter ].join(); } /** * Сохранить скомпилированные функции в кеше * * @param {?string} cacheKey - кеш-ключ * @param {string} text - исходный текст шаблона * @param {!Object} params - параметры запуска * @param {!Object} ctx - объект контекста * @param {!Object} NULL - null-объект * @return {string} */ function saveFnCache(cacheKey, text, params, ctx, NULL) { if (ctx !== NULL) { ctx['init'](Snakeskin); if (cacheKey && (params.cache || globalFnCache[cacheKey])) { if (!globalFnCache[cacheKey]) { globalFnCache[cacheKey] = {}; } globalFnCache[cacheKey][text] = ctx; } } } /** * Сохранить полученный кеш * * @param {?string} cacheKey - кеш-ключ * @param {string} text - исходный текст шаблона * @param {!Object} params - параметры запуска * @param {!DirObj} dir - объект директивы * @return {string} */ function saveCache(cacheKey, text, params, dir) { if (cacheKey && (params.cache || globalCache[cacheKey])) { if (!globalCache[cacheKey]) { globalCache[cacheKey] = {}; } globalCache[cacheKey][text] = { text: dir.res, words: params.words, debug: params.debug }; } }