コメント記録機能強化(?)版の extedit

観測気球

収集物の記録書庫 a data archive of collection -- collectible toys

[要旨] extedit をいじってコメント投稿履歴を html 形式で残せるようにしてみました。
[キーワード] コメント投稿履歴自動記録

« WBEditor 1.0 と 1.1 beta、同時リリース | トップページ | カレイドスター トレーディングコレクション »

2004.04.05

コメント記録機能強化(?)版の extedit

ということでextedit を改造して、コメント記録機能を強化してみました。

どの辺を強化したかというと。

  • ログファイルの拡張子が .html のとき、コメント投稿先の記事を
            <a href="当該記事のURL">当該記事のタイトル</a> (コメント投稿日時)
    の形式で記録するようにした。
  • 従来の版では対応していなかった JUGEM, NewsCollector (のコメント欄)にも対応した。
  • エディタに渡すファイル名のフォーマットを yyyymmddHHMMSS.txt にした。

といった辺り。あとは自分向けにエディタを xyzzy にしたときにできる *.~1 ファイルを消すようにした、ってところかな。

以下に、私が修正した箇所を context diff 形式で公開しておきます。参考にしてくださいませ。

*** extedit.js.orig	Mon Mar 29 02:41:49 2004
--- extedit.js	Mon Apr 05 19:21:13 2004
***************
*** 1,6 ****
  <script type="text/javascript">
  /*
! $Id: extedit.js,v 1.6 2004/03/28 17:41:49 ishinao Exp $
  Author: ishinao <ishinao@ishinao.net>
  Licence: GPL
  extedit - Webブラウザの入力フォームで好きなエディタを使う
--- 1,7 ----
  <script type="text/javascript">
  /*
! $Id: extedit.js,v 1.6.1.1 2004/04/05 07:04:05 tsupo Exp $
! #Id: extedit.js,v 1.6 2004/03/28 17:41:49 ishinao Exp $
  Author: ishinao <ishinao@ishinao.net>
  Licence: GPL
  extedit - Webブラウザの入力フォームで好きなエディタを使う
***************
*** 10,34 ****
  //設定------------->
  
  //temporary file作成directory。空ならシステム設定temporaryパスになる。
! var tempdir = "";
  //logファイル。空ならシステム設定temporaryパス+extedit.logになる。
! var logfile = "";
  //使用するeditorのpath。空なら「.txt」に関連づけられているエディタになる。
! var editor = "";
  //使用済みのtemporaryを削除する?
  var deletetemp = false;
  //textarea名。優先順位が高い順に記述
  var targetItems = new Array(
!   "body",
!   "text",
!   "comment",
    "message"
  );
  
  //<-------------設定
  
! var window = external.menuArguments;
  
  main();
  window.focus();
  self.close();
--- 11,45 ----
  //設定------------->
  
  //temporary file作成directory。空ならシステム設定temporaryパスになる。
! var tempdir = "c:\\user\\local\\menuExt\\log";
  //logファイル。空ならシステム設定temporaryパス+extedit.logになる。
! var logfile = "c:\\user\\local\\menuExt\\log\\extedit_log.html";
  //使用するeditorのpath。空なら「.txt」に関連づけられているエディタになる。
! var editor = "C:\\user\\local\\xyzzy\\xyzzy.exe";
  //使用済みのtemporaryを削除する?
  var deletetemp = false;
  //textarea名。優先順位が高い順に記述
  var targetItems = new Array(
!   "comment-text",  // for TypePad, ココログ, ブログ人
!   "text",          // for Movable Type
!   "body",          // for ishinao.net
!   "comment",       // for blosxom, WebryBlog, doblog, goo BLOG, News Handler, 北国.tv
!   "description",   // for JUGEM
!   "cmnt",          // for NewsCollector
    "message"
  );
  
  //<-------------設定
  
! var window    = external.menuArguments;
! var page_url  = window.document.URL;   // ページのURL
! var page_href = window.location.href;  // 同上
! var title_txt = window.document.title; // タイトル文字列
  
+ if ( page_href == "" ) {
+   page_href = page_url;
+ }
+ 
  main();
  window.focus();
  self.close();
***************
*** 59,72 ****
    alert("no textarea");
  }
  
  function doEdit(textarea) {
    var fs = new ActiveXObject("Scripting.FileSystemObject");
    var date = new Date();
  
    if (tempdir == "") {tempdir = fs.GetSpecialFolder(2);}
    var tempfile = tempdir + "\\";
!   tempfile += "" + date.getYear() + date.getMonth() + date.getDate();
!   tempfile += "" + date.getHours() + date.getMinutes() + date.getSeconds();
    tempfile += ".txt";
   
    var body = textarea.value;
--- 70,109 ----
    alert("no textarea");
  }
  
+ function zeroPadding(str) {
+    var s   = "00" + str;
+    var len = s.length;
+    return s.substring(len - 2, len);
+ }
+ 
+ function monthString(date) {
+   return zeroPadding("" + (date.getMonth() + 1));
+ }
+ 
+ function dateString(date) {
+   return zeroPadding("" + date.getDate());
+ }
+ 
+ function hourString(date) {
+   return zeroPadding("" + date.getHours());
+ }
+ 
+ function minuteString(date) {
+   return zeroPadding("" + date.getMinutes());
+ }
+ 
+ function secondString(date) {
+   return zeroPadding("" + date.getSeconds());
+ }
+ 
  function doEdit(textarea) {
    var fs = new ActiveXObject("Scripting.FileSystemObject");
    var date = new Date();
  
    if (tempdir == "") {tempdir = fs.GetSpecialFolder(2);}
    var tempfile = tempdir + "\\";
!   tempfile += "" + date.getYear() + monthString(date) + dateString(date);
!   tempfile += hourString(date) + minuteString(date) + secondString(date);
    tempfile += ".txt";
   
    var body = textarea.value;
***************
*** 83,89 ****
    shell.run(cmd, 1, true);
    
    body = "";
!   file = fs.OpenTextFile(tempfile, 1);
    while (!file.AtEndOfStream) {
      body += file.Read(1024);
    }
--- 120,126 ----
    shell.run(cmd, 1, true);
    
    body = "";
!   file = fs.OpenTextFile(tempfile, 1); // read only で open
    while (!file.AtEndOfStream) {
      body += file.Read(1024);
    }
***************
*** 94,106 ****
    if (deletetemp) {
    	fs.DeleteFile(tempfile);
    } else {
!     var datestr = "" + date.getYear() + "/" + date.getMonth() + "/"+ date.getDate();
!     datestr += " " + date.getHours() + ":" + date.getMinutes();
  
      file = fs.CreateTextFile(tempfile);
!     file.Write("URL: " + window.location.href + "\n");
!     file.Write("Date: " + datestr + "\n");
!     file.Write("\n");
      file.Write(body);
      file.close();
      
--- 131,143 ----
    if (deletetemp) {
    	fs.DeleteFile(tempfile);
    } else {
!     var datestr = "" + date.getYear() + "/" + monthString(date) + "/"+ dateString(date);
!     datestr += " " + hourString(date) + ":" + minuteString(date);
  
      file = fs.CreateTextFile(tempfile);
!     file.WriteLine("URL: " + page_href);
!     file.WriteLine("Date: " + datestr);
!     file.WriteLine("");
      file.Write(body);
      file.close();
      
***************
*** 108,122 ****
        logfile = tempdir + "\\extedit.log";
      }
      if (fs.FileExists(logfile)) {
!       file = fs.OpenTextFile(logfile, 8);
      } else {
        file = fs.CreateTextFile(logfile);
      }
!     file.Write(datestr + " ");
!     file.Write(tempfile + " ");
!     file.Write(window.location.href);
!     file.Write("\n");
      file.close();
    }
  }
  
--- 145,167 ----
        logfile = tempdir + "\\extedit.log";
      }
      if (fs.FileExists(logfile)) {
!       file = fs.OpenTextFile(logfile, 8); // 8 は append
      } else {
        file = fs.CreateTextFile(logfile);
      }
!     if (logfile.substring(logfile.length-5,logfile.length) == ".html") {
!       file.WriteLine("<a href=\"" + page_href + "\">" + title_txt + "</a> (" + datestr + ")");
!     }
!     else {
!       file.WriteLine("Date:     " + datestr);
!       file.WriteLine("Title:    " + title_txt);
!       file.WriteLine("URL:      <a href=\"" + page_href + "\">" + page_href + "</a>");
!       file.WriteLine("filename: " + tempfile);
!       file.WriteLine("-----------------------------------------------------");
!     }
      file.close();
+ 
+     fs.DeleteFile(tempfile+".1~"); // for xyzzy (xyzzy が作り出したbackupファイルの削除)
    }
  }
  

ということで、しばらく、これを使ってコメントを投稿してみます。常用するところまでいけば、 問題解決…… どうなることやら。


早速、コメント投稿を実践。ログの方にはこんな感じで記録されました。

Webブラウザの入力フォームで好きなエディタを使う : kojidoiのチャンネル -北国tv (2004/04/05 19:56)

これなら、そんなに面倒じゃないかな。

投稿者: tsupo 2004.04.05 午後 07:42 | 固定リンク | このエントリーをはてなブックマークに追加 | このエントリを del.icio.us に登録 このエントリの del.icio.us での登録状況 | このエントリを Buzzurl に追加このエントリの Buzzurl での登録状況 | このエントリをlivedoorクリップに登録 このエントリのlivedoorクリップでの登録状況 このエントリをlivedoorクリップに登録している人の数 | 酢鶏巡回中

楽天市場


品揃え豊富で安い!NTT-X Store


アマゾンわくわく探検隊

トラックバック

この記事のトラックバックURL:

この記事へのトラックバック一覧です: コメント記録機能強化(?)版の extedit:

» exteditで、快適blog生活! from kojidoiのチャンネル
blog(に限らないが)、エントリー作成・編集やコメント作成の記録を半自動的に簡単に貯めていけるようになった。これはかなり便利ですよ。 続きを読む

受信: 2004.04.05 午後 10:22

» extedit - Webブラウザの入力フォームで好きなエディタを使う from ishinao.net/mylog
!!最近の更新 *2004/4/15 月情報が-1されていたのを修正(ネタ元:multiさんのコメント#925)。日付時刻ベースの文字列をきちんとフォーマ... 続きを読む

受信: 2004.04.15 午後 06:15

コメント


トラックバックありがとうございます。

このアイディア、blogに書いたら1時間もたたぬうちに本家のほうで採用していただけたようで、インターネットのすごさを再認識させられた次第です。それでも仕様ががすこしづつ違うのが面白いですね。

logをhtmlにするというのはいいですね。クリック一発で投稿先を呼び出せますからますます快適になります。私も考えないでもなかったのですが先を越されました。

投稿者: kojidoi (2004.04.05 午後 10:18)

ワード

ニッセン

fujisan.co.jp

楽天市場