MicroTest

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » MicroTest » Тестовый форум » Тестовое сообщение


Тестовое сообщение

Сообщений 1 страница 30 из 32

1

Благодарим за выбор нашего сервиса!

0

2

[yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][ya[yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx]ndx][yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx][/yandx]

0

3

:sex:

0

4

:nope:  :no:  :|  :canthearyou:

0

5

Спойлер|Закрыть

траливали

0

6

[mod]fffffffffffff[/mod]

[ex]fffffffffffff[/ex]

0

7

=Spoiler написал(а):

bbbbbbbb

0

8

=Spoiler написал(а):

пппппппппппппп

0

9

http://www.yoursmileys.ru/tsmile/rulez/t2025.gif

0

10

http://i.smiles2k.net/plakat_smiles/admintutja.gif

0

11

http://www.kolobok.us/smiles/user/KidRock_01.gif

0

12

[audio]http://bbbbbb.mp3[/audio]

0

13

Спойлер|Закрыть

Javascript How To

Тонкости работы в Javascript, интересные алгоритмы, а также ответы на часто задаваемые вопросы по Javascript.
Перебор ассоциативных массивов
16.04.2009 от  dimoha

Для перебора ассоциативных массивов в Javascript удобнее всего использовать конструкцию for … var … in. Например,
for (var i in Arr)
{
alert('Arr[i] = ' + Arr[i]);
}

См. также:
Как быстро проверить включена ли в браузере графика?
Как проверить включены ли cookie в браузере?
Быстрая вставка элементов в DOM из Javascript

Рубрики: Разное |  Комментариев нет »
MD4 в Javascript
16.04.2009 от  dimoha

Набрел на библиотеку с реализацией MD4 в Javascript. Несмотря на то, что MD4 практически нигде не используется, все же иногда для совместимости с другими приложениями он требуется.
/*
* A JavaScript implementation of the RSA Data Security, Inc. MD4 Message
* Digest Algorithm, as defined in RFC 1320.
* Version 2.1 Copyright (C) Jerrad Pierce, Paul Johnston 1999 - 2002.
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*/

/*
* Configurable variables. You may need to tweak these to be compatible with
* the server-side, but the defaults work in most cases.
*/
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
* These are the functions you'll usually want to call
*/
function hex_md4(s){ return binl2hex(core_md4(str2binl(s), s.length * chrsz));}
function b64_md4(s){ return binl2b64(core_md4(str2binl(s), s.length * chrsz));}
function str_md4(s){ return binl2str(core_md4(str2binl(s), s.length * chrsz));}
function hex_hmac_md4(key, data) { return binl2hex(core_hmac_md4(key, data)); }
function b64_hmac_md4(key, data) { return binl2b64(core_hmac_md4(key, data)); }
function str_hmac_md4(key, data) { return binl2str(core_hmac_md4(key, data)); }

/*
* Perform a simple self-test to see if the VM is working
*/
function md4_vm_test()
{
  return hex_md4("abc") == "a448017aaf21d8525fc10ae87aa6729d";
}

