KG Software Library

FSWiki/Tips

FSWiki/Tips/RSS

alternate を設定し、Firefox の Feed に対応させる

サイトテンプレートの<head>タグ内に下の記述を追加すると、Firefoxの RSS Feed に対応できます。

<link rel="alternate" type="application/rss+xml" title="RSS" href="?action=RSS" />

※WikiFarmにおいても対応できています。

RSSの詳細情報に多くの情報を出力する

下記修正は、ページソースを 255バイトで切ってしまうので、語尾が文字化けする可能性もあります。(メンドイので細かいところは気にしない・・・)

--- RSSMaker10.pm.org   Tue Dec 07 15:47:10 2004
+++ RSSMaker10.pm       Fri Apr 15 10:22:49 2005
@@ -21,10 +21,9 @@
 sub get_headline {
        my ($page_body) = @_;

-       if ($page_body =~ m/\!{1,3}\s*(.+)/mo) {
-               return $1;
-       }
-       return undef;
+       $page_body =~ s/\n//g;
+
+       return substr($page_body,0,255);
 }

 #==============================================================================

Sleipnir2 のRSS Reader 対応

以下の修正を適用し、index.rdf へのアクセスをRSS出力にする。

index.rdf へのアクセスをRSS出力に適用させる
例えば、wiki.cgi/index.rdf へのアクセスを ?action=RSS に対応させます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--- wiki.cgi.org    Wed Aug 03 18:17:01 2005
+++ wiki.cgi    Wed Aug 03 18:04:55 2005
@@ -12,6 +12,16 @@
 }
 
 #==============================================================================
+# Sleipnir2 - RSS Reader 対応
+#==============================================================================
+if ( $ENV{'PATH_INFO'} =~ /\/index\.rdf$/ ) {
+    $ENV{'QUERY_STRING'}='action=RSS';
+    $ENV{'PATH_INFO'} =~ s/\/index\.rdf//;
+}
+
+#==============================================================================
 # モジュールのインクルード
 #==============================================================================
 use Cwd;
