<?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>HTML &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/html/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Wed, 13 Aug 2025 06:04:17 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>すぐに使える簡易サーバーでHTMLをチェックする3つの方法</title>
		<link>https://blog.mach3.jp/2012/09/21/check-html-with-simple-server.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 21 Sep 2012 00:55:13 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Sublime Text]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2668</guid>

					<description><![CDATA[Webページが「file://～」だとうまく動かない…でも一々サーバーにアップしたり環境整備するのが面倒…。 そんな時に使える簡易サーバーのご紹介です。 HTTPでアクセスしてチェックしたいケースとは Webページを制作 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Webページが「file://～」だとうまく動かない…でも一々サーバーにアップしたり環境整備するのが面倒…。 そんな時に使える簡易サーバーのご紹介です。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-sY0U3GH3EUQ/UFsE9BnCBHI/AAAAAAAABmg/oB_Tmh8nkP0/s400/20120920-00.png" alt="すぐに使える簡易サーバーでHTMLをチェックする3つの方法"/></figure>



<p></p>



<span id="more-2668"></span>



<h2 class="wp-block-heading">HTTPでアクセスしてチェックしたいケースとは</h2>



<p>Webページを制作している時、多くの場合はそのままブラウザで開けば動作チェックが出来ますが、 サーバーを通してHTTPでアクセスしないと正常に動作しないケースもあります。</p>



<p>つまり、「file:～」ではなく、「http:～」でアクセスしたい。例えば、</p>



<ul class="wp-block-list">
<li>ChromeからAjaxのテストをしたい</li>



<li>各種ウィジェットのスクリプトの表示をチェックしたい</li>
</ul>



<p>Chromeのケースは起動オプション（&#8221;&#8211;allow-file-access-from-files&#8221;）で解決できますし、 ウィジェットもスクリプトの中身を少しいじれば動くことが多いですが、 いずれもWebサーバーを通せば難なく動作するわけで、それがすぐに出来るのならばその方がシンプルではないかな、と思うわけです。</p>



<h2 class="wp-block-heading">ではどうしようか</h2>



<p>既にXAMPP/MAMPPや仮想マシン等でサーバ環境がある場合は良いのですが、 バーチャルホスト等の諸設定をこなすのが面倒くさかったり、とにかくささっと確認したいような場合は、 簡易的なサーバを利用してのチェックがお勧めです。</p>



<p>サッと起動して、サッ確認し、終わったらサッと終了する。</p>



<p>ここでは、3つの方法を提案してみます。</p>



<ol class="wp-block-list">
<li>SublimeServerでチェックする</li>



<li>PHP5.4+のビルトインサーバーでチェックする</li>



<li>ローカルプロキシでチェックする</li>
</ol>



<h2 class="wp-block-heading">SublimeServer でチェックする</h2>



<p>もし貴方が<a href="http://www.sublimetext.com/2">Sublime Text 2</a>を使って制作をしているのならば、これを使わない手はないでしょう。 <a href="https://github.com/learning/SublimeServer">Sublime Server</a>は、Sublime Text 2で動作する簡易Webサーバープラグインです。</p>



<h3 class="wp-block-heading">SublimeServer</h3>



<p><a href="https://github.com/learning/SublimeServer">learning/SublimeServer</a></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Allow you run a HTTP Server in SublimeText 2, and serves all the open project folders</p>
</blockquote>



<p>メリットは、作業環境からすぐに実行できる点ですね。</p>



<h3 class="wp-block-heading">インストール</h3>



<ol class="wp-block-list">
<li>「<a href="http://wbond.net/sublime_packages/package_control">Sublime Package Control</a>」をインストール</li>



<li>コマンドパレットから <em>「Install Package」>「SublimeServer」</em> と打ち込む</li>
</ol>



<p>※プラグインの導入法については<a href="/2012/01/sublime-text-and-nettuts-fetch.html">以前書いた記事</a>などをご参考に</p>



<h3 class="wp-block-heading">使い方</h3>



<ol class="wp-block-list">
<li><em>「Tools」>「SublimeServer」>「Start SublimeServer」</em>で起動</li>



<li>確認したいHTMLファイルを開いて、右クリックし、<em>「View This File in Browser」</em></li>
</ol>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/--Wz2xFc_cYY/UFsAj8pt3aI/AAAAAAAABmA/c1KECRnWQJE/s500/20120920-01.png" alt="SublimeServer"/></figure>



<p></p>



<p>これで、デフォルトのブラウザで目的のファイルが開かれます。 URLは以下のようになります。プロジェクトがルートディレクトリのような扱いになっていますね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>http://localhost:8080/[folder name]/index.html</p>
</blockquote>



<p>ポート番号の<em>「8080」</em>は、<em>「Tools」&gt;「SublimeServer」&gt;「Settings」</em> で変更できます。</p>



<h2 class="wp-block-heading">PHP5.4+のビルトインサーバーでチェックする</h2>



<p>マシンにPHP5.4以降がインストールされているのあらば、 PHPにビルトインされている簡易Webサーバーが利用できます。</p>



<p><a href="http://www.php.net/manual/ja/features.commandline.webserver.php">PHP: ビルトインウェブサーバー &#8211; Manual</a></p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-mAMfF2zpPVw/UFsAjxoDqVI/AAAAAAAABmA/6-bx2aM43BM/s500/20120920-02.png" alt="PHP5.4+のビルトインサーバー"/></figure>



<p></p>



<p>メリットはPHPの動作チェックが出来る点ですが、 簡易的な物なのでrewrite等は動かず、そこらへんに依存するFW等の動作は難しいでしょう。 そういう大掛かりな物は、きちんと仮想環境を構築してテストしましょう。</p>



<h3 class="wp-block-heading">使い方</h3>



<p>※PHP5.4以降が導入済みで、パスが通っている前提で話を進めます。</p>



<ol class="wp-block-list">
<li>ターミナル（あるいはコマンドプロンプト）を開く</li>



<li><br /><p>目的のファイルがあるディレクトリまで移動して、以下のコマンドを実行する</p><br /><blockquote><p>php -S localhost:8080</p></blockquote><br /></li>



<li><br /><p>ブラウザを開いてアドレスバーにURLを入力する</p><br /><blockquote><p>http://localhost:8080/index.html</p></blockquote><br /></li>
</ol>



<p>実行したディレクトリがルートディレクトリの扱いになります。</p>



<h2 class="wp-block-heading">ローカルプロキシでマッピングする</h2>



<p>これは前述した2つの方法と違い、ローカルでWebサーバーを起動するのではなく、 ローカルプロキシを利用して、或るドメインへのアクセスをローカルのファイルにマッピングする方法です。</p>



<p>…と言ってもピンと来ないですね。</p>



<p>例えば、<em>「http://example.com/index.html」</em>というファイルへブラウザでアクセスするとして、 その<em>「index.html」</em>の内容を、ローカルにあるファイルに差し替える事が出来ます。 そうすることで、あたかも<em>インターネット上にそのファイルがあるかのように</em>振る舞ってくれるわけですね。</p>



<h3 class="wp-block-heading">Charles</h3>



<p>ここでは、ローカルプロキシツールのCharlesを使ってみます。 有料ではありますがクロスプラットフォームで開発されていて、Windows/Mac/Linux版が用意されています。</p>



<p><a href="http://www.charlesproxy.com/">Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS &amp; SSL Proxy / Reverse Proxy</a></p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-9IYim2_Ei-M/UFsAkn-AIWI/AAAAAAAABmA/u9RlpKyMMpY/s500/20120920-03.png" alt="Charles Web Debugging Proxy"/></figure>



<p></p>



<h3 class="wp-block-heading">使い方</h3>



<ol class="wp-block-list">
<li><em>「Tools」>「Map To Local」</em>で設定ダイアログを開きます</li>



<li><em>「Add」</em>で新しくマッピングを作成します</li>



<li><br /><p>下記のような要領で入力して<em>「OK」</em></p><br /><figure><img decoding="async" src="https://lh5.googleusercontent.com/-HPnv5-g9DVE/UFsE9DN1OxI/AAAAAAAABmg/CbYSrAd8NmA/s500/20120920-04.png" alt="Edit Mapping - Charles"></figure><br /></li>



<li><br /><p>設定したURLにアクセスします</p><br /><blockquote><p>http://local.test/index.html</p></blockquote><br /></li>
</ol>



<p>ドメインは、名前解決が出来る必要があります。 プロジェクトに使用する予定のドメインを使うか、適当な「local.test」などの名前をあてがってhostsファイルに127.0.0.1などで書き込んでおくか、 あるいはexample.comやlocalhostを利用するなどしましょう。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>これらの方法は、DirectoryIndexが指定できなかったりパフォーマンスが悪かったりする為、あくまでも簡易的なチェック向けです。 が、それで十分な場合は多いに制作の手助けになってくれる事でしょう。</p>



<p>特にローカルプロキシは、こういったケースに因らず、様々なシーンで開発効率をあげてくれるので、 （むしろそちらの方がメインですね） ぜひとも導入しておくべきだと思います。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ラジオボタンでグラフィカルなトグルボタンを作ってみる</title>
		<link>https://blog.mach3.jp/2012/07/31/graphical-togglebutton-by-radio-input.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 31 Jul 2012 01:00:11 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[JSBin]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2617</guid>

					<description><![CDATA[HTMLでトグルボタンを実装するにはinput[type=radio]が近道ですが、 リッチな雰囲気にする為に見た目を制御したい。今回はそんなお話です。 ラジオボタンでグラフィカルなトグルボタン 「ラジオボタンがすでにグ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>HTMLでトグルボタンを実装するにはinput[type=radio]が近道ですが、 リッチな雰囲気にする為に見た目を制御したい。今回はそんなお話です。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-EyrTrqI8cl0/UBavQ8lA-sI/AAAAAAAABi8/MTipTnjLFlE/s400/20120731-02.png" alt="ラジオボタンでグラフィカルなトグルボタンを作ってみる"/></figure>



<p></p>



<span id="more-2617"></span>



<h2 class="wp-block-heading">ラジオボタンでグラフィカルなトグルボタン</h2>



<p>「ラジオボタンがすでにグラフィカルでは？」という細かいつっこみは置いといて頂き、 本稿ではより自由度高く外見をカスタマイズする方法を記していきます。</p>



<p>ラジオボタンでなくともトグルボタンはJavaScriptで作れますが、 択一で選択する仕組みをわざわざ自前で実装するよりも、 その為に作られた物をその為に使って実現してみます。</p>



<h2 class="wp-block-heading">マークアップ</h2>



<p>例えばこんなHTMLとCSSを書きます。 血液型を選択する簡単なトグルボタンです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-0MHZN0g8NKk/UBavQ47RQ7I/AAAAAAAABi8/_GBZo7g9bHs/s500/20120731-01.png" alt="血液型を選択する簡単なトグルボタン"/></figure>



<p></p>



<h3 class="wp-block-heading">HTML</h3>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">form</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"question"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>あなたの血液型は？<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">ul</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"bloodtype-list"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">label</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"radio"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"bloodtype"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"A"</span> <span class="hljs-attr">checked</span> /&gt;</span>A<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">label</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"radio"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"bloodtype"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"B"</span> /&gt;</span>B<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">label</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"radio"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"bloodtype"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"O"</span> /&gt;</span>O<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">label</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"radio"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"bloodtype"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"AB"</span> /&gt;</span>AB<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">form</span>&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">CSS</h3>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-comment">/**
 * 重要な箇所のみ抜粋
 */</span>

<span class="hljs-selector-class">.bloodtype-list</span> <span class="hljs-selector-tag">label</span> <span class="hljs-selector-tag">input</span> {
    <span class="hljs-attribute">display</span>:none;
}
<span class="hljs-selector-class">.bloodtype-list</span> <span class="hljs-selector-tag">label</span> {
    <span class="hljs-comment">/* 非選択時のスタイル */</span>
}
<span class="hljs-selector-class">.bloodtype-list</span> <span class="hljs-selector-tag">label</span><span class="hljs-selector-class">.selected</span> {
    <span class="hljs-comment">/* 選択時のスタイル */</span>
}
</code></span></pre>


<p>label&gt;input という構造にして、inputをdisplay:none;で隠してしまいます。 選択されたラジオボタンのlabelに「selected」クラスが付加されれば、選択状態を表現できまね。 その部分は、JavaScriptにお任せします。</p>



<h2 class="wp-block-heading">JavaScript</h2>



<p>jQueryを使います。非常に単純な処理です。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> radios = $(<span class="hljs-string">"input&#91;name=bloodtype]"</span>);

radios.on(<span class="hljs-string">"change"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
    <span class="hljs-comment">// 一旦全てのlabel要素からselectedクラスを除去</span>
    radios.closest(<span class="hljs-string">"label"</span>).removeClass(<span class="hljs-string">"selected"</span>);
    <span class="hljs-comment">// 選択されたラジオボタンの親のlabelにselectedクラスを設定</span>
    $(e.target).closest(<span class="hljs-string">"label"</span>).addClass(<span class="hljs-string">"selected"</span>);

    <span class="hljs-comment">// 選択変更時に何かしたければここで</span>
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Changed to "</span> + e.target.value);
});


<span class="hljs-comment">// 選択状態を初期化する</span>
radios.filter(<span class="hljs-string">":checked"</span>).trigger(<span class="hljs-string">"change"</span>);
</code></span></pre>


<p>これで概ね動くのですが、IE8以下はもう一工夫必要です。</p>



<h2 class="wp-block-heading">旧IE対策</h2>



<p>IE8以下は、非表示にしているラジオボタンのlabel要素をクリックしても 選択状態は変わらず、changeイベントも発火しない様子です。</p>



<p>なので、その挙動を簡単にエミュレートしてあげます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">radios.closest(<span class="hljs-string">"label"</span>).on(<span class="hljs-string">"click"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
    <span class="hljs-keyword">var</span> input = $(<span class="hljs-keyword">this</span>).find(<span class="hljs-string">"input"</span>);
    <span class="hljs-keyword">if</span>(! input.prop(<span class="hljs-string">"checked"</span>)){
        input.prop(<span class="hljs-string">"checked"</span>, <span class="hljs-literal">true</span>).trigger(<span class="hljs-string">"change"</span>);
    }
});
</code></span></pre>


<p>親のlabel要素をクリックした時に、子のinput要素が選択されていなければ、 checkedにしてchangeイベントに着火します。</p>



<h2 class="wp-block-heading">jQueryプラグインにまとめてみる</h2>



<p>一連の動作をプラグインにまとめてみました。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$.fn.extend({
    <span class="hljs-attr">toggleButtons</span> : <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">callback</span>)</span>{
        <span class="hljs-keyword">var</span> radios = <span class="hljs-keyword">this</span>;
        radios.on(<span class="hljs-string">"change"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
            radios.closest(<span class="hljs-string">"label"</span>).removeClass(<span class="hljs-string">"selected"</span>);
            $(e.target).closest(<span class="hljs-string">"label"</span>).addClass(<span class="hljs-string">"selected"</span>);
             callback.call(<span class="hljs-keyword">this</span>, e);
        });
        radios.closest(<span class="hljs-string">"label"</span>).on(<span class="hljs-string">"click"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
            <span class="hljs-keyword">var</span> input = $(<span class="hljs-keyword">this</span>).find(<span class="hljs-string">"input"</span>);
            <span class="hljs-keyword">if</span>(! input.prop(<span class="hljs-string">"checked"</span>)){
                input.prop(<span class="hljs-string">"checked"</span>, <span class="hljs-literal">true</span>).trigger(<span class="hljs-string">"change"</span>);
            }
        });
        radios.filter(<span class="hljs-string">":checked"</span>).trigger(<span class="hljs-string">"change"</span>);
    }
});
</code></span></pre>


