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