Moved all the implementation into the html.py file
authorGianluca Montecchi <gian@grys.it>
Mon, 27 Jul 2009 21:59:40 +0000 (23:59 +0200)
committerGianluca Montecchi <gian@grys.it>
Mon, 27 Jul 2009 21:59:40 +0000 (23:59 +0200)
Implemented the creation of the index for active and inactive bugs, with detail for earch of them

.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/b1a772a0-241f-42fc-8209-765162485b0a/body [new file with mode: 0644]
.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/b1a772a0-241f-42fc-8209-765162485b0a/values [new file with mode: 0644]
.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/c1b9bc11-71e1-473e-ad9c-cfba0a2533d5/body [new file with mode: 0644]
.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/c1b9bc11-71e1-473e-ad9c-cfba0a2533d5/values [new file with mode: 0644]
.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/d74a6a82-6a08-472b-86d8-b1546c4d460f/body [new file with mode: 0644]
.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/d74a6a82-6a08-472b-86d8-b1546c4d460f/values [new file with mode: 0644]
becommands/html.py
becommands/html_data.py [deleted file]

diff --git a/.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/b1a772a0-241f-42fc-8209-765162485b0a/body b/.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/b1a772a0-241f-42fc-8209-765162485b0a/body
new file mode 100644 (file)
index 0000000..2e6c9cb
--- /dev/null
@@ -0,0 +1 @@
+commento \n su due righe
diff --git a/.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/b1a772a0-241f-42fc-8209-765162485b0a/values b/.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/b1a772a0-241f-42fc-8209-765162485b0a/values
new file mode 100644 (file)
index 0000000..b6abe1f
--- /dev/null
@@ -0,0 +1,8 @@
+Content-type: text/plain
+
+
+Date: Wed, 22 Jul 2009 21:48:23 +0000
+
+
+From: Gianluca Montecchi <gian@grys.it>
+
diff --git a/.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/c1b9bc11-71e1-473e-ad9c-cfba0a2533d5/body b/.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/c1b9bc11-71e1-473e-ad9c-cfba0a2533d5/body
new file mode 100644 (file)
index 0000000..6db3446
--- /dev/null
@@ -0,0 +1 @@
+Identato
diff --git a/.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/c1b9bc11-71e1-473e-ad9c-cfba0a2533d5/values b/.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/c1b9bc11-71e1-473e-ad9c-cfba0a2533d5/values
new file mode 100644 (file)
index 0000000..2b282c0
--- /dev/null
@@ -0,0 +1,11 @@
+Content-type: text/plain
+
+
+Date: Mon, 27 Jul 2009 20:08:02 +0000
+
+
+From: Gianluca Montecchi <gian@grys.it>
+
+
+In-reply-to: d74a6a82-6a08-472b-86d8-b1546c4d460f
+
diff --git a/.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/d74a6a82-6a08-472b-86d8-b1546c4d460f/body b/.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/d74a6a82-6a08-472b-86d8-b1546c4d460f/body
new file mode 100644 (file)
index 0000000..bea1060
--- /dev/null
@@ -0,0 +1 @@
+Commento normale
diff --git a/.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/d74a6a82-6a08-472b-86d8-b1546c4d460f/values b/.be/bugs/4ddf1313-bb3c-45d3-8dca-79ed5830d606/comments/d74a6a82-6a08-472b-86d8-b1546c4d460f/values
new file mode 100644 (file)
index 0000000..e26b88e
--- /dev/null
@@ -0,0 +1,8 @@
+Content-type: text/plain
+
+
+Date: Wed, 22 Jul 2009 20:05:15 +0000
+
+
+From: Gianluca Montecchi <gian@grys.it>
+
index b0441b9e05ed9a0e71d337e000cafe5e8b477231..3f6d923e0259a8de92bfc5caf6191b872434a67a 100644 (file)
@@ -19,8 +19,8 @@
 #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 """Re-open a bug"""
 from libbe import cmdutil, bugdir, bug
-from html_data import *
-import os,  re,  time
+#from html_data import *
+import os,  re,  time, string
 
 __desc__ = __doc__
 
