From e0d05e49d6b9d0ab4fd91abbed2d469f545ebc52 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 11 Nov 2017 11:51:30 +1000 Subject: [PATCH] fix broken image links when pasting between fields https://anki.tenderapp.com/discussions/beta-testing/853-anki-210-beta-21#comment_43959510 --- aqt/editor.py | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/aqt/editor.py b/aqt/editor.py index 6294e7ce9..e64f2a025 100644 --- a/aqt/editor.py +++ b/aqt/editor.py @@ -615,37 +615,45 @@ to a cloze type first, via Edit>Change Note Type.""")) removeTags = ["script", "iframe", "object", "style"] - def _pastePreFilter(self, html): + def _pastePreFilter(self, html, internal): with warnings.catch_warnings() as w: warnings.simplefilter('ignore', UserWarning) doc = BeautifulSoup(html, "html.parser") - for tag in self.removeTags: - for node in doc(tag): - node.decompose() + if not internal: + for tag in self.removeTags: + for node in doc(tag): + node.decompose() - # convert p tags to divs - for node in doc("p"): - node.name = "div" + # convert p tags to divs + for node in doc("p"): + node.name = "div" for tag in doc("img"): try: - if self.isURL(tag['src']): - # convert remote image links to local ones - fname = self.urlToFile(tag['src']) - if fname: - tag['src'] = fname + src = tag['src'] except KeyError: # for some bizarre reason, mnemosyne removes src elements # from missing media - pass + continue + + # in internal pastes, rewrite mediasrv references to relative + if internal: + m = re.match("http://127.0.0.1:\d+/(.*)$", src) + if m: + tag['src'] = m.group(1) + else: + # in external pastes, download remote media + if self.isURL(src): + fname = self.urlToFile(src) + if fname: + tag['src'] = fname html = str(doc) return html def doPaste(self, html, internal): - if not internal: - html = self._pastePreFilter(html) + html = self._pastePreFilter(html, internal) extended = self.mw.app.queryKeyboardModifiers() & Qt.ShiftModifier if extended: extended = "true"