mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-10-31 00:06:02 -04: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)
 |