]> git.ipfire.org Git - pbs.git/commitdiff
Redesign dependency table.
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 4 Dec 2012 16:07:45 +0000 (17:07 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 4 Dec 2012 16:07:45 +0000 (17:07 +0100)
backend/packages.py
data/templates/modules/packages/dependency-table.html [new file with mode: 0644]
data/templates/package-detail.html
web/__init__.py
web/handlers_packages.py
web/ui_modules.py

index b48ef218f11479ccfe7d5700c52760ca7a4b8071..b05f8c8ef3644dc7326a769c90160dc74919372b 100644 (file)
@@ -352,6 +352,14 @@ class Package(base.Object):
        def size(self):
                return self.data.size
 
+       def has_deps(self):
+               """
+                       Returns True if the package has got dependencies.
+
+                       Always filter out the uuid provides.
+               """
+               return len(self.deps) > 1
+
        @property
        def deps(self):
                if self._deps is None:
@@ -373,7 +381,7 @@ class Package(base.Object):
 
        @property
        def provides(self):
-               return [d[1] for d in self.deps if d[0] == "provides"]
+               return [d[1] for d in self.deps if d[0] == "provides" and not d[1].startswith("uuid(")]
 
        @property
        def conflicts(self):
@@ -383,6 +391,14 @@ class Package(base.Object):
        def obsoletes(self):
                return [d[1] for d in self.deps if d[0] == "obsoletes"]
 
+       @property
+       def suggests(self):
+               return [d[1] for d in self.deps if d[0] == "suggests"]
+
+       @property
+       def recommends(self):
+               return [d[1] for d in self.deps if d[0] == "recommends"]
+
        @property
        def commit_id(self):
                return self.data.commit_id
@@ -538,6 +554,10 @@ class File(base.Object):
 
        @property
        def viewable(self):
+               # Empty files cannot be viewed.
+               if self.size == 0:
+                       return False
+
                for ext in FILE_EXTENSIONS_VIEWABLE:
                        if self.name.endswith(ext):
                                return True
diff --git a/data/templates/modules/packages/dependency-table.html b/data/templates/modules/packages/dependency-table.html
new file mode 100644 (file)
index 0000000..4a8da5b
--- /dev/null
@@ -0,0 +1,27 @@
+<div class="row">
+       {% for name, deps in dependencies %}
+               <div class="{{ "span%d" % span }}">
+                       {% if name == "provides" %}
+                               <h4>{{ _("Provides") }}</h4>
+                       {% elif name == "requires" %}
+                               <h4>{{ _("Requires") }}</h4>
+                       {% elif name == "prerequires" %}
+                               <h4>{{ _("Pre-requires") }}</h4>
+                       {% elif name == "conflicts" %}
+                               <h4>{{ _("Conflicts") }}</h4>
+                       {% elif name == "obsoletes" %}
+                               <h4>{{ _("Obsoletes") }}</h4>
+                       {% elif name == "recommends" %}
+                               <h4>{{ _("Recommends") }}</h4>
+                       {% elif name == "suggests" %}
+                               <h4>{{ _("Suggests") }}</h4>
+                       {% end %}
+
+                       <ul class="unstyled">
+                               {% for d in deps %}
+                                       <li>{{ d }}</li>
+                               {% end %}
+                       </ul>
+               </div>
+       {% end %}
+</div>
index c660ea3f891a8facea1bc0dbd31edafc2f0aa055..6e5840382be9610f55e834baf9f2e36f0725a18c 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "base.html" %}
 
-{% block title %}{{ _("Package") }}: {{ pkg.name }}{% end block %}
+{% block title %}{{ _("Package") }}: {{ pkg.friendly_name }}{% end block %}
 
 {% block body %}
        <ul class="breadcrumb">
@@ -30,7 +30,7 @@
                {% end %}
                <li class="active">
                        <a href="/package/{{ pkg.uuid }}">{{ pkg.friendly_name }}</a>
-               </li>                   
+               </li>
        </ul>
 
        <div class="page-header">
                        {% end %}
                </div>
 
-               <h1>
-                       {{ _("Package") }}: {{ pkg.friendly_name }}
-                       <br /><small>{{ pkg.summary }}</small>
-               </h1>
+               <h2>
+                       {{ _("Package") }}: {{ pkg.friendly_name }}<br>
+                       <small>{{ pkg.summary }}</small>
+               </h2>
        </div>
 
        <div class="row">
                <div class="span4">
