# @GPL_HEADER_START
# Use of the RAVE and related source code is subject to the terms
# of the following licenses:
# 
# GNU Public License (GPL) Rights pursuant to Version 2, June 1991
# Government Purpose License Rights (GPLR) pursuant to DFARS 252.225-7013
# 
# NO WARRANTY
# 
# ANY INFORMATION, MATERIALS, SERVICES, INTELLECTUAL PROPERTY OR OTHER
# PROPERTY OR RIGHTS GRANTED OR PROVIDED BY CARNEGIE MELLON UNIVERSITY
# PURSUANT TO THIS LICENSE (HEREINAFTER THE "DELIVERABLES") ARE ON AN
# "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY
# KIND, EITHER EXPRESS OR IMPLIED AS TO ANY MATTER INCLUDING, BUT NOT
# LIMITED TO, WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE,
# MERCHANTABILITY, INFORMATIONAL CONTENT, NONINFRINGEMENT, OR ERROR-FREE
# OPERATION. CARNEGIE MELLON UNIVERSITY SHALL NOT BE LIABLE FOR INDIRECT,
# SPECIAL OR CONSEQUENTIAL DAMAGES, SUCH AS LOSS OF PROFITS OR INABILITY
# TO USE SAID INTELLECTUAL PROPERTY, UNDER THIS LICENSE, REGARDLESS OF
# WHETHER SUCH PARTY WAS AWARE OF THE POSSIBILITY OF SUCH DAMAGES.
# LICENSEE AGREES THAT IT WILL NOT MAKE ANY WARRANTY ON BEHALF OF
# CARNEGIE MELLON UNIVERSITY, EXPRESS OR IMPLIED, TO ANY PERSON
# CONCERNING THE APPLICATION OF OR THE RESULTS TO BE OBTAINED WITH THE
# DELIVERABLES UNDER THIS LICENSE.
# 
# Licensee hereby agrees to defend, indemnify, and hold harmless Carnegie
# Mellon University, its trustees, officers, employees, and agents from
# all claims or demands made against them (and any related losses,
# expenses, or attorney's fees) arising out of, or relating to Licensee's
# and/or its sub licensees' negligent use or willful misuse of or
# negligent conduct or willful misconduct regarding the Software,
# facilities, or other rights or assistance granted by Carnegie Mellon
# University under this License, including, but not limited to, any
# claims of product liability, personal injury, death, damage to
# property, or violation of any laws or regulations.
# 
# Carnegie Mellon University Software Engineering Institute authored
# documents are sponsored by the U.S. Department of Defense under
# Contract F19628-00-C-0003. Carnegie Mellon University retains
# copyrights in all material produced under this contract. The U.S.
# Government retains a non-exclusive, royalty-free license to publish or
# reproduce these documents, or allow others to do so, for U.S.
# Government purposes only pursuant to the copyright license under the
# contract clause at 252.227.7013.
# 
# @GPL_HEADER_END
"""
HTML renderers
"""

__version__ = "$Rev$"

import sys
from rave.plugins.decorators import *
from rave.plugins.shell import *
from rave.plugins.dataset import Dataset

# render_html_table([{'title': 'Foo/min', 'data': d['foo']},
#                    {'title': 'Tab', 'align': 'left', 'data': d['bar']}])

def render_html_table(out_file_name, config, stylesheet=None):
    f = open(out_file_name, 'w')
    # Make sure there's some data:
    if len(config[0]['data']) == 0 :
        f.write('<p style="text-align: center">no data</p>')
        f.close()
        return
    f.write('<table><thead><tr>')
    for k in config:
        f.write('<th scope="col">%s</th>' % k['title'])
    f.write('</tr></thead><tbody>')
    for i in xrange(len(config[0]['data'])):
        f.write('<tr>')
        for j in xrange(len(config)):
            f.write('<td')
            if 'align' in config[j]:
                f.write(' align="%s"' % config[j]['align'])
            else:
                f.write(' align="right"')
            f.write('>%s</td>' % config[j]['data'][i])
        f.write('</tr>')
    f.write('</tbody></table>')
    f.close()

def render_html_chart_overlay(out_file_name, width, height, labels, urls):
    f = open(out_file_name, 'w')
    f.write('<div class="image-overlay" style="width:%dpx;height:%dpx;position:absolute;top:0;left:0">' % (width, height))
    margin_top = 32
    margin_left = 96
    margin_bottom = 48
    margin_right = 64
    row_spacing = 8
    label_left_space = 16
    label_bottom_space = 0
    n = len(labels)
    box_height = height - margin_top - margin_bottom - row_spacing * (n-1)
    box_height = box_height / n
    rem_height = (height - margin_top - margin_bottom - row_spacing * (n-1) -
                  box_height * n)
    for i in xrange(n):
        neg_i = n - i - 1
        if urls[i] is not None:
            f.write('<a href="%s" title="%s" class="image-overlay-box" style='
                    '"position: absolute;top:%dpx;left:%dpx;width:%dpx;height:%dpx">' %
                    (urls[i], labels[i],
                     margin_top + i * (box_height + row_spacing),
                     margin_left, width - margin_left - margin_right - 1,
                     box_height - 1))
            f.write('</a>')
    f.write('</div>')
    f.close()
