improve html2text
authorCornelius Weiß <c.weiss@metaways.de>
Tue, 5 Jul 2016 20:20:22 +0000 (22:20 +0200)
committerPhilipp Schüle <p.schuele@metaways.de>
Mon, 11 Jul 2016 09:51:35 +0000 (11:51 +0200)
* cope with html generated by own htmleditor (text & signature)

Change-Id: I31ad299c786f253fcde2a9ed54554b5f34bd27c9
Reviewed-on: http://gerrit.tine20.com/customers/3310
Tested-by: Jenkins CI (http://ci.tine20.com/)
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
tine20/Tinebase/js/common.js

index e34c771..0af8a20 100644 (file)
@@ -810,12 +810,15 @@ Tine.Tinebase.common = {
      */
     html2text: function(html) {
         text = html.replace(/\n/g, ' ')
-            .replace(/(<br[ /]*>)/g, '\n')
-            .replace(/(<li>)/g, '\n * ')
-            .replace(/<(blockquote|div|dl|dt|dd|form|h1|h2|h3|h4|h5|h6|hr|p|pre|table|tr|td|li|section|header|footer)>/g, '\n')
+            .replace(/(<br[^>]*>)/g, '\n--br')
+            .replace(/(<li[^>]*>)/g, '\n * ')
+            .replace(/<(blockquote|div|dl|dt|dd|form|h1|h2|h3|h4|h5|h6|hr|p|pre|table|tr|td|li|section|header|footer)[^>]*>(?!\s*\<\/\1\>)/g, '\n--block')
             .replace(/<style(.+?)\/style>/g, '')
             .replace(/<(.+?)>/g, '')
             .replace(/&nbsp;/g, ' ')
+            .replace(/--block(\n--block)+/g, '--block')
+            .replace(/--block\n--br/g, '')
+            .replace(/(--block|--br)/g, '');
 
         return Ext.util.Format.htmlDecode(text);
     },
@@ -864,3 +867,14 @@ Tine.Tinebase.common = {
         }, this);
     }
 };
+
+/*
+var s = '<blockquote class="felamimail-body-blockquote"><div>Hello,</div><div><br></div><div>...</div></blockquote>';
+if (Tine.Tinebase.common.html2text(s) != "\nHello,\n\n...") console.error('ignore empty div: "' + Tine.Tinebase.common.html2text(s) + '"');
+
+var s = '<font face="tahoma, arial, helvetica, sans-serif" style="font-size: 11px; font-family: tahoma, arial, helvetica, sans-serif;"><span style="font-size: 11px;">​<font color="#808080">Dipl.-Phys. Cornelius Weiss</font></span></font><div style="font-size: 11px; font-family: tahoma, arial, helvetica, sans-serif;"><font face="tahoma, arial, helvetica, sans-serif" color="#808080"><span style="font-size: 11px;">Team Leader Software Engineering</span></font></div>';
+if (Tine.Tinebase.common.html2text(s) != "​Dipl.-Phys. Cornelius Weiss\nTeam Leader Software Engineering") console.error('cope with styled div tag: '  + Tine.Tinebase.common.html2text(s));
+
+var s = '<div><div><span><font><br></font></span></div></div>';
+if (Tine.Tinebase.common.html2text(s) != "\n") console.error('cope with nested blocks: "' + Tine.Tinebase.common.html2text(s) + '"');
+*/