バージョン | 全部 |
---|---|
投稿者 | まん |
状態 | 完了 |
投稿日 | 2008-11-19 (水) 10:20:16 |
意図としては、#contentは大変便利に使っていますが、表示量が膨大となり、それすらも視覚的にうっとうしくなってしまいました。 なのでプルダウンメニュー表示・選択からリンクできれば、スマートになるなかと思いました。
function replace_contents($arr) { $contents = $this->contents->toString(); $contents_pulldown = '<div class="contents">' . "\n" . '<a id="contents_' . $this->id . '"></a>' . "\n" . '<select onChange="location.href=\'#\'+this.options[this.selectedIndex].value">' . "\n"; $level = 0; foreach(explode("\n", $contents) as $line) { if (preg_match('/^<ul/', $line)) { $level++; $line = substr($line ,65);//<ul class="list...margin-left:16px"><li> } else $line = substr($line, 4);//<li> if (preg_match("/^<a href=\"#(.+)\"> (.+) <\/a>/", $line, $match)) $contents_pulldown .= '<option value="' . $match[1] . '">'.str_repeat('-', $level-1) . $match[2]."</option>\n"; $level -= preg_match("/<\/ul>/", $line); } $contents_pulldown .= '</select>' . "\n" . '</div>' . "\n"; return $contents_pulldown; }
class Contents_UList extends Inline { function Contents_UList($text, $level, $id) { // Reformatting $text make_heading($text); // A line started with "\n" means "preformatted" ... X( $text = "\n" . '<option value="' . $id . '">' . str_repeat('-', $level) . ' ' . trim($text) . '</option>'; return parent::Inline($text); } function toString() { return $this->wrap("\n" . join("\n", $this->elements) . "\n", 'select', ' onChange="location.href=\'#\'+this.options[this.selectedIndex].value"'); } }これを、lib/convert_html.php 内に元からあるclass Contents_UList と差し替える。これも、やっつけな改造な気がしますが・・・ -- 2010-03-09 (火) 16:19:08