UNPKG

snakeskin

Version:

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

183 lines (155 loc) 3.83 kB
/*! * Методы live библиотеки Snakeskin */ if (/\[native code]/.test(Object.keys && Object.keys.toString())) { var keys = Object.keys; } /** * Конструктор объекта StringBuffer * * @expose * @constructor * @return {!Array} */ Snakeskin.StringBuffer = function () { return []; }; /** * Итератор массива или объекта (с проверкой hasOwnProperty) * * @expose * @param {(Array|Object|undefined)} obj - исходный объект * @param {(function(?, number, !Array, boolean, boolean, number)|function(?, string, !Object, number, boolean, boolean, number))} callback - функция обратного вызова */ Snakeskin.forEach = function (obj, callback) { if (!obj) { return; } var length = 0; if (Array.isArray(obj)) { length = obj.length; for (let i = -1; ++i < length;) { if (callback(obj[i], i, obj, i === 0, i === length - 1, length) === false) { break; } } } else if (keys) { let arr = keys(obj); length = arr.length; for (let i = -1; ++i < length;) { if (callback(obj[arr[i]], arr[i], obj, i, i === 0, i === length - 1, length) === false) { break; } } } else { let i = 0; if (callback.length >= 6) { for (let key in obj) { /* istanbul ignore if */ if (!obj.hasOwnProperty(key)) { continue; } length++; } } for (let key in obj) { /* istanbul ignore if */ if (!obj.hasOwnProperty(key)) { continue; } if (callback(obj[key], key, obj, i, i === 0, i === length - 1, length) === false) { break; } i++; } } }; /** * Итератор объекта без проверки hasOwnProperty * * @expose * @param {(Object|undefined)} obj - исходный объект * @param {function(?, string, !Object, number, boolean, boolean, number)} callback - функция обратного вызова */ Snakeskin.forIn = function (obj, callback) { if (!obj) { return; } var length = 0, i = 0; if (callback.length >= 6) { for (let key in obj) { length++; } } for (let key in obj) { if (callback(obj[key], key, obj, i, i === 0, i === length - 1, length) === false) { break; } i++; } }; /** * Итератор объекта * * @param {(Object|undefined)} obj - исходный объект * @param {function(?, string, !Object)} callback - функция обратного вызова */ function forIn(obj, callback) { if (!obj) { return; } if (keys) { let arr = keys(obj), length = arr.length; for (let i = -1; ++i < length;) { if (callback(obj[arr[i]], arr[i], obj) === false) { break; } } } else { for (let key in obj) { /* istanbul ignore if */ if (!obj.hasOwnProperty(key)) { continue; } if (callback(obj[key], key, obj) === false) { break; } } } } var inlineTagMap = { 'img': true, 'link': true, 'embed': true, 'br': true, 'hr': true, 'wbr': true, 'meta': true, 'input': true, 'source': true, 'track': true, 'base': true, 'area': true, 'col': true, 'param': true }; /** * Вставить заданный узел или текст в исходный * * @expose * @param {!Node} node - исходный элемент * @param {(!Node|string)} obj - элемент для вставки или текст * @return {(!Node|string)} */ Snakeskin.appendChild = function (node, obj) { if (node['tagName'] && inlineTagMap[node['tagName'].toLowerCase()]) { return String(obj).trim(); } if (typeof obj === 'string') { obj = document.createTextNode(obj); } node.appendChild(obj); return obj; };