// ==UserScript==
// @name processon 导出
// @namespace https://www.yffjglcms.com/
// @version 0.1.20230301
// @description 支持脑图文本导出
// @author yffjglcms
// @match *://www.processon.com/*
// @grant none
// @require https://cdn.bootcss.com/FileSaver.js/2014-11-29/FileSaver.min.js
// @downloadURL https://update.greasyfork.icu/scripts/393072/processon%20%E5%AF%BC%E5%87%BA.user.js
// @updateURL https://update.greasyfork.icu/scripts/393072/processon%20%E5%AF%BC%E5%87%BA.meta.js
// ==/UserScript==
// Your code here...
(function () {
$($('#outline-ifram')).load(()=>{
console.log('ifreame done')
const $if = $($("#outline-ifram")).contents()
// 导航。两种页面不同的样式
const $nav = $(".view-header-right")[0] ? $(".view-header-right") : $(window.parent.document).find('.file_head_right')
// 是否为脑图
const $mind_designer = $(".mind-designer")
// 大纲
// 大纲标题
const $title = $("#root > div");
const $content = $if.find("#outline-con")
// 获取标题
function getTitle() {
return $title.html()
}
console.log(getTitle())
addBtn();
bindExport();
// 是否为脑图
function isMindView() {
return !!($mind_designer[0])
}
// 添加导出按钮
function addBtn() {
if (isMindView()) {
if(!$('#exportIt')[0]) // 避免重重创建按钮
$nav.prepend(``)
} else {
if(!$('#notSupportExportIt')[0]) // 避免重重创建按钮
$nav.prepend(``)
}
}
// 获取结果
function getResult(){
// debugger
var cld = []
var els = $content.children(".node-element.wider")
for (let i = 0; i < els.length; i++) {
cld.push(getContent(els[i]))
}
return {
title: getTitle(),
children: cld
}
}
// 获取内容,param->node-element
function getContent(node) {
// debugger;
if(!node) return null;
var $node = $(node)
var obj = {};
var children = [];
var title = $node.find(".node-self .node-title").html();
if(title.endsWith('
')){
title = title.substring(0, title.length-4);
}
obj.title = title
var $children = $node.children(".node-children").children(".node-element")
if ($children.length > 0) {
for (let i = 0; i < $children.length; i++) {
children.push(getContent($children[i]))
}
obj.children = children;
}
return obj;
}
// 导出
function exportIt() {
// 切换为大纲
$(".item.abstract").click();
var result = getResult();
console.log(result)
exportTxt(result)
}
// 绑定事件
function bindExport(){
$nav.on("click","#exportIt", exportIt)
}
// 导出json文件
function exportJson(result){
var blob = new Blob([JSON.stringify(result,"", "\t")], {type: "text/plain;charset=utf-8"});
saveAs(blob, "mind.json");
}
/**导出txt文件 start*/
var uSpan = "\t"
var uLine = "\n"
function getNode(json, span) {
// debugger
if (!json) return ""
var txt = span + json.title + uLine;
if (json.children) {
for (let i = 0; i < json.children.length; i++) {
txt += getNode(json.children[i], span + uSpan)
}
}
return txt;
}
function exportTxt(result){
var blob = new Blob([getNode(result, "")], {type: "text/plain;charset=utf-8"});
saveAs(blob, getTitle()+".txt");
}
/**导出txt文件 end*/
})
})();