Advertisement
stuppid_bot

Untitled

Dec 21st, 2013
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Обертка для document.getElementById.
  3.  * @return {mixed} Возвращает элемент либо null.
  4.  **/
  5. function g(id) { return document.getElementById(id); }
  6.  
  7. /**
  8.  * Экранирует символы: \, ', ".
  9.  * @param {string} str
  10.  * @return {string}
  11.  */
  12. function addSlashes(str)
  13. {
  14.     return str.replace(/([\\'"])/g, '\\$1');
  15. }
  16.  
  17. /**
  18.  * Обратная функция для addSlashes.
  19.  * @param {string} str
  20.  * @return {string}
  21.  */
  22. function stripSlashes(str)
  23. {
  24.     return str.replace(/\\([\\'"])/g, '$1');
  25. }
  26.  
  27. /**
  28.  * Заменяет на HTML-сущности спецсимволы: &, <, >, ".
  29.  * @param {string} str
  30.  * @return {string}
  31.  */
  32. function escapeHTML(str)
  33. {
  34.     return str.replace(/[&"<>]/g, function (x) {
  35.         return '&' + {'&': 'amp', '"': 'quot', '<': 'lt', '>': 'gt'}[x] + ';';
  36.     });
  37. }
  38.  
  39. /**
  40.  * Возвращает случайное число с дробной частью.
  41.  * @param {number} min Минимальное значение.
  42.  * @param {number} max Максимальное значение.
  43.  * @return {number} Случайное число.
  44.  **/
  45. function rand(min, max)
  46. {
  47.     return Math.random() * (max - min + 1) + min;
  48. }
  49.  
  50. /**
  51.  * Возвращает случайное число без дробной частью.
  52.  * @param {number} min Минимальное значение.
  53.  * @param {number} max Максимальное значение.
  54.  * @return {number} Случайное число.
  55.  **/
  56. function randInt(min, max)
  57. {
  58.     return Math.floor(rand(min, max));
  59. }
  60.  
  61. /**
  62.  * Возвращает случайный элемент массива.
  63.  * @param {array} arr Исходный массив.
  64.  * @return {object} Случайный элемент массива.
  65.  **/
  66. function randElem(arr)
  67. {
  68.     return arr[randInt(0, arr.length - 1)];
  69. }
  70.  
  71. /**
  72.  * Генерирует случайную строку.
  73.  * @param {number} len Длина строки. По-умолчанию 8 символов.
  74.  * @param {string} chars Набор символов. По-умолчанию используются цифры и ASCII буквы.
  75.  * @return {string}
  76.  **/
  77. function randStr(len, chars)
  78. {
  79.     if (len == undefined)  {
  80.         len = 8;
  81.     }
  82.     if (chars == undefined) {
  83.         chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  84.     }
  85.     var ret = '';
  86.     var last = chars.length - 1;
  87.     for (var i = 0; i < len; ++i) {
  88.         ret += chars.charAt(randInt(0, last));
  89.     }
  90.     return ret;
  91. }
  92.  
  93. /**
  94.  * Перемешивает элементы массива.
  95.  * @param {array} arr Исходный массив.
  96.  * @return {array} Новый массив.
  97.  **/
  98. function shuffle(arr)
  99. {
  100.     return arr.sort(function () {
  101.         return 0.5 > Math.random();
  102.     });
  103. }
  104.  
  105. /**
  106.  * "Переворачивает" строку.
  107.  * @param {string} str
  108.  * @return {string}
  109.  **/
  110. function reverseStr(str)
  111. {
  112.     return str.split(/|/).reverse().join('');
  113. }
  114.  
  115. /**
  116.  * Повторяет строку n-раз.
  117.  * @param {string} str
  118.  * @param {number} n Сколько раз повторить строку.
  119.  * @return {string}
  120.  **/
  121. function repeatStr(str, n)
  122. {
  123.     return new Array(++n).join(str);
  124. }
  125.  
  126. /**
  127.  * Устанавливает cookie.
  128.  * @param {string} name Имя.
  129.  * @param {string} value Значение.
  130.  * @param {number} days Количество дней.
  131.  **/
  132. function setCookie(name, value, days)
  133. {
  134.     document.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) + '; Expires=' + new Date(new Date().getTime() + days * 86400000).toUTCString();
  135. }
  136.  
  137. /**
  138.  * Удаляет cookie.
  139.  * @param {string} name Имя.
  140.  **/
  141. function deleteCookie(name)
  142. {
  143.     setCookie(name, '', -1);
  144. }
  145.  
  146. querystring = new (function QueryString() {
  147.     var self = this;
  148.  
  149.     /**
  150.      * Декодирует компонент URI.
  151.      * @param {string} str Исходная строка.
  152.      * @return {string}
  153.      **/
  154.     self.unescape = function (str) {
  155.         return decodeURIComponent(str.replace(/\+/g, ' '));
  156.     };
  157.  
  158.     /**
  159.      * Парсит URI-параметры.
  160.      * @param {string} str Исходная строка.
  161.      * @param {string} sep Разделитель параметров.
  162.      * @param {string} eq Разделитель пар ключ-значение.
  163.      * @return {object}
  164.      **/
  165.     self.parse = function (str, sep, eq) {
  166.         sep = sep || '&';
  167.         eq = eq || '=';
  168.         var parts = str.split(sep);
  169.         var part;
  170.         var pos;
  171.         var key;
  172.         var keys;
  173.         var value;
  174.         var cur;
  175.         var name;
  176.         var ret = {};
  177.         for (var i = 0; i < parts.length; ++i) {
  178.             part = parts[i];
  179.             pos = part.indexOf(eq);
  180.             pos = pos == -1 ? part.length : pos
  181.             keys = parseParamName(part.slice(0, pos));
  182.             value = self.unescape(part.slice(++pos));
  183.             cur = ret;
  184.             while ((key = keys.shift()) != null) {
  185.                 name = self.unescape(key);
  186.                 // console.log(name);
  187.                 if (keys.length) {
  188.                     if (!cur[name]) {
  189.                         cur[name] = /^(|\d|[1-9]\d+)$/.test(name) ? [] : {};
  190.                     }
  191.                     cur = cur[name];
  192.                 }
  193.             }
  194.             cur[name] = value;
  195.         }
  196.         return ret;
  197.     };
  198.  
  199.     /**
  200.      * Разбивает имя параметра на части.
  201.      * foo[bar] -> ['foo', 'bar']
  202.      * @param {string} str Имя параметра.
  203.      * @return {array}
  204.      **/
  205.     function parseParamName(str) {
  206.         var a = [];
  207.         var p;
  208.         var p1 = 0;
  209.         while (~(p = str.indexOf('[', p1))) {
  210.             if (!a.length) {              
  211.                 a.push(0, p);
  212.             }
  213.             p1 = p1 && p1 > p ? -1 : str.indexOf(']', ++p);
  214.             if (-1 == p1) {
  215.                 throw 'Bad parameter name';
  216.             }
  217.             a.push(p, p1++);
  218.         }
  219.         if (a.length) {
  220.             var a1 = [];
  221.             for (var i = 0; i < a.length; i += 2) {
  222.                 a1.push(str.slice(a[i], a[i + 1]));
  223.             }
  224.             return a1;
  225.         }
  226.         return [str];
  227.     }
  228.  
  229.     /**
  230.      * Создает из объекта строку с параметрами.
  231.      * @param {string} obj Параметры.
  232.      * @param {string} sep Разделитель параметров.
  233.      * @param {string} eq Разделитель пар ключ-значение.
  234.      * @return {string}
  235.      **/
  236.     self.stringify = function (obj, sep, eq) {
  237.         var pairs = [];
  238.         var name;
  239.         var value;
  240.         eq = eq || '=';
  241.         for (var i in obj) {
  242.             if (obj.hasOwnProperty(i)) {
  243.                 name = encodeURIComponent(i);
  244.                 value = encodeURIComponent(obj[i]);
  245.                 pairs.push(name + eq + value);
  246.             }
  247.         }
  248.         return pairs.join(sep || '&');
  249.     };
  250. })();
  251.  
  252. ajax = new (function Ajax() {
  253.     var self = this;
  254.  
  255.     /**
  256.      * Отправляет произвольный запрос.
  257.      * @param {string} m Метод.
  258.      * @param {string} u Адрес.
  259.      * @param {function} cb function (xhr) { ... } Функция, которая будет вызвана после получения ответа сервера.
  260.      * @param {mixed} d Данные.
  261.      * @param {string} t Тип данных.
  262.      **/
  263.     self.send = function (m, u, cb, d, t) {
  264.         var r = new XMLHttpRequest;
  265.         r.open(m, u);
  266.         r.onload = function () {
  267.             cb(r);
  268.         };
  269.         if (t) {
  270.             req.setRequestHeader('Content-Type', t);
  271.         }
  272.         r.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  273.         r.send(d);
  274.     };
  275.  
  276.     /**
  277.      * Отправляет GET-запрос.
  278.      * @param {string} u Адрес.
  279.      * @param {function} cb function (xhr) { ... } Функция, которая будет вызвана после получения ответа сервера.
  280.      **/
  281.     self.get = function (u, cb) {
  282.         self.send('GET', u, cb);
  283.     };
  284.  
  285.     /**
  286.      * Отправляет POST-запрос.
  287.      * @param {string} u Адрес.
  288.      * @param {function} cb function (xhr) { ... } Функция, которая будет вызвана после получения ответа сервера.
  289.      * @param {mixed} d Данные: строка, хэш, HTMLFormElement, FormData.
  290.      **/
  291.     self.post = function (u, cb, d) {
  292.         if (d instanceof HTMLFormElement) {
  293.             d = new FormData(d);
  294.         }
  295.         else if (d.constructor == Object) {
  296.             d = querystring.stringify(d);
  297.         }
  298.         self.send('POST', u, cb, d, !(d instanceof FormData) ? 'application/x-www-form-urlencoded': null);
  299.     };
  300.  
  301.     /**
  302.      * Загружает содержимое в контейнер.
  303.      * @param {string} u Адрес.
  304.      * @param {mixed} el Элемент либо id элемента.
  305.      **/
  306.     self.load = function (u, el) {
  307.         if (typeof el == 'string') {
  308.             el = g(el);
  309.         }
  310.         if (el) {
  311.             var f = function (r) {
  312.                 if (r.status == 200) {
  313.                     el.innerHTML = r.response;
  314.                 }
  315.                 else {
  316.                     throw 'Server has returned an unexpected response: (' + r.status + ') ' + r.statusText + '.';
  317.                 }
  318.             };
  319.             self.get(u, f);
  320.         }
  321.     };
  322. })();
  323.  
  324. /**
  325.  * Экранирует специальные символы, используемые в регулярном выражении.
  326.  * @param {string} str
  327.  * @return {string}
  328.  */
  329. function escapeRegExp(str)
  330. {
  331.     return str.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
  332. }
  333.  
  334. /**
  335.  * Сохраняет файл по ссылке под определенным именем.
  336.  * @param {string} name Имя сохраняемого файла.
  337.  * @param {string} url Путь до файла на сервере либо Data URI.
  338.  */
  339. function saveFile(name, url)
  340. {
  341.     var link = document.createElement('a');
  342.     link.setAttribute('download', name);
  343.     link.href = url;
  344.     link.onclick = function () {
  345.         document.body.removeChild(this);
  346.     };
  347.     link.style.display = 'none';
  348.     document.body.appendChild(link);
  349.     link.click();
  350. }
  351.  
  352. /**
  353.  * Парсит url и возвращает объект.
  354.  * @param {string} url Путь до файла на сервере.
  355.  * @return {object}
  356.  */
  357. function parseURL(url)
  358. {
  359.     var link = document.createElement('a');
  360.     link.href = url;
  361.     var obj = {
  362.         hash: '',
  363.         host: '',
  364.         hostname: '',
  365.         href: '',
  366.         origin: '',
  367.         pathname: '',
  368.         port: '',
  369.         protocol: '',
  370.         search: ''
  371.     };
  372.     for (var i in obj) {
  373.         obj[i] = link[i];
  374.     }
  375.     return obj;
  376. }
  377.  
  378. /**
  379.  * Возвращает изображение с холста в виде Blob.
  380.  * @param {HTMLCanvasElement} canvas
  381.  * @param {string} MIME-тип в который хотим преобразовать изображение на холсте.
  382.  * @param {number} quality Качество JPEG-изображения, число с плавающей точкой в диапазоне от 0 до 1.
  383.  * @return {Blob}
  384.  */
  385. function canvasToBlob(canvas, type, quality)
  386. {
  387.     var data = canvas.toDataURL(type, quality);
  388.     data = atob(data.substr(data.indexOf(',') + 1));
  389.     var i = data.length;
  390.     var arr = new Uint8Array(i);
  391.     while (i--) {
  392.         arr[i] = data.charCodeAt(i);
  393.     }
  394.     return new Blob([arr], {type: type});
  395. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement