<?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>sandromark78 &#187; xHTML</title>
	<atom:link href="http://sandromark78.it/tag/xhtml/feed/" rel="self" type="application/rss+xml" />
	<link>http://sandromark78.it</link>
	<description>The official blog of &#34;Sandro Marcon&#34;</description>
	<lastBuildDate>Wed, 07 Apr 2010 21:34:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Web-page: cambio testo ad intervalli</title>
		<link>http://sandromark78.it/informationtechnology/web-page-cambio-testo-ad-intervalli/</link>
		<comments>http://sandromark78.it/informationtechnology/web-page-cambio-testo-ad-intervalli/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 15:05:14 +0000</pubDate>
		<dc:creator>Sandro Marcon</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[xHTML]]></category>

		<guid isPermaLink="false">http://sandromark78.it/?p=160</guid>
		<description><![CDATA[Spesso, in una web-page, può risultare molto utile alternare diverse scritte di testo in determinate aree: lo scopo, aggiungendo i necessari fogli di stile (CSS) può essere quello di ottenere una sorta di bacheca/display con informazioni che cambiano ad intervalli regolari. La cosa può essere fatta senza troppa fatica utilizzando, lato client, le dovute funzioni [...]]]></description>
			<content:encoded><![CDATA[<p>Spesso, in una web-page, può risultare molto utile alternare diverse scritte di testo in determinate aree: lo scopo, aggiungendo i necessari fogli di stile (CSS) può essere quello di ottenere una sorta di bacheca/display con informazioni che cambiano ad intervalli regolari.</p>
<p>La cosa può essere fatta senza troppa fatica utilizzando, lato client, le dovute funzioni javascript. Ovviamente, se le stringhe da alternare sono contenute nel codice (javascript), si va a perdere “materiale informativo”: in sostanza Google indicizzerà il sito in questione senza “valutare” le stringhe di testo aggiunte “by code” (lato client attraverso javascript).</p>
<p>Requisito: tutte le nostre stringhe che si alterneranno nella parte di visualizzazione dovranno, per forza di cose, essere presenti nel markup della pagina.</p>
<p>Qui di seguito espongo la mia soluzione, o meglio, l’inizio della mia soluzione: tempo permettendo spero di poter ampliare il codice riportato sotto fino ad ottenere una sorta di mini-libreria. Obiettivi finali del progetto:</p>
<ul>
<li> realizzare una soluzione “multi standard” che supporti sia pagine statiche (XHTML) che pagine dinamiche (ASP.NET e PHP);</li>
<li> ottenere una soluzione flessibile che permetta di definire il testo in un file XML (per le pagine dinamiche);</li>
<li> appoggiarsi alla libreria javascript <a href="http://jquery.com/" target="_blank">jQuery</a>.</li>
</ul>
<p>Ecco la mia soluzione allo stato embrionale.</p>
<pre class="brush: jscript; title: ; notranslate">
var current = -1
var max;

function timerEvent()
{
var Div = document.getElementById(&quot;bacheca&quot;);

if(Div != null)
{
var i;
var count;

if(current &lt; 0)
{
for (i = 0, count = 0; i &lt; Div.childNodes.length; ++i)
{
if(Div.childNodes[i].tagName == &quot;DIV&quot;)
{
if(count &lt; 1)
{
showDiv(Div.childNodes[i]);
}
else
{
hideDiv(Div.childNodes[i]);
}

++count;
}
}

current = 0;
max = count;
}
else
{
++current;
if(current &gt;= max)
{
current = 0;
}

for (i = 0, count = 0; i &lt; Div.childNodes.length; ++i)
{
if(Div.childNodes[i].tagName == &quot;DIV&quot;)
{
if(count == current)
{
showDiv(Div.childNodes[i]);
}
else
{
hideDiv(Div.childNodes[i]);
}

++count;
}
}
}
setTimeout(timerEvent, 5000);
}
}

function showDiv(obj)
{
obj.style.display = &quot;&quot;;
}

function hideDiv(obj)
{
obj.style.display = &quot;none&quot;;
}
</pre>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;bacheca&quot; style=&quot;height: 140px;&quot;&gt;
&lt;div&gt;Text 0&lt;/div&gt;
&lt;div&gt;Text 1&lt;/div&gt;
&lt;div&gt;Text 2&lt;/div&gt;
&lt;div&gt;...&lt;/div&gt;
&lt;div&gt;Text n&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>La funzione javascript [timerEvent] va collegata all’evento [onLoad] della pagina. Saranno visualizzate alternativamente ed in successione i vari DIV (contenuti nel DIV con id &#8220;bacheca&#8221;), quindi avremo: “Text 0”, “Text 1”, “Text 2”, …, “Text n”, “Text 0”, … Ovviamente il DIV “contenitore” va impostato ad un’altezza predefinita se si vogliono evitare ridimensionamenti (e riposizionamenti) ad ogni “cambio testo”.</p>
<p>In questo esmpio, il testo viene cambiato ogni 5 secondi (vedere linea 60 di codice javascript).</p>
<div class="simple_likebuttons_container_small">
      <div class="simple_likebuttons_googleplus">
        <g:plusone size="medium" count="false" href="http://sandromark78.it/informationtechnology/web-page-cambio-testo-ad-intervalli/"></g:plusone>
      </div>
    
      <div class="simple_likebuttons_twitter simple_likebuttons_twitter_s">
        <a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-url="http://sandromark78.it/informationtechnology/web-page-cambio-testo-ad-intervalli/" data-lang="en">Tweet</a>
      </div>
    
      <div class="simple_likebuttons_facebook">
        <div id="fb-root"></div>
        <script>(function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) {return;}
          js = d.createElement(s); js.id = id;
          js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, "script", "facebook-jssdk"));</script>
        <div class="fb-like" data-href="http://sandromark78.it/informationtechnology/web-page-cambio-testo-ad-intervalli/" data-send="false" data-layout="button_count" data-show-faces="false" data-width="90"></div>
      </div>
    </div>]]></content:encoded>
			<wfw:commentRss>http://sandromark78.it/informationtechnology/web-page-cambio-testo-ad-intervalli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Practice in JavaScript e xHTML</title>
		<link>http://sandromark78.it/informationtechnology/best-practice-in-javascript-e-xhtml/</link>
		<comments>http://sandromark78.it/informationtechnology/best-practice-in-javascript-e-xhtml/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 13:50:40 +0000</pubDate>
		<dc:creator>Sandro Marcon</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[xHTML]]></category>

		<guid isPermaLink="false">http://sandromark78.it/?p=63</guid>
		<description><![CDATA[Giusto un mese fa, in Smashing Magazine, è comparso un post (che usa come &#8220;base della discussione&#8221; anche la libreria JavaScript jQuery) interessante che riporta una serie di linee guida nell&#8217;uso di JavaScript: in particolare viene posta molta attenzione sulla possibilità che il browser non sia in grado di eseguire il codice JavaScript (come spesso [...]]]></description>
			<content:encoded><![CDATA[<p>Giusto un mese fa, in <a href="http://www.smashingmagazine.com/" target="_blank">Smashing Magazine,</a> è comparso un <a href="http://www.smashingmagazine.com/2008/09/16/jquery-examples-and-best-practices/" target="_blank">post</a> (che usa come &#8220;base della discussione&#8221; anche la libreria JavaScript <a href="http://jquery.com/" target="_blank">jQuery</a>) interessante che riporta una serie di linee guida nell&#8217;uso di JavaScript: in particolare viene posta molta attenzione sulla possibilità che il browser non sia in grado di eseguire il codice JavaScript (come spesso accade in molti PDA).</p>
<p>La mia attenzione è stata catturata in particolare dalla regola numero 2: <em>NEVER Depend on Javascript</em>.</p>
<p><em>Bad practice</em></p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script language=&quot;javascript&quot;&gt;
var now = new Date();
if(now.getHours() &lt; 12)
document.write('Good Morning!');
else
document.write('Good Afternoon!');
&lt;/script&gt;
</pre>
<p><em>Soluzione proposta</em></p>
<pre class="brush: xml; title: ; notranslate">
&lt;p title=&quot;Good Day Message&quot;&gt;Good Morning!&lt;/p&gt;
</pre>
<pre class="brush: jscript; title: ; notranslate">
var now = new Date();
if(now.getHours() &gt;= 12)
{
var goodDay = $('p[title=&quot;Good Day Message&quot;]');
goodDay.text('Good Afternoon!');
}
</pre>
<p>Non sono molto d&#8217;accordo circa il best practice proposto, motivo: una parte dei contenuti viene ancora generata dinamicamente via JavaScript , sottraendo quindi questi ultmi all&#8217;indicizzazione da parte dei motri di ricerca (ricordo che i motori di ricerca non &#8220;eseguono&#8221; gli script presenti o &#8220;invocati&#8221; nella pagina). In sostanza, come sostiene da tempo il mio caro amico <a href="http://francesco.boschian.googlepages.com/" target="_blank">Francesco Boschian</a>: tutti i contenuti devono essere sempre presenti nella pagina, non generati &#8220;dinamicamente&#8221; via scripting (vedere come buon esempio il sito della <a href="http://www.apple.com/" target="_blank">Apple</a>).</p>
<p>Qui di seguito propongo una soluzione molto &#8220;artiginale e grezza&#8221;, ma che nella sua modestia rappresenta un valido workaround per aggirare la cosa.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;hidden&quot; id=&quot;str1&quot; value=&quot;Good morning!&quot; /&gt;
&lt;input type=&quot;hidden&quot; id=&quot;str2&quot; value=&quot;Good afternoon!&quot; /&gt;
&lt;p title=&quot;msg&quot;&gt;Good Morning!&lt;/p&gt;
</pre>
<pre class="brush: jscript; title: ; notranslate">
var now = new Date();
if(now.getHours() &gt;= 12)
{
var toSet = $('#str2').value;
}
else
{
var toSet = $('#str1').value;
}
var msg = $('#msg');
msg.text(toSet);
</pre>
<p>Evidente, purtroppo, la ripetizione della stringa &#8220;Good morning!&#8221;. Se però lato server possiamo sfruttare famework quali PHP o Asp.Net, il codice può diventare assai più &#8220;gradevole alla vista&#8221; .</p>
<div class="simple_likebuttons_container_small">
      <div class="simple_likebuttons_googleplus">
        <g:plusone size="medium" count="false" href="http://sandromark78.it/informationtechnology/best-practice-in-javascript-e-xhtml/"></g:plusone>
      </div>
    
      <div class="simple_likebuttons_twitter simple_likebuttons_twitter_s">
        <a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-url="http://sandromark78.it/informationtechnology/best-practice-in-javascript-e-xhtml/" data-lang="en">Tweet</a>
      </div>
    
      <div class="simple_likebuttons_facebook">
        <div id="fb-root"></div>
        <script>(function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) {return;}
          js = d.createElement(s); js.id = id;
          js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, "script", "facebook-jssdk"));</script>
        <div class="fb-like" data-href="http://sandromark78.it/informationtechnology/best-practice-in-javascript-e-xhtml/" data-send="false" data-layout="button_count" data-show-faces="false" data-width="90"></div>
      </div>
    </div>]]></content:encoded>
			<wfw:commentRss>http://sandromark78.it/informationtechnology/best-practice-in-javascript-e-xhtml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

