jQueryを利用してHTMLのテキストエリアの高さを行数にあわせて自動調整してくれるプラグイン、autoResizeというものがあります。
jQuery plugin: ‘autoResize’ – James Padolsey
今までPukiWikiの編集画面はスクロールしにくく使いづらいと感じていたので、即組み込みます。PukiWikiは1.4.7を使用。
$ cd pukiwiki
$ wget 'http://james.padolsey.com/demos/plugins/jQuery/autoresize.jquery.min.js' -O autoresize.jquery.min.js
$ wget 'http://code.jquery.com/jquery-1.4.2.min.js' -O jquery.min.js
そして以下のパッチを適用。lib/html.phpとskin/pukiwiki.skin.phpを変更します。
diff -ur lib/html.php lib/html.php
--- lib/html.php 2010-06-23 02:04:17.000000000 +0900
+++ lib/html.php 2010-06-23 02:17:21.000000000 +0900
@@ -245,7 +245,11 @@
<input type="hidden" name="cmd" value="edit" />
<input type="hidden" name="page" value="$s_page" />
<input type="hidden" name="digest" value="$s_digest" />
- <textarea name="msg" rows="$rows" cols="$cols">$s_postdata</textarea>
+ <textarea id="expandingmsg" name="msg" rows="$rows" cols="$cols">$s_postdata</textarea>
+ <script type="text/javascript">
+ $('textarea#expandingmsg').autoResize({limit: 9000});
+ $('textarea#expandingmsg').keydown();
+ </script>
<br />
<div style="float:left;">
<input type="submit" name="preview" value="$btn_preview" accesskey="p" />
diff -ur skin/pukiwiki.skin.php skin/pukiwiki.skin.php
--- skin/pukiwiki.skin.php 2010-06-23 02:04:18.000000000 +0900
+++ skin/pukiwiki.skin.php 2010-06-23 02:14:49.000000000 +0900
@@ -79,6 +79,8 @@
<link rel="stylesheet" type="text/css" media="screen" href="skin/pukiwiki.css.php?charset=<?php echo $css_charset ?>" charset="<?php echo $css_charset ?>" />
<link rel="stylesheet" type="text/css" media="print" href="skin/pukiwiki.css.php?charset=<?php echo $css_charset ?>&media=print" charset="<?php echo $css_charset ?>" />
<link rel="alternate" type="application/rss+xml" title="RSS" href="<?php echo $link['rss'] ?>" /><?php // RSS auto-discovery ?>
+ <script type="text/javascript" src="jquery.min.js"></script>
+ <script type="text/javascript" src="autoresize.jquery.min.js"></script>
<?php if (PKWK_ALLOW_JAVASCRIPT && $trackback_javascript) { ?> <script type="text/javascript" src="skin/trackback.js"></script><?php } ?>
コメント欄にある通り、autoResizeの後で
$("textarea#expandingmsg").keydown();
をしないと、元々長いテキストに関しては初期状態ではサイズが不適当になります。