@@ -55,19 +55,24 @@ def execute(args, test=False):
     st = {}
     se = {}
     stime = {}
-    bugs = []
+    bugs_active = []
+    bugs_inactive = []
     for s in status_list:
         st[s] = 0
     for b in bd:
         stime[b.uuid]  = b.time
         if b.status in ["open", "test", "unconfirmed", "assigned"]:
-            bugs.append(b)
+            bugs_active.append(b)
+        else:
+            bugs_inactive.append(b)
         st[b.status] += 1
     ordered_bug_list = sorted([(value,key) for (key,value) in stime.items()])
+    ordered_bug_list_in = sorted([(value,key) for (key,value) in stime.items()])
     #open_bug_list = sorted([(value,key) for (key,value) in bugs.items()])
     
     html_gen = BEHTMLGen(bd)
-    html_gen.create_index_file(out_dir,  st, bugs, ordered_bug_list)
+    html_gen.create_index_file(out_dir,  st, bugs_active, ordered_bug_list, "active")
+    html_gen.create_index_file(out_dir,  st, bugs_inactive, ordered_bug_list, "inactive")
     
 def get_parser():
     parser = cmdutil.CmdOptionParser("be open OUTPUT_DIR")
@@ -86,7 +91,363 @@ class BEHTMLGen():
         self.index_value = ""    
         self.bd = bd
         
