/** * Catlair JS Copyright (C) 2019 a@itserv.ru * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Работа со строками * Содержит набор функций для различной обработки строк. * * still@itserv.ru */ /* * Возвращает подобие GUID, путь и плюшевый, но лучше чем ничего */ function clGUID() { return 'xxxxxxxx-xxxx-xxxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); return v.toString(16);}); } /* * Возвращает подобие UID */ function clUID() { return 'xxxxxxxxxxxxxxxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); return v.toString(16);}); } /* * создает строку длинной ALength из символа AChar */ function clStrRepl(ALength, AChar) { var Result=''; for (var i=0; i0; i--) { k=AString.length+i-ALength-1; if(k>=0) { Result=AString[k]+Result; } else { j--; /*обратный обход строки ACharString*/ if (j<0) j=ACharString.length-1; /*маркер переносим на конец ACharString если достигнуто начало*/ Result=ACharString[j]+Result; } } return Result; } /* * Дополняет справа строку AString до длинны ALength символами из ACharString. * В случае если длинна строки AString более ALength, строка обрезается справа. */ function clStrRight(AString, ALength, ACharString) { var Result=''; /*переменная для результата*/ var j=0; /*маркер строки из которой проходит дополнение*/ for(var i=0; i '&p1=v1&p2=v2' * -значения параметров с одинаковыми именами заменяются на значения из AParams; '&p1=v1' + '&p1=v2' -> '&p1=v2' * -из результата исключаются параметры присутствующие в ASource и пустые в AParams; '&p1=v1&p2=v2' + '&p2=' -> '&p1=v1' * Параметры передаются как &m1=value1¶m2=value2&.....¶mN=valueN. * В качестве разделителя используется знак '&'. */ function clSourceURL(ASource, AParams) { var r=''; var s=ASource.split('&'); var p=AParams.split('&'); /* Перенос параметров из строки Source или взятие их из AParams */ var i=1; while (i < s.length) { var n = clNameByIndex(s, i); var v = clValueByName(p, n, null); /* Если параметр есть в Params то берем его */ if (v==null) r=r+'&'+s[i]; else r=r+'&'+n+'='+v; i++; } /* Добалвение параметров из Params, отсуствующих в Source */ i=0; while (i=0) r=AParams[AIndex].substring(0, pe); return r; } /** * Возвращает значение параметра из массива AParams по номеру AIndex. * Элементы массива принимаются в формате param=value */ function clValueByIndex(AParams, AIndex) { var r=null; var pe=AParams[AIndex].indexOf('=', 0); if (pe>=0) r=AParams[AIndex].substring(pe+1, AParams[AIndex].length); return r; } function clValueByName(AParams, AName, ADefault) /* возвращает значение параметра из массива AParams по имени AName Элементы массива принимаются в формате param=value */ { var r=null; if (AName!=null) { var n=null; var v=null; var i=0; while ((i= 1024*1024*1024*1024) {return (ADelta / (1024*1024*1024*1024)).toFixed(1) + ' Tb'} else if (ADelta >= 1024*1024*1024) {return (ADelta / (1024*1024*1024)).toFixed(1) + ' Gb'} else if (ADelta >= 1024*1024) {return (ADelta / (1024*1024)).toFixed(1) + ' Mb'} else if (ADelta >= 1024) {return (ADelta/1024).toFixed(1) + ' Kb'} else if (ADelta > 0.1 && !AZero) {return ADelta+' bt'} else {return AZero} } /** * Get JS AObject and replace params in AContent. */ function clContentFromObject(AObject, AContent) { for (var Key in AObject) { var rex=new RegExp('%'+Key+'%', 'g'); try { AContent = AContent.replace(rex, decodeURIComponent(AObject[Key])); } catch (err) {} } return AContent; } /** * Replace all %params% to empty */ function clContentClear(AContent) { AContent = AContent.replace(/%[a-zA-Z0-9_]+%/g, ''); return AContent; }