changeset 4796:315e8a847e2e

gravatar: use font awesome icons This changes gravatar_url to return an empty string (meaning use an icon) instead of returning a default image. Since this was a structural change, the changeset is fairly large.
author Sean Farley <sean.michael.farley@gmail.com>
date Tue, 02 Sep 2014 19:35:49 -0500
parents 83087ae63bd6
children 517705a0f92a
files kallithea/controllers/pullrequests.py kallithea/lib/helpers.py kallithea/model/repo.py kallithea/public/images/icons/group.png kallithea/public/js/base.js kallithea/templates/admin/repo_groups/repo_group_edit_perms.html kallithea/templates/admin/repos/repo_edit_permissions.html kallithea/templates/admin/user_groups/user_group_edit_perms.html kallithea/templates/pullrequests/pullrequest.html
diffstat 9 files changed, 54 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/pullrequests.py	Sat Nov 15 23:42:24 2014 -0800
+++ b/kallithea/controllers/pullrequests.py	Tue Sep 02 19:35:49 2014 -0500
@@ -298,7 +298,8 @@
                          username=repo.user.username,
                          firstname=repo.user.firstname,
                          lastname=repo.user.lastname,
-                         gravatar_link=h.gravatar_url(repo.user.email, 14)),
+                         gravatar_link=h.gravatar_url(repo.user.email, 28),
+                         gravatar_size=14),
             }
 
     @LoginRequired()
--- a/kallithea/lib/helpers.py	Sat Nov 15 23:42:24 2014 -0800
+++ b/kallithea/lib/helpers.py	Tue Sep 02 19:35:49 2014 -0500
@@ -877,6 +877,10 @@
     # stylesheet) because we using this to generate a high-res (retina) size
     tmpl = """<img alt="gravatar" class="{cls}" style="width: {size}px; height: {size}px" src="{src}"/>"""
 
+    # if src is empty then there was no gravatar, so we use a font icon
+    if not src:
+        tmpl = """<i class="icon-user {cls}" style="font-size: {size}px;"></i>"""
+
     tmpl = tmpl.format(cls=cls, size=size, src=src)
     return literal(tmpl)
 
@@ -895,9 +899,7 @@
         email_address = safe_str(email_address)
 
     if not _use_gravatar or not email_address or email_address == _def:
-        # pick best matching size to one given in size param
-        f = lambda a, l: min(l, key=lambda x: abs(x - a))
-        return url("/images/user%s.png" % f(size, [14, 16, 20, 24, 30]))
+        return ""
 
     if _use_gravatar:
         _md5 = lambda s: hashlib.md5(s).hexdigest()
--- a/kallithea/model/repo.py	Sat Nov 15 23:42:24 2014 -0800
+++ b/kallithea/model/repo.py	Tue Sep 02 19:35:49 2014 -0500
@@ -141,7 +141,8 @@
                 'fname': u.name,
                 'lname': u.lastname,
                 'nname': u.username,
-                'gravatar_lnk': h.gravatar_url(u.email, 14)
+                'gravatar_lnk': h.gravatar_url(u.email, size=28),
+                'gravatar_size': 14,
             } for u in users]
         )
 
Binary file kallithea/public/images/icons/group.png has changed
--- a/kallithea/public/js/base.js	Sat Nov 15 23:42:24 2014 -0800
+++ b/kallithea/public/js/base.js	Tue Sep 02 19:35:49 2014 -0500
@@ -1153,13 +1153,13 @@
     // DataScheme for members
     var memberDS = new YAHOO.util.FunctionDataSource(matchAll);
     memberDS.responseSchema = {
-        fields: ["id", "fname", "lname", "nname", "grname", "grmembers", "gravatar_lnk"]
+        fields: ["id", "fname", "lname", "nname", "grname", "grmembers", "gravatar_lnk", "gravatar_size"]
     };
 
     // DataScheme for owner
     var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers);
     ownerDS.responseSchema = {
-        fields: ["id", "fname", "lname", "nname", "gravatar_lnk"]
+        fields: ["id", "fname", "lname", "nname", "gravatar_lnk", "gravatar_size"]
     };
 
     // Instantiate AutoComplete for perms
@@ -1189,12 +1189,16 @@
     // Custom formatter to highlight the matching letters
     var custom_formatter = function (oResultData, sQuery, sResultMatch) {
             var query = sQuery.toLowerCase();
-            var _gravatar = function(res, em, group){
+            var _gravatar = function(res, em, size, group){
+                var elem = '<img alt="gravatar" class="perm-gravatar-ac" style="width: {0}px; height: {0}px" src="{1}"/>'.format(size, em);
+                if (!em) {
+                    elem = '<i class="icon-user perm-gravatar-ac" style="font-size: {0}px;"></i>'.format(size);
+                }
                 if (group !== undefined){
-                    em = '/images/icons/group.png'
+                    elem = '<i class="perm-gravatar-ac icon-users"></i>'
                 }
-                var tmpl = '<div class="ac-container-wrap"><img class="perm-gravatar-ac" src="{0}"/>{1}</div>'
-                return tmpl.format(em,res)
+                var tmpl = '<div class="ac-container-wrap">{0}{1}</div>'
+                return tmpl.format(elem,res)
             }
             // group
             if (oResultData.grname != undefined) {
@@ -1206,9 +1210,9 @@
                 var grsuffix = " ({0}  {1})".format(grmembers, _TM['members']);
 
                 if (grnameMatchIndex > -1) {
-                    return _gravatar(grprefix + highlightMatch(grname, query, grnameMatchIndex) + grsuffix,null,true);
+                    return _gravatar(grprefix + highlightMatch(grname, query, grnameMatchIndex) + grsuffix,null,null,true);
                 }
-                return _gravatar(grprefix + oResultData.grname + grsuffix, null,true);
+                return _gravatar(grprefix + oResultData.grname + grsuffix, null, null, true);
             // Users
             } else if (oResultData.nname != undefined) {
                 var fname = oResultData.fname || "";
@@ -1239,7 +1243,7 @@
                     displaynname = nname ? "(" + nname + ")" : "";
                 }
 
-                return _gravatar(displayfname + " " + displaylname + " " + displaynname, oResultData.gravatar_lnk);
+                return _gravatar(displayfname + " " + displaylname + " " + displaynname, oResultData.gravatar_lnk, oResultData.gravatar_size);
             } else {
                 return '';
             }
@@ -1315,7 +1319,7 @@
     var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers);
 
     ownerDS.responseSchema = {
-        fields: ["id", "fname", "lname", "nname", "gravatar_lnk"]
+        fields: ["id", "fname", "lname", "nname", "gravatar_lnk", "gravatar_size"]
     };
 
     // Instantiate AutoComplete for mentions
@@ -1343,12 +1347,16 @@
             }
 
             var query = sQuery.toLowerCase();
-            var _gravatar = function(res, em, group){
+            var _gravatar = function(res, em, size, group){
+                var elem = '<img alt="gravatar" class="perm-gravatar-ac" style="width: {0}px; height: {0}px" src="{1}"/>'.format(size, em);
+                if (!em) {
+                    elem = '<i class="icon-user perm-gravatar-ac" style="font-size: {0}px;"></i>'.format(size);
+                }
                 if (group !== undefined){
-                    em = '/images/icons/group.png'
+                    elem = '<i class="perm-gravatar-ac icon-users"></i>'
                 }
-                var tmpl = '<div class="ac-container-wrap"><img class="perm-gravatar-ac" src="{0}"/>{1}</div>'
-                return tmpl.format(em,res)
+                var tmpl = '<div class="ac-container-wrap">{0}{1}</div>'
+                return tmpl.format(elem,res)
             }
             if (oResultData.nname != undefined) {
                 var fname = oResultData.fname || "";
@@ -1379,7 +1387,7 @@
                     displaynname = nname ? "(" + nname + ")" : "";
                 }
 
-                return _gravatar(displayfname + " " + displaylname + " " + displaynname, oResultData.gravatar_lnk);
+                return _gravatar(displayfname + " " + displaylname + " " + displaynname, oResultData.gravatar_lnk, oResultData.gravatar_size);
             } else {
                 return '';
             }
