SHOW:
|
|
- or go back to the newest paste.
1 | diff --git a/chrome/content/chaika/bbsmenu/page.js b/chrome/content/chaika/bbsmenu/page.js | |
2 | - | index 7c0b9f5..cbf058b 100644 |
2 | + | index 7c0b9f5..f6538cc 100644 |
3 | --- a/chrome/content/chaika/bbsmenu/page.js | |
4 | +++ b/chrome/content/chaika/bbsmenu/page.js | |
5 | @@ -239,6 +239,9 @@ var SearchBox = { | |
6 | case "find2ch": | |
7 | this._textbox.emptyText = "2ch 検索"; | |
8 | break; | |
9 | - | + case "demo2": |
9 | + | + case "domo2": |
10 | - | + this._textbox.emptyText = "2ch 検索 (demo2)"; |
10 | + | + this._textbox.emptyText = "2ch 検索 (domo2)"; |
11 | + break; | |
12 | case "boardFilter": | |
13 | this._textbox.emptyText = "フィルタ"; | |
14 | break; | |
15 | @@ -256,6 +259,9 @@ var SearchBox = { | |
16 | case "find2ch": | |
17 | Find2ch.search(aSearchStr); | |
18 | break; | |
19 | - | + case "demo2": |
19 | + | + case "domo2": |
20 | - | + Demo2.search(aSearchStr); |
20 | + | + Domo2.search(aSearchStr); |
21 | + break; | |
22 | case "boardFilter": | |
23 | Bbsmenu.filter(aSearchStr); | |
24 | break; | |
25 | @@ -700,6 +706,110 @@ var Find2ch = { | |
26 | ||
27 | }; | |
28 | ||
29 | - | +var Demo2 = { |
29 | + | +var Domo2 = { |
30 | + | |
31 | + _downloader: null, | |
32 | + _infoNode: null, | |
33 | + | |
34 | - | + search: function Demo2_search(aSearchStr){ |
34 | + | + search: function Domo2_search(aSearchStr){ |
35 | + const QUERY_URL = 'http://www.domo2.net/search/search.cgi?word='; | |
36 | + const ENCODE = 'EUC-JP'; | |
37 | + const QUERY = escape(this._convertEncode(aSearchStr, ENCODE)); | |
38 | + | |
39 | + var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); | |
40 | + var url = ioService.newURI(QUERY_URL + QUERY, null, null); | |
41 | + | |
42 | + this._downloader = new ChaikaSimpleDownloader(); | |
43 | + this._downloader.download(url, ENCODE, this); | |
44 | + | |
45 | + Notification.removeAll(); | |
46 | + this._infoNode = Notification.info("検索中"); | |
47 | + }, | |
48 | + | |
49 | + | |
50 | - | + onStop: function Demo2_onStop(aDownloader, aResponse, aHttpStatus){ |
50 | + | + onStop: function Domo2_onStop(aDownloader, aResponse, aHttpStatus){ |
51 | + if(aResponse){ | |
52 | + this.initTree(aResponse); | |
53 | + } | |
54 | + | |
55 | + Notification.remove(this._infoNode); | |
56 | + this._downloader = null; | |
57 | + this._infoNode = null; | |
58 | + }, | |
59 | + | |
60 | + | |
61 | - | + onError: function Demo2_onError(aDownloader, aErrorCode){ |
61 | + | + onError: function Domo2_onError(aDownloader, aErrorCode){ |
62 | + Notification.critical("検索に失敗しました", 2500); | |
63 | + Notification.remove(this._infoNode); | |
64 | + this._downloader = null; | |
65 | + this._infoNode = null; | |
66 | + }, | |
67 | + | |
68 | - | + initTree: function Demo2_initTree(aResponse){ |
68 | + | + initTree: function Domo2_initTree(aResponse){ |
69 | + var resultDoc = this._convertDocFromHTML(aResponse); | |
70 | + Tree.initTree(resultDoc, MODE_FIND2CH); | |
71 | + }, | |
72 | + | |
73 | + _convertDocFromHTML: function(aResponseStr){ | |
74 | + var domParser = Cc["@mozilla.org/xmlextras/domparser;1"] | |
75 | + .createInstance(Ci.nsIDOMParser); | |
76 | + var findDoc = domParser.parseFromString(aResponseStr, "text/html"); | |
77 | + | |
78 | + var resultDoc = document.implementation.createDocument(null, '', null); | |
79 | + var root = document.createElement('category'); | |
80 | + | |
81 | + var resultObj = {}; //key: board name, value: an array of threads | |
82 | + Array.slice(findDoc.querySelectorAll('table tr:not(:first-child)')).forEach(function(item){ | |
83 | + var cells = item.getElementsByTagName('td'); | |
84 | + | |
85 | + var thread = cells[2].getElementsByTagName('a')[0]; | |
86 | + var threadURI = thread.getAttribute('href').replace(/\d+-\d+$/, ''); | |
87 | + var threadTitle = thread.textContent; | |
88 | + | |
89 | + var post = cells[3].textContent.replace(/\D/g, '') || '0'; | |
90 | + var boardTitle = cells[1].textContent; | |
91 | + | |
92 | + var threadItem = document.createElement('thread'); | |
93 | + threadItem.setAttribute('url', threadURI); | |
94 | + threadItem.setAttribute('title', threadTitle + ' [' + post + ']'); | |
95 | + threadItem.setAttribute('boardName', boardTitle); | |
96 | + | |
97 | + if(!resultObj[boardTitle]){ | |
98 | + resultObj[boardTitle] = []; | |
99 | + } | |
100 | + resultObj[boardTitle].push(threadItem); | |
101 | + }); | |
102 | + | |
103 | + for(let boardTitle in resultObj){ | |
104 | + var boardItem = document.createElement('board'); | |
105 | + boardItem.setAttribute('title', boardTitle); | |
106 | + boardItem.setAttribute('isContainer', 'true'); | |
107 | + boardItem.setAttribute('isOpen', 'true'); | |
108 | + | |
109 | + resultObj[boardTitle].forEach(function(threadItem){ | |
110 | + boardItem.appendChild(threadItem); | |
111 | + }); | |
112 | + | |
113 | + root.appendChild(boardItem); | |
114 | + } | |
115 | + | |
116 | + resultDoc.appendChild(root); | |
117 | + | |
118 | + return resultDoc; | |
119 | + }, | |
120 | + | |
121 | + _convertEncode: function(aStr, aEncode){ | |
122 | + var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].getService(Ci.nsIScriptableUnicodeConverter); | |
123 | + | |
124 | + try{ | |
125 | + converter.charset = aEncode; | |
126 | + return converter.ConvertFromUnicode(aStr); | |
127 | + }catch(e){ | |
128 | + return aStr; | |
129 | + } | |
130 | + } | |
131 | + | |
132 | +}; | |
133 | ||
134 | ||
135 | ||
136 | diff --git a/chrome/content/chaika/bbsmenu/page.xul b/chrome/content/chaika/bbsmenu/page.xul | |
137 | - | index 5be1ef9..d59f838 100644 |
137 | + | index 5be1ef9..21fa0dd 100644 |
138 | --- a/chrome/content/chaika/bbsmenu/page.xul | |
139 | +++ b/chrome/content/chaika/bbsmenu/page.xul | |
140 | @@ -15,6 +15,8 @@ | |
141 | <menupopup id="searchModeMenu" onpopupshowing="SearchBox.searchModeMenuShowing(event)"> | |
142 | <menuitem label="find.2ch.net で検索" value="find2ch" type="radio" name="searchModeMenuItem" | |
143 | oncommand="SearchBox.setSearchMode('find2ch')"/> | |
144 | - | + <menuitem label="demo2 で検索" value="demo2" type="radio" name="searchModeMenuItem" |
144 | + | + <menuitem label="domo2 で検索" value="domo2" type="radio" name="searchModeMenuItem" |
145 | - | + oncommand="SearchBox.setSearchMode('demo2')"/> |
145 | + | + oncommand="SearchBox.setSearchMode('domo2')"/> |
146 | <menuitem label="板名フィルタ" value="boardFilter" type="radio" name="searchModeMenuItem" | |
147 | oncommand="SearchBox.setSearchMode('boardFilter')"/> | |
148 | </menupopup> |