From 7296dfda74821f11cc064edcbc49b3449570e7d2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 11 Dec 2013 21:38:09 +0530 Subject: [PATCH] Metadata editor: Fix removing formatting for comments not removing background colors. Fixes #1258975 [Clear formatting button in comment editor does not clear span codes](https://bugs.launchpad.net/calibre/+bug/1258975) --- src/calibre/gui2/comments_editor.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/comments_editor.py b/src/calibre/gui2/comments_editor.py index 170e831236..bae3168b0f 100644 --- a/src/calibre/gui2/comments_editor.py +++ b/src/calibre/gui2/comments_editor.py @@ -310,6 +310,23 @@ class EditorWidget(QWebView): # {{{ frame.evaluateJavaScript(js) def remove_format_cleanup(self): + # WebKit (the version in Qt 4.8.x at least) does not remove background + # colors, see https://bugs.webkit.org/show_bug.cgi?id=101682 + self.page().mainFrame().evaluateJavaScript( + ''' + var sel = window.getSelection(); + if (sel.rangeCount >= 1) { + var node = sel.getRangeAt(0).commonAncestorContainer; + if (node.style.backgroundColor && node.style.backgroundColor != 'transparent') node.style.backgroundColor = 'transparent'; + var descendants = node.getElementsByTagName('*'); + for (var i = 0; i < descendants.length; i++) { + var s = descendants[i].style; + if (s.backgroundColor && s.backgroundColor != 'transparent') + s.backgroundColor = 'transparent'; + } + } + + ''') self.html = self.html @dynamic_property @@ -736,7 +753,8 @@ if __name__ == '__main__': w = Editor() w.resize(800, 600) w.show() - w.html = 'testing' + w.html = '''He hadn't + set out to have an affair, much less a long-term, devoted one.''' app.exec_() # print w.html