102 заметки с тегом

javascript РСС

Ctrl +  Позднее

19 октября 2010, 14:31

javascript: unterminated string errors

Если вам встретились ошибки:
unterminated string literal
unterminated regular expression literal

Паниковать не стоит, это всего лишь сервер обрывает ваш скрипт на каком либо тэге, то ли в строке, то ли в регекспе.

Если есть строка
$str .= "</a>"
Или любая подобная, нужно её немножко конвертнуть
$str .= "</" + "a>"

зы: пришлось чинить стандартные скрипты, которые работали много лет, потому что хостер что-то нахимичил в конфиге апача. Что именно предстоит ещё узнать.

Это всё! Всем хорошего кодинга.
javascript

14 октября 2010, 9:06

Javascript: букмарклет для сбора всех свойств this

(function(){
  var results = [];
  for(var p in this) {
    results.push(p);
  }
  alert("Leaked: \r\n" + results.join(" \r\n"));
})();


javascript

15 июня 2010, 16:21

почти аналог GM_xmlhttpRequest

У замечательного аддона к ФФ обезьянке, есть функция для аджаксика. Когда хочется один такой скриптик пернести на Хромого, например, он начинает спрашивать эту функцию. Потому встречайте:

GM_xmlhttpRequest = function(params) {
  var request = new XMLHttpRequest()
  
  request.onreadystatechange = function() {
    if (params.onreadystatechange) params.onreadystatechange(request)
    if (request.readyState == 4) {
      if (request.status >= 200 && request.status < 400) if (params.onload) params.onload(request)
      else if (params.onerror) params.onerror(request)
    }
  }
  
  request.open(params.method, params.url, true)
  if (params.headers) for (name in params.headers)
    request.setRequestHeader(name, params.headers[name])
  
  request.send(params.data)
  return request

}
javascript

9 июня 2010, 10:18

Сравнение таблиц в двух БД (и больше) Избранное

Когда дохера работы, начинаешь страдать такой ерундой :)
Раз в несколько месяцев приходится сравнивать БД, и каждый раз в ручную. Один даже раз софт сутки искал, но он ужасен, весь. Немного пострадав, минут 30, получился такой код:
  • собираем всё в масcив;
  • выводим всё красиво в табличках;
  • подключаем jQ и делаем удобную «обёрточку»;
  • ...
  • Profit
<?php
  $user  = "root";
  $userp = "";
  mysql_connect("localhost", $user, $userp) or die(mysql_error());
	$table2compare = array("test1", "test2");
	$comparedtables = array(); $i = 0;
  foreach ($table2compare as $tablename){
  	$comparedtables["title"][$i] = $tablename;
    $db = mysql_query("SHOW TABLES IN $tablename");
    while($dbt = mysql_fetch_array( $db )){
      $table = mysql_query("SHOW COLUMNS FROM $dbt[0] FROM $tablename ");
      while($tbf = mysql_fetch_array( $table ))
      	$comparedtables["tables"][$dbt[0]][$i][] = $tbf;
    }
    $i++;
  }
	echo "<table><tr>";
	for ($j = 0; $j < $i; $j++) 
		echo "<td>".$comparedtables["title"][$j]."</td>";
	echo "</tr>";
	foreach ($comparedtables["tables"] as $table => $fields) {
		echo "<tr>";
		for ($j = 0; $j < $i; $j++) {
			if ($j > 0) $eq = $fields[$j] == $fields[0]; else $eq = true;
			echo "<td valign='top' ".(!$eq ? "style='background: #fcc;'" : "").">";
			if (empty($fields[$j])) continue;
			echo "<span>$table</span><br><table rules=all frame=box cellpadding='2'>
            <tr>
            	<td>Field</td>
            	<td>Type</td>
            	<td>Null</td>
            	<td>Key</td>
            	<td>Default</td>
            	<td>Extra</td>
            </tr>";
  		foreach ($fields[$j] as $field)
	      echo "<tr>
	      				<td>$field[0]</td>
	      				<td>$field[1]</td>
	      				<td>$field[2]</td>
	        			<td>$field[3]</td>
	        			<td>$field[4]</td>
	        			<td>$field[5]</td>
	        		</tr>";
      echo "</table></td>";
    }
    echo "</tr>";
  }
  
  echo "</table>";
  mysql_close();
?>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
	$(function(){
	  $("table table").hide();
	  $("table span").click(function(){
	  	$(this).next().next().toggle();
	  }).css({"cursor":"pointer"});
	});
