<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>o neobyčejných dobrodružstvích ze života návrháře uživatelského prožitku, webového analytika a marketéra.</description><title>Martin Kopta — blog</title><generator>Tumblr (3.0; @atpok)</generator><link>http://blog.garcon.cz/</link><item><title>Responsive design s &lt;BASE&gt;</title><description>&lt;p&gt;Když upravujete kód HTML podle zásad &lt;a href="http://www.google.com/search?q=responsive+design"&gt;responsive designu&lt;/a&gt;, k těm náročnějším problémům patří otázka, jak vyřešit načítání různě kvalitních obrázků pro různá zařízení. Na malé displeje s nízkým rozlišením není nutné stahovat stejně velké obrázky jako na displeje stolních počítačů, notebooků a tabletů s vysokým rozlišením.&lt;/p&gt;

&lt;p&gt;Pokud nechcete všechny obrázky přenést na pozadí prvků, abyste jejich zdroje mohli měnit pomocí CSS a &lt;a href="http://www.w3.org/TR/CSS2/media.html"&gt;@media&lt;/a&gt; queries, zbývá už asi jen možnost podle hlavičky &lt;a href="http://en.wikipedia.org/wiki/User_agent"&gt;User-Agent&lt;/a&gt; rozlišovat zařízení, a pomocí &lt;a href="http://httpd.apache.org/docs/current/mod/mod_rewrite.html"&gt;mod_rewrite&lt;/a&gt; pak dosazovat vhodné zdrojové soubory.&lt;/p&gt;

&lt;p&gt;Napadlo mě, že by šlo s využitím &lt;a href="http://dev.w3.org/html5/spec/Overview.html#resolving-urls"&gt;relativních cest&lt;/a&gt;, javascriptu a značky &lt;code&gt;&amp;lt;&lt;a href="http://dev.w3.org/html5/spec/Overview.html#the-base-element"&gt;BASE&lt;/a&gt;&amp;gt;&lt;/code&gt; problém elegantně vyřešit bez nutnosti cokoli nastavovat na serveru.&lt;/p&gt;

&lt;p&gt;Mějme všechny obrázky pro zařízení s vysokým rozlišením ve složce &lt;code&gt;/img/high&lt;/code&gt; a všechny obrázky pro zařízení s nízkým rozlišením ve složce &lt;code&gt;/img/low&lt;/code&gt;. Na obrázky odkazujme pouze názvem souboru. Do hlavičky dokumentu vložme značku &lt;code&gt;&amp;lt;BASE&amp;gt;&lt;/code&gt; s cestou k obrázkům o menších rozměrech a javascriptem v případě načítání na zařízení s vysokým rozlišením změňme její vlastnost &lt;code&gt;href&lt;/code&gt; na cestu ke složce s většími obrázky:&lt;/p&gt;

&lt;pre name="code" class="html:nogutter:nocontrols"&gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
  &amp;lt;title&amp;gt;Pokus s tagem &amp;amp;lt;BASE&amp;amp;gt;&amp;lt;/title&amp;gt;
  &amp;lt;base href="http://www.example.org/img/low/" id="responsive"&amp;gt;
  &amp;lt;script&amp;gt;
    if(window.innerWidth &amp;gt; 800) 
      document
        .getElementById('responsive')
        .setAttribute('href', 'http://www.example.org/img/high/');
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;img src="img.png" alt=""&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;

&lt;p&gt;Zbývá dořešit &lt;a href="http://code.google.com/intl/cs/speed/page-speed/docs/rendering.html#SpecifyImageDimensions"&gt;problém pomalejšího vykreslování layoutu&lt;/a&gt; v důsledku absence rozměrů v prvku &lt;code&gt;&amp;lt;IMG&amp;gt;&lt;/code&gt;.&lt;/p&gt;</description><link>http://blog.garcon.cz/post/13108243697</link><guid>http://blog.garcon.cz/post/13108243697</guid><pubDate>Mon, 21 Nov 2011 12:29:00 +0100</pubDate><category>base</category><category>mobile first</category><category>responsive design</category><category>progresive enhancement</category></item><item><title>Jak na skloňování @mentions ve tweetech </title><description>&lt;p&gt;U Twitteru mě vždycky trochu otravovalo, že se musím obejít bez skloňování uživatelských jmen v textu tweetů (&lt;a href="http://twitter.com/atpok"&gt;@atpok&lt;/a&gt; bez &lt;a href="http://twitter.com/atpok"&gt;@atpok&lt;/a&gt;a), anebo musím používat různé obezličky, jako je vkládání apostrofů mezi základní tvar a koncovku (&lt;a href="http://twitter.com/atpok"&gt;@atpok&lt;/a&gt;’a), což nevypadá úplně česky. Chtělo by to místo apostrofu nějaký znak, který se nezobrazuje a nemá žádný rozměr, napadlo mě.&lt;/p&gt;

