s4

changeset 667:9ee0e242c25a

Grp-Message customized for Report-handout
author HIROSE Yuuji <yuuji@gentei.org>
date Tue, 12 May 2020 10:28:44 +0900
parents 453f8a114af9
children 84b26e6e4d79
files examples/common/default/default.css s4-funcs.sh s4-main.js
diffstat 3 files changed, 71 insertions(+), 41 deletions(-) [+]
line diff
     1.1 --- a/examples/common/default/default.css	Tue May 12 08:08:04 2020 +0900
     1.2 +++ b/examples/common/default/default.css	Tue May 12 10:28:44 2020 +0900
     1.3 @@ -178,10 +178,13 @@
     1.4      display: block; background: #fadede;
     1.5      height: auto; opacity: 1.0; transition: 1s;
     1.6  }
     1.7 -input.fold ~ *.folded {opacity: 0;}
     1.8 -input[type="checkbox"].fold:checked ~ *.folded {
     1.9 +input.fold + label + *.folded {opacity: 0; display: none; hight: 0;}
    1.10 +input[type="checkbox"].fold:checked + label + *.folded {
    1.11      opacity: 1.0; transition: 2s;
    1.12  }
    1.13 +input[type="checkbox"].fold:checked + label + div.folded {
    1.14 +    display: block; hight: auto; transition: 2s;
    1.15 +}
    1.16  
    1.17  /* fold2!! */
    1.18  div.foldtabs {
     2.1 --- a/s4-funcs.sh	Tue May 12 08:08:04 2020 +0900
     2.2 +++ b/s4-funcs.sh	Tue May 12 10:28:44 2020 +0900
     2.3 @@ -40,6 +40,7 @@
     2.4  filesize_max=$((5*1024*1024))
     2.5  filesize_max_MB="$((filesize_max/1024/1024))MB"
     2.6  file_accept='accept="image/*,text/*,audio/*,application/vnd.oasis.*,application/pdf,application/x-*"'
     2.7 +file_accept='accept=".jpg,.jpeg,.gif,.png,.tiff,.pdf,.odt,.ods,.odp,.odg,.mp3,.mp4,.avi,.ogg,.mov,.webm,.gpx,.json,.geojson,.kml,.html,.css,.rb,.c,.txt,.zip,.xcf,.bz2,.gz,.xz,.7z,.csv,.dat"'
     2.8  file_accept_egrep='^(text/|message/|image/|audio/|video/|application/(vnd.oasis|pdf|epub|xml|zip|[xz]-))'
     2.9  file_accept_help="
    2.10  添付可能ファイル: テキスト、画像、音声、動画、ODF、PDF、
    2.11 @@ -1426,6 +1427,10 @@
    2.12    sql="SELECT DISTINCT name FROM user WHERE rowid IN ($uids);"
    2.13    email4group "$g" `query "$sql"`
    2.14  }
    2.15 +myemail4group() {
    2.16 +  # Get my email address for $1-specified group
    2.17 +  email4group "$1" "$user" | sed -e 1q -e 's/[ ,].*//'
    2.18 +}
    2.19  collectmembersbyid() {
    2.20    # Collect user names of group specified by grid
    2.21    rid=${1%%[!0-9]*}		# Cleaning
    2.22 @@ -2586,6 +2591,7 @@
    2.23    err GRP_ACTION:IN
    2.24    grid=${1:-`getpar grp`}
    2.25    grp=`getgroupbyid "$grid"`
    2.26 +  myuid=`query "SELECT rowid FROM user WHERE name='$user';"`
    2.27    if [ -z "$grp" ]; then
    2.28      echo "無効な指定です。" | html p; return
    2.29    fi
    2.30 @@ -2646,24 +2652,21 @@
    2.31  	return 0
    2.32        fi
    2.33        gecos=`gecos $user`
    2.34 -      mkfrom=`getpar mkfrom`
    2.35 -      if [ x"$mkfrom" = x"yes" ]; then
    2.36 -	safegc=`echo "$gecos" | tr -d '<>@'`
    2.37 -	myuid=`query "SELECT rowid FROM user WHERE name='$user';"`
    2.38 -	fromad=`email4groupbyuid "$grp" "$myuid" | sed -e 1q -e 's/[ ,].*//'`
    2.39 -	mail_from="$safegc <$fromad>"
    2.40 -	replyto=$fromad
    2.41 -      else
    2.42 -	mail_from="$noreply_from"
    2.43 -      fi
    2.44 -      ar=`getpar supprcpt`
    2.45 -      if [ -n "$ar" -a -n `getpar suppck` ]; then
    2.46 -	for a in $ar; do
    2.47 -	  checkdomain "$a" && supprcpt="$supprcpt $a"
    2.48 -	done
    2.49 -      fi
    2.50 +      safegc=`echo "$gecos" | tr -d '<>@'`
    2.51 +      #fromad=`email4groupbyuid "$grp" "$myuid" | sed -e 1q -e 's/[ ,].*//'`
    2.52 +      fromad=`myemail4group "$grp"`
    2.53 +      mail_from="$safegc <$fromad>"
    2.54 +      replyto=$fromad
    2.55 +      
    2.56        ## Start parse of attachment files
    2.57 -      if [ -n `getpar attach` ]; then
    2.58 +      if [ -n "`getpar email`" ]; then
    2.59 +	ar=`getpar supprcpt`
    2.60 +	if [ -n "$ar" -a -n "`getpar suppck`" ]; then
    2.61 +	  for a in $ar; do
    2.62 +	    checkdomain "$a" && supprcpt="$supprcpt $a"
    2.63 +	  done
    2.64 +	fi
    2.65 +	subj=`getpar subject`
    2.66  	afiles=""
    2.67  	for fn in `query "SELECT DISTINCT val FROM par WHERE var='files';"`
    2.68  	do
    2.69 @@ -2672,10 +2675,18 @@
    2.70  	    afiles=$afiles"${afiles:+ }$f"
    2.71  	  fi
    2.72  	done
    2.73 +      else
    2.74 +	preface=$(cat <<-EOF
    2.75 +	$url
    2.76 +	のグループ「$grp」のメンバーである $gecos さんから、
    2.77 +	あなた宛のメッセージです。
    2.78 +	----------------------------------------------------------
    2.79 +	EOF
    2.80 +	)
    2.81        fi
    2.82        ## SENDER=$noreply \ # Should not SENDER be set to $noreply??
    2.83        rcpts="`email4groupbyuid "$grp" $usel` $user$supprcpt"
    2.84 -      subj="$gecos さんからのメッセージ"
    2.85 +      subj="${subj:-$gecos さんからのメッセージ}"
    2.86        REPLYTO=$replyto
    2.87        MAIL_FROM=$mail_from
    2.88        if [ -n "$afiles" ];then
    2.89 @@ -2683,11 +2694,7 @@
    2.90        else
    2.91  	smail "$rcpts" "$subj"
    2.92        fi <<EOF
    2.93 -$url
    2.94 -のグループ「$grp」のメンバーである $gecos さんから、
    2.95 -あなた宛へのメッセージです。
    2.96 -----------------------------------------------------------
    2.97 -$text
    2.98 +${preface:+$preface$nl}$text
    2.99  EOF
   2.100        if [ $? = 0 ]; then
   2.101  	echo "Note: 以下のメンバーにメッセージを送信しました。" | html p
   2.102 @@ -2834,25 +2841,30 @@
   2.103  `cgi_radio rm send id="sendmsg"`<label
   2.104   for="sendmsg" title="Direct Message">DM送信</label>
   2.105  <div>
   2.106 -`cgi_checkbox mkfrom yes 'id="mkfrom" checked'`<label for="mkfrom"
   2.107 ->差出人を自分に(チェックを外すと相手が返事できない)</label><br>
   2.108 -<input type="checkbox" name="suppck" id="supp" class="fold"><label for="supp"
   2.109 ->宛先追加(通常空欄)</label>
   2.110 -<span class="folded">`cgi_text supprcpt`[実験中](下記一覧の1人以上選択しないと無効)</span>
   2.111 -<div>`cgi_textarea text "" cols=72`</div>
   2.112 -<div>
   2.113 -<input type="checkbox" name="attach" id="atta" class="fold"><label for="atta"
   2.114 ->ファイル添付</label>
   2.115 -<span class="folded">`cgi_file files "" multiple`[実験中]</span></div>
   2.116 +`cgi_checkbox email yes 'id="email" class="fold"'`<label for="email"
   2.117 +>email書式を使う</label>
   2.118 +<div class="folded">
   2.119 +<table>
   2.120 +<tr><td>From: </td><td>`myemail4group "$grp"`</td></tr>
   2.121 +<tr><td>Subject: </td><td>`cgi_text subject`</td></tr>
   2.122 +<tr><td>追加宛先(通常空欄): </td><td>`cgi_text supprcpt ""`</td></tr>
   2.123 +<tr><td>ファイル添付: </td>
   2.124 +    <td>`cgi_file files "" "multiple $file_accept title=\"$file_accept_help\""`<br><small>文書ファイルはPDFに変換してから</small></td></tr>
   2.125 +</table>
   2.126 +<p>(下記一覧から1人以上選択していない場合は送れません`cgi_submit 確認後送信`)</p>
   2.127 +</div>
   2.128 +<div>本文:`cgi_textarea text "" cols=72`
   2.129 +</div>
   2.130  </div>
   2.131  ${isowner:+$cmmsg$excmsg}
   2.132 -`cgi_radio rm close id="x"`<label for="x">×</label>
   2.133 +`cgi_radio rm close id="x"`<label for="x" accesskey="x">×</label>
   2.134  </div>
   2.135  <h4>$grp 参加者一覧</h4>$fromtonote
   2.136  <table class="td2r thl">
   2.137  `sq $db -header -html "$sql"`
   2.138  </table>
   2.139  `cgi_hidden grp $grid`
   2.140 +`cgi_hidden myuid $myuid id="myuid"`
   2.141  EOF
   2.142  }
   2.143  crview4article() { # $1=rowid of blog, $2(optional)=extra SQL
     3.1 --- a/s4-main.js	Tue May 12 08:08:04 2020 +0900
     3.2 +++ b/s4-main.js	Tue May 12 10:28:44 2020 +0900
     3.3 @@ -1,10 +1,10 @@
     3.4  (function (){
     3.5 -    function collectElementsByNameAttr(elm, name) {
     3.6 +    function collectElementsByAttr(elm, attr, val) {
     3.7  	var e = document.getElementsByTagName(elm);
     3.8  	if (!e) return null;
     3.9  	var list = [];
    3.10  	for (var i of e) {
    3.11 -	    if (i.getAttribute("name") == name)
    3.12 +	    if (i.getAttribute(attr) == val)
    3.13  		list.push(i)
    3.14  	}
    3.15  	return list;
    3.16 @@ -55,13 +55,13 @@
    3.17  	}
    3.18      }
    3.19      function reverseChecks() {
    3.20 -	var names = collectElementsByNameAttr("input", "usel");
    3.21 +	var names = collectElementsByAttr("input", "name", "usel");
    3.22  	for (let u of names) {
    3.23  	    u.checked = !u.checked;
    3.24  	}
    3.25      }
    3.26      function initBlogs() {
    3.27 -	var el, check = collectElementsByNameAttr("input", "notifyto");
    3.28 +	var el, check = collectElementsByAttr("input", "name", "notifyto");
    3.29  	if (check)
    3.30  	    for (let i of check) {
    3.31  		i.addEventListener("click", insertRedirect, null);
    3.32 @@ -73,10 +73,25 @@
    3.33      }
    3.34      function initGrpAction() {
    3.35  	var rev = document.getElementById("reverse");
    3.36 -	if (rev && rev.tagName.match(/span/i)) {
    3.37 +	if (!rev) return;	// Is not grpAction page
    3.38 +	if (rev.tagName.match(/span/i)) {
    3.39  	    rev.textContent = " 反転 ";
    3.40  	    rev.addEventListener("click", reverseChecks, null);
    3.41  	}
    3.42 +	var emailbtn = document.getElementById("email");
    3.43 +	emailbtn.addEventListener("click", function(ev){
    3.44 +	    if (!ev.target.checked) return;
    3.45 +	    let myuid = document.getElementById("myuid");
    3.46 +	    if (myuid) {
    3.47 +		let usel = collectElementsByAttr("input", "name", "usel");
    3.48 +		if (usel) {
    3.49 +		    for (u of usel) {
    3.50 +			if (u.value == myuid.value)
    3.51 +			    u.checked = true;
    3.52 +		    }
    3.53 +		}
    3.54 +	    }
    3.55 +	}, null);
    3.56      }
    3.57      function init() {
    3.58  	initGrpAction();