Ctrl +  Позднее

5 декабря 2010, 19:10

Javascript: забавный сдвиг!

Неожиданное использование сдвига, так — на будущее!
var array = [
	function(){console.log("H")},
	function(){console.log("e")},
	function(){console.log("l")},
	function(){console.log("l")},
	function(){console.log("o")},
	function(){console.log(" ")},
	function(){console.log("w")},
	function(){console.log("o")},
	function(){console.log("r")},
	function(){console.log("d")},
	function(){console.log("!")}
];
while(array.length){
	array.shift()();
}

26 ноября 2010, 22:14

css3: linear gradient эссенция

.cool_gradient {
    background: #ebf1f6; /* old browsers */

background: -moz-linear-gradient(top, #ebf1f6 0%, #abd3ee 50%, #89c3eb 51%, #d5ebfb 100%); /* firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebf1f6), color-stop(50%,#abd3ee), color-stop(51%,#89c3eb), color-stop(100%,#d5ebfb)); /* webkit */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ebf1f6', endColorstr='#d5ebfb', GradientType=0 ); /* ie */ }

24 ноября 2010, 11:40

JavaScript: is and setAttr functions

Первая функция для работы с атрибутами
var attrWhiteList = /^(text|size|color|weight|true)$/;
function setAttr(name, value) {
    if (arguments.length > 1) {
        if (attrWhiteList.test(name)) {
            this[name] = value;
        }
    } else if (name === Object(name)) {
        for (var key in name) if (attrWhiteList.test(key)) {
            this[key] = name[key];
        }
    }
}

Вторая для определения, с чем имеем дело :)
function is(o, type) {
    type = String(type).toLowerCase();
    return  (type == "null" && o === null) ||
            (type == typeof o) ||
            (type == "object" && o === Object(o)) ||
            (type == "array" && Array.isArray && Array.isArray(o)) ||
            Object.prototype.toString.call(o).slice(8, -1).toLowerCase() == type;
}

is(function(){}, "object"); // true
is(function(){}, "function"); // true
is([], "object"); // true
is(new String("string"), "string"); // true


15 ноября 2010, 10:32

CSS3: Кроссбраузерный text-overflow в 7 строках

span
{
    display:block;
    overflow:hidden;
    white-space:nowrap;
    width:100%;
    -moz-binding:url("ellipsisxul.xml#ellipsis");
    text-overflow:ellipsis;
    -o-text-overflow:ellipsis;
}

и
<?xml version="1.0"?>
<bindings 
xmlns="www.mozilla.org/xbl" 
xmlns:xbl="www.mozilla.org/xbl" 
xmlns:xul="www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <binding id="ellipsis">
        <content>
            <xul:window>
                <xul:description crop="end" xbl:inherits="value=xbl:text">
                    <children/>
                </xul:description>
            </xul:window>
        </content>
 
    </binding>
</bindings>

зы: подсмотрено с хабра

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

javascript: unterminated string errors

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

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

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

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

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

18 октября 2010, 11:05

CSS: прикольные фонты

@font-face {
  font-family: 'Yanone Kaffeesatz';
  font-style: normal;
  font-weight: 400;
  src: local('Yanone Kaffeesatz Regular'),
  local('YanoneKaffeesatz-Regular'),
  url('http://themes.googleusercontent.com/font?kit=YDAoLskQQ5MOAgvHUQCcLdXn3cHbFGWU4T2HrSN6JF4')
  format('truetype');
}
@font-face {
  font-family: 'Inconsolata';
  font-style: normal;
  font-weight: normal;
  src: local('Inconsolata'),
  url('http://themes.googleusercontent.com/font?kit=7bMKuoy6Nh0ft0SHnIGMuaCWcynf_cDxXwCLxiixG1c')
  format('truetype');
}

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"));
})();


23 сентября 2010, 9:49

HTML5 и async атрибут в тэге script

HTML5 радует всё больше. В последних вебкитах реализована удобная штукенция, а именно неблокирующая (асинхронная) загрузка скриптов, таких скриптов обычно большая половина. Нужно просто добавить атрибут async

Реализуется очень просто:
<script async src="siteScript.js" onload="myInit()"></script>


А в геко, в прошлом году было реализована отложенная загрузка, которую уже все модные браузеры поддерживают. То есть, скрипт с атрибутом defer загружается после всех скриптов своего блока (head, body). Подробнее в ссылке ниже.

Реализуется практически аналогично:
<script defer src="siteScript.js" onload="myInit()"></script>




19 августа 2010, 14:52

CSS :before / :after

Контент в начале/в конце для разных элементов задаётся с помощью :псевдо классов :before / :after и параметра content.
.feedbacks blockquote:before,
.feedbacks blockquote:after {
	color: #000;
	padding: 5px;
	font-size: 24px;
	line-height: 12px;
}
.feedbacks blockquote:before { content: "«"; margin-left: -23px;}
.feedbacks blockquote:after { content: "»";}

Всё казалось бы просто, но есть одно но, в параметр content нельзя вставить спецсимвол простым кодом, нужно вставлять через косые утф-значение символа
.banner a:after { content: "\2192\ ";}

Это пример для символа &rarr;, он же

20 июня 2010, 16:57

Лучший xml2array

Немного наобламывавшись с предыдущим парсером, решил поискать что-то получше. Просмотрев с 50 парсеров, которые тупо не могли справится с моим примером xml, я таки нашёл тот, который это сделал очень быстро и без проблем.
function xml2array(&$string) {
    $parser = xml_parser_create();
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parse_into_struct($parser, $string, $vals, $index);
    xml_parser_free($parser);
    $mnary=array();
    $ary=&$mnary;
    foreach ($vals as $r) {
        $t=$r['tag'];
        if ($r['type']=='open') {
            if (isset($ary[$t])) {
                if (isset($ary[$t][0])) $ary[$t][]=array(); else $ary[$t]=array($ary[$t], array());
                $cv=&$ary[$t][count($ary[$t])-1];
            } else $cv=&$ary[$t];
            if (isset($r['attributes'])) {foreach ($r['attributes'] as $k=>$v) $cv['_a'][$k]=$v;}
            $cv['_c']=array();
            $cv['_c']['_p']=&$ary;
            $ary=&$cv['_c'];
        } elseif ($r['type']=='complete') {
            if (isset($ary[$t])) { // same as open
                if (isset($ary[$t][0])) $ary[$t][]=array(); else $ary[$t]=array($ary[$t], array());
                $cv=&$ary[$t][count($ary[$t])-1];
            } else $cv=&$ary[$t];
            if (isset($r['attributes'])) {foreach ($r['attributes'] as $k=>$v) $cv['_a'][$k]=$v;}
            
            if (isset($r['value'])) $cv['_v'] = $r['value'];
        } elseif ($r['type']=='close') {
            $ary=&$ary['_p'];
        }
    }    
    
    _del_p($mnary);
    return $mnary;
}
function _del_p(&$ary) {
    foreach ($ary as $k=>$v) {
        if ($k==='_p') unset($ary[$k]);
        elseif (is_array($ary[$k])) _del_p($ary[$k]);
    }
}

Последняя функция удаляет результаты рекурсий ;)



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

}

11 июня 2010, 9:49

CSS3: Перевод больших строк в новый рядок (pre-wrap)

pre {
	white-space: pre;           /* CSS 2.0 */
	white-space: pre-wrap;      /* CSS 2.1 */
	white-space: pre-line;      /* CSS 3.0 */
	white-space: -pre-wrap;     /* Opera 4-6 */
	white-space: -o-pre-wrap;   /* Opera 7 */
	white-space: -moz-pre-wrap; /* Mozilla */
	white-space: -hp-pre-wrap;  /* HP Printers */
	word-wrap: break-word;      /* IE 5+ */
	}


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>

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;
        }
    }

24 мая 2010, 11:05

Как делать CRX для Google Chrome

Дорогой дневничок... Кажется не туда пишу.

Так как всегда забываю о сабже, и каждый раз долго ищу, решил таки себе сохранить.
chrome.exe --pack-extension="C:\MyTheme"

Запускать с командной строки win+r
ps: chrome нужно закрывать, полностью!

23 мая 2010, 22:41

usejquery.org.ua Избранное

Шпору о джиквери переправил на домен http://usejq.org.ua/ , позже там будет что-то более полноценное.
  • блог
  • мои наработки
  • Копи-зона
Peace!

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);

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

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;

}

12 мая 2010, 21:21

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

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

10 мая 2010, 21:24

htaccess: Грузим сабдомены используя папки сайта

DocumentRoot /webhosts/
[...]
<VirtualHost *>
ServerAlias www.yourdomain.com
ServerName www.yourdomain.com
RewriteEngine  on
RewriteCond    %{HTTP_HOST}  ^yourdomain.com
RewriteRule    ^(.*)$        /www/$1 [L]
RewriteCond    %{HTTP_HOST}  ^www.*
RewriteRule    ^(.*)$        /www/$1 [L]
RewriteCond    %{HTTP_HOST}  ^(.*)\.yourdomain\.com
RewriteRule    ^(.*)$        /%1/$1 [L]
</VirtualHost>
Ctrl +  Ранее