&lt;p&gt;Takové znaky opravdu existují. Třeba &lt;a hreflang="http://en.wikipedia.org/wiki/Zero-width_space" href="http://en.wikipedia.org/wiki/Zero-width_space" title="[en] Zero-width space (Wikipedia)"&gt;bezrozměrná mezera&lt;/a&gt; (U+200B), &lt;a hreflang="en" href="http://en.wikipedia.org/wiki/Zero-width_joiner" title="[en] Zero-width joiner (Wikipedia)"&gt;bezrozměrný spojovník&lt;/a&gt; (U+200D) a pár dalších. Chvíli jsem přemýšlel, a pak jsem si vzpomněl na &lt;em&gt;měkký rozdělovník&lt;/em&gt; (U+00AD, v angličtině &lt;a href="http://en.wikipedia.org/wiki/Soft_hyphen" hreflang="en" lang="en" title="[en] Soft hyphen (Wikipedia)"&gt;soft hyphen&lt;/a&gt;, který kodéři znají jako entitu &lt;code&gt;&amp;amp;shy;&lt;/code&gt;). A je vyhráno!&lt;/p&gt;

&lt;p&gt;Na klávesnici měkký spojovník sice bohužel nenajdete, ale dostat se k němu můžete třeba přes mapu znaků nebo ho můžete vložit z klávesnice jako sekvenci &lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;0173&lt;/kbd&gt;.&lt;/p&gt;

&lt;p&gt;Uživatelé desktopového klienta TweetDeck &lt;a href="https://twitter.com/LukasUXD/status/78779651706716160"&gt;@LukasUXD&lt;/a&gt; a &lt;a href="https://twitter.com/ScottyCZE/status/78782649019273217"&gt;@ScottyCZE&lt;/a&gt; hlásí, že měkký spojovník se jim zobrazuje, kde nemá. Proto bude možná lepší používat bezrozměrnou mezeru. Tu z klávesnice nejspíš nezadáte, a tak nezbude než používat mapu znaků nebo nějaký &lt;a href="http://www.sovavsiti.cz/2003/bookmarklet.html" title="Bookmarklet - co to je a jak to používat (Dušan Janovský pro Sovu v síti)"&gt;bookmarklet&lt;/a&gt;. Například pomocí následujícího bookmarkletu vložíte bezrozměrnou mezeru na konec textového pole: &lt;a href="javascript:document.getElementsByTagName('textarea')%5B0%5D.value+='%5Cu200B';%5B%5D._" title="Přetáhněte odkaz na lištu prohlížeče, otevřete stránku Twitteru…"&gt;bezrozměrná mezera&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Výsledek potom vypadá následovně:
&lt;a href="https://twitter.com/atpok/status/78756843698135040" class="img"&gt;&lt;img src="http://media.tumblr.com/tumblr_lmiog3OZLN1qzugl9.png" alt="Pokud ještě na #uxce11 nemáte ubytování a chtěli byste bydlet sice daleko ode všeho, ale blízko @browser­a a mě, zkuste eastseven.de"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pokud jste napsali lepší bookmarklet (který třeba vloží bezrozměrnou mezeru na pozici kurzoru), dejte vědět, rád na něj odkážu.&lt;/p&gt;</description><link>http://blog.garcon.cz/post/2376487414</link><guid>http://blog.garcon.cz/post/2376487414</guid><pubDate>Thu, 09 Jun 2011 12:16:00 +0200</pubDate><category>twitter</category><category>mentions</category><category>skloňování</category><category>unicode</category></item><item><title>Konfigurace externího skriptu v těle volající značky</title><description>&lt;p&gt;Jestli se mi na novém tlačítku &lt;a href="http://www.google.com/webmasters/+1/button/"&gt;Google +1&lt;/a&gt; pro weby něco líbí, tak je to způsob konfigurace, který používá pro externí skript. Konfigurace je provedena pomocí anonymního objektu, který je obsažen v těle značky &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; volající externí skript.&lt;/p&gt;

