s4

annotate s4-main.js @ 586:a03bfd5d242a

First trial of js interaction. Reply checkbox inserts/removes redirection mark.
author HIROSE Yuuji <yuuji@gentei.org>
date Fri, 16 Aug 2019 09:48:19 +0900
parents
children f480fa97fba6
rev   line source
yuuji@586 1 (function (){
yuuji@586 2 function collectElementsByNameAttr(elm, name) {
yuuji@586 3 var e = document.getElementsByTagName(elm);
yuuji@586 4 if (!e) return null;
yuuji@586 5 var list = [];
yuuji@586 6 for (var i of e) {
yuuji@586 7 if (i.getAttribute("name") == name)
yuuji@586 8 list.push(i)
yuuji@586 9 }
yuuji@586 10 return list;
yuuji@586 11 }
yuuji@586 12 function insertRedirect(e) {
yuuji@586 13 var articleId, textarea = document.getElementById("text");
yuuji@586 14 var p = e.target, checked = p.checked;
yuuji@586 15 while (p = p.parentNode)
yuuji@586 16 if (p.nodeName.match(/^td$/i)) break;
yuuji@586 17 if (!p) return;
yuuji@586 18 while (p = p.nextSibling)
yuuji@586 19 if (p.nodeName.match(/^td$/i)) break;
yuuji@586 20 if (!p) return;
yuuji@586 21 articleId = p.getAttribute("id");
yuuji@586 22 if (textarea && articleId) {
yuuji@586 23 var tv = textarea.value, lines;
yuuji@586 24 if (tv)
yuuji@586 25 lines = tv.split("\n");
yuuji@586 26 else
yuuji@586 27 lines = [""];
yuuji@586 28 var re = new RegExp("[, ]*#"+articleId+"(?![0-9])");
yuuji@586 29 if (checked) {
yuuji@586 30 if (!lines[0].match(re)) {
yuuji@586 31 var re2 = new RegExp(/>#[#0-9, ]+[0-9]/);
yuuji@586 32 if (lines[0].match(re2))
yuuji@586 33 lines[0] = lines[0].replace(
yuuji@586 34 re2, '$&, '+'#'+articleId);
yuuji@586 35 else {
yuuji@586 36 if (lines[0] > "") lines[0] = " "+lines[0];
yuuji@586 37 lines[0] = ">#"+articleId+lines[0];
yuuji@586 38 }
yuuji@586 39 }
yuuji@586 40 } else { // Remove #xxxxx
yuuji@586 41 if (lines[0].match(/^>#[0-9 ,]+#/)) // 2 or more #id's
yuuji@586 42 lines[0] = lines[0].replace(
yuuji@586 43 new RegExp("^>#"+articleId+"[ ,]*"), ">").replace(
yuuji@586 44 new RegExp("[ ,]*#"+articleId), "");
yuuji@586 45 else {
yuuji@586 46 lines[0] = lines[0].replace(
yuuji@586 47 new RegExp(">#"+articleId+"[ ,]*"), "");
yuuji@586 48 }
yuuji@586 49 }
yuuji@586 50 lines[0] = lines[0].replace(/^> *$/, '');
yuuji@586 51 textarea.value = lines.join("\n");
yuuji@586 52 }
yuuji@586 53 }
yuuji@586 54 function init(){
yuuji@586 55 var el, check = collectElementsByNameAttr("input", "notifyto");
yuuji@586 56 if (check)
yuuji@586 57 for (var i of check) {
yuuji@586 58 i.addEventListener("click", insertRedirect, null);
yuuji@586 59 }
yuuji@586 60 }
yuuji@586 61 document.addEventListener('DOMContentLoaded', init, null);
yuuji@586 62 })();