]> git.ipfire.org Git - pbs.git/commitdiff
Make package files viewable.
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 4 Dec 2012 16:06:33 +0000 (17:06 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 4 Dec 2012 16:06:33 +0000 (17:06 +0100)
data/static/js/pbs.js
data/templates/modules/packages-files-table.html
data/templates/packages/view-file.html [new file with mode: 0644]
web/__init__.py
web/handlers_packages.py

index 74e02fedfaca9b9efb0e36dae6cbbecd6a9bcce0..77b8fde8039b3de907079f2f8a3d52bbad20a462 100644 (file)
@@ -1,7 +1,6 @@
-// Activate Google Prettify for pretty-printing code.
-addEventListener('load', prettyPrint, false);
-
 $(document).ready(function() {
+       // Activate Google Prettify for pretty-printing code.
+       window.prettyPrint && prettyPrint()
 });
 
 function getCookie(name) {
index 58de689d423a639a6ca897a0a7f021cce765f2a6..dd7633cffc8603f5d9b9ccd41e01519b6118264f 100644 (file)
@@ -21,7 +21,7 @@
                                <td>
                                        <div class="btn-group">
                                                {% if file.viewable %}
-                                                       <a class="btn btn-mini" href="#">
+                                                       <a class="btn btn-mini" href="/package/{{ pkg.uuid }}/view{{ file.name }}">
                                                                <i class="icon-file"></i>
                                                        </a>
                                                {% end %}
diff --git a/data/templates/packages/view-file.html b/data/templates/packages/view-file.html
new file mode 100644 (file)
index 0000000..0b962ed
--- /dev/null
@@ -0,0 +1,53 @@
+{% extends "../base.html" %}
+
+{% block title %}{{ _("View %(filename)s from %(pkg)s") % { "filename" : filename, "pkg" : pkg.friendly_name } }}{% end block %}
+
+{% block body %}
+       <ul class="breadcrumb">
+               <li>
+                       <a href="/">{{ _("Home") }}</a>
+                       <span class="divider">/</span>
+               </li>
+               <li>
+                       <a href="/packages">{{ _("Packages") }}</a>
+                       <span class="divider">/</span>
+               </li>
+               <li>
+                       <a href="/package/{{ pkg.name }}">{{ pkg.name }}</a>
+                       <span class="divider">/</span>
+               </li>
+               {% if pkg.build %}
+                       <li>
+                               <a href="/build/{{ pkg.build.uuid }}">{{ pkg.build.name }}</a>
+                               <span class="divider">/</span>
+                       </li>
+               {% end %}
+               {% if pkg.job %}
+                       <li>
+                               <a href="/job/{{ pkg.job.uuid }}">{{ pkg.job.arch.name }}</a>
+                               <span class="divider">/</span>
+                       </li>
+               {% end %}
+               <li>
+                       <a href="/package/{{ pkg.uuid }}">{{ pkg.friendly_name }}</a>
+                       <span class="divider">/</span>
+               </li>
+               <li class="active">
+                       {{ _("View file") }}
+               </li>
+       </ul>
+
+       <div class="page-header">
+               <h2>
+                       {{ filename }}<br>
+                       <small><a href="/package/{{ pkg.uuid }}">{{ pkg.friendly_name }}</a> - {{ pkg.summary }}</small>
+               </h2>
+       </div>
+
+       <pre {% if not filesize >= 1024 ** 2 %}class="prettyprint linenums"{% end %}>{{ content }}</pre>
+
+       <p class="muted ac">
+               {{ _("Mimetype: %s") % mimetype }} - {{ _("Size: %s") % format_size(filesize) }} -
+               <a href="/package/{{ pkg.uuid }}/download{{ filename }}">{{ _("Download file") }}</a>
+       </p>
+{% end block %}
index 710b7688830da7a86094130687dd1345a14ff5c3..4986f02cb69fdb499cd9af1b82a517df9f942635 100644 (file)
@@ -119,6 +119,7 @@ class Application(tornado.web.Application):
                        (r"/package/([\w\-\+]+)", PackageNameHandler),
                        (r"/package/([\w\-\+]+)/changelog", PackageChangelogHandler),
                        (r"/package/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/download(.*)", PackageFileDownloadHandler),
+                       (r"/package/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/view(.*)", PackageFileViewHandler),
 
                        # Files
                        (r"/file/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", FileDetailHandler),
index 9883088dacdac23c96035a9b166ae99240921413..d2602735f63927af48b72003c8354ca5396c6fe4 100644 (file)
@@ -169,7 +169,7 @@ class PackagePropertiesHandler(BaseHandler):
 
 
 class PackageFileDownloadHandler(BaseHandler):
-       def get(self, pkg_uuid, filename):
+       def get_file(self, pkg_uuid, filename):
                # Fetch package.
                pkg = self.pakfire.packages.get_by_uuid(pkg_uuid)
                if not pkg:
@@ -189,14 +189,19 @@ class PackageFileDownloadHandler(BaseHandler):
                if not f:
                        raise tornado.web.HTTPError(404, "Package %s does not contain file %s" % (pkg_file, filename))
 
-               # Send the filename in header.
-               self.set_header("Content-Disposition", "attachment; filename=%s" % os.path.basename(filename))
-
                # Guess the MIME type of the file.
                (type, encoding) = mimetypes.guess_type(filename)
                if not type:
                        type = "text/plain"
-               self.set_header("Content-Type", type)
+
+               return (pkg, f, type)
+
+       def get(self, pkg_uuid, filename):
+               pkg, f, mimetype = self.get_file(pkg_uuid, filename)
+
+               # Send the filename and mimetype in header.
+               self.set_header("Content-Disposition", "attachment; filename=%s" % os.path.basename(filename))
+               self.set_header("Content-Type", mimetype)
 
                # Transfer the content chunk by chunk.
                while True:
@@ -210,3 +215,15 @@ class PackageFileDownloadHandler(BaseHandler):
 
                # Done.
                self.finish()
+
+
+class PackageFileViewHandler(PackageFileDownloadHandler):
+       def get(self, pkg_uuid, filename):
+               pkg, f, mimetype = self.get_file(pkg_uuid, filename)
+
+               # Read in the data.
+               content = f.read()
+               f.close()
+
+               self.render("packages/view_file.html", pkg=pkg, filename=filename,
+                       mimetype=mimetype, content=content, filesize=f.size)