universal_table/app/assets/javascripts/mind_map/utils/custom.main.js

52 lines
1.7 KiB
JavaScript

import jsMind from '../jsmind/jsmind.js'
import '../jsmind/plugins/jsmind.draggable-node.js'
import { JsmindSearch } from './custom.search.js'
import { JsmindToolbar } from './custom.toolbar.js'
import { mockSearchApi } from './custom.config.js'
/**
* 初始化 jsMind 心智圖
* Initialize jsMind mind map
* @param {Object} mind - 心智圖的資料 (Mind map data)
* @param {Object} options - 配置選項 (Configuration options)
* @param {boolean} isEditable - 是否可編輯 (Is editable)
* @returns {Object} - jsMind 實例 (jsMind instance)
*/
export function initJsmind(mind, options, isEditable) {
const container = document.getElementById(options.container)
container.innerHTML = ''
options.editable = isEditable
const jm = new jsMind(options)
// 依據是否可編輯調整顯示為連結或文字
// Adjust display as a link or text based on editability
const formattedData = mind.data.map((node) => {
node.topic =
!isEditable && node.link
? `<a href="${node.link}" target="_blank">${node.text}</a>`
: node.text || node.topic
return node
})
jm.show({ meta: mind.meta, format: 'node_array', data: formattedData })
// 掛載附加模組(遠程搜尋 & 工具列)
// Attach additional modules (Remote search & Toolbar)
if (isEditable) {
new JsmindSearch(jm, mockSearchApi, options.tableUID);
new JsmindToolbar(jm, options)
}
return jm
}
/**
* 獲取當前心智圖數據
* Get the current mind map data
* @param {Object} jm - jsMind 實例 (jsMind instance)
* @returns {Object} - 心智圖數據 (Mind map data)
*/
export function getJsmindData(jm) {
return jm.get_data('node_array')
}