2015年4月19日日曜日

[JavaScript] [jQuery] 任意の年月の月末日を得る

年、月、日のプルダウンが存在していて、年、月が選択されたタイミングで日のプルダウンの値を更新する仕組みを考えます。この時、日の月末日は閏年の判定も含めて、年、月の値に応じて変化させる必要があります。

このために、任意の年月の月末日を得る必要があります。例を示します。



例では、任意の月末日を得たのち、年、月のプルダウンが変化(change)するタイミングで、その時の年、月の組み合わせで月末日(endDay)を求めて、この値を使って動的に日のselectのoption要素を動的に生成しています。

参考
 JavaScript による日付・時刻・時間の計算・演算のまとめ – hoge256 blog

[JavaScript] [jQuery] thickboxを任意のイベントで呼び出し、closeする

安定した(枯れた)モーダルウィンドウ表示ライブラリとして未だに根強い人気のあるthickbox。onclickで呼び出すようにサンプルが記述されていますが、次に示すように、tb_show関数をコールすることで任意のイベントで呼び出すことができます。



例に示したようにモーダルウィンドウのcloseはthickboxが動的に生成する#TB_overlay(モーダルウィンドウのウィンドウの外側のグレイになる領域を示す)のclickイベントでtb_remove関数をコールすることで実装できます。


参考:
 FlashBLOG MVON.NET - FLASH、WEBに関する話題。 » Blog Archive » jQuery-ThickBoxをお好きなイベントで出す

2015年4月11日土曜日

[MovableType] [Plugin] セキュアに記事・ウェブページのプレビューを見るプラグイン

とてもとても久しぶりにMTのプラグインを作りました。MT6になってからは初めてです。
作成したプラグインはセキュアに記事・ウェブページのプレビューを見ることができるようになるプラグインです。

MTの正規のプレビューは正規のテンプレートを適応した実体ファイル(静的ファイル)を実際に生成して、そのファイルにリンクをはる、または遷移させることで実現しています。

そのため、プレビューファイル名に複雑な数字列が付けられているとはいえ、それらがHTTPアクセス可能な状態に置かれているというリスクがあります。今回作成したSecurePreviewはインストールしてもらうと、プレビューがmt.cgiで描画され、静的ファイルは何も生成されなくなります。また、MTにログインしていない状態ではこのプレビューには一切アクセスできないようにしています。

プレビュー用の実体ファイルはゴミファイルになって、周期的に削除しなくてはならないといった問題もありますので、このプラグインを使えばそういった煩わしさからも解放されます。


https://github.com/shinchit/mt-plugin-securepreview

2015年4月10日金曜日

[Android] strings.xmlに可変パラメータを埋め込む(sprintf的な)

strings.xmlに静的な文字列だけでなく、文字列の一部がプログラムによって動的に埋め込まれるような文字列を設定したい場合(つまりはよくある言語のsprintf的なことをしたい場合)は、次の例のようにします。


[Android] TextViewのtextにHTMLを使用する

TextViewのtextにHTMLを使用しようとしても、普通に行うとHTMLタグは効きません(文字列としてそのまま出力されます)。 HTMLタグを有効にするにはandroid.text.Html#fromHtmlを使います。


また、strings.xmlにHTMLを記述するためには、<、>、&、"をエスケープ表記する必要があります。先の文例で考えるなら、以下のようになります。

2015年4月7日火曜日

[Android] TextViewを疑似hiddenとして使う

一覧表示などで、一覧中のどの行をタップしたか取得したいケースはままあるかと思います。その場合、HTMLでは<input type="hidden">に隠しパラメータ(この場合は行番号)をもたせておくという方法がよく採用されますが、これと同じようなことをAndroidアプリで行いたい時にどうするか。一つの方法は非表示にしたTextViewを使うことです。

ポイントはandroid:visibility="gone"の指定です。この指定によって、TextViewは単に非表示になるだけでなく、レイアウト上、あたかも存在しないかのように扱われます。しかし、値を保持する箱としては使えますので、疑似hiddenのように扱うことができます。

このTextViewへの値の取得、設定は下記のようになります(一例)。


[Android] ImageViewを左右の両端に配置する方法

LinearLayoutなどを使って普通にImageView(やButtonなど)を二つ続けて記述すると、layout_gravity属性にそれぞれright、leftを指定しても、左詰めで表示されてしまいます。GridLayoutやTableLayoutを使ってセルを定義して左右の端に表示する方法もありますが、XMLの記述が複雑になりますし、端末の画面サイズによってはImageViewが見えなくなる現象が起きたりします。また、Layoutの上にViewを配置することもLinearLayoutの方がシンプルに実現できます(LinearLayoutのbackgroundに画像をセットして、<LinearLayout>〜</LinearLayout>にViewを置くことで、画像の上にViewを配置できます)。

それで、LinearLayoutで左右の両端にImageViewを表示する方法ですが、空(空文字)のTextViewを二つのImageViewの間に挟むことで実現できます。
ポイントはgravity="center"を持つTextViewが二つのImageViewの間にあって、そのlayout_weightがImageView達のlayout_viewより高く設定されていることです。この設定によって、TextViewが中心に鎮座して最大限に幅をきかせようとするので、結果として二つのImageViewが左右両端に(TextViewにおいやられて)表示されることになります。

2015年4月1日水曜日

[iOS] [Android] [Hybrid] [Monaka] Monakaを触ってみました

Monaka を使ってHybridアプリの実装を試してみています。
チュートリアルが充実していて(しかも日本語)開発手順(速習編)をなぞることで、プロジェクトの作り方から実機でのテスト、配布まで1時間ぐらいで覚えられました。

触ってみた感触でのメリットは、

・IDEがクラウドで提供されていること
・ドキュメント(しかも日本語)が充実していること
・(当然ですが)ハイブリッドアプリが作れる
・デバッグ用のアプリが提供されており、実機でシームレスにテストできる
・WebViewでほぼ完結するアプリでJavaScriptが書けるなら、学習コストはかなり低い

というところです。

逆にWebViewベース中心ではなく、ネィティブアプリの機能をガリガリ使うなら第一選択にはならないかもしれません。この辺りはどこまでネィティブ機能を使えるのか調査中なので、推測にすぎませんが。

スマホ、タブレット端末向けサイトを構築する、という要件にはMonakaはとてもマッチすると思います。