</script>
javascript   mysql   php

26 мая 2010, 16:25

getBoxObjectFor для FireFox 3.6 и выше

    if(typeof document.getBoxObjectFor == "undefined") {
        document.getBoxObjectFor = function(elem) {
            var obj = new Object;
            var rect = elem.getBoundingClientRect();
            obj.y = rect.top;
            obj.x = rect.left;
            obj.width =Math.abs(rect.right-rect.left);
            obj.height = Math.abs(rect.bottom-rect.top);
            return obj;
        }
    }
firefox   javascript

17 мая 2010, 9:47

Firebug Lite Snippet (bookmarklet)

Сниппет, он же букмарклет в данном случае, это исполняемый из адресной строки браузера ДжС код. Его можно даже добавить в закладки, для удобства. Вот.

А вот и он
javascript:var firebug=document.createElement('script');
firebug.setAttribute('src',
'http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');
document.body.appendChild(firebug);
(function(){if(window.firebug.version)
{firebug.init();}else{setTimeout(arguments.callee);}})();
void(firebug);

Для удобства, запихаем его в текстареа
firebug   javascript   snippet

15 мая 2010, 21:18

Javascript: get Array Unique Values

getUniqueValues = function (arr) {
	var hash = new Object();
	for (j = 0; j < arr.length; j++) {hash[arr[j]] = true}
	var array = new Array();
	for (value in hash) {array.push(value)};
	return array;

}
javascript

12 мая 2010, 21:21

Javascript: простенькая истина оптимизации #1

Хехе, что бы всё было быстро и классно, вставки и аппенды в ДОМ делайте как можно реже, даже если это выглядит не очень красиво, зато прирост в скорости невообразимый! :)
javascript   истинка

5 мая 2010, 10:49

JavaScript: как colSpan у колонки поменять?

// ЫЕ любит так
obj.colSpan = "3";
// Делать нужно так
obj.setAttribute("colspan", "3");
javascript

27 апреля 2010, 15:21

Ещё один клёвы квиз, разбираем, что к чему :)

James Padolsey забецал клёвейший квиз, подумать пришлось, жаль ответы прям в коде.

Поехали
//1: логическое И, в итоге 3
1 && 3
//2: И даёт "foo" из ИЛИ тоже "foo"
1 && "foo" || 0
//3: тут из логического ИЛИ почему-то отвалилось "фуу", правильный ответ 1 - не понял
1 || "foo" && 0

//4: последний в списке через запятые, получим 3
(1,2,3)
//5: пустой шифтуй-не-шифтуй, всё равно количество 0
x = {shift:[].shift};

x.shift();
x.length;
//6: будет масив с [0], почему? не ясно
{foo:1}[0]

//7: получаем true
[true, false][+true, +false]
//8: '52'.split('') = [5,2], [5,2][0] = 5, ++5 = 6, ответ 6

++'52'.split('')[0]

//9:
a: b: c: d: e: f: g: 1, 2, 3, 4, 5; тут типо ответ 5, что и как мне не ясно

//10: нет объекта ["b"], error
{a: 1, b: 2}[["b"]]
//11: "b45"
"b" + 45

//12: у меня [обжект Обжект], автор говорит что "2"
{a:{b:2}}
//13: лишняя пара скобок, undefined
(function(){}())
//14: 0. - число, число в строку "0", длина этого 1, [1,2,3,4,5][1] = 2
[1,2,3,4,5][0..toString.length]

//15: "[Обжект]бе" больше "[Обжект]а"
({} + 'b' > {} + 'a')
//16: false -> this всегда обжект

Number.prototype.x = function(){ return this === 123; };
(123).x();

//17: "," -> массив из 2ух пустых, после джоин
Array(2).join()
//18: vars не определён
vars: var vars = vars;

//19: 123
{ foo = 123 }
//20: внутри "х" не определён, undef
x = 1; (function(){return x; var x = 2;}())

//21: delete от строки вернёт false
delete [].length;
//22: тут "1", почему пока не разобрался 
RegExp.prototype.toString = function() {return this.source};

/3/-/2/;
//23: error - ошибка синтаксиса
{break;4;}
//24: строка == обжект, в итоге фелс
'foo' == new function(){ return String('foo'); };

//25: [f,o,o]
'foo'.split('') + []
javascript

16 апреля 2010, 14:31

Пример оптимизации — shadowbox

