UNPKG

snakeskin

Version:

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

90 lines (77 loc) 3.37 kB
/*! * API для работы с деревом шаблона */ /** * Проверить наличие указанной директивы в цепочке структуры, * начиная с активной * * @param {(string|!Object)} name - название директивы или таблица названий * @param {Object=} [opt_obj=this.structure] - проверяемый объект * @param {?boolean=} [opt_returnObj=false] - если true, то в качестве ответа * вернётся ссылка на найденный объект (если таковой есть) * * @return {(boolean|string|!Object)} */ DirObj.prototype.has = function (name, opt_obj, opt_returnObj) { var obj = opt_obj || this.structure; while (true) { let nm = obj.name; if (name[nm] || nm === name) { if (name[nm]) { return opt_returnObj ? obj : nm; } return opt_returnObj ? obj: true; } else if (obj.parent && obj.parent.name !== 'root') { obj = obj.parent; } else { return false; } } }; /** * Проверить наличие указанной директивы в цепочке структуры * (начальная активная директива исключается) * * @param {(string|!Object)} name - название директивы или таблица названий * @param {?boolean=} [opt_returnObj=false] - если true, то в качестве ответа * вернётся ссылка на найденный объект (если таковой есть) * * @return {(boolean|string|!Object)} */ DirObj.prototype.hasParent = function (name, opt_returnObj) { if (this.structure.parent) { return this.has(name, this.structure.parent, opt_returnObj); } return false; }; /** * Проверить наличие указанной директивы в цепочке блочной структуры * * @param {(string|!Object)} name - название директивы или таблица названий * @param {?boolean=} [opt_returnObj=false] - если true, то в качестве ответа * вернётся ссылка на найденный объект (если таковой есть) * * @return {(boolean|string|!Object)} */ DirObj.prototype.hasBlock = function (name, opt_returnObj) { if (this.blockStructure) { return this.has(name, this.blockStructure, opt_returnObj); } return false; }; /** * Проверить наличие указанной директивы в цепочке блочной структуры * (начальная активная директива исключается) * * @param {(string|!Object)} name - название директивы или таблица названий * @param {?boolean=} [opt_returnObj=false] - если true, то в качестве ответа * вернётся ссылка на найденный объект (если таковой есть) * * @return {(boolean|string|!Object)} */ DirObj.prototype.hasParentBlock = function (name, opt_returnObj) { if (this.blockStructure && this.blockStructure.parent) { return this.has(name, this.blockStructure.parent, opt_returnObj); } return false; };