<?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>Plugin &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/plugin/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Fri, 26 Jul 2013 01:47:06 +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>日付を便利に操作するためのJavaScriptライブラリ色々</title>
		<link>https://blog.mach3.jp/2013/07/26/js-libraries-for-date.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 26 Jul 2013 01:47:06 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Plugin]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3220</guid>

					<description><![CDATA[JavaScriptには日付を扱う為の &#8220;Date&#8221; オブジェクトがありますが、正直なところこれはあまり親切ではありません。 そこで、JavaScriptの日付周りで楽をするためのライブラリのメモ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>JavaScriptには日付を扱う為の &#8220;Date&#8221; オブジェクトがありますが、正直なところこれはあまり親切ではありません。 そこで、JavaScriptの日付周りで楽をするためのライブラリのメモをここに。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-ZfOlO8juvhA/UfF2iaSilgI/AAAAAAAACJA/15V3PFD4xMs/s400/20130726-00.png" alt="日付を便利に操作するためのJavaScriptライブラリ色々"/></figure>



<p></p>



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



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



<h3 class="wp-block-heading"><a href="http://arshaw.com/xdate/">XDate &#8211; A Modern JavaScript Date Library</a></h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-0BY8CdPA_uM/UfFwLzMpCuI/AAAAAAAACIg/znpBKW8dvA0/s500/20130726-02.png" alt="XDate - A Modern JavaScript Date Library"/></figure>



<p></p>



<p>Dateをもっと便利にした <em>XDateオブジェクト</em> を実装するライブラリです。 使い方はDateとほとんど変わらず、XDateに引数を渡して初期化して使います。</p>



<p>XDateオブジェクトは、DateにあるsetTimeやgetFullYearなどのメソッドを継承している他、 日付の足し算を行ったり、差分を計算したり等便利なメソッドが沢山生えています。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> d = <span class="hljs-keyword">new</span> XDate(<span class="hljs-number">1977</span>, <span class="hljs-number">10</span>, <span class="hljs-number">25</span>); <span class="hljs-comment">// 1977/11/25のXDateオブジェクトを生成</span>
d.addDays(<span class="hljs-number">14</span>); <span class="hljs-comment">// 14日足してみる</span>
d.diffYears(<span class="hljs-keyword">new</span> XDate()); <span class="hljs-comment">// 今日との差分を取得する</span>
d.toString(<span class="hljs-string">"yyyy年M月d日 HH:mm"</span>); <span class="hljs-comment">// フォーマットした文字列を取得</span>
</code></span></pre>


<p>Dateにないけど欲しかった機能が一通り手に入り、 且つDateの実装からあまり離れていないので使いやすいです。 大抵の物はこれでカバーできそうですね。</p>



<p>また、あまり世話を焼かないタイプのライブラリなので、サイズも小さくまとまっています。</p>



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



<h3 class="wp-block-heading"><a href="http://momentjs.com/">Moment.js | Parse, validate, manipulate, and display dates</a></h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-nEDN4FP78eg/UfFwLx9QkYI/AAAAAAAACIg/n8EGBVTMl_U/s500/20130726-01.png" alt="Moment.js | Parse, validate, manipulate, and display dates in javascript."/></figure>



<p></p>



<p>こちらもDateオブジェクトのラッパーのMomentオブジェクトを実装するライブラリですが、 メソッド群はXDateと違ってDateオブジェクトを模した形にはなっていません。</p>



<p>Momentオブジェクトの初期化は new を使わずに <em>moment()</em> に引数を渡しておこないます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> m = moment(); <span class="hljs-comment">// 現在の日付時刻のMomentオブジェクト</span>
</code></span></pre>


<h3 class="wp-block-heading">多彩なパーサー</h3>



<p>そして注目すべきはその多彩なパーサーです。 引数に値を渡して日付・時刻を指定したMomentオブジェクトを生成出来るのはDateと同じですが、 moment() は様々な形式に対応する事ができます。</p>



<p>これもまだ一部ですが、例を挙げます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">moment(<span class="hljs-string">"1977/11/25"</span>); <span class="hljs-comment">// 文字列</span>
moment(&#91;<span class="hljs-number">1977</span>, <span class="hljs-number">10</span>, <span class="hljs-number">25</span>]); <span class="hljs-comment">// 配列</span>
moment(<span class="hljs-string">"1977-11-25"</span>, <span class="hljs-string">"YYYY-MM-DD"</span>); <span class="hljs-comment">// フォーマットを指定した文字列</span>
moment(<span class="hljs-string">"25-11-1977"</span>, &#91;<span class="hljs-string">"YYYY-MM-DD"</span>, <span class="hljs-string">"DD-MM-YYYY"</span>]); <span class="hljs-comment">// フォーマットを複数指定した文字列</span>
</code></span></pre>


<p>フォーマットの指定はすごく便利ですね。しかも配列で渡せば複数のフォーマットでチェックを行なってくれます。</p>



<h3 class="wp-block-heading">その他機能</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> now = moment();
now.add(<span class="hljs-string">"days"</span>, <span class="hljs-number">30</span>); <span class="hljs-comment">// 30日足す</span>
now.subtract(<span class="hljs-string">"days"</span>, <span class="hljs-number">90</span>); <span class="hljs-comment">// 90日引く</span>
now.format(<span class="hljs-string">"YYYY/MM/DD"</span>); <span class="hljs-comment">// フォーマット</span>
now.fromNow()); <span class="hljs-comment">// "2 months ago"</span>
</code></span></pre>


<p><em>fromNow()</em> はTwitter等のWebサービスでよく使われる <em>「〜時間前」</em> といった表現を簡単に実装してくれます。 デフォルトは英語ですが、同梱された言語ファイルで簡単に日本語化できます。親切。</p>



<p>その他にも、ここではとても紹介しきれない程に機能満載なライブラリです。 また、その分少しファイルサイズがかさんでしまう側面も。</p>



<h2 class="wp-block-heading">Humane-Dates</h2>



<h3 class="wp-block-heading"><a href="https://github.com/zachleat/Humane-Dates">zachleat/Humane-Dates</a></h3>



<p><em>「〜時間前」</em> のような表現を実装してくれる為だけの、非常にショートでシンプルなライブラリ。 &#8220;human&#8221; ではなく &#8220;humane&#8221; なので間違えぬよう。</p>



<p>cf) <a href="http://ejje.weblio.jp/content/humane">humaneの意味 &#8211; 英和辞典 Weblio辞書</a></p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">humaneDate(<span class="hljs-string">"1977/11/25"</span>); <span class="hljs-comment">// "36 years ago" （執筆時点）</span>
humaneDate(<span class="hljs-string">"1977/11/25"</span>, <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>()); <span class="hljs-comment">// 第二引数と比較ができる</span>
</code></span></pre>


<p>jQueryを読み込んでいれば、jQueryプラグインとしても機能するようです。</p>



<p>残念なのは、Moment.jsのように多言語化していないのと、 その為のインターフェイスを持ちあわせていない事。 日本語化する為には、コード内の <em>&#8220;lang&#8221;</em> オブジェクトを直接編集する必要があります。</p>



<p>単機能なのでコンパクトさが売りです。 コレだけが欲しい、という時には選択肢に入るかもしれません。</p>



<h2 class="wp-block-heading">node-date-utils</h2>



<h3 class="wp-block-heading"><a href="https://github.com/JerrySievert/node-date-utils">JerrySievert/node-date-utils</a></h3>



<p>node-data-utilsは、Dateオブジェクトを拡張する<a href="http://www23.atwiki.jp/sevenlives/pages/2505.html">Polyfill</a>です。 下の例はほんの一部ですが、Dateに追加される機能はシンプルで基本的な物です。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// スタティックなメソッド</span>
<span class="hljs-built_in">Date</span>.yesterday(); <span class="hljs-comment">// 昨日のDateオブジェクトを返す</span>
<span class="hljs-built_in">Date</span>.tomorrow(); <span class="hljs-comment">// 明日のDateオブジェクトを返す</span>

<span class="hljs-comment">// インスタンスのメソッド</span>
<span class="hljs-keyword">var</span> format = <span class="hljs-string">"YYYY年MM月DD日"</span>;
<span class="hljs-keyword">var</span> d = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>(<span class="hljs-number">1977</span>, <span class="hljs-number">10</span>, <span class="hljs-number">25</span>);
d.toFormat(format); <span class="hljs-comment">// 1977年11月25日</span>
<span class="hljs-comment">// 1年と2ヶ月と3日を足す</span>
d.add({
    <span class="hljs-attr">years</span>: <span class="hljs-number">1</span>,
    <span class="hljs-attr">months</span>: <span class="hljs-number">2</span>,
    <span class="hljs-attr">days</span>: <span class="hljs-number">3</span>
});
d.toFormat(format); <span class="hljs-comment">// 1979年1月28日</span>
</code></span></pre>


<p>add に負の数を渡せば引き算にもなります。</p>



<p>node-date-utilsはDateのprototypeを拡張する事になるので、 あなたの環境・主義がそれを許すならば使ってみても良いのではないでしょうか。</p>



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



<p>本当は <a href="https://code.google.com/p/datejs/">datejs</a> の実装が面白かったので紹介したかったのですが、 数年アップデートされておらず、試してみたもののうまく動かない物が多かったので、残念ながら諦めました。</p>



<p>日付の出力はWebサービス等で頻繁に行うと思いますので、 開発者の皆さんに感謝しつつ、できるだけ楽をしましょう。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ブロック要素の高さを行毎にあわせるjQueryプラグインを習作する</title>
		<link>https://blog.mach3.jp/2013/03/04/jquery-lineup.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 04 Mar 2013 04:20:38 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3018</guid>

					<description><![CDATA[既知の類似プラグインは多数あるこの課題ですが、ちょっと習作してみました。 横並びにレイアウトされたブロック要素の高さを揃えるライブラリです。 なにをしたいのか 例えば、フロートなどで横並びにした要素があって、それぞれの高 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>既知の類似プラグインは多数あるこの課題ですが、ちょっと習作してみました。 横並びにレイアウトされたブロック要素の高さを揃えるライブラリです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-TSd5WohPCGs/UTQfLChlnQI/AAAAAAAAB_w/TkFc4tMI7mI/s400/20130304-00.png" alt="ブロック要素の高さを行毎にあわせるjQueryプラグインを習作する"/></figure>



<p></p>



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



<h2 class="wp-block-heading">なにをしたいのか</h2>



<p>例えば、フロートなどで横並びにした要素があって、それぞれの高さを揃えたい時があります。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-lp97dUVlQBY/UTQfLKfMYUI/AAAAAAAAB_w/SiY77LGJ1WQ/s586/20130304-01.png" alt="ブロック要素の高さを行毎にあわせる"/></figure>



<p></p>



<p>こんな感じに。この処理をしてくれるライブラリを書いてみます。</p>



<h2 class="wp-block-heading">書いてみた物</h2>



<h3 class="wp-block-heading"><a href="http://mach3.github.com/jquery-lineup/">jQuery.lineUp</a></h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-u17jUX-izt0/UTQfLG7vKhI/AAAAAAAAB_w/JwEyWhSlHhM/s500/20130304-02.png" alt="jQuery.lineUp"/></figure>



<p><a href="http://mach3.github.com/jquery-lineup/">  </a></p>



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



<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">class</span>=<span class="hljs-string">"items"</span>&gt;</span>
    <span class="hljs-comment">&lt;!-- 異なるコンテンツ量のブロック達 --&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"item"</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">class</span>=<span class="hljs-string">"item"</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">class</span>=<span class="hljs-string">"item"</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">class</span>=<span class="hljs-string">"item"</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">class</span>=<span class="hljs-string">"item"</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>こんなスタイルが当たっているとします。</p>


<pre class="wp-block-code"><span><code class="hljs">.items {
    overflow: hidden;
}
.items .item {
    float: left;
    width: 200px;
    ...
}
</code></span></pre>


<p>この .item に対して整列の処理を行いたい場合は次のようにします。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">".item"</span>).lineUp();
</code></span></pre>


<p>オプションを渡して設定ができます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">".item"</span>).lineUp({
    <span class="hljs-attr">onResize</span> : <span class="hljs-literal">false</span>,
    <span class="hljs-attr">onFontResize</span> : <span class="hljs-literal">false</span>
});
</code></span></pre>


<p>オプションの詳細や、その他の細かい機能等は <a href="https://github.com/mach3/jquery-lineup/blob/master/README.md">README</a> をご参照ください。</p>



<p>また、Ajax等で要素の高さが変わるような場合、 非同期処理のコールバックなどで再度同じセレクタに対してlineUpを実行するとリフレッシュされます。（追記:2013/3/4）</p>



<h2 class="wp-block-heading">主な特徴</h2>



<p>JavaScriptでこの処理を行うにあたって色んなアプローチがあるとは思いますが、 注意してみたのは次のような点です。</p>



<h3 class="wp-block-heading">行毎に高さを設定する</h3>



<p>行毎に最大の高さを求めて、その高さにあわせてheightを更新します。</p>



<p>他の類似ライブラリ等では、行のグループ分けをクラス名で行う物などがありましたが、 今回は自動で行を判定して一行ずつ処理しています。 判定材料には jQuery.fn.position().top を使いました。</p>



<h3 class="wp-block-heading">ウィンドウサイズ・文字サイズ変更時に自動更新する</h3>



<p>これは他のライブラリでも多く実装されていますね。 設定で無効にする事もできます。</p>



<h3 class="wp-block-heading">script要素のdata-*属性でセレクタを設定する</h3>



<p>jquery-lineup.js を読み込んでいるscript要素のdata-lineup-selector属性を設定する事で、 そのセレクタに対してdomreadyのタイミングでjQuery.fn.lineUpを実行します。</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">src</span>=<span class="hljs-string">"assets/js/jquery-lineup.js"</span> <span class="hljs-attr">data-lineup-selector</span>=<span class="hljs-string">".item-a, .item-b"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>これは次の内容と同じ処理をします。</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">src</span>=<span class="hljs-string">"assets/js/jquery-lineup.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>&gt;</span><span class="javascript">
$(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    $(<span class="hljs-string">".item-a"</span>).lineUp();
    $(<span class="hljs-string">".item-b"</span>).lineUp();
});
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>JavaScriptファイルを連結してミニファイしたりする場合にはちょっとアレですが、 そうでない場合には便利かもしれないのでつけてみたオマケ機能です。</p>



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



<p>車輪の再発明ですね。</p>



<p>私自身、そういうレイアウトを組む必要性にあまり出会ったことはないのですが、 必要になった時にまた実用してみたいと思います。</p>



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



<dl>
<dt>2013/3/4</dt>
<dd>バグを見つけたので修正。ついでに非同期処理に関して追記</dd>
</dl>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TumblrPosts.js が新しくなりました</title>
		<link>https://blog.mach3.jp/2012/11/26/tumblrposts-js-1-3.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 26 Nov 2012 04:35:12 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tumblr]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2784</guid>

					<description><![CDATA[だいぶ前に書いた&#8221;TumblrPosts.js&#8220;ですが、意外と使われる方がいらっしゃったのと、 わりと適当だったり、よろしくない部分も多く見られたので少し見直しを行いました。 TumblrPost [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>だいぶ前に書いた&#8221;<a href="/2010/10/js-tumblrposts.html">TumblrPosts.js</a>&#8220;ですが、意外と使われる方がいらっしゃったのと、 わりと適当だったり、よろしくない部分も多く見られたので少し見直しを行いました。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TLff5hpTJ3I/AAAAAAAABDs/okRSs8lEXPM/201010151358.png" alt="TumblrPosts.js が新しくなりました"/></figure>



<p></p>



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



<h2 class="wp-block-heading">TumblrPostsとは</h2>



<ul class="wp-block-list">
<li><a href="http://mach3.github.com/js-tumblrposts.js/">Js-tumblrposts.js by mach3</a></li>
</ul>



<p>TumblrPostsは、「<a href="/2010/10/js-tumblrposts.html">Tumblrでタグリスト/新規投稿リストを出力してみる</a>」で紹介したjQueryプラグインです。</p>



<p>TumblrのAPIでは、最新のポストのリストを取得する事ができますが、 タグの一覧を取得する方法が無かった為、それを可能にする為のライブラリです。</p>



<h2 class="wp-block-heading">新しいTumblr APIについて</h2>



<p>今現在、Tumblrからは新しいAPIが提供されています。</p>



<ul class="wp-block-list">
<li><a href="http://www.tumblr.com/docs/en/api/v2">API | Tumblr</a> : 新しいAPI</li>



<li><a href="http://www.tumblr.com/docs/en/api/v1">Tumblr API v1 | Tumblr</a> : 古いAPI</li>
</ul>



<p>（投稿リストを取得する上で）大きく変わったのは<em>API Keyを必要とするようになった</em>点、 それから<em>最大取得件数が50件から20件に減った</em>点です。タグ自体のリストの取得機能は今見る限りではなさそうです。</p>



<p>TumblrPostsはAPIへのリクエストを繰り返して投稿リストをまとめていくタイプのライブラリなので、 最大取得件数が半分未満に減る事で、リクエスト回数が倍以上に膨れ上がる事になります。 投稿数が多いブログではパフォーマンスに大きな影響を与えるので、ちょっとまずそうですね。</p>



<p>そういったわけで、今回のTumblrPostsでも引き続き旧バージョンのAPIを使用します。 旧バージョンの提供がなくなったり、新バージョンでの機能強化があったらその時にまた考えます。</p>



<h2 class="wp-block-heading">新しいTumblrPostsの主な変更点</h2>



<p>基本的な使い方はそのままに、下記の点を修正しています。</p>



<ol class="wp-block-list">
<li>依存ライブラリをjQueryのみに（jquery.class.jsから切り離しました）</li>



<li>jQuery.on/off に対応（bind/unbindも引き続き使えます）</li>



<li>取得件数の設定を詳細に</li>



<li>getTags()のソートの初期設定を変更</li>
</ol>



<p>4について、旧バージョンでは投稿数での降順にソートされていましたが、 デフォルトではソートなしで、引数でソートの方向を指定出来るようにしました。</p>



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



<h3 class="wp-block-heading">基本的な使い方</h3>



<p>旧バージョンから大きな変更はありません。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// インスタンスを生成</span>
<span class="hljs-keyword">var</span> myTumblrPosts = <span class="hljs-keyword">new</span> TumblrPosts();

<span class="hljs-comment">// 読み込み完了時のイベントハンドラを設定</span>
myTumblrPosts.on(<span class="hljs-string">"complete"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">var</span> $ul, tags;

    <span class="hljs-comment">// getTags() : タグリストを取得</span>
    tags = <span class="hljs-keyword">this</span>.getTags();
    $ul = $(<span class="hljs-string">"&lt;ul&gt;"</span>);
    $.each(tags, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">i, tag</span>)</span>{
        $ul.append(
            $(<span class="hljs-string">"&lt;li&gt;"</span>).text(tag.name + <span class="hljs-string">" ("</span> + tag.count + <span class="hljs-string">")"</span>)
        );
    });

    $ul.appendTo( $(<span class="hljs-string">"#your-own-container"</span>) );
});

<span class="hljs-comment">// 読み込みを開始</span>
myTumblrPosts.run();
</code></span></pre>


<h3 class="wp-block-heading">タグリストのソート</h3>



<p><em>getTags()</em> の引数に <em>&#8220;asc&#8221;</em> または <em>&#8220;desc&#8221;</em> を渡すと、投稿数でソートを行います。<br />
引数がない場合は、ソートを行いません。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">myTumblrPosts.getTags(<span class="hljs-string">"asc"</span>); <span class="hljs-comment">// &lt;= 投稿数の少ない順にソート</span>
myTumblrPosts.getTags(<span class="hljs-string">"desc"</span>); <span class="hljs-comment">// &lt;= 投稿数の多い順にソート</span>
</code></span></pre>


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



<p>TumblrPosts.js のダウンロードはこちらから。</p>



<p>» <a href="http://mach3.github.com/js-tumblrposts.js/">Js-tumblrposts.js by mach3</a></p>



<p>昔書いた物の粗が見えるようになるのは、成長の証でしょうか。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>jQuery.class.jsをアップデートしました</title>
		<link>https://blog.mach3.jp/2012/02/01/jquery-class-js-1-2.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 01 Feb 2012 00:51:58 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery.class.js]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Prototype.js]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2274</guid>

					<description><![CDATA[ちょっと使う予定が出来たのもあり、jQuery.class.jsの内容を見直してみました。 jQuery.class.js Prototype.jsライクなclassを生成する為のシンプルなライブラリ。 cf ) jQu [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>ちょっと使う予定が出来たのもあり、jQuery.class.jsの内容を見直してみました。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TKHxrRN3cwI/AAAAAAAABC4/YrmxwaVzbLQ/201009282244.png" alt="jQuery.class.jsをアップデートしました"/></figure>



<p></p>



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



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



<ul class="wp-block-list">
<li><a href="https://github.com/mach3/js-jquery-class">mach3/js-jquery-class &#8211; GitHub</a></li>
</ul>



<p>Prototype.jsライクなclassを生成する為のシンプルなライブラリ。<br />
cf ) <a href="https://blog.mach3.jp/2010/09/jquery-class-js.html">jQueryでPrototype.js風のクラス定義をしてみる | Mach3.laBlog</a></p>



<h2 class="wp-block-heading">更新内容</h2>



<ul class="wp-block-list">
<li>jQuery.on/off()でイベントを扱えるようにしました</li>
</ul>



<p>これだけです。<br />
jQuery 1.7+ で使えるようになったon/off()メソッドに対応しました。<br />
従来通りbind/unbindも使えます。<br />
また、あわせて例示を大きく改めました</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> Data = Class.create();
Data.prototype = {
    <span class="hljs-attr">EVENT_ITEM_ADDED</span> : <span class="hljs-string">"item_added"</span>,
    <span class="hljs-attr">items</span> : &#91;],
    <span class="hljs-attr">addItem</span> : <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
       <span class="hljs-keyword">for</span>(i <span class="hljs-keyword">in</span> <span class="hljs-built_in">arguments</span>){
          <span class="hljs-keyword">this</span>.items.push(<span class="hljs-built_in">arguments</span>&#91;i]);
       }
       <span class="hljs-keyword">this</span>.trigger(<span class="hljs-keyword">this</span>.EVENT_ITEM_ADDED);
    },
    <span class="hljs-attr">getItemCount</span> : <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
       <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.items.length;
    }
};

<span class="hljs-keyword">var</span> myData = <span class="hljs-keyword">new</span> Data();
<span class="hljs-keyword">var</span> onAdded = <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">"Items added. I have "</span> + <span class="hljs-keyword">this</span>.getItemCount() + <span class="hljs-string">" items now."</span>);
};

