summaryrefslogtreecommitdiff
path: root/bin/report/render/makohtml2html/makohtml2html.py
diff options
context:
space:
mode:
authorHDA (OpenERP) <hda@tinyerp.com>2009-11-02 14:45:24 +0530
committerHDA (OpenERP) <hda@tinyerp.com>2009-11-02 14:45:24 +0530
commit69036a94e0c6aaac750eea651b7d9ec3779c8d13 (patch)
tree22c8c2549d02f67e533a7892c2d42d9f6ca417aa /bin/report/render/makohtml2html/makohtml2html.py
parent63e75466e1402a7aa0a2a3c54041a3941907c1ba (diff)
parent371fe0f68fecab614fb2befe8b525bec8483ce38 (diff)
Merged
bzr revid: hda@tinyerp.com-20091102091524-8sen0rrm3r50qo90
Diffstat (limited to 'bin/report/render/makohtml2html/makohtml2html.py')
-rw-r--r--bin/report/render/makohtml2html/makohtml2html.py133
1 files changed, 133 insertions, 0 deletions
diff --git a/bin/report/render/makohtml2html/makohtml2html.py b/bin/report/render/makohtml2html/makohtml2html.py
new file mode 100644
index 00000000000..c27d592ba47
--- /dev/null
+++ b/bin/report/render/makohtml2html/makohtml2html.py
@@ -0,0 +1,133 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from lxml import etree
+from mako.template import Template
+from mako.lookup import TemplateLookup
+import netsvc
+import traceback, sys, os
+
+class makohtml2html(object):
+ def __init__(self, html, localcontext):
+ self.localcontext = localcontext
+ self.html = html
+
+ def format_header(self, html):
+ head = html.findall('head')
+ header = ''
+ for node in head:
+ header += etree.tostring(node)
+ return header
+
+ def format_footer(self, footer):
+ html_footer = ''
+ for node in footer[0].getchildren():
+ html_footer += etree.tostring(node)
+ return html_footer
+
+ def format_body(self, html):
+ body = html.findall('body')
+ body_list = []
+ footer = self.format_footer(body[-1].getchildren())
+ for b in body[:-1]:
+ body_list.append(etree.tostring(b).replace('\t', '').replace('\n',''))
+ html_body ='''
+ <script type="text/javascript">
+
+ var indexer = 0;
+ var aryTest = %s ;
+ function nextData()
+ {
+ if(indexer < aryTest.length -1)
+ {
+ indexer += 1;
+ document.forms[0].prev.disabled = false;
+ document.getElementById("openerp_data").innerHTML=aryTest[indexer];
+ document.getElementById("counter").innerHTML= indexer + 1 + ' / ' + aryTest.length;
+ }
+ else
+ {
+ document.forms[0].next.disabled = true;
+ }
+ }
+ function prevData()
+ {
+ if (indexer > 0)
+ {
+ indexer -= 1;
+ document.forms[0].next.disabled = false;
+ document.getElementById("openerp_data").innerHTML=aryTest[indexer];
+ document.getElementById("counter").innerHTML= indexer + 1 + ' / ' + aryTest.length;
+ }
+ else
+ {
+ document.forms[0].prev.disabled = true;
+ }
+ }
+ </script>
+ </head>
+ <body>
+ <div id="openerp_data">
+ %s
+ </div>
+ <div>
+ %s
+ </div>
+ <br>
+ <form>
+ <table>
+ <tr>
+ <td td align="left">
+ <input name = "prev" type="button" value="Previous" onclick="prevData();">
+ </td>
+ <td>
+ <div id = "counter">%s / %s</div>
+ </td>
+ <td align="right">
+ <input name = "next" type="button" value="Next" onclick="nextData();">
+ </td>
+ </tr>
+ </table>
+ </form>
+ </body></html>'''%(body_list,body_list[0],footer,'1',len(body_list))
+ return html_body
+
+ def render(self):
+ path = os.path.realpath('addons/base/report')
+ temp_lookup = TemplateLookup(directories=[path],output_encoding='utf-8', encoding_errors='replace')
+ template = Template(self.html, lookup=temp_lookup)
+ self.localcontext.update({'css_path':path})
+ final_html ='''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+ <html>'''
+ try:
+ html = template.render_unicode(**self.localcontext)
+ etree_obj = etree.HTML(html)
+ final_html += self.format_header(etree_obj)
+ final_html += self.format_body(etree_obj)
+ return final_html
+ except Exception,e:
+ tb_s = reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback))
+ netsvc.Logger().notifyChannel('report', netsvc.LOG_ERROR,
+ 'report :\n%s\n%s\n' % (tb_s, str(e)))
+
+def parseNode(html, localcontext = {}):
+ r = makohtml2html(html, localcontext)
+ return r.render() \ No newline at end of file