update eaf package

This commit is contained in:
2021-01-30 14:52:51 +01:00
parent 84eb4929ee
commit 5207af83cb
4981 changed files with 11795 additions and 761570 deletions

View File

@@ -20,33 +20,42 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from PyQt5 import QtCore
from PyQt5.QtCore import QUrl, QTimer
from PyQt5.QtCore import QUrl, QTimer, QEvent, QPointF, Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QColor
from PyQt5.QtGui import QColor, QMouseEvent
from core.browser import BrowserBuffer
from core.utils import touch, string_to_base64, interactive
from html import escape, unescape
import os
import base64
import time
class AppBuffer(BrowserBuffer):
get_middle_node_id = QtCore.pyqtSignal(str)
get_brother_node_id = QtCore.pyqtSignal(str)
get_sub_node_id = QtCore.pyqtSignal(str)
export_org_json = QtCore.pyqtSignal(str, str)
def __init__(self, buffer_id, url, config_dir, arguments, emacs_var_dict, module_path):
BrowserBuffer.__init__(self, buffer_id, url, config_dir, arguments, emacs_var_dict, module_path, False)
self.url = url
index_file = "file://" + (os.path.join(os.path.dirname(__file__), "index.html"))
self.buffer_widget.setUrl(QUrl(index_file))
index_file = os.path.join(os.path.dirname(__file__), "index.html")
self.buffer_widget.setUrl(QUrl.fromLocalFile(index_file))
self.cut_node_id = None
for method_name in ["add_sub_node", "add_brother_node", "remove_node", "remove_middle_node", "add_middle_node", "update_node_topic_inline"]:
edit_mode = "true" if self.emacs_var_dict["eaf-mindmap-edit-mode"] == "true" else "false"
for method_name in ["add_sub_node", "add_brother_node", "add_middle_node"]:
self.build_js_method(method_name, True, js_kwargs={"inline": edit_mode})
for method_name in ["remove_node", "remove_middle_node", "update_node_topic_inline"]:
self.build_js_method(method_name, True)
for method_name in ["zoom_in", "zoom_out", "zoom_reset",
"select_up_node", "select_down_node", "select_left_node", "select_right_node",
"toggle_node", "save_screenshot"]:
"toggle_node", "toggle_node_selection", "save_screenshot"]:
self.build_js_method(method_name)
for method_name in ["zoom_in", "zoom_out", "zoom_reset", "remove_node",
@@ -57,11 +66,16 @@ class AppBuffer(BrowserBuffer):
self.build_all_methods(self)
QTimer.singleShot(500, self.init_file)
QTimer.singleShot(500, self.initialize)
def resize_view(self):
self.buffer_widget.eval_js("relayout();")
def initialize(self):
self.init_file()
self.focus_widget(QMouseEvent(QEvent.MouseButtonPress, QPointF(0, 0), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier))
def init_file(self):
self.url = os.path.expanduser(self.url)
@@ -73,20 +87,38 @@ class AppBuffer(BrowserBuffer):
color = "#FFFFFF"
if self.emacs_var_dict["eaf-mindmap-dark-mode"] == "true" or \
(self.emacs_var_dict["eaf-mindmap-dark-mode"] == "" and self.emacs_var_dict["eaf-emacs-theme-mode"] == "dark"):
(self.emacs_var_dict["eaf-mindmap-dark-mode"] == "follow" and self.emacs_var_dict["eaf-emacs-theme-mode"] == "dark"):
color = "#242525"
self.buffer_widget.eval_js("init_background('{}');".format(color))
self.change_title(self.get_root_node_topic())
def build_js_method(self, method_name, auto_save=False):
def build_js_method(self, method_name, auto_save=False, js_kwargs=None):
js_kwargs = js_kwargs or {}
js_func_args = ", ".join('{}={}'.format(k, v) for k, v in js_kwargs.items())
def _do ():
self.buffer_widget.eval_js("{}();".format(method_name))
self.buffer_widget.eval_js("{}({});".format(method_name, js_func_args))
if auto_save:
self.save_file(False)
setattr(self, method_name, _do)
@interactive
def refresh_page(self):
self.url = os.path.expanduser(self.url)
if os.path.exists(self.url):
with open(self.url, "r") as f:
self.buffer_widget.execute_js("refresh('{}');".format(string_to_base64(f.read())))
color = "#FFFFFF"
if self.emacs_var_dict["eaf-mindmap-dark-mode"] == "true" or \
(self.emacs_var_dict["eaf-mindmap-dark-mode"] == "follow" and self.emacs_var_dict["eaf-emacs-theme-mode"] == "dark"):
color = "#242525"
self.buffer_widget.eval_js("init_background('{}');".format(color))
self.change_title(self.get_root_node_topic())
@interactive(insert_or_do=True)
def change_background_color(self):
self.send_input_message("Change node background color(Input color): ", "change_background_color")
@@ -98,12 +130,12 @@ class AppBuffer(BrowserBuffer):
@interactive(insert_or_do=True)
def copy_node_topic(self):
node_topic = self.buffer_widget.execute_js("get_node_topic();")
self.eval_in_emacs.emit('''(kill-new "{}")'''.format(node_topic))
self.eval_in_emacs.emit('kill-new', [node_topic])
self.message_to_emacs.emit("Copy: {}".format(node_topic))
@interactive(insert_or_do=True)
def paste_node_topic(self):
text = QApplication.clipboard().text()
text = self.get_clipboard_text()
if text.strip() != "":
self.buffer_widget.eval_js("update_node_topic('{}');".format(text))
self.message_to_emacs.emit("Paste: {}".format(text))
@@ -138,26 +170,63 @@ class AppBuffer(BrowserBuffer):
"Update topic: ",
"update_node_topic",
"string",
self.buffer_widget.execute_js("get_node_topic();"))
unescape(self.buffer_widget.execute_js("get_node_topic();")))
def handle_update_node_topic(self, topic):
self.buffer_widget.eval_js("update_node_topic('{}');".format(topic))
self.buffer_widget.eval_js("update_node_topic('{}');".format(escape(topic)))
self.change_title(self.get_root_node_topic())
self.save_file(False)
def handle_input_message(self, result_type, result_content):
if result_type == "update_node_topic":
def handle_input_response(self, callback_tag, result_content):
if callback_tag == "update_node_topic":
self.handle_update_node_topic(str(result_content))
elif result_type == "change_node_background":
elif callback_tag == "change_node_background":
print(str(result_content))
self.buffer_widget.eval_js("change_node_background('{}');".format(str(result_content)))
elif result_type == "change_background_color":
elif callback_tag == "change_background_color":
self.buffer_widget.eval_js("change_background_color('{}');".format(str(result_content)))
elif result_type == "change_text_color":
elif callback_tag == "change_text_color":
self.buffer_widget.eval_js("change_text_color('{}');".format(str(result_content)))
def add_multiple_sub_nodes(self):
node_id = self.buffer_widget.execute_js("_jm.get_selected_node();")
if node_id != None:
self.get_sub_node_id.emit(self.buffer_id)
else:
self.message_to_emacs.emit("No selected node.")
def add_multiple_brother_nodes(self):
node_id = self.buffer_widget.execute_js("_jm.get_selected_node();")
if node_id == None:
self.message_to_emacs.emit("No selected node.")
elif not self.buffer_widget.execute_js("_jm.get_selected_node().parent;"):
self.message_to_emacs.emit("No parent node for selected node.")
else:
self.get_brother_node_id.emit(self.buffer_id)
def add_multiple_middle_nodes(self):
node_id = self.buffer_widget.execute_js("_jm.get_selected_node();")
if node_id == None:
self.message_to_emacs.emit("No selected node.")
elif not self.buffer_widget.execute_js("_jm.get_selected_node().parent;"):
self.message_to_emacs.emit("No parent node for selected node.")
else:
self.get_middle_node_id.emit(self.buffer_id)
@interactive
def add_texted_sub_node(self,text):
self.buffer_widget.eval_js("add_texted_sub_node('{}');".format(str(text)))
@interactive
def add_texted_brother_node(self,text):
self.buffer_widget.eval_js("add_texted_brother_node('{}');".format(str(text)))
@interactive
def add_texted_middle_node(self,text):
self.buffer_widget.eval_js("add_texted_middle_node('{}');".format(str(text)))
def is_focus(self):
return self.buffer_widget.execute_js("node_is_focus();")
@@ -174,7 +243,7 @@ class AppBuffer(BrowserBuffer):
def get_save_path(self, extension_name):
if self.url.strip() == "":
return os.path.join(os.path.expanduser(self.emacs_var_dict["eaf-mindmap-save-path"]), self.get_root_node_topic() + "." + extension_name)
return os.path.join(os.path.expanduser(self.emacs_var_dict["eaf-mindmap-save-path"]), self.get_root_node_topic().replace(" ", "_") + time.strftime("_%Y%m%d_%H%M%S", time.localtime(int(time.time()))) + "." + extension_name)
else:
return os.path.splitext(self.url)[0] + "." + extension_name