<h3 class="wp-block-heading">使い方</h3>



<p>引数のcallbackは、選択状態が変更された時にコールされます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">"input&#91;name=bloodtype]"</span>).toggleButtons(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
    <span class="hljs-comment">// 選択変更時に何かする</span>
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Changed to "</span> + e.target.value);
});
</code></span></pre>


<h2 class="wp-block-heading">デモ</h2>



<p>JSBinにデモを用意しました。</p>



<ul class="wp-block-list">
<li><a href="http://jsbin.com/amufub/21/">DEMO ( JS Bin )</a></li>
</ul>



<h2 class="wp-block-heading">まとめ</h2>



<p>あとはlabelとlabel.selectedの見た目を存分にデザインしてあげましょう。 CSS3で記述するもよし、画像置換するもよし、子にimgを入れて差し替えてもよし。 お好みのコースで心ゆくまでごゆっくりと。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<dl>
<dt>2013/06/22</dt>
<dd>checkedにあわせて選択するようにコードを調整</dd>
</dl>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>head要素に読み込むべき唯一のスクリプト「headjs」</title>
		<link>https://blog.mach3.jp/2011/03/10/headjs.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 10 Mar 2011 01:10:46 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[headjs]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Modernizr]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1665</guid>

					<description><![CDATA[「Modernizr」や「html5.js」等、 モダンな環境の為の便利なスクリプトは多々ありますが、 「headjs」はそんな彼らの仕事を一気に引き受けてくれる働き者のスクリプトです。 使い方 謳い文句はhead要素に [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>「<a href="http://www.modernizr.com/">Modernizr</a>」や「<a href="http://code.google.com/p/html5shiv/">html5.js</a>」等、 モダンな環境の為の便利なスクリプトは多々ありますが、<br />
「headjs」はそんな彼らの仕事を一気に引き受けてくれる働き者のスクリプトです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/_JJkNs5Ixl70/TXZN8JqNymI/AAAAAAAABN4/eGs8lEmCw94/201103090040.png" alt="headjs"/></figure>



<p></p>



<span id="more-1665"></span>



<h2 class="wp-block-heading">使い方</h2>



<ul class="wp-block-list">
<li><a href="http://headjs.com/">Head JS :: The only script in your HEAD</a></li>
</ul>



<p>謳い文句は<em>head要素に読み込む唯一のスクリプト</em><br />
ダウンロードして読み込むだけ。おしまい。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"head.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<h2 class="wp-block-heading">その多彩な機能</h2>



<h3 class="wp-block-heading">環境の判別</h3>



<p>CSS3のプロパティの対応状況、画面のサイズ、ブラウザなどの情報を<br />
<a href="http://www.modernizr.com/">Modernizr</a>と同じ手法でHTML要素のクラスに出力してくれます。<br />
こんな感じに…</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">&lt;html lang=<span class="hljs-string">"ja"</span> id=<span class="hljs-string">"test-page"</span> <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">" webkit root-section js  gradient rgba opacity textshadow multiplebgs boxshadow borderimage borderradius cssreflections csstransforms csstransitions fontface domloaded w-1100 lt-1280 lt-1440 lt-1680 lt-1920"</span>&gt;
</code></span></pre>


<p>また、JavaScriptでheadオブジェクトを辿っても判別結果が得られます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-built_in">console</span>.log( head.csstransitions ); <span class="hljs-comment">// Transition対応のブラウザならtrue</span>
<span class="hljs-built_in">console</span>.log( head.browser.webkit ); <span class="hljs-comment">// Webkitならtrue</span>
<span class="hljs-built_in">console</span>.dir( head ); <span class="hljs-comment">// とりあえず全部覗いてみたらいいと思う</span>
</code></span></pre>


<h3 class="wp-block-heading">
  IEのHTML5対応の補助<br />
</h3>



<p>
  html5shiv同様、IEでのHTML5の新要素の使用をサポートしてくれます。<br /> （IEさんはHTML5の要素を置いても、そのままではスタイルをあててくれないので…）
</p>



<ul class="wp-block-list">
<li><br />    <a href="http://code.google.com/p/html5shiv/">html5shiv &#8211; Project Hosting on Google Code</a><br />  </li>
</ul>



<h3 class="wp-block-heading">
  スクリプトローダー<br />
</h3>



<p>
  動的にJavaScriptファイルをロードする機能を備えています。<br /> 読み込むスクリプトファイルは復数指定でき、 ロード完了時のコールバックも登録可能です。
</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">head.js(
    <span class="hljs-string">"hoge.js"</span>,
    <span class="hljs-string">"fuga.js"</span>,
    <span class="hljs-string">"foo.js"</span>,
    <span class="hljs-string">"bar.js"</span>,
    <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-built_in">console</span>.log( <span class="hljs-string">"All Script Loaded."</span> );
    }
);
</code></span></pre>


<p>
  パフォーマンスに疑問が残るので多用は禁物ですが、便利ですね。<br /> 競合としてはrequire.jsとかでしょうか。
</p>



<ul class="wp-block-list">
<li><br />    <a href="http://requirejs.org/">RequireJS</a><br />  </li>
</ul>



<h2 class="wp-block-heading">
  まとめ<br />
</h2>



<p>
  一本読み込むだけでこれだけのことが出来る。<br /> まさにheadjsの名に恥じない素晴らしいスクリプトだと思います。
</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PHP : Webページからフィードの在り処をつきとめる</title>
		<link>https://blog.mach3.jp/2011/02/01/discover-feed-url-from-webpage.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 01 Feb 2011 02:11:20 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XPath]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1502</guid>

					<description><![CDATA[URLからWebページにアクセスし、フィードのURLを抽出するスクリプトを書いてみるメモ。 XPathでやってみた 「フィードをオートディスカバリーする XPath &#8211; IT戦記」を参考に DOMXpathで [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>URLからWebページにアクセスし、フィードのURLを抽出するスクリプトを書いてみるメモ。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TUbrP6o7c5I/AAAAAAAABKY/2iCkkM6rRiw/201102010202.png" alt="PHP : Webページからフィードの在り処をつきとめる"/></figure>



<p></p>



<span id="more-1502"></span>



<h2 class="wp-block-heading">XPathでやってみた</h2>



<p>「<a href="http://d.hatena.ne.jp/amachang/20080808/1218171377">フィードをオートディスカバリーする XPath &#8211; IT戦記</a>」を参考に<br />
<a href="http://php.net/manual/ja/class.domxpath.php">DOMXpath</a>で処理してみました。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$doc = DOMDocument::loadHTMLFile( $url );
$xpath = <span class="hljs-keyword">new</span> DOMXpath( $doc );
</code></span></pre>


<p>DOMXPathはDOMDocumentをコンストラクタの引数に食べさせて使います。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$q = <span class="hljs-string">'/html/head/link&#91;contains(@rel, "alternate")]'</span>
    . <span class="hljs-string">'&#91;@type="application/x.atom+xml" or @type="application/atom+xml" or '</span>
    . <span class="hljs-string">'@type="application/xml" or @type="text/xml" or '</span>
    . <span class="hljs-string">'@type="application/rss+xml" or @type="application/rdf+xml"]'</span>;
$eles = $xpath-&gt;query( $q );
</code></span></pre>


<p>基本的には先述の記事と同じ処理。<br />
<em>「rel属性に&#8221;alternate&#8221;を含み、尚且つtype属性がそれっぽいlink要素をください」</em><br />
というクエリです。</p>



<p>DOMXPath::queryにクエリを渡せば実行結果をDOMNodeListで返してくれますので、<br />
こんな感じに、条件にあったlink要素の1個目のhref属性を取得。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$eles-&gt;item(<span class="hljs-number">0</span>)-&gt;getAttribute(<span class="hljs-string">"href"</span>);
</code></span></pre>


<h3 class="wp-block-heading">ファイナルコード</h3>



<dl>
<dt>関数にまとめたもの</dt>
<dd><a href="https://gist.github.com/420b0f92c210fd77d0c8">WebページからフィードのURLを抽出する。（XPath版）- GitHub</a></dd>
</dl>



<h2 class="wp-block-heading">DOMDocumentでもやってみる</h2>



<p>同じ処理を、試しに<a href="http://php.net/manual/ja/class.domdocument.php">DOMDocument</a>でも書いてみる事に。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$doc = DOMDocument::loadHTMLFile( $url );

$types = <span class="hljs-keyword">array</span>(
    <span class="hljs-string">"application/x.atom+xml"</span>,
    <span class="hljs-string">"application/atom+xml"</span>,
    <span class="hljs-string">"application/xml"</span>,
    <span class="hljs-string">"text/xml"</span>,
    <span class="hljs-string">"application/rss+xml"</span>,
    <span class="hljs-string">"application/rdf+xml"</span>
);
</code></span></pre>


<p>下準備。DOMDocumentを生成しつつ、属性値のリストを作っておく。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$feedUrl = <span class="hljs-keyword">null</span>;
$links = $doc-&gt;getElementsByTagName(<span class="hljs-string">"link"</span>);
<span class="hljs-keyword">for</span>( $i = <span class="hljs-number">0</span>; $i &lt; $links-&gt;length; $i ++ ){
    $link = $links-&gt;item( $i );
    <span class="hljs-keyword">if</span>( !stristr( $link-&gt;getAttribute(<span class="hljs-string">"rel"</span>), <span class="hljs-string">"alternate"</span> ) ||
        !in_array( $link-&gt;getAttribute(<span class="hljs-string">"type"</span>), $types ) ){ <span class="hljs-keyword">continue</span>; }
    $feedUrl = $link-&gt;getAttribute(<span class="hljs-string">"href"</span>);
    <span class="hljs-keyword">if</span>( !<span class="hljs-keyword">empty</span>($feedUrl) ){ <span class="hljs-keyword">break</span>; }
}
</code></span></pre>


<p>link要素のリストを取得してループでぐるりとまわします。<br />
何をしているのかわかりやすいですが、XPathの方がスマートな印象。</p>



<h3 class="wp-block-heading">ファイナルコード</h3>



<dl>
<dt>関数にまとめたもの。</dt>
<dd><a href="https://gist.github.com/77725d74919ace6f7475">WebページからフィードのURLを抽出する。（DOMDocument版）- GitHub</a></dd>
</dl>



<h2 class="wp-block-heading">まとめ</h2>



<p>Webページを取得してごにょごにょしたい場合はXPathが便利そう！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>:activeでボタンに「押しごたえ」を付けてみる</title>
		<link>https://blog.mach3.jp/2011/01/25/css-button-on-active.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 25 Jan 2011 02:11:13 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[UI]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1475</guid>

					<description><![CDATA[Tumblrのダッシュボードの左上のロゴを見ていてふと思ったのですが、 マウスオーバーの処理をする事はあっても、 クリックした時の処理をしているサイトって意外と少ないですよね。 そこで今日はボタンをクリックした時のスタイ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Tumblrのダッシュボードの左上のロゴを見ていてふと思ったのですが、<br />
マウスオーバーの処理をする事はあっても、<br />
クリックした時の処理をしているサイトって意外と少ないですよね。<br />
そこで今日はボタンをクリックした時のスタイルについてメモなど。<br />
（わかっちゃいるけど面倒くさいんだろうなぁ、という気はしている）</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TT2i8wCxI3I/AAAAAAAABKE/Yd-26s6a1as/201101250103.png" alt=":activeでボタンに「押しごたえ」を付けてみる"/></figure>



<p></p>



<p>© まっは画伯</p>



<span id="more-1475"></span>



<h2 class="wp-block-heading">どんなスタイルにすると「押しごたえ」が生まれる？</h2>



<ul class="wp-block-list">
<li>へこんだデザインにする</li>



<li>位置を下げる</li>



<li>ちょっと暗くしてみる</li>
</ul>



<p>あたりで「押しごたえ」が出るのではないでしょうか。<br />
（ざっくばらん）</p>



<h2 class="wp-block-heading">基本は「:active」で</h2>



<p>:hoverがマウスオーバー時のスタイルならば、<br />
ボタンを押下した時のスタイルは:activeで記述します。</p>



<p>こちらは一例。<br />
（IEだと残念な見栄えになります）</p>



<ul class="wp-block-list">
<li><a href="http://jsfiddle.net/mach3ss/KcUaG/">DEMO:1 ( jsFiddle )</a></li>
</ul>



<p>HTML</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"button"</span>&gt;</span>BUTTON<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
</code></span></pre>


<p>CSS</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-class">.button</span> {
    <span class="hljs-attribute">display</span>:inline-block;
    <span class="hljs-attribute">padding</span>:<span class="hljs-number">5px</span> <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">background-color</span>:<span class="hljs-number">#69c</span>;
    <span class="hljs-attribute">color</span>:<span class="hljs-number">#fff</span>;
    <span class="hljs-attribute">border</span>:<span class="hljs-number">1px</span> solid <span class="hljs-number">#69c</span>;
    <span class="hljs-attribute">text-decoration</span>:none;
    <span class="hljs-attribute">font-size</span>:<span class="hljs-number">13px</span>;
    <span class="hljs-attribute">-webkit-border-radius</span>:<span class="hljs-number">3px</span>;
    <span class="hljs-attribute">-moz-border-radius</span>:<span class="hljs-number">3px</span>;
    <span class="hljs-attribute">border-radius</span>:<span class="hljs-number">3px</span>;
}
<span class="hljs-selector-class">.button</span><span class="hljs-selector-pseudo">:hover</span>{
    <span class="hljs-attribute">background-color</span>:<span class="hljs-number">#79acdf</span>;
    <span class="hljs-attribute">-webkit-box-shadow</span>:inset <span class="hljs-number">0px</span> <span class="hljs-number">0px</span> <span class="hljs-number">3px</span> <span class="hljs-number">#fff</span>;
    <span class="hljs-attribute">-moz-box-shadow</span>:inset <span class="hljs-number">0px</span> <span class="hljs-number">0px</span> <span class="hljs-number">3px</span> <span class="hljs-number">#fff</span>;
    <span class="hljs-attribute">box-shadow</span>:inset <span class="hljs-number">0px</span> <span class="hljs-number">0px</span> <span class="hljs-number">3px</span> <span class="hljs-number">#fff</span>;
}
<span class="hljs-selector-class">.button</span><span class="hljs-selector-pseudo">:active</span>{
    <span class="hljs-attribute">padding-top</span>:<span class="hljs-number">6px</span>;
    <span class="hljs-attribute">padding-bottom</span>:<span class="hljs-number">4px</span>;
    <span class="hljs-attribute">border</span>:<span class="hljs-number">1px</span> solid <span class="hljs-number">#334c66</span>;
    <span class="hljs-attribute">background-color</span>:<span class="hljs-number">#69c</span>;
    <span class="hljs-attribute">color</span>:<span class="hljs-number">#e0ebf5</span>;
    <span class="hljs-attribute">-webkit-box-shadow</span>:inset <span class="hljs-number">0px</span> <span class="hljs-number">0px</span> <span class="hljs-number">8px</span> <span class="hljs-number">#334c66</span>;
    <span class="hljs-attribute">-moz-box-shadow</span>:inset <span class="hljs-number">0px</span> <span class="hljs-number">0px</span> <span class="hljs-number">2px</span> <span class="hljs-number">#3a6da0</span>;
    <span class="hljs-attribute">box-shadow</span>:inset <span class="hljs-number">0px</span> <span class="hljs-number">0px</span> <span class="hljs-number">2px</span> <span class="hljs-number">#3a6da0</span>;
}
</code></span></pre>


<p>上下paddingを調整して押下した感を出してます。<br />
ちなみにこれをインラインで使おうとすると回りも巻き込んでしまうのでご注意を。</p>



<h2 class="wp-block-heading">IE6/7だとクリック後に復帰できない問題</h2>



<p>IE6/7で見ると、ボタンをクリックした後もフォーカスが残ってしまっているのか、<br />
他の要素をクリックするまで:activeのスタイルのままになってしまいます。</p>



<p>なので、例えばJavaScriptでこんなのを足してみます。（要jQuery）<br />
クリックイベントが発生した時に、ボタンからフォーカスを外しています。</p>



<ul class="wp-block-list">
<li><a href="http://jsfiddle.net/mach3ss/KcUaG/2/">DEMO:2 ( jsFiddle )</a></li>
</ul>



<pre class="wp-block-preformatted">$(".button").click( function(){ this.blur(); } );
</pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>とはいっても、画面遷移しちゃうようなボタンでやったところで、あまり見てもらえなくて残念。<br />
例えばAjaxコンテンツのような、その場で切り替わるページなら、<br />
「押し応え」を付加する事で使い心地が向上するかもしれませんね！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JavaScriptで「パスワードを表示」機能を実装してみる</title>
		<link>https://blog.mach3.jp/2011/01/18/javascript-password-toggle.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 18 Jan 2011 02:11:39 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Password]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1437</guid>

					<description><![CDATA[通常なら文字が伏せてある状態のパスワード入力フォームですが、 入力したパスワードを確認する為の「パスワードを表示」機能を JavaScriptで実装する為のメモです。（jQuery使用） ざっくりとした仕掛け チェックボ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>通常なら文字が伏せてある状態のパスワード入力フォームですが、<br />
入力したパスワードを確認する為の「パスワードを表示」機能を<br />
JavaScriptで実装する為のメモです。（jQuery使用）</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TTSLFjwxAHI/AAAAAAAABJo/qKQvnTxJ7io/201101180330.png" alt="JavaScriptで「パスワードを表示」機能を実装してみる"/></figure>



<p></p>



<span id="more-1437"></span>



<ol class="wp-block-list">
<li>ざっくりとした仕掛け</li>



<li>IE兄弟はinput要素のtype属性をいじれないらしい</li>



<li>textとpasswordを並べて表示/非表示をトグルする</li>



<li>コード抜粋</li>
</ol>



<h2 class="wp-block-heading">ざっくりとした仕掛け</h2>



<p>チェックボックスにチェックを入れると、<br />
パスワードのtypeが<em>text</em>に切り替わって内容が確認出来るようになる仕組み。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TTSLFy-TuyI/AAAAAAAABJw/xTl8BbYjSXI/201101180231.png" alt="ざっくりとした仕掛け"/></figure>



<p></p>



<p><em>type直接いじれば楽じゃーん。</em><br />
そう考えていた時代が僕にもありました。</p>



<h2 class="wp-block-heading">IE兄弟はinput要素のtype属性をいじれないらしい</h2>



<p>ところがIEはinput要素のtype属性を弄ろうとするとエラーになります。<br />
その為jQueryでも、attr()で同様の処理を行おうとすると、以下の例外が投げられてきます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>type property can&#8217;t be changed</p>
</blockquote>



<p>HTML</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"password"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"foo"</span> /&gt;</span>
</code></span></pre>


<p>JavaScript</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">try</span> {
    $(<span class="hljs-string">"#foo"</span>).attr(<span class="hljs-string">"type"</span>, <span class="hljs-string">"text"</span> );
} <span class="hljs-keyword">catch</span>( e ){
    <span class="hljs-built_in">console</span>.log( e ); <span class="hljs-comment">// type property can't be changed</span>
}
</code></span></pre>


<p>cloneNode等で複製したオブジェクトでも同様なので、<br />
これを回避する為には手作業で要素の複製を行い、<br />
それでもって元の要素とスワップしなければならないみたいです。面倒ですね！</p>



<h2 class="wp-block-heading">textとpasswordを並べて表示/非表示をトグルする</h2>



<p>面倒なのは回避する事にして、<br />
<em>input[type=text]</em>と<em>input[type=password]</em>を並べておき<br />
表示/非表示を切り替える方向でやってみます。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TTSLF1EUU9I/AAAAAAAABJs/bdY4vXqHq84/201101180318.png" alt="textとpasswordを並べて表示/非表示をトグルする"/></figure>



<p></p>



<ol class="wp-block-list">
<li>input[type=text]とinput[type=password]の入力内容を同期させる</li>



<li>チェックボックスのON/OFFでそれぞれの表示/非表示を切り替える</li>
</ol>



<h2 class="wp-block-heading">コード抜粋</h2>



<p>こんな感じになりました。</p>



<p><a href="http://jsfiddle.net/mach3ss/Dk448/">DEMO ( jsFiddle )</a></p>



<h3 class="wp-block-heading">HTML</h3>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"password"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"pswd"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"pswd"</span> /&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"pswd-text"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"pswd-text"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"display:none;"</span> /&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"checkbox"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"pswd-toggle"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"pswd-toggle"</span> <span class="hljs-attr">data-for</span>=<span class="hljs-string">"pswd"</span> /&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">for</span>=<span class="hljs-string">"pswd-toggle"</span>&gt;</span>パスワードを表示する<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
</code></span></pre>


<p><em>パスワード（#pswd）</em>の相方となる<em>テキストフィールド（#pswd-text）</em>を非表示にして設置。<br />
<em>チェックボックス（#pswd-toggle）</em>には、<em>data-for</em>属性で対象のID(pswd)を入れておきます。<br />
ちょうど、label要素のfor属性のように。</p>



<h3 class="wp-block-heading">JavaScript</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$.fn.extend({
    <span class="hljs-attr">togglePassword</span> : <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"> config </span>)</span>{
        option = $.extend({
            <span class="hljs-string">"postfix"</span> : <span class="hljs-string">"-text"</span>
        }, config );
        <span class="hljs-comment">// 入力内容を同期するfunction</span>
        sync = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
            <span class="hljs-keyword">var</span> i = <span class="hljs-keyword">this</span>.type.toUpperCase() === <span class="hljs-string">"PASSWORD"</span> ?
                <span class="hljs-keyword">this</span>.id + option.postfix :
                <span class="hljs-keyword">this</span>.id.replace( option.postfix, <span class="hljs-string">""</span> );
            $( <span class="hljs-string">"#"</span> + i ).val( $(<span class="hljs-keyword">this</span>).val() );
        };
        <span class="hljs-comment">// 表示/非表示を切り替えるfunction</span>
        toggle = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
            <span class="hljs-keyword">if</span>( <span class="hljs-keyword">this</span>.checked ){
                $.data( <span class="hljs-keyword">this</span>, <span class="hljs-string">"pswd"</span> ).hide();
                $.data( <span class="hljs-keyword">this</span>, <span class="hljs-string">"text"</span> ).show();
            } <span class="hljs-keyword">else</span> {
                $.data( <span class="hljs-keyword">this</span>, <span class="hljs-string">"pswd"</span> ).show();
                $.data( <span class="hljs-keyword">this</span>, <span class="hljs-string">"text"</span> ).hide();
            }
        };
        <span class="hljs-keyword">this</span>.each( <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
            <span class="hljs-keyword">var</span> id, pswd, text, check, handlers;
            id = <span class="hljs-keyword">this</span>.getAttribute( <span class="hljs-string">"data-for"</span> );
            pswd = $(<span class="hljs-string">"#"</span> + id );
            text = $(<span class="hljs-string">"#"</span> + id + option.postfix );
            check = $(<span class="hljs-keyword">this</span>);
            <span class="hljs-comment">// テキストフィールドのイベント</span>
            handlers = { <span class="hljs-attr">keyup</span> : sync, <span class="hljs-attr">blur</span> : sync };
            pswd.bind( handlers );
            text.bind( handlers );
            <span class="hljs-comment">// チェックボックスのイベント</span>
            $.data( <span class="hljs-keyword">this</span>, <span class="hljs-string">"pswd"</span>, pswd );
            $.data( <span class="hljs-keyword">this</span>, <span class="hljs-string">"text"</span>, text );
            $(<span class="hljs-keyword">this</span>).click( toggle );
            <span class="hljs-comment">// 初期化</span>
            toggle.apply( <span class="hljs-keyword">this</span> );
        });
    }
});

$(<span class="hljs-string">"#pswd-toggle"</span>).togglePassword();
</code></span></pre>


<p>IEスルーするなら恐ろしく短いコードで済みそうですが…残念。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>2010年に出会った愛すべきリソース達*11</title>
		<link>https://blog.mach3.jp/2010/12/29/lovely-resources-2010.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 29 Dec 2010 08:46:00 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Resources]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Yahoo]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1284</guid>

					<description><![CDATA[2010年も残りわずか。CS5やらHTML5やらiナントカやら忙しい1年でしたが、 せっかくなので今年出会った素晴らしいリソースを振り返ってみます。 @anywhere Welcome to @Anywhere &#124; de [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>2010年も残りわずか。CS5やらHTML5やらiナントカやら忙しい1年でしたが、<br />
せっかくなので今年出会った素晴らしいリソースを振り返ってみます。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TRrzte8LnJI/AAAAAAAABH4/5TZJ_Ar76fI/201012291739.png" alt="Great Resources 2010"/></figure>



<p></p>



<span id="more-1284"></span>



<h2 class="wp-block-heading">@anywhere</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TI-FvKGTMFI/AAAAAAAABB4/DWq3p5mDXQM/201009142322.png" alt="@anywhere"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://dev.twitter.com/anywhere">Welcome to @Anywhere | dev.twitter.com</a></h3>



<p>Twitterの機能がどのサイトでも活用出来るようになるJavaScriptリソース。<br />
認証からタイムライン読み込み、パーツのレンダリングまで。<br />
連携サービスを組むならおさえておきたい。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/04/twitter-anywhere.html">ブログで@anywhereを試してみた！ ～ どこでもTwitter | Mach3.laBlog</a></li>



<li><a href="/2010/09/auth-anywhere.html">@anywhereで認証してみる備忘録 | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">jsLint</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TAuiwlC67MI/AAAAAAAAA7k/f0V7_v6GCEM/s800/201006062143.png" alt="jsLint"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://www.jslint.com/">JSLint, The JavaScript Code Quality Tool</a></h3>



<p>JavaScriptをストリクトに書く為のチェックツール。<br />
前はWSH版がダウンロード出来たんですけど見つからなくなってますね。<br />
<a href="https://github.com/douglascrockford/JSLint">Github</a>のを使ってなんやかんやするんでしょうか。こんど試してみよう。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/06/jslint.html">JSLintでストリクトなJavaScriptを書く | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">LESS</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TC9OtbZAqRI/AAAAAAAAA9c/UGfbYnLsdWc/s800/201007032351.png" alt="LESS"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://lesscss.org/">LESS &#8211; Leaner CSS</a></h3>



<p>変数に代入したり、ネストしたり、ミックスインしたり…<br />
CSSコーディングが素晴らしくスピードアップするCSS開発キット。<br />
エディタからも簡単に呼び出せるので重宝しています。<br />
似たようなプロジェクトに「<a href="http://sass-lang.com/">Sass</a>」というのもあります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/07/less-on-ruby-windows.html">ゼロから導入する、Ruby LESS for Windows ～素晴らしいCSSソリューション | Mach3.laBlog</a></li>



<li><a href="/2010/08/css3-snippet-for-less.html">CSS3対応の為のLESSスニペットメモ | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">jsDoc Toolkit</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TExlCdWAOSI/AAAAAAAAA_Y/oT60gg9HcrM/s800/201007260122.png" alt="jsDoc Toolkit"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://code.google.com/p/jsdoc-toolkit/">jsdoc-toolkit &#8211; Project Hosting on Google Code</a></h3>



<p>JavaScript版のドキュメント生成ツール。<br />
こちらもエディタから使うと大変便利。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/07/jsdoctoolkit-from-notepad.html">エディタ（Notepad++）からJSDoc Toolkitを使ってみる | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">Modernizr</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TEb6RR1X0LI/AAAAAAAAA-4/_5uGmJsiuwg/s800/201007212239.png" alt="Modernizr"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://www.modernizr.com/">Modernizr</a></h3>



<p>HTML5の新機能等が使用可能かどうかを判別してくれるライブラリ。<br />
判別の結果はhtml要素のクラスとして出力してくれる他、<br />
メンバを直接参照する事でも結果を知ることが出来ます。</p>



<p>便利なスクリプトなのですが、最近<a href="http://headjs.com/">Head.js</a>に持って行かれた感が…<br />
こちらは未検証なのでまた後ほどレポートを。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/07/modernizr-js.html">「Modernizr」 モダンなクロスブラウザCSSの為の支援スクリプト | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">Raphael / gRaphael</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TDwr1qEithI/AAAAAAAAA-Q/6t9diGuL98g/s800/201007131656.png" alt="gRaphael"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://g.raphaeljs.com/">gRaphaël—Charting JavaScript Library</a></h3>



<p><a href="http://raphaeljs.com/index.html">Raphael</a>は、ベクターグラフィックを簡単に扱うためのJavaScriptライブラリ。<br />
gRaphaelはそれをグラフ描画用に拡張する為のプラグインです。<br />
投稿した時はまだドキュメントが不備でしたが…今見に行きましたがまだありませんでした！</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/07/graphael.html">実験室: gRaphaëlでインタラクティブなグラフを描いてみる | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">IE9.js</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TJLUD970GRI/AAAAAAAABCU/oxPr4vt8h9U/201009171134.png" alt="IE9.js"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://code.google.com/p/ie7-js/">ie7-js &#8211; Project Hosting on Google Code</a></h3>



<p>プロジェクト名としては「IE7.js」ですが、<br />
その中に含まれるIE8.js、IE9.jsやie7-squish.jsが結構便利。<br />
JavaScriptが動く事が前提になりますが、擬似クラスやHTML5の新要素の対応もしてくれます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/09/ie9js-clearfix.html">IE9.jsで実現するシンプルなclearfixとその他の恩恵 | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">YUI Compressor</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TMmzBvs9ayI/AAAAAAAABEs/ZY7JUy71f0w/201010290014.png" alt="YUI Compressor"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a></h3>



<p>Yahoo!がおくる、JavaScriptやCSSを圧縮するツール。<br />
Webページのパフォーマンス向上を図るのに欠かせません。<br />
ご一緒に<a href="http://developer.yahoo.com/yslow/">YSlow</a>（Firebugプラグイン）も是非。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/10/yui-compressor-bat.html">YUI Compressorをお手軽にするバッチファイルを書いてみる | Mach3.laBlog</a></li>



<li><a href="/2010/11/quick-tip-for-site-performance.html">今すぐ出来る、ちょこざいなサイトパフォーマンスアップ | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">mustache</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TKnnq0vc63I/AAAAAAAABDE/OOIY9hnndPo/201010042339.png" alt="mustache"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://mustache.github.com/">{{ mustache }}</a></h3>



<p>マルチランゲージテンプレートエンジン！（言い切った！）<br />
様々な言語に対応する、シンプルで使いやすいテンプレートエンジンです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/10/mustache-template-engine.html">どこでも活躍できるテンプレートエンジン「Mustache」 | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">Sammy.js</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TJjDmzzS06I/AAAAAAAABCw/rriMLBnT_6c/201009212338.png" alt="Sammy.js"/></figure>



<p></p>



<h3 class="wp-block-heading"><a href="http://code.quirkey.com/sammy/">Sammy.js</a></h3>



<p>Ajaxコンテンツのセッションを操る為のjQueryプラグイン。<br />
要するに、location.hashによるルーティングをウマイこと処理してくれるスクリプトです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/09/sammy-js.html">Sammy.jsでAjaxコンテンツのセッションを操る | Mach3.laBlog</a></li>
</ul>
</blockquote>



<h2 class="wp-block-heading">jQueryMobile</h2>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TOIVnTG4iGI/AAAAAAAABFc/mpVknEjCqqU/201011161309.png" alt="jQueryMobile"/></figure>



<p></p>



<ul class="wp-block-list">
<li><a href="http://jquerymobile.com/">jQuery Mobile | jQuery Mobile</a></li>
</ul>



<p>jQueryの作者が送る、スマートフォン向けのjQueryUIのようなもの。<br />
ルールに従ったマークアップをするだけで、各要素をそれっぽくレンダリングしてくれます。<br />
1月に正式版がリリースされる予定。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><a href="/2010/11/jquery-mobile-for-beginner.html">はじめてのjQueryMobile | Mach3.laBlog</a></li>
</ul>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>結構色々ありましたね、2010年。<br />
来年もまた素晴らしい技術に出会えますように。</p>



<p>皆様よいお年を！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>jQueryの$(document).readyをセレクタで使いたい</title>
		<link>https://blog.mach3.jp/2010/12/07/element-on-ready-by-jquery.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 07 Dec 2010 02:00:03 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1220</guid>

					<description><![CDATA[jQueryでDOMのロード完了を検知するのに使われる$(document).readyですが、 これを未挿入の要素に対して使いたい。そんなメモログ。 $(document).ready()について まず、$(docum [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>jQueryでDOMのロード完了を検知するのに使われる$(document).readyですが、<br />
これを未挿入の要素に対して使いたい。そんなメモログ。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TP0mLvrsSjI/AAAAAAAABG4/044qgwcOQhU/201012070306.png" alt="jQueryの$(document).readyをセレクタで使いたい"/></figure>



<p></p>



<span id="more-1220"></span>



<h2 class="wp-block-heading">$(document).ready()について</h2>



<p>まず、$(document).ready()について。<br />
引数に渡された関数が、HTMLのDOM構築が完了した時点で呼ばれるという便利機能。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-built_in">document</span>).ready(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-comment">// DOMロード完了時に実行される</span>
    alert(<span class="hljs-string">"Hello, world !"</span>);
});
</code></span></pre>


<p>jQueryを使っていれば一度はお目にかかる定型文ですね。<br />
仕組みについては、こちらの記事が大変詳しく書いてありました。<br />
<a href="http://hkom.blog1.fc2.com/blog-entry-614.html">$(document).ready(f)、bindReady()、$.ready() 解読 ──jQuery解読(32)</a></p>



<h2 class="wp-block-heading">$( selector ).onReady();</h2>



<p>で、今回は&#8221;document&#8221;が入っている部分にセレクタを渡して、<br />
その要素がJSで動的に挿入されたタイミングで関数を実行させる… というのが趣旨です。</p>



<p>書いてみたのはこちら。<br />
<a href="https://github.com/mach3/js-jquery-onready">mach3/js-jquery-onready &#8211; GitHub</a></p>



<h3 class="wp-block-heading">簡単な使い方</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">"#MyContainer"</span>).onReady( <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">this</span>.append(<span class="hljs-string">"Hello, world!"</span>);
});
$(<span class="hljs-string">"#hoge"</span>).click( <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
    $(<span class="hljs-string">"&lt;div /&gt;"</span>).attr(<span class="hljs-string">"id"</span>, <span class="hljs-string">"MyContainer"</span>).appendTo(<span class="hljs-string">"body"</span>);
});
</code></span></pre>


<p>最初は#MyContainerは存在せず、#hogeボタンをクリックする事でbodyに追加されます。<br />
追加されるとそれを検知して、#MyContainerに&#8221;Hello, world!&#8221;が表示されます。</p>



<h3 class="wp-block-heading">オプション</h3>



<p>内部的には、お察しの通りsetTimeoutでまわしてるだけですが、<br />
そのインターバルと制限時間を第二引数のオプションで設定する事も出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">"#MyContainer"</span>).onReady(
    <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-comment">// Do anything.</span>
    },
    {
        <span class="hljs-string">"limit"</span> : <span class="hljs-number">30000</span>, <span class="hljs-comment">// 制限時間（ミリ秒）</span>
        <span class="hljs-string">"delay"</span> : <span class="hljs-number">1000</span> <span class="hljs-comment">// インターバル（ミリ秒）</span>
    }
);
</code></span></pre>


<dl>
<dt>limit : number = 60000</dt>
<dd>制限時間。これを超えるとonReadyは諦めます。デフォルトは1分。</dd>
<dt>delay : number = 500</dt>
<dd>setTimeoutのインターバル。デフォルトは0.5秒。</dd>
</dl>



<h2 class="wp-block-heading">いつ使うの？</h2>



<p>さして出番は多くないかもしれませんが、<br />
例えばscript要素を差し込むタイプのサードパーティのウィジェット等で、<br />
ページ最下部の非表示ブロック内でロードさせておいて、<br />
ロードされたら本来あるべき場所にappendする、等。<br />
多少のページパフォーマンスの向上に役立つかもしれませんね？</p>



<p>あとは、同じくウィジェットの要素からいろいろ抜き取って加工して表示させたい場合などに。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>はじめてのjQueryMobile</title>
		<link>https://blog.mach3.jp/2010/11/16/jquery-mobile-for-beginner.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 16 Nov 2010 05:34:54 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Mobile]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1114</guid>

					<description><![CDATA[先月10月にアルファリリースされ、つい先日Alpha2が公開されたjQueryMobile。 新たなモバイル向けフレームワークとして期待が高まりますが、 今日はそんなjQueryMobileを、極めてザックリと紹介してみ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>先月10月にアルファリリースされ、つい先日Alpha2が公開されたjQueryMobile。<br />
新たなモバイル向けフレームワークとして期待が高まりますが、<br />
今日はそんなjQueryMobileを、極めてザックリと紹介してみたいと思います。<br />
だいたいのイメージを掴んで頂ければ幸いです。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TOIVnTG4iGI/AAAAAAAABFc/mpVknEjCqqU/201011161309.png" alt="jQuery Mobile"/></figure>



<p></p>



<span id="more-1114"></span>



<p>公式 : <a href="http://jquerymobile.com/">jQuery Mobile | jQuery Mobile</a></p>



<h2 class="wp-block-heading">jQueryではなく、jQueryUIのモバイル版</h2>



<p>と、言うべきでしょうか？</p>



<p>jQueryMobileが提供してくれるのは、<br />
スマートフォン向けのテーマスタイルシートと、<br />
それをより簡単にレンダリングする為の仕組みです。</p>



<p>はじめ勘違いしていたのですが、<br />
jQueryをモバイル向けにチューンした物ではないので注意。<br />
使用の際にはjQueryを一緒に読み込む必要があります。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.css"</span> /&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"http://code.jquery.com/jquery-1.4.4.min.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>jQueryUIのように、CSSとjQuery、<br />
そしてjQueryMobile本体を読み込んで準備完了です。</p>



<h2 class="wp-block-heading">Hello, world !</h2>



<p>我々がしなければならないのは、HTMLをマークアップする事だけ。<br />
その際に、そのHTML要素をどのような見せ方をするのかを、<br />
<em>data-role</em>属性を使って指定してやります。</p>



<p>例えば、次の例はきわめてシンプルなページのテンプレートです。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"page"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"header"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Page Title<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"content"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Hello, world !<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"footer"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></span></pre>


<p>data-role属性はその名の通り、要素のrole（役割）を示します。<br />
基本的な構造は、pageの中にheader/content/footerが並び、<br />
contentの中にページの内容が流し込まれる感じ。<br />
普段idやclassを使ってマークアップするのと同じ感覚ですね。</p>



<p>こうしておくことで、jQueryMobileさんが適切なスタイルを適用してくれます。<br />
上の例なら、こんな感じに。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TOIVnn34rII/AAAAAAAABFg/lRZenuGdHBI/201011161307.png" alt="jQueryMobileでHello,World"/></figure>



<p></p>



<h2 class="wp-block-heading">jQueryMobileのページ遷移</h2>



<p>jQueryMobileのページ遷移は、特別何かを意識しなくても<br />
スマートフォン特有の右にスライドしていくトランジションを加えてくれます。<br />
もちろんトランジションの種類は変更可能。</p>



<p>リンクの種類も複数あります。例えば…</p>



<dl>
<dt>1) ページ内リンク</dt>
<dd>&#8220;#hoge&#8221;のようなハッシュによるページ内リンク。 トランジションで遷移します。</dd>
<dt>2) ページ外リンク</dt>
<dd>&#8220;hoge.html&#8221;のような通常のリンク。 Ajaxで外部ファイルロード後、トランジションで遷移します。</dd>
<dt>3) 明示された外部リンク</dt>
<dd>rel=&#8221;external&#8221; を指定したものは、 トランジションを使用せずに画面ごとリフレッシュします。</dd>
</dl>



