PageSourceSearch

https://takakurazome.jp/app.js

js takakurazome.jp collected 2026-10-07 04:08:47 UTC 3,001 bytes, 11 lines download raw bytes

1const menu=document.querySelector('.menu-btn'), mobile=document.querySelector('#mobile-nav');
2menu?.addEventListener('click',()=>{const expanded=menu.getAttribute('aria-expanded')==='true';menu.setAttribute('aria-expanded',String(!expanded));mobile.hidden=expanded;menu.textContent=expanded?'MENU':'CLOSE';});
3document.addEventListener('keydown',e=>{if(e.key==='Escape'&&mobile&&!mobile.hidden){mobile.hidden=true;menu.setAttribute('aria-expanded','false');menu.textContent='MENU';menu.focus();}});
4const form=document.querySelector('#contact-form');
5if(form){const q=new URLSearchParams(location.search);const type=q.get('type');if([...form.elements.type.options].some(o=>o.value===type))form.elements.type.value=type;const work=q.get('work');if(work&&/^\d{2}$/.test(work))form.elements.work.value='REF. '+work;
6form.addEventListener('submit',e=>{e.preventDefault();if(!form.reportValidity())return;const d=new FormData(form),en=form.dataset.lang==='en',zh=form.dataset.lang==='zh-hant';const topic=form.elements.type.selectedOptions[0].textContent;const subject='[Shibuki Takakura] '+topic+(d.get('work')?' / '+d.get('work'):'');const body=[(en?'Name: ':zh?'姓名:':'お名前:')+d.get('name'),(en?'Email: ':zh?'電子郵件:':'メール:')+d.get('email'),(en?'Organisation / Country: ':zh?'畫廊/公司/國家地區:':'会社・団体/国:')+d.get('organisation'),(en?'Art
6work: ':zh?'作品編號:':'作品番号:')+d.get('work'),'',''+d.get('message')].join('\n');document.querySelector('#draft-copy').value='To: [email protected]\nSubject: '+subject+'\n\n'+body;document.querySelector('#email-fallback').hidden=false;document.querySelector('#form-status').textContent=en?'Opening Gmail in this browser. Review the message and press Send.':zh?'即將開啟瀏覽器版Gmail,請確認內容後按下「傳送」。':'ブラウザ版Gmailを開きます。内容を確認して「送信」を押してください。';const gmail='https://mail.google.com/mail/?view=cm&fs=1&to='+encodeURIComponent('[email protected]')+'&su='+encodeURIComponent(subject)+'&body='+encodeURIComponent(body);location.href=gmail;});}
7const slider=document.querySelector('.hero-slider');
8if(slider){const slides=[...slider.querySelectorAll('.hero-slide')],dots=[...document.querySelectorAll('.hero-dot')];let current=0,timer;
9const show=i=>{current=i;slides.forEach((slide,n)=>{const active=n===i;slide.classList.toggle('is-active',active);slide.setAttribute('aria-hidden',String(!active));});dots.forEach((dot,n)=>dot.classList.toggle('is-active',n===i));};
10const start=()=>{if(!matchMedia('(prefers-reduced-motion: reduce)').matches)timer=setInterval(()=>show((current+1)%slides.length),4200);};
11const restart=()=>{clearInterval(timer);start();};dots.forEach((dot,i)=>dot.addEventListener('click',()=>{show(i);restart();}));slider.closest('.hero-art').addEventListener('mouseenter',()=>clearInterval(timer));slider.closest('.hero-art').addEventListener('mouseleave',start);start();}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.