/*
* Calculate the MD4 of an array of little-endian words, and a bit length
*/
function core_md4(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << (len % 32);
  x[(((len + 64) >>> 9) << 4) + 14] = len;

  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;

    a = md4_ff(a, b, c, d, x[i+ 0], 3 );
    d = md4_ff(d, a, b, c, x[i+ 1], 7 );
    c = md4_ff(c, d, a, b, x[i+ 2], 11);
    b = md4_ff(b, c, d, a, x[i+ 3], 19);
    a = md4_ff(a, b, c, d, x[i+ 4], 3 );
    d = md4_ff(d, a, b, c, x[i+ 5], 7 );
    c = md4_ff(c, d, a, b, x[i+ 6], 11);
    b = md4_ff(b, c, d, a, x[i+ 7], 19);
    a = md4_ff(a, b, c, d, x[i+ 8], 3 );
    d = md4_ff(d, a, b, c, x[i+ 9], 7 );
    c = md4_ff(c, d, a, b, x[i+10], 11);
    b = md4_ff(b, c, d, a, x[i+11], 19);
    a = md4_ff(a, b, c, d, x[i+12], 3 );
    d = md4_ff(d, a, b, c, x[i+13], 7 );
    c = md4_ff(c, d, a, b, x[i+14], 11);
    b = md4_ff(b, c, d, a, x[i+15], 19);

    a = md4_gg(a, b, c, d, x[i+ 0], 3 );
    d = md4_gg(d, a, b, c, x[i+ 4], 5 );
    c = md4_gg(c, d, a, b, x[i+ 8], 9 );
    b = md4_gg(b, c, d, a, x[i+12], 13);
    a = md4_gg(a, b, c, d, x[i+ 1], 3 );
    d = md4_gg(d, a, b, c, x[i+ 5], 5 );
    c = md4_gg(c, d, a, b, x[i+ 9], 9 );
    b = md4_gg(b, c, d, a, x[i+13], 13);
    a = md4_gg(a, b, c, d, x[i+ 2], 3 );
    d = md4_gg(d, a, b, c, x[i+ 6], 5 );
    c = md4_gg(c, d, a, b, x[i+10], 9 );
    b = md4_gg(b, c, d, a, x[i+14], 13);
    a = md4_gg(a, b, c, d, x[i+ 3], 3 );
    d = md4_gg(d, a, b, c, x[i+ 7], 5 );
    c = md4_gg(c, d, a, b, x[i+11], 9 );
    b = md4_gg(b, c, d, a, x[i+15], 13);

    a = md4_hh(a, b, c, d, x[i+ 0], 3 );
    d = md4_hh(d, a, b, c, x[i+ 8], 9 );
    c = md4_hh(c, d, a, b, x[i+ 4], 11);
    b = md4_hh(b, c, d, a, x[i+12], 15);
    a = md4_hh(a, b, c, d, x[i+ 2], 3 );
    d = md4_hh(d, a, b, c, x[i+10], 9 );
    c = md4_hh(c, d, a, b, x[i+ 6], 11);
    b = md4_hh(b, c, d, a, x[i+14], 15);
    a = md4_hh(a, b, c, d, x[i+ 1], 3 );
    d = md4_hh(d, a, b, c, x[i+ 9], 9 );
    c = md4_hh(c, d, a, b, x[i+ 5], 11);
    b = md4_hh(b, c, d, a, x[i+13], 15);
    a = md4_hh(a, b, c, d, x[i+ 3], 3 );
    d = md4_hh(d, a, b, c, x[i+11], 9 );
    c = md4_hh(c, d, a, b, x[i+ 7], 11);
    b = md4_hh(b, c, d, a, x[i+15], 15);

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);

  }
  return Array(a, b, c, d);

}

/*
* These functions implement the basic operation for each round of the
* algorithm.
*/
function md4_cmn(q, a, b, x, s, t)
{
  return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
}
function md4_ff(a, b, c, d, x, s)
{
  return md4_cmn((b & c) | ((~b) & d), a, 0, x, s, 0);
}
function md4_gg(a, b, c, d, x, s)
{
  return md4_cmn((b & c) | (b & d) | (c & d), a, 0, x, s, 1518500249);
}
function md4_hh(a, b, c, d, x, s)
{
  return md4_cmn(b ^ c ^ d, a, 0, x, s, 1859775393);
}

/*
* Calculate the HMAC-MD4, of a key and some data
*/
function core_hmac_md4(key, data)
{
  var bkey = str2binl(key);
  if(bkey.length > 16) bkey = core_md4(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_md4(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
  return core_md4(opad.concat(hash), 512 + 128);
}

/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
* Bitwise rotate a 32-bit number to the left.
*/
function rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
* Convert a string to an array of little-endian words
* If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
*/
function str2binl(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
  return bin;
}

/*
* Convert an array of little-endian words to a string
*/
function binl2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
  return str;
}

/*
* Convert an array of little-endian words to a hex string.
*/
function binl2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
  }
  return str;
}

/*
* Convert an array of little-endian words to a base-64 string
*/
function binl2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * ( i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}

См. также:
Реализация алгоритма SHA-1 на Javascript
Алгоритм MD5 в Javascript
GUID генератор на Javascript

Рубрики: Алгоритмы |  Комментариев нет »
Быстрые, быстрые циклы
16.04.2009 от  dimoha