View File

@@ -7,11 +7,11 @@
;; Copyright (C) 2020, Andy Stewart, all rights reserved.
;; Created: 2020-02-28 16:09:02
;; Version: 0.1
;; Last-Updated: 2020-02-28 16:09:02
;; By: Andy Stewart
;; Last-Updated: Tue Jan 19 01:15:47 2021 (-0500)
;; By: Mingde (Matthew) Zeng
;; URL: http://www.emacswiki.org/emacs/download/eaf-mindmap.el
;; Keywords:
;; Compatibility: GNU Emacs 26.3
;; Compatibility: emacs-version >= 27
;;
;; Features that might be required by this library:
;;
@@ -84,11 +84,6 @@
;;; Code:
(dbus-register-signal
:session "com.lazycat.eaf" "/com/lazycat/eaf"
"com.lazycat.eaf" "export_org_json"
#'eaf--export-org-json)
(defun eaf--export-org-json (org-json-content org-file-path)
(let (org-parse-data)
(with-temp-buffer
@@ -114,8 +109,10 @@
(end-of-line)
(backward-char 1)
(point)))))
(when (> (length header-string) 2)
(setq header-string (string-remove-prefix "*" header-string)))
(let ((loop-times (/ (- (length header-string) 1) 2)))
(while (> loop-times 0)
(setq loop-times (- loop-times 1))
(setq header-string (string-remove-prefix "*" header-string))))
(setq org-parse-data (concat org-parse-data (format "%s%s\n" header-string content-string)))))
(with-temp-file org-file-path
@@ -302,6 +299,78 @@ actural call `org-json-gen-alist1' to work."
(concat h " " vs))
))
(defun eaf--add-multiple-sub-nodes (buffer-id)
"EAF Browser: edit FOCUS-TEXT with Emacs's BUFFER-ID."
(split-window-below -10)
(other-window 1)
(let ((edit-text-buffer (generate-new-buffer (format "eaf-%s-add-multiple-sub-nodes" eaf--buffer-app-name))))
(with-current-buffer edit-text-buffer
(eaf-edit-mode)
(set (make-local-variable 'eaf--buffer-id) buffer-id))
(switch-to-buffer edit-text-buffer)
(setq-local eaf-mindmap--current-add-mode "sub")
(setq header-line-format
(substitute-command-keys
(concat
"\\<eaf-edit-mode-map>"
" EAF/" eaf--buffer-app-name " EDIT: "
"Confirm with `\\[eaf-edit-buffer-confirm]', "
"Cancel with `\\[eaf-edit-buffer-cancel]', "
"Separate diffrent nodes with 'RET'. "
)))
;; When text line number above
(when (> (line-number-at-pos) 30)
(beginning-of-buffer))
))
(defun eaf--add-multiple-brother-nodes (buffer-id)
"EAF Browser: edit FOCUS-TEXT with Emacs's BUFFER-ID."
(split-window-below -10)
(other-window 1)
(let ((edit-text-buffer (generate-new-buffer (format "eaf-%s-add-multiple-brother-nodes" eaf--buffer-app-name))))
(with-current-buffer edit-text-buffer
(eaf-edit-mode)
(set (make-local-variable 'eaf--buffer-id) buffer-id))
(switch-to-buffer edit-text-buffer)
(setq-local eaf-mindmap--current-add-mode "brother")
(setq header-line-format
(substitute-command-keys
(concat
"\\<eaf-edit-mode-map>"
" EAF/" eaf--buffer-app-name " EDIT: "
"Confirm with `\\[eaf-edit-buffer-confirm]', "
"Cancel with `\\[eaf-edit-buffer-cancel]', "
"Separate diffrent nodes with 'RET'. "
)))
;; When text line number above
(when (> (line-number-at-pos) 30)
(beginning-of-buffer))
))
(defun eaf--add-multiple-middle-nodes (buffer-id)
"EAF Browser: edit FOCUS-TEXT with Emacs's BUFFER-ID."
(split-window-below -10)
(other-window 1)
(let ((edit-text-buffer (generate-new-buffer (format "eaf-%s-add-multiple-middle-nodes" eaf--buffer-app-name))))
(with-current-buffer edit-text-buffer
(eaf-edit-mode)
(set (make-local-variable 'eaf--buffer-id) buffer-id))
(switch-to-buffer edit-text-buffer)
(setq-local eaf-mindmap--current-add-mode "middle")
(setq header-line-format
(substitute-command-keys
(concat
"\\<eaf-edit-mode-map>"
" EAF/" eaf--buffer-app-name " EDIT: "
"Confirm with `\\[eaf-edit-buffer-confirm]', "
"Cancel with `\\[eaf-edit-buffer-cancel]', "
"Separate diffrent nodes with 'RET'. "
)))
;; When text line number above
(when (> (line-number-at-pos) 30)
(beginning-of-buffer))
))
(provide 'eaf-mindmap)
;;; eaf-mindmap.el ends here

View File

@@ -1,289 +1,369 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="jsmind.css" />
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="jsmind.css" />
<script type="text/javascript" src="jsmind.js"></script>
<script type="text/javascript" src="jsmind.draggable.js"></script>
<script type="text/javascript" src="jsmind.screenshot.js"></script>
</head>
<body>
<div id="jsmind_container"></div>
<script type="text/javascript" src="jsmind.js"></script>
<script type="text/javascript" src="jsmind.draggable.js"></script>
<script type="text/javascript" src="jsmind.screenshot.js"></script>
</head>
<body>
<div id="jsmind_container"></div>
<script type="text/javascript">
var _jm = null;
<script type="text/javascript">
var _jm = null;
var _cur_nodeid = null;
var options = {
container:'jsmind_container',
editable:true
}
var options = {
container:'jsmind_container',
editable:true
}
function change_background_color(color) {
var selected_id = get_selected_nodeid();
if(selected_id) {
_jm.set_node_color(selected_id, color, null);
}
function change_background_color(color) {
var selected_id = get_selected_nodeid();
if(selected_id) {
_jm.set_node_color(selected_id, color, null);
}
}
function change_text_color(color) {
var selected_id = get_selected_nodeid();
if(selected_id) {
_jm.set_node_color(selected_id, null, color);
}
}
function select_root_node() {
_jm.select_node("root");
}
function init_root_node() {
_jm = jsMind.show(options);
select_root_node();
}
function init_background(color) {
document.getElementById("jsmind_container").style.backgroundColor = color;
}
function get_root_node_topic() {
return _jm.get_node("root").topic;
}
function get_node_topic() {
var selected_node = _jm.get_selected_node(); // as parent of new node
if (selected_node) {
return selected_node.topic;
} else {
return ""
}
}
function add_sub_node(inline=false){
var selected_node = _jm.get_selected_node(); // as parent of new node
if(!selected_node) {
_jm.move_node(selected_id,'_first_');
}
function change_text_color(color) {
var selected_id = get_selected_nodeid();
if(selected_id) {
_jm.set_node_color(selected_id, null, color);
}
}
var nodeid = jsMind.util.uuid.newid();
var node = _jm.add_node(selected_node, nodeid, 'Topic');
_jm.select_node(node);
if (inline) {
_jm.begin_edit(node);
}
}
function select_root_node() {
_jm.select_node("root");
}
function add_texted_sub_node(text){
var selected_node = _jm.get_selected_node(); // as parent of new node
if(!selected_node) {
_jm.move_node(selected_id,'_first_');
}
function init_root_node() {
_jm = jsMind.show(options);
select_root_node();
}
var nodeid = jsMind.util.uuid.newid();
_jm.add_node(selected_node, nodeid, text);
}
function init_background(color) {
document.getElementById("jsmind_container").style.backgroundColor = color;
}
function add_brother_node(inline=false){
var selected_node = _jm.get_selected_node(); // as parent of new node
if(!selected_node) {
_jm.move_node(selected_id,'_first_');
}
if(_jm.view.is_editing()) {
_jm.end_edit();
} else {
var nodeid = jsMind.util.uuid.newid();
var node = _jm.insert_node_after(selected_node, nodeid, 'Topic');
_jm.select_node(node);
if (inline) {
_jm.begin_edit(node);
}
}
}
function get_root_node_topic() {
return _jm.get_node("root").topic;
}
function add_texted_brother_node(text){
var selected_node = _jm.get_selected_node(); // as parent of new node
if(!selected_node) {
_jm.move_node(selected_id,'_first_');
}
if(_jm.view.is_editing()) {
_jm.end_edit();
} else {
var nodeid = jsMind.util.uuid.newid();
_jm.insert_node_after(selected_node, nodeid, text);
}
}
function get_node_topic() {
var selected_node = _jm.get_selected_node(); // as parent of new node
if (selected_node) {
return selected_node.topic;
} else {
return ""
}
}
function get_selected_nodeid(){
var selected_node = _jm.get_selected_node();
if(!!selected_node){
return selected_node.id;
}else{
return null;
}
}
function add_sub_node(){
var selected_node = _jm.get_selected_node(); // as parent of new node
if(!selected_node) {
_jm.move_node(selected_id,'_first_');
}
function remove_node(){
var selected_id = get_selected_nodeid();
if(selected_id) {
_jm.select_node(_jm.get_selected_node().parent);
_jm.remove_node(selected_id);
}
}
var nodeid = jsMind.util.uuid.newid();
var node = _jm.add_node(selected_node, nodeid, 'Topic');
_jm.select_node(node);
}
function update_node_topic(topic) {
var selected_id = get_selected_nodeid();
if (selected_id) {
_jm.update_node(selected_id, topic);
}
}
function add_brother_node(){
var selected_node = _jm.get_selected_node(); // as parent of new node
if(!selected_node) {
_jm.move_node(selected_id,'_first_');
}
if(_jm.view.is_editing()) {
_jm.end_edit();
} else {
var nodeid = jsMind.util.uuid.newid();
var node = _jm.insert_node_after(selected_node, nodeid, 'Topic');
_jm.select_node(node);
}
}
function update_node_topic_inline() {
var selected_id = get_selected_nodeid();
if (selected_id) {
_jm.begin_edit(selected_id);
}
}
function get_selected_nodeid(){
var selected_node = _jm.get_selected_node();
if(!!selected_node){
return selected_node.id;
}else{
return null;
}
}
function zoom_in() {
_jm.view.zoom_in();
};
function remove_node(){
var selected_id = get_selected_nodeid();
if(selected_id) {
_jm.select_node(_jm.get_selected_node().parent);
_jm.remove_node(selected_id);
}
}
function zoom_out() {
_jm.view.zoom_out();
};
function update_node_topic(topic) {
var selected_id = get_selected_nodeid();
if (selected_id) {
_jm.update_node(selected_id, topic);
}
}
function zoom_reset() {
_jm.view.set_zoom(1);
}
function update_node_topic_inline() {
var selected_id = get_selected_nodeid();
if (selected_id) {
_jm.begin_edit(selected_id);
}
}
function select_up_node(){
var selected_node = _jm.get_selected_node();
if(!!selected_node){
var up_node = _jm.find_node_before(selected_node);
if(!up_node){
var np = _jm.find_node_before(selected_node.parent);
if(!!np && np.children.length > 0){
up_node = np.children[np.children.length-1];
}
}
if(!!up_node){
_jm.select_node(up_node);
}
}
}
function zoom_in() {
_jm.view.zoom_in();
};
function select_down_node(){
var selected_node = _jm.get_selected_node();
if(!!selected_node){
var down_node = _jm.find_node_after(selected_node);
if(!down_node){
var np = _jm.find_node_after(selected_node.parent);
if(!!np && np.children.length > 0){
down_node = np.children[0];
}
}
if(!!down_node){
_jm.select_node(down_node);
}
}
}
function zoom_out() {
_jm.view.zoom_out();
};
function select_left_node(){
select_relative_node(-1);
}
function zoom_reset() {
_jm.view.set_zoom(1);
}
function select_right_node(){
select_relative_node(1);
}
function select_up_node(){
var selected_node = _jm.get_selected_node();
if(!!selected_node){
var up_node = _jm.find_node_before(selected_node);
if(!up_node){
var np = _jm.find_node_before(selected_node.parent);
if(!!np && np.children.length > 0){
up_node = np.children[np.children.length-1];
}
}
if(!!up_node){
_jm.select_node(up_node);
}
}
}
function select_relative_node(d){
var selected_node = _jm.get_selected_node();
var node = null;
if(!!selected_node){
if(selected_node.isroot){
var c = selected_node.children;
var children = [];
for(var i=0;i<c.length;i++){
if(c[i].direction === d){
children.push(i)
}
}
node = c[children[Math.floor((children.length-1)/2)]];
}
else if(selected_node.direction === d){
var children = selected_node.children;
var childrencount = children.length;
if(childrencount > 0){
node = children[Math.floor((childrencount-1)/2)]
}
}else{
node = selected_node.parent;
}
if(!!node){
_jm.select_node(node);
}
}
}
function select_down_node(){
var selected_node = _jm.get_selected_node();
if(!!selected_node){
var down_node = _jm.find_node_after(selected_node);
if(!down_node){
var np = _jm.find_node_after(selected_node.parent);
if(!!np && np.children.length > 0){
down_node = np.children[0];
}
}
if(!!down_node){
_jm.select_node(down_node);
}
}
}
function node_is_focus() {
return _jm.view.is_editing();
}
function select_left_node(){
select_relative_node(-1);
}
function toggle_node() {
var selected_node = _jm.get_selected_node(); // as parent of new node
if (selected_node) {
_jm.toggle_node(selected_node);
}
}
function select_right_node(){
select_relative_node(1);
}
function toggle_node_selection() {
var nodeid = get_selected_nodeid();
if (!!nodeid){
_cur_nodeid = nodeid;
_jm.select_clear();
}else{
_jm.select_node(_cur_nodeid || "root");
_cur_nodeid = null;
}
}
function select_relative_node(d){
var selected_node = _jm.get_selected_node();
var node = null;
if(!!selected_node){
if(selected_node.isroot){
var c = selected_node.children;
var children = [];
for(var i=0;i<c.length;i++){
if(c[i].direction === d){
children.push(i)
}
}
node = c[children[Math.floor((children.length-1)/2)]];
}
else if(selected_node.direction === d){
var children = selected_node.children;
var childrencount = children.length;
if(childrencount > 0){
node = children[Math.floor((childrencount-1)/2)]
}
}else{
node = selected_node.parent;
}
if(!!node){
_jm.select_node(node);
}
}
}
function save_screenshot() {
_jm.screenshot.shootDownload();
}
function node_is_focus() {
return _jm.view.is_editing();
}
function refresh(file_base64_content) {
var file_data = decodeURIComponent(escape(window.atob(file_base64_content)));
var mind = jsMind.util.json.string2json(file_data);
function toggle_node() {
var selected_node = _jm.get_selected_node(); // as parent of new node
if (selected_node) {
_jm.toggle_node(selected_node);
}
}
if(!!mind){
_jm.show(mind);
function save_screenshot() {
_jm.screenshot.shootDownload();
}
select_root_node();
}
}
function open_file(file_base64_content) {
_jm = jsMind.show(options);
function open_file(file_base64_content) {
_jm = jsMind.show(options);
var file_data = decodeURIComponent(escape(window.atob(file_base64_content)));
var mind = jsMind.util.json.string2json(file_data);
var file_data = decodeURIComponent(escape(window.atob(file_base64_content)));
var mind = jsMind.util.json.string2json(file_data);
if(!!mind){
_jm.show(mind);
if(!!mind){
_jm.show(mind);
select_root_node();
}
}
select_root_node();
}
}
function save_file() {
return jsMind.util.json.json2string(_jm.get_data());
}
function save_file() {
return jsMind.util.json.json2string(_jm.get_data());
}
function change_node_background(image) {
var selected_id = get_selected_nodeid();
if(selected_id) {
_jm.set_node_background_image(selected_id, "file://" + image);
}
}
function change_node_background(image) {
var selected_id = get_selected_nodeid();
if(selected_id) {
_jm.set_node_background_image(selected_id, "file://" + image);
}
}
function relayout() {
_jm.view.relayout();
}
function relayout() {
_jm.view.relayout();
}
function paste_node_tree(src_node_id) {
/* var selected_node = _jm.get_selected_node();
* if(!!selected_node){
* var src_node = _jm.get_node(src_node_id);
* _jm.move_node(src_node, selected_node, selected_node.direction);
* } */
function paste_node_tree(src_node_id) {
/* var selected_node = _jm.get_selected_node();
* if(!!selected_node){
* var src_node = _jm.get_node(src_node_id);
* _jm.move_node(src_node, selected_node, selected_node.direction);
* } */
var selected_node = _jm.get_selected_node();
if(!!selected_node){
var src_node = _jm.get_node(src_node_id);
_jm.move_node(src_node, src_node_id, selected_node.id, selected_node.direction);
}
}
var selected_node = _jm.get_selected_node();
if(!!selected_node){
var src_node = _jm.get_node(src_node_id);
_jm.move_node(src_node, src_node_id, selected_node.id, selected_node.direction);
}
}
function remove_middle_node() {
var selected_node = _jm.get_selected_node();
if(!!selected_node){
var children = selected_node.children;
for (var i = 0; i < children.length; i++) {
var child = children[i];
_jm.move_node(child, child.id, selected_node.parent.id, selected_node.parent.direction);
}
function remove_middle_node() {
var selected_node = _jm.get_selected_node();
if(!!selected_node){
var children = selected_node.children;
for (var i = 0; i < children.length; i++) {
var child = children[i];
_jm.move_node(child, child.id, selected_node.parent.id, selected_node.parent.direction);
}
_jm.select_node(selected_node.parent);
_jm.remove_node(selected_node.id);
}
}
_jm.select_node(selected_node.parent);
_jm.remove_node(selected_node.id);
}
}
function add_middle_node() {
var selected_node = _jm.get_selected_node(); // as parent of new node
if(!!selected_node) {
var topic = selected_node.topic;
function add_middle_node(inline=false) {
var selected_node = _jm.get_selected_node(); // as parent of new node
if(!!selected_node) {
var topic = selected_node.topic;
add_brother_node();
add_brother_node(false);
var brother_node = _jm.get_selected_node();
_jm.update_node(brother_node.id, topic);
_jm.update_node(selected_node.id, "Topic");
var brother_node = _jm.get_selected_node();
_jm.update_node(brother_node.id, topic);
_jm.update_node(selected_node.id, "Topic");
_jm.move_node(selected_node, selected_node.id, brother_node.id, brother_node.direction);
_jm.move_node(selected_node, selected_node.id, brother_node.id, brother_node.direction);
_jm.select_node(selected_node);
}
}
</script>
</body>
_jm.select_node(selected_node);
if (inline) {
_jm.begin_edit(selected_node);
}
}
}
function add_texted_middle_node(text){
var selected_node = _jm.get_selected_node(); // as parent of new node
if(!!selected_node) {
var topic = selected_node.topic;
if(_jm.view.is_editing()) {
_jm.end_edit();
} else {
var nodeid = jsMind.util.uuid.newid();
var node = _jm.insert_node_after(selected_node, nodeid, text);
_jm.select_node(node);
}
var brother_node = _jm.get_selected_node();
_jm.update_node(brother_node.id, topic);
_jm.update_node(selected_node.id, text);
_jm.move_node(selected_node, selected_node.id, brother_node.id, brother_node.direction);
_jm.select_node(selected_node);
}
}
</script>
</body>
</html>

View File

@@ -73,10 +73,10 @@
editnode : 113,// F2
delnode : 46, // Delete
toggle : 32, // Space
left : 37, // Left
up : 38, // Up
right : 39, // Right
down : 40, // Down
// left : 37, // Left
// up : 38, // Up
// right : 39, // Right
// down : 40, // Down
}
},
};