<p>1)について補足で説明しておくと、<br />
ひとつのHTMLの中に任意のIDを持つ複数のpageコンテナを配置し、<br />
ページ内リンクで遷移する事が出来ます。<br />
というより、「表示をトグルする」と表現したほうが分かりやすいのかもしれません。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"page"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"home"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"header"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Home<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"content"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#hoge"</span>&gt;</span>hoge<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#fuga"</span>&gt;</span>fuga<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>

<span class="hljs-comment">&lt;!-- page "hoge" --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"page"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"hoge"</span>&gt;</span>
<span class="hljs-comment">&lt;!--中略--&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>

<span class="hljs-comment">&lt;!-- page "fuga" --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"page"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"fuga"</span>&gt;</span>
<span class="hljs-comment">&lt;!--中略--&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></span></pre>


<p>アルファバージョンという事もあり、ある条件下でスタイルが切れてしまったり、<br />
トランジションがうまくいかなかったりと、不具合が色々潜んでます。<br />
試す場合は、ご覚悟を。</p>



<h2 class="wp-block-heading">色々なコンポーネント</h2>



<p>jQueryMobileには、ボタンをはじめとする様々なコンポーネントが揃っています。<br />
コンポーネントもコンテナ同様、data-roleをはじめとする<br />
様々なdata-*属性で見た目/振る舞いを指定します。<br />
ほんの一部をご紹介してみると…</p>



