Javascript でニートな日付文字列を書く

ニートっていっても NEET じゃないですよ。neat です。こぎれいとか、さっぱりとか、そんな意味ですね。

そもそもは <ins> タグの datetime 属性を綺麗に見せたい! と思ったのが発端です。この辺 の記事を読みまして設定してみたのですが、日付文字列がそのままだといまいちわかりにくい。

<ins datetime="2012-01-23T12:34:56+09:00">さんぷる!</ins>

さんぷる!

そこで、最近の日付についてはもう少しわかりやすく出来ないか、Javascript でごにょごにょやってみました。こんな風に変わります。

さんぷる!

Continue reading

iPhone で任意のサイトを全画面アプリっぽくできるツールを作りました

発端はこれ。

iOS6でGoogleMapsをフルスクリーン表示にしてみました – W&R : Jazzと読書の日々
http://d.hatena.ne.jp/wineroses/20120921/p1

上記サイトでは Google マップと YouTube が紹介されていますが、任意のサイトを作成するためのツールがあったら便利だよね。ってことで作成しました。

Web アプリアイコン作成ツール
http://waim.remora.cx/

Continue reading

JSONP で広告を供給するサーバーを書く

最近の話ですが、このサイトにも広告を載せるようになりました。

Google Adsense の方はタグ貼るだけで終わりの簡単なものなのですが、縁あってレバレジーズ株式会社の広告を載せることになり、これはこのサイトでバナーを供給しています。

このサイトは MovableType + DynamicMTML で運用していますので、普通に考えれば PHP で直接広告タグを書けばいいだけなのですが、サーバー負荷の観点からいまいちだし、第一余りおもしろくありません。

そこで、広告供給サーバーを別に立て、JSONP で供給するようにしてみました。

Continue reading

pjax(pushState + Ajax)で遷移するウェブページを作る

  • Ajax 使わずにページ全体を読み込ませるのが許されるのは小学生までだよねー!
  • でも、ハッシュフラグメント(#!)を使った方法はいろいろと問題がある ので使いたくない。
  • でもでも、pushState だって非対応ブラウザじゃだめなんでしょ?
  • そこで pjax ですよ!

Continue reading

【Javascript】外部リンクに target=_blank を付ける

external-link-orange-dark03-Shapes4FREE.png

リンクがブログの外のものだったら target=_blank を付けて新しいタブで開くようにする jQuery コード。


$('.entry-content a[href^=http]')
    .not('[href*="' + location.hostname + '"]')
    .prop({target: '_blank'})
    .addClass('exlink')
;

ついでに exlink なるクラスも付加しています。以下のサイトを参考にしましたが、そのままでは動きませんでした。jQuery のバージョンの違いかね?

外部サイトへのリンクに target=_blank 属性を追加(jQuery) – せんむの技術ブログ
http://www.shikidahironori.jp/music/2011/01/target-blankjquery.html

おまけ

そもそも HTML4 〜 XHTML1.0 の時代は リンクを開くとき新しいウィンドウ(タブ)を使うかどうか利用者が決めるべき なんて言って HTML の仕様から target 属性が消えたりしました。

それが HTML5 の仕様では復活してます。まあ今時タブブラウザを使ってない方が少数派(スマートフォンを含んだとしても)ですもんね。

Last.fm for jQuery を改造してみました

Last.FM から再生履歴を取得して表示するツールです。このページの左のツールバーで動いています。本家にインスパイアして作成したのですが、次の点で拡張しています。

  1. 一定時間たつと自動で表示内容を更新する。
  2. アルバムアートが見つからない場合、アーティストの画像で代替する。
  3. 各曲の情報を順番にフェイド・インして表示する。
  4. strftime.js を使って Last.FM プロフィールページのように再生時刻を表示する。

サンプルページを開く

そしてついでに github デビュー。

delphinus35/lastfm – GitHub
https://github.com/delphinus35/lastfm

設置方法などは README.md と付属の sample.html に書いているのでそちらを見てください。

Last.FM の API Key の取り方など、細かいことは前回の記事参照。でもまあ、特別なことしない限り付属の API Key をそのまま使って問題ないっぽいです。

ホントは何ヶ月も前にできてたんだけど、ドキュメント書いたりするのが面倒でほったらかしてました。何とか今年中に公開できて良かった。

では、良いお年を!

Prototype.js で継承&オーバーライド

今更ながら、Prototype.js でクラスの継承とオーバーライドをやってみた記録。

しばらく使ってなかったら、$super() という便利なものができていた。

コード例

// 基底クラス
var Parent = Class.create({
    // コンストラクタ
    initialize: function() {
        // <p> 要素を生成して <body> に挿入
        this.ele = new Element('p');
        $$('body')[0].insert(this.ele);
    }
    // “word”を画面に表示
    ,say: function(word) {
        this.ele.update(word);
    }
});

// Parent を継承したクラス
var Child = Class.create(Parent, {
    // コンストラクタ
    initialize: function($super) {
        // Parent のコンストラクタを実行
        $super();
    }
    // Parent の say() をオーバーライドする
    ,say: function($super, word, word2) {
        $super(word);
        // “word, word2”という文字列を画面に表示
        this.ele.update(this.ele.innerHTML + ', ' + word2);
    }
});

var c = new Child;

c.say('One', 'Two');
// -> 画面上に 'One, Two' と表示される。

メソッドを定義するとき第一引数に $super を与えると、親クラスの同名のメソッドへの参照が与えられる。これを使ってメソッドのオーバーライドが簡単にできるのだ。

第二引数以降は親クラスから順に与えられる。これを使って引数の数すら変えることができる。上の例で言えば、Parent クラスの say() メソッドは引数を一つ採るが、Child クラスの say() メソッドは二つ採る。