nitweb: add catalog sidebar on package views
authorAlexandre Terrasa <alexandre@moz-code.org>
Tue, 15 Aug 2017 22:13:07 +0000 (18:13 -0400)
committerAlexandre Terrasa <alexandre@moz-code.org>
Tue, 26 Sep 2017 15:10:05 +0000 (11:10 -0400)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

share/nitweb/javascripts/entities.js
share/nitweb/views/doc/doc.html
src/web/api_catalog.nit

index ed2836b..71bf600 100644 (file)
                                        controller: function(mentity, doc) {
                                                this.mentity = mentity;
                                                this.doc = doc;
+
+                                               this.date = function(date) {
+                                                       return new Date(date);
+                                               }
                                        },
                                        controllerAs: 'vm',
                                })
index 1e60694..eadcf37 100644 (file)
@@ -1,8 +1,10 @@
 <div>
-       <div class='col-xs-3'>
+       <div class='col-lg-2 col-sm-3 col-xs-12'>
                <ui-summary target='#summary-content' />
        </div>
-       <div class='col-xs-9' id='summary-content'>
+       <div class='col-lg-10 col-sm-9 col-xs-12' id='summary-content' ng-class='{
+               "col-lg-8 col-sm-6 col-xs-12": vm.mentity.class_name == "MPackage"
+       }'>
                <div class='card'>
                        <div class='card-body'>
                                <div ng-if='vm.doc'>
                        list-object-filter='{is_init: "!true"}' />
 
        </div>
