https://bugs.kde.org/show_bug.cgi?id=207779
Torgny Nyblom <k...@nyblom.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED --- Comment #13 from Torgny Nyblom <kde nyblom org> 2011-01-01 21:21:18 --- commit 366e26a75817bcf246bfe04453c5f69e198eee93 branch master Author: Torgny Nyblom <k...@nyblom.org> Date: Sat Jan 1 21:17:50 2011 +0100 Do not remove empty lines in HTML for Outlook Thanks to Frank Vanderham for the patch. BUG: 207779 diff --git a/messagecomposer/CMakeLists.txt b/messagecomposer/CMakeLists.txt index 477bc29..53933fa 100644 --- a/messagecomposer/CMakeLists.txt +++ b/messagecomposer/CMakeLists.txt @@ -84,7 +84,7 @@ kde4_add_kcfg_files(messagecomposer_src kde4_add_library( messagecomposer ${LIBRARY_TYPE} ${messagecomposer_src} ) target_link_libraries( messagecomposer ${KDE4_KIO_LIBS} ${KDEPIMLIBS_KMIME_LIBS} ${KDEPIMLIBS_AKONADI_KMIME_LIBS} ${KDEPIMLIBS_AKONADI_LIBS} ${KDEPIMLIBS_MAILTRANSPORT_LIBS} ${KDEPIMLIBS_KPIMTEXTEDIT_LIBS} ${KDEPIMLIBS_KPIMIDENTITIES_LIBS} - messagecore messageviewer templateparser kleo kdepim ${QGPGME_LIBRARIES} ) + messagecore messageviewer templateparser kleo kdepim ${QGPGME_LIBRARIES} ${QT_QTWEBKIT_LIBRARY} ) set_target_properties( messagecomposer PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION} ) install( TARGETS messagecomposer ${INSTALL_TARGETS_DEFAULT_ARGS} ) diff --git a/messagecomposer/kmeditor.cpp b/messagecomposer/kmeditor.cpp index 7ab1288..30e9b4c 100644 --- a/messagecomposer/kmeditor.cpp +++ b/messagecomposer/kmeditor.cpp @@ -39,6 +39,10 @@ #include <QShortcut> #include <QTextLayout> #include <QTimer> +#include <QWebElement> +#include <QWebElementCollection> +#include <QWebFrame> +#include <QWebPage> using namespace KPIMTextEdit; @@ -686,4 +690,39 @@ void KMeditor::fillComposerTextPart ( TextPart* textPart ) const } } +QString KMeditor::toCleanHtml() const +{ + const QString textEditHTML = toHtml(); + + // construct a non-visual QWebPage - that'll hook us into Qt's HTML parser from WebKit + QWebPage webpage( 0 ); + QWebFrame *webframe = webpage.mainFrame(); + webframe->setHtml( textEditHTML ); + QWebElement docElement = webframe->documentElement(); + + // fix 1 - empty lines should show as empty lines - MS Outlook treats margin-top:0px; as + // a non-existing line. + // Although we can simply remove the margin-top style property, we still get unwanted results + // if you have three or more empty lines. It's best to replace empty <p> elements with <br>. + // As per http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0-Strict, <br> elements are still proper + // HTML. + QWebElementCollection paragraphs = docElement.findAll( QString::fromAscii( "p" ) ); + foreach (QWebElement paraElement, paragraphs) { + QString paraContent = paraElement.toPlainText(); + // Only make a change when the paragraph content is empty + if ( paraContent.isEmpty() ) { + paraElement.replace( QString::fromAscii( "<br />" ) ); + } + } + // fix 2 - ordered and unordered lists - MS Outlook treats margin-left:0px; as + // a non-existing number; e.g: "1. First item" turns into "First Item" + QWebElementCollection lists = docElement.findAll( QString::fromAscii( "ol,ul" ) ); + foreach (QWebElement listElement, lists) { + //TODO in the future, we may want to explicitly set the margin-left=0 with the Composer window itself, which + // would be overwritten here again. This will likely require a rewrite of the KMEditor altogether, though. + listElement.setStyleProperty( QString::fromAscii( "margin-left" ), QString( ) ); + } + return webframe->toHtml(); +} + #include "kmeditor.moc" diff --git a/messagecomposer/kmeditor.h b/messagecomposer/kmeditor.h index af9bf89..b24e3ba 100644 --- a/messagecomposer/kmeditor.h +++ b/messagecomposer/kmeditor.h @@ -176,6 +176,12 @@ class MESSAGECOMPOSER_EXPORT KMeditor : public KPIMTextEdit::TextEdit */ void fillComposerTextPart( Message::TextPart* textPart ) const; + /** + * Overloaded function from KRichTextEdit to deal with problems viewing HTML formatted + * emails in MS Outlook. + */ + QString toCleanHtml() const; + public Q_SLOTS: void slotAddQuotes(); -- Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug. _______________________________________________ Kdepim-bugs mailing list Kdepim-bugs@kde.org https://mail.kde.org/mailman/listinfo/kdepim-bugs