Есть чудный «лайтбокс» под названием shadowbox. Всё хорошо, но для работы нужно много файлов:
  • джаваскритп,
  • стиль,
  • 5 картинок;
Возникла идея сунуть всё в один джс:
  1. Засовываем вместо ссылок на фон, base64-картинки, сделать их можно с помощью утилиты Сергея Чикуёнка. Не забываем, вставлять нужно без каких либо скобок;
  2. С помощью импорта стиля, просто сразу добавляем стиль перед </head>;
  3. засовываем всё это в начале скрипта, стиль строкой, строку импортим, а после самого скрипта шадовбокса, инициилизируем его-же;
  4. ...
  5. Профит!
ps: на старючие браузеры откровенно уже пофик, нужно это принять ;)




javascript   optimizing

10 апреля 2010, 12:12

JavaScript и константы

Все знают, что в JS констант нет, но с помощью супер-мега-гибкого ООП даже их можно реализовать:
"use strict";
var constant = (function () {
    var constants = {};
    return {
        define: function (name, value) {
            if (!name in constants) {
                constants[name] = value;
                return true;
            }
            return false;
        },
        defined: function (name) {
            return name in constants;
        },
        get: function (name) {
            return constants[name];
        }
    };
}());

Пример использования:
// check if defined
constant.defined("lol"); // false
// define
constant.define("lol", "ok!"); // true
// check again
constant.defined("lol"); // true
// attempt to redefine
constant.define("lol", "lolok"); // false
// was it constant or it changed?
// get da, get da, get da value
constant.get("lol"); // "ok!"


javascript

9 марта 2010, 18:07

Конвертируем в ASCII неведомые символы для cp1251 и копируем в буфер

Для того что бы конвертить неведомые символы, мы должны их отCharCodить, но функция конвертит всё подряд, поэтому мы предварительно составляем массив наших символов, и если не наши, мы их через ASCII-код выдаём :)

cp1251 = [33,34,35,36,37,38,39,40,41,42,43,44,45,46,48,49,50,51,52,53,54,
	55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,
	76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,93,94,95,96,97,
	98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,
	114,115,116,117,118,119,120,121,122,123,125,126,1025,1028,1030,
	1031,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,
	1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,
	1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,
	1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,
	1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,
	1108,1110,1111,8470];
function in_array(myValue,myArray){
	function equals(a,b){return (a === b);}
	for (var i in myArray) if (equals(myArray[i],myValue)) return true;
	return false;
}
function fetchAscii(){
	var obj = document.getElementById("converter").value,
  convertedObj = '', converted = document.getElementById("converted");
  var _length = obj.length;
  
  for(i = 0; i < _length; i++)
    convertedObj += (in_array(obj.charCodeAt(i),cp1251) ? '&#' : '&amp;#') 
    	+ obj.charCodeAt(i) + ';';
  converted.innerHTML = convertedObj;
  return false;
}  


зы: прикрутил сразу туда же ZeroClipboard :)
var clip = new ZeroClipboard.Client();
clip.setHandCursor( true );
clip.addEventListener('mouseOver', 
	function(clip){
		clip.setText(
			document.getElementById("converted")
			.innerHTML
			.split("&amp;")
			.join("&"))
	}
);
clip.glue("copy");
Особенность в том, что текст, который копируется, постоянно изменяется, то есть динамический %)
javascript

22 февраля 2010, 12:29

Javascript: конвертация типов переменных

var myVar   = "3.14159",  
    str     = ""+ myVar,//  в стринг     (string)
    int     = ~~myVar,  //  в интеджер   (integer)
    float   = 1*myVar,  //  во флоат     (float)
    bool    = !!myVar,  //  в булен - все непустые строки и числа кроме 0 будут true
    array   = [myVar];  //  в массив


javascript

17 февраля 2010, 9:34

Javascript: Строку в массив (string to array)

var nums = '1,2,3,4,5,6,7,8,9,10'.split(','); 
javascript

10 февраля 2010, 18:33

JavaScript викторина от perfectionkills.com

С утра твитор порадовал интересной викториной.

Немного подумав над ней, оказалось что решил я её без ошибок \m/, в отличии от многих других ;) (если бы на время, то наверное бы слил)...