Некто Gregory Reimer провел кучу тестов во всех современных браузерах на вопрос быстродействия обыкновенных циклов - один на прохождение по списку DOM-элементов, а второй классический перебор элементов массива. Максимальное быстродействие получается при использовании следующих конструкций:
// прохождение по списку DOM
for (var i=0, myNode; myNode = myCollection[i++];) {
    // делаем что нибудь здесь
}
var i = arr.length; while (i--) {
    // делаем что нибудь здесь
}

См. также:
Просмотр исходного кода выделенного фрагмента в Firefox
Создание уникальных лоадеров для AJAX
Преобразование фаренгейтов в градусы

Рубрики: Интересное, Производительность |  Комментариев нет »
navigator.mozIsLocallyAvailable
16.04.2009 от  dimoha

Оговорюсь сразу, что метод navigator.mozIsLocallyAvailable специфичен для Mozilla. А используется он для определения доступности в кэше того или иного URI в онлайн/офлайн режимах. Синтаксис:
window.navigator.mozIsLocallyAvailable(uri, ifOffline);

uri - адрес ресурса, доступность которого требуется проверить. ifOffline - проверять ли данные в кэше?

См. также:
Проверка связи :)
Копируем данные в буфер обмена
Определение версии флеш-плейера

Рубрики: Разное, Браузеры |  Комментариев нет »
Подключение JS файлов из Javascript
16.04.2009 от  dimoha

Можно ли динамически через Javascript подгружать другие JS-файлы? Однозначно можно при помощи функции, подобной этой:
function include(fn) {
    document.write('<' + 'script');
    document.write(' type="text/javascript"');
    document.write(' src="' + fn + '">');
    document.write('</' + 'script' + '>');
}

См. также:
Определение версии флеш-плейера
Print_r для Javascript
Забавный букмарклет: монитор загрузки процессора

Рубрики: Интересное, Разное |  Комментариев нет »
Array_diff в Javascript
09.04.2009 от  dimoha

Функция для вычисления расхождения массивов, аналогичная пэхапешной тезке.
function array_diff()
{
    var arr1 = arguments[0], retArr = {};
    var k1 = '', i = 1, k = '', arr = {};

    arr1keys:
    for (k1 in arr1) {
for (i = 1; i < arguments.length; i++) {
    arr = arguments[i];
    for (k in arr) {
    if (arr[k] === arr1[k1]) {
        // If it reaches here, it was found in at least one array, so try next value
        continue arr1keys;
    }
    }
    retArr[k1] = arr1[k1];
}
    }       
    return retArr;
}

См. также:
Создание событий по клавиатурному сочетанию в Javascript
Mozilla & base64 в Javascript
SEO букмарклет для показа ссылок с nofollow

Рубрики: Алгоритмы |  Комментариев нет »
Strip_tags в Javascript
09.04.2009 от  dimoha

Функция, аналогичная php-шной strip_tags, предназначенная для удаления тегов и строки. К слову, мне не нравится иногда поведение этой функции, а именно то, что при удалении тегов было бы неплохо заменять их на один пробел, чтобы не сливались слова из разных тегов.
function  strip_tags(str, allowed_tags) {
            var key = '', allowed = false;
            var matches = [];
            var allowed_array = [];
            var allowed_tag = '';
            var i = 0;
            var k = '';
            var html = '';

            var replacer = function(search, replace, str) {
                return str.split(search).join(replace);
            };

            // Build allowes tags associative array
            if (allowed_tags) {
                allowed_array = allowed_tags.match(/([a-zA-Z]+)/gi);
            }

            str += '';

            // Match tags
            matches = str.match(/(<\/?[\S][^>]*>)/gi);

            // Go through all HTML tags
            for (key in matches) {
                if (isNaN(key)) {
                    // IE7 Hack
                    continue;
                }

                // Save HTML tag
                html = matches[key].toString();

                // Is tag not in allowed list? Remove from str!
                allowed = false;

                // Go through all allowed tags
                for (k in allowed_array) {
                    // Init
                    allowed_tag = allowed_array[k];
                    i = -1;

                    if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');}
                    if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');}
                    if (i != 0) { i = html.toLowerCase().indexOf('</'+allowed_tag)   ;}

                    // Determine
                    if (i == 0) {
                        allowed = true;
                        break;
                    }
                }

                if (!allowed) {
                    str = replacer(html, "", str); // Custom replace. No regexing
                }
            }

            return str;
        }

