<?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>Developer Blog &#187; tab</title>
	<atom:link href="http://451f.com.ua/tag/tab/feed" rel="self" type="application/rss+xml" />
	<link>http://451f.com.ua</link>
	<description>developer blog - 451 degrees Fahrenheit</description>
	<lastBuildDate>Sun, 04 Jul 2010 21:22:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Пишем простой Tab list с prototype.js</title>
		<link>http://451f.com.ua/tab_switcher_with_prototype/12</link>
		<comments>http://451f.com.ua/tab_switcher_with_prototype/12#comments</comments>
		<pubDate>Sat, 03 Nov 2007 14:00:05 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ajax.updater]]></category>
		<category><![CDATA[prototype.js]]></category>
		<category><![CDATA[tab]]></category>

		<guid isPermaLink="false">http://451f.com.ua/2007/11/03/%d0%bf%d0%b8%d1%88%d0%b5%d0%bc-%d0%bf%d1%80%d0%be%d1%81%d1%82%d0%be%d0%b9-tab-list-%d1%81-prototypejs/</guid>
		<description><![CDATA[Как я написал свой Tab list и почему не использовал доступные в интернете готовые примеры. Вот примеры Tab листов, которые я раньше использовал: Dexagogo Livepipe На примерах этих tab листов, трудно понять как работает сам механизм связанный с переключаниями между tab&#8217;ами. И один из больших недостатков я не смог застивить работать эти tab листы на [...]]]></description>
			<content:encoded><![CDATA[<p>Как я написал свой Tab list и почему не использовал доступные в интернете готовые примеры.</p>
<p><a href="http://451f.com.ua/img/2007/11/tab-list.gif"><img src="http://451f.com.ua/img/2007/11/tab-list-thumb.gif" style="border-width: 0px" alt="tab_list" border="0" height="140" width="402" /></a></p>
<p>Вот примеры <strong>Tab листов</strong>, которые я раньше использовал:</p>
<ol>
<li><a href="http://tetlaw.id.au/view/blog/fabtabulous-simple-tabs-using-prototype/">Dexagogo</a></li>
<li><a href="http://vikiworks.com/2007/09/11/wp-theme-resurrection">Livepipe</a></li>
</ol>
<p>На примерах этих tab листов, трудно понять как работает сам механизм связанный с переключаниями между tab&#8217;ами.</p>
<p>И один из больших недостатков я не смог застивить работать эти tab листы на <em>динамически вызваных страницах</em>, которые вызваются через методы библиотеки <a href="http://prototypejs.org">prototype.js</a> (Ajax.Updater и др.). Вот по этой причине я решил написать свой tab лист.</p>
<p><strong>Первое</strong>, создаем простой html документ:</p>
<p>[cc lang="php"]<br />
<html><br />
<head></p>
<p>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></p>
<style>
      /* tab */
      .panel {
      	clear: both;
      	display: none;
      	border: 3px solid #CCC;
      	padding: 1em;
      }
      .panel.active-tab-body {
      	display: block;
      }
      #tabs {
      	list-style: none;
      }</p>
<p>      #tabs li {
       float: left;	
      }</p>
<p>      #tabs a {
      	float: left;
      	padding: 2px 8px;
      	background-color: #F2F2F2;
      	text-decoration: none;
      	color: #999999;
      }</p>
<p>      #tabs a.active-tab {
      	background-color: #CCC;
      	border-top: 3px solid #999;
      	padding-top: 0px;
      	color: #000;
      }
    </style>
<p>    <script type="text/javascript" language="JavaScript" src="/js/scriptaculous/lib/prototype.js"></script><br />
</head></p>
<p><body></p>
<p></body><br />
</html><br />
[/cc]</p>
<p>Обратите внимание на кодировку в документе используется <strong>UTF-8, </strong>так как библиотека <strong>prototype.js</strong> не дружит с нашими кодировками <strong>windowds-1251</strong></p>
<blockquote><p>Если у вас все же есть необходимость использовать в работе кодировку <strong>windows-1251</strong>, вам поможет библиотека <a href="http://dklab.ru/" target="_blank">Дмитрия Котерова</a> <strong>JsHttpRequest. </strong>Которая полностью совместима с <a href="http://prototypejs.org">prototype.js</a></p></blockquote>
<p>В моем примере tab list я использую CSS стили из проекта <a href="http://tetlaw.id.au/view/blog/fabtabulous-simple-tabs-using-prototype/">Dexagogo</a>.</p>
<p>Перед закрытием тега &lt;/head&gt; , добавляем подключение библиотеки <a href="http://prototypejs.org">prototype.js</a>, которую я использую для переключения между tab&#8217;ами, и динамеческой загрузки информации в выбранный tab.</p>
<p><span id="more-12"></span></p>
<p><strong>Второе</strong>, собственно сами закладки:</p>
<p>[cc lang="php"]</p>
<div>
<ul id="tabs">
<li><a id="one" href="#one" class="active-tab" onclick="tab('one')">Первая</a></li>
<li><a id="two" href="#two" onclick="tab('two')">Вторая</a></li>
<li><a id="three" href="#three" onclick="tab('three')">Внешняя</a></li>
</ul>
</div>
<div class="panel active-tab-body" id="oneone">
  Нажали на первый таб<br />
  этот таб загружен вместе со страницей