-    def create_index_file(self, out_dir_path,  summary,  bugs, ordered_bug):
+        self.css_file = """
+        body {
+        font-family: "lucida grande", "sans serif";
+        color: #333;
+        width: 60em;
+        margin: auto;
+        }
+        
+        
+        div.main {
+        padding: 20px;
+        margin: auto;
+        padding-top: 0;
+        margin-top: 1em;
+        background-color: #fcfcfc;
+        }
+        
+        .comment {
+        padding: 20px;
+        margin: auto;
+        padding-top: 20px;
+        margin-top: 0;
+        }
+        
+        .commentF {
+        padding: 0px;
+        margin: auto;
+        padding-top: 20px;
+        paddin-bottom: 40px;
+        margin-top: 0;
+        }
+        
+        tb {
+        border = 1;
+        }
+        
+        .open-row {
+        background-color: #e9e9e2;
+        width: 5%;
+        }
+        
+        .assigned-row {
+        background-color: #f9f9f9;
+        width: 5%;
+        }
+        
+        
+        .test-row {
+        background-color: #f9f9f9;
+        width: 5%;
+        }
+        
+        .unconfirmed-row {
+        background-color: #f9f9f9;
+        width: 5%;
+        }
+        
+        .fixed-row {
+        background-color: #f9f9f9;
+        width: 5%;
+        }
+        
+        .closed-row {
+        background-color: #f9f9f9;
+        width: 5%;
+        }
+        
+        .wontfix-row {
+        background-color: #f9f9f9;
+        width: 5%;
+        }
+        
+        
+        .person {
+        font-family: courier;
+        }
+        
+        a, a:visited {
+        background: inherit;
+        text-decoration: none;
+        }
+        
+        a {
+        color: #003d41;
+        }
+        
+        a:visited {
+        color: #553d41;
+        }
+        
+        ul {
+        list-style-type: none;
+        padding: 0;
+        }
+        
+        p {
+        width: 40em;
+        }
+        
+        .inline-status-image {
+        position: relative;
+        top: 0.2em;
+        }
+        
+        .dimmed {
+        color: #bbb;
+        }
+        
+        table {
+        border-style: none;
+        border-spacing: 0;
+        }
+        
+        table.log {
+        }
+        
+        
+        td {
+        border-width: 0;
+        border-style: none;
+        padding-right: 0.5em;
+        padding-left: 0.5em;
+        }
+        
+        tr {
+        vertical-align: top;
+        }
+        
+        h1 {
+        padding: 0.5em;
+        background-color: #305275;
+        margin-top: 0;
+        margin-bottom: 0;
+        color: #fff;
+        margin-left: -20px;
+        margin-right: -20px;  
+        }
+        
+        h2 {
+        text-transform: uppercase;
+        font-size: smaller;
+        margin-top: 1em;
+        margin-left: -0.5em;  
+        /*background: #fffbce;*/
+        /*background: #628a0d;*/
+        padding: 5px;
+        color: #305275;
+        }
+        
+        
+        
+        .attrname {
+        text-align: right;
+        font-size: smaller;
+        }
+        
+        .attrval {
+        color: #222;
+        }
+        
+        .issue-closed-fixed {
+        background-image: "green-check.png";
+        }
+        
+        .issue-closed-wontfix {
+        background-image: "red-check.png";
+        }
+        
+        .issue-closed-reorg {
+        background-image: "blue-check.png";
+        }
+        
+        .inline-issue-link {
+        text-decoration: underline;
+        }
+        
+        img {
+        border: 0;
+        }
+        
+        
+        div.footer {
+        font-size: small;
+        padding-left: 20px;
+        padding-right: 20px;
+        padding-top: 5px;
+        padding-bottom: 5px;
+        margin: auto;
+        background: #305275;
+        color: #fffee7;
+        }
+        
+        .footer a {
+        color: #508d91;
+        }
+        
+        
+        .header {
+        font-family: "lucida grande", "sans serif";
+        font-size: smaller;
+        background-color: #a9a9a9;
+        text-align: left;
+        
+        padding-right: 0.5em;
+        padding-left: 0.5em;
+        
+        }
+        
+        
+        .selected-cell {
+        background-color: #e9e9e2;
+        }
+        
+        .plain-cell {
+        background-color: #f9f9f9;
+        }
+        
+        .backptr {
+        font-size: smaller;
+        width: 100%;
+        text-align: left;
+        padding-bottom: 1em;
+        margin-top: 0;
+        }
+        
+        .logcomment {
+        padding-left: 4em;
+        font-size: smaller;
+        }
+        
+        .id {
+        font-family: courier;
+        }
+        
+        .description {
+        background: #f2f2f2;
+        padding-left: 1em;
+        padding-right: 1em;
+        padding-top: 0.5em;
+        padding-bottom: 0.5em;
+        }
+        
+        .message {
+        }
+        
+        .littledate {
+        font-size: smaller;
+        }
+        
+        .progress-meter-done {
+        background-color: #03af00;
+        }
+        
+        .progress-meter-undone {
+        background-color: #ddd;
+        }
+        
+        .progress-meter {
+        }
+        """
+        
+        self.index_first = """
+        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+        <head>
+        <title>BugsEverywhere Issue Tracker</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+        <link rel="stylesheet" href="style.css" type="text/css" />
+        </head>
+        <body>
+        
+        
+        <div class="main">
+        <h1>BugsEverywhere Bug List</h1>
+        <table><tr>
+        <td><a href="index.html"><h2>Active Bugs</h2></a></td>
+        <td><a href="index_inactive.html"><h2>Inactive Bugs</h2></a></td>
+        </tr>
+        </table>
+        <table width=100%>
+        <tbody>
+        """    
+        
+        self.bug_line ="""
+        <tr class=%s-row cellspacing=1>
+        <td ><a href="bugs/%s.html">%s</a></td>
+        <td ><a href="bugs/%s.html">%s</a></td>
+        <td><a href="bugs/%s.html">%s</a></td>
+        <td><a href="bugs/%s.html">%s</a></td>
+        <td><a href="bugs/%s.html">%s</a></td>
+        </tr>
+        """
+        
+        self.detail_first = """
+        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+        <head>
+        <title>BugsEverywhere Issue Tracker</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+        <link rel="stylesheet" href="../style.css" type="text/css" />
+        </head>
+        <body>
+        
+        
+        <div class="main">
+        <h1>BugsEverywhere Bug List</h1>
+        <h2>Bug: _bug_id_</h2>
+        <table >
+        <tbody>
+        """   
+        
+        
+        
+        self.detail_line ="""
+        <tr>
+        <td align="right">%s</td><td>%s</td>
+        </tr>
+        """
+        
+        self.index_last = """
+        </tbody>
+        </table>
+        
+        </div>
+        
+        <div class="footer">Generated by <a href="http://www.bugseverywhere.org/">BugsEverywhere</a>.</div>
+        
+        </body>
+        </html>
+        """
+        
+        self.comment_section = """
+        """
+        
+        self.begin_comment_section ="""
+        <tr>
+        <td align=right>Comments:
+        </td>
+        <td>
+        """
+        
+        
+        self.end_comment_section ="""
+        </td>
+        </tr>
+        """
+        
+        self.detail_last = """
+        </tbody>
+        </table>
+        </div>
+        <h2><a href="%s">Back to Index</a></h2>
+        <div class="footer">Generated by <a href="http://www.bugseverywhere.org/">BugsEverywhere</a>.</div>
+        </body>
+        </html>
+        """   
+        
+        
+    def create_index_file(self, out_dir_path,  summary,  bugs, ordered_bug, fileid):
         try:
             os.stat(out_dir_path)
         except:
@@ -96,7 +457,7 @@ class BEHTMLGen():
                 raise  cmdutil.UsageError, "Cannot create output directory."
         try:
             FO = open(out_dir_path+"/style.css", "w")
-            FO.write(css_file)
+            FO.write(self.css_file)
             FO.close()
         except:
             raise  cmdutil.UsageError, "Cannot create the style.css file."
@@ -107,15 +468,18 @@ class BEHTMLGen():
             pass
         
         try:
-            FO = open(out_dir_path+"/index.html", "w")
+            if fileid == "active":
+                FO = open(out_dir_path+"/index.html", "w")
+            if fileid == "inactive":
+                FO = open(out_dir_path+"/index_inactive.html", "w")
         except:
             raise  cmdutil.UsageError, "Cannot create the index.html file."
         
-        FO.write(index_first)
+        FO.write(self.index_first)
         c = 0
         t = len(bugs) - 1
         for l in range(t,  -1,  -1):
-            line = bug_line%(bugs[l].status,
+            line = self.bug_line%(bugs[l].status,
             bugs[l].uuid, bugs[l].uuid[0:3],
             bugs[l].uuid,  bugs[l].status,
             bugs[l].uuid,  bugs[l].severity,
@@ -124,11 +488,11 @@ class BEHTMLGen():
             )
             FO.write(line)
             c += 1
-            self.CreateDetailFile(bugs[l], out_dir_path)
-        FO.write(index_last)
+            self.CreateDetailFile(bugs[l], out_dir_path, fileid)
+        FO.write(self.index_last)
 
 
-    def CreateDetailFile(self, bug, out_dir_path):
+    def CreateDetailFile(self, bug, out_dir_path, fileid):
         f = "%s.html"%bug.uuid
         p = out_dir_path+"/bugs/"+f
         try:
@@ -136,26 +500,67 @@ class BEHTMLGen():
         except:
             raise  cmdutil.UsageError, "Cannot create the detail html file."
 
-        detail_first_ = re.sub('_bug_id_', bug.uuid[0:3], detail_first)
+        detail_first_ = re.sub('_bug_id_', bug.uuid[0:3], self.detail_first)
         FD.write(detail_first_)
         
         
         
-        bug_ = self.bd.bug_from_shortname(bug.uuid[0:3])
+        bug_ = self.bd.bug_from_shortname(bug.uuid)
         bug_.load_comments(load_full=True)
+        
+        FD.write(self.detail_line%("ID : ", bug.uuid))
+        FD.write(self.detail_line%("Short name : ", bug.uuid[0:3]))
+        FD.write(self.detail_line%("Severity : ", bug.severity))
+        FD.write(self.detail_line%("Status : ", bug.status))
+        FD.write(self.detail_line%("Assigned : ", bug.assigned))
+        FD.write(self.detail_line%("Target : ", bug.target))
+        FD.write(self.detail_line%("Reporter : ", bug.reporter))
+        FD.write(self.detail_line%("Creator : ", bug.creator))
+        FD.write(self.detail_line%("Created : ", bug.time_string))
+        FD.write(self.detail_line%("Summary : ", bug.summary))
+        FD.write("<tr><td colspan=2><hr></td></tr>")
+        FD.write(self.begin_comment_section)
+        tr = []
+        b = ''
+        level = 0
         for i in bug_.comments():
-            print i.uuid, i.in_reply_to
-        
-        FD.write(detail_line%("ID : ", bug.uuid))
-        FD.write(detail_line%("Short name : ", bug.uuid[0:3]))
-        FD.write(detail_line%("Severity : ", bug.severity))
-        FD.write(detail_line%("Status : ", bug.status))
-        FD.write(detail_line%("Assigned : ", bug.assigned))
-        FD.write(detail_line%("Target : ", bug.target))
-        FD.write(detail_line%("Reporter : ", bug.reporter))
-        FD.write(detail_line%("Creator : ", bug.creator))
-        FD.write(detail_line%("Created : ", bug.time_string))
-        FD.write(detail_line%("Summary : ", bug.summary))
-        FD.write("<tr></tr>")
-        FD.write(detail_last)
-        FD.close()
\ No newline at end of file
+            if not isinstance(i.in_reply_to,str):
+                first = True
+                a = i.string_thread(flatten=False)
+                d = re.split('\n',a)
+                for x in range(0,len(d)):
+                    hr = ""
+                    if re.match(" *--------- Comment ---------",d[x]):
+                        com = """
+                        %s<br>
+                        %s<br>
+                        %s<br>
+                        %s<br>
+                        %s<br>
+                        """%(d[x+1],d[x+2],d[x+3],d[x+4],d[x+5])
+                        l = re.sub("--------- Comment ---------", "", d[x])
+                        ll = l.split("  ")
+                        la = l
+                        ba = ""
+                        if len(la) > level:
+                            FD.write("<div class='comment'>")
+                        if len(la) < level:
+                            FD.write("</div>")
+                        if len(la) == 0:
+                            if not first :
+                                FD.write("</div>")
+                                first = False
+                            FD.write("<div class='commentF'>")
+                        level = len(la)
+                        x += 5
+                        FD.write(com)
+                        FD.write("<hr />")
+                FD.write("</div>")
+        FD.write(self.end_comment_section)
+        if fileid == "active":
+            FD.write(self.detail_last%"../index.html")
+        if fileid == "inactive":
+            FD.write(self.detail_last%"../index_inactive.html")
+        FD.close()
+        
+   
\ No newline at end of file
diff --git a/becommands/html_data.py b/becommands/html_data.py
deleted file mode 100644 (file)
index 68445cd..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-
-__desc__ = __doc__
-
-css_file = """
-body {
-font-family: "lucida grande", "sans serif";
-color: #333;
-width: 60em;
-margin: auto;
-}
-
-
-div.main {
-padding: 20px;
-margin: auto;
-padding-top: 0;
-margin-top: 1em;
-background-color: #fcfcfc;
-}
-
-tb {
-border = 1;
-}
-
-.open-row {
-background-color: #e9e9e2;
-width: 5%;
-}
-
-.assigned-row {
-background-color: #f9f9f9;
-width: 5%;
-}
-
-
-.test-row {
-background-color: #f9f9f9;
-width: 5%;
-}
-
-.unconfirmed-row {
-background-color: #f9f9f9;
-width: 5%;
-}
-
-.fixed-row {
-background-color: #f9f9f9;
-width: 5%;
-}
-
-.closed-row {
-background-color: #f9f9f9;
-width: 5%;
-}
-
-.wontfix-row {
-background-color: #f9f9f9;
-width: 5%;
-}
-
-
-.person {
-font-family: courier;
-}
-
-a, a:visited {
-background: inherit;
-text-decoration: none;
-}
-
-a {
-color: #003d41;
-}
-
-a:visited {
-color: #553d41;
-}
-
-ul {
-list-style-type: none;
-padding: 0;
-}
-
-p {
-width: 40em;
-}
-
-.inline-status-image {
-position: relative;
-top: 0.2em;
-}
-
-.dimmed {
-color: #bbb;
-}
-
-table {
-border-style: none;
-border-spacing: 0;
-}
-
-table.log {
-}
-
-
-td {
-border-width: 0;
-border-style: none;
-padding-right: 0.5em;
-padding-left: 0.5em;
-}
-
-tr {
-vertical-align: top;
-}
-
-h1 {
-padding: 0.5em;
-background-color: #305275;
-margin-top: 0;
-margin-bottom: 0;
-color: #fff;
-margin-left: -20px;
-margin-right: -20px;  
-}
-
-h2 {
-text-transform: uppercase;
-font-size: smaller;
-margin-top: 1em;
-margin-left: -0.5em;  
-/*background: #fffbce;*/
-/*background: #628a0d;*/
-padding: 5px;
-color: #305275;
-}
-
-
-
-.attrname {
-text-align: right;
-font-size: smaller;
-}
-
-.attrval {
-color: #222;
-}
-
-.issue-closed-fixed {
-background-image: "green-check.png";
-}
-
-.issue-closed-wontfix {
-background-image: "red-check.png";
-}
-
-.issue-closed-reorg {
-background-image: "blue-check.png";
-}
-
-.inline-issue-link {
-text-decoration: underline;
-}
-
-img {
-border: 0;
-}
-
-
-div.footer {
-font-size: small;
-padding-left: 20px;
-padding-right: 20px;
-padding-top: 5px;
-padding-bottom: 5px;
-margin: auto;
-background: #305275;
-color: #fffee7;
-}
-
-.footer a {
-color: #508d91;
-}
-
-
-.header {
-font-family: "lucida grande", "sans serif";
-font-size: smaller;
-background-color: #a9a9a9;
-text-align: left;
-
-padding-right: 0.5em;
-padding-left: 0.5em;
-
-}
-
-
-.selected-cell {
-background-color: #e9e9e2;
-}
-
-.plain-cell {
-background-color: #f9f9f9;
-}
-
-.backptr {
-font-size: smaller;
-width: 100%;
-text-align: left;
-padding-bottom: 1em;
-margin-top: 0;
-}
-
-.logcomment {
-padding-left: 4em;
-font-size: smaller;
-}
-
-.id {
-font-family: courier;
-}
-
-.description {
-background: #f2f2f2;
-padding-left: 1em;
-padding-right: 1em;
-padding-top: 0.5em;
-padding-bottom: 0.5em;
-}
-
-.message {
-}
-
-.littledate {
-font-size: smaller;
-}
-
-.progress-meter-done {
-background-color: #03af00;
-}
-
-.progress-meter-undone {
-background-color: #ddd;
-}
-
-.progress-meter {
-}
-"""
-
-index_first = """
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>BugsEverywhere Issue Tracker</title>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<link rel="stylesheet" href="style.css" type="text/css" />
-</head>
-<body>
-
-
-<div class="main">
-<h1>BugsEverywhere Bug List</h1>
-<h2>Open Bugs</h2>
-<table width=100%>
-<tbody>
-"""    
-
-bug_line ="""
-<tr class=%s-row cellspacing=1>
-<td ><a href="bugs/%s.html">%s</a></td>
-<td ><a href="bugs/%s.html">%s</a></td>
-<td><a href="bugs/%s.html">%s</a></td>
-<td><a href="bugs/%s.html">%s</a></td>
-<td><a href="bugs/%s.html">%s</a></td>
-</tr>
-"""
-
-detail_first = """
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>BugsEverywhere Issue Tracker</title>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<link rel="stylesheet" href="../style.css" type="text/css" />
-</head>
-<body>
-
-
-<div class="main">
-<h1>BugsEverywhere Bug List</h1>
-<h2>Bug: _bug_id_</h2>
-<table >
-<tbody>
-"""   
-
-        
-        
-detail_line ="""
-<tr>
-    <td align="right">%s</td><td>%s</td>
-</tr>
-"""
-
-index_last = """
-</tbody>
-</table>
-
-</div>
-
-<h2>Show all bugs</h2>
-
-<div class="footer">Generated by <a href="http://www.bugseverywhere.org/">BugsEverywhere</a>.</div>
-
-</body>
-</html>
-"""
-
-detail_last = """
-</tbody>
-</table>
-
-</div>
-
-<h2><a href="../index.html">Back to Index</a></h2>
-
-<div class="footer">Generated by <a href="http://www.bugseverywhere.org/">BugsEverywhere</a>.</div>
-
-</body>
-</html>
-"""
\ No newline at end of file