@@ -1458,15 +1466,18 @@
         });
 }
 
-var addReviewMember = function(id,fname,lname,nname,gravatar_link){
+var addReviewMember = function(id,fname,lname,nname,gravatar_link,gravatar_size){
     var displayname = "{0} {1} ({2})".format(fname, lname, nname);
+    var gravatarelm = '<img alt="gravatar" style="width: {0}px; height: {0}px" src="{1}"/>'.format(gravatar_size, gravatar_link);
+    if (!gravatar_link)
+        gravatarelm = '<i class="icon-user" style="font-size: {0}px;"></i>'.format(gravatar_size);
     var element = (
         '     <li id="reviewer_{2}">\n'+
         '       <div class="reviewers_member">\n'+
         '           <div class="reviewer_status tooltip" title="not_reviewed">\n'+
         '             <i class="icon-circle changeset-status-not_reviewed"></i>\n'+
         '           </div>\n'+
-        '         <div class="reviewer_gravatar gravatar"><img alt="gravatar" src="{0}"/> </div>\n'+
+        '         <div class="reviewer_gravatar gravatar">{0}</div>\n'+
         '         <div style="float:left;">{1}</div>\n'+
         '         <input type="hidden" value="{2}" name="review_members" />\n'+
         '         <div class="reviewer_member_remove action_button" onclick="removeReviewMember({2})">\n'+
@@ -1474,7 +1485,7 @@
         '         </div> (add not saved)\n'+
         '       </div>\n'+
         '     </li>\n'
-        ).format(gravatar_link, displayname, id);
+        ).format(gravatarelm, displayname, id);
     // check if we don't have this ID already in
     var ids = [];
     $('#review_members').find('li').each(function() {
@@ -1545,7 +1556,7 @@
     var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers);
 
     ownerDS.responseSchema = {
-        fields: ["id", "fname", "lname", "nname", "gravatar_lnk"]
+        fields: ["id", "fname", "lname", "nname", "gravatar_lnk", "gravatar_size"]
     };
 
     // Instantiate AutoComplete for mentions
@@ -1573,12 +1584,16 @@
             }
 
             var query = sQuery.toLowerCase();
-            var _gravatar = function(res, em, group){
+            var _gravatar = function(res, em, size, group){
+                var elem = '<img alt="gravatar" class="perm-gravatar-ac" style="width: {0}px; height: {0}px" src="{1}"/>'.format(size, em);
+                if (!em) {
+                    elem = '<i class="icon-user perm-gravatar-ac" style="font-size: {0}px;"></i>'.format(size);
+                }
                 if (group !== undefined){
-                    em = '/images/icons/group.png'
+                    elem = '<i class="perm-gravatar-ac icon-users"></i>'
                 }
-                var tmpl = '<div class="ac-container-wrap"><img class="perm-gravatar-ac" src="{0}"/>{1}</div>'
-                return tmpl.format(em,res)
+                var tmpl = '<div class="ac-container-wrap">{0}{1}</div>'
+                return tmpl.format(elem,res)
             }
             if (oResultData.nname != undefined) {
                 var fname = oResultData.fname || "";
@@ -1609,7 +1624,7 @@
                     displaynname = nname ? "(" + nname + ")" : "";
                 }
 
-                return _gravatar(displayfname + " " + displaylname + " " + displaynname, oResultData.gravatar_lnk);
+                return _gravatar(displayfname + " " + displaylname + " " + displaynname, oResultData.gravatar_lnk, oResultData.gravatar_size);
             } else {
                 return '';
             }
@@ -1628,7 +1643,7 @@
             //fill the autocomplete with value
             if (oData.nname != undefined) {
                 addReviewMember(oData.id, oData.fname, oData.lname, oData.nname,
-                                oData.gravatar_lnk);
+                                oData.gravatar_lnk, oData.gravatar_size);
                 myAC.dataSource.cache.push(oData.id);
                 $('#user').val('');
             }
