interface String { replaceAll: Function; } function Debounce(func: Function, wait: number, immediate?: boolean): Function { var timeout; return function () { var context = this, args = arguments; var later = function () { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; } function ConvertStringToDate(dateStr: string): Date { if (!dateStr) { return null; } var datePattern = /(\d{2})\.(\d{2})\.(\d{4})/; var dateMatch = dateStr.match(datePattern); if (dateStr.length == 4) { var dateYear = new Date(dateStr); return isFinite(dateYear.getTime()) ? dateYear : null; } if (!dateMatch || dateMatch.length < 4) { return null; } var year = parseInt(dateMatch[3]); // из-за особенностей конвертации Date следует уменьшить значение для месяца на единицу var month = parseInt(dateMatch[2]) - 1; var day = parseInt(dateMatch[1]); var date = new Date(year, month, day); return date; } String.prototype.replaceAll = function (search, replacement) { var target = this; return target.split(search).join(replacement); }; function insertSvgIntoImg(img, svgRaw) { const _EXPERT_SVG_RAW = ''; if ((document as any).readyState === "complete" || (document as any).readyState === "loaded" || (document as any).readyState === "interactive") { process(); } else { (document as any).addEventListener('DOMContentLoaded', e => { process(); }); } function process() { if (!img) { return; } svgRaw = !!svgRaw ? svgRaw : _EXPERT_SVG_RAW; img.onerror = ''; img.insertAdjacentHTML('beforebegin', svgRaw); let svg = img.previousSibling; let xml = (new XMLSerializer).serializeToString(svg); img.src = `data:image/svg+xml;base64,${btoa(xml)}`; svg.parentElement.removeChild(svg); } };