<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>Prootime</title>
	
	<link>http://prootime.ru</link>
	<description>Блог человека увлекающегося Javascript, PHP, Css, Jquery ...</description>
	<lastBuildDate>Sat, 31 Mar 2012 00:44:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Prootime" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="prootime" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">Prootime</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Потоки ввода/вывода в PHP</title>
		<link>http://prootime.ru/php-input-output</link>
		<comments>http://prootime.ru/php-input-output#comments</comments>
		<pubDate>Thu, 15 Mar 2012 23:34:03 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=1070</guid>
		<description><![CDATA[Недавно у меня возникла необходимость стандартного ввода/вывода (I/O) в PHP. Оказалось что все реализовываеться довольно таки просто, учитывая то что PHP все таки скриптовый язык. В PHP определенны три константы STDIN &#8211; Уже открытый поток ввода (stdin) STDOUT &#8211; Уже открытый поток вывода (stdout) STDERR &#8211; Уже открытый поток ошибок (stderr) То есть чтобы построчно [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно у меня возникла необходимость стандартного ввода/вывода (I/O) в PHP. Оказалось что все реализовываеться довольно таки просто, учитывая то что PHP все таки скриптовый язык.</p>
<p><span id="more-1070"></span></p>
<p>В PHP <a target="_blank" href="http://php.net/manual/ru/features.commandline.io-streams.php">определенны</a> три константы</p>
<ul>
<li><em>STDIN</em> &#8211; Уже открытый поток ввода (stdin)</li>
<li><em>STDOUT</em> &#8211; Уже открытый поток вывода (stdout)</li>
<li><em>STDERR</em> &#8211; Уже открытый поток ошибок (stderr)</li>
</ul>
<p>
То есть чтобы построчно считать и вывести поток ввода достаточно написать:
</p>
<pre class="prettyprint linenums">
while (FALSE !== ($line = fgets(STDIN)))
{
	echo $line;
}
</pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Prootime?a=HyCniI_FdqQ:rHZtW4KvMok:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Prootime?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/php-input-output/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как открывать перетащенные файлы с помощю HTML5</title>
		<link>http://prootime.ru/html-dargdrop2</link>
		<comments>http://prootime.ru/html-dargdrop2#comments</comments>
		<pubDate>Fri, 30 Dec 2011 21:22:39 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=1040</guid>
		<description><![CDATA[В предыдущей статье было расказанно, как использовать HTML5 File API, как получать информацию о перетащенных файлах. Сегодня попытаемся загружать фалы со стороны клента, то есть выводить их, если это допустим картинка. Зачем открывать локальные файлы через JavaScript? Загрузка файлов через обычные HTML формы очень неудобна. Люди часто используют его допустим при передаче нескольких мегобайт фотографий [...]]]></description>
			<content:encoded><![CDATA[<p>В предыдущей <a href="/html5-dragdrop">статье</a> было расказанно, как использовать <em>HTML5</em> <em>File API</em>, как получать информацию о перетащенных файлах. Сегодня попытаемся загружать фалы со стороны клента, то есть выводить их, если это допустим картинка.</p>
<p><span id="more-1040"></span></p>
<h2>Зачем открывать локальные файлы через <em>JavaScript</em>?</h2>
<p>Загрузка файлов через обычные <em>HTML</em> формы очень неудобна. Люди часто используют его допустим при передаче нескольких мегобайт фотографий со своей камеры на сервер. Если предположить что они знают местоположение фотографий, то загрузка может занять несколько минут, но это только если все будет хорошо и форматы и разамеры будут подходящими, а что если нет? До сих пор разработчикам приходилось пологаться на <em>Flash</em> или другие плагины для обеспечение удобства. Предварительная обработка с помощю <em>Javascript</em>&#8216;a имеет ряд преимуществ:
<ul>
<li>Локальная обработка файлов происходит на много быстрей.</li>
<li>Файлы могут быть проанализированны, чтобы убедиться, что они в правильном формате и ниже, орпеделенного размера.</li>
<li>Такие файлы как картинки могут быть просмотренны перед загрузкой.</li>
<li>Можно обрезать или изменить размер изображения перед загрузкой с помощю <em>canvas</em>.</li>
</ul>
<h2>Объект FileReader.</h2>
<p><em>FileReader</em> является частью <em>W3C File API</em> и предостовляет четыре метода для асинхронной загрузки данных из ссылки к объекту <em>File</em>.</p>
<ul>
<li><em>.readAsText(File f, [кодировка])</em> &#8211; считывает файл как строку. По умолчанию в кодировке <em>UTF-8</em>, но можно передать и другой формат.</li>
<li><em>.readAsDataURL(File f)</em> &#8211; как закодированный <em>URL</em>.</li>
<li><em>.readAsBinaryString(File f)</em> &#8211; как двоичный код.</li>
<li><em>.readAsArrayBuffer(File f)</em> &#8211; как объект <em>ArrayBuffer</em>.</li>
</ul>
<p>В следующем коде будем использовать превые два метода для загрузки и отображения текста и картинок.</p>
<h2>Асинхронное открытие файлов с помощю <em>Javascipt</em>.</h2>
<p>Вот наша исхлдная функция ParseFile() в который предаются выбранные или перетащенные на элемент <em>#filedrag</em> файлы.</p>
<pre class="prettyprint linenums prettyprinted">
function ParseFile(file) {

	Output(
		"&lt;p&gt;Информация о файле: &lt;strong&gt;" + file.name +
		"&lt;/strong&gt; тип: &lt;strong&gt;" + file.type +
		"&lt;/strong&gt; размер: &lt;strong&gt;" + file.size +
		"&lt;/strong&gt; байт&lt;/p&gt;"
	);

}
</pre>
<p>После обновления статуса, мы проверяем является ли переданный файл текстовым <em>(text/plain, text/html, text/css, и т.д.)</em>, загружаем его используя метод FileReader.readAsText() и выводим результат:</p>
<pre class="prettyprint">
// выводим текст
if (file.type.indexOf("text") == 0) {
	var reader = new FileReader();
	reader.onload = function(e) {
		Output(
			"&lt;p>&lt;strong&gt;" + file.name + ":&lt;/strong>&lt;/p&gt;&lt;pre&gt;" +
			e.target.result.replace(/&lt;/g, "&lt;").replace(/&gt;/g, "&gt;") +
			"&lt;/pre&gt;"
		);
	}
	reader.readAsText(file);
}
</pre>
<p>Точно также мы можем проверить, если у нас файл является картинкой <em>(image/jpeg, image/gif, image/png и т.д.)</em> загрузить его как data URL используя метод FileReader.readAsDataURL() и передать это все дело как src атрибут для элемента <em>img</em>:</p>
<pre class="prettyprint">
// выводим картинку
if (file.type.indexOf("image") == 0) {
	var reader = new FileReader();
	reader.onload = function(e) {
		Output(
			"&lt;p&gt;&lt;strong&gt;" + file.name + ":&lt;/strong&gt;&lt;br /&gt;" +
			'&lt;img src="' + e.target.result + '" /&gt;&lt;/p&gt;'
		);
	}
	reader.readAsDataURL(file);
}
</pre>
<p class="hight1"><a href="http://purefinance.ru/prodazha-gotovich-firm" title="продажа фирм">Продажа фирм</a></p>
<div class="demo">
<a href="http://prootime.ru/demos/html5drag2/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://prootime.ru/demos/html5drag2/html5drag2.rar" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Prootime?a=FX0d6KV1KTg:YzNrE0WuJyU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Prootime?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/html-dargdrop2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 Drag&amp;Drop</title>
		<link>http://prootime.ru/html5-dragdrop</link>
		<comments>http://prootime.ru/html5-dragdrop#comments</comments>
		<pubDate>Sat, 01 Oct 2011 21:12:51 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=993</guid>
		<description><![CDATA[Перетаскивание файлов из рабочего стола в браузер одна из наиболее интересных возможностей HTML5. Я опишу как: сделать возможным перетаксивание файлов на элемент web страницы. анализировать перенесенные файлы с помошью JavaScript. загружать и парсить файлы со стороны клиента. асинхронно загружать файлы на сервер используя XMLHttpRequest2 показать прогресс бар пока идет загрузка файлов В этой статье расмотрим [...]]]></description>
			<content:encoded><![CDATA[<p>Перетаскивание файлов из рабочего стола в браузер одна из наиболее интересных возможностей <em>HTML5</em>.<span id="more-993"></span> Я опишу как:</p>
<ol>
<li>сделать возможным перетаксивание файлов на элемент web страницы.</li>
<li>анализировать перенесенные файлы с помошью <em>JavaScript</em>.</li>
<li>загружать и парсить файлы со стороны клиента.</li>
<li>асинхронно загружать файлы на сервер используя <em>XMLHttpRequest2</em></li>
<li>показать прогресс бар пока идет загрузка файлов</li>
</ol>
<p>В этой статье расмотрим первые три пункта. В итоге получим примерно такую форму:</p>
<div class="image"><img src="http://prootime.ru/wp-content/uploads/2011/10/drag1.png" alt="html форма drag&amp;drop " title="drag1" width="538" height="201" class="aligncenter size-full wp-image-1019" /></div>
<div class="demo">
<a href="http://prootime.ru/demos/html5drag/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://prootime.ru/demos/html5drag/html5drag.rar" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
<h2>Поддержка браузеров</h2>
<p>Прежде чем начать, нужно отметить что поддержка перетаскивания файлов браузерами будет неравномерной. Код работает в современных браузерах, но вполне возможно API будет меняться.</p>
<ul>
<li>Последние версии <em>Firefox</em> и <em>Chrome</em> поддерживают все функции и превосходно работают с перетаскиванием.</li>
<li>Опера может парсить файлы в <em>JavaScript</em>, но не поддерживает перетаскивание файлов и загрузку с помощю <em>XMLHttpRequuest2</em></li>
<li>IE и десктоповые версии Safari не поддерживают ничего из нужного API.</li>
</ul>
<h2>HTML и CSS</h2>
<p>Далее идет код стандартной формы с инпутом типа файл. Единственное <em>HTML5</em> нововведение в форме это атрибут <em>&#8220;multiple&#8221;</em> который позволяет пользователю выбирать любое количество файлов.</p>
<p>Со стороны сервера загрузка файлов будет проводиться средствани <em>PHP</em>, но независимо от того какую технологию вы используете на сервере <em>JavaScript</em> код останется тем же. Скрытое поле <em>MAX_FILE_SIZE</em> определяет <em>300,000 байт</em>, размер будем проверять и на стороне клиента и на стороне сервера, чтобы предотвротить загрузку огромного размера файлов.</p>
<pre class="prettyprint">
&lt;form id="upload" action="upload.php" method="POST" enctype="multipart/form-data"&gt;
	&lt;fieldset&gt;
		&lt;legend&gt;HTML Загрузка Файлов&lt;/legend&gt;
		&lt;input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="300000" /&gt;
		&lt;div&gt;
			&lt;label for="fileselect"&gt;Выберите файлы для загрузки:&lt;/label&gt;
			&lt;input type="file" id="fileselect" name="fileselect[]" multiple="multiple" /&gt;
			&lt;div id="filedrag" &gt;Или перетащите их сюда&lt;/div&gt;
		&lt;/div&gt;
		&lt;div id="submitbutton"&gt;
			&lt;button type="submit"&gt;Загрузить файлы&lt;/button&gt;
		&lt;/div&gt;
	&lt;/fieldset&gt;
&lt;/form&gt;
</pre>
<p>Элемент <em>#filedrag</em> будет использоваться как облясть в которую необходимо пренести файлы. Элемент в CSS стилях скрыт, но он будет отображаться средствами <em>JavaScript</em> если перетаскивание поддерживается браузером:</p>
<pre class="prettyprint">
*{
     margin: 0px;
}
body{
     background: none repeat scroll 0% 0% #EFEFEF;
}
.wrapper{
     background: none repeat scroll 0% 0% #FFFFFF;
     margin: 150px auto;
     border: 2px solid #3DA8BA;
     padding: 10px;
     width: 500px;
}
fieldset{
	border:2px solid #efefef;
}
#filedrag{
	border-radius: 7px 7px 7px 7px;
	border: 2px dashed #3DA8BA;
	color: #555555;
	cursor: default;
	display: none;
	margin: 1em 0pt;
	padding: 1em 0pt;
	text-align: center;
	background:#f9f9f9;
}
#filedrag.hover {
	border-style: solid;
	box-shadow: 0pt 3px 4px #dbdbdb inset;
}
#messages{
	margin-top:10px;
	padding:5px;
	font-size:14px;
}
#messages p{
	border-bottom:1px solid #efefef;
	margin-bottom:5px;
}
</pre>
<p>Для элемента также определенн класс <em>.hover</em> который меняет стили когдо пользователь перетаксивает файлы на элемент. Браузеры не поддерживают стили <em>:hover</em> в этой ситуации, но мы можем добовлять класс спомощю Javascript когда происходит нужное событие.</p>
<h2>File API</h2>
<p><a href="http://www.w3.org/TR/file-upload/" target="_blank">W3C File API</a> предостовляет несколько объектов которые мы будем использовать:</p>
<ul>
<li><strong>FileList</strong>: предостовляет массив выбранных файлов.</li>
<li><strong>File</strong>: предстовляет единственный файл.</li>
<li><strong>FileReader</strong>: интерфейс который позволяет нам считать информацию о файле со стороны клиента и использовать в <em>JavaScript</em>.</li>
</ul>
<h2>JavaScript события</h2>
<p>Пришло время писать <em>JavaScript</em> код. Мы не будем использовать <em>JavaScript</em> фреймфроков, поэтому напишем пару фуннкций для сохронения нашего времени. Это функция которая достает нужный элемент по ид и функция выводящая сообщения</p>
<pre class="prettyprint">
/* getElementById */
function $id(id) {
	return document.getElementById(id);
}

/* вывод сообщений */
function Output(msg) {
	var m       = $id("messages");
	m.innerHTML = msg + m.innerHTML;
}
</pre>
<p>Далее проверим поддержку <em>File API</em> и вызовем функцию инициализации <em>Init()</em>:</p>
<pre class="prettyprint">
/* проверка поддержки API */
if (window.File &#038;&#038; window.FileList &#038;&#038; window.FileReader){
	Init();
}
/* инициализация */
function Init(){

	var fileselect   = $id("fileselect"),
		filedrag     = $id("filedrag"),
		submitbutton = $id("submitbutton");

	/* выбор файла */
	fileselect.addEventListener("change", FileSelectHandler, false);

	/* проверка поддержки XHR2 */
	var xhr = new XMLHttpRequest();
	if (xhr.upload){

		/* сброс файла */
		filedrag.addEventListener("dragover", FileDragHover, false);
		filedrag.addEventListener("dragleave", FileDragHover, false);
		filedrag.addEventListener("drop", FileSelectHandler, false);
		filedrag.style.display = "block";

		/* удаление кнопки сабмитта */
		submitbutton.style.display = "none";
	}

}
</pre>
<p>Функция <em>Init():</em></p>
<ol>
<li>Устонавливает обработчик события к изменению инпута типа файл.</li>
<li>Отоброжает элемент <em>#filedrag</em>.</li>
<li>Устанавливает обработчики событий <em>&#8220;dragover&#8221; и &#8220;dragleave&#8221;</em> для динамического изменения стилей элемента #filedrag.</li>
<li>Устанавливает обработчик события &#8220;drop&#8221; для элемента <em>#filedrag</em>.</li>
<li>Скрывает кнопку сабмитта формы &#8211; он пока не требуется, так как мы будем просто анализировать файлы.</li>
</ol>
<p>Также вы можете скрыть инпут типа файл, если перетаскивание поддерживается. Но я не буду этого делать чтобы пользователь мог воспользоваться удобным ему вариантом.</p>
<p>Проверка поддержки метода XMLHttpRequest.upload предотврощает проблемы с Оперой. Браузер поддерживает объекты <em>File, FileList и FileReader</em>, но не поддерживает перетаскивание файлов или <em>XMLHttpRequest2</em>. Поэтому мы отоброжаем информацию о файле, но оставляем скрытым элемент <em>#filedrag</em>.</p>
<h2>Изменение стилей при переносе</h2>
<p>Мало кто испытал перетаскивание файлов в браузер. На самом деле, многие опытные интернет пользователи считают это невозможным. Поэтому написали внутри элемента &#8220;перетащите сюда файлы&#8221;. А следующая функция будет добвлять класс к элементу, когда файл уже будет находится непосредственно над элементом, тем самым будут меняться стили.</p>
<pre class="prettyprint">
// Файл над нужной областью
function FileDragHover(e){
	e.stopPropagation();
	e.preventDefault();
	e.target.className = (e.type == "dragover" ? "hover" : "");
}
</pre>
<h2>Анализирование перетащенных или выбранных файлов</h2>
<p>Будем использовать функцию <em>FileSelectHandler()</em> не зависимо от того обин или несколько файлов были выбранны или перетащенны на элемент <em>#filedrag</em>:</p>
<pre class="prettyprint">
// выбор файла
function FileSelectHandler(e){

	FileDragHover(e);

	// проходимся по объекту FileList
	var files = e.target.files || e.dataTransfer.files;

	// парсим все объекты типа File
	for (var i = 0, f; f = files[i]; i++){
		ParseFile(f);
	}

}
</pre>
<p>Функция:</p>
<ol>
<li>Вызываем функцию <em>FileDragHover()</em> чтобы убрать стиля при <em>hover</em> и предотвратить выполнение событий браузера. Это очень важно, так как браузер может попытаться отобразить файл</li>
<li>Проходимся по объекту <em>FileList</em>.</li>
<li>Наконец функция проходит по всем объектам типа <em>File</em> в объекте <em>FileList</em> и передает их как аргумент в функцию <em>ParseFile()</em></li>
</ol>
<pre class="prettyprint">
function ParseFile(file) {
	Output(
		"&lt;p&gt;File information: &lt;strong&gt;" + file.name +
		"&lt;/strong&gt; type: &lt;strong&gt;" + file.type +
		"&lt;/strong&gt; size: &lt;strong&gt;" + file.size +
		"&lt;/strong&gt; bytes&lt;/p&gt;"
	);
}
</pre>
<p>Функция выводит информация используя три основные свойства представленные объектом <em>File</em> только для чтения.</p>
<ul>
<li><b>.name</b>: имя файла (не включая путь к файлу)</li>
<li><b>.type</b>: MIME тип, например: image/jpeg, text/plain, и т.д.</li>
<li><b>.size</b>: размер файла в байтах</li>
</ul>
<div class="demo">
<a href="http://prootime.ru/demos/html5drag/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://prootime.ru/demos/html5drag/html5drag.rar" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Prootime?a=jVNLcuqA86Y:-pZpvyUJ9go:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Prootime?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/html5-dragdrop/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery плагин  5Graph</title>
		<link>http://prootime.ru/5graph-jquery-pugin</link>
		<comments>http://prootime.ru/5graph-jquery-pugin#comments</comments>
		<pubDate>Sun, 31 Jul 2011 10:25:10 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=965</guid>
		<description><![CDATA[Последнее время занимался jQuery плагином для построения HTML5 графиков. После чего начал писать для него генератор чтоб людям было удобней пользоваться им, так как плагин очень гибкий и требует очень много обязательных параметров, точнее все параметры обязательны. Поэтому рекомендую использовать генератор, ниже видео с инструкцией, которое также можно найти на странице graph.prootime.ru/howtouse. Видео без звука [...]]]></description>
			<content:encoded><![CDATA[<p>Последнее время занимался jQuery плагином для построения HTML5 графиков. После чего начал писать для него генератор чтоб людям было удобней пользоваться им, так как плагин очень гибкий<span id="more-965"></span> и требует очень много обязательных параметров, точнее все параметры обязательны. Поэтому рекомендую использовать генератор, ниже видео с инструкцией, которое также можно найти на странице <a href="http://graph.prootime.ru/howtouse" target="_blank">graph.prootime.ru/howtouse</a>. Видео без звука придется читать титры:</p>
<div class="video">
<object width="560" height="349"><param name="movie" value="http://www.youtube.com/v/OabSrvnTqh8?version=3&amp;hl=ru_RU"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/OabSrvnTqh8?version=3&amp;hl=ru_RU" type="application/x-shockwave-flash" width="560" height="349" allowscriptaccess="always" allowfullscreen="true"></embed></object>
</div>
<p>Плагин позволяет строить только одного типа графики, зато имеет большое количество настроек позволяющие подстраивать под дизайн своего сайта. Также есть возможность построения нескольких графиков одновременно.</p>
<p>
Конечно <em>5Graph</em> уступает другим подобным плагинам по функционалу построению диаграмм и все такое. Это все в дальнейшем будет нарабатываться, сейчас пока хотелось сделать его гибким при настройке дизайна. Ведь все остальные пдагины встречающиеся мне в основном не позволяют этого делать.
</p>
<p>На этом пока все. Пожалуйста остовляйте свои комментарии, высказывайте свое мнение о 5Graph мне очень интересно. Сайт плагина размещен по адресу <a href="http://graph.prootime.ru" target="_blank">graph.prootime.ru</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Prootime?a=zHcGET_IHUI:rbYfLFThCCE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Prootime?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/5graph-jquery-pugin/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Борьба со спамом</title>
		<link>http://prootime.ru/fight_spam</link>
		<comments>http://prootime.ru/fight_spam#comments</comments>
		<pubDate>Sun, 01 May 2011 14:41:54 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[Spam]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=942</guid>
		<description><![CDATA[Я не единственный наверное кого заколебал спам, существует много способов борьбы с ним. Чаще всего ставят капчу, это обычно картинка с цифрами которые нужно ввести в поле для подтверждения того что вы не бот, иногда ставят просто галочку которую нужно выбрать, существует еще куча извращенных способов суть которых одна, добавление лишнего поля. Но как же [...]]]></description>
			<content:encoded><![CDATA[<p>Я не единственный наверное кого заколебал спам, существует много способов борьбы с ним. Чаще всего ставят капчу, это обычно картинка с цифрами которые нужно ввести в поле для подтверждения того что вы не бот, иногда ставят просто галочку которую нужно выбрать, существует еще куча извращенных способов суть которых одна, добавление лишнего поля<span id="more-942"></span>. Но как же быть если я не хочу добавлять лишнего поля в форму, хочу оставить все как есть и так избавиться от спама? Предлагаю поставить проверку на включенность <b>Javascript</b>&#8216;a. Сделать это очень даже легко на <b>PHP</b>, если конечно ваш хостинг включил поддержку функции <a href="http://heel.org.ua/php-functions/get-browser.html" target="_blank">get_browser()</a>:</p>
<pre class="prettyprint">
function workjscript(){
     $brows = get_browser();
     if($brows[javascript]){
         return true;  //то есть выводим форму
     }
     retunr false; //javascript не включен форму не выводим
}
</pre>
<p>Но а если <b>get_browser()</b> не поддерживается вашм хостингом также как и у меня, можно сделать попроще, просто выводить одно из обязательных полей через <b>Javascritpt</b>. В итоге без <b>Javascript</b>&#8216;a пользователь, спам бот или кто еще пофигу будет получать форму без одного обязательного поля и не сможет отправить форму. Ну на примере <b>wordpress</b> для комментариев можно передать в качестве поля имени автора следующее:</p>
<pre class="prettyprint">
'author' => '&lt;div class="first_inputs"&gt;
	&lt;span id="authorplace">&lt;/span&gt;
	&lt;script type="text/javascript"&gt;
		$(document).ready(function(){
			$("#authorplace").html("\
				&lt;input class=\"cm_name\" placeholder=\"Имя\" id=\"author\" name=\"author\" type=\"text\" value=\"'.esc_attr( $commenter['comment_author'] ) . '\"' . $aria_req . ' /&gt;\
			");
		});
	&lt;/script&gt;',
</pre>
<p class="hight1">Хороший ресурс для <a href="http://webpinger.ru/" title="тестирование сайта">тестирования сайта</a> </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Prootime?a=5lyScUtLPwg:6Bx8fhJaQro:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Prootime?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/fight_spam/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>11 лет Majordomo</title>
		<link>http://prootime.ru/11-let-majordomo</link>
		<comments>http://prootime.ru/11-let-majordomo#comments</comments>
		<pubDate>Tue, 12 Apr 2011 19:59:43 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[новости]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=917</guid>
		<description><![CDATA[Сегодня исполняется 11лет хостингу Majordomo на котором расположены все мои проекты. И вот решил поздравить их в рамках акции. В котором они хотят чтобы я написал за что я их люблю. Ну что ж.. Я люблю Majordomo, потому что это самый надежный и качественный хостинг с отличным интерфейсом и хорошей техподдержкой! И пишу это я [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня исполняется 11лет хостингу Majordomo на котором расположены все мои проекты. И вот решил поздравить их в рамках <a href="http://11.majordomo.ru/">акции</a>. В котором они хотят чтобы я написал за что я их люблю. Ну что ж..</p>
<p><span id="more-917"></span></p>
<p>Я люблю Majordomo, потому что это самый надежный и качественный хостинг с отличным интерфейсом и хорошей техподдержкой! И пишу это я не потому что хочу iPhone4. На самом деле я долго выбирал хостинг, спрашивал на форумах, так искал, советовали много разных хостингов но почему то никто плохо не отзывался о Majordomo даже наоборот хвалили. Из за чего я и решил выбрать именно этот хостинг, и не прогадал. Это действительно достойный хостинг и далее все свои проекты планирую размещать только на majordomo, и всем советую.</p>
<p class="hight1">
<a href="http://dwnmaster.ru" title="Скачать бесплатно русский download master (даунлоад мастер) без регистрации и смс">Скачать бесплатно русский download master (даунлоад мастер) без регистрации и смс</a>
</p>
<p>Так как у них день рождение как бы, решил сделать им маленький сюрприз на HTML5:</p>
<p><br/><br />
<canvas id="c" width="680" height="420"  ></canvas><br />
<br/><br />
<script type="text/javascript" src="http://prootime.ru/files/code/html5logomaj.js"></script></p>
<p>Чуть чуть коряво, но зато от души!)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Prootime?a=Cmw2XyOygSw:LhSlKeBXphM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Prootime?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/11-let-majordomo/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ЕГЭ информатика B8</title>
		<link>http://prootime.ru/ege-informatika-b8</link>
		<comments>http://prootime.ru/ege-informatika-b8#comments</comments>
		<pubDate>Tue, 22 Mar 2011 18:12:42 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=834</guid>
		<description><![CDATA[Мобильное приложение для решения задания B8 ЕГЭ по информатике. Сейчас я особо не занимаюсь этим сайтом так как готовлюсь к ЕГЭ, чтоб его. Так вот, все думаю когда то писали шпоры, а я решил написать прогу, скорее web приложение которое поможет мне при сдаче ЕГЭ. Готовясь к информатике заметил что почти во всех заданиях B8 [...]]]></description>
			<content:encoded><![CDATA[<p>Мобильное приложение для решения задания B8 ЕГЭ по информатике.</p>
<p><span id="more-834"></span></p>
<p>Сейчас я особо не занимаюсь этим сайтом так как готовлюсь к ЕГЭ, чтоб его. Так вот, все думаю когда то писали шпоры, а я решил написать прогу, скорее web приложение которое поможет мне при сдаче ЕГЭ.</p>
<p> Готовясь к информатике заметил что почти во всех заданиях B8 встречается одна и та же по типу задача, в которой обычно требуется найти последовательность букв с какой то позиции по какую то. Пример задания:</p>
<blockquote><p>Строки (цепочки символов латинских букв) создаются по следующему правилу: первая строка состоит из одного символа &#8211; латинской буквы “A”. Каждая из последующих цепочек создается такими действиями: в очередную строку сначала дважды записывается предыдущая строка, затем справа приписывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i &#8211; м шаге пишется “i” &#8211; я буква алфавита).<br />
Вот первые 4 строки созданные по этому правилу:<br />
1) A<br />
2) AAB<br />
3) AABAABC<br />
3) AABAABCAABAABCD<br />
<i>Латинский алфавит (для справки):</i><br />
ABCDEFGHIJKLMNOPQRSTUVWXYZ<br />
Запишите шесть символов подряд, стоящие в восьмой строке с 100-го по 105-место (считая слева направо).</p></blockquote>
<p>Встречаются разные варианты этой задачи в некоторых требуется найти количество определенных букв в какой то строке, встречаются еще и с русским алфавитом.</p>
<p>Итак цель написать web приложение которое смогло бы решить все варианты этой задачи и была бы удобна для использования с телефона. Не знаю о чем подумали вы, но я подумал о jQuery Mobile. Почитав немного <a href="http://jquerymobile.com/demos/1.0a3/" target="_blank">документации</a>  написал разметку. Приложение будет состоять из одной страницы в которой будет выводиться форма состоящая из 4х полей это: поле для выбора алфавита, количества строк, начальной позиции и конечной позиции. Стилей писать не придется так как jQuery Mobile так устроен, остается написать разметку</p>
<p>Получилась она вот такой:</p>
<pre class="prettyprint">
   &lt;div data-role="page" data-theme="c"&gt;
       &lt;div data-role="header"&gt;
           &lt;h1&gt;Информатика B8&lt;/h1&gt;
       &lt;/div&gt;
       &lt;div data-role="content"&gt;
           &lt;form action="" method="get"&gt;
               &lt;div data-role="fieldcontain"&gt;
                   &lt;label for="select-choice-1" class="select"&gt;Выберите алфавит:&lt;/label&gt;
                   &lt;select name="lang" id="select-choice-1"&gt;
					   &lt;option value="lt">Латинский&lt;/option&gt;
					   &lt;option value="ru">Русский&lt;/option&gt;
                   &lt;/select&gt;
               &lt;/div&gt;
               &lt;div data-role="fieldcontain"&gt;
                   &lt;label for="line">Количество строк:&lt;/label&gt;
                   &lt;input type="number" name="line" id="line"&gt;
               &lt;/div&gt;
               &lt;div data-role="fieldcontain"&gt;
                   &lt;label for="beg_pos"&gt;Начальная позиция:&lt;/label&gt;
                   &lt;input type="number" name="beg_pos" id="beg_pos"&gt;
               &lt;/div&gt;
               &lt;div data-role="fieldcontain"&gt;
                   &lt;label for="end_pos">Конечная позиция:&lt;/label&gt;
                   &lt;input type="number" name="end_pos" id="end_pos"&gt;
               &lt;/div&gt;
               &lt;button type="submit" data-theme="b" name="calc" value="calc"&gt;Посчитать&lt;/button&gt;
           &lt;/form&gt;
       &lt;/div&gt;
       &lt;div data-role="footer"&gt;
           &lt;h4&gt;&lt;a href="http:\\prootime.ru"&gt;prootime.ru&lt;/a&gt;&lt;/h4&gt;
       &lt;/div&gt;
   &lt;/div&gt;
</pre>
<p>В header&#8217;е нужно подключить вот эти скрипты:</p>
<pre class="prettyprint">
stylesheet - http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css
script - http://code.jquery.com/jquery-1.4.3.min.js
script - http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js
</pre>
<p>На вид примерно что то вроде этого:</p>
<p align="center"><img src="http://prootime.ru/wp-content/uploads/2011/03/infp_ege8.png" alt="" title="infp_ege8" width="300" height="466" class="alignnone size-full wp-image-841" /></p>
<p>Осталось написать PHP код. Он будет очень даже простой, просто поставим на сабмит формы PHP код и будем выполнять алгоритм который был дан в задании:</p>
<pre class="prettyprint">
if(!empty($_REQUEST['calc'])){

   //язык
   $language = $_REQUEST['lang'];

   if($language == 'lt'){

       $arr = range('A','Z');

   }
   else{

       $arr = array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я');

   }

   //номер строки
   $str_num = $_REQUEST['line'];

   //начальная и конечная позицим
   $beg_pos = $_REQUEST['beg_pos'];
   $end_pos = $_REQUEST['end_pos'];

   if($beg_pos > $end_pos){

       echo 'Ошибка! Значения начала отреза больше конеца.';

   }
   else{

       //конечная строка
       $end_str = '';

       for($i = 0; $i <= $str_num-1; $i++){

           $end_str = $end_str.$end_str.$arr[$i];

       }

       echo mb_substr($end_str, $beg_pos-1, $end_pos - $beg_pos + 1, 'utf8');
       echo '<br/>Всего букв - '.strlen($end_str);

       for($i = 0; $i <= $str_num-1; $i++){

           echo '<br/>'.$arr[$i].' - '.mb_substr_count($end_str,$arr[$i], 'utf8');

       }

   }

}</pre>
<p>Единственное на что бы хотел обратить внимание это на функции начинающиеся с <b>mb_</b> это нестандартные функции и требуют модуль <b>mbstring</b> если он не подключен то они конечно не сработают. А вообще выполняют то же самое что эти же функции без <b>mb_</b>. Почему я их использовал, потому что этим функциям можно передать третьим параметром кодировку в которой функция должна работать. А так как нам нужно работать еще и с кирилицей это то что нам нужно.</p>
<div class="demo">
<a href="http://prootime.ru/demos/inf8/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://paste.netsago.org/ru/view/0/dzantiev/" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Prootime?a=5PxqUEGG8JI:AYAvaD1lJuk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Prootime?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/ege-informatika-b8/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Подключение Javascript</title>
		<link>http://prootime.ru/include-javascript</link>
		<comments>http://prootime.ru/include-javascript#comments</comments>
		<pubDate>Sat, 12 Feb 2011 19:31:23 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=811</guid>
		<description><![CDATA[Ниже представлены 3 javascript функции цель которых подключение javascript файлов. То есть они дают возможность подключения javascript файлов на лету 1. Функция include() &#8211; эта функция будет просто подключать javascript&#8217;овый файл, без всяких извращений, используя функцию document.write(): function include(url) { document.write(''); document.write(''); } 2. Функция include_inhead() &#8211; функция подключает файл в тег head, а не [...]]]></description>
			<content:encoded><![CDATA[<p>Ниже представлены 3 javascript функции цель которых подключение javascript файлов. То есть они дают возможность подключения javascript файлов на лету<br />
<span id="more-811"></span></p>
<p><b>1.</b> Функция <b>include()</b> &#8211; эта функция будет просто подключать javascript&#8217;овый файл, без всяких извращений, используя функцию <b>document.write()</b>:</p>
<pre class="prettyprint">
function include(url) {

    document.write('<' + 'script');
    document.write(' language="javascript"');
    document.write(' type="text/javascript"');
    document.write(' src="' + url + '">');
    document.write('</' + 'script' + '>');

}
</pre>
<p><b>2.</b> Функция <b>include_inhead()</b> &#8211; функция подключает файл в тег <b>head</b>, а не где попало как это делает предыдущая функция, а также подключение происходит более правильным путем так как используется функция <b>document.createElement</b>:</p>
<pre class="prettyprint">
function include_inhead(url) {

    var html_doc = document.getElementsByTagName('head').item(0);
    var js = document.createElement('script');

    js.setAttribute('language', 'javascript');
    js.setAttribute('type', 'text/javascript');
    js.setAttribute('src', url);
    html_doc.appendChild(js);

    return false;

}
</pre>
<p><b>3.</b> Функция <b>require_once()</b> &#8211; функция будет не просто подключать файл, а будет еще проверять его на подключенность, то есть аналог <b>PHP</b> функции <b>rquire_once()</b>. Для реализации такого эффекта нам во первых понадобится создать глобальный массив в котором будем записывать все включаемые файлы:</p>
<pre class="prettyprint">
var included_files = new Array();
</pre>
<p>Дальше придется написать функцию которая будет проверять вхождение подключаемых файла в массив, то есть проверять на включенность:</p>
<pre class="prettyprint">
function in_array(needle, haystack) {
    for (var i = 0; i < haystack.length; i++) {

		if (haystack[i] == needle) {

			return true;

        }

    }

    return false;
}
</pre>
<p>Дело осталось за малым, в конечной функции проверяем переданный url на включенность и подключаем его с помощью функции <b>include_inhead()</b> (2ая функция):</p>
<pre class="prettyprint">
function require_once(url) {

	if (!in_array(url, included_files)) {

		included_files[included_files.length] = url;
		include_inhead(url);

    }

}
</pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Prootime?a=qvxQRRJntlM:RpVFl8Eq3d8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Prootime?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/include-javascript/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CSS оформление select</title>
		<link>http://prootime.ru/select-css</link>
		<comments>http://prootime.ru/select-css#comments</comments>
		<pubDate>Sat, 15 Jan 2011 20:35:49 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=761</guid>
		<description><![CDATA[Есть наверное куча плагинов предоставляющие возможность изменения обычных select на необычные, или такие которые хотя бы отображались бы во всех браузерах одинаково. Но нам же это не интересно , сейчас попробуем сделать из обычного селекта необычный т.е. будет выглядеть примерно так: В демке представлено 4 селекта смотрим. ДЕМО ВЕРСИЯпосмотреть в действииСКАЧАТЬскачать на компьютер Вконтакте извините [...]]]></description>
			<content:encoded><![CDATA[<p>Есть наверное куча плагинов предоставляющие возможность изменения обычных select на необычные, или такие которые хотя бы отображались бы во всех браузерах одинаково. Но нам же это не интересно <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  , сейчас попробуем сделать из обычного селекта необычный <span id="more-761"></span>т.е. будет выглядеть примерно так:</p>
<p align="center"><img src="http://prootime.ru/wp-content/uploads/2011/01/select1.png" alt="select css" title="select1" width="205" height="133" class="size-full wp-image-762" /></p>
<p>В демке представлено 4 селекта смотрим.</p>
<p><br/></p>
<div class="demo">
<a href="http://jsfiddle.net/axelru/QBHjY/21/embedded/result/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://jsfiddle.net/axelru/QBHjY/21/" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
<p><br/></p>
<p>Вконтакте извините я спер у вас оформление и цвета селекта <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
<p>Возьмем обычный select с несколькими option примерно вот:</p>
<pre class="prettyprint">
&lt;select id="ourselect1"&gt;
           &lt;option value="eee"&gt;Значение 19&lt;/option&gt;
           &lt;option value="222"&gt;Значение 18&lt;/option&gt;
           &lt;option value="444"&gt;Значение 17&lt;/option&gt;
           &lt;option value="123"&gt;Значение 16&lt;/option&gt;
           &lt;option value="122"&gt;Значение 15&lt;/option&gt;
           &lt;option value="113"&gt;Значение 14&lt;/option&gt;
           &lt;option value="124"&gt;Значение 13&lt;/option&gt;
&lt;/select&gt;
</pre>
<p>Обернем его в div с классом &#8220;sel_wrap&#8221;, в начале которого выстроим структуру нашего селекта дивами. Если представить это все дело на картинке то получится следующая картина:
</p>
<p align="center"><img src="http://prootime.ru/wp-content/uploads/2011/01/select-structure.png" alt="select-structure" title="select-structure" width="502" height="487" class="size-full wp-image-771" /></p>
<p>А код получится следующим:</p>
<pre class="prettyprint">
&lt;div class="sel_wrap"&gt;
    &lt;div class="sel_imul"&gt;
        &lt;div class="sel_selected"&gt;
            &lt;div class="selected-text"&gt;Значение 19&lt;/div&gt;&lt;div class="sel_arraw"&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="sel_options"&gt;
            &lt;div class="sel_option" value="eee"&gt;Значение 19&lt;/div&gt;
            &lt;div class="sel_option" value="222"&gt;Значение 18&lt;/div&gt;
            &lt;div class="sel_option" value="444"&gt;Значение 17&lt;/div&gt;
            &lt;div class="sel_option" value="123"&gt;Значение 16&lt;/div&gt;
            &lt;div class="sel_option" value="122"&gt;Значение 15&lt;/div&gt;
            &lt;div class="sel_option" value="113"&gt;Значение 14&lt;/div&gt;
            &lt;div class="sel_option" value="124"&gt;Значение 13&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;select id="ourselect1"&gt;
        &lt;option value="eee"&gt;Значение 19&lt;/option&gt;
        &lt;option value="222"&gt;Значение 18&lt;/option&gt;
        &lt;option value="444"&gt;Значение 17&lt;/option&gt;
        &lt;option value="123"&gt;Значение 16&lt;/option&gt;
        &lt;option value="122"&gt;Значение 15&lt;/option&gt;
        &lt;option value="113"&gt;Значение 14&lt;/option&gt;
        &lt;option value="124"&gt;Значение 13&lt;/option&gt;
    &lt;/select&gt;
&lt;/div&gt;
</pre>
</p>
<p>Далее приступим к стилям. Естественно скрываем наш обычный селект, а структуру эмилирующую селект стилизуем как нам хочется:</p>
<pre class="prettyprint">
.sel_wrap{
    background:#efefef;
    margin-bottom:5px;
    padding:7px;
}
.sel_wrap select{
    display:none;
}
.sel_imul{
    width:300px;
}
.sel_imul .sel_selected{
    background:#fff;
    border:1px solid #bbb;
    padding:3px 6px;
    font-size:14px;
    font-family:Times;
    cursor:pointer;
    position:relative;
}
.sel_imul.act .sel_selected{
    background:#efefef;
}
.sel_selected .sel_arraw{
    height:100%;
    width:20px;
    background:url('http://bit.ly/gudLNa') 50% 50% no-repeat;
    position:absolute;
    top:0px;
    right:0px;
}
.sel_imul:hover .sel_selected .sel_arraw{
    background-color:#e0e0e0;
    border-left:1px solid #bbb;
}
.sel_imul.act .sel_selected .sel_arraw{
    background-color:#e0e0e0;
    border-left:1px solid #bbb;
}
.sel_imul .sel_options{
    background:#fff;
    border:1px solid #dbdbdb;
    border-top:none;
    overflow:auto;
    position:absolute;
    width:298px;
    display:none;
    z-index:10;
}
.sel_options .sel_option{
    padding:3px 4px;
    font-size:14px;
    font-family:Times;
    border:1px solid #fff;
    border-right:none;
    border-left:none;
}
.sel_options .sel_option:hover{
    border-color:#dbdbdb;
    cursor:pointer;
}
.sel_options .sel_option.sel_ed{
    background:#dbdbdb;
    border-color:#dbdbdb;
}

/*second variant*/
.sec .sel_imul{
    width:200px;
}
.sec .sel_imul .sel_selected{
    border:1px solid #C0CAD5;
}
.sel_imul.act .sel_selected{
    background:#fff;
}
.sec .sel_imul:hover .sel_selected .sel_arraw{
    background-color:#e1e8ed;
    border-left:1px solid #d2dbe0;
}
.sec .sel_imul.act .sel_selected .sel_arraw{
    background-color:#e1e8ed;
    border-left:1px solid #d2dbe0;
}
.sec .sel_imul .sel_options{
    background:#fff;
    border:1px solid #d2dbe0;
    width:198px;
}
.sec.overf .sel_imul .sel_options{
    height:100px;
}
.sec .sel_options .sel_option:hover, .sec .sel_options .sel_option.sel_ed{
    background:#587da1;
    border:1px solid #2a5883;
    color:#fff;
    cursor:pointer;
}
.sec .sel_imul .sel_selected .sel_arraw{
    background-image:url('http://vkontakte.ru/images/darr_dd_out.gif');
}

.sec.round .sel_imul .sel_selected{
    -webkit-border-radius:5px;
}
.sec.round .sel_imul .sel_selected .sel_arraw{
    -webkit-border-radius:0 5px 5px 0;
}
.sec.round .sel_imul .sel_options{
    -webkit-border-radius:0 0 5px 5px;
}
/*green*/
.sec.green .sel_imul .sel_selected{
    border-color:#FFAD99;
}
.sec.green .sel_imul:hover .sel_selected .sel_arraw,
.sec.green .sel_imul.act .sel_selected .sel_arraw{
    background-color:#FFD6CC;
    border-left:1px solid #FFAD99;
}
.sec.green .sel_options .sel_option:hover,
.sec.green .sel_options .sel_option.sel_ed{
    background:#FF9980;
    border:1px solid #FF704D;
    color:#fff;
    cursor:pointer;
}
</pre>
<p>Здесь уже стили предусматривающие работу javascript&#8217;а, и несколько типов селектов.
</p>
<p>Дальше приступим к <strong>javascript</strong>&#8216;у. Во первых сделаем так чтобы при клике на див эмулирующий select, открывался или закрывался список option&#8217;ов:</p>
<pre class="prettyprint">
$('.sel_imul').live('click', function() {

    $('.sel_imul').removeClass('act');
    $(this).addClass('act');

    if ($(this).children('.sel_options').is(':visible')) {

        $('.sel_options').hide();

    }
    else {

        $('.sel_options').hide();
        $(this).children('.sel_options').show();

    }

});
</pre>
</p>
<p>Теперь пишем событие которое будт менять значение обычного, скрытого, селекта и значение у эмулирующего селекта:</p>
<pre class="prettyprint">
$('.sel_option').live('click', function() {

    //меняем значение на выбранное
    var tektext = $(this).html();
    $(this).parent('.sel_options').parent('.sel_imul').children('.sel_selected').children('.selected-text').html(tektext);

    //активируем текущий
    $(this).parent('.sel_options').children('.sel_option').removeClass('sel_ed');
    $(this).addClass('sel_ed');

    //устанавливаем значение для селекта
    var tekval = $(this).attr('value');
    tekval = typeof(tekval) != 'undefined' ? tekval : tektext;
    $(this).parent('.sel_options').parent('.sel_imul').parent('.sel_wrap').children('select').children('option').removeAttr('selected').each(function() {
        if ($(this).val() == tekval) {
            $(this).attr('selected', 'select');
        }
    });
});
</pre>
</p>
<p>Ну еще напишем меленький код который будет закрывать селект при холостом клике, blur так зказать:</p>
<pre class="prettyprint">
var selenter = false;
$('.sel_imul').live('mouseenter', function() {
    selenter = true;
});
$('.sel_imul').live('mouseleave', function() {
    selenter = false;
});
$(document).click(function() {
    if (!selenter) {
        $('.sel_options').hide();
        $('.sel_imul').removeClass('act');
    }
});
</pre>
</p>
<p>Напишем функцию которая будет превращать из обычного селекта такой т.е. писать за нас код, назовем его <b>reselect()</b>:</p>
<pre class="prettyprint">
function reselect(select, addclass) {

    addclass = typeof(addclass) != 'undefined' ? addclass : '';

    $(select).wrap('&lt;div class="sel_wrap ' + addclass + '"/&gt;');

    var sel_options = '';
    $(select).children('option').each(function() {
        sel_options = sel_options + '&lt;div class="sel_option" value="' + $(this).val() + '"&gt;' + $(this).html() + '&lt;/div&gt;';

    });

    var sel_imul = '&lt;div class="sel_imul"&gt;\
                &lt;div class="sel_selected"&gt;\
                    &lt;div class="selected-text"&gt;' + $(select).children('option').first().html() + '&lt;/div&gt;\
                    &lt;div class="sel_arraw"&gt;&lt;/div&gt;\
                &lt;/div&gt;\
                &lt;div class="sel_options"&gt;' + sel_options + '&lt;/div&gt;\
            &lt;/div&gt;';

    $(select).before(sel_imul);

}
</pre>
<p>Здесь что то нормально не удается показать функцию, можете посмотреть ее в демке
</p>
<div class="demo">
<a href="http://jsfiddle.net/axelru/QBHjY/21/embedded/result/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://jsfiddle.net/axelru/QBHjY/21/" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Prootime?a=P08cyZnBBvw:jWdcXSbpz1k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Prootime?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/select-css/feed</wfw:commentRss>
		<slash:comments>49</slash:comments>
		</item>
		<item>
		<title>CSS хак для Google Chrome</title>
		<link>http://prootime.ru/chrome-hack</link>
		<comments>http://prootime.ru/chrome-hack#comments</comments>
		<pubDate>Sat, 18 Dec 2010 21:50:16 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Хаки]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=753</guid>
		<description><![CDATA[Очередной супер короткий пост, который будет посвящен одному единственному хаку для браузера Google Chrome, относительно новый браузер, но уже успел полюбиться многим, особенно за скорость работы. Так вот на днях мне понадобился хак для Хрома, который был найден, и я решил им поделиться с народом . Вот: @media all and (-webkit-min-device-pixel-ratio:0) { /*здесь стили для [...]]]></description>
			<content:encoded><![CDATA[<p>Очередной супер короткий пост, который будет посвящен одному единственному хаку для браузера Google Chrome, относительно новый браузер, но уже успел полюбиться многим, особенно за скорость работы. Так вот на днях мне понадобился хак для Хрома, который был найден<span id="more-753"></span>, и я решил им поделиться с народом <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Вот:</p>
<pre class="brush: css;">
@media all and (-webkit-min-device-pixel-ratio:0) {
  /*здесь стили для хрома*/
}
</pre>
<p>Единственное надо отметить что этот хак будет также работать и на Safari, так как у них один движок. Именно под хром так и не нашел хак, кто обладает информацией о таком хаке пишем в комментарии <img src='http://prootime.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Prootime?a=2wDECGRXNAI:H47Y8QKvb5w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Prootime?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/chrome-hack/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>

