Quantcast
Viewing all 21 articles
Browse latest View live

FullCalendar のカスタマイズ

Image may be NSFW.
Clik here to view.
WS000000

カレンダーを作成するのに便利なjQueryのプラグイン「FullCalendar」を使用する際に行ったカスタマイズのメモ書きです。 FullCalendar Image may be NSFW.
Clik here to view.
DEMO before after 使用したのは、fullcalendarのver 1.5.3です。 ラベルの変更 Image may be NSFW.
Clik here to view.
Image may be NSFW.
Clik here to view.
[javascript title="fullcalendar.js before" firstline="64"] monthNames: ['January','February','March','April','May','June','July','August','September','October','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'], dayNames: ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'], dayNamesShort: ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'], [/javascript] [javascript title="fullcalendar.js after" firstline="64"] monthNames: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'], monthNamesShort: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'], dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], dayNamesShort: ['日','月','火','水','木','金','土'], [/javascript]   時刻の表記を変更(Month-view) Image may be NSFW.
Clik here to view.
Image may be NSFW.
Clik here to view.

[javascript title="fullcalendar.js before" firstline="57"] timeFormat: { // for event elements '': 'h(:mm)t' // default }, [/javascript] [javascript title="fullcalendar.js after" firstline="57"] timeFormat: { // for event elements '': 'H:mm' // default }, [/javascript]   時刻の表記を変更(Week-view, Day-view) Image may be NSFW.
Clik here to view.
Image may be NSFW.
Clik here to view.
[javascript title="fullcalendar.js before" firstline="2809"] axisFormat: 'h(:mm)tt', timeFormat: { agenda: 'h:mm{ - h:mm}' }, [/javascript] [javascript title="fullcalendar.js after" firstline="2809"] axisFormat: 'H:mm', timeFormat: { agenda: 'H:mm{ - H:mm}' }, [/javascript] timeFormatで指定できる書式は、1554行目辺りに記述があるのでそこを参照 [javascript title="fullcalendar.js dateFormatters" firstline="1554"] var dateFormatters = { s : function(d) { return d.getSeconds() }, ss : function(d) { return zeroPad(d.getSeconds()) }, m : function(d) { return d.getMinutes() }, mm : function(d) { return zeroPad(d.getMinutes()) }, h : function(d) { return d.getHours() % 12 || 12 }, hh : function(d) { return zeroPad(d.getHours() % 12 || 12) }, H : function(d) { return d.getHours() }, HH : function(d) { return zeroPad(d.getHours()) }, d : function(d) { return d.getDate() }, dd : function(d) { return zeroPad(d.getDate()) }, ddd : function(d,o) { return o.dayNamesShort[d.getDay()] }, dddd: function(d,o) { return o.dayNames[d.getDay()] }, M : function(d) { return d.getMonth() + 1 }, MM : function(d) { return zeroPad(d.getMonth() + 1) }, MMM : function(d,o) { return o.monthNamesShort[d.getMonth()] }, MMMM: function(d,o) { return o.monthNames[d.getMonth()] }, yy : function(d) { return (d.getFullYear()+'').substring(2) }, yyyy: function(d) { return d.getFullYear() }, t : function(d) { return d.getHours() < 12 ? 'a' : 'p' }, tt : function(d) { return d.getHours() < 12 ? 'am' : 'pm' }, T : function(d) { return d.getHours() < 12 ? 'A' : 'P' }, TT : function(d) { return d.getHours() < 12 ? 'AM' : 'PM' }, u : function(d) { return formatDate(d, "yyyy-MM-dd'T'HH:mm:ss'Z'") }, S : function(d) { var date = d.getDate(); if (date > 10 && date < 20) { return 'th'; } return ['st', 'nd', 'rd'][date%10-1] || 'th'; } }; [/javascript]     ダブルクリックを取得できるようにする [javascript title="fullcalendar.js before" firstline="4350"] // attaches eventClick, eventMouseover, eventMouseout function eventElementHandlers(event, eventElement) { eventElement .click(function(ev) { if (!eventElement.hasClass('ui-draggable-dragging') && !eventElement.hasClass('ui-resizable-resizing')) { return trigger('eventClick', this, event, ev); } }) .hover( function(ev) { trigger('eventMouseover', this, event, ev); }, function(ev) { trigger('eventMouseout', this, event, ev); } ); // TODO: don't fire eventMouseover/eventMouseout *while* dragging is occuring (on subject element) // TODO: same for resizing } [/javascript]   [javascript title="fullcalendar.js after" firstline="4350" highlight="4359,4360,4361,4362,4363"] // attaches eventClick, eventMouseover, eventMouseout function eventElementHandlers(event, eventElement) { eventElement .click(function(ev) { if (!eventElement.hasClass('ui-draggable-dragging') && !eventElement.hasClass('ui-resizable-resizing')) { return trigger('eventClick', this, event, ev); } }) .dblclick( function(ev) { return trigger('eventDblClick', this, event, ev); } ) .hover( function(ev) { trigger('eventMouseover', this, event, ev); }, function(ev) { trigger('eventMouseout', this, event, ev); } ); // TODO: don't fire eventMouseover/eventMouseout *while* dragging is occuring (on subject element) // TODO: same for resizing } [/javascript] 使い方 [javascript title="index.html eventDblClick"] $('#calendar').fullCalendar({ eventDblClick: function(calEvent, jsEvent, view) { alert('Event: ' + calEvent.title); alert('Coordinates: ' + jsEvent.pageX + ',' + jsEvent.pageY); alert('View: ' + view.name); // change the border color just for fun $(this).css('border-color', 'red'); } }); [/javascript] カレンダーのイベントをダブルクリックした際に処理を実行させることができる。     イベントをJSONで読み込む 全イベントデータを一気に読み込むのであれば、eventsにイベントデータの(json形式)のファイル名を指定すればいいだけ。 (詳しくは、demosの中のjson.htmlを参照) [javascript title="json.html before" highlight="3"] $('#calendar').fullCalendar({ editable: true, events: "json-events.php", eventDrop: function(event, delta) { alert(event.title + ' was moved ' + delta + ' days\n' + '(should probably update your database)'); }, loading: function(bool) { if (bool) $('#loading').show(); else $('#loading').hide(); } }); [/javascript] でも、上記の方法ではイベントデータが1年分/2年分と増えていくと重くなる。 なのでviewの切り替わり時に必要なイベントデータだけ取得するようにする。 [javascript title="json.html after" highlight="3,4-16,17"] $('#calendar').fullCalendar({ editable: true, viewDisplay: function(view) { $.ajax({ url: "json-events.php", dataType: 'json', type:"post", data: { "start": view.start.toString(), "end": view.end.toString(), }, success: function(EventSource) { $('#calendar').fullCalendar('removeEvents'); $('#calendar').fullCalendar('addEventSource', EventSource); } }); }, eventDrop: function(event, delta) { alert(event.title + ' was moved ' + delta + ' days\n' + '(should probably update your database)'); }, loading: function(bool) { if (bool) $('#loading').show(); else $('#loading').hide(); } }); [/javascript] json-events.phpでは、受け取ったstart,endの値をつかって必要なデータだけをjsonで出力するようにしておく。 その他のFllCalendarの記事

[DataTables] sAjaxSourceで読み込んだデータの値を加工したい。

テーブルにソート機能や、フィルタリング機能を付けたいときに、とても便利なプラグイン「DataTables」に関するメモ。 sAjaxSourceで読み込んだデータを加工してテーブルに表示する方法。 例:テーブルの1桁(1 …
続きを読む

[DataTables] テキストボックスを敷き詰めたテーブルで、フォーカスのあたっているセルの位置を取得したい。

昨日に引き続き、テーブルにソート機能や、フィルタリング機能を付けたいときに、とても便利なプラグイン「DataTables」に関するメモ。 <td>に<input type=”textR …
続きを読む

[FullCalendar] イベント(予定)の修正と削除

Image may be NSFW.
Clik here to view.
WS000020

なんだかんだで仕事が忙しいので…手抜き更新。 FullCalendarで登録した予定(下記画像を参照)を、修正・削除する方法が公式のDemoに無かった気がするのでTipsとして載せておきます。 Image may be NSFW.
Clik here to view.
[javascript] var calendar = $('#calendar').fullCalendar({ eventDblClick:function(event, jsEvent){ var title = prompt('予定を入力してください:', event.title); if(title && title!=""){ event.title = title; calendar.fullCalendar('updateEvent', event); //イベント(予定)の修正 }else{ calendar.fullCalendar("removeEvents", event.id); //イベント(予定)の削除 } } }); [/javascript] これだけ。簡単ですね。 尚、上記ではイベント(予定)のダブルクリックイベントのコールバックとして設定しています。 ダブルクリックの取得は独自に追加したものなので、下記記事の「ダブルクリックを取得できるようにする」を参照してください。 FullCalendar のカスタマイズ

[FullCalendar] 祝日イベントのリンクを削除

Image may be NSFW.
Clik here to view.
WS000006

「日本の祝日」をGoogleから取り込んだ場合、祝日のイベントに自動的にGoogleカレンダーへのリンクが張られてしまいます。 参照 FullCalendar で日本の祝日を表示する Image may be NSFW.
Clik here to view.
↑表示した祝日イベントをクリックすると、Googleカレンダーに飛んでしまう。 これは、ちょっとウザいので祝日イベントに張られたリンクを削除します。 ■リンクの削除 [javascript] var calendar = $('#calendar').fullCalendar({ events: { url: 'http://www.google.com/calendar/feeds/ja.japanese%23holiday%40group.v.calendar.google.com/public/full/', color: 'red' success:function(events){ $(events).each(function(){ this.url = null; }); }, } }); [/javascript] events内で、$.ajaxのsuccess時のコールバックを指定できるので、その中で読み込んだ祝日イベントのurlプロパティをnullで上書きします。 これで、リンクが削除されます。

jQueryを使ってテーブルのセルをクリックしたときに編集できるようにする(Edit in Place)

Image may be NSFW.
Clik here to view.
edit_table

画面遷移を行わずに、その場でDOM要素を編集できる機能を「inplace editor」とか言うらしいです。 プラグインを使う方が簡単なのですが、作りたいものに合わせてカスタマイズするのが思うようにいかなかったので、自分で書いてみました。 [html title="html"] <table id="edit-table"> <tr> <th>要素1</th> <th>要素2</th> <th>要素3</th> </tr> <tr> <td>1</td><td>hoge</td><td>hoge</td> </tr> <tr> <td>2</td><td>hello</td><td>world</td> </tr> <tr> <td>3</td><td></td><td></td> </tr> </table> [/html] [javascript title="JavaScript"] (function(documet){ $(document).ready(function(){ $("#edit-table > tbody > tr > td").click(edit_togle()); }); function edit_togle(){ var edit_flag=false; return function(){ if(edit_flag) return; var $input = $("<input>").attr("type","text").val($(this).text()); $(this).html($input); $("input", this).focus().blur(function(){ save(this); $(this).after($(this).val()).unbind().remove(); edit_flag = false; }); edit_flag = true; } } function save(elm){ alert("「"+$(elm).val()+"」を保存しました"); //保存する処理をここに書く } })(document); [/javascript] pタグやhタグなど、table以外の要素にも編集機能を付けられます。 サンプル

[FullCalendar]たった2行の追加でFullCalendarをiPad対応にするスクリプト

jquery.ui.touch FullCalendarをiPad等のタッチ操作に対応させる方法はいくつかあるみたいですが、今のところ上記のスクリプトを使うのが一番簡単だと思います。 使い方は以下。 ヘッダで上記スクリプ …
続きを読む

【Waypoints】特定のHTML要素にスクロールイベントを設置するjQueryプラグイン

ちょうど、スクロールイベントを制御するシンプルなライブラリを探していて見つけたプラグインです。 「このdivタグより下にスクロールしたらイベントを発生させて関数を呼ぶ」といったことが簡単に行えます。 その他、1つのHTM …
続きを読む

【tipsy】シンプルでカッコいいツールチップを表示するjQueryプラグイン

Image may be NSFW.
Clik here to view.
tipsy

Image may be NSFW.
Clik here to view.
tipsy
tipsy - Facebook-style tooltip plugin for jQuery 使い方はとても簡単で要素を指定してtipsyを実行するだけ。 [javascript] $('#example-1').tipsy(); [/javascript] ツールチップの表示位置や表示されるまでのスピードなども設定できます。 また、HTMLだけではなくSVGのツールチップも装飾してくれます。 SVGでは、ツールチップをtitle属性ではなく、titile要素をツールチップを表示したい要素の子要素として記述します。 svgでのツールチップの記述。 [html] <svg> <circle class="circle" fill="red" r="21" cx="100" cy="100"> <title>hoge</title> </circle> </svg> [/html] tipsyはこの場合でも問題なくツールチップを装飾してくれます。 jQueryを読み込まないとならないけれど、D3.jsと組み合わせてつかっても便利です。 example

[Autocomplete] かな入力で名前(漢字)を絞り込むセレクトボックス

example 入力した「ひらがな」を元に名前(漢字)の一覧を絞り込むセレクトボックスが必要になったのですが、なかなか用途に見合うサジェストプラグインがなかったのでjQuery UIのカスタムコンボボックスを改良して作っ […]

ADDRAjaxとAjaxZip2を組み合わせて使う。

都道府県名→市区町村名→町域とドリルダウンで住所を検索し、セレクトボックスに反映 ...

[DataTables] sAjaxSourceで読み込んだデータの値を加工したい。

テーブルにソート機能や、フィルタリング機能を付けた…

[DataTables] テキストボックスを敷き詰めたテーブルで、フォーカスのあたっているセルの位置を取得したい。

昨日に引き続き、テーブルにソート機能や、フィルタリ…

[FullCalendar] イベント(予定)の修正と削除

なんだかんだで仕事が忙しいので…手抜き更新。 Fu…

[FullCalendar] 祝日イベントのリンクを削除

「日本の祝日」をGoogleから取り込んだ場合、祝…

jQueryを使ってテーブルのセルをクリックしたときに編集できるようにする(Edit in Place)

画面遷移を行わずに、その場でDOM要素を編集できる…

[FullCalendar]たった2行の追加でFullCalendarをiPad対応にするスクリプト

【Waypoints】特定のHTML要素にスクロールイベントを設置するjQueryプラグイン

ちょうど、スクロールイベントを制御するシンプルなラ…

【tipsy】シンプルでカッコいいツールチップを表示するjQueryプラグイン

[Autocomplete] かな入力で名前(漢字)を絞り込むセレクトボックス

example 入力した「ひらがな」を元に名前(漢…
Viewing all 21 articles
Browse latest View live