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.