Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

use maker toggle caret. #363

Merged
merged 2 commits into from Aug 4, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions app/browser/buffer.py
Expand Up @@ -52,6 +52,7 @@ def __init__(self, buffer_id, url, config_dir, arguments, emacs_var_dict, module
self.buffer_widget.open_url_in_background_tab.connect(self.open_url_in_background_tab)

self.buffer_widget.urlChanged.connect(self.set_adblocker)
self.buffer_widget.urlChanged.connect(self.caret_exit)

# Reset to default zoom when page init or url changed.
self.reset_default_zoom()
Expand Down
83 changes: 62 additions & 21 deletions core/browser.py
Expand Up @@ -70,6 +70,7 @@ def __init__(self, buffer_id, config_dir):

self.get_markers_raw = self.read_js_content("get_markers.js")
self.goto_marker_raw = self.read_js_content("goto_marker.js")
self.marker_js = self.read_js_content("marker.js")
self.get_codes_raw = self.read_js_content("get_codes.js")
self.goto_code_raw = self.read_js_content("goto_code.js")
self.get_focus_text_js = self.read_js_content("get_focus_text.js")
Expand Down Expand Up @@ -425,16 +426,16 @@ def cleanup_links(self):

def get_link_markers(self):
''' Get link markers.'''
self.eval_js(self.get_markers_raw.replace("%1", self.buffer.emacs_var_dict["eaf-marker-letters"]));
self.eval_js("Marker.generateMarker('a, input, button, [class*=\"btn\"], [aria-haspopup], [role=\"button\"], textarea, select, summary, [class=\"gap\"], [ng-click]')")

def get_text_markers(self):
''' Get link markers.'''
self.eval_js(self.get_markers_raw.replace("%1", self.buffer.emacs_var_dict["eaf-marker-letters"]).replace("%2", "select_text"));
''' Get visiable text markers.'''
self.eval_js("Marker.generateMarker(Marker.generateTextNodeMarker)");

def get_marker_link(self, marker):
''' Get marker's link.'''
self.goto_marker_js = self.goto_marker_raw.replace("%1", str(marker));
link = self.execute_js(self.goto_marker_js)
link = self.execute_js("Marker.gotoMarker('%s',Marker.getMarkerLink)" % str(marker))

self.cleanup_links()
return link

Expand Down Expand Up @@ -466,15 +467,27 @@ def copy_link(self, marker):

def get_code_markers(self):
''' Get the code markers.'''
self.eval_js(self.get_codes_raw.replace("%1", self.buffer.emacs_var_dict["eaf-marker-letters"]));
self.eval_js("Marker.generateMarker('pre')")

def get_code_content(self, marker):
''' Get the code content according to marker.'''
self.goto_code_js = self.goto_code_raw.replace("%1", str(marker));
content = self.execute_js(self.goto_code_js)
content = self.execute_js("Marker.gotoMarker('%s', (e)=> e.textContent)" % str(marker))
self.cleanup_links()
return content

def enable_caret_by_marker(self, marker):
'''Enable caret by marker'''
self.execute_js("Marker.gotoMarker('%s', (e) => window.getSelection().collapse(e, 0))" % str(marker))
self.cleanup_links()

self.eval_js("CaretBrowsing.setInitialCursor(true);")
self.buffer.caret_browsing_activated = True
self.buffer.eval_in_emacs.emit('''(eaf--toggle-caret-browsing %s)''' % ("t" if self.buffer.caret_browsing_activated else "nil"))

self.buffer.caret_toggle_mark()
self.buffer.caret_next_word()


def copy_code_content(self, marker):
''' Copy the code content according to marker.'''
content = self.get_code_content(marker)
Expand Down Expand Up @@ -797,6 +810,7 @@ def update_progress(self, progress):
self.update()
elif progress == 100 and self.draw_progressbar:
self.init_auto_fill()
self.buffer_widget.eval_js(self.buffer_widget.marker_js.replace("%1", self.emacs_var_dict["eaf-marker-letters"]))
if self.dark_mode_is_enable():
if self.emacs_var_dict["eaf-browser-dark-mode"] == "follow":
self.caret_browsing_js = self.buffer_widget.caret_browsing_js_raw.replace("%1", "#"+ str(hex(self.caret_background_color.red()//16)).replace("0x","")+ \
Expand Down Expand Up @@ -918,6 +932,8 @@ def handle_input_message(self, result_tag, result_content):
self._caret_search_text(str(result_content), True)
elif result_tag == "jump_link" or result_tag == "select_marker_text":
self.buffer_widget.jump_to_link(str(result_content).strip())
elif result_tag == "marker_enable_caret":
self.buffer_widget.enable_caret_by_marker(str(result_content).strip())
elif result_tag == "jump_link_new_buffer":
self.buffer_widget.jump_to_link_new_buffer(str(result_content).strip())
elif result_tag == "jump_link_background_buffer":
Expand Down Expand Up @@ -953,6 +969,7 @@ def cancel_input_message(self, result_tag):
result_tag == "jump_link_new_buffer" or \
result_tag == "jump_link_background_buffer" or \
result_tag == "select_marker_text" or \
result_tag == "marker_enable_caret" or \
result_tag == "copy_link" or \
result_tag == "edit_url":
self.buffer_widget.cleanup_links()
Expand Down Expand Up @@ -985,23 +1002,35 @@ def try_start_aria2_daemon(self):

subprocess.Popen(aria2_args, stdout=null_file)

def caret_browsing(self):
def caret_toggle_browsing(self):
''' Init caret browsing.'''
if self.eval_caret_js:
self.buffer_widget.eval_js("CaretBrowsing.setInitialCursor();")
self.message_to_emacs.emit("Caret browsing activated.")
self.caret_browsing_activated = True
self.caret_browsing_search_text = ""

if self.caret_browsing_activated:
self.buffer_widget.eval_js("CaretBrowsing.shutdown();")
self.message_to_emacs.emit("Caret browsing deactivated.")
self.caret_browsing_activated = False
else:
self.buffer_widget.eval_js("CaretBrowsing.setInitialCursor();")
self.message_to_emacs.emit("Caret browsing activated.")
self.caret_browsing_activated = True
self.eval_in_emacs.emit('''(eaf--toggle-caret-browsing %s)''' % ("t" if self.caret_browsing_activated else "nil"))

@interactive()
def caret_exit(self):
''' Exit caret browsing.'''
if self.caret_browsing_activated:
self.buffer_widget.eval_js("CaretBrowsing.shutdown();")
self.message_to_emacs.emit("Caret browsing deactivated.")
self.eval_in_emacs.emit('''(eaf--toggle-caret-browsing nil)''')
self.caret_browsing_activated = False
self.caret_toggle_browsing()

@interactive()
def caret_next_sentence(self):
''' Switch to next line in caret browsing.'''
if self.caret_browsing_activated:
self.buffer_widget.eval_js("CaretBrowsing.move('forward', 'sentence');")

@interactive()
def caret_previous_sentence(self):
''' Switch to previous line in caret browsing.'''
if self.caret_browsing_activated:
self.buffer_widget.eval_js("CaretBrowsing.move('backward', 'sentence');")

@interactive()
def caret_next_line(self):
Expand Down Expand Up @@ -1051,19 +1080,26 @@ def caret_to_top(self):
if self.caret_browsing_activated:
self.buffer_widget.eval_js("CaretBrowsing.move('backward', 'documentboundary');")

@interactive()
def caret_rotate_selection(self):
''' Rotate selection.'''
if self.caret_browsing_activated:
if self.caret_browsing_mark_activated:
self.buffer_widget.eval_js("CaretBrowsing.rotateSelection();")

@interactive()
def caret_toggle_mark(self):
''' Toggle mark in caret browsing.'''
if self.caret_browsing_activated:
self.buffer_widget.eval_js("CaretBrowsing.toggleMark();")
if self.buffer_widget.execute_js("CaretBrowsing.markEnabled"):
self.caret_browsing_mark_activated = True
self.eval_in_emacs.emit('''(eaf--toggle-caret-browsing t)''')
self.message_to_emacs.emit("Mark is on.")
else:
self.caret_browsing_mark_activated = False
self.eval_in_emacs.emit('''(eaf--toggle-caret-browsing nil)''')
self.message_to_emacs.emit("Mark is off.")

@interactive()
def caret_clear_search(self):
''' Clear search text in caret browsing.'''
if self.caret_browsing_activated:
Expand Down Expand Up @@ -1124,6 +1160,11 @@ def select_text(self):
self.buffer_widget.get_text_markers()
self.send_input_message("Select Text: ", "select_marker_text");

@interactive(insert_or_do=True)
def marker_enable_caret(self):
self.buffer_widget.get_text_markers()
self.send_input_message("Toggle Caret at:", "marker_enable_caret");

@interactive(insert_or_do=True)
def open_link(self):
''' Open Link.'''
Expand Down
18 changes: 14 additions & 4 deletions core/js/caret_browsing.js
Expand Up @@ -692,7 +692,7 @@ CaretBrowsing.injectCaretStyles = function() {
document.body.appendChild(node);
};

CaretBrowsing.setInitialCursor = function() {
CaretBrowsing.setInitialCursor = function(noScrollToSelection) {
if (CaretBrowsing.post_message_down("CaretBrowsing.setInitialCursor")) {
return;
}
Expand All @@ -718,7 +718,7 @@ CaretBrowsing.setInitialCursor = function() {
CaretBrowsing.markEnabled = false;
sel.collapse(sel.anchorNode, sel.anchorOffset);
window.setTimeout(() => {
CaretBrowsing.updateCaretOrSelection(true);
CaretBrowsing.updateCaretOrSelection((!noScrollToSelection));
}, 0);
}
}
Expand Down Expand Up @@ -826,7 +826,7 @@ CaretBrowsing.getCursorRect = function(cursor) { // eslint-disable-line max-stat
const rect = {
"left": 0,
"top": 0,
"width": 1,
"width": 5,
"height": 0,
};
if (node.constructor === Text) {
Expand Down Expand Up @@ -1096,6 +1096,16 @@ CaretBrowsing.toggleMark = function() {
}
};

CaretBrowsing.rotateSelection = function() {
var selection = window.getSelection();
var pos = [selection.anchorNode, selection.anchorOffset];
selection.collapse(selection.focusNode, selection.focusOffset);
selection.extend(pos[0], pos[1]);
window.setTimeout(() => {
CaretBrowsing.updateCaretOrSelection(true);
}, 0);
}

CaretBrowsing.cutSelection = function() {
if (CaretBrowsing.post_message_down("CaretBrowsing.cutSelection")) {
return;
Expand Down Expand Up @@ -1124,4 +1134,4 @@ if (self !== top) {
CaretBrowsing.toggleMark);
register_message_handler("CaretBrowsing.cutSelection",
CaretBrowsing.cutSelection);
}
}