YukiWiki 2.1.2 に部分編集機能を追加

| | コメント(0) | トラックバック(0)

YukiWikiを使ってます。

WalWikiの「部分編集」機能を使いたくなりました。

データはYukiWikiとWalWikiで並行運用すらできるようです。

私はYukiWikiのプラグイン機能を使っています。
YukiWikiの現在の最新版は YukiWiki 2.1.2 です。
YukiWikiのプラグイン機能は YukiWiki 2.1.1 から追加されたようです。
WalWikiの現在の最新版は YukiWiki 2.0.5 をベースにした、2.0.5.wal.4.5版です。
WalWikiは YukiWiki 2.0.7相当のコードまで追加されているようです。
WalWikiにはプラグイン機能がないみたいなので、移行は難しそう。

WalWikiは、できるだけYukiWikiのスクリプトを崩さないように作成されています。

また、先頭のコメント部には追加した機能が番号つきでリストされています。これは、変更部分のコメント行に入れられている番号と対応しています。変更部分に興味があれば、一度diffを取ってみてください。もし、自分用にYukiWikiを改造する際、これらの一部の機能が必要であれば、お好きなようにその部分だけをご利用ください。
スクリプトの相違 (WalWiki - about WalWiki)

との事なので、「部分編集」機能部分のみ追加してみました。(感謝感謝)
変更部分に[part edit]のコメントが入っていました。
他の機能もコメントが入っているので、機能追加したい人は参考にするのもよさ気。

「部分編集」機能を追加

YukiWiki 2.1.2 に「部分編集」機能を追加しました。

機械的にコピー&ペーストして、微妙に修正しただけなので、おかしいところがあるかも。

Cygwinでdiffをとってみるとこんな感じ。

C:\> diff -c wiki.cgi wiki.cgi.yuki_212_part_edit > wiki.cgi.patch

「wiki.cgi.patch」はこんな感じ。

*** wiki.cgi	Sun Mar 28 00:21:30 2004
--- wiki.cgi.yuki_212_part_edit	Thu Jul  8 09:42:03 2004
***************
*** 194,199 ****
--- 194,204 ----
          &print_message($resource{cantchange});
      } elsif (&is_frozen($page)) {
          &print_message($resource{cantchange});
+     # Walrus add [part edit] start
+     } elsif ($form{mypart} =~ /^\d+$/ and $form{mypart}) {
+         my $mymsg = (&read_by_part($page))[$form{mypart} - 1];
+         &print_editform($mymsg, &get_info($page, $info_ConflictChecker), admin=>0);
+     # Walrus add [part edit] end
      } else {
          &print_editform($database{$page}, &get_info($page, $info_ConflictChecker), admin=>0);
      }
***************
*** 205,210 ****
--- 210,221 ----
      &print_header($page);
      if (not &is_editable($page)) {
          &print_message($resource{cantchange});
+     # Walrus add [part edit] start
+     } elsif ($form{mypart} =~ /^\d+$/ and $form{mypart}) {
+         my $mymsg = (&read_by_part($page))[$form{mypart} - 1];
+         &print_message($resource{passwordneeded});
+         &print_editform($mymsg, &get_info($page, $info_ConflictChecker), admin=>1);
+     # Walrus add [part edit] end
      } else {
          &print_message($resource{passwordneeded});
          &print_editform($database{$page}, &get_info($page, $info_ConflictChecker), admin=>1);
***************
*** 271,276 ****
--- 282,297 ----
          return;
      }
  
+     # Walrus add [part edit] start
+     if ($form{mypart} =~ /^\d+$/ and $form{mypart}) {
+         $form{mymsg} =~ s/\x0D\x0A|\x0D|\x0A/\n/g;
+         $form{mymsg} =~ s/\n*$/\n\n/ if ($form{mymsg});
+         my @parts = &read_by_part($form{mypage});
+         $parts[$form{mypart} - 1] = $form{mymsg};
+         $form{mymsg} = join('', @parts);
+     }
+     # Walrus add [part edit] end
+ 
      if (&conflict($form{mypage}, $form{mymsg})) {
          return;
      }
***************
*** 394,399 ****
--- 415,426 ----
      }
      my $cookedpage = &encode($page);
      my $escapedpage = &escape($page);
+     # Walrus add [part edit] start
+     my $formatpage = $cookedpage;
+     $formatpage =~ s/%/%%/g;
+     if    ($editable)      { $resource{'parteditlinkformat'} = qq(<a class="partedit" title="$resource{editthispart}" href="$url_cgi?mycmd=edit&amp;mypage=$formatpage&amp;mypart=%d">$resource{editbutton}</a>); }
+     elsif ($admineditable) { $resource{'parteditlinkformat'} = qq(<a class="partedit" title="$resource{admineditthispart}" href="$url_cgi?mycmd=adminedit&amp;mypage=$formatpage&amp;mypart=%d">$resource{admineditbutton}</a>); }
+     # Walrus add [part edit] end
      print <<"EOD";
  Content-type: text/html; charset=$charset
  