<h3 class="wp-block-heading">ボタン</h3>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TOIVoC1ZXvI/AAAAAAAABFk/cPy-Nf6hukY/201011161250.png" alt="ボタン"/></figure>



<p></p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#hoge"</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"button"</span> <span class="hljs-attr">data-inline</span>=<span class="hljs-string">"true"</span>&gt;</span>BUTTON<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">表示トグル可能なブロック</h3>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TOIVoKSg7PI/AAAAAAAABFo/f4QaxJKl9Mk/201011161254.png" alt="Collapsible"/></figure>



<p></p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"collapsible"</span> <span class="hljs-attr">data-collapsed</span>=<span class="hljs-string">"true"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h3</span>&gt;</span>いないいない<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>ばぁ！<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">フリップスイッチ</h3>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TOIVoxFWFWI/AAAAAAAABFs/ej9uEi3wE8M/201011161256.png" alt="フリップスイッチ"/></figure>



<p></p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">select</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"slider"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"off"</span>&gt;</span>Off<span class="hljs-tag">&lt;/<span class="hljs-name">option</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"on"</span>&gt;</span>On<span class="hljs-tag">&lt;/<span class="hljs-name">option</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">select</span>&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">ネストされたリスト</h3>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TOIVtJ5aPaI/AAAAAAAABFw/H8_YJg7BScc/201011161305.png" alt="ネストされたリスト"/></figure>