-                       <blockquote>{{ pkg.description }}</blockquote>
+                       {% module Text(pkg.description) %}
                </div>
 
                <div class="span4">
                                                <td>{{ _("Size") }}</td>
                                                <td>
                                                        {{ format_size(pkg.filesize) }}
-                                                       {% if pkg.type == "binary" %}
+                                                       {% if pkg.type == "binary" and not pkg.size == pkg.filesize %}
                                                                ({{ _("%(size)s when installed") % { "size" : format_size(pkg.size) } }})
                                                        {% end %}
                                                </td>
                </div>
        </div>
 
-       <div class="row">
-               <div class="span12">
-                       {% if pkg.build %}
-                               <a class="btn pull-right" href="{{ pkg.build.download_prefix }}/{{ pkg.path }}">
-                                       <i class="icon-download"></i>
-                                       {{ _("Download") }}
-                               </a>
-                       {% end %}
-               </div>
-       </div>
-       <hr />
-
-       {% if pkg.type == "binary" %}
-               <div class="row">
-                       <div class="span12">
-                               <h2>{{ _("Dependencies") }}</h2>
-
-                               <div class="tabbable">
-                                       <ul class="nav nav-pills">
-                                               {% if pkg.provides %}
-                                                       <li class="active">
-                                                               <a href="#deps_provides" data-toggle="tab">
-                                                                       {{ _("Provides") }}
-                                                               </a>
-                                                       </li>
-                                               {% end %}
-
-                                               {% if pkg.requires or pkg.prerequires %}
-                                                       <li {% if not pkg.provides %}class="active"{% end %}>
-                                                               <a href="#deps_requires" data-toggle="tab">
-                                                                       {{ _("Requires") }}
-                                                               </a>
-                                                       </li>
-                                               {% end %}
-
-                                               {% if pkg.obsoletes %}
-                                                       <li {% if not any((pkg.provides, pkg.requires, pkg.prerequires)) %}class="active"{% end %}>
-                                                               <a href="#deps_obsoletes" data-toggle="tab">
-                                                                       {{ _("Obsoletes") }}
-                                                               </a>
-                                                       </li>
-                                               {% end %}
-
-                                               {% if pkg.conflicts %}
-                                                       <li {% if not any((pkg.provides, pkg.requires, pkg.prerequires, pkg.obsoletes)) %}class="active"{% end %}>
-                                                               <a href="#deps_conflicts" data-toggle="tab">
-                                                                       {{ _("Conflicts") }}
-                                                               </a>
-                                                       </li>
-                                               {% end %}
-                                       </ul>
+       {% if pkg.build %}
+               <a class="btn pull-right" href="{{ pkg.build.download_prefix }}/{{ pkg.path }}">
+                       <i class="icon-download"></i>
+                       {{ _("Download") }}
+               </a>
 
-                                       <div class="tab-content">
-                                               {% if pkg.provides %}
-                                                       <div class="tab-pane active" id="deps_provides">
-                                                               <ul>
-                                                                       {% for dep in pkg.provides %}
-                                                                               {% if not dep.startswith("uuid(") %}
-                                                                                       <li>{{ dep }}</li>
-                                                                               {% end %}
-                                                                       {% end %}
-                                                               </ul>
-                                                       </div>
-                                               {% end %}
-
-                                               {% if pkg.requires or pkg.prerequires %}
-                                                       <div class="tab-pane {% if not pkg.provides %}active{% end %}" id="deps_requires">
-                                                               <ul>
-                                                                       {% for dep in pkg.requires %}
-                                                                               <li>{{ dep }}</li>
-                                                                       {% end %}
-                                                               </ul>
-
-                                                               {% if pkg.prerequires %}
-                                                                       <h3>{{ _("Prerequires") }}</h3>
-
-                                                                       <ul>
-                                                                               {% for dep in pkg.prerequires %}
-                                                                                       <li>{{ dep }}</li>
-                                                                               {% end %}
-                                                                       </ul>
-                                                               {% end %}
-                                                       </div>
-                                               {% end %}
+               <br class="clear">
+       {% end %}
 
-                                               {% if pkg.obsoletes %}
-                                                       <div class="tab-pane {% if not any((pkg.provides, pkg.requires, pkg.prerequires)) %}active{% end %}" id="deps_obsoletes">
-                                                               <ul>
-                                                                       {% for dep in pkg.obsoletes %}
-                                                                               <li>{{ dep }}</li>
-                                                                       {% end %}
-                                                               </ul>
-                                                       </div>
-                                               {% end %}
+       {% if pkg.has_deps() %}
+               <hr>
 
