18 февраля 2014, 18:11

Javascript: костЫль _gaq to ga

С переходом на новый аналитикс, они изменили названия методов и даже их параметры (нафиг это делать — не понятно).
В коде много вызовов «_gaq», что бы не переписывать все, написал костылёк (расширить и дополнить его легко), вроде полёт нормальный
_gaq2ga = [];
_gaq2ga.push = function(p) {
	var u = undefined;
	if (p[0] == u || p[1] == u) return false;
	if (p[0] == '_trackPageview') ga('send', 'pageview', p[1]);
	if (p[0] == '_trackEvent') ga('send', 'event', p[1], p[2] || '', p[3] || '');
	return false;
};
var _gaq = _gaq || _gaq2ga;

16 января 2014, 17:34

CSS: hack for new Chrome (29+)

@media all and (-webkit-min-device-pixel-ratio:0) and (min-resolution: .001dpcm) { .selector {} }
Chrome   css   hack

5 декабря 2013, 21:22

PHP: array_map AND str_replace

array_map("str_replace",array_fill(0, count($prop), "#ELEMENT_NAME#"), array_map("strip_tags",$prop), $prop);
нужно просто в нужном порядке аргументов (от стр_реплейс), дать 3 массива и все

28 октября 2013, 22:37

regexp для украинских слов (версия 4)

