Changes for page 学校ページ テンプレート
Last modified by Super Admin on 2026/04/05 18:59
From version
62.1
edited by Super Admin
on 2026/03/17 17:13
on 2026/03/17 17:13
Change comment:
There is no comment for this version
To version
51.1
edited by Super Admin
on 2026/03/14 16:39
on 2026/03/14 16:39
Change comment:
There is no comment for this version
Summary
Details
- Page properties
-
- Content
-
... ... @@ -296,8 +296,8 @@ 296 296 </div> 297 297 298 298 ## --- ② 生徒会基本情報(折りたたみカード) --- 299 -<div class="school-info-card" id="card-seitokai-info"> 300 - <h2 role="button" tabindex="0" aria-expanded=" true" onclick="toggleInfoCard('card-seitokai-info')" onkeydown="if(event.key==='Enter'||event.key===' '){event.preventDefault();toggleInfoCard('card-seitokai-info')}"><span><svg class="ico ico-md" viewBox="0 0 24 24"><path d="M3 21h18"/><path d="M5 21V7l7-4 7 4v14"/><path d="M9 21v-4h6v4"/></svg> 生徒会基本情報</span><span class="collapse-toggle"><span class="collapse-label-open">たたむ</span><span class="collapse-label-closed">開く</span> <span class="collapse-arrow">▼</span></span></h2>299 +<div class="school-info-card collapsed" id="card-seitokai-info"> 300 + <h2 role="button" tabindex="0" aria-expanded="false" onclick="toggleInfoCard('card-seitokai-info')" onkeydown="if(event.key==='Enter'||event.key===' '){event.preventDefault();toggleInfoCard('card-seitokai-info')}"><span><svg class="ico ico-md" viewBox="0 0 24 24"><path d="M3 21h18"/><path d="M5 21V7l7-4 7 4v14"/><path d="M9 21v-4h6v4"/></svg> 生徒会基本情報</span><span class="collapse-toggle"><span class="collapse-label-open">たたむ</span><span class="collapse-label-closed">開く</span> <span class="collapse-arrow">▼</span></span></h2> 301 301 <div class="seitokai-info-body"> 302 302 303 303 ## --- 組織図 --- ... ... @@ -304,12 +304,12 @@ 304 304 #set($hasOrgContent = ($orgChart && $orgChart != '') || ($orgChartImage && $orgChartImage != '')) 305 305 #if($hasOrgContent) 306 306 #set($canViewOrgChart = true) 307 - #if($visibilityOrgChart == 's chool' &&($isGuest|| (!$isViewerAdmin && $viewerSchoolCode != $schoolCode)))#set($canViewOrgChart = false)308 - #elseif($visibilityOrgChart == 'school _trusted' && ($isGuest || (!$isViewerAdmin &&($viewerSchoolCode != $schoolCode|| ($viewerAccountType != 'verified' && $viewerAccountType != 'referred')))))#set($canViewOrgChart = false)307 + #if($visibilityOrgChart == 'members' && $isGuest) #set($canViewOrgChart = false) 308 + #elseif($visibilityOrgChart == 'school' && ($isGuest || (!$isViewerAdmin && $viewerSchoolCode != $schoolCode))) #set($canViewOrgChart = false) 309 309 #end 310 310 #if($canViewOrgChart) 311 311 <div class="seitokai-subsection"> 312 - <h3 class="seitokai-subsection-title"><svg class="ico" viewBox="0 0 24 24"><path d="M3 21h18"/><path d="M5 21V7l7-4 7 4v14"/><path d="M9 21v-4h6v4"/><line x1="9" y1="10" x2="9" y2="10.01"/><line x1="15" y1="10" x2="15" y2="10.01"/><line x1="9" y1="14" x2="9" y2="14.01"/><line x1="15" y1="14" x2="15" y2="14.01"/></svg> 組織図 #if($visibilityOrgChart != 'public')<span class="visibility-badge visibility-${visibilityOrgChart}">#if($visibilityOrgChart == ' school_trusted')<svg class="ico" viewBox="0 0 24 24"><path d="M1222s8-48-10V5l-8-3-83v7c06810 8 10z"/></svg>校内承認者限定#else<svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内限定#end</span>#end</h3>312 + <h3 class="seitokai-subsection-title"><svg class="ico" viewBox="0 0 24 24"><path d="M3 21h18"/><path d="M5 21V7l7-4 7 4v14"/><path d="M9 21v-4h6v4"/><line x1="9" y1="10" x2="9" y2="10.01"/><line x1="15" y1="10" x2="15" y2="10.01"/><line x1="9" y1="14" x2="9" y2="14.01"/><line x1="15" y1="14" x2="15" y2="14.01"/></svg> 組織図 #if($visibilityOrgChart != 'public')<span class="visibility-badge visibility-${visibilityOrgChart}">#if($visibilityOrgChart == 'members')<svg class="ico" viewBox="0 0 24 24"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 00-3-3.87"/><path d="M16 3.13a4 4 0 010 7.75"/></svg> 登録者限定#else<svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内限定#end</span>#end</h3> 313 313 <div class="seitokai-subsection-content"> 314 314 #if($orgChartImage && $orgChartImage != '') 315 315 <div class="school-org-img-wrap"><img src="$doc.getAttachmentURL($orgChartImage)" alt="組織図" class="org-chart-img" /></div> ... ... @@ -318,7 +318,7 @@ 318 318 </div> 319 319 </div> 320 320 #else 321 - <div class="visibility-restricted-notice"><svg class="ico" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0110 0v4"/></svg> 組織図は #if($visibilityOrgChart == ' school_trusted')校内の承認済み・紹介メンバー#else校内メンバー#end のみ閲覧可能です</div>321 + <div class="visibility-restricted-notice"><svg class="ico" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0110 0v4"/></svg> 組織図は #if($visibilityOrgChart == 'members')登録ユーザー#else校内メンバー#end のみ閲覧可能です</div> 322 322 #end 323 323 #end 324 324 ... ... @@ -384,12 +384,12 @@ 384 384 #set($hasBudget = ($budgetProcess && !$budgetProcess.isEmpty()) || ($studentFee && $studentFee != '') || ($budgetScale && $budgetScale != '')) 385 385 #if($hasBudget) 386 386 #set($canViewBudget = true) 387 - #if($visibilityBudget == 's chool' &&($isGuest|| (!$isViewerAdmin && $viewerSchoolCode != $schoolCode)))#set($canViewBudget = false)388 - #elseif($visibilityBudget == 'school _trusted' && ($isGuest || (!$isViewerAdmin &&($viewerSchoolCode != $schoolCode|| ($viewerAccountType != 'verified' && $viewerAccountType != 'referred')))))#set($canViewBudget = false)387 + #if($visibilityBudget == 'members' && $isGuest) #set($canViewBudget = false) 388 + #elseif($visibilityBudget == 'school' && ($isGuest || (!$isViewerAdmin && $viewerSchoolCode != $schoolCode))) #set($canViewBudget = false) 389 389 #end 390 390 #if($canViewBudget) 391 391 <div class="seitokai-subsection"> 392 - <h3 class="seitokai-subsection-title"><svg class="ico" viewBox="0 0 24 24"><line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6"/></svg> 予算 #if($visibilityBudget != 'public')<span class="visibility-badge visibility-${visibilityBudget}">#if($visibilityBudget == ' school_trusted')<svg class="ico" viewBox="0 0 24 24"><path d="M1222s8-48-10V5l-8-3-83v7c06810 8 10z"/></svg>校内承認者限定#else<svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内限定#end</span>#end</h3>392 + <h3 class="seitokai-subsection-title"><svg class="ico" viewBox="0 0 24 24"><line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6"/></svg> 予算 #if($visibilityBudget != 'public')<span class="visibility-badge visibility-${visibilityBudget}">#if($visibilityBudget == 'members')<svg class="ico" viewBox="0 0 24 24"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 00-3-3.87"/><path d="M16 3.13a4 4 0 010 7.75"/></svg> 登録者限定#else<svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内限定#end</span>#end</h3> 393 393 <div class="seitokai-subsection-content"> 394 394 #if($budgetProcess && !$budgetProcess.isEmpty()) 395 395 <div class="info-row"> ... ... @@ -433,7 +433,7 @@ 433 433 </div> 434 434 </div> 435 435 #else 436 - <div class="visibility-restricted-notice"><svg class="ico" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0110 0v4"/></svg> 予算情報は #if($visibilityBudget == ' school_trusted')校内の承認済み・紹介メンバー#else校内メンバー#end のみ閲覧可能です</div>436 + <div class="visibility-restricted-notice"><svg class="ico" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0110 0v4"/></svg> 予算情報は #if($visibilityBudget == 'members')登録ユーザー#else校内メンバー#end のみ閲覧可能です</div> 437 437 #end 438 438 #end 439 439 ... ... @@ -440,12 +440,12 @@ 440 440 ## --- 校則の見直し --- 441 441 #if($ruleReviewStatus && $ruleReviewStatus != '') 442 442 #set($canViewRuleReview = true) 443 - #if($visibilityRuleReview == 's chool' &&($isGuest|| (!$isViewerAdmin && $viewerSchoolCode != $schoolCode)))#set($canViewRuleReview = false)444 - #elseif($visibilityRuleReview == 'school _trusted' && ($isGuest || (!$isViewerAdmin &&($viewerSchoolCode != $schoolCode|| ($viewerAccountType != 'verified' && $viewerAccountType != 'referred')))))#set($canViewRuleReview = false)443 + #if($visibilityRuleReview == 'members' && $isGuest) #set($canViewRuleReview = false) 444 + #elseif($visibilityRuleReview == 'school' && ($isGuest || (!$isViewerAdmin && $viewerSchoolCode != $schoolCode))) #set($canViewRuleReview = false) 445 445 #end 446 446 #if($canViewRuleReview) 447 447 <div class="seitokai-subsection"> 448 - <h3 class="seitokai-subsection-title"><svg class="ico" viewBox="0 0 24 24"><path d="M16 4h2a2 2 0 012 2v12a2 2 0 01-2 2h-2"/><path d="M8 4H6a2 2 0 00-2 2v12a2 2 0 002 2h2"/><line x1="12" y1="4" x2="12" y2="8"/><line x1="12" y1="16" x2="12" y2="20"/><line x1="8" y1="8" x2="16" y2="8"/><line x1="8" y1="16" x2="16" y2="16"/></svg> 校則の見直し #if($visibilityRuleReview != 'public')<span class="visibility-badge visibility-${visibilityRuleReview}">#if($visibilityRuleReview == ' school_trusted')<svg class="ico" viewBox="0 0 24 24"><path d="M1222s8-48-10V5l-8-3-83v7c06810 8 10z"/></svg>校内承認者限定#else<svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内限定#end</span>#end</h3>448 + <h3 class="seitokai-subsection-title"><svg class="ico" viewBox="0 0 24 24"><path d="M16 4h2a2 2 0 012 2v12a2 2 0 01-2 2h-2"/><path d="M8 4H6a2 2 0 00-2 2v12a2 2 0 002 2h2"/><line x1="12" y1="4" x2="12" y2="8"/><line x1="12" y1="16" x2="12" y2="20"/><line x1="8" y1="8" x2="16" y2="8"/><line x1="8" y1="16" x2="16" y2="16"/></svg> 校則の見直し #if($visibilityRuleReview != 'public')<span class="visibility-badge visibility-${visibilityRuleReview}">#if($visibilityRuleReview == 'members')<svg class="ico" viewBox="0 0 24 24"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 00-3-3.87"/><path d="M16 3.13a4 4 0 010 7.75"/></svg> 登録者限定#else<svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内限定#end</span>#end</h3> 449 449 <div class="seitokai-subsection-content"> 450 450 <div class="info-row"> 451 451 <span class="info-label">見直しの有無(3年以内)</span> ... ... @@ -496,7 +496,7 @@ 496 496 </div> 497 497 </div> 498 498 #else 499 - <div class="visibility-restricted-notice"><svg class="ico" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0110 0v4"/></svg> 校則の見直し情報は #if($visibilityRuleReview == ' school_trusted')校内の承認済み・紹介メンバー#else校内メンバー#end のみ閲覧可能です</div>499 + <div class="visibility-restricted-notice"><svg class="ico" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0110 0v4"/></svg> 校則の見直し情報は #if($visibilityRuleReview == 'members')登録ユーザー#else校内メンバー#end のみ閲覧可能です</div> 500 500 #end 501 501 #end 502 502 ... ... @@ -503,18 +503,18 @@ 503 503 ## --- 生徒会の課題意識 --- 504 504 #if($challenges && $challenges != '') 505 505 #set($canViewChallenges = true) 506 - #if($visibilityChallenges == 's chool' &&($isGuest|| (!$isViewerAdmin && $viewerSchoolCode != $schoolCode)))#set($canViewChallenges = false)507 - #elseif($visibilityChallenges == 'school _trusted' && ($isGuest || (!$isViewerAdmin &&($viewerSchoolCode != $schoolCode|| ($viewerAccountType != 'verified' && $viewerAccountType != 'referred')))))#set($canViewChallenges = false)506 + #if($visibilityChallenges == 'members' && $isGuest) #set($canViewChallenges = false) 507 + #elseif($visibilityChallenges == 'school' && ($isGuest || (!$isViewerAdmin && $viewerSchoolCode != $schoolCode))) #set($canViewChallenges = false) 508 508 #end 509 509 #if($canViewChallenges) 510 510 <div class="seitokai-subsection"> 511 - <h3 class="seitokai-subsection-title"><svg class="ico" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg> 生徒会の課題意識 #if($visibilityChallenges != 'public')<span class="visibility-badge visibility-${visibilityChallenges}">#if($visibilityChallenges == ' school_trusted')<svg class="ico" viewBox="0 0 24 24"><path d="M1222s8-48-10V5l-8-3-83v7c06810 8 10z"/></svg>校内承認者限定#else<svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内限定#end</span>#end</h3>511 + <h3 class="seitokai-subsection-title"><svg class="ico" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg> 生徒会の課題意識 #if($visibilityChallenges != 'public')<span class="visibility-badge visibility-${visibilityChallenges}">#if($visibilityChallenges == 'members')<svg class="ico" viewBox="0 0 24 24"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 00-3-3.87"/><path d="M16 3.13a4 4 0 010 7.75"/></svg> 登録者限定#else<svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内限定#end</span>#end</h3> 512 512 <div class="seitokai-subsection-content"> 513 513 <div class="challenge-text">$!escapetool.xml($challenges)</div> 514 514 </div> 515 515 </div> 516 516 #else 517 - <div class="visibility-restricted-notice"><svg class="ico" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0110 0v4"/></svg> 課題情報は #if($visibilityChallenges == ' school_trusted')校内の承認済み・紹介メンバー#else校内メンバー#end のみ閲覧可能です</div>517 + <div class="visibility-restricted-notice"><svg class="ico" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0110 0v4"/></svg> 課題情報は #if($visibilityChallenges == 'members')登録ユーザー#else校内メンバー#end のみ閲覧可能です</div> 518 518 #end 519 519 #end 520 520 ... ... @@ -521,9 +521,9 @@ 521 521 </div>## seitokai-info-body 終了 522 522 </div>## card-seitokai-info 終了 523 523 524 -## --- ③ SNS・連絡先 ---524 +## --- ③ 連絡先 --- 525 525 <div class="school-info-card collapsed" id="card-contact"> 526 - <h2 role="button" tabindex="0" aria-expanded="false" onclick="toggleInfoCard('card-contact')" onkeydown="if(event.key==='Enter'||event.key===' '){event.preventDefault();toggleInfoCard('card-contact')}"><span><svg class="ico ico-md" viewBox="0 0 24 24"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z"/></svg> SNS・連絡先</span><span class="collapse-toggle"><span class="collapse-label-open">たたむ</span><span class="collapse-label-closed">開く</span> <span class="collapse-arrow">▼</span></span></h2>526 + <h2 role="button" tabindex="0" aria-expanded="false" onclick="toggleInfoCard('card-contact')" onkeydown="if(event.key==='Enter'||event.key===' '){event.preventDefault();toggleInfoCard('card-contact')}"><span><svg class="ico ico-md" viewBox="0 0 24 24"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z"/></svg> 連絡先</span><span class="collapse-toggle"><span class="collapse-label-open">たたむ</span><span class="collapse-label-closed">開く</span> <span class="collapse-arrow">▼</span></span></h2> 527 527 <table class="wiki-table school-info-table"> 528 528 <tr><th>問い合わせ先</th><td>#if($contactInfo && $contactInfo != '')$!escapetool.xml($contactInfo)#else<span class="text-placeholder">未登録</span>#end</td></tr> 529 529 <tr><th>生徒会Web</th><td>#if($seitokaiWebsite && $seitokaiWebsite != '')<a href="$!escapetool.xml($seitokaiWebsite)" target="_blank" rel="noopener"><svg class="ico" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z"/></svg> $!escapetool.xml($seitokaiWebsite)</a>#else<span class="text-placeholder">未登録</span>#end</td></tr> ... ... @@ -536,13 +536,36 @@ 536 536 537 537 {{/html}} 538 538 539 ----- 540 - 541 541 ## --- ⑩ 活動報告一覧(スレッド型・年度タブ付き) --- 542 542 = 活動報告 = 543 543 544 -## --- 年度タブ +投稿者ステータス凡例 ---542 +## --- 投稿者ステータス凡例(折りたたみ) --- 545 545 {{html clean="false"}} 544 +<div class="author-legend-wrapper"> 545 + <button class="author-legend-toggle" onclick="this.classList.toggle('open');this.nextElementSibling.classList.toggle('open')"><svg class="ico" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg> バッジの見方 <span class="chevron">▼</span></button> 546 + <div class="author-legend-body"> 547 + <div class="author-legend"> 548 + <span class="author-legend-title">投稿者の信頼度:</span> 549 + <span class="author-legend-item"><span class="bar bar-admin"></span> 管理者</span> 550 + <span class="author-legend-item"><span class="bar bar-verified"></span> 承認済み</span> 551 + <span class="author-legend-item"><span class="bar bar-referred"></span> 紹介</span> 552 + <span class="author-legend-item"><span class="bar bar-general"></span> 一般(未承認)</span> 553 + </div> 554 + <div class="author-legend"> 555 + <span class="author-legend-title">所属:</span> 556 + <span class="author-legend-item"><span class="badge badge-school-internal-confirmed badge-sm"><svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内(確認済)</span> 承認済み+同校</span> 557 + <span class="author-legend-item"><span class="badge badge-school-internal badge-sm"><svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内</span> 紹介+同校</span> 558 + <span class="author-legend-item"><span class="badge badge-school-external badge-sm"><svg class="ico" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z"/></svg> 他校</span> 他校所属</span> 559 + <span class="author-legend-item text-hint">※一般アカウントは所属未確認のため非表示</span> 560 + </div> 561 + <div class="author-legend"> 562 + <span class="author-legend-title">役割:</span> 563 + <span class="author-legend-item"><span class="badge badge-role-student badge-sm"><svg class="ico" viewBox="0 0 24 24"><path d="M22 10v6M2 10l10-5 10 5-10 5z"/><path d="M6 12v5c0 2 4 3 6 3s6-1 6-3v-5"/></svg> 生徒</span></span> 564 + <span class="author-legend-item"><span class="badge badge-role-officer badge-sm"><svg class="ico" viewBox="0 0 24 24"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg> 役員</span></span> 565 + <span class="author-legend-item"><span class="badge badge-role-teacher badge-sm"><svg class="ico" viewBox="0 0 24 24"><path d="M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2"/><circle cx="12" cy="7" r="4"/></svg> 教員</span></span> 566 + </div> 567 + </div> 568 +</div> 546 546 547 547 ## --- 年度タブ --- 548 548 ## 全活動から年度一覧を収集 ... ... @@ -564,41 +564,14 @@ 564 564 #end 565 565 ## ソート(降順にしたいが Velocity にはないので JS で制御) 566 566 567 -<div class="activity-toolbar"> 568 - <div class="activity-fy-tabs"> 569 - <button class="activity-fy-tab active" onclick="switchActivityFY('$currentFYStr', this)">$currentFYStr 年度</button> 570 - #foreach($fy in $fySet) 571 - #if($fy != $currentFYStr) 572 - <button class="activity-fy-tab" onclick="switchActivityFY('$fy', this)">$fy 年度</button> 573 - #end 590 +<div class="activity-fy-tabs"> 591 + <button class="activity-fy-tab active" onclick="switchActivityFY('$currentFYStr', this)">$currentFYStr 年度</button> 592 + #foreach($fy in $fySet) 593 + #if($fy != $currentFYStr) 594 + <button class="activity-fy-tab" onclick="switchActivityFY('$fy', this)">$fy 年度</button> 574 574 #end 575 - <button class="activity-fy-tab" onclick="switchActivityFY('all', this)">全期間</button> 576 - </div> 577 - <div class="author-legend-wrapper"> 578 - <button class="author-legend-toggle" onclick="this.classList.toggle('open');this.nextElementSibling.classList.toggle('open')"><svg class="ico" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg> バッジの見方 <span class="chevron">▼</span></button> 579 - <div class="author-legend-body"> 580 - <div class="author-legend"> 581 - <span class="author-legend-title">投稿者の信頼度:</span> 582 - <span class="author-legend-item"><span class="bar bar-admin"></span> 管理者</span> 583 - <span class="author-legend-item"><span class="bar bar-verified"></span> 承認済み</span> 584 - <span class="author-legend-item"><span class="bar bar-referred"></span> 紹介</span> 585 - <span class="author-legend-item"><span class="bar bar-general"></span> 一般(未承認)</span> 586 - </div> 587 - <div class="author-legend"> 588 - <span class="author-legend-title">所属:</span> 589 - <span class="author-legend-item"><span class="badge badge-school-internal-confirmed badge-sm"><svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内(確認済)</span> 承認済み+同校</span> 590 - <span class="author-legend-item"><span class="badge badge-school-internal badge-sm"><svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内</span> 紹介+同校</span> 591 - <span class="author-legend-item"><span class="badge badge-school-external badge-sm"><svg class="ico" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z"/></svg> 他校</span> 他校所属</span> 592 - <span class="author-legend-item text-hint">※一般アカウントは所属未確認のため非表示</span> 593 - </div> 594 - <div class="author-legend"> 595 - <span class="author-legend-title">役割:</span> 596 - <span class="author-legend-item"><span class="badge badge-role-student badge-sm"><svg class="ico" viewBox="0 0 24 24"><path d="M22 10v6M2 10l10-5 10 5-10 5z"/><path d="M6 12v5c0 2 4 3 6 3s6-1 6-3v-5"/></svg> 生徒</span></span> 597 - <span class="author-legend-item"><span class="badge badge-role-officer badge-sm"><svg class="ico" viewBox="0 0 24 24"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg> 役員</span></span> 598 - <span class="author-legend-item"><span class="badge badge-role-teacher badge-sm"><svg class="ico" viewBox="0 0 24 24"><path d="M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2"/><circle cx="12" cy="7" r="4"/></svg> 教員</span></span> 599 - </div> 600 - </div> 601 - </div> 596 + #end 597 + <button class="activity-fy-tab" onclick="switchActivityFY('all', this)">全期間</button> 602 602 </div> 603 603 604 604 {{/html}} ... ... @@ -665,12 +665,6 @@ 665 665 <div class="activity-thread-title"> 666 666 <h3 #if($actFeatured == '1')class="featured-title"#end>$!escapetool.xml($!actTitle) #if($actFeatured == '1')<svg class="ico ico-fixed-14 ico-star-offset" viewBox="0 0 24 24" fill="currentColor" stroke="none"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>#end</h3> 667 667 <span class="activity-meta">$!escapetool.xml($!actCommittee) | $!escapetool.xml($!actPeriod) #if($actFY != 'unknown')| $!escapetool.xml($actFY)年度#end</span> 668 - #set($actTagsList = $activity.getValue('tags')) 669 - #if($actTagsList && !$actTagsList.isEmpty()) 670 - #foreach($tagItem in $actTagsList) 671 - #if($tagItem && $tagItem.trim() != '')<span class="activity-tag-badge">$escapetool.xml($tagItem)</span>#end 672 - #end 673 - #end 674 674 </div> 675 675 <div class="thread-meta-row"> 676 676 <span class="thread-post-count">${reportCount}件の報告 ・ ${commentCount}件のコメント</span> ... ... @@ -732,12 +732,12 @@ 732 732 #set($postVis = $!post.getValue('visibility')) 733 733 #if(!$postVis || $postVis == '') #set($postVis = 'public') #end 734 734 #set($canViewPost = true) 735 - #if($postVis == 's chool' &&($isGuest|| (!$isViewerAdmin && $viewerSchoolCode != $schoolCode)))#set($canViewPost = false)736 - #elseif($postVis == 'school _trusted' && ($isGuest || (!$isViewerAdmin &&($viewerSchoolCode != $schoolCode|| ($viewerAccountType != 'verified' && $viewerAccountType != 'referred')))))#set($canViewPost = false)725 + #if($postVis == 'members' && $isGuest) #set($canViewPost = false) 726 + #elseif($postVis == 'school' && ($isGuest || (!$isViewerAdmin && $viewerSchoolCode != $schoolCode))) #set($canViewPost = false) 737 737 #end 738 738 #if(!$canViewPost) 739 739 <div class="thread-post visibility-restricted-post"> 740 - <div class="visibility-restricted-notice"><svg class="ico" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0110 0v4"/></svg> この投稿は #if($postVis == ' school_trusted')校内の承認済み・紹介メンバー#else校内メンバー#end のみ閲覧可能です</div>730 + <div class="visibility-restricted-notice"><svg class="ico" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0110 0v4"/></svg> この投稿は #if($postVis == 'members')登録ユーザー#else校内メンバー#end のみ閲覧可能です</div> 741 741 </div> 742 742 #else 743 743 ## 投稿者のアカウント種別に基づいたCSSクラス ... ... @@ -869,7 +869,7 @@ 869 869 #end 870 870 </div> 871 871 #if($postVis != 'public') 872 - <div class="visibility-badge visibility-${postVis} post-action-mt">#if($postVis == ' school_trusted')<svg class="ico" viewBox="0 0 24 24"><path d="M1222s8-48-10V5l-8-3-83v7c06810 8 10z"/></svg>校内承認者限定#else<svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内限定#end</div>862 + <div class="visibility-badge visibility-${postVis} post-action-mt">#if($postVis == 'members')<svg class="ico" viewBox="0 0 24 24"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 00-3-3.87"/><path d="M16 3.13a4 4 0 010 7.75"/></svg> 登録者限定#else<svg class="ico" viewBox="0 0 24 24"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内限定#end</div> 873 873 #end 874 874 ## 固定/解除ボタン(承認済み・管理者のみ) 875 875 #if($viewerAccountType == 'admin' || $viewerAccountType == 'verified') ... ... @@ -1009,25 +1009,6 @@ 1009 1009 window.history.replaceState({}, document.title, window.location.pathname); 1010 1010 } 1011 1011 } 1012 - // 長文投稿の折りたたみ初期化 1013 - document.querySelectorAll('.thread-post-body').forEach(function(body) { 1014 - // 先にtruncatedを仮適用してline-clampを有効にし、高さの差分で判定 1015 - var fullH = body.scrollHeight; 1016 - body.classList.add('truncated'); 1017 - var clampedH = body.clientHeight; 1018 - body.classList.remove('truncated'); 1019 - if (fullH > clampedH + 10) { 1020 - body.classList.add('truncated'); 1021 - var btn = document.createElement('button'); 1022 - btn.className = 'btn-read-more'; 1023 - btn.textContent = '広げて読む ▼'; 1024 - btn.addEventListener('click', function() { 1025 - var isExpanded = body.classList.toggle('expanded'); 1026 - btn.textContent = isExpanded ? '折りたたむ ▲' : '広げて読む ▼'; 1027 - }); 1028 - body.parentNode.insertBefore(btn, body.nextSibling); 1029 - } 1030 - }); 1031 1031 }); 1032 1032 1033 1033 // トースト通知表示 ... ... @@ -1090,7 +1090,7 @@ 1090 1090 var csrfEl = document.querySelector('input[name="form_token"]'); 1091 1091 var csrfToken = csrfEl ? csrfEl.value : ''; 1092 1092 var xhr = new XMLHttpRequest(); 1093 - xhr.open('POST', '/bin/ get/SeitokaiCode/EditPost?outputSyntax=plain', true);1064 + xhr.open('POST', '/bin/SeitokaiCode/EditPost?outputSyntax=plain', true); 1094 1094 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 1095 1095 var editPostData = 'schoolPage=' + encodeURIComponent(schoolPage) + '&postObj=' + postObjNum + '&newContent=' + encodeURIComponent(newContent) + '&form_token=' + encodeURIComponent(csrfToken); 1096 1096 xhr.onload = function() { ... ... @@ -1112,7 +1112,7 @@ 1112 1112 function confirmDeletePost(schoolPage, postObjNum, token) { 1113 1113 if (!confirm('この投稿を削除しますか?\\n削除後は「この投稿は削除されました」と表示されます。')) return; 1114 1114 var xhr = new XMLHttpRequest(); 1115 - xhr.open('POST', '/bin/ get/SeitokaiCode/DeletePost?outputSyntax=plain', true);1086 + xhr.open('POST', '/bin/SeitokaiCode/DeletePost?outputSyntax=plain', true); 1116 1116 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 1117 1117 var deletePostData = 'schoolPage=' + encodeURIComponent(schoolPage) + '&postObj=' + postObjNum + '&form_token=' + encodeURIComponent(token); 1118 1118 xhr.onload = function() {