screenshot

Bookmarklets

Download

javascript:(function(){const data=localStorage.getItem('__localnovelcraft_internal_data');if(!data){alert('No data found');return}try{const json=JSON.parse(data);const str=JSON.stringify(json,null,2);const b=new Blob([str],{type:'application/json'});const url=URL.createObjectURL(b);const a=document.createElement('a');a.href=url;a.download='exported_data.json';document.body.append(a);a.click();a.remove();URL.revokeObjectURL(url)}catch(e){alert('Error: '+e)}})();

Load

javascript:(function(){const s=document.createElement('style'),d=document.body; s.innerHTML=`#dropzone{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.8);display:flex;justify-content:center;align-items:center;font-family:sans-serif;color:#fff;} #dropzone div{padding:20px;border:4px dashed #ccc;border-radius:10px;text-align:center;max-width:400px;}`; d.appendChild(s); const dz=document.createElement('div'); dz.id='dropzone'; dz.innerHTML=`<div>Drop your <strong>.json</strong> file here<br>(or click to select)</div>`; d.appendChild(dz); let file=null; dz.addEventListener('dragover',(e)=>{e.preventDefault();dz.style.borderColor='#007bff'}); dz.addEventListener('dragleave',()=>dz.style.borderColor='#ccc'); dz.addEventListener('drop',(e)=>{e.preventDefault(); file=e.dataTransfer.files[0]; dz.style.borderColor='#ccc'; processFile(file);}); dz.addEventListener('click',()=>{const input=document.createElement('input'); input.type='file'; input.accept='.json'; input.onchange=()=>processFile(input.files[0]); input.click();}); function processFile(f){if(!f||!f.name.endsWith('.json')){alert('Please select a valid .json file'); return;} const reader=new FileReader(); reader.onload=(ev)=>{try{const json=JSON.parse(ev.target.result); localStorage.setItem('__localnovelcraft_internal_data',JSON.stringify(json)); alert('Data imported successfully!'); location.reload();}catch(e){alert(`Error: ${e.message}\n\nInvalid JSON format.`);d.removeChild(dz); d.removeChild(s);}}; reader.readAsText(f);}})();

Prettified code

Download

(function () {
    const data = localStorage.getItem('__localnovelcraft_internal_data');
    if (!data) {
        alert('No data found');
        return;
    }
    try {
        const json = JSON.parse(data);
        const str = JSON.stringify(json, null, 2);
        const b = new Blob([str], { type: 'application/json' });
        const url = URL.createObjectURL(b);
        const a = document.createElement('a');
        a.href = url;
        a.download = 'nc_data.json';
        document.body.append(a);
        a.click();
        a.remove();
        URL.revokeObjectURL(url);
    } catch (e) {
        alert('Error: ' + e);
    }
})();

Load

(function () {
    const s = document.createElement('style'),
        d = document.body;
    s.innerHTML = `#dropzone {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.8);
    display: flex;
    justify-content: center;
    align-items: center;
    font-family: sans-serif;
    color: #fff;
}
#dropzone div {
    padding: 20px;
    border: 4px dashed #ccc;
    border-radius: 10px;
    text-align: center;
    max-width: 400px;
}`;
    d.appendChild(s);
    const dz = document.createElement('div');
    dz.id = 'dropzone';
    dz.innerHTML = `<div>Drop your <strong>.json</strong> file here<br>(or click to select)</div>`;
    d.appendChild(dz);
    let file = null;
    dz.addEventListener('dragover', (e) => {
        e.preventDefault();
        dz.style.borderColor = '#007bff';
    });
    dz.addEventListener('dragleave', () => (dz.style.borderColor = '#ccc'));
    dz.addEventListener('drop', (e) => {
        e.preventDefault();
        file = e.dataTransfer.files[0];
        dz.style.borderColor = '#ccc';
        processFile(file);
    });
    dz.addEventListener('click', () => {
        const input = document.createElement('input');
        input.type = 'file';
        input.accept = '.json';
        input.onchange = () => processFile(input.files[0]);
        input.click();
    });
    function processFile(f) {
        if (!f || !f.name.endsWith('.json')) {
            alert('Please select a valid .json file');
            return;
        }
        const reader = new FileReader();
        reader.onload = (ev) => {
            try {
                const json = JSON.parse(ev.target.result);
                localStorage.setItem(
                    '__localnovelcraft_internal_data',
                    JSON.stringify(json),
                );
                alert('Data imported successfully!');
                location.reload();
            } catch (e) {
                alert(`Error: ${e.message}\n\nInvalid JSON format.`);
                d.removeChild(dz);
                d.removeChild(s);
            }
        };
        reader.readAsText(f);
    }
})();
Edit Report
Pub: 12 Mar 2025 00:29 UTC
Views: 62