--- a/kallithea/templates/admin/repo_groups/repo_group_edit_perms.html	Sat Nov 15 23:42:24 2014 -0800
+++ b/kallithea/templates/admin/repo_groups/repo_group_edit_perms.html	Tue Sep 02 19:35:49 2014 -0500
@@ -57,7 +57,7 @@
                         <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'group.write')}</td>
                         <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'group.admin')}</td>
                         <td style="white-space: nowrap;">
-                            <img class="perm-gravatar" src="${h.url('/images/icons/group.png')}"/>
+                            <i class="icon-users"></i>
                             %if h.HasPermissionAny('hg.admin')():
                              <a href="${h.url('edit_users_group',id=g2p.users_group.users_group_id)}">
                                  ${g2p.users_group.users_group_name}
--- a/kallithea/templates/admin/repos/repo_edit_permissions.html	Sat Nov 15 23:42:24 2014 -0800
+++ b/kallithea/templates/admin/repos/repo_edit_permissions.html	Tue Sep 02 19:35:49 2014 -0500
@@ -56,7 +56,7 @@
                         <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.write')}</td>
                         <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.admin')}</td>
                         <td style="white-space: nowrap;">
-                            <img class="perm-gravatar" src="${h.url('/images/icons/group.png')}"/>
+                            <i class="icon-users"></i>
                             %if h.HasPermissionAny('hg.admin')():
                              <a href="${h.url('edit_users_group',id=g2p.users_group.users_group_id)}">${g2p.users_group.users_group_name}</a>
                             %else:
--- a/kallithea/templates/admin/user_groups/user_group_edit_perms.html	Sat Nov 15 23:42:24 2014 -0800
+++ b/kallithea/templates/admin/user_groups/user_group_edit_perms.html	Tue Sep 02 19:35:49 2014 -0500
@@ -57,7 +57,7 @@
                         <td>${h.radio('g_perm_%s' % g2p.user_group.users_group_name,'usergroup.write')}</td>
                         <td>${h.radio('g_perm_%s' % g2p.user_group.users_group_name,'usergroup.admin')}</td>
                         <td style="white-space: nowrap;">
-                            <img class="perm-gravatar" src="${h.url('/images/icons/group.png')}"/>
+                            <i class="icon-users"></i>
                             %if h.HasPermissionAny('hg.admin')():
                              <a href="${h.url('edit_users_group',id=g2p.user_group.users_group_id)}">
                                  ${g2p.user_group.users_group_name}
--- a/kallithea/templates/pullrequests/pullrequest.html	Sat Nov 15 23:42:24 2014 -0800
+++ b/kallithea/templates/pullrequests/pullrequest.html	Tue Sep 02 19:35:49 2014 -0500
@@ -102,7 +102,7 @@
                 %for member in [c.a_repo.user]:
                   <li id="reviewer_${member.user_id}">
                     <div class="reviewers_member">
-                      <div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(member.email, 14)}"/> </div>
+                      <div class="gravatar">${h.gravatar(member.email, 14)}</div>
                       <div style="float:left">${member.firstname} ${member.lastname} (${_('owner')})</div>
                       <input type="hidden" value="${member.user_id}" name="review_members" />
                       <span class="action_button" style="padding: 3px" onclick="removeReviewMember(${member.user_id})" title="${_('Remove reviewer')}">
@@ -179,7 +179,7 @@
               $('#review_members').html('');
               addReviewMember(data.user.user_id, data.user.firstname,
                               data.user.lastname, data.user.username,
-                              data.user.gravatar_link);
+                              data.user.gravatar_link, data.user_gravatar_size);
 
               // re-populate the select2 thingie
               $("#other_ref").select2({