mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-24 00:47:57 -05:00
175 lines
5.1 KiB
Python
175 lines
5.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
/***************************************************************************
|
|
Name : DB Manager
|
|
Description : Database manager plugin for QGIS
|
|
Date : May 23, 2011
|
|
copyright : (C) 2011 by Giuseppe Sucameli
|
|
email : brush.tyler@gmail.com
|
|
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* 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 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
"""
|
|
from builtins import str
|
|
from builtins import object
|
|
|
|
|
|
class HtmlContent(object):
|
|
|
|
def __init__(self, data):
|
|
self.data = data if not isinstance(data, HtmlContent) else data.data
|
|
|
|
def toHtml(self):
|
|
if isinstance(self.data, list) or isinstance(self.data, tuple):
|
|
html = u''
|
|
for item in self.data:
|
|
html += HtmlContent(item).toHtml()
|
|
return html
|
|
|
|
if hasattr(self.data, 'toHtml'):
|
|
return self.data.toHtml()
|
|
|
|
html = str(self.data).replace("\n", "<br>")
|
|
return html
|
|
|
|
def hasContents(self):
|
|
if isinstance(self.data, list) or isinstance(self.data, tuple):
|
|
empty = True
|
|
for item in self.data:
|
|
if item.hasContents():
|
|
empty = False
|
|
break
|
|
return not empty
|
|
|
|
if hasattr(self.data, 'hasContents'):
|
|
return self.data.hasContents()
|
|
|
|
return len(self.data) > 0
|
|
|
|
|
|
class HtmlElem(object):
|
|
|
|
def __init__(self, tag, data, attrs=None):
|
|
self.tag = tag
|
|
self.data = data if isinstance(data, HtmlContent) else HtmlContent(data)
|
|
self.attrs = attrs if attrs is not None else dict()
|
|
if 'tag' in self.attrs:
|
|
self.setTag(self.attrs['tag'])
|
|
del self.attrs['tag']
|
|
|
|
def setTag(self, tag):
|
|
self.tag = tag
|
|
|
|
def getOriginalData(self):
|
|
return self.data.data
|
|
|
|
def setAttr(self, name, value):
|
|
self.attrs[name] = value
|
|
|
|
def getAttrsHtml(self):
|
|
html = u''
|
|
for k, v in self.attrs.items():
|
|
html += u' %s="%s"' % (k, v)
|
|
return html
|
|
|
|
def openTagHtml(self):
|
|
return u"<%s%s>" % (self.tag, self.getAttrsHtml())
|
|
|
|
def closeTagHtml(self):
|
|
return u"</%s>" % self.tag
|
|
|
|
def toHtml(self):
|
|
return u"%s%s%s" % (self.openTagHtml(), self.data.toHtml(), self.closeTagHtml())
|
|
|
|
def hasContents(self):
|
|
return self.data.toHtml() != ""
|
|
|
|
|
|
class HtmlParagraph(HtmlElem):
|
|
|
|
def __init__(self, data, attrs=None):
|
|
HtmlElem.__init__(self, 'p', data, attrs)
|
|
|
|
|
|
class HtmlListItem(HtmlElem):
|
|
|
|
def __init__(self, data, attrs=None):
|
|
HtmlElem.__init__(self, 'li', data, attrs)
|
|
|
|
|
|
class HtmlList(HtmlElem):
|
|
|
|
def __init__(self, items, attrs=None):
|
|
# make sure to have HtmlListItem items
|
|
items = list(items)
|
|
for i, item in enumerate(items):
|
|
if not isinstance(item, HtmlListItem):
|
|
items[i] = HtmlListItem(item)
|
|
HtmlElem.__init__(self, 'ul', items, attrs)
|
|
|
|
|
|
class HtmlTableCol(HtmlElem):
|
|
|
|
def __init__(self, data, attrs=None):
|
|
HtmlElem.__init__(self, 'td', data, attrs)
|
|
|
|
def closeTagHtml(self):
|
|
# FIX INVALID BEHAVIOR: an empty cell as last table's cell break margins
|
|
return u" %s" % HtmlElem.closeTagHtml(self)
|
|
|
|
|
|
class HtmlTableRow(HtmlElem):
|
|
|
|
def __init__(self, cols, attrs=None):
|
|
# make sure to have HtmlTableCol items
|
|
cols = list(cols)
|
|
for i, c in enumerate(cols):
|
|
if not isinstance(c, HtmlTableCol):
|
|
cols[i] = HtmlTableCol(c)
|
|
HtmlElem.__init__(self, 'tr', cols, attrs)
|
|
|
|
|
|
class HtmlTableHeader(HtmlTableRow):
|
|
|
|
def __init__(self, cols, attrs=None):
|
|
HtmlTableRow.__init__(self, cols, attrs)
|
|
for c in self.getOriginalData():
|
|
c.setTag('th')
|
|
|
|
|
|
class HtmlTable(HtmlElem):
|
|
|
|
def __init__(self, rows, attrs=None):
|
|
# make sure to have HtmlTableRow items
|
|
rows = list(rows)
|
|
for i, r in enumerate(rows):
|
|
if not isinstance(r, HtmlTableRow):
|
|
rows[i] = HtmlTableRow(r)
|
|
HtmlElem.__init__(self, 'table', rows, attrs)
|
|
|
|
|
|
class HtmlWarning(HtmlContent):
|
|
|
|
def __init__(self, data):
|
|
data = ['<img src=":/icons/warning-20px.png"> ', data]
|
|
HtmlContent.__init__(self, data)
|
|
|
|
|
|
class HtmlSection(HtmlContent):
|
|
|
|
def __init__(self, title, content=None):
|
|
data = ['<div class="section"><h2>', title, '</h2>']
|
|
if content is not None:
|
|
data.extend(['<div>', content, '</div>'])
|
|
data.append('</div>')
|
|
HtmlContent.__init__(self, data)
|