См. также:
Сортировка строк таблицы на клиентской стороне
Функция Trim для Javascript
Еще раз о Trim для Javascript

Рубрики: Алгоритмы |  Комментариев нет »
Как перекрыть select в Internet Explorer?
09.04.2009 от  dimoha

Элементы SELECT это вечная проблема для JS-программиста при отладке скриптов под Internet Explorer. Основная проблема в том, что этот элемент в этом браузере практически ничем не перекрыть. Единственный способ избежать неприятного эффекта - скрывать селекты или перекрывать их элементом IFRAME.

См. также:
Safari 4: чемпион по скорости выполнения Javascript
Копируем данные в буфер обмена
Функция Javascript для добавления страницы в закладки

Рубрики: Браузеры, Алгоритмы |  Комментариев нет »
Позиция курсора в textarea
09.04.2009 от  dimoha

Две полезные функции, для получения значения позиции курсора и его установки в поле textarea. По идее должно работать и для полей типа input=text. Кроссбраузерно.
function getCaretPosition (ctrl) {

var CaretPos = 0;
// IE Support
if (document.selection) {

    ctrl.focus ();
    var Sel = document.selection.createRange ();

    Sel.moveStart ('character', -ctrl.value.length);

    CaretPos = Sel.text.length;
}
// Firefox support
else if (ctrl.selectionStart || ctrl.selectionStart == '0')
    CaretPos = ctrl.selectionStart;
return (CaretPos);
}

function setCaretPosition(ctrl, pos)
{

if(ctrl.setSelectionRange)
{
    ctrl.focus();
    ctrl.setSelectionRange(pos,pos);
}
else if (ctrl.createTextRange) {
    var range = ctrl.createTextRange();
    range.collapse(true);
    range.moveEnd('character', pos);
    range.moveStart('character', pos);
    range.select();
}
}

См. также:
Создание событий по клавиатурному сочетанию в Javascript
Проверка максимальной длины введенного текста в textarea
Копируем данные в буфер обмена

Рубрики: Интересное |  Комментариев нет »
Реализация алгоритма SHA-1 на Javascript
09.04.2009 от  dimoha

Нашел реализацию алгоритма SHA-1 в Javascript в виде специальной библиотеки. Код следующий:
/*
* A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
* in FIPS PUB 180-1
* Version 2.1a Copyright Paul Johnston 2000 - 2002.
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for details.
*/

/*
* Configurable variables. You may need to tweak these to be compatible with
* the server-side, but the defaults work in most cases.
*/
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
* These are the functions you'll usually want to call
* They take string arguments and return either hex or base-64 encoded strings
*/
function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}

/*
* Perform a simple self-test to see if the VM is working
*/
function sha1_vm_test()
{
  return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}

/*
* Calculate the SHA-1 of an array of big-endian words, and a bit length
*/
function core_sha1(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << (24 - len % 32);
  x[((len + 64 >> 9) << 4) + 15] = len;

  var w = Array(80);
  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;
  var e = -1009589776;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    var olde = e;

    for(var j = 0; j < 80; j++)
    {
      if(j < 16) w[j] = x[i + j];
      else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
      var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
      e = d;
      d = c;
      c = rol(b, 30);
      b = a;
      a = t;
    }

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
    e = safe_add(e, olde);
  }
  return Array(a, b, c, d, e);

}

/*
* Perform the appropriate triplet combination function for the current
* iteration
*/
function sha1_ft(t, b, c, d)
{
  if(t < 20) return (b & c) | ((~b) & d);
  if(t < 40) return b ^ c ^ d;
  if(t < 60) return (b & c) | (b & d) | (c & d);
  return b ^ c ^ d;
}

/*
* Determine the appropriate additive constant for the current iteration
*/
function sha1_kt(t)
{
  return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
         (t < 60) ? -1894007588 : -899497514;
}

/*
* Calculate the HMAC-SHA1 of a key and some data
*/
function core_hmac_sha1(key, data)
{
  var bkey = str2binb(key);
  if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
  return core_sha1(opad.concat(hash), 512 + 160);
}

