<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>PDFページ編集ツール (ローカル)</title>
    <style>
        body{font-family:sans-serif;display:flex;height:100vh;margin:0;overflow:hidden;}
        .panel{border:1px solid #ccc;height:100%;display:flex;flex-direction:column;}
        #leftPanel{width:30%;min-width:250px;}
        #rightPanel{width:70%;border-left:none;}
        .panel-header{padding:10px;border-bottom:1px solid #ccc;background-color:#f8f8f8;}
        .panel-content{flex-grow:1;overflow-y:auto;padding:10px;}
        #fileList{list-style:none;padding:0;margin:0;}
        #fileList li{padding:8px 10px;margin-bottom:5px;background-color:#fff;border:1px solid #ddd;cursor:grab;display:flex;align-items:center;transition:background-color 0.2s;word-break:break-all;}
        #fileList li.active{background-color:#cce5ff;border-color:#b8daff;font-weight:bold;}
        #fileList li:hover:not(.active){background-color:#f0f0f0;}
        #fileList .delete-file-btn{background-color:#ffdddd;border:1px solid #ffaaaa;color:#d8000c;padding:1px 5px;cursor:pointer;font-weight:bold;font-size:0.8em;line-height:1;margin-right:8px;border-radius:3px;flex-shrink:0;}
        #fileList .file-name{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        #fileList li.dragging{opacity:0.5;border-style:dashed;background-color:#e0e0e0;}
        #fileList li.drag-over{border:2px dashed #007bff;background-color:#e8f0fe;}
        #dropZone{border:2px dashed #ccc;padding:20px;text-align:center;margin-bottom:10px;background-color:#f9f9f9;}
        #dropZone.drag-over{background-color:#e8f0fe;border-color:#a3c5fd;}
        #pageList{display:flex;flex-wrap:wrap;gap:15px;padding:0;margin:0;}
        #pageList li{list-style:none;border:1px solid #ccc;padding:5px;background-color:#fff;text-align:center;cursor:grab;position:relative;width:120px;height:auto;display:flex;flex-direction:column;align-items:center;box-shadow:0 1px 3px rgba(0,0,0,0.1);transition:transform 0.1s,box-shadow 0.1s;}
        #pageList li.dragging{opacity:0.4;border-style:dashed !important;box-shadow:0 0 0 transparent !important;}
        #pageList li.drag-over{border:2px dashed blue !important;transform:scale(1.05);}
        #pageList li.selected-page{border-color:dodgerblue;box-shadow:0 0 8px rgba(30,144,255,0.7);background-color:#e6f2ff;}
        #pageList canvas{max-width:100px;height:auto;border:1px solid #eee;margin-bottom:5px;}
        #pageList .page-number{font-size:0.8em;color:#555;}
        #pageList .delete-page-btn{position:absolute;top:-5px;left:-5px;background-color:rgba(255,0,0,0.7);border:none;color:white;width:20px;height:20px;border-radius:50%;cursor:pointer;font-weight:bold;font-size:12px;box-shadow:0 0 5px rgba(0,0,0,0.3);display:flex;align-items:center;justify-content:center;z-index:10;}
        #pageList .delete-page-btn:hover{background-color:rgba(255,0,0,1);}
        button{padding:8px 12px;cursor:pointer;margin-right:5px;background-color:#eee;border:1px solid #ccc;border-radius:3px;}
        button:disabled{cursor:not-allowed;opacity:0.6;}
        button:hover:enabled{background-color:#ddd;}
        #status{margin-top:10px;font-weight:bold;padding:5px 10px;border-top:1px solid #ccc;}
        .loading{color:blue;}
        .error{color:red;}
        .success{color:green;}
        .info{color:#31708f;}
        .warning{color:#8a6d3b;}
    </style>
</head>
<body>
    <div id="leftPanel" class="panel">
        <div class="panel-header">
            <h3>PDFファイルリスト</h3>
            <input type="file" id="fileInput" multiple accept=".pdf" style="display:none;">
            <button onclick="document.getElementById('fileInput').click()">ファイル選択</button>
            <button id="mergeButton" disabled>結合して保存</button>
        </div>
        <div class="panel-content">
            <div id="dropZone">ここにPDFファイルをドラッグ＆ドロップ</div>
            <ul id="fileList"></ul>
        </div>
    </div>
    <div id="rightPanel" class="panel">
        <div class="panel-header">
            <h3>ページ編集 (<span id="currentFileName">ファイル未選択</span>)</h3>
            <button id="saveButton" disabled>変更を保存</button>
            <button id="undoButton" disabled style="float:right;">元に戻す(未実装)</button>
        </div>
        <div class="panel-content" id="pageView">
            <div id="pageListStatus" style="text-align:center;padding:20px;color:#888;">左のリストからPDFを選択してください</div>
            <ul id="pageList"></ul>
        </div>
        <div id="status"></div>
    </div>
    <script src="pdf-lib.min.js"></script>
    <script src="pdf.min.js"></script>
    <script>
    (()=>{
        document.addEventListener('DOMContentLoaded',()=>{
            const{PDFDocument:_PD}=window.PDFLib;
            const _pl=window['pdfjs-dist/build/pdf'];
            _pl.GlobalWorkerOptions.workerSrc='pdf.worker.min.js';
            const _fi=document.getElementById('fileInput');
            const _fl=document.getElementById('fileList');
            const _dz=document.getElementById('dropZone');
            const _plst=document.getElementById('pageList');
            const _pv=document.getElementById('pageView');
            const _pls=document.getElementById('pageListStatus');
            const _cfn=document.getElementById('currentFileName');
            const _sb=document.getElementById('saveButton');
            const _sd=document.getElementById('status');
            const _mb=document.getElementById('mergeButton');
            if(!_fi||!_fl||!_dz||!_plst||!_pv||!_pls||!_cfn||!_sb||!_sd||!_mb){document.body.innerHTML='<p style="color:red;font-weight:bold;padding:20px;">ページの読み込みに失敗しました。</p>';return;}
            let _pfi=[];let _afi=null;let _nfi=0;let _pdse=null;let _fdse=null;const _TS=0.2;
            function _addFs(nfs){
                if(!nfs||nfs.length===0)return;
                const cfnS=new Set(_pfi.map(f=>f.name));
                let fac=0;
                Array.from(nfs).forEach(f=>{
                    if(f.type==='application/pdf'||f.name.toLowerCase().endsWith('.pdf')){
                        if(!cfnS.has(f.name)){_pfi.push({id:_nfi++,name:f.name,file:f,originalPages:null,currentPageOrder:null,pdfDocProxy:null,selectedPageOriginalNums:[],lastClickedOriginalPageNum:null});fac++;}
                        else{_setS('warning',`ファイル "${f.name}" は既に追加済みです。`);}
                    }else{_setS('warning',`ファイル "${f.name}" はPDFでないためスキップされました。`);}
                });
                if(fac>0){_rFl();_setS('success',`${fac}件のPDFファイルを追加しました。`);}
            }
            function _rFl(){
                _fl.innerHTML='';
                if(_pfi.length===0){_fl.innerHTML='<li style="cursor:default;background-color:transparent;border:none;justify-content:center;color:#888;">PDFファイルがありません</li>';_sAf(null);_mb.disabled=true;return;}
                _pfi.forEach(fi=>{
                    const li=document.createElement('li');li.dataset.id=fi.id;li.draggable=true;
                    if(fi.id===_afi)li.classList.add('active');
                    const db=document.createElement('button');db.textContent='×';db.classList.add('delete-file-btn');db.onclick=(e)=>{e.stopPropagation();_delF(fi.id);};
                    const ns=document.createElement('span');ns.classList.add('file-name');ns.textContent=fi.name;
                    li.appendChild(db);li.appendChild(ns);li.onclick=()=>_sAf(fi.id);
                    li.addEventListener('dragstart',_hFdS);li.addEventListener('dragover',_hFdO);li.addEventListener('dragleave',_hFdL);li.addEventListener('drop',_hFd);li.addEventListener('dragend',_hFdE);
                    _fl.appendChild(li);
                });
                _mb.disabled=_pfi.length<2;
            }
            function _delF(id){
                const idx=_pfi.findIndex(f=>f.id===id);
                if(idx>-1){const fn=_pfi[idx].name;_pfi.splice(idx,1);if(_afi===id)_sAf(null);_rFl();_setS('info',`ファイル "${fn}" を削除しました。`);}
            }
            async function _sAf(fId){
                const oafi=_afi;
                if(_afi===fId&&fId!==null)return;
                _afi=fId;
                _plst.innerHTML='';_pls.style.display='block';_sb.disabled=true;
                if(oafi!==null){const ofi=_pfi.find(f=>f.id===oafi);if(ofi){ofi.selectedPageOriginalNums=[];ofi.lastClickedOriginalPageNum=null;}}
                _rFl();
                if(fId===null){_cfn.textContent='ファイル未選択';_pls.textContent='左のリストからPDFを選択してください';_cS();return;}
                const fi=_pfi.find(f=>f.id===fId);
                if(!fi){_afi=null;_rFl();_cfn.textContent='ファイル未選択';_pls.textContent='エラー: ファイル情報が見つかりません。';return;}
                fi.selectedPageOriginalNums=[];fi.lastClickedOriginalPageNum=null;
                _cfn.textContent=fi.name;_pls.textContent=`${fi.name} のページを読み込み中...`;_setS('loading',`"${fi.name}" を読み込み中...`);
                try{
                    if(!fi.pdfDocProxy){const ab=await _rFAB(fi.file);fi.pdfDocProxy=await _pl.getDocument({data:ab}).promise;}
                    if(!fi.originalPages||fi.originalPages.length!==fi.pdfDocProxy.numPages){fi.originalPages=Array.from({length:fi.pdfDocProxy.numPages},(_,i)=>i+1);fi.currentPageOrder=[...fi.originalPages];}
                    else if(!fi.currentPageOrder){fi.currentPageOrder=[...fi.originalPages];}
                    await _rPT(fi,fId);
                }catch(err){_setS('error',`"${fi.name}" の読み込みに失敗: ${err.message}`);_pls.textContent=`エラー: ${fi.name} を読み込めません`;_afi=null;_rFl();_cfn.textContent='ファイル未選択';}
            }
            async function _rPT(fi,rFi){
                _pls.style.display='none';
                if(_afi!==rFi){_pls.textContent='ファイル切替のため描画中断';_pls.style.display='block';return;}
                if(!fi?.pdfDocProxy?.numPages||!fi.currentPageOrder){_pls.textContent='ページ情報エラー';_pls.style.display='block';return;}
                const po=fi.currentPageOrder;const pd=fi.pdfDocProxy;const tp=po.length;
                if(tp===0){_pls.textContent='表示ページなし';_pls.style.display='block';_setS('info',`"${fi.name}" にページがありません`);_sb.disabled=true;return;}
                _plst.innerHTML='';_setS('loading',`サムネイル生成中 (0/${tp})...`);
                let gc=0;let art=true;
                for(let i=0;i<tp;i++){
                    if(_afi!==rFi){_setS('info','ファイル切替のため中断');_plst.innerHTML='';_pls.textContent='ファイル切替';_pls.style.display='block';return;}
                    const pn=po[i];const ci=i;
                    const li=document.createElement('li');li.dataset.originalPageNum=pn;li.dataset.currentIndex=ci;li.draggable=true;
                    if(fi.selectedPageOriginalNums.includes(pn))li.classList.add('selected-page');
                    li.addEventListener('click',(e)=>{if(_afi!==rFi)return;_hPIC(e,fi,pn);});
                    const cv=document.createElement('canvas');const ps=document.createElement('span');ps.classList.add('page-number');ps.textContent=`元:${pn} (${ci+1}/${tp})`;
                    const db=document.createElement('button');db.textContent='×';db.classList.add('delete-page-btn');db.onclick=(e)=>{e.stopPropagation();if(_afi!==rFi)return;_delP(pn);};
                    li.appendChild(db);li.appendChild(cv);li.appendChild(ps);
                    li.addEventListener('dragstart',_hPDS);li.addEventListener('dragover',_hPDO);li.addEventListener('dragleave',_hPDL);li.addEventListener('drop',_hPD);li.addEventListener('dragend',_hPDE);
                    if(_afi!==rFi)continue;
                    _plst.appendChild(li);
                    (async()=>{
                        try{
                            if(_afi!==rFi)return;
                            const p=await pd.getPage(pn);if(_afi!==rFi)return;
                            const vp=p.getViewport({scale:_TS});const ctx=cv.getContext('2d');cv.height=vp.height;cv.width=vp.width;if(_afi!==rFi)return;
                            await p.render({canvasContext:ctx,viewport:vp}).promise;
                        }catch(pErr){if(_afi===rFi){ps.textContent+=' (エラー)';art=false;}}
                        finally{
                            if(_afi===rFi){
                                gc++;
                                if(gc===tp){if(art)_setS('success',`サムネイル生成完了 (${tp}ページ)`);else _setS('warning',`サムネイル生成完了 (${tp}ページ) (一部エラーあり)`);_sb.disabled=tp===0;}
                                else{_setS('loading',`サムネイル生成中 (${gc}/${tp})...${art?'':' (エラーあり)'}`);}
                            }
                        }
                    })();
                }
            }
            function _delP(pn){
                const fi=_pfi.find(f=>f.id===_afi);
                if(!fi?.currentPageOrder)return;
                const itD=fi.currentPageOrder.indexOf(pn);
                if(itD>-1){
                    fi.currentPageOrder.splice(itD,1);
                    fi.selectedPageOriginalNums=fi.selectedPageOriginalNums.filter(n=>n!==pn);
                    if(fi.lastClickedOriginalPageNum===pn)fi.lastClickedOriginalPageNum=null;
                    _rPT(fi,_afi);_setS('info',`ページ ${pn} を削除 (保存前)`);_sb.disabled=fi.currentPageOrder.length===0;
                    if(fi.currentPageOrder.length===0){_pls.textContent='表示ページなし';_pls.style.display='block';}
                }
            }
            function _hPIC(ev,fi,cpn){
                if(!fi||!fi.currentPageOrder)return;
                const icp=ev.ctrlKey||ev.metaKey;const isp=ev.shiftKey;
                let{selectedPageOriginalNums:spon,lastClickedOriginalPageNum:lcpon}=fi;
                if(isp&&lcpon!==null&&lcpon!==cpn){
                    const o=fi.currentPageOrder;const li=o.indexOf(lcpon);const ci=o.indexOf(cpn);
                    if(li!==-1&&ci!==-1){const s=Math.min(li,ci);const e=Math.max(li,ci);spon=o.slice(s,e+1);}
                    else{spon=[cpn];}
                }else if(icp){const iis=spon.indexOf(cpn);if(iis>-1)spon.splice(iis,1);else spon.push(cpn);lcpon=cpn;}
                else{spon=[cpn];lcpon=cpn;}
                fi.selectedPageOriginalNums=spon;fi.lastClickedOriginalPageNum=lcpon;_uPSSV(fi);
            }
            function _uPSSV(fi){
                if(!fi||!_plst)return;
                const api=_plst.querySelectorAll('li');
                api.forEach(it=>{const pn=parseInt(it.dataset.originalPageNum,10);if(fi.selectedPageOriginalNums.includes(pn))it.classList.add('selected-page');else it.classList.remove('selected-page');});
            }
            function _hPDS(e){
                if(_afi===null){e.preventDefault();return;}
                const fi=_pfi.find(f=>f.id===_afi);if(!fi){e.preventDefault();return;}
                _pdse=this;const dpon=parseInt(this.dataset.originalPageNum,10);
                if(!fi.selectedPageOriginalNums.includes(dpon)){fi.selectedPageOriginalNums=[dpon];fi.lastClickedOriginalPageNum=dpon;_uPSSV(fi);}
                e.dataTransfer.effectAllowed='move';e.dataTransfer.setData('application/json',JSON.stringify(fi.selectedPageOriginalNums));
                setTimeout(()=>{fi.selectedPageOriginalNums.forEach(pn=>{const el=_plst.querySelector(`li[data-original-page-num="${pn}"]`);if(el)el.classList.add('dragging');});},0);
            }
            function _hPDO(e){e.preventDefault();if(!_pdse||_afi===null){e.dataTransfer.dropEffect='none';return;}e.dataTransfer.dropEffect='move';if(this!==_pdse)this.classList.add('drag-over');}
            function _hPDL(e){this.classList.remove('drag-over');}
            function _hPD(e){
                e.stopPropagation();e.preventDefault();this.classList.remove('drag-over');
                if(_afi===null)return;
                const fi=_pfi.find(f=>f.id===_afi);if(!fi||!fi.currentPageOrder)return;
                const spmn=JSON.parse(e.dataTransfer.getData('application/json'));
                if(!spmn||spmn.length===0){_hPDEVC(fi);return;}
                const tion=parseInt(this.dataset.originalPageNum,10);
                if(spmn.includes(tion)){if(!(spmn.length===1&&spmn[0]===tion)){_hPDEVC(fi);return;}_hPDEVC(fi);return;}
                let co=[...fi.currentPageOrder];const patm=co.filter(pn=>spmn.includes(pn));
                if(patm.length===0){_hPDEVC(fi);return;}
                const oar=co.filter(pn=>!spmn.includes(pn));
                let dino=oar.indexOf(tion);if(dino===-1){dino=oar.length;}
                oar.splice(dino,0,...patm);fi.currentPageOrder=oar;fi.selectedPageOriginalNums=[];fi.lastClickedOriginalPageNum=null;
                _rPT(fi,_afi);_setS('info',`${patm.length}ページを移動しました (保存前)`);_sb.disabled=false;
            }
            function _hPDEVC(cfi){
                if(cfi&&cfi.selectedPageOriginalNums){cfi.selectedPageOriginalNums.forEach(pn=>{const el=_plst.querySelector(`li[data-original-page-num="${pn}"]`);if(el)el.classList.remove('dragging');});}
                else if(_pdse){_pdse.classList.remove('dragging');}
                Array.from(_plst.children).forEach(it=>it.classList.remove('drag-over'));_pdse=null;
            }
            function _hPDE(e){const fi=_pfi.find(f=>f.id===_afi);_hPDEVC(fi);}
            function _hFdS(e){_fdse=this;e.dataTransfer.effectAllowed='move';e.dataTransfer.setData('text/plain',this.dataset.id);setTimeout(()=>this.classList.add('dragging'),0);}
            function _hFdO(e){e.preventDefault();if(!_fdse){e.dataTransfer.dropEffect='none';return;}e.dataTransfer.dropEffect='move';if(this!==_fdse){this.classList.add('drag-over');}}
            function _hFdL(e){this.classList.remove('drag-over');}
            function _hFd(e){
                e.stopPropagation();e.preventDefault();this.classList.remove('drag-over');
                if(!_fdse||_fdse===this)return;
                const dfi=parseInt(e.dataTransfer.getData('text/plain'),10);const tfi=parseInt(this.dataset.id,10);
                const fi=_pfi.findIndex(f=>f.id===dfi);let ti=_pfi.findIndex(f=>f.id===tfi);
                if(fi>-1&&ti>-1){const[di]=_pfi.splice(fi,1);_pfi.splice(ti,0,di);_rFl();_setS('info',`ファイルリストの順序を変更しました。`);}
                if(_fdse)_fdse.classList.remove('dragging');_fdse=null;Array.from(_fl.children).forEach(it=>it.classList.remove('drag-over'));
            }
            function _hFdE(e){if(_fdse)_fdse.classList.remove('dragging');Array.from(_fl.children).forEach(it=>it.classList.remove('drag-over'));_fdse=null;}
            function _rFAB(f){return new Promise((rs,rj)=>{const r=new FileReader();r.onload=()=>rs(r.result);r.onerror=(er)=>rj(er);r.readAsArrayBuffer(f);});}
            function _dlP(b,fn){const blb=new Blob([b],{type:'application/pdf'});const l=document.createElement('a');l.href=URL.createObjectURL(blb);l.download=fn;document.body.appendChild(l);l.click();document.body.removeChild(l);URL.revokeObjectURL(l.href);}
            function _setS(t,m){_sd.textContent=m;_sd.className=t;}
            function _cS(){_sd.textContent='';_sd.className='';}
            _fi.addEventListener('change',(ev)=>{_addFs(ev.target.files);ev.target.value=null;});
            _dz.addEventListener('dragover',(e)=>{e.preventDefault();e.stopPropagation();e.dataTransfer.dropEffect='copy';_dz.classList.add('drag-over');});
            _dz.addEventListener('dragleave',(e)=>{e.preventDefault();e.stopPropagation();_dz.classList.remove('drag-over');});
            _dz.addEventListener('drop',(e)=>{e.preventDefault();e.stopPropagation();_dz.classList.remove('drag-over');_addFs(e.dataTransfer.files);});
            _sb.addEventListener('click',async()=>{
                if(_afi===null){_setS('error','保存ファイル未選択');return;}
                const fi=_pfi.find(f=>f.id===_afi);
                if(!fi||!fi.currentPageOrder||fi.currentPageOrder.length===0){_setS('error','保存するページがありません。');return;}
                _setS('loading',`"${fi.name}" 保存中...`);_sb.disabled=true;
                try{
                    const oab=await _rFAB(fi.file);const opd=await _PD.load(oab,{ignoreEncryption:true});const npd=await _PD.create();
                    const ptci=fi.currentPageOrder.map(pn=>pn-1);const vi=ptci.filter(idx=>idx>=0&&idx<opd.getPageCount());
                    if(vi.length===0)throw new Error("有効なページがありません。");
                    const cp=await npd.copyPages(opd,vi);cp.forEach(p=>npd.addPage(p));
                    const pb=await npd.save();const nfn=fi.name.replace(/\.pdf$/i,'_edited.pdf');_dlP(pb,nfn);_setS('success',`"${nfn}" 保存完了`);
                }catch(err){_setS('error',`保存失敗: ${err.message}`);}
                finally{if(_afi!==null){const cfi=_pfi.find(f=>f.id===_afi);_sb.disabled=!(cfi?.currentPageOrder?.length>0);}else{_sb.disabled=true;}}
            });
            async function _gPBM(fi){
                if(!fi.originalPages||!fi.currentPageOrder){
                    const ab=await _rFAB(fi.file);const td=await _PD.load(ab,{ignoreEncryption:true});
                    if(td.getPageCount()===0)return null;
                    return ab;
                }
                let ie=fi.currentPageOrder.length!==fi.originalPages.length||fi.currentPageOrder.some((p,i)=>p!==fi.originalPages[i]);
                if(ie){
                    if(fi.currentPageOrder.length===0)return null;
                    _setS('info',`"${fi.name}" の編集内容を適用中...`);
                    const oab=await _rFAB(fi.file);const opd=await _PD.load(oab,{ignoreEncryption:true});const npd=await _PD.create();
                    const ptci=fi.currentPageOrder.map(pn=>pn-1);const vi=ptci.filter(idx=>idx>=0&&idx<opd.getPageCount());
                    if(vi.length===0)return null;
                    const cp=await npd.copyPages(opd,vi);cp.forEach(p=>npd.addPage(p));return await npd.save();
                }else{
                    const ab=await _rFAB(fi.file);const td=await _PD.load(ab,{ignoreEncryption:true});
                    if(td.getPageCount()===0)return null;
                    return ab;
                }
            }
            _mb.addEventListener('click',async()=>{
                if(_pfi.length<2){_setS('warning','結合するには少なくとも2つのPDFファイルが必要です。');return;}
                _setS('loading','PDFファイルを結合中...');_mb.disabled=true;_fi.disabled=true;
                try{
                    const mpd=await _PD.create();let tpm=0;let fpc=0;
                    for(let i=0;i<_pfi.length;i++){
                        const fi=_pfi[i];_setS('loading',`ファイル "${fi.name}" を準備中 (${i+1}/${_pfi.length})...`);
                        const pbm=await _gPBM(fi);if(!pbm)continue;
                        const ptm=await _PD.load(pbm,{ignoreEncryption:true});if(ptm.getPageCount()===0)continue;
                        _setS('loading',`"${fi.name}" のページを結合中 (${i+1}/${_pfi.length})...`);
                        const pi=ptm.getPageIndices();const cp=await mpd.copyPages(ptm,pi);cp.forEach(p=>mpd.addPage(p));tpm+=cp.length;fpc++;
                    }
                    if(tpm===0)throw new Error(fpc===0&&_pfi.length>0?"結合できるページが含まれるPDFファイルがありませんでした。":"結合の結果、ページ数が0になりました。");
                    const mpb=await mpd.save();_dlP(mpb,'merged_document.pdf');_setS('success',`PDFファイルの結合が完了しました。${fpc}個のファイルから合計${tpm}ページ。`);
                }catch(err){_setS('error',`PDF結合に失敗しました: ${err.message}`);}
                finally{_mb.disabled=_pfi.length<2;_fi.disabled=false;}
            });
            _pv.addEventListener('click',(e)=>{
                if(!_afi)return;
                if(!e.target.closest('#pageList li')){
                    const fi=_pfi.find(f=>f.id===_afi);
                    if(fi&&fi.selectedPageOriginalNums.length>0){fi.selectedPageOriginalNums=[];fi.lastClickedOriginalPageNum=null;_uPSSV(fi);}
                }
            });
            _rFl();
        });
    })();
    </script>
</body>
</html>