diff options
| author | HDA (OpenERP) <hda@tinyerp.com> | 2009-11-02 14:45:24 +0530 |
|---|---|---|
| committer | HDA (OpenERP) <hda@tinyerp.com> | 2009-11-02 14:45:24 +0530 |
| commit | 69036a94e0c6aaac750eea651b7d9ec3779c8d13 (patch) | |
| tree | 22c8c2549d02f67e533a7892c2d42d9f6ca417aa /bin/report/render/makohtml2html/makohtml2html.py | |
| parent | 63e75466e1402a7aa0a2a3c54041a3941907c1ba (diff) | |
| parent | 371fe0f68fecab614fb2befe8b525bec8483ce38 (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.py | 133 |
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 |