/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
* Bitwise rotate a 32-bit number to the left.
*/
function rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
* Convert an 8-bit or 16-bit string to an array of big-endian words
* In 8-bit function, characters >255 have their hi-byte silently ignored.
*/
function str2binb(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
  return bin;
}

/*
* Convert an array of big-endian words to a string
*/
function binb2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
  return str;
}

/*
* Convert an array of big-endian words to a hex string.
*/
function binb2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
  }
  return str;
}

/*
* Convert an array of big-endian words to a base-64 string
*/
function binb2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * (3 -  i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}

См. также:
MD4 в Javascript
Алгоритм MD5 в Javascript
GUID генератор на Javascript

Рубрики: Алгоритмы |  Комментариев нет »
О правилах оформления исходного кода
02.04.2009 от  dimoha

Знаете что больше всего меня бесит в классически оформленном коде Javascript? Расстановка фигурных кавычек в стиле «граблей»! Речь идет о вот чем:
function user() {
....
for (..) {
...
}
}

Неужели никто не понимает, что подобное размещение первой открывающей фигурной кавычки попросту делает код нечитабельным? Ведь грамотно используя табуляцию можно всегда четко отследить ветвления даже в очень сложном коде. А тут же просто глаза заболят от постоянного переключения внимания справа налево.

См. также:
Просмотр исходного кода выделенного фрагмента в Firefox
AJAX-формы: как учесть пользователей с отключенным Javascript?
Проверка существования функции в Javascript

Рубрики: Разное |  Комментариев нет »
Преобразование фаренгейтов в градусы
02.04.2009 от  dimoha

Если вы смотрите какой-нибудь западный фильм и услышали нереальное для вас значение температуры, то знайте, что это скорей всего температура в фаренгейтах. Хотели бы узнать сколько это будет в градусах цельсия? Функция для преобразования значения температуры из фаренгейтов в градусы цельсия:
function f2c_convert(fv) {
fv = fv * 9 / 5 + 32; 
fv = Math.round(fv); 
return fv;
}

См. также:
AJAX-формы: как учесть пользователей с отключенным Javascript?
Параметры функции по умолчанию в Javascript
toStaticHTML и IE 8: чистый HTML

Рубрики: Разное |  Комментариев нет »
Serialize в Javascript? Это возможно!
02.04.2009 от  dimoha

