s4

annotate s4-main.js @ 673:42bf03cb3712

Enlarge div of form field when bring them visible
author HIROSE Yuuji <yuuji@gentei.org>
date Wed, 13 May 2020 07:30:55 +0900
parents 9ee0e242c25a
children 9c54908814be
rev   line source
yuuji@586 1 (function (){
yuuji@667 2 function collectElementsByAttr(elm, attr, val) {
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@667 7 if (i.getAttribute(attr) == val)
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@590 29 checked = (p.nodeName.match(/^input$/)
yuuji@590 30 ? p.checked // checkbox obeys its status
yuuji@590 31 : !lines[0].match(re)) // a-elment toggles redirection
yuuji@586 32 if (checked) {
yuuji@586 33 if (!lines[0].match(re)) {
yuuji@586 34 var re2 = new RegExp(/>#[#0-9, ]+[0-9]/);
yuuji@586 35 if (lines[0].match(re2))
yuuji@586 36 lines[0] = lines[0].replace(
yuuji@586 37 re2, '$&, '+'#'+articleId);
yuuji@586 38 else {
yuuji@586 39 if (lines[0] > "") lines[0] = " "+lines[0];
yuuji@586 40 lines[0] = ">#"+articleId+lines[0];
yuuji@586 41 }
yuuji@586 42 }
yuuji@586 43 } else { // Remove #xxxxx
yuuji@586 44 if (lines[0].match(/^>#[0-9 ,]+#/)) // 2 or more #id's
yuuji@586 45 lines[0] = lines[0].replace(
yuuji@586 46 new RegExp("^>#"+articleId+"[ ,]*"), ">").replace(
yuuji@586 47 new RegExp("[ ,]*#"+articleId), "");
yuuji@586 48 else {
yuuji@586 49 lines[0] = lines[0].replace(
yuuji@586 50 new RegExp(">#"+articleId+"[ ,]*"), "");
yuuji@586 51 }
yuuji@586 52 }
yuuji@586 53 lines[0] = lines[0].replace(/^> *$/, '');
yuuji@586 54 textarea.value = lines.join("\n");
yuuji@586 55 }
yuuji@586 56 }
yuuji@659 57 function reverseChecks() {
yuuji@667 58 var names = collectElementsByAttr("input", "name", "usel");
yuuji@659 59 for (let u of names) {
yuuji@659 60 u.checked = !u.checked;
yuuji@659 61 }
yuuji@659 62 }
yuuji@659 63 function initBlogs() {
yuuji@667 64 var el, check = collectElementsByAttr("input", "name", "notifyto");
yuuji@586 65 if (check)
yuuji@590 66 for (let i of check) {
yuuji@586 67 i.addEventListener("click", insertRedirect, null);
yuuji@586 68 }
yuuji@590 69 for (let i of document.getElementsByTagName("a"))
yuuji@590 70 if (i.getAttribute("href").match(/^#[0-9]+$/))
yuuji@590 71 if (RegExp.lastMatch == i.innerHTML)
yuuji@590 72 i.addEventListener("click", insertRedirect, null)
yuuji@586 73 }
yuuji@659 74 function initGrpAction() {
yuuji@659 75 var rev = document.getElementById("reverse");
yuuji@667 76 if (!rev) return; // Is not grpAction page
yuuji@667 77 if (rev.tagName.match(/span/i)) {
yuuji@659 78 rev.textContent = " 反転 ";
yuuji@659 79 rev.addEventListener("click", reverseChecks, null);
yuuji@659 80 }
yuuji@667 81 var emailbtn = document.getElementById("email");
yuuji@667 82 emailbtn.addEventListener("click", function(ev){
yuuji@667 83 if (!ev.target.checked) return;
yuuji@673 84 var x = collectElementsByAttr("div", "class", "foldtabs");
yuuji@673 85 if (x && x[0] && x[0].style) {
yuuji@673 86 x[0].style.height = "10em";
yuuji@673 87 }
yuuji@667 88 let myuid = document.getElementById("myuid");
yuuji@667 89 if (myuid) {
yuuji@667 90 let usel = collectElementsByAttr("input", "name", "usel");
yuuji@667 91 if (usel) {
yuuji@667 92 for (u of usel) {
yuuji@667 93 if (u.value == myuid.value)
yuuji@667 94 u.checked = true;
yuuji@667 95 }
yuuji@667 96 }
yuuji@667 97 }
yuuji@667 98 }, null);
yuuji@659 99 }
yuuji@659 100 function init() {
yuuji@659 101 initGrpAction();
yuuji@659 102 initBlogs();
yuuji@659 103 }
yuuji@586 104 document.addEventListener('DOMContentLoaded', init, null);
yuuji@586 105 })();