root/trunk/core/promogest/lib/HtmlHandler.py @ 860

Revision 860, 3.3 KB (checked in by francesco, 6 months ago)

sistemato l'allineamento tra venduto ed inventario

Line 
1# -*- coding: utf-8 -*-
2
3# Promogest
4#
5# Copyright (C) 2005 by Promotux Informatica - http://www.promotux.it/
6# Author: francesco Meloni <francesco@promotux.it>
7import os
8import sys
9import gobject
10try:
11    from webkit import WebView
12    WEBKIT = True
13except:
14    import gtkhtml2
15    WEBKIT = False
16#from HtmlTextView import HtmlTextView
17import urllib2
18import webbrowser
19from promogest import Environment
20from  promogest.ui import utils
21from jinja2 import Environment  as Env
22from jinja2 import FileSystemLoader,FileSystemBytecodeCache
23
24#from pygtkie import IEHtmlView
25#window = gtk.Window(gtk.WINDOW_TOPLEVEL)
26#window.resize(800, 600)
27#ie = IEHtmlView();
28#window.add(ie)
29#ie.show()
30#window.show()
31#
32#ie.SetDocument("""This is an IE page hosted by <a href="http://www.python.org">python</a>')""")
33
34
35templates_dir = [os.path.join('templates'),os.path.join('report-templates')]
36jinja_env = None
37
38def env(templates_dir):
39    jinja_env = Env(loader=FileSystemLoader(templates_dir),
40            bytecode_cache = FileSystemBytecodeCache(os.path.join(Environment.promogestDir, 'temp'), '%s.cache'))
41    def noNone(value):
42        if value =="None":
43            return ""
44        elif not value:
45            return ""
46        else:
47            return value
48    jinja_env.filters['nonone'] = noNone
49
50    return jinja_env
51
52"""
53    createHtmlObj = restituisce un oggetto del render html o gtkhtml2 o webkit
54    renderHTMLTemplate o renderTemplate = Restituiscono una stringa html dopo la
55                                            renderizzazione del template engine
56    renderHTML = inserisce il codice html dentro l'oggetto
57"""
58
59def createHtmlObj(mainWidget,widget=None):
60    try:
61        return WebView()
62    except:
63        return gtkhtml2.View()
64
65def renderTemplate(pageData):
66    if "feed" not in pageData: pageData["feed"] = []
67    if "dao" not in pageData:  pageData["dao"] = []
68    if "objects" not in pageData: pageData["objects"] = []
69    jinja_env.globals['environment'] = Environment
70    jinja_env.globals['utils'] = utils
71    pageData["titolo"] = pageData["file"].split(".")[0].capitalize()
72    html = jinja_env.get_template("/"+ pageData["file"]).render(pageData= pageData,dao=pageData["dao"],
73                    objects=pageData["objects"], feed=pageData["feed"])
74    return html
75
76def _on_html_request_url(document, url, stream):
77
78    def render():
79        try:
80            f = open(url, 'rb')
81            stream.write(f.read())
82            f.close()
83            stream.close()
84        except:
85            req = urllib2.Request(url)
86            response = urllib2.urlopen(req)
87            html = response.read()
88            stream.write(html)
89            stream.close()
90    gobject.idle_add(render)
91
92def _on_html_link_clicked(url, link):
93    def linkOpen():
94        webbrowser.open_new_tab(link)
95        #print link
96    gobject.idle_add(linkOpen)
97    return True
98
99if not WEBKIT:
100    document = gtkhtml2.Document()
101    document.connect('request_url', _on_html_request_url)
102    document.connect('link_clicked', _on_html_link_clicked)
103
104def renderHTMLTemplate(pageData):
105    return renderTemplate(pageData)
106
107def renderHTML(widget, html):
108    if WEBKIT:
109            widget.load_string(html,"text/html","utf-8", "file:///"+sys.path[0]+os.sep)
110    else:
111        document.open_stream('text/html')
112        document.write_stream(html)
113        document.close_stream()
114        widget.set_document(document)
Note: See TracBrowser for help on using the browser.