节点传送

feicaixian 2022-4-25 725

插件功能:通过快捷键,将节点送到指定主题或收集箱。

使用场景:在roamedit中记录的时候,突然想到一个idea,要记录到某个主题中。安装这个插件后,不用打开对应主题,直接在当前主题下记录这个idea,然后一键发送过去。

示例: 在写日记的时候,记录了一条总结,想要放到[[生活经验]]主题内,那就在节点后面打上标签,使用#或[[]]均可。注意标签要放在节点最后面。

写完后使用快捷键ctrl+y,该block就会被转移到[[生活经验]]主题内,如下图所示。

如果要发送待办到收集箱,不要写标签,直接使用快捷键ctrl+y,该block会被转化为待办事项,送到收集箱内。需要将收集箱的id写入插件代码中。

 

插件代码:

pluginManager.register("node_transfer", {
    node_trans(nv) {
        var inbox_ky = ""; 
        // 在inbox_ky中填入收集箱的id,即可开启送入收集箱功能。
        // 示例: var inbox_ky = "ujD-sYTj88h1r"; 

        var topic_name, target_data;
        var res=/(\[\[.*\]\])?(#[^ ]*)?(?= *$)/.exec(nv.data.ori);
        if(res!=undefined && res[0]!=""){
            //送到#或[[]]指定的主题
            var target=res[0];
            topic_name = ((target.indexOf("#")!=-1) && target.replace("#","")) || ((target.indexOf("[[")!=-1) && target.replace("[[","").replace("]]","")) || target;
            target_data=plugin.memory.getTopic(topic_name);
            var new_ky = NNodeView.mkid();
            plugin.inodeModel.save({ky:new_ky, pky:target_data.ky, ori:timekit.format('yyyy-MM-dd hh:mm:ss 星期w n')});
            var new_ori = nv.data.ori.replace("#"+res,"");
            nv.setData({pky:new_ky, ori:new_ori});
            nv.$node.remove();
            console.log("transfered to topic [[%s]].",topic_name);
        }
        else if (inbox_ky != ""){
            //转为待办
            nv.setData({ori:"] "+nv.data.ori});
            var cur_node_id=nv.$node[0].getAttribute('id');
            var child_node = $('[id='+cur_node_id+'] [nel=dom].node');
            for (var x of child_node){
                x.nv.setData({ori:"] "+x.nv.data.ori});
            }
            
            //送到指定节点下,一般是收集箱
            nv.setData({pky:inbox_ky});
            nv.$node.remove();
            console.log("transfered to inbox.");
        }
        
        
    },
    after_hotkey_run() {
        //e是event,e.target是dom对象,dom对象可以拿到对应NNodeView对象
        plugin.hotkey.add("cmd+y:节点传送",(e=>{
            plugin.node_transfer.node_trans(e.target.nv);
        }
        ))
    },
    run() {
        plugin.menu.addItems("node", {
            myflow: {
                icon: "arrow-right",
                label: "节点转移",
                hotkey: "cmd+y",
                action() {
                    plugin.node_transfer.node_trans(this.nv);
                }
            }
        })
    }
});

上述代码参考自动引用插件写成,分享给大家,使用前先测试测试哦。

 

快速回复
最新回复 (2)
  • leo 2022-4-25
    0 2
    厉害
  • 加佳 2022-4-25
    0 3
    大佬!!
返回