<?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>JSToolbox - все о JavaScript &#187; MooTools</title>
	<atom:link href="http://www.jstoolbox.com/category/mootools/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jstoolbox.com</link>
	<description>Блог о программировании вообще и о JavaScript в частности, уроки, статьи, заметки, база знаний.</description>
	<lastBuildDate>Mon, 07 Mar 2011 18:19:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Lighter.js &#8211; подсветка синтаксиса для Mootools</title>
		<link>http://www.jstoolbox.com/2009/05/02/lighterjs-podsvetka-sintaksisa-dlya-mootools/</link>
		<comments>http://www.jstoolbox.com/2009/05/02/lighterjs-podsvetka-sintaksisa-dlya-mootools/#comments</comments>
		<pubDate>Sat, 02 May 2009 20:50:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MooTools]]></category>
		<category><![CDATA[Плагины]]></category>
		<category><![CDATA[подсветка синтаксиса]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/?p=449</guid>
		<description><![CDATA[<p><a href="http://pradador.com/code/lighterjs/" title="Lighter.js">Lighter.js</a> - это скрипт для подсветки синтаксиса, который использует для своей работы библиотеку <a href="http://mootools.net" title="Mootools">Mootools</a>. Скрипт прост в использовании и настройке, имеет различные цветовые темы. Я создал небольшой демо пример, чтобы вы могли оценить его способности. <a href="http://jstoolbox.com/demo/lighter.php" title="Демо пример подсветки синтаксиса">Смотреть демо пример</a>.</p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://pradador.com/code/lighterjs/" title="Lighter.js">Lighter.js</a> &#8211; это скрипт для подсветки синтаксиса, который использует для своей работы библиотеку <a href="http://mootools.net" title="Mootools">Mootools</a>. Скрипт прост в использовании и настройке, имеет различные цветовые темы. Я создал небольшой демо пример, чтобы вы могли оценить его способности. <a href="http://jstoolbox.com/demo/lighter.php" title="Демо пример подсветки синтаксиса">Смотреть демо пример</a>.</p>
<p><span id="more-449"></span></p>
<p>Теперь о том, как подключить и использовать скрипт.</p>
<p>Во-первых нужно скачать и подключить необходимые скрипты:</p>
<pre class="prettyprint">
&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/mootools/1.2.1/mootools-yui-compressed.js">&lt;/script>
&lt;script type="text/javascript" src="source/Lighter.js">&lt;/script>
&lt;script type="text/javascript" src="source/Flame.js">&lt;/script>
&lt;script type="text/javascript" src="source/Flame.git.js">&lt;/script>
&lt;script type="text/javascript" src="source/Fuel.js">&lt;/script>
&lt;script type="text/javascript" src="source/Fuel.js.js">&lt;/script>
&lt;script type="text/javascript" src="source/Fuel.ruby.js">&lt;/script>
</pre>
<p>Сначала подключается файл библиотеки Mootools, затем исходники Lighter.js. Заметьте, что файлы с префиксом <em>Flame</em>, содержат темы для подсветки синтаксиса. То есть, если вы хотите иметь подсветку в стиле <a href="http://github.com">github.com</a>, то подключите файл <em>Flame.git.js</em>. Файлы с префиксом <em>Fuel</em> распознают исходный код языков. Это значит, что если вам нужно подсвечивать исходники на языках <em>Ruby</em> и <em>JavaScript</em>, то нужно подключить файлы <em>Fuel.ruby.js</em> и <em>Fuel.js.js</em>.</p>
<p>Блоки с подсвечиваемым кодом нужно отметить классом, в котором нужно указать язык программирования и тему подсветки:</p>
<pre class="prettyprint">
&lt;pre class="ruby:git">
// далее подсвечиваемый код
&lt;/pre>
</pre>
<p>Помимо этого, есть и другой способ указать скрипту тему и язык программирования &#8211; это указать в опциях вызова скрипта параметры <strong>Flame</strong> и <strong>Fuel</strong>.</p>
<p>Заключительный шаг &#8211; вызов функции <strong>light</strong>, в которую можно передать различные параметры работы скрипта:</p>
<pre class="prettyprint">
$$('pre').light({
    altLines: 'hover',
    mode: 'ol'
});
</pre>
<p>Здесь, в качестве параметров я передаю значение <em>hover</em> для парметра <strong>altLines</strong> для подсветки строк при наведении на них указателя мышки, <em>ol</em> для параметра <strong>mode</strong> для того, чтобы показывать номера строк. Все остальные опции можно узнать <a href="http://pradador.com/code/lighterjs/">здесь</a>.</p>
<p><a href="http://jstoolbox.com/demo/lighter.php" class="demo">Смотреть демо</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2009/05/02/lighterjs-podsvetka-sintaksisa-dlya-mootools/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Что такое JSONP?</title>
		<link>http://www.jstoolbox.com/2009/03/18/chto-takoe-jsonp/</link>
		<comments>http://www.jstoolbox.com/2009/03/18/chto-takoe-jsonp/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 14:54:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JSON]]></category>
		<category><![CDATA[MooTools]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[XMLHTTPRequest]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/?p=422</guid>
		<description><![CDATA[<p>В последнее время довольно часто замечал в разных статьях упоминание о JSONP. Судя по названию это тот же JSON, но с каким-то наворотом. Поразобравшись немного с этим, оказалось что этот формат нужен для того, чтобы иметь возможность выполнять асинхронные запросы к серверу расположенному на другом домене. Напомню, что для объекта XMLHTTPRequest есть такое ограничение. То есть, если ваш сайт расположен по адресу <em>mysite.com</em>, то AJAX запрос на сервер <em>anothersite.com</em> выполнить не удастся.</p>]]></description>
			<content:encoded><![CDATA[<p>В последнее время довольно часто замечал в разных статьях упоминание о JSONP. Судя по названию это тот же JSON, но с каким-то наворотом. Поразобравшись немного с этим, оказалось что этот формат нужен для того, чтобы иметь возможность выполнять асинхронные запросы к серверу расположенному на другом домене. Напомню, что для объекта XMLHTTPRequest есть такое ограничение. То есть, если ваш сайт расположен по адресу <em>mysite.com</em>, то AJAX запрос на сервер <em>anothersite.com</em> выполнить не удастся.</p>
<p><span id="more-422"></span></p>
<p>Так вот, чтобы обойти это ограничение поступали следующим образом &#8211; динамически создавали и добавляли в документ новый тег <em>&lt;script&gt;</em>, который подгружал скрипт с нужными данными:</p>
<pre class="prettyprint">
&lt;script src="/some/url/here" type="text/javascript">&lt;/script>
</pre>
<p>При динамической подгрузке данных нужно выполнять callback, а для этого в конец подгружаемого скрипта добавляем вызов этой функции. В общем, получаемый от сервера скрипт может выглядеть следующим образом:</p>
<pre class="prettyprint">
var data = {
    one : "12",
    two : "34"
}

someCallback(data);
</pre>
<p>Если в указанном выше примере не объявлять переменную <em>data</em>, а сразу поместить её в вызов <em>someCallback</em>, то получим то, что сейчас стали называть <strong>JSONP</strong>:</p>
<pre class="prettyprint">
someCallback({ one : "12",  two : "34" });
</pre>
<p>В данный момент некоторые популярные сервисы поддерживают как JSON, так и JSONP. Типичным примером является API для поиска от YAHOO. Чтобы получить данные от сервера в виде JSON, мы указываем параметр <em>output=json</em>:</p>
<p><a href="http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&#038;query=finances&#038;format=pdf&#038;output=json">http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&#038;query=finances&#038;format=pdf&#038;output=json</a></p>
<p>Теперь, чтобы получить данные в виде JSONP, просто добавляем название функции-callback, в которую будут &#8220;завернуты&#8221; возвращаемые данные. Указанная выше ссылка будет выглядеть так:</p>
<p><a href="http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&#038;query=finances&#038;format=pdf&#038;output=json&#038;callback=loadit">http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&#038;query=finances&#038;format=pdf&#038;output=json&#038;callback=loadit</a></p>
<p>По этой ссылке сервер вернет следующие данные:</p>
<pre class="prettyprint">
loadit({"ResultSet":{"type":"web","totalResultsAvailable":22600000,"totalResultsReturned":10, ... } });
</pre>
<p>Теперь, короткий пример получения и обработки формата JSONP:</p>
<pre class="prettyprint">
&lt;html>
&lt;head>
&lt;script type="text/javascript">

// callback
function loadit(data) {
  // работаем с данными
  if (!data) {
    return;
  }

  var oTotal = document.getElementById("total");
  oTotal.innerHTML = data.ResultSet.totalResultsAvailable;
}

// здесь будет ссылка на новый элемент script
var oElem = null;

function sendJSONP(url, callback) {
  if (!url || !callback)
    return;

  url += '&#038;callback='+callback;

  // выполняем запрос JSONP
  if (oElem) {
    oElem.parentNode.removeChild(oElem);
  }

  oElem = document.createElement('script');
  oElem.setAttribute('type','text/javascript');
  document.getElementsByTagName('head')[0].appendChild(oElem);
  oElem.setAttribute('src', url);
}

window.onload = function(){
  document.getElementById("searchBtn").onclick = function(){
    var query = document.getElementById("query").value;
    sendJSONP('http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&#038;query='+encodeURIComponent(query)+'&#038;output=json', 'loadit');
  }
}
&lt;/script>
&lt;/head>
&lt;body>
&lt;input type="text" name="search" value="" id="query" />&lt;input type="button" value="Искать" name="s" id="searchBtn"/>
&lt;div id="total">&lt;/div>
&lt;/body>
&lt;/html>
</pre>
<p>Этот скрипт работает следующим образом: пользователь вводит в поле поиска искомую фразу и нажимает на кнопку <em>&#8220;Искать&#8221;</em>. Из возвращаемых результатов поиска мы выделяем значение общего количества результатов <em>totalResultsAvailable</em> и показываем это значение в элементе <em>&lt;div id=total&gt;</em>. Запрос к серверу выполняется в функции sendJSONP, которая принимает 2 параметра &#8211; url и callback.</p>
<p>В библиотеке jQuery имеется встроенная поддержка формата JSONP. При использовании этого фреймворка, нет нужды самому код, который добавляет тег SCRIPT в DOM. Всё, что нужно будет сделать, это изменить URL, чтобы указать jQuery, что выполняется JSONP запрос. Заканчивая URL вопросительным знаком, мы даем jQuery понять, что получаемые данные будут в формате JSONP. Не нужно также и указывать название функции обработчика. Пример:</p>
<pre class="prettyprint">
&lt;html>
&lt;head>
&lt;script src="/jquery/jquery.js">&lt;/script>
&lt;script>
var baseurl = 'http://search.yahooapis.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&#038;output=json&#038;query='

function search() {
     var search = $("#search").val()
     console.log(search)
     var surl = baseurl + escape(search) + '&#038;callback=?'
     $.getJSON(surl, function(data) {
          var res = '&lt;h1>Search for '+search+'&lt;/h1>'
          res += '&lt;p>There were '+data.ResultSet.totalResultsAvailable+' results.&lt;/p>'
          for(var i=0; i&lt;data.ResultSet.Result.length; i++) {
               var result = data.ResultSet.Result[i]
               var resultStr = '&lt;img src="'+result['Thumbnail']['Url']+'" align="left">';
               resultStr += '&lt;a href="'+result['ClickUrl']+'">'+result['Title']+'&lt;/a>&lt;br clear="left"/>'
               res+=resultStr
           }
          $("#result").html(res)
      })
}
$(document).ready(function() {
     $("#searchBtn").click(search)
});

&lt;/script>
&lt;/head>

&lt;body>
    &lt;input type="text" name="search" id="search"> &lt;input type="button" value="Search" id="searchBtn">
    &lt;div id="result">&lt;/div>
&lt;/body>
&lt;/html>
</pre>
<p>Этот пример для работы с jQuery позаимствован на <a href="http://www.insideria.com/2009/03/what-in-the-heck-is-jsonp-and.html">InsideRIA</a>.</p>
<p>Поддержка JSONP скоро будет доступна и в <a href="http://mootools.net">Mootools</a>. В данный момент она уже есть в версии 1.3rc1. Выглядит это так:</p>
<pre class="prettyprint">
new JsonP('http://api.cnet.com/restApi/v1.0/techProductSearch', {
    data: {
        partTag: 'mtvo',
        iod: 'hlPrice',
        iewType: 'json',
        results: '100',
        query: 'ipod'
    },
    onComplete: myFunction.bind(someObject)
}).request();
</pre>
<p>На мой взгляд гораздо понятнее и проще, чем чудеса с вопросительными знаками в jQuery <img src='http://www.jstoolbox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2009/03/18/chto-takoe-jsonp/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Шаблоны для 960gs и Mootools</title>
		<link>http://www.jstoolbox.com/2009/02/08/shablony-dlya-960gs-i-mootools/</link>
		<comments>http://www.jstoolbox.com/2009/02/08/shablony-dlya-960gs-i-mootools/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 20:52:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[960.gs]]></category>
		<category><![CDATA[MooTools]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/?p=376</guid>
		<description><![CDATA[<p>Если вы часто работаете с библиотекой <a href="http://mootools.net" title="Mootools framework">Mootools</a> и CSS фреймворком <a href="http://960.gs/">960.gs</a>, то вам, пожалуй понравятся <a href="http://designinfluences.com/fluid960gs/" title="Шаблоны 960gs">шаблоны</a>, созданные <a href="http://www.domain7.com/WhoWeAre/StephenBau.html">Стефаном Бау</a>. Это резиновые и фиксированные шаблоны, в которых есть все основные элементы дизайна - формы, таблицы, нумерованные и ненумерованные списки и пр. Из mootools позаимствованы такие элементы, как аккордеон, открывающиеся панели, меню.</p>]]></description>
			<content:encoded><![CDATA[<p>Если вы часто работаете с библиотекой <a href="http://mootools.net" title="Mootools framework">Mootools</a> и CSS фреймворком <a href="http://960.gs/">960.gs</a>, то вам, пожалуй понравятся <a href="http://designinfluences.com/fluid960gs/" title="Шаблоны 960gs">шаблоны</a>, созданные <a href="http://www.domain7.com/WhoWeAre/StephenBau.html">Стефаном Бау</a>. Это резиновые и фиксированные шаблоны, в которых есть все основные элементы дизайна &#8211; формы, таблицы, нумерованные и ненумерованные списки и пр. Из mootools позаимствованы такие элементы, как аккордеон, открывающиеся панели, меню.</p>
<p><br/><br/><br/><br />
<span id="more-376"></span></p>
<div class="entry_picture" style="width:575px">
<img src="http://www.jstoolbox.com/blog/wp-content/uploads/2009/02/moo-960-2.png" alt="moo-960-2" title="moo-960-2" />
</div>
<p>Такие шаблоны это как раз то, что нужно для любителей программировать на языке &#8220;копи-пейст&#8221;. Нужно просто выбрать один из предлагаемых шаблонов, вырезать лишнее, и вставить то, что нужно. Если нужно меню, то что может быть проще &#8211; копируем что-то вроде этого:</p>
<pre class="prettyprint">
&lt;ul class="nav main">
    &lt;li>
        &lt;a href="#">Menu 1&lt;/a>
        &lt;ul>
          &lt;li>
            &lt;a href="#">Submenu 1&lt;/a>
          &lt;/li>
          &lt;li>
            &lt;a href="#">Submenu 2&lt;/a>
          &lt;/li>
          &lt;li>
            &lt;a href="#">Submenu 3&lt;/a>
          &lt;/li>
          &lt;li>
            &lt;a href="#">Submenu 4&lt;/a>
          &lt;/li>
          &lt;li>
            &lt;a href="#">Submenu 5&lt;/a>
          &lt;/li>
        &lt;/ul>
      &lt;/li>

	  &lt;!-- и так далее -->

	&lt;/li>
&lt;/ul>
</pre>
<p>Я раньше всегда использовал <a href="http://developer.yahoo.com/yui/grids/" title="YUI CSS Grids" rel="nofollow">YUI CSS фреймворк</a>, но честно говоря <a href="http://960.gs/" title="960 grid system css framework" rel="nofollow">960 grid system</a> нравится все больше. Если вы никогда раньше не пользовались им, настоятельно рекомендую.</p>
<div class="postLinks"><strong>При поддержке:</strong><br/>Подарки детям, <a href="http://www.lego4all.ru/page/page26.html">подарок ребенку на день рождения</a><br/>Обслуживание компьютеров: <a href="http://abonent-pc.ru">абонентское обслуживание компьютеров</a><br/>Ювелирных украшения, обручальные кольца &#8211; <a href="http://www.svadba66.ru/catalog/section1/">ювелирный магазин</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2009/02/08/shablony-dlya-960gs-i-mootools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Новый плагин для Mootools &#8211; Request.Queue</title>
		<link>http://www.jstoolbox.com/2008/12/07/mootools-request-queue/</link>
		<comments>http://www.jstoolbox.com/2008/12/07/mootools-request-queue/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 21:16:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[MooTools]]></category>
		<category><![CDATA[Плагины]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/?p=281</guid>
		<description><![CDATA[<p><a href="http://www.clientcide.com/code-snippets/ajax/new-plugin-requestqueue/">Request.Queue</a> - это новый плагин для библиотеки <a href="http://mootools.net">Mootools</a>, который позволяет последовательно отправлять AJAX запросы на сервер. Работает это так: пользователь создает некоторое количество запросов  <strong>Request</strong>, которые должны быть отправлены на сервер один за одним, затем добавляет их в очередь <strong>Request.Queue</strong>, после чего для каждого запроса вызывается метод <strong>send()</strong> в том порядке, в котором они должны быть отправлены.</p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.clientcide.com/code-snippets/ajax/new-plugin-requestqueue/">Request.Queue</a> &#8211; это новый плагин для библиотеки <a href="http://mootools.net">Mootools</a>, который позволяет последовательно отправлять AJAX запросы на сервер. Работает это так: пользователь создает некоторое количество запросов  <strong>Request</strong>, которые должны быть отправлены на сервер один за одним, затем добавляет их в очередь <strong>Request.Queue</strong>, после чего для каждого запроса вызывается метод <strong>send()</strong> в том порядке, в котором они должны быть отправлены.</p>
<p><span id="more-281"></span></p>
<p>Рассмотрим следующий пример:</p>
<pre class="prettyprint">
var num1 = new Request({ url: '/wiki/simple.php', data: {num: 1, sleep: 1}, method: 'get',
    onComplete: function(response){ console.log(response) } });
var num2 = new Request({ url: '/wiki/simple.php', data: {num: 2, sleep: 1}, method: 'get',
    onComplete: function(response){ console.log(response) } });
var num3 = new Request({ url: '/wiki/simple.php', data: {num: 3, sleep: 1}, method: 'get',
    onComplete: function(response){ console.log(response) } });
var myQueue = new Request.Queue();
// можно добавлять запросы по одному
myQueue.addRequest('num1', num1);
// ... или сразу несколько
myQueue.addRequests({ num2: num2, num3: num3 });
num1.send();
num2.send();
num3.send();
</pre>
<p>В этом примере очередь запросов будет отправлять по очереди запросы <em>num1</em>, <em>num2</em>, <em>num3</em>. Каждый из них будет отправляться только после того, как предыдущий завершился.</p>
<p>Стоит отметить, что <strong>Request.Queue</strong> может отправлять не только по одному запросу за раз, а и по нескольку, если указать для него опцию <strong>concurrent</strong> (по умолчанию равняется 1). Кроме этой опции, есть также <strong>stopOnFailure</strong> и <strong>autoAdvance</strong> (обе по умолчанию равны <em>true</em>). Первая приостанавливает отправку запросов при возникновении ошибки, при этом возобновить отправку запросов можно при помощи функции <strong>resume()</strong>. Если установить эту опцию в <em>false</em>, то запросы будут отправляться даже если один из них завершился с ошибкой. Вторая опция &#8211; <strong>autoAdvance</strong> автоматически отправляет следующий запрос. Если установить опцию в <em>false</em>, то отправить следующий запрос в очереди можно будет используя функцию <strong>runNext()</strong>.</p>
<p>Как вы уже видели из предыдущего примера, запросы можно добавлять при помощи функций <strong>addRequest()</strong> и <strong>addRequests()</strong>. Удалять запросы из очереди можно при помощи функции <strong>removeRequest()</strong>:</p>
<pre class="prettyprint">
var foo = new Request();
myRequestQueue.addRequest('fooRequest', foo);
myRequestQueue.removeRequest(foo);
// или
myRequestQueue.removeRequest('fooRequest');
</pre>
<p>Если вам нужно полностью очистить очередь запросов, то это можно сделать одной функцией &#8211; <strong>clear()</strong>:</p>
<pre class="prettyprint">
myRequestQueue.clear();
</pre>
<p>Также, объектам Request.Queue можно назначать следующие события:</p>
<ul>
<li>onRequestStart</li>
<li>onRequestEnd</li>
<li>onRequestSuccess</li>
<li>onRequestComplete</li>
<li>onRequestCancel</li>
<li>onRequestException</li>
<li>onRequestFailure</li>
</ul>
<p>Узнать подробнее о всех функциях и событиях можно в <a href="http://www.clientcide.com/docs/Request/Request.Queue" title="Документация к плагину Request.Queue">документации</a>. Скачать скрипт можно <a href="http://www.clientcide.com/js" title="Скачать скрипт">здесь</a> &#8211; просто отметьте в списке доступных для скачивания плагинов Request.Queue и жмите Download.</p>
<div class="postLinks"><strong>Спонсор статьи</strong>:<br/>Профессиональное <a href="http://netpeak.net/">продвижение сайтов</a>, раскрутка в поисковых системах, оптимизация интернет-магазинов.<br/><a href="http://www.vashsad.ua/rus/useful_clauses_landscape_5.html">Живая изгородь</a> своими руками на сайте &#8220;Ваш Сад&#8221;.<br/><a href="http://dvdray.com.ua/">Интернет-магазин dvd</a> &#8211; купить dvd-диски в киеве, продажа фильмов DVD почтой, dvd в украине.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/12/07/mootools-request-queue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как создать свой CSS селектор в MooTools</title>
		<link>http://www.jstoolbox.com/2008/11/11/mootools-pseudo-selector/</link>
		<comments>http://www.jstoolbox.com/2008/11/11/mootools-pseudo-selector/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 22:29:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[MooTools]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[псевдоселектор]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/11/11/mootools-pseudo-selector/</guid>
		<description><![CDATA[В библиотеке Mootools уже реализованы большинство псевдоселекторов CSS3: :nth-child, :contains, :not и др. Но у вас есть возможность не ограничиваться имеющимся выбором и создать свой собственный CSS селектор, который можно будет использовать в таких функциях Mootools, как $$ и getElement. Все, что нужно будет сделать, это добавить свою функцию к объекту Selectors.Pseudo. В функцию будут [...]]]></description>
			<content:encoded><![CDATA[<p>В библиотеке <a href="http://mootools.net" title="Библиотека Mootols">Mootools</a> уже реализованы большинство псевдоселекторов CSS3: <strong>:nth-child</strong>, <strong>:contains</strong>, <strong>:not</strong> и др. Но у вас есть возможность не ограничиваться имеющимся выбором и создать свой собственный CSS селектор, который можно будет использовать в таких функциях Mootools, как <strong>$$</strong> и <strong>getElement</strong>. Все, что нужно будет сделать, это добавить свою функцию к объекту <strong>Selectors.Pseudo</strong>. В функцию будут передаваться два аргумента &#8211; параметр, передаваемый селктору (<em>:pseudo(parameter)</em>) и объект, который может быть использован в качестве временного хранилища данных при последовательном проходе элементов. Последний аргумент используется к примеру в псевдоселекторе :nth-child. Функция должна возвращать <em>true</em> если элемент соответствует критериям выбора или <em>false</em> в обратном случае.</p>
<p><span id="more-238"></span></p>
<p>В качестве примера можно продемонстрировать псевдокласс :random, созданный <a href="http://blog.kassens.net/custom-pseudo-selectors" title="Jan Kassens blog">Яном Кассенсом</a>:</p>
<pre class="prettyprint">
Selectors.Pseudo.random = function(probability, local){
	return Math.random() < (probability || .5).toFloat();
};

// выбор примерно половины div-ов на странице
$$('div:random');

// выборка 20% заголовков h2 с классом article
$$('h2.article:random(.2)');
</pre>
<p>Такой псевдоселектор позволяет выбирать случайные элементы из DOM. В первом примере будут выбраны примерно половина элементов <em>div</em> на странице, а во втором будет произведена выборка всех загловков <em>h2</em> с классом <em>article</em>, а затем в случайном порядке будут выбраны 20% из их общего числа.</p>
<p>Еще один пример реализации псевдоселектора я подсмотрел на блоге у <a href="http://davidwalsh.name/create-custom-pseudo-selector-mootools-selected" title="David Walsh псевдоселекторы Mootools">Девида Уолша</a>:</p>
<pre class="prettyprint">
Selectors.Pseudo.selected = function(){
	return (this.selected &#038;&#038; this.get('tag') == 'option');
};
</pre>
<p>Это селектор <strong>:selected</strong>, который имеется в jQuery. Суть его заключается в том, что он выбирает выбранные элементы <em>option</em> из списка <em>select</em>:</p>
<pre class="prettyprint">
&lt;select name="mysel" id="mysel" multiple="multiple">
	&lt;option value="One">One&lt;/a>
	&lt;option value="Two">Two&lt;/a>
	&lt;option value="Three" selected="selected">Three&lt;/a>
	&lt;option value="Four" selected="selected">Four&lt;/a>
&lt;/select>
</pre>
<p>Удобная это вещь - псевдоселектор, не правда ли? Тем более если его можно легко создавать самому, под свои нужды.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/11/11/mootools-pseudo-selector/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

