[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#611163: nice css: let there be patches...



Hi,

See attached or branch html5+external_css from  
ssh://git.debian.org/git/collab-maint/secure-testing.git

These patches turn the html into html5 and introduce a modern, slick css style 
inspired from tracker.d.o - enjoy! :)

& Feedback welcome!


cheers & thanks to Ulrike for the nice work!

	Holger
From 1317d0e6a710195c3012f6b84afeebddfddfde20 Mon Sep 17 00:00:00 2001
From: Holger Levsen <holger@layer-acht.org>
Date: Sun, 14 Sep 2014 22:36:54 +0200
Subject: [PATCH 1/4] tracker_service.py: add support for external css files

---
 bin/tracker_service.css   |  0
 bin/tracker_service.py    | 11 +++++++++--
 lib/python/web_support.py |  6 +++---
 3 files changed, 12 insertions(+), 5 deletions(-)
 create mode 100644 bin/tracker_service.css

diff --git a/bin/tracker_service.css b/bin/tracker_service.css
new file mode 100644
index 0000000..e69de29
diff --git a/bin/tracker_service.py b/bin/tracker_service.py
index bb1411a..79662b0 100644
--- a/bin/tracker_service.py
+++ b/bin/tracker_service.py
@@ -160,6 +160,13 @@ function onSearch(query) {
         self.register('data/pts/1', self.page_data_pts)
         self.register('debsecan/**', self.page_debsecan)
         self.register('data/report', self.page_report)
+        self.register('style.css', self.page_style_css)
+
+    def page_style_css(self, path, params, url):
+        f=open('tracker_service.css', 'r')
+	content=f.read()
+	f.close()
+        return BinaryResult(content,'text/css')
 
     def page_home(self, path, params, url):
         query = params.get('query', ('',))[0]
@@ -1198,13 +1205,13 @@ Debian bug number.'''),
             data.append(':')
             data.append(str(bugs))
             data.append('\n')
-        return BinaryResult(''.join(data))
+        return BinaryResult(''.join(data),'application/octet-stream')
 
     def page_debsecan(self, path, params, url):
         obj = '/'.join(path)
         data = self.db.getDebsecan(obj)
         if data:
-            return BinaryResult(data)
+            return BinaryResult(data,'application/octet-stream')
         else:
             return self.create_page(
                 url, "Object not found",
diff --git a/lib/python/web_support.py b/lib/python/web_support.py
index 3c3ab99..e8b055c 100644
--- a/lib/python/web_support.py
+++ b/lib/python/web_support.py
@@ -620,7 +620,7 @@ class RedirectResult(Result):
 
 class HTMLResult(Result):
     """An object of this class combines a status code with HTML contents."""
-    def __init__(self, contents, status=200, doctype=''):
+    def __init__(self, contents, doctype='', status=200):
         self.contents = contents
         self.status = status
         self.doctype = doctype
@@ -649,8 +649,8 @@ class HTMLResult(Result):
 
 class BinaryResult(Result):
     """An object of this class combines a status code with HTML contents."""
-    def __init__(self, contents, status=200,
-                 mimetype='application/octet-stream'):
+    def __init__(self, contents,
+                 mimetype='application/octet-stream', status=200):
         self.contents = contents
         self.status = status
         self.mimetype = mimetype
-- 
1.9.1

From d172f236441c888a3e47a40363d4b1f283709a98 Mon Sep 17 00:00:00 2001
From: u451f <u@451f.org>
Date: Sun, 14 Sep 2014 22:43:06 +0200
Subject: [PATCH 2/4] use modern html5 css. switch to external stylesheet.

---
 bin/tracker_service.css   | 133 ++++++++++++++++++++++++++++++++++++++++++++++
 bin/tracker_service.py    |  55 ++++++++-----------
 lib/python/web_support.py |  12 ++++-
 3 files changed, 164 insertions(+), 36 deletions(-)

diff --git a/bin/tracker_service.css b/bin/tracker_service.css
index e69de29..0e02a61 100644
--- a/bin/tracker_service.css
+++ b/bin/tracker_service.css
@@ -0,0 +1,133 @@
+html {
+	font-size: 100%;
+	-webkit-text-size-adjust: 100%;
+    -ms-text-size-adjust:100%;
+}
+
+body {
+	width: 90%;
+	max-width: 1200px;
+	margin: 2em auto 1em;
+	font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+	font-size: 14px;
+	line-height: 20px;
+	color: #333333;
+}
+
+header {
+	border-bottom: 1px solid crimson;
+	margin-bottom: 2em;
+}
+
+a {
+	color:#0088cc;
+	text-decoration:none;
+}
+
+a:hover, a:focus {
+	color:#005580;
+	text-decoration:underline;
+}
+
+ul, li {
+	list-style: none;
+}
+
+ul, ol {
+	padding-left: 0;
+}
+
+h1 {
+	font-size : 250%;
+	padding: 0;
+	margin: 0;
+	line-height: 1.4em;
+}
+
+h2 {
+	font-size : 110%;
+	background: crimson;
+	margin: 1em 0 0;
+	padding: 0.5em;
+	color: #fff;
+	border-top-left-radius: 0.5em;
+	border-top-right-radius: 0.5em;
+}
+
+h3 {
+	font-size : 110%;
+}
+
+table {
+	width: 100%;
+	border: 1px solid #ddd;
+	border-radius: 0.5em;
+	border-collapse: collapse;
+	box-shadow: 0 1px 3px #eee;
+	margin-bottom: 2em;
+}
+
+tr(even) {
+	background-color: #fafafa;
+}
+
+td, th {
+	text-align: left;
+	padding: 0.25em 0.5em;
+	border-bottom: 1px solid #ddd;
+	border-collapse: collapse;
+	vertical-align: top;
+}
+
+table tr:last-child td {
+	border: none;
+}
+
+th {
+	background: #eee;
+	padding: 0.5em;
+}
+
+hr {
+	display: none;
+}
+
+footer {
+	text-align: center;
+	margin-top: 1em;
+}
+
+form {
+	text-align: center;
+	padding: 1em 0;
+	margin: 1em 0;
+	border-top: 1px solid #ddd;
+	border-bottom: 1px solid #ddd;
+}
+
+span.red { color: red; }
+span.purple { color: purple; }
+span.green { color: green; }
+span.dangerous { color: rgb(191,127,0); }
+
+@media all and (max-width: 641px) {
+	body {
+		font-size: 13px;
+	}
+	table {
+		table-layout: fixed;
+	}
+	td, th {
+		overflow: hidden;
+	}
+}
+
+@media all and (min-width: 641px) {
+	header {
+		background: url(https://tracker.debian.org/static/img/logo.png) top right no-repeat;
+		min-height: 60px;
+	}
+	h1 {
+		line-height: 2.4em;
+	}
+}
diff --git a/bin/tracker_service.py b/bin/tracker_service.py
index 79662b0..f002cc4 100644
--- a/bin/tracker_service.py
+++ b/bin/tracker_service.py
@@ -86,37 +86,24 @@ class BugFilterNoDSA(BugFilter):
         return nodsa and not self.params['show_nodsa']
 
 class TrackerService(webservice_base_class):
-    head_contents = compose(STYLE(
-        """h1 { font-size : 144%; }
-h2 { font-size : 120%; }
-h3 { font-size : 100%; }
-
-table { padding-left : 1.5em }
-td, th { text-align : left;
-	 padding-left : 0.25em;
-         padding-right : 0.25em; }
-td { vertical-align: baseline }
-span.red { color: red; }
-span.purple { color: purple; }
-span.green { color: green; }
-span.dangerous { color: rgb(191,127,0); }
-"""), SCRIPT('''var old_query_value = "";
-
-function selectSearch() {
-  document.searchForm.query.focus();
-}
-
-function onSearch(query) {
-  if (old_query_value == "") {
-    if (query.length > 5) {
-      old_query_value = query;
-      document.searchForm.submit();
-    } else {
-      old_query_value = query;
-    }
-  }
-}
-''')).toHTML()
+    head_contents = compose(
+	LINK(' ', href="/tracker/style.css"),
+	SCRIPT('''var old_query_value = "";
+	function selectSearch() {
+	document.searchForm.query.focus();
+	}
+
+	function onSearch(query) {
+	if (old_query_value == "") {
+		if (query.length > 5) {
+		old_query_value = query;
+		document.searchForm.submit();
+		} else {
+		old_query_value = query;
+		}
+	}
+	}
+	''')).toHTML()
 
     nvd_text =  P('''If a "**" is included, the urgency field was automatically
         assigned by the NVD (National Vulnerability Database). Note that this
@@ -232,7 +219,7 @@ aware of and/or help us improve the quality of this information by """,
              P("""(You can enter CVE names, Debian bug numbers and package
 names in the search forms.)"""),
 
-             H2("External interfaces"),
+             H3("External interfaces"),
              P("""If you want to automatically open a relevant web page for
 some object, use the """,
                CODE(str(url.scriptRelative("redirect/")), EM("object")),
@@ -1223,7 +1210,7 @@ Debian bug number.'''),
         append(HR())
         if not search_in_page:
             append(self.make_search_button(url))
-        append(P(A(url.scriptRelative(""), "Home"),
+            append(FOOTER(P(A(url.scriptRelative(""), "Home"),
                     " - ", A(url.absolute("http://secure-testing.debian.net/";),
                              "Testing Security Team"),
                     " - ", A(url.absolute("https://www.debian.org/security/";),
@@ -1231,7 +1218,7 @@ Debian bug number.'''),
 		    " - ", A(url.absolute("https://anonscm.debian.org/viewvc/secure-testing/bin/tracker_service.py?view=markup";),
 		             "Source"),
 		    " ", A(url.absolute("svn://anonscm.debian.org/svn/secure-testing"), "(SVN)"),
-                    ))
+                    )))
         if search_in_page:
             on_load = "selectSearch()"
         else:
diff --git a/lib/python/web_support.py b/lib/python/web_support.py
index e8b055c..f4d267e 100644
--- a/lib/python/web_support.py
+++ b/lib/python/web_support.py
@@ -379,6 +379,8 @@ def STYLE(contents, type='text/css'):
     return tag('style', contents, type=type)
 def SCRIPT(contents, type="text/javascript", language="JavaScript"):
     return tag('script', contents, type=type, language=language)
+def LINK(contents, type="text/css", rel="stylesheet", href=""):
+    return tag('link', contents, type=type, rel=rel, href=href)
 def TITLE(contents):
     return tag('title', contents)
 def HTML(head, body):
@@ -391,6 +393,8 @@ def H1(contents):
     return tag('h1', contents)
 def H2(contents):
     return tag('h2', contents)
+def H3(contents):
+    return tag('h3', contents)
 def P(*contents):
     return Tag('p', contents)
 def SPAN(*__contents, **__attribs):
@@ -419,6 +423,10 @@ def INPUT(*__contents, **__attribs):
     return Tag('input', __contents, __attribs)
 def LI(*__contents, **__attribs):
     return Tag('li', __contents, __attribs)
+def HEADER(*__contents, **__attribs):
+    return Tag('header', __contents, __attribs)
+def FOOTER(*__contents, **__attribs):
+    return Tag('footer', __contents, __attribs)
 
 def _linkify(match):
     extra = match.group(2)
@@ -691,7 +699,7 @@ class WebServiceBase:
     def html_dtd(self):
         """Returns the DOCTYPE declaration to be used for HTML documents.
         Can be overridden."""
-        return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>'
+        return '<!DOCTYPE html>'
 
     def add_title(self, title, body, head_contents=None, body_attribs={}):
         """Takes a sequence of HTML objects and wraps them in 'body'
@@ -711,7 +719,7 @@ class WebServiceBase:
             body_list = [body]
         else:
             body_list = list(body)
-        body_list[:0] = (H1(title),)
+        body_list[:0] = (HEADER(H1(title)),)
 
         return tag('html',
                    (HEAD(head_list), Tag('body', body_list, body_attribs)))
-- 
1.9.1

From 8a84725d8657d66a5807f60332a3c280a0603e32 Mon Sep 17 00:00:00 2001
From: Holger Levsen <holger@layer-acht.org>
Date: Mon, 15 Sep 2014 01:16:23 +0200
Subject: [PATCH 3/4] introduce new directory and serve static files from
 there, currently just static/style.css

---
 bin/tracker_service.css | 133 ------------------------------------------------
 bin/tracker_service.py  |   2 +-
 static/style.css        | 133 ++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 134 insertions(+), 134 deletions(-)
 delete mode 100644 bin/tracker_service.css
 create mode 100644 static/style.css

diff --git a/bin/tracker_service.css b/bin/tracker_service.css
deleted file mode 100644
index 0e02a61..0000000
--- a/bin/tracker_service.css
+++ /dev/null
@@ -1,133 +0,0 @@
-html {
-	font-size: 100%;
-	-webkit-text-size-adjust: 100%;
-    -ms-text-size-adjust:100%;
-}
-
-body {
-	width: 90%;
-	max-width: 1200px;
-	margin: 2em auto 1em;
-	font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
-	font-size: 14px;
-	line-height: 20px;
-	color: #333333;
-}
-
-header {
-	border-bottom: 1px solid crimson;
-	margin-bottom: 2em;
-}
-
-a {
-	color:#0088cc;
-	text-decoration:none;
-}
-
-a:hover, a:focus {
-	color:#005580;
-	text-decoration:underline;
-}
-
-ul, li {
-	list-style: none;
-}
-
-ul, ol {
-	padding-left: 0;
-}
-
-h1 {
-	font-size : 250%;
-	padding: 0;
-	margin: 0;
-	line-height: 1.4em;
-}
-
-h2 {
-	font-size : 110%;
-	background: crimson;
-	margin: 1em 0 0;
-	padding: 0.5em;
-	color: #fff;
-	border-top-left-radius: 0.5em;
-	border-top-right-radius: 0.5em;
-}
-
-h3 {
-	font-size : 110%;
-}
-
-table {
-	width: 100%;
-	border: 1px solid #ddd;
-	border-radius: 0.5em;
-	border-collapse: collapse;
-	box-shadow: 0 1px 3px #eee;
-	margin-bottom: 2em;
-}
-
-tr(even) {
-	background-color: #fafafa;
-}
-
-td, th {
-	text-align: left;
-	padding: 0.25em 0.5em;
-	border-bottom: 1px solid #ddd;
-	border-collapse: collapse;
-	vertical-align: top;
-}
-
-table tr:last-child td {
-	border: none;
-}
-
-th {
-	background: #eee;
-	padding: 0.5em;
-}
-
-hr {
-	display: none;
-}
-
-footer {
-	text-align: center;
-	margin-top: 1em;
-}
-
-form {
-	text-align: center;
-	padding: 1em 0;
-	margin: 1em 0;
-	border-top: 1px solid #ddd;
-	border-bottom: 1px solid #ddd;
-}
-
-span.red { color: red; }
-span.purple { color: purple; }
-span.green { color: green; }
-span.dangerous { color: rgb(191,127,0); }
-
-@media all and (max-width: 641px) {
-	body {
-		font-size: 13px;
-	}
-	table {
-		table-layout: fixed;
-	}
-	td, th {
-		overflow: hidden;
-	}
-}
-
-@media all and (min-width: 641px) {
-	header {
-		background: url(https://tracker.debian.org/static/img/logo.png) top right no-repeat;
-		min-height: 60px;
-	}
-	h1 {
-		line-height: 2.4em;
-	}
-}
diff --git a/bin/tracker_service.py b/bin/tracker_service.py
index f002cc4..523213d 100644
--- a/bin/tracker_service.py
+++ b/bin/tracker_service.py
@@ -150,7 +150,7 @@ class TrackerService(webservice_base_class):
         self.register('style.css', self.page_style_css)
 
     def page_style_css(self, path, params, url):
-        f=open('tracker_service.css', 'r')
+        f=open('../static/style.css', 'r')
 	content=f.read()
 	f.close()
         return BinaryResult(content,'text/css')
diff --git a/static/style.css b/static/style.css
new file mode 100644
index 0000000..0e02a61
--- /dev/null
+++ b/static/style.css
@@ -0,0 +1,133 @@
+html {
+	font-size: 100%;
+	-webkit-text-size-adjust: 100%;
+    -ms-text-size-adjust:100%;
+}
+
+body {
+	width: 90%;
+	max-width: 1200px;
+	margin: 2em auto 1em;
+	font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+	font-size: 14px;
+	line-height: 20px;
+	color: #333333;
+}
+
+header {
+	border-bottom: 1px solid crimson;
+	margin-bottom: 2em;
+}
+
+a {
+	color:#0088cc;
+	text-decoration:none;
+}
+
+a:hover, a:focus {
+	color:#005580;
+	text-decoration:underline;
+}
+
+ul, li {
+	list-style: none;
+}
+
+ul, ol {
+	padding-left: 0;
+}
+
+h1 {
+	font-size : 250%;
+	padding: 0;
+	margin: 0;
+	line-height: 1.4em;
+}
+
+h2 {
+	font-size : 110%;
+	background: crimson;
+	margin: 1em 0 0;
+	padding: 0.5em;
+	color: #fff;
+	border-top-left-radius: 0.5em;
+	border-top-right-radius: 0.5em;
+}
+
+h3 {
+	font-size : 110%;
+}
+
+table {
+	width: 100%;
+	border: 1px solid #ddd;
+	border-radius: 0.5em;
+	border-collapse: collapse;
+	box-shadow: 0 1px 3px #eee;
+	margin-bottom: 2em;
+}
+
+tr(even) {
+	background-color: #fafafa;
+}
+
+td, th {
+	text-align: left;
+	padding: 0.25em 0.5em;
+	border-bottom: 1px solid #ddd;
+	border-collapse: collapse;
+	vertical-align: top;
+}
+
+table tr:last-child td {
+	border: none;
+}
+
+th {
+	background: #eee;
+	padding: 0.5em;
+}
+
+hr {
+	display: none;
+}
+
+footer {
+	text-align: center;
+	margin-top: 1em;
+}
+
+form {
+	text-align: center;
+	padding: 1em 0;
+	margin: 1em 0;
+	border-top: 1px solid #ddd;
+	border-bottom: 1px solid #ddd;
+}
+
+span.red { color: red; }
+span.purple { color: purple; }
+span.green { color: green; }
+span.dangerous { color: rgb(191,127,0); }
+
+@media all and (max-width: 641px) {
+	body {
+		font-size: 13px;
+	}
+	table {
+		table-layout: fixed;
+	}
+	td, th {
+		overflow: hidden;
+	}
+}
+
+@media all and (min-width: 641px) {
+	header {
+		background: url(https://tracker.debian.org/static/img/logo.png) top right no-repeat;
+		min-height: 60px;
+	}
+	h1 {
+		line-height: 2.4em;
+	}
+}
-- 
1.9.1

From 9c9738636e709f5547deaf5bd64bd1232d605de3 Mon Sep 17 00:00:00 2001
From: Holger Levsen <holger@layer-acht.org>
Date: Mon, 15 Sep 2014 01:22:45 +0200
Subject: [PATCH 4/4] use local copy of Debian logo.png

---
 bin/tracker_service.py |   7 +++++++
 static/logo.png        | Bin 0 -> 6733 bytes
 static/style.css       |   2 +-
 3 files changed, 8 insertions(+), 1 deletion(-)
 create mode 100644 static/logo.png

diff --git a/bin/tracker_service.py b/bin/tracker_service.py
index 523213d..7c5b31d 100644
--- a/bin/tracker_service.py
+++ b/bin/tracker_service.py
@@ -148,6 +148,7 @@ class TrackerService(webservice_base_class):
         self.register('debsecan/**', self.page_debsecan)
         self.register('data/report', self.page_report)
         self.register('style.css', self.page_style_css)
+        self.register('logo.png', self.page_logo_png)
 
     def page_style_css(self, path, params, url):
         f=open('../static/style.css', 'r')
@@ -155,6 +156,12 @@ class TrackerService(webservice_base_class):
 	f.close()
         return BinaryResult(content,'text/css')
 
+    def page_logo_png(self, path, params, url):
+        f=open('../static/logo.png', 'r')
+	content=f.read()
+	f.close()
+        return BinaryResult(content,'image/png')
+
     def page_home(self, path, params, url):
         query = params.get('query', ('',))[0]
         if query:
diff --git a/static/logo.png b/static/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1321d8f4534ddedd013a3f7921b76446741fbd8
GIT binary patch
literal 6733
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

literal 0
HcmV?d00001

diff --git a/static/style.css b/static/style.css
index 0e02a61..42f6f4d 100644
--- a/static/style.css
+++ b/static/style.css
@@ -124,7 +124,7 @@ span.dangerous { color: rgb(191,127,0); }
 
 @media all and (min-width: 641px) {
 	header {
-		background: url(https://tracker.debian.org/static/img/logo.png) top right no-repeat;
+		background: url(/tracker/logo.png) top right no-repeat;
 		min-height: 60px;
 	}
 	h1 {
-- 
1.9.1

Attachment: signature.asc
Description: This is a digitally signed message part.


Reply to: