View difference between Paste ID: QXFv43aN and sSFFZXNk
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>