Last active
November 16, 2015 04:33
-
-
Save anzfactory/b841ce8ad5cd70b2de8c to your computer and use it in GitHub Desktop.
HandsonTableのサンプル http://bl.ocks.org/anzfactory/b841ce8ad5cd70b2de8c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="ja"> | |
<head> | |
<meta charset="utf-8"> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/handsontable/0.20.0/handsontable.full.min.css"> | |
<style> | |
#wrapper { | |
display: -webkit-box; | |
display: -moz-box; | |
display: box; | |
} | |
#logs { | |
list-style: none; | |
padding: 0; | |
margin: 0; | |
width: 20%; | |
} | |
#logs li { | |
margin: 0; | |
padding: 0 0.5em; | |
font-size: 80%; | |
border-bottom: 1px solid #DDD; | |
} | |
</style> | |
</head> | |
<body> | |
<h1>HandsOnTable Sample</h1> | |
<div> | |
<input type="text" id="text-insert"><button id="btn-insert">選択セルにテキスト挿入</button> | |
<button id="btn-consoledata">現在のデータをコンソールへ</button> | |
</div> | |
<div id="wrapper"> | |
<div id="grid"></div> | |
<ol id="logs"></ol> | |
</div> | |
<quote> | |
<a href="http://maouyusya2828.web.fc2.com/">via 魔王「この我のものとなれ、勇者よ」勇者「断る!」</a> | |
</quote> | |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/handsontable/0.20.0/handsontable.full.min.js"></script> | |
<script> | |
$(function() { | |
var logs = $('#logs'), | |
gridContainer = document.getElementById('grid'), | |
selectedRow = 0, | |
selectedCol = 0, | |
log = function(text) { | |
$('<li>').text(text).prependTo(logs); | |
} | |
gridTable = new Handsontable(gridContainer, { | |
data: getData(), | |
width: function() { | |
// なにか動的に指定したい場合はメソッド形式で | |
return 800; | |
}, | |
height: 600, | |
colWidths: function (index) { | |
var width = 100; | |
if (index > 0) { | |
width = 600; | |
} | |
return width; | |
}, | |
minSpareRows: 1, | |
colHeaders: ['名前', 'セリフ'], | |
columns: [ | |
{"readOnly": true}, | |
{"readOnly": false} | |
], | |
rowHeaders: true, | |
contextMenu: true, | |
cells: function (row, col, prop) { | |
// ここで編集不可とかを指定できる(row とか col とかで判定しつつ) | |
// セルが選択される度によばれることに注意(作成時だけではない) | |
// なにかプロパティをセットして返すことで制御ができる | |
var cellProperties = {} | |
if (row % 2 == 0) { | |
// cellProperties.readOnly = true; // たとえば偶数行を読み取り専用とか | |
} | |
return cellProperties; | |
}, | |
afterChange: function(changes, source) { | |
// changes は array で | |
// [[row, col, pretext, aftertext]] というかんじ | |
// コピペとかで 複数行 一気に編集した場合にも対応してるっぽい | |
// あと編集状態から確定したら呼ばれるだけで、実際にテキストに変更があったかどうかは感知していない | |
// どうしてもひつようなら、 pretextとaftertextで要チェック | |
// 画面上で操作した場合は基本的には source が edit が指定さrてる | |
// 初期表示時に変更されたときは loadData が | |
// 自分で setDataAtCell() を使って変更するときは、 source に任意の文字列を指定できるので | |
// システムで変更したのかどうか判定が可能 | |
if (source == 'edit') { | |
for (var i = 0; i < changes.length; i++) { | |
var rowChange = changes[i]; | |
log(source + ' : ' + rowChange[2] + ' -> ' + rowChange[3]); | |
} | |
} else { | |
log(source); | |
} | |
}, | |
/* | |
これは選択セルが変更されたときによばれる(キー移動でもマウス移動でも) | |
start と end もあることから範囲選択にも対応している | |
r selection start row | |
c selection start column | |
r2 selection end row | |
c2 selection end column | |
*/ | |
afterSelection: function (r, c, r2, c2) { | |
// 現在選択中のセルを1つっていうことになると end の方を中心に考えるのがしぜんかな | |
log('moved : ' + r2 + '-' + c2); | |
// ボタンとかおしてフォーカスがGridから離れると | |
// getSelected() では取れなくなるので、 | |
// このタイミングで常に保持しておいたほうが無難 | |
// 追記 - start | |
// outsideClickDeselectsをfalseに設定したらフォーカスロストした時も | |
// 選択状態を維持できるので、それだけのためなら自前で保持する必要なし | |
// 追記 - end | |
selectedRow = r2, | |
selectedCol = c2; | |
} | |
}); | |
// 各種クリック | |
$(document).on('click', '#btn-consoledata', function (e) { | |
// getData() で現在の全データが取得可能 | |
// 画面で編集したものも常に反映されている模様 | |
console.log(gridTable.getData()); | |
}).on('click', '#btn-insert', function (e) { | |
// 最後の引数が afterChange の際に、ユーザー操作かシステム操作による変更なのか判別するキーになる | |
// この場合だと afterChange(changes, source) の source に system が渡る感じ | |
// 指定セルがReadOnlyならするー | |
if (gridTable.getCellMeta(selectedRow, selectedCol).readOnly) { | |
log('cannot edit cell...because readonly'); | |
return; | |
} | |
gridTable.setDataAtCell(selectedRow, selectedCol, $('#text-insert').val(), 'system'); | |
}); | |
}); | |
var getData = function () { | |
return [ | |
["メイド長","まおーさま……?"], | |
["魔王","良い気分だ"], | |
["",""], | |
["メイド長","まおーさま?"], | |
["魔王","どうしたんだー? メイド長-。きょとんとした顔をして"], | |
["",""], | |
["メイド長","まおー、様?"], | |
["魔王","おなかも減った、疲れた。まったく酷い目にあった"], | |
["",""], | |
["メイド長","……"], | |
["",""], | |
["魔王","ふふん。もう大丈夫だ。戻ろう"], | |
["",""], | |
["メイド長","どこへ?"], | |
["",""], | |
["魔王","――戦場へ"], | |
["","(にたぁり)"], | |
["",""], | |
["メイド長","うわぁぁぁっ!!"], | |
["","(ザシュッ!)"], | |
["",""], | |
["魔王","くぅっ! 主人に手を挙げるとは、\nしつけがなっていないぞ雌犬めっ"], | |
["",""], | |
["メイド長","わたしのまおー様は! まおー様はっ!\n 魔王なんかじゃ、ないっ!!"], | |
["","(ヒュバッ!)"], | |
["",""], | |
["","(キンッ! キンッ! ギキンッ!)"], | |
["",""], | |
["魔王","どこから出した、その長剣……"], | |
["",""], | |
["メイド長","わたしのまおー様は、そんな下卑た、物欲しげで\n 下品に笑ったりはしませんっ!"], | |
["",""], | |
["魔王","それは残念、可哀想に。これからはこの表情で笑うのだ"], | |
["",""], | |
["メイド長","せりゃぁぁっ!!"], | |
["","(ザッ! シュバっ! ヒュインッ!)"], | |
["",""], | |
["魔王","上級魔族並みか。\n“技”とはすごいな、獣鬼にまさる我が筋力さえも凌ぐのか"], | |
["",""], | |
["メイド長","まおー様っ! まおー様っ!!"], | |
["",""], | |
["魔王","ええいっ! 間抜けな呼び方で我が名前を連呼するなっ!"], | |
["",""], | |
["メイド長","あなたなどの名を呼ぶつもりはないっ。\n わたしのまおー様は、マイマスターはただ1人っ"], | |
["",""], | |
["魔王","こざかしいっ!"], | |
["","(ドシュっ!)"], | |
["",""], | |
["メイド長","まおー様はっ。賢くて、聡明で、理知的で、\n 合理的で、冷静で、シニカルで、嫌って云うほど現実的なのに\n はにかんだ笑顔は可愛らしいマイマスターっ。\n だらしなくて着替えも洗濯もいやがって、\n 掃除も料理もろくに出来ない、わたしの選んだわたしの運命っ!"] | |
]; | |
}; | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment