株式会社八角研究所 > jQuery の In Place Editor プラグインを作ってみた

エンジニア募集中!

独立心旺盛で、新しい技術で新しいWebサービスを作りたいと思っているけれど、ひとりでやることに限界を感じているフリーのエンジニアの方。あなたの期待にこたえられる仲間と環境を、八角研究所なら提供できると思います。社員としてではない関わり方も、あるかもしれません。

2010年02月21日 22:36

jQuery の In Place Editor プラグインを作ってみた * * * *

by mokada

Tags: 何か作った JavaScript jQuery IPE EIP

In Place Editor ライブラリをひとつ jQuery プラグインとして公開してみました。

xfanIpe jQuery plugin

この記事を参考にいくつか既存のライブラリをいじってみたのですが、とにかくいろいろなタイプの入力フォームを Edit In Place したいという個人的な要件を満たすものがなかったのです。JEIP にラジオボタンを追加とか一応してみたのですが、元々そういう拡張ができるような抽象化されたコードにはなっていなかったので、ぐちゃぐちゃになってしましました。

特徴

xfanIpe の特徴は、以下に挙げるように、さまざまな入力フォームを利用できること、そして、自分で簡単にあたらしい入力フォームを追加できてしまうことです。

  • インラインテキスト
  • テキストエリア
  • ラジオボタン
  • セレクトボックス
  • チェックボックス
  • パスワード入力(再入力用フィールド付)
  • 日付(年月日のセレクトボックス)
  • 日付(jQuery UI の datepicker を利用)
  • TinyMCE

こちらにデモが。

今回は詳細説明は省きますが、上記ページの一番最後に紹介している名前入力フィールドは、ライブラリに含まれているものではなく、デモ用にさくっと拡張したものです。この拡張のためのコードは次のような感じ。とても簡潔です(よね?)。

xfan.ipe.register("name", {
 
  toLabel: function(v) {
    return v.first + " " + v.last;
  },
  
  val: function(v) {
    if (v) {
      this.fName.val(v.first);
      this.lName.val(v.last);
    } else {
      return { first: this.fName.val(), last: this.lName.val() };
    }
  },
  
  createInput: function() {
    this.fName = $("<input type=\"text\" />").attr("size", 15);
    this.lName = $("<input type=\"text\" />").attr("size", 15);
    return $("<span></span>").append(this.fName).append(this.lName);
  }

});

とりあえず使い方

ここから jquery.xfan.ipe-xxx.js ファイルをダウンロードして使えばいいのですが、ひとつだけ必須の依存ライブラリがあります。同じく Google Code で公開されているJSONデータ処理ライブラリ jquery-json です。これもダウンロードして script タグでロードしておきましょう。

それ以外にも、利用する入力フォームによって、別のライブラリが必要だったりします。

入力フォームの種類 依存ライブラリ
date dateformat.js
datepicker jQuery UI
tinymce TinyMCE

さて、とりあえず一番簡単なテキストフィールドです。

<script type="text/javascript">
$(function() {
  $("#description").xfanIpe("/save.php", {
    init: "Hello, xfanIpe jQuery plugin world",
    fieldSize: 30
  });
});
</script>

<p id="description"></p>

xfanIpe 関数の第一引数はサーバのURLです。そして第二引数にさまざまなオプションを指定するわけですが、どの入力フォームでも利用される重要オプションのひとつが "init" です。これは、このエディタで編集するデータの初期値になります。普通、初期値はHTMLマークアップの中(この例だと id="description" の p 要素の中)に直接記述するケースが多いと思うので、すこし直感的ではないかもしれません。これは、初期値として与えるデータが、常にただのテキストとは限らないからです。たとえばチェックボックスは複数の値をもてるので、初期値には JavaScript の配列を使います。

ついでにもうひとつサンプルを。今度は日付入力です。上述のとおり、日付入力フィールドのIPEをつかうには dateformat.js が必要なのでダウンロードして script タグを追加しておきましょう。

<script type="text/javascript">
$(function() {
  $("#birthday").xfanIpe("/save.php", {
    formType: "date",
    init: { year: 1986, month: 9, day: 3 }
  });
});
</script>

<p id="birthday"></p>

今度はオプションに formType というのを指定しています。これが入力フォームの種類を指定するためのオプションです。デフォルト値はテキストフィールドをあらわす "text" なので、先ほどの例では指定する必要がなかったのですが、テキストフィールド以外の入力フォームを用いる場合は必ず指定します。

初期値をあらわす init オプションには JavaScript オブジェクトを指定しています。このように、IPE が編集の対象とするデータの型は、入力フォームごとに異なります。つかいたい入力フォームがどのような型のデータを取り扱うのかはリファレンスで調べましょう。リファレンスとか、まだありませんけど。

ぼちぼち、ドキュメントを整備していく予定です。

この記事の執筆者

いちおう代表 mokada 34歳

この人の会社をみる この人関連のイベントをさがす この人と一緒にはたらく

この記事を読んだ人はこんな記事も読んでいます

この日記にコメントする

(メールアドレスは公開されません。メールで返答が欲しい場合などに入力してください)

このエントリへのトラックバックURL

コメント

コメントはありません

トラックバック

トラックバックはありません

メンバー紹介

boy

boy

少年です。 18歳以下(嘘)でも立派に社員です。 よろしくおねがいします。

tunakan

tunakan

内臓が全般的に弱いです。データベースは苦手なのに変なデーターベースに当たることが多い気がします。

はち子さん

はち子

広報を担当している、はち子です。本当は広報じゃなくて事務デスが、広報って言うほうがかっこいいし! 社内でゆいいつ、...