Оказывается в рамках проекта Php.js данная проблема давным давно решена. В Javascript можно сериализовать данные и получить сериализованную строку точь в точь как в PHP. Исходный код функции:
function serialize( mixed_value ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Arpad Ray (mailto:arpad@php.net)
    // +   improved by: Dino
    // +   bugfixed by: Andrej Pavlovic
    // +   bugfixed by: Garagoth
    // %          note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %          note: Aiming for PHP-compatibility, we have to translate objects to arrays
    // *     example 1: serialize(['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: 'a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}'
    // *     example 2: serialize({firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'});
    // *     returns 2: 'a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}'

    var _getType = function( inp ) {
        var type = typeof inp, match;
        var key;
        if (type == 'object' && !inp) {
            return 'null';
        }
        if (type == "object") {
            if (!inp.constructor) {
                return 'object';
            }
            var cons = inp.constructor.toString();
            if (match = cons.match(/(\w+)\(/)) {
                cons = match[1].toLowerCase();
            }
            var types = ["boolean", "number", "string", "array"];
            for (key in types) {
                if (cons == types[key]) {
                    type = types[key];
                    break;
                }
            }
        }
        return type;
    };
    var type = _getType(mixed_value);
    var val, ktype = '';

    switch (type) {
        case "function":
            val = "";
            break;
        case "undefined":
            val = "N";
            break;
        case "boolean":
            val = "b:" + (mixed_value ? "1" : "0");
            break;
        case "number":
            val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
            break;
        case "string":
            val = "s:" + mixed_value.length + ":\"" + mixed_value + "\"";
            break;
        case "array":
        case "object":
            val = "a";
            /*
            if (type == "object") {
                var objname = mixed_value.constructor.toString().match(/(\w+)\(\)/);
                if (objname == undefined) {
                    return;
                }
                objname[1] = serialize(objname[1]);
                val = "O" + objname[1].substring(1, objname[1].length - 1);
            }
            */
            var count = 0;
            var vals = "";
            var okey;
            var key;
            for (key in mixed_value) {
                ktype = _getType(mixed_value[key]);
                if (ktype == "function") {
                    continue;
                }

                okey = (key.match(/^[0-9]+$/) ? parseInt(key) : key);
                vals += serialize(okey) +
                        serialize(mixed_value[key]);
                count++;
            }
            val += ":" + count + ":{" + vals + "}";
            break;
    }
    if (type != "object" && type != "array") val += ";";
    return val;
}

См. также:
Проверка надежности пароля в Javascript
Сортировка строк таблицы на клиентской стороне
Strip_tags в Javascript

Рубрики: Интересное |  Комментариев нет »
Управляем стилями через Javascript
02.04.2009 от  dimoha

Через Javascript можно, оказывается очень легко и кроссбраузерно переключать используемый CSS-файл. К примеру:
function setStyleSheet(href)
{
elementById('cssfile).href = href;
}

См. также:
Импорт данных из DOC-файла в HTML-документ средствами Javascript
Данные о мониторе пользователя
window.find :) правда только в FF :(

Рубрики: Интересное, Разное |  Комментариев нет »
Запрещаем через Javascript правый клик на веб-странице
02.04.2009 от  dimoha

Дурацкая затея конца 90-х годов, но тем не менее находятся и до сих пор мечтатели, считающие что запретив правый клик, можно запретить копи-паст. Именно для этой категории владельцев сайтов следующий код:
script language="JavaScript">
<!--
function xclick(e) {
    if (document.all && event.button == 2) return false;
    if (document.layers && e.which == 3) return false;
}
if (document.layers) document.captureEvents(Event.MOUSEDOWN);
document.onmousedown=xclick;
// --></script>

P.S. Работает только в IE и некоторых версиях NN.

См. также:
Управляем стилями через Javascript
Как определить через Javascript все посещенные ссылки?
Копируем данные в буфер обмена

Рубрики: Разное, Браузеры |  Комментариев нет »
Как измерить скорость выполнения скриптов в Javascript?
26.03.2009 от  dimoha

На самом деле, измерить скорость выполнения скриптов в Javascript очень просто. Перед кодом, скорость выполнения которого измеряется нужно запомнить текущее время, а после вывести разницу между опять же текущим и тем, что запомнили:
var start = new Date();

... ваш код

var end = new Date();
alert('Скорость ' + (end.getTime()-start.getTime()) + ' мс');

Потестировал скорость работы jQuery на сайте службы доставки контактных линз, - работает быстро.

См. также:
Некоторые советы по производительности JS-скриптов
Javascript: работаем с Cookies
Safari 4: чемпион по скорости выполнения Javascript

Рубрики: Производительность |  Комментариев нет »
Многострочная переменная в Javascript или как не нужно делать :)
26.03.2009 от  dimoha

Порой люди от не знания идут на такие ухищрения, что потом, узнав наиболее оптимальный способ решения, сами же диву даются. На Snipplr публикуют иногда очень полезные советы. В этот раз там приведен пример как объявить многостроковую переменную в Javascript: Сравните:
var myString = ""+<r><![CDATA[
      <div class="pmcb_top">
        <div class="pmcb_tabs">
          <ul>
            <li>Chat</li>
            <li>Monks'n'stuff</li>
            <li>Other</li>
          </ul>
        </div>
      </div>
  ]]></r>;

См. также:
Сортировка строк таблицы на клиентской стороне

Рубрики: Интересное |  Комментариев нет »
Проверка связи :)
26.03.2009 от  dimoha

Смешно, но заголовок поста, - это вольный перевод состояния браузера с названием «Online». У Mozilla оказывается есть свойство, позволяющее уточнить в online-состоянии браузер или нет:
alert(window.navigator.onLine);

См. также:
Копируем данные в буфер обмена
Просмотр исходного кода выделенного фрагмента в Firefox
navigator.mozIsLocallyAvailable

Рубрики: Интересное, Браузеры |  Комментариев нет »
Быстрая вставка элементов в DOM из Javascript
26.03.2009 от  dimoha

Парень по имени John Resig обнаружил, что функция о которой практически все разработчики попросту забыли может ускорить в 2-3 раза скорость работы с DOM, например, при вставке элементов. Речь идет о document.createDocumentFragment. В приведенном ниже примере как раз она и используется… к слову, код работает во всех современных браузерах.
var div = document.getElementsByTagName("div");
var fragment = document.createDocumentFragment();

