//【登録場所】 "V2C\script\system\post.js"
//【内容】post.jsのまとめ
//【備考】checkBeforeCreateThreadとcheckBeforePostの{}内で、行頭のコメント「//」を、利用する行ごとに解除することで、有効になります。
//【更新日時】2013/12/11 爆サイへの書き込みを追加
//【スクリプト】
// ----- 次の行から -----
function checkBeforeCreateThread(wp){
var post = true;
return post
/* スレ立て時の機能を有効にしたい場合、下の各行頭//を削除してください */
&& uneiitaCautionByBoard(wp) //スレ立て時、特定の板、かつ、スレタイに特定のキーワードが含まれていたら警告する
&& replaceh(wp) //自動でURL先頭のhを文字参照(16進数)に置換する。(デフォルトはV2C提示版)
&& checkSimilarThread(wp) //スレ立て重複チェック
};
function checkBeforePost(wp){
var post = true;
return post
/* レス書き込み時の機能を有効にしたい場合、下の各行頭//を削除してください */
// && escapeCharRef(wp) //文字参照をそのままスレッドに表示させる(&を&に置換する、デフォルトはV2C提示版の'スクリプト'と'レス表示スタイル')
&& replaceh(wp) //自動でURL先頭のhを文字参照(16進数)に置換する。(デフォルトはV2C提示版)
// && removeh(wp) //自動でURL先頭のh抜きをする。(デフォルトはtwitter以外)
&& replaceTab(wp) //書き込み時に【TAB】に自動置換(デフォルトはスレタイが'ImageViewURLReplace','ReplaceStr','URLExec')
// && closeWritePanel(wp) //書き込み後自動で閉じる(常に行う場合、メニューの設定で可能です。デフォルトはtwitter以外)
// && checkBlankName(wp) //名前欄が空欄 or !ninja or !denki以外で警告(デフォルトはローカル板とtwitter以外)
// && reloadBeforePost(wp) //書き込み前に更新して新着があれば書き込まない ※勢いのあるスレではそのまま書き込む(デフォルトはローカル板とtwitter以外)
// && checkMoitaKotehan(wp) //モ娘(狼)で「名無し募集中。。。」で書き込むときは警告を出さず他の板だと警告を出す
&& uneiitaCautionByRes(wp) //運営板で書き込むと規制されると予測される場所の場合書き込み時に警告をだす
&& writeFutabaThread(wp) //ふたばちゃんねるに書き込む
&& writeBakusaiThread(wp) //爆サイに書き込む
};
function checkSimilarThread(wp) {
// ---------------------------------------------------------------
// [設定] 類似比較で重複と判断する閾値(低いほど文字列一致度が高い)(Default = 2 ※Partの数値が違う程度の一致度)
var threshold = 2;
// [設定] キャンセル時に重複スレッドを開く
var openSimilar = true;
// [設定] 現在時刻のlimit_msecミリ時間前以前に立ったスレッドは重複判定から除外する(前スレ除外用)(Default = 86400000 1日前)
var limit_msec = 86400000;
// ---------------------------------------------------------------
var bbs = wp.thread.bbs;
if (bbs.twitter || wp.thread.local) { return true; }
try {
var newThreadName = String(wp.title);
var newThreadNormedName = normalize(newThreadName);
var oldThreadNormedName = '';
var matches = newThreadNormedName.match(/\d+/g);
if (matches != null) {
var tmp = newThreadNormedName.split(matches[matches.length - 1]);
var num = parseInt(matches[matches.length - 1]) - 1;
oldThreadNormedName = tmp.join(num.toString());
}
var bd = wp.thread.board;
var ss = v2c.readURL(bd.url + 'subject.txt');
if (v2c.interrupted) { return false; }
if (!ss) { throw 'subject.txtの取得に失敗(' + bd.url +')'; }
var lines = ss.split('\n');
var results = [];
var limit = getMSec(new Date()) - limit_msec;
for (var i = 0; i < lines.length; i++) {
if (/^(\d+)\.(?:dat<>|cgi,)(.+) ?\((\d+)\)/.test(lines[i])) {
var item = {'org' : String(RegExp.$2), 'score' : 9999, 'key' : RegExp.$1};
var t = parseInt(item.key + '000');
if (t < limit) { continue; }
var tmp = normalize(item.org);
item.score = levenshtein(newThreadNormedName, tmp);
if (item.score <= threshold) {
if (oldThreadNormedName === tmp) { continue; } // パートスレの前スレは除外
results.push(item);
}
}
}
if (results.length <= 0) { return true; }
results.sort(function(a, b) { return a.score - b.score; });
var mes = '重複の可能性があるスレッドを見つけました。\nタイトル:' + results[0].org + '\nスレ立てする場合は「OK」を押して下さい';
if (openSimilar) { mes += '\n「キャンセル」を押すと重複スレを開きます'; }
var post = v2c.confirm(mes);
if (openSimilar && !post) {
if (bbs.is2ch || bbs.is2cheq) {
v2c.openURL('http://' + bd.url.getHost() + '/test/read.cgi/' + bd.key + '/' + results[0].key + '/');
} else if (bbs.shitaraba) {
v2c.openURL(bd.url + '/' + results[0].key + '/');
} else if (bbs.machi) {
var tmp = String(bd.url).replace(/http:\/\/(\w+\.machi\.to)\/(\w+)\//i, 'http://$1/bbs/read.cgi/$2/' + results[0].key + '/');
v2c.openURL(tmp);
}
}
return post;
} catch(e) {
v2c.println('[post.js : checkSimilarThread()] エラー: ' + e);
return v2c.confirm('post.jsのスレ立て重複確認の実行に失敗しました。本機能を無視してスレ立てする場合は「OK」を押して下さい');
}
function getMSec(date) {
var yy = date.getYear();
var mm = date.getMonth();
var dd = date.getDate();
if (yy < 2000) { yy += 1900; }
return (new Date(yy, mm, dd)).getTime();
}
// スレタイの正規化
function normalize(s1) {
//カッコを削除
s1 = s1.replace(/[\[\(\<【({<[《〔][^\]\)\>】)}」』>]》〕]+[\]\)\>】)}>]》〕]/g, ''); // カッコの種類の「『 はタイトルに使われる場合があるので除外
//全角英数字を半角に
s1 = s1.replace(/[!-~]/g, function(s) {
return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
});
//半角英数字をと日本語以外は削除。小文字を大文字に
s1 = s1.replace(/[^一-龠ぁ-んァ-ヴa-zA-Z0-9\r\n]/ig, '').toUpperCase();
var hanKana = ['ガ', 'ギ', 'グ', 'ゲ', 'ゴ', 'ザ', 'ジ', 'ズ', 'ゼ', 'ゾ', 'ダ', 'ヂ', 'ヅ', 'デ', 'ド', 'バ', 'パ', 'ビ', 'ピ', 'ブ', 'プ', 'ベ', 'ペ', 'ボ', 'ポ', 'ヴ',
'ァ', 'ア', 'ィ', 'イ', 'ゥ', 'ウ', 'ェ', 'エ', 'ォ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ッ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ',
'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ャ', 'ヤ', 'ュ', 'ユ', 'ョ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ワ', 'ヲ', 'ン', '。', '「', '」', '、', '・', 'ー', '゙', '゚'];
var zenKana = 'ガギグゲゴザジズゼゾダヂヅデドバパビピブプベペボポヴァアィイゥウェエォオカキクケコサシスセソタチッツテトナニヌネノハヒフヘホマミムメモャヤュユョヨラリルレロワワヲン。「」、・ー゛゜';
var zenHira = 'がぎぐげござじずぜぞだぢづでどばぱびぴぶぷべぺぼぽゔぁあぃいぅうぇえぉおかきくけこさしすせそたちっつてとなにぬねのはひふへほまみむめもゃやゅゆょよらりるれろわわをん。「」、・ー゛゜';
//全角カタカナひらがなを半角カタカナに
s1 = s1.replace(/[ぁ-んァ-ヴ「」、・ー゛゜]/g, function(s) {
var n = zenKana.indexOf(s);
if (n != -1) { return hanKana[n]; }
n = zenHira.indexOf(s);
if (n != -1) { return hanKana[n]; }
return '';
});
return s1;
}
// 文字列の類似比較用距離関数
function levenshtein(s1, s2) {
// http://k...content-available-to-author-only...d.net
// + original by: Carlos R. L. Rodrigues (http://w...content-available-to-author-only...l.com)
// + bugfixed by: Onno Marsman
// + revised by: Andrea Giammarchi (http://w...content-available-to-author-only...t.com)
// + reimplemented by: Brett Zamir (http://b...content-available-to-author-only...r.me)
// + reimplemented by: Alexander M Beedie
// * example 1: levenshtein('Kevin van Zonneveld', 'Kevin van Sommeveld');
// * returns 1: 3
if (s1 == s2) {
return 0;
}
var s1_len = s1.length;
var s2_len = s2.length;
if (s1_len === 0) {
return s2_len;
}
if (s2_len === 0) {
return s1_len;
}
// BEGIN STATIC
var split = false;
try{
split=!('0')[0];
} catch (e){
split=true; // Earlier IE may not support access by string index
}
// END STATIC
if (split){
s1 = s1.split('');
s2 = s2.split('');
}
var v0 = new Array(s1_len+1);
var v1 = new Array(s1_len+1);
var s1_idx=0, s2_idx=0, cost=0;
for (s1_idx=0; s1_idx<s1_len+1; s1_idx++) {
v0[s1_idx] = s1_idx;
}
var char_s1='', char_s2='';
for (s2_idx=1; s2_idx<=s2_len; s2_idx++) {
v1[0] = s2_idx;
char_s2 = s2[s2_idx - 1];
for (s1_idx=0; s1_idx<s1_len;s1_idx++) {
char_s1 = s1[s1_idx];
cost = (char_s1 == char_s2) ? 0 : 1;
var m_min = v0[s1_idx+1] + 1;
var b = v1[s1_idx] + 1;
var c = v0[s1_idx] + cost;
if (b < m_min) {
m_min = b; }
if (c < m_min) {
m_min = c; }
v1[s1_idx+1] = m_min;
}
var v_tmp = v0;
v0 = v1;
v1 = v_tmp;
}
return v0[s1_len];
}
}
function uneiitaCautionByBoard(wp) {
var post = true;
if (wp.thread.bbs.is2ch) {
/* スレ立て時、特定の板、かつ、スレタイに特定のキーワードが含まれていたら警告する例 */
if (wp.thread.board.key.match(/^(operate|operatex|sec2ch|sec2chd|saku2ch|saku|sakud)$/) && wp.title.text.match(/(警告|規制|雑談)/)) {
post = v2c.confirm('運営板で「警告」、「規制」、「雑談」、いずれかのワードが\n含まれているスレタイを立てるとISP規制の対象となります。\n本当にスレ立てを行いますか?');
}
}
return post;
}
function uneiitaCautionByRes(wp) {
var post = true;
if (wp.thread.bbs.is2ch) {
/* 特定の板、かつ、スレタイに特定のキーワードが含まれているスレッドに書き込む場合に警告する例 */
if (wp.thread.board.key.match(/^(saku2ch|saku)$/) && wp.thread.title.match(/(開示|警告|規制|削除)/)) {
post = v2c.confirm('運営板への書き込みは妨害とみなされた場合ISP規制の対象となります。\n本当に書き込みを行いますか?');
}
/* 特定の板に書き込む場合に警告する例 */
if (wp.thread.board.key.match(/^(sec2ch)$/)) {
post = v2c.confirm('運営板への書き込みは妨害とみなされた場合ISP規制の対象となります。\n本当に書き込みを行いますか?');
}
/* 特定の板、かつ、★持ちのレスに特定のキーワードが含まれているスレッドに書き込む場合に警告する例 */
if (wp.thread.board.key.match(/^(operate|operatex|sec2ch|sec2chd|saku2ch|saku|sakud)$/)) {
for (var i = 0; i < wp.thread.resCount; i++) {
var res = wp.thread.getRes(i);
if (res && res.name.match(/★/) && res.message.match(/(警告|規制|雑談)/)) {
post = v2c.confirm('このスレッドには★持ちから警告が出されています。\n本当に書き込みを行いますか?');
break;
}
}
}
}
return post;
}
function checkMoitaKotehan(wp) {
var mes = '';
var bbs = wp.thread.bbs;
/* 設定 */
var all = false; //常に有効にする場合 true
/* 設定ここまで */
if (
all
/* 個別のBBS・板・スレッドなどで有効にしたい場合、下の例を参考に各行頭//を削除するなどしてください */
// || bbs.is2ch //BBSが2chの場合
// || bbs.is2cheq //BBSが2ch互換板の場合
// || bbs.shitaraba //BBSがしたらばの場合
// || bbs.machi //BBSがまちBBSの場合
// || bbs.twitter //BBSがTwitterの場合
// || th.local //スレッドがローカル板の場合
|| !bbs.twitter //BBSがtwitter以外の場合
/* 例ここまで */
) {
var isBlank = wp.name.text.match(/^(!ninja|!denki|!nanja|!kab|!omikuji|!dama)?$/);
var isNanasi= wp.name.text.match(/^名無し募集中。。。$/);
var isMoBoard = ('morningcoffee' == wp.thread.board.key);
if (isMoBoard) {
mes = (!isBlank && !isNanasi)? '名前欄が空欄ではありません。\n書き込みを行いますか?' : '';
} else {
if (isNanasi) {
v2c.println('nanasi');
mes = '名前欄に「名無し募集中。。。」を使用しています。\n書き込みを行いますか?';
} else if (!isBlank) {
v2c.println('blank');
mes = '名前欄が空欄ではありません。\n書き込みを行いますか?';
}
}
}
return (mes)? v2c.confirm(mes) : true;
}
// 対象文字列のチェック
function checkThStr(str, target) {
var tlen, i;
if ((tlen = target.length) > 0) {
for (i=0; i<tlen; i++) {
if (str.indexOf(target[i]) > 0) {
return true;
}
}
}
return false;
}
function escapeCharRef(wp) {
/* 設定 */
var all = false; //常に有効にする場合 true
/* 設定ここまで */
var post = true;
var th = wp.thread;
var bbs = th.bbs;
var url = th.board.url;
var title = th.title;
var ph = java.util.regex.Pattern.compile('&(#?\\w+;)');
var targetTitle = ['スクリプト','レス表示スタイル'];
if (
all
/* 個別のBBS・板・スレッドなどで有効にしたい場合、下の例を参考に各行頭//を削除するなどしてください */
// || bbs.is2ch //BBSが2chの場合
// || bbs.is2cheq //BBSが2ch互換板の場合
// || bbs.shitaraba //BBSがしたらばの場合
// || bbs.machi //BBSがまちBBSの場合
// || bbs.twitter //BBSがTwitterの場合
// || th.local //スレッドがローカル板の場合
|| bbs.is2cheq && url.path == '/v2cj/' && checkThStr(title, targetTitle)//V2C提示版でスレタイが”スクリプト”または”レス表示スタイル”の場合
/* 例ここまで */
) {
var mh = ph.matcher(wp.message.text);
if (mh.find() && v2c.confirm('文字参照が含まれています\n文字参照をそのまま表示(&を&に置換)しますか?')){
if (post) wp.message.text = mh.replaceAll('&$1');
}
}
return post;
};
function replaceh(wp) {
/* 設定 */
var all = false; //常に有効にする場合 true
/* 設定ここまで */
var post = true;
var th = wp.thread;
var bbs = th.bbs;
var url = th.board.url;
var ph = java.util.regex.Pattern.compile('h(ttps?://)');
if (
all
/* 個別のBBS・板・スレッドなどで有効にしたい場合、下の例を参考に各行頭//を削除するなどしてください */
// || bbs.is2ch //BBSが2chの場合
// || bbs.is2cheq //BBSが2ch互換板の場合
// || bbs.shitaraba //BBSがしたらばの場合
// || bbs.machi //BBSがまちBBSの場合
// || bbs.twitter //BBSがTwitterの場合
// || th.local //スレッドがローカル板の場合
|| bbs.is2cheq && url.path == '/v2cj/' //板がV2C提示版の場合
/* 例ここまで */
) {
var mh = ph.matcher(wp.message.text);
if (mh.find()){
// post = v2c.confirm('h抜きを行い書き込みますか?'); //確認する場合は行頭//を削除
if (post) wp.message.text = mh.replaceAll('h$1');
}
}
return post;
};
function removeh(wp) {
/* 設定 */
var all = false; //常に有効にする場合 true
/* 設定ここまで */
var post = true;
var th = wp.thread;
var bbs = th.bbs;
var url = th.board.url;
var ph = java.util.regex.Pattern.compile('h(ttps?://)');
if (
all
/* 個別のBBS・板・スレッドなどで有効にしたい場合、下の例を参考に各行頭//を削除するなどしてください */
// || bbs.is2ch //BBSが2chの場合
// || bbs.is2cheq //BBSが2ch互換板の場合
// || bbs.shitaraba //BBSがしたらばの場合
// || bbs.machi //BBSがまちBBSの場合
// || bbs.twitter //BBSがTwitterの場合
// || th.local //スレッドがローカル板の場合
|| !bbs.twitter //BBSがtwitter以外の場合
// || bbs.is2cheq && url.path == '/v2cj/' //板がV2C提示版の場合
/* 例ここまで */
) {
var mh = ph.matcher(wp.message.text);
if (mh.find()){
// post = v2c.confirm('h抜きを行い書き込みますか?'); //確認する場合は行頭//を削除
if (post) wp.message.text = mh.replaceAll('$1');
}
}
return post;
};
function replaceTab(wp) {
/* 設定 */
var all = false; //常に有効にする場合 true
/* 設定ここまで */
var post = true;
var th = wp.thread;
var bbs = th.bbs;
var url = th.board.url;
var title = th.title;
var ph = java.util.regex.Pattern.compile('\\t');
var targetTitle = ['ImageViewURLReplace','ReplaceStr','URLExec'];
if (
all
/* 個別のBBS・板・スレッドなどで有効にしたい場合、下の例を参考に各行頭//を削除するなどしてください */
// || bbs.is2ch //BBSが2chの場合
// || bbs.is2cheq //BBSが2ch互換板の場合
// || bbs.shitaraba //BBSがしたらばの場合
// || bbs.machi //BBSがまちBBSの場合
// || bbs.twitter //BBSがTwitterの場合
// || th.local //スレッドがローカル板の場合
|| bbs.is2cheq && url.path == '/v2cj/' //板がV2C提示版の場合
|| checkThStr(title, targetTitle)//スレタイが'ImageViewURLReplace','ReplaceStr','URLExec'の場合
/* 例ここまで */
) {
var mh = ph.matcher(wp.message.text);
if (mh.find() && v2c.confirm('Tab文字が含まれています\n【TAB】に置換しますか?')){
if (post) wp.message.text = mh.replaceAll('【TAB】');
}
}
return post;
};
function closeWritePanel(wp) {
/* 設定 */
var all = false; //常に有効にする場合 true ※「設定→書き込み→書き込み後自動で閉じる」と同じ
/* 設定ここまで */
var post = true;
var th = wp.thread;
var bbs = th.bbs;
var url = th.board.url;
if (
all
/* 個別のBBS・板・スレッドなどで有効にしたい場合、下の例を参考に各行頭//を削除するなどしてください */
// || bbs.is2ch //BBSが2chの場合
// || bbs.is2cheq //BBSが2ch互換板の場合
// || bbs.shitaraba //BBSがしたらばの場合
// || bbs.machi //BBSがまちBBSの場合
// || bbs.twitter //BBSがTwitterの場合
// || th.local //スレッドがローカル板の場合
|| !bbs.twitter //BBSがtwitter以外の場合
/* 例ここまで */
) {
wp.close();
}
return post;
};
function reloadBeforePost(wp) {
/* 設定 */
var all = false; //常に有効にする場合 true
var lowerBoundSpeed = 0;//スレの勢いの下限
var upperBoundSpeed = 30000;//スレの勢いの上限 勢い下限と上限の間にあるスレのみ事前更新でチェックしてから書込する
/* 設定ここまで */
var post = true;
var th = wp.thread;
var bbs = th.bbs;
var url = th.board.url;
if (
all
/* 個別のBBS・板・スレッドなどで有効にしたい場合、下の例を参考に各行頭//を削除するなどしてください */
// || bbs.is2ch //BBSが2chの場合
// || bbs.is2cheq //BBSが2ch互換板の場合
// || bbs.shitaraba //BBSがしたらばの場合
// || bbs.machi //BBSがまちBBSの場合
// || bbs.twitter //BBSがTwitterの場合
// || th.local //スレッドがローカル板の場合
|| (!th.local && !bbs.twitter) //スレッドがローカル板とtwitter以外の場合
/* 例ここまで */
) {
if (lowerBoundSpeed <= th.speed && th.speed <= upperBoundSpeed) {
if (th.updateAndWait()) { //更新失敗ならfalseになる→falseの時はそのまま書きこむ
post = th.newResCount == 0;
}
}
}
return post;
};
function checkBlankName(wp) {
/* 設定 */
var all = false; //常に有効にする場合 true
/* 設定ここまで */
var post = true;
var th = wp.thread;
var bbs = th.bbs;
var url = th.board.url;
var ph = java.util.regex.Pattern.compile('^(!ninja|!denki)?$');
if (
all
/* 個別のBBS・板・スレッドなどで有効にしたい場合、下の例を参考に各行頭//を削除するなどしてください */
// || bbs.is2ch //BBSが2chの場合
// || bbs.is2cheq //BBSが2ch互換板の場合
// || bbs.shitaraba //BBSがしたらばの場合
// || bbs.machi //BBSがまちBBSの場合
// || bbs.twitter //BBSがTwitterの場合
// || th.local //スレッドがローカル板の場合
|| (!th.local && !bbs.twitter) //スレッドがローカル板とtwitter以外の場合
/* 例ここまで */
) {
var mh = ph.matcher(wp.name.text);
if (!mh.find() && !v2c.confirm('名前欄が空欄ではありません。\n書き込みを行いますか?')){
post = false;
}
}
return post;
};
// [更新履歴 : 2013/11/23 削除キー入力不具合の修正
function writeFutabaThread(wp) {
if (wp.thread.url.toString().indexOf('2chan') < 0) {
return true;
}
var gui = new FutabaWriteForm(wp);
gui.show();
return false;
}
function impl_mouseListener()
{
this.mouseClicked = function(e) {};
this.mouseEntered = function(e) {};
this.mouseExited = function(e) {};
this.mousePressed = function(e) {};
this.mouseReleased= function(e) {
if (javax.swing.SwingUtilities.isRightMouseButton(e)) {
var c = e.getSource();
showPopup(c, e.getX(), e.getY());
e.consume();
}
};
function showPopup(c, x, y)
{
with(JavaImporter(Packages.javax.swing.text.DefaultEditorKit,
Packages.javax.swing.JPopupMenu, Packages.javax.swing.KeyStroke, java.awt.event.KeyEvent)) {
var pmenu = new JPopupMenu();
var am = c.getActionMap();
addMenu(pmenu, "切り取り(X)", am.get(DefaultEditorKit.cutAction), 'X', KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_DOWN_MASK));
addMenu(pmenu, "コピー(C)", am.get(DefaultEditorKit.copyAction), 'C', KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_DOWN_MASK));
addMenu(pmenu, "貼り付け(V)", am.get(DefaultEditorKit.pasteAction), 'V', KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_DOWN_MASK));
addMenu(pmenu, "すべて選択(A)", am.get(DefaultEditorKit.selectAllAction), 'A', KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_DOWN_MASK));
pmenu.show(c, x, y);
}
}
function addMenu(pmenu, text, action, mnemonic, ks)
{
if (action != null) {
var mi = pmenu.add(action);
if (text != null) mi.setText(text);
if (mnemonic != 0) mi.setMnemonic(mnemonic);
if (ks != null) mi.setAccelerator(ks);
}
}
}
function FutabaWriteForm(wp)
{
var SwingGui = JavaImporter(java.awt,
java.awt.event,
Packages.javax.swing,
Packages.javax.swing.event
);
var frame = null;
var nameTextField = null;
var delKeyTextField = null;
var mailTextField = null;
var titleTextField = null;
var attachmentFilePath = null;
var mimeType = null;
var textArea = null;
var _wp = wp;
var attachFlag = false;
var thUrl = wp.thread.url.toString().replaceAll('^http:\\/\\/(.+\\.2chan\\.net)\\/test\\/read.cgi\\/(\\w+)\\/(\\d+).*', 'http://$1/$2/res/$3.htm');
var hr = v2c.createHttpRequest(thUrl);
var html= hr.getContentsAsString();
if (html == null) { v2c.println('[post.js : FutabaWriteForm] HTMLの取得失敗。スレッドが寿命で消滅したかもしれません。'); }
attachFlag = (html.indexOf('<td><input type=file name=upfile size="') >= 0) ? true : false;
with (SwingGui) {
with (frame = JFrame('レス送信モード')) {
defaultCloseOperation = DISPOSE_ON_CLOSE;
setSize(new Dimension(550, 380));
setLayout(new BorderLayout());
setResizable(false);
setLocationRelativeTo(null);
add(new createFormPanel());
}
}
this.show = function() {
frame.show();
_wp.name.text = '';
_wp.mail.text = '';
_wp.message.text = '';
//_wp.close();
};
function reply()
{
var postUrl = _wp.thread.url.toString().replaceAll('^http:\\/\\/(.+\\.2chan\\.net)\\/test\\/read.cgi\\/(\\w+)\\/(\\d+).*', 'http://$1/$2/futaba.php?guid=on');
var host = _wp.thread.url.toString().replaceAll('^http:\\/\\/(.+\\.2chan\\.net)\\/test\\/read.cgi\\/(\\w+)\\/(\\d+).*', '$1');
var boundary = "ghj39458tu43";
var url = new java.net.URL(postUrl);
var conn = url.openConnection();
with (conn) {
setDoOutput(true);
var cookie = 'namec=; uuc=1; posttime=' + (new Date()).getTime();
setRequestProperty("Host", host);
setRequestProperty("Cookie", cookie);
setRequestProperty("Referer", thUrl);
setRequestProperty("Content-Type", "multipart/form-data; boundary=-" + boundary);
setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
var matches = [];
var mode_value = (/<input type=hidden name=mode value="(\w+)">/.test(html)) ? RegExp.$1 : '';
var maxfsize_value = (/<input type=hidden name="MAX_FILE_SIZE" value="(\d+)">/.test(html)) ? RegExp.$1 : '';
var hash = (/<input type=hidden id="hash" name="hash" value="([^"]*)">/.test(html)) ? RegExp.$1 : '';
var isBaseForm = /<input type=hidden id="baseform" name="baseform" value="">/.test(html);
var resto_value = (/<input type=hidden name=resto value="(\d+)">/.test(html)) ? RegExp.$1 : '';
var dmode = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayMode();
var resolution = dmode.getWidth() + 'x' + dmode.getHeight() + 'x' + dmode.getBitDepth();
var caco = (function() {
var caco = (/<script type="text\/javascript" src="(\/bin\/cachemt\d*\.php)">/.test(html)) ? RegExp.$1 : '';
if (caco) {
var hr = v2c.createHttpRequest(new java.net.URL('http://' + host + caco));
var tmp = hr.getContentsAsString();
caco = (/"([^"]*)"/.test(tmp)) ? RegExp.$1 : '';
}
return caco;
})();
function putd(boun, name, val) {
return '---' + boun + '\r\n' +
'Content-Disposition: form-data; name="' + name + '"\r\n' +
'\r\n' +
val + '\r\n';
}
var data = putd(boundary, 'mode', mode_value) +
putd(boundary, 'MAX_FILE_SIZE', maxfsize_value);
if (isBaseForm) { data += putd(boundary, 'baseform', ''); }
data += putd(boundary, 'pthb', caco) +
putd(boundary, 'pthc', caco) +
putd(boundary, 'pthd', '') +
putd(boundary, 'flvr', '11.9.900') +
putd(boundary, 'scsz', (function() {
if (resolution) {
return resolution;
} else {
return '';
}
})());
if (hash) {
data += putd(boundary, 'hash', hash);
}
data += putd(boundary, 'js', 'off');
data += putd(boundary, 'resto', resto_value);
if (attachFlag) {
data += putd(boundary, 'name', nameTextField.getText());
}
data += putd(boundary, 'email', mailTextField.getText());
if (attachFlag) {
data += putd(boundary, 'sub', titleTextField.getText());
}
data += putd(boundary, 'com', textArea.getText());
with (JavaImporter(java.io)) {
var dos = new DataOutputStream(getOutputStream());
if (attachFlag && attachmentFilePath) {
var file = new File(attachmentFilePath);
data += '---' + boundary + '\r\n' +
'Content-Disposition: form-data; name="upfile"; filename="' + file.getName() + '"\r\n' +
'Content-Type: ' + mimeType + '\r\n' +
'\r\n';
data = new java.lang.String(data);
buf = data.getBytes("MS932");
dos.write(buf, 0, buf.length);
var fin = new BufferedInputStream(new FileInputStream(file));
var buff = 0;
while ((buff = fin.read()) != -1) {
dos.write(buff);
dos.flush();
}
dos.flush();
fin.close();
data = '\r\n';
}
data += putd(boundary, 'pwd', delKeyTextField.getText());
data += '---' + boundary + '--\r\n';
data = new java.lang.String(data);
var buf = data.getBytes("MS932");
dos.write(buf, 0, buf.length);
dos.flush();
dos.close();
// 削除キーの一時記憶
v2c.putProperty('_FUTABA_WRITE_FORM_DELKEY_', delKeyTextField.getText());
var ins = getInputStream();
var bReader = new BufferedReader(new InputStreamReader(ins));
var responseData = null;
while ((responseData = bReader.readLine()) != null) {
v2c.println(responseData);
}
ins.close();
}
}
conn.disconnect();
}
function createFormPanel()
{
with (SwingGui) {
var p = new JPanel();
with (p) {
var gridBagLayout = new GridBagLayout();
gridBagLayout.columnWidths = [119, 83, 83, 83, 112, 83, 0];
gridBagLayout.rowHeights = [40, 40, 40, 120, 40, 40, 0];
gridBagLayout.columnWeights = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, java.lang.Double.MIN_VALUE];
gridBagLayout.rowWeights = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, java.lang.Double.MIN_VALUE];
setLayout(gridBagLayout);
if (attachFlag) {
var nameLabel = new JLabel("\u306A\u307E\u3048");
nameLabel.setHorizontalAlignment(SwingConstants.TRAILING);
var gbc_nameLabel = new GridBagConstraints();
gbc_nameLabel.fill = GridBagConstraints.BOTH;
gbc_nameLabel.insets = new Insets(0, 0, 5, 5);
gbc_nameLabel.gridx = 0;
gbc_nameLabel.gridy = 0;
add(nameLabel, gbc_nameLabel);
nameTextField = new JTextField();
nameTextField.setText(_wp.name);
nameTextField.setColumns(10);
nameTextField.addMouseListener(new MouseListener(new impl_mouseListener()));
var gbc_nameTextField = new GridBagConstraints();
gbc_nameTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_nameTextField.insets = new Insets(0, 0, 5, 5);
gbc_nameTextField.gridwidth = 2;
gbc_nameTextField.gridx = 1;
gbc_nameTextField.gridy = 0;
add(nameTextField, gbc_nameTextField);
}
var mailLabel = new JLabel("E-Mail");
mailLabel.setHorizontalAlignment(SwingConstants.TRAILING);
var gbc_mailLabel = new GridBagConstraints();
gbc_mailLabel.fill = GridBagConstraints.BOTH;
gbc_mailLabel.insets = new Insets(0, 0, 5, 5);
gbc_mailLabel.gridx = 0;
gbc_mailLabel.gridy = 1;
add(mailLabel, gbc_mailLabel);
mailTextField = new JTextField();
mailTextField.setText(_wp.mail);
mailTextField.setColumns(10);
mailTextField.addMouseListener(new MouseListener(new impl_mouseListener()));
var gbc_mailTextField = new GridBagConstraints();
gbc_mailTextField.gridwidth = 2;
gbc_mailTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_mailTextField.insets = new Insets(0, 0, 5, 5);
gbc_mailTextField.gridx = 1;
gbc_mailTextField.gridy = 1;
add(mailTextField, gbc_mailTextField);
if (attachFlag) {
var titleLabel = new JLabel("\u984C\u540D");
var gbc_titleLabel = new GridBagConstraints();
gbc_titleLabel.anchor = GridBagConstraints.EAST;
gbc_titleLabel.fill = GridBagConstraints.VERTICAL;
gbc_titleLabel.insets = new Insets(0, 0, 5, 5);
gbc_titleLabel.gridx = 0;
gbc_titleLabel.gridy = 2;
add(titleLabel, gbc_titleLabel);
titleTextField = new JTextField();
titleTextField.addMouseListener(new MouseListener(new impl_mouseListener()));
var gbc_titleTextField = new GridBagConstraints();
gbc_titleTextField.gridwidth = 2;
gbc_titleTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_titleTextField.insets = new Insets(0, 0, 5, 5);
gbc_titleTextField.gridx = 1;
gbc_titleTextField.gridy = 2;
add(titleTextField, gbc_titleTextField);
titleTextField.setColumns(10);
}
var replyButton = new JButton("\u8FD4\u4FE1\u3059\u308B");
with (replyButton) {
addActionListener(function(e) {
setEnabled(false);
reply();
frame.dispose();
});
}
var gbc_replyButton = new GridBagConstraints();
gbc_replyButton.fill = GridBagConstraints.BOTH;
gbc_replyButton.insets = new Insets(0, 0, 5, 5);
gbc_replyButton.gridx = 4;
gbc_replyButton.gridy = 2;
add(replyButton, gbc_replyButton);
var commentLabel = new JLabel("\u30B3\u30E1\u30F3\u30C8");
var gbc_commentLabel = new GridBagConstraints();
gbc_commentLabel.anchor = GridBagConstraints.EAST;
gbc_commentLabel.fill = GridBagConstraints.VERTICAL;
gbc_commentLabel.insets = new Insets(0, 0, 5, 5);
gbc_commentLabel.gridx = 0;
gbc_commentLabel.gridy = 3;
add(commentLabel, gbc_commentLabel);
var scrollPane = new JScrollPane();
var gbc_scrollPane = new GridBagConstraints();
gbc_scrollPane.gridwidth = 4;
gbc_scrollPane.fill = GridBagConstraints.BOTH;
gbc_scrollPane.insets = new Insets(0, 0, 5, 5);
gbc_scrollPane.gridx = 1;
gbc_scrollPane.gridy = 3;
add(scrollPane, gbc_scrollPane);
textArea = new JTextArea();
textArea.setText(_wp.message);
textArea.addMouseListener(new MouseListener(new impl_mouseListener()));
scrollPane.setViewportView(textArea);
if (attachFlag) {
var attachmentLabel = new JLabel("\u6DFB\u4ED8File");
attachmentLabel.setHorizontalAlignment(SwingConstants.TRAILING);
var gbc_attachmentLabel = new GridBagConstraints();
gbc_attachmentLabel.fill = GridBagConstraints.BOTH;
gbc_attachmentLabel.insets = new Insets(0, 0, 5, 5);
gbc_attachmentLabel.gridx = 0;
gbc_attachmentLabel.gridy = 4;
add(attachmentLabel, gbc_attachmentLabel);
var viewAttachFileLabel = new JLabel("\u30D5\u30A1\u30A4\u30EB\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
var gbc_viewAttachFileLabel = new GridBagConstraints();
gbc_viewAttachFileLabel.gridwidth = 3;
gbc_viewAttachFileLabel.fill = GridBagConstraints.BOTH;
gbc_viewAttachFileLabel.insets = new Insets(0, 0, 5, 5);
gbc_viewAttachFileLabel.gridx = 2;
gbc_viewAttachFileLabel.gridy = 4;
add(viewAttachFileLabel, gbc_viewAttachFileLabel);
var attachmentButton = new JButton("\u53C2\u7167...");
with(attachmentButton) {
addActionListener(function(e) {
var fc = new javax.swing.JFileChooser();
with (fc) {
with (JavaImporter(javax.swing.filechooser)) {
addChoosableFileFilter(new FileNameExtensionFilter("JPEG イメージ", "jpg", "jpeg"));
addChoosableFileFilter(new FileNameExtensionFilter("GIF イメージ", "gif"));
addChoosableFileFilter(new FileNameExtensionFilter("PNG イメージ", "png"));
}
if (showOpenDialog(frame) == APPROVE_OPTION) {
var file = getSelectedFile();
var matches = [];
if (matches = /\.(gif|jpe?g|png)$/i.exec(file.getName())) {
var name = file.getName();
if (name.length() > 50) {
name = name.substr(0, 40) + '...' + name.substr(-5, 5);
}
viewAttachFileLabel.setText(name);
attachmentFilePath = file.getPath();
mimeType = 'image/' + matches[1].toLowerCase();
if (matches[1].toLowerCase() == 'jpg') { mimeType = 'image/jpeg'; }
} else {
v2c.println('[post.js: writeFutabaThread] GIF/JPG/PNG以外は添付できません。');
}
} else {
viewAttachFileLabel.setText("\u30D5\u30A1\u30A4\u30EB\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
attachmentFilePath = '';
mimeType = 'application/octet-stream';
}
}
});
}
var gbc_attachmentButton = new GridBagConstraints();
gbc_attachmentButton.fill = GridBagConstraints.BOTH;
gbc_attachmentButton.insets = new Insets(0, 0, 5, 5);
gbc_attachmentButton.gridx = 1;
gbc_attachmentButton.gridy = 4;
add(attachmentButton, gbc_attachmentButton);
}
var delKeyLabel = new JLabel("\u524A\u9664\u30AD\u30FC");
delKeyLabel.setHorizontalAlignment(SwingConstants.TRAILING);
var gbc_delKeyLabel = new GridBagConstraints();
gbc_delKeyLabel.fill = GridBagConstraints.BOTH;
gbc_delKeyLabel.insets = new Insets(0, 0, 0, 5);
gbc_delKeyLabel.gridx = 0;
gbc_delKeyLabel.gridy = 5;
add(delKeyLabel, gbc_delKeyLabel);
//var fmt = new javax.swing.text.MaskFormatter("********");
//fmt.setValidCharacters("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
delKeyTextField = new JTextField();
delKeyTextField.setColumns(8);
delKeyTextField.enableInputMethods(false);
var gbc_delKeyTextField = new GridBagConstraints();
gbc_delKeyTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_delKeyTextField.insets = new Insets(0, 0, 0, 5);
gbc_delKeyTextField.gridx = 1;
gbc_delKeyTextField.gridy = 5;
add(delKeyTextField, gbc_delKeyTextField);
delKeyTextField.setText(v2c.getProperty('_FUTABA_WRITE_FORM_DELKEY_'));
var delKeyDescriptionLabel = new JLabel("(\u524A\u9664\u7528\u3001\u82F1\u6570\u5B57\u3067\uFF18\u5B57\u4EE5\u5185)");
var gbc_delKeyDescriptionLabel = new GridBagConstraints();
gbc_delKeyDescriptionLabel.fill = GridBagConstraints.BOTH;
gbc_delKeyDescriptionLabel.insets = new Insets(0, 0, 0, 5);
gbc_delKeyDescriptionLabel.gridx = 2;
gbc_delKeyDescriptionLabel.gridy = 5;
add(delKeyDescriptionLabel, gbc_delKeyDescriptionLabel);
}
return p;
}
};
}
function writeBakusaiThread(wp) {
if (wp.thread.url.toString().indexOf('bakusai') < 0) {
return true;
}
var gui = new BakusaiWriteForm(wp);
gui.show();
return false;
}
function BakusaiWriteForm(wp)
{
var SwingGui = JavaImporter(java.awt,
java.awt.event,
Packages.javax.swing,
Packages.javax.swing.event
);
var frame = null;
var nameTextField = null;
var delKeyTextField = null;
var mailTextField = null;
var tripTextField = null;
var attachmentFilePath = null;
var mimeType = null;
var textArea = null;
var _wp = wp;
var attachFlag = false;
var thUrl = String(wp.thread.url.toString()).replace(/^http:\/\/bakusai\.com\/test\/read.cgi\/a(\d+)c(\d+)b(\d+)\/(\d+)\/.*/, 'http://b...content-available-to-author-only...i.com/thr_res/acode=$1/ctgid=$2/bid=$3/tid=$4/');
var acode = RegExp.$1;
var ctgid = RegExp.$2;
var bid = RegExp.$3;
var tid = RegExp.$4;
var hr = v2c.createHttpRequest(thUrl);
var html= hr.getContentsAsString();
if (html == null) { v2c.println('[post.js : BakusaiWriteForm] HTMLの取得失敗。スレッドが寿命で消滅したかもしれません。'); }
var title = (/<title>([^\s]+) -/.test(html)) ? RegExp.$1 : '';
with (SwingGui) {
with (frame = JFrame('『' + title + '』へのレス投稿')) {
defaultCloseOperation = DISPOSE_ON_CLOSE;
setSize(new Dimension(550, 380));
setLayout(new BorderLayout());
setResizable(false);
setLocationRelativeTo(null);
add(new createFormPanel());
}
}
this.show = function() {
frame.show();
_wp.name.text = '';
_wp.mail.text = '';
_wp.message.text = '';
//_wp.close();
};
function reply()
{
var postUrl = 'http://b...content-available-to-author-only...i.com/thr_rp1/';
var boundary = "ghj39458tu43";
var url = new java.net.URL(postUrl);
var conn = url.openConnection();
with (conn) {
setDoOutput(true);
setRequestProperty("Host", 'bakusai.com');
setRequestProperty("Referer", thUrl);
setRequestProperty("Content-Type", "multipart/form-data; boundary=-" + boundary);
setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
var matches = [];
var prof_flg = (/<input type="hidden" name="prof_flg"\s+value="([^"]+)"/.test(html)) ? RegExp.$1 : '';
function putd(boun, name, val) {
return '---' + boun + '\r\n' +
'Content-Disposition: form-data; name="' + name + '"\r\n' +
'\r\n' +
val + '\r\n';
}
with (JavaImporter(java.io)) {
var dos = new DataOutputStream(getOutputStream());
var data = putd(boundary, 'bid', bid) +
putd(boundary, 'tid', tid) +
putd(boundary, 'ctgid', ctgid) +
putd(boundary, 'acode', acode) +
putd(boundary, 'tp', '1') +
putd(boundary, 'prof_flg', prof_flg) +
putd(boundary, 'name', nameTextField.getText()) +
putd(boundary, 'trip_pass', tripTextField.getText()) +
putd(boundary, 'mailaddr', mailTextField.getText()) +
putd(boundary, 'body', textArea.getText()) +
putd(boundary, 'del_path', delKeyTextField.getText());
data += '---' + boundary + '--\r\n';
data = new java.lang.String(data);
var buf = data.getBytes("MS932");
dos.write(buf, 0, buf.length);
dos.flush();
dos.close();
// 削除キーの一時記憶
v2c.putProperty('_BAKUSAI_WRITE_FORM_DELKEY_', delKeyTextField.getText());
var ins = getInputStream();
var bReader = new BufferedReader(new InputStreamReader(ins));
var responseData = null;
while ((responseData = bReader.readLine()) != null) {
v2c.println(responseData);
}
ins.close();
}
}
conn.disconnect();
}
function createFormPanel()
{
with (SwingGui) {
var p = new JPanel();
with (p) {
var gridBagLayout = new GridBagLayout();
gridBagLayout.columnWidths = [119, 83, 83, 83, 112, 83, 0];
gridBagLayout.rowHeights = [40, 40, 40, 120, 40, 40, 0];
gridBagLayout.columnWeights = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, java.lang.Double.MIN_VALUE];
gridBagLayout.rowWeights = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, java.lang.Double.MIN_VALUE];
setLayout(gridBagLayout);
var nameLabel = new JLabel("お名前");
nameLabel.setHorizontalAlignment(SwingConstants.TRAILING);
var gbc_nameLabel = new GridBagConstraints();
gbc_nameLabel.fill = GridBagConstraints.BOTH;
gbc_nameLabel.insets = new Insets(0, 0, 5, 5);
gbc_nameLabel.gridx = 0;
gbc_nameLabel.gridy = 0;
add(nameLabel, gbc_nameLabel);
nameTextField = new JTextField();
nameTextField.setText(_wp.name);
nameTextField.setColumns(10);
nameTextField.addMouseListener(new MouseListener(new impl_mouseListener()));
var gbc_nameTextField = new GridBagConstraints();
gbc_nameTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_nameTextField.insets = new Insets(0, 0, 5, 5);
gbc_nameTextField.gridwidth = 2;
gbc_nameTextField.gridx = 1;
gbc_nameTextField.gridy = 0;
add(nameTextField, gbc_nameTextField);
var nameKeyDescriptionLabel = new JLabel("(全角8文字まで)");
var gbc_nameKeyDescriptionLabel = new GridBagConstraints();
gbc_nameKeyDescriptionLabel.fill = GridBagConstraints.BOTH;
gbc_nameKeyDescriptionLabel.insets = new Insets(0, 0, 0, 5);
gbc_nameKeyDescriptionLabel.gridx = 3;
gbc_nameKeyDescriptionLabel.gridy = 0;
add(nameKeyDescriptionLabel, gbc_nameKeyDescriptionLabel);
var mailLabel = new JLabel("E-Mail");
mailLabel.setHorizontalAlignment(SwingConstants.TRAILING);
var gbc_mailLabel = new GridBagConstraints();
gbc_mailLabel.fill = GridBagConstraints.BOTH;
gbc_mailLabel.insets = new Insets(0, 0, 5, 5);
gbc_mailLabel.gridx = 0;
gbc_mailLabel.gridy = 1;
add(mailLabel, gbc_mailLabel);
mailTextField = new JTextField();
mailTextField.setText(_wp.mail);
mailTextField.setColumns(10);
mailTextField.addMouseListener(new MouseListener(new impl_mouseListener()));
var gbc_mailTextField = new GridBagConstraints();
gbc_mailTextField.gridwidth = 2;
gbc_mailTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_mailTextField.insets = new Insets(0, 0, 5, 5);
gbc_mailTextField.gridx = 1;
gbc_mailTextField.gridy = 1;
add(mailTextField, gbc_mailTextField);
var tripLabel = new JLabel("トリップ");
var gbc_tripLabel = new GridBagConstraints();
gbc_tripLabel.anchor = GridBagConstraints.EAST;
gbc_tripLabel.fill = GridBagConstraints.VERTICAL;
gbc_tripLabel.insets = new Insets(0, 0, 5, 5);
gbc_tripLabel.gridx = 0;
gbc_tripLabel.gridy = 2;
add(tripLabel, gbc_tripLabel);
tripTextField = new JTextField();
tripTextField.addMouseListener(new MouseListener(new impl_mouseListener()));
var gbc_tripTextField = new GridBagConstraints();
gbc_tripTextField.gridwidth = 2;
gbc_tripTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_tripTextField.insets = new Insets(0, 0, 5, 5);
gbc_tripTextField.gridx = 1;
gbc_tripTextField.gridy = 2;
add(tripTextField, gbc_tripTextField);
tripTextField.setColumns(10);
var tripKeyDescriptionLabel = new JLabel("(全角8文字まで)");
var gbc_tripKeyDescriptionLabel = new GridBagConstraints();
gbc_tripKeyDescriptionLabel.fill = GridBagConstraints.BOTH;
gbc_tripKeyDescriptionLabel.insets = new Insets(0, 0, 0, 5);
gbc_tripKeyDescriptionLabel.gridx = 3;
gbc_tripKeyDescriptionLabel.gridy = 2;
add(tripKeyDescriptionLabel, gbc_tripKeyDescriptionLabel);
var replyButton = new JButton("同意して投稿する");
with (replyButton) {
addActionListener(function(e) {
setEnabled(false);
reply();
frame.dispose();
});
}
var gbc_replyButton = new GridBagConstraints();
gbc_replyButton.fill = GridBagConstraints.BOTH;
gbc_replyButton.insets = new Insets(0, 0, 5, 5);
gbc_replyButton.gridx = 4;
gbc_replyButton.gridy = 2;
add(replyButton, gbc_replyButton);
var commentLabel = new JLabel("コメント");
var gbc_commentLabel = new GridBagConstraints();
gbc_commentLabel.anchor = GridBagConstraints.EAST;
gbc_commentLabel.fill = GridBagConstraints.VERTICAL;
gbc_commentLabel.insets = new Insets(0, 0, 5, 5);
gbc_commentLabel.gridx = 0;
gbc_commentLabel.gridy = 3;
add(commentLabel, gbc_commentLabel);
var scrollPane = new JScrollPane();
var gbc_scrollPane = new GridBagConstraints();
gbc_scrollPane.gridwidth = 4;
gbc_scrollPane.fill = GridBagConstraints.BOTH;
gbc_scrollPane.insets = new Insets(0, 0, 5, 5);
gbc_scrollPane.gridx = 1;
gbc_scrollPane.gridy = 3;
add(scrollPane, gbc_scrollPane);
textArea = new JTextArea();
textArea.setText(_wp.message);
textArea.getDocument().addDocumentListener(new DocumentListener() {
changedUpdate: function(e) {},
insertUpdate: function(e) {
var t = new java.lang.String(textArea.getText());
var len = (1500 - t.getBytes("MS932").length) / 2;
tripKeyDescriptionLabel.setText("<html>(全角750文字まで:残り<font color=red><b>全角" + len + "文字</b></font>)<br>掲示板あらし行為、URLの記載は一回で書込み禁止措置と致します。</html>");
},
removeUpdate: function(e) {
var t = new java.lang.String(textArea.getText());
var len = (1500 - t.getBytes("MS932").length) / 2;
tripKeyDescriptionLabel.setText("<html>(全角750文字まで:残り<font color=red><b>全角" + len + "文字</b></font>)<br>掲示板あらし行為、URLの記載は一回で書込み禁止措置と致します。</html>");
}
});
textArea.addMouseListener(new MouseListener(new impl_mouseListener()));
scrollPane.setViewportView(textArea);
var tripKeyDescriptionLabel = new JLabel("<html>(全角750文字まで:残り<font color=red><b>全角750文字</b></font>)<br>掲示板あらし行為、URLの記載は一回で書込み禁止措置と致します。</html>");
tripKeyDescriptionLabel.setVerticalAlignment(SwingConstants.TOP);
var gbc_tripKeyDescriptionLabel = new GridBagConstraints();
gbc_tripKeyDescriptionLabel.fill = GridBagConstraints.BOTH;
gbc_tripKeyDescriptionLabel.insets = new Insets(0, 0, 0, 5);
gbc_tripKeyDescriptionLabel.gridwidth = 4;
gbc_tripKeyDescriptionLabel.gridx = 1;
gbc_tripKeyDescriptionLabel.gridy = 4;
add(tripKeyDescriptionLabel, gbc_tripKeyDescriptionLabel);
var delKeyLabel = new JLabel("削除パス");
delKeyLabel.setHorizontalAlignment(SwingConstants.TRAILING);
var gbc_delKeyLabel = new GridBagConstraints();
gbc_delKeyLabel.fill = GridBagConstraints.BOTH;
gbc_delKeyLabel.insets = new Insets(0, 0, 0, 5);
gbc_delKeyLabel.gridx = 0;
gbc_delKeyLabel.gridy = 5;
add(delKeyLabel, gbc_delKeyLabel);
delKeyTextField = new JTextField();
delKeyTextField.setColumns(8);
delKeyTextField.enableInputMethods(false);
var gbc_delKeyTextField = new GridBagConstraints();
gbc_delKeyTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_delKeyTextField.insets = new Insets(0, 0, 0, 5);
gbc_delKeyTextField.gridx = 1;
gbc_delKeyTextField.gridy = 5;
add(delKeyTextField, gbc_delKeyTextField);
delKeyTextField.setText(v2c.getProperty('_BAKUSAI_WRITE_FORM_DELKEY_'));
var delKeyDescriptionLabel = new JLabel("(半角英数4文字)");
var gbc_delKeyDescriptionLabel = new GridBagConstraints();
gbc_delKeyDescriptionLabel.fill = GridBagConstraints.BOTH;
gbc_delKeyDescriptionLabel.insets = new Insets(0, 0, 0, 5);
gbc_delKeyDescriptionLabel.gridx = 2;
gbc_delKeyDescriptionLabel.gridy = 5;
add(delKeyDescriptionLabel, gbc_delKeyDescriptionLabel);
}
return p;
}
};
}