批量转换文档的标题

批量转换文档的标题

see https://ld246.com/article/1726880977052

//!js
return (async () => {

    /////// 参数配置区 ///////

    // 需要转换的文档id
    const docBlockId = '20240916174656-fv3lpy5';

    // 源标题
    const srcHead = 'h2';

    // 目标标题
    const toHead = 'h3';

    /////// 主逻辑区 ///////

    // 防止死循环
    if(isRunning()) return render(`执行中,不必重复执行`);

    // sql查询
    const sql = `select * from blocks where type='h' and subtype='${srcHead.toLowerCase()}' and root_id='${docBlockId}'`;
    const result = await query(sql);
    // 无数据提示
    if(result.length === 0) return error('未找到任何数据');
    // 转换标题
    await convertHead(result);
    // 渲染结果
    return render('已转换完成');

    /////// 功能函数区 ///////

    // 标题转换函数
    async function convertHead(result) {
        for(const head of result) {
            const data = "#".repeat(toHead.split('').pop()) + " " + head.content
            console.log(data);
            await fetchSyncPost('/api/block/updateBlock', {dataType:"markdown", id:head.id, data: data});
        }
    }

    // 查询SQL函数
    async function query(sql) {
        const result = await fetchSyncPost('/api/query/sql', { "stmt": sql });
        if (result.code !== 0) {
            console.error("查询数据库出错", result.msg);
            return [];
        }
        return result.data;
    }
    // 渲染结果函数
    function render(html, style) {
        onRender('.b3-form__space--small').then((container) => {
            container.style = style || 'color:var(--b3-card-info-color);';
            container.innerHTML = html;
        });
        return [];
    }
    // 渲染错误输出
    function error(html, style) {
        return render(html, style || 'color:red;');
    }
    // 监听dom渲染
    function onRender(selector) {
        return new Promise(resolve => {
            const check = () => {
                let el = item.querySelector(selector);
                if (el) resolve(el); else requestAnimationFrame(check);
            };
            check();
        });
    }

    // 检测是否正在执行,防止死循环
    function isRunning(delay) {
        if(window.convertHeadRunning) return true;
        window.convertHeadRunning = true;
        // 这里保证3秒钟内只会被执行一次,可根据您脚本具体执行时间进行调整(这种调整通常可停止某些原因导致的死循环)
        setTimeout('window.convertHeadRunning = false', delay || 3000);
        return false;
    }
})();

image.png

留下你的脚步
推荐阅读