n|a<>sage<>09/09/04 23:22:04 ID:VS4gSd2S<> スクリプトに関する話題なら何でも

ttp://v2c.s50.xrea.com/manual/script.html <>スクリプト VIICさん<>sage<>09/09/05 05:35:37 ID:JE02N7nd<> 選択したURLがはてなブックマークに登録されていれば、登録ユーザー数と「ブックマークしているユーザー」を表示。1.0.6_08で動作確認。
外部コマンド→一般→リンクに登録してリンクを右クリックから実行も可。複数リンクが対象の場合は不可。

function gethatebu(bh) {
  ss=" ";
  if (v2c.context.selText){
    ss = v2c.context.selText;
  }
  if (v2c.context.link){
    ss = v2c.context.link;
    ss=ss.toString();
  }

  if (ss) {ss = ss.trim();}
  if (!ss) {
    v2c.alert("選択テキストを取得できませんでした。");
    return;
  }
  var baseuri = "http://b.hatena.ne.jp/entry/";
  var pbaseuri = "http://b.hatena.ne.jp/";
  ss=fixuri(ss);
  ss=ss.slice(7);
  var su = baseuri+ss;
  var sh = v2c.readURL(su);
  if (!sh) {
    v2c.alert("ページを取得できませんでした。");
    return;
  }
  var title = sh.match(/<title>はてなブックマーク - 未ブックマークエントリー<\/title>/i);
  if (title) {
    v2c.alert("このページはまだブックマークされていません。");
    v2c.context.setPopupHTML('<html><head></head><body><div><a href=\"'+su+'\">はてなブックマーク - 未ブックマークエントリー</a></div></body></html>');
    return;
  }
  var mr = sh.match(/<li\sclass=\"users\">(?:<strong>|<em>|)(<a[^>]+>.+?<\/a>)/i);
  if (!mr) {
    v2c.alert("ユーザー数を抽出できませんでした。");
    v2c.context.setPopupHTML('<html><head></head><body><div><a href=\"'+su+'\">ページへのリンク</a></div></body></html>');
    return;
  }
  var numofusers = RegExp.$1; <> 2の続き<>sage<>09/09/05 05:40:33 ID:JE02N7nd<>   //ブックマークしているユーザーの抽出
  var bul=sh.match(/<ul\sid=\"bookmarked_user\"[^>]+>(?:[\s\S]*?)<script(?:[\s\S]*?)<\/script>([\s\S]*?)<\/ul>/i);
  if (!bul) {
    v2c.alert("ブックマークしているユーザーを抽出できませんでした。");
    v2c.context.setPopupHTML('<html><head></head><body><div><a href=\"'+su+'\">ページへのリンク</a></div></body></html>');
    return;
  }
  var bmuser=RegExp.$1;

  //gifを表示するとCPU利用率が100%になったままになるのでimg要素を削除
  bmuser=bmuser.replace(/<img[^>]+?>/g," ");

  if (bh) {
    v2c.context.setPopupHTML("<html><head><base href=\""+pbaseuri+"\"></head>
<body><div>"+numofusers+"<ul>"+bmuser+"</ul>"+"</div></body></html>");
  } else {
    v2c.context.setPopupHTML("<html><head><base href=\""+pbaseuri+"\"></head><body>"+numofusers+"</body></html>");
  }
}

function fixuri(txt){
  var ptn=/\:\/\//i;
  var idx=txt.search(ptn);
  var turi=txt.slice(idx);
  var uri="http"+turi;
  return uri;
}

/*
引数がtrueならユーザー数と「ブックマークしているユーザー」(=<ul id="bookmarked_user"から</ul>まで)も表示。
falseならユーザー数のみ。
*/
gethatebu(true);


ここまで。長さ制限に引っかかったので一部の行を分割しました。
「pbaseuri+"\"></head>」と「<body><div>"」の間の改行を消してください。 <> n|a<>sage<>09/09/05 22:40:54 ID:KmqS4UlJ<> 次回更新では v2c.context.resNum(レス番号)を廃止して、
v2c.context.res でレスオブジェクトを取得、
res.number, res.name, res.mail, 等でレスに関する情報を取得できるようにします。

>>2,3
一行の文字数を変更しようとしたのですが、設定項目自体存在しませんでした…。 <> VIICさん<>sage<>09/09/06 21:33:08 ID:wR9iIsT6<> ポップアップ文の先頭がリンク付きでテキスト外(左側の空きスペース)とかで
クリックすると閉じずにリンク先に飛ぶみたい。ステータスバーはリンクの表示なし。書式のせい?
(例えばwikipedia.jsで「テキスト」をポップアップしたときの「ラテン語」のリンク)

少しwikipedia.jsをJavaScript初心者なりに改造(下)してみたけど。
多人数の編集ページだけにきりないな。あとは得意な人に任せます。

//以上略
  if (!sh) {
    v2c.alert('ページを取得できませんでした。');
    return;
  }
  var tt = sh.match(new RegExp('ing">([^]+?)</h1>','i'));//(転送であれば転送先の)キーワード抽出
  var mt = tt[1];
  var ml = sh.match(new RegExp('Category:(曖昧さ回避)'));//曖昧さ回避のタグ有無
  if (ml) {
    var mr = sh.match(new RegExp('<p><b>'+mt+'[^]+?(<ul>\n<li>[^]+</ul>)\n<(p|div)[^]+NewPP','i'));//リスト表示抽出(適当)
    if (!mr) {
      v2c.alert(mt+'のリストを抽出できませんでした。');
      return;
    }
    var sr = mr[1];
    sr = sr.replace(/<p>[.]+?関連項目[^]+/g,'');//関連項目リスト削除
    sr = sr.replace(/<h[1-6][^]+?\/h[1-6]>/g,'');//<h2>〜</h2>など削除
    sr = sr.replace(/<div[^]+\/div>/g,'');//<div>〜</div>削除
    sr = sr.replace(/<p[^]+?\/p>/g,'');//<P>〜</P>削除
  } else {
    var mr = sh.match(new RegExp('<p>(『<b>'+mt+'[^]+?)</p>','i'));//各種タイトルにつく「『』」付き抽出
    if (!mr) {
      mr = sh.match(new RegExp('<p>(<b>'+mt+'[^]+?)</p>','i'));//通常抽出
      if (!mr) {
        v2c.alert(mt+'の説明を抽出できませんでした。');
        return;
      }
    }
    var sr = mr[1];
    sr = sr.replace(/<sup[^]+?\/sup>/g,'');//参照リンク削除
  }
  if (bh) {
//以下略 <> 2の続き<>sage<>09/09/07 10:22:51 ID:wpURQIt1<> ポップアップにスタイルシートを適用できないか試していますが、どこかにドキュメントがあるのでしょうか。
全く反映されなかったり、テキスト表示部分が真っ黒になったり、反映されたりとまちまちです。
JDICはインストールしていません。

function styletest(n) {
  var txt="aaaa";
switch(n){
  case 0://デフォルト
    v2c.context.setPopupHTML('<html><head></head><body><p>'+txt+"</p></body></html>");
  break;
  case 1://反映されない
    v2c.context.setPopupHTML('<html><head></head><body><p style="outline: double 20px #ff0000; ">'+txt+"</p></body></html>");
  break;
  case 2://反映される
    v2c.context.setPopupHTML('<html><head></head><body><p style="font-size: 2em; ">'+txt+"</p></body></html>");
  break;
  case 3://テキスト表示部分が真っ黒になる
    v2c.context.setPopupHTML('<html><head></head><body><p style="font-style:italic; ">'+txt+"</p></body></html>");
  break;
}
}
//実行したい文を引数で指定
styletest(2); <> VIICさん<>sage<>09/09/07 10:23:36 ID:wpURQIt1<> すみません、名前欄が残っていました。 <> n|a<>sage<>09/09/07 22:55:45 ID:emwU31QU<> setPopupHTMLで設定したHTMLの表示にはSwingのHTML表示コンポーネント(JEditorPane)
を使っているのですが、下の>5,6への回答にも書いたように
・環境による動作の違い(本来あまり違いは出ないはずですが。)
・CSSへの対応状況
等で問題があるようですね…。

>>5
こちらのUbuntuではリンクの途中で改行されると2行目の左側にもリンクの前半領域が
存在するような動作で、
何も無いように見える領域でもマウスポインタが変化し、ステータスバーにURLが表示されます。
Windows Vistaではこのようなことはありませんでした。
Wikipediaポップアップで曖昧さ回避に対応するとかなり実用的になりますね。
使用法の例を改善する際の参考にさせてもらいます。
>>6
スタイルシートへの対応状況がわかるのは
ttp://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/text/html/CSS.html
くらいでしょうか。
こちらではstyletestのcase 3はUbuntu,Vista共に正常にイタリックで表示されました。
改善される可能性は低いと思いますが問題回避設定の
「DirectDraw及びDirect3Dを使用しない」を試してみてください。 <> 5<>sage<>09/09/08 01:56:40 ID:9eB8qsuo<> >>8
文字数まとめること考えてて環境書いてなかったですね。乙です。

【V2C】 H20090907 [1.0.6_09] (L-0.5)
【Java】 1.6.0_15-b03 (Sun Microsystems Inc.)
【OS】 Windows Vista 6.0 (x86)

使い道が低いと思って要望しなかった自分用スクリプトを下に

//「現在からこのレスが何日前のレスか計算表示」
//*<BR>前の改行を消すと使えるはず。

function createPopupString(bh) {
//現在の日時
  var pd = new Date();
  var py = pd.getFullYear();
  var po = pd.getMonth()+1;
  var pa = pd.getDay();
  var ph = pd.getHours();
  var pm = pd.getMinutes();
  var ps = pd.getSeconds();

//二桁を維持
  if (po < 10) { po = "0" + po; }
  if (pa < 10) { pa = "0" + pa; }
  if (ph < 10) { ph = "0" + ph; }
  if (pm < 10) { pm = "0" + pm; }
  if (ps < 10) { ps = "0" + ps; }

//ミリ秒単位で計算
  var nd = pd.getTime();
  var rd = v2c.context.res.time;
  var rr = nd - rd
  var rema = rr % 86400000;
  var day = (rr - rema) / 86400000;
  var remh = rema % 3600000;
  var hour = (rema - remh) / 3600000;
  var remo = remh % 60000;
  var mint = (remh - remo) / 60000;
  var msec = remo % 1000;
  var sec = (remo - msec) / 1000;
  if (bh) {
  v2c.context.setPopupHTML('<HTML><BODY style="color:green"><center>現在の日付['+py+'/'+po+'/'+pa+'] 時刻['+ph+':'+pm+':'+ps+']
<BR>これは'+day+'日と'+hour+'時間'+mint+'分'+sec+'秒前のレスです。</center></BODY></HTML>');
  }
}
createPopupString(true); <> VIICさん<>sage<>09/09/08 05:26:16 ID:1oqAtFgB<> >>6に書かれている実行結果は以下の環境でのものでした。書きそびれてすみません。
【V2C】 1.0.6_08 [R20090904] (L-0.5)
【Java】 1.6.0_16-b01 (Sun Microsystems Inc.)
【OS】 Windows 2000 (x86)

「DirectDraw及びDirect3Dを使用しない」をオンにすることでイタリックで表示することが出来ました。
また、以前は以下のようなマージンを使ったものもcase 3と同じ様に
テキスト表示部分が真っ黒になっていましたが、スタイルシートが反映されるようになりました。
v2c.context.setPopupHTML('<html><head></head><body><p style="margin: 10px; ">'+txt+"</p></body></html>"); <> 10<>sage<>09/09/08 05:50:18 ID:1oqAtFgB<> 同じ環境でV2C_H20090907.jarを使用したところ「DirectDraw及びDirect3Dを使用しない」がオフでも
イタリックでの表示やマージンの使用も出来ました。 <> n|a<>sage<>09/09/09 00:00:21 ID:wRJ0w56X<> >>9
Javaのオブジェクトを使うと
new java.text.SimpleDateFormat("現在の日付[yyyy/MM/dd] 時刻[HH:mm:ss]").format(pd);
のように簡単に時刻を文字列に変換できます。
Javaに馴染みがない方がJava標準APIの樹海を彷徨うのはあまりお勧めできませんが、
SimpleDateFormatは比較的簡単に使えるものの1つではないかと思います。
参考: ttp://java.sun.com/javase/ja/6/docs/ja/api/java/text/SimpleDateFormat.html
>>11
特に思いあたるような変更はしていないので、
微妙なタイミングが関係しているのかもしれません。 <> 9<>sage<>09/09/09 22:07:40 ID:M6ljBOco<> >>12
ありがとうございます。なるほど>9はこれでいいのか。
「ミリ秒単位で計算」は同じ、改行して貼る必要もなかったか。

//「現在からこのレスが何日前のレスか計算表示」
function createPopupString(bh) {
//現在の日時
  var pd = new Date();
  var jpd = java.text.SimpleDateFormat("現在の日付[yyyy/MM/dd] 時刻[HH:mm:ss]").format(pd);

//ミリ秒単位で計算
  var nd = pd.getTime();
  var rd = v2c.context.res.time;
  var rr = nd - rd
  var rema = rr % 86400000;
  var day = (rr - rema) / 86400000;
  var remh = rema % 3600000;
  var hour = (rema - remh) / 3600000;
  var remo = remh % 60000;
  var mint = (remh - remo) / 60000;
  var msec = remo % 1000;
  var sec = (remo - msec) / 1000;

  var rda = "これは"+day+"日と"+hour+"時間"+mint+"分"+sec+"秒前のレスです。";
  if (bh) {
  v2c.context.setPopupHTML('<HTML><BODY style="color:green"><center>'+jpd+'<BR>'+rda+'</center></BODY></HTML>');
  }
}
createPopupString(true);

目的なしに樹海に入るの怖いのでさわりだけやってみたけど

importClass(Packages.javax.swing.JFrame);
var f = new JFrame();
//f.setAlwaysOnTop(true);
f.setSize(200, 100);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.title = "Hello";
f.visible = true;

コメントアウト解除でエラーということは
ウィンドウとかダイアログの前面表示とかはまずいか、そもそもimportとかやらんほうがいいのか
ポップアップで閉じるボタンとか透明化とかできそうならポップアップだけでもいい気がするけど
重くない程度に動くデジタル時計できないかなとか思ったので。 <> VIICさん<>sage<>09/09/09 22:18:58 ID:M6ljBOco<> すみません最後は後付けです。
ガジェット時計でいいじゃんとかいわれそうなので…今のとこなんの目的もないですごめんなさい。 <> n|a<>sage<>09/09/09 23:19:40 ID:wRJ0w56X<> 選択テキストをYahoo!辞書で検索、ポップアップするスクリプトです。
念のため使用法を書いておきます。
1) V2C保存用フォルダに"script"フォルダを作成する。
2) メモ帳等のエディタでスクリプトを"script"フォルダの"ydic.js"に保存する。
  (文字コードはUTF-8)
3) 外部コマンド設定ダイアログ「一般」タブで選択テキストコマンドに
  $SCRIPT ydic.js
  を設定する。(上の行の先頭の全角空白は削除してください。)
4) レス表示欄で調べたい文字列を選択してポップアップメニューから3)で設定したコマンドを選択する。

外部コマンドの登録を
$SCRIPT ydic.js 1
とすると英和辞典を検索します。(3:和英、5:類語)

// 次の行から下をUTF-8で"ydic.js"に保存する。
function createPopupString() {
var vcx = v2c.context;
var ss = vcx.selText;
if (ss) {
ss = ss.trim();
}
if (!ss||(ss.length()==0)) {
v2c.alert('検索語を取得できませんでした。');
return;
}
var args = vcx.args;
var id = (args.length>0)?args[0]:'0';
var sh = v2c.readURL('http://dic.yahoo.co.jp/dsearch?enc=UTF-8&p='+
encodeURIComponent(ss)+'&stype=1&dtype='+id);
if (!sh) {
v2c.alert('ページを取得できませんでした。');
return;
}
var mr = sh.match(new RegExp('<!--詳細 Title-->([^]*?)<!--/詳細 Title-->'+
'[^]*?<!--詳細-->([^]*?)<!--/詳細-->','i'));
if (!mr) {
v2c.alert('説明を抽出できませんでした。');
return;
}
var mr2 = mr[2].replace(new RegExp('="0"">','g'),'="0">');
vcx.setPopupHTML('<html><body>'+mr[1]+mr2+'</body></html>');
}

createPopupString(); <> n|a<>sage<>09/09/09 23:22:00 ID:wRJ0w56X<> >>13
setAlwaysOnTopがエラーになるのはスクリプトがSandBoxの中で実行されているためで、
現在${SCRIPT:A}でもAWT(ウィンドウシステム)関連のパーミッションの必要な
動作を実行することはできません。
これは$SCRIPTのパーミッション設定を拡張してAWT関連を追加すればいいのですが、
ウィンドウシステム関連のコードは
「『原則として』EventDispatchThreadで実行しなければならない」
(スクリプトはそれ自身の独立したThreadで実行されている)
という点にも注意する必要があります。 <> VIICさん<>sage<>09/09/10 19:13:42 ID:QIWms1bg<> https://developer.mozilla.org/ja/Rhino_Overview
を見たところRhinoは「JavaScript 1.6 のすべての機能 」を含んでいると書いてありますが
1.6で追加されたとされるindexOfメソッド
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Array/indexOf
を使用すると「sun.org.mozilla.javascript.internal.EcmaError:
TypeError:Cannot find function indexOf. (<Unknown Source>#2)」と言うエラーが出ます。

実行したスクリプトは以下の通りです。
var array = [2, 5, 9];
var index = array.indexOf(2);
// index is 0
v2c.alert(index);
var index = array.indexOf(7);
// index is -1
v2c.alert(index);

以下の環境で確認しました
【V2C】 1.0.6_11 [T20090909] (L-0.5)
【Java】 1.6.0_16-b01 (Sun Microsystems Inc.)
【OS】 Windows 2000 (x86) <> n|a<>sage<>09/09/10 23:08:36 ID:BTwFlNYH<> >>13
かなり大雑把ですが、AWTのパーミッションを変更せずに実現しようとすると
下のような感じになると思います。
(ポップアップウィンドウをクリックすると閉じます。)
EventDispatchThreadをブロックしてしまうとV2Cも固まってしまうので注意してください。
>>17
すみません、私もあまりよく把握していませんでした。
JRE6で使えるのは Rhino 1.6R2 で、
この"1.6"は JavaScript 1.6 の"1.6"とは関係無いようです…。
(ttps://developer.mozilla.org/en/Rhino_downloads_archive)

// ----- clock.js -----
var jw,jl,tm;
var df = new java.text.SimpleDateFormat(" HH:mm:ss ");

var al = new java.awt.event.ActionListener() {
actionPerformed: function(e) {
if (jw.isVisible()) {
jl.setText(df.format(new Date()));
tm.start();
}
}
};

var ml = new java.awt.event.MouseListener() {
mouseClicked: function(e) {
jw.setVisible(false);
},
mousePressed: function(e) {}, mouseReleased: function(e) {},
mouseEntered: function(e) {}, mouseExited: function(e) {}
};

var rc = new java.lang.Runnable() {
run: function() {
jw = new javax.swing.JWindow();
jl = new javax.swing.JLabel(" 00:00:00 ");
jl.setFont(jl.getFont().deriveFont(java.awt.Font.PLAIN,24));
jl.addMouseListener(ml);
jw.add(jl);
jw.pack();
jw.setLocation(100,100);
jw.setVisible(true);
tm = new javax.swing.Timer(1000,al);
tm.setRepeats(false);
tm.start();
}
};

javax.swing.SwingUtilities.invokeLater(rc); <> 13<>sage<>09/09/11 18:25:21 ID:ujDHd7qe<> >>18
まさか作って頂けるとは思わんかった。ありがとうございます。
理解がまったく追いついてないのですが今のとこ自分でいじれそうな部分として
  jw.setLocation(100,100);
で表示位置を変えて実況とかで使ってみてます。

  jl = new javax.swing.JLabel("<html> 00:00:00 <br><center><font size=3>新着レス:0000</font></center></html>");
みたいにしてデフォルトのポップアップの大きさが決まって
  var df = new java.text.SimpleDateFormat("HH:mm:ss");
  var cf = new java.text.DecimalFormat("0000");//追加
  (略)
  ncf = v2c.context.thread.newResCount;//追加
  jl.setText("<html> "+df.format(new Date())+" <br><center><font size=3>新着レス:"+cf.format(ncf)+"</font></center></html>");
で更新後、新着レス数が変わるとかできるのはわかった。

スレ速度表示させたりとかも可能なのかも。
で他のポップアップとかで背面に行ってしまうのが>16ということか。
スレが変わると新着レスが更新されないというのは書き方の問題?

あと実行情報の表示スクリプト例の10行目が「apppend」でpが一個多いです。 <> VIICさん<>sage<>09/09/11 19:10:03 ID:ujDHd7qe<> そっか自動更新と組み合わせて特定のスレの新着が来たらお知らせのポップアップとか応用は利くのかもしれん。 <> n|a<>sage<>09/09/11 23:28:13 ID:7FbgOHnj<> >>19
次のレスのスクリプトはウィンドウにJDialogを使用した例です。
V2Cの更新チェックの対象になっていない人柱版
H20090911 ttp://v2c.s50.xrea.com/V2C_H20090911.jar
を使って、外部コマンドを
${SCRIPT:Ttw} clock.js
と設定してください。
${SCRIPT:Ttw}の'T'はAWT関連のパーミッションで、
t … setAlwaysOnTopを許可
w … スクリプトが表示したウィンドウの右側に'!'マークを表示しない
スクリプトで取得可能な追加の情報は:
v2c.resPane … レス表示ペインオブジェクト
resPane.selectedThread … 選択されたレス表示タブのスレッドオブジェクト
thread.speed … スレッドの1日当りのレス数

(JLabelの3段重ねはただの手抜きです…。) <> n|a<>sage<>09/09/11 23:29:18 ID:7FbgOHnj<> var jd,jl,jls,jlt,tm;
var df = new java.text.SimpleDateFormat(" HH:mm:ss ");

var al = new java.awt.event.ActionListener() {
actionPerformed: function(e) {
if (jd.isVisible()) {
jl.setText(df.format(new Date()));
var thc = v2c.resPane.selectedThread;
jlt.setText(thc?thc.title:"------");
jls.setText(thc?thc.speed:"-.-");
tm.start();
}
}
};

var rc = new java.lang.Runnable() {
run: function() {
jd = new javax.swing.JDialog();
jd.setModalityType(java.awt.Dialog.ModalityType.MODELESS);
jd.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jd.setAlwaysOnTop(true);
jl = new javax.swing.JLabel(" 00:00:00 ");
jl.setFont(jl.getFont().deriveFont(java.awt.Font.PLAIN,24));
jd.add(jl);
jlt = new javax.swing.JLabel("スレタイ");
jlt.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jd.add(jlt,java.awt.BorderLayout.SOUTH);
jls = new javax.swing.JLabel("0.0");
jls.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jd.add(jls,java.awt.BorderLayout.NORTH);
jd.pack();
jd.setLocation(100,100);
jd.setVisible(true);
tm = new javax.swing.Timer(1000,al);
tm.setRepeats(false);
tm.start();
}
};

javax.swing.SwingUtilities.invokeLater(rc); <> VIICさん<>sage<>09/09/12 00:00:53 ID:x07KnTh+<> >>21
ありがとうございます。いじってみます。
>22ですが、このスレだとダイアログの上方のスピードが、
0.0000368306...とかなるけどこれでいいのかな。 <> n|a<>sage<>09/09/12 00:48:40 ID:OdLJOc2S<> >>23
おっと、1日当りではなく1秒当りの値になっていました。
とりあえず86400をかけておいてください。 <> VIICさん<>sage<>09/09/13 22:38:41 ID:eeCzhFp6<> どなたかv2c.exec() の使用例を書いてくれませんか。(v2c.execでぐぐったけど0件でした)
例えば"C:\Program Files\Mozilla Firefox\firefox.exe"に "http://2ch.net/"を開かせたい場合について。 <> n|a<>sage<>09/09/14 00:04:31 ID:OoTO2x6W<> >>25
外部コマンド設定で
${SCRIPT:Fx} exec.js
と設定して
v2c.exec('"C:\\Program Files\\Mozilla Firefox\\firefox.exe" http://2ch.net/');
または
v2c.exec(['C:\\Program Files\\Mozilla Firefox\\firefox.exe','http://2ch.net/']);
で実行できるはずです。 <> 25<>sage<>09/09/14 00:19:41 ID:v2ngxqNe<> >>26
ちゃんと動作しました。直々のご教授、ありがとうございました。 <> n|a<>sage<>09/09/14 22:47:44 ID:OoTO2x6W<> 単発ID「以外」を抽出するスクリプトです。(T20090914以降用)
>15と同様の手順で外部コマンドの「レス表示」に設定してください。

// 次の行から下をUTF-8で保存する。
var vcx = v2c.context;
var th = vcx.thread;
if (th) {
var nr = th.localResCount;
var bo = false;
var ar = new Array();
for (var i=0; i<nr; i++) {
var rs = th.getRes(i);
if (rs) {
if (rs.idCount!=1) {
ar.push(i);
} else if (!bo) {
bo = true;
}
}
}
if (bo) {
vcx.setFilteredResIndex(ar);
}
} <> VIICさん<>sage<>09/09/15 01:56:27 ID:UOLUxipN<> wikipedia.js表示率高くなりましたね。
本気でやるとずいぶん長くなるのね。参考になります。

要望的メモ、自分でやればいいのだけど時間無いので…
1「スクリプト」→「スクリプト理論」のリンクが編集中の場合、リンク消してもいいんじゃないかな
2「CPU」みたいに全角だと半角に変換するといいかも
3「マニュアル」「ムービー」「ビッチ」「アンチ」とかの曖昧ではないけど
 リスト表示から始まる場合はキーワードだけになる <> n|a<>sage<>09/09/16 00:31:21 ID:EM/RflGp<> >>29
簡単な作例という当初の目的を完全に見失っているような気もしますが…。
ttp://v2c.s50.xrea.com/manual/wikipedia2.txt <> 29<>sage<>09/09/16 21:21:20 ID:UhZeD5vA<> >>30
ありがとうございます。

Indexとかで文字を拾ってくのはまだまだきつい。
98行目に //println('range: '+iu+','+rl.lastIndex);
が残ってるけどこっちで似た様な使い方はv2c.alertぐらいになるのかな。
while内とかでも繰り返し中のデータを改行して
まとめて表示できるものがあるとうれしいです。

全角→半角のコードはそのまま使えそうなので
選択テキスト系のスクリプトに利用させてもらいます。 <> VIICさん<>sage<>09/09/28 12:40:18 ID:Fv504BfJ<> javascriptは触ったことがなかったけど
RhinoはJavaの機能を呼び出したりできるんだな。
けっこう便利そうだ。

と、書き込もうとして本スレでは規制されてたことを思い出した……
暇なときになんか書こうかな。 <> n|a<>sage<>09/09/28 23:43:25 ID:vto8PZSY<> >>32
何かやりたいが必要な機能が存在しないという場合はここに書いてください。
(V2CのComponentを直接操作する以外ということで…。) <> VIICさん<>sage<>09/09/29 21:40:00 ID:j98VKYGe<> >22の ${SCRIPT:Ttw} clock.js を改造。レス数を棒グラフ表示。長いスレタイを自動スクロール。

var jd,jl,jls,jlt,tm,tl,or,nr,er,mt,tt;
var df = new java.text.SimpleDateFormat(" HH:mm:ss "); var cf = new java.text.DecimalFormat("#######.#");
var nh1 = "<html><head><center>"; var nh2 = "</center></head><body><table border='0' cellspacing='0' cellpadding='0'><tr>";
var nh3 = "<td><div style='background-color: "; var nh4 = "; width: "; var nh5 = "px; font-size: 4px;'> </div></td>";var nh6 = "</tr></table></body></html>";
function WordLength(s) {
var ch=0;
for(var i=0; i<s.length(); i++) {
var c = s.charAt(i);if(( c<=0x007E )||( c>=0xFF61 && c<=0xFF9F )) ch++;
}
return ch;
}
var al = new java.awt.event.ActionListener() {
actionPerformed: function(e) {
if (jd.isVisible()) {
jl.setText(df.format(new Date()));var thc = v2c.resPane.selectedThread;
if(!thc){
jlt.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
tl=or=nr=0,er=100,mt=0,tt="";
} else {
if(thc.localResCount > 1000) {
or = java.lang.Math.ceil((thc.localResCount-thc.newResCount)*100/thc.localResCount);nr = java.lang.Math.ceil(thc.newResCount*100/thc.localResCount);er = 0;
} else {
or = java.lang.Math.ceil((thc.localResCount-thc.newResCount)*0.1);nr = java.lang.Math.ceil(thc.newResCount*0.1);er = 100 - or - nr;
}
if(tt != thc.title){
tl = thc.title.length();cl = WordLength(thc.title);
tl = tl - cl + cl*0.5;
if(tl > 11) {
jlt.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);tl = thc.title.length();
} else {
jlt.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
}
if(mt != 0) mt=0;
}
}
if(tl <= mt) mt=0;
if(tl > 11) {
jlt.setText(thc?thc.title.substring(mt):"------");
} else {
jlt.setText(thc?thc.title:"------");
}
jls.setText(thc?nh1+cf.format(thc.speed)+nh2+nh3+"blue"+nh4+or+nh5+nh3+"yellow"+nh4+nr+nh5+nh3+"gray"+nh4+er+nh5+nh6:nh1+"-.-"+nh2+nh3+"gray"+nh4+er+nh5+nh6);
jls.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);mt++;thc?tt=thc.title:tt="";tm.start();
}
}
};
var rc = new java.lang.Runnable() {
run: function() {
jd = new javax.swing.JDialog();jd.setModalityType(java.awt.Dialog.ModalityType.MODELESS);
jd.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);jd.setAlwaysOnTop(true);
jl = new javax.swing.JLabel(" 00:00:00 ");jl.setFont(jl.getFont().deriveFont(java.awt.Font.PLAIN,24));jd.add(jl);
jlt = new javax.swing.JLabel("スレタイ");jlt.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);jd.add(jlt,java.awt.BorderLayout.SOUTH);
jls = new javax.swing.JLabel(nh1+"-.-"+nh2+nh3+"gray"+nh4+99+nh5+nh6);jd.add(jls,java.awt.BorderLayout.NORTH);
jd.pack();jd.setLocation(1100,850);jd.setVisible(true);
tm = new javax.swing.Timer(500,al);tm.setRepeats(false);tm.start();
}
};
javax.swing.SwingUtilities.invokeLater(rc); <> VIICさん<>sage<>09/09/29 23:23:48 ID:P0CVUBVE<> なんか皆さんが投稿してるのよりずいぶんヘボくてアレなんですが、
一応選択範囲をast形式(AAエディタとかで読める形式)で保存する的なものを作ってみました。
複数のレスが1つのファイルに格納されます。

--- ここから ---
importPackage(java.io)
     
function scrap(filename, save_res_info){
  var file = new File(v2c.saveDir,filename)
  var p = new PrintWriter(new FileWriter(file, true));
  p.print("[AA]");
 
  if(save_res_info || save_res_info == undefined){
    var res = v2c.context.res;
    var res_str = res.number + ": "
              + res.name
              + " [" + res.mail + "] "
              + res.date
              + " ID:" + res.id
              + " " + res.beID
              + " " + res.aux;
    var title = v2c.context.thread.title;
    var board = v2c.context.thread.board.key
    p.print("[" + board + " / " + title + " / " + res_str + "]");
  }

  p.println();
  p.println(v2c.context.selText);
  p.close();
  v2c.alert("正常に保存されました。");
}

scrap("script\\hoge.ast")

--- ここまで ---

>>33
prompt的なものというか、入力ダイアログがない?ような気がします。 <> VIICさん<>sage<>09/09/29 23:26:22 ID:P0CVUBVE<> 忘れてましたが${SCRIPT:F} scrap.jsで。 <> VIICさん<>sage<>09/09/30 19:22:20 ID:EeTW8NQP<> 一応swingで入力ダイアログを書けそうだったんで書いてはみたもののこれでいいのか…
disposeとhideの違いもよく分かりません

var ss;
//UI絡みここから
var jd,jl,jls,jlt,tm,jt;

var al = new java.awt.event.ActionListener() {
  actionPerformed: function(e) {
  ss=jt.getText();
  hoge();
  jd.dispose();
  }
};

var rc = new java.lang.Runnable() {
  run: function() {
    jd = new javax.swing.JDialog();
    jd.setModalityType(java.awt.Dialog.ModalityType.MODELESS);
    jd.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    jt=new javax.swing.JTextField("Hello World!!");
    jt.addActionListener(al);
    jd.add(jt);
    jd.pack();
    jd.setLocation(100,100);
    jd.setVisible(true);
  }
};
//UI絡みここまで

function hoge(){
  v2c.println(ss);
}

ss = v2c.context.selText;
  if (ss) {
    ss = ss.trim();
    hoge();
  }else {
    javax.swing.SwingUtilities.invokeLater(rc);
  } <> n|a<>sage<>09/09/30 22:50:07 ID:tuC8GAPF<> >>34
最初グラフをどうやって描いているのかと思ったらTABLEとCSSなんですね。
(nh1,nh2の</?head>は不要だと思います。)
jlt = new javax.swing.JLabel("スレタイ");

jlt = new javax.swing.JTextField("スレタイ");
jlt.setFocusable(false);
jlt.setEditable(false);
jlt.setBorder(null);
のようにJTextFieldに変更し、actionPerformedのjlt.setText()の後に
jlt.getCaret().setDot(0);
を追加するとスレタイの最後に"..."が付くことはなくなります。
あとスレタイが最後まで表示されるかどうかの判定は
jlt.setText(thc.title);
if (jlt.getPreferredSize().width>jlt.getWidth()) {
が簡単・正確だと思います。
>>35
文字列を手軽にファイルに書き込むことができればいいかもしれませんね。
>>37
このような場合は JOptionPane.showInputDialog() が適していると思います。
…が、せっかく v2c.prompt() を作ったのでこちらを使ってください…。 <> VIICさん<>sage<>09/09/30 23:47:59 ID:TxXBsbYP<> >>38
棒グラフはthreana.htaみたいなのもできるんだろうけど手が付けられんな…
スレタイ部分の表示・判定は悩んだ所なので助かります。ありがとうございます。 <> VIICさん<>sage<>09/10/01 01:15:22 ID:a42RQ3vg<> >>38
テキストボックスで検索したらJTextFieldのサンプルがいくつか見つかったのでそのまま使っていました。
あの用途だとshowInputDialog()の方が合ってますね。

ともかくv2c.prompt()を使わせていただきます。ありがとうございます。 <> VIICさん<>sage<>09/10/02 04:10:30 ID:YWn6fIjw<> 自演風釣表示作ってみたよ。$SCRIPT tree.js とかで設定。
行の文字数そろえたり、レス番マウスオーバーでポップアップ、重複レス削除などはできません…。
誰か改良してもらえるとありがたいです。

var vcx = v2c.context;
var srn = vcx.res.number;
var ru = vcx.thread.url;
var k=0,li=[],pl="",rn=0,msg="";

function createTree(li,idx) {
 var gr = vcx.thread.getRes(idx);
 k++;
 if(gr.refResIndex){
  for(var i=0; i<gr.refResIndex.length; i++) {
   if(i == gr.refResIndex.length - 1) {
    li[k-1] = "└";
   } else {
    li[k-1] = "├";
   }
   rn = gr.refResIndex[i] + 1;
   li[k] = "<a href='"+ru+rn+"'>"+rn+"</a>";
   if(k>=2 && (li[k-2] == "└" )||( li[k-2] == " ")) {
    li[k-2] = " ";
   } else {
    li[k-2] = "│";
   }
   msg = vcx.thread.getRes(rn-1).message;
   msg = msg.replaceAll("\n", " ");
   if(msg.length() > 40) {
    msg = msg.substring(0,39);
    msg += "...";
   }
   li[k+1] = "    " + msg;
//   v2c.println(li.join("")+"<BR>");
   pl += li.join("")+"<BR>";
   pl = createTree(li,gr.refResIndex[i]);
  }
 }
 li[k] = null;
 k--;
 return pl;
}

function createPopupString() {
// v2c.println(srn);
 if(vcx.thread.getRes(srn-1).refResIndex) {
  pl = createTree([],srn-1);
  vcx.setPopupHTML("<html><body style='font-size: x-small;'><a href='"+ru+srn+"'>"+srn+"</a><BR>"+pl+"</body></html>");
 }
}

createPopupString(); <> VIICさん<><>09/10/02 11:10:31 ID:UpF8/4Ez<> スクリプトを活用させて貰っている素人の門外漢です。
できればスクリプトを貼る方は、それがレス表示用なのか、リンク用なのか、
選択テキスト用なのかを表示してくれると有り難い。 <> n|a<>sage<>09/10/02 23:38:16 ID:6HHfruJM<> >>41
これはおもしろくなりそうですね。
レス番号マウスオーバーでポップアップに関しては、
こちらでリンクのURLがスレッドのレスの場合にレスをポップアップするようにしてみます。
重複レス削除は、既出レス用のArrayを用意してフラグを立てればいいのではないでしょうか。
行末を揃えるのはいい方法を思い付きません…。
あと細かいことですがgr.refResIndexは一旦変数に代入しておくと
多少効率が良くなると思います。
>>42
【登録場所】 レス表示
【コマンド】 $SCRIPT tree.js
のような感じでしょうか。 <> 41<>sage<>09/10/03 00:48:33 ID:4ODDvt+9<> >>43
もうちょっとがんばってみます。

このスレのまとめ、一部のファイル名は書いて無いので適当、【コマンド】は$以降を記入
他に部分的なのがあるけどそれは各自で

【登録場所】 リンク
【コマンド】 >2-3 はてブ数とユーザ表示 $SCRIPT b_hatena.js

【登録場所】 選択テキスト
【コマンド】 >15 Yahoo!英和辞書で検索 $SCRIPT ydic.js 1
          Yahoo!和英辞書で検索 $SCRIPT ydic.js 3
          Yahoo!類語辞書で検索 $SCRIPT ydic.js 5
       >35 ast形式で保存 ${SCRIPT:F} scrap.js

【登録場所】 レス表示
【コマンド】 >13 レスが何日前か表示 $SCRIPT ago.js
       >18 デジタル時計表示 $SCRIPT clock.js
       >21-22と>34 デジタル時計表示+α ${SCRIPT:Ttw} clock.js
       >28 単発ID「以外」を抽出 $SCRIPT e1id.js
       >41 参照レスのツリー表示 $SCRIPT tree.js <> 41<>sage<>09/10/03 19:00:38 ID:4ODDvt+9<> 結局重複レス削除は元と違う表示にした。ツリーにレス番が存在してかつ複数にレスしていれば、
最初のそのレス番は赤、重複は語尾に…を加えてる。たぶん無駄な処理してる。indexOfとか使うのかな…

【登録場所】 レス表示
【ラベル】  参照レスのツリー表示
【コマンド】 $SCRIPT tree.js
var vcx = v2c.context, vrx=vcx.res, vtx=vcx.thread, srn = vrx.number, src = vrx.refCount, tu = vtx.url;
var k=0,h=0,rn=0,pl="",msg="",li=[],arn=[],arr=[];

function searchNum(ar) {
 for(var j = 0; j<ar.length; j++) {
// v2c.println(ar[j]+" "+rn);
  if(ar[j] == rn) return 1;
 }
 return 0;
}

function createTree(li,idx) {
 var gr = vtx.getRes(idx).refResIndex;
 k++;
 if(gr){
  for(var i = 0; i<gr.length; i++) {
   rn = gr[i] + 1;
   (k>=2 && (li[k-2] == "└") || (li[k-2] == " "))?li[k-2] = " ":li[k-2] = "│";
   (i == gr.length - 1)?li[k-1] = "└":li[k-1] = "├";
   li[k] = "<a href='"+tu+rn+"'>"+rn+"</a>";
   var prn = 0;
   prn = searchNum(arn);
   if(!prn) {
    msg = vtx.getRes(rn-1).message; msg = msg.replaceAll("\n", " ");
    if(msg.length() > 40) {
     msg = msg.substring(0,39); msg += "...";
    }
    li[k+1] = "    " + msg; arn[h] = rn;
    h++
   } else {
    li[k+1] = "…"; var prr = 0; prr = searchNum(arr);
    if(!prr) {
     arr[h] = rn;pl = pl.replace(new RegExp(li[k]),"<a href='"+tu+rn+"' style='color:red'>"+rn+"</a>");
    }
   }
// v2c.println(li.join("")+"<BR>");
   pl += li.join("")+"<BR>";
   if(!prn) pl = createTree(li,gr[i]);
  }
 }
 li[k,k+1] = null; k--; return pl;
}

function createPopupString() {
//v2c.println(srn);
 if(src) {
  pl = createTree([],srn-1); vcx.setPopupHTML("<html><body style='font-size: x-small;'><a href='"+tu+srn+"'>"+srn+"</a><BR>"+pl+"</body></html>");
 }
}

createPopupString(); <> VIICさん<><>09/10/03 20:32:52 ID:uFMESg4f<> 希望
IDからみみずん検索かけられるスクリプト <> VIICさん<><>09/10/03 21:55:37 ID:wXJ1YGv4<> >>45
これをレス表示欄で実行すると、スクリプトのコンパイルに失敗しましたというメッセージが出ます。
何が悪いんでしょうか?
ランチャーはV2C_T20090930.jarです。
illegal charactor unkown source#5とかいうエラーメッセージです。 <> VIICさん<><>09/10/04 00:50:32 ID:Ez5A1iBA<> 47ですが自己解決しました。
行頭の全角スペースを消したら上手く動作しました。 <> VIICさん<>sage<>09/10/04 03:26:59 ID:jRO8YdgL<> そういや半虹の詳細スレでV2C用とか見かけたような... <> 41<>sage<>09/10/04 19:36:46 ID:mj6abusQ<> 作成途中。コマンドの引数にidを追加するとIDでまとめてツリー表示。無しだと通常。
引数がidの場合、同じIDだとレス番が太字になる。
名前でも似たことできるとは思うけど名無し判定どうしよう。

以下と>51をコピペ↓
//【登録場所】 レス表示
//【ラベル】  (IDの)被参照レスをツリー表示
//【コマンド】 $SCRIPT tree.js もしくは $SCRIPT tree.js id
var vcx = v2c.context, vrx=vcx.res, vtx=vcx.thread, srn = vrx.number, sic = vrx.idCount, src = vrx.refCount, tu = vtx.url; sid = vrx.id;
var k=0,g=0,h=0,rn=0,n=0,q=0,sr=0,srs=0,pl="",msg="",rcc="",pla=[],li=[],arn=[],arr=[],anm=[],arc=[],i;

function searchNum(ar) {
 for(var j = 0; j<ar.length; j++) {
// v2c.println(ar[j]+" "+rn);
  if(ar[j] == rn) return 1;
 }
 return 0;
}

function createTree(li,idx) {
 var gr = vtx.getRes(idx).refResIndex;
 k++;
 if(gr){
  for(var i = 0; i<gr.length; i++) {
   rn = gr[i] + 1;
   (k>=2 && (li[k-2] == "└") || (li[k-2] == " "))?li[k-2] = " ":li[k-2] = "│";
   (i == gr.length - 1)?li[k-1] = "└":li[k-1] = "├";
   li[k] = "<a href='"+tu+rn+"'>"+rn+"</a>";
   var prn = 0;
   prn = searchNum(arn);
   if(!prn) {
    msg = vtx.getRes(rn-1).message; msg = msg.replaceAll("\n", " ");
    if(msg.length() > 40) {
     msg = msg.substring(0,39); msg += "...";
    }
    li[k+1] = "    " + msg; arn[h] = rn;
    h++
   } else {
    li[k+1] = "…"; var prr = 0; prr = searchNum(arr);
    if(!prr) {
     arr[g] = rn;
     g++;
    }
   }
// v2c.println(li.join("")+"<BR>");
   pl += li.join("")+"<BR>";
   if(!prn) pl = createTree(li,gr[i]);
  }
 }
 li[k,k+1] = null; k--; return pl;
} <> 41<>sage<>09/10/04 19:37:14 ID:mj6abusQ<> function createPopupString() {
 var args = vcx.args;
 if((args.length>0)&&(args[0]=='id')){
  for(var m = 0; m < vtx.localResCount; m++){
   sr = vtx.getRes(m); if(sid.equals(sr.id)) {anm[n] = sr.number; arc[n] = sr.refCount; srs+=sr.refCount ;n++;}
  }
  pla[q] = "<B style='font-size: small;'>ID:"+sid+" 書き込み数:"+sic+" 被参照レス(合計):"+srs+"</B><BR>";
  if(srs > 0){
   q++; pla[q] = "<BR>";
   for(var p = 0; p < sic; p++){
    rcc = "被参照レス:"+arc[p]; q++; pla[q] = "<a href='"+tu+anm[p]+"'>"+anm[p]+"</a> "+rcc+"<BR>";
    if(arc[p] > 0) { q++; pl=""; pla[q] = createTree([],anm[p]-1) + "<BR>"; }
   }
  }
 } else {
  if(src) {
   pla[q] = "<a href='"+tu+srn+"'>"+srn+"</a><BR>"
   q++;
   pla[q] = createTree([],srn-1);
  }
 }
 pl = pla.join("");
 for(var s = 0;s < arr.length; s++){
  pl = pl.replace(new RegExp(">"+arr[s])," style='color:red'>"+arr[s]);
 }
 for(var t = 0;t < anm.length; t++){
  pl = pl.replace(new RegExp(">"+anm[t]+"</a>",'g'),"><b>"+anm[t]+"</b></a>");
 }
 if(src || pl) {
  vcx.setPopupHTML("<html><body style='font-size: x-small;'>"+pl+"</body></html>");
 }
}
createPopupString(); <> n|a<>sage<>09/10/04 21:20:17 ID:Lq//aY/u<> >>46
ID検索の結果は(エラーチェックは省略して)
var vcx = v2c.context;
var th = vcx.thread;
var res = vcx.res;
var su = 'http://mimizun.com/search/perl/idsearch.pl';
var sd = 'board='+th.board.key+'&id='+encodeURIComponent(res.id);
var hr = v2c.createHttpRequest(su,sd);
var sr = hr.getContentsAsString();
のようなスクリプトで取得できます。
問題はこれをどのように表示するかですが…。
>>49
何か気になります…。
>>50,51
別件で苦戦しているので、レスポップアップはもう少し待ってください。
名無も取得できるようにします。 <> VIICさん<>sage<>09/10/04 22:01:06 ID:mj6abusQ<> >>52
乙です。了解しました。 <> VIICさん<>sage<>09/10/05 00:06:01 ID:RtqK3XbH<> >>52
たぶん詳細スレの自動登録タグ用のスクリプトかと <> VIICさん<><>09/10/06 15:36:31 ID:sSbOra85<> 689 :名無しさん@お腹いっぱい。 [sage] :2009/10/06(火) 07:18:47 ID:1oU3WdhdP
【レス抽出】
対象スレ:
キーワード:

抽出レス数:


これできるようになると嬉しいです <> VIICさん<>sage<>09/10/07 03:33:04 ID:7Q2AlYL9<> >>55
--- ここから ---
function filter(key){
var result = new Array();
var th = v2c.context.thread;
for(var i = 0; i < th.localResCount; i++){
var res = th.getRes(i);
if(res.message.indexOf(key) != -1){
result.push(res);
}
}
return result;
}

function execFilter(key){
result = filter(key);
v2c.context.setFilteredRes(result);
var out =
"【レス抽出】\n"
+ "対象スレ:" + v2c.context.thread.title + "\n"
+ "キーワード:" + key + "\n\n"
+ "抽出レス数:" + result.length;
useClipboard = v2c.confirm(out + "\n---------------------\nクリップボードに送る?");
if(useClipboard){
v2c.context.setClipboardText(out)
}
}

key = v2c.prompt("抽出キーワード",v2c.context.selText);
execFilter(key);
--- ここまで ---
${SCRIPT} filter.js
ポップアップでコピペができないことに気づいたので
confirmしてクリップボードに送るかを決める仕様になっています。

スレッド中の全レスを取得する関数はないみたいですね。

そういえばモジュールインポートみたいな仕組みってないですかね?
Rhinoの対話的環境だとload関数でインポートできたりするのですが…… <> VIICさん<>sage<>09/10/07 03:35:20 ID:7Q2AlYL9<> あと、要望によっては書き込み欄に送ってほしい、
と言われることもあるかもしれません……。 <> VIICさん<>sage<>09/10/07 03:39:35 ID:7Q2AlYL9<> varとセミコロンのつけ忘れがありました。
スペースが入ってないのと合わせてかっこ悪いので修正します。前のでも動くけど。
--- --- ---
function filter(key){
  var result = new Array();
  var th = v2c.context.thread;
  for(var i = 0; i < th.localResCount; i++){
    var res = th.getRes(i);
    if(res.message.indexOf(key) != -1){
      result.push(res);
    }
  }
  return result;
}

function execFilter(key){
  var result = filter(key);
  v2c.context.setFilteredRes(result);
  var out =
    "【レス抽出】\n"
    + "対象スレ:" + v2c.context.thread.title + "\n"
    + "キーワード:" + key + "\n\n"
    + "抽出レス数:" + result.length;
  var useClipboard = v2c.confirm(out + "\n---------------------\nクリップボードに送る?");
  if(useClipboard){
    v2c.context.setClipboardText(out);
  }
}

var key = v2c.prompt("抽出キーワード",v2c.context.selText);
execFilter(key); <> VIICさん<>sage<>09/10/07 04:41:32 ID:7Q2AlYL9<> >>42
レス表示・選択テキストの兼用です。 <> VIICさん<><>09/10/07 04:47:36 ID:AZYJ/ZPJ<> >>58
私はこれを選択テキストのコマンドで登録したので、確認ダイアログは余計だと感じるんだけど、
作者さんはレス表示コマンドとして使うのを想定してるのかな?
やはり↓のテンプレを使って作者の意図を明示した方が親切だと思います。
【登録場所】
【ラベル】
【コマンド】 <> VIICさん<>sage<>09/10/07 06:37:34 ID:sXfPO8v6<> 自分でつくったのはスクリプトコンソールに送ってみた
あと正規表現での抽出と <> n|a<>sage<>09/10/07 23:34:10 ID:hW/YIVrD<> 人柱版 H20091007 ttp://v2c.s50.xrea.com/V2C_H20091007.jar
・板の名無しを取得できるようにした。
・書き込み欄に文字列を設定・挿入できるようにした。
・HTMLポップアップ中のスレッドのレスへのリンクでそのレスをポップアップ表示するようにした。
詳細はttp://v2c.s50.xrea.com/manual/script.htmlを参照してください。
V2Cの更新チェックの対象になっていないので
ttp://pc12.2ch.net/test/read.cgi/software/1252568950/13
と同様の手順で更新してください。

>>56
クリップボードに送るかどうかはスクリプトの引数で判断するのはどうでしょうか。
loadは(loadの正確な仕様はわかりませんが)
var fl = new java.io.File(new java.io.File(v2c.saveDir,'script'),'lib.js');
eval(String(v2c.readFile(fl)));
で一応代用できると思います。
これを v2c.load('lib.js') で実現するのは難しいかもしれません。
「全レスを取得」というのは、ループを回すのではなく
レスオブジェクトのArrayを取得する、ということでしょうか?
>>60
最後の部分を
var key = v2c.context.selText;
if (!key||(key.length()==0)) {
key = v2c.prompt("抽出キーワード",'');
}
if (key&&(key.length()>0)) {
execFilter(key);
}
とすると「レス表示」・「選択テキスト」両用になります。 <> VIICさん<><>09/10/08 00:01:30 ID:Vsbq3WDD<> >>62
60です。
助かります。 <> 41<>sage<>09/10/09 04:55:12 ID:2piYiTtK<> ↓と65をコピペ
//【登録場所】 レス表示
//【ラベル】  被参照レスでツリー表示
//【コマンド1】 $SCRIPT tree.js (開始レスからのツリー表示)
//【コマンド2】 $SCRIPT tree.js id (IDで抽出)
//【コマンド3】 $SCRIPT tree.js name (名前で抽出、トリップ抽出ではない。)
//【コマンド4】 $SCRIPT tree.js be (beIdで抽出)
//【コマンド5】 $SCRIPT tree.js aux (補助情報で抽出)
//【コマンド6】 $SCRIPT tree.js ref もしくは $SCRIPT tree.js ref 5 など(ref後に(1以上の)数字があるとそれ以上の被参照レスを表示、無しだと3以上)
//【コマンド7】 $SCRIPT tree.js all (全レスツリー表示、ただ重複するレス番は除いている。)
// * $SCRIPT tree.js ref 1など表示に時間がかかる(その間操作不可の)場合がある点は注意。自分の場合例でレス700に被参照レス合計1200で表示に1分
// *【コマンド2〜5】の検索対象のレス番号は太字、【コマンド6】は検索の被参照レス数以上で太字
// * 重複レス番号の最初の番号は赤、それ以降は被参照レスがあれば語尾に「…」【コマンド2〜5】の検索対象のコメント色は緑
var refC="red", msgC="rgb(0,96,0)";//色変更
var vcx=v2c.context, vrx=vcx.res, vtx=vcx.thread,srn=vrx.number, tu=vtx.url, lrs=vtx.localResCount, ban=vtx.board.allAnonymousName;
var k=0,g=0,h=0,q=0,rn=0,si=0,req=1,pl="",msg="",sn="",pla=[],li=[],arn=[],arr=[],anm=[],arc=[];
function equalsString(a,b) {
 var eq=0;
 switch(si){
  case 1: eq = a.equals(b.id) && a.match(/\?\?\?/i)==null; break;
  case 2: eq = a.equals(b.name); break;
  case 3: eq = a!=0 && a==b.beID; break;
  case 4: eq = a.equals(b.aux); break;
  case 5: eq = 1; break;
  case 6: eq = (a<=b.refCount); break;
  default: eq = 0; break;
 }
 return eq;
}
function editMsg(mg) {
 mg=mg.replaceAll("\n", " "); if(mg.length()>40) {mg=mg.substring(0,39); mg+="...";} return mg;
}
function searchNum(ar,sn) {
 for(var j=0; j<ar.length; j++) {if(ar[j]==sn) return 1;} return 0;
}
function createTree(li,idx) {
 var gr=vtx.getRes(idx).refResIndex, nr = ""; k++;
 if(gr){
  for(var i=0; i<gr.length; i++) {
   rn=gr[i] + 1; vgx = vtx.getRes(rn-1); (si==5 || si==0) ? req=0 : req=equalsString(sn,vgx);v2c.println(rn+" "+req);
   (k>=2 && (li[k-2]=="└") || (li[k-2]==" ")) ? li[k-2]=" " : li[k-2]="│";
   (i==gr.length-1) ? li[k-1]="└" : li[k-1]="├";
   (req) ? li[k]="<b><a href='"+tu+rn+"'>"+rn+"</a></b>" : li[k]="<a href='"+tu+rn+"'>"+rn+"</a>"; var prn=0; prn=searchNum(arn,rn);
   msg=editMsg(vgx.message);
   if(!prn) {
    (req) ? li[k+1]="    <span style='color:"+msgC+"'>"+msg+"</span>" : li[k+1]="    "+msg; arn[h]=rn; h++;
   } else {
    if(vgx.refCount) nr="…";
    (req) ? li[k+1]=nr+"   <span style='color:"+msgC+"'>"+msg+"</span>" : li[k+1]=nr+"   "+msg; var prr=0; prr=searchNum(arr,rn);
    if(!prr) {arr[g]=rn; g++;}
   }
   pl+=li.join("")+"<br>";
   if(!prn) createTree(li,gr[i]);
  }
 }
 li[k,k+1]=null; k--; return pl;
} <> 41<>sage<>09/10/09 05:00:26 ID:2piYiTtK<> function createPopupString() {
 var args=vcx.args, ss="", n=0, srs=0;
 if((args.length>0) && ((args[0]=='id') || (args[0]=='name') || (args[0]=='be') || (args[0]=='aux') || (args[0]=='all')
 || ((args[0]=='ref') && (args[1]>0) || (args[1]==null)))){
  if(args[0]=='id') {
   sn=vrx.id; ss="ID:"+sn; si=1;
  } else if(args[0]=='name') {
   sn=vrx.name; ss="名前:"+sn; si=2;
   if(sn>0 || sn<lrs) {
    var snn=vtx.getRes(sn-1); anm[n]=snn.number; arc[n]=snn.refCount; srs+=arc[n]; n++;
   } else {
    for(var u=0; u<ban.length; u++) {
     if(ban[u].equals(vrx.name)) {sn=0 ;break;}
    }
   }
  } else if(args[0]=='be') {
   sn=vrx.beID; ss="beID:"+sn; si=3;
  } else if(args[0]=='aux') {
   sn=vrx.aux; ss="AUX:"+sn; si=4;
  } else if(args[0]=='all') {
   sn=1; ss="全レス表示"; msgC="black"; si=5;
  } else {
   sn=args[1]; if(sn==null) sn=3; ss="被参照数が"+sn+"以上"; msgC="black"; si=6;
  }
  if(sn){
   for(var m=0; m < lrs; m++) {
    var sr=vtx.getRes(m); if(si!=5) req=equalsString(sn,sr); if(req) {anm[n]=sr.number; arc[n]=sr.refCount; srs+=sr.refCount ; n++;}
   }
   if(n>1 || srs>0) {
    pla[q]="<b style='font-size: small; '>"+ss+" 書き込み数:"+n+" 被参照レス(合計):"+srs+"</b><br>";
    q++; pla[q]="<br>";arl=0
    for(var p=0; p < n; p++){
     arl=searchNum(arn,anm[p]);
     if(si!=5 || !arl) {
     msg=editMsg(vtx.getRes(anm[p]-1).message); q++;
     pla[q]="<b><a href='"+tu+anm[p]+"'>"+anm[p]+"</a></b>"+" + "+arc[p]+"   <span style='color:"+msgC+"'>"+msg+"</span><br>";
      if(arc[p] > 0) { q++; pl=""; pla[q]=createTree([],anm[p]-1) + "<br>"; }
     }
    }
   }
  }
 } else {
  var src=vrx.refCount; msgC="black";
  if(src) {pla[q]="<b><a href='"+tu+srn+"'>"+srn+"</a></b><br>"; q++; pla[q]=createTree([],srn-1);}
 }
 pl=pla.join("");
 for(var s=0; s<arr.length; s++) {pl=pl.replace(new RegExp("("+arr[s]+")('>"+arr[s]+")"),"$1"+"' style='color:"+refC+"$2");}
 if(pl) {vcx.setPopupHTML("<html><body style='font-size: x-small;'>"+pl+"</body></html>");}
}
createPopupString(); <> VIICさん<>sage<>09/10/09 05:30:33 ID:2piYiTtK<> >>62
ポップアップ表示ありがとうございます。
brd.anonymousName
brd.allAnonymousName

brd = v2c.context.thread.board;
ですね。

【V2C】 H20091008 [1.1.0_05] (L-0.6.0_β2:x86)
【Java】 1.6.0_16-b01 (Sun Microsystems Inc.)
【OS】 Windows XP 5.1 (x86)
【不具合内容】
1
原因不明なのですが時々以下のエラー
タイトル: スクリプトエラー: idtree
メッセージ: スクリプトの実行中にエラーが発生しました。
sun.org.mozilla.javascript.internal.WrappedException: Wrapped java.security.AccessControlException:
access denied (java.io.FilePermission C:\Program Files\V2C\log\yy61.60.kg\v2cj\SETTING.TXT read)
(<Unknown Source>#14)
2
レス表示スタイルのスレで$SCRIPT tree.js allとかを実行した(ツリーが激しい)のですが
<STYLE>や<DIV>などが行頭にあったり<IMG>があったりするとそのまま表示されないみたい。 <> n|a<>sage<>09/10/09 22:59:46 ID:UwsPoDK5<> >>64,65
かなり高機能になってきましたね。
2レスに分かれてコピペし難くなっているので、
これを多少整形(一行には一文、行頭のインデントはタブ)したものを
V2Cのページに置いてもいいでしょうか?
>>66
1は 人柱版 H20091009 ttp://v2c.s50.xrea.com/V2C_H20091009.jar
で直っていると思います。
V2Cの更新チェックの対象になっていないので
ttp://pc12.2ch.net/test/read.cgi/software/1252568950/13
と同様の手順で更新してください。
2はeditMsgの中で < は &lt; に、> は &gt; に
それぞれ置換しておく必要があります。
(res.messageは参照を全て置換した後の状態なので。) <> VIICさん<>sage<>09/10/10 13:23:20 ID:FCapwSRg<> >>67
ありがとうございます。効率悪いところなどどしどし追加・変更してください。
あと>64にv2c.println(rn+" "+req);残ってました。削除してかまいません。

1は今のとこエラー表示はありません。
2は文字列切り出してから置換した方がいいのかな
function editMsg(mg) {
 mg=mg+"";
 if(mg.length>40) {mg=mg.substring(0,39); mg+="...";}
 mg=mg.replace(/[\n]+/g," ");
 mg=mg.replace(/</g,"<");
 mg=mg.replace(/>/g,">");
 return mg;
}

要望ですがレスポップアップ設定の「最大幅で自動改行」チェック無しと同じものが
スクリプトポップアップでも効くようには出来ないでしょうか。ツリーが深くなると見辛くなってしまうので <> 41<>sage<>09/10/11 01:15:06 ID:Redr/Gu/<> >>67
すみません。間違いがありました。>64内のcreateTree関数でリセット忘れしました。 nr=""; を追加です。
function createTree(li,idx) {
//途中略…
   } else {
    if(vgx.refCount) nr="…";
    (req) ? li[k+1]=nr+"   <span style='color:"+msgC+"'>"+msg+"</span>" : li[k+1]=nr+"   "+msg; var prr=0; prr=searchNum(arr,rn);
    if(!prr) {arr[g]=rn; g++;} nr="";//←ここ
   }
//以下略… <> VIICさん<>sage<>09/10/12 18:22:26 ID:4YfliCzN<> winの自分用だけど。
scriptフォルダ内のスクリプトファイルをリスト表示、クリックでエディタで開く。
≪新規作成≫をクリックするとダイアログの入力名でスクリプトファイルを作成してエディタで開く。
v2c.exec内のエディタ指定は各自で、OSが違ってくるとわからない。

メモ帳だとUTF-8で開けないっぽいし、名前を付けて保存でエラーになるので
スクリプトでUTF-8で作成できればいいのだけどわからない。
今のとこ起動コマンドでUTF-8を指定して開けるエディタのほうがよいと思う。

↓以下コピペ
//【登録場所】 レス表示
//【ラベル】  スクリプトファイルを開く
//【コマンド1】 ${SCRIPT:F} opjsf.js
var vcx = v2c.context;
var fd = new java.io.File(v2c.saveDir,'script');
function redirectURL(u) {
var sr = u.toString()
if(sr=='file:') {
var fn = v2c.prompt('新規ファイル名を入力 ※拡張子(.js)抜き','');
if(fn == '') {
v2c.alert('ファイル名を入力してください。');
redirectURL(u);
return;
} else if(fn == null) {
return;
} else {
var nf = new java.io.File(fd,fn+'.js');
sr = fd +'\\'+ fn +'.js';
nf.createNewFile();
}
} else {
sr = sr.substring(5);
}
if(sr) v2c.exec('"C:\\Program Files\\EmEditor\\EmEditor.exe" /cp 65001 "'+sr+'"');
//if(sr) v2c.exec('"C:\\Windows\\notepad.exe " "'+sr+'"');
return;
}

function createPopupString() {
var al = [], sl = '';
var dl = fd.list();
for (var i = 0; i < dl.length; i++) {
if(dl[i].match(/.+\.js$/i)) {
al[i] = '<a href="file:'+fd+'/'+dl[i]+'">'+dl[i]+'</a><br>';
}
}
al[i+1] = '<a href="file:">≪新規作成≫</a><br>';
jl = al.join('');
vcx.setPopupHTML('<html><body>'+jl+'</body></html>');
vcx.setRedirectURL(true);
}

createPopupString(); <> n|a<>sage<>09/10/12 22:29:43 ID:Vh8gDZki<> >>68,69
ttp://v2c.s50.xrea.com/contrib/script.html
からtree.jsをダウンロードできるようにしました。
(V2C使用法のスクリプトのページからリンクしています。)
「最大幅で自動改行しない」設定は考えてみます。
>>70
メモ帳でUTF-8として新規ファイルを開くには、
新しいファイルにBOM(Byte Order Mark)を書き込んでおけばいいと思います。
次回R版までには簡単に文字列をファイルに保存できるようにする予定です。
ポップアップが窮屈な感じなので<body style="margin:10px;">のように
周囲に余白を取るといいかもしれません。 <> 70<>sage<>09/10/13 22:03:26 ID:zid/LJLd<> >>71
どうもです。たしかにすこしCSSで整形したほうがいいですね。

ふと思ったのですが、>52は特定の書式に編集してV2Cのスレ一覧に送る方法があれば
Web検索みたく一覧表示して、ログ検索みたく一覧から開いたときに抽出して表示したりできるのでしょうか。

Web検索の例とかでやってるのはスクリプトみたいに2chURL抜き取って表示してるみたいだけどむずかしいかな。
ついでというかWeb検索例の2NNとヘッドライン@2ちゃんねるが例になっていないと思う。 <> n|a<>sage<>09/10/14 23:16:00 ID:MYSGVfdo<> >>72
「Web検索」をスクリプトで書けるようにするのはいいかもしれません。
ちなみに2NNとヘッドライン@2ちゃんねるは検索語を使わない例です…。 <> VIICさん<>sage<>09/10/15 22:31:41 ID:HhILaZUT<> responseCodeの箇所はこれで機能するのかわからんけど。
必死チェッカーとは一長一短なので組み合わせるのもいいかも。
urlポップアップは別スレ用とかの区別は無いみたい。

↓以下
//【登録場所】 レス表示
//【ラベル】  みみずんID検索(urlリスト)
//【コマンド1】 ${SCRIPT:S} mmzid.js
function createPopupString() {
var vcx = v2c.context;
var th = vcx.thread;
var res = vcx.res;
var su = 'http://mimizun.com/search/perl/idsearch.pl';
var sl = 'list';
var sd = 'board='+th.board.key+'&id='+encodeURIComponent(res.id)+'&url='+sl;
var hr = v2c.createHttpRequest(su,sd);
if(hr.responseCode > 0) {
v2c.alert(hr.responseMessage);return;
}
var sr = hr.getContentsAsString()+"";
var mc = new RegExp("[^]+(対象板名 "+th.board.key+" 抽出件数 )([0-9]+ 件)([^]+[^>]{1}<br>)[^]+","i");
var ida = sr.match(mc);
if(ida!=null) {
ida[0] = "";
if(ida[2] != "0 件") {
var rgex = new RegExp("<a[^<]+</a><br>","i")
var repl = "";
ida[3] = ida[3].replace(rgex,repl);
v2c.println(ida[2]);
var tu = "http://[^/]+/test/read.cgi/"+th.board.key+"/[0-9]{9,10}/";
rgex = new RegExp(tu,"ig");
var idl = ida[3].match(rgex);
idl = idl.sort();
//v2c.println(idl);
var j = 0,idt = [];
for (var i=0; i<=idl.length; i++) {
if(idl[i] != idl[i+1]) {
idt[j] = idl[i]; j++;
}
}
ida[2] =ida[2] + "【"+idt.length+" スレッド】";
rgex = new RegExp("("+tu+"[0-9]{1,4})","ig");
repl = "<a href='$1'>$1</a>";
ida[3] = ida[3].replace(rgex,repl);
}
vcx.setPopupHTML("<html><body style='margin: 10px;'>"+ida.join('')+"</body></html>");
} else {
v2c.alert("データを取得できませんでした。");
}
}

createPopupString(); <> n|a<>sage<>09/10/16 23:48:18 ID:q+D8GaBG<> >>68
T20091016でsetPopupHTMLの部分を
vcx.setPopupHTML("<html><body style='font-size: x-small;'><pre>"+pl+"</pre></body></html>");
vcx.setMaxPopupWidth(500);
のようにすると、ポップアップの最大幅を越える部分は表示されなくなります。
>>74
hr.responseCodeやhr.responseMessageが意味のある値を持つのは
hr.getContentsAs*()の後で、
var sr = hr.getContentsAsString();
if (!sr) {
v2c.alert('ページの取得に失敗しました: '+hr.responseCode+' '+hr.responseMessage);
return;
}
のように使います。 <> VIICさん<>sage<>09/10/19 22:58:13 ID:GuT0z7Cs<> >>75
ポップアップの最大幅の件ありがとうございます。
<pre>効果のため<pre>内にフォント設定しましたが使えてます。

使えるかはわからないけど次レスにスクリプト。
googleの検索結果を羅列します。ポップアップ後にクリップボードにコピーします。
下のキーワードはいくつかのタイプを拾ってます。
おわった→終わった→オワタをブラウザで検索してみるとなんとなくわかるかも。

【】内クリックでブラウザで開く。のだけど
その後の オワタ AA→\(^o^)/オワタ AA→ で【\(^o^)/オワタ AA】がmatchせずに開かないのが残念。 <> VIICさん<>sage<>09/10/19 22:59:53 ID:GuT0z7Cs<> //【登録場所】 レス表示or選択テキスト 【ラベル】 google検索件数表示 【コマンド】 $SCRIPT gglkey.js
var vcx = v2c.context, key = vcx.selText, mr, su, su0, k = 0, ml = [], sl = [], dr = [];
function redirectURL(u) {
var sr = u.toString(), sw;
if(sr==su0) {
key = v2c.prompt('抽出キーワード',dr[0]); sw = encodeURIComponent(key);
} else {
var se = sr.match(new RegExp('q=([^]+?$)','i')); sw = se[1];
var drs = encodeURIComponent(','+dr.join()+','); var mw = drs.match('%2c'+sw+'%2c');
if (mw) return u;
else {key = decodeURIComponent(sw);}
}
dr[k] = key; ml = []; createPopupString(sw);
}
function reduceOtherKey(kl,kln) {
var h = 0; kln = kln.sort();
for (var i = 0, a = kln.length; i < a; i++) {
if(kln[i] != kln[i+1]) {
for (var j = 0, b = dr.length; j < b; j++) {
if(kln[i] == dr[j]) break;
}
if(j==b) { kl[h+5] = ' <b><a href="'+su0+encodeURIComponent(kln[i])+'">'+kln[i]+'</a></b> '; h++; }
}
}
if(h==0) {kl[4] = null;} return kl;
}
function createPopupString(ss) {
su0 = 'http://www.google.co.jp/search?q='; su = su0+ss; var sh = v2c.readURL(su);
if (!sh) {v2c.alert('ページを取得できませんでした。'); return;}
var tt='',mt='';
tt = sh.match(new RegExp('の検索結果 約 <b>[0-9,]+?</b> 件','i'));
mt = sh.match(new RegExp('<p>[^]+?<br clear="all">','i'));
if (!mt || !tt) { v2c.alert('検索結果を取得できませんでした。'); return; }
var ml1 = mt[0].match(new RegExp('spell[^]+?<b>(?:|<i>)([^><]+?)(?:|</i>)</b>','i'));
if(!ml1) {var ml2 = mt[0].match(new RegExp('([^><]+?)(?=</a></font></td><td>)','ig'));}
if(!ml2) {var ml3 = mt[0].match(new RegExp('([^><\.0-9,゚]+?)(?=</b>[^]+?</font></font>)','ig'));}
if(!ss.match('%22','i')) {
key =key+"";
var dkey = '"'+key.replace(new RegExp('[  ]','ig'),'" "')+'"';
ml[0] = '引用符付:';
ml[1] = ' <b><a href="'+su0+encodeURIComponent(dkey)+'">'+dkey+'</a></b><br>';
}
ml[2] = 'キーワード入力'; ml[3] = ' <b><i><a href="'+su0+'">click</a></i></b><br>';
if (ml1) {
ml[4] = 'もしかして: <b><a href="'+su0+encodeURIComponent(ml1[1])+'">'+ml1[1]+'</a></b>';
} else if(ml2) {
ml[4] = '他のキーワード:'; ml = reduceOtherKey(ml,ml2);
} else if(ml3) {
ml[4] = 'このキーワードで検索:'; ml = reduceOtherKey(ml,ml3);
} else {
}
mr = ml.join(''); sl[k] = '<dt>【<a href="'+su+'">'+key+'</a>】'+tt+'</dt>'; k++;
wr = sl.join('');
vcx.setPopupHTML('<html><body style="margin:0 5px;"><dl>'+wr+'<dd>'+mr+'</dd></dl></body></html>');
v2c.context.setRedirectURL(true); var wrc = wr.replace(new RegExp('</dt>','ig'),'\n');
wrc = wrc.replace(new RegExp('<[^]+?>','ig'),''); vcx.setClipboardText(wrc);
}
if (!key||(key.length()==0)) {key = v2c.prompt("抽出キーワード",'');}
if (key&&(key.length()>0)) {key = key.trim(); dr[0] = key; createPopupString(encodeURIComponent(key));} <> n|a<>sage<>09/10/20 23:34:06 ID:ct0LGXBc<> >>76
なるほど、検索結果の件数と類似キーワードだけに着目しているわけですね。
redirectURLでの既出チェックは正規表現を使う必要は無さそうなので、
if (drs.indexOf('%2c'+sw+'%2c')>=0) {
とすると「\(^o^)/オワタ AA」も外部ブラウザで開くはずです。 <> 77<>sage<>09/10/21 01:08:54 ID:vobNJZoD<> >>78
ありがとうございます。indexOfはまったく使えて無かったです・・・

redirectURL内の修正と手動キーワード入力時のキャンセル処理を追加修正
あとブラウザ開いた後もポップアップを再表示にしたので
jdic表示で開いた場合ポップアップが常に前面になる効果で個人的にわりと使いやすくなったと思う。

var vcx = v2c.context, key = vcx.selText, phr, wr, mr, su, su0, k = 0, ml = [], sl = [], dr = [],pml = [];
function redirectURL(u) {
var sr = u.toString(), sw;
if(sr==su0) {
key = v2c.prompt('抽出キーワード',dr[0]); if(key == null) {vcx.setPopupHTML(phr); return;}
sw = encodeURIComponent(key);
} else {
var se = sr.match(new RegExp('q=([^]+?$)','i')); sw = se[1];
var drs = encodeURIComponent(','+dr.join()+',');
if ((drs.indexOf('%2c'+sw+'%2c')>=0)) {vcx.setPopupHTML(phr);return u;}
else {key = decodeURIComponent(sw);}
}
dr[k] = key; ml = []; createPopupString(sw);
}
//途中同略
wr = sl.join('');
phr = '<html><body style="margin:0 5px;"><dl>'+wr+'<dd>'+mr+'</dd></dl></body></html>'
vcx.setPopupHTML(phr);
v2c.context.setRedirectURL(true); var wrc = wr.replace(new RegExp('</dt>','ig'),'\n');
wrc = wrc.replace(new RegExp('<[^]+?>','ig'),''); vcx.setClipboardText(wrc);
}
if (!key||(key.length()==0)) {key = v2c.prompt("抽出キーワード",'');}
if (key&&(key.length()>0)) {key = key.trim(); dr[0] = key; pml[0] = key; createPopupString(encodeURIComponent(key));} <> VIICさん<>sage<>09/10/24 16:24:09 ID:gYD+smns<> 抽出→荒し報告形式コピーあたりを追加できればいいのだけど
リダイレクト後か、ボタン追加でやるか・・・
リダイレクト後はできなさそうだし、<botton>とか<input>は機能してなさそうだし、
JBotton追加とかだとリンク有効化とかまだよくわかってない。

//【登録場所】 レス表示
//【ラベル】  必死チェッカーもどき
//【コマンド1】 ${SCRIPT:S} hissi.js か ${SCRIPT:S} hissi.js id でID検索
//【コマンド2】 ${SCRIPT:S} hissi.js trip でトリップ検索
var vcx = v2c.context,phr;
function redirectURL(u) {vcx.setPopupHTML(phr); return u;}
function createPopupString(ss) {
var ss=[]; var th = vcx.thread; var arg=vcx.argLine;
if((arg == '') || (arg == 'id') || (arg == 'trip')) {
var res = vcx.res; var date = res.date+''; var sk = vcx.argLine;
var rd = date.replace(new RegExp('(^[12]{1}\\d{3})\/([01]{1}\\d{1})\/([0-3]{1}\\d{1}).+','i'),'$1$2$3');
ss[0] = 'http://hissi.org/';
if(sk == 'trip') {
ss[1] = 'trip_search.php/';
var su = ss.join(''); var na = res.name.match(new RegExp('◆([^]+?)$','i'));
if(!na) {v2c.context.setStatusBarText('トリップがありません。'); return;}
var tp = encodeURIComponent(rn[1]); var sd = 'date='+rd+'&Trip='+tp+'&Bord='+th.board.key;
} else {
ss[1] = 'read.php/'+th.board.key+'/'; ss[2] = 'search/'; var su = ss.join(''); var id = res.id;
if(!id || id.match(/\?\?\?/i) || id==0) {v2c.context.setStatusBarText('IDがありません。'); return;}
var id = encodeURIComponent(res.id); var sd = 'date='+rd+'&ID='+id;
}
var hr = v2c.createHttpRequest(su,sd); var sr = hr.getContentsAsString();
if(!sr) {v2c.context.setStatusBarText('ページの取得に失敗しました。: '+hr.responseCode+' '+hr.responseMessage);return;}
sr = sr +'';
if(sk == 'trip') {
ss[1] = ''; ss[2] = sr.replace(new RegExp('^.+url=\.\/(.+)">$','i'),'$1');
} else {
ss[2] = sr.replace(new RegExp('^.+url=\.\.\/(.+)">$','i'),'$1');
}
ss[3] = '?thread=all'; var su = ss.join(''); var sh = v2c.readURL(su);
if(!sh) {v2c.context.setStatusBarText('ページの取得に失敗しました。'); return;}
sh = sh +'';
var il = sh.match(new RegExp('<title>(必死チェッカーもどき [^><]+?)<\/title>','i'));
if(!il) {v2c.context.setStatusBarText('ファイルが存在しません。'); return;}
var cl = sh.match(new RegExp('>(\\d{1,} 位)<\/font>(\/\\d{1,} ID中)<\/td>[^]+?(\\d{1,})<\/td><\/tr><\/table>','i'));
if(!cl) {v2c.context.setStatusBarText('順位の取得に失敗しました。'); return;}
var thl = sh.match(new RegExp('>書き込んだスレッド一覧<[^]+?<td>([^]+?<br>)<\/td><td>([^]+?)<\/td><\/tr><\/table>','i'));
if(!thl) {v2c.context.setStatusBarText('一覧の取得に失敗しました。'); return;}
thl[2] = thl[2].replace(/l50 target="_blank"/ig,'');
var ir = '<b>'+il[1]+'</b>'; var cr = '<b>【'+cl[1]+cl[2]+'】【Total '+cl[3]+' res】</b>';
var ur = '<dt><b>取得URL:</b></dt><dd><a href="'+ss[0]+ss[1]+ss[2]+'">'+ss[0]+ss[1]+ss[2]+'</a></dd>';
var nr = '<dt><b>使用した名前一覧</b></dt><dd>'+thl[1]+'</dd>';
var tr = '<dt><b>書き込んだスレッド一覧</b></dt><dd>'+thl[2]+'</dd>';
phr = '<html><body style="margin:5px;">'+ir+'<br>'+cr+'<br><dl>'+ur+nr+tr+'</dl></body></html>'
vcx.setPopupHTML(phr); vcx.setRedirectURL(true);
}
}
createPopupString(); <> n|a<>sage<>09/10/30 23:46:42 ID:Ox/vj5iV<> >>80
V2C.exe関連のごたごたでなかなかこちらにとりかかれませんでした…。

人柱版 H20091030 ttp://v2c.s50.xrea.com/V2C_H20091030.jar
でFORMのsubmitをトラップできるようにしました。
V2Cの更新チェックの対象になっていないので
ttp://pc12.2ch.net/test/read.cgi/software/1255525714/47
と同様の手順で更新してください。

setRedirectURL()・redirectURL()とよく似た方式で、
v2c.context.setTrapFormSubmission(true) を実行しておくと
HTMLポップアップ内のFORMを送信する時にスクリプトの
formSubmitted(u,sm,sd) が呼ばれます。
・u … URL
・sm … 'GET'または'POST'の文字列
・sd … FORMのデータ
formSubmitted()の返り値によらずFORMは送信されません。

使用例は:

function formSubmitted(u,sm,sd) {
v2c.println('URL: '+u);
v2c.println('method: '+sm);
v2c.println('data: '+sd);
}

var vcx = v2c.context;
vcx.setPopupHTML('<html><body style="margin:10px;"><form action=""><input type="submit" value="action" name="name"></form></body></html>');
vcx.setTrapFormSubmission(true); <> 80<>sage<>09/10/31 21:07:27 ID:xTKash6P<> //抽出追加。redirectURLのPopupHTMLが不可になった?
var vcx=v2c.context,phr;
function filter(kd1,kd2){
var vgt=v2c.resPane.selectedThread; var result=[];
for(var i=0; i < vgt.localResCount; i++){
var resf=vgt.getRes(i);
if(kd1 == 'trip') {
var ftp=resf.name.match(new RegExp('◆([^]+?) $','i')); if(ftp) {if(ftp[1] == kd2) result.push(resf);}
} else {
if(resf.id == kd2) result.push(resf);
}
}
return result;
}
function formSubmitted(u,sm,sd) {
var kd=decodeURIComponent(sd).match(new RegExp('(id|trip)=(.+)','i')); var result=filter(kd[1],kd[2]); vcx.setFilteredRes(result);
}
function redirectURL(u) {vcx.setPopupHTML(phr); return u;}
function createPopupString(ss) {
var ss=[]; var th=vcx.thread; var arg=vcx.argLine;
if((arg == '') || (arg == 'id') || (arg == 'trip')) {
var res=vcx.res; var date=res.date+''; if(arg == '') arg ='id'
var rd=date.replace(new RegExp('(^[12]{1}\\d{3})\/([01]{1}\\d{1})\/([0-3]{1}\\d{1}).+','i'),'$1$2$3'); ss[0]='http://hissi.org/';
if(arg == 'trip') {
ss[1]='trip_search.php/'; var su=ss.join(''); var na=res.name.match(new RegExp('◆([^]+?) $','i'));
if(!na) {v2c.context.setStatusBarText('トリップがありません。'); return;}
var kd=na[1]; var tp=encodeURIComponent(na[1]); var sd='date='+rd+'&Trip='+tp+'&Bord='+th.board.key;
} else {
ss[1]='read.php/'+th.board.key+'/'; ss[2]='search/'; var su=ss.join(''); var kd=res.id;
if(!kd || kd.match(/\?\?\?/i) || kd==0) {v2c.context.setStatusBarText('IDがありません。'); return;}
var eid=encodeURIComponent(kd); var sd='date='+rd+'&ID='+eid;
}
var hr=v2c.createHttpRequest(su,sd); var sr=hr.getContentsAsString();
if(!sr) {v2c.context.setStatusBarText('ページの取得に失敗しました。: '+hr.responseCode+' '+hr.responseMessage);return;} sr=sr +'';
if(arg == 'trip') {
ss[1]=''; ss[2]=sr.replace(new RegExp('^.+url=\.\/(.+)">$','i'),'$1');
} else {
ss[2]=sr.replace(new RegExp('^.+url=\.\.\/(.+)">$','i'),'$1');
}
ss[3]='?thread=all'; var su=ss.join(''); var sh=v2c.readURL(su);
if(!sh) {v2c.context.setStatusBarText('ページの取得に失敗しました。'); return;} sh=sh +'';
var il=sh.match(new RegExp('<title>(必死チェッカーもどき [^><]+?)<\/title>','i'));
if(!il) {v2c.context.setStatusBarText('ファイルが存在しません。'); return;}
var cl=sh.match(new RegExp('>(\\d{1,} 位)<\/font>(\/\\d{1,} ID中)<\/td>[^]+?(\\d{1,})<\/td><\/tr><\/table>','i'));
if(!cl) {v2c.context.setStatusBarText('順位の取得に失敗しました。'); return;}
var thl=sh.match(new RegExp('>書き込んだスレッド一覧<[^]+?<td>([^]+?<br>)<\/td><td>([^]+?)<\/td><\/tr><\/table>','i'));
if(!thl) {v2c.context.setStatusBarText('一覧の取得に失敗しました。'); return;}
thl[2]=thl[2].replace(/l50 target="_blank"/ig,'');
var ir='<b>'+il[1]+'</b>'; var cr='<b>【'+cl[1]+cl[2]+'】【Total '+cl[3]+' res】</b>';
var ur='<dt><b>取得URL:</b></dt><dd><a href="'+ss[0]+ss[1]+ss[2]+'">'+ss[0]+ss[1]+ss[2]+'</a></dd>';
var nr='<dt><b>使用した名前一覧</b></dt><dd>'+thl[1]+'</dd>';
var tr='<dt><b>書き込んだスレッド一覧</b></dt><dd>'+thl[2]+'</dd>';
var fm='<form action=""><input type="hidden" value="'+kd+'" name="'+arg+'"><input type="submit" value="抽出"></form>'
phr='<html><body style="margin:5px;">'+ir+'<br>'+cr+'<br><dl>'+ur+nr+tr+'</dl>'+fm+'</body></html>'
vcx.setPopupHTML(phr); vcx.setRedirectURL(true); vcx.setTrapFormSubmission(true);
}
}
createPopupString(); <> 80<>sage<>09/11/01 17:40:12 ID:jTIq5THx<> >>81
FORMの要望、ありがとうございます。
formSubmitted内にあるvcx.setFilteredRes(result);は実行時のスレッドで抽出されるので
選択したスレッドで抽出できないでしょうか。 <> n|a<>sage<>09/11/01 23:17:59 ID:EXoAnLmB<> >>82
redirectURL()を呼ぶ前にsetRedirectURL()で設定された値を
リセットしていなかったのでリセットするようにしました。
(setPopupHTML()の値等はリセットしているので。)
すみませんが必要な場合はredirectURL()内で再設定してください。
>>83
何か考えます…。 <> VIICさん<>sage<>09/11/11 00:00:14 ID:cXQN3eM6<> >>84
下のような形での挙動は仕様でしょうか。
1)外部リンクをクリックして(JDICで)開いた後、submitボタンを押すとその外部リンクが開いてしまう。
2)テキスト欄が入力できない。
3)resetボタンでメニュー内がリセットされない。
また
A)form送信後、クリック時のポップアップを閉じて
formSubmitted内でhlを変更したsetPopupHTML(hl)を表示させることができないでしょうか。

【V2C】 H20091108 [1.1.1_02] (L-0.6.2:x86)
【Java】 1.6.0_17-b04 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86)
【メモリ】 Total(Free)/Max.: 73(36)/254 (Phys. Total/Avail.: 2030/1118) [MB]

function redirectURL(u) {
vcx.setPopupHTML(hl);
vcx.setRedirectURL(true);
vcx.setTrapFormSubmission(true);
return u;
}
function formSubmitted(u,sm,sd) {
v2c.println('URL: '+u);
v2c.println('method: '+sm);
v2c.println('data: '+sd);
vcx.setPopupHTML(hl);
vcx.setRedirectURL(true);
vcx.setTrapFormSubmission(true);
}
var vcx = v2c.context;
var hl ='<html><body style="margin:10px;"><a href="http://v2c.s50.xrea.com/manual/script.html">V2C 使用法 [外部コマンド:スクリプト]</a><br>'
+'<a href="http://yy61.60.kg/test/read.cgi/v2cj/1252074124/">スクリプト</a><form method="get" action=""><input type="text" name="text" value="test">'
+'<select name="select"><option>A</option><option>B</option><option>C</option></select>'
+'<input type="submit" value="submit"><input type="reset" value="reset"></form></body></html>';
vcx.setPopupHTML(hl);
vcx.setRedirectURL(true);
vcx.setTrapFormSubmission(true); <> n|a<>sage<>09/11/13 00:03:42 ID:/gpEDn5T<> >>85
1)はバグで、次回更新で修正します。
2)はポップアップがキーボードフォーカスを受け取れるようにする設定が必要ですね。
 (v2c.context.setPopupFocusable(true)のような感じか?)
3)リセットは入力を「クリア」するのではなく「初期値を設定」するようなので、
 入力欄は変化しません。selectは
 "<option selected>A</option>"のように明示的に初期値を設定してください。
A)は何か考えます…。 <> VIICさん<>sage<>09/11/14 21:05:47 ID:VF48Ld10<> >>86
ありがとうございます。
最初に手動で設定入力するときにメニュー選択とテキスト入力をまとめて表示できれば楽かなと思ったので
出来ると助かります。あと追加ですみません。外部リンクで気づいたのですが
v2c.createHttpRequestとv2c.readURLで待っている間V2Cのプログレスバーを処理中に出来ないでしょうか。
ステータスバーは結果の表示だし、マウスジェスチャで気軽にやってアクセス待ちが長いと
何も変化が無いので本当にスクリプトを実行しているか微妙に不安になってしまいます。 <> VIICさん<>sage<>09/11/16 22:08:57 ID:Jn6fuYX4<> 書き込みで簡単そうなやつを作りたいのだけど以下の点などで改善できないでしょうか。
1. マウスジェスチャ・キーバインドの全体指定では『null』になる。現状は右クリメニューから。
2. v2c.context.setClipboardTextだとペーストまで自動化したい。
3. v2c.context.insertToPostMessageだと挿入なため選択範囲を置換できない。
(選択文字だけ置換したいため同文字が複数あるとreplaceしてv2c.context.setPostMessageも確実でなさそう。)

【登録場所】 選択テキスト
【ラベル】  括弧で囲む
【コマンド1】 $SCRIPT bracket.js
var st=v2c.context.selText;
v2c.context.setClipboardText('『'+st+'』')
//v2c.context.insertToPostMessage('『'+st+'』') <> VIICさん<>sage<>09/11/16 22:19:56 ID:Jn6fuYX4<> あ、書き込み内容は選択範囲以外拾えませんね。()内は勘違いでした。すみません。 <> n|a<>sage<>09/11/16 23:34:55 ID:T4AgLX36<> >>88,89
「『書き込み欄の選択テキストをレス表示欄の選択テキストから生成した文字列で
置き換える』というスクリプトを『全体』のキーバインド・マウスジェスチャで
実行したい」ということでしょうか? <> VIICさん<>sage<>09/11/17 00:01:57 ID:P7Y3JjVa<> >>90
応用的には『書き込み欄の選択テキストを判断材料(キー)にして
キーをスクリプトで生成した文字列に置き換える。(選択したキーは削除)』です。

キーバインド・マウスジェスチャは『書き込み欄』では設定出来ないようなので『全体』で要望しました。 <> VIICさん<>sage<>09/11/17 00:22:34 ID:P7Y3JjVa<> >>90
わざわざ文書変えないでも
『書き込み欄の選択テキストを書き込み欄の選択テキストから生成した文字列で置き換える』
ですね。個人的に『』とかは後から囲うので。 <> n|a<>sage<>09/11/18 23:32:23 ID:g02canvV<> >>91,92
次回更新では以下のコードで実現できるようにします。

var st=v2c.getSelectedText();
if (st) {
v2c.replaceSelectedText('『'+st+'』');
} <> VIICさん<>sage<>09/11/18 23:59:07 ID:vmHl4ABl<> >>93
了解です。ありがとうございます。 <> VIICさん<>sage<>09/11/25 23:09:06 ID:KTLEIk7g<> >80の追加バージョン、パスはhissi
ttp://karimofu.cc/dlp/mofu2_4201.zip.php
付け足し付け足ししてたら長くなった。テスト不足ではある。

//【登録場所】 レス表示(コマンド1〜4) or 全体(コマンド3,4)
//【ラベル】  必死チェッカーもどき
//【コマンド1】 ${SCRIPT:SFrw} hissi.js か ${SCRIPT:SFrw} hissi.js id でID検索
//【コマンド2】 ${SCRIPT:SFrw} hissi.js trip でトリップ検索
//【コマンド3】 ${SCRIPT:SFrw} hissi.js id input でIDをデフォルトで入力画面表示
//【コマンド4】 ${SCRIPT:SFrw} hissi.js trip input でトリップをデフォルトで入力画面表示
// * 初回使用に限り対応するscriptフォルダ内にhissi_menu.txtを作成して板一覧を取得してます。 <> n|a<>sage<>09/11/26 23:58:14 ID:1MbWFnaX<> >>95
プログレスバーをどうするかはまだ决めかねています。
とりあえず次回更新でステータスバーにリアルタイムでメッセージを表示できるようにします。

保存用ファイル名を生成する部分
var txt = v2c.saveDir+'\\script\\hissi_menu.txt';

var fs = java.io.File.separator;
var txt = v2c.saveDir+fs+'script'+fs+'hissi_menu.txt';
または
var txt = new java.io.File(new java.io.File(v2c.saveDir,'script'),'hissi_menu.txt');
にするとWindows以外でも使えていいのではないかと思います。

それにしても人がいない…。 <> n|a<>sage<>09/11/27 23:36:28 ID:pvrRJKBz<> >>95
ファイルの場所が違ってしまいますが、T20091127では
var txt = v2c.getScriptDataFile('hissi_menu.txt');
で保存用のファイルを取得できるようにしました。 <> 95<>sage<>09/11/28 20:52:56 ID:TmGqdjbd<> >>96-97
ありがとうございます。私はリアルタイムでメッセージで満足してます。
試しにDL数がわかるとこにしましたが…(ちなみにテストDLしてるのでマイナス1です。)

ttp://karimofu.cc/dlp/mofu2_4206.zip.php
パスはhissi

引数にinputを使用している場合ポップアップを複数にするとデータがおかしくなるため
メインポップアップに『再検索』ボタンを追加しました。他、input関連の書き直し。
また『再検索』を繰返しても『書き込み時間帯』『書き込みレス一覧』にデータが貯まる形になっています。 <> VIICさん<>sage<>09/11/30 03:31:49 ID:xgPd7E3U<> v2c.exec使用だと遠回りな感じがするけど・・・

//【登録場所】 レス表示
//【ラベル】  日の最初のレスにジャンプ
//【コマンド1】 ${SCRIPT:Fx} test.js 選択日の最初のレスにジャンプ
//【コマンド2】 ${SCRIPT:Fx} test.js next (選択日から最近の)次の日で、最初のレスにジャンプ
//【コマンド3】 ${SCRIPT:Fx} test.js prev (選択日から最近の)前の日で、最初のレスにジャンプ
var vcx = v2c.context, th = vcx.thread, rs = vcx.res, arg = vcx.args[0];
var dt = rs.date, ix = rs.index, kl = th.localResCount-1,tgd;
var pt = new RegExp('^.+?\\(.\\)'), da = dt.match(pt);
if(arg == 'next'){
for(var k = ix; k < kl; k++){
tgd = th.getRes(k).date
if(tgd.indexOf(da) == -1) break;
}
v2c.exec('"'+v2c.saveDir+'\\v2c.exe" "'+th.url+(k+1)+'"');
} else {
for(var i = ix; i > -1; i--){
tgd = th.getRes(i).date;
if(tgd.indexOf(da) == -1) break;
}
if(arg == 'prev'){
da = tgd.match(pt);
for(var j = i; j > -1; j--){
tgd = th.getRes(j).date;
if(tgd.indexOf(da) == -1) break;
}
v2c.exec('"'+v2c.saveDir+'\\v2c.exe" "'+th.url+(j+2)+'"');
} else {
v2c.exec('"'+v2c.saveDir+'\\v2c.exe" "'+th.url+(i+2)+'"');
}
} <> 99<>sage<>09/11/30 03:41:09 ID:xgPd7E3U<> ごめん。OS依存なのか…?わからんけど。↓に変更。

var vcx = v2c.context, th = vcx.thread, rs = vcx.res, arg = vcx.args[0];
var dt = rs.date, ix = rs.index, kl = th.localResCount-1,tgd;
var pt = new RegExp('^.+?\\(.\\)'), da = dt.match(pt);
var fs = java.io.File.separator;
if(arg == 'next'){
for(var k = ix; k < kl; k++){
tgd = th.getRes(k).date
if(tgd.indexOf(da) == -1) break;
}
v2c.exec('"'+v2c.saveDir+fs+'v2c.exe" "'+th.url+(k+1)+'"');
} else {
for(var i = ix; i > -1; i--){
tgd = th.getRes(i).date;
if(tgd.indexOf(da) == -1) break;
}
if(arg == 'prev'){
da = tgd.match(pt);
for(var j = i; j > -1; j--){
tgd = th.getRes(j).date;
if(tgd.indexOf(da) == -1) break;
}
v2c.exec('"'+v2c.saveDir+fs+'v2c.exe" "'+th.url+(j+2)+'"');
} else {
v2c.exec('"'+v2c.saveDir+fs+'v2c.exe" "'+th.url+(i+2)+'"');
}
} <> VIICさん<>sage<>09/11/30 20:46:11 ID:xgPd7E3U<> 似たのを追加。
要望ですがレス番号指定で上端に移動が出来ないでしょうか。
↓のコマンド1で抽出状態で最初のレスに移動する形です。
あとレス表示の上端にあるレスに関する情報を取得して、
キーバインドや全体で使用できないでしょうか。
抽出状態であればそれで機能しそうなきがするのですが…

//【登録場所】 レス表示
//【ラベル】  (この|次の|前の)日で抽出
//【コマンド1】 $SCRIPT dailyres.js 選択日で抽出
//【コマンド2】 $SCRIPT dailyres.js next 選択日の次の日で抽出
//【コマンド3】 $SCRIPT dailyres.js prev 選択日の前の日で抽出

var vcx = v2c.context, th = vcx.thread, rs = vcx.res, arg = vcx.args[0];
var dt = rs.date, ix = rs.index, tl = th.localResCount,tgd;
var pt = new RegExp('^.+?\\(.\\)'), da = dt.match(pt), fr = new Array();
if(arg == 'next'){
for(var i = ix; i < tl; i++){
tgd = th.getRes(i).date
if(tgd.indexOf(da) == -1) break;
}
da = tgd.match(pt);
for(var j = i; j < tl; j++){
tgd = th.getRes(j).date;
fr.push(j);
if(tgd.indexOf(da) == -1) break;
}
if(j < tl)fr.pop();
fr.length == 0 ? v2c.alert('次の日はありません。') : vcx.setFilteredResIndex(fr);
}else{
for(var i = ix; i > -1; i--){
tgd = th.getRes(i).date;
if(arg != 'prev') fr.push(i);
if(tgd.indexOf(da) == -1) break;
}
if(arg == 'prev'){
da = tgd.match(pt);
for(var j = i; j > -1; j--){
tgd = th.getRes(j).date;
fr.push(j);
if(tgd.indexOf(da) == -1) break;
}
if(j > -1) fr.pop();
fr.length == 0 ? v2c.alert('前の日はありません。') : vcx.setFilteredResIndex(fr);
}else{
if(i > -1) fr.pop();
for(var j = ix+1; j < tl; j++){
tgd = th.getRes(j).date;
fr.push(j);
if(tgd.indexOf(da) == -1) break;
}
if(j < tl) fr.pop();
vcx.setFilteredResIndex(fr);
}
} <> n|a<>sage<>09/11/30 22:23:23 ID:Pxvfvlgl<> 書き込みは少ないけどROMは結構多い
そんなふうに考えていた時期が(ry

…それはさておき…

>>98
そのスクリプトを頂き物スクリプトのページに置かせてもらってもいいでしょうか?
>>99-101
・指定したレスにジャンプ
・画面に最初に表示されているレスを取得
はできるようにします。 <> 95<>sage<>09/12/01 03:56:08 ID:9KxlB2og<> >>102
乙です。
どうぞ自由に使ってください。以下に差し替えてもらえないでしょうか。

ttp://karimofu.cc/dlp/mofu2_4213.zip.php
パスはhissi

選択テキスト状態で、input付き『全体』のスクリプト実行する or 『再検索』ボタンを押す
と選択テキストを入力欄に挿入。選択テキストかレス情報がなければ空にするようにしました。
あと、『再検索』時、キーワード以外は検索前の状態で表示するようにしました。 <> VIICさん<><>09/12/01 18:13:27 ID:fFX1RN0l<> >>103
ご苦労様です。
早速試してみてます。

ちょっとお訊ねします。
// * 『抽出』:現在選択表示しているスレから検索IDのレスを抽出して『書き込み時間帯』『書き込みレス一覧』を反映します。
// * 『レス(*/*)』:『書き込みレス一覧』の始めの取得数は50レスまでです。1クリックで50レスまで追加・再取得ができます。

・・・いまひとつよくわからないのですが。
抽出は『書き込み時間帯』『書き込みレス一覧』の内容のリロードと理解すればよろしいのでしょうか?
レスはさらによくわかりません。
一つのスレ内で5つの書き込みをしてる人のID抽出をしても(1/1)となってますし・・・
<> 95<>sage<>09/12/01 20:30:02 ID:9KxlB2og<> >>104
わかり難いですね…すみません。
『抽出』は、表示中のスレから「必死チェッカーもどき」にはない
最新のIDレスデータを『書き込み時間帯』『書き込みレス一覧』に追加できます。
「必死チェッカーもどき」は4時間間隔で更新したりするので、最近のレスは取得できない場合があります。

『レス(*/*)』『ID(*/*)』は、取得URL先である「必死チェッカーもどき」からレスを取得しています。
必死チェッカーもどきは1つのURLに全レスの時間帯と、最大50レスまでのレスデータがあるので、
例えば検索IDが200レスしていたら、4回「必死チェッカーもどき」へアクセスする必要があります。
それで(*/*)の部分はページ数ということで(1/4)と表示されることになります。

自動で同サイトに何度もアクセスしても良いものかどうか、
またすべて取得するまでの表示時間や失敗の可能性を考慮して、
手動でアクセスして取得する形になっています。 <> VIICさん<><>09/12/02 11:17:42 ID:lXq5/SS+<> >>105
そうですか、丁寧にありがとうございます。

> 5つの書き込みをしてる人のID抽出をしても(1/1)となってます

つまりこれは↑、4時間ごとに更新される必死チェッカーもどきに、
まだ残りの4レスが反映されてないから、ということなのでしょうね <> VIICさん<><>09/12/02 17:27:01 ID:lXq5/SS+<> あぁ、失礼。レス(*/*)は必死チェッカーもどきの表示するページ数ですか。 <> n|a<>sage<>09/12/02 23:19:20 ID:0lfeO86T<> >>103
ありがとうございます。
ttp://v2c.s50.xrea.com/contrib/script.html
からダウンロードできるようにしました。 <> VIICさん<>sage<>09/12/08 21:43:38 ID:yF1UceS/<> ttp://karimofu.cc/dlp/mofu2_4221.zip.php
無駄にツリー表示拡張、追加コマンドは↓他、詳しくはファイル内を見てください。パスはtree

【コマンド7】 $SCRIPT tree.js mail (メールで抽出)
【コマンド8】 $SCRIPT tree.js link (リンクを抽出)
【コマンド9】 $SCRIPT tree.js line (本文の行数が3以上のレスを抽出、行数=改行の数、連続改行はまとめて1行)

【コマンド11】$SCRIPT tree.js daily (日で抽出)
【コマンド12】$SCRIPT tree.js day (対象を開始日とした7日分のレスを抽出)
【コマンド13】$SCRIPT tree.js min (対象を開始時とした60分間のレスをツリー抽出)

【コマンド15】$SCRIPT tree.js new (新着レスをツリー表示)
【コマンド16】$SCRIPT tree.js old (既読レスをツリー表示)
【コマンド17】$SCRIPT tree.js ng (NGレスを表示、NGレスは被参照が取り消されるのでツリー表示にならにため抽出のみ)
【コマンド18】$SCRIPT tree.js filter (抽出、チェックされていれば、その対象レスを表示、チェック優先)

要望度合いは低いのですが、
1. 外部コマンド設定のラベルを取得
2. NG理由の取得、およびNGの連鎖非表示[参照]の被参照レス番の取得
3. レス番の配列をV2Cグラフに送ってマーク表示(「グラフの設定」にあるIDとかトリップ選択で表示されるマーク)

1はコマンド8のようなときにポップアップの一行目に『jpeg,gif,png,bmp』ではなく『画像リンク』とかで表示できないかなと。
2は使えるものかは分からないし、ツリーだとどんな感じになるのかな程度の興味です。
3は面倒そうかもしれませんが、SCRIPTとは別で、抽出状態でグラフを開くと抽出番号がマークされて表示とかでもいいかも。

createPopupString()の処理時間みたけど関数は5秒ぐらいでも実際に
クリックしてからポップアップ表示までは20秒とかスクリプト上での改善は微々たるものか・・・ <> n|a<>sage<>09/12/09 23:19:53 ID:EjnepX7z<> >>109
ttp://v2c.s50.xrea.com/contrib/script.html
のtree.zipを差し替えました。

1.のラベルは取得できるようにします。
2.,3.についても考えてみます。

link.isImageLinkでImageViewURLReplace.datも考慮して
画像リンクかどうかを判定できるといいような気がしてきました。 <> 109<>sage<>09/12/10 21:43:10 ID:sR9xHaL8<> >>110
乙です。
サムネイル付きだけ拾えるのはいいですね。

抽出方法でいうとAA判定されたレス番とか
グラフで表示されてる速度のデータとか拾えるといいかも。 <> VIICさん<>sage<>09/12/23 22:09:49 ID:CZLi6MIy<> 選択範囲を拡張子jsで保存するだけの超簡易インストーラです。
これでもいいんですが、firefoxやgoogle chromeみたいに
クリックしたら即インストールみたいなものは作れませんでしょうか?
個人的にはgoogle chromeのextention(json+スクリプトファイルのzip)
みたいな形式になれば作りやすくて楽です。

//【登録場所】 選択テキスト
//【ラベル】簡易インストール
//【コマンド1】 ${SCRIPT:F} script_install.js
function install(filename){
var f = new java.io.File(v2c.saveDir, "script\\" + filename)
v2c.writeStringToFile(f,v2c.context.selText,"UTF-8")
}

var title = v2c.prompt("タイトル","")
if(title != null && !title.equals("")){
install(title)
} <> n|a<>sage<>09/12/31 00:01:41 ID:Asgz7t0K<> >>111
ImageViewURLReplace.datも考慮してリンクが画像リンクかどうかを
lnk.type_IMAGEで判断できるようにしました。
>>112
安全と簡便さをうまく両立できるといいのですが…。 <> VIICさん<>sage<>10/01/01 14:24:24 ID:EMpFCRtX<> >>113
年末ごたごたしてレスできませんでした。
リリース前になにも無しなのはあれなので・・・

rescheck.jsは試せてないのですが↓以外は動作しているようです。

>・「全体」コマンドでもレス表示欄の情報を取得できるようにした。
キーバインド・マウスジェスチャでは機能しますが
「コマンド」メニューからはエラーになるようです。 <> VIICさん<>sage<>10/01/01 14:30:18 ID:EMpFCRtX<> >>99-100の修正

//【登録場所】 レス表示
//【ラベル】  (この|次の|前の)日の最初のレスにジャンプ
//【コマンド1】 ${SCRIPT:Fx} dailyjump.js 選択日の最初のレスにジャンプ
//【コマンド2】 ${SCRIPT:Fx} dailyjump.js next (選択日から最近の)次の日で、最初のレスにジャンプ
//【コマンド3】 ${SCRIPT:Fx} dailyjump.js prev (選択日から最近の)前の日で、最初のレスにジャンプ

var vcx = v2c.context, th = vcx.thread, rs = vcx.res, arg = vcx.args[0];
var dt = rs.date, ix = rs.index, kl = th.localResCount-1,tgd,idx;
var pt = new RegExp('^.+?\\(.\\)'), da = dt.match(pt);
var fs = java.io.File.separator;
if(arg == 'next'){
 for(var k = ix; k < kl; k++){
  tgd = th.getRes(k).date
  if(tgd.indexOf(da) == -1) break;
 }
 idx=k;
} else {
 for(var i = ix; i > -1; i--){
  tgd = th.getRes(i).date;
  if(tgd.indexOf(da) == -1) break;
 }
 if(arg == 'prev'){
  da = tgd.match(pt);
  for(var j = i; j > -1; j--){
   tgd = th.getRes(j).date;
   if(tgd.indexOf(da) == -1) break;
  }
  idx=j+1;
 } else {
  idx=i+1;
 }
}
vcx.setResIndexToJump(idx); <> VIICさん<>sage<>10/01/01 14:36:32 ID:EMpFCRtX<> >>115の【登録場所】 は全体も可でした。

>>101の修正

//【登録場所】 全体、レス表示
//【ラベル】  (この|次の|前の)日で抽出
//【コマンド1】 $SCRIPT dailyres.js 選択日で抽出
//【コマンド2】 $SCRIPT dailyres.js next 選択日の次の日で抽出
//【コマンド3】 $SCRIPT dailyres.js prev 選択日の前の日で抽出

var vcx = v2c.context, th = vcx.thread, rs = vcx.res, arg = vcx.args[0];
var dt = rs.date, ix = rs.index, tl = th.localResCount,tgd;
var pt = new RegExp('^.+?\\(.\\)'), da = dt.match(pt), fr = new Array();
if(arg == 'next'){
 for(var i = ix; i < tl; i++){
  tgd = th.getRes(i).date
  if(tgd.indexOf(da) == -1) break;
 }
 da = tgd.match(pt);
 for(var j = i; j < tl; j++){
  tgd = th.getRes(j).date;
  fr.push(j);
  if(tgd.indexOf(da) == -1) break;
 }
 if(j < tl)fr.pop();
 fr.length == 0 ? v2c.alert('次の日はありません。') : vcx.setFilteredResIndex(fr);
}else{
 for(var i = ix; i > -1; i--){
  tgd = th.getRes(i).date;
  if(arg != 'prev') fr.push(i);
  if(tgd.indexOf(da) == -1) break;
 }
 if(arg == 'prev'){
  da = tgd.match(pt);
  for(var j = i; j > -1; j--){
   tgd = th.getRes(j).date;
   fr.push(j);
   if(tgd.indexOf(da) == -1) break;
  }
  if(j > -1) fr.pop();
  fr.length == 0 ? v2c.alert('前の日はありません。') : vcx.setFilteredResIndex(fr);
 }else{
  if(i > -1) fr.pop();
  for(var j = ix+1; j < tl; j++){
   tgd = th.getRes(j).date;
   fr.push(j);
   if(tgd.indexOf(da) == -1) break;
  }
  if(j < tl) fr.pop();
  vcx.setFilteredResIndex(fr);
 }
 fr=fr.sort();
 vcx.setResIndexToJump(fr[0]);
} <> n|a<>sage<>10/01/01 17:18:28 ID:SY4mgBM8<> >>114
ありがとうございます。
v1.1.3で修正しました。 <> あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん VIICさん<>sage<>10/01/16 00:27:54 ID:u0fYuUwe<> tree.jsを少し変更、整理

ttp://up2.shinetworks.net/cgi-bin/snup-mini/src/shinemini17191.zip.html
DLKey:V2C

・追加分
//【コマンド8】 $SCRIPT tree.js link image (リンクを抽出、引数がimageのみの場合ImageViewURLReplace.datも考慮した画像リンクのみ抽出)
//【コマンド17】$SCRIPT tree.js ng reason (NGレスを表示、本文ではなく非表示理由を表示)

・仕様変更、ツリー対象に連鎖[参照]も含むようにした。
//【コマンド17】$SCRIPT tree.js ng (NGレスを表示、ツリー対象は連鎖[参照]も含む)

・仕様変更、$SCRIPT tree.js link ○ ○ …の場合、一行目はコマンドのラベルを表示するようにした。
//【コマンド8】 $SCRIPT tree.js link zip lzh 等

要望ですが
v2c.context.setFilteredResIndex(li);
v2c.context.setStatusBarText(s);
だと実行後ステータスバー表示は「抽出レス数: ○」ではなくsetStatusBarTextの内容を表示出来ないでしょうか。 <> VIICさん<>sage<>10/01/16 01:00:39 ID:zM7zaxn7<> お疲れ様です。さっそく使わせて頂きます。 <> n|a<>sage<>10/01/17 00:33:34 ID:Iingplsd<> >>123
ありがとうございます。
頂き物スクリプトページのファイルを差し替えました。
次回更新ではv2c.context.setStatusBarText(s)は順番に関係なく表示されるようにします。 <> VIICさん<>sage<>10/01/17 01:13:09 ID:wF2wjHoh<> >>125 乙です。

新タブで開いたすべてをまとめて、ID出現回数ランキングにして表示します。ただし対象は現在の日付のみです。
//【登録場所】 全体、レス表示
//【ラベル】  ID出現回数ランキング
//【コマンド】 $SCRIPT idrank.js
var vcx = v2c.context,res = vcx.res,th = vcx.thread,resp = v2c.resPane, txt = v2c.getScriptDataFile('date.csv');
var graph_data = new Array(),mres = new Array(),tgr,id,date,rpgt,tmp,mt,k=0,idcount=0,rank=1,res=0,allres=0;
var Popup_bg = '#F5F5F5', Title_bg = '#808080', SubPopup_bg = '#DCDCDC', ResNum_Cr = '#404040', Bar_Cr = '#696969';//黒
var GraphCSS = '<head><style type="text/css"><!--'
  +'body{background-color:'+Popup_bg+'; margin:5px 0 5px 15px;}'
  +'.headding{background-color:'+Title_bg+'; color:white; font-weight:bold;}'
  +'.row{background-color:'+SubPopup_bg+';}'
  +'.data{color:'+ResNum_Cr+';font-weight:bold;}'
  +'.bar{background-color:'+Bar_Cr+';}'
  +'.sum{background-color:'+Title_bg+'; color:white; font-weight:bold;}'
  +'--></style></head>';
function isSearchID(id){
 for( var i = 0, il = mres.length; i < il; i++ ){
  if(mres[i].id==id){return i;}
 }
 return null;
}
var pe= new Date(),pm = pe.getMonth(),pd = pe.getDate();
pm=parseInt(pm+1);pd=parseInt(pd); if(pm < 10) pm='0'+pm ; if(pd < 10) pd='0'+pd;
var today = pe.getFullYear()+'/'+pm+'/'+pd;
for(var i = 0, il = resp.threads.length; i < il; i++){
 rpgt = resp.getThread(i); res=0;
 if(rpgt){
  for(var j = 0,jl = rpgt.localResCount; j < jl; j++){
   tgr = rpgt.getRes(j); id = tgr.id; date = tgr.date+"";
   if(date.indexOf(today) == -1) continue;
   if(!id || id.search(/^([\?]{3}(O|P|Q|i|I|o|0|)|(O|P|Q|i|I|o|0))$/) > -1) continue;
   res++; mt =(id+'').match(/^([.\+\/\w]{8})(O|P|Q|i|I|o|0|)$/); tmp = mt[0]; ididx=isSearchID(tmp);
   if(ididx || ididx==0){
    mres[ididx].count++;
   } else {
    mres[k] = new Object(); mres[k].id = tmp; mres[k].count = 1; k++;
   }
  }
  allres += res; v2c.setStatus(rpgt.title+"…")
 }
}
mres.sort(function(a,b){return((b.count-a.count));});
var ml = mres.length, gs0 = new Array(ml+5), gsa = new Array(9), GraphString = '';
gs0[0] = '<html>'; gs0[1] = GraphCSS; gs0[2] = '<body><table border="0" cellspacing="1" cellpadding="1" style = "font-size:10px;">';
gs0[3] = '<tr class="headding"><th align="center">Rank</th><th align="center">ID</th><th colspan="2" align="center">Count</th></tr>';
gsa[0] = '<tr><td align="right">'; gsa[2] = ' </td><td align="left">  '; gsa[4] = ' </td><td class="data" align="right">';
gsa[6] = ' </td><td><div class="bar" style="width: '; gsa[8] = ';"></div></td></tr>';
for(var m = 0,n = 0; m < ml; m++){
 m%2 ==1 ? gsa[0] = '<tr class="row"><td align="right">' : gsa[0] = '<tr><td align="right">';
 if(idcount == mres[m].count){
  n++;
 } else {
  idcount = mres[m].count; n = 0; rank = m + 1 - n;
 }
 gsa[1] = rank; gsa[3] = mres[m].id; gsa[5] = idcount; gsa[7] = idcount; gs0.push(gsa.join(""));
}
gs0.push('<tr class="sum" align="right"><td>Total: </td><td colspan="3">'+ml+' people / '+allres+' res </tr>'); gs0.push('</table></body></html>');
GraphString = gs0.join(''); vcx.setPopupFocusable(true); vcx.setPopupHTML(GraphString); <> VIICさん<>sage<>10/02/13 00:00:48 ID:FuqX2EE2<> >>126の追加バージョン
ttp://up2.shinetworks.net/cgi-bin/snup-mini/src/shinemini17640.zip.html
・集計期間を入力できるようにした。
・被参照数、文字数、リンク数、NGレス数を表示するようにした。
・それぞれのランキングができるようにした。
・棒グラフのバー(レス数、被参照数)が長い場合改行して表示するようにした。
・ランキング表示の閾値を入力できるようにした。
・Rank:順位、ID:レスID、Res:レス数、Ref:被参照数、Char:文字数(改行は無視)、Link:リンク数、NG:NGレス数
・集計中のステータス表示やポップアップ表示がすこし変わった等

【登録場所】 全体、レス表示
【ラベル】  レスタブすべてのIDランキング
【コマンド1】 $SCRIPT idrank.js 30位以内のレス数ランキング
【コマンド2】 $SCRIPT idrank.js input いくつか表示方法を設定できます <> VIICさん<>sage<>10/02/13 23:54:42 ID:FuqX2EE2<> twitterができたから使うこともあるかもしれん。簡易表示

//【登録場所】 選択テキスト
//【ラベル】 Excite翻訳(英日)ポップアップ
//【コマンド】 $SCRIPT excite_translation.js

var vcx = v2c.context;
var text = vcx.selText;
function createPopupString(st) {
 var su0 = 'http://www.excite.co.jp/world/english/?wb_lp=ENJA&before=';
 var su = su0 + st;
 var sh = v2c.readURL(su);
 if(!sh){
  v2c.alert('ページを取得できませんでした。');
  return;
 }
 var mt = new Array(2);
 mt = sh.match(new RegExp('id="after"[^]+?>([^><]+?)</textarea>','i'));
 if(!mt){
  v2c.alert('検索結果を取得できませんでした。');
  return;
 }
 ph = '<html><body style="margin:0 5px;">'+mt[1]+'</body></html>'
 vcx.setPopupHTML(ph);
}
if ( text && ( text.length() > 0 ) ){
 text = text.trim();
 createPopupString( encodeURIComponent(text) );
} <> VIICさん<>sage<>10/03/09 06:58:48 ID:4PHL877C<> >128 変更 以降コピペ
//【登録場所】 全体、レス表示、選択テキスト
//【ラベル】 Excite翻訳ポップアップ
//【コマンド1】 $SCRIPT excite_translation.js または $SCRIPT excite_translation.js enja 英語⇒日本語
//【コマンド2】 $SCRIPT excite_translation.js jaen 日本語⇒英語
//【コマンド3】 $SCRIPT excite_translation.js chja 中国語(簡体字)⇒日本語
//【コマンド4】 $SCRIPT excite_translation.js chjab 中国語(繁体字)⇒日本語
//【コマンド5】 $SCRIPT excite_translation.js koja 韓国語⇒日本語
//【コマンド6】 $SCRIPT excite_translation.js frja フランス語⇒日本語
//【コマンド7】 $SCRIPT excite_translation.js deja ドイツ語⇒日本語
//【コマンド8】 $SCRIPT excite_translation.js itja イタリア語⇒日本語
//【コマンド9】 $SCRIPT excite_translation.js esja スペイン語⇒日本語
//【コマンド10】 $SCRIPT excite_translation.js ptja ポルトガル語⇒日本語
//【コマンド11】 $SCRIPT excite_translation.js menu コマンド1〜10のメニュー表示
var vcx = v2c.context, Text = vcx.selText, Args = vcx.args[0], Url = [5];
//引数からURLに使う文字列を取得
function getUrlStrArr(a){
 var u = [2];
 if(a == 'enja'){
  u[0] = 'english/'; u[1] = 'ENJA';
 } else if(a == 'jaen'){
  u[0] = 'english/'; u[1] = 'JAEN';
 }else if(a == 'chja'){
  u[0] = 'chinese/'; u[1] = 'CHJA';
 }else if(a == 'chjab'){
  u[0] = 'chinese/'; u[1] = 'CHJA&big5=yes';
 }else if(a == 'koja'){
  u[0] = 'korean/'; u[1] = 'KOJA';
 }else if(a == 'frja'){
  u[0] = 'french/'; u[1] = 'FRJA';
 }else if(a == 'deja'){
  u[0] = 'german/'; u[1] = 'DEJA';
 }else if(a == 'itja'){
  u[0] = 'italian/'; u[1] = 'ITJA';
 }else if(a == 'esja'){
  u[0] = 'spanish/'; u[1] = 'ESJA';
 }else if(a == 'ptja'){
  u[0] = 'portuguese/'; u[1] = 'PTJA';
 }else{
  u[0] = 'english/'; u[1] = 'ENJA';
 }
 return u;
}
//翻訳の選択ポップアップでフォーム送信時の動作
function formSubmitted(u,sm,sd){
 u = (u+'').replace(/%25/g,'%'); var lang = u.match(/\?(.+?)=/)[1];
 if(lang == 'jaen') {
  u = u.replace(/(&before=).+/,'$1'+decodeURIComponent(u.match(/\&before=(.+)/)[1])); u = u.replace(' ', ' ');
 }
 var usa= getUrlStrArr(lang); createPopupString('',u.replace(/\?.+?=.+(&before)/, usa[0]+'?wb_lp='+usa[1]+'$1'));
// v2c.context.closeOriginalPopup();//送信後閉じる
} <> 129の続き<>sage<>10/03/09 07:00:11 ID:4PHL877C<> //翻訳結果のポップアップ表示
function createPopupString(st,su){
 if(!su){
  Url[0] = 'http://www.excite.co.jp/world/';Url[2] = '?wb_lp=';Url[4] = '&before='+st;
  var usa = getUrlStrArr(Args);Url[1] = usa[0];Url[3] = usa[1];su = Url.join('');
 }
 var sh = v2c.readURL(su);
 if(!sh){
  v2c.alert('ページを取得できませんでした。'); return;
 }
 var mt = new Array(2);
 mt = sh.match(new RegExp('id="after"[^]+?>([^><]+?)</textarea>','i'));
 if(!mt){
  v2c.alert('検索結果を取得できませんでした。'); return;
 }
 ph = '<html><body style="margin:0 5px;">'+mt[1]+'</body></html>';
 vcx.setPopupHTML(ph);
// v2c.context.setClipboardText(mt[1]);//クリップボードにコピー
}
//翻訳する文字列の整形
function editText(text){
 text = text.replaceAll('>>([[\\d]+[,-]?]+)\\n', '$1へ。');//アンカー+改行⇒番号へ。
 text = text.replaceAll('>>([[\\d]+[,-]?]+)', '$1');//アンカー⇒番号
 text = text.replaceAll('[\\n ]', '');//改行削除
 text = text.replaceAll('([R|Q]T ?|)[@#][\\w]+[:]?', '');//Twitter用、ハッシュタグ等削除
 var links = vcx.res.links, link;
 for(var i=0,l = links.length; i < l; i++){//リンクの削除
  link = (links[i]+'').substring(1);
  if((text+'').charAt((text+'').lastIndexOf(link)-1) == 'h'){link = 'h' + link;}
  text = text.replace(link+'','');
 }
 //日本語の翻訳用、半角のままだと×
 if(Args == 'jaen'){text = text.replaceAll(' ', ' ');}
 text = text.trim(); return text;
}
if(!Text){var Text = vcx.res.message;}
Text = editText(Text);
if(Args == 'menu'){
 if(Args != 'jaen'){Text = encodeURIComponent(Text);}
 vcx.setPopupHTML('<html lang="ja"><style type = "text/css">'
 +'<!--body{background-color:#cccccc; color:black; text-align:center;}.header{font-size:small;}--></style>'
 +'<body><form action="http://www.excite.co.jp/world/"><table border="0" cellspacing="0" cellpadding="0">'
 +'<tr><th class = "header">Excite翻訳</th></tr>'
 +'<tr><input type="submit" value=" 英⇒日 " name="enja"></tr><tr><input type="submit" value=" 日⇒英 " name="jaen"></tr>'
 +'<tr><input type="submit" value="中(簡)⇒日" name="chja"></tr><tr><input type="submit" value="中(繁)⇒日" name="chjab"></tr>'
 +'<tr><input type="submit" value=" 韓⇒日 " name="koja"></tr><tr><input type="submit" value=" 仏⇒日 " name="frja"></tr>'
 +'<tr><input type="submit" value=" 独⇒日 " name="deja"></tr><tr><input type="submit" value=" 伊⇒日 " name="itja"></tr>'
 +'<tr><input type="submit" value=" 西⇒日 " name="esja"></tr><tr><input type="submit" value=" 葡⇒日 " name="ptja"></tr>'
 +'<input type="hidden" value="'+Text+'" name="before"></table></form></body></html>');
 vcx.setTrapFormSubmission(true);
 vcx.setMaxPopupWidth(97);
}
if( Args != 'menu' && Text && ( Text.length() > 0 ) ){
 if(Args != 'jaen'){Text = encodeURIComponent(Text);}
 createPopupString(Text);
} <> VIICさん<>sage<>10/03/13 05:32:54 ID:xdwKcJEk<> フォント比較用とかで。Java部分はあんまりわかっていない。以降コピペ
//【登録場所】 全体、レス表示、選択テキスト
//【ラベル】  指定フォントでポップアップ
//【コマンド】 $SCRIPT select_font.js

//デフォルトフォント
var FontName = 'MS Pゴシック';//フォント名 *フォントファミリー名ではありません。
var FontSize = 16;//フォントサイズ

var FontFamily = '',FontWeight = '',FontStyle = '',Text = '',vcx = v2c.context,vrx = vcx.res;
var ge = new java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
var Fonts = [];Fonts = ge.getAllFonts();NumFonts=Fonts.length;
var Lists = [NumFonts],SeloptArr=[],PopArr = [];
function formSubmitted(u,sm,sd){
 var idx = sd.match(/fn=(\d+)/i)[1],size = sd.match(/fs=(\d+)/i)[1];;
 PopArr[0] = PopArr[0].replace('selected','').replace(new RegExp('(option value="'+idx+'")','i'),'$1'+' selected');
 PopArr[1] = size;PopArr[3] = Lists[idx].family;PopArr[5] = size;PopArr[7] = Lists[idx].style;
 PopArr[9] = Lists[idx].weight;vcx.setPopupHTML(PopArr.join(''));vcx.setPopupFocusable(true);
 vcx.setTrapFormSubmission(true);v2c.context.closeOriginalPopup();
// vcx.setClipboardText('フォント名:'+Lists[idx].name+'、フォントサイズ:'+size);
}
function createPopupString(){
 for(i = 0;i < NumFonts;i++){
  Lists[i] = new Object();Lists[i].name = Fonts[i].getName()+'';
  Lists[i].family = Fonts[i].getFamily()+'';Default = Lists[i].name == FontName
  if(Default){FontFamily = Lists[i].family;} SeloptArr.push('<option value="'+i+'"')
  if(Default){SeloptArr.push(' selected');} SeloptArr.push('>'+Lists[i].name);
  if(Lists[i].name.search(/(bold|ボールド)/i) > 0){
   Lists[i].weight = 'bold';if(Default){FontWeight = Lists[i].weight;}
  }else{
   Lists[i].weight = '';
  }
  if(Lists[i].name.search(/(italic|イタリック)/i) > 0){
   Lists[i].style = 'italic';
  }else if(Lists[i].name.search(/oblique/i) > 0){
   Lists[i].style = 'oblique';
  }else{
   Lists[i].style = '';
  }
  if(Default){FontStyle = Lists[i].style;}
//  vcx.setClipboardText('フォント名:'+FontName+'、フォントサイズ:'+FontSize);
 }
 var Selopt = SeloptArr.join('');
 PopArr[0] = '<html>'+'<body style="margin:0 5px;background-color: #F5F5F5">'+'<form action="">'
 +'<table border="0" cellspacing="1" cellpadding="1" style="font-size:10px;">'
 +'<tr>'+'<td><div>フォント名  :</div></td>'+'<td colspan="3"><div>'
 +'<select name="fn">'+Selopt+'</select>'+'</td></div>'+'</tr>'+'<tr>'+'<td><div>フォントサイズ:</div></td>'
 +'<td><input type="text" size="6" maxlength="3" istyle=4 name="fs" value="';
 PopArr[1] = FontSize;PopArr[2] = '"></td>'+'<input type="submit" value="変更">'
 +'<input type="reset" value="リセット">'+'</tr>'+'</table>'+'</form>'+'<div style = "font-family:';
 PopArr[3] = FontFamily;PopArr[4] = ';font-size:';PopArr[5] = FontSize;
 PopArr[6] = ';font-style:';PopArr[7] = FontStyle;PopArr[8] = ';font-weight:';PopArr[9] = FontWeight;
 PopArr[10] = ';">'+Text+'</div>'+'</body>'+'</html>';
 vcx.setPopupHTML(PopArr.join(''));vcx.setPopupFocusable(true);vcx.setTrapFormSubmission(true);
}
Text = vcx.selText;if(!Text) Text = vrx.message;
if(Text && ( Text.length() > 0 )){
 Text += '';Text = Text.replace(/</g,"<");Text = Text.replace(/>/g,">");
 Text = Text.replace(/[\n]+/g,"<br>");createPopupString();
} <> VIICさん<>sage<>10/03/15 03:44:13 ID:qr10CpDb<> 思いつきでとりあえず。マークと似たようなの。
v2c.execではなくv2c.getThread(r_url[0])使って
setResToJumpやsetPopupResみたいなのができないものか。

他に、スクリプト実行→番号n入力→n番目のタブが表示
とかできるといいのだけど…

//【登録場所】 全体、レス表示
//【ラベル】  レス番号付きスレURLを記憶(ジャンプ)
//【コマンド1】 ${SCRIPT:Fw} ThreadURLMemo.js スレURLとレス番号を記憶
//【コマンド2】 ${SCRIPT:Frx} ThreadURLMemo.js jump 記憶したスレのレス番号にジャンプ

var vcx = v2c.context,res = vcx.res, th = vcx.thread, w_url = [2];
var txt = v2c.getScriptDataFile('ThreadURLMemo.txt');
if(th) w_url[0] = th.url;
if(res) w_url[1] = res.number;
if(vcx.args.length == 0 && w_url[0] && w_url[1]){
 v2c.writeLinesToFile(txt,w_url,'utf-8');
} else if(vcx.args[0] == 'jump'){
 var r_url = v2c.readLinesFromFile(txt,'utf-8');
 v2c.exec('"'+v2c.saveDir+'\\v2c.exe" "'+r_url[0]+r_url[1]+'"');
} <> VIICさん<>sage<>10/03/17 05:02:41 ID:U7ftBFRx<> // とりあえず、1から設定されたレス番までのレスをPopupで表示する
// アンカーもリンクも有効にならないし表示も適当なのものですが
// datを読み込んで置換した方が元のレス表示に似るかなぁ


//【登録場所】 レス表示
//【ラベル】  テンプレPOPUP
//【コマンド】 $SCRIPT popupTemplete.js


/* 設定 */


// Popupするレス数 1から↓まで
var popuprescount = 5;


// レス書式 <NUMBER/>, <NAME/>, <MAIL/>, <DATE/>, <ID>, <AUX/> , <MESSAGE/> タグを
// それぞれ v2c.context.res.number, v2c.context.res.name, v2c.context.res.mail,
// v2c.context.res.date, v2c.context.res.aux, v2c.context.res.msg で置換する

var resform = '<NUMBER/> :<NAME/> [<MAIL/>] :<DATE/> ID:<ID/>\n<MESSAGE/>'


/* 設定終わり */

// 初期処理
var vcx = v2c.context;

// レス生成
function createResStr(n)
{
var resObj = vcx.thread.getRes(n);
return(
resform.replace(/<NUMBER\/>/g, resObj.number).replace(/<NAME\/>/g, resObj.name)
.replace(/<MAIL\/>/g, resObj.mail).replace(/<DATE\/>/g, resObj.date)
.replace(/<ID\/>/g, resObj.id).replace(/<AUX\/>/g, resObj.aux)
.replace(/<MESSAGE\/>/g, resObj.message)
);
}

// Popup作成
function createTempletePopup()
{
var popupstr = "";
for(var i=0; i<popuprescount; i++){popupstr += createResStr(i) + "\n";}
vcx.setPopupText(popupstr);
}

// 実行
createTempletePopup(); <> VIICさん<>sage<>10/03/17 21:25:25 ID:Z5wg7LCC<> FirefoxのLocationbar2が元ネタ。ポップアップですが…
//【登録場所】 リンク
//【ラベル】 上位のディレクトリを開く
//【コマンド】 $SCRIPT splitURLStr.js
var vcx = v2c.context, arg = vcx.args[0];
var URL = vcx.link+'', s = '';
var SegArr = [], HtmlArr = [];

//URLを配列に分割
SegArr = URL.split('/');
var sl = SegArr.length, urlend = '';
if(SegArr[sl-1] == ''){urlend = '/'; SegArr.pop(); sl -=1;}

//ポップアップ表示形式
var head = SegArr[0]+'//';//行頭、SegArr[0]はhttp:,https:などのスキーム
var space = '/';//区切り
var end = '';//行末
var slashend = '/';//行末、URLがスラッシュで終わる場合
//var head = '【 ';//行頭
//var space = ' > ';//区切り
//var end = ' 】';//行末
//var slashend = ' 】';//行末、URLがスラッシュで終わる場合

//HTML作成
if((sl == 4 && SegArr[3].length > 0) || sl >= 5){
 HtmlArr[0] = '<html lang="ja"><body style = "margin: 4px 0 4px 15px; background-color:#fcfcfc; color:black;"><div>'+head;
 sl >= 4 ? s = space : s = '';
 HtmlArr[sl-1] = '</div></body></html>';
 if(urlend == '/'){
  HtmlArr[sl-2] = s+'<a href="'+SegArr.join('/')+urlend+'">'+SegArr[sl-1]+'</a>'+slashend;
 } else {
  HtmlArr[sl-2] = s+'<a href="'+SegArr.join('/')+'">'+SegArr[sl-1]+'</a>'+end;
 }
 for(i = SegArr.length; i >= 4; i--){
  SegArr = SegArr.slice(0,i-1);
  SegArr[i-1] = '';
  i >= 5 ? s = space : s = '';
  HtmlArr[i-3] = s + '<a href="'+SegArr.join('/')+'">'+SegArr[i-2]+'</a>';
 }
}
vcx.setPopupHTML(HtmlArr.join('')); <> n|a<>sage<>10/03/17 23:30:23 ID:dCrSfbMM<> すみません、このところあまり時間が無くてちゃんと見られていません…。

>>129,130
'jaen'の特別扱いはencodeURIComponentの部分を
if(Args=='jaen') {
Text = java.net.URLEncoder.encode(Text,'windows-31j');
} else {
Text = encodeURIComponent(Text);
}
とすれば不要になるかもしれません。
あと'menu'のように翻訳方法が决まっていない場合は元の文字列をHTMLに埋め込まず、
global変数に格納しておいて翻訳方法が决まってからencodeするといいと思います。
>>131
java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
に"new"は不要ですが、付けても文句を言わないのか…。
>>132
v2c.openURL(u)のような関数が必要ですね。
>>133
使用法がわかりにくくてすみません…。
v2c.context.setPopupResIndex([0,1,2,3,4]); <> 133<><>10/03/18 00:31:08 ID:y5cgya/R<> こちらの見落としです、すみません... <> VIICさん<>sage<>10/03/18 22:31:40 ID:8/M4cvq9<> >>135
ありがとうございます。
v2c.openURL(u)だと提示版以外に内部ブラウザも開けると
例えば>134も追加コマンドでポップアップなしで直接
ルートディレクトリを開けたりとか色々使い所がありそうです。 <> VIICさん<>sage<>10/03/20 19:36:14 ID:ngq7vdYw<> >129-130変更 以降コピペ
//【登録場所】 全体、レス表示、選択テキスト
//【ラベル】 Excite翻訳ポップアップ
//【コマンド1】 $SCRIPT excite_translation.js または $SCRIPT excite_translation.js enja 英語⇒日本語
//【コマンド2】 $SCRIPT excite_translation.js jaen 日本語⇒英語
//【コマンド3】 $SCRIPT excite_translation.js chja 中国語(簡体字)⇒日本語
//【コマンド4】 $SCRIPT excite_translation.js chjab 中国語(繁体字)⇒日本語
//【コマンド5】 $SCRIPT excite_translation.js koja 韓国語⇒日本語
//【コマンド6】 $SCRIPT excite_translation.js frja フランス語⇒日本語
//【コマンド7】 $SCRIPT excite_translation.js deja ドイツ語⇒日本語
//【コマンド8】 $SCRIPT excite_translation.js itja イタリア語⇒日本語
//【コマンド9】 $SCRIPT excite_translation.js esja スペイン語⇒日本語
//【コマンド10】 $SCRIPT excite_translation.js ptja ポルトガル語⇒日本語
//【コマンド11】 $SCRIPT excite_translation.js menu コマンド1〜10のメニュー表示

//設定
var copy_text = false;//クリップボードにコピーする。
var close_popup = false;//引数'menu'の場合、選択ポップアップを入力後閉じる。

var vcx = v2c.context, Text = vcx.selText, Args = vcx.args[0], Url = new Array(5);
//引数からURLに使う文字列を取得
function getUrlStrArr(a){
 var u = new Array(2);
 if(a == 'enja'){
  u[0] = 'english/'; u[1] = 'ENJA';
 } else if(a == 'jaen'){
  u[0] = 'english/'; u[1] = 'JAEN';
 }else if(a == 'chja'){
  u[0] = 'chinese/'; u[1] = 'CHJA';
 }else if(a == 'chjab'){
  u[0] = 'chinese/'; u[1] = 'CHJA&big5=yes';
 }else if(a == 'koja'){
  u[0] = 'korean/'; u[1] = 'KOJA';
 }else if(a == 'frja'){
  u[0] = 'french/'; u[1] = 'FRJA';
 }else if(a == 'deja'){
  u[0] = 'german/'; u[1] = 'DEJA';
 }else if(a == 'itja'){
  u[0] = 'italian/'; u[1] = 'ITJA';
 }else if(a == 'esja'){
  u[0] = 'spanish/'; u[1] = 'ESJA';
 }else if(a == 'ptja'){
  u[0] = 'portuguese/'; u[1] = 'PTJA';
 }else{
  u[0] = 'english/'; u[1] = 'ENJA';
 }
 return u;
}
//翻訳の選択ポップアップでフォーム送信時の動作
function formSubmitted(u,sm,sd){
 var lang = (u+'').match(/\?(.+?)=/)[1];
 if(lang=='jaen') {
  Text = java.net.URLEncoder.encode(Text,'windows-31j');
 } else {
  Text = encodeURIComponent(Text);
 }
 u = u + '&before='+Text; var usa= getUrlStrArr(lang);
 createPopupString(u.replace(/\?.+?(&before=.+)/, usa[0]+'?wb_lp='+usa[1]+'$1'));
 if(close_popup) v2c.context.closeOriginalPopup();//入力後閉じる。
} <> 138の続き<>sage<>10/03/20 19:37:13 ID:ngq7vdYw<> //翻訳結果のポップアップ表示
function createPopupString(su){
 var sh = v2c.readURL(su);
 if(!sh){
  v2c.alert('ページを取得できませんでした。'); return;
 }
 var mt = new Array(2);
 mt = sh.match(new RegExp('id="after"[^]+?>([^><]+?)</textarea>','i'));
 if(!mt){
  v2c.alert('検索結果を取得できませんでした。'); return;
 }
 ph = '<html><body style="margin:0 5px;">'+mt[1]+'</body></html>';
 vcx.setPopupHTML(ph);
 if(copy_text) v2c.context.setClipboardText(mt[1]);//クリップボードにコピーする。
}
//翻訳する文字列の整形
function editText(text){
 text = text.replaceAll('>>([[\\d]+[,-]?]+)\\n', '$1さん。');//アンカー+改行⇒番号さん。
 text = text.replaceAll('>>([[\\d]+[,-]?]+)', '$1');//アンカー⇒番号
 text = text.replaceAll('[\\n ]', '');//改行削除
 text = text.replaceAll('([R|Q]T ?|)[@#][\\w]+[:]?', '');//Twitter用、ハッシュタグ等削除
 var links = vcx.res.links, link;
 for(var i=0,l = links.length; i < l; i++){//リンクの削除
  link = (links[i]+'').substring(1);
  if((text+'').charAt((text+'').lastIndexOf(link)-1) == 'h'){link = 'h' + link;}
  text = text.replace(link+'','');
 }
 text = text.trim(); return text;
}
if(!Text){var Text = vcx.res.message;}
Text = editText(Text);
if(Args == 'menu'){
 vcx.setPopupHTML('<html lang="ja"><style type = "text/css">'
 +'<!--body{background-color:#cccccc; color:black; text-align:center;}.header{font-size:small;}--></style>'
 +'<body><form action="http://www.excite.co.jp/world/"><table border="0" cellspacing="0" cellpadding="0">'
 +'<tr><th class = "header">Excite翻訳</th></tr>'
 +'<tr><input type="submit" value=" 英⇒日 " name="enja"></tr><tr><input type="submit" value=" 日⇒英 " name="jaen"></tr>'
 +'<tr><input type="submit" value="中(簡)⇒日" name="chja"></tr><tr><input type="submit" value="中(繁)⇒日" name="chjab"></tr>'
 +'<tr><input type="submit" value=" 韓⇒日 " name="koja"></tr><tr><input type="submit" value=" 仏⇒日 " name="frja"></tr>'
 +'<tr><input type="submit" value=" 独⇒日 " name="deja"></tr><tr><input type="submit" value=" 伊⇒日 " name="itja"></tr>'
 +'<tr><input type="submit" value=" 西⇒日 " name="esja"></tr><tr><input type="submit" value=" 葡⇒日 " name="ptja"></tr>'
 +'</table></form></body></html>');
 vcx.setTrapFormSubmission(true);
 vcx.setMaxPopupWidth(97);
}else if( Args != 'menu' && Text && ( Text.length() > 0 ) ){
 if(Args=='jaen') {
  Text = java.net.URLEncoder.encode(Text,'windows-31j');
 } else {
  Text = encodeURIComponent(Text);
 }
 Url[0] = 'http://www.excite.co.jp/world/';Url[2] = '?wb_lp=';Url[4] = '&before='+Text;
 var usa = getUrlStrArr(Args);Url[1] = usa[0];Url[3] = usa[1];
 createPopupString(Url.join(''));
} <> VIICさん<>sage<>10/03/20 20:48:16 ID:ngq7vdYw<> >>115-116をまとめて修正・変更(あぼーんの無視、ステータスバー表示)。以降コピペ
//【登録場所】 全体、レス表示
//【ラベル】  (この|次の|前の)日で最初のレスにジャンプ(、抽出)
//【コマンド1】 $SCRIPT dailyres.js 選択日の最初のレスにジャンプ
//【コマンド2】 $SCRIPT dailyres.js next (選択日から最近の)次の日で、最初のレスにジャンプ
//【コマンド3】 $SCRIPT dailyres.js prev (選択日から最近の)前の日で、最初のレスにジャンプ
//【コマンド4】 $SCRIPT dailyres.js filter 選択日で抽出
//【コマンド5】 $SCRIPT dailyres.js next filter 選択日の次の日で抽出
//【コマンド6】 $SCRIPT dailyres.js prev filter 選択日の前の日で抽出

var vcx = v2c.context, th = vcx.thread, rs = vcx.res, args = vcx.args, dt = rs.date, da, tt, db, dbt;
var pd = new Date(java.text.SimpleDateFormat('yyyy/MM/dd').format(new Date())).getTime();
if(dt){
 var pt1 = new RegExp('^.+?\\(.\\)'); da = dt.match(pt1)+'';
}
if(da){
 var ix = rs.index, tl = th.localResCount, tgd = '', idx;
 var pt2 = new RegExp('\\d{4}(?:\\/\\d{2}){2}'), fr = new Array();
 //レス番抽出、あぼーんは無視
 if(args[0] == 'next'){
  for(var i = ix; i < tl; i++){
   tgd = th.getRes(i).date; if(!tgd || tgd.search(pt2) == -1) continue; if(tgd.indexOf(da) == -1) break;
  }
  da = tgd.match(pt1)+'';
  for(var j = i; j < tl; j++){
   tgd = th.getRes(j).date; if(!tgd || tgd.search(pt2) == -1) continue; fr.push(j); if(tgd.indexOf(da) == -1) break;
  }
  if(j < tl)fr.pop();
 }else{
  for(var i = ix; i > -1; i--){
   tgd = th.getRes(i).date; if(!tgd || tgd.search(pt2) == -1) continue;
   if(args[0] != 'prev') fr.push(i); if(tgd.indexOf(da) == -1) break;
  }
  if(args[0] == 'prev'){
   da = tgd.match(pt1)+'';
   for(var j = i; j > -1; j--){
    tgd = th.getRes(j).date; if(!tgd || tgd.search(pt2) == -1) continue; fr.push(j); if(tgd.indexOf(da) == -1) break;
   }
   if(j > -1) fr.pop();
  }else{
   if(i > -1) fr.pop();
   for(var j = ix+1; j < tl; j++){
    tgd = th.getRes(j).date; if(!tgd || tgd.search(pt2) == -1) continue; fr.push(j); if(tgd.indexOf(da) == -1) break;
   }
   if(j < tl) fr.pop();
  }
 }
 fr=fr.sort(function(a,b){return((parseInt(a-b)));});
 if(fr.length > 0){
  if(args[0] == 'filter' || args[1] == 'filter') vcx.setFilteredResIndex(fr);
  fd = new Date(da.match(pt2)).getTime(); db = (pd - fd) / 86400000;
  if(db == 0){dbt = '【今日】:';}
  else if(db == 1){dbt = '【昨日】:';}
  else{dbt = '【'+db+'日前】:';}
  vcx.setStatusBarText(da+dbt+fr.length+'レス'); vcx.setResIndexToJump(fr[0]);
 }else{
  if(args[0] == 'next'){vcx.setResIndexToJump(tl-1); vcx.setStatusBarText('次の日はありません。');}
  if(args[0] == 'prev'){vcx.setResIndexToJump(0);vcx.setStatusBarText('前の日はありません。');}
 }
} <> VIICさん<>sage<>10/03/22 15:35:54 ID:VeWKyYBi<> >>58 のスクリプトを使わせてもらってます。
大文字・小文字を区別させずに抽出したいんですが無理でしょうか?

どなたか回答お願い致します。 <> VIICさん<>sage<>10/03/22 15:50:20 ID:8IzshYrc<> >>141
横からついでに
できれば半角全角区別なしモードも追加して欲しいです…
さらにいえばカタカナひらがなも区別なしモードあれば完璧です… <> VIICさん<>sage<>10/03/22 20:15:59 ID:v9eu0P6E<> >>141-142
http://codepad.org/JBltPGs3
直接貼りつけようと思ったら「長すぎる行があります」のエラーがウザかったので別にアップロードしました。 <> VIICさん<>sage<>10/03/22 21:19:22 ID:v9eu0P6E<> >>143
条件を複合できるように改変しました。アドレスは同じです。 <> VIICさん<>sage<>10/03/22 21:50:24 ID:v9eu0P6E<> >>143
http://codepad.org/mdV91kU5
アドレス違いました。
「クリップボードを使うかどうか」と「フィルタリングするかどうか 」を引数で判別するようにしました。
ほか、細部を調整しました。 <> VIICさん<>sage<>10/03/22 21:53:46 ID:v9eu0P6E<> >>143
http://codepad.org/HUpglxrx
一部修正。 <> VIICさん<>sage<>10/03/22 22:49:25 ID:v9eu0P6E<> 正しく動いてなかったので修正しました。
http://codepad.org/tzFzZLwP <> 141<>sage<>10/03/23 00:51:36 ID:LtrQwTC0<> おお!ありがとうございます!
無事動作っしました。
素晴らしい。

ありがとうございました! <> 142<>sage<>10/03/23 01:00:53 ID:3O5r9ljH<> おおおお素晴らしいありがとうございました! <> VIICさん<>sage<>10/03/23 02:14:19 ID:LtrQwTC0<> 完璧と思ってましたが、
"ignoreZenHan (全角・半角を無視)"
が動作していませんorz
あと選択テキストコマンドに登録し全角カタカナを選択して抽出しようとするとダイアログが出ずにV2Cの動作が重くなります。
なにか処理してるんですかね?
このままでも十分便利ですし満足していますが報告しときます。 <> VIICさん<>sage<>10/03/23 02:49:37 ID:LtrQwTC0<> 連レスすいません全角カタカナの件はこのスレ固有の問題?何か仕様が違うんですかね?
わからないorz

<> VIICさん<>sage<>10/03/23 07:42:47 ID:XtPNIICP<> tree.jsにコマンド追加

ttp://up2.shinetworks.net/cgi-bin/snup-mini/src/shinemini18250.zip.html
DLKey:V2C

・ツリー表示で本文全部を表示できるようにした。
 【コマンド2】 $SCRIPT tree.js non-outline (開始レスからのツリー(非アウトライン)表示)
 *引数のない【コマンド1】の別表示です。抽出する【コマンド3】以降との組み合わせはできません。
 *元ネタに近い表示ですがリンク処理されてるのはレス番号のみです。
 *重複レス番号の最初の番号色は赤、それ以降は被参照レスがあれば先頭のツリーマークを「▲」 <> VIICさん<>sage<>10/03/24 01:39:36 ID:gkIfJmcw<> >>152
字の大きさが小さいのですが大きくすることはできるのでしょうか? <> VIICさん<>sage<>10/03/24 02:55:38 ID:H3DzZxno<> >>153
tree.jsを開いて最後の方(638行目)にある。font-size: x-small;を変えてみてください。
例: font-size: midium; とか font-size: 16px;

//ポップアップCSS
var css = "<style type = 'text/css'><!--"
+"body{margin:5px 0 5px 5px; font-size: x-small;}"//←ここ
+".title{font-size: small;}"
+".treemark{color:"+TreeMarkColor+";}"
+".msg{color:"+MsssageColor+";}"
+".ref{color:"+ONumColor+";}"
+"--></style>"; <> VIICさん<>sage<>10/03/24 03:25:33 ID:3WKWmYdg<> 横からだが素晴らしい・・・
ありがとうございます! <> VIICさん<>sage<>10/03/24 09:03:23 ID:gkIfJmcw<> >>154
ありがとうございました! <> n|a<>sage<>10/03/24 23:35:12 ID:Z5UAztL8<> >>152
ありがとうございます。
頂き物スクリプトページのファイルを差し替えました。 <> VIICさん<>sage<>10/03/26 23:51:18 ID:YjcoKCoL<> >>151
全角カナは置き換えテーブルのコピペ間違いに起因するバグでした。
スピードの件に関しては時間のある時に。
http://codepad.org/9ZeaJgND <> VIICさん<>sage<>10/03/27 03:43:59 ID:xMODf/3H<> >>158
レスありがとうございます。
なるほど。
更新お待ちしております。
ありがとうございました! <> VIICさん<>sage<>10/03/27 22:07:51 ID:ErJhmy8R<> tree.jsの動作追加、修正と整理

ttp://up2.shinetworks.net/cgi-bin/snup-mini/src/shinemini18301.zip.html
DLKey:V2C

・アウトライン表示でのレス番号クリックで、クリック番号からの非アウトライン表示+「戻る」ボタンの追加
 *レス番号マウスオーバーでのポップアップが早くてクリック出来ない場合は
 設定→レス表示→レスポップアップ→遅延時間 を変更してみてください。
  あと変更後、「再起動」しないと適用されないようです。また「Shift+」によるポップアップ抑制はききません。
 *上記での非アウトライン表示の場合、ポップアップ下部に「戻る」ボタンを押すと、
  切り替え前のアウトライン表示に戻ります。
・非アウトライン表示で「名前」と「ID」をマウスオーバーでポップアップするようにした。
 *またIDなしの場合、nullが表示してしまうのを修正
・CSSのクラスセレクタを増やした。
・引数以外で設定変更できそうなの(主にCSS)を上方に移動・整理(46〜80行目)しました。
 *CSSはアウトライン表示と非アウトラインで別々に分けました。

2chURLをクリック時ってv2c.context.closeOriginalPopup()にかかわらずポップアップ閉じるんだっけ?
うまくいかなかったので代わりに戻るボタンを追加しました。 <> 160<>sage<>10/03/27 23:34:08 ID:ErJhmy8R<> 抽出対象のコメント色制限が効いてなかったのを修正しました。
ttp://up2.shinetworks.net/cgi-bin/snup-mini/src/shinemini18304.zip.html <> 160<>sage<>10/03/27 23:44:15 ID:ErJhmy8R<> すみません。特に変更はないのですが、v2c.printlnが残っていたので下で
ttp://up2.shinetworks.net/cgi-bin/snup-mini/src/shinemini18305.zip.html <> あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん 160<>sage<>10/03/28 20:06:05 ID:ZgKOGaM1<> tree.jsの微変更
ttp://up2.shinetworks.net/cgi-bin/snup-mini/src/shinemini18313.zip.html
DLKey:V2C

・レス番号クリック時にレスに移動した場合、スレッドを更新しないようにした。

すみません。更新確認してませんでした。
>・[Script] URLからスレッドや板を開くことができるようにした。
についてありがとうございます。

50行目 var ReTreePopup = false;
118行目 return v2c.openURL(u,true);
で試してみましたが、リリースノートだと
${SCRIPT:S}となっていますが、${SCRIPT:SFr}でコンソールエラーがなさそうですね。 <> n|a<>sage<>10/03/28 21:18:36 ID:aX7crZIQ<> >>164
気がつかずに${SCRIPT:Frw}でテストしていました…。
一応V2C使用法のページには注意書きを追加しておきましたが、
"Frw"は不要の方向で検討します。 <> VIICさん<>sage<>10/03/28 22:21:39 ID:ZgKOGaM1<> >>165
更新乙です。了解しました。 <> VIICさん<>sage<>10/03/29 07:40:53 ID:S8sw9heU<> 複数タブでキーバインド向き。実用的かどうかは…

//【登録場所】 全体、レス表示
//【ラベル】  選択番号のレスタブを(開く|開いて更新|更新).....
//【コマンド1】 ${SCRIPT:SFrw} selectTab.js 選択タブを開く。
//【コマンド2】 ${SCRIPT:SFrw} selectTab.js update1 選択タブを開いて、未取得レス有タブで更新する。
//【コマンド3】 ${SCRIPT:SFrw} selectTab.js update2 選択タブを開いて、更新する。
//【コマンド4】 ${SCRIPT:SFrw} selectTab.js update2 back コマンド2,3の引数2にbackがあると選択タブを裏で更新する。
//*今後${SCRIPT:S}になる可能性あり
//*内部ブラウザタブなどは無視
.
var vcx = v2c.context, option = vcx.args;
var tabnum = parseInt(v2c.prompt("select",""));
if(tabnum > 0){
 var gt = v2c.resPane.getThread(tabnum-1);
 if(gt){
  var url= gt.url;//スレッドURL
  if(url){
   var back = update = always = false, gn = 0;
   back = option[1] == "back";//裏で開く
   m = (option[0]+"").match(/^(update)(1|2)$/);
   if(m){
    update = m[1] == "update";//更新
    always = m[2] == 2;//常に更新
   }
   if(update && !always) gn = gt.resCount-gt.localResCount;//未取得レス数
   update && (gn > 0 || always) ? v2c.openURL(url,true,true,back) : v2c.openURL(url,false,true,back);
  }
 }
} <> VIICさん<>sage<>10/03/29 07:58:10 ID:S8sw9heU<> >167修正、以下コピペ
//【登録場所】 全体、レス表示
//【ラベル】  選択番号のレスタブを(開く|開いて更新|更新).....
//【コマンド1】 ${SCRIPT:SFrw} selectTab.js 選択タブを開く。
//【コマンド2】 ${SCRIPT:SFrw} selectTab.js update1 選択タブを開いて、未取得レス有タブで更新する。
//【コマンド3】 ${SCRIPT:SFrw} selectTab.js update2 選択タブを開いて、更新する。
//【コマンド4】 ${SCRIPT:SFrw} selectTab.js update2 back コマンド2,3の引数2にbackがあると選択タブを裏で更新する。
//*今後${SCRIPT:S}になる可能性あり
//*内部ブラウザタブなどは無視

var vcx = v2c.context, option = vcx.args;
var tabnum = parseInt(v2c.prompt("対象タブを選択(番号を入力)してください。",""));
if(tabnum > 0){
 var gt = v2c.resPane.getThread(tabnum-1);
 if(gt){
  var url= gt.url;//スレッドURL
  if(url){
   var back = update = always = false, gn = 0;
   back = option[1] == "back";//裏で開く
   m = (option[0]+"").match(/^(update)(1|2)$/);
   if(m){
    update = m[1] == "update";//更新
    always = m[2] == 2;//常に更新
   }
   if(update && !always) gn = gt.resCount-gt.localResCount;//未取得レス数
   update && (gn > 0 || always) ? v2c.openURL(url,true,true,back) : v2c.openURL(url,false,true,back);
  }
 }
} <> あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん n|a<>sage<>10/04/05 23:42:55 ID:3g1EO2dL<> >>166
T20100405で"Frw"は不要になったはずです。 <> VIICさん<>sage<>10/04/10 07:25:21 ID:NmlrmvIA<> とりあえず。Frw系のスクリプトエラーが出る場合がありそうだけど。
前スレをクリックで一度開いて、一度読み込むとエラーはでないみたい。
板が変わったりするとなるのか。外部板だからなのか…

ttp://up2.shinetworks.net/cgi-bin/snup-mini/src/shinemini18478.zip.html
DLKey:V2C
//【登録場所】 全体(コマンド1, 2, 3)、レス表示(コマンド1, 3)
//【ラベル】  前スレを開く|前のレスに移動(前スレも含む)
//【コマンド1】 ${SCRIPT:S} searchPrevThread.js 前スレを開く。
//【コマンド2】 ${SCRIPT:S} searchPrevThread.js prevres 通常は前のレスに移動、レス1で実行すると前スレの最後に移動。
//【コマンド3】 ${SCRIPT:S} searchPrevThread.js prevres newtab 【コマンド1,2】で引数newtabがあると新タブで開く。 <> VIICさん<>sage<>10/05/01 21:24:37 ID:hzWbdTkK<> >171の追加。
ttp://up2.shinetworks.net/cgi-bin/snup-mini/src/shinemini18803.zip.html
DLKey:V2C
//【コマンド4】 ${SCRIPT:S} searchPrevThread.js nextthread レス1に前スレがあれば現スレに置換、なければ追加してコピー

上スクリプトのままだと利用していないので問題ないのですが
${SCRIPT:S}でv2c.getThread(タイトル取得用)の利用すると以下のようなエラーが出る場合があるようです。
sun.org.mozilla.javascript.internal.WrappedException: Wrapped java.security.AccessControlException:
access denied (java.io.FilePermission C:\Program Files\V2C\log\yy61.60.kg\v2cj\subject.txt read)
(<Unknown source>#259) in <Unknown source> at line number 259
実行に間を置くとでないかもしれません。

${SCRIPT:SF}とかだと出ないのですが
他に${SCRIPT:SF}でも固まってしまう場合があって不安定なため、
v2c.getThreadは使用しないようにしました。
この場合、URLの上の行にタイトル名がない場合は前スレ判定しません。

【V2C】 H20100429 [2.0.2_12] (L-0.6.2:x86)
【Java】 1.6.0_20-b02 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86) <> n|a<>sage<>10/05/01 22:34:28 ID:432RO7W1<> >>172
前半のAccessControlExceptionが出る件はできれば次回更新で修正します。
v2c.getThread()が固まる件は
ttp://pc12.2ch.net/test/read.cgi/software/1270566010/397,429
の手順でスレッドダンプを取ってもらえると助かります。 <> VIICさん<>sage<>10/05/01 23:36:29 ID:hzWbdTkK<> 乙です。
>>173
ttp://www.rupan.net/uploader/download/1272723986.JPG
twitterが更新した時(自動更新の場合も?)にスクリプトを実行すると起きていたかもしれません。
今回は進行状況のバーが途中で止まって固まりました。

【V2C】 H20100501 [2.0.2_13] (L-0.6.2:x86)
【Java】 [P]1.6.0_18-b07 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86)
【メモリ】 Total(Free)/Max.: 152(89)/247 (Phys. Total/Avail.: 2030/1039) [MB] <> n|a<>sage<>10/05/01 23:59:35 ID:432RO7W1<> >>174
すみません、V2Cが固まった時にV2Cと同時に表示されたコマンドプロンプトで
Ctrl+Breakを入力してください。
その画像のエラーは外部コマンドでjavaのプログラムを実行しようとして
失敗しているようですが、V2Cが固まる問題と関係あるかどうかはわかりません。 <> VIICさん<>sage<>10/05/02 00:52:37 ID:FPMLseST<> >>175
申し訳ないです。勘違いしていたようです。
通常で起動してV2Cが固まった時に「V2C(コマンドプロンプト)」を実行していました。
現状は「V2C(コマンドプロンプト)」での起動ができないようです。
コマンドプロンプトが一瞬表示(>174が表示?)されて起動できませんでした。
インストーラで上書きしたのがいけなかったかもしれません…
JAVAのバージョンもダウンしてるし…コントロールパネルのは1.6.0_20-b02で最新なのは気になる。 <> VIICさん<>sage<>10/05/02 01:42:38 ID:FPMLseST<> >>175
アンインストールしてzipで上書きした後
V2C.exe /T をしてみましたが、起動できませんでした。
様子見します。 <> n|a<>sage<>10/05/02 22:20:03 ID:NKeubmo/<> >>176,177
すみませんが以下を実行してみてください。
1) 再度インストーラ版でV2Cをインストールする
2) スタートメニューから「V2C(コマンドプロンプト)」を実行する <> VIICさん<>sage<>10/05/02 23:21:01 ID:FPMLseST<> >>178
変わらず起動しませんでした。フォルダ位置を変えてデフォルトでインストールもやってみましたが
コマンドプロンプトが一瞬表示されるだけで起動しませんでした。 <> 179<>sage<>10/05/03 20:16:01 ID:mVUnl0Gr<> >>178 ノーパソのVistaでも同じ挙動だった…

>34,38に外部コマンドを入れてみた。どっちかというとfoobar2000のコマンドテスト。使えたものかどうか。
//【登録場所】 全体、レス表示
//【ラベル】 時計(+外部コマンド)
//【コマンド1】 ${SCRIPT:T} clock.js 時計表示
//【コマンド2】 ${SCRIPT:FST} clock.js excmd 起動時、起動後、レス表示切り替え時に外部コマンドを実行
//*コマンドや条件の設定はコマンド2の初回起動(時計表示のみ)で作成される
// script\scdataフォルダ内の『clk_cmd.txt』を編集する。(もしくは自分で作成してutf-8でscdataフォルダ内に保存)
//*clk_cmd.txtの説明
// [Directory]下ではディレクトリを記述
//  Dir1="C:\Program Files\foobar2000\foobar2000.exe"
//  Dir2="C:\sample1.m3u"
//  Dir3="C:\sample2.m3u"
// のように記述する。[StartCommand]以降では『%Dir1%』や『%Dir2%』とすることで使い回しができる。
// [Argument]下ではコマンドの引数を記述
//  Arg1=/hide
//  Arg2=/exit
//  Arg3=/rand
// のように記述する。[StartCommand]以降では『%Arg1%』や『%Arg2%』とすることで使い回しができる。
// [StartCommand]下ではスクリプト起動時のコマンドを記述
//  %Dir1% %Arg1%
// [EndCommand]下ではスクリプト終了(時計右上の×をクリック)時のコマンドを記述
//  %Dir1% %Arg3%
// [BoardKey, ChengeCommand]下ではレス表示切替時に設定した条件があれば実行される。
//  software,%Dir1% %Arg2% %Dir2%
//  v2cj,%Dir1% %Arg2% %Dir2%
// のように記述する。
// 『板キー,外部コマンド』とすることで設定板キーの場合に『,』以降の外部コマンドが実行される。
// [ThreadTitleKeyword, ChengeCommand]下もレス表示切替時に設定した条件があれば実行される。
//  V2C,%Dir1% %Arg2% %Dir3%
//  ブラウザ,%Dir1% %Arg2% %Dir3%
// のように記述する。
// 『キーワード,外部コマンド』とすることで設定キーワードがあるスレッドの場合に『,』以降の外部コマンドが実行される。
//*板キーよりもキーワードが優先 <> 180<>sage<>10/05/03 20:17:16 ID:mVUnl0Gr<> var options = v2c.context.args, isExCmd = options[0]+"" == "excmd";
var jd, jl, jls, jlt, tm, or, nr, er, mt, tt, psw, tbk = tbt = cmd = "", isScroll = false;
var nh1 = "<html><body><center>", nh2 = "</center><table border='0' cellspacing='0' cellpadding='0'><tr>";
var nh3 = "<td><div style='background-color: ", nh4 = "; width: ", nh5 = "px; font-size: 4px;'> </div></td>";
var nh6 = "</tr></table></body></html>", tmp_m = tmp_n = "", mboard, nword;
var df = new java.text.SimpleDateFormat(" HH:mm:ss "), cf = new java.text.DecimalFormat("#######.#");
var al = new java.awt.event.ActionListener() {
actionPerformed: function(e) {
if (jd.isVisible()) {
jl.setText(df.format(new Date()));
var thc = v2c.resPane.selectedThread;
if(!thc){
jlt.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
or = nr = mt = 0, er = 100, tt = "";
} else {
var lrc = thc.localResCount;
if(lrc > 1000) {
or = java.lang.Math.ceil((lrc-thc.newResCount) * 100 / thc.localResCount); nr = java.lang.Math.ceil(thc.newResCount * 100 / lrc); er = 0;
} else {
or = java.lang.Math.ceil((lrc - thc.newResCount) * 0.1); nr = java.lang.Math.ceil(thc.newResCount * 0.1); er = 100 - or - nr;
}
if(tt != thc.title) {
jlt.setText(thc.title); psw = jlt.getPreferredSize().width; isScroll = psw > jlt.getWidth();
(isScroll)? jlt.setHorizontalAlignment(javax.swing.SwingConstants.LEFT) : jlt.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
if (mt != 0) mt=0;
if(isExCmd) {
tbk = thc.board.key + "";
for(var m = 0, mlen = board.length; m < mlen; m++){
mboard = (tbk.match(new RegExp(board[m])) || [])[0];if (mboard) {cmd = changeCmdB[m];break;}
}
tbt = thc.title + "";
for(var n = 0, nlen = keyword.length; n < nlen; n++){
nword = (tbt.match(new RegExp(keyword[n])) || [])[0];if (nword) {cmd = changeCmdK[n];break;}
}
if (cmd != "" && (!(tmp_m == mboard && tmp_n == nword) && !(mlen == m && nlen == n)) && !(nlen != n && tmp_n == nword)) {
if(cmd.length > 0)v2c.exec(cmd);tmp_m = mboard;tmp_n = nword;
}
}
}
if(psw <= 0) mt=0;
if (isScroll) {
jlt.setText(thc?thc.title.substring(mt):"------");psw = jlt.getPreferredSize().width
} else {
jlt.setText(thc?thc.title:"------");
}
jlt.getCaret().setDot(0);
jls.setText(thc?nh1+cf.format(thc.speed)+nh2+nh3+"blue"+nh4+or+nh5+nh3
+"yellow"+nh4+nr+nh5+nh3+"gray"+nh4+er+nh5+nh6:nh1+"-.-"+nh2+nh3+"gray"+nh4+er+nh5+nh6);
jls.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);mt++;thc?tt=thc.title:tt="";
}
tm.start();
}
}
};
var wl = new java.awt.event.WindowListener() {
windowActivated: function(e) {}, windowClosed: function(e) {},
windowClosing: function(e) {if(isExCmd && endCmd.length > 0) v2c.exec(endCmd);},
windowDeactivated: function(e) {}, windowDeiconified: function(e) {},
windowIconified: function(e) {}, windowOpened: function(e) {}
}; <> 180<>sage<>10/05/03 20:18:04 ID:mVUnl0Gr<> var rc = new java.lang.Runnable() {
run: function() {
jd = new javax.swing.JDialog();jd.setAlwaysOnTop(true);
jd.setModalityType(java.awt.Dialog.ModalityType.MODELESS);
jd.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jl = new javax.swing.JLabel(" 00:00:00 ");
jl.setFont(jl.getFont().deriveFont(java.awt.Font.PLAIN,24));jd.add(jl);
jlt = new javax.swing.JTextField("スレタイ");
jlt.setFocusable(false);jlt.setEditable(false);jlt.setBorder(null);
jlt.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jd.add(jlt,java.awt.BorderLayout.SOUTH);
jls = new javax.swing.JLabel(nh1+"-.-"+nh2+nh3+"gray"+nh4+100+nh5+nh6);
jd.add(jls,java.awt.BorderLayout.NORTH);jd.pack();jd.setLocation(0,0);jd.setVisible(true);
jd.addWindowListener(wl);
tm = new javax.swing.Timer(500,al);tm.setRepeats(false);if(isExCmd && startCmd.length > 0)v2c.exec(startCmd);tm.start();
}
};
if(isExCmd) {
var txt = v2c.getScriptDataFile('clk_cmd.txt'), cecd = 'utf-8', fs = java.io.File.separator;
if(v2c.readFile(txt) == null){
var MenuList = ["[Directory]","Dir1=","[Argument]","Arg1=","[StartCommand]","[EndCommand]",
"[BoardKey, ChengeCommand]","[ThreadTitleKeyword, ChengeCommand]"];
v2c.writeLinesToFile(txt,MenuList,'utf-8');isExCmd = false;
} else {
var cmdArr = new Array();dir = new Array();arg = new Array();board = new Array();
changeCmdB = new Array();keyword = new Array();changeCmdK = new Array();
var startCmd = endCmd = "", sw = 0, mt;
var cmdTxt = function(str){return str.replace(/%Dir(\d)%/g, function(str, num){
return dir[num-1];}).replace(/%Arg(\d)%/g, function(str, num){return arg[num-1];});}
cmdArr = v2c.readLinesFromFile(txt,cecd);
for (i = 0, il = cmdArr.length; i < il; i++) {
cmdArr[i] = cmdArr[i].replaceAll(fs+fs,fs+fs+fs+fs); cmdArr[i] = cmdArr[i] + "";
if(cmdArr[i].indexOf("[Directory]") != -1) sw = 1;
else if(cmdArr[i].indexOf("[Argument]") != -1) sw = 2;
else if(cmdArr[i].indexOf("[StartCommand]") != -1) sw = 3;
else if(cmdArr[i].indexOf("[EndCommand]") != -1) sw = 4;
else if(cmdArr[i].indexOf("[BoardKey, ChengeCommand]") != -1) sw = 5;
else if(cmdArr[i].indexOf("[ThreadTitleKeyword, ChengeCommand]") != -1) sw = 6;
else {
if(sw > 2) cmdArr[i] = cmdTxt(cmdArr[i]+"");
switch(sw){
case 1:
mt = cmdArr[i].match(/^Dir\d=(.*)$/);if(mt) dir.push(mt[1]);break;
case 2:
mt = cmdArr[i].match(/^Arg\d=(.*)$/);if(mt) arg.push(mt[1]);break;
case 3:
startCmd = cmdArr[i]+"";break;
case 4:
endCmd = cmdArr[i]+"";break;
case 5:
board.push((cmdArr[i]+"").split(",")[0]);changeCmdB.push((cmdArr[i]+"").split(",")[1]);break;
case 6:
keyword.push((cmdArr[i]+"").split(",")[0]);changeCmdK.push((cmdArr[i]+"").split(",")[1]);break;
default:
}
}
}
}
}
javax.swing.SwingUtilities.invokeLater(rc); <> 180<>sage<>10/05/03 20:19:25 ID:mVUnl0Gr<> 以下にfoobar2000の例、foobar2000のPreferences > Shell Integration の
「ファイルを追加したらウィンドウを前面に表示する」のチェックを外しておくといいかも。
例1:foobar2000で指定m3uファイルを板が変わったときにランダム実行
[Directory]
[Argument]
[StartCommand]
"C:\Program Files\foobar2000\foobar2000.exe" /hide
[EndCommand]
"C:\Program Files\foobar2000\foobar2000.exe" /exit
[BoardKey, ChengeCommand]
.*,"C:\Program Files\foobar2000\foobar2000.exe" /rand "C:\sample1.m3u"
[ThreadTitleKeyword, ChengeCommand]

例2:foobar2000で指定条件の場合に指定m3uをランダム実行
ただし下にあるRun Commandが必要です。foobar2000\componentsフォルダに入れてください。
ttp://www.foobar2000.org/components/view/foo_runcmd
[Directory]
Dir1="C:\Program Files\foobar2000\foobar2000.exe"
Dir2="C:\sample1.m3u"
Dir3="C:\sample2.m3u"
Dir4="C:\sample3.m3u"
Dir5="C:\sample4.m3u"
[Argument]
Arg1=/hide /runcmd="File/New Playlist"
Arg2=/runcmd="File/Remove Playlist" /runcmd="File/New Playlist" /runcmd="Edit/Add to Playlist"
Arg3=/runcmd="File/Remove Playlist" /exit
[StartCommand]
%Dir1% %Arg1%
[EndCommand]
%Dir1% %Arg3%
[BoardKey, ChengeCommand]
software,%Dir1% %Arg2% %Dir2%
v2cj,%Dir1% %Arg2% %Dir3%
[ThreadTitleKeyword, ChengeCommand]
V2C,%Dir1% %Arg2% %Dir5%
ブラウザ,%Dir1% %Arg2% %Dir4% <> n|a<>sage<>10/05/04 22:15:14 ID:LKClbVGc<> >>179
インストーラ版をインストールした直後ならば環境の影響を受け難いと思ったのですが
だめでしたか…。
T20100504では>172の前半を修正したのでV2Cが固まる症状にも変化があるかもしれません。 <> VIICさん<>sage<>10/05/06 22:08:28 ID:aSyd59qM<> >>184
修正確認しました。固まる症状はなくなりませんでした。
「V2C(コマンドプロンプト)」についてはvistaとxp両方同じ結果なので、こちらはお手上げです。
どっちもHomeなのでProfessional Editionだと大丈夫とかはないだろうし… <> あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん VIICさん<>sage<>10/05/09 18:33:01 ID:bsQNJ3z3<> 更新乙です。不本意かもしれませんが
古いV2C.exeファイルがあったので試したところ/T起動したため貼っときます。

【V2C】 2.1.0 [R20100509] (L-0.5)
【Java】 1.6.0_20-b02 (Sun Microsystems Inc.)
【OS】 Windows XP 5.1 (x86)
【メモリ】 Total(Free)/Max.: 122(71)/494 [MB]
【不具合内容】
>172の使用で固まる。
【調査済項目】
スレッドダンプ
ttp://kissho.xii.jp/1/src/1jyou112943.zip.html <> n|a<>sage<>10/05/09 19:44:58 ID:8OSMXnJG<> >>187
ありがとうございます。
おそらく次回更新で修正できると思います。 <> あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん n|a<>sage<>10/05/10 23:26:28 ID:aNS34WJd<> >>187
すみませんが H20100510 ttp://v2c.s50.xrea.com/V2C_H20100510.jar
を試してもらえませんか?
(どうも>188で思ったほど簡単ではないようです…。) <> VIICさん<>sage<>10/05/11 00:44:26 ID:p2DRQ7fA<> >>190
乙です。

テスト方法はわりと確実に固まった次の方法で試しました。
一方のカラムに「twitter」でツイッター検索したタブを20秒間隔で更新。
もう片方のカラムに50スレッドほど新規タブで開いて
172スクリプト→タブ閉じる→同スクリプト→タブ閉じる…
を繰り返す。

3セットやりましたが固まらなくなりました。コンソール出力もありません。

【V2C】 H20100510 [2.1.0_01] (L-0.5)
【Java】 1.6.0_20-b02 (Sun Microsystems Inc.)
【OS】 Windows XP 5.1 (x86)
【メモリ】 Total(Free)/Max.: 225(159)/494 [MB] <> VIICさん<>sage<>10/05/11 00:51:14 ID:p2DRQ7fA<> あと、3セットのうち1回目と3回目は未取得レス有りタブが多くありました。
「未取得レス有りタブの選択で更新」のチェックも入ってます。 <> n|a<>sage<>10/05/12 00:30:58 ID:33SIZBfq<> >>191,192
ありがとうございます。
とりあえず大丈夫のようですね。 <> VIICさん<>sage<>10/05/13 00:01:20 ID:ZMhnRMXS<> 安定したようなので元に戻します。使用する場合、H20100510以上でお願いします。
あとコマンド4の引数はnewthreadに変更しました。

ttp://up2.shinetworks.net/cgi-bin/snup-mini/src/shinemini18906.zip.html
DLKey:V2C
//【登録場所】 全体(コマンド1, 2, 3, 4)、レス表示(コマンド1, 3, 4)
//【ラベル】  前スレを開く|前のレスに移動(前スレも含む)|新スレ用テンプレ作成
//【コマンド1】 ${SCRIPT:S} searchPrevThread.js 前スレを開く。
//【コマンド2】 ${SCRIPT:S} searchPrevThread.js prevres 通常は前のレスに移動、レス1で実行すると前スレの最後に移動。
//【コマンド3】 ${SCRIPT:S} searchPrevThread.js prevres newtab 【コマンド1,2】で引数newtabがあると新タブで開く。
//【コマンド4】 ${SCRIPT:S} searchPrevThread.js newthread 新スレ用にレス1のテンプレ作成、前スレがあれば現スレに置換、なければ追加してコピー <> あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん VIICさん<>sage<>10/05/23 18:33:37 ID:kBHIrMAJ<> 試してませんでした…
【V2C】 H20100512 [2.1.0_03] (L-0.6.2:x86)
【Java】 1.6.0_20-b02 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86)
【不具合内容】
v2c.browseURLExt(u)で${SCRIPT:F}の許可が必要になる。 <> n|a<>sage<>10/05/25 23:06:43 ID:c3VdbR2N<> >>196
こちらこそテスト不足ですみません…。
T20100524で修正しました。 <> VIICさん<>sage<>10/05/31 22:32:13 ID:429yW6Va<> getlog系?
【登録場所】 全体、レス表示、リンク
【ラベル】   dat落ちログを取得
【コマンド1】 ${SCRIPT:FwS} getlog.js
ttp://home.puny.jp/uploader2/download/1275312228.zip
DL pass:V2C <> VIICさん<>sage<>10/05/31 23:19:13 ID:524oBQPF<> 頂きました乙 <> VIICさん<>sage<>10/06/01 00:55:40 ID:+OIQYPxq<> >>198
素晴らしい・・・
頂きます <> VIICさん<>sage<>10/06/08 23:20:32 ID:2TEtIv6Z<> >>198
凄い!マジ感動! <> VIICさん<>sage<>10/06/09 19:31:26 ID:7uBQgtHs<> getlog ユーザ増えて使いすぎるとだめになるんじゃなかったっけ <> 198<>sage<>10/06/09 23:28:32 ID:SWsdDzcs<> >>202
とりあえず>198はみみずんの
ttp://jbbs.livedoor.jp/bbs/read.cgi/computer/682/1144317464/950
を利用しています。みみずん利用については上記スレ等から各自で判断して使用してください。 <> VIICさん<>sage<>10/06/10 15:07:25 ID:xWBnyeqp<> datopen2使ってるけど <> VIICさん<>sage<>10/06/11 00:22:05 ID:XixblKdH<> >>198
リンク切れだよね?だれか再うp頼むぜ。 <> VIICさん<>sage<>10/06/11 00:37:10 ID:9LmK42v1<> え? <> VIICさん<>sage<>10/06/11 00:49:04 ID:XixblKdH<> >>198
無事にDLした。スレ汚しすみません。動作もきちんと動いてくれたすばらしいスクリプトです。 <> VIICさん<>sage<>10/06/12 18:17:28 ID:dfsTKsPx<> >>127
ファイルがDLできない状態になりましたようだけれども、もっかいうpしてくれへんか? <> VIICさん<>sage<>10/06/13 23:26:39 ID:lPggl/6k<> >>208
>127の追加バージョン
ttp://home.puny.jp/uploader2/download/1276438808.zip
・結果表示するカラムを設定で選択できるようにした。
・引数なしの場合、デフォルトでは(客観的ではないため)NGレス数のカラム表示はしないようにした。

【登録場所】 全体、レス表示
【ラベル】   レスタブすべてのIDランキング
【コマンド1】 $SCRIPT idrank.js 30位以内のレス数ランキング
【コマンド2】 $SCRIPT idrank.js input ランキング表示の設定 <> VIICさん<>sage<>10/06/13 23:28:49 ID:lPggl/6k<> 忘れてた…、>209は
DL pass:V2C <> VIICさん<>sage<>10/06/14 05:03:25 ID:L2n2NryF<> >>209>>210
ありがとうございます <> VIICさん<>sage<>10/06/14 15:31:52 ID:JTrPThYg<> >>209
いただきました。
が、私の環境だと以下のエラー出て動作しませんでした。

sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot read property "time" from null
(<Unknown source>#92) in <Unknown source> at line number 92

【V2C】 2.1.2 [R20100607] (L-0.6.2:x86)
【Java】 1.6.0_20-b02 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86) <> VIICさん<>sage<>10/06/14 17:03:10 ID:L2n2NryF<> >>212
こっちでは正常に動作したんだけど。
要望ですが、抽出のため設定した日付を記憶するようにしてほしい。 <> VIICさん<>sage<>10/06/14 17:28:46 ID:JTrPThYg<> エラーの原因分かりました。まちBBSのスレを開いてると駄目なようです。
ここはIDの後ろにホスト名が表示されるからなぁ… <> n|a<>sage<>10/06/14 23:57:26 ID:R7wOeBwt<> >>212,214
92行目に
if (!resx) continue;
を追加すると
resx = thx.getRes(j);
if (!resx) continue;
time = resx.time-0;
のような状態になります。
これを文字コードUTF-8で保存するとエラーが出なくなるはずです。 <> 209<>sage<>10/06/15 00:24:06 ID:zM8E2MdZ<> >>215
ありがとうございます。修正しました。

>>212-214
同じエラーが確認できたのは
ttp://jbbs.livedoor.jp/bbs/read.cgi/computer/10298/1108684328/
のレス番号50のようにレス自体が消去された場合に起こるようです。
また削除要請板のようにIDではなくHOSTの場合も別のエラーが出たため修正しました。
あと保存できるようにした以下のバージョンは、コマンドも変わっているので登録修正をお願いします。

>209の修正・追加バージョン
ttp://home.puny.jp/uploader2/download/1276528457.zip
DL pass:V2C
・レス自体がない場合と、ID:ではなくHOST:の場合にエラーとなるのを修正
・設定項目に「保存」を追加、チェックマークを付けて「保存して閉じる」ボタンを押すと
 チェックした項目を保存します。次回に復元します。チェックが外れた項目は消去されてデフォルトになります。
 *「実行」ボタンをおした場合も保存したい場合はidrank.jsの14行目をtrueにしてください。

【登録場所】 全体、レス表示
【ラベル】   レスタブすべてのIDランキング
【コマンド1】 ${SCRIPT:Frw} idrank.js 30位以内のレス数ランキング
【コマンド2】 ${SCRIPT:Frw} idrank.js input ランキング表示の設定 <> 212,214<>sage<>10/06/15 00:49:15 ID:WazHefJX<> >>215-216
V2C作者様のパッチを当てていたところ、スクリプト作者様の修正版まで!
共に快適に動作いたしました。ありがとうございます。 <> VIICさん<>sage<>10/06/18 02:39:08 ID:+3CS7oco<> 質問ですが、
レスツリーの表示系のスクリプトのフォントサイズをいじるところって分かる人いますか? <> VIICさん<>sage<>10/06/18 03:45:53 ID:mhDr3k8g<> >>218
>>153-154 バージョンアップしてるから、いじる行は変わってると思う。
x-small < small < medium < large < x-large < xx-large
他の指定方法はスタイルシートの説明ページとかで検索してね。 <> VIICさん<>sage<>10/06/19 01:04:10 ID:ItzOkN2V<> tree.jsを少し変更・修正
ttp://home.puny.jp/uploader2/download/1276875703.zip
DL pass:V2C
・レス自体がない場合エラーとなるのを修正した。
・アウトライン表示の場合、行の文字数を『だいたい』揃えた。(本文の半角を0.5文字で数えてます。)
 *本文表示文字数を変更する場合は48行目、揃えない場合は49行目をfalseにして調整してください。
・ポップアップ表示(CSS)を調整してみた。

【登録場所】 全体、レス表示
【ラベル】  被参照レスでツリー表示
【コマンド1】 $SCRIPT tree.js (開始レスからのツリー(アウトライン)表示)
【コマンド2】 $SCRIPT tree.js non-outline (開始レスからのツリー(非アウトライン)表示)
他...

>>218
上のリンクの場合は56、57、66、68、69行目のfont-sizeを変更してみてください。 <> n|a<>sage<>10/06/20 00:22:27 ID:53tT3f78<> >>220
すみません、しばらくさぼっていましたが頂き物スクリプトページのファイルを差し替えました。

ところでスクリプトの公開はこちらへの告知だけだと気がつく人もあまり多くないので、
ソフトウェア板の本スレで告知した方がいいのかもしれません。 <> VIICさん<>sage<>10/06/20 20:52:23 ID:D+NkojuT<> スクリプトでポップアップしたウィンドウを任意に移動することができれば良さそうな気がする。 <> VIICさん<>sage<>10/06/22 22:38:02 ID:D7kdO31v<> >>221
ありがとうございます。
頂き物スクリプトページからのみで、ここにはこない可能性もありますね。
個人的実感では、ここにスクリプト書き込む(貼る)人がほとんどいないのがなんとも…
思い付きだけでもなるべく書き込んでみて、改変する人が現れるのを気長に待ってみる。

>>222
ポップアップはスクリプトに限らず左端をドラッグで移動出来ます。


次のスクリプトで確認したのですが「$googleRTSearch.js ext」で
複数カラムで選択対象(上部赤線)レスで実行すると最初の
v2c.setStatus(statusText);
は表示されるのですが以降のv2c.setStatusとvcx.setStatusBarTextが表示されません。
書き込み欄を表示させてると表示されました。内部ブラウザの場合はしょうがないか…
【V2C】 H20100619 [2.1.2_03] (L-0.6.2:x86)
【Java】 1.6.0_20-b02 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86) <> VIICさん<>sage<>10/06/22 22:52:47 ID:D7kdO31v<> コピペだと書き込み出来ないみたい・・・
後で貼ります。 <> n|a<>sage<>10/06/22 23:09:31 ID:NamnxGsy<> >>224
すみません、SPAM除けに"http://"をNGワードに設定していました。
またSPAMが現れるまでは"http://"のNGワード設定を解除しておきます。 <> VIICさん<>sage<>10/06/22 23:15:04 ID:D7kdO31v<> ttp://home.puny.jp/uploader2/download/1277215909.zip
DL pass:V2C

【登録場所】 全体、レス表示、選択テキスト
【ラベル】  (対象レス時刻からの)Googleリアルタイム検索
【コマンド1】 $SCRIPT googleRTSearch.js ブラウザで開く。JDICがインストールされている時は内部ブラウザで開く。
【コマンド2】 $SCRIPT googleRTSearch.js ext 外部ブラウザで開く。
*参照: ttp://googlejapan.blogspot.com/2010/06/blog-post_21.html <> VIICさん<>sage<>10/06/22 23:17:05 ID:D7kdO31v<> >>225
そういう事ですか、了解です。 <> n|a<>sage<>10/06/23 00:03:09 ID:wiivdLzm<> >>223
すみません、「複数カラム」・「書き込み欄」との関連がよくわからないのですが
内部ブラウザの進捗状況表示でステータスバーの表示が上書きされてしまうという
ことでしょうか? <> VIICさん<>sage<>10/06/23 00:22:46 ID:+fPvDiMc<> >>228
【コマンド2】 の外部ブラウザの場合もです。
レス表示からコマンド2のスクリプトだと
時間範囲入力のprompt表示で
ステータスバーに「リアルタイム検索」
検索文字入力のprompt表示で
ステータスバーに「リアルタイム検索 > 範囲:2010/06/22 23:57:49〜2010/06/23 00:57:49」
ブラウザ出力で
ステータスバーに「リアルタイム検索 > 範囲:2010/06/22 23:57:49〜2010/06/23 00:57:49 > 検索文字:テスト」
のように表示せずに「Java+Swingによる2chブラウザ V2C_R25: 新着レス 2」のような場合があるみたいです。 <> VIICさん<>sage<>10/06/23 00:29:14 ID:+fPvDiMc<> >>228
上書きですね。「書き込み欄」は確実ではないのかな…、
カラム1つだと上書きは内部ブラウザを開いた場合のみです。 <> VIICさん<>sage<>10/06/23 01:29:09 ID:+fPvDiMc<> V2C更新分のテスト、
ttp://home.puny.jp/uploader2/download/1277223966.zip
DL pass:V2C
・「レス表示欄のタブに表示する」に対応してみる。

【登録場所】 全体、レス表示
【ラベル】   レスタブすべてのIDランキング
【コマンド1】 ${SCRIPT:Frw} idrank.js 30位以内のレス数ランキング(デフォルトの場合、【コマンド2】の保存により変わる。)
【コマンド2】 ${SCRIPT:Frw} idrank.js input ランキング表示の設定
【コマンド3】 ${SCRIPT:Frw} idrank.js input respane 【コマンド1,2】後「respane」有りで別タブ表示、無しでポップアップ表示 <> VIICさん<>sage<>10/06/24 23:44:24 ID:A9ysj860<> >>225
早速SPAMきてますね。"h"+"ttp://"にしておけばよいだろうし解除しなくてもよいかと。 <> あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん n|a<>sage<>10/06/25 00:48:52 ID:kJbOl6sM<> >>232
予想よりかなり早かったです…orz。
再度"http://"をNGワードに設定しました。 <> VIICさん<>sage<>10/06/28 18:56:28 ID:7bc6cg1I<> v2c.context.setPopupResIndex([0,1,2,3,4]);
これで1-5をポップアップさせたときに
現在だと5が最初に表示されてしまいます

これを>>1-20って安価をポップアップしたときのように
1を最初に表示するにはどうすれば良いんでしょうか <> n|a<>sage<>10/07/04 19:57:07 ID:nSU2vqGC<> >>223,229,230
T20100704で改善されたと思います。
>>235
T20100704では最初のレスから表示するようにしました。 <> VIICさん<>sage<>10/07/05 00:27:25 ID:9svC3dLR<> >>236
改善ありがとうございます。

外部コマンド一つでstyle.txtかstyle_tw.txtかを判断して開きたいです。
途中ですが下だとパスが取得できません。

${SCRIPT:F} openStyleTxt.js $STYLEDIR

var vcx = v2c.context;
var th = vcx.thread;
var bbs = th.bbs;
v2c.println(bbs.twitter);
var path = vcx.args[0];
v2c.println(path);

コンソール:
true
$STYLEDIR <> n|a<>sage<>10/07/05 23:57:59 ID:5FFiThmC<> >>237
すみません、外部コマンドがスクリプトの場合キーワードの置換は行われません。
レス表示スタイルのフォルダは v2c.context.thread.styleDir で取得してください。
次回更新では v2c.context.thread.styleFile で "style.txt"または"style_tw.txt"を
絶対パスで取得できるようにします。 <> VIICさん<>sage<>10/07/09 00:09:30 ID:XvxJirzk<> >>238
見逃してました…

【登録場所】 全体、レス表示
【ラベル】  表示スタイルファイルを開く
【コマンド】 ${SCRIPT:F} openStyleTxt.js

var th = v2c.context.thread;
var s = th.bbs.twitter ? "style_tw.txt" : "style.txt";
var path = new java.io.File(th.styleDir,s);
//v2c.exec('"C:\\Program Files\\EmEditor\\EmEditor.exe" /cp 65001 "'+path+'"');
v2c.exec('"C:\\Windows\\notepad.exe" "'+path+'"');

次回だと↓とかでいいのか、外部コマンド設定のキーワードでもいい気がするけど
v2c.exec('"C:\\Windows\\notepad.exe" "'+v2c.context.thread.styleFile+'"'); <> VIICさん<>sage<>10/07/10 20:35:52 ID:rasKgR33<> 本スレに書き込まれたスクリプトをこちらに転載。

ttp://pc12.2ch.net/test/read.cgi/software/1255525714/257
【登録場所】 選択テキスト
【ラベル】 部分引用レス
【内 容】 レス本文を選択→選択部分にレス だとアンカーが最初に書かれる。
      アンカーは出さずに引用したい部分だけ>を付けて書き込み欄へコピー
【スクリプト】
v2c.context.insertToPostMessage('>'+v2c.context.selText.replaceAll('\n(?!$)','\n>'));
<> VIICさん<>sage<>10/07/10 20:41:05 ID:rasKgR33<> ttp://pc12.2ch.net/test/read.cgi/software/1260185912/194
【内 容】 ( ・e・)を自動AA判定する。
【スクリプト】下のスクリプトをメモ帳等のエディタで
       "V2C\script\system\rescheck.js"に保存し(文字コードはUTF-8)
       V2Cを再起動。
// ----- 次の行から -----
function checkAA(res,cx) {
if (res.message.indexOf('( ・e・)')>=0) {
res.setAA(true);
}
}
// ----- 前の行まで -----
<> VIICさん<>sage<>10/07/10 20:48:15 ID:rasKgR33<> ttp://pc12.2ch.net/test/read.cgi/software/1260185912/229
【登録場所】 選択テキスト
【ラベル】(簡易)正規表現でコピー
【コマンド】 $SCRIPT txt2reg.js
【スクリプト】
// ----- 次の行から -----
var str = v2c.getSelectedText()+"";
str=str.replace(/\n/g, "\\n");
str=str.replace(/([.^$[\]{}*+?|()])/g,"\\$1");
str=str.replace(/([^\\])\1+/g,"$1+");
str=str.replace(/(.{2,}?)\1+(?!\+)/g,"($1)+");
v2c.context.setClipboardText(str);
// ----- 前の行まで -----
<> 239<>sage<>10/07/10 23:02:28 ID:G3JtIlRo<> >>238
更新乙です。ありがとうございます。>239最後での動作確認しました。

ただ外部コマンドの「キーワード」プルダウンメニューに「$STYLEFILE」がありませんでした。

また下で動作するのを確認しましたが
"C:\Program Files\EmEditor\EmEditor.exe" "/cp 65001" "$STYLEFILE"

スクリプトとは違い、この場合だと
複数カラムで、赤線のフォーカスしていないスレ表示上でマウスジェスチャをすると
フォーカスされた方が対象になるようです。

【V2C】 T20100710 [2.1.2_09] (L-0.6.2:x86)
【Java】 1.6.0_20-b02 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86)
【メモリ】 Total(Free)/Max.: 195(118)/494 (Phys. Total/Avail.: 2030/827) [MB] <> 239<>sage<>10/07/10 23:05:08 ID:G3JtIlRo<> >243訂正
×スレ表示
○レス表示 <> VIICさん<>sage<>10/07/11 05:57:41 ID:WyNO0yPg<> >>240
このスクリプトを使用したところ、
">〇〇"
のみなので、改行させたいのですがどう変更すれば良いでしょうか? <> VIICさん<>sage<>10/07/11 06:13:34 ID:WyNO0yPg<> あと改行を2行入れたい場合の記述も教えてください。。。 <> VIICさん<>sage<>10/07/11 06:53:29 ID:S1389Pxy<> >>245
改行
v2c.context.insertToPostMessage('>'+v2c.context.selText.replaceAll('\n(?!$)','\n>')+'\n');

改行+改行
v2c.context.insertToPostMessage('>'+v2c.context.selText.replaceAll('\n(?!$)','\n>')+'\n'+'\n');

適当にやったら出来た。スクリプト分からんのでもっと良い方法があるかも。 <> VIICさん<>sage<>10/07/11 07:05:55 ID:S1389Pxy<> ttp://pc12.2ch.net/test/read.cgi/software/1277558611/295
【内 容】 1001のアンカーはリンクしない
【スクリプト】下のスクリプトをメモ帳等のエディタで
       "V2C\script\system\rescheck.js"に保存し(文字コードはUTF-8)
       V2Cを再起動。
// ----- 次の行から -----
function beginCheck(th,cx) {
return th.bbs.is2ch;
}
function checkRawText(res,cx) {
if (res.number>1000) {
var sti=res.timeid;
if (sti.startsWith("Over ")) {
res.setMessage(res.message.replaceAll("hあttp://","hあttp://"));
}
}
}
// ----- 前の行まで -----

※SPAM対策のため上記スクリプトに”あ”を挿入してます。
ご使用の際は”あ”を削除して下さい。
(弾かれてばっかりでどうすればいいか分からなかったんだよぉ_| ̄|○) <> VIICさん<>sage<>10/07/11 07:19:42 ID:S1389Pxy<> ttp://pc12.2ch.net/test/read.cgi/software/1277558611/496
【登録場所】 全体、レス表示
【ラベル】動画リンク抽出
【内 容】リンクのホストだけで判断するスクリプトの例。下記はニコニコ動画及びYoutubeのリンクを抽出。
【スクリプト】
// ----- 次の行から -----
var th=v2c.context.thread;
if (th) {
var ll=[];
var nr=th.resCount;
for (var ir=0; ir<nr; ir++) {
var res=th.getRes(ir);
if (!res) {
continue;
}
var lnks=res.links;
for (var il=0; il<lnks.length; il++) {
var sh=lnks[il].url.host;
if (sh.endsWith(".nicovideo.jp")||sh.equals("nico.ms")||(sh.indexOf(".youtube.")>0)||sh.equals("youtu.be")) {
ll.push(ir);
break;
}
}
}
v2c.context.setFilteredResIndex(ll);
}
// ----- 前の行まで -----

※最後から2行目を v2c.context.setPopupResIndex(ll); にすると、
抽出したものをポップアップ表示します。 <> VIICさん<>sage<>10/07/11 15:33:42 ID:WyNO0yPg<> >>247
おお!ありがとうございます! <> VIICさん<>sage<>10/07/12 16:01:42 ID:NckRp7OI<> >>249
テキストの保存名とコマンドは何でしょうか <> 249<>sage<>10/07/12 16:17:15 ID:JZvmhknI<> >>251
ごめんなさい。テキストの保存名は他と被らなければ任意でOKです。
例えば、movie.js とした場合
【コマンド】 $SCRIPT movie.js
となります。
<> VIICさん<>sage<>10/07/12 17:14:37 ID:NckRp7OI<> >>252
サンクス <> VIICさん<>sage<>10/07/12 19:58:38 ID:NckRp7OI<> >>56
「スクリプトのコンパイルに失敗しました」ってエラーみたいなのが出ちゃって使えない。 <> VIICさん<>sage<>10/07/12 20:32:03 ID:NjQql6kj<> >>254
レス追って見てる?
>>158が修正バージョンだよ。
<> VIICさん<>sage<>10/07/12 20:36:43 ID:NckRp7OI<> >>255
なーるほど!スレ汚してごめん。 <> VIICさん<>sage<>10/07/13 01:09:33 ID:ADHrUyWW<> ttp://pc12.2ch.net/test/read.cgi/software/1274523175/82
【内 容】 コテハンの人を全部非表示に。でもn|aさんの発言は読めないと困るんです。
      下記のスクリプトはソフトウェア板だけに適用する場合の例。
【スクリプト】下のスクリプトをメモ帳等のエディタで
       "V2C\script\system\rescheck.js"に保存し(文字コードはUTF-8)
       V2Cを再起動。
// ----- 次の行から -----
function beginCheck(th,cx) {
return th.board.key.equals('software')?th.board.anonymousName:null;
}
function checkNG(res,cx) {
var sn=res.name;
if ((sn!=null)&&!sn.startsWith('n|a')&&!sn.equals(cx.checkObject)) {
res.setNG('コテハン');
}
}
// ----- 前の行まで -----
<> VIICさん<>sage<>10/07/13 01:21:19 ID:ADHrUyWW<> ※注意
>>257のスクリプトはReplaceStr.txtでデフォルト名無しを
書き換えていると、nlaさん以外全て非表示になる場合があります。

<> n|a<>sage<>10/07/15 23:11:02 ID:/EJzzFoF<> >>243
T20100714で修正しました。 <> VIICさん<>sage<>10/07/16 21:12:12 ID:622qZFvh<> >548+1 :# [sage] :2010/07/16(金) 20:57:29 ID:RU072f630 (5/5) [PC]
>>441
>中国語による文字化けが出てきた。修正お願いいたします。

作った人だけどこちらの環境では正常に表示される
もしかするとフォントの問題かもしれないのでフォントを変えて試してみて欲しい
こちらではメイリオ使ってる <> VIICさん<><>10/07/16 21:58:13 ID:VC/dcmY7<> >>260
今ダウンロードしようとしたらもう削除されいたけれど、
再UPお願いできますでしょうか。 <> VIICさん<>sage<>10/07/16 22:05:37 ID:622qZFvh<> >>261
スクリプトは消えてないけどもしかしてフォントのことかな?
メイリオだったらマイクロソフトからダウンロード出来るはず
本スレで上がってたらしきフォントは俺じゃないので無理です <> VIICさん<><>10/07/16 22:11:57 ID:VC/dcmY7<> >>262
すみません。激しく勘違いしてました。
全部セットかと思っていたらフォントだけだったんですね。
混乱させてしまってすみません。 <> VIICさん<>sage<>10/07/17 19:22:23 ID:z2qc3Vpg<> win用
ttp://pc12.2ch.net/test/read.cgi/software/1260185912/613
ttp://pc12.2ch.net/test/read.cgi/software/1266717576/23,464,473
の外部コマンドを利用した。

//【登録場所】 全体、レス表示
//【ラベル】  アイコンフォルダを開く or アイコンを適応して再起動
//【コマンド1】 ${SCRIPT:Fx} assistIconEdit.js toolbar png ツールバー用アイコンのあるフォルダをpng拡張子を付けて開く
//【コマンド2】 ${SCRIPT:Fx} assistIconEdit.js item gif reboot アイテム用アイコンをgif拡張子を削除してV2Cを再起動
//
//コマンド2はscriptフォルダ内にV2Creboot.vbsが必要。
//ttp://www39.atwiki.jp/v2cwiki/pages/55.html
//を参照。
//
//引数1はtoolbar、itemが有効。
//引数2はjpeg、png、gif、bmpが有効。
//引数3はrebootの有り無しでコマンド1か2になる。

function startCommand(){
var vcx = v2c.context;
var opts = vcx.args;
var sd = v2c.saveDir;
if((opts[0]+'').search(/(toolbar|item)/) == -1) return;
if((opts[1]+'').search(/(jpeg|png|gif|bmp)/) == -1) return;
if((opts[2]+'').indexOf('reboot') > -1){
v2c.exec('cmd /c ren "'+sd+'\\icon\\'+opts[0]+'\\*.'+opts[1]+'" "*."');
v2c.exec('wscript "'+sd+'\\script\\V2Creboot.vbs" "'+v2c.appDir+'\\V2C.exe"');
} else {
v2c.exec('"C:\\WINDOWS\\explorer" '+sd+'\\icon\\'+opts[0]);
v2c.exec('cmd /c ren "'+sd+'\\icon\\'+opts[0]+'\\*." "*.'+opts[1]);
}
}
startCommand(); <> 264<>sage<>10/07/18 00:42:58 ID:l1uP9xyN<> >264の別バージョン
登録や操作が減るしこっちの方がいいかも。

//【登録場所】 全体、レス表示
//【ラベル】  ツールバー(アイテム+α)用アイコン編集
//【コマンド】 ${SCRIPT:Fx} assistIconEdit.js toolbar png
//
//拡張子を追加してアイコンフォルダを開く ⇒再起動ボタン表示
// ⇒ クリック ⇒ アイコンを適応して再起動
//
//コマンド2はscriptフォルダ内にV2Creboot.vbsが必要。
//ttp://www39.atwiki.jp/v2cwiki/pages/55.html
//を参照。
//
//引数1はtoolbar、itemが有効。
//引数2はjpeg、png、gif、bmpが有効。

var vcx = v2c.context;
function formSubmitted(u,sm,sd) {
startCommand(true);
}

function startCommand(reboot){
var opts = vcx.args;
var sd = v2c.saveDir;
if((opts[0]+'').search(/(toolbar|item)/) == -1) return;
if((opts[1]+'').search(/(jpeg|png|gif|bmp)/) == -1) return;
if(reboot){
v2c.exec('cmd /c ren "'+sd+'\\icon\\'+opts[0]+'\\*.'+opts[1]+'" "*."');
v2c.exec('wscript "'+sd+'\\script\\V2Creboot.vbs" "'+v2c.appDir+'\\V2C.exe"');
} else {
v2c.exec('"C:\\WINDOWS\\explorer" '+sd+'\\icon\\'+opts[0]);
v2c.exec('cmd /c ren "'+sd+'\\icon\\'+opts[0]+'\\*." "*.'+opts[1]);
}
}
startCommand(false);
vcx.setPopupHTML('<html><body style="margin:2px 2px 2px 18px;"><form action=""><input type="submit" value="再起動" name="reboot"></form></body></html>');
vcx.setTrapFormSubmission(true);
vcx.closeOriginalPopup(); <> VIICさん<><>10/07/19 17:08:32 ID:k7mCw9mB<> Shift+Enterで書き込み出来るようには出来ないの? <> VIICさん<>sage<>10/07/19 17:16:02 ID:bGK0zIug<> >>266
キーバインド <> VIICさん<>sage<>10/07/21 22:30:30 ID:pY/2sQss<> tree.jsのコマンド追加
ttp://home.puny.jp/uploader2/download/1279718378.zip
DL pass:V2C
・ これまでの各コマンドをレス表示欄に表示できるようにした。
・ 他設定を、ファイル内の詳細設定に追加した。
  58行目のReResTreePaneがtrueで、【コマンド20】のアウトライン表示の場合、
  番号クリックでその番号からの非アウトラインをレス表示欄で表示する。(ReTreePopup = trueの場合)
  59行目のNewResPaneがtrueで、【コマンド20】の場合、新しいタブでレス表示欄に表示する。

【登録場所】 全体、レス表示
【ラベル】  被参照レスでツリー表示
【コマンド1】 $SCRIPT tree.js (開始レスからのツリー(アウトライン)表示)
【コマンド2】 $SCRIPT tree.js non-outline (開始レスからのツリー(非アウトライン)表示)
   ・・・
【コマンド20】$SCRIPT tree.js non-outline respane (最後の引数にrespaneを置くと、ポップアップではなくレス表示欄に表示) <> VIICさん<>sage<>10/07/21 22:55:26 ID:rx6kmrSa<> >>268
頂きました。ありがとう。 <> VIICさん<>sage<>10/07/22 00:12:37 ID:W6TvW/QA<> >>268
     ヘ⌒ヽフ
    ( ・ω・) dd
    / ~つと) <> VIICさん<>sage<>10/07/22 00:44:28 ID:Qj4u3dey<> >>268
頂きました
ありがとうございます <> VIICさん<>sage<>10/07/22 12:29:34 ID:O8wJyAlK<> >>268
頂きました
更新お疲れ様です
早速ですが、要望よろしいですか?
全レスをツリー表示(非アウトライン)し、新しいタブとして開く機能を追加することは可能ですか?
V2C本スレで上げられていた画像(※1)を見て、
いいなぁ〜と思いまして要望を出した次第です


※1ttp://www.odnir.com/cgi/src/nup49435.png
ttp://pc12.2ch.net/test/read.cgi/software/1279551481/238 <> VIICさん<>sage<>10/07/23 21:01:58 ID:/KfnZbuI<> Twitterスレの取得済みログから****年/**月/**日の分だけ抽出してTXTに保存、ってスクリプトでできる? <> n|a<>sage<>10/07/24 00:01:22 ID:CL+h3YCP<> >>273
とりあえず

var ar=[];
var th=v2c.context.thread;
if (th) {
var nr=th.localResCount;
for (var i=0; i<nr; i++) {
var res=th.getRes(i);
if (res) {
ar.push(res.date);
}
}
}
v2c.writeLinesToFile(v2c.getScriptDataFile('dates.txt'),ar);

はどうでしょうか。 <> 268<>sage<>10/07/24 06:30:50 ID:nn/5/KFE<> すみません。環境が変わるため、今後少なくとも数週は対応できないと思います。

tree.jsの機能拡張・修正
ttp://home.puny.jp/uploader2/download/1279920064.zip
DL pass:V2C
・ 非アウトライン用の引数(non-outline)を他のコマンドにも適用できるようにした。

他細かい修正
・ 引数の数が任意のコマンド(link等)だと起動しないのを修正
・ non-outline、respane、filterのコマンドを記載する並び制限を解除
・ レス番号クリックでの挙動が一部変わったかも・・・把握というか整理できていないので現在の仕様

【登録場所】 全体、レス表示
【ラベル】  被参照レスでツリー表示
【コマンド1】 $SCRIPT tree.js (開始レスからのツリー(アウトライン)表示、non-outlineがない場合デフォルトはこのタイプの表示)
【コマンド2】 $SCRIPT tree.js non-outline (開始レスからのツリー(非アウトライン)表示、以降のコマンドに追加で非アウトライン化)
   ・・・

>>272
$SCRIPT tree.js respane all non-outline
ただし、レス表示スタイルは適用できません。ファイル内62行目以降のCSSで多少は表示を変更できます。
PCのスペックによるとは思いますが、レス数(被参照数)が多い場合、表示までに時間がかかります。 <> VIICさん<>sage<>10/07/24 10:11:09 ID:2SK1xz6T<> >>275
頂きました。更新ありがとう。 <> VIICさん<>sage<>10/07/26 13:00:36 ID:j08z2RWf<> スクリプト初心者がこのスレ見て作ってみました。
が、考えてた動作はするんですが、スクリプトの文法(?)は合ってますでしょうか?
何処かとか、何かに負荷がかかるとマズいと思いまして。よろしくお願いします。

【登録場所】 全体、レス表示
【ラベル】テレビ実況板の勢いポップアップ
【内 容】テレビ番組欄@2ch (ttp://epg.2ch.net/tv2chwiki/pukiwiki.php)
     から”勢い”の部分をポップアップ表示するのみ。
【コマンド】 $SCRIPT tv.js
【スクリプト】
// ----- 次の行から -----
function createPopupString() {
var vcx = v2c.context;
var args = vcx.args;
var id = (args.length>0)?args[0]:'0';
var sh = v2c.readURL('hあttp://epg.2ch.net/tv2chwiki/pukiwiki.php');
if (!sh) {
v2c.alert('ページを取得できませんでした。');
return;
}
var mr = sh.match(new RegExp('<div id="body">([^]+?)<div class="jumpmenu">','i'));
if (!mr) {
v2c.alert('抽出できませんでした。');
return;
}
var sr = mr[1];
vcx.setPopupHTML('<html><body style="margin:5px;">'+sr+'</body></html>');
}
createPopupString('ja',true);
// ----- 前の行まで -----

※SPAM対策のため上記スクリプトに”あ”を挿入してます。 <> n|a<>sage<>10/07/26 23:45:24 ID:vVsdhch6<> >>277
気がついたのは
・変数idの値が後で使われない
・最後の行の引数は不要
ということくらいです。 <> 277<>sage<>10/07/27 00:05:32 ID:ZwIf0PTZ<> >>278
添削ありがとうございます。本当に分からないのでお恥ずかしいのですが、
こことかレス表示スタイルスレも盛り上がって欲しいなとか思っています。
誰かが使うかもしれないので以下に訂正したものを。


【登録場所】 全体、レス表示
【ラベル】テレビ実況板の勢いポップアップ
【内 容】テレビ番組欄@2ch (ttp://epg.2ch.net/tv2chwiki/pukiwiki.php)
     から”勢い”の部分をポップアップ表示するのみ。
【コマンド】 $SCRIPT tv.js
【スクリプト】
// ----- 次の行から -----
function createPopupString() {
var vcx = v2c.context;
var sh = v2c.readURL('hあttp://epg.2ch.net/tv2chwiki/pukiwiki.php');
if (!sh) {
v2c.alert('ページを取得できませんでした。');
return;
}
var mr = sh.match(new RegExp('<div id="body">([^]+?)<div class="jumpmenu">','i'));
if (!mr) {
v2c.alert('抽出できませんでした。');
return;
}
var sr = mr[1];
vcx.setPopupHTML('<html><body style="margin:5px;">'+sr+'</body></html>');
}
createPopupString();
// ----- 前の行まで -----

※SPAM対策のため上記スクリプトに”あ”を挿入してます。 <> VIICさん<>sage<>10/07/27 00:14:39 ID:ZwIf0PTZ<> 上のと似た奴を。

【登録場所】 全体、レス表示
【ラベル】全板縦断ランキングポップアップ
【内 容】2ちゃんねる全板・勢いランキング (ttp://ranking.sitepedia.jp/)
     の全板縦断ランキング上位10位を簡易ポップアップ表示。
【コマンド】 $SCRIPT zenban.js
【スクリプト】
// ----- 次の行から -----
function createPopupString() {
var vcx = v2c.context;
var sh = v2c.readURL('hあttp://ranking.sitepedia.jp/index.html?board=zenban');
if (!sh) {
v2c.alert('ページを取得できませんでした。');
return;
}
var mr = sh.match(new RegExp('<table class="forces" width="100%">([^]+?)<td class="rank">11位</td>','i'));
if (!mr) {
v2c.alert('抽出できませんでした。');
return;
}
var sr = mr[1];
vcx.setPopupHTML('<html><body style="margin:5px;">'+sr+'</body></html>');
}
createPopupString();
// ----- 前の行まで -----

※SPAM対策のため上記スクリプトに”あ”を挿入してます。 <> VIICさん<>sage<>10/07/27 00:31:02 ID:ZwIf0PTZ<> もう一つ、使用が限られるかも。

【登録場所】 選択テキスト
【ラベル】タレントイメージ検索
【内 容】Yahoo!人物名鑑 (ttp://talent.yahoo.co.jp/)を使って
     タレント名を検索し検索結果の一番目の人の顔写真他を簡易ポップアップ表示。
【コマンド】 $SCRIPT t-image.js
【スクリプト】
// ----- 次の行から -----
function createPopupString() {
var vcx = v2c.context;
var ss = vcx.selText;
if (ss) {
ss = ss.trim();
}
if (!ss||(ss.length()==0)) {
v2c.alert('検索語を取得できませんでした。');
return;
}
var sh = v2c.readURL('hあttp://talent.search.yahoo.co.jp/search?p='+encodeURIComponent(ss)+'&type=normal');
if (!sh) {
v2c.alert('ページを取得できませんでした。');
return;
}
var mr = sh.match(new RegExp('<div class="tb">([^]*?)</p></li>','i'));
if (!mr) {
v2c.alert('説明を抽出できませんでした。');
return;
}
var sr = mr[1];
vcx.setPopupHTML('<html><body style="margin:5px;">'+sr+'</body></html>');
}
createPopupString();
// ----- 前の行まで -----

※SPAM対策のため上記スクリプトに”あ”を挿入してます。
スポーツ選手、アナウンサー、文化人(?)などは画像無しになるみたい。
ドラマの脇役で名前はスレに書いてるけど顔がピンとこない...とかに使えるかも。 <> VIICさん<>sage<>10/07/27 01:32:05 ID:IidLXmbU<> 便利!
ありがたく使わせていただきます <> VIICさん<>sage<>10/07/27 15:00:51 ID:q7kv7pCi<> >>280
var sh = v2c.readURL('hあttp://ranking.sitepedia.jp/index.html?board=zenban');
               ↑
               あはミスですよね? <> VIICさん<>sage<>10/07/27 15:13:50 ID:lmbJNUdp<> 最後の行も読めないのか <> VIICさん<>sage<>10/07/27 15:20:30 ID:7Ny+/2s2<> スパム投稿防止のため、この掲示板ではhttp://〜という文字列を含む投稿を規制されているので
該当部に”あ”を挿入してます。

と書けばよかったのだろうか <> VIICさん<>sage<>10/07/27 15:28:06 ID:LTr+F9aE<> >>280,281
戴いたでござる ありがd <> VIICさん<>sage<>10/07/27 15:31:01 ID:7Ny+/2s2<> ん?もしかしてこう書けばよかったのか?
http://v2c.s50.xrea.com/manual/script.html <> VIICさん<>sage<>10/07/28 14:59:40 ID:UuwuFe1f<> >>287
すげー!どうやるの?ここはユニコードは使えないはずだが。 <> VIICさん<>sage<>10/07/28 15:57:16 ID:QXyIzjYr<> >>288
文字参照でggr <> VIICさん<>sage<>10/07/29 14:49:10 ID:gESPhPGt<> 十六進でやればよかったのね。

http://v2c.s50.xrea.com/manual/script.html <> VIICさん<>sage<>10/07/29 14:51:09 ID:gESPhPGt<> もう一度十進でやってみる

?ttp://v2c.s50.xrea.com/manual/script.html <> VIICさん<>sage<>10/07/29 14:54:45 ID:gESPhPGt<> 十六進

http://v2c.s50.xrea.com/manual/script.html

十進

?ttp://v2c.s50.xrea.com/manual/script.html <> VIICさん<>sage<>10/07/29 14:55:41 ID:gESPhPGt<> 何故か十六進だと化けないw <> VIICさん<>sage<>10/07/29 15:17:24 ID:8hhKDFpr<> そういうのはテストスレでやろうとか思うのが普通だろ
親の顔が見たいわ <> VIICさん<>sage<>10/07/29 15:19:48 ID:VpC8i/Ye<> >>280
鯖とかに迷惑にならない限り50位まで取得したいんですが、どう弄ればいいんですか? <> VIICさん<>sage<>10/07/29 18:01:30 ID:n4fPC7HP<> >>295
スクリプト中の”11位”を”51位”にすればいいと思います。


全板縦断ランキング次のようなやり方もあるそうです。
ttp://pc12.2ch.net/test/read.cgi/software/1274523175/71

71 :名無しさん :2010/05/25(火) 12:51:06 ID:v5W0z3ws0
>>68-69
そういうのは他所から拾ってくればOK、以下名前、ラベルは任意(2ch勢いランキングとか)で省略
1.RSS一覧に次を登録 ttp://ranking.sitepedia.jp/rss/zenban.rdf
2.設定→Web検索で次を登録 ttp://ranking.sitepedia.jp/
  編集→Web検索
以下おすすめ
3.ツールバーのボタン登録領域(デフォだと履歴プルダウン(またはURL欄)とボタンの間)を右クリ
  →URL登録で次を登録 ttp://ranking.sitepedia.jp/
  →アクションを「スレ一覧で開く」→OK→登録ボタン右クリ→定期更新チェック

↑2は、いらないかな。


”あ”の件、わかりづらくてごめん。 <> VIICさん<>sage<>10/07/29 22:12:36 ID:LCR/S4A/<> 誰かグーグルイメージ検索のスクリプトを作ってください。 <> VIICさん<><>10/07/29 23:09:22 ID:iM1H1ZDw<> そんなの外部コマンドで充分だろ <> VIICさん<>sage<>10/07/29 23:15:48 ID:VpC8i/Ye<> ポップアップで表示する方が見やすいじゃん。 <> VIICさん<>sage<>10/07/30 00:55:15 ID:4zLbCaSt<> 今更かもしれないけど>>248のスクリプトは元スレ155の要望とはちょっと違っちゃってると思う。
これだとリンクアドレスは無効化されるけど、アンカーはリンクされちゃう。
res.setMessage(res.message.replaceAll(">>","≫"));
8行目はこんな感じなら要望通りになるんじゃないでしょうか? <> VIICさん<>sage<>10/07/30 01:07:25 ID:wfFSLOae<> 超適当ですが

【登録場所】 選択テキスト
【ラベル】Googleイメージ検索ポップアップ
【内 容】Googleイメージ検索の簡易ポップアップ表示。1ページ目のみ。セーフサーチ: 中。
     ”他のキーワード”は表示させてない。
【コマンド】 $SCRIPT gimage.js
【スクリプト】
ttp://www1.axfc.net/uploader/File/so/48496

から落として下さい。書き込もうと思ったが”あ”とか入れても弾かれたので。

表示は出来るけど知識がないのでなんかおかしいのかも。 <> VIICさん<>sage<>10/07/30 13:35:46 ID:aXn/gq87<> >>300
横からだけど謎が解けた!
ありがとー <> VIICさん<>sage<>10/07/30 19:07:01 ID:PWaeW8z8<> >>301
頂きました。ありがとうございます。 <> VIICさん<>sage<>10/07/31 09:01:42 ID:ORbH16RI<> お願いなのですが
>>74のようなみみずんID検索のポップアップの
スレタイと本文が表示でき
文をコピーできるものをつくって頂けないでしょうか <> VIICさん<>sage<>10/08/03 00:18:09 ID:fDuw1yfV<> >>249 をちょっと変えたもの

【登録場所】 全体、レス表示
【ラベル】画像リンク抽出
【内 容】ImageViewURLReplace.datをもとにした画像リンクの抽出。(tree.jsにもありますが)
【コマンド】 $SCRIPT image.js
【スクリプト】
// ----- 次の行から -----
var th=v2c.context.thread;
if (th) {
var ll=[];
var nr=th.resCount;
for (var ir=0; ir<nr; ir++) {
var res=th.getRes(ir);
if (!res) {
continue;
}
var lnks=res.links;
for (var il=0; il<lnks.length; il++) {
if(lnks[il].type_IMAGE) {
ll.push(ir);
break;
}
}
}
v2c.context.setFilteredResIndex(ll);
}
// ----- 前の行まで -----

※最後から2行目を v2c.context.setPopupResIndex(ll); にすると、
抽出したものをポップアップ表示します。 <> VIICさん<>sage<>10/08/03 05:14:16 ID:Y0AcPHRK<> >>305
横からサンクス <> VIICさん<>sage<>10/08/03 05:33:38 ID:Y0AcPHRK<> >>305
ちなみに聞いてみたいんだけど、Twitterにも機能するようにできないでしょうか? <> VIICさん<>sage<>10/08/03 08:26:24 ID:QXQr3alE<> >>307
もう解決したかな。

・外部コマンド登録時、「ID」に数値等を設定すればキーバインド、マウスジェスチャのリストに表示されるようになる。
・外部コマンドを「全体」で登録するとメインメニューの「コマンド」以下に表示されるようになる。 <> VIICさん<>sage<>10/08/03 11:57:44 ID:URPO7ji4<> >>305
乙かれさまです
これは動画も含まれてしまいますが、
画像(JPG、PNG、GIF、TIFF)だけを抽出したい場合、
どこを修正すればいいでしょうか? <> VIICさん<>sage<>10/08/03 12:38:13 ID:emTE3NUX<> >>274
おそくなりましたがありがとうございます
res.date以外にも色々足してコマンドに${SCRIPT:Fw}付けるのでいけました
普段新着レスを上に表示するようにしていたので順番が逆になってしまいましたがこれはこれで気にしないことにします

var ar=[];
var th=v2c.context.thread;
if (th) {
var nr=th.localResCount;
for (var i=0; i<nr; i++) {
var res=th.getRes(i);
if (res) {
ar.push(res.name);
ar.push(res.mail);
ar.push(res.date);
ar.push(res.id);
ar.push(res.message);
}
}
}
v2c.writeLinesToFile(v2c.getScriptDataFile('dates.txt'),ar); <> VIICさん<>sage<>10/08/03 13:01:09 ID:41ms6vji<> >>305
> ImageViewURLReplace.datをもとにした画像リンクの抽出

とあるから動画リンクが含まれてるんじゃないかと。
おそらく動画リンク外したいなら別のスクリプト書いてもらわないといけないですね <> VIICさん<>sage<>10/08/03 13:02:02 ID:41ms6vji<> 安価ミス
>>305>>309
<> VIICさん<>sage<>10/08/03 13:03:45 ID:1FoLklXT<> >>311
そうですか、わかりました <> VIICさん<>sage<>10/08/05 13:59:29 ID:fEcL+uN5<> ttp://hibari.2ch.net/test/read.cgi/software/1280598891/344
【登録場所】 全体、レス表示
【ラベル】ラーメンタイマー
【コマンド】 $SCRIPT RamenTimer.js
【スクリプト】
java.lang.Thread.sleep(180000);
v2c.alert("ラーメンができました。"); <> VIICさん<>sage<>10/08/05 15:13:50 ID:zBMTd3TH<> >>314
ワラタ
ユーモアがあるなぁ <> VIICさん<>sage<>10/08/05 16:32:34 ID:wcaWEH5+<> 本スレが規制されたの? <> VIICさん<>sage<>10/08/09 03:25:20 ID:UTj6B2No<> >>309
if(lnks[il].type_IMAGE)

if(lnks[il].url.toString().match(/\.(jpg|png|gif|tiff)/i))

と変更すればURLに画像の拡張子が含まれている物だけを抽出できる
ただしこれはImageViewURLReplace.datを無視するので、
ImageViewURLReplace.datを使って表示している画像は抽出できない <> 309<>sage<>10/08/09 07:13:34 ID:RQeZiXjy<> >>317
ご親切にありがとうございました <> VIICさん<>sage<>10/08/11 00:21:54 ID:lL2vcsAx<> //【登録場所】リンク、選択テキスト
//【ラベル】ソースを見る
//【内容】ソースをテキスト形式でポップアップ、h抜き対応
//【コマンド】$SCRIPT PopupSource.js
//【スクリプト】
// ----- 次の行から -----
PopupSource();

function PopupSource(){
var ss=" ";
if (v2c.context.selText){
ss = v2c.context.selText;
}
if (v2c.context.link){
ss = v2c.context.link;
ss=ss.toString();
}

if (ss) {
ss = ss.trim();
}
if (!ss) {
v2c.alert('選択テキスト取得失敗');
return;
}

if(ss.match(/(ttp:\/\/.+)/)){
ss = 'h'+RegExp.$1
}

if(ss.match(/(http:\/\/.+)/)){
var source = v2c.readURL(ss);
}
else{
v2c.alert('選択されたテキストにURLが見つかりません');
return;
}

if (!source) {
v2c.alert('ページ取得失敗');
return;
}

v2c.context.setPopupText(source);
return;
}
// ----- 前の行まで ----- <> VIICさん<>sage<>10/08/11 00:36:37 ID:lL2vcsAx<> h抜きでもV2Cはリンクと解釈してくれるので
h抜き対応はあまり意味がなかったかもしれない
ht抜きにも対応する場合は、

if(ss.match(/(ttp:\/\/.+)/)){
ss = 'h'+RegExp.$1
}

の下に

if(ss.match(/(tp:\/\/.+)/)){
ss = 'ht'+RegExp.$1
}

を追加でOK <> VIICさん<>sage<>10/08/11 09:17:55 ID:xkNJ9AGg<> >>319
乙です。 <> VIICさん<>sage<>10/08/11 17:37:00 ID:tZmDFcr7<> ブラクラチェックのスクリプトってこのスレでもらったっけ
かなと思いながら索してみたら現れた気配がないですね(見つからないだけかも)

というわけで的外れなら申し訳ないですが、ブラクラチェックの
スクリプトがうまく効きません。

どなたか、わかる方いらっしゃいませんでしょうか? <> VIICさん<>sage<>10/08/11 18:22:21 ID:k7HlQB0V<> >>322
それって本当にスクリプトかな?
ReplaceStrやNGExだったら自分が書いたやつかも知れない。
とりあえず該当するスクリプト?をさらしてみてください。 <> VIICさん<>sage<>10/08/11 18:31:52 ID:z0wS1SJB<> >>319
>>320
GJ!早速使わせてもらってます。
ところでこの機能ってマウスオーバーでは無理ですかね?
そこまでなると、やはりV2C本体で対応してもらえるしかないですかね? <> VIICさん<>sage<>10/08/11 21:06:37 ID:tZmDFcr7<> >>323
レスどうも

BCcheck.js

function bcchk() {
var ss = v2c.context.selText;
if (ss) {ss = ss.trim();}
if (v2c.context.link){
ss = v2c.context.link;
ss=ss.toString();
}

if (!ss) {
v2c.alert("選択テキストを取得できませんでした。");
return;
}
var uri=fixuri(ss);//テキトーに直す
var tgturi="http://so.7walker.net/?"+uri+"&phishing=on"
var cnt = v2c.readURL(tgturi);
if (!cnt) {
v2c.alert("ページを取得できませんでした。");
return;
}
var ptn=/<br clear="left">(?:[\S\s]+?)<\/font><\/td>[\S\s]+?<td valign=
"bottom">[\S\s]+?\[この([\S\s]+?)<BR><BR><\/TD><\/TR><\/table>/i;
var mr=cnt.match(ptn);
if (!mr){
v2c.alert("説明を抽出できませんでした。");
return;
}
var mr1=RegExp.$1
v2c.context.setPopupHTML("<html><head></head><body><div><p>["+mr1+"
</p><p><a href=\""+tgturi+"\">詳細</a></p></div></body></html>");
}
function fixuri(txt){
var ptn=/\:\/\//i;
var idx=txt.search(ptn);
var turi=txt.slice(idx);
var uri="http"+turi;
return uri;
}
bcchk();

なお、長すぎる!と怒られて改行している箇所があります <> VIICさん<>sage<>10/08/11 21:53:33 ID:DSUF3NRd<> >>325
それ以前本スレに貼られてたやつだね。
ソースチェッカーオンラインが閉鎖されたから使えないんだと思う。
wikiにaguseの外部コマンドがあるからそれを使うしかないのかな。

aguseのポップアップは自分はうまく出来なかった。 <> VIICさん<>sage<>10/08/11 22:05:07 ID:tZmDFcr7<> >>326 了解です。 <> VIICさん<>sage<>10/08/12 00:45:21 ID:S6c31Jro<> Excite翻訳ポップアップのスクリプトがExciteの仕様変更のためか、機能しなくなりました。
どこを書き換えればよいのかお教えください。 <> VIICさん<>sage<>10/08/12 02:01:08 ID:nZYVmppG<> //【登録場所】 全体、レス表示、選択テキスト
//【ラベル】 Excite翻訳ポップアップ
//【コマンド1】 $SCRIPT excite_translation.js または $SCRIPT excite_translation.js enja 英語⇒日本語
//【コマンド2】 $SCRIPT excite_translation.js jaen 日本語⇒英語
//【コマンド3】 $SCRIPT excite_translation.js chja 中国語(簡体字)⇒日本語
//【コマンド4】 $SCRIPT excite_translation.js chjab 中国語(繁体字)⇒日本語
//【コマンド5】 $SCRIPT excite_translation.js koja 韓国語⇒日本語
//【コマンド6】 $SCRIPT excite_translation.js frja フランス語⇒日本語
//【コマンド7】 $SCRIPT excite_translation.js deja ドイツ語⇒日本語
//【コマンド8】 $SCRIPT excite_translation.js itja イタリア語⇒日本語
//【コマンド9】 $SCRIPT excite_translation.js esja スペイン語⇒日本語
//【コマンド10】 $SCRIPT excite_translation.js ptja ポルトガル語⇒日本語
//【コマンド11】 $SCRIPT excite_translation.js menu コマンド1〜10のメニュー表示

//設定
var copy_text = false;//クリップボードにコピーする。
var close_popup = false;//引数'menu'の場合、選択ポップアップを入力後閉じる。

var vcx = v2c.context, Text = vcx.selText, Args = vcx.args[0], Url = new Array(5);
//引数からURLに使う文字列を取得
function getUrlStrArr(a){
 var u = new Array(2);
 if(a == 'enja'){
  u[0] = 'english/'; u[1] = 'ENJA';
 } else if(a == 'jaen'){
  u[0] = 'english/'; u[1] = 'JAEN';
 }else if(a == 'chja'){
  u[0] = 'chinese/'; u[1] = 'CHJA';
 }else if(a == 'chjab'){
  u[0] = 'chinese/'; u[1] = 'CHJA&big5=yes';
 }else if(a == 'koja'){
  u[0] = 'korean/'; u[1] = 'KOJA';
 }else if(a == 'frja'){
  u[0] = 'french/'; u[1] = 'FRJA';
 }else if(a == 'deja'){
  u[0] = 'german/'; u[1] = 'DEJA';
 }else if(a == 'itja'){
  u[0] = 'italian/'; u[1] = 'ITJA';
 }else if(a == 'esja'){
  u[0] = 'spanish/'; u[1] = 'ESJA';
 }else if(a == 'ptja'){
  u[0] = 'portuguese/'; u[1] = 'PTJA';
 }else{
  u[0] = 'english/'; u[1] = 'ENJA';
 }
 return u;
}
//翻訳の選択ポップアップでフォーム送信時の動作
function formSubmitted(u,sm,sd){
 var lang = (u+'').match(/\?(.+?)=/)[1];
 var eText = encodeURIComponent(Text);
 u = u + '&before='+eText; var usa= getUrlStrArr(lang);
 createPopupString(u.replace(/\?.+?(&before=.+)/, usa[0]+'?wb_lp='+usa[1]+'$1'));
 if(close_popup) v2c.context.closeOriginalPopup();//入力後閉じる。
} <> VIICさん<>sage<>10/08/12 02:02:34 ID:nZYVmppG<> //翻訳結果のポップアップ表示
function createPopupString(su){
 var sh = v2c.readURL(su);
 if(!sh){
  v2c.alert('ページを取得できませんでした。'); return;
 }
 var mt = new Array(2);
 mt = sh.match(new RegExp('id="after"[^]*?>([^><]+?)</textarea>','i'));
 if(!mt){
  v2c.alert('検索結果を取得できませんでした。'); return;
 }
 ph = '<html><body style="margin:0 5px;">'+mt[1]+'</body></html>';
 vcx.setPopupHTML(ph);
 if(copy_text) v2c.context.setClipboardText(mt[1]);//クリップボードにコピーする。
}
//翻訳する文字列の整形
function editText(text){
 text = text.replaceAll('>>([[\\d]+[,-]?]+)\\n', '$1さん。');//アンカー+改行⇒番号さん。
 text = text.replaceAll('>>([[\\d]+[,-]?]+)', '$1');//アンカー⇒番号
 text = text.replaceAll('[\\n ]', '');//改行削除
 text = text.replaceAll('([R|Q]T ?|)[@#][\\w]+[:]?', '');//Twitter用、ハッシュタグ等削除
 var links = vcx.res.links, link;
 for(var i=0,l = links.length; i < l; i++){//リンクの削除
  link = (links[i]+'').substring(1);
  if((text+'').charAt((text+'').lastIndexOf(link)-1) == 'h'){link = 'h' + link;}
  text = text.replace(link+'','');
 }
 text = text.trim(); return text;
}
if(!Text){var Text = vcx.res.message;}
Text = editText(Text);
if(Args == 'menu'){
 vcx.setPopupHTML('<html lang="ja"><style type = "text/css">'
 +'<!--body{background-color:#cccccc; color:black; text-align:center;}.header{font-size:small;}--></style>'
 +'<body><form action="h'+'ttp://www.excite.co.jp/world/"><table border="0" cellspacing="0" cellpadding="0">'
 +'<tr><th class = "header">Excite翻訳</th></tr>'
 +'<tr><input type="submit" value=" 英⇒日 " name="enja"></tr><tr><input type="submit" value=" 日⇒英 " name="jaen"></tr>'
 +'<tr><input type="submit" value="中(簡)⇒日" name="chja"></tr><tr><input type="submit" value="中(繁)⇒日" name="chjab"></tr>'
 +'<tr><input type="submit" value=" 韓⇒日 " name="koja"></tr><tr><input type="submit" value=" 仏⇒日 " name="frja"></tr>'
 +'<tr><input type="submit" value=" 独⇒日 " name="deja"></tr><tr><input type="submit" value=" 伊⇒日 " name="itja"></tr>'
 +'<tr><input type="submit" value=" 西⇒日 " name="esja"></tr><tr><input type="submit" value=" 葡⇒日 " name="ptja"></tr>'
 +'</table></form></body></html>');
 vcx.setTrapFormSubmission(true);
 vcx.setMaxPopupWidth(97);
}else if( Args != 'menu' && Text && ( Text.length() > 0 ) ){
 Text = encodeURIComponent(Text);
 Url[0] = 'h'+'ttp://www.excite.co.jp/world/';Url[2] = '?wb_lp=';Url[4] = '&before='+Text;
 var usa = getUrlStrArr(Args);Url[1] = usa[0];Url[3] = usa[1];
 createPopupString(Url.join(''));
} <> VIICさん<>sage<>10/08/12 02:04:17 ID:nZYVmppG<> >>328
>138-139を修正しました。

・翻訳抽出する正規表現の修正
・日英翻訳でのテキストエンコード方法の修正(UTF-8?)
・メニュー表示で繰り返しボタンを押すと訳文が変わるのを修正 <> VIICさん<>sage<>10/08/12 02:53:38 ID:gq4q/27B<> >>329,>>330
すばらしい <> 328<>sage<>10/08/12 08:56:54 ID:S6c31Jro<> >>331
ありがとうございました。 <> VIICさん<><>10/08/12 20:42:40 ID:z6jQ8WQj<> このスクリプト、いったいどこの板で使うんだろうか <> VIICさん<>sage<>10/08/13 16:26:53 ID:+tpRF6b/<> >>301のGoogleイメージポップアップ、グーグル側の仕様変更 ?のため使えなくなりました。
どこか直せば使えるようになるかな。 <> VIICさん<>sage<>10/08/13 16:47:15 ID:e4t2Ze+6<> >>335
17行目の
var mr = sh.match(new RegExp('<div id=resultStats>([^]+?)<div style="position:relative;zoom:1">','i'));

var mr = sh.match(new RegExp('<div id=resultStats>([^]+?)</nobr>','i'));
に変えてみてください。 <> VIICさん<>sage<>10/08/13 22:26:30 ID:WP2i8lrE<> 今日、昨日、一週間前のレスを別々に抽出するスクリプトってあったっけ? <> VIICさん<>sage<>10/08/13 22:36:54 ID:+tpRF6b/<> >>336
表示できるようになりました。
ありがとうございます。 <> VIICさん<>sage<>10/08/14 01:56:43 ID:kOiAv9FB<> ニコニコ動画のステータスをポップアップするスクリプトを作成しました。
ttp://www1.axfc.net/uploader/Sc/so/143613.zip

ttp://pc12.2ch.net/test/read.cgi/software/1279016355/444
の流用です。作成した方ありがとうございます。
さっそくですがURLExec.dat,URLExec2.dat,URLExec3.datでの動作も確認もしました。 <> VIICさん<>sage<>10/08/14 02:10:20 ID:y9i20fvf<> >>339
頂きました。ありがとう。 <> VIICさん<>sage<>10/08/14 02:12:54 ID:MGS+Q4q9<> >>339
使い方.txt
【コマンド】 ${SCRIPT:Fr} PopupStatusTwitter.js
                        ~~~~~~~
一応 <> VIICさん<>sage<>10/08/14 02:48:08 ID:kOiAv9FB<> >>341
どうもです。使い方.txtを追加・修正しました。スクリプトに変更はありません。
ttp://www1.axfc.net/uploader/Sc/so/143635.zip <> VIICさん<>sage<>10/08/14 03:14:48 ID:ia9yIQQT<> >>342
Twitterの方を作ったものだけど自分のミスがあった
正規表現にデリミタを使う場合は

match(/パターン/,'i') → match(/パターン/i)

としないとiオプションが機能しないと思われる
申し訳ない <> VIICさん<>sage<>10/08/14 04:14:02 ID:kOiAv9FB<> >>343
どうもです。
動作上は問題なさそうなので、後でまとめて差し替えようかな。 <> VIICさん<>sage<>10/08/14 09:11:40 ID:bdbWYWga<> >>339
リンク切れのようですね。再うpしてお願いします。 <> 339<>sage<>10/08/14 16:23:37 ID:kOiAv9FB<> >>345
明示し忘れました。>342が同じものです。

本スレでも触れましたが不具合報告しておきます。

【V2C】 T20100814 [2.1.3_11] (L-0.6.2:x86)
【Java】 1.6.0_21-b07 (Sun Microsystems Inc.)
【OS】 Windows Vista Service Pack 2 (x86)
【メモリ】 Total(Free)/Max.: 123(72)/247 (Phys. Total/Avail.: 1943/720) [MB]
【不具合内容】
setPopupHTMLで、ポップアップ縦方向のサイズが指定したHTMLでの全体サイズと合わない場合がある。
【再現方法】
>342のスクリプトでニコニコ動画リンクをポップアップした場合
【調査済項目】
同じ動画でも合う時と合わない時がある。
サムネイルのサイズを変えるなどで、余分に余る場合と垂直スクロールバーが出現する場合がある <> n|a<>sage<>10/08/15 08:52:31 ID:/bI/03rd<> >>346
T20100815ではスクロールバーが出る場合に対してはある程度対応できたと思います。 <> VIICさん<>sage<>10/08/15 12:42:59 ID:4NqPSq6t<> >>342
T20100815からスクリプトの重複ポップアップを防止できるようになったのですが、
このスクリプトの場合どう改変したらいいでしょうか? <> VIICさん<>sage<>10/08/15 14:04:56 ID:p5D6gmFl<> ttp://hibari.2ch.net/test/read.cgi/software/1281788619/39

>>277のスクリプトで、コピーしたとき改行するためには、

var sr = mr[1];

の後に

sr = sr.replace(/<br>/ig,'??<br>');

を挿入してください。多分これでいけると思います。
他のスクリプトも同じ方法で改行が可能です。 <> VIICさん<>sage<>10/08/15 14:08:24 ID:p5D6gmFl<> 失礼、上記の挿入する文字列はミスです

sr = sr.replace(/<br>/ig,'&#13;&#10;<br>');

を挿入してください <> VIICさん<>sage<>10/08/15 14:47:40 ID:p5D6gmFl<> 他のスクリプトの場合は変数(上の例ではsr)の部分を変える必要があります。
要するに最終的に表示するデータに対して<br>を置換する処理を行えばOK。 <> VIICさん<>sage<>10/08/15 15:12:29 ID:/NTBBCNX<> >>339,342更新
【内 容】 ニコニコ動画のステータスをポップアップする
ttp://www1.axfc.net/uploader/Sc/so/144035.zip
* template.txtも変更していますが、%no_live_play%を使用していなければ上書きしないでもそのまま使えるはずです。

・同じ動画IDは重複ポップアップしないようにした。
・パラメータの追加変更、詳細はparameter.txtに記載。また、「%no_live_play%」を「%live_play%」に変更
・タグにリンクを付加した。カテゴリとロックとフリータグで色分けできるようにした。
・カウンタは3桁で「,」が入るようにした。
・リンククリック時に、外部ブラウザか内部ブラウザかを選択できるようにした。(スクリプトファイル内設定)
・テンプレを増やした。template_sample2の中身をコピーしてtemplate.txtに上書きすると情報量が増えます。

>>348
どうぞ <> VIICさん<>sage<>10/08/15 15:40:37 ID:4NqPSq6t<> >>352
ありがとうございます! <> VIICさん<>sage<>10/08/16 00:09:31 ID:cy6xyBY4<> こんばんは。
明和水産という掲示板を見るためのスクリプトって作れますか?
下記の書き込みを見て気になって。



51 :名無しさん@お腹いっぱい。 [sage] :2010/08/15(日) 15:28:43 ID:lkkefxvL0 [PC]
明和水産
ttp://www.meiwasuisan.com/frame/

明和水産に対応してくれたらなぁ・・・
やっぱ掲示板としての互換性とかの問題なのかな?
Viewはスクリプト、Xenoはデフォルトで対応してるけど、
V2Cも可能かな?


52+3 :名無しさん@お腹いっぱい。 [sage] :2010/08/15(日) 15:50:39 ID:Mu9mqUe60 (2/2) [PC]
ttp://bbs68.meiwasuisan.com/bbs/test/read.cgi/news/1281852490/
明和水産はURL一部書き換えてスレ直リンだと見れるな
subject.txtの書式が違うのかな
<> VIICさん<>sage<>10/08/16 21:59:26 ID:/4FaNsaM<> >>352
こちらはURLExec.datにどのようにコマンド記述すれば良いのでしょうか・・・
使い方.txt読んであれこれやってもスクリプトエラーが出ました
URLExec.datはstreamingplayerに同梱されていたものです
すいません、場違いな低レベルな質問で。。 <> VIICさん<>sage<>10/08/16 22:34:49 ID:O01zS7Th<> >>355
URLExec.datでスクリプトを起動する
ttp://www39.atwiki.jp/v2cwiki/pages/59.html <> VIICさん<>sage<>10/08/16 23:31:07 ID:i2F0Xf6I<> >>355
スクリプトのエラーの文章の中に

Cannot find function getPopupOfID

と書いてあったらV2Cが最新版じゃない可能性が高い
最新版で実装された関数が使われているので、T20100815を入れてみて <> VIICさん<>sage<>10/08/16 23:33:53 ID:i2F0Xf6I<> 更新が来たようなので

Ver. 2.1.4 [R20100816] を入れてみて <> VIICさん<>sage<>10/08/17 09:32:06 ID:7iQHVD5x<> >>356
>>357
ありがとうございます。
>>356にあるようにやったらURLExec2.datでポップアップが出るようになりました。
ほとんど意味がわからずやってますが・・・ <> VIICさん<>sage<>10/08/17 14:20:58 ID:KwrAsfs7<> >>352
素晴らしい、乙です。
ただ、ポップアップのリンクをクリックした時、
var browseExt = false;に設定していても、外部ブラウザで開いてしまいます。
JDICは入れています。 <> 360<>sage<>10/08/17 16:27:17 ID:KwrAsfs7<> スクリプトとURLEXEC.datを入れなおしたらできました
失礼しました <> VIICさん<>sage<>10/08/17 20:06:24 ID:8vocW89a<> >>356
そのページ書いた者です
そこのURLExec2.datの内容は配布されてるURLExec.datの1行目をコピペしただけなんですけど
このスクリプトの場合、URLの取得は自前で行っているようなのでそれに合わせた記述にすべきと思うのですよね

例えばこれとかマッチしちゃうけど、ポップアップでは出来ない模様
ttp://www.nicovideo.jp/watch/1271821303

しかし自分にはスクリプトも正規表現も良く解らんのでお手上げです
分かる人修正お願いします… <> VIICさん<>sage<>10/08/17 20:53:19 ID:K3iXyOIc<> >>362
スクリプトの44行目を変更

var rgex = new RegExp('(\\?|/|#|)([sn]{1}m\\d+)');

var rgex = new RegExp('(\\?|/|#|)(([sn]{1}m|\\d)\\d+)'); <> VIICさん<>sage<>10/08/18 01:00:52 ID:ND35hdtK<> >>363
横からですがありがとうございます <> 362<>sage<>10/08/18 01:52:09 ID:0SImer4W<> >>363
なるほど、それはスクリプトの方で対応できたのですか

とりあえず、配布されているURLExec.datにあるものでIDが取れそうなものは全部wikiに追加しときました
変なとこあったら修正お願いします <> VIICさん<>sage<>10/08/18 01:56:25 ID:0sUUxl0n<> //【登録場所】リンク
//【ラベル】リンクのコピー(画像チェック)
//【内容】画像URLをコピーする。もしその画像URLが404なら警告を表示する
//【コマンド】$SCRIPT ImgChecker.js
//【スクリプト】
// ----- 次の行から -----
var url = v2c.context.link;
var hr = v2c.createHttpRequest(url);
var data = hr.getContentsAsString();
var title = '';
if ( hr.responseCode == 404 ){
v2c.alert( '404 見つからない' );
}
else if( hr.responseCode == 503 ){
v2c.alert( '503 サーバが忙しい' );
}
else if( hr.responseCode == 200 ){
if ( !hr.contentType.toString().match( /image\/.+/i ) ) {
if(data.match(/<TITLE>(.+?)<\/TITLE>/i)){
title = RegExp.$1;
}
v2c.alert( title + '\n画像じゃないかも\n' +hr.contentType.toString() );
}
}
else{}
v2c.context.setClipboardText(url);
// ----- 前の行まで ----- <> VIICさん<>sage<>10/08/18 07:51:15 ID:WSbbZrnx<> >>366
画像リンクに実行するとエラーが出る
ttp://img708.imageshack.us/img708/7334/erroroh.png <> VIICさん<>sage<>10/08/18 11:36:26 ID:0sUUxl0n<> >>367
コマンドが間違ってました

【コマンド】${SCRIPT:S} ImgChecker.js

HttpRequestを使用して通信するので
こうしないとAccessControlExceptionが出ます
失礼しました <> VIICさん<>sage<>10/08/19 20:00:46 ID:fGM3BC4s<> >>366,368
ありがたく使わせていただいてます。
スクリプト初めて使いましたがこれ以外でも色々と便利になりますね!

あともし可能でしたら、選択テキスト内の複数urlを処理するというようなことも出来ないでしょうか。
404のurlを除外し存在する画像urlだけをコピー、全て存在しない場合は警告ダイアログを出すという感じで… <> VIICさん<>sage<>10/08/20 01:08:01 ID:YziqyGpa<> よく分からないけど、v2c.context.linksで選択テキストからURLリストが取得できないので、レスから取得にしてみた。
>>366 参考というかコピペしていじった。ありがとう。

var urlList = v2c.context.res.links; //v2c.context.links;
var checkedUrlList = new Array();

for(var i=0, urlCount = urlList.length; i < urlCount; i++)
{
var hr = v2c.createHttpRequest(urlList[i]);
var data = hr.getContentsAsString();
var title = '';
if ( hr.responseCode == 200 ) {
if ( !hr.contentType.toString().match( /image\/.+/i ) ) {
if(data.match(/<TITLE>(.+?)<\/TITLE>/i)){
title = RegExp.$1;
}
v2c.alert( title + '\n画像じゃないかも\n' +hr.contentType.toString() );
} else {
checkedUrlList.push(urlList[i]);
}
}
}

if(checkedUrlList.length != 0) {
v2c.context.setClipboardText(checkedUrlList);
} else {
v2c.alert("image file not found.\n");
} <> VIICさん<>sage<>10/08/20 15:51:34 ID:9Gg4zSv2<> どなたか
ttp://twitter.com/n_or_a/status/21318031826
こういうTwitterのURL渡したら内容がポップアップするもの作って頂けないでしょうか?
上にあるニコ動スクリプトみたいにURLExec2.datと合わせて使いたいです。

これによると
ttp://watcher.moe-nifty.com/memo/docs/twitterAPI50.txt


API経由でも取得できるようです
例)
ttp://api.twitter.com/1/statuses/show/21318031826.xml
ttp://api.twitter.com/1/statuses/show/21318031826.json <> VIICさん<>sage<>10/08/20 18:06:11 ID:dnJgeTby<> 可能かどうかも判断できないのですが
規制中ならタブの背景色を変更してタブのスレタイ名の先頭に「※ 規制中 ※ 」を付ける
 JaneView用ツールまとめ@wiki - madakanaCheck.js
 ttp://www31.atwiki.jp/jane_js/pages/45.html

と同様の動作若しくはタブの状態を変化させるようなスクリプトを作成して欲しいです <> VIICさん<>sage<>10/08/20 21:55:47 ID:y1yWjb8N<> >>371
APIは使わずにHTMLで取得しています

//【登録場所】リンク、URLExec
//【ラベル】Tweetのポップアップ
//【内容】Tweetのポップアップ
//【コマンド】$SCRIPT popupTweet.js
//【スクリプト】
//【URLExec】http://twitter\.com/[^/]+/status/\d{11}【tab】$&【tab】$V2CSCRIPT popupTweet.js
// ----- 次の行から -----
popupTweet();

function popupTweet(){
var sid = 'idstring';
var url = v2c.context.link;
if (!url ){
v2c.alert( 'URL取得失敗' );
return;
}
if( url.toString().match( /(http:\/\/twitter\.com\/([^\/]+)\/status\/(\d{11}))/ ) ){
var dat = v2c.readURL( RegExp.$1 );
var sid = RegExp.$2 + RegExp.$3;
if( v2c.context.getPopupOfID( sid ) ){
return;
}
if( dat.match( /entry-content">(.+?)<\/span>/i ) ){
var css = '<style type="text/css"><!--'
+ 'a{color:0000ff;text-decoration:underline;}'
+ '--></style>';
var html = '<html>' + '<head>' + css + '</head>' + '<body>'
+ RegExp.$1 + '</body>' + '</html>';
html = html.replace( /href="\//i, 'href="http://twitter.com/' );
v2c.context.setPopupHTML( html );
v2c.context.setPopupID( sid );
}
else{
v2c.context.setPopupHTML( 'HTML解析エラー' );
}
return;
}
else{
v2c.alert( '未対応のURLです' );
return;
}
}
// ----- 前の行まで ----- <> n|a<>sage<>10/08/20 23:44:59 ID:HevV8ZLA<> >>372
すみません、現在はスクリプトからタブに何かを表示することはできません。 <> VIICさん<>sage<>10/08/21 01:41:11 ID:Ml7aGVlN<> >>373をテンプレート仕様にしてレイアウトを変更しやすくしてみた
相変わらずAPIは使用していないので読み込みの遅さはご了承を
ttp://www1.axfc.net/uploader/Sc/so/145766.zip

スクリーンショット
ttp://xepid.com/src/up-xepid14688.jpg <> VIICさん<>sage<>10/08/21 02:06:30 ID:Ml7aGVlN<> ポップアップの左上に□が表示されたり、
>>375の画像のようにポップアップの上部に一行分の空白行が出来る場合は、
template.txtの文字コードをSJISやUTF-8のBOM無しに変更すると直るかもしれません… <> VIICさん<>sage<>10/08/21 04:11:46 ID:IsALZawT<> >>280->>296 が使えなくなってる・・・
どなたか詳しい方修正して欲しいです <> VIICさん<>sage<>10/08/21 05:51:43 ID:hsihputM<> >>377
普通に使えてるんだけど。 <> VIICさん<>sage<>10/08/21 07:05:57 ID:+XUrg1GT<> 要望です。
設定>「外部コマンド」ダイアログで、ラベルやコマンド入力欄に何かを入力してOKボタンを押して、
再度「外部コマンド」を開いた時、前回入力した内容が残っていたので思いついたのですが。

1)選択範囲やチェックでスクリプトを実行した後「外部コマンド」を開くと、スクリプトで設定したテキストが
ラベルやコマンド入力欄などに反映しているといったことができないでしょうか。
例えば>70の新規作成を実行したときになっていると登録がすこし楽になりそう。

以下はあってもなくてもいいのですが、
2)複数タブ表示でスクリプト実行後に、スクリプトでソートした順番でタブの並びを変更。
3)>372,374はスクリプト実行後に、タブ色の「スレッド状態」にスクリプトで設定した色が
スレッド更新まで表示できると面白いかも。 <> VIICさん<>sage<>10/08/21 07:27:11 ID:+XUrg1GT<> 一応>379の2、3)で使用例を、
・最近の数レスが最速なスレッドタブの色を変更したり。早い順に並べたり。
・今日一日のレスが最多なスレッドタブの色を変更したり。多い順に並べたり。
スレッド一覧のソートからではできないタイプができるといいかなと思いました。 <> 転載<>sage<>10/08/21 11:53:08 ID:FipzXMoY<> ttp://hibari.2ch.net/test/read.cgi/software/1281788619/381
【登録場所】 レス表示
【ラベル】このレスにレス[本文引用]
【内 容】レス番右クリの”このレスにレス[本文引用]”をそのレスの右クリ、或いはマウスジェスチャから
      行えるようにする
【コマンド】 $SCRIPT quote.js
【スクリプト】
v2c.context.insertToPostMessage('>>'+v2c.context.res.number+'\n> '+v2c.context.res.message.replaceAll('\n(?!$)','\n> ')+'\n');

引用後の空白改行がいらない場合は
v2c.context.insertToPostMessage('>>'+v2c.context.res.number+'\n> '+v2c.context.res.message.replaceAll('\n(?!$)','\n> ')); <> VIICさん<>sage<>10/08/21 12:41:20 ID:FipzXMoY<> 今さらという感じですが
>>277 の「テレビ実況板の勢いポップアップ」スクリプトで最下部の
”昨日:今日:明日:明後日:明々後日”を表示させないようにするには、

var mr = sh.match(new RegExp('<div id="body">([^]+?)<div class="jumpmenu">','i'));

の行を

var mr = sh.match(new RegExp('<div id="body">([^]+?)">昨日</a>','i'));

に変更してみて下さい。 <> VIICさん<>sage<>10/08/21 19:39:30 ID:wTOh5DVX<> >>381
乙です
マウスジェスチャに登録するにはどうすればいいんでしょうか?
マウスジェスチャのレス表示の項目に見当たらないんですが <> VIICさん<>sage<>10/08/21 19:57:22 ID:FipzXMoY<> >>383
外部コマンドに登録する際に、ラベルの横のIDに半角英数字でIDを設定しておくと
マウスジェスチャ設定の一番下にその外部コマンドが表示されると思います。

コマンドへのキーバインド・マウスジェスチャの設定
ttp://v2c.s50.xrea.com/manual/extcommand.html <> VIICさん<>sage<>10/08/21 21:00:04 ID:wTOh5DVX<> >>384
ありがとうございます <> VIICさん<>sage<>10/08/21 22:55:26 ID:PgTQbr6v<> >>377
俺もだ。
ランキングはポップアップするけどクリックしてもスレが開かない。 <> VIICさん<>sage<>10/08/21 23:58:03 ID:hsihputM<> スクリプトをいっぱい登録したらめちゃな感じになった。
フォルダーを作ってまとめるようにできればいいと思うけど。 <> VIICさん<>sage<>10/08/22 00:07:09 ID:MXKYf9TG<> 下位メニューでフォルダが出来る。 <> VIICさん<>sage<>10/08/22 00:49:25 ID:tRhZcHIJ<> >>386
とりあえずスレだけ開けるように

var sr = mr[1];

の下に

sr = sr.replace(/\.\/cache\.php\?thread=/ig,'http://');

を追加 <> 371<>sage<>10/08/22 07:48:54 ID:gW+VASkc<> >>373
>>375
ありがとうございます!
自分でも分からんなりに色々やってみてたんですが
APIでの取得までは出来たもののhtmlやらそこら辺のことが分からず挫折してました… <> VIICさん<>sage<>10/08/22 10:10:08 ID:dLFRsujr<> Googleイメージ検索ポップアップが、Googleの仕様変更のため動かなくなりました。
どこを書き換えればよいか、教えて下さい。 <> VIICさん<><>10/08/22 11:42:31 ID:WyH3q4cv<> >>198ってどうやってつかうもの何ですか?さっぱりわかりませぬ。 <> VIICさん<>sage<>10/08/22 11:59:27 ID:Bs89ttfd<> >>392
分からないことあったらまずヘルプやwikiを見る習慣をつけてください

ttp://www39.atwiki.jp/v2cwiki/pages/56.html
ttp://v2c.s50.xrea.com/manual/extcommand.html <> VIICさん<>sage<>10/08/22 13:10:04 ID:zhv8xxDc<> >>391
>>336 <> VIICさん<>sage<>10/08/22 13:13:42 ID:bNLF9YrS<> >>391
V2Cが
【V2C】 H20100820 [2.1.5_02] (L-0.7) だと今まで通り動く。
【V2C】 H20100822 [2.1.5_04] (L-0.7) だと検索結果の画像が表示されない。

V2C内部で何か変更してると思われ。スクリプトいじったけどうまく出来なかった。 <> VIICさん<>sage<>10/08/22 14:35:09 ID:tRhZcHIJ<> >>390
API版も出来たので一応。高速になってる…かな?
やたらコメント行が多いのはスクリプト制作の参考になれば…ということで
ttp://www1.axfc.net/uploader/Sc/so/146171.zip

>>375のpopupTweet.jsと差し替えて、URLExecのコマンド部分を

${V2CSCRIPT:FrS} popupTweetAPI.js

と変更すれば使えると思います <> 390<>sage<>10/08/22 15:17:37 ID:fFMakpoZ<> >>396
ありがとうございます!参考にします!!!

ていうか実は>>375を参考に自分でAPI(jsonの方)を試してみてたところです。
大体形になったんですが、速度は大して変わらない感じが・・
これなら制限かからないweb経由の方がいいのだろうか
ていうかやっぱリツイートの数は取れないんですね


自分でやってて気づいたこととりあえず貼っときます。他の方の役に立てば…

?ttps://twitter.com/ditamabow/status/13847708224 みたいな貼られ方する場合もある
?ttp://twitter.com/bubble_snow/status/20280125344 みたいに削除済みの場合もある
リンクになるのはURLの他に@xxxxx と #xxxxxx (他にもあるのかも?)
ユーザーの方は半角英数とアンダーバー ハッシュタグは半角英数のみ <> VIICさん<>sage<>10/08/22 15:39:15 ID:tRhZcHIJ<> >>395
&safe=imagesの直後に&gbv=1を付けるといけるかも
件数が表示されない場合は>>336の</nobr>を<nobr>に <> 395<>sage<>10/08/22 16:01:36 ID:bNLF9YrS<> >>398
> &safe=imagesの直後に&gbv=1を付けるといけるかも

これでいけるようになりました。【V2C】 H20100822 [2.1.5_04] (L-0.7)
(</nobr>で件数も表示されます)

早とちりしてイラナイ事書いてごめんなさい。 <> 391<>sage<>10/08/22 16:10:23 ID:dLFRsujr<> Googleイメージ検索ポップアップ動きました!
みなさん、ありがとうございました。 <> VIICさん<>sage<>10/08/22 18:35:34 ID:EdzLN5Py<> >>389
ありがとうございます!<(_ _)> スレ開けるようになりました。

<> n|a<>sage<>10/08/22 22:58:29 ID:1LkNp97p<> >>391,395,398-401
原因は
ttp://hibari.2ch.net/test/read.cgi/software/1281788619/384
への対策としてV2CのHTTPで使用するUser-Agentを
"Mozilla/4.0 (compatible)"
から
"Mozilla/5.0 (compatible)"
へ変更したことです。
ある程度以上の問題が起これば元に戻す可能性もありますが、
今のところはこのまま"Mozilla/5.0 (compatible)"にする予定です。 <> VIICさん<>sage<>10/08/26 08:49:05 ID:9nZbMLr0<> ニコニコのステータスポップアップ便利に使わせて貰っています
もしよろしければ同じようなものでニコ生とyoutubeのステータスポップアップも作って頂けませんでしょうか
すごく・・・欲しいです・・・ <> VIICさん<>sage<>10/08/26 23:21:21 ID:/tC7z84m<> たしかに・・・
自分が覗くスレだと圧倒的にyoutubeが貼られてることが多いので尚更っす <> VIICさん<>sage<>10/08/27 05:15:21 ID:6B80VF4h<> >>403-404
とりあえずYoutube
ttp://www1.axfc.net/uploader/Sc/so/147515.zip

デフォルトではこんな感じ
ttp://xepid.com/src/up-xepid14751.jpg <> VIICさん<>sage<>10/08/27 08:00:39 ID:z0Kp4Oo5<> >>405
戴きましたありがとー <> VIICさん<>sage<>10/08/27 09:00:35 ID:hEm9au0U<> >>405
ありがとうございます
使い倒させてもらいます!!

100ちょいほどURLをチェックしてみたんですが
10か20ほどにひとつ程度にエラーの出るURLがあるようです
あまり数は多くのないのであまり支障はないんですが
一応エラーの出た行毎にまとめました

#156行目
ttp://www.youtube.com/watch?v=M1_CLW-NNwc
ttp://www.youtube.com/watch?v=K_xflj26X-w&feature=channel
ttp://www.youtube.com/watch?v=pP3FQ0IXJSc
ttp://www.youtube.com/watch?v=yDSK91mUNLU
ttp://www.youtube.com/watch?v=HjONGEeOSyQ
ttp://www.youtube.com/watch?v=AyOBiC47bRU

#185行目
ttp://www.youtube.com/watch?v=4dogXk1KmRI <> VIICさん<>sage<>10/08/27 14:58:45 ID:6B80VF4h<> >>407
報告ありがとう。修正した
ttp://www1.axfc.net/uploader/Sc/so/147574.zip

自分の環境では156行目一番下、185行目のエラーしかでなかったので
もし156行目でまだエラーが出るようなら、エラーダイアログの文章を教えて欲しい <> VIICさん<>sage<>10/08/27 15:16:49 ID:rwPvQzk2<> >>408
お疲れ様です。スクリプト作成ありがとうございます。
自分も >>407さんと同様にエラーが出ます。

>>405 のVer.では
>>407の上3つが156行目、最後の動画は177行目に出ます。
以下エラーメッセージ

タイトル: スクリプトエラー: URLExec
メッセージ: スクリプトの実行中にエラーが発生しました。
sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot call method "replaceAll" of null (<Unknown source>#177) in <Unknown source> at line number 177

>>408 のVer.では
>>407の全部の動画において下記のエラーが出ます。

タイトル: スクリプトエラー: URLExec
メッセージ: スクリプトの実行中にエラーが発生しました。

sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot call method "replaceAll" of null (<Unknown source>#188) in <Unknown source> at line number 188 <> VIICさん<>sage<>10/08/27 15:18:39 ID:rwPvQzk2<> >>409
> 上3つが156行目
上6つが156行目 の間違いです。すみません。 <> VIICさん<>sage<>10/08/27 15:22:18 ID:yLukbS8J<> いやぁ、URLExec.datでスクリプト起動ってほんと夢が広がるなぁ <> 407<>sage<>10/08/27 15:50:53 ID:hEm9au0U<> ね、ほんと便利だ・・・

>>408
対応ありがとうございます
自分は更新バージョンでエラーは出なくなりました
他のURLも多数試してみましたが全く問題なしです
一応環境を

【V2C】 H20100822 [2.1.5_04] (L-0.6.2:x86)
【Java】 1.6.0_21-b07 (Sun Microsystems Inc.)
【OS】 Windows Vista Service Pack 2 (x86)
【メモリ】 Total(Free)/Max.: 269(157)/469 (Phys. Total/Avail.: 2007/760) [MB] <> VIICさん<>sage<>10/08/27 16:41:51 ID:btb1Fri6<> ニコニコ動画のステータスをポップアップするスクリプトをマウスオーバーで実行する場合のURLExec2.datの
記述が解らないのですが、誰か教えて頂けませんか。 <> 409<>sage<>10/08/27 17:52:34 ID:zALbCZ9V<> >>408 のスクリプトの180行目を変更したらエラーが出なくなりました。
ディレクトリの指定の”\\”を変更してませんでした。すみません。

>>413
Wikiを参考にしてみたらどうでしょうか?
ttp://www39.atwiki.jp/v2cwiki/pages/59.html <> VIICさん<>sage<>10/08/27 18:17:48 ID:btb1Fri6<> >>414
ありがとう。マウスオーバーでポップアップ出来る様になりました。 <> VIICさん<>sage<>10/08/29 07:02:03 ID:RqzN+pRT<> いつもスクリプトありがとうございます。
ところで、ニコ動やyoutubeのポップアップはマウスオーバー外すと
自動で閉じるようにはできないのでしょうか? <> VIICさん<>sage<>10/08/29 08:57:35 ID:PZsn4ClL<> むしろマウスオーバーで自動的にポップアップするようにしてほしい。 <> VIICさん<><>10/08/29 09:38:01 ID:GXcJfRNT<> マウスオーバーで動画情報をポップアップするの、便利ですね
マウスをリンクから放した時に自然にポップアップが消えるようにはできませんか? <> VIICさん<>sage<>10/08/29 09:53:37 ID:fM3xivVA<> >>416
というか、スクリプトでポップアップしたウィンドウ全部そう出来るようになったらうれしい
V2Cのレスポップアップはそうだし
今更挙動の変更は問題あるかもしれないけど…
それ用のポップアップメソッド別に用意して、使う人が適宜書き換えて対応とかでも十分なので <> n|a<>sage<>10/08/29 23:41:23 ID:LgxwqO7F<> >402のUAの変更は結局役に立たなくなったようなので、
(ttp://hibari.2ch.net/test/read.cgi/software/1281788619/681)
T20100829でUAは"Mozilla/4.0 (compatible)"に戻して
egs.saloon.jpだけ特別扱いにしました。 <> VIICさん<>sage<>10/08/31 21:56:53 ID:wb62x2jC<> 適当にこんなん作ってみたけどどうかな
こうした方がいいとかある?

//【登録場所】レス表示
//【ラベル】お気に入りレスに登録
//【内容】気に入ったレスを仮想スレにスクラップするだけ
//【コマンド】${SCRIPT:Fw} favorite_res.js
// ----- 次の行から -----
var file = new java.io.File("ログの適当な板のディレクトリ\\2345678901.dat");
var pw = new java.io.PrintWriter(new java.io.BufferedWriter(new java.io.FileWriter(file, true)));
var message = v2c.context.res.message;
message = message.replace("\n","<br>");
pw.println(v2c.context.res.name + "<>" + v2c.context.res.mail + "<>" + v2c.context.res.date + " ID:"
+ v2c.context.res.id + "<> " + message +"<br>" + v2c.context.thread.url + v2c.context.res.number);
pw.close();
// ----- 前の行まで ----- <> VIICさん<>sage<>10/08/31 22:04:48 ID:GQpqIzQN<> >>421
仮想スレかぁ こんな使い方もできるのか

過去ログ検索の結果を1スレにまとめる とかそういうのはできたら便利そう <> VIICさん<>sage<>10/09/01 09:41:49 ID:kFjliWZ7<> スクリプトのまとめページみたいなのないの? <> VIICさん<>sage<>10/09/01 09:47:43 ID:PScu0c5z<> >>279-280のポップアップ中のリンクをクリックしても飛ばなくなったんだけど、
俺だけなのかな?
【V2C】 T20100829 [2.1.5_05] (L-0.6.2:x86)
【Java】 1.6.0_18-b07 (Sun Microsystems Inc.) <> VIICさん<>sage<>10/09/01 09:47:44 ID:OJFdKfUl<> >>423
どうぞどうぞ <> VIICさん<>sage<>10/09/01 09:55:23 ID:kFjliWZ7<> >>421
このところでエラー吐く
var file = new java.io.File("ログの適当な板のディレクトリ\\2345678901.dat");

具体的にディレクトリ指定した例出してくれると助かる <> VIICさん<>sage<>10/09/01 10:34:07 ID:Ucg24BqZ<> >>424
全板横断の方は、>>389
sr = sr.replace(/\.\/cache\.php\?thread=/ig,'http://');

sr = sr.replace(/cache\.php\?thread=/ig,'http://');
に変更。

TVの方は、
var sr = mr[1];
の下に、
sr = sr.replace(/href="\?/ig, 'href="http://epg.2ch.net/tv2chwiki/pukiwiki.php?');
を追加 <> VIICさん<>sage<>10/09/01 10:49:46 ID:wdIUn0Yu<> >>427
ありがとうございます。 <> VIICさん<>sage<>10/09/01 13:27:34 ID:7gFfwWkJ<> >>426
じゃあこれで
このスレのURLの数字部分を2222222222に変えると使える

//【登録場所】レス表示
//【ラベル】お気に入りレスに登録
//【内容】気に入ったレスを仮想スレにスクラップするだけ
//【コマンド】${SCRIPT:Fw} favorite_res.js
// ----- 次の行から -----
var file = new java.io.File(v2c.saveDir, "\\log\\yy61.60.kg\\v2cj\\2222222222.dat");
var pw = new java.io.PrintWriter(new java.io.BufferedWriter(new java.io.FileWriter(file, true)));
var message = v2c.context.res.message;
message = message.replace("\n","<br>");
pw.println(v2c.context.res.name + "<>" + v2c.context.res.mail + "<>" + v2c.context.res.date + " ID:"
+ v2c.context.res.id + "<> " + message +"<br>" + v2c.context.thread.url + v2c.context.res.number);
pw.close();
// ----- 前の行まで ----- <> VIICさん<><>10/09/01 13:38:00 ID:11XGgprQ<> >>429
便利だけど、本文中に\nが含まれてるとバグるね
俺には回避の仕方が分からないけど <> VIICさん<>sage<>10/09/01 13:59:34 ID:7gFfwWkJ<> >>430
おおサンクス
これで直ったはず
原因は"<"と">"だった

このスレのURLの数字部分を2222222222に変えると使える

//【登録場所】レス表示
//【ラベル】お気に入りレスに登録
//【内容】気に入ったレスを仮想スレにスクラップするだけ
//【コマンド】${SCRIPT:Fw} favorite_res.js
// ----- 次の行から -----
var file = new java.io.File(v2c.saveDir, "\\log\\yy61.60.kg\\v2cj\\2222222222.dat");
var pw = new java.io.PrintWriter(new java.io.BufferedWriter(new java.io.FileWriter(file, true)));
var message = v2c.context.res.message;
message = message.replace("<", "<");
message = message.replace(">", ">");
message = message.replace("\n","<br>");
pw.println(v2c.context.res.name + "<>" + v2c.context.res.mail + "<>" + v2c.context.res.date + " ID:"
+ v2c.context.res.id + "<> " + message +"<br>" + v2c.context.thread.url + v2c.context.res.number);
pw.close();
// ----- 前の行まで ----- <> VIICさん<>sage<>10/09/01 14:03:41 ID:7gFfwWkJ<> >>431何度も申し訳ない

//【登録場所】レス表示
//【ラベル】お気に入りレスに登録
//【内容】気に入ったレスを仮想スレにスクラップするだけ
//【コマンド】${SCRIPT:Fw} favorite_res.js
// ----- 次の行から -----
var file = new java.io.File(v2c.saveDir, "\\log\\yy61.60.kg\\v2cj\\2222222222.dat");
var pw = new java.io.PrintWriter(new java.io.BufferedWriter(new java.io.FileWriter(file, true)));
var message = v2c.context.res.message;
message = message.replace("<", "&_lt;"); //&_lt;のアンダーバーを抜いて
message = message.replace(">", "&_gt;"); //&_gt;のアンダーバーを抜いて
message = message.replace("\n","<br>");
pw.println(v2c.context.res.name + "<>" + v2c.context.res.mail + "<>" + v2c.context.res.date + " ID:"
+ v2c.context.res.id + "<> " + message +"<br>" + v2c.context.thread.url + v2c.context.res.number);
pw.close();
// ----- 前の行まで ----- <> VIICさん<><>10/09/01 14:32:15 ID:rWM4OJnj<> >>432
乙です <> VIICさん<>sage<>10/09/01 16:52:15 ID:yW3s80xY<> 使わせてもらいましたのぜ。面白い。

これメモったスレを直接編集する方法あるかな?
datをイジるしか方法無さげ? <> VIICさん<>sage<>10/09/01 17:51:04 ID:PScu0c5z<> >>427
ありがとう。 <> VIICさん<>sage<>10/09/01 20:20:15 ID:PuSRIJt4<> V2C本体に実装してもらいたいな。 <> VIICさん<>sage<>10/09/01 20:53:05 ID:kFjliWZ7<> これは助かる <> VIICさん<>sage<>10/09/01 21:08:41 ID:aG8+vTlP<> >>432
初歩的な質問なんですが、スクラップしたdatファイルはV2Cから読み込めるのでしょうか? <> VIICさん<>sage<>10/09/01 21:32:27 ID:65aoOTa7<> メインツールバーに登録した
マウスジェスチャの設定をしたらマークより使いやすくて良いな <> 438<>sage<>10/09/01 23:24:32 ID:K0dNy0jQ<> >>432
度々すみません。
このスクリプトで文字コードを指定して(CP932等)datファイルを保存するようにするには
どのように変更すれば良いでしょうか? <> VIICさん<>sage<>10/09/02 01:24:56 ID:VG/5a8w7<> >>438
>>431 <> VIICさん<>sage<>10/09/02 02:00:43 ID:Vqk7Hcqv<> >>439
付箋やマークはまとめて1スレで表示できないってのもあるしな
削除したり管理すること考えるとちょっと面倒だけど <> VIICさん<>sage<>10/09/02 15:31:43 ID:w9n9lDoa<> キーワード(2ch)のタグクラウド風味ポップアップ
ttp://xepid.com/src/up-xepid14798.jpg

【登録場所】全体、レス表示
【ラベル】タグクラウド
【内容】2chキーワードのタグクラウド風ポップアップ
【コマンド】$SCRIPT keyword2ch.js
【スクリプト】
ttp://www1.axfc.net/uploader/Sc/so/149408.zip <> VIICさん<>sage<>10/09/02 15:36:24 ID:w9n9lDoa<> ※今のところキーワードのリンクはwebブラウザでしか開けません <> VIICさん<>sage<>10/09/02 16:04:58 ID:tL/SlRST<> >>443
おお これいいな
面白い上に便利 <> VIICさん<>sage<>10/09/02 16:20:10 ID:RuoE205u<> >>442
削除はとりあえず外部コマンドで「テキストエディタでDATファイルを開く」を登録して
手作業でばっさりw <> VIICさん<>sage<>10/09/02 17:06:42 ID:tL/SlRST<> >>446
レス削除くらいならスクリプトで実現できるだろうけど
管理のことを考えるとGUIが欲しいところ

datとしてファイルになってるんだからV2C本体の機能で実現する必要はないというか
そういう外部アプリがあればいけそうだね

と思ったけど、管理っつってもやることは削除くらいしか思いつかないな
いらねえか

付箋やマーカーと連動させられたらうれしいと思ったんだけど
スクリプトではここら辺触れないっぽいねぇ <> VIICさん<>sage<>10/09/02 19:52:13 ID:TWVnOlFz<> ttp://img710.imageshack.us/img710/3742/v2c.png
このスクリプトで抽出されたキーワードが元のより少ないのは何で? <> VIICさん<>sage<>10/09/02 19:54:49 ID:C8i++i41<> >>448
そのスキンどこにあるか教えてください <> VIICさん<>sage<>10/09/02 20:22:34 ID:w9n9lDoa<> >>448
キーワードの取得はhtml形式とjson形式があって
jsonの場合は10件のデータが得られるようです。

>>443はhtmlから取って来てるので件数が少なくなってます。 <> VIICさん<>sage<>10/09/02 20:43:44 ID:TWVnOlFz<> ttp://www1.axfc.net/uploader/Sc/so/149481
このスキンは元ソースを適当に改造したものだから、
フォントやサイズなどそこら辺は自分で合わせるようにいじってください。 <> VIICさん<>sage<>10/09/02 20:44:49 ID:TWVnOlFz<> >>451>>449へのレスです。スレ汚してすみません。 <> VIICさん<>sage<>10/09/02 20:48:52 ID:aMh90Amb<> >>447
スクリプト書くなら、お気に入りレスのスレかどうかチェックして、レス番号取得して、その行を削除するだけだから簡単だな <> VIICさん<>sage<>10/09/02 20:49:19 ID:TWVnOlFz<> >>450
件数が少なくなってるだけじゃなく、同じスレで実行するごとにキーワードも変わってる。 <> VIICさん<>sage<>10/09/02 20:58:19 ID:w9n9lDoa<> >>454
それもhtml形式の仕様で、サーバー側で10件の中からランダムに抽出されるので
実行するごとに結果が変わります

jsonにも対応してみたいけどちょっと時間がかかるかも… <> VIICさん<>sage<>10/09/02 21:06:39 ID:GXBJrWVm<> 任意の行の書き換えって簡単じゃないな <> VIICさん<>sage<>10/09/02 22:07:10 ID:w9n9lDoa<> >>443のスクリプトを修正、json形式対応
多分これでキーワードを10個取ってこれるようになるはず
ttp://www1.axfc.net/uploader/Sc/so/149522.zip <> VIICさん<>sage<>10/09/02 22:11:15 ID:w9n9lDoa<> ついでにもう一つ作った奴を

//【登録場所】全体、レス表示
//【ラベル】Buzztter
//【内容】Twitterの人気ワードをポップアップ
//【コマンド】$SCRIPT buzztter.js
//【スクリプト】
// ----- 次の行から -----
popupBuzztter();
function popupBuzztter() {
try { var s = v2c.readURL( 'http://buzztter.com/ja' ); }
catch (e) { return v2c.alert( '通信エラー\n' + e ); }
if( s.match( /buzzphrases'>([\s\S]+?)<\/div/i ) ) var h = RegExp.$1;
else return v2c.alert( '解析エラー' );
var css = '<!--body{background-color:#ffcce6;margin:5px;}a{color:black;}-->';
h = h.replace( /href="\//ig , 'href="http://buzztter.com/' );
h = '<html><head><style type="text/css">' + css + '</style></head><body>'
+ h + '</body></html>';
v2c.context.setMaxPopupWidth(400)
v2c.context.setPopupHTML(h);
}
// ----- 前の行まで ----- <> VIICさん<>sage<>10/09/02 22:24:04 ID:w9n9lDoa<> >>457にミスが有ったので再度修正
何度も申し訳ない
ttp://www1.axfc.net/uploader/Sc/so/149534.zip <> VIICさん<>sage<>10/09/02 22:58:54 ID:T/eCeamo<> >>459
エラー
通信失敗になってしもたよ <> VIICさん<>sage<>10/09/02 23:05:02 ID:w9n9lDoa<> >>460
【コマンド】${SCRIPT:S} keyword2ch.js
になってますか?パーミッション設定が変わってるので <> VIICさん<>sage<>10/09/02 23:16:22 ID:T/eCeamo<> >>461
ああ、コマンド前のままだったです。もうしわけない・・・。
正常に動作しました。どうもありがとう。 <> VIICさん<>sage<>10/09/02 23:18:53 ID:VG/5a8w7<> >>453
もっとうまいやり方があるとは思うけど・・・特に後半・・・
テストする人は仮想のdatのバックアップを取らないと消える可能性あり
URLやディレクトリは適宜書き換えて、一行目hを抜いてるんでhを補完して下さい

//【登録場所】レス表示
//【ラベル】お気に入りレスから削除
//【内容】お気に入りレスの仮想スレッド上で使うと、レス削除出来る
//【コマンド】${SCRIPT:F} remove_favorite_res.js
// ----- 次の行から -----
if(v2c.context.thread.url == "ttp://yy61.60.kg/test/read.cgi/v2cj/2222222222/"){
var file1 = new java.io.File(v2c.saveDir, "\\log\\yy61.60.kg\\v2cj\\2222222222.dat");
var br1 = new java.io.BufferedReader(new java.io.FileReader(file1));
var file2 = new java.io.File(v2c.saveDir, "\\log\\yy61.60.kg\\v2cj\\temp.dat");
var pw1 = new java.io.PrintWriter(new java.io.BufferedWriter(new java.io.FileWriter(file2)));
var mes = br1.readLine();
for(var i=1; mes != null; i++){
if(i != v2c.context.res.number){
pw1.println(mes);
mes = br1.readLine();
}else{
mes = br1.readLine();
}
}
br1.close();
pw1.close();
var file3 = new java.io.File(v2c.saveDir, "\\log\\yy61.60.kg\\v2cj\\temp.dat");
var br2 = new java.io.BufferedReader(new java.io.FileReader(file3));
var file4 = new java.io.File(v2c.saveDir, "\\log\\yy61.60.kg\\v2cj\\2222222222.dat");
var pw2 = new java.io.PrintWriter(new java.io.BufferedWriter(new java.io.FileWriter(file4)));
mes = br2.readLine();
for(;mes != null;){
pw2.println(mes);
mes = br2.readLine();
}
br2.close();
pw2.close();
}
// ----- 前の行まで ----- <> VIICさん<>sage<>10/09/12 16:43:42 ID:mxWaLHmx<> Yahoo国語辞書が使えなくなったのは私だけ? <> VIICさん<>sage<>10/09/12 18:37:30 ID:a35Lb79b<> 俺も <> VIICさん<>sage<>10/09/12 19:17:05 ID:htUEK8Ht<> >>15を勝手に修正させてもらいました

//【登録場所】選択テキスト
//【ラベル】yahoo〇〇辞書
//【内容】yahoo国語、英和、和英、類語辞書のポップアップ
//【コマンド】$SCRIPT ydic.js 0
//※引数(コマンドの末尾の数字)によってどの辞書を使うかが決まる
//※引数(国語:0、英和:1、和英:3、類語:5)
// ----- 次の行から -----
function createPopupString() {
var vcx = v2c.context;
var ss = vcx.selText;
if (ss) {
ss = ss.trim();
}
if (!ss||(ss.length()==0)) {
v2c.alert('検索語を取得できませんでした。');
return;
}
var args = vcx.args;
var id = (args.length>0)?args[0]:'0';
var sh = v2c.readURL('http://dic.yahoo.co.jp/dsearch?enc=UTF-8&p='+
encodeURIComponent(ss)+'&stype=1&dtype='+id);
if (!sh) {
v2c.alert('ページを取得できませんでした。');
return;
}

var mr = sh.match(new RegExp('<!-- main -->([^]*?)<!-- /.content-detail -->','i'));
if (!mr) {
v2c.alert('説明を抽出できませんでした。');
return;
}
var mr2 = mr[1].replace(new RegExp('<div id="source-detail">[^]*?</div>','i'),'');
vcx.setPopupHTML('<html><body>'+mr2+'</body></html>');
}

createPopupString();
// ----- 前の行まで ----- <> VIICさん<>sage<>10/09/12 19:26:55 ID:mxWaLHmx<> ありがとう乙 <> VIICさん<>sage<>10/09/13 09:43:02 ID:JGEnmJnP<> 他所で偶然V2C用のスクリプトを見付けたのでもってきますた
内容はよくわからないけどpixiv関連のものっぽい
ttp://www1.axfc.net/uploader/Sc/so/40824 <> VIICさん<>sage<>10/09/13 10:00:42 ID:rA/gzmt7<> >>468
何に使うスクリプトなの? <> VIICさん<>sage<>10/09/13 13:29:57 ID:Kj7JJClz<> 半角二次元の画像詳細スレのデータベースに自動登録する書式を生成するスクリプトみたいだね <> VIICさん<>sage<>10/09/16 22:31:44 ID:l3xLYlR/<> 単発ID「以外」を抽出するスクリプトがありますが、単発ID以外、もしくはIDが
何種類あるかを表示するスクリプトはできないでしょうか。

簡単に言うと、過疎っている実況などで書き込みしている人が何人くらいいるかわかるような機能が欲しいです。。 <> VIICさん<>sage<>10/09/16 23:05:58 ID:FR/7GlXg<> >>471
ユニークなID数を数えるだけならスクリプトで簡単に実現できると思うけど…
それは他の人に任せるとして
ttp://www.geocities.co.jp/lauhangwoo/jane/
コレV2Cでも使えるよ

こんな感じ
ttp://www.geocities.co.jp/lauhangwoo/jane/threana2.png
795res/211rowってなってるので、
795レス中IDは211種類って事
他にも色んなパターンで解析できるので便利

外部コマンドに登録して使う
例としては

【ラベル】 スレッド分析
【場所】 レス表示
【コマンド】 mshta "$SAVEDIR\threana.hta" "$THREADURL" "$DATFILE"

こんな感じで。

"$SAVEDIR\threana.hta"
は保存用フォルダにおいた場合なので、別場所の場合は自分でパス設定してくだしい <> VIICさん<>sage<>10/09/16 23:23:05 ID:l3xLYlR/<> >>472
教えてくれてありがとう。
ポップアップでID数がわかる簡単なものがあればと思ったんだけど、これはこれで
いろいろ使えそうですね。 <> VIICさん<>sage<>10/09/17 00:49:31 ID:8FJPHwXE<> >>472
オプションの変更を保存できればさらに便利になると思います。 <> VIICさん<>sage<>10/09/17 00:56:52 ID:8FJPHwXE<> これ、そのような機能のスクリプトの参考になるかも。
ttp://tool.jolt.jp/2ch_id/ <> VIICさん<>sage<>10/09/17 01:06:30 ID:/rNxwuoz<> >>474
ここでスクリプト投稿してるような人たちなら簡単に改造できるんじゃないかな
ちょっとスレ違いかもしれないけど改変再配布は自由らしいので待ってれば誰かがやってくれるかも?

自分は>>471みたいな使い方しかしてないんでID集計、件数順がデフォルトになるようにしてる
まさにこれか ttp://www.geocities.co.jp/lauhangwoo/jane/threana2.png

一応サンプルとしてやり方書いとく

threana.htaの51行目
Count();
の直下に下記2行を追加
document.opt.group.value = "12";
document.opt.order.value = "c";


142行目辺り以降を見れば何が何に対応してるか分かるから
この程度ならスクリプトとか知らなくても自分で色々弄れるはず <> VIICさん<>sage<>10/09/17 01:35:59 ID:OYS2lcJQ<> >>476
それ最後の方の行、<option value="xx">のselectedの位置を変更した方が良くない?
476の例なら『<option value="12" selected>ID』『<option value="c" selected>件数順』のように。 <> VIICさん<>sage<>10/09/17 01:39:41 ID:/rNxwuoz<> >>477
自分全然知らんまま適当にやったので、それが正しいのだと思います。 <> VIICさん<>sage<>10/09/17 02:27:06 ID:wAvTiME2<> 超簡易版だけど

//【登録場所】レス表示、全体
//【ラベル】人数カウント
//【内容】人数のカウント
//【コマンド】$SCRIPT countID.js
function countID() {
var t = v2c.context.thread;
var c = new Array;
var i, j = 0, k = 0, l = 0, s = '';
for ( i=0; i<t.resCount; i++ ) {
if ( c[t.getRes(i).id] ) {
if ( c[t.getRes(i).id] == 1 ) {
j++;
if ( k>0 ) k--;
}
c[t.getRes(i).id]++;
}
else {
c[t.getRes(i).id]=1;
k++;
}
l++;
}
//タイトル表示がいらないときは↓の行の頭に//をつけてコメントアウト
s += t.title + ' (' + l + ')??<br>';
s += '人数:' + (j+k) + '??<br>単発:' + k + '??<br>単発以外:' + j;
v2c.context.setPopupHTML('<html><body>'+s+'</body></html>');
}
countID(); <> VIICさん<>sage<>10/09/17 17:20:48 ID:8FJPHwXE<> >>479
だいたい使える!ご苦労様でした。 <> VIICさん<>sage<>10/09/17 17:48:52 ID:72BvSOO/<> >>480
なぜ上から目線・・・ <> VIICさん<>sage<>10/09/17 17:50:08 ID:wAvTiME2<> ああ、よく見たら文字化けしたいたごめん

//【登録場所】レス表示、全体
//【ラベル】人数カウント
//【内容】人数のカウント
//【コマンド】$SCRIPT countID.js
function countID() {
var t = v2c.context.thread;
var c = new Array;
var i, j = 0, k = 0, l = 0, s = '';
for ( i=0; i<t.resCount; i++ ) {
if ( c[t.getRes(i).id] ) {
if ( c[t.getRes(i).id] == 1 ) {
j++;
if ( k>0 ) k--;
}
c[t.getRes(i).id]++;
}
else {
c[t.getRes(i).id]=1;
k++;
}
l++;
}
//タイトル表示がいらないときは↓の行をコメントアウト
s += t.title + ' (' + l + ')&#13;&#10;<br>';
s += '人数:' + (j+k) + '&#13;&#10;<br>単発:' + k + '&#13;&#10;<br>単発以外:' + j;
v2c.context.setPopupHTML('<html><body>'+s+'</body></html>');
}
countID(); <> VIICさん<>sage<>10/09/17 19:02:46 ID:8FJPHwXE<> お疲れ様でした。 <> VIICさん<>sage<>10/09/18 00:44:09 ID:yTFnAkGx<> 問題は「だいたい使える!」の部分じゃないのかww <> VIICさん<>sage<>10/09/18 03:37:45 ID:bBjbhHAq<> >>484
はぁ?そういう言い方っておかしいの? <> VIICさん<>sage<>10/09/18 03:41:02 ID:hw1qM9o/<> えっ <> VIICさん<>sage<>10/09/18 03:50:10 ID:nXuweMuR<> ID:8FJPHwXE はいろいろおかしいw <> VIICさん<>sage<>10/09/18 03:51:40 ID:bBjbhHAq<> >>487
具体的にどこがおかしいんだよwww <> VIICさん<>sage<>10/09/18 08:41:15 ID:ji7wmCGH<> 「だいたい」というのは「おおよそ」と同義。
つまり制作者に対し「完璧ではないが(一部問題はあるが)つかえる!」と言っているんですよ? <> VIICさん<>sage<>10/09/18 09:10:45 ID:0/17veJr<> 「ご苦労さん」は主人が使用人に対して使う言葉です。
それを丁寧に「ご苦労様でした」と言っても敬語表現にはなりません。 <> VIICさん<>sage<>10/09/20 08:46:32 ID:Z+CEPbX3<> 超簡易版だけど、って言ってる所に
だいたい使える、って言って何かおかしいのだろうか <> VIICさん<>sage<>10/09/20 08:56:00 ID:wFluVl6H<> ふむ、微妙。 <> VIICさん<>sage<>10/09/20 09:14:15 ID:Z3aByXju<> スクリプトから表示したポップアップHTML内にselect-optionを埋め込んで
それを選択したら表示内容を変える、とかできますか? <> VIICさん<>sage<>10/09/20 09:27:03 ID:BNbK23jE<> >>491
>だいたい使える!ご苦労様でした。

だからなんでそんな偉そうなの ?って話で。
本人に他意はなかったとしても言葉のチョイスが適切ではないと思うぞ。 <> VIICさん<>sage<>10/09/20 10:01:23 ID:wFluVl6H<> >>494
不適切なのは前半か後半のどっちが問題。 <> VIICさん<>sage<>10/09/20 10:28:50 ID:BNbK23jE<> >>495
これ以上議論する気はないけど、前半とか後半じゃなくて大事なのは誤解されそうな表現だと思うってことだ。
そう思う人が他にもいるからいろいろツッコミ入ってんじゃないか ?

>>479は義務でも、ましてや対価を得ているでもなく全くの好意でしてくれたということを理解すべき。
<> VIICさん<>sage<>10/09/20 10:52:57 ID:F0Tph4P9<> 相手が「つまらないものですが」と謙遜しているのに対し、
「まあまあ嬉しい。貰っておく。」と言ってるのと一緒。 <> VIICさん<>sage<>10/09/20 11:32:36 ID:hoQXXj7A<> >オプションの変更を保存できればさらに便利になると思います。
>これ、そのような機能のスクリプトの参考になるかも。
言いたいことは分かるが貰う側の言い回しではないな <> VIICさん<>sage<>10/09/20 16:43:17 ID:0a6G3exs<> 質問流れたので強調>>493 <> VIICさん<>sage<>10/09/20 19:12:24 ID:NpqBP9J1<> >>493,499
多分HTMLポップアップでは不可能だと思う
内容を切り替えるにはjavascriptが必要なはずだけど
ポップアップ内ではjavascriptが実行できない

HTMLポップアップの代わりにJavaのGUI使えば
同じような動作はできるかも <> VIICさん<>sage<>10/09/20 19:18:11 ID:bGEVxNAZ<> js埋め込んでも変わらなかったから
他に手段はないかと思ってましたが、やはりそうですか
Java通すしかなさそうですね <> VIICさん<>sage<>10/09/20 22:17:40 ID:HvtxjC/z<> D:\hogehoge\V2C\BBS\2ch\の中にある
「samba24.txt」を半自動で更新、上書きしてくれるスクリプトってないですかね?
<> VIICさん<>sage<>10/09/21 01:31:51 ID:UqA7ZmQs<> 半自動がどういう意味なのか分からないけど作ってみた
意図するものと違ったらごめん

//【登録場所】全体、レス表示
//【ラベル】Samba24.txtの更新
//【内容】Samba24 なの(仮):http://nullpo.s101.xrea.com/samba24/
//     からSamba24.txtを取得して〜\BBS\2ch\に保存する
//【コマンド】${SCRIPT:Frw} samba24nano.js
//【スクリプト】
// ----- 設定ここから -----

//Samba24.txtの自動バックアップを(0:とらない、1:とる)
// ''で括らないでください
var backup = 1;

// 秒数の設定
// 'majority':サーバ上の各板で最多数の秒数
// 'max':各サーバ上の各板の最大値
// 'min':各サーバ上の各板の最小値
var decsec = 'majority';

//補正秒数の設定 '-10'〜'10' の整数
var offset = '0';

//改行の設定
// 'crlf':CR+LF(Windows 標準)
// 'lf':LF(Mac OS X、Linux/UNIX 標準)
var newline = 'crlf';

//----- 設定ここまで -----

getSamba24Txt();
function getSamba24Txt() {
var file = new java.io.File( v2c.saveDir, '\\BBS\\2ch\\samba24.txt' );
var bfile = new java.io.File( v2c.saveDir, '\\BBS\\2ch\\samba24.txt.bak' );
var url = 'http://nullpo.s101.xrea.com/samba24/conv.xcg?';
var data = 'browser=v2c' + '&decsec=' + decsec +
'&offset=' + offset + '&newline=' + newline + '&output=view';
var s = v2c.readURL( url + data );
if (!s) return v2c.alert( '通信エラー' );
var s2 = v2c.readFile( file );
if ( backup ) {
if ( s2 ) v2c.writeStringToFile( bfile, s2 );
}
v2c.writeStringToFile( file, s );
//ダイアログがいらない時は↓をコメントアウト
v2c.alert( 'samba24.txtを更新しました' );
} <> VIICさん<>sage<>10/09/29 14:12:47 ID:gj5MH1US<> V2Cが対応の掲示板へのリンクだけを抽出するスクリプトがあったっけ? <> VIICさん<>sage<>10/09/30 14:44:08 ID:QrJ+1TGB<> >>198getlogのヴァルダ検索からログを取得できるものを作って頂けないでしょうか
みみずんと分散できるかなーと

ヴァルダ検索
ttp://varda2.com/search/
参考
ttp://varda2.com/blog/0101

>>503
横からですが頂きました
更新し忘れることが多いのでありがたいです

>>504
なかったような・・・? <> VIICさん<>sage<>10/10/02 12:01:11 ID:wYgHcMiB<> また>>280の全板縦断ランキングポップアップが使えなくなってる
>>427の変更で使えてたんだけどなぁ

俺だけじゃなければどなたか対応を教えて下さい <> VIICさん<>sage<>10/10/02 13:36:53 ID:22DrEhCc<> URLが変わっただけ
ttp://2ch-ranking.net/index.html?board=zenban <> VIICさん<>sage<>10/10/02 13:53:17 ID:wYgHcMiB<> >>507
ありがとう 使えるようになりました <> VIICさん<>sage<>10/10/02 14:51:06 ID:6TQSJQAj<> スペースとかを押している間に、1 ~ 9やA ~ Iの英数字がリンクの辺りに出てくるようにして
英数字を選択してスペースキーを離すことでそのリンクに飛ばす。これでスレをマウスを使わずにすんなり閲覧できる。
近い応用といえば、Firefox アドオンのLOL ttp://elder-gods.org/lol/
キーポード派の俺はどうしても欲しい機能なんだ。 <> VIICさん<>sage<>10/10/06 14:23:57 ID:5K9uGusL<> ふと見つけたものだけど、V2Cにも動作するように改造してもらいたい。
ttp://blunch5656.web.fc2.com/files/auto-getlog101003.zip <> VIICさん<>sage<>10/10/06 14:42:01 ID:oUuDT6ew<> アプロダでもないサイトのzipファイル直リンすんなよw <> VIICさん<>sage<>10/10/06 14:42:57 ID:OfXTsBFG<> getlog系は晒すなカス
またサイトが無くなるだろ <> VIICさん<>sage<>10/10/06 14:48:03 ID:5K9uGusL<> 迷惑かけちゃってごめんなちゃい。 <> VIICさん<>sage<>10/10/10 16:12:54 ID:8pKn688e<> というかみみずんのでいいだろ <> VIICさん<>sage<>10/10/10 16:18:51 ID:mavKcZ2O<> //【登録場所】全体、レス表示
//【ラベル】「マウスジェスチャ一覧」、または「キーバインド一覧」
//【内容】設定してあるマウスジェスチャ、またはキーバインドのみを新タブで表示。
//【コマンド1】${SCRIPT:Fr} viewMyMap.js 0 //キーバインドの設定一覧
//【コマンド2】${SCRIPT:Fr} viewMyMap.js 1 //マウスジェスチャの設定一覧
//【補足1】通常のアクション名取得にはttp://www39.atwiki.jp/v2cwiki/pages/49.htmlを利用、そのため、新しいアクションは置換されない可能性有り
//【補足2】スクリプトのアクション名取得にはextcmd_win.txtを利用、そのため、他のOSはたぶん未対応
var vcx = v2c.context;
var option = vcx.argLine;
function createMyMap(op){
var f1 = new java.io.File( v2c.saveDir, '\\extcmd_win.txt' );
var fa1 = v2c.readLinesFromFile(f1,'utf-8');
var f2 = op ? new java.io.File(v2c.saveDir, '\\gesture.txt') : new java.io.File(v2c.saveDir, '\\inputmap.txt');
var fa2 = v2c.readLinesFromFile(f2,'utf-8');
for(var i = 0, il = fa1.length, m0 = m1 = m2 = ''; i < il; i++){
s = fa1[i]+'';
m0 = (s.match(/^\w/) || [])[0]
m1 = (s.match(/\tI(\w+?)\t/) || [])[1];
m2 = (s.match(/\tL(.+?)(\t|$)/) || [])[1];
for(var j = 0, jl = fa2.length; j < jl; j++){
fa2[j] = (fa2[j]+'').replace(new RegExp(m0+'\\$'+m1+'$'),m2);
}
}
var se = v2c.readURL('h'+'ttp://www39.atwiki.jp/v2cwiki/pages/49.html');
rgex = new RegExp('(<h4[^]*?<\/table>)','g');
var ar = [];
while(rgex.exec(se) != null){
ar.push(RegExp.$1+'');
}
rgex = new RegExp('0--><td style="">([^<]*?)</td>[^]*?1--><td style="">([^<]*?)</td>','ig');
for(var m = 0, ml = ar.length; m < ml; m++){
while(rgex.exec(ar[m]) != null){
for(var n = 0, nl = fa2.length; n < nl; n++){
fa2[n] = (fa2[n]+'').replace(new RegExp(RegExp.$2+'$'),RegExp.$1);
}
}
}
for(var n = 0, nl = fa2.length; n < nl; n++){
var ma = ((fa2[n].match(/^[\w ]+?,/) || [])[0])+'';
var mp = ma;
ma = ma.replace('Map,', '▼');
if(op) {
ma = ma.replace('S', 'S').replace(/U/g, '↑').replace(/D/g, '↓').replace(/L/g, '←').replace(/R/g, '→')
.replace('u', 'W↑').replace('d', 'W↓').replace('1', 'L').replace('2', 'M').replace(',', '\t');
} else {
ma = ma.replace(/ /g, ' + ').replace('ctrl', 'CTRL').replace('alt', 'ALT').replace('shift', 'SHIFT');
ma.length > 10 ? ma = ma.replace(',', '\t') : ma = ma.replace(',', '\t\t');
}
fa2[n] = (fa2[n]+'').replace(mp,ma).replace(/"/g,'"');
fa2[n] = (fa2[n]+'').replace('Global','全体').replace('BoardTree','板一覧')
.replace('Favorite','お気に入り').replace(/ThreadList$/,'スレッド一覧').replace(/ThreadView$/,'レス表示')
.replace('TVLink','リンク[レス表示]').replace('TVThumbnail','サムネイル画像[レス表示]').replace('TVSelText','選択テキスト[レス表示]')
.replace('Write','書き込み欄').replace('ThreadListMiniSearch','スレッド一覧絞り込み').replace('ThreadViewMiniSearch','レス表示絞り込み')
.replace('ImageCacheList','画像キャッシュ一覧').replace('ImagePopup','画像ポップアップ・ビューア').replace('ImageWindow','画像表示ウィンドウ')+'\t';
}
var tt = op ? 'マウスジェスチャ設定' : 'キーバインド設定'
vcx.setResPaneText(fa2.join('\n'), tt, true);
}
createMyMap(parseInt(option)); <> VIICさん<>sage<>10/10/10 17:04:10 ID:mavKcZ2O<> //varda2.com/log/2ch/$5/$1/$5/kako/$8/$7/$6.dat
//www.unkar.org/convert.php/$1/$5/$6/
//dat.tanabota.info/get_dat.php?dat=$1_$5_$6
自己判断で、質問にはお答えできない。 <> VIICさん<>sage<>10/10/23 13:05:01 ID:tnOBzXCa<> 久々に来たが日本語の不自由な奴がいたのか <> VIICさん<>sage<>10/10/24 00:10:30 ID:Yw40tChX<> ITドカタ界の一端を見た気がした <> VIICさん<>sage<>10/10/28 22:15:35 ID:SOsF9/mo<> //【登録場所】全体、レス表示 ※キーバインドは「全体」のみ可
//【ラベル】(次の|前の|この)被参照と参照レスを抽出
//【内容】アクション対象、または最初の被参照と参照レスを抽出、その抽出状態から(前|次)の被参照と参照レスを抽出
//【コマンド1】$SCRIPT viewRefRes.js //(次の|この)被参照と参照レスを抽出
//【コマンド2】$SCRIPT viewRefRes.js prev //(前の|この)被参照と参照レスを抽出
//【補足】 デフォルトは、アクション対象レスに参照レスがあれば、対象レスから開始、なければ最初の被参照レスから開始
var From_First = false; //常に最初の被参照レスから開始
var Threshold = 1; //参照レスが閾値以上で対象

var vcx = v2c.context, res = vcx.res, th = vcx.thread;
function haveNum(a, n) {
for(var i = 0; i < a.length; i++) {
if(a[i] == n) return true;
}
return false;
}
function viewRefRes(prev) {
var f = vcx.filteredResIndex, fl = f.length, c = th.localResCount;
var set = function(a, b){ //a:参照レス番号Array, b:被参照レス番号
if(b == c) {
vcx.setStatusBarText("次の被参照レスはありません。"); return;
} else if(b == -1) {
vcx.setStatusBarText("前の被参照レスはありません。"); return;
}
vcx.setFilteredResIndex([b].concat(a)); vcx.setResIndexToJump(b);}
var len = function(d) { return d ? d.length : 0; }
if(fl == c) {
var ri = res.index, r = res.refResIndex;
if(len(r) < Threshold || From_First) {
for(ri = 0; ri < c; ri++) {
r = th.getRes(ri).refResIndex; if(len(r) >= Threshold) break;
}
if(len(r) < Threshold) {vcx.setStatusBarText("被参照レスがありません。"); return;}
};
set(r, ri);
} else {
for(var i = 0; i < f.length; i++){
var gres = th.getRes(f[i]), gri = gres.index, gr = gres.refResIndex, grl = len(gr);
if(fl == grl+1) {
for(var j = 0; j < grl; j++) {
if(!haveNum(f, gr[j])) break;
}
if(j == grl) {
if(prev){
for(var m = gri-1; m > -1; m--) {
gr = th.getRes(m).refResIndex; if(len(gr) >= Threshold) break;
}
set(gr, m); break;
} else {
for(var n = gri+1; n < c; n++) {
gr = th.getRes(n).refResIndex; if(len(gr) >= Threshold) break;
}
set(gr, n); break;
}
}
}
}
}
}
if(res && th) { viewRefRes(vcx.args[0]+"" == "prev"); } <> VIICさん<>sage<>10/10/30 15:59:04 ID:ufH01zpB<> スレURL+レス番,レス番
のようなクリップボードデータを
書き込み経由(プレビュー)からポップアップさせずに
ポップアップか抽出するスクリプトを作成したいです。

クリップボードデータを取得するにはどのようにしたら良いでしょうか?
Javaだとわからない(不安)なためV2Cで用意していただけると助かります。
ttp://allabout.co.jp/gm/gc/80702/
↑辺りを利用すればよさそうではあるのですが… <> n|a<>sage<>10/10/30 18:54:41 ID:bzfbPjYg<> >>520
次回更新では
v2c.clipboardText
でクリップボードにコピーされた文字列を取得できるようにします。 <> VIICさん<>sage<>10/10/31 23:03:20 ID:8z0hs+Jv<> //【登録場所】全体、レス表示
//【ラベル】ラベル名など
//【内容】特定のラベルが付いた書き込みをポップアップ
//【コマンド】${SCRIPT:Fr} popupLabel.js ラベル名
//例:自分の書き込みをポップアップ:${SCRIPT:Fr} popupLabel.js 書き込み
//【スクリプト】
// ----- 次の行から -----
var command = v2c.context.argLine;
if ( command != '' ) popupLabel(command);
else v2c.alert( '引数(ラベル名)がありません\n' );

function popupLabel(com) {
var i,max;
var labels = '';
var lab_post = '';
var index = [];

var buf = (v2c.context.thread.localFile.getAbsolutePath()+'').split('.');
buf.length--;
var file = buf.join('.') + '.txt';
var ss = v2c.readLinesFromFile(file);
if ( !ss ) return v2c.alert( 'ラベル情報ファイル取得失敗\n' + file );

for ( i=0; i<ss.length; i++ ) {
if( ss[i].match( /ThreadView\.ResLabels\:=(\d+?)\t(.+)/ ) ) {
max = RegExp.$1;
labels = RegExp.$2 + '';
}
}
if ( !labels || !max ) return v2c.alert( 'ラベル情報取得失敗' );

var label = labels.split('\t');
var reg = new RegExp( '([\\d\\,]+)\\:' + com , '' );
for ( i=0; i<label.length; i++ ) {
if( label[i].match(reg) ) lab_post = RegExp.$1;
}
if ( !lab_post ) return v2c.alert( '該当ラベルなし\nラベル名:' + com );

var num = lab_post.split(',');
for ( i=0; i<num.length; i++ ) {
if( num[i].match( /(\d{1,4})/ ) ) {
if( 0 < parseInt(num[i]) && parseInt(num[i]) < max )
index.push( v2c.context.thread.getRes( parseInt(num[i]) ) );
}
}
v2c.context.setPopupRes(index);
}
// ----- 前の行まで ----- <> VIICさん<>sage<>10/10/31 23:17:27 ID:8z0hs+Jv<> 失礼、ミスがありました

if ( !lab_post ) return v2c.alert( '該当ラベルなし\nラベル名:' + com );

の下に

lab_post = lab_post.replace( /\-/g, ',' );

を追加してください <> n|a<>sage<>10/10/31 23:57:16 ID:eZm3+s+S<> >>522,523
レスラベルを扱う関数を追加したいところですね。
(いつになるかわかりませんが…。) <> VIICさん<>sage<>10/11/02 20:35:59 ID:IGS+3Idb<> >>522,523を修正、機能追加したもの
ttp://www1.axfc.net/uploader/Sc/so/Sc_169441.zip

以下、コマンド例

//【コマンド】${SCRIPT:Fr} popupLabel.js ラベル名1 ラベル名2 ...
//
// 例1:自分の書き込みをポップアップ(ラベル名が「書き込み」の場合)
// ${SCRIPT:Fr} popupLabel.js 書き込み
//
// 例2:指定ラベルの抽出
//「書き込み」ラベルか「デフォルト」ラベルのどちらかが付いたレスをポップアップ
// ${SCRIPT:Fr} popupLabel.js 書き込み デフォルト
//
// 例3:特殊なコマンド
// 全てのラベル付きレスをポップアップ
// ${SCRIPT:Fr} popupLabel.js ALL_LABEL

>>524
あったら便利かもですね、のんびりお待ちしております <> VIICさん<>sage<>10/11/02 20:43:36 ID:IGS+3Idb<> >>525 またミスがあった…orz

何度もすみませんな修正版
ttp://www1.axfc.net/uploader/Sc/so/169445 <> VIICさん<>sage<>10/11/02 21:17:17 ID:XnvjRjqj<> >>526
お疲れ様です。
これ凄く便利ですね
ありがたく使わせていただきます! <> VIICさん<>sage<>10/11/02 21:24:44 ID:IGS+3Idb<> ・・・ごめんなさいまたやってしまいましたごめんなさい

これが最後になるといいな修正版
ttp://www1.axfc.net/uploader/Sc/so/169457.zip
※このスクリプトのポップアップはスレ一覧更新時までラベルの変更等が反映されません <> VIICさん<>sage<>10/11/03 03:07:31 ID:wlnUAFfN<> >279,350,382,427をまとめて、リンククリック時の挙動を変えてみた、以降をコピペ
//【登録場所】 全体、レス表示
//【ラベル】 テレビ実況板の勢いポップアップ
//【内容】 テレビ番組欄@2ch (ttp://epg.2ch.net/tv2chwiki/pukiwiki.php)から”勢い”の部分をポップアップ表示するのみ。
//【コマンド1】 $SCRIPT: tv.js
//【コマンド2】 $SCRIPT: tv.js board //TV局クリックで板表示
//【コマンド3】 $SCRIPT: tv.js thread //TV局クリックで勢いのあるスレ表示
//【スクリプト】
var vcx = v2c.context, option = vcx.args[0]+'', ph = '';
function formSubmitted(u,sm,sd) {
if(sd.indexOf('return=') > -1){
vcx.setPopupHTML(ph); vcx.setRedirectURL(true); vcx.closeOriginalPopup();
}
}
function redirectURL(u) {
var sh = v2c.readURL(u), mr, sr;
if (!sh) {
v2c.alert('ページを取得できませんでした。'); return;
}
if ((u+'').indexOf('ttp://epg.2ch.net/subject.cgi?key=') > -1) {
if(option == 'board'){
mr = sh.match(new RegExp('板のURL\\t<a href="([^>]+?)">','i')); sr = mr[1]; return sr;
} else if(option == 'thread'){
mr = sh.match(new RegExp('勢いのあるスレのURL\\t<a href="([^>]+?)">','i')); sr = mr[1]; return sr;
} else {
mr = sh.match(new RegExp('<pre>([^]+?)\\n+?<xmp>','i')); sr = mr[1];
sr = sr.replace(/<\/a>/ig,'<\/a>??<br>');
vcx.setPopupHTML('<html><body style="margin:10px;">'+sr
+'<form action=""><input type="submit" value="戻る" name="return"></form></body></html>'); // setPopupHTML等
vcx.setTrapFormSubmission(true); return;
}
} else if((u+'').indexOf('ttp://epg.2ch.net/subject.cgi?todat=') > -1) {
mr = sh.match(new RegExp('勢いのあるスレのURL\\t<a href="([^>]+?)">','i')); sr = mr[1]; return sr;
} else if((u+'').indexOf('ttp://epg.2ch.net/tv2chwiki/pukiwiki.php?') > -1){
mr = sh.match(new RegExp('<table[^]+?</table>','i')); sr = mr[0];
sr = sr.replace(/<\/n>/ig,'<\/a>??');
sr = sr.replace(/<div align=\"right\">[^]+?↑edit<\/a><\/div>/ig,'');
vcx.setPopupHTML('<html><body style="margin:10px;">'+sr
+'<form action=""><input type="submit" value="戻る" name="return"></form></body></html>');
vcx.setTrapFormSubmission(true); vcx.setRedirectURL(true); return;
} else {
return u;
}
}
function createPopupString() {
var sh = v2c.readURL('h'+'ttp://epg.2ch.net/tv2chwiki/pukiwiki.php');
if (!sh) {
v2c.alert('ページを取得できませんでした。'); return;
}
var mr = sh.match(new RegExp('<div id="body">([^]+?)">昨日</a>','i'));
if (!mr) {
v2c.alert('抽出できませんでした。'); return;
}
var sr = mr[1];
sr = sr.replace(/<br>/ig,'??<br>');
sr = sr.replace(/href=\"\?/ig, 'href="h'+'ttp://epg.2ch.net/tv2chwiki/pukiwiki.php?');
ph = '<html><body style="margin:5px;">'+sr+'</body></html>';
vcx.setPopupHTML(ph); vcx.setRedirectURL(true);
}
createPopupString(); <> VIICさん<>sage<>10/11/03 21:15:59 ID:wlnUAFfN<> //【登録場所】 全体、レス表示
//【ラベル】 クリップボードのURLを開く
//【内容】 外部からの表示用、クリップボードにある提示板の単一URLを表示する
//※ クリップボードのスレッドが表示されていなければそのスレを表示、表示していればレス番で抽出(ポップアップ)
//【コマンド1】 ${SCRIPT:Tc} ClipboardThreadURL.js //表示または抽出
//【コマンド2】 ${SCRIPT:Tc} ClipboardThreadURL.js popup //表示またはポップアップ
//【スクリプト】
var vcx = v2c.context, res = vcx.res, th = vcx.thread;
function readClipboardURL(){
var rc = th.localResCount;
var su = th.url+"", text = v2c.clipboardText;
var m = text.match(/^(h?ttp:\/\/.+?\/)([+\d,-]*?)$/);
if(!m) {
v2c.alert('URLを取得できませんでした。');
return;
}
var gt = v2c.getThread(m[1]);
if(!gt) {
v2c.alert('スレッドURLを取得できませんでした。');
return;
}
if(su.indexOf(m[1]) < 0 || m[2] == "") {
v2c.openURL(m[1],false);
return;
}
var a = m[2].split(/[,+]/), p = [];
for(var i = 0; i < a.length; i++){
var n = a[i].match(/(\d+)-?(\d*)/);
if(!n) continue;
var start = parseInt(n[1]-1);
var end = parseInt(n[2]-1);
if(start < rc && end < rc) {
a[i] = start;
} else {
a[i] = "";
continue;
}
var diff = end-start;
if(n[2] != "" && diff != 0) {
if(diff < 0) {
start = end;
end = a[i];
a[i] = start;
}
for(var j = start+1; j <= end; j++) {
p.push(j);
}
} else {
continue;
}
}
if(vcx.args[0] == "popup"){
vcx.setPopupResIndex(a.concat(p));
} else {
vcx.setFilteredResIndex(a.concat(p));
}
}
if(res && th) {
readClipboardURL();
} <> VIICさん<>sage<>10/11/03 22:00:45 ID:6JclNO+8<> >>396
恐らく誤記だと思ったので、スクリプトの9行目を以下のように変更してwikiに掲載させてもらいました

//【コマンド】${SCRIPT:FrS} popupTweet.js

//【コマンド】${SCRIPT:FrS} popupTweetAPI.js <> VIICさん<>sage<>10/11/04 00:35:21 ID:97qKeNB6<> V2Cのjarファイルをダウンロード後v2cjar.txtを書き換えるスクリプト
ttp://www1.axfc.net/uploader/File/so/53645
人柱版への更新が面倒だったので作ってみました <> VIICさん<>sage<>10/11/04 01:58:32 ID:ZaYrBIFS<> >>532
乙です、何気に手間だったのでこれはありがたいです
スクリプトの説明文なんですが、以下の三行を修正&追加してwikiに掲載させて頂きました

//【登録場所】URLExec.dat ※外部コマンドへの登録不可※
//【ラベル】人柱版V2Cの更新補助
//【内容】人柱版V2Cのjarファイルをダウンロード後、v2cjar.txtを自動更新 <> 532<>sage<>10/11/04 02:04:44 ID:97qKeNB6<> >>533
ありがとうございます。

>//【登録場所】URLExec.dat ※外部コマンドへの登録不可※
外部コマンドから起動できるようにした方が良い気がしますね。
その内修正させて頂くかもしれません。 <> 532<>sage<>10/11/04 02:43:06 ID:97qKeNB6<> 人柱版V2Cの更新補助スクリプトを更新しました。
外部コマンドからも使用できるようになりました。
ttp://www1.axfc.net/uploader/File/so/53652

追加
//【登録場所】リンク
//【ラベル】人柱版V2Cの更新補助
//【コマンド】${SCRIPT:SFwx} updateV2C.js <> VIICさん<>sage<>10/11/04 09:40:24 ID:3jLDwqn/<> >>529
//【コマンド1】 $SCRIPT: tv.jsのところの$SCRIPTの後の”:”を消しといた方が
紛らわしくないと思います。

うちの環境だけなのかもしれませんが、
そのままコピペしたらエラーがが出て えっ?と思っちゃったので。 <> VIICさん<>sage<>10/11/04 15:10:08 ID:pWBmKlI7<> 消し忘れかな <> VIICさん<>sage<>10/11/04 15:52:37 ID:pWBmKlI7<> また更新補助スクリプトを修正しました。
何度もすいません。
ttp://www1.axfc.net/uploader/File/so/53668 <> VIICさん<>sage<>10/11/04 17:04:05 ID:3jLDwqn/<> >>538
修正お疲れ様です。

スクリプト中に”var fs = java.io.File.separator;”を追加し
18行目を
var newjarpath = v2c.appDir+fs+"launcher"+fs+newjarfn;
26行目を
v2c.writeBytesToFile(new java.io.File(v2c.appDir+fs+"launcher"+fs+newjarfn),newjar);
27行目を
v2c.writeStringToFile(new java.io.File(v2c.appDir+fs+"launcher"+fs+"v2cjar.txt"),newjarfn+"\n");
と変更したら全環境で動作するように思いますがどうでしょう?
うちのLinuxでは上記変更で正常に動作しました。 <> VIICさん<>sage<>10/11/04 17:14:20 ID:pWBmKlI7<> ご指摘ありがとうございます。
JavaScriptもJavaも初心者なんでライブラリの方はサッパリです。。。 <> VIICさん<>sage<>10/11/04 17:26:42 ID:3jLDwqn/<> >>540
有用なスクリプトをありがとうございます。

私もJava、スクリプトともにチンプンカンプンで
>>539が本当にあってるのか心配なのですが... <> VIICさん<>sage<>10/11/04 17:30:25 ID:pWBmKlI7<> >541
僕の環境(win)でも>>539で動いてるので多分大丈夫です。

区切りにfsを使用し、ついでに無駄な部分を削除しました。
ttp://www1.axfc.net/uploader/File/so/53673

URLExec.datのコマンドにパラメータを付けていましたが、v2c.context.linkで取得するようにしたので
ttp://v2c\.s50\.xrea\.com/(V2C_.+\.jar)$&${V2CSCRIPT:SFwx} updateV2C.js
のように変更してください。 <> VIICさん<>sage<>10/11/04 17:41:45 ID:gbduX0Ba<> >>540
いいんじゃない?
ここで晒せば問題ある箇所は誰かが修正してくれるさ
「作ってみたはいいがスクリプト自信ないし自分だけで使おう」とかなると色々残念 <> VIICさん<>sage<>10/11/05 00:58:41 ID:f/LQnVRw<> //【登録場所】 全体、レス表示
//【ラベル】 テレビ実況板の勢いポップアップ
//【内容】 テレビ番組欄@2ch (ttp://epg.2ch.net/tv2chwiki/pukiwiki.php)から”勢い”の部分をポップアップ表示するのみ。
//【コマンド1】 $SCRIPT tv.js
//【コマンド2】 $SCRIPT tv.js board //TV局クリックで板表示
//【コマンド3】 $SCRIPT tv.js thread //TV局クリックで勢いのあるスレ表示
//【スクリプト】
var vcx = v2c.context, option = vcx.args[0]+'', ph = '';
function formSubmitted(u,sm,sd) {
if(sd.indexOf('return=') > -1){
vcx.setPopupHTML(ph); vcx.setRedirectURL(true); vcx.closeOriginalPopup();
}
}
function redirectURL(u) {
var sh = v2c.readURL(u), mr, sr;
if (!sh) {
v2c.alert('ページを取得できませんでした。'); return;
}
if ((u+'').indexOf('ttp://epg.2ch.net/subject.cgi?key=') > -1) {
if(option == 'board'){
mr = sh.match(new RegExp('板のURL\\t<a href="([^>]+?)">','i')); sr = mr[1]; return sr;
} else if(option == 'thread'){
mr = sh.match(new RegExp('勢いのあるスレのURL\\t<a href="([^>]+?)">','i')); sr = mr[1]; return sr;
} else {
mr = sh.match(new RegExp('<pre>([^]+?)\\n+?<xmp>','i')); sr = mr[1];
sr = sr.replace(/<\/a>/ig,'<\/a>&#13;&#10;<br>');
vcx.setPopupHTML('<html><body style="margin:10px;">'+sr
+'<form action=""><input type="submit" value="戻る" name="return"></form></body></html>'); // setPopupHTML等
vcx.setTrapFormSubmission(true); return;
}
} else if((u+'').indexOf('ttp://epg.2ch.net/subject.cgi?todat=') > -1) {
mr = sh.match(new RegExp('勢いのあるスレのURL\\t<a href="([^>]+?)">','i')); sr = mr[1]; return sr;
} else if((u+'').indexOf('ttp://epg.2ch.net/tv2chwiki/pukiwiki.php?') > -1){
mr = sh.match(new RegExp('<table[^]+?</table>','i')); sr = mr[0];
sr = sr.replace(/<\/n>/ig,'<\/a>&#13;&#10;');
sr = sr.replace(/<div align=\"right\">[^]+?↑edit<\/a><\/div>/ig,'');
vcx.setPopupHTML('<html><body style="margin:10px;">'+sr
+'<form action=""><input type="submit" value="戻る" name="return"></form></body></html>');
vcx.setTrapFormSubmission(true); vcx.setRedirectURL(true); return;
} else {
return u;
}
}
function createPopupString() {
var sh = v2c.readURL('h'+'ttp://epg.2ch.net/tv2chwiki/pukiwiki.php');
if (!sh) {
v2c.alert('ページを取得できませんでした。'); return;
}
var mr = sh.match(new RegExp('<div id="body">([^]+?)">昨日</a>','i'));
if (!mr) {
v2c.alert('抽出できませんでした。'); return;
}
var sr = mr[1];
sr = sr.replace(/<br>/ig,'&#13;&#10;<br>');
sr = sr.replace(/href=\"\?/ig, 'href="h'+'ttp://epg.2ch.net/tv2chwiki/pukiwiki.php?');
ph = '<html><body style="margin:5px;">'+sr+'</body></html>';
vcx.setPopupHTML(ph); vcx.setRedirectURL(true);
}
createPopupString(); <> VIICさん<>sage<>10/11/05 01:04:24 ID:f/LQnVRw<> >529を修正して>544に変更しました。

>>536
>537でした。すまぬ…

あとポップアップの右クリコピーの処理で
>349,350をそのまま貼りつけて文字化けしていました。
この場合は「&」は「&amp;」にする必要がありました。

wikiのもこれから修正しておきます。 <> VIICさん<>sage<>10/11/06 19:57:58 ID:HqpcvFmV<> Googleイメージ検索ポップアップの
gimage.jsを改造しました。
ttp://loda.jp/v2cthread/?id=1

変更は、> 301,336,398をまとめて
ページ移動と、画像のみ表示を可能にしたものです。
//【コマンド1】 $SCRIPT gimage.js
//【コマンド2】 $SCRIPT gimage.js 1 //画像のみ

不具合がなければwikiのほうに登録します。 <> VIICさん<>sage<>10/11/06 21:13:19 ID:gAOoYaf+<> >>546
乙です
このスクリプトよく使うんで更新嬉しいです!!
コマンド1も2も不具合なさそうですね <> VIICさん<>sage<>10/11/06 21:19:46 ID:+C6oI778<> >>546
貰いましたよーありがd <> VIICさん<>sage<>10/11/06 22:15:33 ID:lsxy3Zsh<> ランキングポップアップのスクリプトで、このレイアウトのままコピーするには
どのように記述すればよいでしょうか。
ttp://up3.viploader.net/pc/src/vlpc005099.jpg <> VIICさん<>sage<>10/11/06 23:35:27 ID:dzV17tZu<> ツイートポップアップのスクリプトですが
この辺り
ttp://yy61.60.kg/test/read.cgi/v2cj/1266138741/749
ttp://yy61.60.kg/test/read.cgi/v2cj/1266138741/717

に対応するように、URLExec.datの記述を
ttp://twitter\.com/[^/]+/status/\d{11}

ttps?://twitter\.com/(?:#!/)?[^/]+?/status/\d+
変更しようと思いますがこれで問題ないでしょうか?(先頭のhは抜いてます)
正規表現はよくわからないので…

よければスクリプトの中も同等の修正して明日の晩辺りにwiki更新しようと思います。
(自分はこのスクリプトの作者じゃないですが)
その他内容で修正したい点あったら教えてください。 <> VIICさん<><>10/11/07 20:38:35 ID:e//RU/GU<> 2ちゃんねる全板・勢いランキング zenban.js
を改造しました。
ttp://loda.jp/v2cthread/?id=2

変更点は、>280,427,507を整理・修正して
【コマンド2】 $SCRIPT zenban.js copy
で自動コピーされるようにしてみました。
>>549 試してみてください。

また、
スクリプトファイル一覧表示 opjsf.js
に改造しました。
ttp://loda.jp/v2cthread/?id=3

変更点は、>70-71の整理と
【コマンド2】 $SCRIPT opjsf.js 1 //詳細新規タブ
の追加です。ラベル名や登録場所など、新タブでリスト表示します。 <> VIICさん<>sage<>10/11/07 21:08:15 ID:AOyp0Rfg<> >>551
お疲れ様です。
スクリプトファイル一覧表示 opjsf.jsの方ですが
”${SCRIPT:F} opjsf.js”のが良くないでしょうか? <> 551<><>10/11/07 21:35:47 ID:e//RU/GU<> >>552
すみません。ファイル内を訂正しました。
ttp://loda.jp/v2cthread/?id=4

編集パスを入れていなかったので>551のリンクは残ったままになります。
申し訳ありません。 <> VIICさん<>sage<>10/11/07 23:09:13 ID:bJbVbM05<> >>551
ありがとうございます。コピーできました。

本当にわがままで恐縮ですが、できればポップアップ上で右クリコピーで動作するようには
できないでしょうか。(テレビ実況板の勢いポップアップもできれば・・・)
この先、他のスクリプトも導入する可能性があり、右クリコンテキストメニューをあまり増やしたくないというのが理由です。

もし、気が向いたらで結構ですのでご検討お願いいたします。 <> VIICさん<><>10/11/07 23:50:37 ID:e//RU/GU<> >>554
tv.jsは>544かwikiのを使えば右クリコピーで可能なはずです。

zenban.jsについてはテーブル表を使っているのでスクリプトでは対応できないと思います。
ポップアップ表示が表を使わずtv.jsの(縦の列が揃っていない)形でよければ可能かもしれません。 <> VIICさん<>sage<>10/11/08 00:05:43 ID:9WfJQoTA<> ふと思ったんですが、現状で短縮URLって対応してるものはマウスオーバーで転送先が表示されますが
スクリプト+URLExec2.datで同じこと実現できませんかね?

サイトによって違いはあるでしょうけど、そんな大きな違いがあるわけでもないでしょうし
根本のスクリプトさえ作ってしまえば、基本的に
「URLExec2.datとスクリプト内のURL判定箇所に追記する」 程度の修正で新URLに対応できると思いますし
これなら非対応のURLがV2C本体に実装されるのを待つ必要もないですし

ttp://hibari.2ch.net/test/read.cgi/software/1286297818/549,551,552
この要望にも微妙に対応できる気がします。
スクリプト内で転送先URLを判別して、特定サイトだったら指定アプリに渡す とか力技になると思いますけど…

できるとしても自分はそういうの作れないので「できるなら誰か作って欲しい」という他力本願になってしまって申し訳ないのですが <> VIICさん<><>10/11/08 00:09:35 ID:7ByBp9+6<> 一応今気づいたので、

ttp://v2c.s50.xrea.com/contrib/script.html
のhissi.jsについてですが

初回スクリプト起動で読み込むとき、もしくは
script\scdata\hissi_menu.txt を削除した後の再読み込み
時にエラーとなります。

557行目の
hissi.org/menu.html

hissi.org/menu.php
に変更してください。 <> VIICさん<>sage<>10/11/08 00:19:06 ID:0eAb4qqC<> >>556
短縮URLの転送先を直接開く、というスクリプトなら出来そうです。 <> VIICさん<>sage<>10/11/08 00:21:58 ID:9WfJQoTA<> >>558
転送先のURLを取得する というのはできないんでしょうか?
できれば後は
v2c.context.setPopupText(url)
だけだと思うんですが <> VIICさん<>sage<>10/11/08 00:31:33 ID:0eAb4qqC<> >>559
可能です。

>できれば後は
>v2c.context.setPopupText(url)
>だけだと思うんですが
ちょっとやってみます。 <> VIICさん<>sage<>10/11/08 00:48:49 ID:9WfJQoTA<> >>560
まじですか ありがとうございます。 <> VIICさん<>sage<>10/11/08 01:09:38 ID:0eAb4qqC<> 出来ました(一応)
これをURLExec2.datで呼び出してみてください。

var vcx = v2c.context;
var url = vcx.link;
var turl= expandURL(url);
if (!vcx.getPopupOfID(url)) {
vcx.setPopupText(turl);
vcx.setPopupID(url);
}
function expandURL(surl) {
var hr = v2c.createHttpRequest(surl,"");
hr.getContentsAsString();
if (hr.responseCode == 301) {
return expandURL(hr.getResponseHeader("Location"));
} else {
return surl;
}
}

次のサービスで動作確認しました。
bit.ly/t.co/nico.ms <> VIICさん<>sage<>10/11/08 01:42:20 ID:9WfJQoTA<> >>562
どうもありがとうございます!
サンプル
ttp://bit.ly/4sGBjh
ttp://tinyurl.com/yla6hh

適当に他のサービス探してきましたが、ダメなのもあるようです。

ttp://y2u.be/_UWAZDI2U1Y
ttp://go.2ch2.net/u/rABu2eeinB
ttp://ggle.jp/bzzg

ただ、レスポンスコードが302の場合も通すようにすればいけました
処理としてはこれでも問題ないのでしょうか?

このスクリプトなら新しくURLを追加する場合、URLExec2.datの方に追記すればいいだけなのでいいですね <> VIICさん<>sage<>10/11/08 02:32:27 ID:rL+Jd/DL<> >>551
> 2ちゃんねる全板・勢いランキング zenban.js
> を改造しました。

お疲れ様です。
このスクリプトを使って99位まで表示させようとするとエラーが出ます

var mr = sh.match( new RegExp( '<table class="forces" width="100%">([^]+?)<tr class="even"><td class="rank">100位</td>', 'i') );

から旧版の

var mr = sh.match(new RegExp('<table class="forces" width="100%">([^]+?)<td class="rank">100位</td>','i'));

にすると読み込めますどうやら
<tr class="even"> があると取得できないようです

<tr class="even">とは何なんでしょうか?
あと出来れば100位まで表示させたいのですが可能でしょうか? <> VIICさん<><>10/11/08 03:01:35 ID:7ByBp9+6<> >>564
> <tr class="even">とは何なんでしょうか?
ポップアップ表示用の余分な記述を省くための措置です。

> あと出来れば100位まで表示させたいのですが可能でしょうか?
100位に限れば、とりあえず下で可能です。
var mr = sh.match( new RegExp( '<table class="forces" width="100%">([^]+)</table><div class="graphnote">', 'i') );

他の記述も考えてみます。 <> VIICさん<>sage<>10/11/08 03:37:20 ID:rL+Jd/DL<> >>565
おお!聞いてみてよかった・・・
ありがとうございます無事100位まで表示できました! <> VIICさん<><>10/11/08 10:39:36 ID:S1APUjDy<> >>557
僕の環境だと使えないと思って他のスクリプトで代用してました
ありがとうございます <> VIICさん<>sage<>10/11/08 17:08:35 ID:ppg+cWaw<> >>563
大丈夫です。
HTTPの規格についてはよく知らないのですが、HTTP301〜303ならLocatonを取得、でいいかと思います。
- if (hr.responseCode == 301) {
+ if (hr.responseCode >= 301 && 303 >=hr.responseCode) { <> VIICさん<>sage<>10/11/08 19:02:06 ID:Fq0lSPHe<> >>555
>>554です。
ありがとうございました。 <> VIICさん<><>10/11/08 21:48:07 ID:7ByBp9+6<> 2ちゃんねる全板・勢いランキング zenban.js
を改造しました。
ttp://loda.jp/v2cthread/?id=5

変更点は、>551をCSSで多少色付けして、上部にコピーボタンを追加しました。
あとは追加コマンドを2つ追加
//【コマンド3】 $SCRIPT zenban.js 3 //2:50位まで、3:75位まで、4:100位まで、それ以外は25位まで(ただし、3、4は全板のみ有効)
//【コマンド4】 $SCRIPT zenban.js tab //新規タブで表示

また、>231の
レスタブすべてのIDランキング idrank.js
を改造しました。
ttp://loda.jp/v2cthread/?id=6

変更点は、コピーボタンの追加と
初回「input」付きのスクリプト起動で実行ボタンを押したとき、もしくは
script\scdata\idrank.txt を削除した後の同操作時のエラーを修正しました。

問題がなければwikiに登録します。 <> 570<><>10/11/08 22:07:09 ID:7ByBp9+6<> 忘れてました。zenban.jsは板リンクをクリックすると
板別勢いランキング(50位まで)に飛びます。 <> VIICさん<>sage<>10/11/08 23:06:31 ID:Fq0lSPHe<> >>570
すみません、スクリプトとは関係ないのですが、V2C関連スレ用アップローダーのURLを
内部ブラウザで開く方法はありますか ?
外部ブラウザでは開けるのですが面倒で・・。 <> VIICさん<><>10/11/08 23:12:34 ID:7ByBp9+6<> >>572
こちらでは外部コマンドのリンクで
$BROWSER $LINK
で登録して開けてます。 <> VIICさん<>sage<>10/11/08 23:19:32 ID:Fq0lSPHe<> >>573
素早いお答えありがとうございます。
申し訳ありませんが、設定の仕方を教えていただけますでしょうか・・・。 <> VIICさん<><>10/11/08 23:27:46 ID:7ByBp9+6<> >>574
設定>外部コマンド>一般タブ>リンクタブ
で以下を入力
ラベル 適当
コマンド $BROWSER $LINK

追加ボタンを押すです。あとはリンク右クリで選択

内部ブラウザは以下の設定が必要です。
ttp://www39.atwiki.jp/v2cwiki/pages/78.html <> VIICさん<>sage<>10/11/08 23:33:33 ID:Fq0lSPHe<> >>575
できました !
深夜にも関わらずご丁寧にありがとうございました。 <> VIICさん<>sage<>10/11/09 00:43:10 ID:UngnonXq<> >>515
自分の環境では文字化けしてしまうようです
ttp://loda.jp/v2cthread/?id=7.png
フォントのせいかと思ってUIフォントを
MeiryoUIゴシックから、MSPゴシックに変更してみましたが変わらずでした

【V2C】 H20101107 [2.2.0_07] (L-0.6.2:x86)
【Java】 1.6.0_22-b04 (Sun Microsystems Inc.)
【OS】 Windows Vista Service Pack 2 (x86)
【メモリ】 Total(Free)/Max.: 382(223)/469 (Phys. Total/Avail.: 2007/456) [MB] <> VIICさん<>sage<>10/11/09 00:51:09 ID:4c5QvpQx<> >>577
スクリプトファイルの文字コードはUTF-8になっていますか? <> VIICさん<>sage<>10/11/09 00:58:28 ID:UngnonXq<> >>578
まさしくしていませんでした・・・うっかり・・・
申し訳ありませんでした <> VIICさん<>sage<>10/11/09 03:10:17 ID:SS83g9Rw<> >>570
お疲れ様です
一つ質問です。
zenban.jsのコピーボタンを外したいのですがどの行を削除すればいいんでしょうか? <> VIICさん<><>10/11/09 21:07:22 ID:BjtZnqhc<> >>580
下の88,89行目を
sr = '<html><header>' + css + '</header><body style="margin:5px;"><div align="right"><form action="">'
+ '<input type="submit" value="コピー" name="copy"></form></div>' + sr + '</body></html>';

下の1行に変えてください。
sr = '<html><header>' + css + '</header><body style="margin:5px;">' + sr + '</body></html>';

wikiでは>570に削除箇所をコメントに記しておきます。 <> VIICさん<>sage<>10/11/09 21:22:12 ID:SS83g9Rw<> >>581
ありがとうございました! <> VIICさん<><>10/11/10 00:59:48 ID:j0d5OXFB<> >133,135を変更、1行だけだとさびしいので。
適当なので、誤検出しても(このスレとか特に)
スルーか、非表示で対処してください。以降コピペ
//【登録場所】 全体、レス表示
//【ラベル】 テンプレポップアップ
//【内容】 行数とリンクとIDから適当に判定して、テンプレをポップアップします。
//【コマンド】 $SCRIPT popupTemplate.js
//【スクリプト】
// ----- 次の行から -----
var vcx = v2c.context, th = vcx.thread;
var lc = th.localResCount;
function checkSearchID( id, list ) {
for ( var i = list.length-1; i >= 0; i-- ) {
if( list[i] == id ){
return true;
}
}
return false;
}
function addTempID( index_array, list ) {
if( !index_array ) return list;
for ( var i = 0, il = index_array.length; i < il && i < 10; i++ ) {
if ( index_array[i] >= 10 ) break;
var gr = th.getRes( index_array[i] );
var nc = (gr.message + '').split(/\n+?/).length;
var ll = gr.links.length;
if( ll >= 1 || nc >= 15 ) list.push( gr.id + '' );
}
return list;
}
function createPopupString( ) {
var gr = th.getRes(0);
var tid = [ gr.id + '' ];
tid = addTempID( gr.refResIndex, tid );
var a = [0], m = [], rc = [];
for ( var i = 1; i < 10 && i < lc; i++ ) {
gr = th.getRes( i );
if( gr.ng ) continue;
tid = addTempID( gr.refResIndex, tid );
var nc = (gr.message + '').split(/\n+?/).length;
var ll = gr.links.length;
if ( !checkSearchID( gr.id + '', tid ) && ( ll < 1 && nc < 15 )) {
continue;
} else {
if ( ll <= 0 && nc <= 3 ) continue;
}
a.push( gr.index );
}
vcx.setPopupResIndex( a );
//vcx.setFilteredResIndex( a ); //抽出
}
createPopupString();
// ----- 前の行まで ----- <> VIICさん<>sage<>10/11/10 03:05:34 ID:vvEB0Hcz<> >>568
ありがとうございます。
コピーボタンとか転送先のブラクラチェックもできたら便利だと思うのですが…
何もかも他人任せなのはアレなのでなんとか自分でやってみたら
>>570のzenban.jsを丸パクリでいけました
しかし色々とダサいので手を入れてやろうという方はお願いします。

//【登録場所】リンク URLExec
//【ラベル】転送先URLポップアップ
//【内容】転送URLの転送先を調べる。転送URLでない場合は元URLがそのまま表示される
//【コマンド】${SCRIPT:S} PopupTransferURL.js
//【スクリプト】
var vcx = v2c.context;
var url = vcx.link;
var turl= expandURL(url);
var sr = '';
if (!vcx.getPopupOfID(url)) {
var aguse = '<a href="http://www.aguse.jp/?m=w&url=' + turl + '">転送先をaguseでチェック</a>';
var tlink = '→ <a href = "' + turl + '">' + turl + '</a>';
sr = '<html><body style="margin:5px;"><div align="left"><form action="">'
+ '<input type="submit" value="転送先URLコピー" name="copy"></form></div>' + aguse + '<br>' + tlink + '</body></html>';

vcx.setPopupHTML(sr);
vcx.setPopupID(url);
vcx.setTrapFormSubmission( true );
}

function expandURL(surl) {
var hr = v2c.createHttpRequest(surl,"");
hr.getContentsAsString();
//v2c.alert(hr.responseCode + "\n" + hr.getResponseHeader("Location"));
if (hr.responseCode >= 301 && 303 >= hr.responseCode) {
return expandURL(hr.getResponseHeader("Location"));
} else {
return surl;
}
}

function formSubmitted( u, sm, sd ) {
vcx.setClipboardText(turl);
} <> VIICさん<><>10/11/11 00:37:09 ID:INjfvr/M<> みみずんID検索 mmzid.js
を改造しました。
ttp://loda.jp/v2cthread/?id=8

変更点は、>74,75の整理、
追加コマンドを2つ追加。
すみません。デフォルトをレス付きにしました。
リスト化は以下のコマンド2でお願いします。
あと右クリココピー用に>350を追加。

//【コマンド1】 ${SCRIPT:S} mmzid.js //レス表示
//【コマンド2】 ${SCRIPT:S} mmzid.js list //リスト
//【コマンド3】 ${SCRIPT:S} mmzid.js tab //新規タブ表示、無しでポップアップ
//※コマンド2,3は組合せ可能です。 <> VIICさん<><>10/11/12 02:06:42 ID:FXssB/MJ<> getlog.js 改め GetLog_for_V2C.js 変更
ttp://loda.jp/v2cthread/?id=9

元と紛らわしいので名前を変えました。
利用される方は再設定をお願いします。
デフォルトの挙動に変更はありません。
ただステータス表示が変わっています。
他の変更点の詳細はファイル内を見てください。 <> VIICさん<>sage<>10/11/12 18:24:33 ID:ze4OWG84<> >>241
更新版
複数の顔文字を指定できるみたいですね

ttp://pc12.2ch.net/test/read.cgi/software/1266717576/437-438,510
//"V2C\script\system\rescheck.js"(無ければ文字コードUTF-8で作成)を
//メモ帳等のテキストエディタで開いてスクリプトを追加し、V2Cを再起動する。
//【内 容】 ( ・e・)とノノ刀e _l‘)を自動AA判定する。
//【スクリプト】
// ----- 次の行から -----
function checkAA(res,cx) {
var msg=res.message;
if ((msg.indexOf('( ・e・)')>=0)||(msg.indexOf('ノノ刀e _l‘)')>=0)) {
res.setAA(true);
}
}
// ----- 前の行まで ----- <> VIICさん<>sage<>10/11/12 23:27:37 ID:FoPtkDNr<> スクリプトを作ってくれている人のおかげでどんどん便利になるなー。
いつもありがとう。 <> VIICさん<><>10/11/13 02:33:08 ID:WIxKk4NA<> ttp://pc12.2ch.net/test/read.cgi/software/1279551481/794
ttp://hibari.2ch.net/test/read.cgi/software/1280598891/122,180
> 自動的にSystem.gc()を実行したい場合は
> rescheck.jsのendCheck(cx)で実行するか、
> 定期的にSystem.gc()を実行するスクリプトを実行してください。
//【内 容】 スレッド読み込み時に自動的にガベージコレクションを実行する。
//【スクリプト】
// ----- 次の行から -----
function endCheck(th, cx) {
java.lang.System.gc();
}
// ----- 前の行まで ----- <> VIICさん<><>10/11/13 02:35:24 ID:WIxKk4NA<> rescheck.jsについてですがwikiには以下の形でまとめて転載しようかと考えています。
テストはしましたが、あまりrescheck.jsは利用していないので問題が無いことを願います。
少ないので元URLの他に、テスト用で試したものを追加しました。

//【登録場所】 "V2C\script\system\rescheck.js"
//【内容】 rescheck.jsのまとめ
//※beginCheckとendCheckの{}内で、行頭のコメント「//」を、利用する行ごとに解除することで、有効になります。
//【更新日】 2010/11/13
//【元URL】 ttp://yy61.60.kg/test/read.cgi/v2cj/1252074124/241,248,257-258,300,587,589
//【スクリプト】
//以降のレスに... <> 590<><>10/11/13 02:36:20 ID:WIxKk4NA<> // ----- 次の行から -----
function beginCheck( th, cx ) {
var ck = {}, bd = th.board;
// ***** 次の行から利用する行頭の「//」を削除する *****
//cx.setCheckRawText( false ); //テキスト置換関数checkRawTextを実行しない。
//ck.sankake = true; //さんかっけーを△にする。
//ck.no_anchor_1001 = th.bbs.is2ch; //1001のアンカーはリンクしない。

//cx.setCheckAA( false ); //AA判定関数checkAAを実行しない。
//ck.aa_type1 = bd.key.equals( "v2cj" ); //V2Cスクリプトのレスを自動AA判定する。
//ck.aa_type2 = true; //( ・e・)とノノ刀e _l‘)を自動AA判定する。

//cx.setCheckNG( false ); //非表示判定関数checkNGを実行しない。
//ck.ng_res1 = true; //レス1を常に非表示にする。
//ck.ng_kote = bd.key.equals( "software" ) ? bd.anonymousName : null; //ソフ板でn|aさん以外のコテハンを非表示判定する。
// ***** 前の行まで *****
for ( var i in ck ) {
return ck;
}
return false;
}
function checkRawText( res, cx ) {
print('true');
var msg = res.message + '';
var obj = cx.checkObject;
if ( obj.sankakke ) msg = msg.replace( /さんかっけー/g, '△' );
if ( obj.no_anchor_1001 && res.number > 1000 ) {
var sti=res.timeid;
if (sti.startsWith( 'Over ' )) {
msg = msg.replace( />>(\d+)/g, '≫$1' );
}
}
res.setMessage( msg );
}
function checkAA( res, cx ) {
var msg = res.message + '';
var obj = cx.checkObject;
if ( obj.aa_type1 && msg.indexOf( 'function' ) >= 0 ) {
res.setAA(true);
}
if ( obj.aa_type2 && ( msg.indexOf( '( ・e・)' ) >= 0 || msg.indexOf( 'ノノ刀e _l‘)' ) >= 0 ) ) {
res.setAA(true);
}
}
function checkNG( res, cx ) {
var sn = res.name;
var obj = cx.checkObject;
if ( obj.ng_res1 && res.number == 1 ) {
res.setNG( 'レス1' );
}
if ( obj.ng_kote && ( sn != null ) && !sn.startsWith( 'n|a' ) && !sn.equals( obj.ng_kote ) ) {
res.setNG( 'コテハン' );
}
}
function endCheck( th, cx ) {
// ***** 次の行から利用する行頭の「//」を削除する *****
//java.lang.System.gc(); //自動的にガベージコレクションを実行する。
// ***** 前の行まで *****
}
// ----- 前の行まで ----- <> 590-591<><>10/11/13 21:06:01 ID:WIxKk4NA<> すみません。>591に余計な記述がありました。
checkRawText{}内に最初の行に
print('true');
があるためコンソール出力に無意味な表示が出ていました。
利用されてる方はprint('true');を削除でお願いします。

wikiにはrescheck.js20101113a.zipとして変更しておきます。 <> VIICさん<>sage<>10/11/14 17:24:46 ID:ih2JaWEq<> VBScript製なのでこのスレのいうスクリプトではなく
どちらかと言えば外部ツール的なものに分類されるかもしれませんが

・V2Creboot.vbs
>>265
> //コマンド2はscriptフォルダ内にV2Creboot.vbsが必要。
ttp://pc12.2ch.net/test/read.cgi/software/1266717576/23
ttp://www39.atwiki.jp/v2cwiki/pages/55.html
wikiに習って説明文つけたしてます
文字エンコード:Shift-JIS
' 【登録場所】全体 レス表示
' 【ラベル】V2C再起動
' 【内容】V2Cを指定時間後、再起動する
' 【コマンド】:wscript "$SAVEDIR\script\V2Creboot.vbs" "$APPDIR\V2C.exe"
' 【スクリプト】
' ----- 次の行から -----
Set args = Wscript.Arguments
V2CexePath = CHR(34)+args(0)+CHR(34)
Set Shell = CreateObject("WScript.Shell")
Shell.SendKeys "%{F4}"
WScript.Sleep 5000 ' 再起動するまでの時間
Shell.Run(V2CexePath)
Set Shell = Nothing
Set args=Nothing
' ----- 前の行まで -----

・OpenUploader.vbs
ttp://pc11.2ch.net/test/read.cgi/software/1232549012/829,833
【登録場所 】選択テキスト
【ラベル】OpenUploader
【内容】OpenUploader.vbsは、コマンドラインで渡されたワードを、
同じディレクトリ内のUploaderList.xmlのNameノード(<Name>〜</Name>)の正規表現で検索し、
ヒットしたアップローダーをブラウザで開きます。
【コマンド】 wscript "OpenUploader.vbsのパス" "$SELTEXT"
再うp ttp://loda.jp/v2cthread/?id=10 <> VIICさん<>sage<>10/11/14 17:55:46 ID:ih2JaWEq<> 機能的にこのスレでは既出ですが
過去にこういうものがあったという資料的な意味で貼っておきます

・datopen.js,
ttp://pc12.2ch.net/test/read.cgi/software/1252568950/229,278
//【登録場所】リンク
//【ラベル】datopen.js
//【内容】このコマンドをdat落ちスレのURLに対して実行すると、外部サイトからdatを取って来て開く。
//【コマンド】${SCRIPT:FwS} datopen.js $LINK
//【更新日】2009/09/20
//【元URL】http://pc12.2ch.net/test/read.cgi/software/1252568950/229
//【スクリプト】
// ----- 次の行から -----
var url=v2c.context.argLine;
if(url.equals("$LINK"))url=v2c.context.link.url.toString();
var daturl=url.replaceAll("http:/+([^/]+)/.*read[^/]+/([^/]+)/(\\d+).*$","http://dat.tanabota.info/get_dat.php?dat=$1_$2_$3");
var dat=v2c.createHttpRequest(daturl).getContentsAsBytes();
v2c.getThread(url).importDatBytes(dat);

・datopen2.js
//【登録場所】全体 レス表示
//【ラベル】datopen2.js
//【内容】このコマンドをdat落ちスレに対して実行すると、外部サイトからdatを取って来て開く。
//【コマンド】${SCRIPT:FwS} datopen2.js
//【更新日】2009/09/22
//【元URL】http://pc12.2ch.net/test/read.cgi/software/1252568950/278
//【スクリプト】
// ----- 次の行から -----
var url=v2c.context.thread.url.toString();
var daturl=url.replaceAll("http:/+([^/]+)/.*read[^/]+/([^/]+)/(\\d+).*$","http://dat.tanabota.info/get_dat.php?dat=$1_$2_$3");
var dat=v2c.createHttpRequest(daturl).getContentsAsBytes();
v2c.getThread(url).importDatBytes(dat);
// ----- 前の行まで -----
<> VIICさん<>sage<>10/11/14 19:45:30 ID:ih2JaWEq<> >>265のassistIconEdit.jsをavatar用アイコンにも使用できるよう改造しました
他に説明文も若干変更しています。

ttp://loda.jp/v2cthread/?id=11 <> VIICさん<>sage<>10/11/14 22:41:16 ID:ih2JaWEq<> avatar用のアイコンって最初から拡張子付きだったのか・・・
>>595は取り下げます失礼しました
説明文のみ更新したものをwikiに載せることにします <> VIICさん<>sage<>10/11/15 01:53:28 ID:r5U8dftG<> >>194
再UPしてください>< <> VIICさん<><>10/11/16 01:57:22 ID:Av2rfal6<> >>597
wikiにコメント以外そのままを登録しました。うまくいかないスレもありますが現在の仕様です。

【V2C】 T20101115 [2.2.0_10] (L-0.6.2:x86)
【Java】 1.6.0_22-b04 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86)
【メモリ】 Total(Free)/Max.: 193(112)/494 (Phys. Total/Avail.: 2030/1002) [MB]
【不具合内容】
PopupStatusNicovideo.jsの最後のほう vcx.setPopupHTML(nvstream);の後に
vcx.setCloseOnMouseExit(true);
を追加しましたが、

ポップアップ上の外部リンク(内部ブラウザ)をクリックで以下のエラーになりました。
その後は、外部ブラウザから開くようになりました。

Exception in thread "Thread-38" java.lang.NoClassDefFoundError: org/monazilla/v2c/V2CWebBrowser
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at org.monazilla.v2c.V2CFileClassLoader.defineV2CClass(V2CFileClassLoader.java:62)
at org.monazilla.v2c.V2CWebBrowserUtil.loadV2CClass(V2CWebBrowserUtil.java:216)
at org.monazilla.v2c.V2CWebBrowserUtil.checkJDIC(V2CWebBrowserUtil.java:179)
at org.monazilla.v2c.V2CMiscUtil.openLinkWithWebBrowser(V2CMiscUtil.java:2591)
at org.monazilla.v2c.V2CMiscUtil.openLinkWithWebBrowser(V2CMiscUtil.java:2582)
at org.monazilla.v2c.V2CScriptApp$5.run(V2CScriptApp.java:625)
at java.security.AccessController.doPrivileged(Native Method)
at org.monazilla.v2c.V2CScriptApp.browseURL(V2CScriptApp.java:623)
at org.monazilla.v2c.V2CScriptApp.browseURL(V2CScriptApp.java:616)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.Trampoline.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
at sun.org.mozilla.javascript.internal.MemberBox.invoke(Unknown Source)
at sun.org.mozilla.javascript.internal.NativeJavaMethod.call(Unknown Source)
at sun.org.mozilla.javascript.internal.Interpreter.interpretLoop(Unknown Source)
at sun.org.mozilla.javascript.internal.Interpreter.interpret(Unknown Source)
at sun.org.mozilla.javascript.internal.InterpretedFunction.call(Unknown Source)
at sun.org.mozilla.javascript.internal.ContextFactory.doTopCall(Unknown Source)
at sun.org.mozilla.javascript.internal.ScriptRuntime.doTopCall(Unknown Source)
at sun.org.mozilla.javascript.internal.InterpretedFunction.call(Unknown Source)
at com.sun.script.javascript.RhinoScriptEngine.invoke(Unknown Source)
at com.sun.script.javascript.RhinoScriptEngine.invokeFunction(Unknown Source)
at org.monazilla.v2c.V2CEvalScriptAction.run(V2CEvalScriptAction.java:80)
at java.security.AccessController.doPrivileged(Native Method)
at org.monazilla.v2c.V2CEvalScript.doScriptAction(V2CEvalScript.java:73)
at org.monazilla.v2c.V2CEvalScript.run(V2CEvalScript.java:95)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.monazilla.v2c.V2CWebBrowser
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 37 more <> 597<>sage<>10/11/16 02:25:07 ID:B+BuLgnL<> >>598
ありがとうございます! <> VIICさん<>sage<>10/11/16 03:02:13 ID:uazZY6nk<> >>598
自分もなります
ただ、setCloseOnMouseExitは関係ないかも
なくてもなります
setRedirectURLがあると発動するような <> n|a<>sage<>10/11/16 07:00:14 ID:xXaQ7HHc<> >>598,600
すみません、とりあえずスクリプトから内部ブラウザを開く前に
一度内部ブラウザを表示することにより問題を回避してください。 <> VIICさん<><>10/11/17 22:32:52 ID:Oy3bZSHZ<> ThreadURLMemo.js >132の整理・機能追加
ttp://loda.jp/v2cthread/?id=12
引数なしで、テキストファイルにURLを記憶する。

ClipboardThreadURL.js >530の整理・機能追加
ttp://loda.jp/v2cthread/?id=13
引数なしで、クリップボードにURLをコピーする。
引数なしの挙動が元と違います。両者と統一しました。
「(この)レスのURLをコピー」と同じ結果のはず?

基本的に動作は同じです。保存先がクリップボードかテキストファイルかの違いです。
引数追加で、レス番にジャンプか、記憶したスレッドが表示されていれば、抽出かポップアップします。
チェックボックス有りのレス番 > 抽出有りのレス番 > 「レス表示」「全体」で実行したレス番
の優先順位で記憶、コピーします。 <> n|a<>sage<>10/11/18 02:02:22 ID:ALjzsoej<> >>598,600
T20101117で修正できたと思います。 <> VIICさん<>sage<>10/11/20 00:59:43 ID:BkeYeFY1<> ttp://twitter.com/SatoMasahisa/status/5150397081591808
>>373のTweetポップアップのスクリプトでポップアップ表示されず
エラーが出ます
Ver.2.3.0
Windows XP SP3
Java 1.6.0.22
<> VIICさん<>sage<>10/11/20 01:39:42 ID:ScVNANsx<> >>604
その問題は>>550が原因で発生するようです。

wikiのスクリプト一覧のページ(ttp://www39.atwiki.jp/v2cwiki/pages/99.html)にあるものは
>>550さんが修正してくださったようなので、それを利用していただければ大丈夫だと思います。
また、URLExec2.datを利用している場合は、それも>>550のように修正してください。 <> 604<>sage<>10/11/20 01:49:45 ID:BkeYeFY1<> >>605
ありがとうございました
ご指摘のとおりにしたところ正常に機能しました <> VIICさん<><>10/11/21 05:09:39 ID:9rPSfgpk<> 仕様外なのかわからないのですが…
【V2C】 2.3.0 [R20101119] (L-0.6.2:x86)
【Java】 1.6.0_22-b04 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86)
【メモリ】 Total(Free)/Max.: 164(95)/494 (Phys. Total/Avail.: 2030/947) [MB]
【不具合内容】
特定条件でv2c.openURLを複数行うスクリプトを実行すると、コンソールエラーがでるか、固まる。

【再現方法1】
2カラムで片方をタブなしの空にして以下のスクリプトを実行
//【コマンド】 ${SCRIPT:A} test.js
function test() {
v2c.openURL('h'+'ttp://hibari.2ch.net/test/read.cgi/mac/1269276395/', false, true, true);
v2c.openURL('h'+'ttp://hibari.2ch.net/test/read.cgi/software/1289655981/', false, true, true);
v2c.openURL('h'+'ttp://yy61.60.kg/test/read.cgi/v2cj/1252074124/', false, true, true);
v2c.openURL('h'+'ttp://hibari.2ch.net/test/read.cgi/software/1278951097/', false, true, true);
v2c.openURL('h'+'ttp://yy61.60.kg/test/read.cgi/v2cj/1266138741/', false, true, true);
}
test();

→以下のコンソールエラー
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2
at javax.swing.plaf.basic.BasicTabbedPaneUI.paintTabArea(Unknown Source)
at org.monazilla.v2c.V2CCustomTabbedPaneUI.paintTabArea(Unknown Source)
at javax.swing.plaf.basic.BasicTabbedPaneUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at org.monazilla.v2c.V2CCustomTabbedPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
【調査済項目1】
実行したカラムとは別のカラムにスレが表示される場合がある(不定)

【再現方法2】
1カラムでタブなしの状態で起動して同スクリプトを実行で固まる。
コマンドプロンプトからの結果を添付、Found 1 deadlock.が表示
ttp://loda.jp/v2cthread/?id=14(テキスト中身表示されるのか・・・) <> n|a<>sage<>10/11/21 23:55:16 ID:2SJ33zez<> >>607
人柱版 H20101121 ttp://v2c.s50.xrea.com/V2C_H20101121.jar
>実行したカラムとは別のカラムにスレが表示される場合がある(不定)
以外は直ったと思いますがどうでしょうか。 <> VIICさん<><>10/11/22 00:19:03 ID:jUHFrtvQ<> >>608
エラーと固まる現象はなくなっています。
対応ありがとうございます。 <> VIICさん<>sage<>10/11/23 16:04:59 ID:vsTer+NN<> >>546 動かなくなってます。
どなたか修正お願い致します <> VIICさん<><>10/11/23 18:28:32 ID:/FnXdxbq<> >>610
修正した。
ttp://loda.jp/v2cthread/?id=15

ポップアップ外で閉じる機能を追加。
いらない場合は最後の方の
vcx.setCloseOnMouseExit( true );
を削除かコメントアウト。 <> VIICさん<>sage<>10/11/23 19:54:20 ID:adHqeAX2<> >>611
機能追加までしてくれてる〜
ありがd <> VIICさん<>sage<>10/11/23 20:47:56 ID:vsTer+NN<> >>611
ありがとうございました! <> VIICさん<>sage<>10/11/24 17:15:36 ID:WWdHEghL<> 要望です

vcx.setCloseOnMouseExit( true );

これ使う人は使用してるポップアップ系スクリプト全部修正する人が多いと思うのです
一つ一つ確認するのは大変だし(スクリプト知らない人なら尚更)
指定されてない場合のデフォルト値をどこかで設定できるようにならないですかね
これだとスクリプト提供する側の人も
使うかどうかはユーザーに任せることができますし

V2Cの設定にチェックボックスでもあるとうれしいけど、
やるとしたらrescheck.jsみたいな感じでやらせるのが妥当でしょうか <> 604<>sage<>10/11/24 19:04:56 ID:q4zCW7zo<> 人柱版にしたら>>373のTweetポップアップスクリプトで再びエラーが出るようになりました
ttp://twitter.com/SatoMasahisa/status/5150397081591808
Ver.2.3.0_02 H20101121
Windows XP SP3
Java 1.6.0.22 <> VIICさん<>sage<>10/11/24 20:24:11 ID:I/rLxZ5z<> >>615
そのTweetは既に削除されていて、エラーが出るのはそのためですが、
削除されていないものでも正常に表示できないものがありますね(↓等)
ttp://twitter.com/#!/SatoMasahisa/status/5729106113073153
削除済みTweetのエラー処理も含め、時間があるときに対応してみます

誰かかわりにやってくれないかな…(チラッ <> 604<>sage<>10/11/24 20:41:24 ID:q4zCW7zo<> >>616
すいません!Tweetが削除されてるのは盲点でした
表示されないTweetもあるんですね
いろいろお手数かけてすいません、よろしくお願いします <> VIICさん<>sage<>10/11/24 22:06:29 ID:WWdHEghL<> >>616
やってみました
良く解らんまま試行錯誤して修正したので
気に入らないという方は遠慮無く添削してください
ttp://www1.axfc.net/uploader/Sc/so/176957

html版で!#のURLに対応したのと、ページがない場合に一応メッセージが出るはず
ところで、このツイートポップアップは
API版で取得失敗したとき用にhtml用のコードもAPI版の方に書いてあるのですが、
スクリプト内で別スクリプトを呼ぶようにはできないでしょうか

今回の件に限らず、例えば
短縮URLの転送先を調べて(>>584)、転送先がyoutubeだったら
youtubeステータスをポップアップ(>>405)を呼び出す みたいなこともできるかと。

この件に関しては、スクリプト自体は一つにして
引数で機能を切り替えるようにした方がいい気がしますが <> 604<>sage<>10/11/24 23:03:33 ID:q4zCW7zo<> >>618
ありがとうございます!
早速使わせていただきます! <> VIICさん<>sage<>10/11/25 20:57:10 ID:s5g3YbOD<> 不具合というか仕様の確認したいのですが(以降のスクリプトを利用)

1.setCloseOnMouseExit(true);でポップアップに<input>ボタンがあるとボタン内にマウス移動で閉じる。
2.setCloseOnMouseExit(true);で提示版リンクマウスオーバポップアップで元ポップアップが閉じる。
3.setCloseOnMouseExit(true);でポップアップ左端ドラックはゆっくり移動しないと閉じる。
4.redirectURLでは、リンク(test)クリック後、closeOriginalPopup()の有無にかかわらず元ポップアップが閉じる。ヘルプの説明と違う?
5.1、4次第ですが、複数ポップアップした場合でのsetCloseOnMouseExit(true);の扱い(wikiのtv.jsとかどうしようかなと...)

【V2C】 H20101121 [2.3.0_02] (L-0.6.2:x86)
【Java】 1.6.0_22-b04 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86)
【メモリ】 Total(Free)/Max.: 468(384)/494 (Phys. Total/Avail.: 2030/707) [MB]

var vcx = v2c.context, res = vcx.res, th = vcx.thread, h = '';
function formSubmitted(u,sm,sd) {
}
function redirectURL(u) {
if ((u + '').indexOf('example') > -1) {
vcx.setPopupHTML( h );
vcx.setTrapFormSubmission( true );
vcx.setRedirectURL( true );
vcx.setCloseOnMouseExit( true );
//vcx.closeOriginalPopup()
return null;
} else {
return u;
}
}
function test() {
h = '<html><body style="margin:10px;">'
+ '<a href="h'+'ttp://www.example.co.jp">test</a><br>'
+ '<a href="h'+'ttp://hibari.2ch.net/test/read.cgi/software/1289655981/5">Java+Swingによる2chブラウザ V2C_R33 [5]</a><br>'
+ '<form action=""><input type="submit" value="テスト" name="test"></form>'
+ '</body></html>';
vcx.setPopupHTML( h );
vcx.setTrapFormSubmission( true );
vcx.setRedirectURL( true );
vcx.setCloseOnMouseExit( true );
}
test(); <> VIICさん<>sage<>10/11/25 22:16:20 ID:s5g3YbOD<> PopupStatusNicovideo.jsを更新
ttp://loda.jp/v2cthread/?id=16

・ポップアップ外に移動で閉じるようにした。
・設定でタグの後にニコニコ大百科のリンク付加ができるようにした。
詳細は「使い方.txt」で。 <> n|a<>sage<>10/11/26 00:59:30 ID:ScUDgzUj<> >>614,618
検討してみます。
>>620
すみません、こちらのテスト不足でそれらは全てバグです。
仕様上はredirectURL内でもsetCloseOnMouseExit(true)を実行する必要があります。 <> n|a<>sage<>10/11/27 00:07:45 ID:0RLDSBo/<> >>620
1.-3.は次回更新で修正します。
4.については
A)コードを見直してみると、昔からリンクをクリックした時は無条件にポップアップを
 閉じていたようです。
B)今さらこの動作を変更すると混乱が起きると思われるので、Aを仕様として
 V2C使用法を変更しました。(closeOriginalPopupの説明からredirectURLを外した。)
ただ、wikipedia.jsの検索語のリンクをクリックするとポップアップはそのままで
外部ブラウザでwikipediaのページが開いたような記憶があるような無いような…。

5.に関しては、
現在は「各ポップアップに対してsetCloseOnMouseExit(true)を実行する」が仕様ですが
v2c.context.setDefaultCloseOnMouseExit(true)でそのスクリプトのデフォルト値を
設定するという可能性も考えています。 <> VIICさん<>sage<>10/11/27 00:09:51 ID:Wg7KCYsj<> >>622
>検討してみます。
おおおお
ありがとうごぜえますだ。 <> 620<>sage<>10/11/27 06:57:21 ID:i1x2/ztN<> >>622-623
了解しました。
たしかに、使用者に手間かけそうな気はしますね。
setPopupID(s)とgetPopupOfID(s)からうまく調整できないものかとか
考えてみたけど、まとまらない。

tv.jsについては、
setCloseOnMouseExit(true)使用の場合は、
リンククリック時、戻る<input>ボタンを表示しない多段でサブポップアップして
マウス移動で元ポップアップに移動、サブポップアップは閉じる
が出来ればなと思いました。とりあえず今後の修正でいじってみます。 <> VIICさん<>sage<>10/11/27 07:38:35 ID:i1x2/ztN<> 必死チェッカーもどきのポップアップ、hissi.jsで
>557について変更したものを置いておきます。

ttp://loda.jp/v2cthread/?id=17 <> n|a<>sage<>10/11/27 22:11:39 ID:0RLDSBo/<> >>625
人柱版 H20101127 ttp://v2c.s50.xrea.com/V2C_H20101127.jar
・>620の1.-3.を修正した。
・v2c.context.setCloseOnLinkClick(b)
 bがfalseの時setPopupHTML()で表示したポップアップのリンクをクリックした時に
 そのポップアップを閉じない。(デフォルトはtrue。)
 またbがfalseの時redirectURLによるポップアップはマウスポインタの位置に表示される。
・v2c.context.setDefaultCloseOnMouseExit(b)
 setCloseOnMouseExit(b)のデフォルト値を設定する。
 スクリプトのどこかで一度実行しておくと、
 以後同じ値bのsetCloseOnMouseExit(b)を実行する必要が無い。

setCloseOnLinkClick(false)でtv.jsの動作を>625のようにできると思います。 <> 502<>sage<>10/11/28 19:16:29 ID:w61u5DsJ<> >>503
すみません。
遅くなりましたが、有難うございます!!! <> VIICさん<>sage<>10/11/28 19:53:59 ID:WlHSvHMT<> >>627
ありがとうございます。修正も確認しました。

tv.jsを更新
ttp://loda.jp/v2cthread/?id=19

スクリプトファイル内に以下の設定を追加
・カーソルをポップアップ内から外に移動で、そのポップアップを閉じる
・ポップアップのリンクをクリックで、そのポップアップを閉じる

デフォルトの挙動が変わりました。
更新前と同じ挙動は以下です。
var closeOnMouseExit = false;
var closeOnLinkClick = true; <> VIICさん<>sage<>10/11/29 01:29:29 ID:N+fovKTH<> ttp://yy61.60.kg/test/read.cgi/v2cj/1202997178/573-574
ttp://loda.jp/v2cthread/?id=18

転載です
上のスクリプトの説明文を下のように変更してwikiのスクリプト一覧に掲載させて頂きました

//【登録場所】レス表示
//【ラベル】レス代行テンプレ取得
//【内容】書き込みたいスレで実行すると、レス代行テンプレをクリップボードにコピーする
// *レス代行テンプレを書き込み欄へ直接送るには
//  //vcx.insertToPostMessage(message);
//  の文頭の「//」を削除する。
//【コマンド】${SCRIPT:Fr} daikou.js
//【更新日】 2010/11/28
//【元URL】 ttp://yy61.60.kg/test/read.cgi/v2cj/1252074124/630
//【スクリプト】 <> VIICさん<><>10/12/04 08:32:22 ID:SeBdgIdI<> >>621
どなたか心得のある方、PopupStatusYoutube.jsも同様に改良して頂けないでしょうか
・ポップアップ外に移動で閉じるようにした。←これがあるとありがたい <> VIICさん<><>10/12/04 08:48:54 ID:SeBdgIdI<> あとついでに>>629がエラー出て機能しないようです
setDefaultCloseOnMouseExitが見つからないとかなんとか <> 629<>sage<>10/12/04 09:16:57 ID:9JxvuN4E<> >>632
忘れてましたが>629は
>627のH20101127以上が必要です。

>>631も627に更新して
v2c.context.setDefaultCloseOnMouseExit(true);
を何処か空いてる行に入れておけば機能するはず。

wikiの一覧からのはリリースまでは人柱対応版はうpしないか
もしくは分けたほうがいいかもしれん

今は手が出せないので他の方まかせです。 <> VIICさん<><>10/12/04 19:04:46 ID:SeBdgIdI<> >>633
指摘ありがとう
上手くできました <> VIICさん<>sage<>10/12/05 14:03:48 ID:XJ08OtqM<> 【V2C】 T20101204 [2.3.0_05] (L-0.6.2:x86)
【Java】 1.6.0_22-b04 (Sun Microsystems Inc.)
【OS】 Windows Vista Service Pack 2 (x86)
【メモリ】 Total(Free)/Max.: 396(240)/469 (Phys. Total/Avail.: 2007/759) [MB]
【不具合内容】 >>585 みみずんID検索 mmzid.js が使えなくなってしまいました
「ページの取得に失敗しました: 503 Service Temporarily Unavailable」と、ダイアログに表示されます
【再現方法】 mmzid.jsを実行する
【調査済項目】 ネットワークログ
13:59:44.664 http://mimizun.com/search/perl/idsearch.pl
+PostForm Request:
13:59:44.923 http://mimizun.com/search/perl/idsearch.pl
+PostForm Response: HTTP/1.1 503 Service Temporarily Unavailable
13:59:44.923 http://mimizun.com/search/perl/idsearch.pl
+Server returned HTTP response code: 503 for URL: http://mimizun.com/search/perl/idsearch.pl <> VIICさん<>sage<>10/12/05 14:11:02 ID:XyotRB17<> サーバーが混んでて一時的に使えなくなってるだけ。HTTP 503とかでググれ。 <> VIICさん<>sage<>10/12/05 14:13:33 ID:XJ08OtqM<> 一時的にというわけではなさそうです
12月に入ってから何度も試してますがずっとこの調子ですね <> VIICさん<><>10/12/05 14:15:42 ID:XyotRB17<> ブラウザからもmimizunに繋がらないね。混んでるんじゃなくてメンテ中って書いてあるけど。
>みみずんからのお知らせ
>
>サーバメンテナンス中
>
>ごめんなさい。時間をおいて接続しなおしてください。
>
>叱咤激励は、閑古鳥掲示板へ・・・ <> VIICさん<>sage<>10/12/05 14:18:08 ID:XJ08OtqM<> メンテ中でしたか
すみません、ブラウザからのチェックはしてませんでした <> VIICさん<>sage<>10/12/05 20:41:24 ID:Hd8fGjlm<> >>637
サーバー復帰で使えないのを確認しました。

みみずんID検索mmzid.jsの更新
※T20101204以上が必要です。
ttp://loda.jp/v2cthread/?id=20

・通常の表示で取得に失敗していたのを修正。
・ポップアップ表示のときポップアップ外で閉じるようにした。 <> VIICさん<>sage<>10/12/09 21:43:34 ID:XNThdMEx<> >>640
返事が遅くなってすみません
アップロダのメンテが何日か続いてたので・・・
今し方ファイルを確認しました
ありがとうございました! <> VIICさん<>sage<>10/12/10 02:21:33 ID:2Cn9D67f<> 本スレにも書きましたがh抜きしてなかったのでもう一度ここにも書きます

PopupTransferURL.jsで
転送先URLが
ttp://www.tocd.org/news2ch/r.cgi/hato.2ch.net/test/read.cgi/news/1291898737/
となっているのを
ttp://hato.2ch.net/test/read.cgi/news/1291898737/
に置き換えたいのですが何を書き加えればいいですか?
<> VIICさん<>sage<>10/12/11 20:13:32 ID:9qC260O+<> >>642
リダイレクトされないから転送URLって訳でもない気がするし
これならReplaceStr.txtで置き換えたほうが賢い気もするけど
こういうサイト固有の仕様でも対応できるというのがこのスクリプトのコンセプトだと思うので
とりあえずやってみました
ttp://www.tocd.org/news2ch/r.cgi/
の後ろが元URLという事らしいのででそこ抜き出してるだけ
ttp://loda.jp/v2cthread/?id=21

しかもなんか泥臭いやり方になってしまいましたが… <> VIICさん<>sage<>10/12/11 20:21:59 ID:9qC260O+<> あら?
リダイレクトされるね
昨日見たときクッションページが表示されたんだが <> VIICさん<>sage<>10/12/11 20:28:49 ID:9qC260O+<> しかも上げるファイル間違えてるし
とにかく>>643はなかったことに <> n|a<>sage<>10/12/17 00:21:50 ID:Fa9P6COD<> bd.createLocalThread(st,rl)の使用例です。
「全スレッドタブの更新」の後に実行してください。
(注意:未読フラグが全てリセットされます。)

//【登録場所】全体、レス表示
//【ラベル】新着レスまとめ
//【内容】レス表示欄で開いている未読有スレッドの新着レスをまとめたスレッドを作る。
//【コマンド】${SCRIPT:Fw} newresthread.js ローカル板のフォルダ
//【スクリプト】
function createNewResThread() {
var args=v2c.context.args;
if (args.length==0) {
return "板のフォルダが指定されていません。";
}
var bd=v2c.getLocalBoard(args[0]);
if (!bd) {
return "ローカル板を取得できませんでした。";
}
var tha=v2c.resPane.threads;
if (tha.length==0) {
return "レス表示タブが存在しません。";
}
var ra=[];
for (var it=0; it<tha.length; it++) {
var th=tha[it];
if (th.local||!th.unread) {
continue;
}
var nn=th.newResCount;
if (nn==0) {
continue;
}
var nrl=th.localResCount, rt=[], nr=0;
for (var i=0; i<nn; i++) {
var res=th.getRes(nrl-i-1);
if (res&&!res.ng) {
nr++;
rt.push(res);
}
}
if (nr>0) {
rt.push(v2c.createResSeparator("新着 "+nr+": "+th.title));
ra = ra.concat(rt.reverse());
}
th.resetUnread();
}
if (ra.length==0) {
return "新着レスが存在しません。";
}
var th=bd.createLocalThread("新着レス",ra);
if (!th) {
return "ローカルスレッドを作成できませんでした。";
}
th.open(false);
return null;
}
var se=createNewResThread();
if (se) {
v2c.alert(se);
} <> VIICさん<>sage<>10/12/17 01:50:48 ID:dzsuTmQo<> >>646
乙です!いいですねこれ
早速パクって「未読有スレッドの新着レス」→「画像URLが含まれるレス」に置き換えて改造してみました
//【登録場所】全体、レス表示
//【ラベル】画像レスまとめ
//【内容】レス表示欄で開いているスレの、画像が含まれるレスをまとめたスレッドを作る
// スレを横断して画像表示ウィンドウやサムネイルモードで一括表示させたい時にどうぞ
//【コマンド】${SCRIPT:Fw} ImageResThread.js ローカル板のフォルダ名
function createImageResThread() {
var args=v2c.context.args;
if (args.length==0) {
return "板のフォルダが指定されていません。";
}
var bd=v2c.getLocalBoard(args[0]);
if (!bd) {
return "ローカル板を取得できませんでした。";
}
var tha=v2c.resPane.threads;
if (tha.length==0) {
return "レス表示タブが存在しません。";
}
v2c.setStatus("画像レス抽出中...");
var ra=[];
for (var it=0; it<tha.length; it++) {
var th=tha[it];
if (th.local) {
continue;
}
var resCnt =th.localResCount, imgRes=[];
for (var i=0; i<resCnt; i++) {
var res=th.getRes(i);
if (res) {
for (var j=0; j<res.links.length; j++) {
if (res.links[j].type_IMAGE) {
imgRes.push(res);
break;
}
}
}
}
if (imgRes.length>0) {
ra.push(v2c.createResSeparator("画像レス "+imgRes.length+": "+th.title));
ra = ra.concat(imgRes);
}
}
if (ra.length==0) {
return "画像レスが存在しません。";
}
var th=bd.createLocalThread("画像レス抽出",ra);
if (!th) {
return "ローカルスレッドを作成できませんでした。";
}
th.open(false);
return null;
}
var se=createImageResThread();
if (se) {
v2c.alert(se);
} <> VIICさん<>sage<>10/12/17 03:26:06 ID:kpohaLc2<> >>646こっちはできたが
>>647は>ローカルスレッドを作成できませんでした。になります
考えられる原因を教えてください。 <> VIICさん<>sage<>10/12/17 21:43:26 ID:rNU4FHFe<> >>648
>>647の実行時にTwitterのスレッドを開いていたのではないだろうか
もしそれが原因だった場合は、

if (th.local||!th.unread) {

の部分を

if (th.local||th.bbs.twitter||!th.unread) {

と修正すれば行けると思う <> VIICさん<>sage<>10/12/17 21:47:24 ID:rNU4FHFe<> >>648
ごめん間違えた>>649>>646に対する修正です

>>647の修正は、

if (th.local) {

の部分を

if (th.local||th.bbs.twitter) {

としてください <> VIICさん<>sage<>10/12/17 22:19:20 ID:rNU4FHFe<> 特定の単語が含まれるレスを抽出してローカル板に送るスクリプト
対象はアクティブなスレッドのみ

//【登録場所】全体、レス表示、選択テキスト
//【ラベル】選択単語でレス抽出、指定単語でレス抽出
//【内容】選択単語or指定単語が含まれるレスを抽出し、ローカルスレッドを作成する
// レス表示から実行する場合検索ボックスを表示します、正規表現は不可
// 抽出の検索対象は本文のみ
//【コマンド】${SCRIPT:Fw} resExtract.js ローカル板のフォルダ
//【スクリプト】
function createExtractResThread() {
var args=v2c.context.args;
if (args.length==0) {
return "板のフォルダが指定されていません。";
}
var bd=v2c.getLocalBoard(args[0]);
if (!bd) {
return "ローカル板を取得できませんでした。";
}
var th=v2c.context.thread;
if (th.bbs.twitter) {
return "Twitterには対応していません。"
}
var kw = v2c.getSelectedText();
if (!kw) {
kw = v2c.prompt("抽出単語を入力してください","");
if (!kw) {
return "抽出単語がありません。";
}
}
var ra=[];
for (var i=0; i<th.resCount; i++) {
var res=v2c.context.thread.getRes(i);
if (res&&!res.ng) {
if (res.message.indexOf(kw)!=-1) {
ra.push(res);
}
}
}
if (ra.length==0) {
return "検索ワードが含まれるレスはありません。";
}
ra.unshift(v2c.createResSeparator("[抽出レス数:"+ra.length+"] "+th.title));
var newth=bd.createLocalThread("[抽出:"+kw+"] "+th.title,ra);
if (!newth) {
return "ローカルスレッドを作成できませんでした。";
}
newth.open(false);
return null;
}
var se=createExtractResThread();
if (se) {
v2c.alert(se);
} <> 648<>sage<>10/12/18 03:06:54 ID:vA2de4r6<> >>649,650
できました
ありがとうございました <> VIICさん<>sage<>10/12/18 21:03:27 ID:Kl5LUG51<> 要望です
スレ一覧に表示されてるスレッドを纏めて取得できるようにならないでしょうか

th = threadPane.getThread(i);
みたいな感じで取得して
th.filteredResIndex
みたいなのが取得できたら
ログ検索結果を1つのローカルスレでまとめて見られるなぁと思いまして

というかそれがやりたいだけなんで、別にスクリプトじゃなくて
ログ検索結果のタブだけで有効になる
「検索結果全レスをローカルスレッドに送る」みたいなコマンドを付けてもらった方がうれしいかもしれません <> VIICさん<>sage<>10/12/18 21:22:29 ID:UJvUKgC3<> PopupStatusYoutubeで、『リンクの無効化』設定したときポップアップを抑止してほしいです。 <> VIICさん<>sage<>10/12/19 03:03:54 ID:/qkTT2Py<> >>654
URLExec2.dat使ってるって事なんだろうけど
URLExec.datの方は無効化されたリンクには効かないみたいね
確かにURLExec2.datもそっちに合わせたほうがいいと思う <> VIICさん<>sage<>10/12/19 04:31:15 ID:9A86tI2P<> ttp://www.geocities.jp/nanasi_san_exe/
このサイトにある「Boo2008 REDスクリプト」(ttp://www.geocities.jp/nanasi_san_exe/Boo2008_RED.zip)をV2Cのコマンドに登録したいのですが
Jane系と同じように登録しても機能しませんでした。
V2Cでも使えるようにするにはどのように記述すればよいのでしょうか。

因みにJane系のコマンド登録例は
wscript "$BASEPATHboo2008_red.vbs" "$URL" "$NUMBER" "$LOCALDAT"
となっています
参考(JaneStyleで使用可能な特殊コマンド一覧)
ttp://janesoft.net/janestyle/help/option/function/command.html <> VIICさん<>sage<>10/12/19 04:53:16 ID:/qkTT2Py<> これ見て置き換えていけばいけると思う
ttp://v2c.s50.xrea.com/manual/extcommand.html <> VIICさん<>sage<>10/12/19 05:08:19 ID:9A86tI2P<> それは既に見て置き換えて試してみましたが、
実行するとエラーもなにも出ず砂時計が一瞬出るだけでなんの変化もないので
解らずここへ質問へ来ました <> VIICさん<>sage<>10/12/19 06:41:24 ID:9A86tI2P<> 自己解決しました。 <> VIICさん<><>10/12/19 11:09:44 ID:gw1QYxZc<> つーかV2Cに標準装備されてる気がする <> VIICさん<><>10/12/20 07:46:00 ID:HAkEnkIB<> 何なんでしょう、これ?
>タイトル: スクリプトエラー: URLExec
>メッセージ: スクリプトの実行中にエラーが発生しました。
>
>sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot call method "replaceAll" of null (<Unknown source>#188) in <Unknown source> at line number 188 <> VIICさん<>sage<>10/12/20 11:39:16 ID:t9Bc5QXr<> >>661
どのスクリプトで起きたのか?
環境は? <> VIICさん<>sage<>10/12/20 11:56:22 ID:wGGbDRnn<> >>409っぽいな <> VIICさん<>sage<>10/12/20 12:16:47 ID:t9Bc5QXr<> もし>>409でWin以外の環境ならスクリプト中の
”stream = v2c.readFile( v2c.saveDir + '\\script\\PopupStatusYoutube\\template.txt' );”
とかパスを指してる記述を自分の環境にあわせて書き換えればイケると思う。
(\\を\にするとか...) <> VIICさん<>sage<>10/12/20 13:06:33 ID:HAkEnkIB<> >(\\を\にするとか...)
\\t→\tとかにしたらタブ文字になるんじゃ? <> VIICさん<>sage<>10/12/20 19:27:01 ID:YiFAxLuP<> var fs = java.io.File.separator;
stream = v2c.readFile( v2c.saveDir + fs+'script'+fs+'PopupStatusYoutube'+fs+'template.txt' );

と言う感じでどうだろう <> VIICさん<>sage<>10/12/23 09:38:07 ID:ZXAL40xj<> ツイートのポップアップはありますが
ユーザーのポップアップがないようなので作ってみました
やたらごちゃごちゃした物になってしまいましたが…
自信ないので添削歓迎します

こういうURLで
ttp://twitter.com/masason
こんな感じになります
ttp://loda.jp/v2cthread/?id=32

一応ツイートのURLを渡したらツイートをポップアップするようにもしています
既存のと同じだと意味ないので情報を増やしてみました
ttp://loda.jp/v2cthread/?id=33


>>396のと同じようにpopupTweetフォルダにテンプレートとなるファイルを入れるようになってます
既に入れてる人はフォルダ上書きすることになりますが
同じファイルはないので大丈夫のはずです
また、既存のテンプレートファイルも使えるようになってるはずです
API使ってるので150アクセス/hの制限を受けます

//【登録場所】リンク、URLExec
//【ラベル】ツイートのポップアップ
//【内容】ツイート、ツイッターユーザーのポップアップ
// ツイートかユーザーかはURLから自動的に判別
//【コマンド1】${SCRIPT:Fr} popupTwitterInfo.js
//【コマンド2】${SCRIPT:Fr} popupTwitterInfo.js テンプレートのファイル名 (popupTweetフォルダ内の任意のテンプレートファイルを指定)
ttp://loda.jp/v2cthread/?id=34.zip <> VIICさん<>sage<>10/12/23 13:55:12 ID:XR1Iud4h<> >>667
使ってみたけどTwitterのタイムラインにあるメンションにも反応しちゃう <> VIICさん<>sage<>10/12/23 14:47:47 ID:uNEg4ns2<> >>668
URLExec2.datが反応しちゃうって事ですかね
仕様上無理な気がします
スクリプト上でV2C側へ処理をそのままスルーできたりすればいいのですが

今ある材料でなんとかしようとすると、
無理やり同じ処理をスクリプト上で実現するという手くらいしか思いつきません
元々の処理はタイムラインにある対象者のツイートを抽出してるんですかね
ちょっとやってみたけどtwitterのレスオブジェクトからアカウント名は取得できないっぽい?

なんかいいアイデアないですかね <> VIICさん<>sage<>10/12/25 02:59:54 ID:O/8wxUx0<> //【登録場所】全体、レス表示
//【ラベル】ソートしてまとめ
//【内容】スレを時間でソートしてまとめたスレッドを新タブで作る。
//※レス数とマシンスペック応じて表示に時間がかかります。
//※ローカルスレで実行するとそのスレをソート、それ以外はレス表示欄にあるローカルとツイッター以外のスレッドをすべてまとめてソート
//【コマンド】${SCRIPT:Fw} sortResThread.js ローカル板のフォルダ
//【スクリプト】
function createSortResThread() {
var args=v2c.context.args;
if (args.length==0) {
return "板のフォルダが指定されていません。";
}
var bd=v2c.getLocalBoard(args[0]);
if (!bd) {
return "ローカル板を取得できませんでした。";
}
var th=v2c.context.thread, all=false;
if (th.local) {
var tha=[th];
} else {
var tha=v2c.resPane.threads;
all=true;
}
if (tha.length==0) {
return "レス表示タブが存在しません。";
}
var ra=[];
for (var it=0; it<tha.length; it++) {
th=tha[it];
if (all&&(th.local||th.bbs.twitter)) {
continue;
}
var nrl=th.localResCount, rt=[], nr=0;
for (var i=0; i<nrl; i++) {
var res=th.getRes(i);
v2c.println(th.title+' '+i);
if(!res || !res.time) continue;
rt.push(res);
nr++;
}
if (nr>0) ra=ra.concat(rt);
}
v2c.println(ra[0].message);
ra.sort(function(a,b){return a.time-b.time;});
if (all) {
var title="全スレッドまとめ";
} else {
var title=tha[0].title+"[ソート]";
}
var th=bd.createLocalThread(title,ra);
if (!th) {
return "ローカルスレッドを作成できませんでした。";
}
th.open(false);
return null;
}
var se=createSortResThread();
if (se) {
v2c.alert(se);
} <> VIICさん<>sage<>10/12/25 03:00:46 ID:O/8wxUx0<> ↑使用で一部の時間をまとめて削除したいです。
チェックボックスに「レスを削除」を要望します。 <> VIICさん<>sage<>10/12/25 03:06:04 ID:O/8wxUx0<> すみません。
>670のv2c.println〜がある36と43行目は削除してください。
通常では必要ないです。 <> VIICさん<>sage<>10/12/26 14:58:24 ID:gGF3N56p<> >>667
ttp://twitter.com/masasonに対して実行しましたが自分の環境ではエラーが出てしまいます
下はエラーダイアログの内容です

sun.org.mozilla.javascript.internal.WrappedException: Wrapped java,security.AccessControlException: access denied (java.net.SocketPermission api.twitter.com:80 connect,resolve) (<Unknown source>#289) in <Unknown source> at line number 289 <> VIICさん<>sage<>10/12/26 15:02:11 ID:e8DZ25lD<> :S? <> VIICさん<>sage<>10/12/26 15:12:53 ID:gGF3N56p<> >>674
コマンドを
${SCRIPT:FrS} popupTwitterInfo.js
にしたら使えました
ddです <> 667<>sage<>10/12/26 15:31:27 ID:XjKQs/TD<> ごめんなさい
>>667
${SCRIPT:FrS} popupTwitterInfo.js
でないとだめですね
中に入ってるURLExec2.dat用のメモはそうなってるので
そっちはコピペでOKのはずです <> VIICさん<>sage<>10/12/26 21:51:50 ID:e6lYun4P<> リンク右クリックに「リンクをプレイヤーで開く」という外部コマンドを登録したいのですが
「"C:\Program Files\GesPlayer\GesPlayer.exe" "$LINK"」

GesPlayerはmmsにしか対応していないので
「http」で書かれたリンクを「mms」に変換してプレイヤーに送る、ということはできないでしょうか? <> VIICさん<>sage<>10/12/26 23:28:02 ID:fiP3AGm0<> var link = "mms"+v2c.context.link.substring(4);
v2c.exec("C:\\Program Files\\GesPlayer\\GesPlayer.exe "+link);
試してないけど <> VIICさん<>sage<>10/12/26 23:29:09 ID:fiP3AGm0<> v2c.exec("\"C:\\Program Files\\GesPlayer\\GesPlayer.exe\" "+link);
ミスった <> VIICさん<>sage<>10/12/27 00:30:27 ID:pRGA1uAo<> >>679
ありがとうございます
[外部コマンド]→[一般]→[リンク]のコマンドに

var link = "mms"+v2c.context.link.substring(4); v2c.exec("\"C:\\Program Files\\GesPlayer\\GesPlayer.exe\" "+link);

var link = "mms"+v2c.context.link.substring(4);v2c.exec("\"C:\\Program Files\\GesPlayer\\GesPlayer.exe\" "+link);

を追加したのですが、どちらのリンク右クリック「リンクをプレイヤーで開く」を実行しても
GesPlayerが起動しませんでした・・・GesPlayerの場所は合っていると思うのですが <> VIICさん<>sage<>10/12/27 00:37:11 ID:u0Zqyl19<> >>680
V2C/script/gesplayer.jsとかに保存して
${SCRIPT:Fx} gesplayer.js <> VIICさん<>sage<>10/12/27 01:42:06 ID:pRGA1uAo<> >>681
たびたび、ありがとうございます
V2C/scriptフォルダ内にgesplayer.js(JScript Script File)を作ってその中に

var link = "mms"+v2c.context.link.substring(4);
v2c.exec("\"C:\\Program Files\\GesPlayer\\GesPlayer.exe\" "+link);

と記入、そのあと[外部コマンド]→[一般]→[リンク]のコマンドに

${SCRIPT:Fx} gesplayer.js

を登録し、リンク右クリック「リンクをプレイヤーで開く」を実行したら下記のスクリプトエラーが・・・

sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function substring. (<Unkcown source>#1) in <Unknown source> at line number 1 <> VIICさん<>sage<>10/12/27 01:48:12 ID:u0Zqyl19<> すまん、substringをsliceにしてくれ
var link = "mms"+v2c.context.link.slice(4);
v2c.exec("\"C:\\Program Files\\GesPlayer\\GesPlayer.exe\" "+link); <> VIICさん<>sage<>10/12/27 01:52:16 ID:u0Zqyl19<> ああまた間違えた
var link = "mms"+String(v2c.context.link).slice(4);
v2c.exec("\"C:\\Program Files\\GesPlayer\\GesPlayer.exe\" "+link);
頭飛んでるみたいだからもう寝るよ… <> VIICさん<>sage<>10/12/27 02:24:14 ID:pRGA1uAo<> >>684
できたーーー!!!
ありがとうございます、おやすみなさい <> VIICさん<>sage<>10/12/29 00:46:09 ID:VhDmsUvO<> >671についてありがとうございます。

「このレスを追加(元レスURL付)」のようにmessageの後に
スクリプトで文字を追加してローカルに送れるものを要望しておきます。

文字制限がないので、レスの後に被参照ツリーを追加して送れないかなと思いました。
ポップアップが出なかったり、インデントが全角スペースな
ツリー表示になるかとは思いますが。 <> VIICさん<><>11/01/14 14:30:34 ID:hjOtgbO/<> 以前ここでいただいたGoogleイメージ検索ポップアップ(=gimage.js)がエラーを吐く様になりました。
他にで同様の症状の方いますか?
これはGoogleの仕様変更によるものでしょうか?
なんかブラウザをフルスクリーンにしてると検索結果がセンタリングされる様になってますが。
<> VIICさん<>sage<>11/01/14 14:56:50 ID:SMDEmDG7<> ( ゚Д゚)・∵. グフッ!! <> VIICさん<>sage<>11/01/14 21:36:36 ID:JcG2RHhb<> 普通のGoogle検索のレイアウトが真ん中よりになってる
イメージ検索の方もなにかしらの仕様変更があったのは間違いなさそうすなあ <> VIICさん<>sage<>11/01/15 05:52:26 ID:9ohhy3qH<> >>687
gimage.jsの仕様変更に対応
ttp://loda.jp/v2cthread/?id=37 <> VIICさん<><>11/01/15 20:27:13 ID:ogeKKh1m<> >>690
ありがとうございます。機能しました。 <> VIICさん<>sage<>11/01/23 17:23:46 ID:+mHLRBZE<> rescheck.js内でもうちょっと色々出来るようになりませんかね?

今んとこやってみたいことは
・新着に特定の名前やレスがあれば音を鳴らす(ラベルも貼れたら最高)
・dat落ち&ログ未取得ならgetlog起動(スクリプト側でどうやってdat落ち判定すべきか思いつかないけど)


基本的にユーザーが自分で呼び出すしかスクリプトは実行できないので
スレ読み込みのタイミングで起動できたら色々面白いことできるんじゃ、と思ったのが発端です <> VIICさん<>sage<>11/01/28 03:32:21 ID:OdTCRySz<> //【登録場所】 全体、レス表示、選択テキスト
//【ラベル】 新しいスタイルを作成
//【内容】 レス表示スタイルの「出発点」の形式で、指定したフォルダ名で登録
//【コマンド】 ${SCRIPT:Fwr} newStyle.js
//【スクリプト】
// ----- 次の行から -----
//設定
var defaultName = 'NEW_STYLE'; //フォルダ名ダイアログのデフォルト名。
var setResCheckBox = false; //レス番の左にチェックボックスを置く。
var setStyleName = false; //スタイル名の登録ダイアログ表示
var openFolder = false; //実行後、フォルダを開く
var openFile = false; //実行後、style.txtを開く
var filer_dir = '"C:\\Windows\\explorer.exe"'; //ファイル管理ソフトディレクトリ
var editor_dir = '"C:\\Windows\\notepad.exe"' //テキスト編集ソフトディレクトリ
//設定ここまで
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, "");
}
function getStyle() {
var fn = v2c.prompt('フォルダ名を入力\n※拡張子なし、半角英数字かアンダースコア', defaultName);
if ( !fn.match( /^[a-zA-Z0-9_]+$/ ) ) {
v2c.alert( '無効な名前です。' );
return;
}
var ss = v2c.context.selText;
if ( !ss||(ss.length==0) ) {
var sh = v2c.readURL( 'h'+'ttp://v2c.s50.xrea.com/manual/resstyle.html' );
if ( !sh ) {
v2c.alert( 'ページを取得できませんでした。' );
return;
}
if ( !sh.match( new RegExp( '<h3><u>出発点</u></h3>[^]+?<pre>([^]*?)</pre>', 'i' ) ) ) {
v2c.alert( '抽出できませんでした。' );
return;
}
ss = RegExp.$1.trim();
}
ss = ss + '';
var fs = java.io.File.separator;
var fd = v2c.saveDir + fs + 'style' + fs + fn + fs;
var txt = fd+'style.txt';
var cecd = 'utf-8';
if ( v2c.readFile(txt) ) {
if ( !v2c.confirm('既に同じスタイルが存在します。上書きしますか?') ) return;
}
if ( setStyleName ) {
var sn = v2c.prompt('スタイル名を入力\n', fn);
ss = '<PROPERTY>\nName=' + sn + '\n</PROPERTY>\n\n' + ss;
}
ss = ss.replace(/</gi,'<').replace(/>/gi,'>');
if ( setResCheckBox ) {
ss = ss.replace(/(<NUMBER>)/gi,'<RESCHECKBOX>$1');
}
var as = ss.split('\n');
v2c.writeLinesToFile(txt,as,cecd);
if ( openFolder ) v2c.exec( filer_dir + ' "' + fd + '"' );
if ( openFile ) v2c.exec( editor_dir + ' "' + txt + '"' );
}
getStyle();
// ----- 前の行まで ----- <> 646<>sage<>11/01/29 13:20:28 ID:o4XxkYPN<> 50行目修正
ss = ss.replace(/</gi,'<').replace(/>/gi,'>');

ss = ss.replace(/&lt;/gi,'<').replace(/&gt;/gi,'>');
に変更してください。

あと、スクリプト実行後、レス表示スタイルの再読み込みをする機能を要望します。 <> VIICさん<>sage<>11/01/31 09:53:18 ID:20Yw8yu1<> rescheck.jsが"レス1を常に非表示にする"以外動作しない・・・
"V2C\script\system\rescheck.js"に作成してコメントアウトするだけですよね?

一応試した手順としては
//削除→上書き保存→rescheck.jsの再読み込み→スレッドの再取得です
【V2C】 2.4.3 [R20110129] (L-0.6.2:x86)
【Java】 1.6.0_23-b05 (Sun Microsystems Inc.)
【OS】 Windows Vista Service Pack 2 (x86)
【メモリ】 Total(Free)/Max.: 137(80)/494 (Phys. Total/Avail.: 3069/1203) [MB] <> n|a<>sage<>11/02/01 00:32:21 ID:Ofa3nqJ7<> >>695
rescheck.js再読み込みとスレッド再取得の時にステータスバーにエラーが出ていないか
チェックしてください。 <> VIICさん<>sage<>11/02/01 01:37:20 ID:1uYheTeg<> >>696
レスありがとうございます

基本的には
"rescheck.jsを起動しました。"
しか表示されず正常に読み込まれてると思いますが
何かの拍子に
"rescheck.jsは現在使用されているため終了できません。"
と出る場合もあります。

その場合V2C再起動してもう一度やると
"rescheck.jsを起動しました。"
と出ます。

なので読み込み自体は問題なさそうです? <> VIICさん<>sage<>11/02/01 02:04:05 ID:OZ2lioNf<> >>697
wikiのファイルの場合、思いつくのは、
//cx.setCheckRawText( false );
//cx.setCheckAA( false );
//cx.setCheckNG( false );
これらの行頭の//を削除して有効にしている場合、
関連するタイプはすべて実行されません。 <> VIICさん<>sage<>11/02/01 02:26:21 ID:1uYheTeg<> >>698
あーーー!チェック外れてました・・・
何やってんだ・・・
ほんとすいませんorz

ですが以前使えないのは
ck.sankake = true; //さんかっけーを△にする。

です。
こちら使えてる方いますでしょうか? <> VIICさん<>sage<>11/02/01 04:33:16 ID:8HLMcPOR<> >>699
タイプミスしてるっぽい

ck.sankake = true; //さんかっけーを△にする。

ck.sankakke = true; //さんかっけーを△にする。

で使えると思う <> VIICさん<>sage<>11/02/01 04:42:04 ID:1uYheTeg<> 無事使えるようになりました
ありがとうございます!

wikiの方確認してみたところ元ファイル自体が
ck.sankake = true;
になっているので修正お願いします

修正の仕方がわからないorz <> VIICさん<>sage<>11/02/01 20:00:32 ID:OZ2lioNf<> >>701
差し替えました。

思いつきですが、wikiのrescheck.jsに一個加えました。実況の「短縮モード」用
【登録場所】 "V2C\script\system\rescheck.js"
【内容】実況系板で名前が吹出しの場合、レスの最初に加える。 <> VIICさん<>sage<>11/02/02 05:08:34 ID:0vsPLX59<> 遠回りだし、実装されれば削除ということで、rescheck.jsに追加。
ttp://loda.jp/v2cthread/?id=38
新着レスにキーワードがあれば音を鳴らす方法

rescheck.jsでキーワード(デフォはV2CかJava)があれば名前の最後に【KW】を追加するようにする。
→設定→名前KWで「【KW】$」を追加、「RE」をチェック、新着音設定
→新着レスにキーワードがあれば音が鳴る。

あと、キーワード変えるには36行目の「(V2C|Java)」を正規表現で変更するとかしてください。 <> VIICさん<>sage<>11/02/02 05:24:13 ID:0vsPLX59<> ああでも>703は、キーワードのレスを名前でポップアップできるしお得な点はあるかも。 <> VIICさん<>sage<>11/02/02 06:14:30 ID:q+m8GQ77<> >>703
なるほど!
アイデア次第でなんとかなるもんですなぁ
これだとメール欄に対しても使えるし <> n|a<>sage<>11/02/03 00:47:56 ID:8/yornE0<> >>703-5
この方法は思いつきませんでした…。
次回更新では本文キーワードに新着音を設定できるようにします。 <> VIICさん<>sage<>11/02/03 10:57:22 ID:WOptsmmY<> ユーザーの自由度が高いっていいよね <> VIICさん<>sage<>11/02/05 00:08:37 ID:w2RUthH4<> Excite翻訳ポップアップのスクリプト使えない・・・俺だけ?
//【コマンド2】 $SCRIPT excite_translation.js jaen でいいんだよね? <> VIICさん<>sage<>11/02/05 01:10:10 ID:g7OnS/FN<> >>708
どうもスクリプトに限らず今までのURLでは訳文に変換されないようです。
外部コマンドに登録されているデフォの例でも同じでした。

ttp://www.excite.co.jp/world/english/?wb_lp=ENJA&before=test
これだと訳文が表示されない。 <> VIICさん<>sage<>11/02/05 10:02:56 ID:JbpFa6xG<> 質問です
ttp://hibari.2ch.net/test/read.cgi/software/1296484053/123,168

にて、AAのみの抽出はスクリプトで出来るとのことですが
具体的にどうすればいいのでしょうか?
>>1を見るとcheckAA内のres.setAAで設定する事ができるのは分かったのですが
肝心の取得の方が分かりませんでした。
<> VIICさん<>sage<>11/02/05 19:34:40 ID:g7OnS/FN<> //【登録場所】 全体、レス表示
//【ラベル】 AA抽出
//【内容】 AAを判定(半角スペースと全角スペースの連続)して抽出
//【コマンド1】 $SCRIPT filterAA.js
//【コマンド2】 $SCRIPT filterAnon.js n //AA以外を抽出
//【スクリプト】
var vcx = v2c.context, th = vcx.thread;
function filterAA() {
var lrc = th.localResCount, msg = '', lis = [], res;
var n = vcx.args[0] == 'n';
for( var i = 0; i < lrc; i++ ) {
res = th.getRes( i )
if( !res ) continue;
msg = res.message + '';
if( ( msg.search(/(  |  )/) == -1 ) == n ) {
lis.push( res.index );
}
}
vcx.setFilteredResIndex( lis );
}
if( th ) filterAA(); <> VIICさん<>sage<>11/02/05 19:35:20 ID:g7OnS/FN<> //【登録場所】 全体、レス表示
//【ラベル】 名無し抽出
//【内容】 登録した名無しも含めて抽出
//【コマンド1】 $SCRIPT filterAnon.js
//【コマンド2】 $SCRIPT filterAnon.js n //名無し以外を抽出
//【スクリプト】
var vcx = v2c.context, th = vcx.thread;
function filterAA() {
var lrc = th.localResCount, name = '', lis = [], res;
var n = vcx.args[0] == 'n';
var anon = th.board.allAnonymousName;
var al = anon.length;
for( var i = 0; i < lrc; i++ ) {
res = th.getRes( i )
if( !res ) continue;
name = res.name + '';
for( var j = 0; j < al; j++) {
if( name == anon[ j ] ) {
if( !n ) lis.push( res.index );
break;
}
}
if( ( j == al ) && n ) lis.push( res.index );
}
vcx.setFilteredResIndex( lis );
}
if( th ) filterAA(); <> VIICさん<>sage<>11/02/05 19:40:23 ID:g7OnS/FN<> >>710
>711のAA判定(15行目の/〜/内)は任意でお願いします。 <> VIICさん<>sage<>11/02/05 19:44:46 ID:JbpFa6xG<> どうもです
V2C内で保持してるAA判定を取得できるのかと思ってたのですが無理なんですね <> VIICさん<>sage<>11/02/05 20:00:08 ID:g7OnS/FN<> >>714
V2Cでの判定方法も似たようなものだった記憶が。
あとは、手動でAA判定したのは、ログのtxtにある
ThreadView.AAResに登録されているので追加することは可能です。

>712は
ttp://hibari.2ch.net/test/read.cgi/software/1296484053/175
からですが、規制でレスは無理でした。 <> VIICさん<>sage<>11/02/05 20:38:22 ID:BO/otf20<> >>715
向こうでも言ったけどありがとう <> VIICさん<>sage<>11/02/11 09:55:46 ID:yO8RbhCT<> >>708
excite_translation.jsを更新しました。
※ コマンドを変更する必要があります。
 「$SCRIPT」を、「${SCRIPT:S}」に変更しないとエラーになります。
ttp://loda.jp/v2cthread/?id=41

・Excite翻訳の仕様変更に対応した。
 (v2c.readURL(u)を、v2c.createHttpRequest(u,d)に変更)
・デフォルトで、カーソルのポップアップ外でポップアップを閉じるようにした。
・他、中身を少し整理 <> VIICさん<>sage<>11/02/11 16:23:24 ID:jhfmDBs2<> >>717
お手数おかけしてすいまんせん。出来ました、ありがとうございます! <> VIICさん<>sage<>11/02/15 21:32:42 ID:IzKSk+7c<> //【登録場所】 レス表示
//【ラベル】 このレスをデフォ名無しでコピー
//【内容】 名前をデフォルト名無しにして「このレスをコピー」
//【コマンド】 $SCRIPT copyWithDefAnon.js
//【スクリプト】
var vcx = v2c.context;
var res = vcx.res;
var a = [
res.number,
' :' + vcx.thread.board.anonymousName,
' :' + res.date,
' ID:' + res.id,
'\n' + res.message
];
vcx.setClipboardText(a.join(''));//コピー
//vcx.insertToPostMessage(a.join(''));//書き込み欄に送る <> VIICさん<>sage<>11/02/15 22:18:50 ID:rfuNFEM/<> 起動したとき、自動で板一覧の更新ができるようなスクリプトなんぞできませんでしょうか。 <> VIICさん<>sage<>11/02/16 02:31:43 ID:XwWZFqwG<> >>720
基本的にはV2Cを操作するような事はスクリプトでは無理だと思う
スレッドや外部サイトの情報を取得するとか
ローカルのファイルを弄るとかそういうのは置いといて
V2C本体に対して行える操作は

ポップアップ
絞り込み抽出
書き込み欄弄る
datインポート
ローカルスレ立てる
スレを開く
未読状態のリセット
ステータスバーに文字列表示
rescheck.js等での設定変更

くらい?

〇〇したら自動でスクリプト走らせるってのも
URLExec.datとかrescheck.js等の特殊なものしかできない? <> VIICさん<><>11/02/16 02:53:41 ID:V8XVVT7k<> JaneViewみたいにスレッド読み込みとかタブ切り替え等のイベントをトリガーとしてスクリプト実行できたら夢がひろがりんぐ <> VIICさん<>sage<>11/02/16 03:02:34 ID:XwWZFqwG<> >>722
スレ読み込み時は一応endCheckとかあるから
これでなんか面白いことできないかな? <> VIICさん<>sage<>11/02/16 18:53:07 ID:dk6NbuAr<> >>721
なるほど理解しました。
無知ゆえの突拍子もない要望にレスしていただきありがとうございました。 <> VIICさん<>sage<>11/02/16 18:59:38 ID:mFe8U75B<> v2c.browseURLExtって${SCRIPT:F}にしないと駄目だったっけ? <> n|a<>sage<>11/02/16 23:36:22 ID:CyfGMAUX<> >>722,723
スレッド更新の方は検討中です。
>>725
ファイル読み込みのパーミッションが必要な問題は次回更新で修正します。
よく考えると、v2c.browseURL()にはネットワーク接続のパーミッションを
必須にした方がいいような気がしてきました。
次回更新ではv2c.browseURL()にネットワーク接続のパーミッションが必要になるかもしれません。 <> VIICさん<>sage<>11/02/16 23:54:42 ID:mFe8U75B<> >>726
レスありがとうございます。
了解しました。 <> VIICさん<>sage<>11/02/18 14:43:09 ID:IZeSnCD6<> ttp://hibari.2ch.net/test/read.cgi/software/1296484053/667をUPした者です。
>>593を参考に引数をとるように変更しました。

'【登録場所】 全体
'【ラベル】  再起動
'【内容】 V2Cを終了し完了を待って再起動する
'【コマンド】 wscript "$SAVEDIR\script\V2Creboot.vbs" "$APPDIR\V2C.exe"
Option Explicit

Private Const PROC_QUERY = "select * from Win32_Process where Name='V2C.EXE'"
Private Const TARGETPC = "winmgmts:"
Private Const INTERVAL = 1000

Dim WshShell
Dim args
Dim objWMI, objProc
Dim V2CexePath

Set WshShell = WScript.CreateObject("WScript.Shell")

' 終了
WshShell.SendKeys "%{F4}"

' 終了待ち
Set objWMI = GetObject(TARGETPC)
Do
Set objProc = objWMI.ExecQuery(PROC_QUERY)
WScript.Sleep INTERVAL
Loop While objProc.Count > 0

' 起動
Set args = Wscript.Arguments
V2CexePath = CHR(34)+args(0)+CHR(34)
Call WshShell.Run(V2CexePath, 1, False)

Set WshShell = Nothing
Set objWMI = Nothing
Set args = Nothing
Set objProc = Nothing <> 725<>sage<>11/02/18 15:15:36 ID:IZeSnCD6<> >>726
【V2C】 T20110217 [2.5.0_02] (L-0.6.0:x86)
【Java】 1.6.0_24-b07 (Sun Microsystems Inc.)
お疲れさまです。
${SCRIPT:S}で動作しましたm(_ _)m <> VIICさん<>sage<>11/02/18 16:40:18 ID:sf+GQGiM<> >>728
これは>>593 と比べて何か変わったのでしょうか?
こっちの方が綺麗に書いてるってことですか? <> VIICさん<>sage<>11/02/18 16:43:49 ID:QgMkeOc1<> >>651を改造してID抽出を作ったのですが、ローカル板のスレッドにレスの追加(もしくはスレッド削除)を行う命令はないのでしょうか?
何をやりたいかと言うと、ID抽出を行ったさいに既に同一IDでの抽出結果がローカル板にスレッドとして存在した場合は、そのスレッドに同一IDの新規レスを追加したいのです(ローカル板のスレッド削除後に新規スレッドとして追加でも可です
おそらく現状でもfileIOを使って直接datファイル操作すればできると思うのですが、それはちょっと避けたいなぁと思ってます <> VIICさん<>sage<>11/02/18 16:52:19 ID:XUhANOUu<> >>730

>>593
V2C終了して5秒待ってから再起動

>>728
V2Cがプロセスから消えたら再起動(たぶん)

下の方が無駄時間削れると思うけど
こっちはx86版でしか使えないような気がするがどうなんだろ
V2C.exeの部分をV2C_x64.exeに書き換えたらいけるのかな?
select * from Win32_Process
ここら辺も修正必要そうだけど <> VIICさん<>sage<>11/02/18 19:53:51 ID:sf+GQGiM<> >>732
詳しくありがとー
ところで前に聞いたような気がするけどたしか
"APPDIR"より"SAVEDIR"使ったほうがいいみたいな話じゃなかったっけ? <> VIICさん<>sage<>11/02/18 20:56:59 ID:XUhANOUu<> >>733
V2C.exeが置いてあるのはAPPDIR <> VIICさん<>sage<>11/02/18 20:58:27 ID:XUhANOUu<> 途中で送信してしまった

>>733
V2C.exeが置いてあるのはAPPDIRじゃないっけ?
俺もなんかその流れ覚えあるけど
あれはkakikomi.txtを外部コマンドから開くときのパス指定で
APPDIR使ってたからじゃなかった? <> VIICさん<>sage<>11/02/18 21:00:26 ID:sf+GQGiM<> あったあった
ttp://pc12.2ch.net/test/read.cgi/software/1277558611/151
> kakikomi.txtは$APPDIR(V2Cのランチャーのフォルダ)ではなく
>$SAVEDIR(V2C保存用フォルダ)に存在するので$SAVEDIRを使ってください。
>(多くの場合これらは一致していますが…。)

らしいから$SAVEDIRで良いってことだよね?
リロードしてよかったぜw <> VIICさん<>sage<>11/02/18 21:28:26 ID:XUhANOUu<> >>736
関係あるのはV2C.exeがある場所なので
そのレスは関係ないと思うのだが <> n|a<>sage<>11/02/18 23:23:24 ID:9H2uSHT5<> >>737
わかりにくくてすみません、「V2Cのランチャー」というのは V2C.exe のことです…。 <> VIICさん<>sage<>11/02/18 23:38:53 ID:XUhANOUu<> >>738
ああああすいません
言い方悪かったです

>>737
「kakikomi.txtは保存用フォルダにある」 ってのは今関係ないですよね

という事が言いたかっただけであります <> VIICさん<>sage<>11/02/19 15:47:57 ID:IKN8oYlq<> どなたか教えて頂けると助かります
良く間違いを訂正する場合
× ほにゃらら
○ ほげほげ

みたいにするんですが
テキスト選択でスクリプト実行すると
× 選択した文字

の状態で書き込み欄に入力されるスクリプトを作りたいのです

>>240 を参考に
v2c.context.insertToPostMessage('× '+v2c.context.selText.replaceAll('\n(?!$)','\n○ '));
みたいなのを作りましたが駄目でした…

説明下手で分かりづらいと思うので纏めると

× 選択した文字

(両記号の後半角スペースあり、○の行までの2行のみ。改行はしなくていいです)

× 選択した文字
○ 選択した文字
この2種類を教えて頂けると助かります <> VIICさん<>sage<>11/02/19 16:02:05 ID:pUKz8T/D<> 試してないけど

× 選択した文字


v2c.context.insertToPostMessage('× '+v2c.context.selText+'\n○ ');

× 選択した文字
○ 選択した文字

v2c.context.insertToPostMessage('× '+v2c.context.selText+'\n○ '+v2c.context.selText);

\nが改行で + が文字の連結
これだけでいけると思う <> VIICさん<>sage<>11/02/19 16:55:56 ID:IKN8oYlq<> >>741
完璧です!
replaceAllを消さなきゃ駄目だったのか…
勉強になりました
ありがとうございました! <> VIICさん<><>11/02/20 22:27:17 ID:Q7qws9/5<> 質問です。

ttp://hibari.2ch.net/test/read.cgi/software/1296484053/879
>同階層にフォルダつくってそこに移動する みたいなこともできるんですかね?
>Javaとか全く知らないんですが、
>とりあえずJPopupMenuの仕様を覗いてみたけどさっぱり理解できず

これ書いた本人です。
適当に調べてやったら一応表面上は求める動作になったんですが、
これで問題ないですかね?
>ポップアップメニューコンポーネントを直接操作するので使用には十分注意してください。
との事なのでちょっと心配で。

やりたい事は、
ポップアップメニューに"2軍メニュー"という項目を作成し、
使用頻度の少ないメニューをそこへ追いやる
です。

function popupMenuCreated(pm,sn) {
if (sn=='ThreadPanel') {
var moveMenuList = ['マーカーを引いたレスを抽出','参照&被参照レスを抽出','リンクを含むレスを抽出','全てを選択'];
var secondMenu = new javax.swing.JMenu('2軍メニュー');
pm.add(secondMenu );
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var mi=pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
var miText = mi.getText();
for ( var j=0; j<moveMenuList.length; j++) {
if (miText.startsWith(moveMenuList[j])) {
secondMenu.add(mi);
break;
}
}
}
}
} <> VIICさん<><>11/02/20 22:30:57 ID:Q7qws9/5<> ああー、すでに本スレにn|a殿が書いてくれてましたね… <> VIICさん<>sage<>11/02/20 23:20:05 ID:QN5h1Gcr<> // レス表示ポップアップメニュー削除
function popupMenuCreated(pm,sn) {
if (sn=='ThreadPanel') {
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var mi=pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
if (mi.getText().startsWith('フォルダに直接登録') || mi.getText().startsWith('全てを選択') || mi.getText().startsWith('オートリロード') || mi.getText().startsWith('オートスクロール')
|| mi.getText().startsWith('リンクを含むレスを抽出') || mi.getText().startsWith('全てを選択')) {
pm.remove(i);
}
}
}

// レス表示ポップアップメニュー抽出系の項目を下位メニューにまとめる
var ie=-1;
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var mi=pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
var sl=mi.getText();
if (ie<0) {
if (sl.startsWith('抽出ダイアログ')) {
ie = i;
}
} else {
if (sl.startsWith('参照&被参照レスを抽出')) {
var m=new javax.swing.JMenu('抽出');
for (var j=ie; j>=i; j--) {
m.insert(pm.getComponent(j),0);
}
pm.insert(m,i);
break;
}
}
}
}


// 選択テキストポップアップメニュー 削除
function popupMenuCreated(pm,sn) {
if (sn=='SelText') {
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var mi=pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
if (mi.getText().startsWith('Web検索') || mi.getText().startsWith('Twitter検索') || mi.getText().startsWith('コピー')
|| mi.getText().startsWith('スレタイ・URLとコピー') || mi.getText().startsWith('抽出ポップアップ') || mi.getText().startsWith('選択部分にレス')) {
pm.remove(i);
}
}
}
} <> VIICさん<>sage<>11/02/20 23:20:37 ID:QN5h1Gcr<> 重複しているのかこれだと選択テキストポップアップメニューしか反映されないです
分かるかた教えてください
functionは一つのみなんですか?

あと任意の場所のセパレータを消すにはどうすればいいんでしょうか?
このケースで言うと選択テキストの'リンクとして開く'と'レスの抽出'の間のセパレータを一本消したいです
良ければ回答お願いします <> VIICさん<><>11/02/21 00:02:55 ID:rS5RYxN/<> >>746
function popupMenuCreated(pm,sn) はひとつだけである必要があるはずです
細かく見てない上に自分も今色々と勉強しながらやってる最中で
適切な回答ではないかもしれまんせんが…

複数のポップアップメニューを弄る場合は

function popupMenuCreated(pm,sn) {
if (sn=='ThreadPanel') {
// レス表示ポップアップメニューの編集コード
} else if (sn=='SelText') {
// 選択テキストポップアップメニューの編集コード
}
}

のようにifで切り分ければいいと思います。
この場合、>>745の後半のfunctionの中身を
「選択テキストの編集コード」のとこにいれてやればいいかと

セパレータは決め打ちするしかないんじゃないですかね…
「n個目のセパレータ」とか「**の次にあるセパレータ」とか
おっしゃる例だと、ループの中で一番最初に見つかったセパレータを消せばいいのでは

if (sn=='SelText') {
var isDeleted = false;
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var mi=pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
if (!isDeleted) {
pm.remove(i);
isDeleted = true;
}
continue;
}
if (mi.getText().startsWith('Web検索') || mi.getText().startsWith('Twitter検索') || mi.getText().startsWith('コピー')
|| mi.getText().startsWith('スレタイ・URLとコピー') || mi.getText().startsWith('抽出ポップアップ') || mi.getText().startsWith('選択部分にレス')) {
pm.remove(i);
}
}
}


みたいな感じで <> n|a<>sage<>11/02/21 00:08:46 ID:rYL2oj1H<> >>745-747
関数
function removeRedundantSeparator(pm) {
var bs0=true;
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var bs=!(pm.getComponent(i) instanceof javax.swing.JMenuItem);
if (bs&&bs0) {
pm.remove(i);
}
bs0 = bs;
}
if ((pm.getComponentCount()>0)&&!(pm.getComponent(0) instanceof javax.swing.JMenuItem)) {
pm.remove(0);
}
}
を定義して、最後に
removeRedundantSeparator(pm);
を実行すると余分なセパレータを削除することができます。 <> VIICさん<>sage<>11/02/21 00:29:35 ID:ydcijmNN<> >>747,748
お馬鹿な私でも何とかできました
丁寧に教えてくださってありがとうございました!
もっと勉強します… <> VIICさん<><>11/02/21 00:33:04 ID:rS5RYxN/<> >>748
なるほど勉強になります <> VIICさん<><>11/02/22 00:32:48 ID:xt3/HjDt<> >>726
>スレッド更新の方は検討中です。
wktk

これ実装されたとしてどんなことできるようになりますかね
なんかあんまりいいアイデアが思いつかない

読み込み時dat落ちしてたらgetlogするってのは確かに便利そうだ <> VIICさん<>sage<>11/02/24 02:52:00 ID:IXVH+3/i<> ポップアップメニュー削除スクリプトの質問はここでいいでしょうか?
他の項目はこの書式(sn==と削除項目を変更するだけ)で削除出来るんですが
何故か選択範囲のリンクポップアップメニューだけ削除出来ないので答えて頂けると助かります

// 選択範囲のリンクポップアップメニュー 削除
else if (sn=='SelTextLink') {
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var mi=pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
if (mi.getText().startsWith('画像をダウンロード')
|| mi.getText().startsWith('コピー')
|| mi.getText().startsWith('無効化')
|| mi.getText().startsWith('NGファイルに追加')
|| mi.getText().startsWith('履歴を削除')
|| mi.getText().startsWith('キャッシュを保護 ')
|| mi.getText().startsWith('キャッシュ保護を解除 ')
|| mi.getText().startsWith('画像を直接保存')
|| mi.getText().startsWith('フォルダに直接保存 ')
|| mi.getText().startsWith('サムネイル画像を消去 ')
|| mi.getText().startsWith('サムネイル画像のキャッシュを削除')) {
pm.remove(i);
removeRedundantSeparator(pm);
}
}
} <> VIICさん<>sage<>11/02/24 04:54:11 ID:PCyDcmp0<> >>752
SelTextLinkがどのポップアップメニューのことかよく分からないんだけど、752で上がってる項目から選択範囲のテキスト(SelText)で表示されるポップアップの一番下にある"選択範囲のリンク"サブメニュー用のスクリプトならこれで良いかと
752が望むポップアップ用でなければ無視してください

function popupMenuCreated(pm,sn) {
if (sn=='SelText') {
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var mi=pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
if (mi.getText()=='選択範囲のリンク') {
for (var j=mi.getItemCount()-1; j>=0; j--) {
var mj=mi.getItem(j);
if ((mj instanceof javax.swing.JMenuItem)) {
if (mj.getText().startsWith('画像をダウンロード')
|| mj.getText().startsWith('コピー')
|| mj.getText().startsWith('無効化')
|| mj.getText().startsWith('NGファイルに追加')
|| mj.getText().startsWith('履歴を削除')
|| mj.getText().startsWith('キャッシュを保護')
|| mj.getText().startsWith('キャッシュ保護を解除')
|| mj.getText().startsWith('画像を直接保存')
|| mj.getText().startsWith('フォルダに直接保存')
|| mj.getText().startsWith('サムネイル画像を消去')
|| mj.getText().startsWith('サムネイル画像のキャッシュを削除')) {
mi.remove(j);
}
}
}
var bs0=true;
for (var j=mi.getItemCount()-1; j>=0; j--) {
var bs=!(mi.getItem(j) instanceof javax.swing.JMenuItem);
if (bs&&bs0) {
mi.remove(j);
}
bs0 = bs;
}
if ((mi.getItemCount()>0)&&!(mi.getItem(0) instanceof javax.swing.JMenuItem)) {
mi.remove(0);
}
}
}
}
} <> VIICさん<>sage<>11/02/24 15:25:01 ID:PCyDcmp0<> アクセス可能なポップアップメニューの表示・非表示を切り替えるmenu.js
詳しくない説明は、menu.jsの上のほうにコメントとして書いてます
ファイルサイズが大きくなったのでzipです

ttp://www1.axfc.net/uploader/Sc/so/208465 <> VIICさん<>sage<>11/02/24 15:40:08 ID:IXVH+3/i<> >>753
出来ました
ほんとにありがとうございます!

>>754
凄そうですねGJです <> VIICさん<>sage<>11/02/24 16:32:06 ID:F6Jx4WiA<> >>731
俺もこれ気になる。
スクリプトでレスの追加とか書き換えとかできたらスクラップ作業が簡単になるし <> VIICさん<>sage<>11/02/24 19:11:52 ID:ywdholnh<> 試してないから予想で書くけど
SelTextLink ってshift+右クリで直接開く「選択範囲のリンク」メニューじゃないかな <> VIICさん<>sage<>11/02/24 19:21:46 ID:IXVH+3/i<> >>757
なるほど勘違いしてたみたいです
すっきりしました!thx

あと展開についての例がもっとほしいです
子メニューの中の1つだけ展開したり2つだけ展開したり全部展開したりをしたくて

レス番号ポップアップメニューの「設定」の最初のセパレータまでの項目を展開する例
を参考にしてますがお手上げですorz <> VIICさん<>sage<>11/02/24 20:42:55 ID:ywdholnh<> >>758
自分もV2Cからこういうの弄りだしたクチで
javaとかよく知らないんだけど

例えば>>753の場合で、各項目を消すんじゃなくてルートに移動させたい場合
pmがルートのメニュー(選択テキストのメニュー)なので
mi.remove(i);

pm.insert(mj,i);
に書き換えてやればこれだけで移動になる模様
お尻に付け加えるだけでいいなら
pm.add(mj);
でもいい

基本的に、移動したい項目(この例だとmj)を
移動先のメニューオブジェクトにinsertしてやればいいだけみたい
決め打ちで移動させるんならサンプルの方法は忘れて
全部このやり方で行けるんじゃないかな

全部決め打ちってのは泥臭いやり方な気がするけど
メニューが再構成されるのはmenu.js再読込後の一度だけっぽいので
処理速度的な観点では気にしなくてよさそう <> VIICさん<>sage<>11/02/24 21:45:09 ID:IXVH+3/i<> >>759
出来ました!
ありがとうございました!

java難しい… <> VIICさん<>sage<>11/02/25 01:05:45 ID:PIlRW7W2<> 色々参考にしましたが手詰まったので質問させてもらいます
レス番号ポップアップメニューレスのチェックの
このレスをチェックとここからチェックのみ上に移動して他の子メニュー削除するにはどうすればいいんでしょうか?

このスレ参考にこんな風にしましたが駄目でした

//△レス番このレスをチェックとここからチェックを上に
if (sn=='ResNum') {
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var mi=pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
if (mi.getText()=='レスのチェック') {
for (var j=mi.getItemCount()-1; j>=0; j--) {
var mj=mi.getItem(j);
if ((mj instanceof javax.swing.JMenuItem)) {
if (mj.getText().startsWith('このレスをチェック')
|| mj.getText().startsWith('ここからチェック')) {
pm.insert(mj,i);
}
}
}
var bs0=true;
for (var j=mi.getItemCount()-1; j>=0; j--) {
var bs=!(mi.getItem(j) instanceof javax.swing.JMenuItem);
if (bs&&bs0) {
mi.remove(j);
}
bs0 = bs;
}
if ((mi.getItemCount()>0)&&!(mi.getItem(0) instanceof javax.swing.JMenuItem)) {
mi.remove(0);
}
}
}
}

//△レス番メニュー削除
if (sn=='ResNum') {
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var mi=pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
if (mi.getText().startsWith('このレスにレス')
|| mi.getText().startsWith('このレスにレス [本文引用]')
|| mi.getText().startsWith('本文をコピー')
|| mi.getText().startsWith('本文を引用してコピー')
|| mi.getText().startsWith('レスのチェック')
|| mi.getText().startsWith('ここから')
|| mi.getText().startsWith('被参照数ランキング')
|| mi.getText().startsWith('2ch荒らし報告')) {
pm.remove(i);
removeRedundantSeparator(pm);
}
}
}

あと選択テキストポップアップメニューのNGFiles.txt以下の二つを上に移動させる方法も良ければ教えてください… <> VIICさん<><>11/02/25 02:51:06 ID:nk2yZcpq<> >>761
実際にこれ入れてやってみたけどうまく動いてるんじゃ?
と思ったけど、
「ここからチェック」が
後半の削除ループの「ここから」に引っかかって消えるね
そういうことかな

元のコードをあまり崩さないようにループひとつにまとめてみた
一箇所pm.remove(i)→pm.remove(mi)にしてるけどやってることは同じ(はず)
エロい人添削きぼん

if (sn == 'ResNum') {
for ( var i = pm.getComponentCount() - 1; i >= 0; i--) {
var mi = pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
if (mi.getText().startsWith('このレスにレス')
|| mi.getText().startsWith('このレスにレス [本文引用]')
|| mi.getText().startsWith('本文をコピー')
|| mi.getText().startsWith('本文を引用してコピー')
//|| mi.getText().startsWith('レスのチェック') //下に移動
|| mi.getText().startsWith('ここから')
|| mi.getText().startsWith('被参照数ランキング')
|| mi.getText().startsWith('2ch荒らし報告')) {
pm.remove(i);
} else if (mi.getText().startsWith('レスのチェック')) { //これだけ中身を移動してから削除
for ( var j = mi.getItemCount() - 1; j >= 0; j--) {
var mj = mi.getItem(j);
if ((mj instanceof javax.swing.JMenuItem)) {
if (mj.getText().startsWith('このレスをチェック')
|| mj.getText().startsWith('ここからチェック')) {
pm.insert(mj, i);
}
}
}
pm.remove(mi);
}
}
removeRedundantSeparator(pm);
}


>選択テキストポップアップメニューのNGFiles.txt
これ見当たらないんだけどどれのことだろう <> VIICさん<><>11/02/25 03:06:25 ID:nk2yZcpq<> ごめん
NGFiles.txtがあると出てくるコマンドみたいだ
やってみたけど確かに引っかからない
わかんないや <> VIICさん<>sage<>11/02/25 03:06:49 ID:PIlRW7W2<> >>762
ありがとうございます
出来ました

NGFiles.txtが作成されてないと出ないので作成してもらえると出ると思います <> VIICさん<>sage<>11/02/25 03:43:06 ID:g/TnvXv6<> >>761
NGFiles.txtとそのサブメニューはpmに格納されてないので、menu.jsが実行されたあとにポップアップメニューに追加されてるんじゃないのかな?よく分からないけど。

function popupMenuCreated(pm,sn) {
if (sn=='ResNum') {
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var mi=pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
if (mi.getText()=='レスのチェック') {
for (var j=mi.getItemCount()-1; j>=0; j--) {
var mj=mi.getItem(j);
if (!(mj instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
if (mj.getText().startsWith('ここからチェック')) {
// 'ここからチェック'を'レスのチェックの下に追加'
// 'レスのチェック'は意味がないので削除
pm.remove(i);
pm.insert(mj, i);
break;
}
}
} else if (mi.getText().startsWith('このレスにレス')
|| mi.getText().startsWith('このレスにレス[本文引用]')
|| mi.getText().startsWith('本文をコピー')
|| mi.getText().startsWith('本文を引用してコピー')
|| mi.getText().startsWith('ここから')
|| mi.getText().startsWith('被参照数ランキング')
|| mi.getText().startsWith('2ch荒らし報告')) {
pm.remove(i);
}
}
removeRedundantSeparator(pm);
}
}
// 余分なセパレータを削除
function removeRedundantSeparator(pm) {
var bs0=true;
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var bs=!(pm.getComponent(i) instanceof javax.swing.JMenuItem);
if (bs&&bs0) {
pm.remove(i);
}
bs0 = bs;
}
if ((pm.getComponentCount()>0)&&!(pm.getComponent(0) instanceof javax.swing.JMenuItem)) {
pm.remove(0);
}
} <> VIICさん<>sage<>11/02/25 03:45:52 ID:g/TnvXv6<> ああ、かぶった・・・ついでに>>765の8行目は↓でした
if (mi.getText().startsWith('レスのチェック')) { <> VIICさん<>sage<>11/02/25 03:59:55 ID:PIlRW7W2<> >>766
記述が違うので勉強になります
ありがとうございます!
ちなみに>>762 とコード的にはどちらのがスマートとかってありますか? <> VIICさん<>sage<>11/02/25 23:41:25 ID:RH5vJ+gF<> ニコニコがスクリプトエラーになりますね
仕様変更でもあったのかな
ポップアップは出ます <> VIICさん<>sage<>11/02/26 00:04:59 ID:xXab7q8N<> URLExec.dat がおかしいみたいです <> VIICさん<>sage<>11/02/26 02:00:40 ID:SG+Y92Q7<> >>768
自分はwikiから拾ってきたもので特に問題なく使えてますが <> VIICさん<>sage<>11/02/26 08:30:54 ID:xXab7q8N<> >>770
ポップアップのリンクをクリックして外部ブラウザでニコ動開きますか?
スクリプトエラー:URLExec が出ます。
同じく、wikiから拾ったもの使用です。 <> VIICさん<>sage<>11/02/26 09:11:02 ID:xXab7q8N<> エラーダイアログ
sun.org.mozilla.javascript.internal.WrappedException: Wrapped java,security.AccessControlException: access denied (java.net.SocketPermission www.nicovideo.jp:80 connect,resolve) (<Unknown source>#15) in <Unknown source> at line number 15 <> VIICさん<>sage<>11/02/26 09:33:45 ID:pgDCwSxh<> >>768-772
V2Cの仕様が変わりました。
> T20110217の変更点
> ・[スクリプト] v2c.browseURL(u),v2c.browseURLExt(u)に外部へのネットワーク接続の許可を必須にした。

URLExec.dat内の
${V2CSCRIPT:Fr}

${V2CSCRIPT:SFr}
に変更でなおると思います。 <> VIICさん<>sage<>11/02/26 09:36:08 ID:pgDCwSxh<> あと修正後
ファイル→再読み込み→URLExec.dat他も忘れずに <> VIICさん<>sage<>11/02/26 09:37:03 ID:zF8c/eng<> >>773
横d <> VIICさん<>sage<>11/02/26 12:31:25 ID:BvOt42so<> >>759
>>760
JavaとJavaScriptは全く別物
混同したりJavaをJavaScriptの略称のつもりで使ったりしてはいけない <> VIICさん<>sage<>11/02/26 12:33:04 ID:xXab7q8N<> >>773
ありがとうございます。
しかし、
URLExec.dat内に ${V2CSCRIPT:Fr} がありません

YouTubeやツイッターは問題なくポップアップのリンクから外部ブラウザが開くのですが
ニコ動だけは上記の>>772のエラーが出るのです <> VIICさん<>sage<>11/02/26 12:43:37 ID:3rOe274D<> >>777
URLExec2.datじゃないか?
ttp://www39.atwiki.jp/v2cwiki/pages/189.html
スクリプトもいれ直してみては?俺はそれで使えるようになった
ttp://www39.atwiki.jp/v2cwiki/pages/99.html <> VIICさん<>sage<>11/02/26 12:54:53 ID:xXab7q8N<> >>778
ありがとうございます。
直りました! <> VIICさん<>sage<>11/02/26 16:04:43 ID:k5WzgFMo<> 上のほうで話にでてたSelTextポップアップでのNGFiles.txtだけど、やっぱりmenu.jsの処理のあとに追加されてるのかも
でも>>748の余分なセパレータを消すコードを下記のコードに追加するとNGFiles.txtも含めてSelTextポップアップ自体が表示されなくなるので、もしかしたらNGFiles.txtとそのサブメニューはセパレータをチェックして追加位置を決めてるのかも?
まあ不具合ってわけじゃないけど、一応報告です

試したコード
function popupMenuCreated(pm,sn) {
if (sn=='SelText') {
for (var i=pm.getComponentCount()-1; i>=0; i--) {
pm.remove(i);
}
}
}

結果
ttp://s.cyrill.lilect.net/uploader/files/201102261555140000.png <> n|a<>sage<>11/02/26 21:27:30 ID:nmo6r3OE<> >>780
次回更新ではpopupMenuCreatedを実行する前に
SelTextのNGFiles.txtを追加しておくようにします。 <> VIICさん<>sage<>11/02/26 23:24:21 ID:A80mxR84<> >>776
この場合いじくってるのはJavaのコンポーネントじゃないの? <> VIICさん<>sage<>11/02/27 11:35:01 ID:axfP2cu/<> >>782
なるほど確かにこの場合に関しては俺の不勉強だった

ttp://v2c.s50.xrea.com/manual/script.html
>popupMenuCreatedはSwingのポップアップメニューコンポーネントを直接操作するので使用には十分注意してください。 <> VIICさん<>sage<>11/02/27 18:21:18 ID:DAGuoOgB<> >>781
NGFiles.txt修正確認出来ました
お疲れ様です
ありがとうございました! <> VIICさん<>sage<>11/02/27 20:34:44 ID:h8BLMLXb<> T20110227の書き込み欄関連の機能テスト

searchPrevThread.jsの
//【コマンド4】 ${SCRIPT:S} searchPrevThread.js newthread //新スレ用にレス1のテンプレ作成支援
をスレ立て欄を開くように変更してみた。
ttp://loda.jp/v2cthread/?id=45
※T20110227以降が必要 <> VIICさん<>sage<>11/02/27 21:16:07 ID:DAGuoOgB<> >>785
コレは便利過ぎる!
ただ前スレを開くでも立ってしまうorz
あとお聞きしたいんですが作成完了音を消すにはどこを削除すればいいんでしょうか?

良ければ教えてください <> VIICさん<>sage<>11/02/27 21:55:51 ID:h8BLMLXb<> >>786
すみません。
361と377行目の行頭の「//」を削除か
ttp://loda.jp/v2cthread/?id=46
を上書きでコマンド4以外では出ないはずです。

作成完了音については、スクリプトでは記述していません。
スレ立て欄表示時に対応するスレ一覧が開いて更新する仕様のため
その更新チェック音かと思います。(そのため現状はステータス表示も無意味になっています)

今のところ、スレ立て欄表示時に「更新チェックしない」または「更新音を出さないようにする」
設定はスクリプトでは出来ないみたいです。 <> VIICさん<>sage<>11/02/27 22:07:37 ID:DAGuoOgB<> >>787
v2ccompSoundEnabledとcx.soundNameがなかったので
仕様かなとも思いましたが一応聞いてみました
確認してみたところ意図している動作になりました
ご丁寧にありがとうございます!

無駄にスレたてしたくなってきて困るw <> VIICさん<>sage<>11/02/27 23:15:29 ID:c3jWspZM<> yourfilehostのサムネとかって取得できないんですかね?
スクリプトとか色々入れてみたんですが、youtubeとニコニコのサムネは重宝してるんですがyourfilehostまであったら鬼に金棒です、いろんな意味で。 <> VIICさん<>sage<>11/02/27 23:27:12 ID:BZ4CxuCm<> >>789
画像としてサムネイルを表示するだけでいいのなら
ImageViewURLRepalce.datが対応してますね

youtubeのスクリプトの様に他の情報まで取得してポップアップさせるのもおそらく可能
誰かが作ってくれればの話ですが <> VIICさん<>sage<>11/02/27 23:38:43 ID:c3jWspZM<> >>790
ほんとですね。ImageViewURLRepalce.dat開いてみたら対応になってる。
でもリンクをマウスオーバーしてもなぜか画像サムネはでないんですよね。仕様変更とかあったのかも。。 <> VIICさん<>sage<>11/02/27 23:50:26 ID:BZ4CxuCm<> >>791
自分は表示されるけど
最新じゃなかったので110221に差し替えてみたけどそっちでもおk <> VIICさん<>sage<>11/02/27 23:57:41 ID:c3jWspZM<> どうもImageViewURLReplaceとStreamingPlayer まとめwikiで拾った方だと無理みたいで。
最新のStreamingPlayer3β版に付属してるImageViewURLReplace.datだと無事表示されました。スレ汚しすいませんでしたm(__)m <> VIICさん<>sage<>11/02/28 00:26:12 ID:/47rXqbW<> まとめwikiは情報が古いみたいね
勝手に書き換えといたw <> VIICさん<>sage<>11/02/28 01:34:21 ID:vwcEYD+0<> getlog更新する時これ入れといてー (アドレスの"h"は補完しといてねー)
実況の捕獲率はみみずんよりも高いかもしれない、ただし10日間限定
ttp://areya.tv/2ch/makeimghtml.php

// {url: "ttp://areya.tv/2ch/$2/dat/$3.dat", name:"areya.tv" }, //areya.tv(実況ch-TV番組実況系のみ)
// {url: "ttp://areya.tv/p_search/$2/dat/$3.dat", name:"areya.tv(bbspink)" }, //areya.tv(アイドル画像板,半角文字列板,半角二次元板のみ) <> VIICさん<>sage<>11/02/28 01:38:29 ID:/47rXqbW<> 常に書き込み欄開いた状態にしようと思って
function endCheck( th, cx ) {
th.openWritePanel();
}
ってやってみたんですが、dat落ちスレで確認のダイアログが出てきてしまいます。
なんかいい方法ないですかね

・dat落ちスレでは書き込み欄開かない
・dat落ちスレで書き込み欄開いてもダイアログを出さない

ここら辺ができればいいんですが <> n|a<>sage<>11/03/02 00:13:02 ID:iWzHE3RO<> >>796
T20110301からはrescheck.jsではなく、threadld.js で
function panelCreated(th) {
th.mayOpenWritePanel();
}
を使ってください。 <> VIICさん<>sage<>11/03/02 04:14:30 ID:FmZb5XPf<> >>797
ありがとうございます! <> VIICさん<>sage<>11/03/02 05:59:01 ID:zMPrg9ia<> 2010/11/09のzenban.js(最新)
を実行するとコンソール出力に以下が表示されますが問題はありますか?(httpだと書き込めないのでttpにしています)
スクリプト自体は問題なく動作しているのですが気になったので

Not a valid cookie: from ttp://2ch-ranking.net/index.html?board=zenban
cBoard=zenban%2Cnews4vip%2Canime2%2C; expires=Wed, 29-Feb-2012 20:35:33 GMT; path=/; domain=2ch-ranking.net

あとコンソール出力に表示されているのは全て何らかのエラーという認識でいいんでしょうか? <> n|a<>sage<>11/03/02 23:34:06 ID:iWzHE3RO<> >>799
そのメッセージはCookieのチェック処理の問題が原因で、
次回更新で修正します。
(zenban.jsの動作には影響していないと思います。)

コンソール出力に表示されているメッセージの大部分はエラーですが、
ただの状態表示もあります。 <> VIICさん<>sage<>11/03/02 23:48:05 ID:zMPrg9ia<> >>800
レスありがとうございます
なるほどそういう事だったんですか!

是非よろしくお願いします <> VIICさん<>sage<>11/03/06 02:54:41 ID:ABKCgFw1<> mimizunID.jsというスクリプトファイルが今まで問題なく使えてたのですが、
久々に実行したら使えなくなってました。
実行したら下記画像のようなエラーダイアログが出てきます。

ttp://www.odnir.com/cgi/src/nup52660.png

ソースは以下のようになります。


------------------------------ここから----------------------------------------------------------
var id = v2c.context.res.id;
var board = v2c.context.thread.board.key;
var url = "ttp://mimizun.com/search/perl/idsearch.pl?board=" + board + "&id=" + encodeURIComponent(id);
v2c.browseURLExt(url);
------------------------------ここから----------------------------------------------------------


※直リンができない為 h を外してみました。 <> VIICさん<>sage<>11/03/06 03:01:04 ID:hU/+Stgm<> >>802
>>773 <> VIICさん<>sage<>11/03/09 23:50:54 ID:wD+mps6l<> >>799 の件修正確認しました
ありがとうございました! <> n|a<>sage<>11/03/15 00:36:24 ID:Rnv2n60f<> ttp://jane.s28.xrea.com/test/read.cgi/bbs/1273709202/970
と同じような動作をする rescheck.js

var pu=java.util.regex.Pattern.compile('(h?ttps?://[!#-;=?-Z_a-z~]+ ?(?:<br> ?|$)){3,}');
var pb=java.util.regex.Pattern.compile(' ?(?:<br> ?|$)');

function checkRawText(res,cx) {
var sm=res.message;
var mu=pu.matcher(sm);
if (mu.find()) {
var su=mu.group();
var mb=pb.matcher(su);
var sb=new java.lang.StringBuilder(sm.substring(0,mu.start()));
var i=1;
var ip0=0;
while (mb.find()) {
var ip=mb.end();
if (ip==ip0) {
break;
}
if (i<=9) {
sb.append('0');
}
sb.append(String(i++));
sb.append('. ');
sb.append(su.substring(ip0,mb.start()));
sb.append(mb.group());
ip0 = ip;
}
sb.append(sm.substring(mu.end()));
res.message = sb;
}
} <> VIICさん<>sage<>11/03/15 01:40:12 ID:Dy6kXrNZ<> >>805
本スレで質問したものですがまさかn|aさんにスクリプト書いていただけるとは…
ありがたく使わせていただきます

あと本スレで質問したReplaceStr.txtの
<n>対象URL/タイトル
でURL or スレタイで適用したりは現在使えないって認識で良いでしょうか?
いつか対応して頂けると助かります

ほんとにありがとうございました! <> VIICさん<>sage<>11/03/15 16:33:41 ID:L1sv2hk0<> 既得ログ一覧の全スレのオブジェクトを取得することはできないのでしょうか? <> VIICさん<>sage<>11/03/17 14:59:03 ID:k8EW0VU6<> >>805
を追加したらそれまでのが動かなくなりました
どう直せばいいでしょうか?
現在の状態説明すると長くなるのでファイルあげときます
ttp://www1.axfc.net/uploader/Sc/so/215579.js <> VIICさん<>sage<>11/03/17 15:05:09 ID:k8EW0VU6<> 訂正です
追加したらそれまでのが動かなくなったので弄っていたら
追加したものが動かなくなりました <> VIICさん<>sage<>11/03/17 16:31:20 ID:4as1GeaZ<> >>809
wikiのrescheck.jsだと
各処理は全部msgを更新するような作り方になっていて
最後にその内容を書き戻す
res.setMessage(msg);
ってなってるから
追加分もそれに追従しないとダメぽい

というわけで修正してアップしますた
全機能//で無効化してあるので必要部分を消してください
今回の部分は
ck.renbanURL
の所です
ttp://loda.jp/v2cthread/?id=50.zip

不具合あったら指摘・修正等よろしくです <> VIICさん<>sage<>11/03/17 18:31:27 ID:k8EW0VU6<> >>810
動作確認しました
ありがとうございます!
33行目の "{2,}"
77行目の "('. ');"
この2行はオリジナルに手を加えてますので
3行以上から適用したい方は33行目に注意してください
77行目は視認性上げるため元にスペースを一つ挟みました <> VIICさん<>sage<>11/03/17 20:00:20 ID:oZoOLMf+<> getdat.jsの使い方を教えてください
これを機に、スクリプトを学びたいと思います

やりたいことは、過去ログのダウンロード(getlog.js)→画像の自動ダウンロードです
よろしくお願いします <> VIICさん<>sage<>11/03/17 20:59:57 ID:4as1GeaZ<> >>812
function getDat(th) {
var bl;
//ここに過去ログのバイト列を取得してblに代入するコードを書く
return bl;
}

こんな感じになると思う

blの内容は、wikiのGetLog_for_V2C.js内にある
v2c.getThread( thu ).importDatBytes( bl );
のblと同じでいいはずだから、
この辺のbl取得部をgetDat用にちょっと改変すればいけるんじゃないかと

画像のダウンロードはスクリプトから実行はできないんじゃないかな
できるのは新着レスにおける画像ダウンロード数の制御だけで
ただ、getDatで取得したログも新着分は新着として扱われるようなので
新着画像を自動ダウンロードするように設定していれば
自動ダウンロードされるっぽい <> n|a<>sage<>11/03/18 01:18:50 ID:mOnDHtUs<> >805の
var sb=new java.lang.StringBuilder(sm.substring(0,mu.start()));
の次に
sb.append('<font color="gray">');
を、
sb.append(sm.substring(mu.end()));
の前に
sb.append('</font>');
を追加するとオリジナルの動作に近付きます。(追加した数字が灰色になる。)

>>806
<n>対象URL/タイトル は使えるはずです。
>>807
今のところできません。 <> VIICさん<>sage<>11/03/18 15:36:46 ID:YP7z75Ow<> >>813 参考にdat落ちスレ開いたら自動で過去ログ取得するためgetdat.js弄ってましたが全然ダメだ・・・
良ければ誰かスクリプト書いてくれれば助かります <> VIICさん<>sage<>11/03/18 15:57:24 ID:/Zr9p4iC<> >>815
wikiのスクリプトは複数サイトにアクセスしたり色々やってるけど
簡単にやるなら
・スレのURLをログを拾えるURLに変換する
・getContentsAsBytes()で取得
・それをreturnする
これだけでいいと思う
ほぼそのものが>>594にあるね

getlog系のスクリプト公開はその是非について色々と議論あったりするので
自分は考えるのをやめてスルー
あとは任せた <> VIICさん<>sage<>11/03/18 17:36:33 ID:kJ1Sz/Rc<> th#getRes()を呼ぶたびに遅くなるのですが原因はなんでしょうか?100スレッド×1000レス分ほど呼ぶと初回呼び出しの100分の1以下の速度になります。
スワップ等は発生していないようですが・・・ <> VIICさん<>sage<>11/03/18 18:30:16 ID:Y+mjuykZ<> >>815-816
systemスクリプトはv2c.〜が使えないんじゃなかったけ
ネットワーク接続とかはJava使うのかな?
HttpRequestオブジェクトの取得がわからないので手を出していない。 <> VIICさん<>sage<>11/03/18 18:33:28 ID:/Zr9p4iC<> 使えるよ
v2c.contextは無理かも <> VIICさん<>sage<>11/03/18 19:38:35 ID:Y+mjuykZ<> あれ?v2c.printとか使えなかった気がしたが使えてる。
datopen2のv2c.context.thread→thにしてreturn datでokだった。
mimizunで取得確認した。 <> VIICさん<>sage<>11/03/18 23:22:32 ID:Y+mjuykZ<> 不具合というわけではないのですが
v2c.confirm
で選択できるようにしてみたら
ダイアログ表示の右上に黄色△!のマークが表示されます。
v2c.alert,v2c.promptもそうみたい。
Tw指定かと思いますが、getdat.jsなどは指定できないので

【V2C】 T20110314 [2.5.0_10] (L-0.6.2:x86)
【Java】 1.6.0_24-b07 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86)
【メモリ】 Total(Free)/Max.: 247(135)/247 (Phys. Total/Avail.: 2030/826) [MB] <> VIICさん<>sage<>11/03/19 03:08:07 ID:IBK5CcNq<> rescheck.jsの
//各板のデフォルト名無しを'名無し'に置換
を使用した場合名無しがその他の扱いで指定した色になり手動で名無しに登録しなくちゃいけませんが
そういう事しなくてもデフォ名無し扱いできませんか?
出来ないなら要望として出させていただきます
よろしくお願いします <> VIICさん<>sage<>11/03/20 09:20:14 ID:TTVONCnz<> ポップアップメニューで項目の順番を入れ替えることってできますか?
例えば、選択テキストポップアップメニュー で、「選択範囲のリンク」を一番上にもってくるにはどうすればいいですか? <> VIICさん<>sage<>11/03/20 14:53:29 ID:9/bbJOW4<> >>823
削除のサンプルをちょっといじってやってみた
この例だと、選択範囲のリンクとWeb検索 をそれぞれ1番目の2番目に持ってくる

function popupMenuCreated(pm, sn) {
var menua = {};
if (sn == 'SelText') {
for (var i = pm.getComponentCount() - 1; i >= 0; i--) {
var mi = pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
else if (mi.getText().startsWith('選択範囲のリンク')) {
menua['選択範囲のリンク'] = mi;
pm.remove(i);
}
else if (mi.getText().startsWith('Web検索')) {
menua['Web検索'] = mi;
pm.remove(i);
}
}
pm.insert(menua['選択範囲のリンク'], 0);
pm.insert(menua['Web検索'], 1);
}
}



'SetText'のところを変えれば別のメニューでも使える

Web検索を移動しない場合は

else if (mi.getText().startsWith('Web検索')) {
menua['Web検索'] = mi;
pm.remove(i);
}

の4行と、下にある

pm.insert(menua['Web検索'],1);

の行を消せばいい
逆に移動するメニューを追加したい場合は
このサンプルを参考に自分で追加すればいい(はず)
<> VIICさん<>sage<>11/03/20 14:55:28 ID:9/bbJOW4<> >>824
pm.insert(menua['選択範囲のリンク'], 0);
                       ↑
これが挿入位置ね
0が一番目 <> VIICさん<>sage<>11/03/20 14:58:34 ID:EN/++9HH<> こんなスレあったのか・・・
過去ログ自動取得みたいなのってまだないみたいですね
お暇な方いましたら作成してください
お願いします <> VIICさん<>sage<>11/03/20 15:07:07 ID:EN/++9HH<> >>824
え・・・こんなことも出来るのか
すごいな
レス表示ポップアップの外部コマンド欄の位置も変えれますか?
わかるかたいれば教えてください <> VIICさん<>sage<>11/03/20 15:20:48 ID:EN/++9HH<> と思ったら外部コマンドのテキストそのままでいけました
これここからここまでっていう風に指定はできますか?
現在は
1
2
3
4
5 ここまでスクリプト
6 フォルダ(たまに使う物)
になってますが一つ一ついくしかありませんか? <> VIICさん<>sage<>11/03/20 18:24:10 ID:TTVONCnz<> >>824
回答ありがとうございました。
スクリプトについては初心者なので少しずつ勉強しようと思います。 <> VIICさん<>sage<>11/03/20 18:47:42 ID:+49JuJjX<> >>826
dat落ちログを取得するスクリプトは既にあるぞ <> n|a<>sage<>11/03/20 23:32:35 ID:AjI0Pwt9<> >>817
ランチャー設定の「メモリ使用量の上限」を増やしてみてください。
>>821
何か方法を考えようとは思っています…。 <> VIICさん<>sage<>11/03/21 01:23:36 ID:zMJX2T0W<> >>824 をベースに弄ってるんですがセパレータ挟むのは可能でしょうか? <> VIICさん<>sage<>11/03/21 02:01:12 ID:jA2iYmct<> >>832
調べてみたけど…
pm.addSeparator();
で追加できるけど、最後尾にしかできなかった…

pm.insert(new javax.swing.JPopupMenu.Separator(),0);

一応これで指定場所に突っ込めることを確認
java全く知らないのでエロい人ツッコミよろしく <> VIICさん<>sage<>11/03/21 02:18:18 ID:zMJX2T0W<> >>833
出来ました
ありがとうございます!
あともう一つなんですが任意の場所のセパレータは消せますか?
removeRedundantSeparator(pm);
removeRedundantSeparatorSub(mi);
では指定場所のセパレータは消せませんでした(当たり前ですよねorz) <> VIICさん<>sage<>11/03/21 02:38:39 ID:zMJX2T0W<> と思ったらremoveRedundantSeparator(pm);
で消せました
スレ汚しすいませんでした <> VIICさん<>sage<>11/03/22 18:47:39 ID:07q5l36G<> 2010/11/09のzenban.js(勢いランキング)
を使用してスレを開いたとき高確率で取得できなくなりましたorz(更新で読み込める)
時期的には地震後ぐらいからおかしくなったので鯖の問題?と思いましたけどスレ一覧から該当スレ開くと普通に開けます
どうしてでしょうか?
コンソール貼っときます

xception in thread "Thread-113" java.lang.NullPointerException
at java.util.regex.Matcher.getTextLength(Unknown Source)
at java.util.regex.Matcher.reset(Unknown Source)
at java.util.regex.Matcher.<init>(Unknown Source)
at java.util.regex.Pattern.matcher(Unknown Source)
at org.monazilla.v2c.V2CKeywordItem.checkApply(Unknown Source)
at org.monazilla.v2c.V2CKeywordSet.getItemArrayA(Unknown Source)
at org.monazilla.v2c.V2CNameKeywordHighlightSet.getNameKeywordHighlightItemArray(Unknown Source)
at org.monazilla.v2c.V2CName.checkNGAndAvatar(Unknown Source)
at org.monazilla.v2c.V2CResItem.parseName(Unknown Source)
at org.monazilla.v2c.V2CResItem.doParse(Unknown Source)
at org.monazilla.v2c.V2CBBSThreadRes.createResItemFromBytes(Unknown Source)
at org.monazilla.v2c.V2CBBSThreadRes.appendToDatFile(Unknown Source)
at org.monazilla.v2c.V2CHttpUtil.updateDatFile(Unknown Source)
at org.monazilla.v2c.V2CHttpUtil.updateDatFile(Unknown Source)
at org.monazilla.v2c.V2CBBSThreadRes.doUpdateThread(Unknown Source)
at org.monazilla.v2c.V2CBBSThreadRes$UpdateThread.run(Unknown Source) <> VIICさん<>sage<>11/03/22 19:20:02 ID:TGvE+1r0<> >>836
> xception in thread "Thread-113" java.lang.NullPointerException

  Λ_Λ  \\
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >_Λ∩
  _/し' //. V`Д´)/
 (_フ彡        / <> n|a<>sage<>11/03/22 23:56:36 ID:KjBF1DsE<> >>836
こちらではzenban.jsは正常に動作しているようです。
コンソール出力のエラーはスクリプトの実行とは関係無いエラーで、
次回更新で修正します。 <> VIICさん<>sage<>11/03/23 12:53:43 ID:9hj17DFl<> >>838
レスありがとうございます
検証してみたところここ最近の勢いが早くてdat落ちしているスレを開こうとしていたみたいです…
すいませんでした

エラーの方よろしくお願いいたします <> VIICさん<>sage<>11/03/25 22:25:04 ID:TmUy77mA<> java.lang.String.format使えないのん? <> VIICさん<>sage<>11/03/27 03:27:05 ID:AnrRmdK/<> 977 : 【東電 82.1 %】 [sage] :2011/03/26(土) 00:56:49.06 ID:0sOftEf7P
現在の電力使用量を表示するスクリプトを作って見ました。
東京電力電力供給状況API(ttp://tepco-usage-api.appspot.com/)のlatest.jsonを使用。

tepco.js
ttp://loda.jp/v2cthread/?id=53.zip
スクリプトを実行すると、ステータスバーに現在の電力使用量が%単位で表示されます。
元データの更新時間も同時に表示されます。

外部コマンドに ${SCRIPT:FrwS} tepco.js と指定します。
IDをつけてキーバインドやマウスジェスチャ(全体)に設定しても良いでしょう。

データの取得はデフォルトでは前回の取得時から毎時7分、27分、47分をまたいだ場合に行われます。
   (例えば前回13:54に取得していた場合、14:06まではスクリプトを実行してもデータを取得しに行きませんが、
    14:07以降に最初にスクリプトを実行した時点でデータを取得し直します。)
現状毎時5分40秒あたりにデータが更新されるようなので、少し余裕を持って毎時7分に更新しています。
時計が狂ってると最新のデータが最大20分弱反映されない可能性があるので注意。

今後元データの更新時間が変化した場合に備えて20分毎に更新していますが、
スクリプト内のadjust変数を変更すれば基準となる時間を変更できます。
変数をいじる気のある人なら、interval変数で更新間隔を変更できます。
20分毎が無駄と感じるなら、1時間毎に変更すると良いと思います。 <> VIICさん<>sage<>11/03/27 22:20:23 ID:Rpu+6ikI<> getdat.jsで総レス数が少ない場合や1のレスだけでいい場合など
過去ログ取得は必要ない場合があります。

URLをreadURL()で読み込むようにして
総レス数を表示したconfirm使ってDat取得するか選択するようにしてます。
これが効率いいのかはわからないのですが・・・

要望ですが追加でconfirmに1のレス文を表示するようにして
キャンセルすると『スレを開かない(もしくはログを削除して閉じる)』を行いたいです。

よろしくお願いします。 <> VIICさん<>sage<>11/03/28 02:11:34 ID:fQxm/dPe<> 確かに、th.open() があるならth.close()があってもいい気する
例えば、v2c.resPane.getThread(i)でループ回して
条件に合致するスレは閉じるorログ削除する みたいなのは需要あるかも?
「指定した板のスレだけ」とか「最終書き込みがn日前」とか
自分は「dat落ちタブを閉じる」さえあればいいので別にいらないけど…

と思ったけど、「未読なし かつ dat落ちタブを閉じる」ができたら便利そうだ <> VIICさん<>sage<>11/03/29 02:02:15 ID:NLDOUaf7<> 90+1 :名無しさん@お腹いっぱい。 [] :2011/03/29(火) 01:30:55.87 ID:xt8VbMtV0 [PC]
sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find funttion getPopupOfID.(<Unknown source>#56)in<Unknown source> at line number56.
ニコニコ動画の情報をポップアップするスクリプト入れたんだが全く動作してくれない、youtubeのも同様
というか本当は入れたスクリプトずべて動作しないんだが、せめてこいつだけでも動かせはしないだろうか
上のような文が出るのは何が原因なのか教えて欲しい

本スレから誘導されて来た、それで56行目というのがこれ
if (vcx.getPopupOfID(video_id)) {
なんだけど、何故ダメなんだろう <> VIICさん<>sage<>11/03/29 02:11:05 ID:vIE/lAVR<> 自分は誘導した本人だけど…わからんw
もう一人の方に任せるとしてとりあえず…

・他のも全部そのエラー?
・エラーは自分で書き写してるっぽいけど、メニューの「表示」→「最後のエラーダイアログ」からコピーできるよ
・とりあえずバグ報告テンプレは貼っといたほうがいい(今回は関係ない気がするけどね <> VIICさん<>sage<>11/03/29 02:31:07 ID:7ZSFqmcI<> 関数見つからんって言ってるから
V2Cのバージョンアーップ <> VIICさん<>sage<>11/03/29 02:57:12 ID:vIE/lAVR<> getPopupOfIDって実装されたのもう半年くらい前な気がするんだが…まさかね <> VIICさん<>sage<>11/03/29 04:21:37 ID:NLDOUaf7<> ( ゚д゚)…


スマン、こんな…こんあ初歩的なミス…
ver2.02だった
アップデートしたら出来ました、ありがとうございました。
>>847
まさかだったわああああああ!!
自分が馬鹿すぎて死にたいわあああああああん
本当スイマセンでした <> VIICさん<><>11/03/29 21:06:59 ID:A8yhrpba<> こーゆーバカが多いとサポートって大変だよな <> VIICさん<><>11/03/30 13:52:29 ID:Er0qCPP3<> 開いてるすべてのスレから画像のリンクをローカル板に貼り付けるのではなくて
見ているスレの画像リンクをローカル板に貼り付けるスクリプトって出来ますか?

頑張ってみたのですがどうも出来なくて <> VIICさん<>sage<>11/03/30 17:45:43 ID:BRJ2Xmdx<> >>850
wikiにあったスクリプトの関係なさそうなとこ削除+ちょっと追記 で作成してみますた

//【登録場所】全体、レス表示
//【ラベル】画像レスまとめ(単スレ)
//【内容】開いているスレッドから画像が含まれるレスのみを抽出し、ローカルスレッドを作成する。
//【コマンド】${SCRIPT:Fw} imageExtract.js ローカル板のフォルダ
//【スクリプト】
// ----- 次の行から -----
function createImageResThread() {
var args = v2c.context.args;
if (args.length == 0) {
return "板のフォルダが指定されていません。";
}
var bd = v2c.getLocalBoard(args[0]);
if (!bd) {
return "ローカル板を取得できませんでした。";
}
var th = v2c.context.thread;
if (!th || th.local || th.bbs.twitter) {
return "非対応スレ";
}
var resCnt = th.localResCount, imgRes = [];
for (var j = 0; j < resCnt; j++) {
var res = th.getRes(j);
if (res) {
for (var i = 0; i < res.links.length; i++) {
if (res.links[i].type_IMAGE) {
imgRes.push(res);
break;
}
}
}
}

if (imgRes.length == 0) {
return "画像レスが存在しません。";
}
var lth = bd.createLocalThread("画像レス抽出@" + th.title + "@" + th.board.name, imgRes);
if (!lth) {
return "ローカルスレッドを作成できませんでした。";
}
lth.open(false);
return null;
}

var se = createImageResThread();
if (se) {
v2c.alert(se);
}
// ----- 前の行まで -----
<> VIICさん<><>11/03/31 00:19:55 ID:hJ/j4ADQ<> >>851
ありがとうございます!
画像スレ開いてる傍らにオカ板の怖くて開けない画像スレとかも開いてたんで
間違って開いてしまったりとかあったので本当に感謝です <> VIICさん<>sage<>11/03/31 20:02:20 ID:lqmql/15<> 質問・要望です

スクリプトによるポップアップですが、
スクリプト側から閉じる命令を出すことはできないでしょうか?

例えば、マウスオーバーで>>352を使うような場合
複数URLに連続してマウスオーバーしてしまうと複数のウィンドウが開いてしまいます
マウスクリックか
v2c.context.setDefaultCloseOnMouseExit(b)使って消せばいいのですが
複数重なって表示されてると結構面倒臭いです。

そもそも、新しいポップアップを作成されたら前のは即閉じてしまって構わないというような場面が結構あるので
指定したIDのポップアップウィンドウを閉じる とか
逆に 指定ID以外を閉じる とか、そういう機能が欲しいです。

調べたところ
ポップアップから更にポップアップを作った場合に元ポップアップを消す機能しか見つけられませんでした。 <> VIICさん<>sage<>11/04/01 18:37:30 ID:OXBesnEJ<> 【V2C】 2.5.1 [R20110321] (L-0.6.2:amd64)
【Java】 1.6.0_24-b07 (Sun Microsystems Inc.)
【OS】 Windows 7 (amd64)
【メモリ】 Total(Free)/Max.: 439(194)/1365 (Phys. Total/Avail.: 6142/1575) [MB]
【不具合内容】
menu.jsにて、ThreadPanelの「ラベル(スレッド)」を
下位フォルダへ移動すると内容が展開されなくなる

【再現方法】
function popupMenuCreated(pm, sn) {
if (sn =='ThreadPanel') {
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var mi=pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
if (mi.getText().startsWith('ラベル')) {
var m=new javax.swing.JMenu('下位フォルダ');
m.add(mi);
pm.add(m);
break;
}
}
}
}
【調査済項目】
ThreadListにも同じ項目がありますが、同じ症状です。
特殊な項目で発生するのかと思い、「送る」「フォルダに直接保存」等で試してみましたが、こちらは問題なしです。

ちなみに、同階層での位置変更は問題ありませんでした。

例)
if (mi.getText().startsWith('ラベル')) {
pm.remove(i);
pm.add(mi);
break;
}
<> !denki<>sage<>11/04/02 01:26:27 ID:6Hv9bdVn<> 東電発表のCSVファイルをそのまま使えるようにしました
ttp://loda.jp/v2cthread/?id=54

表示も少し詳しくなっています

使い方は同じですが、更新時間が変わっています
毎時7分と32分に更新しています
毎時5分か30分にCSVファイルが更新されるためです
(2分余裕をもって取りに行っています) <> VIICさん<>sage<>11/04/02 01:27:44 ID:6Hv9bdVn<> >>855>>841のバージョンアップ版です <> VIICさん<>sage<>11/04/02 20:22:34 ID:aYe22y1n<> >>830
自動取得ってやつがまだないけどな。 <> VIICさん<>sage<>11/04/02 20:41:55 ID:aYe22y1n<> Twitterに貼る画像リンクは拡張子から区別できないため、
スクリプトとか検索とかで抽出することがやっぱり無理ですよね? <> VIICさん<>sage<>11/04/02 20:48:35 ID:dnezaAUK<> >>858
V2C側が画像と認識出来てる(サムネイル表示できる)ものなら可能
>>305,307,308辺りにもうあるね

アクセスしてみないと画像と分からないものはちょっとキツそう <> VIICさん<>sage<>11/04/03 02:34:50 ID:i9SVIIhL<> ThreadView.ViewPositionをファイルからじゃなく直接取得する方法はありませんか? <> VIICさん<>sage<>11/04/03 12:31:15 ID:5TEa5xPe<> レスされたレスを隠すスクリプトはありませんか?
つまり、レスされてたレスだけをスクリプトで抽出して見て、
されてないレスをそのまま見るという形でしたいと思います。 <> VIICさん<>sage<>11/04/04 23:54:49 ID:N5zorWId<> スクリプトで外部サイトのhtmlを取得し、
formの内容を解析してinputタグを拾い
createHttpRequest でポスト みたいなことがやりたいんですが
formタグが入れ子になっていたりすることもあり
正規表現で解析するのは自分の力量を超えています。

DOMで要素取得とかできないでしょうか?
まぁDOMもほとんど知らないんですが
正規表現でやるよかましだと思うので <> VIICさん<>sage<>11/04/05 00:43:53 ID:vvaEwwRR<> >>862
補足です
特定のサイトに対応させるだけなら
拾いたいところだけ決め打ちで抜けばいいと思いますが
できれば汎用的に、仕様変更等にも強くといったものにしたいので… <> VIICさん<><>11/04/07 06:38:08 ID:m/qWG/LP<> >>855
使わせて貰ってます <> VIICさん<>sage<>11/04/08 22:23:13 ID:quir+WiT<> >>633
>v2c.context.setDefaultCloseOnMouseExit(true);
>を何処か空いてる行に入れておけば機能するはず。

空いてる行とはURLExec2.dat内でいいんですか? <> VIICさん<>sage<>11/04/08 22:27:23 ID:oy3nKBoH<> 適用したいスクリプト(〜.js)の中ね
空いてる行っていっても好きな所どこでもって意味ではないから
分からんのなら一番上に挿入でおk <> VIICさん<>sage<>11/04/08 22:55:01 ID:quir+WiT<> せっかく教えてもらったけど分からなかったゴメン <> VIICさん<>sage<>11/04/10 03:52:45 ID:CAq20f6u<> >>855エラーが出るようになったりました、ダイアログに当日実績なんとかって
>>841は使えます
<> n|a<>sage<>11/04/11 02:31:13 ID:OMOcK3i7<> >>840
java.lang.String.format("%4$2s %3$2s %2$2s %1$2s",["a","b","c","d"]);
>>854
H20110410で修正しました。
>>860
今のところありません。
>>861
res.refCount、v2c.context.setFilteredResIndex(li)、v2c.context.setPopupResIndex(li)
あたりを使えばできると思います。
>>862,863
javaの外部ライブラリを使う必要があると思います。 <> VIICさん<>sage<>11/04/12 04:10:57 ID:IFqR3YWh<> >>2,3にあるはてブスクリプトを修正しました
エントリーページの変更に対応
ブックマークしているユーザー名を表示する機能を追加

wikiへのアップロードはパスが分からなかったのでアップローダーの方へ投稿しました
ttp://loda.jp/v2cthread/?id=55 <> VIICさん<>sage<>11/04/12 06:31:22 ID:TVsLc0wi<> >>869
>>854
>H20110410で修正しました。
ありがとうございます。
動作確認しました。


しかしもう一つ報告が…
【V2C】 T20110411 [2.5.1_03] (L-0.6.2:amd64)
【Java】 1.6.0_24-b07 (Sun Microsystems Inc.)
【OS】 Windows 7 (amd64)
【メモリ】 Total(Free)/Max.: 569(437)/1365 (Phys. Total/Avail.: 6142/1489) [MB]

【不具合内容】
setResPaneHTMLで表示したhtmlのテキストボックスにアルファベットを打つ場合
キーバインドの「全体」で使用している文字を打つとそのコマンドが起動する

【再現方法】
下記スクリプトのテキストボックスで再現
var h = '<html><body><form action=""><input type="text"></form></body></html>';
v2c.context.setResPaneHTML(h,"キーバインドテスト",true);
v2c.context.setPopupFocusable(true);

【調査済項目】
K に ログから検索 を設定していて発動
他も適当に設定して試してみたが再現
setPopupHTMLでは再現せず <> VIICさん<>sage<>11/04/13 13:32:25 ID:yhjtsC0j<> >>869
>javaの外部ライブラリを使う必要があると思います。

ありがとうございます。
どうすりゃいいか分からんというレベルなので素直に諦めます。 <> VIICさん<>sage<>11/04/14 07:45:22 ID:Nn5dmFgm<> スクリプトのことは何にも分からない初心者です
popupTweet(HTML版) でリツイート人数が表示されません
ツイッター側の仕様変更か何かあるようでしたら対策ご教授ください

また、最近こういうURLで貼られることが多いんですが、どうすればポッポアップできますか?
ttp://twitter.com/#!/chiiorakane/status/57604541302046720 <> VIICさん<>sage<>11/04/14 09:49:49 ID:11hlrgcF<> >>873
後者に関してはwikiのURLExec2.datの記述に更新すればおk

前者は…そもそもそのページにリツイート数の情報がないから無理じゃないかな
APIの方も0が返ってくるぽいし仕様変わったんかね <> VIICさん<>sage<>11/04/14 11:26:41 ID:Nn5dmFgm<> >>874
ありがとうございます。
ttp://www39.atwiki.jp/v2cwiki/pages/180.html
このページにある通り記述してもポップアップは出るんですが中身がちゃんと表示されないんです。
特に更新もされてないようですが…

現在公式RTの人数表示が出なくなってるんですね。知りませんでした。 <> VIICさん<>sage<>11/04/14 11:50:09 ID:11hlrgcF<> ごめん
#!のURLにヒットしないって意味かと思ってた
その上、手元のpopupTweetじゃ問題なかったから…
wikiのは確かに表示されないね

自分で直したのかなこれ
wiki以外から拾ってきた記憶全くないんだが…

var dat = v2c.readURL( RegExp.$1 );

var dat = v2c.readURL( "h" + "ttp://twitter.com/" + an + "/status/" + sid );

手元のはこうなってた
HTML版はtwitterのページ仕様がちょっと変わるだけで動かなくなる可能性があるので
API版使ったほうがいいと思うんだけどね
<> VIICさん<>sage<>11/04/14 13:18:15 ID:Nn5dmFgm<> >>876
ごめんなさい。こちらの日本語が変でした。

HTML版の方は>>876を参考にして上手く修正できたのですが、API版は同じようにやっても
「スクリプトファイルが存在しません」とエラー表示されます。V2Cのバージョンは2.5.1です。 <> VIICさん<>sage<>11/04/14 13:41:24 ID:11hlrgcF<> >>877
>ごめんなさい。こちらの日本語が変でした。
気にしないでください
そもそもそっちは悪くない
>>616みたいなやりとりが前あったから自分が早とちりした

>スクリプトファイルが存在しません
それは多分URLExec2.datの記述を間違えてるか、ファイル入れ忘れかと思う
APIとHTMLは別々のファイルになってるよ
<> VIICさん<>sage<>11/04/14 13:45:56 ID:11hlrgcF<> ってAPI版の方も試してみたけど184行目でエラー出るね

応急処置として

link = child.getFirstChild().getNodeValue();
の真上に
if( child.getFirstChild() )
の一行挿入で動作確認

細かいところは見てないし>>873のURLで試しただけなんで
メンテする気ある人はよろしく… <> VIICさん<>sage<>11/04/15 08:56:30 ID:7wP9XMBp<> API版はどうやっても「スクリプトファイルが存在しません」のエラーしか出ないですね
notepadで開いて編集してるのが不味いのかな
よく分かんないのでHTML版大人しく使っときます

有志の方、popuptweetスクリプト更新していただければ幸いです <> VIICさん<>sage<>11/04/16 11:50:43 ID:FiJIpyga<> 質問です

var h = '<html><body><form action=""><input type="text" name="text1"><input type="submit"></form></body></html>';
v2c.context.setResPaneHTML(h,"フォーム送信",true);
v2c.context.setPopupFocusable(true);
v2c.context.setTrapFormSubmission(true);

function formSubmitted(u, sm, sd) {
v2c.println(decodeURIComponent(sd));
}

上記のようなスクリプトでテキストボックスの値をformSubmittedで受け取ろうとすると、
内容が日本語の場合に下記のようなエラーがでます。
sun.org.mozilla.javascript.internal.EvaluatorException: Malformed URI sequence. (<Unknown source>#7) in <Unknown source> at line number 7

そもそもフォーム送信等の動作についてよくわかってないのですが、
自分で調べたところどうやらShift-JISでエンコードされているようで、decodeURIComponentはUTF-8用とのこと

「テスト送信」と書いて送ると
%83%65%83%58%83%67%91%97%90%4D
が返ってきます

これまた調べてるうちに、decodeURIComponentの代わりに
java.net.URLDecoder.decode(s)を使えばとりあえず私の環境でうまくいくことが分かったのですが
解決法としてはこれであってますか?

ttp://java.sun.com/javase/ja/6/docs/ja/api/java/net/URLDecoder.html
みてると、エンコーディングを指定して使うようにしろとか書いてあるのですが
そもそもどんな環境でもShift-JISで返ってくるのかどうか自体が自分には分からないので…

【V2C】 T20110411 [2.5.1_03] (L-0.6.2:amd64)
【Java】 1.6.0_24-b07 (Sun Microsystems Inc.)
【OS】 Windows 7 (amd64)
<> VIICさん<>sage<>11/04/16 13:43:29 ID:QPbx2rt8<> コピーした(長い)URLを短縮してペースト・・・なんてスクリプトでできたりしますか ? <> VIICさん<>sage<>11/04/16 22:27:50 ID:/IxWJBlp<> >>882
元からV2C本体にURL短縮の機能ついてるが… <> n|a<>sage<>11/04/16 22:39:55 ID:O8gPWEFf<> >>871
次回更新で修正します。
>>881
次回更新ではformSubmittedのデータはUTF-8固定でエンコードするようにします。
>>882
現在URL短縮はスクリプトの機能としてはありません。 <> VIICさん<>sage<>11/04/17 13:52:18 ID:r/5Q8qvh<> 検索ボックスに >>\d という正規表現を入れたら
>>10>>25 とかのレスは抽出できたけど、
この抽出されたレスをスクリプトで隠したいなら
コードはどう書けばいいのでしょうか? <> VIICさん<>sage<>11/04/17 14:28:22 ID:e0UA6Hdl<> わざわざスクリプトで書かなくても
1レス丸ごと隠すなら非表示・キーワード設定、
アンカーのみを隠すならReplaceStr.txtを使えばいいんじゃない? <> VIICさん<>sage<>11/04/17 15:55:02 ID:Vw4KensX<> >>884
>>871
>次回更新で修正します。
>>881
>次回更新ではformSubmittedのデータはUTF-8固定でエンコードするようにします。
レス有難うございます! よろしくお願いします!

>>885
RE A/a & l
が並んでるところは論理反転の項目がついでにあってもいいんじゃないかと思った事ありますな
抽出ダイアログとか過去ログ検索とか
lと!の見分けが大変そうだけど…

スクリプトでやるなら
>>28
if (rs.idCount!=1) {
の行を
if (!rs.message.match(/\>>\d/)) {
でいいんじゃないですかね <> VIICさん<>sage<>11/04/17 17:32:46 ID:r/5Q8qvh<> >>887
出来たー。
スクリプトの分からない俺に
大変助かりました。どうも! <> VIICさん<>sage<>11/04/22 11:22:28 ID:l1jim0ci<> ステータスバー自動ダウンロードポップアップ"ImgDLStatus"の
"幅の設定…"は消せますか?
エラーになって消せません <> VIICさん<>sage<>11/04/22 14:32:08 ID:sk2Hd8n9<> >>889
ヘルプにある項目削除のサンプルをそれ用に修正して試してみたけど普通に消せたよ
そのエラーの内容が分からんからなんとも言えんが
単純にコードが間違ってるんじゃない? <> VIICさん<>sage<>11/04/22 14:48:22 ID:l1jim0ci<> すいませんエラー内容は

スクリプト実行エラー: sun.org.mozilla.javascript.internal.WrappedException: Wrapped java.lang.ArrayIndexOutOfBoundsException: No such child: 4 (<Unknown source>#1664) in <Unknown source> at line number 1664

if (sn == 'ImgDLStatus') {
for (var i=pm.getComponentCount()-1; i>=0; i--) {
var mi=pm.getComponent(i); ←←←←←←←←←←1664行目
if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
continue;
}
if (mi.getText().startsWith('自動ダウンロードを一時停止')
|| mi.getText().startsWith('自動ダウンロードを再開')
|| mi.getText().startsWith('幅の設定…')) {
pm.remove(i);
removeRedundantSeparator(pm);
}
}
} <> VIICさん<>sage<>11/04/22 15:13:36 ID:sk2Hd8n9<> >>891
>java.lang.ArrayIndexOutOfBoundsException
って言ってるから、iの値が要素数以上を指定してると言ってる
一番最初に消される 幅の設定 の時に
pm.remove(i);
removeRedundantSeparator(pm);
ここでセパレータも消してしまうのが原因だろう

結論だけ書くと
removeRedundantSeparator(pm);
をループの外に出せばいい
そもそもこれは編集し終わったpmに対して最後に一回実行すればいいはず <> VIICさん<>sage<>11/04/22 15:15:26 ID:K9UFPA3z<> どのポップアップメニューのことか分からないのでテストできないけど、removeRedundantSeparator(pm)をforの後に実行したらどう?
if (sn == 'ImgDLStatus') {
 for (var i=pm.getComponentCount()-1; i>=0; i--) {
  var mi=pm.getComponent(i);
  if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
   continue;
  }
  if (mi.getText().startsWith('自動ダウンロードを一時停止')
   || mi.getText().startsWith('自動ダウンロードを再開')
   || mi.getText().startsWith('幅の設定…')) {
   pm.remove(i);
  }
 }
 removeRedundantSeparator(pm);
} <> VIICさん<>sage<>11/04/22 15:20:34 ID:l1jim0ci<> >>892,893
出来ました
お二方ともありがとうございます!
うーんまだまだ勉強不足ですorz

> そもそもこれは編集し終わったpmに対して最後に一回実行すればいいはず
と言うことは手直ししたほうが良さそうですね
全てこうなってしまってるので
ありがとうございました! <> VIICさん<>sage<>11/04/22 15:30:08 ID:sk2Hd8n9<> つうか1664行目って…物凄いダイエットさせてるんだな
残すものより消す方が多いなら
消す方を指定するんじゃなくて残す方を指定した方が分かりやすいんじゃないか?

今回の場合だと

if (sn == 'ImgDLStatus') {
 for (var i=pm.getComponentCount()-1; i>=0; i--) {
  var mi=pm.getComponent(i);
  if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
   continue;
  }
  if (!mi.getText().startsWith('全ての自動ダウンロードを中止')) {
   pm.remove(i);
  }
 }
 removeRedundantSeparator(pm);
}

とかさ
今更過ぎると思うけど <> VIICさん<>sage<>11/04/22 15:58:08 ID:l1jim0ci<> >>895
凝り性なものでコンテキストメニューの殆どに手を加えていますので
消すほうが多いと言っても半々ぐらいかなと思います
移動の項目でもだいぶ占有してるので
詳しい人が見たらメチャクチャなコードだと思いますが
処理速度には影響ない?という風に考えてますので弄り倒してますw

そちらも参考になりました!が手直しする気は起きませんw <> −<>sage<>11/04/23 19:28:26 ID:XvGbPNoa<> setPopupHTML()で表示したhtmlで、
hrefが相対アドレスのものはクリックしてもブラウザで開かれず、
redirectURLも呼ばれないんですが、これって仕様ですかね?

↓テスト
var s = v2c.readURL('h' + 'ttp://v2c.s50.xrea.com/');
v2c.context.setPopupHTML(s);
v2c.context.setRedirectURL(true);
v2c.context.setCloseOnLinkClick(false);

function redirectURL(u) {
v2c.alert('redirectURLが呼ばれました');
}

【V2C】 T20110418 [2.5.1_04] (L-0.6.2:amd64)
【Java】 1.6.0_24-b07 (Sun Microsystems Inc.)
【OS】 Windows 7 Service Pack 1 (amd64) <> n|a<>sage<>11/04/23 22:26:37 ID:yxpns6m9<> >>897
2行目に
s = s.replaceFirst('(?i)</head>','<base href="h'+'ttp://v2c.s50.xrea.com/"></head>');
を入れると期待する動作になると思います。 <> VIICさん<>sage<>11/04/23 22:36:04 ID:XvGbPNoa<> >>898
なるほど…
自分で書き換えてやればいいわけですね

無理だったらそうしようかとは思ってましたが、
自分でやってたらhrefの中身を一つずつ絶対アドレスに置換していくトコでした
勉強になります <> VIICさん<>sage<>11/04/24 02:27:55 ID:RCJGLQoD<> 【V2C】 2.5.1 [R20110321] (L-0.6.2:x86)
【Java】 1.6.0_24-b07 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86)
【メモリ】 Total(Free)/Max.: 38(24)/742 (Phys. Total/Avail.: 3069/1959) [MB]
【不具合内容】 tree.jsが動作しない

【登録場所】 レス表示
【コマンド】 $SCRIPT tree.js ref respane <> VIICさん<>sage<>11/04/24 03:50:33 ID:+nCTUXkP<> >>900
tree.jsの修正
ttp://loda.jp/v2cthread/?id=56.zip

コマンド11で"input"も数値もない場合、仕様と違うのを修正
※588行目を空けて以下を追加した
if(SearchKey === undefined) SearchKey = 3; <> VIICさん<>sage<>11/04/24 15:22:50 ID:RCJGLQoD<> >>901
動作しました
ありがとうございます <> VIICさん<>sage<>11/04/26 03:15:04 ID:SwbRjox5<> >>884
>>871
>次回更新で修正します。
>>881
>次回更新ではformSubmittedのデータはUTF-8固定でエンコードするようにします。

お疲れ様です
T20110425で確認しました <> 842<>sage<>11/04/26 04:31:27 ID:2aCQ+U9y<> タブを閉じる機能についてありがとうございます。

getdat.jsを置いておきます。
ttp://loda.jp/v2cthread/?id=57
※T20110424以上で動作
※自分用のため半自動です。任意でよろ。

動作の仕様は、
・みみずんを使用。
・最初に2chのURLにアクセス。
・未取得が0以下の場合、過去ログは取得しない。
・過去ログを取得する前にダイアログ(タイトル、総レス数、未取得数、(本文 ※デフォはコメントアウト))表示。
・新規の過去スレを開いて、かつダイアログをキャンセルした場合、そのレスタブを閉じる。 <> VIICさん<>sage<>11/04/26 11:12:34 ID:Cg2jz19r<> 乙です <> VIICさん<>sage<>11/04/26 14:57:08 ID:35U1liv1<> >>904
便利ですねー
ありがたく使わせていただきます
お疲れ様でした <> VIICさん<>sage<>11/04/26 23:28:06 ID:21uwLDeQ<> Java+Swingによる2chブラウザ V2C_R38
ttp://hibari.2ch.net/test/read.cgi/software/1301133585/795
> 795 :名無しさん@お腹いっぱい。 :2011/04/26(火) 15:25:55.91 ID:PIEMdUr+0
> レス上の画像URLを画像詳細サイトに送るような方法ってありますか?

↑を行う外部コマンド用スクリプト
ttp://www1.axfc.net/uploader/File/so/62065

書庫内のSearchEx.wsf, SearchEx.htmを解凍後、V2C\script\にコピーして、外部コマンドの設定-リンクに下記の3つを追加
* h ttpがNGに設定されているので下記ではttpから始まるURLになってますが、hは必要です
ラベル: 二次元画像検索
コマンド: wscript "$SAVEDIR\script\SearchEx.wsf" "$LINK" "" "ttp://www.ascii2d.net/imagesearch/search?uri=" "" "POST"

ラベル: 画像情報検索サイト
コマンド:wscript "$SAVEDIR\script\SearchEx.wsf" "$LINK" "" "ttp://iisearch.ddo.jp/front.php?mode=1&url=" "Shift_JIS" "POST"

ラベル: booru系類似画像検索
コマンド: wscript "$SAVEDIR\script\SearchEx.wsf" "$LINK" "" "ttp://iqdb.org/?url=" "" "POST"

作っておいて言うのも何ですが、これをv2c.createHttpRequest(u,d)、hr.setRequestProperty(n,v)、hr.getContentsAsString()を使ってPOSTされた結果をv2c.context.setResPaneHTML(s,t,b)でV2C内のタブで表示(要は外部スクリプトに頼らない方法)ってできるんでしょうか? <> VIICさん<>sage<>11/04/27 00:15:25 ID:uulngRo2<> >>907
IEで開いちゃうんですがブラウザの設定はどうすればいいんでしょう <> VIICさん<>sage<>11/04/27 00:39:26 ID:zneBlm9/<> >>908
ttp://www1.axfc.net/uploader/File/so/62075

たぶん、htmがIEに関連づけられてるのだと思います。とりあえずブラウザを指定できるように変更してみました
SearchEx.wsfを開いて6行目のvar brwにブラウザのフルパスを指定すればIE以外でも開けると思います。\は\\って書かないとダメなので気をつけてください <> VIICさん<>sage<>11/04/27 00:47:50 ID:uulngRo2<> >>909
できました
ありがとうございます <> VIICさん<>sage<>11/04/27 00:53:50 ID:T0eOT8gz<> >>907
自分も自前でPOSTしたいと思ったりしたこと有ったんですが
httpもhtmlも知らん所からだったので途中で挫折しました
とりあえずページをポップアップさせて
formSubmittedでpostのデータを受けてそれをそのまま投げる……とやればなんとかなりそうだけど
そうでない場合はソースから自分でゴリゴリpostデータを組まないといけないのですかね?

このスレのコードの寄せ集めで前者のやり方ができたんで(かなりやっつけですが)
晒してみます
自分で検索ボタン押す必要があります

var imagesearchUrl = 'h' + 'ttp://www.ascii2d.net/imagesearch/';
var h = v2c.readURL(imagesearchUrl);
h = h.replaceFirst('(?i)</head>','<base href="' + imagesearchUrl + '"></head>');
h = h.replaceFirst("(?i)(?<=type='text')>",' value="' + v2c.context.link + '">');

v2c.context.setPopupHTML(h);
v2c.context.setTrapFormSubmission(true);
v2c.context.setPopupFocusable(true);
function formSubmitted(u, sm, sd) {
v2c.context.closeOriginalPanel();
var hr = v2c.createHttpRequest(u, sd);
var sr = hr.getContentsAsString();
if (hr.responseCode >= 301 && 303 >= hr.responseCode) {
var url = hr.getResponseHeader("Location");
sr = v2c.readURL(url);
sr = sr.replaceFirst('(?i)</head>','<base href="' + imagesearchUrl + '"></head>');
}
v2c.context.setResPaneHTML(sr,"画像詳細検索",true);
}


面倒だわ内部で開くメリットも大してないわで
>>909でいいだろって感じですが <> VIICさん<>sage<>11/04/27 01:55:09 ID:T0eOT8gz<> 質問です

せっかくth.close()が実装されたので>>843をやろうと思ったのですが
dat落ちの判定ってどうすればいいですかね?
今は「th.keyがsubject.txtになければ」という方法で判定してますが、もっといい方法あれば教えてください
そもそもこれでちゃんと判定出来るのかも自信無いんですが <> VIICさん<>sage<>11/04/27 04:42:54 ID:FHTQpQMW<> >>904 のgetdatを使用した場合たまにレス1のみ取得してタブを閉じるという挙動になります
その結果レス1のみのログが残ってしまいます(dat落ちして間もないスレでよくなる)
th.closeとは別にth.(ログを削除して閉じる)
という風なのを検討お願い致します <> VIICさん<><>11/04/27 15:50:03 ID:3Es2UYmg<> >>907
画像情報検索サイトで「ファイルを選択するか、画像のURLを貼りつけてから検索ボタンを押してください。」ってエラーが出ちゃうんだけど
他の2つのサイトでの検索コマンドでも同様にエラーが出る
何か間違っているか手順が抜けてたら教えて欲しい

1. SearchEx.wsf, SearchEx.htmの2つをscriptフォルダにコピー
2. 外部コマンドのリンクにそれぞれのラベル、コマンド(URLはhtt〜と修正)を登録
 (コマンドはwscriptから"POST"まできちんと選択されているのは確認済)
3. 念のためV2Cを再起動
4. 画像リンクを右クリックして画像検索
5. エラー「ファイルを選択するか、画像のURLを貼りつけてから検索ボタンを押してください。」('A`) <> 914<><>11/04/27 16:03:11 ID:3Es2UYmg<> 自己解決
>>909さんのファイルで問題なくできました。 <> VIICさん<>sage<>11/04/27 18:00:19 ID:zneBlm9/<> >>911
内部で開けたら良いなと思ったのは、たぶん内部で開ければSearchExが行ってるローカルhtmlからのsubmit(リダイレクト)を省略できるかな?と思ったからなんです

>>914-915
どっちのスクリプト使っても、ブラウザ側で1回リダイレクトの許可を行わないとエラーがでると思います
OSかブラウザを再起動すると>>914と同じ現象がおこるはず(一応zipに同梱してたreadme.txtには注意事項として書いてあります <> n|a<>sage<>11/04/27 22:39:08 ID:nG4DZbXD<> >>912
v2.5.2では th.live がLiveなスレッドかどうかを返すようにしました。
>>913
v2.5.2では最初のレスのみを取得することはなくなったはずです。
もしv2.5.2でも最初のレスを取得するようならば
th.close();
の後に
java.lang.Thread.currentThread().interrupt();
を入れてみてください。 <> VIICさん<>sage<>11/04/28 01:20:16 ID:0OQDswLF<> ttp://www1.axfc.net/uploader/File/so/62120

>>907, 909をV2C用のスクリプトだけで行うようにしてみました。>>909のファイルは残しておきますけど、こちらのスクリプトの使用を推奨します
書庫内のSearchExmodoki.jsを解凍後、V2C\script\にコピーして、外部コマンドの設定-リンクに下記の3つを追加
* 二次元画像検索のときは回線の状況次第では、ブラウザで開かれる前に少しタイムラグが発生すると思います
* 二次元画像検索のときでもPOST内容を直接ブラウザで開けるかも知れませんが、1回失敗したので諦めました

ラベル: 二次元画像検索
コマンド: ${SCRIPT:S} SearchExmodoki.js $LINK 1

ラベル: 画像情報検索サイト
コマンド: ${SCRIPT:S} SearchExmodoki.js $LINK 2

ラベル: booru系類似画像検索
コマンド: ${SCRIPT:S} SearchExmodoki.js $LINK 3 <> 913<>sage<>11/04/28 02:38:42 ID:nyyosmWa<> >>917
2.5.2にしても残ってしまってましたが
java.lang.Thread.currentThread().interrupt();
これを挿入することにより問題は解決いたしました
ありがとうございます! <> VIICさん<><>11/04/28 04:00:21 ID:FGibJoh4<> >>918
ありがとう、いただきました
問題なく使えてます <> VIICさん<><>11/04/28 13:27:19 ID:0PtcSGU4<> ますます便利になっていくな <> VIICさん<>sage<>11/04/29 00:47:36 ID:qSlmaDoE<> スレチ臭いですが
ttp://gate-keeper.ddo.jp/wiki/index.php?StatusChecker
これを快適に使用したくて、アプリへのパス$SELTEXT
で外部コマンドへ登録しましたがうまく動きません

コピー後実行するとこのアプリでクリップボードを取得するみたいなので
妥協してコピー実行後アプリケーション起動を行っているのですが
これをワンステップで行いたいです
可能でしょうか? <> VIICさん<>sage<>11/04/29 01:09:54 ID:Kmy4j3jw<> >>922
選択テキストなら "ソフトまでのパス" $SELTEXT
リンクなら "ソフトまでのパス" $LINK
で普通に動いたよ? <> VIICさん<>sage<>11/04/29 01:35:21 ID:qSlmaDoE<> >>923
うわ何故か相対パスで指定していました($SAVEDIR\StatusChecker\StatusChecker.exe $SELTEXT)
長年の悩みが解決しました聞いてみるもんですね
ありがとうございました! <> VIICさん<>sage<>11/04/30 13:11:20 ID:tzcGAbvu<> wiki側にスクリプトを追加しました。
b_hatena.jsは>870まま
imageExtractは>851
getdat.jsは>917をコメントアウトで付加したもの
rescheck.jsは>810にck.fukidasiのパターン抜けを追加したもの
です。
他はwiki側においていいのかわからないので保留しました。 <> VIICさん<>sage<>11/05/01 13:24:48 ID:/TGRXcFN<> 【V2C】 2.5.2 [R20110427] (L-0.6.2:x86)
【Java】 1.6.0_24-b07 (Sun Microsystems Inc.)
【OS】 Windows XP Service Pack 3 (x86)
【メモリ】 Total(Free)/Max.: 254(148)/494 (Phys. Total/Avail.: 2030/934) [MB]
【不具合内容】
wikiのselect_font.jsで以下のコンソールエラーが出るようです。
【再現方法】
ttp://www39.atwiki.jp/v2cwiki/pages/99.htmlのファイルを使用
スクリプトを立ち上げて変更ボタンを押す。
【調査済項目】
32行目をvcx.closeOriginalPopup();にして
${SCRIPT:A}を使用で、でなくなったようなのですが正しいのかエラーの中身がわからないので報告しました。

Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.monazilla.v2c.V2CScriptContext.class$(Unknown Source)
at org.monazilla.v2c.V2CScriptContext$1.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission C:\Program Files\V2C\icon\item\Document read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkRead(Unknown Source)
at java.io.File.isFile(Unknown Source)
at org.monazilla.v2c.V2CLocalFileHandler.getSystemIconImage(Unknown Source)
at org.monazilla.v2c.V2CLocalFileHandler.getSystemIcon(Unknown Source)
at org.monazilla.v2c.V2CSwingUtil.getSystemIcon(Unknown Source)
at org.monazilla.v2c.V2CSwingUtil.getItemIcon(Unknown Source)
at org.monazilla.v2c.V2CTextPanel.<clinit>(Unknown Source)
... 18 more <> VIICさん<>sage<>11/05/04 20:24:54 ID:6LpMzYzE<> >>918のスクリプトをjdic(内部ブラウザ)で開くことはできますか ?
<> VIICさん<>sage<>11/05/05 14:45:41 ID:iMzCRQrp<> >>927
25行目のv2c.browseURLExt(url)を
v2c.browseURL(url)にする <> VIICさん<>sage<>11/05/05 15:13:54 ID:iMzCRQrp<> 少し機能の追加 ※今はつながり難いかも、めんどいので様子見
ago.jsと
ttp://loda.jp/v2cthread/?id=58
bracket.jsを更新
ttp://loda.jp/v2cthread/?id=59

ago.jsは実行したレス以降にがある場合はそこまでの時間をポップアップ
bracket.jsは引数2つを記述することでデフォルトの「」を変更できるようにした。 <> VIICさん<>sage<>11/05/05 15:15:25 ID:iMzCRQrp<> >929
レス以降に「チェック」がある場合・・・
でした。 <> VIICさん<>sage<>11/05/05 15:28:23 ID:IKrotg/f<> >>928
ありがとう ! <> VIICさん<>sage<>11/05/05 17:53:49 ID:bcZAceQF<> >>843をそれなりに汎用的になるようやってみました

//【登録場所】全体、レス表示
//【ラベル】開いてるスレを閉じる
//【内容】開かれているスレにおいて、指定条件に合致するものを閉じる
//【コマンド1】${SCRIPT:Fr} closeThreads.js
//【コマンド2】${SCRIPT:Fr} closeThreads.js 10 10 105 100.5 10 1 チェックやテキストボックスの初期値を指定。
//【コマンド3】${SCRIPT:Fr} closeThreads.js 10 10 1010 1020 10current,software 1
//1つ目-未読無し
//2つ目-dat落ちor1000到達
//3つ目-○時間書き込みなし
//4つ目-勢い
//5つ目-板指定
//6つ目-閉じる前に確認
//一桁目がAc(1ならON) 2桁目が&と|(1なら|が選択)に対応する。 テキストボックスの初期値は3桁目以降に入力する
//コマンド2の例だと 時間の初期値が5、勢いが0.5
//コマンド3の例だと、時間の初期値が10、勢いが20 板初期値が(開いてる板,ソフトウェア板)
//「板指定」にcurrentを設定すると、現在開いている板に置き換わる
ttp://loda.jp/v2cthread/?id=63.zip

自分は基本最初の二つチェックでしか使ってないので
おかしな動作する可能性あり


後、バグなのかどうかちょっと分かりませんが
input のボタン上にマウスカーソルが移動すると
勝手にポップアップが閉じてしまうときがあります。
>>620にも似た様な報告有りますが、
setCloseOnMouseExit(true);は使っていません。
再現性はちょっと分かりません。
このスクリプト作成中にポップアップとスクリプトコンソール行ったり来たりしてると
時々発生してました。

【V2C】 2.5.2 [R20110427] (L-0.6.2:amd64)
【Java】 1.6.0_24-b07 (Sun Microsystems Inc.)
【OS】 Windows 7 Service Pack 1 (amd64)
【メモリ】 Total(Free)/Max.: 979(501)/1365 (Phys. Total/Avail.: 6142/1647) [MB] <> VIICさん<>sage<>11/05/07 17:42:28 ID:UYK50Nh1<> >>719 のスクリプト使用してコピーしているのですがIDが表示されない板の場合
ID:nullという風にコピーされます
IDでない板ではIDコピーしないという風には出来ないでしょうか?
ブラウザでコピーしたのと一緒にしたいです
よろしくお願いします <> VIICさん<>sage<>11/05/07 18:02:43 ID:O/zTvJvG<> >>933
' ID:' + res.id,

(res.id ? ' ID:' + res.id : ''),

に置換 <> VIICさん<>sage<>11/05/07 18:17:23 ID:UYK50Nh1<> >>934
希望通りの動作です
即レスありがとうございました! <> VIICさん<>sage<>11/05/08 10:06:15 ID:glnMBtE1<> menu.jsで絞り込み入力欄のコンテクストメニューの履歴をサブメニュー化したく以下のようにして、サブメニュー化したのですが
移動した履歴メニューをクリックしても入力欄に履歴が入力されませんでした。
もし可能でしたら対応して頂けないでしょうか?

function popupMenuCreated(pm,sn){
if(sn == "ThreadViewMiniSearch" || sn == "ThreadListMiniSearch"){
var subm = null;
var subm_index = -1;
var list = [];
for (var i =pm.getComponentCount()-1; i>=0; i--){
var mi = pm.getComponent(i);
if (!(mi instanceof javax.swing.JMenuItem)) continue; //セパレータ
var sl=mi.getText();
if (sl.endsWith("[]")){
if (subm == null) subm = new javax.swing.JMenu("履歴");
subm_index = i;
subm.insert(mi,0);
}
}
if (subm != null) pm.insert(subm, subm_index);
}
} <> VIICさん<>sage<>11/05/08 16:24:50 ID:E4Lq+xeh<> V2C提示版では書き込み時に自動でリンクをh抜きするスクリプト
post.jsを置いときます。※systemフォルダ内に置く
ttp://www1.axfc.net/uploader/Sc/so/232055

あと、
>719のcopyWithDefAnon.jsを更新
ttp://www1.axfc.net/uploader/Sc/so/232056
・>934の変更
・チェックによる複数選択、
・ファイル内の設定により、行先頭に「> 」の付加(デフォはfalse)
・ファイル内のコメント解除でスレッドタイトルとURLを付加できるようにした。
カスタムコピーに近くなった・・・ <> 937<>sage<>11/05/08 16:33:50 ID:E4Lq+xeh<> すみません。
>937のcopyWithDefAnon.jsは、コピーしないで「書き込み欄に送る」になってました。
元のデフォである「書き込み欄に送る」を行わずにコピーするものに修正しました。
ttp://www1.axfc.net/uploader/Sc/so/232057 <>