По просьбам трудящихся, небольшие объяснения (в комментариях к викторине их можно частями найти)
  1. (function(){
      return typeof arguments;
    })();
    Вернёт object, потому что arguments всегда задана, и выводит все переменные которые приходят в функцию
  2. var f = function g(){ return 23; };
    typeof g();
    Получим ошибку, фугкция g() не объявлена. Если запустить f() получим «number»
  3. (function(x){
    delete x;
    return x;
    })(1);
    Небольшой подвох ;) Delete внутри функций не работает ;) Ответ 1
  4. var y = 1, x = y = typeof x;
    x;
    Объявление в «колоне» идёт слева на право, получаем в итоге строку «undefined»
  5. (function f(f){ 
    return typeof f(); 
    })(function(){ return 1; });
    функция выполняется вконце, возвращает 1, она же идёт в начало аргументом функции f(), и тип 1 — «number»
  6. var foo = { 
    bar: function() { return this.baz; }, 
    baz: 1
    };
    (function(){ 
    return typeof arguments[0]();
    })(foo.bar);
    Есть объект foo с методом bar, и функция которой в качестве аргумента передаём наш метод. Почему в итоге не «function»? this в обжекте ;) Лол! ок!
  7. var foo = {
    bar: function(){ return this.baz; },
    baz: 1
    }
    typeof (f = foo.bar)();
    А ну как конструкция, гибкость? :) смотрим выше
  8. var f = (function f(){ return "1"; }, function g(){ return 2; })();
    typeof f;
    исполняется последняя в списке функция g() — потому «number»
  9. var x = 1;
    if (function f(){}) {
    x += typeof f;
    }
    x;
    Опять функция в условии (смотри 2), в итоге получаем «1undefined»
  10. var x = [typeof x, typeof y][1];
    typeof typeof x;
    типоф от типоф всегда стринг ;)))
  11. (function(foo){
    return typeof foo.bar;
    })({ foo: { bar: 1 } });
    у нас просто получилось foo.foo.bar = 1, обжект в обжекте — масло масляное, потому «undefined»
  12. (function f(){
    function f(){ return 1; }
    return f();
    function f(){ return 2; }
    })();
    Последняя объявленная нижняя, потому получаем 2 %)
  13. function f(){ return f; }
    new f() instanceof f;
    инстансоф буллевый оператор, и итог функции f() не может быть в «движении» функции f.
  14. with (function(x, undefined){}) length;
    оператор with поиска находит оба аргумента, получаем 2 %)


javascript

10 февраля 2010, 11:27

Javascript, round 2 decimal?

Math.round(num* 100,2)/100
javascript

27 января 2010, 17:46

Утилиток нужных пост: CSS и JS уменьшаторы (minifier)

Последнее время часто пользуюсь, и так же часто не могу найти рабочие сайты. То домен пропал, то домен украли, то тупо сайт лежит. По этому сделал два зеркала для себя (если кому-то ещё пригодится, я не против ;) + любимый сайт для сжатия скриптов.



css   javascript   tools

12 января 2010, 13:51

Javascript API load from google ;)

<!-- Always need this javascript -->
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
	// Джикверюшка
	google.load('jquery', '1.3.2');
	google.load('jqueryui', '1.7.2');
	//other examples
	google.load('mootools', '1.2.1');
	google.load('prototype', '1.6.0.3');
	google.load('scriptaculous', '1.8.2');
	google.load('mootools', '1.2.1');
	google.load('dojo', '1.2.3');
	google.load('swfobject', '2.1');
	google.load('yui', '2.6.0');

</script>



PS: каникулы кончились? :))
google   javascript

24 декабря 2009, 17:33

Javscript: MD5 и пример использования (gravatar)

MD5 — 128-битный алгоритм хеширования, лалала, который нельзя взламать простым компом за пару лет ;)

Сам алгоритм запутан и немного ужасен, сделанных (готовых реализаций) найти через гугл очень просто, их там очень много, но смысл одинаковый и результат тоже ;)



Есть сервис аватаров gravatar.com, в котором каждый может хранить на каждый свой мейл по 1 аватару. Работает давно и надёжно.

Как же получить с него нужный аватар? Для этого достаточно к урлу http://www.gravatar.com/avatar/ добавить MD5 хэш емейла и параметр s которым мы указываем размер ;)
md5 = MD5(mail.value);
var gravatar = 'http://www.gravatar.com/avatar/';

var sURL = gravatar + md5;
var sParams = (s != '') ? 's=' + s : '';

sURL += (sParams != '') ? '?' + sParams : '';

avatar.src = sURL;



javascript   md5
Ctrl +  Ранее