メニューの RSS を index.rdf へのリンクに変更する
1
2
3
4
5
6
7
8
9
10
11
--- Install.pm.org    Wed Aug 03 18:27:12 2005
+++ Install.pm    Wed Aug 03 18:27:22 2005
@@ -8,7 +8,7 @@
 
 sub install {
     my $wiki = shift;
-    $wiki->add_menu("RSS",$wiki->config('script_name')."?action=RSS",-1);
+    $wiki->add_menu("RSS",$wiki->config('script_name')."/index.rdf",-1);
     
     if($wiki->config("rss_version") eq "1"){
         $wiki->add_handler("RSS","plugin::rss::RSSMaker10");
Comment
お名前: コメント:

FSWiki/Tips/Wiki書式挿入編集ボタンにコンボボックスを追加

ダウンロード

FSWikiPlugin:224 にて現時点で公開されている edit_button_rev05 に対する修正を行っています。

このダウンロードファイル内の tmpl ファイルは FSWiki用のみサンプルを追加しています。

利用例

以下のページでサンプルが見れます。

コンボボックスの使用方法

editform_<フォーマット名>.tmpl の insert_button(...) が記述されている部分に追加して利用します。

例)標準もしくは独自に追加したプラグインを追加する場合

 insert_select('プラグイン',[
     <!--TMPL_IF NAME="PLUGIN_calendar"-->['Calendar','{{calendar カレンダー名[,テンプレート[,表示月指定]]}}','\\n',''],<!--/TMPL_IF
  --><!--TMPL_IF NAME="PLUGIN_bugtrack"-->['BugTrack','{{bugtrack プロジェクト名,カテゴリ1,カテゴリ2...}}','\\n',''],<!--/TMPL_IF
  --><!--TMPL_IF NAME="PLUGIN_image"-->['直リンク画像','{{image ファイル名,ページ名,alt:テキスト,size:横(%|px)x縦(%|px),float:(left|right),thumbnail:縮小画像]}}','\\n',''],<!--/TMPL_IF
  --><!--TMPL_IF NAME="PLUGIN_@font"-->['フォント','{{@font text:',',color:,bgcolor:,size:,family:,bold,italic,underline,overline,line-through,blink,padding:,margin:}}','テキスト'],<!--/TMPL_IF
  --><!--TMPL_IF NAME="PLUGIN_@cols"-->['段組設定','{{@cols pos:[left|right],width:(px|%),height:(px|%)\\n','}}\\n',''],<!--/TMPL_IF
  --><!--TMPL_IF NAME="PLUGIN_@position"-->['表示位置設定','{{@position class:[className],width:(px|%),height:(px|%),pos:(left|center|right),left:(pt|px|em),right:(pt|px|em),float:(left|right)\\n','}}\\n',''],<!--/TMPL_IF
  --><!--TMPL_IF NAME="PLUGIN_@clear"-->['float属性の解除','{{@clear}}','\\n',''],<!--/TMPL_IF
  -->]);

上記のように、insert_select([[...],[...],[...]]); という配列形式で複数登録していきます。また、HTML::Template のパラメータに PLUGIN_<プラグイン名> で有効なプラグインをチェックができるようにしています。

上記例はあくまでも例ですのでそのまま利用しても @ 付きのもの(LayoutAlias用)は表示されないでしょう。

  • ありがとうございます。素晴らしいです。プレビューがあるのがとてもいいです。(是非こういうのが欲しかった…) 本家の方には公開されないのですか? 最新バージョンとして公開して頂いて構いませんが…。 - あき (2006/08/07-13:23:57)
  • 公開する時には取り合えず標準プラグインの記述くらいはあったほうが良いかもしれませんね。準備に時間がかかりますが、その内バージョンアップとして追加公開させていただきます。Tips にある別ウィンドウプレビューは結構便利です。これも組み込んでおいた方が良いのかな? - KG (2006/08/07-13:58:47)
お名前: コメント:

FSWiki/Tips/preview under the other window

概要

編集中の画面を固定したまま、プレビュー表示のみを別ウィンドウを開いて表示します。

利点
  • 別ウィンドウでプレビューする為、プレビュー表示が遅くても編集を続けることができる
  • プレビュー後に編集中の画面位置が移動しないのでスクロールする必要もない
欠点
  • 今はやりの Ajax ではない(笑)
  • プレビュー画面を見るのにアクティブ・ウィンドウを切り替える必要がある(場合がある)。
  • JavaScriptが有効でないと動作しない。

修正箇所

plugin/core/EditPage.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
--- EditPage.pm.org Tue Mar 28 08:07:14 2006
+++ EditPage.pm Wed May 31 11:02:08 2006
@@ -97,7 +125,15 @@ } $content = $wiki->convert_to_fswiki($content,$format); $buf = $buf."<br>".$wiki->process_wiki($content);
-
+ #-------------------------------------------------------------------------- + # プレビューウィンドウのみ表示 + } elsif($cgi->param("preview_only") ne ""){ + $time = $cgi->param("lastmodified"); + $buf = "プレビューを確認してください。<br>"; + $content = $wiki->convert_to_fswiki($content,$format); + $buf = $buf."<br>".$wiki->process_wiki($content); + $wiki->set_title($pagename."のプレビュー",1); + return $buf;
} elsif($wiki->page_exists($pagename)) { #ページが存在する場合 if($artno eq ""){
tmpl/editform.tmpl
フォーム内の「プレビューボタン」の下あたりに以下のコードを挿入します。
1
2
3
4
5
6
  <input id='preview_only' type="submit" name="preview_only" value="プレビューのみ(別窓)" style="display:none;" onClick="this.form.target='_PreviewWiki';this.form.action='<!--TMPL_VAR NAME="SCRIPT_NAME"-->';">
  <script type="text/javascript" language="javascript">
  <!--
  document.getElementById('preview_only').style.display = '';
  -->
  </script>

追記:JavaScript が無効の場合はボタンが非表示になるように変更しました。

サンプル

ここで適当に実験してください。

  • いいですね。発想は単純ですが、編集していた個所までスクロールする必要が無い分、操作性が良くなります。JavaScriptが有効で無い時にボタンを非表示にできるなら、特に問題は無いのでは? - あき (2006/06/01-13:11:01)
  • なるほど、では初期表示は display:none 属性を付加しておいて、JavaScriptで表示属性を変更するようにしましょう。 - KG (2006/06/01-13:24:28)
お名前: コメント:

FSWiki/Tips/wiki page update to remote-wiki

概要

編集用Wiki、公開用Wikiと分けて利用している方へ便利な利用方法の提案!

私の場合、当サーバのWikiとコンテンツがまったく同じものをローカルPCに構築しています。バックアップ目的でもあるのですが、普段は次のような使い方をしています。

  1. ローカルWikiにてページ作成/編集
  2. スペル・チェック
  3. 公開Wikiを別ウィンドウで開いてログイン
  4. 該当ページの作成/編集画面を表示
  5. ローカルWikiで作成/編集したページのソースを表示
  6. ソースのコピー(ローカルWiki)&ペースト(リモートWiki)

結構手順が多くて面倒です。この作業を軽減できる方法があります。軽減後の作業手順は以下の通り。

  1. ローカルWikiにてページ作成/編集
  2. スペル・チェック
  3. 再度、編集画面を表示
  4. 「公開サイトへ保存」ボタンをクリック
  5. 別ウィンドウが開いてリモートWikiページの作成/更新
    1. この時、ログインしないと編集できない環境では、参照権限がありません・・・と表示されるので、「ログイン」メニューよりログインする
    2. ログイン後、再度ローカルWikiより「公開サイトへ保存」ボタンをクリック

以上。注意点として、公開WikiとローカルWikiの差異がある場合は上書きされると言うこと。この為、公開Wikiの編集を複数人で行う場合には適用できない。管理者一人でメンテナンスする場合にのみ適用できるでしょう。

では、修正箇所を公開します。

修正箇所

基本的には、ローカルWikiの方だけ修正すればOKです。

plugin/core/EditPage.pm
1
2
3
4
5
6
7
8
9
10
11
12
--- org/fswiki/plugin/core/EditPage.pm Sat Jun 05 17:14:36 2004
+++ new/fswiki/plugin/core/EditPage.pm Wed Feb 01 16:04:29 2006
@@ -126,7 +126,8 @@ LAST_MODIFIED => $time, ACTION => 'EDIT', EXISTS_PAGE => $wiki->page_exists($pagename),
- SAGE => $sage});
+ SAGE => $sage, + PATH_INFO => $cgi->path_info()});
if($artno ne ""){ $tmpl->param(OPTIONAL_PARAMS=>[{NAME=>'artno',VALUE=>$artno}]);
tmpl/editform.tmpl

公開サイトのwiki.cgiへのURL 部分を書き換えて利用してください。

例) http://kgsoft.jf.land.to/fswiki/wiki.cgi

