File: report_html.py

package info (click to toggle)
cyclograph 1.7.1-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 1,136 kB
  • ctags: 705
  • sloc: python: 9,682; makefile: 5
file content (124 lines) | stat: -rw-r--r-- 4,087 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# -*- coding: utf-8 -*-
#report_html.py
"""report_html.py"""

# Copyright (C) 2012, 2013 Pierluigi Villani, Federico Brega

# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU 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 General Public License for more details.

import codecs

TEMPLATE_CSS = """
<style type="text/css">
    h2 {
            margin-left:100px;
            color: #000066; 
            font-size: 24px 
       }

    h3 {
            margin-left:150px;
            color: #000000; 
            font-size: 16px 
       }

    p  {
            margin-left:150px;
            margin-right:250px;
            color: #000000;
       }

    b  {
            font-size: 18px
       }
</style>
"""

MAP_SCRIPT = """
<script type="text/javascript" src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript">

vectorlayer = new OpenLayers.Layer.Vector("Vector Layer", {style: {strokeColor: "blue", strokeWidth: 5, strokeOpacity: 0.6}});

var map = new OpenLayers.Map({
    div: "map",
    layers: [
        new OpenLayers.Layer.OSM(
            "OpenCycleMap",
            ["http://a.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
                "http://b.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",
                "http://c.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png"],
            { type: 'png', displayOutsideMaxExtent: true,
                transitionEffect: 'resize'}
        ),
        vectorlayer
    ],
projection: new OpenLayers.Projection("EPSG:4326"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
});

wkt = new OpenLayers.Format.WKT();
var features = wkt.read("LINESTRING(%s)");

if(features){
    features.geometry.transform(map.displayProjection, map.getProjectionObject());
    if(features.constructor != Array){
        features = [features];
    }
    var bounds = features[0].geometry.getBounds();
    for(var i=1; i<features.length; ++i){
        bounds.extend(features[i].geometry.getBounds());
    }
    vectorlayer.addFeatures(features);
    map.zoomToExtent(bounds);
}

</script>
"""

class Report_html():
    """html report"""
    def __init__(self, slopename):
        self.reportdata = '<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\n'
        if slopename != '':
            self.reportdata += '<title>'+ slopename +'</title>\n'
        self.reportdata += TEMPLATE_CSS
        self.reportdata += '\n</head>\n<body>\n'
    def add_image(self, svgstring):
        """Add image"""
        self.reportdata += '<div style="margin-left:50px;">\n'+ svgstring
    def add_map(self, slope, width, height):
        """Add map with route"""
        mapstring = '<div id="map" class="smallmap" style="width: %spx; height: %spx;"></div>\n'
        self.reportdata += mapstring % (str(width), str(height))
        (lat, lng)= slope.coords[0]
        stringc = "%s %s" % (lng, lat)
        for i in range(1, len(slope.coords)):
            (lat, lng)= slope.coords[i]
            stringc += ",%s %s" % (lng, lat)
        #print(stringc)
        self.reportdata += MAP_SCRIPT % (stringc,)
    def addtext(self, label, value):
        """Add label+value"""
        self.reportdata += '\n<h3><b>'+ label +'</b>' + value + '</h3>'
    def addtitle(self, text):
        """Add group title"""
        self.reportdata += '\n<h2>'+ text +'</h2>'
    def addnote(self, text):
        """Add comments"""
        self.reportdata += '\n<p>'+ text +'</p>'
    def save(self, filepath):
        """Save html report to file"""
        self.reportdata += '\n</div>\n</body>\n</html>\n'
        with codecs.open(filepath, encoding='utf-8', mode='wb') as fid:
            fid.write(self.reportdata)

# vim:sw=4:softtabstop=4:expandtab