+
+       <div class='col-lg-2 col-sm-3 col-xs-12' ng-class='{
+               "hidden": vm.mentity.class_name != "MPackage"
+       }'>
+               <br>
+               <p ng-repeat='maintainer in vm.mentity.metadata.maintainers' class='lead'>
+                       <img class='avatar' src='https://secure.gravatar.com/avatar/{{maintainer.gravatar}}?size=20&default=retro' />
+                       <span>
+                               <a ui-sref='person({id: maintainer.name})'>{{maintainer.name}}</a>
+                       </span>
+                       <br>
+               </p>
+               <span ng-if='vm.mentity.metadata.license'>
+                       <span class='text-muted'>
+                               <a href='http://opensource.org/licenses/{{vm.mentity.metadata.license}}'>{{vm.mentity.metadata.license}}</a>
+                               license
+                       </span>
+                       <br>
+               </span>
+
+               <div ng-if='vm.mentity.metadata.homepage || vm.mentity.metadata.issues'>
+                       <h3>Links</h3>
+                       <ul class='list-unstyled'>
+                               <li ng-if='vm.mentity.metadata.homepage'>
+                                       <a href='{{vm.mentity.metadata.homepage}}'>Homepage</a>
+                               </li>
+                               <li ng-if='vm.mentity.metadata.browse'>
+                                       <a href='{{vm.mentity.metadata.browse}}'>Source Code</a>
+                               </li>
+                               <li ng-if='vm.mentity.metadata.issues'>
+                                       <a href='{{vm.mentity.metadata.issues}}'>Issues</a>
+                               </li>
+                       </ul>
+               </div>
+
+               <div ng-if='vm.mentity.metadata.git || vm.mentity.stats.commits'>
+                       <h3>Git</h3>
+                       <ul class='list-unstyled' style='white-space: nowrap; overflow: hidden; text-overflow: ellipsis;'>
+                               <li ng-if='vm.mentity.metadata.git'>
+                                       <a href='{{vm.mentity.metadata.git}}'>{{vm.mentity.metadata.git}}</a>
+                               </li>
+                               <li ng-if='vm.mentity.stats.commits' class='text-muted'>
+                                       <br><b>{{vm.mentity.stats.commits}} commits</b>
+                               </li>
+                               <li ng-if='vm.mentity.metadata.last_date'><b class='text-muted'>Last:</b> {{vm.date(vm.mentity.metadata.last_date) | date: 'medium'}}</li>
+                               <li ng-if='vm.mentity.metadata.first_date'><b class='text-muted'>First: </b>{{vm.date(vm.mentity.metadata.first_date) | date: 'medium'}}</li>
+                       </ul>
+               </div>
+
+               <div ng-if='vm.mentity.stats'>
+                       <h3>Quality</h3>
+                       <ul class='list-unstyled'>
+                               <li ng-if='vm.mentity.stats.documentation_score'>
+                                       {{vm.mentity.stats.documentation_score}}% documented
+                               </li>
+                               <li ng-if='vm.mentity.stats.errors' class='text-danger'>
+                                       {{vm.mentity.stats.errors}} errors
+                               </li>
+                               <li ng-if='vm.mentity.stats.warnings' class='text-warning'>
+                                       {{vm.mentity.stats.warnings}} warnings
+                                       ({{vm.mentity.stats.warnings_per_kloc}} / kloc)
+                               </li>
+                       </ul>
+               </div>
+
+               <div ng-if='vm.mentity.metadata.tags.length > 0'>
+                       <h3>Tags</h3>
+                       <span ng-repeat='tag in vm.mentity.metadata.tags'>
+                               <a ui-sref='tag({id: tag})'>{{tag}}</a><span ng-if='!$last'>,</span>
+                       </span>
+               </div>
+
+               <div ng-if='vm.mentity.dependencies.length > 0'>
+                       <h3>Requirements</h3>
+                       <span ng-repeat='parent in vm.mentity.dependencies'>
+                               <a ui-sref='mentity({id: parent.name})' title='{{parent.synopsis}}'>{{parent.name}}</a><span ng-if='!$last'>,</span>
+                       </span>
+               </div>
+
+               <div ng-if='vm.mentity.clients.length > 0'>
+                       <h3>Clients</h3>
+                       <span ng-repeat='client in vm.mentity.clients'>
+                               <a ui-sref='mentity({id: client.name})' title='{{client.synopsis}}'>{{client.name}}</a><span ng-if='!$last'>,</span>
+                       </span>
+               </div>
+
+               <div ng-if='vm.mentity.metadata.contributors.length > 1'>
+                       <h3>Contributors</h3>
+                       <ul class='list-unstyled'>
+                               <li ng-repeat='contributor in vm.mentity.metadata.contributors'>
+                                       <img class='avatar' src='https://secure.gravatar.com/avatar/{{contributor.gravatar}}?size=20&default=retro' />
+                                       <a ui-sref='person({id: contributor.name})'>
+                                       {{contributor.name}}</a>
+                               </li>
+                       </ul>
+               </div>
+
+               <div ng-if='vm.mentity.stats'>
+                       <h3>Stats</h3>
+                       <ul class='list-unstyled'>
+                               <li>{{vm.mentity.stats.mmodules}} modules</li>
+                               <li>{{vm.mentity.stats.mclasses}} classes</li>
+                               <li>{{vm.mentity.stats.mmethods}} methods</li>
+                               <li>{{vm.mentity.stats.loc}} loc</li>
+                       </ul>
+               </div>
+       </div>
 </div>
index 9bca8be..d22289b 100644 (file)
@@ -14,7 +14,7 @@
 
 module api_catalog
 
-import web_base
+import api_model
 import catalog
 
 redef class NitwebConfig
@@ -274,6 +274,20 @@ class APICatalogContributing
        end
 end
 
+redef class APIEntity
+       redef fun get(req, res) do
+               var mentity = mentity_from_uri(req, res)
+               if mentity == null then return
+
+               # Special case for packages (catalog view)
+               if mentity isa MPackage then
+                       res.raw_json mentity.to_full_catalog_json(plain=true, config.catalog)
+               else
+                       res.raw_json mentity.to_full_json
+               end
+       end
+end
+
 redef class Catalog
 
        # Build the catalog from `mpackages`