annotate s4-main.js @ 997:f7cd4528926b draft

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

yatex.org