-                                               {% if pkg.conflicts %}
-                                                       <div class="tab-pane {% if not any((pkg.provides, pkg.requires, pkg.prerequires, pkg.obsoletes)) %}active{% end %}" id="deps_conflicts">
-                                                               <ul>
-                                                                       {% for dep in pkg.conflicts %}
-                                                                               <li>{{ dep }}</li>
-                                                                       {% end %}
-                                                               </ul>
-                                                       </div>
-                                               {% end %}
-                                       </div>
-                               </div>
+               {% if pkg.type == "source" %}
+                       <h4>{{ _("Build dependencies") }}</h4>
+               {% else %}
+                       <h3>{{ _("Dependencies") }}</h3>
+               {% end %}
 
-                               <hr>
-                       </div>
-               </div>
-       {% elif pkg.type == "source" %}
-               <div class="row">
-                       <div class="span12">
-                               <h2>{{ _("Build dependencies") }}</h2>
-                               <ul>
-                                       {% for dep in pkg.requires %}
-                                               <li>{{ dep }}</li>
-                                       {% end %}
-                               </ul>
-                       </div>
-               </div>
+               {% module PackagesDependencyTable(pkg) %}
        {% end %}
 
        {% if pkg.filelist %}
-               <h2>{{ _("Files") }}</h2>
+               <hr>
+
+               <h3>{{ _("Filelist") }}</h3>
+
                {% module PackageFilesTable(pkg, pkg.filelist) %}
        {% end %}
 {% end block %}
index 4986f02cb69fdb499cd9af1b82a517df9f942635..f07b754b75018140ea9294265dbf5f978c6b65b7 100644 (file)
@@ -50,6 +50,9 @@ class Application(tornado.web.Application):
                                "Changelog"          : ChangelogModule,
                                "ChangelogEntry"     : ChangelogEntryModule,
 
+                               # Packages
+                               "PackagesDependencyTable" : PackagesDependencyTableModule,
+
                                "CommitsTable"       : CommitsTableModule,
                                "JobsBoxes"          : JobsBoxesModule,
                                "JobState"           : JobStateModule,
index d2602735f63927af48b72003c8354ca5396c6fe4..d87c28aae598cf410321023a57c7d426d859cc0a 100644 (file)
@@ -225,5 +225,5 @@ class PackageFileViewHandler(PackageFileDownloadHandler):
                content = f.read()
                f.close()
 
-               self.render("packages/view_file.html", pkg=pkg, filename=filename,
+               self.render("packages/view-file.html", pkg=pkg, filename=filename,
                        mimetype=mimetype, content=content, filesize=f.size)
index a5b593cb941e6f10fa0e8b5fce98697287178d0f..d941e25a99ad382fd84b958337d126a9a6018b98 100644 (file)
@@ -1,5 +1,8 @@
 #!/usr/bin/python
 
+from __future__ import division
+
+import math
 import pytz
 import re
 import string
@@ -140,6 +143,40 @@ class PackagesTableModule(UIModule):
                        packages=packages)
 
 
+class PackagesDependencyTableModule(UIModule):
+       def render(self, pkg):
+               if pkg.type == "source":
+                       all_deps = [
+                               (None, pkg.requires),
+                       ]
+               else:
+                       all_deps = [
+                               ("provides", pkg.provides),
+                               ("requires", pkg.requires),
+                               ("prerequires", pkg.prerequires),
+                               ("conflicts", pkg.conflicts),
+                               ("obsoletes", pkg.obsoletes),
+                               ("recommends", pkg.recommends),
+                               ("suggests", pkg.suggests),
+                       ]
+
+               has_deps = []
+               for name, deps in all_deps:
+                       if deps:
+                               has_deps.append((name, deps))
+
+               if len(has_deps):
+                       span = math.floor(12 / len(has_deps))
+
+                       if span > 3:
+                               span = 3
+               else:
+                       span = 12
+
+               return self.render_string("modules/packages/dependency-table.html",
+                       pkg=pkg, dependencies=has_deps, span=span)
+
+
 class PackageTable2Module(UIModule):
        def render(self, packages):
                return self.render_string("modules/package-table-detail.html",