<?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>Dawid Pośliński &#187; javascript</title>
	<atom:link href="http://blog.poslinski.net/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.poslinski.net</link>
	<description>Code is poetry.</description>
	<lastBuildDate>Mon, 06 Sep 2010 18:23:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Problemy z TinyMCE i Ajax?</title>
		<link>http://blog.poslinski.net/problemy-z-tinymce-i-ajax/</link>
		<comments>http://blog.poslinski.net/problemy-z-tinymce-i-ajax/#comments</comments>
		<pubDate>Sun, 02 May 2010 11:37:22 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[poradniki]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tinymce]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=580</guid>
		<description><![CDATA[Przyszło mi ostatnio spotkać się w systemie którym piszę, z problemem, który nie mógł pozostać nierozwiązany. Chodziło dokładnie o to, iż w przypadku inicjowania TinyMCE w containerze otrzymanym z zapytania Ajaxowego, w przypadku, ponownej próby inicjowania pojawiał się komunikat: g.win.document is null Problem ten wynika z próby ponownego utworzenia instancji TinyMCE w miejscu, w którym [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/05/tinymceiajax.png"><img src="http://blog.poslinski.net/wp-content/uploads/2010/05/tinymceiajax.png" alt="" title="tinymceiajax" width="620" height="150" class="aligncenter size-full wp-image-586" /></a>Przyszło mi ostatnio spotkać się w systemie którym piszę, z problemem, który nie mógł pozostać nierozwiązany. Chodziło dokładnie o to, iż w przypadku inicjowania TinyMCE w containerze otrzymanym z zapytania Ajaxowego, w przypadku, ponownej próby inicjowania pojawiał się komunikat:</p>
<p><span id="more-580"></span></p>
<pre name="code" class="javascript">g.win.document is null</pre>
<p>Problem ten wynika z próby ponownego utworzenia instancji TinyMCE w miejscu, w którym już istnieje jedna instancja, jednak ponieważ zawartość html została przeładowana, a Tiny nie usuwa automatycznie &#8222;siebie&#8221;, należy to robić ręcznie.</p>
<p>Aby to zrobić, należy w ustawieniach uruchamiających Tiny, zmienić &#8216;mode: &#8222;textareas&#8221;&#8216; na &#8222;none&#8221;.</p>
<pre name="code" class="javascript">tinyMCE.init({
....
mode : "none",
...
});</pre>
<h2>Dodawanie</h2>
<p>Następnie po tym bloku kodu, należy wywołać dla każdego elementu, który chcemy zamienić na nasz edytor, następującą linie kodu:</p>
<pre name="code" class="javascript">tinyMCE.execCommand("mceAddControl", false, "'idElementu");</pre>
<p>Gdzie &#8222;idElementu&#8221; wskazywać będzie na element (może to być zarówno div, jak i textarea jak i niemalże dowolny element DOM).</p>
<h2>Usuwanie</h2>
<p>Pozostało jeszcze usuwanie. Aby je zrealizować, wystarczy przed dodaniem sprawdzić czy istnieje już w pamięci instancja TinyMCE przypisana do określonego idElementu. Wystarczy zatem przed wcześniej wymienioną linią kodu odpowiedzialną za dodawanie instancji Tiny, dodać następujący fragment kodu:</p>
<pre name="code" class="javascript">if (tinyMCE.getInstanceById('idElementu'))
{
tinyMCE.execCommand('mceFocus', false, 'idElementu');
tinyMCE.execCommand('mceRemoveControl', false, 'idElementu');
}</pre>
<h2>Pobieranie zawartości</h2>
<p>Z przydatnych metod, warto jeszcze wiedzieć, jak pobierać w dowolnej chwili zawartość (html) z naszego edytora. Realizuje się to przez następujące polecenie, które zwraca zawartość:</p>
<pre name="code" class="javascript">tinyMCE.get('idElementu').getContent()</pre>
<p>W przypadku, jeżeli na jednej stronie, mamy wiele instancji TinyMCE równocześnie, wystarczy stworzyć obiekt pełniący rolę listy i przechowywać w nim kolejne id edytora. W ten sposób, wykorzystując foreach, będziemy mogli w łatwy i szybki sposób usuwać wiele instancji Tiny jednocześnie.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/problemy-z-tinymce-i-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tworzenie wykresów na stronach internetowych</title>
		<link>http://blog.poslinski.net/tworzenie-wykresow-na-stronach-internetowych/</link>
		<comments>http://blog.poslinski.net/tworzenie-wykresow-na-stronach-internetowych/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 21:13:56 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[narzędzia]]></category>
		<category><![CDATA[charts]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[wykresy]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=128</guid>
		<description><![CDATA[Nic nie przemawia tak dobrze do człowieka, jak wszelkiego rodzaju wykresy. Coraz częściej zachodzi potrzeba prezentacji zbioru informacji w postaci graficznej. Istnieje wiele gotowych rozwiązań pozwalających je tworzyć, ja wybrałem kilka najbardziej interesujących z którymi warto się zapoznać. pChart Klasa napisana w PHP, o ogromnych możliwościach konfiguracji, generowanego przez nią wykresu. Szybka, prosta, dobrze udokumentowana [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://blog.poslinski.net/wp-content/uploads/2009/02/charts.jpg"><img class="aligncenter size-full wp-image-129" title="Wykresy pChart" src="http://blog.poslinski.net/wp-content/uploads/2009/02/charts.jpg" alt="" width="620" height="195" /></a>Nic nie przemawia tak dobrze do człowieka, jak wszelkiego rodzaju wykresy. Coraz częściej zachodzi potrzeba prezentacji zbioru informacji w postaci graficznej. Istnieje wiele gotowych rozwiązań pozwalających je tworzyć, ja wybrałem kilka najbardziej interesujących z którymi warto się zapoznać.</p>
<p><span id="more-128"></span></p>
<h2>pChart</h2>
<p>Klasa napisana w <strong>PHP</strong>, o ogromnych możliwościach konfiguracji, generowanego przez nią wykresu. Szybka, prosta, dobrze udokumentowana i posiadająca wiele przykładów jej zastosowania, udostępnionych przez twórców. Wymaga uruchomionego <strong>GD</strong> na serwerze.</p>
<p><a href="http://pchart.sourceforge.net" target="_blank">http://pchart.sourceforge.net</a></p>
<h2>Open Flash Chart</h2>
<p>Wykres generowany za pomocą <strong>Flash&#8217;a</strong>, nie oferuje tak wielu możliwości, jeżeli chodzi o typy generowanych wykresów, ale konfiguracja jest również, wysoce dowolna.</p>
<p>Autorzy, jako główną zaletę tego rozwiązania, zachwalają możliwość pobierania informacji na podstawie których będzie generowany wykres, po załadowaniu strony do przeglądarki, zatem można generować różne wykresy dla różnych użytkowników. To zachęcające, ale nie będzie problemem, aby w konkurencyjnych rozwiązaniach osiągnąć podobny efekt.</p>
<p><a href="http://teethgrinder.co.uk/open-flash-chart/" target="_blank">http://teethgrinder.co.uk/open-flash-chart/</a></p>
<h2>jQchart</h2>
<p><strong>Plugin</strong> dla <strong>jQuery</strong>. Rozwiązanie proste i szybkie, zalecane, gdy chcemy wygenerować skromne wykresy na witrynach, już wykorzystujących <strong>jQuery</strong>. Podstawową wadą, jest język jego dokumentacji, ale obrazkowe omówienie i przykłady kodu, powinny nie sprawiać problemów z jego implementacją.</p>
<p><a href="http://jsgt.org/lib/jquery/plugin/jqchart/nightly/nightly.htm">http://jsgt.org/lib/jquery/plugin/jqchart/nightly/nightly.htm</a></p>
<h2>Google Visualisation API</h2>
<p>Dzięki temu kombajnowi, nie tylko można generować wykresy, ale również tworzyć wiele dodatkowych, bardzo interesujących rzeczy, takich jak mapy, sortowane tabele, a nawet bardzo proste schematy blokowe.</p>
<p>Jednym z jego elementów jest Google Chart API (<a href="http://code.google.com/intl/pl/apis/chart/" target="_blank">http://code.google.com/intl/pl/apis/chart/</a>), dzięki któremu można generować obrazy z wykresami, w dodatku w przydatku tego rozwiązania korzystamy z zasobów serwerowych Google, a nie własnych jak w przypadku poprzedników.</p>
<p><a href="http://code.google.com/intl/pl/apis/visualization/">http://code.google.com/intl/pl/apis/visualization/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/tworzenie-wykresow-na-stronach-internetowych/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>jQuery: find()</title>
		<link>http://blog.poslinski.net/jquery-find/</link>
		<comments>http://blog.poslinski.net/jquery-find/#comments</comments>
		<pubDate>Sun, 30 Nov 2008 19:03:27 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[menu]]></category>
		<category><![CDATA[przeglądarki]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=35</guid>
		<description><![CDATA[jQuery to świetny framework JavaScript. Jeżeli jeszcze nie mieliście okazji z nim pracować, mam nadzieje, że poniższa publikacja, zachęci Was, do skorzystania z tego właśnie rozwiązania. Cechuje go bowiem szybkość, optymalizacja kodu, mająca na celu dostosowanie go pod jak największą liczbę przeglądarek, a także, co pewnie wielu zainteresuje najbardziej &#8211; prostota tworzenia złożonych rozwiązań. W [...]]]></description>
			<content:encoded><![CDATA[<p><strong>jQuery</strong> to świetny <strong>framework JavaScript</strong>. Jeżeli jeszcze nie mieliście okazji z nim pracować, mam nadzieje, że poniższa publikacja, zachęci Was, do skorzystania z tego właśnie rozwiązania. Cechuje go bowiem szybkość, optymalizacja kodu, mająca na celu dostosowanie go pod jak największą liczbę przeglądarek, a także, co pewnie wielu zainteresuje najbardziej &#8211; prostota tworzenia złożonych rozwiązań.</p>
<p>W dzisiejszym artykule skupimy się na bardzo przydatnej metodzie <strong>find()</strong>.</p>
<p><span id="more-35"></span>Jeżeli nie miałeś wcześniej do czynienia z tym <strong>frameworkiem</strong>, zachęcam do zapoznania się z podstawami selektorów, korzystając z <a href="http://docs.jquery.com/Selectors">oficjalnego API na temat selectorów</a>, lub też z przygotowanego przez Bartosza Medonia <a href="http://www.soundpage.info/kurs_javascript/kurs/63jQuery_pokaz_ukryj.html">kursu podstaw jQuery</a>. Ta wiedza znacznie ułatwi pojmowanie zamieszczonych tutaj rozwiązań.</p>
<p>Najlepiej zajmijmy się jakimś konkretnym przykładem zastosowania tej metody. Na większości stron, jednym z podstawowych elementów służących do nawigacji jest menu. Spróbujemy stworzyć własne animowane menu, korzystając z minimalnej ilości elementów i działające pod każdą przeglądarka obsługującą JavaScript.</p>
<h2>1. Przygotowanie elementów</h2>
<p>Zacznijmy od stworzenia pustego dokumentu html:</p>
<pre name="code" class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;Menu&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Następnie pobieramy najnowszą wersję <strong>jQuery</strong> z <a href="http://jquery.com">oficjalnej strony projektu</a> ( production ) i kopiujemy do folderu z naszym plikiem html.</p>
<p>Wewnątrz tego dokumentu, przydałaby się jakaś przykładowa treść, oraz nasze menu. Wykorzystajmy do tego tagi<strong> div</strong> oraz <strong>span</strong>. Oczywiście pozycje w naszym menu, powinny być linkami, zatem umieścimy je w bloku <strong>a</strong>. Całość umieścimy wewnątrz bloku <strong>div</strong> o id=<strong>menu</strong>. Dodany również plik z jQuery wykorzystując tag <strong>script</strong>. Całość powinna wyglądać mniej więcej tak:</p>
<pre name="code" class="html">&lt;div id="menu"&gt;
&lt;div&gt;
&lt;a href="#"&gt;#1 Menu&lt;/a&gt;
&lt;span&gt;
&lt;a href="#"&gt;#1.1 Menu&lt;/a&gt;
&lt;a href="#"&gt;#1.2 Menu&lt;/a&gt;
&lt;a href="#"&gt;#1.3 Menu&lt;/a&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href="#"&gt;#2 Menu&lt;/a&gt;
&lt;span&gt;
&lt;a href="#"&gt;#2.1 Menu&lt;/a&gt;
&lt;a href="#"&gt;#2.2 Menu&lt;/a&gt;
&lt;a href="#"&gt;#2.3 Menu&lt;/a&gt;
&lt;a href="#"&gt;#2.4 Menu&lt;/a&gt;
&lt;a href="#"&gt;#2.5 Menu&lt;/a&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href="#"&gt;#3 Menu&lt;/a&gt;
&lt;span&gt;
&lt;a href="#"&gt;#3.1 Menu&lt;/a&gt;
&lt;a href="#"&gt;#3.2 Menu&lt;/a&gt;
&lt;a href="#"&gt;#3.3 Menu&lt;/a&gt;
&lt;a href="#"&gt;#3.4 Menu&lt;/a&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href="#"&gt;#4 Menu&lt;/a&gt;
&lt;span&gt;
&lt;a href="#"&gt;#4.1 Menu&lt;/a&gt;
&lt;a href="#"&gt;#4.2 Menu&lt;/a&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;!-- end #menu --&gt;
Jakaś tam przykładowa treść. Jakaś tam przykładowa treść.
Jakaś tam przykładowa treść. Jakaś tam przykładowa treść.
Jakaś tam przykładowa treść. Jakaś tam przykładowa treść.
Jakaś tam przykładowa treść. Jakaś tam przykładowa treść.
Jakaś tam przykładowa treść. Jakaś tam przykładowa treść.
&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;</pre>
<p>Specjalnie umieściłem wiele pozycji w menu, aby pokazać jak łatwym, będzie odwołanie się do wielu z nich z poziomu <strong>jQuery</strong>, w zależności od tego, na który blok najedziemy myszką.</p>
<h2>2. Zdefiniowanie wyglądu menu (css)</h2>
<p>W tym dziale, zdefiniujemy wygląd wykorzystanych w pliku html, bloków kodu. Ja przygotowałem sobie, następujący fragment kodu ze stylem, umieszczony w sekcji head:</p>
<pre name="code" class="css">&lt;style type="text/css"&gt;
&lt;!--
* { margin: 0px; padding: 0px; }
a { text-decoration: none; font: 20px Georgia, "Times New Roman", Times, serif; }
html, body { margin: 10px; }

#menu { top: 0px; float: left; width: 100%; }
#menu div { position: relative; float: left; }
#menu div a:active, #menu div a:link, #menu div a:visited { display: block; position: relative; vertical-align: middle; background: #ccc; color: #fff; padding: 5px 10px; width: 150px; }
#menu div a:hover { background: #999; }
#menu div span { display: none;  position: absolute; top: 100%; left: 0; float: none; }
#menu div span a:active, #menu div span a:link, #menu div span a:visited { position: relative; display: block; float: left; top: 0px; background: #ddd; color: #fff; padding: 5px 10px; width: 150px; }
#menu div span a:hover { background: #999; }
--&gt;
&lt;/style&gt;</pre>
<p>W naszym przykładzie tworzymy tylko proste dwupoziomowe menu, ale nic nie stoi na przeszkodzie, aby zmodyfikować je i dostosować do dowolnej ilości poziomów.</p>
<p>Jeśli już jesteśmy przy tej kwestii, warto również zapoznać się z <a href="http://lwis.net/free-css-drop-down-menu/">frameworkiem do tworzenia css&#8217;owego menu</a>.</p>
<h2>3. Gwóźdź programu &#8211; find.</h2>
<p>Tym oto sposobem, mamy przygotowaną całą stronę do implementacji kodu <strong>JavaScript</strong>. Wiemy także, o czym mowa, mówiąc selektor. W naszym przypadku, przykład jest dość prosty, albowiem mamy tylko 4 menu główne, ale nie trudno sobie wyobrazić, iż może być ich więcej, a każde z nich może mieć wiele rozgałęzień. To dyskwalifikuje metodę pętli, również wyklucza metodę <strong>brute-force</strong>, uwzględniającą przeanalizowanie wszystkich przypadków osobno. Jednak dzięki metodzie <strong>find</strong>, problem sprowadza się do jednej, bardzo czytelnej lini kodu, która zrealizuje za nas całe zadanie. Dobrze jest, aby nasz kod JavaScript znajdował się w <strong>$(document).ready</strong>, co zagwarantuje nam, odwoływanie się do niego, dopiero po załadowaniu strony, wszystkich zewnętrznych skryptów, stylów i innych plików.</p>
<pre name="code" class="javascript">&lt;script type="text/javascript"&gt;
&lt;!--
// &lt;![CDATA[
$(document).ready(function(){
	$("#menu div").hover(
		function() {
			$(this).find("span").css({opacity:0.98}).slideToggle("fast");
		},
		function() {
			$(this).find("span").slideToggle("fast");
		}
	);
});
// ]]&gt;
--&gt;
&lt;/script&gt;</pre>
<p>Powyższy kod zalecam umieścić po znaczniku <strong>script</strong>, w którym odwołujemy się do <strong>jQuery</strong>, na dole strony.</p>
<p>W głównym selektorze, odwołujemy się do znacznika od <strong>id=&#8221;menu&#8221;</strong>, <strong>wewnątrz</strong> którego znajduje się znacznik <strong>div</strong>. Metoda <strong>.hover()</strong>, oznacza zdarzenie najechania myszki, na wybrany element i jako parametry, przyjmuje jedną lub 2 funkcje, które są realizowane podczas zainicjowania tego zdarzenia. Druga funkcja jest opcjonalna i jest wykonywana wówczas, gdy opuścimy kursorem obszar naszego elementu. Postarałem się tak przedstawić kod, aby obie funkcje były przejrzyste dla czytelnika, ale zalecam minimalizację kodu w funkcjonujących projektach.</p>
<p>Przeanalizujmy teraz kod wewnątrz funkcji. Znowu wykorzystujemy tutaj selektor, tym razem odwołujemy się od obiektu, w którym się znajdujemy. <strong>Każdy selektor jQuery zwraca obiekt</strong>, do którego możemy się odnieść przez klauzulę <strong>this</strong>. Jednak jeśli chcemy, wewnątrz elementu, odnieść się do elementu znajdującego się wewnątrz danego elementu, wykorzystujemy metodę find, która wyszukuje i zwraca <strong>wszystkie</strong> pasujące elementy. Należy o tym pamiętać, ponieważ jeśli chcemy odnieść się do jakiegoś konkretnego elementu, należało by zastosować na przykład klasę i odwołać się po przez <strong>.find(&#8222;.classNazwa&#8221;)</strong>. Oczywiście, wewnątrz find, możemy również odnosić się do bardziej skomplikowanej struktury elementów, tak samo jak w selektorach jQuery.</p>
<p>Pierwsza funkcja jak widać, modyfikuje zwracany przez metodę <strong>find</strong> obiekt, i zmienia jego przeźroczystość, następnie, korzystając z metody <strong>slideToggle()</strong>, zainicjowana zostaje animacja, w tym przypadku, jest to animacja &#8222;zjeżdżania&#8221; na dół, o czym decyduje parametr <strong>display</strong> ustawiony na <strong>none</strong> w ustawieniach css elementu ( element jest niewidoczny, więc slide jedyne co może wykonać to pokazanie go ).</p>
<p>W przypadku drugiej funkcji, wszystko wygląda bardzo podobnie, z tą różnicą, że nie musimy już modyfikować opacity, albowiem zostało ono już zmienione. Zrobiliśmy to po przez jQuery, m.in. dlatego, ponieważ w css, nie było by to możliwe, w taki sposób, aby uzyskać pełną zgodność z <strong>validatorem w3c</strong>, a także, aby przeźroczystość wyświetlana była prawidłowo, na wszystkich nowoczesnych przeglądarkach obsługujących JavaScript.</p>
<h2>4. Podsumowanie</h2>
<p>Celem tego artykułu, nie było nauczenie się tworzenia animowanego menu, lecz, poznanie wielu ciekawych kwestii dotyczących metody <strong>find()</strong>, a także samego <strong>jQuery</strong>. Możliwości jakie niesie, są ogromne i mam nadzieje, że po lekturze tego artykułu, zyska ono kilku entuzjastów.</p>
<p>Natomiast efekt naszej pracy, możemy zobaczyć w <a href="http://blog.poslinski.net/examples/1.html" target="_blank">demonstracji</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/jquery-find/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