<span class="hljs-comment">/**
 * on()でイベントリスナの追加
 * bind()でも可
 */</span>
myData.on(myData.EVENT_ITEM_ADDED, onAdded);
myData.addItem(<span class="hljs-string">"hoge"</span>); <span class="hljs-comment">// =&gt; Items added. I have 1 items now.</span>
myData.addItem(<span class="hljs-string">"fuga"</span>,<span class="hljs-string">"foo"</span>,<span class="hljs-string">"bar"</span>); <span class="hljs-comment">// =&gt; Items added. I have 4 items now.</span>

<span class="hljs-comment">/**
 * off()でイベントリスナの解除
 * unbind()でも可
 */</span>
myData.off(myData.EVENT_ITEM_ADDED, onAdded);
myData.addItem(<span class="hljs-string">"piyo"</span>); <span class="hljs-comment">// (nothing occurs)</span>
</code></span></pre>


<p>また、少し自分でまともに運用してみて、欲しいメソッドがあれば新たに生やすかもしれません。<br />
何かありましたらどうぞ。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sublime TextとNettuts+ Fetchで音速のスタートアップ</title>
		<link>https://blog.mach3.jp/2012/01/10/sublime-text-and-nettuts-fetch.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 10 Jan 2012 01:00:05 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Editor]]></category>
		<category><![CDATA[Nettuts+ Fetch]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Sublime Text]]></category>
		<category><![CDATA[Vim]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2251</guid>

					<description><![CDATA[Sublime Textは高機能でマルチプラットフォームなプログラミングエディタです。 この度リリースされたSublime Text向けのプラグイン「Nettuts+ Fetch」が素敵だったので エディタも含めてご紹介 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="http://www.sublimetext.com/">Sublime Text</a>は高機能でマルチプラットフォームなプログラミングエディタです。<br />
この度リリースされたSublime Text向けのプラグイン「<a href="http://net.tutsplus.com/articles/news/introducing-nettuts-fetch/">Nettuts+ Fetch</a>」が素敵だったので<br />
エディタも含めてご紹介致します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-ok1PDNz6-Tg/Twrvn1DTQoI/AAAAAAAABc4/LDpDFE46P_o/s400/20110109-00.png" alt="Sublime TextとNettuts+ Fetchで音速のスタートアップ"/></figure>



<p></p>



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



<h2 class="wp-block-heading">Nettuts+ Fetch ってなに？</h2>



<ul class="wp-block-list">
<li><a href="http://net.tutsplus.com/articles/news/introducing-nettuts-fetch/">Introducing Nettuts+ Fetch | Nettuts+</a></li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-3sQue-aeDvI/TwrvnBILq5I/AAAAAAAABc4/1LtUqyGLyGk/s500/20110109-01.png" alt="Introducing Nettuts+ Fetch"/></figure>



<p></p>



<p><em>Nettuts+ Fetch</em>は、名前の通り、Nettuts+からリリースされたSublime Text用のプラグインで、<br />
外部リソースを簡単なコマンドで手元にpullする事ができます。</p>



<p>例えば、普段からよく使うjQueryやリセット用のCSS、<br />
常用するフレームワークや、Wordpress等のCMS等、<br />
設定さえしておけば、コマンド一発（正確には三発）でダウンロード・展開してくれます。</p>



<p>新規プロジェクト用に各種ファイルをセットアップする際に、<br />
一々最新版を公式からダウンロードして設置して…という手間が省ける上、<br />
<em>Sublime Text</em>をメインエディタにすればそのまま作業に移れます。<br />
スタートアップがかなり捗りそうですね。</p>



<h2 class="wp-block-heading">前準備</h2>



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



<ul class="wp-block-list">
<li><a href="http://www.sublimetext.com/2">Sublime Text &#8211; Download</a></li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-dutOVJKs-iA/TwrvnLeavJI/AAAAAAAABc4/JLuk2C3dB9s/s500/20110109-02.png" alt="Sublime Text"/></figure>



<p></p>



<p>これが無いと何もはじまりはしないので。<br />
2012年1月7日現在ではβ版のバージョン2を入れて見ました。<br />
ちなみに執筆当初1ライセンス$59で、無料でお試しして良いよとの事。</p>



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



<p>Sublime Textは<em>「Package Control」</em>という拡張を使うことで<br />
追加のパッケージをサクサク検索・インストール出来ます。<br />
是非入れておきましょう。</p>



<p><a href="http://wbond.net/sublime_packages/package_control">Sublime Package Control – a Sublime Text 2 Package Manager by wbond</a></p>



<ol class="wp-block-list">
<li>メニューから、<em>&#8220;View&#8221; > &#8220;Show Cnsole&#8221;</em> でコンソール窓を表示。</li>



<li>下記の公式のワンライナーを入力してEnter。</li>



<li>Sublime Textを再起動して完了。</li>
</ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>import urllib2,os; pf=&#8217;Package Control.sublime-package&#8217;; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),&#8217;wb&#8217;).write(urllib2.urlopen(&#8216;http://sublime.wbond.net/&#8217;+pf.replace(&#8216; &#8216;,&#8217;%20&#8217;)).read()); print &#8216;Please restart Sublime Text to finish installation&#8217;</p>
</blockquote>



<p>（執筆当初のコードです。念の為公式での確認をおすすめします。）</p>



<h2 class="wp-block-heading">Nettuts+ Fetch を使ってみよう</h2>



<p>いよいよ件のプラグインをインストールします。<br />
全入力しなくともコマンドパレットが補完してくれるので楽々安心ですね。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-jrOAv77-kL4/TwrvnI3f5WI/AAAAAAAABc4/pAUvTeLRoRA/s500/20110109-03.png" alt="Nettuts+ Fetch"/></figure>



<p></p>



<ol class="wp-block-list">
<li>コマンドパレットを表示。<em>（Mac:⌘+Shift+p / Win:Ctrl+Shift+p）</em></li>



<li><em>&#8220;Install Package&#8221;</em></li>



<li><em>&#8220;Nettuts+ Fetch&#8221;</em> を選択・インストール</li>
</ol>



<p>jQueryとhtml5-boilerplateははじめから設定されているので<br />
試しにこれらをテストしてみましょう。</p>



<h3 class="wp-block-heading">jQueryを引っ張ってくる (単体ファイル）</h3>



<ol class="wp-block-list">
<li>コマンドパレットを開く。</li>



<li><em>&#8220;Fetch&#8221; > &#8220;Single File&#8221; > &#8220;jQuery&#8221;</em></li>



<li>現在開いているバッファーがあればそこに、無ければ新たな「untitled」に内容がペーストされます。</li>
</ol>



<h3 class="wp-block-heading">html5-boilerplateを引っ張ってくる（zipファイル）</h3>



<ol class="wp-block-list">
<li>作業用のフォルダを開く。</li>



<li>コマンドパレットを開く。</li>



<li><em>&#8220;Fetch&#8221; > &#8220;Package File&#8221; > &#8220;html5-boilerplate&#8221;</em></li>



<li>複数のフォルダがある場合は、確認を促されます。</li>



<li>選択したフォルダにダウンロードしたzipの内容が展開されます。</li>
</ol>



<h2 class="wp-block-heading">設定を足してみよう</h2>



<p>設定を足してやれば、勿論その他のパッケージを引っ張って来る事ができます。</p>



<ol class="wp-block-list">
<li>コマンドパレットを開く</li>



<li><em>&#8220;Fetch: Manage remote file&#8221;</em></li>



<li>開かれた設定ファイル（Fetch.sublime-settings）を編集</li>
</ol>



<pre class="wp-block-preformatted">{
    "files":
    {
        "jquery": "http://code.jquery.com/jquery.min.js"
    },
    "packages":
    {
        "html5-boilerplate": "http://github.com/h5bp/html5-boilerplate/zipball/v2.0stripped"
    }
}
</pre>



<p>これがデフォルトの状態。JSONで管理されているので編集も楽です。</p>



<p>WordPress日本語版の最新バージョンを引っ張ってこれるように設定してみます。<br />
最新版の場所を教えてくれた@understandardさんにこっそり感謝。</p>


<pre class="wp-block-code"><span><code class="hljs language-json">{
    <span class="hljs-attr">"files"</span>:
    {
        <span class="hljs-attr">"jquery"</span>: <span class="hljs-string">"http://code.jquery.com/jquery.min.js"</span>
    },
    <span class="hljs-attr">"packages"</span>:
    {
        <span class="hljs-attr">"html5-boilerplate"</span>: <span class="hljs-string">"http://github.com/h5bp/html5-boilerplate/zipball/v2.0stripped"</span>,
        <span class="hljs-attr">"wordpress-ja"</span>: <span class="hljs-string">"http://ja.wordpress.org/latest-ja.zip"</span>
    }
}
</code></span></pre>


<p>これで、<em>&#8220;Fetch&#8221; &gt; &#8220;Package File&#8221; &gt; &#8220;wordpress-ja&#8221;</em> で<br />
Wordpressが好きなフォルダに展開されます。</p>



<p>俺々フレームワーク等もGithubなりGistなりでWeb上にあげておけば簡単にpullできますね。</p>



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



<p>Fetchコマンドもさることながら、このSublime Textというエディタ、かなりよさそうです。<br />
拡張性も高く、既に多くのプラグインがリリースされている他、<br />
Viキーバインドでも使う事ができます。</p>



<p>まだβ版でバグも多いそうですが、今後チェックしていきたいですね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>HTML5のplaceholderのようにガイドテキストを表示するjQueryプラグイン</title>
		<link>https://blog.mach3.jp/2011/03/31/jquery-placeholder.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 31 Mar 2011 01:00:20 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1714</guid>

					<description><![CDATA[HTML5でフォーム関連の要素は色々と刷新されて便利になりそうですが、 その新機能のひとつに、ガイドテキストをうっすら表示させるplaceholderなる物があります。 今日はそのplaceholderをjQueryで表 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>HTML5でフォーム関連の要素は色々と刷新されて便利になりそうですが、<br />
その新機能のひとつに、ガイドテキストをうっすら表示させる<em>placeholder</em>なる物があります。<br />
今日はその<em>placeholder</em>をjQueryで表示させてみるちいさな実験。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/_JJkNs5Ixl70/TZM0WmlUWbI/AAAAAAAABQU/hw0ub-WbLGM/201103302245.png" alt="HTML5のplaceholderのようにガイドテキストを表示するjQueryプラグイン"/></figure>



<p></p>



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



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



<p>何も入力されていないテキストインプットに、<br />
例えば「名前を入力してください」的なガイドテキストを薄く表示させる為の属性。<br />
IEをのぞく多くのモダンブラウザでは既に実装されています。</p>



<p>ちなみにこんなやつです。↓<br />
<input type="text" placeholder="Input your name"></p>



<p>何を入力したらいいのかがわかりやすい！</p>



<ul class="wp-block-list">
<li><a href="http://wufoo.com/html5/">The Current State of HTML5 Forms · Wufoo</a> </li>
</ul>



<p>こちらのリンク先では、フォームエレメントにかかわる新機能の<br />
各ブラウザの対応状況が紹介されていました。<br />
IE9があまりにも残念で私は悲しい。</p>



<h2 class="wp-block-heading">JavaScriptで実装してみる</h2>



<p>どのブラウザでも使えるようにするために、JavaScriptで実装してみます。<br />
仕組みはシンプルに。</p>



<ol class="wp-block-list">
<li>placeholder属性のかわりに<em>data-placeholder</em>属性でガイドテキストの値を設定する</li>



<li>blurの時にvalueが空っぽだったらdata-placeholderの内容に差し替える</li>



<li>focusの時にvalueがdata-placeholderの内容と同じ場合は空っぽにする</li>



<li>ガイドテキスト表示時のCSSクラスを用意する</li>
</ol>



<h2 class="wp-block-heading">作ってみたもの</h2>



<h3 class="wp-block-heading">ソース</h3>



<p><a href="https://github.com/mach3/js-jquery-placeholder">mach3/js-jquery-placeholder &#8211; GitHub</a></p>



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



<p><a href="http://jsdo.it/mach3/5XHE">jquery.placeholder.js &#8211; jsdo.it &#8211; Share JavaScript, HTML5 and CSS</a></p>



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



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


<pre class="wp-block-code"><span><code class="hljs language-javascript">&lt;input type=<span class="hljs-string">"text"</span> value=<span class="hljs-string">""</span> data-placeholder=<span class="hljs-string">"Input your name"</span> <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"mytext"</span> /&gt;
</code></span></pre>


<p>data-placeholder属性に表示させたいガイドテキストを入力します。</p>



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


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-class">.jquery-placeholder</span> {
    <span class="hljs-attribute">color</span>:<span class="hljs-number">#cccccc</span>;
}
</code></span></pre>


<p>ガイドテキスト表示時のスタイルを設定。<br />
初期設定では、<em>jquery-placeholder</em>クラスとなります。<br />
JavaScriptのオプションで変更できます。</p>



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


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">"input.mytext"</span>).placeholder();
</code></span></pre>


<p>クラスの設定を変更したい場合は、文字列またはオブジェクトで引数を渡します。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">"input.mytext"</span>).placeholder({
    <span class="hljs-attr">defaultClass</span> : <span class="hljs-string">"myclass"</span>
});
<span class="hljs-comment">// または</span>
$(<span class="hljs-string">"input.mytext"</span>).placeholder( <span class="hljs-string">"myclass"</span> );
</code></span></pre>


<h2 class="wp-block-heading">注意事項</h2>



<p>（2011/03/31 18:20　追記）</p>



<p>このスクリプトですが、いくつか問題があります。</p>



<ol class="wp-block-list">
<li>アラートでblurイベントがスルーされる</li>



<li>送信時に値をクリアしないとplaceholderの値を送ってしまう</li>
</ol>



<p>2番目の問題については、つい先ほどオプション「resetOnSubmit」を追加しました。<br />
これをtrueにするとsubmit時にplaceholderの値から変わってない場合は値をクリアします。<br />
なぜわざわざオプションにしたのかというと、<br />
Ajaxとかでフォームを使いたい時にクリアしないほうが都合がいいケースもあるかな？と。</p>



<p>1番目はちょっと調査＋考え中…。</p>



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



<p>IEが最新版の9でも対応してないというのは若干ショックではありますが、<br />
見た目的にも使い勝手的にも取り入れたい表現ですね。</p>



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



<dl>
<dt>2011/3/31 18:20</dt>
<dd>オプションの追加、注意事項追記</dd>
</dl>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>jQuery.class.jsのバグ修正とconsole.logのお話</title>
		<link>https://blog.mach3.jp/2010/11/12/jquery-class-js-bugfix.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 12 Nov 2010 10:27:47 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1102</guid>

					<description><![CDATA[jQueryでPrototype.js風のクラス定義をしてみる で公開していたスクリプトで見つかった不具合が、意外と盲点だったので自戒として記録。 ただ単純にチェック不足なだけでしたが…悔しい。 ソース mach3&#8 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="/2010/09/jquery-class-js.html">jQueryでPrototype.js風のクラス定義をしてみる</a><br />
で公開していたスクリプトで見つかった不具合が、意外と盲点だったので自戒として記録。<br />
ただ単純にチェック不足なだけでしたが…悔しい。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TKHxrRN3cwI/AAAAAAAABC4/YrmxwaVzbLQ/201009282244.png" alt="jQury.class.js"/></figure>



<p></p>



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



<h2 class="wp-block-heading">ソース</h2>



<p><a href="https://github.com/mach3/js-jquery-class">mach3&#8217;s js-jquery-class at master &#8211; GitHub</a></p>



<h2 class="wp-block-heading">あるの？ないの？console.log</h2>



<p>引っかかったのは、インスタンスにlogメソッドを生やしている部分。<br />
console.logの有無で分岐をした…つもりだったんですが、</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">if</span>( $.isFunction( <span class="hljs-built_in">console</span>.log ) ){ ... }
</code></span></pre>


<p>当たり前なのですが、<br />
console.logが、というかconsoleがなければここで処理は止まってしまいます…。<br />
なんでこんなのに気付かなかったのかというと、IE8で処理が止まらなかったから。<br />
なぜなら、consoleもconsole.logも有るから！（実は知らなかったーー！！）</p>



<p>そんなわけで、条件を修正。<br />
なんかもうちょっとスマートに書きたいですが…</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">typeof</span>(<span class="hljs-built_in">console</span>)!==<span class="hljs-string">"undefined"</span> &amp;&amp; <span class="hljs-keyword">typeof</span>(<span class="hljs-built_in">console</span>.log)!==<span class="hljs-string">"undefined"</span>
</code></span></pre>


<p>IE8の開発者ツールをちゃんと使って無かったって事ですね。反省。<br />
でも次からは楽になりますね！</p>



<h2 class="wp-block-heading">追記 : 2013/10/13</h2>



<p>実は、これでいいですよね。</p>


<pre class="wp-block-code"><span><code class="hljs language-css">!! <span class="hljs-selector-tag">window</span><span class="hljs-selector-class">.console</span> &amp;&amp; !! <span class="hljs-selector-tag">window</span><span class="hljs-selector-class">.console</span><span class="hljs-selector-class">.log</span>
</code></span></pre>


<p>この不具合、特別必要なかったオマケ機能だった事もあって、結構悔しいです…</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sammy.jsでAjaxコンテンツのセッションを操る</title>
		<link>https://blog.mach3.jp/2010/09/22/sammy-js.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 22 Sep 2010 02:25:21 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Sammy.js]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=735</guid>

					<description><![CDATA[この記事の情報は古くなっています。 Sammy.js はAPIも一新されてより強力なフレームワークになっています。 公式ドキュメントをご参照ください。 ページを移動させずにサクサクと展開していくのがAjaxコンテンツの魅 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="caution">
  この記事の情報は古くなっています。<br /> <a href="http://sammyjs.org/">Sammy.js</a> はAPIも一新されてより強力なフレームワークになっています。<br /> <a href="http://sammyjs.org/docs">公式ドキュメント</a>をご参照ください。
</p>



<p>ページを移動させずにサクサクと展開していくのがAjaxコンテンツの魅力ですが、<br />
移動しないが故にURLとしてセッションを保持出来ないという弱点があります。<br />
オーソドックスな解決法は「location.hash」を用いる物ですが、<br />
その処理を簡単にしてくれるのがSammy.jsです。</p>



<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>



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



<h2 class="wp-block-heading">おおざっぱな話</h2>



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



<p><a href="http://code.quirkey.com/sammy/">Sammy :: Quirkey.com</a></p>



<p>Sammy.jsは、location.hashを用いたルーティングを<br />
効率化してくれるjQueryプラグインです。</p>



<h3 class="wp-block-heading">location.hashとは</h3>



<p>通常ページ内リンク等に使用される、<br />
URL末尾の<em>#</em>に続く文字列の事。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>http://www.example.com/hoge.html<em>#foobar</em></p>
</blockquote>



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



<p>先ず、<em>$.sammy()</em>を使用してルーティングを定義します。<br />
myRouteにはSammyオブジェクトが渡されます。<br />
※あとで初期化を行う為に格納しておきます</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> myRoute = $.sammy(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">this</span>.get(<span class="hljs-string">"#/home"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-comment">// #/homeにアクセスした時の処理</span>
    });
    <span class="hljs-keyword">this</span>.get(<span class="hljs-string">"#/profile"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-comment">// #/profileにアクセスした時の処理</span>
    });
    <span class="hljs-keyword">this</span>.get(<span class="hljs-string">""</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-comment">// location.hashが空だった時の処理</span>
    });
});
</code></span></pre>


<p>定義する為に用意された<em>get</em>メソッドには、<br />
第一引数に<em>location.hashの値</em>、<br />
第二引数に<em>実行したい処理（function）</em>を渡します。<br />
※get以外にもpost等がありますが、公式に任せて割愛</p>



<p>ルーティングを初期化する為には、<em>run</em>メソッドを呼びます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    myRoute.run();
});
</code></span></pre>


