新規作成 || カテゴリ一覧 | ページ一覧 | 更新履歴 | 差分履歴 || アンテナ || PUT ||
shortcut: FrontPage || WikiLab | StoreRoom/最新 | 日々の泡 | むず痒いパソコン日記/最新 || HelpPage ||[edit]

WikiLab/WorkReport/TagLinks - tag-links のカスタマイズ。

差分表示


閲覧画面に戻る:WikiLab/WorkReport/TagLinks / 差分履歴を表示:WikiLab/WorkReport/TagLinks

tag-links のカスタマイズ。

- [[log:2003-12-01 WikiLog:log:2003-12-01#p4]] tag-linksをWalWikiに 
- カスタマイズのまとめ:WikiLab/BeginnerGuidance/TagLinks
* てすと。
[[''''''#tags:ToDo]]

* セクションへのジャンプ。by yakty 先生。

- 2004/01/29(Thu) 18:26:51 ToDo[済] tag-links で見出し位置に飛べるといいなぁ…。

 sub tag_links {
     my $tag= shift;
     my (%has);
     foreach my $page (keys %database){
         next if $page eq $form{mypage};
         next if ($page eq $RecentDiffs);
         my @parts = &read_by_part($page);
         for(my $i=0; $i<@parts; $i++){
             my @matches = ($parts[$i] =~ /_${tag}_\s*(.+)$/gm) or next;
             foreach my $val (@matches){
                 my $link = ($i > 0) ? sprintf("%s#i%d", $page, $i-1) : $page;
                 if(defined $has{$val}){
                     push @{$has{$val}}, $link;
                 } else {
                     $has{$val} = [$link];
                 }
             }
         }
     }
     my @result = ();
     my @keys = sort { $has{$a}[0] cmp $has{$b}[0] } keys %has;
     foreach my $val (@keys){
       my @hits = map { "[[$_]] " } @{$has{$val}};
       $val =~ s/$embedded_name//go;
       push @result, escape($val) . " @hits";
     }
     return @result;
 }

* tag-links 専用コメントボックス。{{id:COMMENT;_}}
- 2004/03/25(Thu) 12:07:43 sbox にはいらない気がするけど、個人用の Wiki に tag-links 専用コメントボックスがあると便利な気がした。
-- タグを select で選べるようにする。
-- select で選べるタグは、専用の WikiPage に記述して登録できるようにする(AsO さんちの[[行き先表示 AsO:Profile.AsO.!状態]]を頂けるかな)。と思ったら、[[これ http://www1.udn.ne.jp/~AsO/softdev/AsO.20031119.0759.yukiwiki.txt]]って去年ので、まだ行き先表示ついてないし。''''ぶぅぶぅ。''''これまでの改造を切ったり張ったりすればできるような気はするんだけど。
- 2004/03/26(Fri) 18:06:37 自分でも何を書いたか解らないんだけど、大まか出来た。
-- AsO さんちは、コメント欄を作る時にセレクトボックスの option を記述するようになっていて、それもいいかなと思ったんだけど、どーゆーわけか(もこーゆーわけかもなく、正規表現を間違ってるだけなんだろうけど)、引数付きのコメント欄を HTML 整形できず、[[''''''#commenttags:hoge:hoge:...]] のまま表示されちゃってたのね。
-- でも、使い道から言って、表記のばらつきをなくすためのセレクトボックスなので、どのページでも同じように option が表示されるほうがよいわけなので、やっぱり TagsList というページに、option を登録することにしたんだった。
-- %%明日の%% ご予定。
--- yakty さんの link to part を入れる。
--- 今は TagsList の登録ルールが単に改行区切りなんだけど、微妙に不便なので要検討。
--- 使い道から言って、ページ内の複数設置は多分いらない。けど要検討。
- 2004/03/26(Fri) 18:21:12 ''yakty'' : ''''添削た〜いむ。…あ、いらない?''''
-- 2004/03/26(Fri) 19:04:56 ''rica'' ''''↑また衝突で消した…?'''' ええとねぇ、まだ添削してもらうところまで出来てない(笑)。今はこの辺↓を考え中。
         foreach (split /\n/, $database{$TagsList}){
-- 2004/03/26(Fri) 23:05:38 またしても、自分で何を書いたかよく解ってないけど、できた。次は link to part。

- 2004/03/26(Fri) 23:44:26 とりあえず、動いてはいる。だから足りないものはないんだろうけど、意味のない余計なものが入っていることはあり得る。なぜなら、コピペだから。

 my $TagsList = 'WikiTool/TagsList';

 my $embed_rcommenttag = '[[#rcommenttag]]';

     commenttag => \&do_commenttag,

         $part = sprintf("#tag", $form{mycmtno}) if($form{mycmd} eq 'commenttag');

 sub do_commenttag {
     my ($content) = $database{$form{mypage}};
     my $datestr = &get_now;
     my $tagstr = $form{mytag} ? " ::$form{mytag}:: : " : " ";
     if ($content =~ s/(^|\n)(\Q$embed_commenttag\E)/- $datestr$tagstr$form{mymsg}\n$1$2/) {
         ;
     } else {
         $content =~ s/(^|\n)(\Q$embed_rcommenttag\E)/$1$2\n- $datestr$tagstr$form{mymsg}/;
     }
     if ($form{mymsg}) {
         $form{mymsg} = $content;
         &do_write;
     } else {
         $form{mycmd} = 'read';
         &do_read;
     }
 }


     } elsif ($embedded eq $embed_commenttag or $embedded eq $embed_rcommenttag) {
         my $lastmodified = &get_info($form{mypage}, $info_LastModified);
         my $contents;
         foreach (split /\n/, $database{$TagsList}){
             if(/::(.+)::/){ 
                 my $tagarg = &escape($1);
                 $contents .= "    <option>$tagarg</option>\n";
             }
         }
         return <<"EOD";
 <form action="$url_cgi" method="post">
 <a name="tag"></a>
     <input type="hidden" name="mycmd" value="commenttag">
     <input type="hidden" name="mypage" value="$escapedmypage">
     <input type="hidden" name="myLastModified" value="$lastmodified">
     $resource{tagname}
     <select name="mytag">
 $contents
     </select>
     <input type="text" name="mymsg" value="" size="80">
     <input type="submit" value="$resource{commentbutton}">
 </form>
 EOD

That's a slick answer to a chgnlenailg question
** tag-links 専用コメントボックス。引数つき編。
- 2004/03/27(Sat) 01:08:53 …ちょっとわがままなこと考えちゃった。やっぱり、ドロップダウンリストが長くなると使いづらいかなぁ。例えば「リンク集用」「お仕事メモ用」とかグループ分けをして登録して、[[''''''#commenttag:お仕事用]] って書いたら、お仕事用のタグリストだけ表示して欲しいかも…。そんなことできんの?

- 2004/03/27(Sat) 08:42:25 ""引数付きのコメント欄を HTML 整形できず"" って、正規表現じゃなくて、もしかして、"""embedded_to_html()""" こっち? またまたコピペで
     } elsif ($embedded =~ /$embed_rcommenttag/) {
         return &make_commenttag($1);
として、仕方がないので(ぉ """embedded_to_html()""" の中に書いてたのを外に出して """make_commenttag""" というのを作ったら、整形だけはできた("""make_commenttag()""" の中身は今から書くさ)。ところで、じゃあ、昇順と降順を作りたい場合はどーすんのさ。用途から言って昇順だけありゃいいといえばいいんだけどさ。
-- ''''どんどん自分が何を書いているのか解らなくなってゆく…。''''
-- ''''もういやじゃ。ムリな気がしてきた。だって本当に何を %%書いているのか%% コピペしているのか解らないんですもん。''''

** tag-links %%専用%% コメントボックス。通常のコメント欄にくっつけ編。
- 2004/03/27(Sat) 01:26:22 も一つ考えた。これは sbox に入れるつもりはなかったんだけど、通常のコメント欄にタグのドロップダウン付きだったら、入れてもいいかな。
-- 2004/03/27(Sat) 09:48:20 これはでけた(;_;)。カンタン(;_;)。

 my $TagsList = 'WikiTool/TagsList';

 sub do_comment {
     my ($content) = $database{$form{mypage}};
     my $datestr = &get_now;
     my $tagstr = $form{mytag} ? " ::$form{mytag}:: : " : " ";    # rica add
 --------------------------------------------------
             if($i == $cmtno){
 #                unless($matchstr =~ s/(\Q$embed_comment\E)/- $datestr$namestr$form{mymsg}\n$1/
                 unless($matchstr =~ s/(\Q$embed_comment\E)/- $datestr$tagstr$namestr$form{mymsg}\n$1/
 #                    or $matchstr =~ s/(\Q$embed_rcomment\E)/$1\n- $datestr$namestr$form{mymsg}/){
                     or $matchstr =~ s/(\Q$embed_rcomment\E)/$1\n- $datestr$tagstr$namestr$form{mymsg}/){
                     &print_error('Comment form does not exist.');
                 }
             }

 sub embedded_to_html {
     my ($embedded) = @_;
     my $escapedmypage = &escape($form{mypage});
     # rica add
     my $contents;
         foreach (split /\n/, $database{$TagsList}){
             if(/::(.+)::/){ 
                 my $tagarg = &escape($1);
                 $contents .= "    <option>$tagarg</option>\n";
             }
         }
     # rica add end
 --------------------------------------------------
     <!-- rica add-->
     $resource{tagname}
     <select name="mytag">
     $contents
     </select>

 sub tag_links {
     my $tag= shift;
     my (%has);
     foreach my $page (keys %database){
         next if $page eq $form{mypage};
         next if ($page eq $RecentDiffs);
         next if ($page eq $TagsList);    # rica add

これで全部かな? 何か抜けてる?
* 空コンテナ。
- 2004/03/27(Sat) 10:44:14 [[''''''#tags:]] の中身がないときも <div class="text"> の空コンテナができてしまうのをなんとかできないかなぁ。↓これ。
[[''''''#tags:からっぽのこれ]]

 sub make_tag_links {
     my @lines = map { "- " . $_ } tag_links(@_);
     return (@lines) ? &text_to_html(join("\n", @lines)) : "";
     #my $html = &text_to_html(join("\n", @lines));
     #return $html;
 }

こう? - どらえもん
- どらえも〜ん、ココロの友よ!! でけた(^-^)。これで安心して InfoBar に 重要メモが置ける。2004/03/27(Sat) 11:52:13 ''rica''

* タグにメタ文字が使えない?
==r
2004/04/03(Sat) 15:45:32

あれ? 表示されない…。

なぜか「?」を取ってみたら OK だった…。
- ○ 今日は何の日
- × 今日は何の日?

直し方が解らないので、「?」を取りました(;_;)。

TAGの検索をしている部分でメタ文字がクォートされてないとか?もしされてなければ\Q\Eで括ると幸せになれるかも? - どらえもん

どらえも〜ん、幸せ(^-^)。時々見かける、\Q\E というのはそういう意味だったのか。
でもどらえもん、「そういう意味」がどういう意味なのか本当はよく解ってない証拠に、
            my @matches = ($parts[$i] =~ /\Q::${tag}::\E\s*(.+)$/gm) or next;
            my @matches = ($parts[$i] =~ /::\Q${tag}\E::\s*(.+)$/gm) or next;

どっちでも表示されたんだけど、本当はどっちが正しいのかよく判らない、おれ、のびのびた。

どっちでも大丈夫だよのびたくん''''多分正体はジャイアン…''''。\Qと\Eは挟まれた部分のメタ文字をクォートするって意味だから、メタ文字ではない:を括っても影響はないから内容的には同じになるんだよ。でも必要最低限の部分を括った方が間違いは少ないだろうから:'''''':\Q$tag\E::の方がいいかな? - どらえもん

どらちゃん、ありがとう。多分解ったわ。 - しずか。

* ::ToDo:: tag-links 高機能化計画。

とうとう、yakty 先生が どらえもん の皮を脱ぎ捨て、本格的に動き出した!!
- 2004/04/16(Fri) 15:14:51
+ タグを付箋っぽい表示にして、
+ タグをボタンにして、クリックごとに(済)が ON/OFF されて、
+ タグの一覧ページで表示する。

** 付箋が流行っているようなので、便乗してみたりとか。

[[autumnpnk/wiki.css]] この CSS で
::ほげ:: 付箋のように表示。
ただし、メモ部分が長いと、とてもマヌケな罠。

::ほげ:: この部分が長いと、全然付箋ぽさがなくなる罠。ほらね。この部分が長いと、全然付箋ぽさがなくなる罠。ほらね。この部分が長いと、全然付箋ぽさがなくなる罠。ほらね。この部分が長いと、全然付箋ぽさがなくなる罠。ほらね。

やっぱりこれ、タグによって色を変えるぐらいの芸当が欲しいよねぇ。っていうか、荷札の色を変えたいというか、これだと荷札は文字列で表示したい気がしたな。

っていうか 1行に 2つ以上タグを書いた時はどーすりゃいいんだしょうね。
::ほげ::こんな感じで::ほげほげ::2個目があれなの。::ほげ::ほげ?

TagLinks抽出部分の正規表現って今はどうなってるの? - どらえもん
''''っていうか今動いているTagLinks関連部分のソースは全部このページに載せておいて欲しいぞ''''

""TagLinks関連部分のソース"" < このページにって言うか、ToDo: 完成してる部分は BeginnerGuidance にまとめよう。
と書こうとして忘れてました…。tag-links の抽出部分というか、↑でこんがらかっているのは、整形ルールのところですが。
     $line =~ s|::(.+?)::(.*)|<img src="$modifier_url_data/tag.gif" alt="$1" title="$1"><span class="tags">$1</span> <span class="tags_memo">$2</span>|g;

の """(.*)""" これが雑すぎなんだろうな、と思います…。- しずか

ああ、そういうことか。今のだと一行に2個タグを書いても最初のしか抽出されないだろうからそれが問題なのかと思ってた。

いえ、抽出はされるのですが、付箋仕様にしようとしたら整形が巧くいかなかっただけなのです。
2つ目の抽出てすと。
[[''''''#tags:ほげ]]

 $line =~ s!::(.+?)::(.*?)(?=$|::.+?::)!<img src="$modifier_url_data/tag.gif" alt="$1" title="$1"><span class="tags">$1</span> <span class="tags_memo">$2</span>!g;

どう?''''ちょっと修正''''

よいみたいv(^-^)。どらえもんありがとう。
やっぱり付箋仕様だと荷札アイコンじゃまかなぁ。文字列表示して付箋の中に入れちゃったほうがいいかなぁ。

今気付いたけど2個目は違うタグなのね。同じタグだと抽出されないでしょ?

あ、ほんとだ。実際には同じタグを 1行に2回以上書くことって、ないような気もしないでもないけど。

 ($parts[$i] =~ /::\Q${tag}\E::\s*(.+?)(?=$|::\Q${tag}\E::)/gm)

もし対応したければこう。''''だと思う''''

 ($parts[$i] =~ /::\Q${tag}\E::\s*(.+?)(?=$|::.+?::)/gm)

もし表示される内容を次のタグっぽい部分までにしたいならこう。''''だと思う''''

同じメモに二つのタグをつけたいことがあるので(::Wiki:: ::URLめも:: http://jm.vis.ne.jp/sbox/
みたいな感じで)、後者はやんないほうがいい感じ?

CSS はまた今度考えよう…。

…"""<span class="tags_memo"> </span>""" この空要素が小癪だ…。
やっぱり単に、タグ部分を付箋仕様表示にすりゃいいだけだったんだろうか…。

 $line =~ s!::(.+?)::(.*?)(?=$|::.+?::)!qq(<img src="$modifier_url_data/tag.gif" alt="$1" title="$1"><span class="tags">$1</span>) . ((($_=$2) =~ /\S/) ? qq( <span class="tags_memo">$_</span>) : "")!eg;

空要素対策。 - どらえもん

==r
2004/04/14(Wed) 23:53:26

** TagLinks という特殊ページはどうかな?

- 2004/04/14(Wed) 22:55:05 またまた新しい改造案。
AntennaPage みたいに、プルダウンからタグを選択して表示、みたいなの。どかな?
-- やっぱりこれは出来るようならあったほうが便利。
- 2004/04/16(Fri) 01:39:42 先生のおうちで出来た予感。''''これはなんとなく自力でも出来そうな予感がしてたので、頑張ってみてから答え合わせをしようかなぁ。''''

** タグ削除機能はどうかな?
- 2004/04/15(Thu) 16:22:10 タグ削除機能も欲しい気がしてきた。これはちょっと難しいなぁ…。
-- イメージとしては、一覧から「タグを削除」ボタンを押すと :'''''':hoge:: の記述が hoge: に変更される、みたいなものなんだけど。…そんなややこしいことしなくても、やっぱり「手動」が一番かなぁ。気軽にタグを追加してもらう分には構わないけど、気軽に削除されるとちょっと困るかもしれないしなぁ。
-- あ、:'''''':hoge(済):: のほうがいいですね、先生。
-- そうすると、TagLinks ぺーじには、各タグと、それぞれ(済)を付加したプルダウンメニューがあるといいのかなぁ。
- 2004/04/15(Thu) 19:16:21 yakty 先生のおうちで出来た予感。
-- 2004/04/16(Fri) 15:08:01 一覧表示ページの、(済)チェックボックスも出来た模様。

* 整形ルール近辺ごちゃごちゃ。{{id:RULE;_}}
- StoreRoom/2003/11-21#ID30a-1 から移動。

**済み

- """_ほげ_""" の整形ルールをナントカすること。StoreRoom/2003/11-21#FormatRulesHoge

- 2004/01/29(Thu) 17:53:18 WikiTool/FormatRules では、「記号 2つで囲む」というルールなので、""":'''''':tag::""" というルールに変えてみた。で、問題発覚。
-- """_tag_""" というルールだったときには、"""_''''''ToDo_""" というタグを書いてもリンクにならなかったのに、ルールを変更したらタグの文字列が ToDo ページへのリンクになるようになっちゃった。なんでじゃろ。
-- まぁ、ルールも含め、後で考えるよ。
-- 2004/03/24(Wed) 11:08:13 結局 :'''''':hoge:: のルールにしちゃった。ページにリンクになっちゃうのは、ある意味便利かもと思ったり。でも、title 属性で「これはタグだよ」というのを簡単に説明して表示しようかと思ったら、リンクだと subjectline が出ちゃうね。ま、細かいことは気にするな。

- 2004/01/31(Sat) 20:36:31 タグは行頭じゃなくてもいいことにしようかなぁ、とちょっと思ったんだけど、RecentDiffs からも拾うようになってしまった。でも、「このページは無視してね」という書き方は、前に何度か教えてもらってうっすらと知っているような気がする。
-- """next if ($page eq $RecentDiffs);""" 他のところに書いてあったのをもらってきたよ。

- 2004/01/31(Sat) 20:59:17 なんとなく、ページ名のほうを先頭に持って来てみた。

- 2004/01/31(Sat) 21:42:26 < > が &lt; &gt; になっちゃうのがイヤンかも。"""escape()""" だか """unescape()""" だか、その辺り?
-- 2004/03/13(Sat) 18:12:05 """push @result, escape($val) . " @hits";""" を """push @result, unescape($val) . " @hits";""" にしてみたんだけど、何か問題あるかなぁ。

shortcut: FrontPage || WikiLab | StoreRoom/最新 | 日々の泡 | むず痒いパソコン日記/最新 || HelpPage || [edit]
select css: default | sakura | mono | greenheck | snow | NN4.x用(多分) || LinuZau!! | VikiWiki!? || others |

新規作成 || カテゴリ一覧 | ページ一覧 | 更新履歴 | 差分履歴 || PUT