<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Seleckis.lv :: журнал Никиты Селецкого &#187; Скриптинг</title>
	<atom:link href="http://seleckis.lv/category/journal/scripting/feed" rel="self" type="application/rss+xml" />
	<link>http://seleckis.lv</link>
	<description></description>
	<lastBuildDate>Tue, 08 Feb 2011 13:52:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Простое число</title>
		<link>http://seleckis.lv/journal/scripting/prostoe-chislo</link>
		<comments>http://seleckis.lv/journal/scripting/prostoe-chislo#comments</comments>
		<pubDate>Sat, 07 Apr 2007 09:48:27 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[Исследования]]></category>
		<category><![CDATA[Скриптинг]]></category>

		<guid isPermaLink="false">http://localhost:8506/?p=462</guid>
		<description><![CDATA[Недавно были занятия по дискретной математике и как одна из лекций &#8211; Простые числа. Очень заинтересовал тот факт, что за За нахождение простого числа из более чем 107 десятичных цифр EFF назначила награду в 100000 долларов США.
Хотите заработать? Я быстренько накатал скриптик на JS который проверяет является ли число простым. Но скриптик не универсален. Вводите [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно были занятия по дискретной математике и как одна из лекций &#8211; Простые числа. Очень заинтересовал тот факт, что за За нахождение простого числа из более чем 107 десятичных цифр <abbr title="Electronic Frontier Foundation"><strong>EFF</strong></abbr> назначила награду в 100000 долларов США.</p>
<p>Хотите заработать? Я быстренько накатал скриптик на JS который проверяет является ли число простым. Но скриптик не универсален. Вводите число и методом перебора от 2 до корня из этого числа проверяется деление на остаток.</p>
<p>В будущем нужно будет попробовать что-то типа <a href="http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%9B%D1%8E%D0%BA%D0%B0_%E2%80%94_%D0%9B%D0%B5%D0%BC%D0%B5%D1%80%D0%B0">теста Люка &#8211; Лемера</a></p>
<p>Здесь код:</p>
<p><code><br />
&lt;a name="simple"&gt;&lt;/a&gt;<br />
&lt;form action="#simple" method="GET" onsubmit="Simple(document.getElementById('input').value); return false"&gt;<br />
	&lt;input type="text" id="input" /&gt;<br />
	&lt;input type="submit" value="Проверить" /&gt;<br />
&lt;/form&gt;<br />
&lt;script&gt;<br />
	function Simple(x){<br />
		var y = Math.sqrt(x)<br />
		var result = document.getElementById('result')<br />
		var output = "", z<br />
		var d1 = new Date()<br />
		var stamp1 = d1.getTime()<br />
		for(i=2; i&lt;=y; i++){<br />
			z = x%i<br />
			if(z === 0){<br />
				output = "Это не простое число: " + x + " / " + i + " = " + x/i<br />
			}<br />
		}<br />
		var d2 = new Date()<br />
		var stamp2 = d2.getTime()<br />
		if(output != "")    result.innerHTML = output<br />
		else                result.innerHTML = "Это простое число"<br />
		result.innerHTML += "&lt;br /&gt;Время затраченное на выполнение проверки: " + (stamp2-stamp1) + " ms"<br />
	}<br />
&lt;/script&gt;<br />
&lt;div id="result"&gt;&lt;/div&gt;</code></p>
<p>Здесь работающий скрипт: <a href="http://www.seleckis.lv/wp-content/uploads/2007/04/ns_simple_digit.html" target="_blank">NS Simple test</a><br />
ОСТОРОЖНО! Слишком большие цифры приведут к подвисанию вашего браузера.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/scripting/prostoe-chislo/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Мультилингвальный Wordpress</title>
		<link>http://seleckis.lv/journal/scripting/multilingvalnyiy-wordpress</link>
		<comments>http://seleckis.lv/journal/scripting/multilingvalnyiy-wordpress#comments</comments>
		<pubDate>Thu, 15 Mar 2007 17:18:25 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Исследования]]></category>
		<category><![CDATA[Скриптинг]]></category>
		<category><![CDATA[Техника]]></category>

		<guid isPermaLink="false">http://localhost:8506/?p=421</guid>
		<description><![CDATA[Сайтик один кАвыряю. Решил выяснить как оно &#8211; переводить сайт на основе Wordpress (при использовании его не как блог а как CMS). Из всех плагинов большего всего мне понравился Gengo. Но установив версию 0.81 выяснилось что она не коректно работает с Worpress 2.1 и выше. Разработчик в лихорадочном порядке пишет новую 0.9 Бета версию которая [...]]]></description>
			<content:encoded><![CDATA[<p>Сайтик один кАвыряю. Решил выяснить как оно &#8211; переводить сайт на основе Wordpress (при использовании его не как блог а как CMS). Из всех плагинов большего всего мне понравился <a target="_blank" href="http://jamietalbot.com/wp-hacks/gengo/">Gengo</a>. Но установив версию 0.81 выяснилось что она не коректно работает с Worpress 2.1 и выше. Разработчик в лихорадочном порядке пишет новую <a target="_blank" href="http://svn.wp-plugins.org/gengo/trunk/gengo/">0.9 Бета версию</a> которая уже нормально работает с последней версией WP.</p>
<p>Один из багов Gengo &#8211; перестаёт работать Static Front Page в стандартной установке WP 2.1 и выше. Т.е. на первой странице загружается блог, а не выбраная статичная страница.</p>
<p>Порылся ещё, нашёл <a target="_blank" href="http://www.semiologic.com/software/static-front/">Semilogic Static Front Page Plugin</a>, который заменяет стандартную функцию. После активации плагина статичная страница с Page Slug &#8211; &quot;home&quot; становится стартовой, а страница со slug&#8217;ом &quot;blog&quot; подцепляет темплейт blog.php и отображает сам блог. Вот в этом blog.php есть косяк. Поскольку существет несколько языков и соответственно столько же страниц, то slug у всех будет разный.</p>
<p>Вооружившись notepad++&#8217;ом, с боевым кличем я рванулся в код плагина. Открыл файл sem_static_front.php, нашёл функцию в которой определяется по slug&#8217;у какой странице прикручивать темплейт blog.php. Но так как я в программировании не дальше гостевой книги, призвал на помощь <a href="http://www.noop.lv" target="_blank">Андрея</a>, который изменил 165 строчку</p>
<p><code>&amp;&amp; ( get_query_var('pagename') == $params['blog_slug']&quot;</code><br />
на</p>
<p><code>&amp;&amp; (&nbsp; strpos( get_query_var('pagename'), $params['blog_slug'] ) === 0</code><br />
В итоге мы имеем возможность создавать страницы для всех языков которые будут содержать блог, но обязательно указываем slug начинающийся на &quot;blog&quot;. Например, английский вариант будет &quot;blog-en&quot;, а испанский &quot;blog-es&quot; или просто &quot;blog-2&quot;, &quot;blog-3&quot;, &quot;blog-4&quot; и т.д. Главное чтобы начиналось на &quot;blog&quot;. </p>
<p>Сам движок Gengo интуитивно-понятный и в описании не нуждается. По информации разработчика в 0.9 версии эти баги будут ликвидированы.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/scripting/multilingvalnyiy-wordpress/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pop-up</title>
		<link>http://seleckis.lv/journal/scripting/pop-up</link>
		<comments>http://seleckis.lv/journal/scripting/pop-up#comments</comments>
		<pubDate>Thu, 08 Feb 2007 16:13:02 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[Скриптинг]]></category>

		<guid isPermaLink="false">http://localhost:8506/?p=362</guid>
		<description><![CDATA[Опять JavaScript. Спрашивают иногда, как центрировать pop-up и загружать в него картинку + как его закрывать при щелчке на каринке?
Написать функцию:
function Popup_Open(url, width, height){var left=(screen.width-width)/2;&#160;&#160;  &#160;&#160; // определяется левая позицияvar top=(screen.height-height)/2;&#160;&#160;  &#160;&#160; //определяется верхняя позиция// html в котором вставляем картинку со ссылкой закрывающей pop-upvar html = &#34;&#60;html&#62; &#60;head&#62; &#60;title&#62;pop-up&#60;/title&#62; &#60;/head&#62;&#34;;html += &#34;&#60;body style=\&#34;padding:0px; [...]]]></description>
			<content:encoded><![CDATA[<p>Опять JavaScript. Спрашивают иногда, как центрировать pop-up и загружать в него картинку + как его закрывать при щелчке на каринке?</p>
<p>Написать функцию:</p>
<div style="text-align: left;"><code><strong>function</strong> Popup_Open(url, width, height){<br />var left=(screen.width-width)/2;&nbsp;&nbsp;  &nbsp;&nbsp; // определяется левая позиция<br />var top=(screen.height-height)/2;&nbsp;&nbsp;  &nbsp;&nbsp; //определяется верхняя позиция</code><code>// html в котором вставляем картинку со ссылкой закрывающей pop-up<br />var html = &quot;&lt;html&gt; &lt;head&gt; &lt;title&gt;pop-up&lt;/title&gt; &lt;/head&gt;&quot;;<br />html += &quot;&lt;body style=\&quot;padding:0px; margin:0px;\&quot;&gt;&quot;;<br />html += &quot;&lt;a href=\&quot;#\&quot; onclick=\&quot;window.close();\&quot;&gt;&quot;;<br />html += &quot;&lt;img src=\&quot;&quot; + url + &quot;\&quot; style=\&quot;border:none\&quot; /&gt;&lt;/a&gt;&quot;;<br />html += &quot;&lt;/body&gt;&lt;/html&gt;&quot;;</code><code>// сам pop-up<br />var popup = open(&quot;&quot;, &quot;popup&quot;, &quot;height=&quot;+height+&quot;, width=&quot;+width+&quot;, top=&quot;+top+&quot;, left=&quot;+left+&quot;, location=no, toolbar=no, scrollbars=no, resizable=no, menubar=no, status=no&quot;);</code><code>// записываем в pop-up html код.<br />popup.document.write(html);<br />}</p></blockquote>
</div>
<p>А вызываем эту функцию в ссылке. Указываем параметры: адрес, ширину и высоту картинки.</p>
<div style="text-align: left;"><code>&lt;a href=&quot;#&quot; onclick=&quot;Popup_Open('riga.jpg', 700, 525)&quot;&gt;<br />&nbsp;&nbsp;&nbsp; &lt;img src=&quot;riga_sm.jpg&quot; /&gt;<br />&lt;/a&gt;</p></blockquote>
</div>
<p>Удобно. Но pop-up'ы - прошлый век, который блокируется браузерами. Ну а если очень хочется, то можно.</p>
<p><a href="/wp-content/uploads/File/scripting/ns_popup.zip" target="_blank">Скачать исходник</a></p>
<p><em>Updated:</em> Скрипт не работал в IE6. Надо создавать переменные с помощью <strong>var</strong>. Теперь всё Ок.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/scripting/pop-up/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Выпадающее меню</title>
		<link>http://seleckis.lv/journal/scripting/dropdown-menu</link>
		<comments>http://seleckis.lv/journal/scripting/dropdown-menu#comments</comments>
		<pubDate>Mon, 05 Feb 2007 23:29:27 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[Скриптинг]]></category>

		<guid isPermaLink="false">http://localhost:8506/?p=356</guid>
		<description><![CDATA[Сегодня, дети, я вам расскажу сказку про тётю Джаву.
Нет… это совсем другая история.
Речь пойдёт о выпадающем меню.Условия:

должно работать во всех браузерах;
наигибкость при динамическом создании меню в cms;
настраиваемый внешний вид

Скрипт не претендует на звание наилучшего. Свои минусы тоже имеются.
Для примера было взято меню с Blender3D.
Начнём с простого. Создадим меню из ссылок:

&#60;div id="ns_navigation"&#62;
	&#60;div&#62;&#60;/div&#62;
	&#60;a href="about" onmouseover="ns_menushow(this, ‘Features=features&#124; Gallery=gallery&#124; [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня, дети, я вам расскажу сказку про тётю Джаву.<br />
Нет… это совсем другая история.</p>
<p>Речь пойдёт о выпадающем меню.Условия:</p>
<ol>
<li>должно работать во всех браузерах;</li>
<li>наигибкость при динамическом создании меню в cms;</li>
<li>настраиваемый внешний вид</li>
</ol>
<p>Скрипт не претендует на звание наилучшего. Свои минусы тоже имеются.<br />
Для примера было взято меню с Blender3D.</p>
<p>Начнём с простого. Создадим меню из ссылок:</p>
<p><code><br />
&lt;div id="ns_navigation"&gt;<br />
	&lt;div&gt;&lt;/div&gt;<br />
	&lt;a href="about" onmouseover="ns_menushow(this, ‘Features=features| Gallery=gallery| Applications=applications| Testimonials=testimonials| Requirements=requirements’);" onmouseout="ns_menuhide(this);"&gt;About Blender&lt;/a&gt;<br />
	&lt;div&gt;&lt;/div&gt;<br />
	&lt;a href="news" onmouseover="ns_menushow(this, ‘Blender News=blender-news| Announcements=announcements| Development=development| Artists=artists|Submit News=submit-news’);" onmouseout="ns_menuhide(this);"&gt;News&lt;/a&gt;<br />
.............................................................<br />
	&lt;a href="blender-foundation" onmouseover="ns_menushow(this, ‘About=about|Blender conference=blender -onference|History=history|Donation &#038; payment=donation-n-payment|Press=press|Media Exposure=media-exposure’);" onmouseout="ns_menuhide(this);"&gt;Blender Foundation&lt;/a&gt;<br />
	&lt;div&gt;&lt;/div&gt;<br />
	&lt;a href="e-shop" onmouseover="ns_menushow(this, ‘Books=books|Downloadable=downloadable|CD Roms=cd-roms|Blender Wear=blender-wear’);" onmouseout="ns_menuhide(this);"&gt;E-Shop&lt;/a&gt;<br />
&lt;/div&gt;</code></p>
<p>Ссылки находятся внутри &lt;div id=&#8221;ns_navigation&#8221;&gt; в общем, так сказать, контейнере. А между ссылками находятся div’ы которые будут отображать разделительную картинку. Сами ссылки имеют события onmouseover и onmouseout и это логично. При вызове функции ns_menushow отправляются параметры: this &#8211; элемент на который навели курсором мыши, а второй элемент строка содержащая всё названия и url ссылок для выпадающего меню. Очень удобно по определённому символу разделять строку на элементы массива. Я выбрал символ «|» для разделения на пункты меню и знак « = » для разделения заголовка и самой ссылки (ссылки здесь указаны в виде пермалинков).</p>
<p>Чтобы всё красиво выглядело подключаем css-файл в котором пишем:</p>
<p><code><br />
div#ns_navigation{<br />
	margin: 0px;<br />
	padding: 0px;<br />
	text-align: left;<br />
	font: 11px Verdana;<br />
}<br />
div#ns_navigation{<br />
	background-color: #000000;<br />
	height:19px;<br />
	width: 724px;   // ширину придётся подстраивать вручную<br />
	overflow: hidden;   //в IE6 есть баг при котором последний пункт меню дублируется и вставляется под меню, поэтому - скрываем<br />
}<br />
#ns_navigation a{<br />
	display: block;<br />
	float:left;<br />
	text-decoration: none;<br />
	color: #FFFFFF;<br />
	padding: 3px 14px 2px 14px;<br />
}<br />
#ns_navigation div{   //настраиваем разделительную картинку<br />
	margin: 0px;<br />
	padding: 0px;<br />
	float:left;<br />
	width: 1px;<br />
	height: 18px;<br />
	background: url(ns_dropdown_menu.gif);<br />
}<br />
#ns_navigation a:link, #ns_navigation a:visited{<br />
	background-color: #00518c;<br />
}<br />
#ns_navigation a:hover, #ns_navigation a:active{<br />
	background-color: #003c63;<br />
}</code></p>
<p>Внешний вид горизонтального меню готов. Теперь займёмся созданием выпадающего меню.<br />
Подключаем javascript-файл в котором пишем:</p>
<p><code><br />
var dropmenu = document.createElement("div"); //создаём тэг div куда поместим подменю<br />
var over_head = false; // переменные для определения,  держит ли<br />
var over_menu = false; //  пользователь мышку на главном или выпавшем меню или нет<br />
</code><br />
<code><br />
// отличная функция, определяющая точные координаты элемента, независимо в каком тэге находится меню. Работает во всех браузерах.<br />
function findPos(obj) {<br />
	var curleft = curtop = 0;<br />
	if (obj.offsetParent) {<br />
		curleft = obj.offsetLeft<br />
		curtop = obj.offsetTop<br />
		while (obj = obj.offsetParent) {<br />
			curleft += obj.offsetLeft<br />
			curtop += obj.offsetTop<br />
		}<br />
	}<br />
	// возвращает левую и верхнюю позицию в массиве<br />
	return [curleft,curtop];<br />
}<br />
</code><br />
<code><br />
function ns_menushow(menu_head, string_params) {	// функция показа меню<br />
	var positions = findPos(menu_head);	//получаем точную координату элемента<br />
	var left = positions[0] - 1;   // присваеваем координату переменной left<br />
	var top = positions[1] + menu_head.offsetHeight + 1;	// присваеваем координату переменной top, но добавляем высоту горизонтального меню.<br />
	var params = string_params.split(’|'); // делим строку с параметрами напункты меню<br />
	var html = "";<br />
	for (i=0; i &lt; params.length; i++){	// в цикле делим пункты меню<br />
		title = params[i].split(’=');	//	на заголовки и адреса и генерируем ссылки<br />
		html += "&lt;a href='" + title[1] + "'&gt;" + title[0] + "</a>";<br />
	}<br />
	document.body.appendChild(dropmenu);   // помещаем div на страницу<br />
	dropmenu.innerHTML = html;	  //	помещаем в него ссылки<br />
	dropmenu.style.left = left + "px";  //	задаём левую позицию<br />
	dropmenu.style.top = top + "px";	//	задаём верхнюю позицию<br />
	dropmenu.id = ‘ns_dropmenu’;		//	называем<br />
	over_head = true;	// а здесь говорим: курсор находится на заголовке меню<br />
}<br />
</code><br />
<code><br />
dropmenu.onmouseover = function(){   // если наводим курсор на выпавшее меню<br />
	over_menu = true;<br />
}<br />
</code><br />
<code><br />
dropmenu.onmouseout = function(){	// если убираем курсор с выпавшего меню<br />
	over_menu = false;<br />
	var tim = setTimeout("ns_clear()", 1500);  // через полторы минуты запускаем функцию удаления выпадающего меню<br />
}<br />
</code><br />
<code><br />
var tim;<br />
function ns_clear(){<br />
	var dropmenu = document.getElementById(’ns_dropmenu’);<br />
	if(!over_menu &#038;&#038; !over_head &#038;&#038; dropmenu){<br />
		// если курсора нет ни на главном меню ни на выпадающем и вообще существует выпадающее меню, то удаляем его.<br />
		document.body.removeChild(dropmenu);<br />
		clearTimeout(tim);<br />
	}<br />
}<br />
</code><br />
<code><br />
function ns_menuhide(){   // если убираем курсор с главного меню<br />
	over_head = false;<br />
	var tim = setTimeout("ns_clear()", 1500);	// через полторы минуты запускаем функцию удаления выпадающего меню<br />
}</code></p>
<p>Ну вот. Надеюсь в комментариях понятно объясни что и как.<br />
Осталось настроить внешний вид выпадающего меню.</p>
<p><code><br />
div#ns_dropmenu{<br />
	background-color: #EFEFEF;<br />
	position: absolute;<br />
	width: 160px;<br />
	overflow: hidden;<br />
	filter:alpha(opacity=75);<br />
	opacity:.75;<br />
}<br />
#ns_dropmenu a{<br />
	display: block;<br />
	text-decoration: none;<br />
	color: #FFFFFF;<br />
	padding: 5px 20px;<br />
	margin: 0px;<br />
}<br />
#ns_dropmenu a:link, #ns_dropmenu a:visited{<br />
	background-color: #7392ad;<br />
}<br />
#ns_dropmenu a:hover, #ns_dropmenu a:active{<br />
	background-color: #003c63;<br />
}</code></p>
<p>И добавляем #ns_dropmenu в самую первую инструкцию для горизонтального меню:</p>
<p><code><br />
div#ns_navigation, div#ns_dropmenu{<br />
	margin: 0px;<br />
	padding: 0px;<br />
	text-align: left;<br />
	font: 11px Verdana;<br />
}</code></p>
<p>В итоге должно получиться нечто <a href="javascript:void(window.open('/wp-content/uploads/File/scripting/ns_dropdown_menu.html','','resizable=no,location=no,menubar=no,scrollbars=yes,status=no,toolbar=no,fullscreen=no,dependent=no,width=800,height=500,left=30,top=30'))">такое.</a><br /><a href="/wp-content/uploads/File/scripting/ns_dropdown_menu.zip" target="_blank">Скачать исходник</a><strong> </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/scripting/dropdown-menu/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Подсказка (tooltip) на javascript</title>
		<link>http://seleckis.lv/journal/scripting/tooltip-javascript</link>
		<comments>http://seleckis.lv/journal/scripting/tooltip-javascript#comments</comments>
		<pubDate>Mon, 29 Jan 2007 18:37:04 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[Скриптинг]]></category>

		<guid isPermaLink="false">http://localhost:8506/?p=341</guid>
		<description><![CDATA[Хочу поделиться тем как я создавал это простенький, но хороший скрипт создания подсказки (tooltip).
Можно было бы сделать подсказку атрибутами alt или title, но они появляются и исчезают как-то вяло. Мне захотелось жизни. Хотелась чтоб подсказка двигалась вместе с мышкой. И вот результат.
Итак:
Для начала подумаем куда деть оформление подсказки. Если хотите можно в отдельный css файл [...]]]></description>
			<content:encoded><![CDATA[<p>Хочу поделиться тем как я создавал это простенький, но хороший скрипт создания подсказки (tooltip).</p>
<p>Можно было бы сделать подсказку атрибутами alt или title, но они появляются и исчезают как-то вяло. Мне захотелось жизни. Хотелась чтоб подсказка двигалась вместе с мышкой. И вот результат.</p>
<p><strong>Итак:</strong></p>
<p>Для начала подумаем куда деть оформление подсказки. Если хотите можно в отдельный css файл или напрямую в html воткнуть в тэг <strong>&lt;style&gt;</strong>. Я выбрал первое. Создал css файл в который написал следующее:</p>
<p><code>#ns_tt{<br />
position: absolute;<br />
border: solid #AAAAAA 1px;<br />
background-color: #DDDDDD;<br />
font-family: Tahoma, sans-serif;<br />
font-size: 11px;<br />
line-height: 16px;<br />
padding: 2px 5px;<br />
overflow: hidden;<br />
margin: 25px 0px 0px 5px;<br />
}</code><br />
Тем самым оформил текст и саму подсказку. &#8220;<strong>position: absolute&#8221; </strong>здесь является директивой позиционирования подсказки. Она не должна зависеть от других элементов. Поэтому не трогайте её. Остальное можно менять по своему усмотрению. Разве что рекоммендую <strong>margin</strong> меньше не делать иначе подсказка попадёт под курсор и будет подрагивать.</p>
<p>Пойдём далее.<br />
<span id="more-341"></span><br />
Дальше в вашем html файле подключаем css файл:</p>
<p><code>&lt;link rel="stylesheet" type="text/css" href="your_css_file.css" /&gt;</code><br />
<strong>Создаём js файл.</strong><br />
Вот тут самое интересное.<br />
Создаём переменные отвечающие за левую и верхнюю позицию подсказки:</p>
<p><code>var l = 0, t = 0</code><br />
Проверяем браузер. Если это Internet Explorer, то он будет понимать <strong>document.all</strong> и соответственно у него другие понятия о событиях и значениях которые они возвращают.</p>
<p><code>var IE = document.all?true:false</code><br />
При движении мыши запускаем функцию, которую опишем ниже:</p>
<p><code>document.onmousemove = getMouseXY</code><br />
Создаём элемент div который у нас будет являться подсказкой:</p>
<p><code>var ns_tt = document.createElement("div")</code><br />
А эта функция будет изменять положение подсказки относительно положения курсора мыши:</p>
<p><code>function getMouseXY(e) {<br />
if (IE) {<br />
l = event.clientX + document.body.scrollLeft<br />
t = event.clientY + document.body.scrollTop<br />
}<br />
else {<br />
l = e.pageX<br />
t = e.pageY<br />
}<br />
ns_tt.style.left = l + "px"<br />
ns_tt.style.top = t + "px"<br />
return true<br />
}</code><br />
Как вы видели мы проверяли наличие браузера IE. Дело в том что IE <strong>во-первых:</strong> положение курсора мыши понимает из объекта <em>event</em> в частности его значений <em>clientX </em>и <em>clientY;</em> <strong>во-вторых: </strong>координаты мыши отсчитываются от левого верхнего угла окна браузера, а когда пользователь использует прокрутку то в IE координата смещается, чего нет в других браузерах.</p>
<p>Следующая функция помещает в <strong>body</strong> нашу подсказку, вставляет текст переданый в качестве параметра и даёт ей уникальное имя, по которой в последствии мы будем её искать для удаления:</p>
<p><code>function AddTT(tt_text){<br />
document.body.appendChild(ns_tt)<br />
ns_tt.id = "ns_tt"<br />
ns_tt.innerHTML = tt_text<br />
}</code><br />
Последняя функция удаляет подсказку:</p>
<p><code>function RemoveTT() {<br />
document.body.removeChild(document.getElementById("ns_tt"))<br />
}</code><br />
Теперь подключаем js-файл к html-файлу. В любое место html-файла вставляем код:</p>
<p><code>&lt;script type="text/javascript" src="ns_tooltip.js"&gt;&lt;/script&gt;</code><br />
Ну и то чез чего всё это не будет работать. Нужно выбрать элемент и поместить туда код вызова и удаления подсказки например:</p>
<p><code>&lt;div onmouseover="AddTT('Вы читаете этот текст,&lt;br /&gt; а сейчас видите &lt;b&gt;подсказку&lt;/b&gt;');" onmouseout="RemoveTT();"&gt;<br />
Текст, картинка, блок... да любой объект над которым появится подсказка!<br />
&lt;/div&gt;</code><br />
Будьте аккуратны с кавычками в <strong>onmouseover</strong>.<br />
Для подсказки в CSS можно добавить например фильтр полупрозрачности (Работает везде, кроме IE6.):</p>
<p><code>filter:alpha(opacity=75);<br />
-moz-opacity:.75;<br />
opacity:.75;</code><br />
Тестировано в: IE 6, IE 7, Opera 9.02, Firefox 2.0.0.1</p>
<p align="center"><a href="#" onclick="window.open('/wp-content/uploads/File/scripting/ns_tooltip.html','','resizable=no,location=no,menubar=no,scrollbars=no,status=no,toolbar=no,fullscreen=no,dependent=no,width=500,height=400,left=200,top=200'); return false">Посмотрите как это работает</a></p>
<p><a href="/wp-content/uploads/File/scripting/ns_tooltip.zip">Архив с исходником</a></p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/scripting/tooltip-javascript/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>CjCity Database</title>
		<link>http://seleckis.lv/journal/scripting/cjcity-database</link>
		<comments>http://seleckis.lv/journal/scripting/cjcity-database#comments</comments>
		<pubDate>Tue, 11 Jul 2006 10:44:14 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[Скриптинг]]></category>

		<guid isPermaLink="false">http://localhost:8506/?p=19</guid>
		<description><![CDATA[«База данных на файлах? Извращенец!» — знакомый программист
Были времена когда я чувствовал себя последователем The Prodigy, Crystal Method и Chemical Brothers. Тогда я даже и не представлял себе на сколько я далёк от них.
CjCity — сайт для таких же уверенных в себе, но не признаных недалёкой и примитивной общественностью. Это сайт некоммерческих ди-джеев и си-джеев, [...]]]></description>
			<content:encoded><![CDATA[<p><em><img id="image18" class="alignright" src="http://www.seleckis.lv/wp-content/uploads/2006/07/cjcity2.jpg" alt="cjcity2.jpg" height="80" align="right" /></em><em>«База данных на файлах? Извращенец!» — знакомый программист</em></p>
<p>Были времена когда я чувствовал себя последователем The Prodigy, Crystal Method и Chemical Brothers. Тогда я даже и не представлял себе на сколько я далёк от них.</p>
<p>CjCity — сайт для таких же уверенных в себе, но не признаных недалёкой и примитивной общественностью. Это сайт некоммерческих ди-джеев и си-джеев, один из популярнейших комьюнити андерграундной электронной музыки ру-нета.</p>
<p>Хотелось быстро научиться программировать на php. Но как научиться, если объекта для разработки нет? Гостевая книга? Скучно. Чат? Банально (хотя до этой банальности я однажды дошёл)</p>
<p>Как постоянный посетитель сайта cjcity, я не мог не знать о проблеме которая вот-вот доведёт до отчаяния мэра города си-джеев — Cj John PM. У сайта небыло базы данных пользователей в которую заносились данные об исполнителях и ссылки на их музыку. Все данные вносились вручную самим мэром. Ну согласитесь, это не дело! Самый главный loop’ов начальник и beatrate’ов коммадир, сидит часами, до distortion’а в глазах и копирует шаблонные строчки. Я бы свихнулся.</p>
<p>Так уж получилось что человек я отзывчивый (но в меру) и сочувствующий (тоже в меру). Поступило от меня предложение взяться за базу обеими руками и десятью пальцами! Предложение было обговорено, условия утверждены, заказ принят.</p>
<p>Наступило время мыслительных процессов. Заваленая бумагой, огрызками, бутылками, стаканами, книжками и дисками комната, превратилась в лабораторию по проведению опытов, с целью выяснить сколько человека хватит чтоб не сойти с ума от общения с интерпретатором php. Оказалось что не всё так плохо. Натуралом я остался и база с грехом пополам была написана. (правда в течении полугода исправлялась и дорабатывалась)</p>
<p style="text-align: center;"><img id="image19" src="/wp-content/uploads/2006/07/cjcity.jpg" alt="cjcity.jpg" height="275" /></p>
<p>Опыта я получил больше, чем если бы я сам себе придумал какую-либо задачу, поскольку творил для людей, а люди — народ придирчивый. (Уж вы мне поверьте!)</p>
<p>Что в ней хорошего:</p>
<ul type="disc">
<li>Хоть основана на файлах, но работает стабильно.</li>
<li>Один суперюзер-админ-модератор. Для него я просто сделал доступ к любому аккаунту напрямую, вводя админский пароль. Таким образом админ получает права на редактирование данных пользователя.</li>
<li>Посчёт и вывод треков.</li>
<li>Сбор жанров.</li>
<li>Постраничный вывод.</li>
<li>Регистрация с подтверждением через e-mail</li>
<li>Восстановление пароля, через тот же e-mail</li>
</ul>
<p>и другие возможности. Не идеал, но для начала не плохо.</p>
<p>В данный момент сайт переживает внеочередной кризис. База мною написанная морально устарела. А все кто брался писать новую — ретировался. Мэр лихорадочно ищет программистов. Даже деньги предлагает (мне-то чисто символически была выплачена небольшая сумма и выслан эксклюзивный сборник музыки “CjCity Избранное”). Небольшие, но хоршие.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/scripting/cjcity-database/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

