Browse Source

Redesigned user profiles

Ralfp 12 years ago
parent
commit
70cd3f95e8

+ 11 - 1
static/cranefly/css/cranefly.css

@@ -855,7 +855,7 @@ a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#ffffff;text-decor
 .header-primary .header-tabs{border-bottom:0px;margin:0px;margin-top:-10px;position:relative;top:9px;}.header-primary .header-tabs li a:link,.header-primary .header-tabs li a:visited{background:none;border:none;border-radius:0px;margin-bottom:4px;padding:6.666666666666667px 10px;color:#888888;font-weight:bold;}
 .header-primary .header-tabs li a:hover,.header-primary .header-tabs li a:active,.header-primary .header-tabs li a a:focus{background:none;border-bottom:4px solid #555555;margin-bottom:0px;color:#555555;}
 .header-primary .header-tabs li.active a:link,.header-primary .header-tabs li.active a:visited,.header-primary .header-tabs li.active a:hover,.header-primary .header-tabs li.active a:active{background:none;border-bottom:4px solid #cf402e;margin-bottom:0px;color:#333333;}
-.header-primary .header-tabs li .form-inline{margin:0px;margin-bottom:7px;}.header-primary .header-tabs li .form-inline .btn-icon{padding-left:7px;padding-right:7px;}
+.header-primary .header-tabs li .form-inline{margin:0px;margin-left:14px;margin-bottom:7px;}.header-primary .header-tabs li .form-inline .btn-icon{padding-left:7px;padding-right:7px;}
 html,body{height:100%;}
 #wrap{min-height:100%;height:auto !important;height:100%;margin:0 auto -100px;}#wrap .container-primary{padding-top:20px;padding-bottom:120px;}#wrap .container-primary .page-description{margin-bottom:20px;}
 footer{background-color:#eeeeee;border-top:1px solid #dadada;height:80px;padding:11px 19px;}footer hr{border-bottom:1px solid #dadada;margin:10px 0px;}
@@ -1007,6 +1007,16 @@ a.btn-link:hover,a.btn-link:active,a.btn-link:focus{opacity:0.9;filter:alpha(opa
 .profiles-list .user-cell{overflow:auto;}.profiles-list .user-cell .user-avatar{float:left;}.profiles-list .user-cell .user-avatar img{border-radius:3px;width:42px;height:42px;}
 .profiles-list .user-cell .user-details{margin:0px;margin-left:56px;}.profiles-list .user-cell .user-details a:link,.profiles-list .user-cell .user-details a:active,.profiles-list .user-cell .user-details a:visited,.profiles-list .user-cell .user-details a:hover{display:block;margin-top:3px;color:#333333;font-size:19.599999999999998px;font-weight:bold;}
 .profiles-list .user-cell .user-details .user-info{display:block;color:#999999;font-size:10.5px;}
+.user-profile .user-profile-header .header-avatar{border-radius:3px;float:left;width:80px;height:80px;margin-top:-8px;}
+.user-profile .user-profile-header .header-side{margin-left:94px;}.user-profile .user-profile-header .header-side h1{margin-left:6.666666666666667px;}
+.user-profile hr{border:none;border-top:1px solid #eeeeee;margin:14px 0px;}
+.user-profile .user-details .label{font-size:14px;}
+.user-profile .user-list .user-cell{overflow:auto;}.user-profile .user-list .user-cell .user-avatar{float:left;}.user-profile .user-list .user-cell .user-avatar img{border-radius:3px;width:42px;height:42px;}
+.user-profile .user-list .user-cell .user-details{margin:0px;margin-left:56px;}.user-profile .user-list .user-cell .user-details a:link,.user-profile .user-list .user-cell .user-details a:active,.user-profile .user-list .user-cell .user-details a:visited,.user-profile .user-list .user-cell .user-details a:hover{display:block;margin-top:3px;color:#333333;font-size:19.599999999999998px;font-weight:bold;}
+.user-profile .user-list .user-cell .user-details .user-info{display:block;color:#999999;font-size:10.5px;}
+.user-profile .content-list .media{overflow:auto;}.user-profile .content-list .media .media-object{border-radius:3px;width:52px;height:52px;}
+.user-profile .content-list .media .media-body{margin-left:66px;}.user-profile .content-list .media .media-body .post-preview:link,.user-profile .content-list .media .media-body .post-preview:active,.user-profile .content-list .media .media-body .post-preview:visited,.user-profile .content-list .media .media-body .post-preview:hover{display:block;margin-top:7px;color:#333333;font-size:16.8px;text-decoration:none;}
+.user-profile .content-list .media .media-body .media-footer{margin:0px;color:#999999;font-size:10.5px;font-weight:normal;}.user-profile .content-list .media .media-body .media-footer a{color:#555555;}
 .index-rank-team ul li{background-color:#cf402e;border-color:#ae3627;}.index-rank-team ul li a:link,.index-rank-team ul li a:active,.index-rank-team ul li a:visited,.index-rank-team ul li a:hover{color:#ffffff;text-shadow:0px 1px 0px #3d130e;}
 .index-rank-team ul li .muted{color:#672017;}
 .index-rank-mvp ul li{background-color:#1a93c5;border-color:#037fb3;}.index-rank-mvp ul li a:link,.index-rank-mvp ul li a:active,.index-rank-mvp ul li a:visited,.index-rank-mvp ul li a:hover{color:#ffffff;text-shadow:0px 1px 0px #011f2c;}

+ 1 - 0
static/cranefly/css/cranefly/header.less

@@ -87,6 +87,7 @@
 
       .form-inline {
         margin: 0px;
+        margin-left: @baseFontSize;
         margin-bottom: 7px;
 
         .btn-icon {

+ 105 - 1
static/cranefly/css/cranefly/profiles.less

@@ -39,5 +39,109 @@
 }
 
 .user-profile {
-  
+  .user-profile-header {
+    .header-avatar {
+      border-radius: @baseBorderRadius;
+      float: left;
+      width: 80px;
+      height: 80px;
+      margin-top: -8px;
+    }
+
+    .header-side {
+      margin-left: 80px + @baseFontSize;
+
+      h1 {
+        margin-left: (@baseLineHeight / 3);
+      }
+    }
+  }
+
+  hr {
+    border: none;
+    border-top: 1px solid @grayLighter;
+    margin: @baseFontSize 0px;
+  }
+
+  .user-details {
+    .label {
+      font-size: @baseFontSize;
+    }
+  }
+
+  .user-list {
+    .user-cell {
+      overflow: auto;
+
+      .user-avatar {
+        float: left;
+
+        img {
+          border-radius: @baseBorderRadius;
+          width: 42px;
+          height: 42px; 
+        }
+      }
+
+      .user-details {
+        margin: 0px;
+        margin-left: 42px + @baseFontSize;
+
+        a:link, a:active, a:visited, a:hover {
+          display: block;
+          margin-top: 3px;
+
+          color: @textColor;
+          font-size: @baseFontSize * 1.4;
+          font-weight: bold;
+        }
+
+        .user-info {
+          display: block;
+
+          color: @grayLight;
+          font-size: @fontSizeMini;
+        }
+      }
+    }
+  }
+
+  .content-list {
+    .media {
+      overflow: auto;
+
+      .media-object {
+        border-radius: @baseBorderRadius;
+        width: 52px;
+        height: 52px;
+      }
+
+      .media-body {
+        margin-left: 52px + @baseFontSize;
+
+        .post-preview {
+          &:link, &:active, &:visited, &:hover {
+            display: block;
+            margin-top: @baseFontSize / 2;
+
+            color: @textColor;
+            font-size: @baseFontSize * 1.2;
+            text-decoration: none;
+          }
+        }
+
+        .media-footer {
+          margin: 0px;
+
+          color: @grayLight;
+          font-size: @fontSizeMini;
+          font-weight: normal;
+
+          a {
+            color: @gray;
+          }
+        }
+      }
+    }
+  }
 }

+ 1 - 5
templates/cranefly/alerts.html

@@ -11,11 +11,7 @@
 {% block container %}
 <div class="page-header header-primary">
   <div class="container">
-    {% if messages %}
-    <div class="messages-list">
-      {{ messages_list(messages) }}
-    </div>
-    {% endif %}
+    {{ messages_list(messages) }}
     <h1>{% if user.alerts %}{{ get_title() }} <small>{% trans %}Your Notifications{% endtrans %}</small>
       {%- else -%}
       {% trans %}Your Notifications{% endtrans %}{% endif %}</h1>

+ 1 - 5
templates/cranefly/category.html

@@ -15,11 +15,7 @@
 {% block container %}
 <div class="page-header header-primary">
   <div class="container">
-    {% if messages %}
-    <div class="messages-list">
-      {{ messages_list(messages) }}
-    </div>
-    {% endif %}
+    {{ messages_list(messages) }}
     <ul class="breadcrumb">
       {{ self.breadcrumb() }}</li>
     </ul>

+ 1 - 5
templates/cranefly/forum_map.html

@@ -7,11 +7,7 @@
 {% block container %}
 <div class="page-header header-primary">
   <div class="container">
-    {% if messages %}
-    <div class="messages-list">
-      {{ messages_list(messages) }}
-    </div>
-    {% endif %}
+    {{ messages_list(messages) }}
     <h1>{% trans %}Forum Map{% endtrans %}</h1>
   </div>
 </div>

+ 1 - 5
templates/cranefly/forum_tos.html

@@ -11,11 +11,7 @@
 {% block container %}
 <div class="page-header header-primary">
   <div class="container">
-    {% if messages %}
-    <div class="messages-list">
-      {{ messages_list(messages) }}
-    </div>
-    {% endif %}
+    {{ messages_list(messages) }}
     <h1>{% if settings.tos_title -%}
 {{ settings.tos_title }}
 {%- else -%}

+ 1 - 5
templates/cranefly/layout.html

@@ -50,11 +50,7 @@
 
   {% block container %}
   <div class="container container-primary">
-    {% if messages %}
-    <div class="messages-list">
-    	{{ messages_list(messages) }}
-    </div>
-    {% endif %}
+    {{ messages_list(messages) }}
     
     {% block content %}
     {% endblock %}

+ 7 - 2
templates/cranefly/macros.html

@@ -10,9 +10,14 @@
 {%- endmacro %}
 
 {# Messages list macro #}
-{% macro messages_list(messages) %}{% for message in messages %}
+{% macro messages_list(messages) %}
+{% if messages %}
+<div class="messages-list">
+  {% for message in messages %}
   {{ draw_message(message) }}
-{% endfor %}
+  {% endfor %}
+</div>
+{% endif %}
 {% endmacro %}
 
 {# Render single message #}

+ 1 - 5
templates/cranefly/newsfeed.html

@@ -9,11 +9,7 @@
 {% block container %}
 <div class="page-header header-primary">
   <div class="container">
-    {% if messages %}
-    <div class="messages-list">
-      {{ messages_list(messages) }}
-    </div>
-    {% endif %}
+    {{ messages_list(messages) }}
     <h1>{% trans %}Your News Feed{% endtrans %}</h1>
   </div>
 </div>

+ 1 - 5
templates/cranefly/popular_threads.html

@@ -7,11 +7,7 @@
 {% block container %}
 <div class="page-header header-primary">
   <div class="container">
-    {% if messages %}
-    <div class="messages-list">
-      {{ messages_list(messages) }}
-    </div>
-    {% endif %}
+    {{ messages_list(messages) }}
     <h1>{% trans %}Popular Threads{% endtrans %}</h1>
   </div>
 </div>

+ 227 - 225
templates/cranefly/profiles/details.html

@@ -8,234 +8,236 @@
 {% block title %}{{ macros.page_title(_('Member Details'), profile.username) }}{% endblock %}
 
 {% block tab %}
-<div class="row">
-  <div class="span6">
-  	
-    <table class="table table-striped">
-      <thead>
-        <tr>
-          <th colspan="2">
-          	{% trans %}Account Details{% endtrans %}
-          </th>
-        </tr>
-      </thead>
-      <tbody>
-        {% if acl.users.can_see_users_emails() %}
-        <tr>
-          <td class="span2">
-             <strong>{% trans %}E-mail Address{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-            <a href="mailto:{{ profile.email }}">{{ profile.email }}</a>
-          </td>
-        </tr>
-        {% endif %}
-        <tr>
-          <td class="span2">
-          	 <strong>{% trans %}Member Since{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-          	{{ profile.join_date|date }}
-          </td>
-        </tr>
-        <tr>
-          <td class="span2">
-          	 <strong>{% trans %}Last Seen{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-            {% if not hidden or acl.users.can_see_hidden_users() %}
-          	{{ profile.last_date|reltimesince }} <span class="muted">{{ profile.last_date|date("DATETIME_FORMAT") }}</span>
-          	{% else %}
-          	<em class="muted">{% trans %}Hidden{% endtrans %}</em>
-          	{% endif %}
-          </td>
-        </tr>
-      </tbody>
-    </table>
-  	
-    <table class="table table-striped">
-      <thead>
-        <tr>
-          <th colspan="2">
-          	{% trans %}Forums Activity{% endtrans %}
-          </th>
-        </tr>
-      </thead>
-      <tbody>
-        <tr>
-          <td class="span2">
-          	 <strong>{% trans %}Posts Written{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-          	{{ profile.posts|intcomma }}
-          </td>
-        </tr>
-        <tr>
-          <td class="span2">
-          	 <strong>{% trans %}Threads Started{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-          	{{ profile.threads|intcomma }}
-          </td>
-        </tr>
-        <tr>
-          <td class="span2">
-          	 <strong>{% trans %}Votes Cast{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-          	{{ profile.votes|intcomma }}
-          </td>
-        </tr>
-      </tbody>
-    </table>
-    
-  </div>
-  <div class="span6">
-  	
-    <table class="table table-striped">
-      <thead>
-        <tr>
-          <th colspan="2">
-          	{% trans %}Ranking Performance{% endtrans %}
-          </th>
-        </tr>
-      </thead>
-      <tbody>
-        <tr>
-          <td class="span2">
-          	 <strong>{% trans %}Rank{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-          	{% if profile.rank %}{{ _(profile.rank.name) }}{% else %}<em>{% trans %}Not Ranked{% endtrans %}</em>{% endif %}
-          </td>
-        </tr>
-        {% if settings.ranking_positions_visible or settings.ranking_scores_visible %}
-        <tr>
-          <td class="span2">
-             <strong>{% if settings.ranking_positions_visible %}{% trans %}Ranking Position{% endtrans %}{% else %}{% trans %}Score{% endtrans %}{% endif %}</strong>
-          </td>
-          <td class="span4">
-            {% if settings.ranking_positions_visible %}
-            #{{ profile.get_ranking()|intcomma }}{% if settings.ranking_scores_visible %} <span class="muted">{{ profile.score|intcomma }}</span>{% endif %}
-            {% else %}{{ profile.score|intcomma }}
-            {% endif %}
-          </td>
-        </tr>
-        {% endif %}
-        <tr>
-          <td class="span2">
-          	 <strong>{% trans %}Karma Received{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-          	<strong><span class="alert-success">+ {{ profile.karma_p }}</span> / <span class="alert-error">- {{ profile.karma_n }}</span></strong>
-          </td>
-        </tr>
-        <tr>
-          <td class="span2">
-          	 <strong>{% trans %}Karma Given{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-          	<strong><span class="alert-success">+ {{ profile.karma_given_p }}</span> / <span class="alert-error">- {{ profile.karma_given_n }}</span></strong>
-          </td>
-        </tr>
-      </tbody>
-    </table>
-  	
-    <table class="table table-striped">
-      <thead>
-        <tr>
-          <th colspan="2">
-          	{% trans %}Interactions{% endtrans %}
-          </th>
-        </tr>
-      </thead>
-      <tbody>
-        <tr>
-          <td class="span2">
-          	 <strong>{% trans %}Followers{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-          	{{ profile.followers|intcomma }}
-          </td>
-        </tr>
-        <tr>
-          <td class="span2">
-          	 <strong>{% trans %}Following{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-          	{{ profile.following|intcomma }}
-          </td>
-        </tr>
-      </tbody>
-    </table>
-    
+<div class="user-details">
+  <div class="row">
+    <div class="span6">
+    	
+      <table class="table table-striped">
+        <thead>
+          <tr>
+            <th colspan="2">
+            	{% trans %}Account Details{% endtrans %}
+            </th>
+          </tr>
+        </thead>
+        <tbody>
+          {% if acl.users.can_see_users_emails() %}
+          <tr>
+            <td class="span2">
+               <strong>{% trans %}E-mail Address{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+              <a href="mailto:{{ profile.email }}">{{ profile.email }}</a>
+            </td>
+          </tr>
+          {% endif %}
+          <tr>
+            <td class="span2">
+            	 <strong>{% trans %}Member Since{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+            	{{ profile.join_date|date }}
+            </td>
+          </tr>
+          <tr>
+            <td class="span2">
+            	 <strong>{% trans %}Last Seen{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+              {% if not hidden or acl.users.can_see_hidden_users() %}
+            	{{ profile.last_date|reltimesince }} <span class="muted">{{ profile.last_date|date("DATETIME_FORMAT") }}</span>
+            	{% else %}
+            	<em class="muted">{% trans %}Hidden{% endtrans %}</em>
+            	{% endif %}
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    	
+      <table class="table table-striped">
+        <thead>
+          <tr>
+            <th colspan="2">
+            	{% trans %}Forums Activity{% endtrans %}
+            </th>
+          </tr>
+        </thead>
+        <tbody>
+          <tr>
+            <td class="span2">
+            	 <strong>{% trans %}Posts Written{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+            	{{ profile.posts|intcomma }}
+            </td>
+          </tr>
+          <tr>
+            <td class="span2">
+            	 <strong>{% trans %}Threads Started{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+            	{{ profile.threads|intcomma }}
+            </td>
+          </tr>
+          <tr>
+            <td class="span2">
+            	 <strong>{% trans %}Votes Cast{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+            	{{ profile.votes|intcomma }}
+            </td>
+          </tr>
+        </tbody>
+      </table>
+      
+    </div>
+    <div class="span6">
+    	
+      <table class="table table-striped">
+        <thead>
+          <tr>
+            <th colspan="2">
+            	{% trans %}Ranking Performance{% endtrans %}
+            </th>
+          </tr>
+        </thead>
+        <tbody>
+          <tr>
+            <td class="span2">
+            	 <strong>{% trans %}Rank{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+            	{% if profile.rank %}{{ _(profile.rank.name) }}{% else %}<em>{% trans %}Not Ranked{% endtrans %}</em>{% endif %}
+            </td>
+          </tr>
+          {% if settings.ranking_positions_visible or settings.ranking_scores_visible %}
+          <tr>
+            <td class="span2">
+               <strong>{% if settings.ranking_positions_visible %}{% trans %}Ranking Position{% endtrans %}{% else %}{% trans %}Score{% endtrans %}{% endif %}</strong>
+            </td>
+            <td class="span4">
+              {% if settings.ranking_positions_visible %}
+              #{{ profile.get_ranking()|intcomma }}{% if settings.ranking_scores_visible %} <span class="muted">{{ profile.score|intcomma }}</span>{% endif %}
+              {% else %}{{ profile.score|intcomma }}
+              {% endif %}
+            </td>
+          </tr>
+          {% endif %}
+          <tr>
+            <td class="span2">
+            	 <strong>{% trans %}Karma Received{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+            	<span class="label label-success">+ {{ profile.karma_p }}</span> / <span class="label label-important">- {{ profile.karma_n }}</span></strong>
+            </td>
+          </tr>
+          <tr>
+            <td class="span2">
+            	 <strong>{% trans %}Karma Given{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+            	<span class="label label-success">+ {{ profile.karma_given_p }}</span> / <span class="label label-important">- {{ profile.karma_given_n }}</span></strong>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    	
+      <table class="table table-striped">
+        <thead>
+          <tr>
+            <th colspan="2">
+            	{% trans %}Interactions{% endtrans %}
+            </th>
+          </tr>
+        </thead>
+        <tbody>
+          <tr>
+            <td class="span2">
+            	 <strong>{% trans %}Followers{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+            	{{ profile.followers|intcomma }}
+            </td>
+          </tr>
+          <tr>
+            <td class="span2">
+            	 <strong>{% trans %}Following{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+            	{{ profile.following|intcomma }}
+            </td>
+          </tr>
+        </tbody>
+      </table>
+      
+    </div>
   </div>
-</div>
-    
-{% if acl.users.can_see_users_trails() %}
-<hr>
-<div class="row">
-  <div class="span6">
+      
+  {% if acl.users.can_see_users_trails() %}
+  <hr>
+  <div class="row">
+    <div class="span6">
 
-    <table class="table table-striped">
-      <thead>
-        <tr>
-          <th colspan="2">
-            {% trans %}Registration Details{% endtrans %}
-          </th>
-        </tr>
-      </thead>
-      <tbody>
-        <tr>
-          <td class="span2">
-             <strong>{% trans %}IP Address{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-            {{ profile.join_ip }}
-          </td>
-        </tr>
-        <tr>
-          <td class="span2">
-             <strong>{% trans %}UserAgent String{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-            {% if profile.join_agent %}{{ profile.join_agent }}{% else %}<em class="muted">{% trans %}Created from console{% endtrans %}</em>{% endif %}
-          </td>
-        </tr>
-      </tbody>
-    </table>
-    
-  </div>
-  <div class="span6">
+      <table class="table table-striped">
+        <thead>
+          <tr>
+            <th colspan="2">
+              {% trans %}Registration Details{% endtrans %}
+            </th>
+          </tr>
+        </thead>
+        <tbody>
+          <tr>
+            <td class="span2">
+               <strong>{% trans %}IP Address{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+              {{ profile.join_ip }}
+            </td>
+          </tr>
+          <tr>
+            <td class="span2">
+               <strong>{% trans %}UserAgent String{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+              {% if profile.join_agent %}{{ profile.join_agent }}{% else %}<em class="muted">{% trans %}Created from console{% endtrans %}</em>{% endif %}
+            </td>
+          </tr>
+        </tbody>
+      </table>
+      
+    </div>
+    <div class="span6">
+        
+      <table class="table table-striped">
+        <thead>
+          <tr>
+            <th colspan="2">
+              {% trans %}Last Visit Details{% endtrans %}
+            </th>
+          </tr>
+        </thead>
+        <tbody>
+          <tr>
+            <td class="span2">
+               <strong>{% trans %}IP Address{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+              {{ profile.last_ip }}
+            </td>
+          </tr>
+          <tr>
+            <td class="span2">
+               <strong>{% trans %}UserAgent String{% endtrans %}</strong>
+            </td>
+            <td class="span4">
+              {% if profile.last_agent %}{{ profile.last_agent }}{% else %}<em class="muted">{% trans %}Created from console{% endtrans %}</em>{% endif %}
+            </td>
+          </tr>
+        </tbody>
+      </table>
       
-    <table class="table table-striped">
-      <thead>
-        <tr>
-          <th colspan="2">
-            {% trans %}Last Visit Details{% endtrans %}
-          </th>
-        </tr>
-      </thead>
-      <tbody>
-        <tr>
-          <td class="span2">
-             <strong>{% trans %}IP Address{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-            {{ profile.last_ip }}
-          </td>
-        </tr>
-        <tr>
-          <td class="span2">
-             <strong>{% trans %}UserAgent String{% endtrans %}</strong>
-          </td>
-          <td class="span4">
-            {% if profile.last_agent %}{{ profile.last_agent }}{% else %}<em class="muted">{% trans %}Created from console{% endtrans %}</em>{% endif %}
-          </td>
-        </tr>
-      </tbody>
-    </table>
-    
+    </div>
   </div>
 </div>
 {% endif %}

+ 39 - 41
templates/cranefly/profiles/followers.html

@@ -8,59 +8,57 @@
 {% block title %}{{ macros.page_title(_('Followers'), profile.username) }}{% endblock %}
 
 {% block tab %}
-<h2>{% trans username=profile.username %}{{ username }}'s followers{% endtrans %}{% if items_total %} <small>
+<h2>{% if items_total %}
     {%- trans count=items_total, total=items_total|intcomma, username=profile.username -%}
-    {{ username }} has one follower
+    {{ username }} is followed by one member
     {%- pluralize -%}
-    {{ username }} has {{ total }} followers
-    {%- endtrans -%}</small>{% endif %}</h2>
+    {{ username }} is followed by {{ total }} members
+    {%- endtrans -%}
+    {%- else -%}
+    {% trans username=profile.username %}{{ username }} has no followers{% endtrans %}
+    {%- endif %}</h2>
 
 {% if items_total %}
-<div class="list-nav">
-  {{ pager() }}
-</div>
-<table class="table table-striped table-users">
-  <thead>
-    <tr>
-      <th colspan="4">{% trans count=items_total, total=items_total|intcomma, username=profile.username -%}
-    {{ username }} has one follower at this time
-    {%- pluralize -%}
-    {{ username }} has {{ total }} followers at this time
-    {%- endtrans %}</th>
-    </tr>
-  </thead>
-  <tbody>
-    {% for row in items|batch(4, '') %}
-    <tr>
-      {% for user in row %}
-      <td class="span3">
-        {% if user %}
-        <a href="{% url 'user' username=user.username_slug, user=user.pk %}"><img src="{{ user.get_avatar(42) }}" class="avatar" alt=""> <strong>{{ user.username }}</strong></a>
-        {% else %}
-        &nbsp;
-        {% endif %}
-      </td>
+<div class="user-list user-followers">
+  <table class="table table-striped">
+    <thead>
+      <tr>
+        <th colspan="4">{% trans username=profile.username %}Users that are following {{ username }}{% endtrans %}</th>
+      </tr>
+    </thead>
+    <tbody>
+      {% for row in items|batch(4, '') %}
+      <tr>
+        {% for user in row %}
+        <td class="span3 user-cell">
+          {% if user %}
+          <a href="{% url 'user' username=user.username_slug, user=user.pk %}" class="user-avatar"><img src="{{ user.get_avatar(42) }}" alt=""></a>
+          <p class="user-details">
+            <a href="{% url 'user' username=user.username_slug, user=user.pk %}">{{ user.username }}</a>
+            <span class="user-info">{% if user.title or (in_search and user.get_title()) %}<strong>{% if in_search %}{{ _(user.get_title()) }}{% else %}{{ _(user.title) }}{% endif %}</strong>, {% endif %}{% trans join=user.join_date|reldate %}Member since {{ join }}{% endtrans %}</span>
+          </p>
+          {% else %}
+          &nbsp;
+          {% endif %}
+        </td>
+        {% endfor %}
+      </tr>
       {% endfor %}
-    </tr>
-    {% endfor %}
-  </tbody>
-</table>
-<div class="list-nav">
+    </tbody>
+  </table>
   {{ pager() }}
 </div>
-{% else %}
-<p class="lead">{% trans username=profile.username %}{{ username }} has no followers at this time{% endtrans %}</p>
 {% endif %}
 {% endblock %}
 
 {% macro pager() -%}
-  <ul class="pager pull-left">
+{% if pagination['total'] > 1 %}
+<div class="pagination">
+  <ul>
+    <li class="count">{{ macros.pager_label(pagination) }}</li>
     {%- if pagination['prev'] > 0 %}<li><a href="{%- if pagination['prev'] > 1 %}{% url 'user_followers' user=profile.id, username=profile.username_slug, page=pagination['prev'] %}{% else %}{% url 'user_followers' user=profile.id, username=profile.username_slug %}{% endif %}" class="tooltip-top" title="{% trans %}Previous Page{% endtrans %}"><i class="icon-chevron-left"></i></a></li>{% endif -%}
     {%- if pagination['next'] > 0 %}<li><a href="{% url 'user_followers' user=profile.id, username=profile.username_slug, page=pagination['next'] %}" class="tooltip-top" title="{% trans %}Next Page{% endtrans %}"><i class="icon-chevron-right"></i></a></li>{% endif -%}
-    <li class="count">
-    {%- trans current_page=pagination['page'], pages=pagination['total'] -%}
-    Page {{ current_page }} of {{ pages }}
-    {%- endtrans -%}
-    </li>
   </ul>
+</div>
+{% endif %}
 {%- endmacro %}

+ 39 - 41
templates/cranefly/profiles/follows.html

@@ -8,59 +8,57 @@
 {% block title %}{{ macros.page_title(_('Follows'), profile.username) }}{% endblock %}
 
 {% block tab %}
-<h2>{% trans username=profile.username %}Who {{ username }} follows{% endtrans %}{% if items_total %} <small>
+<h2>{% if items_total %}
     {%- trans count=items_total, total=items_total|intcomma, username=profile.username -%}
-    {{ username }} follows one member
+    {{ username }} is following one member
     {%- pluralize -%}
-    {{ username }} follows {{ total }} members
-    {%- endtrans -%}</small>{%- endif %}</h2>
+    {{ username }} is following {{ total }} members
+    {%- endtrans -%}
+    {%- else -%}
+    {% trans username=profile.username %}{{ username }} is not following anybody{% endtrans %}
+    {%- endif %}</h2>
 
 {% if items_total %}
-<div class="list-nav">
-  {{ pager() }}
-</div>
-<table class="table table-striped table-users">
-  <thead>
-    <tr>
-      <th colspan="4">{% trans count=items_total, total=items_total|intcomma, username=profile.username -%}
-    {{ username }} follows one member
-    {%- pluralize -%}
-    {{ username }} follows {{ total }} members
-    {%- endtrans %}</th>
-    </tr>
-  </thead>
-  <tbody>
-    {% for row in items|batch(4, '') %}
-    <tr>
-      {% for user in row %}
-      <td class="span3">
-        {% if user %}
-        <a href="{% url 'user' username=user.username_slug, user=user.pk %}"><img src="{{ user.get_avatar(42) }}" class="avatar" alt=""> <strong>{{ user.username }}</strong></a>
-        {% else %}
-        &nbsp;
-        {% endif %}
-      </td>
+<div class="user-list user-follows">
+  <table class="table table-striped">
+    <thead>
+      <tr>
+        <th colspan="4">{% trans username=profile.username %}Users {{ username }} is following{% endtrans %}</th>
+      </tr>
+    </thead>
+    <tbody>
+      {% for row in items|batch(4, '') %}
+      <tr>
+        {% for user in row %}
+        <td class="span3 user-cell">
+          {% if user %}
+          <a href="{% url 'user' username=user.username_slug, user=user.pk %}" class="user-avatar"><img src="{{ user.get_avatar(42) }}" alt=""></a>
+          <p class="user-details">
+            <a href="{% url 'user' username=user.username_slug, user=user.pk %}">{{ user.username }}</a>
+            <span class="user-info">{% if user.title or (in_search and user.get_title()) %}<strong>{% if in_search %}{{ _(user.get_title()) }}{% else %}{{ _(user.title) }}{% endif %}</strong>, {% endif %}{% trans join=user.join_date|reldate %}Member since {{ join }}{% endtrans %}</span>
+          </p>
+          {% else %}
+          &nbsp;
+          {% endif %}
+        </td>
+        {% endfor %}
+      </tr>
       {% endfor %}
-    </tr>
-    {% endfor %}
-  </tbody>
-</table>
-<div class="list-nav">
+    </tbody>
+  </table>
   {{ pager() }}
 </div>
-{% else %}
-<p class="lead">{% trans username=profile.username %}{{ username }} follows nobody at this time{% endtrans %}</p>
 {% endif %}
 {% endblock %}
 
 {% macro pager() -%}
-  <ul class="pager pull-left">
+{% if pagination['total'] > 1 %}
+<div class="pagination">
+  <ul>
+    <li class="count">{{ macros.pager_label(pagination) }}</li>
     {%- if pagination['prev'] > 0 %}<li><a href="{%- if pagination['prev'] > 1 %}{% url 'user_follows' user=profile.id, username=profile.username_slug, page=pagination['prev'] %}{% else %}{% url 'user_follows' user=profile.id, username=profile.username_slug %}{% endif %}" class="tooltip-top" title="{% trans %}Previous Page{% endtrans %}"><i class="icon-chevron-left"></i></a></li>{% endif -%}
     {%- if pagination['next'] > 0 %}<li><a href="{% url 'user_follows' user=profile.id, username=profile.username_slug, page=pagination['next'] %}" class="tooltip-top" title="{% trans %}Next Page{% endtrans %}"><i class="icon-chevron-right"></i></a></li>{% endif -%}
-    <li class="count">
-    {%- trans current_page=pagination['page'], pages=pagination['total'] -%}
-    Page {{ current_page }} of {{ pages }}
-    {%- endtrans -%}
-    </li>
   </ul>
+</div>
+{% endif %}
 {%- endmacro %}

+ 1 - 5
templates/cranefly/profiles/list.html

@@ -15,11 +15,7 @@
 {% block container %}
 <div class="page-header header-primary">
   <div class="container">
-    {% if messages %}
-    <div class="messages-list">
-      {{ messages_list(messages) }}
-    </div>
-    {% endif %}
+    {{ messages_list(messages) }}
     <h1>{% trans %}Users List{% endtrans %} <small>{% trans %}Browse notable user groups or find specific user{% endtrans %}</small></h1>
     <ul class="nav nav-tabs header-tabs">
       {% for rank in ranks %}

+ 26 - 30
templates/cranefly/profiles/posts.html

@@ -8,50 +8,50 @@
 {% block title %}{{ macros.page_title(_('Posts'), profile.username) }}{% endblock %}
 
 {% block tab %}
-<h2>{% trans username=profile.username %}{{ username }}'s posts{% endtrans %}{% if items_total %} <small>
+<h2>{% if items_total -%}
     {%- trans count=items_total, total=items_total|intcomma, username=profile.username -%}
     {{ username }} has one post
     {%- pluralize -%}
     {{ username }} has {{ total }} posts
-    {%- endtrans -%}</small>{% endif %}</h2>
-
-{% if items_total %}
-{{ pager() }}
-{% endif %}
+    {%- endtrans -%}
+    {%- else -%}
+    {% trans username=profile.username %}{{ username }} has no posts{% endtrans %}
+    {%- endif %}</h2>
 
 {% if items_total %}
-<ul class="unstyled shorts-list">
+<div class="content-list user-posts">
   {% for item in items %}
-  <li>
-    <img src="{{ profile.get_avatar(36) }}" class="avatar">
-    <p class="message"><a href="{% url 'thread_find' thread=item.thread.pk, slug=item.thread.slug, post=item.pk %}">{{ item.post_preparsed|markdown_short(300) }}</a></p>
-    <p class="location">{% if item.thread.start_post_id == item.pk -%}
-        {% trans thread=thread(item), forum=forum(item.forum), user=username(profile), date=item.date|reldate|low %}Thread {{ thread }} posted in {{ forum }} by {{ user }} {{ date }}{% endtrans %}
-        {%- else -%}
-        {% trans thread=thread(item), forum=forum(item.forum), user=username(profile), date=item.date|reldate|low %}Reply to {{ thread }} posted in {{ forum }} by {{ user }} {{ date }}{% endtrans %}
-        {%- endif %}</p>
-  </li>
+  <div class="media">
+    <a href="{% url 'user' user=profile.pk, username=profile.username_slug %}" class="pull-left">
+      <img class="media-object" src="{{ profile.get_avatar(52) }}">
+    </a>
+    <div class="media-body">
+      <a href="{% url 'thread_find' thread=item.thread.pk, slug=item.thread.slug, post=item.pk %}" class="post-preview">{{ item.post_preparsed|markdown_short(300) }}</a>
+      <div class="media-footer">{% if item.thread.start_post_id == item.pk -%}
+      {% trans thread=thread(item), forum=forum(item.forum), date=item.date|reldate|low %}Thread {{ thread }} posted in {{ forum }} {{ date }}{% endtrans %}
+      {%- else -%}
+      {% trans thread=thread(item), forum=forum(item.forum), date=item.date|reldate|low %}Reply to {{ thread }} posted in {{ forum }} {{ date }}{% endtrans %}
+      {%- endif %}</div>
+    </div>
+  </div>
+  <hr>
   {% endfor %}
-</ul>
-<div class="list-nav">
   {{ pager() }}
 </div>
-{% else %}
-<p class="lead">{% trans username=profile.username %}{{ username }} has no posts{% endtrans %}</p>
 {% endif %}
 {% endblock %}
 
 {% macro pager() -%}
-  <ul class="pager pull-left">
+{% if pagination['total'] > 1 %}
+<div class="pagination">
+  <ul>
+    <li class="count">{{ macros.pager_label(pagination) }}</li>
     {%- if pagination['prev'] > 1 %}<li><a href="{% url 'user_posts' user=profile.id, username=profile.username_slug %}" class="tooltip-top" title="{% trans %}Lastest Posts{% endtrans %}"><i class="icon-chevron-left"></i> {% trans %}Latest{% endtrans %}</a></li>{% endif -%}
     {%- if pagination['prev'] > 0 %}<li><a href="{%- if pagination['prev'] > 1 %}{% url 'user_posts' user=profile.id, username=profile.username_slug, page=pagination['prev'] %}{% else %}{% url 'user_posts' user=profile.id, username=profile.username_slug %}{% endif %}" class="tooltip-top" title="{% trans %}Newer Posts{% endtrans %}"><i class="icon-chevron-left"></i></a></li>{% endif -%}
     {%- if pagination['next'] > 0 %}<li><a href="{% url 'user_posts' user=profile.id, username=profile.username_slug, page=pagination['next'] %}" class="tooltip-top" title="{% trans %}Older Posts{% endtrans %}"><i class="icon-chevron-right"></i></a></li>{% endif -%}
-    <li class="count">
-    {%- trans current_page=pagination['page'], pages=pagination['total'] -%}
-    Page {{ current_page }} of {{ pages }}
-    {%- endtrans -%}
-    </li>
   </ul>
+</div>
+{% endif %}
 {%- endmacro %}
 
 {% macro thread(item) -%}
@@ -61,7 +61,3 @@
 {% macro forum(forum) -%}
 <a href="{% url 'forum' forum=forum.pk, slug=forum.slug %}">{{ forum.name }}</a>
 {%- endmacro %}
-
-{% macro username(user) -%}
-<a href="{% url 'user' user=user.pk, username=user.username_slug %}">{{ user.username }}</a>
-{%- endmacro %}

+ 67 - 2
templates/cranefly/profiles/profile.html

@@ -2,11 +2,77 @@
 {% load i18n %}
 {% load humanize %}
 {% load url from future %}
-{% import "_forms.html" as form_theme with context %}
 {% import "cranefly/macros.html" as macros with context %}
 
 {% block title %}{{ macros.page_title(profile.username) }}{% endblock %}
 
+{% block container %}
+<div class="user-profile{% if profile.get_style() %} user-profile-{{ profile.get_style() }}{% endif %}">
+  <div class="page-header header-primary user-profile-header">
+    <div class="container">
+      {{ messages_list(messages) }}
+      <div class="header-row">
+        <img src="{{ profile.get_avatar() }}" class="header-avatar">
+        <div class="header-side">
+          <h1>{{ profile.username }} <small>{% if profile.title or profile.rank.title -%}
+            <strong>{% if profile.title %}{{ _(profile.title) }}{% elif profile.rank.title %}{{ _(profile.rank.title) }}{% endif %}</strong>; {% endif %}
+            {%- if online and (not hidden or acl.users.can_see_hidden_users()) -%}
+            {%- if profile.hide_activity -%}
+              {% trans %}Online, hidden{% endtrans %}
+            {%- else -%}
+              {% trans %}Online{% endtrans %}
+            {%- endif %}
+            {%- else -%}
+              {% trans %}Offline{% endtrans %}
+            {%- endif -%}, {% if not hidden or acl.users.can_see_hidden_users() -%}
+              {%- if online -%}
+                {% trans last_click=online|reltimesince|low %}last click {{ last_click }}{% endtrans %}
+              {%- elif profile.last_date -%}
+                {% trans last_visit=profile.last_date|reltimesince|low %}last seen {{ last_visit }}{% endtrans %}
+              {%- else -%}
+                {% trans %}never visited{% endtrans %}
+              {%- endif -%}
+            {%- else -%}
+              {% trans %}hiding activity{% endtrans %}
+            {%- endif %}</small></h1>
+          <ul class="nav nav-tabs header-tabs">
+            {% for link in tabs %}
+            <li{% if link.active %} class="active"{% endif %}>
+              <a href="{{ link.route|url(user=profile.pk, username=profile.username_slug) }}">{{ link.name }}</a>
+            </li>
+            {% endfor %}
+            {% if user.is_authenticated() and user.pk != profile.pk %}
+            <li class="pull-right">
+              <form class="form-inline" action="{% if follows %}{% url 'unfollow_user' user=profile.id %}{% else %}{% url 'follow_user' user=profile.id %}{% endif %}" method="post">
+                <input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}">
+                <input type="hidden" name="fallback" value="{{ fallback }}">
+                <button type="submit" class="btn{% if follows %} btn-success{% endif %}">
+                  <i class="icon-heart"></i> {% if follows %}{% trans %}Following{% endtrans %}{% else %}{% trans %}Follow{% endtrans %}{% endif %}
+                </button>
+              </form>
+            </li>
+            <li class="pull-right">
+              <form class="form-inline" action="{% if ignores %}{% url 'unignore_user' user=profile.id %}{% else %}{% url 'ignore_user' user=profile.id %}{% endif %}" method="post">
+                <input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}">
+                <input type="hidden" name="fallback" value="{{ fallback }}">
+                <button type="submit" class="btn{% if ignores %} btn-inverse{% endif %}">
+                  <i class="icon-ban-circle"></i> {% if ignores %}{% trans %}Ignoring{% endtrans %}{% else %}{% trans %}Ignore{% endtrans %}{% endif %}
+                </button>
+              </form>
+            </li>
+            {% endif %}
+          </ul>
+        </div>
+      </div>
+    </div>
+  </div>
+  <div class="container container-primary">
+    {% block tab %}{% endblock %}
+  </div>
+</div>
+{% endblock %}
+
+
 {% block content %}
 <div class="profile-wrapper{% if profile.get_style() %} {{ profile.get_style() }}{% endif %}">
   <div class="page-header profile-header header-tabbed{% if profile.get_style() %} {{ profile.get_style() }}{% endif %}">
@@ -65,7 +131,6 @@
     {% endif %}
   </div>
   <div class="profile-tab{% if profile.get_style() %} {{ profile.get_style() }}{% endif %}">
-    {% block tab %}{% endblock %}
   </div>
 </div>
 {% endblock %}

+ 21 - 26
templates/cranefly/profiles/threads.html

@@ -8,47 +8,46 @@
 {% block title %}{{ macros.page_title(_('Threads'), profile.username) }}{% endblock %}
 
 {% block tab %}
-<h2>{% trans username=profile.username %}{{ username }}'s threads{% endtrans %}{% if items_total %} <small>
+<h2>{% if items_total -%}
     {%- trans count=items_total, total=items_total|intcomma, username=profile.username -%}
     {{ username }} started one thread
     {%- pluralize -%}
     {{ username }} started {{ total }} threads
     {%- endtrans -%}
-    </small>{% endif %}</h2>
-    
-{% if items_total %}
-{{ pager() }}
-{% endif %}
+    {%- else -%}
+    {% trans username=profile.username %}{{ username }} started no threads{% endtrans %}
+    {%- endif %}</h2>
 
 {% if items_total %}
-<ul class="unstyled shorts-list">
+<div class="content-list user-threads">
   {% for item in items %}
-  <li>
-    <img src="{{ profile.get_avatar(36) }}" class="avatar">
-    <p class="message"><a href="{% url 'thread' thread=item.pk, slug=item.slug %}">{{ item.start_post.post_preparsed|markdown_short(300) }}</a></p>
-    <p class="location">{% trans thread=thread(item), forum=forum(item.forum), user=username(profile), date=item.start|reldate|low %}Thread {{ thread }} posted in {{ forum }} by {{ user }} {{ date }}{% endtrans %}</p>
-  </li>
+  <div class="media">
+    <a href="{% url 'user' user=profile.pk, username=profile.username_slug %}" class="pull-left">
+      <img class="media-object" src="{{ profile.get_avatar(52) }}">
+    </a>
+    <div class="media-body">
+      <a href="{% url 'thread' thread=item.pk, slug=item.slug %}" class="post-preview">{{ item.start_post.post_preparsed|markdown_short(300) }}</a>
+      <div class="media-footer">{% trans thread=thread(item), forum=forum(item.forum), date=item.start|reldate|low %}Thread {{ thread }} posted in {{ forum }} {{ date }}{% endtrans %}</div>
+    </div>
+  </div>
+  <hr>
   {% endfor %}
-</ul>
-<div class="list-nav">
   {{ pager() }}
 </div>
-{% else %}
-<p class="lead">{% trans username=profile.username %}{{ username }} has no threads{% endtrans %}</p>
 {% endif %}
 {% endblock %}
 
 {% macro pager() -%}
-  <ul class="pager pull-left">
+{% if pagination['total'] > 1 %}
+<div class="pagination">
+  <ul>
+    <li class="count">{{ macros.pager_label(pagination) }}</li>
     {%- if pagination['prev'] > 1 %}<li><a href="{% url 'user_threads' user=profile.id, username=profile.username_slug %}" class="tooltip-top" title="{% trans %}Lastest Posts{% endtrans %}"><i class="icon-chevron-left"></i> {% trans %}Latest{% endtrans %}</a></li>{% endif -%}
     {%- if pagination['prev'] > 0 %}<li><a href="{%- if pagination['prev'] > 1 %}{% url 'user_threads' user=profile.id, username=profile.username_slug, page=pagination['prev'] %}{% else %}{% url 'user_threads' user=profile.id, username=profile.username_slug %}{% endif %}" class="tooltip-top" title="{% trans %}Newer Posts{% endtrans %}"><i class="icon-chevron-left"></i></a></li>{% endif -%}
     {%- if pagination['next'] > 0 %}<li><a href="{% url 'user_threads' user=profile.id, username=profile.username_slug, page=pagination['next'] %}" class="tooltip-top" title="{% trans %}Older Posts{% endtrans %}"><i class="icon-chevron-right"></i></a></li>{% endif -%}
-    <li class="count">
-    {%- trans current_page=pagination['page'], pages=pagination['total'] -%}
-    Page {{ current_page }} of {{ pages }}
-    {%- endtrans -%}
-    </li>
   </ul>
+</div>
+{% endif %}
 {%- endmacro %}
 
 {% macro thread(item) -%}
@@ -58,7 +57,3 @@
 {% macro forum(forum) -%}
 <a href="{% url 'forum' forum=forum.pk, slug=forum.slug %}">{{ forum.name }}</a>
 {%- endmacro %}
-
-{% macro username(user) -%}
-<a href="{% url 'user' user=user.pk, username=user.username_slug %}">{{ user.username }}</a>
-{%- endmacro %}

+ 12 - 19
templates/cranefly/usercp/layout.html

@@ -2,29 +2,22 @@
 {% load i18n %}
 {% load url from future %}
 
-{% block container %}
-<div class="container container-primary">
-  {% if messages %}
-  <div class="messages-list">
-    {{ messages_list(messages) }}
-  </div>
-  {% endif %}
-  <div class="row usercp">
-    <div class="span3">
+{% block content %}
+<div class="row usercp">
+  <div class="span3">
 
-      <ul class="nav nav-pills usercp-tabs">
-        <li class="nav-header">{% trans %}Your Control Panel{% endtrans %}</li>
-        {% for link in tabs %}
-        <li{% if link.active %} class="active"{% endif %}><a href="{{ link.route|url }}">{{ link.name }}</a></li>
-        {% endfor %}
-      </ul>
+    <ul class="nav nav-pills usercp-tabs">
+      <li class="nav-header">{% trans %}Your Control Panel{% endtrans %}</li>
+      {% for link in tabs %}
+      <li{% if link.active %} class="active"{% endif %}><a href="{{ link.route|url }}">{{ link.name }}</a></li>
+      {% endfor %}
+    </ul>
 
-    </div>
-    <div class="span9 usercp-action">
+  </div>
+  <div class="span9 usercp-action">
 
-      {% block action %}{% endblock %}
+    {% block action %}{% endblock %}
 
-    </div>
   </div>
 </div>
 {% endblock %}

+ 1 - 5
templates/cranefly/watched.html

@@ -7,11 +7,7 @@
 {% block container %}
 <div class="page-header header-primary">
   <div class="container">
-    {% if messages %}
-    <div class="messages-list">
-      {{ messages_list(messages) }}
-    </div>
-    {% endif %}
+    {{ messages_list(messages) }}
     <h1>{% trans %}Threads you are watching{% endtrans %}</h1>
 
     <ul class="nav nav-tabs header-tabs">