/([а-яґєії`´ʼ’ʼ’]+)/ui
ps: самое интересное в комментах

2 сентября 2013, 21:23

javascript detect capsLock

$('#password').keypress(function(e) { 
    var s = String.fromCharCode( e.which );
    if ( s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey ) {
        alert('caps is on');
    }
});

28 августа 2013, 15:26

Javascript add css rule

function addCSSRule(selector, property, value) {
	var cssfilescount = document.styleSheets.length-1;
	if (cssfilescount != -1) {
		var cssfile = document.styleSheets[cssfilescount];
		try { // normal browsers
			return cssfile.insertRule(selector+ ' {'+property+':'+value+'}', cssfile.cssRules.length);
		} catch(err) {
			try { // IE slag
				return cssfile.addRule(selector, property+':'+value);
			} catch(err) {
				return false;
			}
		}
	}
	return false;
}

Пример возвращает номер строки правила, если смог добавить и false если ничего не произошло.

21 августа 2013, 12:43

jQuery: Вывод дампа через pre делаем в виде простого дерева

$("pre").each(function(){
	$(this).html(
		$(this).text()
		.split("Array\n").join("<b>Array toggle</b>")
		.split("(").join("<i> [all]</i><div><pre>")
		.split(")").join("</pre></div>")
	)
});

$("pre").each(function(){
	var ptext = $(this).text(),
		ptextlen = ptext.length;
	if (ptextlen < 40) { /*  || (ptextlen < 20 && ptext.indexOf(' ') == -1) */
		$(this).parent().prev("i").remove();
		$(this).parent().prev("b").remove();
		$(this).parent().html("("+ptext+")").contents().unwrap();
	}
});

$("pre b").click(function(e){$(this).next().next("div").toggle();});
$("pre i").click(function(e){$(this).parent().find("div").show();});

$("pre b, pre i").css({
	"font-size":"12px",
	"color":"#000",
	"cursor":"pointer",
});
$("pre div").hide();


Что делает этот код:
* содержимое pre по дужкам разбивает на блоки
* добавляет кнопку сворачивания/разворачивания ветки и кнопку разворачивания всех подветок

13 августа 2013, 15:44

Преобразование картинок в data URI в браузере

Году в 2010 Сергей Чикуёнок сделал ПЕРЕДОВУЮ утилиту (см. заголовок), которой я с удовольствием пользовался. Позже (в середине 2012) браузеры по 20 раз обновились и утилита перестала работать, так как поменялись стандарты, а хаки, которыми он пользовался, тоже были прикрыты. Сам он начал пользоваться встроенными возможностями своего редактора и на утилиту положил. Я тоже не парился, потому что не нужно было. Но вот пришло время, когда весь её функционал нужен в полную силу, и пришлось чинить.

Вооружившись статейками и включив мозги (в последнее время приходится делать это все реже)
* http://www.html5rocks.com/en/tutorials/file/dndfiles/
* http://developers.whatwg.org/dnd.html

Починил я это мироточащее чудо за часик, закомментировав 5 функций и заменив одну на несколько строк (стандарты рулят).
Так что, join

5 августа 2013, 17:40

JavaScript: лечим URIError: malformed URI sequence

Иногда (на сайтах с разными кодировками) выскакивает ошибка URIError: malformed URI sequence при использовании decodeURIComponent.
Браузер ругается на символ процента в урле, что бы этого избежать, можно использовать такой вот костыль
function decodeURIComponentX( str ) {
    var out = '', arr, i = 0, l, x;
    arr = str.split(/(%(?:D0|D1)%.{2})/);
    for ( l = arr.length; i < l; i++ ) {
        try {
            x = decodeURIComponent( arr[i] );
        } catch (e) {
            x = arr[i];
        }
        out += x;
    }
    return out
}

2 августа 2013, 17:29

php: выбираем первый абзац текста (html)

mb_internal_encoding("UTF-8");
$pos2 = 0;
$haystack = $action['content'];
$needle = preg_match("/<\/p>/",$haystack) ? "</p>" : "</div>";
$meta_og = mb_substr($haystack,0, mb_strpos($haystack, $needle));
while (mb_strlen(trim(strip_tags($meta_og))) < 20) {
	$pos1 = mb_strpos($haystack, $needle, $pos2);
	$pos2 = mb_strpos($haystack, $needle, $pos1 + mb_strlen($needle));
	$meta_og = mb_substr($haystack ,$pos1, $pos2-$pos1);
}

ps: современные визвиг-редакторы параграфы оформляют либо p либо div

5 июля 2013, 12:42

Placeholder color

В последнее время все чаще меняю эти значения, решил себе схоронить
::-webkit-input-placeholder { /* WebKit browsers */
    color:    #999;
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
    color:    #999;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
    color:    #999;
}
:-ms-input-placeholder { /* Internet Explorer 10+ */
    color:    #999;
}

21 мая 2013, 10:47

PHP: заменить последнее вхождение слова

function str_lreplace($search, $replace, $subject){
    $pos = strrpos($subject, $search);
    if($pos !== false)    {
        $subject = substr_replace($subject, $replace, $pos, strlen($search));
    }
    return $subject;
}

15 февраля 2013, 19:58

javascript: ip to long / long to ip

function dot2num(dot) 
{
    var d = dot.split('.');
    return ((((((+d[0])*256)+(+d[1]) )*256)+(+d[2]) )*256)+(+d[3]);
}

function num2dot(num) 
{
    var d = num%256;
    for (var i = 3; i > 0; i--) 
    { 
        num = Math.floor(num/256);
        d = num%256 + '.' + d;
    }
    return d;
}

6 января 2013, 5:30

jQuery dot in ID selector? точка в селекторе по айди не работет! Опа? :)

$('#with\\.dot') 

4 января 2013, 0:48

Chrome javascript jquery: выполняем jsonp с сайта без Access-Control-Allow-Origin: *

При написании екстеншенов(аддонов) к хрому, частенько нужно данные выдирать с других сайтов. Сам же аддон должен работать на всех сайтах, даже на тех, на которых нет Access-Control-Allow-Origin: *. (В таких случаях просто получить ответ из-за ошибки не можем, а функция jsonp с самого аддона не предопределяется). Делаем просто jquery запрос (можно и без него), но функцию колбека определим через head.
var script = document.createElement('script');
script.textContent = 'addinfo = function(data){alert(data)}';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

$.ajax({"url":"https://some.com/get.json?id="+id,
    type: 'GET',
    async: false,
    contentType: "application/json",
    dataType: 'jsonp',
    jsonpCallback: "addinfo",
    success: function() {}
});

4 января 2013, 0:40

Javascript: Декодируем полученый аджаксом юникод

function qp_decode (str) {
	var r = /\\u([\d\w]{4})/gi;
	str = str.replace(r, function (match, grp) {
		return String.fromCharCode(parseInt(grp, 16)); 
	});
	return unescape(str);
}

22 декабря 2012, 18:52

JavaScript: Проверка на 404

function UrlExists(url) {
	var http = new XMLHttpRequest();
	http.open('HEAD', url, false);
	http.send();
	return http.status!=404;
}

24 ноября 2012, 3:09

Javascript: вставляем с буфера картинку в документ (Google Chrome)

document.onpaste = function(event){
  var items = event.clipboardData.items;
  document.write(JSON.stringify(items)); 
  var blob = items[0].getAsFile();
  var reader = new FileReader();
  reader.onload = function(event){
    document.write("<img src='"+event.target.result+"'/>")
  }; // data url!
  reader.readAsDataURL(blob);
}
зы: Для Фокса можно использовать просто contenteditable=’true’ и уже с него считывать картинку

12 ноября 2012, 14:07

PHP: мультибайтовою строку в массив с букв (multibyte string to array of letters)

Не думал что может быть такая проблема, но explode(’’,$string) не работал вообще, а mb_split глючил
preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);

Уже почти забыл, как пользоваться движком блога, мде :)

1 августа 2012, 13:10

apache folder / file list 2 (pure javascript :)

Пристыдили меня в предыдущем посте, что для мелких движений использовал монстра jQuery в 100кб, пришлось вспоминать родной javascript :)
Теперь без задержки в 1 секунду для загрузки jQuery :D
var 
	inArray = Array.prototype.indexOf ? 
		function (arr, val) {
			return arr.indexOf(val) != -1;
		} :
		function (arr, val) {
			var i = arr.length;
			while (i--) {
				if (a[i] === val) 
					return true;
				}
				return false;
			},
	a = document.getElementsByTagName("a"), 
	i = a.length; 

while(i--){
	if (inArray(["png","jpg","jpeg","gif"], a[i].href.split(".").pop())){
		a[i].innerHTML = "<img src='"+a[i].href+"' alt='"+a[i].innerHTML+"'/>";
	}
}

Букмарклет:

зы: только букмарклет ведет себя странно, разберусь попозже :)
Ctrl +  Ранее