***************
*** 476,482 ****
  
  sub print_content {
      my ($rawcontent) = @_;
!     print &text_to_html($rawcontent, toc=>1);
  }
  
  sub text_to_html {
--- 503,510 ----
  
  sub print_content {
      my ($rawcontent) = @_;
! #   print &text_to_html($rawcontent, toc=>1);               # Walrus add [part edit]
!     print &text_to_html($rawcontent, toc=>1, partinfo=>1);  # Walrus add [part edit]
  }
  
  sub text_to_html {
***************
*** 509,514 ****
--- 537,543 ----
              my $hn = "h" . (length($1) + 1);
              push(@toc, '-' x length($1) . qq( <a href="#i$tocnum">) . &remove_tag(&inline($2)) . qq(</a>\n));
              push(@result, splice(@saved), qq(<$hn><a name="i$tocnum"> </a>) . &inline($2) . qq(</$hn>));
+             push(@result, sprintf(qq(<div class="partinfo">$resource{'parteditlinkformat'}</div>), $tocnum + 2)) if ($option{'partinfo'});       # Walrus add [part edit]
              $tocnum++;
          } elsif (/^(-{2,3})\($/) {
              if ($& eq '--(') {
***************
*** 575,580 ****
--- 604,610 ----
          }
      }
      push(@result, splice(@saved));
+     unshift(@result, sprintf(qq(<div class="partinfo">$resource{'parteditlinkformat'}</div>), 1)) if ($option{'partinfo'});  # Walrus add [part edit]
  
      if ($option{toc}) {
          # Convert @toc (table of contents) to HTML.
***************
*** 885,896 ****
--- 915,928 ----
      my $edit = $mode{admin} ? 'adminedit' : 'edit';
      my $escapedmypage = &escape($form{mypage});
      my $escapedmypassword = &escape($form{mypassword});
+     my $partfield = ($form{mypart} =~ /^\d+$/ and $form{mypart}) ? qq(<input type="hidden" name="mypart" value="$form{mypart}">) : '';      # Walrus add [part edit]
  
      print <<"EOD";
  <form action="$url_cgi" method="post">
      @{[ $mode{admin} ? qq($resource{frozenpassword} <input type="password" name="mypassword" value="$escapedmypassword" size="10"><br>) : "" ]}
      <input type="hidden" name="myConflictChecker" value="$conflictchecker">
      <input type="hidden" name="mypage" value="$escapedmypage">
+     $partfield <!-- walrus add [part edit] -->
      <textarea cols="$cols" rows="$rows" name="mymsg" wrap="off">
  $mymsg</textarea><br>
  @{[
***************
*** 1319,1324 ****
--- 1351,1370 ----
  EOD
  }
  
+ # Walrus add [read by part] start
+ sub read_by_part {
+     my ($page) = @_;
+     return unless &is_exist_page($page);
+     my @lines = map { $_."\n" } split(/\x0D\x0A|\x0D|\x0A/, $database{$page});
+     my @parts = ('');
+     foreach my $line (@lines) {
+         if ($line =~ /^\*{1,3}/) { push @parts, $line; }  # IKE:MOD:[header level]は3に固定
+         else                                 { $parts[$#parts] .= $line; }
+     }
+     return @parts;
+ }
+ # Walrus add [read by part] end
+ 
  sub is_exist_page {
      my ($name) = @_;
      if ($use_exists) {

YukiWiki 2.1.2の「wiki.cgi」と同じフォルダに上記「wiki.cgi.patch」を保存して、以下を実行すればいいはず。
Cygwinのpatchコマンドを使いました。

C:\> patch -c -b wiki.cgi wiki.cgi.patch

改行コードが変わるのでちょっと戸惑いました。

  • オリジナルの「wiki.cgi」の改行コードは「0x0D 0x0A」
  • Cygwinのdiffの出力の改行コードは「0x0A」
  • patchコマンド実行後の「wiki.cgi」の改行コードは「0x0A」

「wiki.css」の適当な場所に以下を追加。

/* walrus add [part edit] start */
div.partinfo {
    padding-bottom: 0px;
    margin-bottom:  0px;
    color:          #5555ff;
    font-size:      0.8em;
    text-align:     right;
}
/* walrus add [part edit] end */

こんな感じでいいと思います。

トラックバック(0)

このブログ記事を参照しているブログ一覧: YukiWiki 2.1.2 に部分編集機能を追加

このブログ記事に対するトラックバックURL: http://kinshachi.ddo.jp/mt/mt-tb.cgi/315

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、ikeが2004年7月11日 04:37に書いたブログ記事です。

ひとつ前のブログ記事は「BHODemon」です。

次のブログ記事は「BugMeNot」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近のコメント

Powered by Movable Type 4.261