1
2
3
4
5
6
7
8
9
10
--- org/fswiki/tmpl/editform.tmpl Wed May 25 09:59:05 2005
+++ new/fswiki/tmpl/editform.tmpl Wed Feb 01 16:12:54 2006
@@ -11,6 +11,7 @@ <!--/TMPL_IF--> <input type="submit" name="save" value=" 保 存 "> <input type="submit" name="preview" value="プレビュー">
+ <input type="submit" name="save" value="公開サイトへ保存" onClick="this.form.target='_RemoteWiki';this.form.action='<<公開サイトのwiki.cgiへのURL>><!--TMPL_IF 'PATH_INFO'-->/<!--TMPL_VAR NAME="SCRIPT_NAME"--><!--/TMPL_IF-->';">
<input type="hidden" name="action" value="<!--TMPL_VAR NAME="ACTION"-->"> <input type="hidden" name="lastmodified" value="<!--TMPL_VAR NAME="LAST_MODIFIED"-->"> <input type="hidden" name="page" value="<!--TMPL_VAR NAME="PAGE_NAME" ESCAPE="HTML"-->">

この修正後、編集画面には「公開サイトへ保存」というボタンが追加されます。

Comment(3)
  • これ、ずっと気になってたんですが、『編集用Wiki』の方はローカルじゃなきゃいけませんか?(って、実際自分でやってみればいいだけなのですが…。まあそう仰らず回答頂けると幸いです) 非公開の外部サーバに『編集用Wiki』を設置すれば問題無い気がします。非公開でも見つかった場合怖い、ということであれば、『編集用Wiki』側だけ『ログイン時のみ編集可』にしておけば良い気がします。認識が誤っていればご指摘頂けると嬉しいです。 - あき (2006/09/04-13:51:58)
  • 改造ソースを見る限り、問題はなさそうですね。CMS拡張パックでも話題に挙がってたワークフローってのに流用できないかなぁと考えてます。可能なら、本体のバージョンアップやプラグイン設定の変更なんかも、編集用Wiki側で予め行っておいて安定した時点で全設定を含め公開用Wiki側に反映、なんてことができるよう考案中です。 - あき (2006/09/04-16:11:12)
  • 遅くなりました。ローカル限定ではないです。Wikiページ転送の考案時に取り合えず簡単に別のWikiに転送できるようにしたいなぁなんて思ってボタンを一個追加しました。あと同時に利用しているのが、リモート(転送先)Wikiの同一ページとの差分表示機能です。これは未公開なんですが、ローカルのページ編集前に整合性の確認に利用しています。 - KG (2006/09/04-18:31:52)
