fork download
  1. importPackage(javax.swing);
  2. importPackage(javax.swing.table);
  3. importPackage(javax.swing.event);
  4. importPackage(java.awt);
  5. importPackage(java.awt.event);
  6. importPackage(java.util);
  7. importPackage(java.util.regex);
  8. importPackage(java.util.concurrent);
  9. importPackage(java.lang);
  10. importPackage(java.io);
  11.  
  12. var APP_NAME = "logsearch";
  13.  
  14. var g = {
  15. cancel: false,
  16. thread: createCachedThreadPool(),
  17. defaultValues: (function () {
  18. var o = {
  19. blist : [],
  20. set1 : false,
  21. set2 : false,
  22. set3 : false,
  23. set4 : false,
  24. title : null,
  25. name : null,
  26. mail : null,
  27. id : null,
  28. be : null,
  29. message : null,
  30. label : null,
  31. lnum : null,
  32. unum : null,
  33. lanc : null,
  34. uanc : null,
  35. lyear : null,
  36. lmonth : null,
  37. ldate : null,
  38. lday : null,
  39. lhours : null,
  40. lmin : null,
  41. uyear : null,
  42. umonth : null,
  43. udate : null,
  44. uday : null,
  45. uhours : null,
  46. umin : null,
  47. repanc : false,
  48. addourl : false,
  49. opguide : false,
  50. addcsv : false
  51. };
  52.  
  53. var argLine = v2c.context.argLine + "";
  54. if (argLine !== "") {
  55. eval(argLine);
  56. for (var arg in args) {
  57. o[arg] = args[arg];
  58. }
  59. }
  60.  
  61. return o;
  62. }())
  63. }
  64.  
  65. var normalizeStr = (function () {
  66. var table = {
  67. "ガ": "ガ", "ギ": "ギ", "グ": "グ", "ゲ": "ゲ", "ゴ": "ゴ",
  68. "ザ": "ザ", "ジ": "ジ", "ズ": "ズ", "ゼ": "ゼ", "ゾ": "ゾ",
  69. "ダ": "ダ", "ヂ": "ヂ", "ヅ": "ヅ", "デ": "デ", "ド": "ド",
  70. "バ": "バ", "ビ": "ビ", "ブ": "ブ", "ベ": "ベ", "ボ": "ボ",
  71. "パ": "パ", "ピ": "ピ", "プ": "プ", "ペ": "ペ", "ポ": "ポ",
  72. "ヴ": "ヴ",
  73. "ア": "ア","イ": "イ", "ウ": "ウ", "エ": "エ", "オ": "オ",
  74. "カ": "カ", "キ": "キ", "ク": "ク", "ケ": "ケ", "コ": "コ",
  75. "サ": "サ", "シ": "シ", "ス": "ス", "セ": "セ", "ソ": "ソ",
  76. "タ": "タ", "チ": "チ", "ツ": "ツ", "テ": "テ", "ト": "ト",
  77. "ナ": "ナ", "ニ": "ニ", "ヌ": "ヌ", "ネ": "ネ", "ノ": "ノ",
  78. "ハ": "ハ", "ヒ": "ヒ", "フ": "フ", "ヘ": "ヘ", "ホ": "ホ",
  79. "マ": "マ", "ミ": "ミ", "ム": "ム", "メ": "メ", "モ": "モ",
  80. "ヤ": "ヤ", "ユ": "ユ", "ヨ": "ヨ",
  81. "ラ": "ラ", "リ": "リ", "ル": "ル", "レ": "レ", "ロ": "ロ",
  82. "ワ": "ワ", "ヲ": "ヲ", "ン": "ン",
  83. "ァ": "ァ", "ィ": "ィ", "ゥ": "ゥ", "ェ": "ェ", "ォ": "ォ", "ャ": "ャ", "ュ": "ュ", "ョ": "ョ", "ッ": "ッ",
  84. "。": "。", "「": "「", "」": "」", "、": "、", "・": "・", "ー": "ー"
  85. };
  86.  
  87. return function (str) {
  88. str = str + "";
  89. str = str.replace(/[A-Za-z0-9]/g, function(s) {
  90. return String.fromCharCode(s.charCodeAt(0) - 65248);
  91. });
  92. var result = "";
  93. var str = str.split("");
  94. for (var i = 0; i < str.length; i++){
  95. var c = str[i];
  96. var nc = str[i + 1];
  97. if (table[c + nc]) {
  98. result += table[c + nc];
  99. i++;
  100. }
  101. else {
  102. result += (table[c]) ? table[c] : c;
  103. }
  104. }
  105. return result;
  106. };
  107. }());
  108.  
  109. function createCachedThreadPool () {
  110. var ex = java.util.concurrent.Executors.newCachedThreadPool();
  111. return {
  112. submit: function (f) {
  113. return ex.submit(new Callable() {
  114. call: function () {
  115. return f();
  116. }
  117. });
  118. }
  119. };
  120. }
  121.  
  122. function saveDat (boardName, dat, subject, resCount) {
  123. var s = File.separator;
  124. var unixtime = Math.floor((new Date()) / 1000);
  125.  
  126. var dir = new File(v2c.saveDir, s + "log" + s + "localboard");
  127. if (!dir.exists()) dir.mkdir();
  128. dir = new File(dir, boardName);
  129. if (!dir.exists()) dir.mkdir();
  130. var datFile = new File(dir, unixtime + ".dat");
  131.  
  132. var pw = new PrintWriter(new BufferedWriter(new FileWriter(datFile, false)));
  133. pw.print(dat);
  134. pw.close();
  135.  
  136.  
  137. var subjectFile = new File(dir, "subject.txt");
  138. var pw = new PrintWriter(new BufferedWriter(new FileWriter(subjectFile, true)));
  139. pw.print(unixtime + ".dat<>" + subject + " (" + resCount + ")" + "\n");
  140. pw.close();
  141.  
  142. return unixtime;
  143. }
  144.  
  145. function readDat(file) {
  146. var resList = new ArrayList();
  147. var br = new BufferedReader(new FileReader(file));
  148. var line;
  149. while( (line = br.readLine()) ) {
  150. resList.add(line);
  151. }
  152. br.close();
  153. return resList;
  154. }
  155.  
  156. function getMatchesResFromThread(thread, o, callback) {
  157. /*
  158. o =
  159. {
  160. beID: BeID
  161. id: ID
  162. lowerRefCount: 被参照数 下限
  163. upperRefCount: 被参照数 上限
  164. lowerNumber: レス番号 下限
  165. upperNumber: レス番号 上限
  166. mail: メール欄
  167. name: 名前欄
  168. title: スレタイ
  169. message: 本文
  170. lowerDate: 投稿時刻 下限
  171. upperDate: 投稿時刻 上限
  172. 投稿時刻 = {
  173. fullYear: 年 4ケタ
  174. month: 月 0から11の整数 0=1月
  175. date: 日 1から31の整数
  176. day: 曜日 0から6の整数 0=日曜日
  177. hours: 時間 0から23の整数
  178. minutes: 分 0から59の整数
  179. }
  180. resLabel: レスに設定されているレスラベル
  181. }
  182. */
  183.  
  184. var e = {};
  185. var list = new ArrayList();
  186.  
  187. if (o) {
  188.  
  189.  
  190. if (o.lowerDate) {
  191. if (o.lowerDate.month === undefined) o.lowerDate.month = 0;
  192. if (o.lowerDate.date === undefined) o.lowerDate.date = 1;
  193. if (o.lowerDate.hours === undefined) o.lowerDate.hours = 0;
  194. if (o.lowerDate.minutes === undefined) o.lowerDate.minutes = 0;
  195. o.lowerDate.monthdate = parseInt(o.lowerDate.month) + parseInt(o.lowerDate.date) * 0.01;
  196. o.lowerDate.hoursminutes = parseInt(o.lowerDate.hours) + parseInt(o.lowerDate.minutes) * 0.01;
  197. var lowerDate = o.lowerDate;
  198. }
  199.  
  200. if (o.upperDate) {
  201. if (o.upperDate.month === undefined) o.upperDate.month = 11;
  202. if (o.upperDate.date === undefined) o.upperDate.date = 31;
  203. if (o.upperDate.hours === undefined) o.upperDate.hours = 23;
  204. if (o.upperDate.minutes === undefined) o.upperDate.minutes = 59;
  205. o.upperDate.monthdate = parseInt(o.upperDate.month) + parseInt(o.upperDate.date) * 0.01;
  206. o.upperDate.hoursminutes = parseInt(o.upperDate.hours) + parseInt(o.upperDate.minutes) * 0.01;
  207. var upperDate = o.upperDate;
  208. }
  209.  
  210. if (o.title && !(o.title instanceof RegExp)) o.title = new RegExp(o.title);
  211. if (o.message && !(o.message instanceof RegExp)) o.message = new RegExp(o.message);
  212. if (o.resLabel && !(o.resLabel instanceof RegExp)) o.resLabel = new RegExp(o.resLabel);
  213. if (o.beID && !(o.beID instanceof RegExp)) o.beID = new RegExp(o.beID);
  214. if (o.id && !(o.id instanceof RegExp)) o.id = new RegExp(o.id);
  215. if (o.mail && !(o.mail instanceof RegExp)) o.mail = new RegExp(o.mail);
  216. if (o.name && !(o.name instanceof RegExp)) o.name = new RegExp(o.name);
  217.  
  218. if (o.title && !o.title.test(thread.title)) {
  219. return list;
  220. }
  221. }
  222.  
  223. for (var resCount = thread.resCount, i = 0; i < resCount; i++) {
  224. var res = thread.getRes(i);
  225.  
  226. if (!res) continue;
  227. if ((res.date && res.date + "") === "Over 1000 Thread") continue;
  228.  
  229. if (o) {
  230. if ( ( o.message && !o.message.test(res.message) ) ||
  231. ( o.resLabel && ( !res.resLabel || !o.resLabel.test(res.resLabel.name) ) ) ||
  232. ( o.beID && ( res.beID === 0 || !o.beID.test(res.beID) ) ) ||
  233. ( o.id && ( !res.id || !o.id.test(res.id) ) ) ||
  234. ( o.mail && ( !o.mail.test(res.mail) ) ) ||
  235. ( o.name && ( !o.name.test(res.name) ) )
  236. ) {
  237. continue;
  238. }
  239.  
  240. if ( (o.lowerNumber && o.lowerNumber > res.number) ||
  241. (o.upperNumber && o.upperNumber < res.number)
  242. ) {
  243. continue;
  244. }
  245.  
  246. if ( (o.lowerRefCount && o.lowerRefCount > res.refCount) ||
  247. (o.upperRefCount && o.upperRefCount < res.refCount)
  248. ) {
  249. continue;
  250. }
  251.  
  252. if (o.lowerDate || o.upperDate) {
  253. var date = new Date(res.time);
  254. var monthdate = date.getMonth() + date.getDate() * 0.01;
  255. var hoursminutes = date.getHours() + date.getMinutes() * 0.01;
  256. }
  257.  
  258. if ( (o.lowerDate && (
  259. ( lowerDate.fullYear != undefined && lowerDate.fullYear > date.getFullYear() ) ||
  260. ( lowerDate.monthdate > monthdate ) ||
  261. ( lowerDate.day != undefined && lowerDate.day > date.getDay() ) ||
  262. ( lowerDate.hoursminutes > hoursminutes )
  263. )
  264. ) ||
  265. (o.upperDate && (
  266. ( upperDate.fullYear != undefined && upperDate.fullYear < date.getFullYear() ) ||
  267. ( upperDate.monthdate < monthdate ) ||
  268. ( upperDate.day != undefined && upperDate.day < date.getDay() ) ||
  269. ( upperDate.hoursminutes < hoursminutes )
  270. )
  271. )
  272. ) {
  273. continue;
  274. }
  275. }
  276.  
  277. list.add(res);
  278.  
  279.  
  280. if (callback) {
  281. e.progressValue = (i + 1) / resCount;
  282. if (callback(e) === false) break;
  283. }
  284. }
  285.  
  286. return list;
  287. }
  288.  
  289.  
  290. function makeModelItem(displayString, value) {
  291. return {
  292. displayString: displayString,
  293. value: value
  294. };
  295. }
  296. function listModelWrapper () {
  297. var listItems = new LinkedList();
  298. //var listenerList = new EventListenerList();
  299. var listModel = new ListModel({
  300. addListDataListener: function (l) {
  301. //listenerList.add(l.getClass(), l);
  302. },
  303. removeListDataListener: function () {
  304. //listenerList.remove(l.getClass(), l);
  305. },
  306. getElementAt: function (index) {
  307. return listItems.get(index).displayString;
  308. },
  309. getSize: function () {
  310. return listItems.size();
  311. }
  312. });
  313.  
  314. return {
  315. addListDataListener: listModel.addListDataListener,
  316. removeListDataListener: listModel.removeListDataListener,
  317. getElementAt: listModel.getElementAt,
  318. getSize: listModel.getSize,
  319. model: listModel,
  320. items: listItems,
  321. add: function (item) {
  322. listItems.add(item);
  323. },
  324. addFirst: function (item) {
  325. listItems.addFirst(item);
  326. },
  327. exists: function (item) {
  328. for (var length = listItems.size(), i = 0; i < length; i++) {
  329. var lItem = listItems.get(i);
  330. if (lItem.displayString === item.displayString && lItem.value === item.value) {
  331. return true;
  332. }
  333. }
  334. return false;
  335. },
  336. remove: function (index) {
  337. listItems.remove(index);
  338. },
  339. clear: function () {
  340. for (var length = listItems.size(), i = length - 1; i >= 0; i--) {
  341. this.remove(i);
  342. }
  343. }
  344. };
  345. }
  346.  
  347. function createGridBagPanel () {
  348. var panel = new JPanel(new GridBagLayout());
  349. return {
  350. getPanel: function () {
  351. return panel;
  352. },
  353. add: function (o) {
  354. var gbc = new GridBagConstraints();
  355. for(var option in o.options) {
  356. gbc[option] = o.options[option];
  357. }
  358. panel.add(o.component, gbc);
  359. }
  360. };
  361. }
  362.  
  363. function Window() {
  364. var gbp = createGridBagPanel();
  365. var frame = new JFrame();
  366. //frame.setSize(width, height);
  367.  
  368. frame.setAlwaysOnTop(true);
  369.  
  370.  
  371. frame.addWindowListener(new WindowListener() {
  372. windowActivated: function (e) {},
  373. windowClosed: function (e) {},
  374. windowDeactivated: function (e) {},
  375. windowDeiconified: function (e) {},
  376. windowIconified: function (e) {},
  377. windowOpened: function (e){},
  378. windowClosing: function (e) {
  379. frame.dispose();
  380. }
  381. });
  382.  
  383. frame.add(gbp.getPanel());
  384.  
  385. return {
  386. add: gbp.add,
  387. frame: frame,
  388. show: function () {
  389. frame.pack();
  390. frame.setLocationRelativeTo(null);
  391. frame.setVisible(true);
  392. }
  393. };
  394. }
  395.  
  396. function makeBoardsModel () {
  397. var boards = v2c.boards;
  398. var model = listModelWrapper();
  399.  
  400. for (var i = 0, length = boards.length; i < length; i++) {
  401. var board = boards[i];
  402. if (board.bbs.is2ch) {
  403. var name = board.name;
  404. if (name.length() === 0) name = "名無しの板 " + "(" + board.url + ")";
  405.  
  406. model.add(makeModelItem(name, board));
  407. }
  408. }
  409.  
  410. return model;
  411. }
  412.  
  413. function makeSearchModel () {
  414. var boards = v2c.boards;
  415. var model = listModelWrapper();
  416.  
  417. for (var i = 0, length = boards.length; i < length; i++) {
  418. model.add(makeModelItem("dummy", null));
  419. }
  420.  
  421. return model;
  422. }
  423.  
  424. function resMatcher (searchOptions) {
  425. var e = {};
  426. var matches = new HashMap();
  427.  
  428. var dispatchOnProgress = function (callback, progressValue) {
  429. if (callback) {
  430. e.progressValue = progressValue;
  431. var ret = callback(e);
  432. if (ret === false) return false;
  433. }
  434. return true;
  435. };
  436.  
  437. return {
  438. matchThread: function (thread, callback) {
  439. if (!matches.containsKey(thread)) {
  440. var list = getMatchesResFromThread(thread, searchOptions, function (e) {
  441. return dispatchOnProgress(callback, e.progressValue);
  442. });
  443. if (list.size() !== 0) {
  444. matches.put(thread, list);
  445. }
  446. }
  447. },
  448. matchBoard: function (board, callback) {
  449. var threads = board.threadsWithLog;
  450. if (threads.length === 0) {
  451. dispatchOnProgress(callback, 1.0);
  452. }
  453. else {
  454. for (var length = threads.length, i = 0; i < length; i++) {
  455. var thread = threads[i];
  456. this.matchThread(thread);
  457.  
  458. if (dispatchOnProgress(callback, (i + 1) / length) === false) return;
  459. }
  460. }
  461. },
  462. build: function (argString, options) {
  463. var sb = new StringBuilder();
  464. var itiSb = new StringBuilder();
  465.  
  466. var threads = matches.keySet().toArray();
  467.  
  468. threads = threads.sort(function(a, b){
  469. return (a.key - b.key);
  470. });
  471.  
  472. var cancel = false;
  473. var date = new Date();
  474. var dateStr = date.getFullYear() + "/" + ("0" + (date.getMonth() + 1)).slice(-2) + "/" + ("0" + date.getDate()).slice(-2) + " " + ("0" + date.getHours()).slice(-2) + ":" + ("0" + date.getMinutes()).slice(-2);
  475. var iti = "抽出<><>" + dateStr + " ID:V2C<>パネルの設定<br>" + argString +"<br><br>$message<>抽出\n";
  476. var count = 2;
  477.  
  478. for (var length = threads.length, i = 0; i < length; i++) {
  479. var thread = threads[i];
  480. var matchesRes = matches.get(thread);
  481. var size = matchesRes.size();
  482.  
  483. var resList = readDat(thread.localFile);
  484.  
  485. if (size === 1) {
  486. var anchor = '&gt;&gt;' + count;
  487. }
  488. else {
  489. var anchor = '&gt;&gt;' + count + '-' + (count + size - 1);
  490. }
  491.  
  492. count += size;
  493.  
  494. var rescsv = "";
  495. for (var j = 0; j < size; j++) {
  496. var res = matchesRes.get(j);
  497. rescsv += (j === 0) ? res.number : "," + res.number;
  498.  
  499. //var source = res.source;
  500. var source = resList.get(res.index);
  501.  
  502. if (options && options.callback) {
  503. var e = {};
  504. e.progressValue = i / length + (j + 1) / size / length;
  505.  
  506. if (options.replaceAnchor) {
  507. source = source.replaceAll("<a.+?([0-9]+)</a>", "&gt;&gt;" + thread.url + "$1");
  508. }
  509. if (options.addOriginalResURL) {
  510. source = source.replaceAll("(.+)<>.*$", '$1<br><hr>' + thread.title + " " + thread.url + res.number + "<>");
  511. }
  512.  
  513. if (options.callback(e) === false) {
  514. cancel = true;
  515. }
  516. if (cancel) break;
  517. }
  518.  
  519. sb.append(source);
  520. sb.append("\n");
  521. }
  522.  
  523.  
  524. itiSb.append(anchor + " " + thread.title + " " + thread.url);
  525. if (options && options.addCSVList) {
  526. itiSb.append(rescsv);
  527. }
  528. itiSb.append("<br>");
  529. if (cancel) break;
  530. }
  531.  
  532. if (options && options.outputGuide) {
  533. sb.insert(0, iti.replace("$message", itiSb.toString()));
  534. }
  535.  
  536. return sb.toString();
  537. }
  538. };
  539. }
  540.  
  541.  
  542. var window = new Window();
  543.  
  544. var components = (function () {
  545.  
  546. var refSearch = new JTextField();
  547. var refSearchEnable = true;
  548. var boardsModel = makeBoardsModel();
  549. var defaultModelItems = boardsModel.items.clone();
  550. var boardsList = new JList(boardsModel.model);
  551. var boardsListScroll = new JScrollPane(boardsList);
  552.  
  553. var toRightButton = new JButton("↓");
  554. var toLeftButton = new JButton("↑");
  555.  
  556. toRightButton.setPreferredSize(new Dimension(50, 20));
  557. toLeftButton.setPreferredSize(new Dimension(50, 20));
  558.  
  559. var searchModel = makeSearchModel();
  560. var searchList = new JList(searchModel.model);
  561. var searchListScroll = new JScrollPane(searchList);
  562.  
  563. var searchButton = new JButton("検索開始");
  564. var cancelButton = new JButton("キャンセル");
  565. cancelButton.setEnabled(false);
  566.  
  567. var searchTitleCheck = new JCheckBox("スレタイ");
  568. var searchTitle = new JTextField();
  569. var searchNameCheck = new JCheckBox("名前");
  570. var searchName = new JTextField();
  571. var searchMailCheck = new JCheckBox("メール");
  572. var searchMail = new JTextField();
  573. var searchIDCheck = new JCheckBox("ID");
  574. var searchID = new JTextField();
  575. var searchBeIDCheck = new JCheckBox("BE");
  576. var searchBeID = new JTextField();
  577. var searchMessageCheck = new JCheckBox("本文");
  578. var searchMessage = new JTextField();
  579. var searchLabelCheck = new JCheckBox("ラベル");
  580. var list = ["全てのラベル"];
  581. for (var i = 0; i < v2c.resLabels.length; i++) {
  582. list.push(v2c.resLabels[i].name);
  583. }
  584. var searchLabel = new JComboBox(list);
  585. var list = [];
  586. for (var i = 1999; i <= parseInt((new Date()).getFullYear()); i++) {
  587. list.push(i.toString());
  588. }
  589. var searchYear1Check = new JCheckBox("年");
  590. var searchYear1 = new JComboBox(list);
  591. var searchYear2Check = new JCheckBox("年");
  592. var searchYear2 = new JComboBox(list);
  593.  
  594. var list = [];
  595. for (var i = 1; i <= 12; i++) {
  596. list.push(i.toString());
  597. }
  598. var searchMonth1Check = new JCheckBox("月");
  599. var searchMonth1 = new JComboBox(list);
  600. var searchMonth2Check = new JCheckBox("月");
  601. var searchMonth2 = new JComboBox(list);
  602.  
  603. var list = [];
  604. for (var i = 1; i <= 31; i++) {
  605. list.push(i.toString());
  606. }
  607. var searchDate1Check = new JCheckBox("日");
  608. var searchDate1 = new JComboBox(list);
  609. var searchDate2Check = new JCheckBox("日");
  610. var searchDate2 = new JComboBox(list);
  611.  
  612. var searchDay1Check = new JCheckBox("曜日");
  613. var searchDay1 = new JComboBox(["日", "月", "火", "水", "木", "金", "土"]);
  614. var searchDay2Check = new JCheckBox("曜日");
  615. var searchDay2 = new JComboBox(["日", "月", "火", "水", "木", "金", "土"]);
  616.  
  617. var list = [];
  618. for (var i = 0; i <= 23; i++) {
  619. list.push(i.toString());
  620. }
  621. var searchHours1Check = new JCheckBox("時");
  622. var searchHours1 = new JComboBox(list);
  623. var searchHours2Check = new JCheckBox("時");
  624. var searchHours2 = new JComboBox(list);
  625.  
  626. var list = [];
  627. for (var i = 0; i <= 59; i++) {
  628. list.push(i.toString());
  629. }
  630. var searchMinutes1Check = new JCheckBox("分");
  631. var searchMinutes1 = new JComboBox(list);
  632. var searchMinutes2Check = new JCheckBox("分");
  633. var searchMinutes2 = new JComboBox(list);
  634.  
  635. var searchNumber1Check = new JCheckBox("下限");
  636. var searchNumber1 = new JSpinner();
  637. searchNumber1.setValue(1);
  638. searchNumber1.setEditor(new JSpinner.NumberEditor(searchNumber1, "###0"));
  639.  
  640. var searchNumber2Check = new JCheckBox("上限");
  641. var searchNumber2 = new JSpinner();
  642. searchNumber2.setEditor(new JSpinner.NumberEditor(searchNumber2, "###0"));
  643. searchNumber2.setValue(1);
  644.  
  645. var searchRefcount1Check = new JCheckBox("下限");
  646. var searchRefcount1 = new JSpinner();
  647. searchRefcount1.setEditor(new JSpinner.NumberEditor(searchRefcount1, "###0"));
  648. searchRefcount1.setValue(0);
  649.  
  650. var searchRefcount2Check = new JCheckBox("上限");
  651. var searchRefcount2 = new JSpinner();
  652. searchRefcount2.setEditor(new JSpinner.NumberEditor(searchRefcount2, "###0"));
  653. searchRefcount2.setValue(0);
  654.  
  655. var searchSelectedThreadCheck = new JCheckBox("選択しているスレッドを含める");
  656. var searchSelectedBoardCheck = new JCheckBox("選択している板を含める(未実装)");
  657. searchSelectedBoardCheck.setEnabled(false);
  658. var searchViewThreadCheck = new JCheckBox("開いているスレッドを含める");
  659. var searchViewBoardCheck = new JCheckBox("開いている板を含める(未実装)");
  660. searchViewBoardCheck.setEnabled(false);
  661. var searchViewThreadBoardCheck = new JCheckBox("開いているスレッドが所属する板を含める");
  662. var searchSelectedThreadBoardCheck = new JCheckBox("選択しているスレッドが所属する板を含める");
  663.  
  664. var progressLabel = new JLabel("");
  665. var progress = new JProgressBar(0, 100);
  666.  
  667. var replaceAnchorCheck = new JCheckBox("アンカーを絶対参照に書き換える");
  668. var addOriginalResURLCheck = new JCheckBox("レスの最後に元レスのURLを付加する");
  669. var outputGuideCheck = new JCheckBox(">>1にガイドを出力する");
  670. var addCSVListCheck = new JCheckBox(">>1にガイドを出力する場合、URLにレスをカンマ区切りで付ける");
  671.  
  672. refSearch.addKeyListener(function () {
  673. this.keyReleased = function (e) {
  674. if (refSearchEnable) {
  675. boardsModel.clear();
  676. var regExp = new RegExp(normalizeStr(refSearch.getText()), "i");
  677. for (var i = 0, length = defaultModelItems.size(); i < length; i++) {
  678. var item = defaultModelItems.get(i);
  679. var name = normalizeStr(item.displayString);
  680. if (name.match(regExp) && !searchModel.exists(item)) {
  681. boardsModel.add(item);
  682. }
  683. }
  684. boardsList.repaint();
  685. boardsList.revalidate();
  686. }
  687. }
  688. });
  689. refSearch.addInputMethodListener(function () {
  690. this.inputMethodTextChanged = function (e) {
  691. refSearchEnable = (e.getText() === null);
  692. }
  693. });
  694.  
  695. toLeftButton.addActionListener(new ActionListener({
  696. actionPerformed: function (e) {
  697. var index = searchList.getSelectedIndices();
  698. for (var length = index.length, i = length - 1; i >= 0; i--) {
  699. boardsModel.addFirst(searchModel.items.get(index[i]));
  700. searchModel.remove(index[i]);
  701. }
  702. boardsList.repaint();
  703. boardsList.revalidate();
  704. searchList.repaint();
  705. searchList.revalidate();
  706. searchList.clearSelection();
  707. boardsList.clearSelection();
  708. }
  709. }));
  710.  
  711. toRightButton.addActionListener(new ActionListener({
  712. actionPerformed: function (e) {
  713. var index = boardsList.getSelectedIndices();
  714. for (var length = index.length, i = length - 1; i >= 0; i--) {
  715. searchModel.add(boardsModel.items.get(index[i]));
  716. boardsModel.remove(index[i]);
  717. }
  718. boardsList.repaint();
  719. boardsList.revalidate();
  720. searchList.repaint();
  721. searchList.revalidate();
  722. searchList.clearSelection();
  723. boardsList.clearSelection();
  724. }
  725. }));
  726.  
  727. var makeSearchOptions = function () {
  728.  
  729. var searchOptions = {};
  730. if (searchTitleCheck.isSelected() ) searchOptions.title = searchTitle.getText();
  731. if (searchNameCheck.isSelected() ) searchOptions.name = searchName.getText();
  732. if (searchMailCheck.isSelected() ) searchOptions.mail = searchMail.getText();
  733. if (searchIDCheck.isSelected() ) searchOptions.id = searchID.getText();
  734. if (searchBeIDCheck.isSelected() ) searchOptions.beID = searchBeID.getText();
  735. if (searchMessageCheck.isSelected()) searchOptions.message = searchMessage.getText();
  736. if (searchLabelCheck.isSelected() ) {
  737. if (searchLabel.getSelectedIndex() === 0) {
  738. searchOptions.resLabel = new RegExp(".+");
  739. }
  740. else {
  741. searchOptions.resLabel = new RegExp("^" + searchLabel.getSelectedItem() + "$");
  742. }
  743. }
  744.  
  745.  
  746. if (searchNumber1Check.isSelected()) searchOptions.lowerNumber = searchNumber1.getValue();
  747. if (searchNumber2Check.isSelected()) searchOptions.upperNumber = searchNumber2.getValue();
  748. if (searchRefcount1Check.isSelected()) searchOptions.lowerRefCount = searchRefcount1.getValue();
  749. if (searchRefcount2Check.isSelected()) searchOptions.upperRefCount = searchRefcount2.getValue();
  750.  
  751. searchOptions.lowerDate = {};
  752. searchOptions.upperDate = {};
  753. var dayTable = {
  754. "日": "0",
  755. "月": "1",
  756. "火": "2",
  757. "水": "3",
  758. "木": "4",
  759. "金": "5",
  760. "土": "6"
  761. };
  762.  
  763. if (searchYear1Check.isSelected() ) searchOptions.lowerDate.fullYear = searchYear1.getSelectedItem();
  764. if (searchMonth1Check.isSelected() ) searchOptions.lowerDate.month = parseInt(searchMonth1.getSelectedItem()) - 1;
  765. if (searchDate1Check.isSelected() ) searchOptions.lowerDate.date = parseInt(searchDate1.getSelectedItem());
  766. if (searchDay1Check.isSelected() ) searchOptions.lowerDate.day = dayTable[(searchDay1.getSelectedItem() + "")];
  767. if (searchHours1Check.isSelected() ) searchOptions.lowerDate.hours = parseInt(searchHours1.getSelectedItem());
  768. if (searchMinutes1Check.isSelected()) searchOptions.lowerDate.minutes = parseInt(searchMinutes1.getSelectedItem());
  769.  
  770. if (searchYear2Check.isSelected() ) searchOptions.upperDate.fullYear = searchYear2.getSelectedItem();
  771. if (searchMonth2Check.isSelected() ) searchOptions.upperDate.month = parseInt(searchMonth2.getSelectedItem()) - 1;
  772. if (searchDate2Check.isSelected() ) searchOptions.upperDate.date = parseInt(searchDate2.getSelectedItem());
  773. if (searchDay2Check.isSelected() ) searchOptions.upperDate.day = dayTable[(searchDay2.getSelectedItem() + "")];
  774. if (searchHours2Check.isSelected() ) searchOptions.upperDate.hours = parseInt(searchHours2.getSelectedItem());
  775. if (searchMinutes2Check.isSelected()) searchOptions.upperDate.minutes = parseInt(searchMinutes2.getSelectedItem());
  776.  
  777. return searchOptions;
  778. };
  779.  
  780. searchButton.addActionListener(new ActionListener({
  781. actionPerformed:
  782. function () {
  783. g.thread.submit(
  784. function () {
  785.  
  786. g.cancel = false;
  787. searchButton.setEnabled(false);
  788. cancelButton.setEnabled(true);
  789. progress.setValue(0);
  790.  
  791. var searchOptions = makeSearchOptions();
  792. var progressValue = 0;
  793.  
  794. var matcher = resMatcher(searchOptions);
  795.  
  796.  
  797. var taskNo = 1;
  798. var taskCount = 0;
  799. if (searchModel.items.size() > 0) taskCount += 1;
  800. if (searchSelectedThreadCheck.isSelected()) taskCount += 1;
  801. if (searchViewThreadCheck.isSelected()) taskCount += 1;
  802. if (searchSelectedThreadBoardCheck.isSelected()) taskCount += 1;
  803. if (searchViewThreadBoardCheck.isSelected()) taskCount += 1;
  804.  
  805. /**********************************
  806. * 板指定
  807. **********************************/
  808. if (!g.cancel && searchModel.items.size() > 0) {
  809. progressLabel.setText(taskNo + " / " + taskCount);
  810. taskNo += 1;
  811.  
  812. var items = searchModel.items;
  813. for (var size = items.size(), i = 0; i < size; i++) {
  814. if (g.cancel) break;
  815. var board = items.get(i).value;
  816. matcher.matchBoard(board, function (e) {
  817. progressValue = i / size + e.progressValue / size;
  818. progress.setValue(progressValue * 100);
  819. if (g.cancel) return false;
  820. });
  821. }
  822. }
  823.  
  824. /**********************************
  825. * 選択しているスレッドを含める
  826. **********************************/
  827. if (!g.cancel && searchSelectedThreadCheck.isSelected()) {
  828. progressLabel.setText(taskNo + " / " + taskCount);
  829. taskNo += 1;
  830.  
  831. var thread = v2c.resPane.selectedThread;
  832. matcher.matchThread(thread, function (e) {
  833. progressValue = e.progressValue;
  834. progress.setValue(progressValue * 100);
  835. if (g.cancel) return false;
  836. });
  837. }
  838.  
  839. /**********************************
  840. * 開いているスレッドを含める
  841. **********************************/
  842. if (!g.cancel && searchViewThreadCheck.isSelected()) {
  843. progressLabel.setText(taskNo + " / " + taskCount);
  844. taskNo += 1;
  845.  
  846. var threads = v2c.resPane.threads;
  847. for (var length = threads.length, i = 0; i < length; i++) {
  848. if (g.cancel) break;
  849.  
  850. var thread = threads[i];
  851. matcher.matchThread(thread, function (e) {
  852. progressValue = i / length + e.progressValue / length;
  853. progress.setValue(progressValue * 100);
  854. if (g.cancel) return false;
  855. });
  856. }
  857. }
  858.  
  859.  
  860. /**********************************
  861. * 選択しているスレッドが所属する板を含める
  862. **********************************/
  863. if (!g.cancel && searchSelectedThreadBoardCheck.isSelected()) {
  864. progressLabel.setText(taskNo + " / " + taskCount);
  865. taskNo += 1;
  866.  
  867. var board = v2c.resPane.selectedThread.board;
  868. matcher.matchBoard(board, function (e) {
  869. progressValue = e.progressValue;
  870. progress.setValue(progressValue * 100);
  871. if (g.cancel) return false;
  872. });
  873. }
  874.  
  875. /**********************************
  876. * 開いているスレッドが所属する板を含める
  877. **********************************/
  878. if (!g.cancel && searchViewThreadBoardCheck.isSelected()) {
  879. progressLabel.setText(taskNo + " / " + taskCount);
  880. taskNo += 1;
  881. var memo = {};
  882. var threads = v2c.resPane.threads;
  883. for (var length = threads.length, i = 0; i < length; i++) {
  884. if (g.cancel) break;
  885. var thread = threads[i];
  886. var board = thread.board;
  887.  
  888. if (!memo[board.url]) {
  889. memo[board.url] = true;
  890.  
  891. matcher.matchBoard(board, function (e) {
  892. progressValue = i / length + e.progressValue / length;
  893. progress.setValue(progressValue * 100);
  894. if (g.cancel) return false;
  895. });
  896. }
  897. }
  898. }
  899.  
  900. g.cancel = false;
  901.  
  902. var resTitle = "抽出結果";
  903. var dat = matcher.build(getArgsString(), {
  904. replaceAnchor: replaceAnchorCheck.isSelected(),
  905. addOriginalResURL: addOriginalResURLCheck.isSelected(),
  906. outputGuide: outputGuideCheck.isSelected(),
  907. addCSVList: addCSVListCheck.isSelected(),
  908. callback: function (e) {
  909. progressLabel.setText("抽出結果構成中");
  910. progress.setValue(e.progressValue * 100);
  911. if (g.cancel) return false;
  912. }
  913. });
  914.  
  915. var resCount = dat.split("\n").length;
  916. var unixtime = saveDat(APP_NAME, dat, resTitle, resCount);
  917. var lth = v2c.getThread("http://localboard/test/read.cgi/" + APP_NAME + "/" + unixtime + "/", resTitle, resCount);
  918. lth.open(false);
  919.  
  920. progressLabel.setText("完了");
  921. searchButton.setEnabled(true);
  922. cancelButton.setEnabled(false);
  923. }
  924. );
  925. }
  926. }));
  927.  
  928. cancelButton.addActionListener(new ActionListener({
  929. actionPerformed: function (e) {
  930. g.cancel = true;
  931. }
  932. }));
  933.  
  934. return {
  935. refSearch : refSearch,
  936. boardsList : boardsList,
  937. searchList : searchList,
  938. boardsModel : boardsModel,
  939. searchModel : searchModel,
  940. boardsListScroll : boardsListScroll,
  941. searchListScroll : searchListScroll,
  942. toRightButton : toRightButton,
  943. toLeftButton : toLeftButton,
  944. searchButton : searchButton,
  945. cancelButton : cancelButton,
  946. searchTitle : searchTitle,
  947. searchName : searchName,
  948. searchMail : searchMail,
  949. searchID : searchID,
  950. searchBeID : searchBeID,
  951. searchMessage : searchMessage,
  952. searchLabel : searchLabel,
  953. searchTitleCheck : searchTitleCheck,
  954. searchNameCheck : searchNameCheck,
  955. searchMailCheck : searchMailCheck,
  956. searchIDCheck : searchIDCheck,
  957. searchBeIDCheck : searchBeIDCheck,
  958. searchMessageCheck : searchMessageCheck,
  959. searchLabelCheck : searchLabelCheck,
  960. searchYear1 : searchYear1,
  961. searchYear1Check : searchYear1Check,
  962. searchMonth1 : searchMonth1,
  963. searchMonth1Check : searchMonth1Check,
  964. searchDate1 : searchDate1,
  965. searchDate1Check : searchDate1Check,
  966. searchDay1 : searchDay1,
  967. searchDay1Check : searchDay1Check,
  968. searchHours1 : searchHours1,
  969. searchHours1Check : searchHours1Check,
  970. searchMinutes1 : searchMinutes1,
  971. searchMinutes1Check : searchMinutes1Check,
  972. searchYear2 : searchYear2,
  973. searchYear2Check : searchYear2Check,
  974. searchMonth2 : searchMonth2,
  975. searchMonth2Check : searchMonth2Check,
  976. searchDate2 : searchDate2,
  977. searchDate2Check : searchDate2Check,
  978. searchDay2 : searchDay2,
  979. searchDay2Check : searchDay2Check,
  980. searchHours2 : searchHours2,
  981. searchHours2Check : searchHours2Check,
  982. searchMinutes2 : searchMinutes2,
  983. searchMinutes2Check : searchMinutes2Check,
  984. searchNumber1 : searchNumber1,
  985. searchNumber1Check : searchNumber1Check,
  986. searchNumber2 : searchNumber2,
  987. searchNumber2Check : searchNumber2Check,
  988. searchRefcount1 : searchRefcount1,
  989. searchRefcount1Check : searchRefcount1Check,
  990. searchRefcount2 : searchRefcount2,
  991. searchRefcount2Check : searchRefcount2Check,
  992. searchSelectedThreadCheck : searchSelectedThreadCheck,
  993. searchSelectedBoardCheck : searchSelectedBoardCheck,
  994. searchViewThreadCheck : searchViewThreadCheck,
  995. searchViewBoardCheck : searchViewBoardCheck,
  996. searchViewThreadBoardCheck : searchViewThreadBoardCheck,
  997. searchSelectedThreadBoardCheck : searchSelectedThreadBoardCheck,
  998. progress : progress,
  999. progressLabel : progressLabel,
  1000. replaceAnchorCheck : replaceAnchorCheck,
  1001. addOriginalResURLCheck : addOriginalResURLCheck,
  1002. outputGuideCheck : outputGuideCheck,
  1003. addCSVListCheck : addCSVListCheck,
  1004. };
  1005. }());
  1006.  
  1007.  
  1008.  
  1009. window.add({
  1010. component:
  1011. (function () {
  1012. var panel = new JPanel();
  1013. panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
  1014.  
  1015. var gbp = createGridBagPanel();
  1016.  
  1017. gbp.add({
  1018. component:
  1019. new JLabel("フィルタ"),
  1020. options:
  1021. {
  1022. gridx: 0,
  1023. gridy: 0
  1024. }
  1025. });
  1026. gbp.add({
  1027. component:
  1028. components.refSearch,
  1029. options:
  1030. {
  1031. gridx: 1,
  1032. gridy: 0,
  1033. weightx: 1,
  1034. insets: new Insets(0, 5, 0, 0),
  1035. fill: GridBagConstraints.BOTH
  1036. }
  1037. });
  1038. gbp.add({
  1039. component:
  1040. components.boardsListScroll,
  1041. options:
  1042. {
  1043. gridx: 0,
  1044. gridy: 1,
  1045. weightx: 1,
  1046. weighty: 1,
  1047. gridwidth: 2,
  1048. insets: new Insets(10, 0, 0, 0),
  1049. fill: GridBagConstraints.BOTH
  1050. }
  1051. });
  1052.  
  1053. var panel1 = gbp.getPanel();
  1054. panel1.setBorder(BorderFactory.createTitledBorder("板一覧"));
  1055.  
  1056. var panel2 = new JPanel();
  1057. panel2.setLayout(new BoxLayout(panel2, BoxLayout.LINE_AXIS));
  1058. panel2.add(components.toRightButton);
  1059. panel2.add(components.toLeftButton);
  1060.  
  1061. var panel3 = new JPanel();
  1062. panel3.setLayout(new BoxLayout(panel3, BoxLayout.PAGE_AXIS));
  1063. panel3.add(components.searchListScroll);
  1064. panel3.setBorder(BorderFactory.createTitledBorder("検索対象"));
  1065.  
  1066. panel.add(panel1);
  1067. panel.add(panel2);
  1068. panel.add(panel3);
  1069. panel.setBorder(BorderFactory.createTitledBorder("板指定"));
  1070.  
  1071. return panel;
  1072. }()),
  1073. options:
  1074. {
  1075. gridx: 0,
  1076. gridy: 0,
  1077. weightx: 0.5,
  1078. weighty: 1,
  1079. gridheight: 4,
  1080. insets: new Insets(10, 10, 10, 10),
  1081. fill: GridBagConstraints.BOTH
  1082. }
  1083. });
  1084.  
  1085. window.add({
  1086. component:
  1087. (function () {
  1088. var gbp = createGridBagPanel();
  1089. var panel = gbp.getPanel();
  1090. var set = function (component, x, y) {
  1091. gbp.add({
  1092. component: component,
  1093. options:
  1094. {
  1095. gridx: x,
  1096. gridy: y,
  1097. fill: GridBagConstraints.BOTH
  1098. }
  1099. });
  1100. };
  1101.  
  1102. set(components.searchSelectedThreadCheck, 0, 0);
  1103. set(components.searchSelectedThreadBoardCheck, 0, 1);
  1104.  
  1105. set(components.searchViewThreadCheck, 1, 0);
  1106. set(components.searchViewThreadBoardCheck, 1, 1);
  1107.  
  1108. // set(components.searchSelectedBoardCheck, 2, 0);
  1109. // set(components.searchViewBoardCheck, 2, 1);
  1110.  
  1111. panel.setBorder(BorderFactory.createTitledBorder("その他指定"));
  1112.  
  1113. return panel;
  1114. }()),
  1115. options:
  1116. {
  1117. gridx: 1,
  1118. gridy: 0,
  1119. weightx: 0.5,
  1120. insets: new Insets(10, 10, 3, 10),
  1121. fill: GridBagConstraints.BOTH
  1122. }
  1123. });
  1124.  
  1125. window.add({
  1126. component:
  1127. (function () {
  1128. var gbp = createGridBagPanel();
  1129. var i = 0;
  1130. var set = function (name, index) {
  1131. gbp.add({
  1132. component: components[name + "Check"],
  1133. options:
  1134. {
  1135. gridx: 0,
  1136. gridy: index,
  1137. anchor: GridBagConstraints.WEST
  1138. }
  1139. });
  1140. gbp.add({
  1141. component: components[name],
  1142. options:
  1143. {
  1144. gridx: 1,
  1145. gridy: index,
  1146. weightx: 1,
  1147. insets: new Insets(0, 0, 5, 0),
  1148. fill: GridBagConstraints.BOTH
  1149. }
  1150. });
  1151. }
  1152.  
  1153. set("searchTitle", i++);
  1154. set("searchName", i++);
  1155. set("searchMail", i++);
  1156. set("searchID", i++);
  1157. set("searchBeID", i++);
  1158. set("searchMessage", i++);
  1159. set("searchLabel", i++);
  1160.  
  1161.  
  1162. gbp.add({
  1163. component:
  1164. (function () {
  1165.  
  1166. var panel = new JPanel();
  1167. panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
  1168.  
  1169. var panel1 = new JPanel();
  1170. panel1.setLayout(new BoxLayout(panel1, BoxLayout.LINE_AXIS));
  1171. panel1.add(components.searchNumber1Check);
  1172. panel1.add(components.searchNumber1);
  1173. panel1.add(components.searchNumber2Check);
  1174. panel1.add(components.searchNumber2);
  1175. panel1.setBorder(BorderFactory.createTitledBorder("レス番号"));
  1176.  
  1177. var panel2 = new JPanel();
  1178. panel2.setLayout(new BoxLayout(panel2, BoxLayout.LINE_AXIS));
  1179. panel2.add(components.searchRefcount1Check);
  1180. panel2.add(components.searchRefcount1);
  1181. panel2.add(components.searchRefcount2Check);
  1182. panel2.add(components.searchRefcount2);
  1183. panel2.setBorder(BorderFactory.createTitledBorder("被参照数"));
  1184.  
  1185. panel.add(panel1);
  1186. panel.add(panel2);
  1187.  
  1188. return panel;
  1189. }()),
  1190. options:
  1191. {
  1192. gridx: 0,
  1193. gridy: i++,
  1194. gridwidth: 2,
  1195. fill: GridBagConstraints.BOTH
  1196. }
  1197. });
  1198.  
  1199. gbp.add({
  1200. component:
  1201. (function () {
  1202. var panel = new JPanel();
  1203. panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
  1204. panel.add(components.searchYear1Check);
  1205. panel.add(components.searchYear1);
  1206. panel.add(components.searchMonth1Check);
  1207. panel.add(components.searchMonth1);
  1208. panel.add(components.searchDate1Check);
  1209. panel.add(components.searchDate1);
  1210. panel.add(components.searchDay1Check);
  1211. panel.add(components.searchDay1);
  1212. panel.add(components.searchHours1Check);
  1213. panel.add(components.searchHours1);
  1214. panel.add(components.searchMinutes1Check);
  1215. panel.add(components.searchMinutes1);
  1216. panel.setBorder(BorderFactory.createTitledBorder("投稿時刻 下限"));
  1217. return panel;
  1218. }()),
  1219. options:
  1220. {
  1221. gridx: 0,
  1222. gridy: i++,
  1223. gridwidth: 2,
  1224. fill: GridBagConstraints.BOTH
  1225. }
  1226. });
  1227.  
  1228. gbp.add({
  1229. component:
  1230. (function () {
  1231. var panel = new JPanel();
  1232. panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
  1233. panel.add(components.searchYear2Check);
  1234. panel.add(components.searchYear2);
  1235. panel.add(components.searchMonth2Check);
  1236. panel.add(components.searchMonth2);
  1237. panel.add(components.searchDate2Check);
  1238. panel.add(components.searchDate2);
  1239. panel.add(components.searchDay2Check);
  1240. panel.add(components.searchDay2);
  1241. panel.add(components.searchDay2Check);
  1242. panel.add(components.searchDay2);
  1243. panel.add(components.searchHours2Check);
  1244. panel.add(components.searchHours2);
  1245. panel.add(components.searchMinutes2Check);
  1246. panel.add(components.searchMinutes2);
  1247. panel.setBorder(BorderFactory.createTitledBorder("投稿時刻 上限"));
  1248. return panel;
  1249. }()),
  1250. options:
  1251. {
  1252. gridx: 0,
  1253. gridy: i++,
  1254. gridwidth: 2,
  1255. fill: GridBagConstraints.BOTH
  1256. }
  1257. });
  1258.  
  1259. var panel = gbp.getPanel();
  1260. panel.setBorder(BorderFactory.createTitledBorder("検索条件"));
  1261.  
  1262. return panel;
  1263. }()),
  1264. options:
  1265. {
  1266. gridx: 1,
  1267. gridy:1,
  1268. weightx: 0.5,
  1269. insets: new Insets(3, 10, 3, 10),
  1270. fill: GridBagConstraints.HORIZONTAL
  1271. }
  1272. });
  1273.  
  1274.  
  1275. window.add({
  1276. component:
  1277. (function () {
  1278. var gbp = createGridBagPanel();
  1279. var panel = gbp.getPanel();
  1280. var set = function (component, x, y) {
  1281. gbp.add({
  1282. component: component,
  1283. options:
  1284. {
  1285. gridx: x,
  1286. gridy: y,
  1287. fill: GridBagConstraints.BOTH
  1288. }
  1289. });
  1290. };
  1291.  
  1292. set(components.replaceAnchorCheck, 0, 0);
  1293. set(components.addOriginalResURLCheck, 1, 0);
  1294. set(components.outputGuideCheck, 0, 1);
  1295. set(components.addCSVListCheck, 1, 1);
  1296.  
  1297.  
  1298. panel.setBorder(BorderFactory.createTitledBorder("オプション"));
  1299.  
  1300. return panel;
  1301. }()),
  1302. options:
  1303. {
  1304. gridx: 1,
  1305. gridy: 2,
  1306. weightx: 1,
  1307. insets: new Insets(0, 10, 3, 10),
  1308. fill: GridBagConstraints.BOTH
  1309. }
  1310. });
  1311.  
  1312. window.add({
  1313. component:
  1314. (function () {
  1315. var gbp = createGridBagPanel();
  1316. var panel = gbp.getPanel();
  1317.  
  1318. var panel1 = new JPanel(new GridLayout(2,1));
  1319.  
  1320. panel1.add(components.progressLabel);
  1321. panel1.add(components.progress);
  1322.  
  1323. var panel2 = new JPanel();
  1324. panel2.setLayout(new BoxLayout(panel2, BoxLayout.LINE_AXIS));
  1325. panel2.add(components.searchButton);
  1326. panel2.add(components.cancelButton);
  1327.  
  1328. gbp.add({
  1329. component: panel1,
  1330. options:
  1331. {
  1332. gridx: 0,
  1333. gridy: 0,
  1334. weightx: 1000,
  1335. insets: new Insets(5, 5, 5, 5),
  1336. fill: GridBagConstraints.HORIZONTAL
  1337. }
  1338. });
  1339. gbp.add({
  1340. component: panel2,
  1341. options:
  1342. {
  1343. gridx: 0,
  1344. gridy: 1
  1345. }
  1346. });
  1347. panel.setBorder(BorderFactory.createTitledBorder("実行"));
  1348. return panel;
  1349. }()),
  1350. options:
  1351. {
  1352. gridx: 1,
  1353. gridy: 3,
  1354. weightx: 1,
  1355. insets: new Insets(0, 10, 10, 10),
  1356. fill: GridBagConstraints.HORIZONTAL
  1357. }
  1358. });
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365. function setDefaultValues() {
  1366.  
  1367. var setComboBox = function (componentName, compValue) {
  1368. var combobox = components[componentName];
  1369. var check = components[componentName + "Check"];
  1370. for (var i = 0; i < combobox.getItemCount(); i++) {
  1371. var value = combobox.getItemAt(i);
  1372. if (compValue + "" === value + "") {
  1373. check.setSelected(true);
  1374. combobox.setSelectedIndex(i);
  1375. break;
  1376. }
  1377. }
  1378. }
  1379.  
  1380. var h = {};
  1381. var boardList = g.defaultValues.blist;
  1382. for (var i = 0; i < boardList.length; i++) {
  1383. h[boardList[i]] = true;
  1384. }
  1385.  
  1386. for (var i = components.boardsModel.items.size() - 1; i >= 0; i--) {
  1387. var modelItem = components.boardsModel.items.get(i);
  1388. var url = modelItem.value.url;
  1389. if (h[url]) {
  1390. components.boardsModel.remove(modelItem);
  1391. components.searchModel.add(modelItem);
  1392. }
  1393. }
  1394.  
  1395. components.searchSelectedThreadCheck.setSelected(g.defaultValues.set1);
  1396. components.searchViewThreadCheck.setSelected(g.defaultValues.set2);
  1397. components.searchSelectedThreadBoardCheck.setSelected(g.defaultValues.set3);
  1398. components.searchViewThreadBoardCheck.setSelected(g.defaultValues.set4);
  1399. components.replaceAnchorCheck.setSelected(g.defaultValues.repanc);
  1400. components.addOriginalResURLCheck.setSelected(g.defaultValues.addourl);
  1401. components.outputGuideCheck.setSelected(g.defaultValues.opguide);
  1402. components.addCSVListCheck.setSelected(g.defaultValues.addcsv);
  1403.  
  1404.  
  1405. if (g.defaultValues.title !== null) {
  1406. components.searchTitleCheck.setSelected(true);
  1407. components.searchTitle.setText(g.defaultValues.title);
  1408. }
  1409. if (g.defaultValues.name !== null) {
  1410. components.searchNameCheck.setSelected(true);
  1411. components.searchName.setText(g.defaultValues.name);
  1412. }
  1413. if (g.defaultValues.mail !== null) {
  1414. components.searchMailCheck.setSelected(true);
  1415. components.searchMail.setText(g.defaultValues.mail);
  1416. }
  1417. if (g.defaultValues.id !== null) {
  1418. components.searchIDCheck.setSelected(true);
  1419. components.searchID.setText(g.defaultValues.id);
  1420. }
  1421. if (g.defaultValues.be !== null) {
  1422. components.searchBeIDCheck.setSelected(true);
  1423. components.searchBeID.setText(g.defaultValues.be);
  1424. }
  1425. if (g.defaultValues.message !== null) {
  1426. components.searchMessageCheck.setSelected(true);
  1427. components.searchMessage.setText(g.defaultValues.message);
  1428. }
  1429. if (g.defaultValues.label !== null) {
  1430. setComboBox("searchLabel", g.defaultValues.label);
  1431. }
  1432. if (g.defaultValues.lnum !== null) {
  1433. components.searchNumber1Check.setSelected(true);
  1434. components.searchNumber1.setValue(parseInt(g.defaultValues.lnum));
  1435. }
  1436. if (g.defaultValues.unum !== null) {
  1437. components.searchNumber2Check.setSelected(true);
  1438. components.searchNumber2.setValue(parseInt(g.defaultValues.unum));
  1439. }
  1440. if (g.defaultValues.lanc !== null) {
  1441. components.searchRefcount1Check.setSelected(true);
  1442. components.searchRefcount1.setValue(parseInt(g.defaultValues.lanc));
  1443. }
  1444. if (g.defaultValues.uanc !== null) {
  1445. components.searchRefcount2Check.setSelected(true);
  1446. components.searchRefcount2.setValue(parseInt(g.defaultValues.uanc));
  1447. }
  1448. if (g.defaultValues.lyear !== null) setComboBox("searchYear1" , g.defaultValues.lyear);
  1449. if (g.defaultValues.uyear !== null) setComboBox("searchYear2" , g.defaultValues.uyear);
  1450. if (g.defaultValues.lmonth !== null) setComboBox("searchMonth1" , g.defaultValues.lmonth);
  1451. if (g.defaultValues.umonth !== null) setComboBox("searchMonth2" , g.defaultValues.umonth);
  1452. if (g.defaultValues.ldate !== null) setComboBox("searchDate1" , g.defaultValues.ldate);
  1453. if (g.defaultValues.udate !== null) setComboBox("searchDate2" , g.defaultValues.udate);
  1454. if (g.defaultValues.lday !== null) setComboBox("searchDay1" , g.defaultValues.lday);
  1455. if (g.defaultValues.uday !== null) setComboBox("searchDay2" , g.defaultValues.uday);
  1456. if (g.defaultValues.lhours !== null) setComboBox("searchHours1" , g.defaultValues.lhours);
  1457. if (g.defaultValues.uhours !== null) setComboBox("searchHours2" , g.defaultValues.uhours);
  1458. if (g.defaultValues.lmin !== null) setComboBox("searchMinutes1" , g.defaultValues.lmin);
  1459. if (g.defaultValues.umin !== null) setComboBox("searchMinutes2" , g.defaultValues.umin);
  1460. }
  1461.  
  1462. function getArgsString() {
  1463. var args = "${SCRIPT:FrwT} " + APP_NAME + ".js args={";
  1464.  
  1465. var blist = [];
  1466. for (var i = components.searchModel.items.size() - 1; i >= 0; i--) {
  1467. var modelItem = components.searchModel.items.get(i);
  1468. blist.push('"' + modelItem.value.url + '"');
  1469. }
  1470.  
  1471. if (blist.toString() != "") args += "blist:[" + blist.toString() + "],";
  1472.  
  1473. if (components.searchSelectedThreadCheck.isSelected()) args += "set1:true,";
  1474. if (components.searchViewThreadCheck.isSelected()) args += "set2:true,";
  1475. if (components.searchSelectedThreadBoardCheck.isSelected()) args += "set3:true,";
  1476. if (components.searchViewThreadBoardCheck.isSelected()) args += "set4:true,";
  1477. if (components.replaceAnchorCheck.isSelected()) args += "repanc:true,";
  1478. if (components.addOriginalResURLCheck.isSelected()) args += "addourl:true,";
  1479. if (components.outputGuideCheck.isSelected()) args += "opguide:true,";
  1480. if (components.addCSVListCheck.isSelected()) args += "addcsv:true,";
  1481.  
  1482. if (components.searchTitleCheck.isSelected() ) args += "title:\"" + components.searchTitle.getText() + "\",";
  1483. if (components.searchNameCheck.isSelected() ) args += "name:\"" + components.searchName.getText() + "\",";
  1484. if (components.searchMailCheck.isSelected() ) args += "mail:\"" + components.searchMail.getText() + "\",";
  1485. if (components.searchIDCheck.isSelected() ) args += "id:\"" + components.searchID.getText() + "\",";
  1486. if (components.searchBeIDCheck.isSelected() ) args += "be:\"" + components.searchBeID.getText() + "\",";
  1487. if (components.searchMessageCheck.isSelected()) args += "message:\"" + components.searchMessage.getText() + "\",";
  1488. if (components.searchLabelCheck.isSelected() ) args += "label:\"" + components.searchLabel.getSelectedItem() + "\",";
  1489.  
  1490. if (components.searchNumber1Check.isSelected() ) args += "lnum:" + ~~components.searchNumber1.getValue() + ",";
  1491. if (components.searchNumber2Check.isSelected() ) args += "unum:" + ~~components.searchNumber2.getValue() + ",";
  1492. if (components.searchRefcount1Check.isSelected()) args += "lanc:" + ~~components.searchRefcount1.getValue() + ",";
  1493. if (components.searchRefcount2Check.isSelected()) args += "uanc:" + ~~components.searchRefcount2.getValue() + ",";
  1494.  
  1495. if (components.searchYear1Check.isSelected() ) args += "lyear:" + components.searchYear1.getSelectedItem() + ",";
  1496. if (components.searchMonth1Check.isSelected() ) args += "lmonth:" + components.searchMonth1.getSelectedItem() + ",";
  1497. if (components.searchDate1Check.isSelected() ) args += "ldate:" + components.searchDate1.getSelectedItem() + ",";
  1498. if (components.searchDay1Check.isSelected() ) args += "lday:\"" + components.searchDay1.getSelectedItem() + "\",";
  1499. if (components.searchHours1Check.isSelected() ) args += "lhours:" + components.searchHours1.getSelectedItem() + ",";
  1500. if (components.searchMinutes1Check.isSelected()) args += "lmin:" + components.searchMinutes1.getSelectedItem() + ",";
  1501.  
  1502. if (components.searchYear2Check.isSelected() ) args += "uyear:" + components.searchYear2.getSelectedItem() + ",";
  1503. if (components.searchMonth2Check.isSelected() ) args += "umonth:" + components.searchMonth2.getSelectedItem() + ",";
  1504. if (components.searchDate2Check.isSelected() ) args += "udate:" + components.searchDate2.getSelectedItem() + ",";
  1505. if (components.searchDay2Check.isSelected() ) args += "uday:\"" + components.searchDay2.getSelectedItem() + "\",";
  1506. if (components.searchHours2Check.isSelected() ) args += "uhours:" + components.searchHours2.getSelectedItem() + ",";
  1507. if (components.searchMinutes2Check.isSelected()) args += "umin:" + components.searchMinutes2.getSelectedItem() + ",";
  1508.  
  1509. args = args.replace(/,$/, "}");
  1510.  
  1511. return args;
  1512. }
  1513.  
  1514. window.show();
  1515. components.searchModel.clear();
  1516. setDefaultValues();
  1517.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty