<?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>&#60;?blog &#187; java script</title>
	<atom:link href="http://blog.visionsoftware.pl/tag/java-script/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.visionsoftware.pl</link>
	<description>...nie tylko o programowaniu</description>
	<lastBuildDate>Sun, 23 Mar 2014 19:23:43 +0000</lastBuildDate>
	<language>pl-PL</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>Mapa Google ze wskazówką dojazdu na stronie www</title>
		<link>http://blog.visionsoftware.pl/java-script-jquery/mapa-google-ze-wskazowka-dojazdu-na-stronie-www.html</link>
		<comments>http://blog.visionsoftware.pl/java-script-jquery/mapa-google-ze-wskazowka-dojazdu-na-stronie-www.html#comments</comments>
		<pubDate>Mon, 28 Nov 2011 22:56:18 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[Java Script/jQuery]]></category>
		<category><![CDATA[Google API]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[java script]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=413</guid>
		<description><![CDATA[Dział Kontakt na stronie internetowej oprócz danych teleadresowych może zawierać mapkę dojazdu, formularz kontaktowy, listę oddziałów firmy, itd. Z Google Maps możemy natomiast stworzyć bardzo ciekawe rozwiązanie &#8211; oprócz pokazania lokalizacji nałożyć na nie wskazówki dojazdu z wybranego przez użytkownika miejsca. Wystarczy w tym celu stworzyć dwa elementy. Po pierwsze należy umieścić na stronie odpowiedni wycinek mapy z oznaczonym miejscem. Oprócz tego potrzebny będzie formularz z polem do wpisania adresu początkowego. Po jego zatwierdzeniu, na [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dział Kontakt na stronie internetowej oprócz danych teleadresowych może zawierać mapkę dojazdu, formularz kontaktowy, listę oddziałów firmy, itd. Z Google Maps możemy natomiast stworzyć bardzo ciekawe rozwiązanie &#8211; oprócz pokazania lokalizacji nałożyć na nie wskazówki dojazdu z wybranego przez użytkownika miejsca.<span id="more-413"></span></p>
<p>Wystarczy w tym celu stworzyć dwa elementy. Po pierwsze należy umieścić na stronie odpowiedni wycinek mapy z oznaczonym miejscem. Oprócz tego potrzebny będzie formularz z polem do wpisania adresu początkowego. Po jego zatwierdzeniu, na mapie nałożone zostaną wskazówki dojazdu. Przykład takiego działania można zobaczyć <a title="Przykład: Mapa Google ze wskazówką dojazdu na stronie www" href="http://blog.visionsoftware.pl/przyklady/413/" target="_blank">tutaj</a>.</p>
<h3>Wstawiamy Google Maps na naszą stronę</h3>
<p>Na początek potrzebujemy zdefiniować obiekt, w który wstawimy mapę (div <code>map_canvas</code>), oraz formularz, dzięki któremu użytkownik poda adres początkowy do wyznaczenia trasy.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;map_directions_form&quot;&gt;
	&lt;form action=&quot;&quot; method=&quot;post&quot;&gt;
		&lt;label for=&quot;map_directions_start&quot;&gt;Pokaż na mapie dojazd z:&lt;/label&gt;
		&lt;input type=&quot;text&quot; value=&quot;&quot; id=&quot;map_directions_start&quot; /&gt;
		&lt;input type=&quot;submit&quot; name=&quot;&quot; id=&quot;show_route&quot; value=&quot;Pokaż&quot; /&gt;
	&lt;/form&gt;
&lt;/div&gt;
&lt;div id=&quot;map_canvas&quot;&gt;&lt;/div&gt;
</pre>
<p>Następnie musimy wczytać odpowiednie dane z Goggle Maps API. Możemy to zrobić dołączając odpowiedni kod JavaScript</p>
<pre class="brush: xml; light: true; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://maps.googleapis.com/maps/api/js?sensor=false&amp;region=PL&quot;&gt;&lt;/script&gt;
</pre>
<p>Parametry <code>GET</code> podane w adresie www mogą być następujące:</p>
<ul>
<li><code>sesnor</code> – oznacza, czy określić położenie użytkownika na podstawie GPS (używany przy korzystaniu z urządzeń mobilnych). Przyjmuje wartość <code>true</code> lub <code>false</code>.</li>
<li><code>region</code> – określa region, jakiego będą dotyczyć nasze wyszukiwania. Dzięki niemu możemy ograniczyć do kraju lub kontynentu. Warto to zrobić, gdyż w niektórych przypadkach wpisując miasta możemy zostać oznaczeni na przykład w USA a nie w Polsce.</li>
</ul>
<p>Kolejnym krokiem jest określenie parametrów mapy, która zostanie wyświetlona. Można to zrobić za pośrednictwem następującego kodu:</p>
<pre class="brush: jscript; title: ; notranslate">
var directionsDisplay;
var directionsService = new google.maps.DirectionsService();
var map;

var myLocation = new google.maps.LatLng(52.2302294, 21.0118487);

function initialize() {
  directionsDisplay = new google.maps.DirectionsRenderer();
  
  var myOptions = {
    zoom:15,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    center: myLocation,
    panControl: true,
    zoomControl: true,
    mapTypeControl: true,
    scaleControl: true,
    streetViewControl: false,
  }

  map = new google.maps.Map(document.getElementById(&quot;map_canvas&quot;), myOptions);
  directionsDisplay.setMap(map);

  var marker = new google.maps.Marker({
      position: myLocation, 
      map: map,
      title:&quot;Moja lokacja&quot;
  });  
}
</pre>
<p>W linii 5 definiujemy punkt, gdzie umieszczony zostanie na mapie znacznik wskazujący miejsce. W powyższym przykładzie zostało to zrobione na podstawie współrzędnych GPS. Następnie definiujemy funkcję <code>initialize()</code>, która wyświetli mapę Google. W tablicy <code>myOptions</code> przekazujemy poszczególne parametry konfiguracyjne:</p>
<ul>
<li><code>zoom</code> &#8211; stopień przybliżenia mapy (im wyższy, tym większe oddalenie widoku)</li>
<li><code>mapTypeId</code> &#8211; typ mapy, jaki ma być wyświetlany. Ostatni parametr daje możliwości ustawienia <code>SATELLITE</code>, <code>HYBRID</code> lub <code>TERRAIN</code>.</li>
<li><code>center</code> &#8211; punkt na jaki mapa ma być wycentrowana – współrzędne GPS, w tym wypadku po prostu zmienna pod którą zdefiniowano naszą lokację</li>
</ul>
<p>Kolejne zmienne ustawiamy na <code>true</code> lub <code>false</code> w zależności czy chcemy, aby pojawił się odpowiedni element interfejsu mapy:</p>
<ul>
<li><code>panControl</code> &#8211; przesuwanie mapy (przyciski kierunków przewijania)</li>
<li><code>zoomControl</code> &#8211; suwak zbliżenia i oddalenia widoku</li>
<li><code>mapTypeControl</code> &#8211; przyciski zmiany typu widoku: mapa oraz satelita</li>
<li><code>scaleControl</code> &#8211; wyświetlanie aktualnej skali mapy (w lewym dolnym rogu)</li>
<li><code>streetViewControl</code> &#8211; obsługa Street View</li>
</ul>
<p>W kolejnych liniach określamy, że mapa ma być wstawiona w element o id <code>map_canvas</code>.  Następnie określamy marker, który wskaże oznaczone współrzędne:</p>
<ul>
<li><code>position</code> &#8211; współrzędne</li>
<li><code>map</code> &#8211; mapa (tutaj obiekt utworzony wcześniej)</li>
<li><code>title</code> &#8211; tooltip jaki pojawi się po najechaniu na marker kursorem myszy</li>
</ul>
<h3>Wskazówki dojazdu</h3>
<p>Gdy mamy zdefiniowaną mapę i formularz, możemy stworzyć kod za pośrednictwem którego wyświetlimy wskazówki dojazdu. W tym celu zdefiniujemy następującą funkcję:</p>
<pre class="brush: jscript; title: ; notranslate">
function calcRoute() {
  var start = document.getElementById(&quot;map_directions_start&quot;).value;
  var end = myLocation;
  
  var request = {
      origin:start, 
      destination:end,
      travelMode: google.maps.DirectionsTravelMode.DRIVING
  };
  directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsDisplay.setDirections(response);
    }
  });
}
</pre>
<p>Pod zmienną <code>start</code> wstawiamy podany przez użytkownika w formularzu adres, pod <code>end</code> natomiast nasz punkt docelowy. W powyższym przykładzie podano go za pomocą współrzędnych GPS, można to jednak zrobić przypisując do zmiennej dokładny adres:</p>
<pre class="brush: jscript; light: true; title: ; notranslate">
var end = &quot;Warszawa, Marszałkowska 100&quot;;
</pre>
<p>Następnie w tablicy <code>request</code> podajemy kilka dodatkowych parametrów:</p>
<ul>
<li><code>orgin</code> &#8211; punkt początkowy</li>
<li><code>destination</code> &#8211; punkt końcowy</li>
<li><code>travelMode</code> &#8211; sposób podróżowania, parametr może przyjąć wartości: <code>DRIVING</code>, <code>WALKING</code> lub <code>BICYCLING</code> (ostatnia opcja była dostępna w momencie pisania artykułu tylko w USA)</li>
</ul>
<h3>Uruchomienie mapy</h3>
<p>Pozostało już tylko wyświetlenie mapy i przypisanie do przycisku <code>submit</code> odpowiedniej funkcjonalności. Posłuży do tego poniższy kod:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
	initialize();
	
	$(&quot;#map_directions_form form&quot;).submit(function(event){
		 event.preventDefault();
		 calcRoute();
	});
});
</pre>
<p>Jak widać uruchomienie usługi jest bardzo proste. Google Maps API zawiera wiele innych ciekawych możliwości, wszystkich zainteresowanych odsyłam do <a title="Google Maps API v3" href="http://code.google.com/intl/pl/apis/maps/documentation/javascript/basics.html" target="_blank">dokumentacji</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.visionsoftware.pl/java-script-jquery/mapa-google-ze-wskazowka-dojazdu-na-stronie-www.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wywołanie nowego okna i ściemnienie tła w jQuery</title>
		<link>http://blog.visionsoftware.pl/java-script-jquery/wywolanie-nowego-okna-i-sciemnienie-tla-w-jquery.html</link>
		<comments>http://blog.visionsoftware.pl/java-script-jquery/wywolanie-nowego-okna-i-sciemnienie-tla-w-jquery.html#comments</comments>
		<pubDate>Mon, 24 Jan 2011 22:38:13 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[Java Script/jQuery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[java script]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=154</guid>
		<description><![CDATA[Ciekawym sposobem na wywołanie nowego okna dialogowego jest wyświetlenie go na bieżącej stronie, ściemniając jednocześnie tło. Podobny efekt stosuje m. in. Lightbox. W ten sposób okno będzie dobrze widoczne a użytkownik nie będzie zdezorientowany interfejsem. W niniejszym tekście postaram się pokazać, jak wyświetlić w ten sposób dodatkowy formularz stosując jQuery. Na zakończenie niniejszego poradnika otrzymamy efekt, który można zobaczyć w całości tutaj. Będzie to formularz umożliwiający dodanie nowej osoby do przykładowego systemu. Znajdzie się na [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ciekawym sposobem na wywołanie nowego okna dialogowego jest wyświetlenie go na bieżącej stronie, ściemniając jednocześnie tło. Podobny efekt stosuje m. in. Lightbox. W ten sposób okno będzie dobrze widoczne a użytkownik nie będzie zdezorientowany interfejsem. W niniejszym tekście postaram się pokazać, jak wyświetlić w ten sposób dodatkowy formularz stosując jQuery.<span id="more-154"></span></p>
<p>Na zakończenie niniejszego poradnika otrzymamy efekt, który można zobaczyć w całości <a href="http://blog.visionsoftware.pl/przyklady/154/" title="" target="_blank">tutaj</a>. Będzie to formularz umożliwiający dodanie nowej osoby do przykładowego systemu. Znajdzie się na nim kilka pól, w tym lista rozwijana z nazwami zawodów a obok niej przycisk &#8222;Dodaj nowy&#8221;. Po jego kliknięciu pojawi się odpowiednie okno z formularzem dodania rekordu. Pomijam tu fakt, że pola będą generowane na podstawie danych z bazy, oraz uproszczam wygląd samego formularza (osoba a nie imię, nazwisko, itd).</p>
<p>Na początek stwórzmy więc formularz, który będzie widoczny od samego początku na ekranie.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form action=&quot;&quot; method=&quot;post&quot;&gt;
  &lt;div class=&quot;field&quot;&gt;
    &lt;label for=&quot;person&quot;&gt;Osoba&lt;/label&gt;
    &lt;input type=&quot;text&quot; name=&quot;person&quot; id=&quot;person&quot; value=&quot;&quot;/&gt;
  &lt;/div&gt;
  &lt;div id=&quot;add-new-subform&quot;&gt;
  &lt;label for=&quot;new-occupation&quot;&gt;Nowy zawód&lt;/label&gt;
  &lt;input type=&quot;text&quot; value=&quot;&quot; name=&quot;new-occupation&quot; id=&quot;new-occupation&quot; /&gt;
  &lt;input type=&quot;button&quot; value=&quot;Dodaj&quot; id=&quot;add-new-save&quot; /&gt;
  &lt;input type=&quot;button&quot; value=&quot;Anuluj&quot; id=&quot;add-new-cancel&quot; /&gt;
  &lt;/div&gt;
  &lt;div class=&quot;field&quot;&gt;
    &lt;label for=&quot;occupation&quot;&gt;Zawód&lt;/label&gt;
    &lt;select name=&quot;occupation&quot; id=&quot;occupation&quot;&gt;
      &lt;option value=&quot;1&quot;&gt;Opcja 1&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Opcja 2&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Opcja 3&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;Opcja 4&lt;/option&gt;
    &lt;/select&gt;
    &lt;input type=&quot;button&quot; value=&quot;+&quot; id=&quot;add-new-show&quot; /&gt;
  &lt;/div&gt;
  &lt;div class=&quot;field&quot;&gt;
    &lt;label for=&quot;information&quot;&gt;Uwagi&lt;/label&gt;
    &lt;textarea name=&quot;information&quot; id=&quot;information&quot; rows=&quot;5&quot; cols=&quot;10&quot;&gt;&lt;/textarea&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;input type=&quot;submit&quot; value=&quot;Zapisz&quot; /&gt;
  &lt;/div&gt;
&lt;/form&gt;
</pre>
<p>W powyższym formularzu zostały umieszczone trzy pola: tekstowe, select oraz textarea. W divie &#8222;add-new-subform&#8221; znajdzie się podformularz z polem tekstowym, który pojawi się w momencie dodawania nowego rekordu. Nie będę tu prezentował całego pliku CSS, można go zobaczyć w zaprezentowanym wcześniej przykładzie.</p>
<p>Ważne są dwie definicje. Po pierwsze, należy ukryć podformularz i przygotować go do wyświetlenia na pierwszym planie (wyskoki z-index):</p>
<pre class="brush: css; light: true; title: ; notranslate">

div#add-new-subform {position: absolute; display: none; z-index: 100;
 background-color: #fff; border: solid 1px #000; padding: 15px;}

</pre>
<p>Dodatkowo zdefiniujemy obiekt, który &#8222;ściemni&#8221; całość widocznej strony. Ważne, aby znalazł się on na obecnie widocznym obszarze, ale pod nowym oknem formularza. Dlatego musi mieć odpowiednią wartość z-index i na początku pozostać niewidoczny. Definicje przeźroczystości zostały przedstawione w sposób, dzięki któremu powinny się wyświetlać poprawnie we wszystkich popularnych przeglądarkach:</p>
<pre class="brush: css; light: true; title: ; notranslate">

div#cover {position: fixed; width: 100%; height: 100%;
z-index: 99; background-color: #000000; -moz-opacity: 0.7; 
opacity: 0.7; filter: alpha(opacity=70);}

</pre>
<p>Teraz pozostaje oprogramowanie funkcjonalności w jQuery (dokładny opis poniżej):</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
    $('#add-new-show').click(function(){
	// dodanie ciemnego tła
	$('body').prepend('&lt;div id=&quot;cover&quot;&gt;&amp;nbsp;&lt;/div&gt;');
	// wyświetlenie podformularza
	$(&quot;#add-new-subform&quot;).css({'display': 'block'});
      
	$(&quot;#add-new-save&quot;).click(function(){
	  var new_occupation = $(&quot;#new-occupation&quot;).val();
	  if(typeof new_occupation !== &quot;undefined&quot; &amp;&amp; new_occupation){
	    // dodanie nowego rekordu do bazy oraz wpisu w polu select 
	    addNewOccupation(new_occupation);
	    // usunięcie ciemnego tła i ukrycie podformularza
	    $('#cover').remove();
	    $(&quot;#add-new-subform&quot;).css({'display': 'none'});
	  };
	});
	
	$(&quot;#add-new-cancel&quot;).click(function(){
	    // usunięcie ciemnego tła i ukrycie podformularza
	    $('#cover').remove();
	    $(&quot;#add-new-subform&quot;).css({'display': 'none'});
	});
    });
});      

function addNewOccupation(new_occupation){
  // tutaj za pomoca AJAX mozna dodać do bazy nowy rekord
  // zapytanie powinno zwrócić id nowego zawodu
  var id = 100;	// id nowego zawodu dodanego do bazy
  $(&quot;#occupation&quot;).append(new Option(new_occupation,id));
  $(&quot;#occupation&quot;).val(id);
}
</pre>
<p>Na początek ustalamy działanie dla akcji kliknięcia w przycisk &#8222;+&#8221; (#add-new-show). Kolejno: dodajemy nową warstwę do dokumentu, która przykryje całą obecnie wyświetlaną stronę (patrz definicja styli dla #cover) oraz wyświetlamy podformularz.</p>
<p>Następnie definiujemy odpowiednie działania dla klikniętego przycisku zapisania nowego zawodu (#add-new-save). Gdy został on wpisany w pojawiającym się polu tekstowym, wywołujemy funkcję addNewOccupation(), po czym usuwamy ciemne tło i ukrywamy podformularz. Funkcja dodania nowego zawodu powinna zawierać wywołanie AJAX, zapisujące dane do bazy po uprzednim sprawdzeniu ich poprawności. Wynikiem powinno być id dodanego rekordu, dzięki czemu będziemy mogli parę id oraz nazwa zawodu dopisać do pola select na formularzu głównym, a następnie zaznaczyć ją jako wybraną. W zaprezentowanym przykładzie nie przedstawiono samego zapisu do bazy, a do zmiennej id przypisana została przykładowa wartość.</p>
<p>Powyższy przykład został zaprezentowany w bardzo uproszczony sposób, może stanowić podstawę do własnej implementacji ciekawego wywołania okna dialogowego. Dostosowanie do własnych potrzeb nie powinno stanowić większego problemu.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.visionsoftware.pl/java-script-jquery/wywolanie-nowego-okna-i-sciemnienie-tla-w-jquery.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