お名前: コメント:

FSWiki/Tips/word-break

概要

Firefoxで表示する際、word-break:break-all;が利用できずレイアウトが崩れる事がよくある。当サイトも当初は左メニューから英単語がはみ出してしまっていた。

上記設定はIEでは有効で、ブロック要素の範囲からはみ出す部分を折り返すようになる。Forefoxでは、折り返さず、はみ出してしまう。

  • Q.かっこ悪いはみ出しを抑制するにはどうすればいいか?
  • A.<wbr>タグを使いましょう。

<wbr>タグとは任意の位置で改行してもいいですよという機能である。

じゃぁ、どこに入れる?

ここです↓。

修正箇所

Wiki/HTMLParser.pm (FSWiki-3.5.10)
--- lib\Wiki\HTMLParser.pm.org Tue Dec 06 01:02:35 2005
+++ lib\Wiki\HTMLParser.pm Wed Apr 05 12:53:34 2006
@@ -415,12 +415,14 @@ if($url eq $name && $url=~/\.(gif|jpg|jpeg|bmp|png)$/i){ return "<img src=\"".$url."\">"; } else {
+ $name = &Util::escapeHTML($name); + $name =~ s/\//\/<wbr>/g;
if($self->{wiki}->config('open_new_window')==1 && ($self->{wiki}->config('inside_same_window')==0 || ($self->{wiki}->config('inside_same_window')==1 && index($url,'://') > 0))){
- return "<a href=\"$url\" target=\"_blank\">".Util::escapeHTML($name)."</a>";
+ return "<a href=\"$url\" target=\"_blank\">".$name."</a>";
} else {
- return "<a href=\"$url\">".Util::escapeHTML($name)."</a>";
+ return "<a href=\"$url\">".$name."</a>";
} } } @@ -436,11 +438,13 @@ if(!defined($name) || $name eq ""){ $name = $page; }
+ $name = &Util::escapeHTML($name); + $name =~ s/\//\/<wbr>/g;
if($self->{wiki}->page_exists($page)){ return "<a href=\"".$self->{wiki}->config('script_name')."?page=".&Util::url_encode($page)."\" class=\"wikipage\">".
- &Util::escapeHTML($name)."</a>";
+ $name."</a>";
} else {
- return "<span class=\"nopage\">".&Util::escapeHTML($name)."</span>".
+ return "<span class=\"nopage\">".$name."</span>".
"<a href=\"".$self->{wiki}->config('script_name')."?page=".&Util::url_encode($page)."\">?</a>"; } }

これで、"/" のところで改行されるようになります。というところで、左側のメニューなどではちゃんと改行されているでしょ?

サイト構成の利用状況等で"_"や","や"-"などでも改行されるようにすれば良いかもしれませんね。

Comment
お名前: コメント: