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
Реализуется очень просто:
А в геко, в прошлом году было реализована отложенная загрузка, которую уже все модные браузеры поддерживают. То есть, скрипт с атрибутом defer загружается после всех скриптов своего блока (head, body). Подробнее в ссылке ниже.
Реализуется практически аналогично:
Реализуется очень просто:
<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.
Всё казалось бы просто, но есть одно но, в параметр 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\ ";}
Это пример для символа →, он же →
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
$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
Дорогой дневничок... Кажется не туда пишу.
Так как всегда забываю о сабже, и каждый раз долго ищу, решил таки себе сохранить.
Запускать с командной строки win+r
ps: chrome нужно закрывать, полностью!
Так как всегда забываю о сабже, и каждый раз долго ищу, решил таки себе сохранить.
chrome.exe --pack-extension="C:\MyTheme"
Запускать с командной строки win+r
ps: chrome нужно закрывать, полностью!
23 мая 2010, 22:41
usejquery.org.ua
Шпору о джиквери переправил на домен http://usejq.org.ua/ , позже там будет что-то более полноценное.
- блог
- мои наработки
- Копи-зона
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>
