Revision | 87408f4e6978e7d03bed8921218923fd81a08f81 (tree) |
---|---|
Time | 2020-03-12 00:01:49 |
Author | umorigu <umorigu@gmai...> |
Commiter | umorigu |
BugTrack/2507 StandardJs - JavaScript formatter - Remove semicolons
Install and execute standard:
npm install --save-dev standard
npx standard
npx standard --fix
Standard JS - JavaScript style guide, linter, and formatter
https://standardjs.com/
@@ -13,6 +13,7 @@ | ||
13 | 13 | "vars-on-top": 0, |
14 | 14 | "prefer-template": 0, |
15 | 15 | "prefer-arrow-callback": 0, |
16 | + "semi": 0, | |
16 | 17 | "space-before-function-paren": 0, |
17 | 18 | "no-plusplus": 0, |
18 | 19 | "prefer-destructuring": 0, |
@@ -16,7 +16,7 @@ | ||
16 | 16 | "eslint-config-airbnb": "*", |
17 | 17 | "eslint-plugin-import": "*", |
18 | 18 | "eslint-plugin-jsx-a11y": "*", |
19 | - "eslint-plugin-react": "*" | |
19 | + "eslint-plugin-react": "*", | |
20 | + "standard": "^14.3.1" | |
20 | 21 | } |
21 | 22 | } |
22 | - |
@@ -1,615 +1,617 @@ | ||
1 | 1 | // PukiWiki - Yet another WikiWikiWeb clone. |
2 | 2 | // main.js |
3 | -// Copyright 2017-2019 PukiWiki Development Team | |
3 | +// Copyright 2017-2020 PukiWiki Development Team | |
4 | 4 | // License: GPL v2 or (at your option) any later version |
5 | 5 | // |
6 | 6 | // PukiWiki JavaScript client script |
7 | -window.addEventListener && window.addEventListener('DOMContentLoaded', function() { // eslint-disable-line no-unused-expressions | |
8 | - 'use strict'; | |
7 | +/* eslint-env browser */ | |
8 | +// eslint-disable-next-line no-unused-expressions | |
9 | +window.addEventListener && window.addEventListener('DOMContentLoaded', function () { | |
10 | + 'use strict' | |
9 | 11 | /** |
10 | 12 | * @param {NodeList} nodeList |
11 | 13 | * @param {function(Node, number): void} func |
12 | 14 | */ |
13 | - function forEach(nodeList, func) { | |
15 | + function forEach (nodeList, func) { | |
14 | 16 | if (nodeList.forEach) { |
15 | - nodeList.forEach(func); | |
17 | + nodeList.forEach(func) | |
16 | 18 | } else { |
17 | 19 | for (var i = 0, n = nodeList.length; i < n; i++) { |
18 | - func(nodeList[i], i); | |
20 | + func(nodeList[i], i) | |
19 | 21 | } |
20 | 22 | } |
21 | 23 | } |
22 | 24 | // Name for comment |
23 | - function setYourName() { | |
24 | - var NAME_KEY_ID = 'pukiwiki_comment_plugin_name'; | |
25 | - var actionPathname = null; | |
26 | - function getPathname(formAction) { | |
27 | - if (actionPathname) return actionPathname; | |
25 | + function setYourName () { | |
26 | + var NAME_KEY_ID = 'pukiwiki_comment_plugin_name' | |
27 | + var actionPathname = null | |
28 | + function getPathname (formAction) { | |
29 | + if (actionPathname) return actionPathname | |
28 | 30 | try { |
29 | - var u = new URL(formAction, document.location); | |
30 | - var u2 = new URL('./', u); | |
31 | - actionPathname = u2.pathname; | |
32 | - return u2.pathname; | |
31 | + var u = new URL(formAction, document.location) | |
32 | + var u2 = new URL('./', u) | |
33 | + actionPathname = u2.pathname | |
34 | + return u2.pathname | |
33 | 35 | } catch (e) { |
34 | 36 | // Note: Internet Explorer doesn't support URL class |
35 | - var m = formAction.match(/^https?:\/\/([^/]+)(\/([^?&]+\/)?)/); | |
37 | + var m = formAction.match(/^https?:\/\/([^/]+)(\/([^?&]+\/)?)/) | |
36 | 38 | if (m) { |
37 | - actionPathname = m[2]; // pathname | |
39 | + actionPathname = m[2] // pathname | |
38 | 40 | } else { |
39 | - actionPathname = '/'; | |
41 | + actionPathname = '/' | |
40 | 42 | } |
41 | - return actionPathname; | |
43 | + return actionPathname | |
42 | 44 | } |
43 | 45 | } |
44 | - function getNameKey(form) { | |
45 | - var pathname = getPathname(form.action); | |
46 | - var key = 'path.' + pathname + '.' + NAME_KEY_ID; | |
47 | - return key; | |
46 | + function getNameKey (form) { | |
47 | + var pathname = getPathname(form.action) | |
48 | + var key = 'path.' + pathname + '.' + NAME_KEY_ID | |
49 | + return key | |
48 | 50 | } |
49 | - function getForm(element) { | |
51 | + function getForm (element) { | |
50 | 52 | if (element.form && element.form.tagName === 'FORM') { |
51 | - return element.form; | |
53 | + return element.form | |
52 | 54 | } |
53 | - var e = element.parentElement; | |
55 | + var e = element.parentElement | |
54 | 56 | for (var i = 0; i < 5; i++) { |
55 | 57 | if (e.tagName === 'FORM') { |
56 | - return e; | |
58 | + return e | |
57 | 59 | } |
58 | - e = e.parentElement; | |
60 | + e = e.parentElement | |
59 | 61 | } |
60 | - return null; | |
62 | + return null | |
61 | 63 | } |
62 | - function handleCommentPlugin(form) { | |
63 | - var namePrevious = ''; | |
64 | - var nameKey = getNameKey(form); | |
64 | + function handleCommentPlugin (form) { | |
65 | + var namePrevious = '' | |
66 | + var nameKey = getNameKey(form) | |
65 | 67 | if (typeof localStorage !== 'undefined') { |
66 | - namePrevious = localStorage[nameKey]; | |
68 | + namePrevious = localStorage[nameKey] | |
67 | 69 | } |
68 | 70 | var onFocusForm = function () { |
69 | 71 | if (form.name && !form.name.value && namePrevious) { |
70 | - form.name.value = namePrevious; | |
72 | + form.name.value = namePrevious | |
71 | 73 | } |
72 | - }; | |
73 | - var addOnForcusForm = function(eNullable) { | |
74 | - if (!eNullable) return; | |
74 | + } | |
75 | + var addOnForcusForm = function (eNullable) { | |
76 | + if (!eNullable) return | |
75 | 77 | if (eNullable.addEventListener) { |
76 | - eNullable.addEventListener('focus', onFocusForm); | |
78 | + eNullable.addEventListener('focus', onFocusForm) | |
77 | 79 | } |
78 | - }; | |
80 | + } | |
79 | 81 | if (namePrevious) { |
80 | - var textList = form.querySelectorAll('input[type=text],textarea'); | |
82 | + var textList = form.querySelectorAll('input[type=text],textarea') | |
81 | 83 | textList.forEach(function (v) { |
82 | - addOnForcusForm(v); | |
83 | - }); | |
84 | + addOnForcusForm(v) | |
85 | + }) | |
84 | 86 | } |
85 | - form.addEventListener('submit', function() { | |
87 | + form.addEventListener('submit', function () { | |
86 | 88 | if (typeof localStorage !== 'undefined') { |
87 | - localStorage[nameKey] = form.name.value; | |
89 | + localStorage[nameKey] = form.name.value | |
88 | 90 | } |
89 | - }, false); | |
91 | + }, false) | |
90 | 92 | } |
91 | - function setNameForComment() { | |
92 | - if (!document.querySelectorAll) return; | |
93 | + function setNameForComment () { | |
94 | + if (!document.querySelectorAll) return | |
93 | 95 | var elements = document.querySelectorAll( |
94 | 96 | 'input[type=hidden][name=plugin][value=comment],' + |
95 | 97 | 'input[type=hidden][name=plugin][value=pcomment],' + |
96 | 98 | 'input[type=hidden][name=plugin][value=article],' + |
97 | - 'input[type=hidden][name=plugin][value=bugtrack]'); | |
99 | + 'input[type=hidden][name=plugin][value=bugtrack]') | |
98 | 100 | for (var i = 0; i < elements.length; i++) { |
99 | - var form = getForm(elements[i]); | |
101 | + var form = getForm(elements[i]) | |
100 | 102 | if (form) { |
101 | - handleCommentPlugin(form); | |
103 | + handleCommentPlugin(form) | |
102 | 104 | } |
103 | 105 | } |
104 | 106 | } |
105 | - setNameForComment(); | |
107 | + setNameForComment() | |
106 | 108 | } |
107 | 109 | // AutoTicketLink |
108 | - function autoTicketLink() { | |
109 | - var headReText = '([\\s\\b:\\[\\(,;]|^)'; | |
110 | - var tailReText = '\\b'; | |
110 | + function autoTicketLink () { | |
111 | + var headReText = '([\\s\\b:\\[\\(,;]|^)' | |
112 | + var tailReText = '\\b' | |
111 | 113 | var ignoreTags = ['A', 'INPUT', 'TEXTAREA', 'BUTTON', |
112 | - 'SCRIPT', 'FRAME', 'IFRAME']; | |
113 | - var ticketSiteList = []; | |
114 | - var jiraProjects = null; | |
115 | - var jiraDefaultInfo = null; | |
116 | - function regexEscape(key) { | |
114 | + 'SCRIPT', 'FRAME', 'IFRAME'] | |
115 | + var ticketSiteList = [] | |
116 | + var jiraProjects = null | |
117 | + var jiraDefaultInfo = null | |
118 | + function regexEscape (key) { | |
117 | 119 | return key.replace(/[-.]/g, function (m) { |
118 | - return '\\' + m; | |
119 | - }); | |
120 | + return '\\' + m | |
121 | + }) | |
120 | 122 | } |
121 | - function setupSites(siteList) { | |
123 | + function setupSites (siteList) { | |
122 | 124 | for (var i = 0, length = siteList.length; i < length; i++) { |
123 | - var site = siteList[i]; | |
124 | - var reText = ''; | |
125 | + var site = siteList[i] | |
126 | + var reText = '' | |
125 | 127 | switch (site.type) { |
126 | 128 | case 'jira': |
127 | 129 | reText = '(' + regexEscape(site.key) + |
128 | - '):([A-Z][A-Z0-9]{1,20}(?:_[A-Z0-9]{1,10}){0,2}-\\d{1,10})'; | |
129 | - break; | |
130 | + '):([A-Z][A-Z0-9]{1,20}(?:_[A-Z0-9]{1,10}){0,2}-\\d{1,10})' | |
131 | + break | |
130 | 132 | case 'redmine': |
131 | - reText = '(' + regexEscape(site.key) + '):(\\d{1,10})'; | |
132 | - break; | |
133 | + reText = '(' + regexEscape(site.key) + '):(\\d{1,10})' | |
134 | + break | |
133 | 135 | case 'git': |
134 | - reText = '(' + regexEscape(site.key) + '):([0-9a-f]{7,40})'; | |
135 | - break; | |
136 | + reText = '(' + regexEscape(site.key) + '):([0-9a-f]{7,40})' | |
137 | + break | |
136 | 138 | default: |
137 | - continue; | |
139 | + continue | |
138 | 140 | } |
139 | - site.reText = reText; | |
140 | - site.re = new RegExp(headReText + reText + tailReText); | |
141 | + site.reText = reText | |
142 | + site.re = new RegExp(headReText + reText + tailReText) | |
141 | 143 | } |
142 | 144 | } |
143 | - function getJiraSite() { | |
144 | - var reText = '()([A-Z][A-Z0-9]{1,20}(?:_[A-Z0-9]{1,10}){0,2}-\\d{1,10})'; | |
145 | + function getJiraSite () { | |
146 | + var reText = '()([A-Z][A-Z0-9]{1,20}(?:_[A-Z0-9]{1,10}){0,2}-\\d{1,10})' | |
145 | 147 | var site = { |
146 | 148 | title: 'Builtin JIRA', |
147 | 149 | type: '_jira_', |
148 | 150 | key: '_jira_', |
149 | 151 | reText: reText, |
150 | 152 | re: new RegExp(headReText + reText + tailReText) |
151 | - }; | |
152 | - return site; | |
153 | + } | |
154 | + return site | |
153 | 155 | } |
154 | - function getSiteListFromBody() { | |
155 | - var defRoot = document.querySelector('#pukiwiki-site-properties .ticketlink-def'); | |
156 | + function getSiteListFromBody () { | |
157 | + var defRoot = document.querySelector('#pukiwiki-site-properties .ticketlink-def') | |
156 | 158 | if (defRoot && defRoot.value) { |
157 | - var list = JSON.parse(defRoot.value); | |
158 | - setupSites(list); | |
159 | - return list; | |
159 | + var list = JSON.parse(defRoot.value) | |
160 | + setupSites(list) | |
161 | + return list | |
160 | 162 | } |
161 | - return []; | |
163 | + return [] | |
162 | 164 | } |
163 | - function getJiraProjectsFromBody() { | |
164 | - var defRoot = document.querySelector('#pukiwiki-site-properties .ticketlink-jira-def'); | |
165 | + function getJiraProjectsFromBody () { | |
166 | + var defRoot = document.querySelector('#pukiwiki-site-properties .ticketlink-jira-def') | |
165 | 167 | if (defRoot && defRoot.value) { |
166 | 168 | try { |
167 | - return JSON.parse(defRoot.value); // List | |
169 | + return JSON.parse(defRoot.value) // List | |
168 | 170 | } catch (e) { |
169 | - return null; | |
171 | + return null | |
170 | 172 | } |
171 | 173 | } |
172 | - return null; | |
174 | + return null | |
173 | 175 | } |
174 | - function getJiraDefaultInfoFromBody() { | |
175 | - var defRoot = document.querySelector('#pukiwiki-site-properties .ticketlink-jira-default-def'); | |
176 | + function getJiraDefaultInfoFromBody () { | |
177 | + var defRoot = document.querySelector('#pukiwiki-site-properties .ticketlink-jira-default-def') | |
176 | 178 | if (defRoot && defRoot.value) { |
177 | 179 | try { |
178 | - return JSON.parse(defRoot.value); // object | |
180 | + return JSON.parse(defRoot.value) // object | |
179 | 181 | } catch (e) { |
180 | - return null; | |
182 | + return null | |
181 | 183 | } |
182 | 184 | } |
183 | - return null; | |
185 | + return null | |
184 | 186 | } |
185 | - function getSiteList() { | |
186 | - return ticketSiteList; | |
187 | + function getSiteList () { | |
188 | + return ticketSiteList | |
187 | 189 | } |
188 | - function getJiraProjectList() { | |
189 | - return jiraProjects; | |
190 | + function getJiraProjectList () { | |
191 | + return jiraProjects | |
190 | 192 | } |
191 | - function getDefaultJira() { | |
192 | - return jiraDefaultInfo; | |
193 | + function getDefaultJira () { | |
194 | + return jiraDefaultInfo | |
193 | 195 | } |
194 | - function ticketToLink(keyText) { | |
195 | - var siteList = getSiteList(); | |
196 | + function ticketToLink (keyText) { | |
197 | + var siteList = getSiteList() | |
196 | 198 | for (var i = 0; i < siteList.length; i++) { |
197 | - var site = siteList[i]; | |
198 | - var m = keyText.match(site.re); | |
199 | + var site = siteList[i] | |
200 | + var m = keyText.match(site.re) | |
199 | 201 | if (m) { |
200 | - var ticketKey = m[3]; | |
201 | - var title = ticketKey; | |
202 | - var ticketUrl; | |
202 | + var ticketKey = m[3] | |
203 | + var title = ticketKey | |
204 | + var ticketUrl | |
203 | 205 | if (site.type === '_jira_') { |
204 | 206 | // JIRA issue |
205 | - var projects = getJiraProjectList(); | |
206 | - var hyphen = keyText.indexOf('-'); | |
207 | + var projects = getJiraProjectList() | |
208 | + var hyphen = keyText.indexOf('-') | |
207 | 209 | if (hyphen > 0) { |
208 | - var projectKey = keyText.substr(0, hyphen); | |
210 | + var projectKey = keyText.substr(0, hyphen) | |
209 | 211 | if (projects) { |
210 | 212 | for (var j = 0; j < projects.length; j++) { |
211 | - var p = projects[j]; | |
213 | + var p = projects[j] | |
212 | 214 | if (p.key === projectKey) { |
213 | 215 | if (p.title) { |
214 | - title = p.title.replace(/\$1/g, ticketKey); | |
216 | + title = p.title.replace(/\$1/g, ticketKey) | |
215 | 217 | } |
216 | - ticketUrl = p.base_url + ticketKey; | |
217 | - break; | |
218 | + ticketUrl = p.base_url + ticketKey | |
219 | + break | |
218 | 220 | } |
219 | 221 | } |
220 | 222 | } |
221 | 223 | if (!ticketUrl) { |
222 | - var defaultJira = getDefaultJira(); | |
224 | + var defaultJira = getDefaultJira() | |
223 | 225 | if (defaultJira) { |
224 | 226 | if (defaultJira.title) { |
225 | - title = defaultJira.title.replace(/\$1/g, ticketKey); | |
227 | + title = defaultJira.title.replace(/\$1/g, ticketKey) | |
226 | 228 | } |
227 | - ticketUrl = defaultJira.base_url + ticketKey; | |
229 | + ticketUrl = defaultJira.base_url + ticketKey | |
228 | 230 | } |
229 | 231 | } |
230 | 232 | } |
231 | 233 | if (!ticketUrl) { |
232 | - return null; | |
234 | + return null | |
233 | 235 | } |
234 | 236 | } else { |
235 | 237 | // Explicit TicketLink |
236 | 238 | if (site.title) { |
237 | - title = site.title.replace(/\$1/g, ticketKey); | |
239 | + title = site.title.replace(/\$1/g, ticketKey) | |
238 | 240 | } |
239 | - ticketUrl = site.base_url + ticketKey; | |
241 | + ticketUrl = site.base_url + ticketKey | |
240 | 242 | } |
241 | 243 | return { |
242 | 244 | url: ticketUrl, |
243 | 245 | title: title |
244 | - }; | |
246 | + } | |
245 | 247 | } |
246 | 248 | } |
247 | - return null; | |
249 | + return null | |
248 | 250 | } |
249 | - function getRegex(list) { | |
250 | - var reText = ''; | |
251 | + function getRegex (list) { | |
252 | + var reText = '' | |
251 | 253 | for (var i = 0, length = list.length; i < length; i++) { |
252 | 254 | if (reText.length > 0) { |
253 | - reText += '|'; | |
255 | + reText += '|' | |
254 | 256 | } |
255 | - reText += list[i].reText; | |
257 | + reText += list[i].reText | |
256 | 258 | } |
257 | - return new RegExp(headReText + '(' + reText + ')' + tailReText); | |
259 | + return new RegExp(headReText + '(' + reText + ')' + tailReText) | |
258 | 260 | } |
259 | - function makeTicketLink(element) { | |
260 | - var siteList = getSiteList(); | |
261 | + function makeTicketLink (element) { | |
262 | + var siteList = getSiteList() | |
261 | 263 | if (!siteList || siteList.length === 0) { |
262 | - return; | |
264 | + return | |
263 | 265 | } |
264 | - var re = getRegex(siteList); | |
265 | - var f; | |
266 | - var m; | |
267 | - var text = element.nodeValue; | |
266 | + var re = getRegex(siteList) | |
267 | + var f | |
268 | + var m | |
269 | + var text = element.nodeValue | |
268 | 270 | while (m = text.match(re)) { // eslint-disable-line no-cond-assign |
269 | 271 | // m[1]: head, m[2]: keyText |
270 | 272 | if (!f) { |
271 | - f = document.createDocumentFragment(); | |
273 | + f = document.createDocumentFragment() | |
272 | 274 | } |
273 | 275 | if (m.index > 0 || m[1].length > 0) { |
274 | - f.appendChild(document.createTextNode(text.substr(0, m.index) + m[1])); | |
276 | + f.appendChild(document.createTextNode(text.substr(0, m.index) + m[1])) | |
275 | 277 | } |
276 | - var linkKey = m[2]; | |
277 | - var linkInfo = ticketToLink(linkKey); | |
278 | + var linkKey = m[2] | |
279 | + var linkInfo = ticketToLink(linkKey) | |
278 | 280 | if (linkInfo) { |
279 | - var a = document.createElement('a'); | |
280 | - a.textContent = linkKey; | |
281 | - a.href = linkInfo.url; | |
282 | - a.title = linkInfo.title; | |
283 | - f.appendChild(a); | |
281 | + var a = document.createElement('a') | |
282 | + a.textContent = linkKey | |
283 | + a.href = linkInfo.url | |
284 | + a.title = linkInfo.title | |
285 | + f.appendChild(a) | |
284 | 286 | } else { |
285 | - f.appendChild(document.createTextNode(m[2])); | |
287 | + f.appendChild(document.createTextNode(m[2])) | |
286 | 288 | } |
287 | - text = text.substr(m.index + m[0].length); | |
289 | + text = text.substr(m.index + m[0].length) | |
288 | 290 | } |
289 | 291 | if (f) { |
290 | 292 | if (text.length > 0) { |
291 | - f.appendChild(document.createTextNode(text)); | |
293 | + f.appendChild(document.createTextNode(text)) | |
292 | 294 | } |
293 | - element.parentNode.replaceChild(f, element); | |
295 | + element.parentNode.replaceChild(f, element) | |
294 | 296 | } |
295 | 297 | } |
296 | - function walkElement(element) { | |
297 | - var e = element.firstChild; | |
298 | + function walkElement (element) { | |
299 | + var e = element.firstChild | |
298 | 300 | while (e) { |
299 | 301 | if (e.nodeType === 3 && e.nodeValue && |
300 | 302 | e.nodeValue.length > 5 && /\S/.test(e.nodeValue)) { |
301 | - var next = e.nextSibling; | |
302 | - makeTicketLink(e); | |
303 | - e = next; | |
303 | + var next = e.nextSibling | |
304 | + makeTicketLink(e) | |
305 | + e = next | |
304 | 306 | } else { |
305 | 307 | if (e.nodeType === 1 && ignoreTags.indexOf(e.tagName) === -1) { |
306 | - walkElement(e); | |
308 | + walkElement(e) | |
307 | 309 | } |
308 | - e = e.nextSibling; | |
310 | + e = e.nextSibling | |
309 | 311 | } |
310 | 312 | } |
311 | 313 | } |
312 | 314 | if (!Array.prototype.indexOf || !document.createDocumentFragment) { |
313 | - return; | |
315 | + return | |
314 | 316 | } |
315 | - ticketSiteList = getSiteListFromBody(); | |
316 | - jiraProjects = getJiraProjectsFromBody(); | |
317 | - jiraDefaultInfo = getJiraDefaultInfoFromBody(); | |
317 | + ticketSiteList = getSiteListFromBody() | |
318 | + jiraProjects = getJiraProjectsFromBody() | |
319 | + jiraDefaultInfo = getJiraDefaultInfoFromBody() | |
318 | 320 | if (jiraDefaultInfo || (jiraProjects && jiraProjects.length > 0)) { |
319 | - ticketSiteList.push(getJiraSite()); | |
321 | + ticketSiteList.push(getJiraSite()) | |
320 | 322 | } |
321 | - var target = document.getElementById('body'); | |
322 | - walkElement(target); | |
323 | + var target = document.getElementById('body') | |
324 | + walkElement(target) | |
323 | 325 | } |
324 | - function confirmEditFormLeaving() { | |
325 | - function trim(s) { | |
326 | + function confirmEditFormLeaving () { | |
327 | + function trim (s) { | |
326 | 328 | if (typeof s !== 'string') { |
327 | - return s; | |
328 | - } | |
329 | - return s.replace(/^\s+|\s+$/g, ''); | |
330 | - } | |
331 | - if (!document.querySelector) return; | |
332 | - var canceled = false; | |
333 | - var pluginNameE = document.querySelector('#pukiwiki-site-properties .plugin-name'); | |
334 | - if (!pluginNameE) return; | |
335 | - var originalText = null; | |
336 | - if (pluginNameE.value !== 'edit') return; | |
337 | - var editForm = document.querySelector('.edit_form form._plugin_edit_edit_form'); | |
338 | - if (!editForm) return; | |
339 | - var cancelMsgE = editForm.querySelector('#_msg_edit_cancel_confirm'); | |
340 | - var unloadBeforeMsgE = editForm.querySelector('#_msg_edit_unloadbefore_message'); | |
341 | - var textArea = editForm.querySelector('textarea[name="msg"]'); | |
342 | - if (!textArea) return; | |
343 | - originalText = textArea.value; | |
344 | - var isPreview = false; | |
345 | - var inEditE = document.querySelector('#pukiwiki-site-properties .page-in-edit'); | |
329 | + return s | |
330 | + } | |
331 | + return s.replace(/^\s+|\s+$/g, '') | |
332 | + } | |
333 | + if (!document.querySelector) return | |
334 | + var canceled = false | |
335 | + var pluginNameE = document.querySelector('#pukiwiki-site-properties .plugin-name') | |
336 | + if (!pluginNameE) return | |
337 | + var originalText = null | |
338 | + if (pluginNameE.value !== 'edit') return | |
339 | + var editForm = document.querySelector('.edit_form form._plugin_edit_edit_form') | |
340 | + if (!editForm) return | |
341 | + var cancelMsgE = editForm.querySelector('#_msg_edit_cancel_confirm') | |
342 | + var unloadBeforeMsgE = editForm.querySelector('#_msg_edit_unloadbefore_message') | |
343 | + var textArea = editForm.querySelector('textarea[name="msg"]') | |
344 | + if (!textArea) return | |
345 | + originalText = textArea.value | |
346 | + var isPreview = false | |
347 | + var inEditE = document.querySelector('#pukiwiki-site-properties .page-in-edit') | |
346 | 348 | if (inEditE && inEditE.value) { |
347 | - isPreview = (inEditE.value === 'true'); | |
348 | - } | |
349 | - var cancelForm = document.querySelector('.edit_form form._plugin_edit_cancel'); | |
350 | - var submited = false; | |
351 | - editForm.addEventListener('submit', function() { | |
352 | - canceled = false; | |
353 | - submited = true; | |
354 | - }); | |
355 | - cancelForm.addEventListener('submit', function(e) { | |
356 | - submited = false; | |
357 | - canceled = false; | |
349 | + isPreview = (inEditE.value === 'true') | |
350 | + } | |
351 | + var cancelForm = document.querySelector('.edit_form form._plugin_edit_cancel') | |
352 | + var submited = false | |
353 | + editForm.addEventListener('submit', function () { | |
354 | + canceled = false | |
355 | + submited = true | |
356 | + }) | |
357 | + cancelForm.addEventListener('submit', function (e) { | |
358 | + submited = false | |
359 | + canceled = false | |
358 | 360 | if (trim(textArea.value) === trim(originalText)) { |
359 | - canceled = true; | |
360 | - return false; | |
361 | + canceled = true | |
362 | + return false | |
361 | 363 | } |
362 | - var message = 'The text you have entered will be discarded. Is it OK?'; | |
364 | + var message = 'The text you have entered will be discarded. Is it OK?' | |
363 | 365 | if (cancelMsgE && cancelMsgE.value) { |
364 | - message = cancelMsgE.value; | |
366 | + message = cancelMsgE.value | |
365 | 367 | } |
366 | 368 | if (window.confirm(message)) { // eslint-disable-line no-alert |
367 | 369 | // Execute "Cancel" |
368 | - canceled = true; | |
369 | - return true; | |
370 | - } | |
371 | - e.preventDefault(); | |
372 | - return false; | |
373 | - }); | |
374 | - window.addEventListener('beforeunload', function(e) { | |
375 | - if (canceled) return; | |
376 | - if (submited) return; | |
370 | + canceled = true | |
371 | + return true | |
372 | + } | |
373 | + e.preventDefault() | |
374 | + return false | |
375 | + }) | |
376 | + window.addEventListener('beforeunload', function (e) { | |
377 | + if (canceled) return | |
378 | + if (submited) return | |
377 | 379 | if (!isPreview) { |
378 | - if (trim(textArea.value) === trim(originalText)) return; | |
380 | + if (trim(textArea.value) === trim(originalText)) return | |
379 | 381 | } |
380 | - var message = 'Data you have entered will not be saved.'; | |
382 | + var message = 'Data you have entered will not be saved.' | |
381 | 383 | if (unloadBeforeMsgE && unloadBeforeMsgE.value) { |
382 | - message = unloadBeforeMsgE.value; | |
384 | + message = unloadBeforeMsgE.value | |
383 | 385 | } |
384 | - e.returnValue = message; | |
385 | - }, false); | |
386 | + e.returnValue = message | |
387 | + }, false) | |
386 | 388 | } |
387 | - function showPagePassage() { | |
389 | + function showPagePassage () { | |
388 | 390 | /** |
389 | 391 | * @param {Date} now |
390 | 392 | * @param {string} dateText |
391 | 393 | */ |
392 | - function getSimplePassage(dateText, now) { | |
394 | + function getSimplePassage (dateText, now) { | |
393 | 395 | if (!dateText) { |
394 | - return ''; | |
396 | + return '' | |
395 | 397 | } |
396 | - var units = [{u: 'm', max: 60}, {u: 'h', max: 24}, {u: 'd', max: 1}]; | |
397 | - var d = new Date(); | |
398 | - d.setTime(Date.parse(dateText)); | |
399 | - var t = (now.getTime() - d.getTime()) / (1000 * 60); // minutes | |
400 | - var unit = units[0].u; var card = units[0].max; | |
398 | + var units = [{ u: 'm', max: 60 }, { u: 'h', max: 24 }, { u: 'd', max: 1 }] | |
399 | + var d = new Date() | |
400 | + d.setTime(Date.parse(dateText)) | |
401 | + var t = (now.getTime() - d.getTime()) / (1000 * 60) // minutes | |
402 | + var unit = units[0].u; var card = units[0].max | |
401 | 403 | for (var i = 0; i < units.length; i++) { |
402 | - unit = units[i].u; card = units[i].max; | |
403 | - if (t < card) break; | |
404 | - t = t / card; | |
404 | + unit = units[i].u; card = units[i].max | |
405 | + if (t < card) break | |
406 | + t = t / card | |
405 | 407 | } |
406 | - return '' + Math.floor(t) + unit; | |
408 | + return '' + Math.floor(t) + unit | |
407 | 409 | } |
408 | 410 | /** |
409 | 411 | * @param {Date} now |
410 | 412 | * @param {string} dateText |
411 | 413 | */ |
412 | - function getPassage(dateText, now) { | |
413 | - return '(' + getSimplePassage(dateText, now) + ')'; | |
414 | + function getPassage (dateText, now) { | |
415 | + return '(' + getSimplePassage(dateText, now) + ')' | |
414 | 416 | } |
415 | - var now = new Date(); | |
416 | - var elements = document.getElementsByClassName('page_passage'); | |
417 | - forEach(elements, function(e) { | |
418 | - var dt = e.getAttribute('data-mtime'); | |
417 | + var now = new Date() | |
418 | + var elements = document.getElementsByClassName('page_passage') | |
419 | + forEach(elements, function (e) { | |
420 | + var dt = e.getAttribute('data-mtime') | |
419 | 421 | if (dt) { |
420 | - var d = new Date(dt); | |
421 | - e.textContent = ' ' + getPassage(d, now); | |
422 | + var d = new Date(dt) | |
423 | + e.textContent = ' ' + getPassage(d, now) | |
422 | 424 | } |
423 | - }); | |
424 | - var links = document.getElementsByClassName('link_page_passage'); | |
425 | - forEach(links, function(e) { | |
426 | - var dt = e.getAttribute('data-mtime'); | |
425 | + }) | |
426 | + var links = document.getElementsByClassName('link_page_passage') | |
427 | + forEach(links, function (e) { | |
428 | + var dt = e.getAttribute('data-mtime') | |
427 | 429 | if (dt) { |
428 | - var d = new Date(dt); | |
430 | + var d = new Date(dt) | |
429 | 431 | if (e.title) { |
430 | - e.title = e.title + ' ' + getPassage(d, now); | |
432 | + e.title = e.title + ' ' + getPassage(d, now) | |
431 | 433 | } else { |
432 | - e.title = e.textContent + ' ' + getPassage(d, now); | |
434 | + e.title = e.textContent + ' ' + getPassage(d, now) | |
433 | 435 | } |
434 | 436 | } |
435 | - }); | |
436 | - var simplePassages = document.getElementsByClassName('simple_passage'); | |
437 | - forEach(simplePassages, function(e) { | |
438 | - var dt = e.getAttribute('data-mtime'); | |
437 | + }) | |
438 | + var simplePassages = document.getElementsByClassName('simple_passage') | |
439 | + forEach(simplePassages, function (e) { | |
440 | + var dt = e.getAttribute('data-mtime') | |
439 | 441 | if (dt) { |
440 | - var d = new Date(dt); | |
441 | - e.textContent = getSimplePassage(d, now); | |
442 | + var d = new Date(dt) | |
443 | + e.textContent = getSimplePassage(d, now) | |
442 | 444 | } |
443 | - }); | |
445 | + }) | |
444 | 446 | // new plugin |
445 | - var newItems = document.getElementsByClassName('__plugin_new'); | |
446 | - forEach(newItems, function(e) { | |
447 | - var dt = e.getAttribute('data-mtime'); | |
447 | + var newItems = document.getElementsByClassName('__plugin_new') | |
448 | + forEach(newItems, function (e) { | |
449 | + var dt = e.getAttribute('data-mtime') | |
448 | 450 | if (dt) { |
449 | - var d = new Date(dt); | |
450 | - var diff = now.getTime() - d.getTime(); | |
451 | - var daySpan = diff / 1000 / 60 / 60 / 24; | |
451 | + var d = new Date(dt) | |
452 | + var diff = now.getTime() - d.getTime() | |
453 | + var daySpan = diff / 1000 / 60 / 60 / 24 | |
452 | 454 | if (daySpan < 1) { |
453 | - e.textContent = ' New!'; | |
454 | - e.title = getPassage(d, now); | |
455 | + e.textContent = ' New!' | |
456 | + e.title = getPassage(d, now) | |
455 | 457 | if (e.classList && e.classList.add) { |
456 | - e.classList.add('new1'); | |
458 | + e.classList.add('new1') | |
457 | 459 | } |
458 | 460 | } else if (daySpan < 5) { |
459 | - e.textContent = ' New'; | |
460 | - e.title = getPassage(d, now); | |
461 | + e.textContent = ' New' | |
462 | + e.title = getPassage(d, now) | |
461 | 463 | if (e.classList && e.classList.add) { |
462 | - e.classList.add('new5'); | |
464 | + e.classList.add('new5') | |
463 | 465 | } |
464 | 466 | } |
465 | 467 | } |
466 | - }); | |
468 | + }) | |
467 | 469 | } |
468 | - function convertExternalLinkToCushionPageLink() { | |
469 | - function domainQuote(domain) { | |
470 | - return domain.replace(/\./g, '\\.'); | |
470 | + function convertExternalLinkToCushionPageLink () { | |
471 | + function domainQuote (domain) { | |
472 | + return domain.replace(/\./g, '\\.') | |
471 | 473 | } |
472 | - function domainsToRegex(domains) { | |
473 | - var regexList = []; | |
474 | - domains.forEach(function(domain) { | |
474 | + function domainsToRegex (domains) { | |
475 | + var regexList = [] | |
476 | + domains.forEach(function (domain) { | |
475 | 477 | if (domain.substr(0, 2) === '*.') { |
476 | 478 | // Wildcard domain |
477 | - var apex = domain.substr(2); | |
478 | - var r = new RegExp('((^.*\\.)|^)' + domainQuote(apex) + '$', 'i'); | |
479 | - regexList.push(r); | |
479 | + var apex = domain.substr(2) | |
480 | + var r = new RegExp('((^.*\\.)|^)' + domainQuote(apex) + '$', 'i') | |
481 | + regexList.push(r) | |
480 | 482 | } else { |
481 | 483 | // Normal domain |
482 | - regexList.push(new RegExp('^' + domainQuote(domain) + '$', 'i')); | |
484 | + regexList.push(new RegExp('^' + domainQuote(domain) + '$', 'i')) | |
483 | 485 | } |
484 | - }); | |
485 | - return regexList; | |
486 | + }) | |
487 | + return regexList | |
486 | 488 | } |
487 | - function domainMatch(domain, regexList) { | |
489 | + function domainMatch (domain, regexList) { | |
488 | 490 | for (var i = 0, n = regexList.length; i < n; i++) { |
489 | 491 | if (regexList[i].test(domain)) { |
490 | - return true; | |
492 | + return true | |
491 | 493 | } |
492 | 494 | } |
493 | - return false; | |
495 | + return false | |
494 | 496 | } |
495 | - function removeCushionPageLinks() { | |
496 | - var links = document.querySelectorAll('a.external-link'); | |
497 | - forEach(links, function(link) { | |
498 | - var originalUrl = link.getAttribute('data-original-url'); | |
497 | + function removeCushionPageLinks () { | |
498 | + var links = document.querySelectorAll('a.external-link') | |
499 | + forEach(links, function (link) { | |
500 | + var originalUrl = link.getAttribute('data-original-url') | |
499 | 501 | if (originalUrl) { |
500 | - link.setAttribute('href', originalUrl); | |
502 | + link.setAttribute('href', originalUrl) | |
501 | 503 | } |
502 | - }); | |
503 | - } | |
504 | - if (!document.querySelector || !JSON) return; | |
505 | - if (!Array || !Array.prototype || !Array.prototype.indexOf) return; | |
506 | - var extLinkDef = document.querySelector('#pukiwiki-site-properties .external-link-cushion'); | |
507 | - if (!extLinkDef || !extLinkDef.value) return; | |
508 | - var extLinkInfo = JSON.parse(extLinkDef.value); | |
509 | - if (!extLinkInfo) return; | |
510 | - var refInternalDomains = extLinkInfo.internal_domains; | |
511 | - var silentExternalDomains = extLinkInfo.silent_external_domains; | |
504 | + }) | |
505 | + } | |
506 | + if (!document.querySelector || !JSON) return | |
507 | + if (!Array || !Array.prototype || !Array.prototype.indexOf) return | |
508 | + var extLinkDef = document.querySelector('#pukiwiki-site-properties .external-link-cushion') | |
509 | + if (!extLinkDef || !extLinkDef.value) return | |
510 | + var extLinkInfo = JSON.parse(extLinkDef.value) | |
511 | + if (!extLinkInfo) return | |
512 | + var refInternalDomains = extLinkInfo.internal_domains | |
513 | + var silentExternalDomains = extLinkInfo.silent_external_domains | |
512 | 514 | if (!Array.isArray(refInternalDomains)) { |
513 | - refInternalDomains = []; | |
515 | + refInternalDomains = [] | |
514 | 516 | } |
515 | - var internalDomains = refInternalDomains.slice(); | |
516 | - var location = document.location; | |
517 | + var internalDomains = refInternalDomains.slice() | |
518 | + var location = document.location | |
517 | 519 | if (location.protocol === 'file:') { |
518 | - removeCushionPageLinks(); | |
519 | - return; | |
520 | + removeCushionPageLinks() | |
521 | + return | |
520 | 522 | } |
521 | - if (location.protocol !== 'http:' && location.protocol !== 'https:') return; | |
523 | + if (location.protocol !== 'http:' && location.protocol !== 'https:') return | |
522 | 524 | if (internalDomains.indexOf(location.hostname) < 0) { |
523 | - internalDomains.push(location.hostname); | |
525 | + internalDomains.push(location.hostname) | |
524 | 526 | } |
525 | 527 | if (!Array.isArray(silentExternalDomains)) { |
526 | - silentExternalDomains = []; | |
527 | - } | |
528 | - var propsE = document.querySelector('#pukiwiki-site-properties .site-props'); | |
529 | - if (!propsE || !propsE.value) return; | |
530 | - var siteProps = JSON.parse(propsE.value); | |
531 | - var sitePathname = siteProps && siteProps.base_uri_pathname; | |
532 | - if (!sitePathname) return; | |
533 | - var internalDomainsR = domainsToRegex(internalDomains); | |
534 | - var silentExternalDomainsR = domainsToRegex(silentExternalDomains); | |
535 | - var links = document.querySelectorAll('a:not(.external-link):not(.internal-link)'); | |
536 | - var classListEnabled = null; | |
537 | - forEach(links, function(link) { | |
528 | + silentExternalDomains = [] | |
529 | + } | |
530 | + var propsE = document.querySelector('#pukiwiki-site-properties .site-props') | |
531 | + if (!propsE || !propsE.value) return | |
532 | + var siteProps = JSON.parse(propsE.value) | |
533 | + var sitePathname = siteProps && siteProps.base_uri_pathname | |
534 | + if (!sitePathname) return | |
535 | + var internalDomainsR = domainsToRegex(internalDomains) | |
536 | + var silentExternalDomainsR = domainsToRegex(silentExternalDomains) | |
537 | + var links = document.querySelectorAll('a:not(.external-link):not(.internal-link)') | |
538 | + var classListEnabled = null | |
539 | + forEach(links, function (link) { | |
538 | 540 | if (classListEnabled === null) { |
539 | - classListEnabled = link.classList && link.classList.add && true; | |
541 | + classListEnabled = link.classList && link.classList.add && true | |
540 | 542 | } |
541 | - if (!classListEnabled) return; | |
542 | - var href = link.getAttribute('href'); | |
543 | - if (!href) return; // anchor without href attribute (a name) | |
544 | - var m = href.match(/^https?:\/\/([0-9a-zA-Z.-]+)(:\d+)?/); | |
543 | + if (!classListEnabled) return | |
544 | + var href = link.getAttribute('href') | |
545 | + if (!href) return // anchor without href attribute (a name) | |
546 | + var m = href.match(/^https?:\/\/([0-9a-zA-Z.-]+)(:\d+)?/) | |
545 | 547 | if (m) { |
546 | - var host = m[1]; | |
548 | + var host = m[1] | |
547 | 549 | if (domainMatch(host, internalDomainsR)) { |
548 | - link.classList.add('internal-link'); | |
550 | + link.classList.add('internal-link') | |
549 | 551 | } else { |
550 | 552 | if (domainMatch(host, silentExternalDomainsR) || |
551 | 553 | link.textContent.replace(/\s+/g, '') === '') { |
552 | 554 | // Don't show extenal link icons on these domains |
553 | - link.classList.add('external-link-silent'); | |
555 | + link.classList.add('external-link-silent') | |
554 | 556 | } |
555 | - link.classList.add('external-link'); | |
556 | - link.setAttribute('title', href); | |
557 | - link.setAttribute('data-original-url', href); | |
558 | - link.setAttribute('href', sitePathname + '?cmd=external_link&url=' + encodeURIComponent(href)); | |
557 | + link.classList.add('external-link') | |
558 | + link.setAttribute('title', href) | |
559 | + link.setAttribute('data-original-url', href) | |
560 | + link.setAttribute('href', sitePathname + '?cmd=external_link&url=' + encodeURIComponent(href)) | |
559 | 561 | } |
560 | 562 | } else { |
561 | - link.classList.add('internal-link'); | |
563 | + link.classList.add('internal-link') | |
562 | 564 | } |
563 | - }); | |
565 | + }) | |
564 | 566 | } |
565 | - function makeTopicpathTitle() { | |
566 | - if (!document.createDocumentFragment || !window.JSON) return; | |
567 | - var sitePropE = document.querySelector('#pukiwiki-site-properties'); | |
568 | - if (!sitePropE) return; | |
569 | - var pageNameE = sitePropE.querySelector('.page-name'); | |
570 | - if (!pageNameE || !pageNameE.value) return; | |
571 | - var pageName = pageNameE.value; | |
572 | - var topicpathE = sitePropE.querySelector('.topicpath-links'); | |
573 | - if (!topicpathE || !topicpathE.value) return; | |
574 | - var topicpathLinks = JSON.parse(topicpathE.value); | |
575 | - if (!topicpathLinks) return; | |
576 | - var titleH1 = document.querySelector('h1.title'); | |
577 | - if (!titleH1) return; | |
578 | - var aList = titleH1.querySelectorAll('a'); | |
579 | - if (!aList || aList.length > 1) return; | |
580 | - var a = titleH1.querySelector('a'); | |
581 | - if (!a) return; | |
582 | - if (a.textContent !== pageName) return; | |
583 | - var fragment = document.createDocumentFragment(); | |
567 | + function makeTopicpathTitle () { | |
568 | + if (!document.createDocumentFragment || !window.JSON) return | |
569 | + var sitePropE = document.querySelector('#pukiwiki-site-properties') | |
570 | + if (!sitePropE) return | |
571 | + var pageNameE = sitePropE.querySelector('.page-name') | |
572 | + if (!pageNameE || !pageNameE.value) return | |
573 | + var pageName = pageNameE.value | |
574 | + var topicpathE = sitePropE.querySelector('.topicpath-links') | |
575 | + if (!topicpathE || !topicpathE.value) return | |
576 | + var topicpathLinks = JSON.parse(topicpathE.value) | |
577 | + if (!topicpathLinks) return | |
578 | + var titleH1 = document.querySelector('h1.title') | |
579 | + if (!titleH1) return | |
580 | + var aList = titleH1.querySelectorAll('a') | |
581 | + if (!aList || aList.length > 1) return | |
582 | + var a = titleH1.querySelector('a') | |
583 | + if (!a) return | |
584 | + if (a.textContent !== pageName) return | |
585 | + var fragment = document.createDocumentFragment() | |
584 | 586 | for (var i = 0, n = topicpathLinks.length; i < n; i++) { |
585 | - var path = topicpathLinks[i]; | |
587 | + var path = topicpathLinks[i] | |
586 | 588 | if (path.uri) { |
587 | - var a1 = document.createElement('a'); | |
588 | - a1.setAttribute('href', path.uri); | |
589 | - a1.setAttribute('title', path.page); | |
590 | - a1.textContent = path.leaf; | |
591 | - fragment.appendChild(a1); | |
589 | + var a1 = document.createElement('a') | |
590 | + a1.setAttribute('href', path.uri) | |
591 | + a1.setAttribute('title', path.page) | |
592 | + a1.textContent = path.leaf | |
593 | + fragment.appendChild(a1) | |
592 | 594 | } else { |
593 | - var s1 = document.createElement('span'); | |
594 | - s1.textContent = path.leaf; | |
595 | - fragment.appendChild(s1); | |
596 | - } | |
597 | - var span = document.createElement('span'); | |
598 | - span.className = 'topicpath-slash'; | |
599 | - span.textContent = '/'; | |
600 | - fragment.appendChild(span); | |
601 | - } | |
602 | - var a2 = document.createElement('a'); | |
603 | - a2.setAttribute('href', a.getAttribute('href')); | |
604 | - a2.setAttribute('title', 'Backlinks'); | |
605 | - a2.textContent = a.textContent.replace(/^.+\//, ''); | |
606 | - fragment.appendChild(a2); | |
607 | - a.parentNode.replaceChild(fragment, a); | |
595 | + var s1 = document.createElement('span') | |
596 | + s1.textContent = path.leaf | |
597 | + fragment.appendChild(s1) | |
598 | + } | |
599 | + var span = document.createElement('span') | |
600 | + span.className = 'topicpath-slash' | |
601 | + span.textContent = '/' | |
602 | + fragment.appendChild(span) | |
603 | + } | |
604 | + var a2 = document.createElement('a') | |
605 | + a2.setAttribute('href', a.getAttribute('href')) | |
606 | + a2.setAttribute('title', 'Backlinks') | |
607 | + a2.textContent = a.textContent.replace(/^.+\//, '') | |
608 | + fragment.appendChild(a2) | |
609 | + a.parentNode.replaceChild(fragment, a) | |
608 | 610 | } |
609 | - setYourName(); | |
610 | - autoTicketLink(); | |
611 | - confirmEditFormLeaving(); | |
612 | - showPagePassage(); | |
613 | - convertExternalLinkToCushionPageLink(); | |
614 | - makeTopicpathTitle(); | |
615 | -}); | |
611 | + setYourName() | |
612 | + autoTicketLink() | |
613 | + confirmEditFormLeaving() | |
614 | + showPagePassage() | |
615 | + convertExternalLinkToCushionPageLink() | |
616 | + makeTopicpathTitle() | |
617 | +}) |
@@ -1,116 +1,118 @@ | ||
1 | 1 | // PukiWiki - Yet another WikiWikiWeb clone. |
2 | 2 | // search2.js |
3 | 3 | // Copyright |
4 | -// 2017 PukiWiki Development Team | |
4 | +// 2017-2020 PukiWiki Development Team | |
5 | 5 | // License: GPL v2 or (at your option) any later version |
6 | 6 | // |
7 | 7 | // PukiWiki search2 pluign - JavaScript client script |
8 | -window.addEventListener && window.addEventListener('DOMContentLoaded', function() { // eslint-disable-line no-unused-expressions | |
9 | - 'use strict'; | |
10 | - function enableSearch2() { | |
11 | - var aroundLines = 2; | |
12 | - var maxResultLines = 20; | |
13 | - var defaultSearchWaitMilliseconds = 100; | |
14 | - var defaultMaxResults = 1000; | |
15 | - var kanaMap = null; | |
16 | - var searchProps = {}; | |
8 | +/* eslint-env browser */ | |
9 | +// eslint-disable-next-line no-unused-expressions | |
10 | +window.addEventListener && window.addEventListener('DOMContentLoaded', function () { | |
11 | + 'use strict' | |
12 | + function enableSearch2 () { | |
13 | + var aroundLines = 2 | |
14 | + var maxResultLines = 20 | |
15 | + var defaultSearchWaitMilliseconds = 100 | |
16 | + var defaultMaxResults = 1000 | |
17 | + var kanaMap = null | |
18 | + var searchProps = {} | |
17 | 19 | /** |
18 | 20 | * Escape HTML special charactors |
19 | 21 | * |
20 | 22 | * @param {string} s |
21 | 23 | */ |
22 | - function escapeHTML(s) { | |
24 | + function escapeHTML (s) { | |
23 | 25 | if (typeof s !== 'string') { |
24 | - return '' + s; | |
26 | + return '' + s | |
25 | 27 | } |
26 | - return s.replace(/[&"<>]/g, function(m) { | |
28 | + return s.replace(/[&"<>]/g, function (m) { | |
27 | 29 | return { |
28 | 30 | '&': '&', |
29 | 31 | '"': '"', |
30 | 32 | '<': '<', |
31 | 33 | '>': '>' |
32 | - }[m]; | |
33 | - }); | |
34 | + }[m] | |
35 | + }) | |
34 | 36 | } |
35 | 37 | /** |
36 | 38 | * @param {string} idText |
37 | 39 | * @param {number} defaultValue |
38 | 40 | * @type number |
39 | 41 | */ |
40 | - function getIntById(idText, defaultValue) { | |
41 | - var value = defaultValue; | |
42 | + function getIntById (idText, defaultValue) { | |
43 | + var value = defaultValue | |
42 | 44 | try { |
43 | - var element = document.getElementById(idText); | |
45 | + var element = document.getElementById(idText) | |
44 | 46 | if (element) { |
45 | - value = parseInt(element.value, 10); | |
47 | + value = parseInt(element.value, 10) | |
46 | 48 | if (isNaN(value)) { // eslint-disable-line no-restricted-globals |
47 | - value = defaultValue; | |
49 | + value = defaultValue | |
48 | 50 | } |
49 | 51 | } |
50 | 52 | } catch (e) { |
51 | - value = defaultValue; | |
53 | + value = defaultValue | |
52 | 54 | } |
53 | - return value; | |
55 | + return value | |
54 | 56 | } |
55 | 57 | /** |
56 | 58 | * @param {string} idText |
57 | 59 | * @param {string} defaultValue |
58 | 60 | * @type string |
59 | 61 | */ |
60 | - function getTextById(idText, defaultValue) { | |
61 | - var value = defaultValue; | |
62 | + function getTextById (idText, defaultValue) { | |
63 | + var value = defaultValue | |
62 | 64 | try { |
63 | - var element = document.getElementById(idText); | |
65 | + var element = document.getElementById(idText) | |
64 | 66 | if (element.value) { |
65 | - value = element.value; | |
67 | + value = element.value | |
66 | 68 | } |
67 | 69 | } catch (e) { |
68 | - value = defaultValue; | |
70 | + value = defaultValue | |
69 | 71 | } |
70 | - return value; | |
72 | + return value | |
71 | 73 | } |
72 | - function prepareSearchProps() { | |
73 | - var p = {}; | |
74 | + function prepareSearchProps () { | |
75 | + var p = {} | |
74 | 76 | p.errorMsg = getTextById('_plugin_search2_msg_error', |
75 | - 'An error occurred while processing.'); | |
77 | + 'An error occurred while processing.') | |
76 | 78 | p.searchingMsg = getTextById('_plugin_search2_msg_searching', |
77 | - 'Searching...'); | |
79 | + 'Searching...') | |
78 | 80 | p.showingResultMsg = getTextById('_plugin_search2_msg_showing_result', |
79 | - 'Showing search results'); | |
80 | - p.prevOffset = getTextById('_plugin_search2_prev_offset', ''); | |
81 | - var baseUrlDefault = document.location.pathname + document.location.search; | |
82 | - baseUrlDefault = baseUrlDefault.replace(/&offset=\d+/, ''); | |
83 | - p.baseUrl = getTextById('_plugin_search2_base_url', baseUrlDefault); | |
84 | - p.msgPrevResultsTemplate = getTextById('_plugin_search2_msg_prev_results', 'Previous $1 pages'); | |
85 | - p.msgMoreResultsTemplate = getTextById('_plugin_search2_msg_more_results', 'Next $1 pages'); | |
86 | - p.user = getTextById('_plugin_search2_auth_user', ''); | |
87 | - p.showingResultMsg = getTextById('_plugin_search2_msg_showing_result', 'Showing search results'); | |
81 | + 'Showing search results') | |
82 | + p.prevOffset = getTextById('_plugin_search2_prev_offset', '') | |
83 | + var baseUrlDefault = document.location.pathname + document.location.search | |
84 | + baseUrlDefault = baseUrlDefault.replace(/&offset=\d+/, '') | |
85 | + p.baseUrl = getTextById('_plugin_search2_base_url', baseUrlDefault) | |
86 | + p.msgPrevResultsTemplate = getTextById('_plugin_search2_msg_prev_results', 'Previous $1 pages') | |
87 | + p.msgMoreResultsTemplate = getTextById('_plugin_search2_msg_more_results', 'Next $1 pages') | |
88 | + p.user = getTextById('_plugin_search2_auth_user', '') | |
89 | + p.showingResultMsg = getTextById('_plugin_search2_msg_showing_result', 'Showing search results') | |
88 | 90 | p.notFoundMessageTemplate = getTextById('_plugin_search2_msg_result_notfound', |
89 | - 'No page which contains $1 has been found.'); | |
91 | + 'No page which contains $1 has been found.') | |
90 | 92 | p.foundMessageTemplate = getTextById('_plugin_search2_msg_result_found', |
91 | - 'In the page <strong>$2</strong>, <strong>$3</strong> pages that contain all the terms $1 were found.'); | |
92 | - p.maxResults = getIntById('_plugin_search2_max_results', defaultMaxResults); | |
93 | - p.searchInterval = getIntById('_plugin_search2_search_wait_milliseconds', defaultSearchWaitMilliseconds); | |
94 | - p.offset = getIntById('_plugin_search2_offset', 0); | |
95 | - searchProps = p; | |
93 | + 'In the page <strong>$2</strong>, <strong>$3</strong> pages that contain all the terms $1 were found.') | |
94 | + p.maxResults = getIntById('_plugin_search2_max_results', defaultMaxResults) | |
95 | + p.searchInterval = getIntById('_plugin_search2_search_wait_milliseconds', defaultSearchWaitMilliseconds) | |
96 | + p.offset = getIntById('_plugin_search2_offset', 0) | |
97 | + searchProps = p | |
96 | 98 | } |
97 | - function getSiteProps() { | |
98 | - var empty = {}; | |
99 | - var propsE = document.querySelector('#pukiwiki-site-properties .site-props'); | |
100 | - if (!propsE) return empty; | |
101 | - var props = JSON.parse(propsE.value); | |
102 | - return props || empty; | |
99 | + function getSiteProps () { | |
100 | + var empty = {} | |
101 | + var propsE = document.querySelector('#pukiwiki-site-properties .site-props') | |
102 | + if (!propsE) return empty | |
103 | + var props = JSON.parse(propsE.value) | |
104 | + return props || empty | |
103 | 105 | } |
104 | 106 | /** |
105 | 107 | * @param {NodeList} nodeList |
106 | 108 | * @param {function(Node, number): void} func |
107 | 109 | */ |
108 | - function forEach(nodeList, func) { | |
110 | + function forEach (nodeList, func) { | |
109 | 111 | if (nodeList.forEach) { |
110 | - nodeList.forEach(func); | |
112 | + nodeList.forEach(func) | |
111 | 113 | } else { |
112 | 114 | for (var i = 0, n = nodeList.length; i < n; i++) { |
113 | - func(nodeList[i], i); | |
115 | + func(nodeList[i], i) | |
114 | 116 | } |
115 | 117 | } |
116 | 118 | } |
@@ -118,34 +120,34 @@ window.addEventListener && window.addEventListener('DOMContentLoaded', function( | ||
118 | 120 | * @param {string} text |
119 | 121 | * @param {RegExp} searchRegex |
120 | 122 | */ |
121 | - function findAndDecorateText(text, searchRegex) { | |
122 | - var isReplaced = false; | |
123 | - var lastIndex = 0; | |
124 | - var m; | |
125 | - var decorated = ''; | |
126 | - if (!searchRegex) return null; | |
127 | - searchRegex.lastIndex = 0; | |
123 | + function findAndDecorateText (text, searchRegex) { | |
124 | + var isReplaced = false | |
125 | + var lastIndex = 0 | |
126 | + var m | |
127 | + var decorated = '' | |
128 | + if (!searchRegex) return null | |
129 | + searchRegex.lastIndex = 0 | |
128 | 130 | while ((m = searchRegex.exec(text)) !== null) { |
129 | 131 | if (m[0] === '') { |
130 | 132 | // Fail-safe |
131 | - console.log('Invalid searchRegex ' + searchRegex); | |
132 | - return null; | |
133 | + console.log('Invalid searchRegex ' + searchRegex) | |
134 | + return null | |
133 | 135 | } |
134 | - isReplaced = true; | |
135 | - var pre = text.substring(lastIndex, m.index); | |
136 | - decorated += escapeHTML(pre); | |
136 | + isReplaced = true | |
137 | + var pre = text.substring(lastIndex, m.index) | |
138 | + decorated += escapeHTML(pre) | |
137 | 139 | for (var i = 1; i < m.length; i++) { |
138 | 140 | if (m[i]) { |
139 | - decorated += '<strong class="word' + (i - 1) + '">' + escapeHTML(m[i]) + '</strong>'; | |
141 | + decorated += '<strong class="word' + (i - 1) + '">' + escapeHTML(m[i]) + '</strong>' | |
140 | 142 | } |
141 | 143 | } |
142 | - lastIndex = searchRegex.lastIndex; | |
144 | + lastIndex = searchRegex.lastIndex | |
143 | 145 | } |
144 | 146 | if (isReplaced) { |
145 | - decorated += escapeHTML(text.substr(lastIndex)); | |
146 | - return decorated; | |
147 | + decorated += escapeHTML(text.substr(lastIndex)) | |
148 | + return decorated | |
147 | 149 | } |
148 | - return null; | |
150 | + return null | |
149 | 151 | } |
150 | 152 | /** |
151 | 153 | * @param {Object} session |
@@ -153,200 +155,200 @@ window.addEventListener && window.addEventListener('DOMContentLoaded', function( | ||
153 | 155 | * @param {RegExp} searchRegex |
154 | 156 | * @param {boolean} nowSearching |
155 | 157 | */ |
156 | - function getSearchResultMessage(session, searchText, searchRegex, nowSearching) { | |
157 | - var searchTextDecorated = findAndDecorateText(searchText, searchRegex); | |
158 | - if (searchTextDecorated === null) searchTextDecorated = escapeHTML(searchText); | |
159 | - var messageTemplate = searchProps.foundMessageTemplate; | |
158 | + function getSearchResultMessage (session, searchText, searchRegex, nowSearching) { | |
159 | + var searchTextDecorated = findAndDecorateText(searchText, searchRegex) | |
160 | + if (searchTextDecorated === null) searchTextDecorated = escapeHTML(searchText) | |
161 | + var messageTemplate = searchProps.foundMessageTemplate | |
160 | 162 | if (!nowSearching && session.hitPageCount === 0) { |
161 | - messageTemplate = searchProps.notFoundMessageTemplate; | |
163 | + messageTemplate = searchProps.notFoundMessageTemplate | |
162 | 164 | } |
163 | - var msg = messageTemplate.replace(/\$1|\$2|\$3/g, function(m) { | |
165 | + var msg = messageTemplate.replace(/\$1|\$2|\$3/g, function (m) { | |
164 | 166 | return { |
165 | 167 | $1: searchTextDecorated, |
166 | 168 | $2: session.hitPageCount, |
167 | 169 | $3: session.readPageCount |
168 | - }[m]; | |
169 | - }); | |
170 | - return msg; | |
170 | + }[m] | |
171 | + }) | |
172 | + return msg | |
171 | 173 | } |
172 | 174 | /** |
173 | 175 | * @param {Object} session |
174 | 176 | */ |
175 | - function getSearchProgress(session) { | |
177 | + function getSearchProgress (session) { | |
176 | 178 | var progress = '(read:' + session.readPageCount + ', scan:' + |
177 | - session.scanPageCount + ', all:' + session.pageCount; | |
179 | + session.scanPageCount + ', all:' + session.pageCount | |
178 | 180 | if (session.offset) { |
179 | - progress += ', offset: ' + session.offset; | |
181 | + progress += ', offset: ' + session.offset | |
180 | 182 | } |
181 | - progress += ')'; | |
182 | - return progress; | |
183 | + progress += ')' | |
184 | + return progress | |
183 | 185 | } |
184 | 186 | /** |
185 | 187 | * @param {Object} session |
186 | 188 | * @param {number} maxResults |
187 | 189 | */ |
188 | - function getOffsetLinks(session, maxResults) { | |
189 | - var baseUrl = searchProps.baseUrl; | |
190 | - var links = []; | |
190 | + function getOffsetLinks (session, maxResults) { | |
191 | + var baseUrl = searchProps.baseUrl | |
192 | + var links = [] | |
191 | 193 | if ('prevOffset' in session) { |
192 | - var prevResultUrl = baseUrl; | |
194 | + var prevResultUrl = baseUrl | |
193 | 195 | if (session.prevOffset > 0) { |
194 | - prevResultUrl += '&offset=' + session.prevOffset; | |
196 | + prevResultUrl += '&offset=' + session.prevOffset | |
195 | 197 | } |
196 | - var msgPrev = searchProps.msgPrevResultsTemplate.replace(/\$1/, maxResults); | |
197 | - var prevResultHtml = '<a href="' + prevResultUrl + '">' + msgPrev + '</a>'; | |
198 | - links.push(prevResultHtml); | |
198 | + var msgPrev = searchProps.msgPrevResultsTemplate.replace(/\$1/, maxResults) | |
199 | + var prevResultHtml = '<a href="' + prevResultUrl + '">' + msgPrev + '</a>' | |
200 | + links.push(prevResultHtml) | |
199 | 201 | } |
200 | 202 | if ('nextOffset' in session) { |
201 | 203 | var nextResultUrl = baseUrl + '&offset=' + session.nextOffset + |
202 | - '&prev_offset=' + session.offset; | |
203 | - var msgMore = searchProps.msgMoreResultsTemplate.replace(/\$1/, maxResults); | |
204 | - var moreResultHtml = '<a href="' + nextResultUrl + '">' + msgMore + '</a>'; | |
205 | - links.push(moreResultHtml); | |
204 | + '&prev_offset=' + session.offset | |
205 | + var msgMore = searchProps.msgMoreResultsTemplate.replace(/\$1/, maxResults) | |
206 | + var moreResultHtml = '<a href="' + nextResultUrl + '">' + msgMore + '</a>' | |
207 | + links.push(moreResultHtml) | |
206 | 208 | } |
207 | 209 | if (links.length > 0) { |
208 | - return links.join(' '); | |
210 | + return links.join(' ') | |
209 | 211 | } |
210 | - return ''; | |
212 | + return '' | |
211 | 213 | } |
212 | - function prepareKanaMap() { | |
213 | - if (kanaMap !== null) return; | |
214 | + function prepareKanaMap () { | |
215 | + if (kanaMap !== null) return | |
214 | 216 | if (!String.prototype.normalize) { |
215 | - kanaMap = {}; | |
216 | - return; | |
217 | + kanaMap = {} | |
218 | + return | |
217 | 219 | } |
218 | - var dakuten = '\uFF9E'; | |
219 | - var maru = '\uFF9F'; | |
220 | - var map = {}; | |
220 | + var dakuten = '\uFF9E' | |
221 | + var maru = '\uFF9F' | |
222 | + var map = {} | |
221 | 223 | for (var c = 0xFF61; c <= 0xFF9F; c++) { |
222 | - var han = String.fromCharCode(c); | |
223 | - var zen = han.normalize('NFKC'); | |
224 | - map[zen] = han; | |
225 | - var hanDaku = han + dakuten; | |
226 | - var zenDaku = hanDaku.normalize('NFKC'); | |
224 | + var han = String.fromCharCode(c) | |
225 | + var zen = han.normalize('NFKC') | |
226 | + map[zen] = han | |
227 | + var hanDaku = han + dakuten | |
228 | + var zenDaku = hanDaku.normalize('NFKC') | |
227 | 229 | if (zenDaku.length === 1) { // +Handaku-ten OK |
228 | - map[zenDaku] = hanDaku; | |
230 | + map[zenDaku] = hanDaku | |
229 | 231 | } |
230 | - var hanMaru = han + maru; | |
231 | - var zenMaru = hanMaru.normalize('NFKC'); | |
232 | + var hanMaru = han + maru | |
233 | + var zenMaru = hanMaru.normalize('NFKC') | |
232 | 234 | if (zenMaru.length === 1) { // +Maru OK |
233 | - map[zenMaru] = hanMaru; | |
235 | + map[zenMaru] = hanMaru | |
234 | 236 | } |
235 | 237 | } |
236 | - kanaMap = map; | |
238 | + kanaMap = map | |
237 | 239 | } |
238 | 240 | /** |
239 | 241 | * @param {searchText} searchText |
240 | 242 | * @type RegExp |
241 | 243 | */ |
242 | - function textToRegex(searchText) { | |
243 | - if (!searchText) return null; | |
244 | + function textToRegex (searchText) { | |
245 | + if (!searchText) return null | |
244 | 246 | // 1:Symbol 2:Katakana 3:Hiragana |
245 | - var regRep = /([\\^$.*+?()[\]{}|])|([\u30a1-\u30f6])|([\u3041-\u3096])/g; | |
246 | - var replacementFunc = function(m, m1, m2, m3) { | |
247 | + var regRep = /([\\^$.*+?()[\]{}|])|([\u30a1-\u30f6])|([\u3041-\u3096])/g | |
248 | + var replacementFunc = function (m, m1, m2, m3) { | |
247 | 249 | if (m1) { |
248 | 250 | // Symbol - escape with prior backslach |
249 | - return '\\' + m1; | |
251 | + return '\\' + m1 | |
250 | 252 | } else if (m2) { |
251 | 253 | // Katakana |
252 | 254 | var r = '(?:' + String.fromCharCode(m2.charCodeAt(0) - 0x60) + |
253 | - '|' + m2; | |
255 | + '|' + m2 | |
254 | 256 | if (kanaMap[m2]) { |
255 | - r += '|' + kanaMap[m2]; | |
257 | + r += '|' + kanaMap[m2] | |
256 | 258 | } |
257 | - r += ')'; | |
258 | - return r; | |
259 | + r += ')' | |
260 | + return r | |
259 | 261 | } else if (m3) { |
260 | 262 | // Hiragana |
261 | - var katakana = String.fromCharCode(m3.charCodeAt(0) + 0x60); | |
262 | - var r2 = '(?:' + m3 + '|' + katakana; | |
263 | + var katakana = String.fromCharCode(m3.charCodeAt(0) + 0x60) | |
264 | + var r2 = '(?:' + m3 + '|' + katakana | |
263 | 265 | if (kanaMap[katakana]) { |
264 | - r2 += '|' + kanaMap[katakana]; | |
266 | + r2 += '|' + kanaMap[katakana] | |
265 | 267 | } |
266 | - r2 += ')'; | |
267 | - return r2; | |
268 | + r2 += ')' | |
269 | + return r2 | |
268 | 270 | } |
269 | - return m; | |
270 | - }; | |
271 | - var s1 = searchText.replace(/^\s+|\s+$/g, ''); | |
272 | - if (!s1) return null; | |
273 | - var sp = s1.split(/\s+/); | |
274 | - var rText = ''; | |
275 | - prepareKanaMap(); | |
271 | + return m | |
272 | + } | |
273 | + var s1 = searchText.replace(/^\s+|\s+$/g, '') | |
274 | + if (!s1) return null | |
275 | + var sp = s1.split(/\s+/) | |
276 | + var rText = '' | |
277 | + prepareKanaMap() | |
276 | 278 | for (var i = 0; i < sp.length; i++) { |
277 | 279 | if (rText !== '') { |
278 | - rText += '|'; | |
280 | + rText += '|' | |
279 | 281 | } |
280 | - var s = sp[i]; | |
282 | + var s = sp[i] | |
281 | 283 | if (s.normalize) { |
282 | - s = s.normalize('NFKC'); | |
284 | + s = s.normalize('NFKC') | |
283 | 285 | } |
284 | - var s2 = s.replace(regRep, replacementFunc); | |
285 | - rText += '(' + s2 + ')'; | |
286 | + var s2 = s.replace(regRep, replacementFunc) | |
287 | + rText += '(' + s2 + ')' | |
286 | 288 | } |
287 | - return new RegExp(rText, 'ig'); | |
289 | + return new RegExp(rText, 'ig') | |
288 | 290 | } |
289 | 291 | /** |
290 | 292 | * @param {string} statusText |
291 | 293 | */ |
292 | - function setSearchStatus(statusText, statusText2) { | |
293 | - var statusList = document.querySelectorAll('._plugin_search2_search_status'); | |
294 | - forEach(statusList, function(statusObj) { | |
295 | - var textObj1 = statusObj.querySelector('._plugin_search2_search_status_text1'); | |
296 | - var textObj2 = statusObj.querySelector('._plugin_search2_search_status_text2'); | |
294 | + function setSearchStatus (statusText, statusText2) { | |
295 | + var statusList = document.querySelectorAll('._plugin_search2_search_status') | |
296 | + forEach(statusList, function (statusObj) { | |
297 | + var textObj1 = statusObj.querySelector('._plugin_search2_search_status_text1') | |
298 | + var textObj2 = statusObj.querySelector('._plugin_search2_search_status_text2') | |
297 | 299 | if (textObj1) { |
298 | - var prevText = textObj1.getAttribute('data-text'); | |
300 | + var prevText = textObj1.getAttribute('data-text') | |
299 | 301 | if (prevText !== statusText) { |
300 | - textObj1.setAttribute('data-text', statusText); | |
302 | + textObj1.setAttribute('data-text', statusText) | |
301 | 303 | if (statusText.substr(statusText.length - 3) === '...') { |
302 | - var firstHalf = statusText.substr(0, statusText.length - 3); | |
303 | - textObj1.textContent = firstHalf; | |
304 | - var span = document.createElement('span'); | |
305 | - span.innerHTML = '<span class="plugin-search2-progress plugin-search2-progress1">.</span>' | |
306 | - + '<span class="plugin-search2-progress plugin-search2-progress2">.</span>' | |
307 | - + '<span class="plugin-search2-progress plugin-search2-progress3">.</span>'; | |
308 | - textObj1.appendChild(span); | |
304 | + var firstHalf = statusText.substr(0, statusText.length - 3) | |
305 | + textObj1.textContent = firstHalf | |
306 | + var span = document.createElement('span') | |
307 | + span.innerHTML = '<span class="plugin-search2-progress plugin-search2-progress1">.</span>' + | |
308 | + '<span class="plugin-search2-progress plugin-search2-progress2">.</span>' + | |
309 | + '<span class="plugin-search2-progress plugin-search2-progress3">.</span>' | |
310 | + textObj1.appendChild(span) | |
309 | 311 | } else { |
310 | - textObj1.textContent = statusText; | |
312 | + textObj1.textContent = statusText | |
311 | 313 | } |
312 | 314 | } |
313 | 315 | } |
314 | 316 | if (textObj2) { |
315 | 317 | if (statusText2) { |
316 | - textObj2.textContent = ' ' + statusText2; | |
318 | + textObj2.textContent = ' ' + statusText2 | |
317 | 319 | } else { |
318 | - textObj2.textContent = ''; | |
320 | + textObj2.textContent = '' | |
319 | 321 | } |
320 | 322 | } |
321 | - }); | |
323 | + }) | |
322 | 324 | } |
323 | 325 | /** |
324 | 326 | * @param {string} msgHTML |
325 | 327 | */ |
326 | - function setSearchMessage(msgHTML) { | |
327 | - var objList = document.querySelectorAll('._plugin_search2_message'); | |
328 | - forEach(objList, function(obj) { | |
329 | - obj.innerHTML = msgHTML; | |
330 | - }); | |
328 | + function setSearchMessage (msgHTML) { | |
329 | + var objList = document.querySelectorAll('._plugin_search2_message') | |
330 | + forEach(objList, function (obj) { | |
331 | + obj.innerHTML = msgHTML | |
332 | + }) | |
331 | 333 | } |
332 | - function showSecondSearchForm() { | |
334 | + function showSecondSearchForm () { | |
333 | 335 | // Show second search form |
334 | - var div = document.querySelector('._plugin_search2_second_form'); | |
336 | + var div = document.querySelector('._plugin_search2_second_form') | |
335 | 337 | if (div) { |
336 | - div.style.display = 'block'; | |
338 | + div.style.display = 'block' | |
337 | 339 | } |
338 | 340 | } |
339 | 341 | /** |
340 | 342 | * @param {Element} form |
341 | 343 | * @type string |
342 | 344 | */ |
343 | - function getSearchBase(form) { | |
344 | - var f = form || document.querySelector('._plugin_search2_form'); | |
345 | - var base = ''; | |
346 | - forEach(f.querySelectorAll('input[name="base"]'), function(radio) { | |
347 | - if (radio.checked) base = radio.value; | |
348 | - }); | |
349 | - return base; | |
345 | + function getSearchBase (form) { | |
346 | + var f = form || document.querySelector('._plugin_search2_form') | |
347 | + var base = '' | |
348 | + forEach(f.querySelectorAll('input[name="base"]'), function (radio) { | |
349 | + if (radio.checked) base = radio.value | |
350 | + }) | |
351 | + return base | |
350 | 352 | } |
351 | 353 | /** |
352 | 354 | * Decorate found block (for pre innerHTML) |
@@ -354,301 +356,301 @@ window.addEventListener && window.addEventListener('DOMContentLoaded', function( | ||
354 | 356 | * @param {Object} block |
355 | 357 | * @param {RegExp} searchRegex |
356 | 358 | */ |
357 | - function decorateFoundBlock(block, searchRegex) { | |
358 | - var lines = []; | |
359 | + function decorateFoundBlock (block, searchRegex) { | |
360 | + var lines = [] | |
359 | 361 | for (var j = 0; j < block.lines.length; j++) { |
360 | - var line = block.lines[j]; | |
361 | - var decorated = findAndDecorateText(line, searchRegex); | |
362 | + var line = block.lines[j] | |
363 | + var decorated = findAndDecorateText(line, searchRegex) | |
362 | 364 | if (decorated === null) { |
363 | - lines.push('' + (block.startIndex + j + 1) + ':\t' + escapeHTML(line)); | |
365 | + lines.push('' + (block.startIndex + j + 1) + ':\t' + escapeHTML(line)) | |
364 | 366 | } else { |
365 | - lines.push('' + (block.startIndex + j + 1) + ':\t' + decorated); | |
367 | + lines.push('' + (block.startIndex + j + 1) + ':\t' + decorated) | |
366 | 368 | } |
367 | 369 | } |
368 | 370 | if (block.beyondLimit) { |
369 | - lines.push('...'); | |
371 | + lines.push('...') | |
370 | 372 | } |
371 | - return lines.join('\n'); | |
373 | + return lines.join('\n') | |
372 | 374 | } |
373 | 375 | /** |
374 | 376 | * @param {string} body |
375 | 377 | * @param {RegExp} searchRegex |
376 | 378 | */ |
377 | - function getSummaryInfo(body, searchRegex) { | |
378 | - var lines = body.split('\n'); | |
379 | - var foundLines = []; | |
380 | - var isInAuthorHeader = true; | |
381 | - var lastFoundLineIndex = -1 - aroundLines; | |
382 | - var lastAddedLineIndex = lastFoundLineIndex; | |
383 | - var blocks = []; | |
384 | - var lineCount = 0; | |
385 | - var currentBlock = null; | |
379 | + function getSummaryInfo (body, searchRegex) { | |
380 | + var lines = body.split('\n') | |
381 | + var foundLines = [] | |
382 | + var isInAuthorHeader = true | |
383 | + var lastFoundLineIndex = -1 - aroundLines | |
384 | + var lastAddedLineIndex = lastFoundLineIndex | |
385 | + var blocks = [] | |
386 | + var lineCount = 0 | |
387 | + var currentBlock = null | |
386 | 388 | for (var index = 0, length = lines.length; index < length; index++) { |
387 | - var line = lines[index]; | |
389 | + var line = lines[index] | |
388 | 390 | if (isInAuthorHeader) { |
389 | 391 | // '#author line is not search target' |
390 | 392 | if (line.match(/^#author\(/)) { |
391 | 393 | // Remove this line from search target |
392 | - continue; | |
394 | + continue | |
393 | 395 | } else if (line.match(/^#freeze(\W|$)/)) { |
394 | 396 | // Still in header |
395 | 397 | } else { |
396 | 398 | // Already in body |
397 | - isInAuthorHeader = false; | |
399 | + isInAuthorHeader = false | |
398 | 400 | } |
399 | 401 | } |
400 | - var match = line.match(searchRegex); | |
402 | + var match = line.match(searchRegex) | |
401 | 403 | if (!match) { |
402 | 404 | if (index < lastFoundLineIndex + aroundLines + 1) { |
403 | - foundLines.push(lines[index]); | |
404 | - lineCount++; | |
405 | - lastAddedLineIndex = index; | |
405 | + foundLines.push(lines[index]) | |
406 | + lineCount++ | |
407 | + lastAddedLineIndex = index | |
406 | 408 | } |
407 | 409 | } else { |
408 | - var startIndex = Math.max(Math.max(lastAddedLineIndex + 1, index - aroundLines), 0); | |
410 | + var startIndex = Math.max(Math.max(lastAddedLineIndex + 1, index - aroundLines), 0) | |
409 | 411 | if (lastAddedLineIndex + 1 < startIndex) { |
410 | 412 | // Newly found! |
411 | 413 | var block = { |
412 | 414 | startIndex: startIndex, |
413 | 415 | foundLineIndex: index, |
414 | 416 | lines: [] |
415 | - }; | |
416 | - currentBlock = block; | |
417 | - foundLines = block.lines; | |
418 | - blocks.push(block); | |
417 | + } | |
418 | + currentBlock = block | |
419 | + foundLines = block.lines | |
420 | + blocks.push(block) | |
419 | 421 | } |
420 | 422 | if (lineCount >= maxResultLines) { |
421 | - currentBlock.beyondLimit = true; | |
422 | - return blocks; | |
423 | + currentBlock.beyondLimit = true | |
424 | + return blocks | |
423 | 425 | } |
424 | 426 | for (var i = startIndex; i < index; i++) { |
425 | - foundLines.push(lines[i]); | |
426 | - lineCount++; | |
427 | + foundLines.push(lines[i]) | |
428 | + lineCount++ | |
427 | 429 | } |
428 | - foundLines.push(line); | |
429 | - lineCount++; | |
430 | - lastFoundLineIndex = lastAddedLineIndex = index; | |
430 | + foundLines.push(line) | |
431 | + lineCount++ | |
432 | + lastFoundLineIndex = lastAddedLineIndex = index | |
431 | 433 | } |
432 | 434 | } |
433 | - return blocks; | |
435 | + return blocks | |
434 | 436 | } |
435 | 437 | /** |
436 | 438 | * @param {Date} now |
437 | 439 | * @param {string} dateText |
438 | 440 | */ |
439 | - function getPassage(now, dateText) { | |
441 | + function getPassage (now, dateText) { | |
440 | 442 | if (!dateText) { |
441 | - return ''; | |
443 | + return '' | |
442 | 444 | } |
443 | - var units = [{u: 'm', max: 60}, {u: 'h', max: 24}, {u: 'd', max: 1}]; | |
444 | - var d = new Date(); | |
445 | - d.setTime(Date.parse(dateText)); | |
446 | - var t = (now.getTime() - d.getTime()) / (1000 * 60); // minutes | |
447 | - var unit = units[0].u; var card = units[0].max; | |
445 | + var units = [{ u: 'm', max: 60 }, { u: 'h', max: 24 }, { u: 'd', max: 1 }] | |
446 | + var d = new Date() | |
447 | + d.setTime(Date.parse(dateText)) | |
448 | + var t = (now.getTime() - d.getTime()) / (1000 * 60) // minutes | |
449 | + var unit = units[0].u; var card = units[0].max | |
448 | 450 | for (var i = 0; i < units.length; i++) { |
449 | - unit = units[i].u; card = units[i].max; | |
450 | - if (t < card) break; | |
451 | - t = t / card; | |
451 | + unit = units[i].u; card = units[i].max | |
452 | + if (t < card) break | |
453 | + t = t / card | |
452 | 454 | } |
453 | - return '(' + Math.floor(t) + unit + ')'; | |
455 | + return '(' + Math.floor(t) + unit + ')' | |
454 | 456 | } |
455 | 457 | /** |
456 | 458 | * @param {string} searchText |
457 | 459 | */ |
458 | - function removeSearchOperators(searchText) { | |
459 | - var sp = searchText.split(/\s+/); | |
460 | + function removeSearchOperators (searchText) { | |
461 | + var sp = searchText.split(/\s+/) | |
460 | 462 | if (sp.length <= 1) { |
461 | - return searchText; | |
463 | + return searchText | |
462 | 464 | } |
463 | 465 | for (var i = sp.length - 2; i >= 1; i--) { |
464 | 466 | if (sp[i] === 'OR') { |
465 | - sp.splice(i, 1); | |
467 | + sp.splice(i, 1) | |
466 | 468 | } |
467 | 469 | } |
468 | - return sp.join(' '); | |
470 | + return sp.join(' ') | |
469 | 471 | } |
470 | 472 | /** |
471 | 473 | * @param {string} pathname |
472 | 474 | */ |
473 | - function getSearchCacheKeyBase(pathname) { | |
474 | - return 'path.' + pathname + '.search2.'; | |
475 | + function getSearchCacheKeyBase (pathname) { | |
476 | + return 'path.' + pathname + '.search2.' | |
475 | 477 | } |
476 | 478 | /** |
477 | 479 | * @param {string} pathname |
478 | 480 | */ |
479 | - function getSearchCacheKeyDateBase(pathname) { | |
480 | - var now = new Date(); | |
481 | - var dateKey = now.getFullYear() + '_0' + (now.getMonth() + 1) + '_0' + now.getDate(); | |
482 | - dateKey = dateKey.replace(/_\d?(\d\d)/g, '$1'); | |
483 | - return getSearchCacheKeyBase(pathname) + dateKey + '.'; | |
481 | + function getSearchCacheKeyDateBase (pathname) { | |
482 | + var now = new Date() | |
483 | + var dateKey = now.getFullYear() + '_0' + (now.getMonth() + 1) + '_0' + now.getDate() | |
484 | + dateKey = dateKey.replace(/_\d?(\d\d)/g, '$1') | |
485 | + return getSearchCacheKeyBase(pathname) + dateKey + '.' | |
484 | 486 | } |
485 | 487 | /** |
486 | 488 | * @param {string} pathname |
487 | 489 | * @param {string} searchText |
488 | 490 | * @param {number} offset |
489 | 491 | */ |
490 | - function getSearchCacheKey(pathname, searchText, offset) { | |
492 | + function getSearchCacheKey (pathname, searchText, offset) { | |
491 | 493 | return getSearchCacheKeyDateBase(pathname) + 'offset=' + offset + |
492 | - '.' + searchText; | |
494 | + '.' + searchText | |
493 | 495 | } |
494 | 496 | /** |
495 | 497 | * @param {string} pathname |
496 | 498 | * @param {string} searchText |
497 | 499 | */ |
498 | - function clearSingleCache(pathname, searchText) { | |
499 | - if (!window.localStorage) return; | |
500 | - var removeTargets = []; | |
501 | - var keyBase = getSearchCacheKeyDateBase(pathname); | |
500 | + function clearSingleCache (pathname, searchText) { | |
501 | + if (!window.localStorage) return | |
502 | + var removeTargets = [] | |
503 | + var keyBase = getSearchCacheKeyDateBase(pathname) | |
502 | 504 | for (var i = 0, n = localStorage.length; i < n; i++) { |
503 | - var key = localStorage.key(i); | |
505 | + var key = localStorage.key(i) | |
504 | 506 | if (key.substr(0, keyBase.length) === keyBase) { |
505 | 507 | // Search result Cache |
506 | - var subKey = key.substr(keyBase.length); | |
507 | - var m = subKey.match(/^offset=\d+\.(.+)$/); | |
508 | + var subKey = key.substr(keyBase.length) | |
509 | + var m = subKey.match(/^offset=\d+\.(.+)$/) | |
508 | 510 | if (m && m[1] === searchText) { |
509 | - removeTargets.push(key); | |
511 | + removeTargets.push(key) | |
510 | 512 | } |
511 | 513 | } |
512 | 514 | } |
513 | - removeTargets.forEach(function(target) { | |
514 | - localStorage.removeItem(target); | |
515 | - }); | |
515 | + removeTargets.forEach(function (target) { | |
516 | + localStorage.removeItem(target) | |
517 | + }) | |
516 | 518 | } |
517 | 519 | /** |
518 | 520 | * @param {string} body |
519 | 521 | */ |
520 | - function getBodySummary(body) { | |
521 | - var lines = body.split('\n'); | |
522 | - var isInAuthorHeader = true; | |
523 | - var summary = []; | |
522 | + function getBodySummary (body) { | |
523 | + var lines = body.split('\n') | |
524 | + var isInAuthorHeader = true | |
525 | + var summary = [] | |
524 | 526 | for (var index = 0, length = lines.length; index < length; index++) { |
525 | - var line = lines[index]; | |
527 | + var line = lines[index] | |
526 | 528 | if (isInAuthorHeader) { |
527 | 529 | // '#author line is not search target' |
528 | 530 | if (line.match(/^#author\(/)) { |
529 | 531 | // Remove this line from search target |
530 | - continue; | |
532 | + continue | |
531 | 533 | } else if (line.match(/^#freeze(\W|$)/)) { |
532 | - continue; | |
534 | + continue | |
533 | 535 | // Still in header |
534 | 536 | } else { |
535 | 537 | // Already in body |
536 | - isInAuthorHeader = false; | |
538 | + isInAuthorHeader = false | |
537 | 539 | } |
538 | 540 | } |
539 | - line = line.replace(/^\s+|\s+$/g, ''); | |
540 | - if (line.length === 0) continue; // Empty line | |
541 | - if (line.match(/^#\w+/)) continue; // Block-type plugin | |
542 | - if (line.match(/^\/\//)) continue; // Comment | |
541 | + line = line.replace(/^\s+|\s+$/g, '') | |
542 | + if (line.length === 0) continue // Empty line | |
543 | + if (line.match(/^#\w+/)) continue // Block-type plugin | |
544 | + if (line.match(/^\/\//)) continue // Comment | |
543 | 545 | if (line.substr(0, 1) === '*') { |
544 | - line = line.replace(/\s*\[#\w+\]$/, ''); // Remove anchor | |
546 | + line = line.replace(/\s*\[#\w+\]$/, '') // Remove anchor | |
545 | 547 | } |
546 | - summary.push(line); | |
548 | + summary.push(line) | |
547 | 549 | if (summary.length >= 10) { |
548 | - continue; | |
550 | + continue | |
549 | 551 | } |
550 | 552 | } |
551 | - return summary.join(' ').substring(0, 150); | |
553 | + return summary.join(' ').substring(0, 150) | |
552 | 554 | } |
553 | 555 | /** |
554 | 556 | * @param {string} q searchText |
555 | 557 | */ |
556 | - function encodeSearchText(q) { | |
557 | - var sp = q.split(/\s+/); | |
558 | + function encodeSearchText (q) { | |
559 | + var sp = q.split(/\s+/) | |
558 | 560 | for (var i = 0; i < sp.length; i++) { |
559 | - sp[i] = encodeURIComponent(sp[i]); | |
561 | + sp[i] = encodeURIComponent(sp[i]) | |
560 | 562 | } |
561 | - return sp.join('+'); | |
563 | + return sp.join('+') | |
562 | 564 | } |
563 | 565 | /** |
564 | 566 | * @param {string} q searchText |
565 | 567 | */ |
566 | - function encodeSearchTextForHash(q) { | |
567 | - var sp = q.split(/\s+/); | |
568 | - return sp.join('+'); | |
568 | + function encodeSearchTextForHash (q) { | |
569 | + var sp = q.split(/\s+/) | |
570 | + return sp.join('+') | |
569 | 571 | } |
570 | - function getSearchTextInLocationHash() { | |
571 | - var hash = document.location.hash; | |
572 | - if (!hash) return ''; | |
573 | - var q = ''; | |
572 | + function getSearchTextInLocationHash () { | |
573 | + var hash = document.location.hash | |
574 | + if (!hash) return '' | |
575 | + var q = '' | |
574 | 576 | if (hash.substr(0, 3) === '#q=') { |
575 | - q = hash.substr(3).replace(/\+/g, ' '); | |
577 | + q = hash.substr(3).replace(/\+/g, ' ') | |
576 | 578 | } else { |
577 | - return ''; | |
579 | + return '' | |
578 | 580 | } |
579 | - var decodedQ = decodeURIComponent(q); | |
581 | + var decodedQ = decodeURIComponent(q) | |
580 | 582 | if (q !== decodedQ) { |
581 | - q = decodedQ + ' OR ' + q; | |
583 | + q = decodedQ + ' OR ' + q | |
582 | 584 | } |
583 | - return q; | |
585 | + return q | |
584 | 586 | } |
585 | - function colorSearchTextInBody() { | |
586 | - var searchText = getSearchTextInLocationHash(); | |
587 | - if (!searchText) return; | |
588 | - var searchRegex = textToRegex(removeSearchOperators(searchText)); | |
589 | - if (!searchRegex) return; | |
587 | + function colorSearchTextInBody () { | |
588 | + var searchText = getSearchTextInLocationHash() | |
589 | + if (!searchText) return | |
590 | + var searchRegex = textToRegex(removeSearchOperators(searchText)) | |
591 | + if (!searchRegex) return | |
590 | 592 | var ignoreTags = ['INPUT', 'TEXTAREA', 'BUTTON', |
591 | - 'SCRIPT', 'FRAME', 'IFRAME']; | |
593 | + 'SCRIPT', 'FRAME', 'IFRAME'] | |
592 | 594 | /** |
593 | 595 | * @param {Element} element |
594 | 596 | */ |
595 | - function colorSearchText(element) { | |
596 | - var decorated = findAndDecorateText(element.nodeValue, searchRegex); | |
597 | + function colorSearchText (element) { | |
598 | + var decorated = findAndDecorateText(element.nodeValue, searchRegex) | |
597 | 599 | if (decorated) { |
598 | - var span = document.createElement('span'); | |
599 | - span.innerHTML = decorated; | |
600 | - element.parentNode.replaceChild(span, element); | |
600 | + var span = document.createElement('span') | |
601 | + span.innerHTML = decorated | |
602 | + element.parentNode.replaceChild(span, element) | |
601 | 603 | } |
602 | 604 | } |
603 | 605 | /** |
604 | 606 | * @param {Element} element |
605 | 607 | */ |
606 | - function walkElement(element) { | |
607 | - var e = element.firstChild; | |
608 | + function walkElement (element) { | |
609 | + var e = element.firstChild | |
608 | 610 | while (e) { |
609 | 611 | if (e.nodeType === 3 && e.nodeValue && |
610 | 612 | e.nodeValue.length >= 2 && /\S/.test(e.nodeValue)) { |
611 | - var next = e.nextSibling; | |
612 | - colorSearchText(e, searchRegex); | |
613 | - e = next; | |
613 | + var next = e.nextSibling | |
614 | + colorSearchText(e, searchRegex) | |
615 | + e = next | |
614 | 616 | } else { |
615 | 617 | if (e.nodeType === 1 && ignoreTags.indexOf(e.tagName) === -1) { |
616 | - walkElement(e); | |
618 | + walkElement(e) | |
617 | 619 | } |
618 | - e = e.nextSibling; | |
620 | + e = e.nextSibling | |
619 | 621 | } |
620 | 622 | } |
621 | 623 | } |
622 | - var target = document.getElementById('body'); | |
623 | - walkElement(target); | |
624 | + var target = document.getElementById('body') | |
625 | + walkElement(target) | |
624 | 626 | } |
625 | 627 | /** |
626 | 628 | * @param {Array<Object>} newResults |
627 | 629 | * @param {Element} ul |
628 | 630 | */ |
629 | - function removePastResults(newResults, ul) { | |
630 | - var removedCount = 0; | |
631 | - var nodes = ul.childNodes; | |
631 | + function removePastResults (newResults, ul) { | |
632 | + var removedCount = 0 | |
633 | + var nodes = ul.childNodes | |
632 | 634 | for (var i = nodes.length - 1; i >= 0; i--) { |
633 | - var node = nodes[i]; | |
634 | - if (node.tagName !== 'LI' && node.tagName !== 'DIV') continue; | |
635 | - var nodePagename = node.getAttribute('data-pagename'); | |
636 | - var isRemoveTarget = false; | |
635 | + var node = nodes[i] | |
636 | + if (node.tagName !== 'LI' && node.tagName !== 'DIV') continue | |
637 | + var nodePagename = node.getAttribute('data-pagename') | |
638 | + var isRemoveTarget = false | |
637 | 639 | for (var j = 0, n = newResults.length; j < n; j++) { |
638 | - var r = newResults[j]; | |
640 | + var r = newResults[j] | |
639 | 641 | if (r.name === nodePagename) { |
640 | - isRemoveTarget = true; | |
641 | - break; | |
642 | + isRemoveTarget = true | |
643 | + break | |
642 | 644 | } |
643 | 645 | } |
644 | 646 | if (isRemoveTarget) { |
645 | 647 | if (node.tagName === 'LI') { |
646 | - removedCount++; | |
648 | + removedCount++ | |
647 | 649 | } |
648 | - ul.removeChild(node); | |
650 | + ul.removeChild(node) | |
649 | 651 | } |
650 | 652 | } |
651 | - return removedCount; | |
653 | + return removedCount | |
652 | 654 | } |
653 | 655 | /** |
654 | 656 | * @param {Array<Object>} results |
@@ -657,79 +659,79 @@ window.addEventListener && window.addEventListener('DOMContentLoaded', function( | ||
657 | 659 | * @param {Element} parentUlElement |
658 | 660 | * @param {boolean} insertTop |
659 | 661 | */ |
660 | - function addSearchResult(results, searchText, searchRegex, parentUlElement, insertTop) { | |
661 | - var props = getSiteProps(); | |
662 | - var now = new Date(); | |
663 | - var parentFragment = document.createDocumentFragment(); | |
664 | - results.forEach(function(val) { | |
665 | - var li = document.createElement('li'); | |
666 | - var hash = '#q=' + encodeSearchTextForHash(searchText); | |
667 | - var href = val.url + hash; | |
668 | - var decoratedName = findAndDecorateText(val.name, searchRegex); | |
662 | + function addSearchResult (results, searchText, searchRegex, parentUlElement, insertTop) { | |
663 | + var props = getSiteProps() | |
664 | + var now = new Date() | |
665 | + var parentFragment = document.createDocumentFragment() | |
666 | + results.forEach(function (val) { | |
667 | + var li = document.createElement('li') | |
668 | + var hash = '#q=' + encodeSearchTextForHash(searchText) | |
669 | + var href = val.url + hash | |
670 | + var decoratedName = findAndDecorateText(val.name, searchRegex) | |
669 | 671 | if (!decoratedName) { |
670 | - decoratedName = escapeHTML(val.name); | |
672 | + decoratedName = escapeHTML(val.name) | |
671 | 673 | } |
672 | - var updatedAt = val.updatedAt; | |
673 | - var passageHtml = ''; | |
674 | + var updatedAt = val.updatedAt | |
675 | + var passageHtml = '' | |
674 | 676 | if (props.show_passage) { |
675 | - passageHtml = ' ' + getPassage(now, updatedAt); | |
677 | + passageHtml = ' ' + getPassage(now, updatedAt) | |
676 | 678 | } |
677 | 679 | var liHtml = '<a href="' + escapeHTML(href) + '">' + |
678 | - decoratedName + '</a>' + passageHtml; | |
679 | - li.innerHTML = liHtml; | |
680 | - li.setAttribute('data-pagename', val.name); | |
680 | + decoratedName + '</a>' + passageHtml | |
681 | + li.innerHTML = liHtml | |
682 | + li.setAttribute('data-pagename', val.name) | |
681 | 683 | // Page detail div |
682 | - var div = document.createElement('div'); | |
683 | - div.classList.add('search-result-detail'); | |
684 | - var head = document.createElement('div'); | |
685 | - head.classList.add('search-result-page-summary'); | |
686 | - head.innerHTML = escapeHTML(val.bodySummary); | |
687 | - div.appendChild(head); | |
688 | - var summaryInfo = val.hitSummary; | |
684 | + var div = document.createElement('div') | |
685 | + div.classList.add('search-result-detail') | |
686 | + var head = document.createElement('div') | |
687 | + head.classList.add('search-result-page-summary') | |
688 | + head.innerHTML = escapeHTML(val.bodySummary) | |
689 | + div.appendChild(head) | |
690 | + var summaryInfo = val.hitSummary | |
689 | 691 | for (var i = 0; i < summaryInfo.length; i++) { |
690 | - var pre = document.createElement('pre'); | |
691 | - pre.innerHTML = decorateFoundBlock(summaryInfo[i], searchRegex); | |
692 | - div.appendChild(pre); | |
692 | + var pre = document.createElement('pre') | |
693 | + pre.innerHTML = decorateFoundBlock(summaryInfo[i], searchRegex) | |
694 | + div.appendChild(pre) | |
693 | 695 | } |
694 | - div.setAttribute('data-pagename', val.name); | |
696 | + div.setAttribute('data-pagename', val.name) | |
695 | 697 | // Add li to ul (parentUlElement) |
696 | - li.appendChild(div); | |
697 | - parentFragment.appendChild(li); | |
698 | - }); | |
698 | + li.appendChild(div) | |
699 | + parentFragment.appendChild(li) | |
700 | + }) | |
699 | 701 | if (insertTop && parentUlElement.firstChild) { |
700 | - parentUlElement.insertBefore(parentFragment, parentUlElement.firstChild); | |
702 | + parentUlElement.insertBefore(parentFragment, parentUlElement.firstChild) | |
701 | 703 | } else { |
702 | - parentUlElement.appendChild(parentFragment); | |
704 | + parentUlElement.appendChild(parentFragment) | |
703 | 705 | } |
704 | 706 | } |
705 | - function removeCachedResultsBase(keepTodayCache) { | |
706 | - var props = getSiteProps(); | |
707 | - if (!props || !props.base_uri_pathname) return; | |
708 | - var keyPrefix = getSearchCacheKeyDateBase(props.base_uri_pathname); | |
709 | - var keyBase = getSearchCacheKeyBase(props.base_uri_pathname); | |
710 | - var removeTargets = []; | |
707 | + function removeCachedResultsBase (keepTodayCache) { | |
708 | + var props = getSiteProps() | |
709 | + if (!props || !props.base_uri_pathname) return | |
710 | + var keyPrefix = getSearchCacheKeyDateBase(props.base_uri_pathname) | |
711 | + var keyBase = getSearchCacheKeyBase(props.base_uri_pathname) | |
712 | + var removeTargets = [] | |
711 | 713 | for (var i = 0, n = localStorage.length; i < n; i++) { |
712 | - var key = localStorage.key(i); | |
714 | + var key = localStorage.key(i) | |
713 | 715 | if (key.substr(0, keyBase.length) === keyBase) { |
714 | 716 | // Search result Cache |
715 | 717 | if (keepTodayCache) { |
716 | 718 | if (key.substr(0, keyPrefix.length) !== keyPrefix) { |
717 | - removeTargets.push(key); | |
719 | + removeTargets.push(key) | |
718 | 720 | } |
719 | 721 | } else { |
720 | - removeTargets.push(key); | |
722 | + removeTargets.push(key) | |
721 | 723 | } |
722 | 724 | } |
723 | 725 | } |
724 | - removeTargets.forEach(function(target) { | |
725 | - localStorage.removeItem(target); | |
726 | - }); | |
726 | + removeTargets.forEach(function (target) { | |
727 | + localStorage.removeItem(target) | |
728 | + }) | |
727 | 729 | } |
728 | - function removeCachedResults() { | |
729 | - removeCachedResultsBase(true); | |
730 | + function removeCachedResults () { | |
731 | + removeCachedResultsBase(true) | |
730 | 732 | } |
731 | - function removeAllCachedResults() { | |
732 | - removeCachedResultsBase(false); | |
733 | + function removeAllCachedResults () { | |
734 | + removeCachedResultsBase(false) | |
733 | 735 | } |
734 | 736 | /** |
735 | 737 | * @param {Object} obj |
@@ -737,119 +739,119 @@ window.addEventListener && window.addEventListener('DOMContentLoaded', function( | ||
737 | 739 | * @param {string} searchText |
738 | 740 | * @param {number} prevTimestamp |
739 | 741 | */ |
740 | - function showResult(obj, session, searchText, prevTimestamp) { | |
741 | - var props = getSiteProps(); | |
742 | - var searchRegex = textToRegex(removeSearchOperators(searchText)); | |
743 | - var ul = document.querySelector('#_plugin_search2_result-list'); | |
744 | - if (!ul) return; | |
742 | + function showResult (obj, session, searchText, prevTimestamp) { | |
743 | + var props = getSiteProps() | |
744 | + var searchRegex = textToRegex(removeSearchOperators(searchText)) | |
745 | + var ul = document.querySelector('#_plugin_search2_result-list') | |
746 | + if (!ul) return | |
745 | 747 | if (obj.start_index === 0 && !prevTimestamp) { |
746 | - ul.innerHTML = ''; | |
748 | + ul.innerHTML = '' | |
747 | 749 | } |
748 | - var searchDone = obj.search_done; | |
749 | - if (!session.scanPageCount) session.scanPageCount = 0; | |
750 | - if (!session.readPageCount) session.readPageCount = 0; | |
751 | - if (!session.hitPageCount) session.hitPageCount = 0; | |
752 | - var prevHitPageCount = session.hitPageCount; | |
753 | - session.hitPageCount += obj.results.length; | |
750 | + var searchDone = obj.search_done | |
751 | + if (!session.scanPageCount) session.scanPageCount = 0 | |
752 | + if (!session.readPageCount) session.readPageCount = 0 | |
753 | + if (!session.hitPageCount) session.hitPageCount = 0 | |
754 | + var prevHitPageCount = session.hitPageCount | |
755 | + session.hitPageCount += obj.results.length | |
754 | 756 | if (!prevTimestamp) { |
755 | - session.scanPageCount += obj.scan_page_count; | |
756 | - session.readPageCount += obj.read_page_count; | |
757 | - session.pageCount = obj.page_count; | |
757 | + session.scanPageCount += obj.scan_page_count | |
758 | + session.readPageCount += obj.read_page_count | |
759 | + session.pageCount = obj.page_count | |
758 | 760 | } |
759 | - session.searchStartTime = obj.search_start_time; | |
760 | - session.authUser = obj.auth_user; | |
761 | + session.searchStartTime = obj.search_start_time | |
762 | + session.authUser = obj.auth_user | |
761 | 763 | if (prevHitPageCount === 0 && session.hitPageCount > 0) { |
762 | - showSecondSearchForm(); | |
764 | + showSecondSearchForm() | |
763 | 765 | } |
764 | - var results = obj.results; | |
765 | - var cachedResults = []; | |
766 | - results.forEach(function(val) { | |
767 | - var cache = {}; | |
768 | - cache.name = val.name; | |
769 | - cache.url = val.url; | |
770 | - cache.updatedAt = val.updated_at; | |
771 | - cache.updatedTime = val.updated_time; | |
772 | - cache.bodySummary = getBodySummary(val.body); | |
773 | - cache.hitSummary = getSummaryInfo(val.body, searchRegex); | |
774 | - cachedResults.push(cache); | |
775 | - }); | |
766 | + var results = obj.results | |
767 | + var cachedResults = [] | |
768 | + results.forEach(function (val) { | |
769 | + var cache = {} | |
770 | + cache.name = val.name | |
771 | + cache.url = val.url | |
772 | + cache.updatedAt = val.updated_at | |
773 | + cache.updatedTime = val.updated_time | |
774 | + cache.bodySummary = getBodySummary(val.body) | |
775 | + cache.hitSummary = getSummaryInfo(val.body, searchRegex) | |
776 | + cachedResults.push(cache) | |
777 | + }) | |
776 | 778 | if (prevTimestamp) { |
777 | - var removedCount = removePastResults(cachedResults, ul); | |
778 | - session.hitPageCount -= removedCount; | |
779 | + var removedCount = removePastResults(cachedResults, ul) | |
780 | + session.hitPageCount -= removedCount | |
779 | 781 | } |
780 | - var msg = getSearchResultMessage(session, searchText, searchRegex, !searchDone); | |
781 | - setSearchMessage(msg); | |
782 | + var msg = getSearchResultMessage(session, searchText, searchRegex, !searchDone) | |
783 | + setSearchMessage(msg) | |
782 | 784 | if (prevTimestamp) { |
783 | - setSearchStatus(searchProps.searchingMsg); | |
785 | + setSearchStatus(searchProps.searchingMsg) | |
784 | 786 | } else { |
785 | 787 | setSearchStatus(searchProps.searchingMsg, |
786 | - getSearchProgress(session)); | |
788 | + getSearchProgress(session)) | |
787 | 789 | } |
788 | 790 | if (searchDone) { |
789 | - var singlePageResult = session.offset === 0 && !session.nextOffset; | |
790 | - var progress = getSearchProgress(session); | |
791 | - setTimeout(function() { | |
791 | + var singlePageResult = session.offset === 0 && !session.nextOffset | |
792 | + var progress = getSearchProgress(session) | |
793 | + setTimeout(function () { | |
792 | 794 | if (singlePageResult) { |
793 | - setSearchStatus(''); | |
795 | + setSearchStatus('') | |
794 | 796 | } else { |
795 | - setSearchStatus(searchProps.showingResultMsg, progress); | |
797 | + setSearchStatus(searchProps.showingResultMsg, progress) | |
796 | 798 | } |
797 | - }, 2000); | |
799 | + }, 2000) | |
798 | 800 | } |
799 | 801 | if (session.results) { |
800 | 802 | if (prevTimestamp) { |
801 | - var newResult = [].concat(cachedResults); | |
802 | - Array.prototype.push.apply(newResult, session.results); | |
803 | - session.results = newResult; | |
803 | + var newResult = [].concat(cachedResults) | |
804 | + Array.prototype.push.apply(newResult, session.results) | |
805 | + session.results = newResult | |
804 | 806 | } else { |
805 | - Array.prototype.push.apply(session.results, cachedResults); | |
807 | + Array.prototype.push.apply(session.results, cachedResults) | |
806 | 808 | } |
807 | 809 | } else { |
808 | - session.results = cachedResults; | |
810 | + session.results = cachedResults | |
809 | 811 | } |
810 | - addSearchResult(cachedResults, searchText, searchRegex, ul, prevTimestamp); | |
811 | - var maxResults = searchProps.maxResults; | |
812 | + addSearchResult(cachedResults, searchText, searchRegex, ul, prevTimestamp) | |
813 | + var maxResults = searchProps.maxResults | |
812 | 814 | if (searchDone) { |
813 | - session.searchText = searchText; | |
814 | - var prevOffset = searchProps.prevOffset; | |
815 | + session.searchText = searchText | |
816 | + var prevOffset = searchProps.prevOffset | |
815 | 817 | if (prevOffset) { |
816 | - session.prevOffset = parseInt(prevOffset, 10); | |
818 | + session.prevOffset = parseInt(prevOffset, 10) | |
817 | 819 | } |
818 | - var json = JSON.stringify(session); | |
819 | - var cacheKey = getSearchCacheKey(props.base_uri_pathname, searchText, session.offset); | |
820 | + var json = JSON.stringify(session) | |
821 | + var cacheKey = getSearchCacheKey(props.base_uri_pathname, searchText, session.offset) | |
820 | 822 | if (window.localStorage) { |
821 | 823 | try { |
822 | - localStorage[cacheKey] = json; | |
824 | + localStorage[cacheKey] = json | |
823 | 825 | } catch (e) { |
824 | 826 | // QuotaExceededError "exceeded the quota." |
825 | - console.log(e); | |
826 | - removeAllCachedResults(); | |
827 | + console.log(e) | |
828 | + removeAllCachedResults() | |
827 | 829 | } |
828 | 830 | } |
829 | 831 | if ('prevOffset' in session || 'nextOffset' in session) { |
830 | - setSearchMessage(msg + ' ' + getOffsetLinks(session, maxResults)); | |
832 | + setSearchMessage(msg + ' ' + getOffsetLinks(session, maxResults)) | |
831 | 833 | } |
832 | 834 | } |
833 | 835 | if (!searchDone && obj.next_start_index) { |
834 | 836 | if (session.results.length >= maxResults) { |
835 | 837 | // Save results |
836 | - session.nextOffset = obj.next_start_index; | |
837 | - var prevOffset2 = searchProps.prevOffset; | |
838 | + session.nextOffset = obj.next_start_index | |
839 | + var prevOffset2 = searchProps.prevOffset | |
838 | 840 | if (prevOffset2) { |
839 | - session.prevOffset = parseInt(prevOffset2, 10); | |
841 | + session.prevOffset = parseInt(prevOffset2, 10) | |
840 | 842 | } |
841 | - var key = getSearchCacheKey(props.base_uri_pathname, searchText, session.offset); | |
842 | - localStorage[key] = JSON.stringify(session); | |
843 | + var key = getSearchCacheKey(props.base_uri_pathname, searchText, session.offset) | |
844 | + localStorage[key] = JSON.stringify(session) | |
843 | 845 | // Stop API calling |
844 | - setSearchMessage(msg + ' ' + getOffsetLinks(session, maxResults)); | |
846 | + setSearchMessage(msg + ' ' + getOffsetLinks(session, maxResults)) | |
845 | 847 | setSearchStatus(searchProps.showingResultMsg, |
846 | - getSearchProgress(session)); | |
848 | + getSearchProgress(session)) | |
847 | 849 | } else { |
848 | - setTimeout(function() { | |
850 | + setTimeout(function () { | |
849 | 851 | doSearch(searchText, // eslint-disable-line no-use-before-define |
850 | 852 | session, obj.next_start_index, |
851 | - obj.search_start_time); | |
852 | - }, searchProps.searchInterval); | |
853 | + obj.search_start_time) | |
854 | + }, searchProps.searchInterval) | |
853 | 855 | } |
854 | 856 | } |
855 | 857 | } |
@@ -858,41 +860,41 @@ window.addEventListener && window.addEventListener('DOMContentLoaded', function( | ||
858 | 860 | * @param {string} base |
859 | 861 | * @param {number} offset |
860 | 862 | */ |
861 | - function showCachedResult(searchText, base, offset) { | |
862 | - var props = getSiteProps(); | |
863 | - var searchRegex = textToRegex(removeSearchOperators(searchText)); | |
864 | - var ul = document.querySelector('#_plugin_search2_result-list'); | |
865 | - if (!ul) return null; | |
866 | - var searchCacheKey = getSearchCacheKey(props.base_uri_pathname, searchText, offset); | |
867 | - var cache1 = localStorage[searchCacheKey]; | |
863 | + function showCachedResult (searchText, base, offset) { | |
864 | + var props = getSiteProps() | |
865 | + var searchRegex = textToRegex(removeSearchOperators(searchText)) | |
866 | + var ul = document.querySelector('#_plugin_search2_result-list') | |
867 | + if (!ul) return null | |
868 | + var searchCacheKey = getSearchCacheKey(props.base_uri_pathname, searchText, offset) | |
869 | + var cache1 = localStorage[searchCacheKey] | |
868 | 870 | if (!cache1) { |
869 | - return null; | |
871 | + return null | |
870 | 872 | } |
871 | - var session = JSON.parse(cache1); | |
872 | - if (!session) return null; | |
873 | + var session = JSON.parse(cache1) | |
874 | + if (!session) return null | |
873 | 875 | if (base !== session.base) { |
874 | - return null; | |
876 | + return null | |
875 | 877 | } |
876 | - var user = searchProps.user; | |
878 | + var user = searchProps.user | |
877 | 879 | if (user !== session.authUser) { |
878 | - return null; | |
880 | + return null | |
879 | 881 | } |
880 | 882 | if (session.hitPageCount > 0) { |
881 | - showSecondSearchForm(); | |
883 | + showSecondSearchForm() | |
882 | 884 | } |
883 | - var msg = getSearchResultMessage(session, searchText, searchRegex, false); | |
884 | - setSearchMessage(msg); | |
885 | - addSearchResult(session.results, searchText, searchRegex, ul); | |
886 | - var maxResults = searchProps.maxResults; | |
885 | + var msg = getSearchResultMessage(session, searchText, searchRegex, false) | |
886 | + setSearchMessage(msg) | |
887 | + addSearchResult(session.results, searchText, searchRegex, ul) | |
888 | + var maxResults = searchProps.maxResults | |
887 | 889 | if ('prevOffset' in session || 'nextOffset' in session) { |
888 | - var moreResultHtml = getOffsetLinks(session, maxResults); | |
889 | - setSearchMessage(msg + ' ' + moreResultHtml); | |
890 | - var progress = getSearchProgress(session); | |
891 | - setSearchStatus(searchProps.showingResultMsg, progress); | |
890 | + var moreResultHtml = getOffsetLinks(session, maxResults) | |
891 | + setSearchMessage(msg + ' ' + moreResultHtml) | |
892 | + var progress = getSearchProgress(session) | |
893 | + setSearchStatus(searchProps.showingResultMsg, progress) | |
892 | 894 | } else { |
893 | - setSearchStatus(''); | |
895 | + setSearchStatus('') | |
894 | 896 | } |
895 | - return session; | |
897 | + return session | |
896 | 898 | } |
897 | 899 | /** |
898 | 900 | * @param {string} searchText |
@@ -901,183 +903,183 @@ window.addEventListener && window.addEventListener('DOMContentLoaded', function( | ||
901 | 903 | * @param {number} searchStartTime |
902 | 904 | * @param {number} prevTimestamp |
903 | 905 | */ |
904 | - function doSearch(searchText, session, startIndex, searchStartTime, prevTimestamp) { | |
905 | - var props = getSiteProps(); | |
906 | - var baseUrl = './'; | |
906 | + function doSearch (searchText, session, startIndex, searchStartTime, prevTimestamp) { | |
907 | + var props = getSiteProps() | |
908 | + var baseUrl = './' | |
907 | 909 | if (props.base_uri_pathname) { |
908 | - baseUrl = props.base_uri_pathname; | |
910 | + baseUrl = props.base_uri_pathname | |
909 | 911 | } |
910 | - var url = baseUrl + '?cmd=search2&action=query'; | |
911 | - url += '&encode_hint=' + encodeURIComponent('\u3077'); | |
912 | + var url = baseUrl + '?cmd=search2&action=query' | |
913 | + url += '&encode_hint=' + encodeURIComponent('\u3077') | |
912 | 914 | if (searchText) { |
913 | - url += '&q=' + encodeURIComponent(searchText); | |
915 | + url += '&q=' + encodeURIComponent(searchText) | |
914 | 916 | } |
915 | 917 | if (session.base) { |
916 | - url += '&base=' + encodeURIComponent(session.base); | |
918 | + url += '&base=' + encodeURIComponent(session.base) | |
917 | 919 | } |
918 | 920 | if (prevTimestamp) { |
919 | - url += '&modified_since=' + prevTimestamp; | |
921 | + url += '&modified_since=' + prevTimestamp | |
920 | 922 | } else { |
921 | - url += '&start=' + startIndex; | |
923 | + url += '&start=' + startIndex | |
922 | 924 | if (searchStartTime) { |
923 | - url += '&search_start_time=' + encodeURIComponent(searchStartTime); | |
925 | + url += '&search_start_time=' + encodeURIComponent(searchStartTime) | |
924 | 926 | } |
925 | 927 | if (!('offset' in session)) { |
926 | - session.offset = startIndex; | |
928 | + session.offset = startIndex | |
927 | 929 | } |
928 | 930 | } |
929 | - fetch(url, {credentials: 'same-origin'} | |
930 | - ).then(function(response) { | |
931 | + fetch(url, { credentials: 'same-origin' } | |
932 | + ).then(function (response) { | |
931 | 933 | if (response.ok) { |
932 | - return response.json(); | |
934 | + return response.json() | |
933 | 935 | } |
934 | 936 | throw new Error(response.status + ': ' + |
935 | - response.statusText + ' on ' + url); | |
936 | - }).then(function(obj) { | |
937 | - showResult(obj, session, searchText, prevTimestamp); | |
938 | - })['catch'](function(err) { // eslint-disable-line dot-notation | |
937 | + response.statusText + ' on ' + url) | |
938 | + }).then(function (obj) { | |
939 | + showResult(obj, session, searchText, prevTimestamp) | |
940 | + })['catch'](function (err) { // eslint-disable-line dot-notation | |
939 | 941 | if (window.console && console.log) { |
940 | - console.log(err); | |
941 | - console.log('Error! Please check JavaScript console\n' + JSON.stringify(err) + '|' + err); | |
942 | + console.log(err) | |
943 | + console.log('Error! Please check JavaScript console\n' + JSON.stringify(err) + '|' + err) | |
942 | 944 | } |
943 | - setSearchStatus(searchProps.errorMsg); | |
944 | - }); | |
945 | + setSearchStatus(searchProps.errorMsg) | |
946 | + }) | |
945 | 947 | } |
946 | - function hookSearch2() { | |
947 | - var form = document.querySelector('form'); | |
948 | + function hookSearch2 () { | |
949 | + var form = document.querySelector('form') | |
948 | 950 | if (form && form.q) { |
949 | - var q = form.q; | |
951 | + var q = form.q | |
950 | 952 | if (q.value === '') { |
951 | - q.focus(); | |
953 | + q.focus() | |
952 | 954 | } |
953 | 955 | } |
954 | 956 | } |
955 | - function removeEncodeHint() { | |
957 | + function removeEncodeHint () { | |
956 | 958 | // Remove 'encode_hint' if site charset is UTF-8 |
957 | - var props = getSiteProps(); | |
958 | - if (!props.is_utf8) return; | |
959 | - var forms = document.querySelectorAll('form'); | |
960 | - forEach(forms, function(form) { | |
959 | + var props = getSiteProps() | |
960 | + if (!props.is_utf8) return | |
961 | + var forms = document.querySelectorAll('form') | |
962 | + forEach(forms, function (form) { | |
961 | 963 | if (form.cmd && form.cmd.value === 'search2') { |
962 | 964 | if (form.encode_hint && (typeof form.encode_hint.removeAttribute === 'function')) { |
963 | - form.encode_hint.removeAttribute('name'); | |
965 | + form.encode_hint.removeAttribute('name') | |
964 | 966 | } |
965 | 967 | } |
966 | - }); | |
968 | + }) | |
967 | 969 | } |
968 | - function kickFirstSearch() { | |
969 | - var form = document.querySelector('._plugin_search2_form'); | |
970 | - var searchText = form && form.q; | |
971 | - if (!searchText) return; | |
970 | + function kickFirstSearch () { | |
971 | + var form = document.querySelector('._plugin_search2_form') | |
972 | + var searchText = form && form.q | |
973 | + if (!searchText) return | |
972 | 974 | if (searchText && searchText.value) { |
973 | - var offset = searchProps.offset; | |
974 | - var base = getSearchBase(form); | |
975 | - var prevSession = showCachedResult(searchText.value, base, offset); | |
975 | + var offset = searchProps.offset | |
976 | + var base = getSearchBase(form) | |
977 | + var prevSession = showCachedResult(searchText.value, base, offset) | |
976 | 978 | if (prevSession) { |
977 | 979 | // Display Cache results, then search only modified pages |
978 | 980 | if (!('offset' in prevSession) || prevSession.offset === 0) { |
979 | 981 | doSearch(searchText.value, prevSession, offset, null, |
980 | - prevSession.searchStartTime); | |
982 | + prevSession.searchStartTime) | |
981 | 983 | } else { |
982 | 984 | // Show search results |
983 | 985 | } |
984 | 986 | } else { |
985 | - doSearch(searchText.value, {base: base, offset: offset}, offset, null); | |
987 | + doSearch(searchText.value, { base: base, offset: offset }, offset, null) | |
986 | 988 | } |
987 | - removeCachedResults(); | |
989 | + removeCachedResults() | |
988 | 990 | } |
989 | 991 | } |
990 | - function replaceSearchWithSearch2() { | |
991 | - forEach(document.querySelectorAll('form'), function(f) { | |
992 | - function onAndRadioClick() { | |
993 | - var sp = removeSearchOperators(f.word.value).split(/\s+/); | |
994 | - var newText = sp.join(' '); | |
992 | + function replaceSearchWithSearch2 () { | |
993 | + forEach(document.querySelectorAll('form'), function (f) { | |
994 | + function onAndRadioClick () { | |
995 | + var sp = removeSearchOperators(f.word.value).split(/\s+/) | |
996 | + var newText = sp.join(' ') | |
995 | 997 | if (f.word.value !== newText) { |
996 | - f.word.value = newText; | |
998 | + f.word.value = newText | |
997 | 999 | } |
998 | 1000 | } |
999 | - function onOrRadioClick() { | |
1000 | - var sp = removeSearchOperators(f.word.value).split(/\s+/); | |
1001 | - var newText = sp.join(' OR '); | |
1001 | + function onOrRadioClick () { | |
1002 | + var sp = removeSearchOperators(f.word.value).split(/\s+/) | |
1003 | + var newText = sp.join(' OR ') | |
1002 | 1004 | if (f.word.value !== newText) { |
1003 | - f.word.value = newText; | |
1005 | + f.word.value = newText | |
1004 | 1006 | } |
1005 | 1007 | } |
1006 | 1008 | if (f.action.match(/cmd=search$/)) { |
1007 | - f.addEventListener('submit', function(e) { | |
1008 | - var q = e.target.word.value; | |
1009 | - var base = ''; | |
1010 | - forEach(f.querySelectorAll('input[name="base"]'), function(radio) { | |
1011 | - if (radio.checked) base = radio.value; | |
1012 | - }); | |
1013 | - var props = getSiteProps(); | |
1014 | - var loc = document.location; | |
1015 | - var baseUri = loc.protocol + '//' + loc.host + loc.pathname; | |
1009 | + f.addEventListener('submit', function (e) { | |
1010 | + var q = e.target.word.value | |
1011 | + var base = '' | |
1012 | + forEach(f.querySelectorAll('input[name="base"]'), function (radio) { | |
1013 | + if (radio.checked) base = radio.value | |
1014 | + }) | |
1015 | + var props = getSiteProps() | |
1016 | + var loc = document.location | |
1017 | + var baseUri = loc.protocol + '//' + loc.host + loc.pathname | |
1016 | 1018 | if (props.base_uri_pathname) { |
1017 | - baseUri = props.base_uri_pathname; | |
1019 | + baseUri = props.base_uri_pathname | |
1018 | 1020 | } |
1019 | 1021 | var url = baseUri + '?' + |
1020 | 1022 | (props.is_utf8 ? '' : 'encode_hint=' + |
1021 | 1023 | encodeURIComponent('\u3077') + '&') + |
1022 | 1024 | 'cmd=search2' + |
1023 | 1025 | '&q=' + encodeSearchText(q) + |
1024 | - (base ? '&base=' + encodeURIComponent(base) : ''); | |
1025 | - e.preventDefault(); | |
1026 | - setTimeout(function() { | |
1027 | - window.location.href = url; | |
1028 | - }, 1); | |
1029 | - return false; | |
1030 | - }); | |
1031 | - var radios = f.querySelectorAll('input[type="radio"][name="type"]'); | |
1032 | - forEach(radios, function(radio) { | |
1026 | + (base ? '&base=' + encodeURIComponent(base) : '') | |
1027 | + e.preventDefault() | |
1028 | + setTimeout(function () { | |
1029 | + window.location.href = url | |
1030 | + }, 1) | |
1031 | + return false | |
1032 | + }) | |
1033 | + var radios = f.querySelectorAll('input[type="radio"][name="type"]') | |
1034 | + forEach(radios, function (radio) { | |
1033 | 1035 | if (radio.value === 'AND') { |
1034 | - radio.addEventListener('click', onAndRadioClick); | |
1036 | + radio.addEventListener('click', onAndRadioClick) | |
1035 | 1037 | } else if (radio.value === 'OR') { |
1036 | - radio.addEventListener('click', onOrRadioClick); | |
1038 | + radio.addEventListener('click', onOrRadioClick) | |
1037 | 1039 | } |
1038 | - }); | |
1040 | + }) | |
1039 | 1041 | } else if (f.cmd && f.cmd.value === 'search2') { |
1040 | - f.addEventListener('submit', function() { | |
1041 | - var newSearchText = f.q.value; | |
1042 | - var prevSearchText = f.q.getAttribute('data-original-q'); | |
1042 | + f.addEventListener('submit', function () { | |
1043 | + var newSearchText = f.q.value | |
1044 | + var prevSearchText = f.q.getAttribute('data-original-q') | |
1043 | 1045 | if (newSearchText === prevSearchText) { |
1044 | 1046 | // Clear resultCache to search same text again |
1045 | - var props = getSiteProps(); | |
1046 | - clearSingleCache(props.base_uri_pathname, prevSearchText); | |
1047 | + var props = getSiteProps() | |
1048 | + clearSingleCache(props.base_uri_pathname, prevSearchText) | |
1047 | 1049 | } |
1048 | - }); | |
1050 | + }) | |
1049 | 1051 | } |
1050 | - }); | |
1052 | + }) | |
1051 | 1053 | } |
1052 | - function showNoSupportMessage() { | |
1053 | - var pList = document.getElementsByClassName('_plugin_search2_nosupport_message'); | |
1054 | + function showNoSupportMessage () { | |
1055 | + var pList = document.getElementsByClassName('_plugin_search2_nosupport_message') | |
1054 | 1056 | for (var i = 0; i < pList.length; i++) { |
1055 | - var p = pList[i]; | |
1056 | - p.style.display = 'block'; | |
1057 | + var p = pList[i] | |
1058 | + p.style.display = 'block' | |
1057 | 1059 | } |
1058 | 1060 | } |
1059 | - function isEnabledFetchFunctions() { | |
1061 | + function isEnabledFetchFunctions () { | |
1060 | 1062 | if (window.fetch && document.querySelector && window.JSON) { |
1061 | - return true; | |
1063 | + return true | |
1062 | 1064 | } |
1063 | - return false; | |
1065 | + return false | |
1064 | 1066 | } |
1065 | - function isEnableServerFunctions() { | |
1066 | - var props = getSiteProps(); | |
1067 | - if (props.json_enabled) return true; | |
1068 | - return false; | |
1067 | + function isEnableServerFunctions () { | |
1068 | + var props = getSiteProps() | |
1069 | + if (props.json_enabled) return true | |
1070 | + return false | |
1069 | 1071 | } |
1070 | - prepareSearchProps(); | |
1071 | - colorSearchTextInBody(); | |
1072 | + prepareSearchProps() | |
1073 | + colorSearchTextInBody() | |
1072 | 1074 | if (!isEnabledFetchFunctions()) { |
1073 | - showNoSupportMessage(); | |
1074 | - return; | |
1075 | + showNoSupportMessage() | |
1076 | + return | |
1075 | 1077 | } |
1076 | - if (!isEnableServerFunctions()) return; | |
1077 | - replaceSearchWithSearch2(); | |
1078 | - hookSearch2(); | |
1079 | - removeEncodeHint(); | |
1080 | - kickFirstSearch(); | |
1078 | + if (!isEnableServerFunctions()) return | |
1079 | + replaceSearchWithSearch2() | |
1080 | + hookSearch2() | |
1081 | + removeEncodeHint() | |
1082 | + kickFirstSearch() | |
1081 | 1083 | } |
1082 | - enableSearch2(); | |
1083 | -}); | |
1084 | + enableSearch2() | |
1085 | +}) |