&lt;pre name="code" class="html:nogutter:nocontrols"&gt;
&amp;lt;script type="text/javascript" src="http://apis.google.com/js/plusone.js"&amp;gt;
  {lang: 'cs', parsetags: 'explicit'}
&amp;lt;/script&amp;gt;
&lt;/pre&gt;

&lt;p&gt;Vzhledem k tomu, že objekt není přiřazen do žádné proměnné, musí si pro něj externí skript sáhnout přes DOM a parsovat si ho. Nějak takhle:&lt;/p&gt;

&lt;pre name="code" class="js:nogutter:nocontrols"&gt;
var konfigurace = {};
var zdroj = 'http://apis.google.com/js/plusone.js';
var skripty = document.getElementsByTagName('script');
var delka = skripty.length;

for(index = 0; index &amp;lt; delka; index++) {
  if(skripty[index].src.indexOf(zdroj) &amp;gt; -1) {
    konfigurace = JSON.parse(skripty[index].text);
  }
}
&lt;/pre&gt;

&lt;p&gt;Na téhle metodě se mi líbí, že přehledně přiřazuje konfiguraci k volanému skriptu, šetří místem ve zdrojovém kódu HTML a nezanechává za sebou globální proměnné.&lt;/p&gt;</description><link>http://blog.garcon.cz/post/6086042929</link><guid>http://blog.garcon.cz/post/6086042929</guid><pubDate>Thu, 02 Jun 2011 00:51:00 +0200</pubDate><category>JSON</category><category>JavaScript</category></item><item><title>Nahrazení podmíněného operátoru logickým</title><description>&lt;p&gt;Ode dneška přestávám v javascriptu používat &lt;a href="http://docs.sun.com/source/816-6408-10/ops.htm#1045406" xml:lang="en" lang="en"&gt;podmíněný operátor&lt;/a&gt; v těchto případech:&lt;/p&gt;
&lt;pre name="code" class="js:nogutter:nocontrols"&gt;
var a = b ? b : c;
&lt;/pre&gt;
&lt;p&gt;Místo toho si musím zapamatovat postup s &lt;a href="http://docs.sun.com/source/816-6408-10/ops.htm#1044813"&gt;logickým operátorem&lt;/a&gt;:&lt;/p&gt;
&lt;pre name="code" class="js:nogutter:nocontrols"&gt;
var a = b || c;
&lt;/pre&gt;
&lt;p&gt;Elegantní řešení a kromě lehkého zkrácení snad i zpřehlednění kódu.&lt;/p&gt;
&lt;h3&gt;Drobné doplnění&lt;/h3&gt;
&lt;p&gt;V &lt;a href="http://www.facebook.com/martin.kopta?v=feed&amp;amp;story_fbid=200651434621"&gt;diskuzi&lt;/a&gt;, která se rozpoutala po zveřejnění tohoto zápisku na Facebooku přišel &lt;a href="http://www.jantichy.cz/"&gt;Honza Tichý&lt;/a&gt; se zajímavým řešením pro PHP. Od verze 5.3 je v něm možné &lt;a href="http://php.net/manual/en/language.operators.comparison.php"&gt;podmíněný operátor&lt;/a&gt; zapisovat s vynecháním prostřední části:&lt;/p&gt;
&lt;pre name="code" class="php:nogutter:nocontrols"&gt;
$a = $b ?: $c;
&lt;/pre&gt;</description><link>http://blog.garcon.cz/post/236353199</link><guid>http://blog.garcon.cz/post/236353199</guid><pubDate>Sat, 07 Nov 2009 23:52:00 +0100</pubDate><category>JavaScript</category></item></channel></rss>