<p></p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ul</span> <span class="hljs-attr">data-role</span>=<span class="hljs-string">"listview"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>JavaScript
        <span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>jQuery<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>Prototype.js<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>YUI<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>ExtJS<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>MooTools<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>Dojo<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>PHP
        <span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>CakePHP<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>CodeIgniter<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>Zend Framework<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>Symfony<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>ちぃたん<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
</code></span></pre>


<h2 class="wp-block-heading">まとめ</h2>



<p>と、ほんのさわりだけですが、紹介させていただきました。<br />
まだアルファバージョンなのでバグも多く、疑問が残る部分も幾つかありますが、<br />
1月に1.0をリリースするそうなので、チェックしておきたいですね。</p>



<p>さ、次はSenchaも試してみるべきですね…<br />
<a href="http://www.extjs.co.jp/">Ext Japan &#8211; モバイルJavaScript &#8211; Ext JS、Ext GWT、Sencha Touch</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>どこでも活躍できるテンプレートエンジン「Mustache」</title>
		<link>https://blog.mach3.jp/2010/10/05/mustache-template-engine.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 05 Oct 2010 03:34:25 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mustache]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Template]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=807</guid>

					<description><![CDATA[世にテンプレートエンジンは多くあれど、 これ程多くの場所で活躍出来るテンプレートエンジンはなさそうです。 本稿はそんなテンプレートエンジン「Mustache」の試用レビューです。 Mustacheについて {{ must [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>世にテンプレートエンジンは多くあれど、<br />
これ程多くの場所で活躍出来るテンプレートエンジンはなさそうです。<br />
本稿はそんなテンプレートエンジン「Mustache」の試用レビューです。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TKnnq0vc63I/AAAAAAAABDE/OOIY9hnndPo/201010042339.png" alt="Mustache"/></figure>



<p></p>



<span id="more-807"></span>



<h2 class="wp-block-heading">Mustacheについて</h2>



<p><a href="http://mustache.github.com/">{{ mustache }}</a></p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TKnnq894ymI/AAAAAAAABDI/hGayGzxelqI/201010042340.png" alt="Mustache"/></figure>



<p></p>



<p>&#8220;Mustache&#8221;というのは口ひげを指す言葉で、「ますたっしゅ」とか発音する様です。<br />
テンプレートタグに使用されている「{」が口ひげに似てるので、そこらへんが由来っぽいです。</p>



<p>公式を見れば分かるとおり、Mustacheは1言語にとどまらず、<br />
様々な言葉で開発されているテンプレートエンジンです。<br />
知らない言語も入ってたりしますね…。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Available in Ruby, JavaScript, Python, Erlang, PHP, Perl, Go, Lua, ooc, C++, ActionScript, Java, ColdFusion, Scala, and for node.js.</p>
</blockquote>



<h2 class="wp-block-heading">簡単な使い方</h2>



<p>JavaScript版のmustache.jsで簡単な使い方を紹介してみます。</p>



<h3 class="wp-block-heading">最もシンプルな例</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> template = <span class="hljs-string">'Hello, {{name}}!'</span>;
<span class="hljs-keyword">var</span> html = Mustache.to_html( template, {
    <span class="hljs-attr">name</span>:<span class="hljs-string">"mach3"</span>
});
alert(html); <span class="hljs-comment">// "Hello, mach3!"</span>
</code></span></pre>


<p>テンプレートにデータを渡して出力するには、<em>Mustache.to_html()</em>メソッドを使用します。<br />
第一引数はテンプレートの文字列、第二引数は渡すデータ(Object)です。<br />
基本的に<em>{{</em>と<em>}}</em>で囲った物が、テンプレートタグとして認識されます。</p>



<h3 class="wp-block-heading">条件分岐</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> template = <span class="hljs-string">'{{#isError}}エラーが発生しました。{{/isError}}'</span>;
<span class="hljs-keyword">var</span> html = Mustache.to_html( template, {
    <span class="hljs-attr">isError</span>:<span class="hljs-literal">true</span>
});
</code></span></pre>


<p>dataの値がtrueである場合に<br />
<em>{{#data}}</em>と<em>{{/data}}</em>に囲まれた部分が処理されます。<br />
ちなみに条件を逆にしたい場合は、<em>#</em>の代わりに<em>^</em>を使用します。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> template = <span class="hljs-string">'{{^isError}}正常です。{{/isError}}'</span>;
</code></span></pre>


<h3 class="wp-block-heading">ループ処理</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> template = <span class="hljs-string">'&lt;ul&gt;{{#fruits}}&lt;li&gt;{{.}}&lt;/li&gt;{{/fruits}}&lt;/ul&gt;'</span>;
<span class="hljs-keyword">var</span> html = Mustache.to_html( template, {
    <span class="hljs-attr">fruits</span>:&#91;<span class="hljs-string">"apple"</span>,<span class="hljs-string">"orange"</span>,<span class="hljs-string">"banana"</span>]
});
</code></span></pre>


<p>記法は条件分岐と同じですが、dataが配列等の可算なオブジェクトだった場合は<br />
その数だけ<em>{{#data}}</em>と<em>{{/data}}</em>に囲まれた部分が処理されます。<br />
<em>{{.}}</em>とする事で現在の値にアクセス出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> template = <span class="hljs-string">'&lt;ul&gt;{{#fruits}}&lt;li&gt;{{name}} : &amp;yen;{{price}}&lt;/li&gt;{{/fruits}}&lt;/ul&gt;'</span>;
<span class="hljs-keyword">var</span> html = Mustache.to_html( template, {
    <span class="hljs-attr">product</span>:&#91;
        { <span class="hljs-attr">name</span>:<span class="hljs-string">"apple"</span>, <span class="hljs-attr">price</span>:<span class="hljs-number">100</span> },
        { <span class="hljs-attr">name</span>:<span class="hljs-string">"orange"</span>, <span class="hljs-attr">price</span>:<span class="hljs-number">75</span> },
        { <span class="hljs-attr">name</span>:<span class="hljs-string">"banana"</span>, <span class="hljs-attr">price</span>:<span class="hljs-number">50</span> }
    ]
});
</code></span></pre>


<p>もう少し複雑な例です。<br />
配列の値がオブジェクトである時は、ループ内で直接nameやpriceの値にアクセス出来ます。<br />
一覧を出力する場合等はこの方法を選択する事になるでしょう。</p>



<h3 class="wp-block-heading">コメントアウト</h3>


<pre class="wp-block-code"><span><code class="hljs language-xml">var template = '<span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>超音速。{{! この中はスルーされます }}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>'
</code></span></pre>


<p><em>{{! &#8230; }}</em>とすると、その中身はコメントと認識されてスルーされます。</p>



<p>さらに高度なテンプレートタグについては、GithubのREADME/Manualをご覧ください。</p>



<ul class="wp-block-list">
<li><a href="http://github.com/janl/mustache.js">janl&#8217;s mustache.js at master &#8211; GitHub</a> </li>



<li><a href="http://mustache.github.com/mustache.5.html">mustache(5) &#8212; Logic-less templates.</a> </li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>必要な機能が十分に備わっているのは勿論、<br />
どの言語を使用しても同じ記法でテンプレートが書けるというのは強みですね。<br />
しかも、特にWeb屋が扱う言語は概ね網羅している様子。<br />
非常に有用なライブラリと思いますが、如何でしょうか。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
