annotate s4-main.js @ 1002:47b3e770372d draft

Auth-ON/OFF button available in all modes
author HIROSE Yuuji <yuuji@gentei.org>
date Sun, 04 Dec 2022 16:59:59 +0859
parents bbd5a0c50d5b
children 5bd1b5125049
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1 // 愛
586
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2 (function (){
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
3 var isOlderJS; // Set in init();
972
8781f341d93a Add referring text to hover title of ">#xxxx" marks.
HIROSE Yuuji <yuuji@gentei.org>
parents: 969
diff changeset
4 var hoverTextLines = 10;
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
5 var hasTouchPad =
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
6 (navigator.maxTouchPoints && navigator.maxTouchPoints >0);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
7 var myurl = document.URL,
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
8 mypath = myurl.substring(myurl.lastIndexOf("/"));
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
9 var art_m_list = [];
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
10 var mathjax = false;
915
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
11 let input_pdfsw = 'input[name="comppdf"]';
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
12 if (mypath.match(/(.*)\/(.*)/)) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
13 mypath = RegExp.$2;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
14 mypath = mypath.substring(0, mypath.lastIndexOf("?"));
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
15 //alert("mypath="+mypath);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
16 }
984
a094bd547d6b Escape chars in hover string
HIROSE Yuuji <yuuji@gentei.org>
parents: 982
diff changeset
17 function escapeChars(old) {
1000
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
18 return old.replaceAll('&', '&amp;')
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
19 .replaceAll('"', '&quot;')
984
a094bd547d6b Escape chars in hover string
HIROSE Yuuji <yuuji@gentei.org>
parents: 982
diff changeset
20 .replaceAll("<", '&lt;')
a094bd547d6b Escape chars in hover string
HIROSE Yuuji <yuuji@gentei.org>
parents: 982
diff changeset
21 .replaceAll(">", '&gt;');
a094bd547d6b Escape chars in hover string
HIROSE Yuuji <yuuji@gentei.org>
parents: 982
diff changeset
22 }
667
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
23 function collectElementsByAttr(elm, attr, val) {
586
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
24 var e = document.getElementsByTagName(elm);
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
25 if (!e) return null;
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
26 var list = [];
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
27 for (var i of e) {
667
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
28 if (i.getAttribute(attr) == val)
586
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
29 list.push(i)
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
30 }
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
31 return list;
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
32 }
675
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
33 function nthChildOf(parent, n, elem) { // Return Nth child of type ELEM
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
34 // N begins with 1
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
35 var i=0;
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
36 var le = elem.toLowerCase();
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
37 for (var c of parent.childNodes) {
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
38 if (!c.tagName) continue;
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
39 if (c.tagName.toLowerCase() == le) {
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
40 if (++i >= n) return c;
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
41 }
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
42 }
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
43 return null;
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
44 }
586
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
45 function insertRedirect(e) {
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
46 var articleId, textarea = document.getElementById("text");
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
47 var p = e.target, checked = p.checked;
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
48 while (p = p.parentNode)
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
49 if (p.nodeName.match(/^td$/i)) break;
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
50 if (!p) return;
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
51 while (p = p.nextSibling)
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
52 if (p.nodeName.match(/^td$/i)) break;
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
53 if (!p) return;
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
54 articleId = p.getAttribute("id");
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
55 if (textarea && articleId) {
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
56 var tv = textarea.value, lines;
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
57 if (tv)
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
58 lines = tv.split("\n");
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
59 else
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
60 lines = [""];
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
61 var re = new RegExp("[, ]*#"+articleId+"(?![0-9])");
590
f480fa97fba6 Redirection also inserted by #XXX anchors
HIROSE Yuuji <yuuji@gentei.org>
parents: 586
diff changeset
62 checked = (p.nodeName.match(/^input$/)
f480fa97fba6 Redirection also inserted by #XXX anchors
HIROSE Yuuji <yuuji@gentei.org>
parents: 586
diff changeset
63 ? p.checked // checkbox obeys its status
f480fa97fba6 Redirection also inserted by #XXX anchors
HIROSE Yuuji <yuuji@gentei.org>
parents: 586
diff changeset
64 : !lines[0].match(re)) // a-elment toggles redirection
586
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
65 if (checked) {
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
66 if (!lines[0].match(re)) {
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
67 var re2 = new RegExp(/>#[#0-9, ]+[0-9]/);
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
68 if (lines[0].match(re2))
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
69 lines[0] = lines[0].replace(
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
70 re2, '$&, '+'#'+articleId);
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
71 else {
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
72 if (lines[0] > "") lines[0] = " "+lines[0];
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
73 lines[0] = ">#"+articleId+lines[0];
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
74 }
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
75 }
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
76 } else { // Remove #xxxxx
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
77 if (lines[0].match(/^>#[0-9 ,]+#/)) // 2 or more #id's
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
78 lines[0] = lines[0].replace(
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
79 new RegExp("^>#"+articleId+"[ ,]*"), ">").replace(
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
80 new RegExp("[ ,]*#"+articleId), "");
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
81 else {
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
82 lines[0] = lines[0].replace(
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
83 new RegExp(">#"+articleId+"[ ,]*"), "");
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
84 }
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
85 }
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
86 lines[0] = lines[0].replace(/^> *$/, '');
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
87 textarea.value = lines.join("\n");
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
88 }
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
89 }
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
90 function registPjaxViewers(aHrefList) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
91 let apos=art_m_list.length;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
92 for (let a of aHrefList) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
93 let href = a.getAttribute("href");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
94 let localvar = apos;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
95 let td = a.parentNode,
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
96 tr = td.parentNode,
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
97 id = td.id,
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
98 text = td.textContent,
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
99 author = tr.getElementsByTagName("a");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
100 if (author) author = author[0].getAttribute("title");
939
6c2f8bb3cc6e Activate direct link to attached files
HIROSE Yuuji <yuuji@gentei.org>
parents: 938
diff changeset
101 if (href.match(/\?showattc\+article_m\+([0-9]+)$/)) {
6c2f8bb3cc6e Activate direct link to attached files
HIROSE Yuuji <yuuji@gentei.org>
parents: 938
diff changeset
102 if (td.innerHTML.match(/読み取り不可/)) {
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
103 a.removeAttribute("href");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
104 continue;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
105 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
106 let url = RegExp.lastMatch;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
107 // console.log("pjaxView(e, "+href+", "+apos+")");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
108 a.addEventListener("click", function(e) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
109 // Shoud use closure local variable: localvar
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
110 pjaxView(e, href, localvar);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
111 }, false);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
112 apos++;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
113 art_m_list.push({
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
114 url: href, id: id, author: author, text: text
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
115 });
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
116 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
117 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
118 }
906
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
119 function registInsertDirect(aHrefList) {
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
120 for (i of aHrefList)
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
121 if (i.getAttribute("href").match(/^#[0-9]+$/))
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
122 if (RegExp.lastMatch == i.innerHTML)
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
123 i.addEventListener("click", insertRedirect, false)
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
124 }
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
125 function mathjaxUpdate(arg) {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
126 try {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
127 if (MathJax && MathJax.typesetPromise) {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
128 MathJax.texReset(); // Reset Math counters
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
129 MathJax.typesetPromise(arg); // MathJax v3
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
130 }
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
131 } catch (err) {console.log(err);}
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
132 }
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
133 var ajaxSubmit;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
134 function replAddNews(newtable) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
135 let newids = [], idlist=[];
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
136 let getArticleID = function (td) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
137 return parseInt(td.parentNode.getElementsByTagName("td")[1].id);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
138 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
139 for (let i of newtable.querySelectorAll("td.repl"))
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
140 newids.push(i);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
141 newids = newids.sort((a,b)=> {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
142 return (getArticleID(a) - getArticleID(b));
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
143 });
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
144 for (i of newids)
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
145 idlist.push(getArticleID(i));
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
146 console.log("IDList="+idlist.join());
900
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
147 let cnt=0, ntr;
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
148 let current = collectElementsByAttr("td", "class", "repl"),
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
149 ncur=0, n, icur=0, o, oid, nid, otr;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
150 current = document.querySelectorAll('td[class="repl"]');
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
151 let last=current[current.length-1],
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
152 tbody = last.parentNode.parentNode;
906
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
153 let addEventsToNewTr = function(tr) {
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
154 let td = tr.getElementsByTagName("td"),
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
155 td0 = td[0], td1 = td[1];
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
156 td0.classList.add("new");
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
157 registInsertDirect(td0.querySelectorAll("a[href]"));
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
158 registPjaxViewers(td1.querySelectorAll("a[href]"));
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
159 }
919
27edbd91022c Erase all "new" flags after arrival of ajax response
HIROSE Yuuji <yuuji@gentei.org>
parents: 916
diff changeset
160 // Erase all "new article" flags before merging
27edbd91022c Erase all "new" flags after arrival of ajax response
HIROSE Yuuji <yuuji@gentei.org>
parents: 916
diff changeset
161 for (let i of document.querySelectorAll("td.new"))
27edbd91022c Erase all "new" flags after arrival of ajax response
HIROSE Yuuji <yuuji@gentei.org>
parents: 916
diff changeset
162 i.classList.remove("new");
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
163 // Now reconstruct articles with merge-sort like method
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
164 outer: for (; ncur<newids.length; ncur++) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
165 n = newids[ncur];
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
166 if (!n.id) continue;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
167 nid = parseInt(n.id);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
168 if (nid<=0) continue;
900
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
169 ntr = n.parentNode;
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
170 for (; icur<current.length; icur++) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
171 o = current[icur];
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
172 otr = o.parentNode;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
173 oid = getArticleID(o);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
174 if (!oid || oid=="") continue;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
175 if (oid >= nid) {
906
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
176 addEventsToNewTr(ntr);
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
177 tbody.insertBefore(ntr, otr);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
178 if (oid==nid) otr.remove();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
179 cnt++;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
180 continue outer;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
181 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
182 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
183 // Append absolutely new articles.
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
184 ntr = n.parentNode;
906
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
185 addEventsToNewTr(ntr)
964
759070ee3d20 Replace @all for ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 960
diff changeset
186 tbody.appendChild(atMarkView(ntr));
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
187 ntr.classList.add("dissolving");
900
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
188 let localntr = ntr;
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
189 setTimeout(() => {
900
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
190 localntr.classList.remove("dissolving");
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
191 localntr.classList.add("emerging");
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
192 }, 100);
981
eb51a80f73c2 Divide task of ReplyHover()
HIROSE Yuuji <yuuji@gentei.org>
parents: 980
diff changeset
193 rewriteReplyHover(ntr);
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
194 cnt++;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
195 }
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
196 mathjaxUpdate(newids);
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
197 console.log("Update "+cnt+"rows");
901
1cff36303150 Handling of the option for "scrollIntoView" changed
HIROSE Yuuji <yuuji@gentei.org>
parents: 900
diff changeset
198 if (cnt>0 && ntr.scrollIntoView) {
1cff36303150 Handling of the option for "scrollIntoView" changed
HIROSE Yuuji <yuuji@gentei.org>
parents: 900
diff changeset
199 let option = {behavior: "smooth"};
1cff36303150 Handling of the option for "scrollIntoView" changed
HIROSE Yuuji <yuuji@gentei.org>
parents: 900
diff changeset
200 if (!isOlderJS) option.block = "center";
900
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
201 try { // Scroll to last updated row
901
1cff36303150 Handling of the option for "scrollIntoView" changed
HIROSE Yuuji <yuuji@gentei.org>
parents: 900
diff changeset
202 ntr.scrollIntoView(option);
1cff36303150 Handling of the option for "scrollIntoView" changed
HIROSE Yuuji <yuuji@gentei.org>
parents: 900
diff changeset
203 } catch (e1) {}
1cff36303150 Handling of the option for "scrollIntoView" changed
HIROSE Yuuji <yuuji@gentei.org>
parents: 900
diff changeset
204 }
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
205 return cnt;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
206 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
207
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
208 function warnFileSize(form) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
209 let szmax = form.querySelector('input[name="filesize_max"]').value;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
210 if (!szmax || szmax=="") return;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
211 szmax = parseInt(szmax);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
212 if (szmax <= 0) return;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
213 // szmax = 10000
915
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
214 let ng = "", rcval=false, fileexists=false,
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
215 pdfsw = form.querySelector(input_pdfsw),
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
216 pdfmsg = "Try compressing PDF?\nPDFを圧縮してみますか?\n" +
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
217 "(それでも収まらない場合もあります)";
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
218 for (let f of form.querySelectorAll('input[type="file"]')) {
915
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
219 let thiserr = false;
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
220 for (let i of f.files) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
221 fileexists = true;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
222 let fn = i.name, sz = i.size;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
223 console.log("max="+szmax+", fn="+fn+", sz="+sz);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
224 if (sz > szmax) {
915
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
225 if (fn.match(/\.pdf/i)
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
226 && sz < szmax*3 // XXX : x3 reasonable?
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
227 && (pdfsw || confirm(pdfmsg))) {
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
228 if (!pdfsw) {
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
229 pdfsw = document.createElement("input");
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
230 pdfsw.name = "comppdf";
916
7cac220d52a7 Pdfsw type should be hidden!
HIROSE Yuuji <yuuji@gentei.org>
parents: 915
diff changeset
231 pdfsw.type = "hidden";
915
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
232 f.parentNode.insertBefore(pdfsw, f);
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
233 pdfsw.value = "yes";
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
234 }
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
235 } else {
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
236 thiserr = true;
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
237 ng += ((ng>"" ? ", " : "")+fn)
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
238 }
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
239 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
240 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
241 thiserr ? f.classList.add("warnbg") : f.classList.remove("warnbg");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
242 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
243 if (ng>"") {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
244 rcval = "File-size Limit Error: "+ng+"\n"+
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
245 "Should be less than "+szmax+"bytes.\n"+
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
246 szmax+"バイト未満にしてください"
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
247 alert(rcval);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
248 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
249 if (form.text.value == "") {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
250 let w;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
251 if (fileexists)
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
252 w = "Fill the text area\n" +
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
253 "添付したファイルに関する説明を入れてください。";
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
254 else
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
255 w = "Enter your comment!\n何か書き込んでね!";
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
256 alert(w);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
257 rcval = (rcval || w);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
258 form.text.classList.add("warnbg");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
259 setTimeout(() => {form.text.classList.remove("warnbg");}, 2000)
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
260 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
261 return rcval;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
262 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
263 function ajaxPost(e) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
264 e.preventDefault();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
265 let rowid;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
266 if (!myurl.match(/replyblog\+([0-9]+)/)) return;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
267 rowid = RegExp.$1
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
268 let myform = document.querySelector("form.replyblog");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
269 let data = new FormData(myform),
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
270 fetchtime = data.get("fetchtime");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
271 if (!fetchtime || fetchtime=="") return;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
272 ///*XX*/fetchtime = "2020-06-14T00:00:00";data.set("fetchtime", fetchtime)
900
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
273
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
274 ajaxSubmit = e.target;
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
275 ajaxSubmit.back = ajaxSubmit.textContent;
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
276 if (ajaxSubmit.id == "reload") {
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
277 ajaxSubmit.textContent = "更新中"
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
278 data.set("text", "")
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
279 } else {
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
280 if (warnFileSize(myform)) return;
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
281 ajaxSubmit.textContent = "送信中";
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
282 }
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
283 ajaxSubmit.blur();
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
284 ajaxSubmit.disabled = true;
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
285 let act = mypath+"?blog_fetch+"+rowid+"+f:"+fetchtime;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
286
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
287 function respUpdate(tbody) {
907
ce1a355e7cb1 Warn password timeout in ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 906
diff changeset
288 ajaxSubmit.textContent = ajaxSubmit.back;
ce1a355e7cb1 Warn password timeout in ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 906
diff changeset
289 ajaxSubmit.disabled = false;
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
290 let div = document.createElement("div"), form, newform;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
291 try {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
292 div.innerHTML = tbody;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
293 form = div.querySelector("form");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
294 } catch (er) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
295 alert("Cannot parse fetch data");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
296 return;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
297 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
298 let update = replAddNews(form);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
299 let dispelem = myform.querySelector("textarea").parentNode;
907
ce1a355e7cb1 Warn password timeout in ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 906
diff changeset
300 if (div.querySelector('input[name="user"]')) { // is login form
ce1a355e7cb1 Warn password timeout in ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 906
diff changeset
301 dispInfoMomentary("Login Again Please", dispelem)
ce1a355e7cb1 Warn password timeout in ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 906
diff changeset
302 return;
ce1a355e7cb1 Warn password timeout in ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 906
diff changeset
303 }
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
304 newform = new FormData(form);
900
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
305 if (data.get("text") > "") { // Called by submit button
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
306 myform.reset();
915
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
307 let pdfsw = myform.querySelector(input_pdfsw);
b47f64276427 Try to compress PDF if gs is available
HIROSE Yuuji <yuuji@gentei.org>
parents: 914
diff changeset
308 if (pdfsw) pdfsw.remove();
900
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
309 // myform.text.value = '';
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
310 }
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
311 myform.fetchtime.value = newform.get("fetchtime");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
312 myform.id.value = newform.get("id");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
313 if (update && update > 0) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
314 let s = update + " new article" +
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
315 (update>1 ? "s" : "") + " posted";
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
316 dispInfoMomentary(s, dispelem);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
317 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
318 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
319 fetch(act, {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
320 method: "POST", body: data,
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
321 credentials: "include" // For older firefox
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
322 }).then((resp) => {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
323 return resp.text();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
324 }).then((tbody) => {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
325 respUpdate(tbody);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
326 })
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
327 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
328 function pjaxView(ev, url, mynum) {
928
a3623f901e32 Shift-Click also suppress pjaxViewer
HIROSE Yuuji <yuuji@gentei.org>
parents: 927
diff changeset
329 if (ev.ctrlKey||ev.shiftKey) return;
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
330 ev.preventDefault();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
331 let box = document.createElement("div")
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
332 box.setAttribute("class", "pjaxview");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
333 let p1 = document.createElement("p"),
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
334 bt = document.createElement("button"),
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
335 sl = document.createElement("button"),
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
336 sr = document.createElement("button"),
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
337 loading = document.createElement("span"),
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
338 info = document.createElement("p");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
339 info1 = document.createElement("span");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
340 info2 = document.createElement("span");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
341 iframe = document.createElement("iframe");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
342 var curpos = mynum;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
343 var historyBase = history.length;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
344
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
345 function _setPjaxCurposInfo() {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
346 let len = art_m_list.length;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
347 let cur = art_m_list[curpos]
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
348 info1.textContent = (1+curpos)+" of "+len+" article #"+cur.id+
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
349 (cur.author ? " by "+cur.author : "") + ":";
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
350 info2.textContent = cur.text.trim();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
351 info2.setAttribute("class", "border textdigest");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
352 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
353 function _resetPjax() {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
354 // All we can do surely is to back 1 page,
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
355 // because we cannot move to desirable entry of history list.
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
356 history.back();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
357 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
358 function setSwipeAct(iframe) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
359 // We cannot use DOMContentLoaded nor iframe.contentWindow here.
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
360 // PDF.js does not construct contentWindow...?
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
361 iframe.addEventListener("load", () => {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
362 loading.classList.remove("loading");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
363 if (!hasTouchPad) return;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
364 let ifm = iframe.contentDocument;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
365 let startX, moveX, thresh = 100;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
366 ifm.addEventListener("touchstart", (e) => {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
367 e.preventDefault();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
368 startX = e.touches[0].pageX;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
369 }, false);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
370 ifm.addEventListener("touchmove", (e) => {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
371 e.preventDefault();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
372 moveX = e.touches[0].pageX;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
373 }, false);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
374 ifm.addEventListener("touchend", (e) => {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
375 if (startX < moveX && startX + thresh < moveX) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
376 switchTo(e, -1);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
377 } else if (startX > moveX && startX - thresh > moveX) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
378 switchTo(e, +1);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
379 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
380 }, false);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
381 }, false);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
382
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
383 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
384 function switchTo(e, direction) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
385 e.preventDefault();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
386 let len = art_m_list.length, cur, newpos, url;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
387 newpos = (curpos+len+direction)%len;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
388 if (curpos == newpos) return; // No need to switch to same one
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
389 curpos = newpos;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
390 cur = art_m_list[curpos];
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
391 url = cur.url;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
392 // We should remove iframe once to preserve history Object
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
393 // https://inthetechpit.com/2019/04/20/update-iframe-without-affecting-browser-history/
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
394 let parent = iframe.parentNode;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
395 // alert("D = "+direction);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
396 iframe.remove();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
397 parent.appendChild(iframe);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
398 try {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
399 loading.classList.add("loading");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
400 iframe.src = url;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
401 // iframe.contentDocument.location.replace(url);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
402 // location.replace cannot be used because PDF viewer.js
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
403 // does not have iframe.contentDocument
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
404 } catch (err) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
405 alert("Cannot load "+src+" : "+err.name);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
406 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
407 _setPjaxCurposInfo();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
408 setSwipeAct(iframe);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
409 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
410 function switchToByKey(e) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
411 // alert("KEY="+e.key);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
412 switch (e.key) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
413 case "ArrowLeft":
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
414 switchTo(e, -1); break;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
415 case "ArrowRight":
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
416 switchTo(e, +1); break;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
417 case "Escape":
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
418 history.back();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
419 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
420 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
421 // <div><p>
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
422 // <button> << </button><button>Dismiss</button><button> >> </button>
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
423 // </p><p><span> info1 </span> <span> info2 </span></p>
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
424 // <iframe src="..."></iframe>
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
425 // </div>
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
426 // ==> [ << ][Dissmiss][ >> ]
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
427 // ==> ## of ## article #xxx by AUTHOR
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
428 sl.textContent = " << ";
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
429 sr.textContent = " >> ";
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
430 sl.addEventListener("click", (e) => {switchTo(e, -1);});
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
431 sr.addEventListener("click", (e) => {switchTo(e, +1);});
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
432 sl.setAttribute("title", "to="+(mynum-1));
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
433 sr.setAttribute("title", "to="+(mynum+1));
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
434 document.body.appendChild(box);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
435 bt.textContent = "Click to dismiss / もどる"+mynum;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
436
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
437 box.appendChild(p1);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
438 p1.appendChild(sl); p1.appendChild(bt); p1.appendChild(sr);
930
1221335459c6 Add evaluation code of opening files in normal window
HIROSE Yuuji <yuuji@gentei.org>
parents: 928
diff changeset
439 { // TEST: Normal mode
1221335459c6 Add evaluation code of opening files in normal window
HIROSE Yuuji <yuuji@gentei.org>
parents: 928
diff changeset
440 let only = document.createElement("button"),
1221335459c6 Add evaluation code of opening files in normal window
HIROSE Yuuji <yuuji@gentei.org>
parents: 928
diff changeset
441 h = location.href;
1221335459c6 Add evaluation code of opening files in normal window
HIROSE Yuuji <yuuji@gentei.org>
parents: 928
diff changeset
442 only.textContent = ".oO□";
1221335459c6 Add evaluation code of opening files in normal window
HIROSE Yuuji <yuuji@gentei.org>
parents: 928
diff changeset
443 only.setAttribute("title", "Open in Normal Window");
1221335459c6 Add evaluation code of opening files in normal window
HIROSE Yuuji <yuuji@gentei.org>
parents: 928
diff changeset
444 only.addEventListener("click", function() {
1221335459c6 Add evaluation code of opening files in normal window
HIROSE Yuuji <yuuji@gentei.org>
parents: 928
diff changeset
445 location.replace(iframe.src);
1221335459c6 Add evaluation code of opening files in normal window
HIROSE Yuuji <yuuji@gentei.org>
parents: 928
diff changeset
446 });
1221335459c6 Add evaluation code of opening files in normal window
HIROSE Yuuji <yuuji@gentei.org>
parents: 928
diff changeset
447 p1.appendChild(only);
1221335459c6 Add evaluation code of opening files in normal window
HIROSE Yuuji <yuuji@gentei.org>
parents: 928
diff changeset
448 }
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
449 p1.appendChild(loading);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
450 info.appendChild(info1); info.appendChild(info2);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
451 loading.textContent=" Loading...";
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
452 loading.classList.add("hidden");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
453 loading.classList.add("loading");
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
454 box.appendChild(info);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
455 iframe.src = url;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
456
925
713441f69ab8 Key-event Listener should be restricted to "box" div.
HIROSE Yuuji <yuuji@gentei.org>
parents: 919
diff changeset
457 box.addEventListener("keydown", switchToByKey);
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
458 //box.addEventListener("click", (e) => {_resetPjax();});
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
459 bt.addEventListener("click", (e) => {_resetPjax();});
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
460 // dp.addEventListener("click", (e) => {_resetPjax();});
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
461 info.addEventListener("click", (e) => {_resetPjax();});
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
462 box.appendChild(iframe);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
463
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
464 setSwipeAct(iframe);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
465
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
466 _setPjaxCurposInfo();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
467 bt.focus();
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
468 setTimeout(() => {box.classList.add("pjaxview2");}, 10);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
469 // Finally update history stack
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
470 pjaxHistoryPush(box);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
471 }
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
472 function pjaxHistoryPush(box) {
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
473 if (history.pushState) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
474 let h = location.href.replace(/#.*/, '')+"#pjaxview";
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
475 history.pushState({url: h}, null, h);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
476 window.addEventListener("popstate", (e) => {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
477 if (box) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
478 box.remove(); box = null;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
479 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
480 }, false);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
481 }
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
482 }
659
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
483 function reverseChecks() {
667
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
484 var names = collectElementsByAttr("input", "name", "usel");
659
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
485 for (let u of names) {
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
486 u.checked = !u.checked;
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
487 }
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
488 }
852
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
489 function renumberOL(str, start) {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
490 var stra = str.split("\n");
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
491 for (var i=1; i<stra.length; i++) {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
492 if (stra[i].match(/^[1-9][0-9]*\. /)) {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
493 let orig=stra[i];
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
494 stra[i] = (++start)+". "+RegExp.rightContext;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
495 } else if (stra[i].match(/^ /)) {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
496 continue;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
497 } else
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
498 break;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
499 }
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
500 return stra.join("\n");
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
501 }
934
9184aa358773 Fake click at Ctrl-Enter posting for ajax post.
HIROSE Yuuji <yuuji@gentei.org>
parents: 931
diff changeset
502 function submitThisForm(e) {
9184aa358773 Fake click at Ctrl-Enter posting for ajax post.
HIROSE Yuuji <yuuji@gentei.org>
parents: 931
diff changeset
503 var input = e.target, ajaxpost = document.getElementById("c");
852
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
504 for (var elm=input.parentNode; elm; elm = elm.parentNode) {
934
9184aa358773 Fake click at Ctrl-Enter posting for ajax post.
HIROSE Yuuji <yuuji@gentei.org>
parents: 931
diff changeset
505 if (ajaxpost) {
9184aa358773 Fake click at Ctrl-Enter posting for ajax post.
HIROSE Yuuji <yuuji@gentei.org>
parents: 931
diff changeset
506 ajaxpost.click();
9184aa358773 Fake click at Ctrl-Enter posting for ajax post.
HIROSE Yuuji <yuuji@gentei.org>
parents: 931
diff changeset
507 return true;
9184aa358773 Fake click at Ctrl-Enter posting for ajax post.
HIROSE Yuuji <yuuji@gentei.org>
parents: 931
diff changeset
508 } else if (elm.nodeName.match(/form/i)) {
852
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
509 elm.submit();
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
510 return true;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
511 }
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
512 }
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
513 return false;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
514 }
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
515 function helpMarkdownBS(e) {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
516 var area = e.target, pos = area.selectionStart, text = area.value;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
517 if (area.selectionStart != area.selectionEnd) return;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
518 if (pos<2) return;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
519 if (text.substr(pos-1, 2)=="\n\n") return;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
520 var bol = text.lastIndexOf("\n", pos-1),
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
521 eol = text.indexOf("\n", pos);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
522 if (bol<=0 || bol==eol) return;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
523 var thisline = text.substring(bol+1, eol==-1 ? text.length : eol);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
524 thisline = text.substring(bol+1, pos);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
525 if (thisline == "* ") {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
526 area.setSelectionRange(pos-2, pos);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
527 } else if (thisline.match(/^[1-9][0-9]*\. $/)) {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
528 area.setSelectionRange(pos-RegExp.lastMatch.length, pos);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
529 }
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
530 }
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
531 function helpMarkdownEnter(e) {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
532 if (e.keyCode == 13 && !e.shiftKey) {
934
9184aa358773 Fake click at Ctrl-Enter posting for ajax post.
HIROSE Yuuji <yuuji@gentei.org>
parents: 931
diff changeset
533 if (e.ctrlKey && submitThisForm(e)) {
852
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
534 e.preventDefault();
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
535 return;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
536 }
846
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
537 var area = e.target;
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
538 var pos = area.selectionStart, text = area.value;
847
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
539 if (pos==0) return;
846
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
540 var last = text.lastIndexOf("\n", pos-1);
852
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
541 var rest = text.substring(pos), rest0=rest;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
542 var line = last ? text.substring(last+1, pos) : text;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
543 var next = rest.substring(rest.indexOf("\n"))||rest;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
544 next=next.substring(1);
847
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
545 var tail = text.substring(pos-2, pos), br = (tail==" ");
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
546 var add = "", offset = 1;
846
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
547 if (line.startsWith("* ")) {
847
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
548 add = "* ";
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
549 offset += add.length;
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
550 if (br) {
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
551 add = " " + "\n" + add;
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
552 }
846
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
553 } else if (line.match(/^([1-9][0-9]*)\. /)) {
852
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
554 var ln = parseInt(RegExp.$1), nn=ln+1,
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
555 len = RegExp.lastMatch.length;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
556 add = nn+". ";
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
557 let toeol = text.substr(pos, text.indexOf("\n"));
847
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
558 if (br) {
852
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
559 if (next.startsWith(add)) {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
560 add=" ".repeat(len);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
561 nn = ln;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
562 } else {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
563 add = " ".repeat(len)+ "\n" + add;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
564 offset -= len+1;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
565 }
847
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
566 }
852
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
567 if (next.match(/^[1-9][0-9]*\. /))
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
568 rest = renumberOL(rest, nn);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
569 offset += add.length;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
570 } else if (line.match(/^\|( *).+\|/)) {
846
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
571 add = "|" + RegExp.$1 + " |";
847
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
572 offset += add.length-2;
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
573 } else {
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
574 return;
846
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
575 }
847
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
576 e.preventDefault();
852
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
577 if (!document.execCommand("insertText", false, "\n"+add)) {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
578 //Firefox
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
579 area.selectionEnd = area.value.length;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
580 area.setRangeText("\n"+add+rest);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
581 area.selectionEnd = null;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
582 } else {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
583 area.selectionEnd = area.value.length;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
584 area.setSelectionRange(area.selectionStart, area.value.length);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
585 document.execCommand("insertText", false, rest);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
586 area.selectionEnd = null;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
587 area.focus();
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
588 }
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
589 area.selectionStart = pos+offset;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
590 return;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
591 if (document.execCommand("insertText", false, "\n"+add)) {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
592 //area.setSelectionRange(area.selectionStart, text.length);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
593 // alert("rest=["+rest+"], add=["+add+"]");
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
594 alert(text.substring(pos, area.value.length));
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
595 if (rest != rest0) {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
596 area.setSelectionRange(pos, area.value.length);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
597 return;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
598 document.execCommand("delete");
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
599 }
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
600 document.execCommand("insertText", false, rest);
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
601 } else {
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
602 // Firefox cannot use insertText in textarea...
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
603 area.value = text.substring(0, pos) + "\n" + add + rest;
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
604 }
846
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
605 //area.setSelectionRange(pos+length(add));
847
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
606 area.selectionStart=area.selectionEnd = (pos + offset);
a9e147e355fd Do not file helper when no pattern matches
HIROSE Yuuji <yuuji@gentei.org>
parents: 846
diff changeset
607
846
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
608 }
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
609 }
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
610 var helpParenPreview = 0;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
611 function helpMarkdownParen(e) {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
612 if (!mathjax) return;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
613 var area = e.target, pos = area.selectionStart, text = area.value;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
614 if (pos<2) return;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
615 if (text[pos-1] == "\\") {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
616 let ins="( \\)";
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
617 if (text[pos-2] == "\\") ins="( \\\\)";
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
618 area.setRangeText(ins, pos, pos);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
619 area.selectionStart = pos+2;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
620 if (helpParenPreview++ < 1) {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
621 dispInfoMomentary("Preview formula by Meta-p\n"+
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
622 "Meta-p で数式プレビュー", e.target.parentNode);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
623 }
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
624 e.preventDefault();
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
625 }
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
626 }
947
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
627 function textInsert(area, string, pos1, pos2) {
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
628 console.log("str="+string);
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
629 area.setRangeText(string, pos1||area.selectionStart,
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
630 pos2||pos1||area.selectionStart);
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
631 area.selectionStart += string.length;
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
632 }
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
633 function beginningOfLine(area, pos) {
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
634 pos = pos||area.selectionStart;
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
635 let b = area.value.lastIndexOf("\n", pos);
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
636 if (pos>1 && area.value.charCodeAt(pos)==10)
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
637 b = area.value.lastIndexOf("\n", pos-1);;
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
638 return b>=0 ? b : 0;
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
639 }
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
640 function isInBeginEnd(area, pos){
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
641 pos = pos||area.selectionStart;
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
642 let bol = beginningOfLine(area, pos);
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
643 let thisline = area.value.substr(bol);
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
644 console.log("curchar="+area.value.charCodeAt(pos));
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
645 console.log("prechar="+area.value.charCodeAt(pos-1));
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
646 console.log("bol="+bol+", thisline="+thisline);
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
647 let match = thisline.search(/\\(begin|end){([A-Za-z]*)/), lm, be;
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
648 if (match >= 0) {
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
649 lm = RegExp.lastMatch;
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
650 be = RegExp.$1;
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
651 return RegExp.$2
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
652 }
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
653 return null;
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
654 }
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
655 function helpMarkdownBrace(e) {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
656 if (!mathjax) return;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
657 var area = e.target, pos = area.selectionStart, text = area.value,
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
658 begin = "\\begin", end = "\\end";
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
659 if (pos < end.length) return;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
660 if (text.substr(pos-end.length).startsWith(end)) {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
661 let beg = text.lastIndexOf(begin, pos);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
662 if (beg >= 0) {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
663 let env = text.substr(beg).search(/\\begin{(.*?)}/);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
664 if (env >= 0) {
947
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
665 textInsert(area, "{"+RegExp.$1+"}", pos);
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
666 e.preventDefault();
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
667 }
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
668 }
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
669 }
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
670 }
947
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
671 function helpMarkdownBraceClose(e) {
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
672 if (!mathjax) return;
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
673 let area = e.target, pos = area.selectionStart, text = area.value,
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
674 begin = "\\begin", end = "\\end";
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
675 if (text.substr(pos).startsWith("}")) {
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
676 area.setRangeText("", pos, pos+1);
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
677 // e.preventDefault();
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
678 }
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
679 let inbegend = isInBeginEnd(area, pos);
948
1310b29b6ab1 Prevent \end completion when not enclosed with \begin
HIROSE Yuuji <yuuji@gentei.org>
parents: 947
diff changeset
680 if (!inbegend) return;
947
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
681 let nextendpos = text.substr(pos).indexOf("\\end{");
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
682 let nextcurend = text.substr(pos).indexOf("\\end{"+inbegend+"}");
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
683 if (nextcurend<0 || nextendpos!=nextcurend) {
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
684 area.setRangeText("}\n\n\\end{"+inbegend+"}", pos, pos);
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
685 area.selectionStart = pos+2;
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
686 e.preventDefault();
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
687 }
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
688 console.log(inbegend);
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
689
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
690 }
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
691 function helpMarkdownPreview(area) {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
692 if (!mathjax) {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
693 alert("no"+e.target)
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
694 dispInfoMomentary("This board has no MathJax mode.\n"+
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
695 "この掲示板は数式モードOFFです。",
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
696 e.target.parentNode);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
697 return;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
698 }
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
699 let text = area.value;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
700 let preview = document.createElement("div");
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
701 let bp = document.createElement("p");
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
702 let btn = document.createElement("button");
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
703 btn.innerText = "Click or ESC to Dissmiss / クリックかESCで戻る";
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
704 bp.classList.add("c");
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
705 preview.classList.add("pjaxview");
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
706 preview.classList.add("pjaxview2");
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
707 let pre = document.createElement("p");
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
708 bp.appendChild(btn);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
709 preview.appendChild(bp);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
710 preview.appendChild(pre);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
711 pre.innerText = text;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
712 document.body.appendChild(preview);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
713 function dismiss(t) {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
714 history.back();
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
715 preview.remove();
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
716 area.focus();
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
717 }
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
718 preview.addEventListener("click", dismiss, false);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
719 preview.addEventListener("keydown", dismiss, false);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
720 MathJax.typesetPromise([pre]);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
721 pjaxHistoryPush(preview);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
722 btn.focus();
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
723 }
960
0d9caeab3d81 Instant notify by "@all" sign at the beginning of article.
HIROSE Yuuji <yuuji@gentei.org>
parents: 959
diff changeset
724 function helpMarkdownAt(e) {
0d9caeab3d81 Instant notify by "@all" sign at the beginning of article.
HIROSE Yuuji <yuuji@gentei.org>
parents: 959
diff changeset
725 var area = e.target, pos = area.selectionStart;
0d9caeab3d81 Instant notify by "@all" sign at the beginning of article.
HIROSE Yuuji <yuuji@gentei.org>
parents: 959
diff changeset
726 if (pos == 0) {
0d9caeab3d81 Instant notify by "@all" sign at the beginning of article.
HIROSE Yuuji <yuuji@gentei.org>
parents: 959
diff changeset
727 area.value = "@all" + area.value;
0d9caeab3d81 Instant notify by "@all" sign at the beginning of article.
HIROSE Yuuji <yuuji@gentei.org>
parents: 959
diff changeset
728 area.selectionStart = area.selectionEnd = 4;
0d9caeab3d81 Instant notify by "@all" sign at the beginning of article.
HIROSE Yuuji <yuuji@gentei.org>
parents: 959
diff changeset
729 dispInfoMomentary("@all で全員に通知します", area.parentNode);
0d9caeab3d81 Instant notify by "@all" sign at the beginning of article.
HIROSE Yuuji <yuuji@gentei.org>
parents: 959
diff changeset
730 e.preventDefault();
0d9caeab3d81 Instant notify by "@all" sign at the beginning of article.
HIROSE Yuuji <yuuji@gentei.org>
parents: 959
diff changeset
731 }
0d9caeab3d81 Instant notify by "@all" sign at the beginning of article.
HIROSE Yuuji <yuuji@gentei.org>
parents: 959
diff changeset
732 }
852
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
733 function helpMarkdown(e) {
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
734 switch (e.key) {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
735 case "Backspace": helpMarkdownBS(e); break;
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
736 case "Enter": helpMarkdownEnter(e); break;
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
737 case "(": helpMarkdownParen(e); break;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
738 case "p": if (e.metaKey) helpMarkdownPreview(e.target); break;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
739 case "{": helpMarkdownBrace(e); break;
947
b7f9c4ce8cbd Add auto-completion of \begin\end
HIROSE Yuuji <yuuji@gentei.org>
parents: 946
diff changeset
740 case "}": helpMarkdownBraceClose(e); break;
960
0d9caeab3d81 Instant notify by "@all" sign at the beginning of article.
HIROSE Yuuji <yuuji@gentei.org>
parents: 959
diff changeset
741 case "@": helpMarkdownAt(e); break;
852
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
742 }
3e09ac711f69 Renumbering text modified
HIROSE Yuuji <yuuji@gentei.org>
parents: 847
diff changeset
743 }
846
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
744 /* Init event listeners */
837
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
745 function addFileInput() {
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
746 var inpfile = collectElementsByAttr("input", "name", "image");
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
747 if (!inpfile) return;
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
748 var filled = true;
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
749 var i, ih;
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
750 for (i of inpfile) {
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
751 if (! i.value) filled=false;
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
752 }
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
753 if (filled) {
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
754 ih = i.parentNode.innerHTML;
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
755 if (ih) {
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
756 var inpf = ih.substring(ih.indexOf("<input")),
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
757 newi = "<br>"+inpf.substring(0, inpf.indexOf(">")+1);
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
758 i.insertAdjacentHTML("afterend", newi)
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
759 i.nextSibling.nextSibling.addEventListener('change', () => {
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
760 // next==br next.next==input[type=file]
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
761 warnFileSize(document.forms[0]);
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
762 });
837
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
763 }
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
764 }
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
765 }
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
766 function initFileInput() { // Multiplies "input type=file"
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
767 var el, morefile = document.getElementById("morefile");
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
768 if (morefile) {
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
769 for (el of collectElementsByAttr("input", "name", "image")) {
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
770 el.addEventListener("change", function(ev) {
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
771 if (ev.target.value > "" && ev.target.files.length == 1)
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
772 morefile.style.visibility = "visible";
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
773 // No need to hide again, sure?
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
774 });
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
775 }
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
776 morefile.addEventListener("click", addFileInput, null);
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
777 }
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
778 // When renaming, select basename part
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
779 for (el of collectElementsByAttr("input", "class", "mv")) {
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
780 el.addEventListener("focus", function(ev) {
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
781 var i = ev.target;
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
782 if (i) {
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
783 i.setSelectionRange(0, i.value.lastIndexOf("."));
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
784 }
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
785 });
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
786 }
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
787 }
846
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
788 function initTextarea() {
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
789 var te = collectElementsByAttr("textarea", "name", "text");
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
790 if (!te || !te[0]) return;
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
791 te[0].addEventListener("keydown", helpMarkdown, false);
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
792 }
964
759070ee3d20 Replace @all for ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 960
diff changeset
793 function atMarkView(elem) {
759070ee3d20 Replace @all for ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 960
diff changeset
794 // Enclose "@all" with span
759070ee3d20 Replace @all for ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 960
diff changeset
795 for (i of elem.querySelectorAll("td.repl")) {
1001
bbd5a0c50d5b Keep pjaxview in @all post
HIROSE Yuuji <yuuji@gentei.org>
parents: 1000
diff changeset
796 if (i.textContent.startsWith("@all")) {
bbd5a0c50d5b Keep pjaxview in @all post
HIROSE Yuuji <yuuji@gentei.org>
parents: 1000
diff changeset
797 i.firstChild.nodeValue = i.firstChild.nodeValue.substring(4);
bbd5a0c50d5b Keep pjaxview in @all post
HIROSE Yuuji <yuuji@gentei.org>
parents: 1000
diff changeset
798 i.insertAdjacentHTML(
bbd5a0c50d5b Keep pjaxview in @all post
HIROSE Yuuji <yuuji@gentei.org>
parents: 1000
diff changeset
799 'afterbegin', '<div class="atall">@all</div>'
bbd5a0c50d5b Keep pjaxview in @all post
HIROSE Yuuji <yuuji@gentei.org>
parents: 1000
diff changeset
800 );
bbd5a0c50d5b Keep pjaxview in @all post
HIROSE Yuuji <yuuji@gentei.org>
parents: 1000
diff changeset
801 i.classList.add("atall");
964
759070ee3d20 Replace @all for ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 960
diff changeset
802 }
759070ee3d20 Replace @all for ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 960
diff changeset
803 }
759070ee3d20 Replace @all for ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 960
diff changeset
804 return elem;
759070ee3d20 Replace @all for ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 960
diff changeset
805 }
1002
47b3e770372d Auth-ON/OFF button available in all modes
HIROSE Yuuji <yuuji@gentei.org>
parents: 1001
diff changeset
806 var authVisible = false;
969
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
807 function toggleAuthorVisibility(e) {
1002
47b3e770372d Auth-ON/OFF button available in all modes
HIROSE Yuuji <yuuji@gentei.org>
parents: 1001
diff changeset
808 // Click to hideauth button toggles visibility of author columns
969
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
809 e.stopPropagation();
1002
47b3e770372d Auth-ON/OFF button available in all modes
HIROSE Yuuji <yuuji@gentei.org>
parents: 1001
diff changeset
810 let b = document.getElementById("hideauth");
47b3e770372d Auth-ON/OFF button available in all modes
HIROSE Yuuji <yuuji@gentei.org>
parents: 1001
diff changeset
811 if (authVisible) {
969
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
812 for (let i of document.querySelectorAll("td.repatt")) {
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
813 i.classList.remove("hideauthor");
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
814 }
1002
47b3e770372d Auth-ON/OFF button available in all modes
HIROSE Yuuji <yuuji@gentei.org>
parents: 1001
diff changeset
815 authVisible = false;
969
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
816 } else {
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
817 for (let i of document.querySelectorAll("td.repatt")) {
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
818 i.classList.add("hideauthor");
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
819 }
1002
47b3e770372d Auth-ON/OFF button available in all modes
HIROSE Yuuji <yuuji@gentei.org>
parents: 1001
diff changeset
820 authVisible = true;
969
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
821 }
1002
47b3e770372d Auth-ON/OFF button available in all modes
HIROSE Yuuji <yuuji@gentei.org>
parents: 1001
diff changeset
822 b.textContent = b.textContent.replace(/OFF|ON/, authVisible ? "ON" : "OFF");
969
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
823 }
997
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
824 function downloadFile(filename, content, BOM) {
989
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
825 let bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
997
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
826 let str = new Blob(BOM ? [bom, content] : [content],
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
827 {type: "text/csv"});
989
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
828 var uri = URL.createObjectURL(str);
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
829 let a = document.createElement("a");
997
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
830 a.download = (BOM ? "BOM-" : "")+filename;
989
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
831 a.href = uri;
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
832 document.body.appendChild(a);
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
833 a.click();
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
834 document.body.removeChild(a);
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
835 }
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
836 function getTextContentCSV_1(e) {
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
837 let blogtbl = document.querySelector("table.blog_replies");
997
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
838 let needBOM = e.ctrlKey;
989
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
839 if (!blogtbl) return;
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
840 let trw = blogtbl.querySelector("tr.warn"), a;
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
841 if (trw && (a=trw.querySelector("th>a"))) {
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
842 if (a.title == "Show All") {
990
82a624dbb16d Typo fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 989
diff changeset
843 if (window.confirm(`50件以下に表示制限されています。
989
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
844 取得し直しますか?
993
83119d97a2f2 Add English message(CSVget)
HIROSE Yuuji <yuuji@gentei.org>
parents: 992
diff changeset
845 Cancelを押すとこのまま取得します。
83119d97a2f2 Add English message(CSVget)
HIROSE Yuuji <yuuji@gentei.org>
parents: 992
diff changeset
846 Seen articles limited to 50 items.
83119d97a2f2 Add English message(CSVget)
HIROSE Yuuji <yuuji@gentei.org>
parents: 992
diff changeset
847 Push OK to get all articles, Cancel to get only seen articles.`)) {
989
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
848 a.click();
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
849 return;
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
850 }
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
851 }
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
852 }
997
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
853 if (navigator.userAgent.match(/Windows/)) {
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
854 if (!e.ctrlKey && !e.shiftKey && !window.confirm(`Excelで読ませるCSVの場合はBOMが必要です。
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
855 その場合は一度キャンセルして Ctrl キーを押しながらボタンクリックして下さい。
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
856 逆にExcel以外(GoogleスプレッドシートやLibreOfficeや他のツール)で読む場合はBOMをつけるとファイルの1行目の先頭にゴミのようなものが見える場合あるのでそのときは除去する必要があります。
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
857 今後もBOM不要の場合はShiftキーを押しながらクリックして下さい。
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
858 If you feed this CSV into Microsoft Excel, consider adding BOM sequence that can be prepended by pressing Control key with click.
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
859 In this case, click CSVget with ctrl key after Cancel this dialog.
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
860 If you never need BOM, press Shift key with click.`))
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
861 return;
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
862 }
989
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
863 outcsv = []
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
864 for (let row of blogtbl.querySelectorAll("tr[id]")) {
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
865 let tds = row.querySelectorAll("td"),
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
866 a = tds[0].querySelector("a.author"),
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
867 author = a.title,
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
868 name = a.innerText,
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
869 time = tds[0].querySelector("span").title,
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
870 id = tds[1].id,
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
871 body = tds[1].textContent;
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
872 //console.log(`${author},${name},${time},#${id},${body}`);
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
873 outcsv.push({
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
874 "author": author, "name": name, "time": time,
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
875 "id": "#"+id, "body": body});
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
876 }
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
877 let line = new CSV(outcsv, {header:true}).encode(),
992
17cdef0e8767 Remove trailing suffixes from file name(CSVget)
HIROSE Yuuji <yuuji@gentei.org>
parents: 991
diff changeset
878 fn = myurl.replace(/.*\?/, "").replaceAll("+", "-")
17cdef0e8767 Remove trailing suffixes from file name(CSVget)
HIROSE Yuuji <yuuji@gentei.org>
parents: 991
diff changeset
879 .replace(/#.*/, "").replace("-n:all", "");
997
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
880 downloadFile(fn+".csv", line, needBOM);
989
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
881 }
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
882 function getTextContentCSV(e) {
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
883 if (!document.getElementById("csvminjs")) {
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
884 let csvmin = document.createElement("script");
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
885 csvmin.src="https://www.yatex.org/libcache/csv.min.js";
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
886 csvmin.id = "csvminjs";
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
887 // https://stackoverflow.com/questions/14521108/dynamically-load-js-inside-js
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
888 csvmin.addEventListener("load", ()=>{
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
889 getTextContentCSV_1(e)}, 10);
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
890 document.querySelector("head").appendChild(csvmin);
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
891 } else {
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
892 getTextContentCSV_1(e);
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
893 }
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
894 }
659
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
895 function initBlogs() {
837
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
896 // Auto-complete #xxxx
900
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
897 let i, check = collectElementsByAttr("input", "name", "notifyto");
586
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
898 if (check)
900
1fa8b4440f8f Update button changed to ajax
HIROSE Yuuji <yuuji@gentei.org>
parents: 899
diff changeset
899 for (i of check) {
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
900 i.addEventListener("click", insertRedirect, false);
586
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
901 }
906
9f237a8f550d Add eventListener to newly added TR contents
HIROSE Yuuji <yuuji@gentei.org>
parents: 902
diff changeset
902 registInsertDirect(document.querySelectorAll("a[href]"));
911
fe6e6b72de17 Restrict ajax button activation to certain case
HIROSE Yuuji <yuuji@gentei.org>
parents: 910
diff changeset
903 if (myurl.match(/replyblog\+[0-9]/)
fe6e6b72de17 Restrict ajax button activation to certain case
HIROSE Yuuji <yuuji@gentei.org>
parents: 910
diff changeset
904 && document.querySelector("td.repl")) {
fe6e6b72de17 Restrict ajax button activation to certain case
HIROSE Yuuji <yuuji@gentei.org>
parents: 910
diff changeset
905 // There's no need to provide ajax posting when
fe6e6b72de17 Restrict ajax button activation to certain case
HIROSE Yuuji <yuuji@gentei.org>
parents: 910
diff changeset
906 // no replies written to the blog. Therefore we
fe6e6b72de17 Restrict ajax button activation to certain case
HIROSE Yuuji <yuuji@gentei.org>
parents: 910
diff changeset
907 // assign ajax post when td.repl exists.
909
1442d73c55e5 Cannot fire ajax when blog has no articles
HIROSE Yuuji <yuuji@gentei.org>
parents: 907
diff changeset
908 for (i of document.querySelectorAll('input#c[value="送信"]')) {
1442d73c55e5 Cannot fire ajax when blog has no articles
HIROSE Yuuji <yuuji@gentei.org>
parents: 907
diff changeset
909 let b = document.createElement("button");
1442d73c55e5 Cannot fire ajax when blog has no articles
HIROSE Yuuji <yuuji@gentei.org>
parents: 907
diff changeset
910 b.textContent = "送信!";
1442d73c55e5 Cannot fire ajax when blog has no articles
HIROSE Yuuji <yuuji@gentei.org>
parents: 907
diff changeset
911 console.log("b="+b+", tc="+b.textContent);
1442d73c55e5 Cannot fire ajax when blog has no articles
HIROSE Yuuji <yuuji@gentei.org>
parents: 907
diff changeset
912 b.addEventListener("click", ajaxPost, false);
1442d73c55e5 Cannot fire ajax when blog has no articles
HIROSE Yuuji <yuuji@gentei.org>
parents: 907
diff changeset
913 // i.insertAdjacentElement('afterend', b);
910
043748271354 Copy attributes from old POST button to new ajax-post button
HIROSE Yuuji <yuuji@gentei.org>
parents: 909
diff changeset
914 b.setAttribute("class", i.getAttribute("class"))
043748271354 Copy attributes from old POST button to new ajax-post button
HIROSE Yuuji <yuuji@gentei.org>
parents: 909
diff changeset
915 b.setAttribute("title", i.getAttribute("title"))
043748271354 Copy attributes from old POST button to new ajax-post button
HIROSE Yuuji <yuuji@gentei.org>
parents: 909
diff changeset
916 i.parentNode.replaceChild(b, i);
909
1442d73c55e5 Cannot fire ajax when blog has no articles
HIROSE Yuuji <yuuji@gentei.org>
parents: 907
diff changeset
917 b.id = i.id;
914
cfb6247a2266 Add auxiliary submit button
HIROSE Yuuji <yuuji@gentei.org>
parents: 911
diff changeset
918 // i.remove();
cfb6247a2266 Add auxiliary submit button
HIROSE Yuuji <yuuji@gentei.org>
parents: 911
diff changeset
919 i.classList.add("aux");
cfb6247a2266 Add auxiliary submit button
HIROSE Yuuji <yuuji@gentei.org>
parents: 911
diff changeset
920 i.value = "送信(予備)"
cfb6247a2266 Add auxiliary submit button
HIROSE Yuuji <yuuji@gentei.org>
parents: 911
diff changeset
921 b.parentNode.appendChild(i);
909
1442d73c55e5 Cannot fire ajax when blog has no articles
HIROSE Yuuji <yuuji@gentei.org>
parents: 907
diff changeset
922 }
911
fe6e6b72de17 Restrict ajax button activation to certain case
HIROSE Yuuji <yuuji@gentei.org>
parents: 910
diff changeset
923 i = document.getElementById("reload");
fe6e6b72de17 Restrict ajax button activation to certain case
HIROSE Yuuji <yuuji@gentei.org>
parents: 910
diff changeset
924 if (i) i.addEventListener("click", ajaxPost, false);
989
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
925 // Add CSV download button
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
926 let td = document.querySelector("table.bloghead tr td");
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
927 if (td) {
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
928 let btn = document.createElement("button");
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
929 btn.innerText = "CSVget";
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
930 btn.type = "button";
1002
47b3e770372d Auth-ON/OFF button available in all modes
HIROSE Yuuji <yuuji@gentei.org>
parents: 1001
diff changeset
931 btn.accessKey = "g";
47b3e770372d Auth-ON/OFF button available in all modes
HIROSE Yuuji <yuuji@gentei.org>
parents: 1001
diff changeset
932 btn.title = `Shortcut: G
47b3e770372d Auth-ON/OFF button available in all modes
HIROSE Yuuji <yuuji@gentei.org>
parents: 1001
diff changeset
933 見えている書き込みをCSVで取得します
989
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
934 全件表示されていることを確認してから利用して下さい。
997
f7cd4528926b Warning message for BOM fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 993
diff changeset
935 Excelで利用する場合は Ctrl を押しながらクリックして下さい。
989
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
936 Get seen TEXT content as CSV.`;
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
937 btn.addEventListener("click", getTextContentCSV, false);
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
938 let artlink = td.querySelector('a[accesskey="f"]');
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
939 let spacer = document.createElement("span");
991
b563e1ff9e74 CSVget button position fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 990
diff changeset
940 if (artlink) {
b563e1ff9e74 CSVget button position fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 990
diff changeset
941 spacer.innerText = "|";
b563e1ff9e74 CSVget button position fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 990
diff changeset
942 artlink.insertAdjacentElement('beforebegin', btn);
b563e1ff9e74 CSVget button position fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 990
diff changeset
943 artlink.insertAdjacentElement('beforebegin', spacer);
b563e1ff9e74 CSVget button position fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 990
diff changeset
944 } else {
b563e1ff9e74 CSVget button position fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 990
diff changeset
945 spacer.innerText = " ";
b563e1ff9e74 CSVget button position fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 990
diff changeset
946 td.appendChild(spacer);
b563e1ff9e74 CSVget button position fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 990
diff changeset
947 td.appendChild(btn);
b563e1ff9e74 CSVget button position fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 990
diff changeset
948 }
989
964a99fe2fb1 Add CSVget button
HIROSE Yuuji <yuuji@gentei.org>
parents: 987
diff changeset
949 }
911
fe6e6b72de17 Restrict ajax button activation to certain case
HIROSE Yuuji <yuuji@gentei.org>
parents: 910
diff changeset
950 }
902
d9ecb727edcd Code cleaning
HIROSE Yuuji <yuuji@gentei.org>
parents: 901
diff changeset
951 for (i of document.querySelectorAll('input[type="file"]')) {
d9ecb727edcd Code cleaning
HIROSE Yuuji <yuuji@gentei.org>
parents: 901
diff changeset
952 i.addEventListener('change', (e) => {
d9ecb727edcd Code cleaning
HIROSE Yuuji <yuuji@gentei.org>
parents: 901
diff changeset
953 warnFileSize(document.forms[0]);
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
954 }, false)
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
955 }
1002
47b3e770372d Auth-ON/OFF button available in all modes
HIROSE Yuuji <yuuji@gentei.org>
parents: 1001
diff changeset
956 if (i=document.getElementById("hideauth")) {
969
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
957 i.addEventListener('click', toggleAuthorVisibility, false);
b327b5691b59 Add author-hide/show button in quiz mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 964
diff changeset
958 }
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
959 // Hack article_m links
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
960 registPjaxViewers(document.querySelectorAll("a[href]"));
964
759070ee3d20 Replace @all for ajaxpost
HIROSE Yuuji <yuuji@gentei.org>
parents: 960
diff changeset
961 atMarkView(document);
586
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
962 }
659
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
963 function initGrpAction() {
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
964 var rev = document.getElementById("reverse");
667
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
965 if (!rev) return; // Is not grpAction page
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
966 if (rev.tagName.match(/span/i)) {
659
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
967 rev.textContent = " 反転 ";
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
968 rev.addEventListener("click", reverseChecks, null);
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
969 }
667
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
970 var emailbtn = document.getElementById("email");
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
971 emailbtn.addEventListener("click", function(ev){
675
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
972 // Enlarge box and Select user's checkbox
667
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
973 if (!ev.target.checked) return;
673
42bf03cb3712 Enlarge div of form field when bring them visible
HIROSE Yuuji <yuuji@gentei.org>
parents: 667
diff changeset
974 var x = collectElementsByAttr("div", "class", "foldtabs");
42bf03cb3712 Enlarge div of form field when bring them visible
HIROSE Yuuji <yuuji@gentei.org>
parents: 667
diff changeset
975 if (x && x[0] && x[0].style) {
42bf03cb3712 Enlarge div of form field when bring them visible
HIROSE Yuuji <yuuji@gentei.org>
parents: 667
diff changeset
976 x[0].style.height = "10em";
42bf03cb3712 Enlarge div of form field when bring them visible
HIROSE Yuuji <yuuji@gentei.org>
parents: 667
diff changeset
977 }
667
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
978 let myuid = document.getElementById("myuid");
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
979 if (myuid) {
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
980 let usel = collectElementsByAttr("input", "name", "usel");
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
981 if (usel) {
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
982 for (u of usel) {
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
983 if (u.value == myuid.value)
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
984 u.checked = true;
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
985 }
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
986 }
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
987 }
9ee0e242c25a Grp-Message customized for Report-handout
HIROSE Yuuji <yuuji@gentei.org>
parents: 659
diff changeset
988 }, null);
675
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
989 var teamsel = document.getElementById("selteam");
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
990 if (teamsel) {
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
991 var usel, p, team;
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
992 // Select all members of the team
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
993 teamsel.addEventListener("change", function(ev) {
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
994 var teamname = teamsel.value,
676
cd6f0badcff4 \b cannot be used for Japanese boundary...
HIROSE Yuuji <yuuji@gentei.org>
parents: 675
diff changeset
995 selected = new RegExp('(^| )'+teamname+"($|,)");
675
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
996 usel = collectElementsByAttr("input", "name", "usel");
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
997 if (!usel) return;
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
998 for (u of usel) {
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
999 p = u.parentNode; // should be label
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1000 if (!p) continue;
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1001 if (teamname == "TEAM") { // Reset all checks
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1002 u.checked = false; // when "TEAM" is selected
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1003 } else {
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1004 p = p.parentNode.parentNode;// should be tr
987
e71a86651d72 Table in GrpAction page contains userid(localpart) for summary
HIROSE Yuuji <yuuji@gentei.org>
parents: 984
diff changeset
1005 team = nthChildOf(p, 5, "td")
675
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1006 if (team && team.textContent
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1007 && team.textContent.match(selected)) {
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1008 u.checked = true;
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1009 }
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1010 }
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1011 }
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1012 }, null);
9c54908814be Team selection in GrpAction anabled with js
HIROSE Yuuji <yuuji@gentei.org>
parents: 673
diff changeset
1013 }
659
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
1014 }
893
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1015 function dispInfoMomentary(msg, elem) {
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1016 // Momentarily display MSG in tooltip-baloon relative to ELEM element.
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1017 let help = document.createElement("p");
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1018 elem.style.position = 'relative';
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1019 elem.style.overflow = 'visible';
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1020 help.setAttribute("class", "info-tooltip");
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1021 help.innerHTML = msg;
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1022 elem.appendChild(help);
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1023 setTimeout(() => {
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1024 help.classList.add("dissolving");
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1025 setTimeout(() => help.remove(), 3000);
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1026 }, 1000);
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1027 }
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1028 function initGrphome() {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1029 console.log("initGrphome");
894
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1030 // (1)Setup Frozen State Changing Button
893
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1031 var ja = navigator.language.match(/ja/i);
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1032
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1033 function toggleFrozen(e, rowid) {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1034 let tgt = mypath+"?blog_setfrozen+"+rowid;
893
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1035 let td = e.target.parentNode;
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1036 let tr = td.parentNode;
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1037 fetch(tgt, {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1038 method: "POST",
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1039 headers: {'Content-Type': 'text/html; charset=utf-8'},
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
1040 credentials: "include"
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1041 }).then(function(resp) {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1042 return resp.text();
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1043 }).then(function(tbody) {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1044 try {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1045 var json = JSON.parse(tbody);
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1046 } catch (e) {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1047 return;
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1048 }
893
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1049 let state = json.state, newstate, info;
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1050 if (json.alert) {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1051 alert(json.alert)
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1052 }
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1053 if (state.match(/frozen/i)) {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1054 newstate = "凍結";
893
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1055 info = ja ? newstate+"に設定しました" : 'Set Frozen';
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1056 } else {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1057 newstate = null;
893
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1058 info = ja ? '稼動に設定しました' : 'Set Running';
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1059 }
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1060 tr.setAttribute("class", newstate);
893
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1061 dispInfoMomentary(info, td);
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1062 });
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1063 }
894
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1064 let btn = document.querySelectorAll("button.toggle-frozen");
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1065 for (let b of btn) {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1066 let rowid = null;
893
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1067 let td=b.parentNode, tr = td.parentNode, fr, ru;
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1068 ru = ja ? "動" : "Running";
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1069 fr = ja ? "凍" : "Frozen";
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1070 b.setAttribute('frozen-marker', fr);
c1a5d137740d Display momentary information of frozen state change
HIROSE Yuuji <yuuji@gentei.org>
parents: 889
diff changeset
1071 b.setAttribute('running-marker', ru);
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1072 for (let a of tr.querySelectorAll("a[href]")) {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1073 if (a.getAttribute("href").match(/\?replyblog\+([0-9]+)/)) {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1074 rowid = parseInt(RegExp.$1);
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1075 break;
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1076 }
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1077 }
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1078 if (rowid && rowid>0) {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1079 b.addEventListener("click", function(e) {
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1080 if (!btn) return;
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1081 toggleFrozen(e, rowid);
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1082 }, false);
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1083 b.setAttribute("title", "稼動/凍結をその場で切り替えます\n\
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1084 Toggle Running/Frozen ("+rowid+")");
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1085 }
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1086 }
894
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1087 // (2)Setup Column Collapse Button
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1088 // INCOMPLETE: Cannot restore original state, but it's enough...
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1089 function toggleColmnWidth(th) {
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1090 let tbl = document.querySelector("table.dumpblogs");
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1091 let colname = th.textContent, newwidth;
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1092 if (th.style.width) {
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1093 newwidth = null
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1094 // https://developer.mozilla.org/ja/docs/Web/CSS/table-layout
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1095 tbl.style.tableLayout = 'auto';
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1096 tbl.style.width = null;
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1097 } else {
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1098 newwidth = "2em";
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1099 tbl.style.tableLayout = 'fixed';
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1100 tbl.style.width = '100%';
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1101 }
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1102 th.style.width = newwidth;
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1103 th.style.overflow = "hidden";
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1104 for (let td of document.querySelectorAll("td."+colname)) {
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1105 console.log(td.tagName);
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1106 td.style.width = newwidth;
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1107 console.log(td.style.width);
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1108 }
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1109 }
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1110 let row1 = document.querySelector("table.dumpblogs tr:first-child");
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1111 if (row1) {
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1112 let heads = row1.querySelectorAll("th");
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1113 for (let h of heads) {
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1114 h.addEventListener("click", function(e) {
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1115 toggleColmnWidth(h);
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1116 }, false);
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1117 h.setAttribute("title", "Click to shrink these columns");
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1118 }
1dc4007d7c20 Shrink columns
HIROSE Yuuji <yuuji@gentei.org>
parents: 893
diff changeset
1119 }
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1120 }
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1121 function initMath() {
959
193d9d2ed9c9 Avoid "not defined" exception for MathJax
HIROSE Yuuji <yuuji@gentei.org>
parents: 954
diff changeset
1122 mathjax = window.MathJax||document.getElementById("mathjax");
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1123 if (!mathjax) return;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1124 let ta = document.querySelector("textarea");
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1125 if (!ta) return;
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1126 let btn = document.createElement("button");
954
ab78a6e229a6 Add some macros for MathJax
HIROSE Yuuji <yuuji@gentei.org>
parents: 949
diff changeset
1127 btn.setAttribute("title", "\\( と \\) で数式利用\n"+
ab78a6e229a6 Add some macros for MathJax
HIROSE Yuuji <yuuji@gentei.org>
parents: 949
diff changeset
1128 "\\[ と \\] で段組み数式モード\n"+
ab78a6e229a6 Add some macros for MathJax
HIROSE Yuuji <yuuji@gentei.org>
parents: 949
diff changeset
1129 "便利なマクロ:\n"+
ab78a6e229a6 Add some macros for MathJax
HIROSE Yuuji <yuuji@gentei.org>
parents: 949
diff changeset
1130 " \\boxed{aaa}, \\fcolorbox{framecolor}{bgcolor}{text}\n"+
ab78a6e229a6 Add some macros for MathJax
HIROSE Yuuji <yuuji@gentei.org>
parents: 949
diff changeset
1131 " \\underline{aaa}, \\fcolorbox{framecolor}{bgcolor}{text}\n"+
ab78a6e229a6 Add some macros for MathJax
HIROSE Yuuji <yuuji@gentei.org>
parents: 949
diff changeset
1132 "独自定義マクロ:\n"+
ab78a6e229a6 Add some macros for MathJax
HIROSE Yuuji <yuuji@gentei.org>
parents: 949
diff changeset
1133 " \\warn{xxx} 注意喚起用色付き枠\n"+
ab78a6e229a6 Add some macros for MathJax
HIROSE Yuuji <yuuji@gentei.org>
parents: 949
diff changeset
1134 " \\Warn{xxx} 大きな文字で注意喚起")
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1135 btn.innerHTML = "MathJax<br>Preview";
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1136 btn.addEventListener('click', (e) => {
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1137 e.preventDefault();
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1138 ta.focus();
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1139 helpMarkdownPreview(ta);
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1140 });
949
d8a258cc8a7d Insert-position of MathJax Preview button changed
HIROSE Yuuji <yuuji@gentei.org>
parents: 948
diff changeset
1141 ta.parentNode.appendChild(btn);
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1142 }
981
eb51a80f73c2 Divide task of ReplyHover()
HIROSE Yuuji <yuuji@gentei.org>
parents: 980
diff changeset
1143 function rewriteReplyHover(unit) {
973
072362c47306 Add author to hover text
HIROSE Yuuji <yuuji@gentei.org>
parents: 972
diff changeset
1144 function getTextById(id) {
974
39ef64b5654d Check ID existence
HIROSE Yuuji <yuuji@gentei.org>
parents: 973
diff changeset
1145 let repltd = document.getElementById(id);
39ef64b5654d Check ID existence
HIROSE Yuuji <yuuji@gentei.org>
parents: 973
diff changeset
1146 if (repltd) {
39ef64b5654d Check ID existence
HIROSE Yuuji <yuuji@gentei.org>
parents: 973
diff changeset
1147 let txt = repltd.innerText,
39ef64b5654d Check ID existence
HIROSE Yuuji <yuuji@gentei.org>
parents: 973
diff changeset
1148 authtd = repltd.parentNode.getElementsByTagName("td")[0],
976
ae6c5df09f22 Add class="author" to link of author
HIROSE Yuuji <yuuji@gentei.org>
parents: 975
diff changeset
1149 author = authtd.querySelector("a.author").innerText,
974
39ef64b5654d Check ID existence
HIROSE Yuuji <yuuji@gentei.org>
parents: 973
diff changeset
1150 digest = txt.split("\n").splice(0, hoverTextLines).join("\n");
984
a094bd547d6b Escape chars in hover string
HIROSE Yuuji <yuuji@gentei.org>
parents: 982
diff changeset
1151 return escapeChars("[[ "+author+" ]]\n"+digest);
974
39ef64b5654d Check ID existence
HIROSE Yuuji <yuuji@gentei.org>
parents: 973
diff changeset
1152 } else
39ef64b5654d Check ID existence
HIROSE Yuuji <yuuji@gentei.org>
parents: 973
diff changeset
1153 return "";
972
8781f341d93a Add referring text to hover title of ">#xxxx" marks.
HIROSE Yuuji <yuuji@gentei.org>
parents: 969
diff changeset
1154 }
975
ec5cb1790119 Apply referring hover to td ajax-posted
HIROSE Yuuji <yuuji@gentei.org>
parents: 974
diff changeset
1155 unit = unit||document;
ec5cb1790119 Apply referring hover to td ajax-posted
HIROSE Yuuji <yuuji@gentei.org>
parents: 974
diff changeset
1156 for (let td of unit.querySelectorAll("td.repl")) {
1000
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1157 let firstC = td.firstChild;
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1158 // Direct replacing innerHTML breaks embedded DOM event handlers.
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1159 // So, we split td.repl into elements and replace the first
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1160 // textNode(nodeType==3) with hover-text embeded content.
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1161 if (firstC.nodeType==3 && firstC.nodeValue.startsWith(">#")) {
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1162 let newline = firstC.nodeValue.indexOf("\n");
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1163 let firstline;
979
084326d5ba19 FIX: JS return -1 when string-search fails...
HIROSE Yuuji <yuuji@gentei.org>
parents: 978
diff changeset
1164 if (newline > 0) {
1000
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1165 firstline = firstC.nodeValue.substring(0, 1+newline);
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1166 firstC.nodeValue = firstC.nodeValue.substring(1+newline);
977
eb0ffd3b37c0 Fix for single line reply
HIROSE Yuuji <yuuji@gentei.org>
parents: 976
diff changeset
1167 } else {
1000
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1168 // Cannot be reached here, but leave this for robustness
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1169 firstline = firstC.nodeValue;
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1170 firstC.nodeValue = "";
977
eb0ffd3b37c0 Fix for single line reply
HIROSE Yuuji <yuuji@gentei.org>
parents: 976
diff changeset
1171 }
1000
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1172 td.insertAdjacentHTML(
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1173 'afterbegin',
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1174 escapeChars(firstline).replace(
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1175 /#([0-9]+)/g,
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1176 (match, start, whole) => {
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1177 let id = RegExp.$1
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1178 return '<a title="' + getTextById(id)
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1179 + '" href="' + match
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1180 + '">' + match + '</a>';
ddf85e80f64e Hover text for reply marks were breaking pjax view, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 997
diff changeset
1181 }));
972
8781f341d93a Add referring text to hover title of ">#xxxx" marks.
HIROSE Yuuji <yuuji@gentei.org>
parents: 969
diff changeset
1182 }
8781f341d93a Add referring text to hover title of ">#xxxx" marks.
HIROSE Yuuji <yuuji@gentei.org>
parents: 969
diff changeset
1183 }
8781f341d93a Add referring text to hover title of ">#xxxx" marks.
HIROSE Yuuji <yuuji@gentei.org>
parents: 969
diff changeset
1184 }
981
eb51a80f73c2 Divide task of ReplyHover()
HIROSE Yuuji <yuuji@gentei.org>
parents: 980
diff changeset
1185 function initReplyHover(unit) {
982
f5a7fbd6c0d0 Add reference URL in a comment
HIROSE Yuuji <yuuji@gentei.org>
parents: 981
diff changeset
1186 // https://stackoverflow.com/questions/60154233/event-when-typesetting-is-done-mathjax-3
981
eb51a80f73c2 Divide task of ReplyHover()
HIROSE Yuuji <yuuji@gentei.org>
parents: 980
diff changeset
1187 if (mathjax && MathJax.startup)
eb51a80f73c2 Divide task of ReplyHover()
HIROSE Yuuji <yuuji@gentei.org>
parents: 980
diff changeset
1188 MathJax.startup.promise.then(()=>rewriteReplyHover());
eb51a80f73c2 Divide task of ReplyHover()
HIROSE Yuuji <yuuji@gentei.org>
parents: 980
diff changeset
1189 else
eb51a80f73c2 Divide task of ReplyHover()
HIROSE Yuuji <yuuji@gentei.org>
parents: 980
diff changeset
1190 rewriteReplyHover();
eb51a80f73c2 Divide task of ReplyHover()
HIROSE Yuuji <yuuji@gentei.org>
parents: 980
diff changeset
1191 }
659
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
1192 function init() {
898
411ce55c0dae AJAX posting and PJAX file-viewer initially introduced.
HIROSE Yuuji <yuuji@gentei.org>
parents: 894
diff changeset
1193 isOlderJS = !("insertAdjacentElement" in document.body);
659
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
1194 initGrpAction();
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
1195 initBlogs();
837
a6462eea48be Multiple files upload for tablets added and file renaming fixed
HIROSE Yuuji <yuuji@gentei.org>
parents: 676
diff changeset
1196 initFileInput();
846
9c4e16c173db Add support for small help on describing markdown
HIROSE Yuuji <yuuji@gentei.org>
parents: 837
diff changeset
1197 initTextarea();
889
5843755e3b30 The beginning of AJAX operations
HIROSE Yuuji <yuuji@gentei.org>
parents: 852
diff changeset
1198 initGrphome();
946
420ad90116e6 MathJax preview initial version
HIROSE Yuuji <yuuji@gentei.org>
parents: 945
diff changeset
1199 initMath();
981
eb51a80f73c2 Divide task of ReplyHover()
HIROSE Yuuji <yuuji@gentei.org>
parents: 980
diff changeset
1200 initReplyHover();
659
a36a2c3b3056 GrpAction: Reverse selection and supplemental rcpt address
HIROSE Yuuji <yuuji@gentei.org>
parents: 590
diff changeset
1201 }
586
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1202 document.addEventListener('DOMContentLoaded', init, null);
a03bfd5d242a First trial of js interaction.
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1203 })();

yatex.org