</div>
<div class="panel" id="twotwo">
  Нажали на второй таб<br />
  этот таб так же загружен вместе со страницей
</div>
<div class="panel" id="threethree">
<script language="javascript">
  new Ajax.Updater('threethree', 'inner.html', {method: 'get'});
</script>
</div>
<p>[/cc]</p>
<p>Для приведенного кода я думаю особых объяснений не нужно. Основное, что может вызвать не монимание, это функция <strong>tab(&#8216;one&#8217;) </strong>именно вызывая ее происходит переключение, более подробоно будет описана ниже.<br />
Также в этом листинге в содержании третьего таба (<em>id=threethree</em>), вызвается метод <a href="http://prototypejs.org/api/ajax/updater">Ajax.Updater(&#8216;threethree&#8217;, &#8216;inner.html&#8217;, {method: &#8216;get&#8217;})</a>, где:</p>
<ol>
<li>&#8216;threethree&#8217; — id в innerHTML (<em>внутренность</em>) которого будет загружен внешний файл</li>
<li>&#8216;inner.html&#8217; — внешний загружаемый файл</li>
<li>{method: &#8216;get&#8217;} — передаваемый параметр, в это месте можно добавить свои значения, которые мы хотим передать внешнему файлу.</li>
</ol>
<p>более подробно об методе <a href="http://prototypejs.org/api/ajax/updater">Ajax.Updater</a> я раскажу в следующий записях моего дневника, незабудьте подписать на рассылку вконце этой записи.</p>
<p><strong>Третье</strong>, javascript функци, которые  переключают Tab&#8217;ы:</p>
<p>[cc lang="javascript"]<br />
<script language="javascript">
  function tab(id){
    active = document.getElementsByClassName('active-tab');
    active[0].className = ''
    document.getElementById(id).className = "active-tab";</p>
<p>    idbody = id + id;
    tabBody(idbody);
  }</p>
<p>  function tabBody(id){
    active = document.getElementsByClassName('panel active-tab-body');
    for (i in active){
     active[i].className = 'panel'
    }
    document.getElementById(id).className = "panel active-tab-body";
  }
</script><br />
[/cc]</p>
<p>Фукнция <strong>tab()</strong> — переключает верхние &lt;div&gt; заголовки tab&#8217;ов</p>
<p>В первой строке определяем текующий активный tab</p>
<p>[cc lang="javascript"]active = document.getElementsByClassName(&#8216;active-tab&#8217;);[/cc]</p>
<blockquote><p>Обратите внимание на метод <a href="http://prototypejs.org/api/element#method-getelementsbyclassname">getElementsByClassName</a> использовать его позволяет библиотека <a href="http://prototypejs.org">prototype.js</a></p></blockquote>
<p>Делаем текущий активный tab не активным</p>
<p>[cc lang="javascript"]active[0].className = &#8221;[/cc]</p>
<p>Назначаем новый выбранный tab активным</p>
<p>[cc lang="javascript"]document.getElementById(id).className = &#8220;active-tab&#8221;;[/cc]</p>
<blockquote><p>Библиотека <a href="http://prototypejs.org">prototype.js</a> предлагает для упрощения несколько сокращений для стандартных методов, один из них <a href="http://prototypejs.org/api/utility#method-$">$</a>, который заменяет вызов <em>document.getElementById</em>. Так можно заменить запись вида <em>document.getElementById(id)</em> на равнозначную запись <em>$(id)</em></p></blockquote>
<p>Вызываем функцию <strong>tabBody() </strong>— переключает нижние &lt;div&gt; тело tab&#8217;ов.</p>
<p>Функция <em>tabbody()</em> работает аналогично <em>tab().</em></p>
<p>Посмотреть <a href="http://451f.com.ua/practice/tab" target="_blank">Демо переключатель tab</a>, скачать все одиним архивом <a href="http://451f.com.ua/practice/tab/tab.zip" target="_blank">tab.zip</a>.</p>
<p>
Библиотека prototype.js в архив не включена, скачайте послденюю версию с офф сайта <a href="http://prototypejs.org" title="http://prototypejs.org">http://prototypejs.org</a>
</p>
<p>
Не забудьте подписаться на <a href="http://451f.com.ua/feed/" title="RSS">RSS</a> и <a href="http://feeds.feedburner.com/451f" title="feedburner">e-mail</a> рассылку.
</p>
<p>
В следующей статье я раскажу как работать с <a href="http://demo.script.aculo.us/ajax/autocompleter" target="_blank">Ajax.Autocompleter</a> и покажу недокументированные функкции, а так же основную ошибку, которую совершают при работе с этим методом от <a href="http://script.aculo.us/">http://script.aculo.us/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/tab_switcher_with_prototype/12/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