for ( var e = 0; e <elems.length; e++ ) {
        fragment.appendChild( elems[e] );
}

for ( var i = 0; i <div.length; i++ ) {
        div[i].appendChild( fragment.cloneNode(true) );
}

См. также:
Быстрые, быстрые циклы
Забавный букмарклет: монитор загрузки процессора
Mozilla & base64 в Javascript

Рубрики: Производительность, Алгоритмы |  Комментариев нет »
Javascript: работаем с Cookies
26.03.2009 от  dimoha

Для тех, кто работает JQuery существует плагин Cookies, упрощающий работу с кукисами до нельзя. А вот программистам, предпочитающим «чистый» Javascript, повезло меньше. Быстрой и удобной работы с Cookies просто так не будет, если, конечно, не использовать приведенный ниже функции в своей работе  :
function getCookie(name) { // get cookie
    var dc = document.cookie;
var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return false;
    } else {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) {
        end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
}
function setCookie(cookieName,cookieValue,nDays) { // set cookie
var today = new Date();
var expire = new Date();
if (nDays==null || nDays==0) nDays=1;
expire.setTime(today.getTime() + 3600000*24*nDays);
document.cookie = cookieName+"="+escape(cookieValue) + "; path=/; expires="+expire.toGMTString();
}

См. также:
Как проверить включены ли cookie в браузере?
Как измерить скорость выполнения скриптов в Javascript?
Определение версии флеш-плейера

Рубрики: Разное, Алгоритмы |  Комментариев нет »

« Раньше
Свежие записи
Перебор ассоциативных массивов
MD4 в Javascript
Быстрые, быстрые циклы
navigator.mozIsLocallyAvailable
Подключение JS файлов из Javascript
Array_diff в Javascript
Strip_tags в Javascript
Как перекрыть select в Internet Explorer?
Позиция курсора в textarea
Реализация алгоритма SHA-1 на Javascript
Рубрики:
Алгоритмы
Браузеры
Букмарклеты
Интересное
Производительность
Разное
Архив:
Апрель 2009
Март 2009
Февраль 2009
Январь 2009
Поиск:

Мета:
RSS
RSS-лента комментариев
Браузеры
Вёрстка сайтов

© 2006. Работает на Wordpress, тема от Kaushal Sheth , дизайн Arcsin, локализация Mywordрress.ru

0

14

Спойлер|Закрыть

nhfv-gfhf-hfv

ufufuf-

vfvfvf

0

15

Спойлер|Закрыть

ggggggggggggggggggggggggggggggggggggggggggg

0

16

Спойлер|Закрыть

дямс
пямс
бямс

0

17

Спойлер|Закрыть

чтомс
бомс
крямс

0

18

Спойлер|Закрыть

дримс

чимс-димс)

0

19

Терминатор возвращаеццо!

Я всех приглашаю на железный шашлык.

Доктор Живаго :)

0

20

мама мыла раму

Спойлер

ра-ра-ра

рама мыла маму

0

21

МАМА

Спойлер

папа

детишки

мама

Спойлер

папа

детишки

мама

Спойлер

папа

детишки

мама

Спойлер

папа

детишки

0

22

=Spoiler написал(а):

Траливали :)

0

23

Код:
[spoiler=Спойлер]не работает он тут![/spoiler]

0

24

Код:
[spoiler=Спойлер]не работает он тут![/spoiler]
Спойлер

не работает он тут!

Спойлер

не работает он тут!

Спойлер

не работает он тут!

0

25

Спойлер

не работает он тут!

0

26

Спойлер

не работает он тут!

0

27

Спойлер

не работает он тут!

Спойлер

не работает он тут!

0

28

Код:
Спойлер

не работает он тут!

0

29

Спойлер

не работает

он тут!

Код:
[spoiler=Спойлер]не работает он тут![/spoiler]
Спойлер

не работает он тут!

Спойлер

не работает он тут!

0

30

Ага :) Вот где прячется талантливый мистер Рипли

0


Вы здесь » MicroTest » Тестовый форум » Тестовое сообщение


Рейтинг форумов | Создать форум бесплатно