Explode onBridgeCmd

This way, an add-on can catch a blur command, do its change and then
call self.blur
This commit is contained in:
Arthur Milchior 2020-03-24 17:48:49 +01:00
parent beee1f10e0
commit 9f4c4ea355

View File

@ -367,48 +367,59 @@ class Editor:
# shutdown
return
# focus lost or key/button pressed?
if cmd.startswith("blur") or cmd.startswith("key"):
(type, ord, nid, txt) = cmd.split(":", 3)
ord = int(ord)
try:
nid = int(nid)
except ValueError:
nid = 0
if nid != self.note.id:
print("ignored late blur")
return
txt = unicodedata.normalize("NFC", txt)
txt = self.mungeHTML(txt)
# misbehaving apps may include a null byte in the text
txt = txt.replace("\x00", "")
# reverse the url quoting we added to get images to display
txt = self.mw.col.media.escapeImages(txt, unescape=True)
self.note.fields[ord] = txt
if not self.addMode:
self.note.flush()
self.mw.requireReset()
if type == "blur":
self.currentField = None
# run any filters
if gui_hooks.editor_did_unfocus_field(False, self.note, ord):
# something updated the note; update it after a subsequent focus
# event has had time to fire
self.mw.progress.timer(100, self.loadNoteKeepingFocus, False)
else:
self.checkValid()
else:
gui_hooks.editor_did_fire_typing_timer(self.note)
self.checkValid()
type, remaining = cmd.split(":", 1)
if type == "blur":
self.onBlur(*remaining.split(":", 2))
elif type == "key":
self.onKey(*remaining.split(":", 2))
# focused into field?
elif cmd.startswith("focus"):
(type, num) = cmd.split(":", 1)
self.currentField = int(num)
gui_hooks.editor_did_focus_field(self.note, self.currentField)
elif type == "focus":
self.onFocus(remaining)
elif cmd in self._links:
self._links[cmd](self)
else:
print("uncaught cmd", cmd)
def onBlurOrKey(self, ord, nid, txt):
ord = int(ord)
try:
nid = int(nid)
except ValueError:
nid = 0
if nid != self.note.id:
print("ignored late blur")
return
txt = unicodedata.normalize("NFC", txt)
txt = self.mungeHTML(txt)
# misbehaving apps may include a null byte in the text
txt = txt.replace("\x00", "")
# reverse the url quoting we added to get images to display
txt = self.mw.col.media.escapeImages(txt, unescape=True)
self.note.fields[ord] = txt
if not self.addMode:
self.note.flush()
self.mw.requireReset()
def onBlur(self, ord, nid, txt):
self.onBlurOrKey(ord, nid, txt)
self.currentField = None
# run any filters
if gui_hooks.editor_did_unfocus_field(False, self.note, int(ord)):
# something updated the note; update it after a subsequent focus
# event has had time to fire
self.mw.progress.timer(100, self.loadNoteKeepingFocus, False)
else:
self.checkValid()
def onKey(self, ord, nid, txt):
self.onBlurOrKey(ord, nid, txt)
gui_hooks.editor_did_fire_typing_timer(self.note)
self.checkValid()
def onFocus(self, num):
self.currentField = int(num)
gui_hooks.editor_did_focus_field(self.note, self.currentField)
def mungeHTML(self, txt):
if txt in ("<br>", "<div><br></div>"):
return ""