<p>とても簡単ですね。</p>



<h2 class="wp-block-heading">正規表現を使って一括管理</h2>



<p>getメソッドの第一引数は、文字列の他に正規表現も渡せます。<br />
これを使用して一つのfunctionで一括管理する事も出来ますね。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">this</span>.get( <span class="hljs-regexp">/^#\/&#91;a-zA-Z0-9_-]+$/</span> , <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">switch</span>( <span class="hljs-keyword">this</span>.path ){
        <span class="hljs-keyword">case</span> <span class="hljs-string">"#/home"</span> :
            <span class="hljs-comment">// do something</span>
            <span class="hljs-keyword">break</span>;
        <span class="hljs-keyword">case</span> <span class="hljs-string">"#/profile"</span> :
            <span class="hljs-comment">// do something</span>
            <span class="hljs-keyword">break</span>;
        <span class="hljs-keyword">default</span>:
            <span class="hljs-keyword">this</span>.redirect(<span class="hljs-string">"#/home"</span>);
            <span class="hljs-keyword">break</span>;
    }
});
</code></span></pre>


<p>さりげなく使ってる、<em>this.path</em>と<em>this.redirect()</em>ですが、<br />
function内のスコープはSammyオブジェクトになっていて、<br />
色々な便利な機能が使えます。</p>



