| 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> |
|---|
| 7 | import os |
|---|
| 8 | import sys |
|---|
| 9 | import gobject |
|---|
| 10 | try: |
|---|
| 11 | from webkit import WebView |
|---|
| 12 | WEBKIT = True |
|---|
| 13 | except: |
|---|
| 14 | import gtkhtml2 |
|---|
| 15 | WEBKIT = False |
|---|
| 16 | #from HtmlTextView import HtmlTextView |
|---|
| 17 | import urllib2 |
|---|
| 18 | import webbrowser |
|---|
| 19 | from promogest import Environment |
|---|
| 20 | from promogest.ui import utils |
|---|
| 21 | from jinja2 import Environment as Env |
|---|
| 22 | from 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 | |
|---|
| 35 | templates_dir = [os.path.join('templates'),os.path.join('report-templates')] |
|---|
| 36 | jinja_env = None |
|---|
| 37 | |
|---|
| 38 | def 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 | |
|---|
| 59 | def createHtmlObj(mainWidget,widget=None): |
|---|
| 60 | try: |
|---|
| 61 | return WebView() |
|---|
| 62 | except: |
|---|
| 63 | return gtkhtml2.View() |
|---|
| 64 | |
|---|
| 65 | def 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 | |
|---|
| 76 | def _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 | |
|---|
| 92 | def _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 | |
|---|
| 99 | if 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 | |
|---|
| 104 | def renderHTMLTemplate(pageData): |
|---|
| 105 | return renderTemplate(pageData) |
|---|
| 106 | |
|---|
| 107 | def 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) |
|---|