<dl>
<dt>path</dt>
<dd>location.hashの値が格納されています</dd>
<dt>redirect()</dt>
<dd>文字通り、別のlocation.hashにリダイレクトします</dd>
</dl>



<p>他にも色々ありますが、詳しくは公式のドキュメントをご参照ください。<br />
<a href="http://code.quirkey.com/sammy/docs/index.html">Sammy &#8211; Documentation &#8211; API :: Quirkey.com</a></p>



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



<p class="caution">
    デモページは閉鎖しています。
</p>



<p>内容はやや複雑化してますが、<br />
基本的にはそれぞれのリンクに相応するファイルをAjaxで読み込んでいるだけです。<br />
ファイルが見つからない場合はconfirmでHomeにリダイレクトするか、<br />
history.back()させるかを選択させています。</p>



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



<p>postメソッド等を利用することでAjaxで展開するカートなんかが作れるようで、<br />
チュートリアルも公式に掲載されていました。<br />
<a href="http://code.quirkey.com/sammy/tutorials/index.html">Sammy &#8211; Tutorials :: Quirkey.com</a></p>



<p>似たような働きをするライブラリにFlash向けのswfaddressなんていうのもありましたね。<br />
Sammy.jsはjQueryプラグインということもあって導入しやすく、期待大です。<br />
色々試してみよう…</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
