Changeset - 8c50b164fb58
[Not reviewed]
default
0 4 0
Marcin Kuzminski - 15 years ago 2010-08-08 01:26:23
marcin@python-works.com
Implemented basic gravatar support on admin pages only for now
4 files changed with 42 insertions and 3 deletions:
0 comments (0 inline, 0 general)
pylons_app/lib/helpers.py
Show inline comments
 
@@ -88,218 +88,236 @@ class _ToolTip(object):
 
        """
 
        
 
        js = '''
 
        YAHOO.util.Event.onDOMReady(function(){
 
            function toolTipsId(){
 
                var ids = [];
 
                var tts = YAHOO.util.Dom.getElementsByClassName('tooltip');
 
                
 
                for (var i = 0; i < tts.length; i++) {
 
                    //if element doesn not have and id autgenerate one for tooltip
 
                    
 
                    if (!tts[i].id){
 
                        tts[i].id='tt'+i*100;
 
                    }
 
                    ids.push(tts[i].id);
 
                }
 
                return ids        
 
            };
 
            var myToolTips = new YAHOO.widget.Tooltip("tooltip", { 
 
                context: toolTipsId(),
 
                monitorresize:false,
 
                xyoffset :[0,0],
 
                autodismissdelay:300000,
 
                hidedelay:5,
 
                showdelay:20,
 
            });
 
            
 
            //Mouse Over event disabled for new repositories since they dont
 
            //have last commit message
 
            myToolTips.contextMouseOverEvent.subscribe(
 
                function(type, args) {
 
                    var context = args[0];
 
                    var txt = context.getAttribute('tooltip_title');
 
                    if(txt){                                       
 
                        return true;
 
                    }
 
                    else{
 
                        return false;
 
                    }
 
                });
 
            
 
                            
 
            // Set the text for the tooltip just before we display it. Lazy method
 
            myToolTips.contextTriggerEvent.subscribe( 
 
                 function(type, args) { 
 

	
 
                 
 
                        var context = args[0]; 
 
                        
 
                        var txt = context.getAttribute('tooltip_title');
 
                        this.cfg.setProperty("text", txt);
 
                        
 
                        
 
                        // positioning of tooltip
 
                        var tt_w = this.element.clientWidth;
 
                        var tt_h = this.element.clientHeight;
 
                        
 
                        var context_w = context.offsetWidth;
 
                        var context_h = context.offsetHeight;
 
                        
 
                        var pos_x = YAHOO.util.Dom.getX(context);
 
                        var pos_y = YAHOO.util.Dom.getY(context);
 

	
 
                        var display_strategy = 'top';
 
                        var xy_pos = [0,0];
 
                        switch (display_strategy){
 
                        
 
                            case 'top':
 
                                var cur_x = (pos_x+context_w/2)-(tt_w/2);
 
                                var cur_y = pos_y-tt_h-4;
 
                                xy_pos = [cur_x,cur_y];                                
 
                                break;
 
                            case 'bottom':
 
                                var cur_x = (pos_x+context_w/2)-(tt_w/2);
 
                                var cur_y = pos_y+context_h+4;
 
                                xy_pos = [cur_x,cur_y];                                
 
                                break;
 
                            case 'left':
 
                                var cur_x = (pos_x-tt_w-4);
 
                                var cur_y = pos_y-((tt_h/2)-context_h/2);
 
                                xy_pos = [cur_x,cur_y];                                
 
                                break;
 
                            case 'right':
 
                                var cur_x = (pos_x+context_w+4);
 
                                var cur_y = pos_y-((tt_h/2)-context_h/2);
 
                                xy_pos = [cur_x,cur_y];                                
 
                                break;
 
                             default:
 
                                var cur_x = (pos_x+context_w/2)-(tt_w/2);
 
                                var cur_y = pos_y-tt_h-4;
 
                                xy_pos = [cur_x,cur_y];                                
 
                                break;                             
 
                                 
 
                        }
 

	
 
                        this.cfg.setProperty("xy",xy_pos);
 

	
 
                  });
 
                  
 
            //Mouse out 
 
            myToolTips.contextMouseOutEvent.subscribe(
 
                function(type, args) {
 
                    var context = args[0];
 
                    
 
                });
 
        });
 
        '''         
 
        return literal(js)
 

	
 
tooltip = _ToolTip()
 

	
 
class _FilesBreadCrumbs(object):
 
    
 
    def __call__(self, repo_name, rev, paths):
 
        url_l = [link_to(repo_name, url('files_home',
 
                                        repo_name=repo_name,
 
                                        revision=rev, f_path=''))]
 
        paths_l = paths.split('/')
 
        
 
        for cnt, p in enumerate(paths_l, 1):
 
            if p != '':
 
                url_l.append(link_to(p, url('files_home',
 
                                            repo_name=repo_name,
 
                                            revision=rev,
 
                                            f_path='/'.join(paths_l[:cnt]))))
 

	
 
        return literal(' / '.join(url_l))
 

	
 
files_breadcrumbs = _FilesBreadCrumbs()
 

	
 
def pygmentize(filenode, **kwargs):
 
    """
 
    pygmentize function using pygments
 
    @param filenode:
 
    """
 
    return literal(code_highlight(filenode.content, filenode.lexer, HtmlFormatter(**kwargs)))
 

	
 
def pygmentize_annotation(filenode, **kwargs):
 
    """
 
    pygmentize function for annotation
 
    @param filenode:
 
    """
 
    
 
    color_dict = g.changeset_annotation_colors
 
    def gen_color():
 
        import random
 
        return [str(random.randrange(10, 235)) for _ in xrange(3)]
 
    def get_color_string(cs):
 
        if color_dict.has_key(cs):
 
            col = color_dict[cs]
 
        else:
 
            color_dict[cs] = gen_color()
 
            col = color_dict[cs]
 
        return "color: rgb(%s) ! important;" % (', '.join(col))
 
        
 
    def url_func(changeset):
 
        tooltip_html = "<div style='font-size:0.8em'><b>Author:</b> %s<br/><b>Date:</b> %s</b><br/><b>Message:</b> %s<br/></div>" 
 
        
 
        tooltip_html = tooltip_html % (changeset.author,
 
                                               changeset.date,
 
                                               tooltip(changeset.message))
 
        lnk_format = 'r%s:%s' % (changeset.revision,
 
                                 changeset.raw_id)
 
        uri = link_to(
 
                lnk_format,
 
                url('changeset_home', repo_name='test',
 
                    revision=changeset.raw_id),
 
                style=get_color_string(changeset.raw_id),
 
                class_='tooltip',
 
                tooltip_title=tooltip_html
 
              )
 
        
 
        uri += '\n'
 
        return uri   
 
    return literal(annotate_highlight(filenode, url_func, **kwargs))
 
      
 
def repo_name_slug(value):
 
    """
 
    Return slug of name of repository
 
    """
 
    slug = urlify(value)
 
    for c in """=[]\;'"<>,/~!@#$%^&*()+{}|:""":
 
        slug = slug.replace(c, '-')
 
    slug = recursive_replace(slug, '-')
 
    return slug
 

	
 
flash = _Flash()
 

	
 

	
 
#===============================================================================
 
# MERCURIAL FILTERS available via h.
 
#===============================================================================
 

	
 

	
 
from mercurial import util
 
from mercurial.templatefilters import age as _age, person as _person
 

	
 
age = lambda  x:_age(x)
 
capitalize = lambda x: x.capitalize()
 
date = lambda x: util.datestr(x)
 
email = util.email
 
person = lambda x: _person(x)
 
hgdate = lambda  x: "%d %d" % x
 
isodate = lambda  x: util.datestr(x, '%Y-%m-%d %H:%M %1%2')
 
isodatesec = lambda  x: util.datestr(x, '%Y-%m-%d %H:%M:%S %1%2')
 
localdate = lambda  x: (x[0], util.makedate()[1])
 
rfc822date = lambda  x: util.datestr(x, "%a, %d %b %Y %H:%M:%S %1%2")
 
rfc3339date = lambda  x: util.datestr(x, "%Y-%m-%dT%H:%M:%S%1:%2")
 
time_ago = lambda x: util.datestr(_age(x), "%a, %d %b %Y %H:%M:%S %1%2")
 

	
 

	
 
#===============================================================================
 
# PERMS
 
#===============================================================================
 
from pylons_app.lib.auth import HasPermissionAny, HasPermissionAll, \
 
HasRepoPermissionAny, HasRepoPermissionAll
 

	
 
#===============================================================================
 
# GRAVATAR URL
 
#===============================================================================
 
import hashlib
 
import urllib
 

	
 
def gravatar_url(email):
 
    ssl_enabled = 'https' == request.environ.get('HTTP_X_URL_SCHEME')
 
    default = 'identicon'
 
    size = 32
 
    baseurl_nossl = "http://www.gravatar.com/avatar/"
 
    baseurl_ssl = "https://secure.gravatar.com/avatar/"
 
    
 
    baseurl = baseurl_ssl if ssl_enabled else baseurl_nossl
 
        
 
    
 
    # construct the url
 
    gravatar_url = baseurl + hashlib.md5(email.lower()).hexdigest() + "?"
 
    gravatar_url += urllib.urlencode({'d':default, 's':str(size)})
 

	
 
    return gravatar_url
pylons_app/public/css/style.css
Show inline comments
 
@@ -1710,384 +1710,385 @@ div.form div.fields div.field div.highli
 
 
div.form div.fields div.field div.highlight .ui-state-default
 
{
 
	margin: 0;
 
	padding: 6px 12px 6px 12px;
 
	background: #4e85bb url("../images/colors/blue/button_highlight.png") repeat-x;
 
	border-top: 1px solid #5c91a4;
 
	border-left: 1px solid #2a6f89;
 
	border-right: 1px solid #2b7089;
 
	border-bottom: 1px solid #1a6480;
 
	color: #FFFFFF;
 
}
 
 
div.form div.fields div.field div.highlight .ui-state-hover
 
{
 
	margin: 0;
 
	padding: 6px 12px 6px 12px;
 
	background: #46a0c1 url("../images/colors/blue/button_highlight_selected.png") repeat-x;
 
	border-top: 1px solid #78acbf;
 
	border-left: 1px solid #34819e;
 
	border-right: 1px solid #35829f;
 
	border-bottom: 1px solid #257897;
 
	color: #FFFFFF;
 
}
 
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> buttons
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.buttons
 
{
 
	margin: 10px 0 0 200px;
 
	padding: 0;
 
}
 
 
#content div.box-left div.form div.fields div.buttons,
 
#content div.box-right div.form div.fields div.buttons
 
{
 
	margin: 10px 0 0 0;
 
}
 
 
#content div.box div.form div.fields div.buttons input
 
{
 
	margin: 0;
 
	color: #000000;
 
	font-family: Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
 
	font-size: 11px;
 
	font-weight: bold;
 
}
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> buttons
 
----------------------------------------------------------- */
 
 
div.form div.fields div.buttons
 
{
 
	margin: 10px 0 0 200px;
 
	padding: 0;
 
}
 
 
div.box-left div.form div.fields div.buttons,
 
div.box-right div.form div.fields div.buttons
 
{
 
	margin: 10px 0 0 0;
 
}
 
 
div.form div.fields div.buttons input
 
{
 
	margin: 0;
 
	color: #000000;
 
	font-family: Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
 
	font-size: 11px;
 
	font-weight: bold;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> buttons (jquery styling)
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.buttons input.ui-state-default
 
{
 
    margin: 0;
 
    padding: 6px 12px 6px 12px;
 
    background: #e5e3e3 url("../images/button.png") repeat-x;
 
    border-top: 1px solid #DDDDDD;
 
    border-left: 1px solid #c6c6c6;
 
    border-right: 1px solid #DDDDDD;
 
    border-bottom: 1px solid #c6c6c6;
 
    color: #515151;
 
    outline: none;
 
}
 
 
#content div.box div.form div.fields div.buttons input.ui-state-hover
 
{
 
    margin: 0;
 
    padding: 6px 12px 6px 12px;
 
    background: #b4b4b4 url("../images/button_selected.png") repeat-x;
 
    border-top: 1px solid #cccccc;
 
    border-left: 1px solid #bebebe;
 
    border-right: 1px solid #b1b1b1;
 
    border-bottom: 1px solid #afafaf;
 
    color: #515151;
 
    outline: none;
 
}
 
 
#content div.box div.form div.fields div.buttons div.highlight
 
{
 
	display: inline;
 
}
 
 
#content div.box div.form div.fields div.buttons div.highlight input.ui-state-default
 
{
 
    margin: 0;
 
    padding: 6px 12px 6px 12px;
 
    background: #4e85bb url("../images/colors/blue/button_highlight.png") repeat-x;
 
    border-top: 1px solid #5c91a4;
 
    border-left: 1px solid #2a6f89;
 
    border-right: 1px solid #2b7089;
 
    border-bottom: 1px solid #1a6480;
 
    color: #FFFFFF;
 
}
 
 
#content div.box div.form div.fields div.buttons div.highlight input.ui-state-hover
 
{
 
    margin: 0;
 
    padding: 6px 12px 6px 12px;
 
    background: #46a0c1 url("../images/colors/blue/button_highlight_selected.png") repeat-x;
 
    border-top: 1px solid #78acbf;
 
    border-left: 1px solid #34819e;
 
    border-right: 1px solid #35829f;
 
    border-bottom: 1px solid #257897;
 
    color: #FFFFFF;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> box / tables
 
----------------------------------------------------------- */
 
 
#content div.box div.table
 
{
 
	margin: 0;
 
	padding: 0 20px 10px 20px;
 
    clear: both;
 
    overflow: hidden;
 
}
 
 
#content div.box table
 
{
 
    margin: 0;
 
    padding: 0;
 
    width: 100%;
 
    border-collapse: collapse;
 
}
 
 
#content div.box table th
 
{
 
    padding: 10px;
 
	background: #eeeeee;
 
    border-bottom: 1px solid #dddddd;
 
}
 
 
#content div.box table th.left
 
{
 
    text-align: left;   
 
}
 
 
#content div.box table th.right
 
{
 
    text-align: right;   
 
}
 
 
#content div.box table th.center
 
{
 
    text-align: center;   
 
}
 
 
#content div.box table th.selected
 
{
 
	padding: 0;
 
	vertical-align: middle;
 
}
 
 
#content div.box table th.selected input
 
{
 
	margin: 0;	
 
}
 
 
#content div.box table td
 
{
 
    padding: 5px;
 
	background: #ffffff;
 
    border-bottom: 1px solid #cdcdcd;
 
    vertical-align:middle;
 
}
 
 
#content div.box table tr.selected td
 
{
 
    background: #FFFFCC;
 
}
 
 
#content div.box table td.selected
 
{
 
	padding: 0;
 
    width: 3%;
 
    text-align: center;
 
	vertical-align: middle;
 
}
 
 
#content div.box table td.selected input
 
{
 
	margin: 0;	
 
}
 
 
#content div.box table td.action
 
{
 
	width: 45%;
 
	text-align: left;
 
}
 
 
#content div.box table td.user
 
{
 
	width: 10%;
 
	text-align: center;
 
}
 
 
#content div.box table td.date
 
{
 
	width: 33%;
 
	text-align: center;
 
}
 
 
#content div.box table td.address
 
{
 
	width: 10%;
 
	text-align: center;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> box / table action
 
----------------------------------------------------------- */
 
 
#content div.box div.action
 
{
 
	margin: 10px 0 0 0;
 
	padding: 0;
 
	float: right;
 
	background: #FFFFFF;
 
	text-align: right;
 
}
 
 
#content div.box div.action a:hover
 
{
 
    color: #000000;
 
    text-decoration: none;
 
}
 
 
#content div.box div.action select
 
{
 
    margin: 0;
 
	font-family: Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
 
	font-size: 11px;
 
}
 
 
#content div.box div.action div.button
 
{
 
	margin: 6px 0 0 0;
 
	padding: 0;
 
	text-align: right;
 
}
 
 
#content div.box div.action div.button input
 
{
 
	margin: 0;
 
	color: #000000;
 
	font-family: Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
 
	font-size: 11px;
 
	font-weight: bold;
 
}
 
 
#content div.box div.action div.button input.ui-state-default
 
{
 
    margin: 0;
 
    padding: 6px 12px 6px 12px;
 
    background: #e5e3e3 url("../images/button.png") repeat-x;
 
    border-top: 1px solid #DDDDDD;
 
    border-left: 1px solid #c6c6c6;
 
    border-right: 1px solid #DDDDDD;
 
    border-bottom: 1px solid #c6c6c6;
 
    color: #515151;
 
}
 
 
#content div.box div.action div.button input.ui-state-hover
 
{
 
    margin: 0;
 
    padding: 6px 12px 6px 12px;
 
    background: #b4b4b4 url("../images/button_selected.png") repeat-x;
 
    border-top: 1px solid #cccccc;
 
    border-left: 1px solid #bebebe;
 
    border-right: 1px solid #b1b1b1;
 
    border-bottom: 1px solid #afafaf;
 
    color: #515151;
 
}
 
 
#content div.box div.action .ui-selectmenu  
 
{
 
 	margin: 0;
 
	padding: 0;
 
}
 
 
#content div.box div.action a.ui-selectmenu-focus
 
{
 
	border: 1px solid #666666;
 
}
 
 
#content div.box div.action a.ui-selectmenu-focus span.ui-icon
 
{
 
	background-image: url(../images/ui/ui-icons_222222_256x240.png);
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> pagination
 
----------------------------------------------------------- */
 
 
#content div.box div.pagination
 
{
 
    margin: 10px 0 0 0;
 
    padding: 0;
 
    height: 1%;
 
    clear: both;
 
    overflow: hidden;
 
}
 
 
#content div.box div.pagination div.results
 
{
 
    margin: 0;
 
    padding: 0;
 
    text-align: left;
 
    float: left
 
}
 
 
#content div.box div.pagination div.results span 
 
{
 
    margin: 0;
 
    padding: 6px 8px 6px 8px;
 
    height: 1%;
 
    display: block;
 
    float: left;
 
    background: #ebebeb url("../images/pager.png") repeat-x;
 
    border-top: 1px solid #dedede;
 
    border-left: 1px solid #cfcfcf;
 
    border-right: 1px solid #c4c4c4;
 
    border-bottom: 1px solid #c4c4c4;
 
	color: #4A4A4A;
 
	font-weight: bold;
 
}
 
 
#content div.box div.pagination ul.pager
 
{
 
    margin: 0;
 
    padding: 0;
 
    float: right;
 
    text-align: right;
 
}
 
 
#content div.box div.pagination ul.pager li
 
{
 
    margin: 0 0 0 4px;
 
    padding: 0;
 
    height: 1%;
 
    float: left;
 
    list-style: none;
 
    background: #ebebeb url("../images/pager.png") repeat-x;
 
    border-top: 1px solid #dedede;
 
    border-left: 1px solid #cfcfcf;
 
    border-right: 1px solid #c4c4c4;
 
    border-bottom: 1px solid #c4c4c4;
 
	color: #4A4A4A;
 
    font-weight: bold;
 
}
 
 
#content div.box div.pagination ul.pager li.separator
 
{
 
    padding: 6px;   
 
}
 
 
@@ -3253,384 +3254,393 @@ table.code-browser .browser-dir {
 
    padding-top: 1px;
 
    text-align: left;
 
}
 
 
.delete_icon {
 
    background: url("/images/icons/delete.png") no-repeat scroll 3px;
 
    height: 16px;
 
    padding-left: 20px;
 
    padding-top: 1px;
 
    text-align: left;
 
}
 
 
.rss_icon {
 
    background: url("/images/icons/rss_16.png") no-repeat scroll 3px;
 
    height: 16px;
 
    padding-left: 20px;
 
    padding-top: 1px;
 
    text-align: left;
 
}
 
 
.atom_icon {
 
    background: url("/images/icons/atom.png") no-repeat scroll 3px;
 
    height: 16px;
 
    padding-left: 20px;
 
    padding-top: 1px;
 
    text-align: left;
 
}
 
 
.archive_icon {
 
    background: url("/images/icons/compress.png") no-repeat scroll 3px;
 
    height: 16px;
 
    padding-left: 20px;
 
    text-align: left;
 
    padding-top: 1px;
 
}
 
 
 
 
 
.action_button {
 
    border: 0px;
 
    display: block;
 
}
 
 
.action_button:hover {
 
    border: 0px;
 
    font-style: italic;
 
    cursor: pointer;
 
}
 
 
/* -----------------------------------------------------------
 
    REPO SWITCHER
 
----------------------------------------------------------- */
 
 
#switch_repos{
 
	position: absolute;
 
	height: 25px;
 
	z-index: 1;
 
}
 
/* -----------------------------------------------------------
 
    BREADCRUMBS
 
----------------------------------------------------------- */
 
 
.breadcrumbs{
 
	border:medium none;
 
	color:#FFFFFF;
 
	float:left;
 
	margin:0;
 
	padding:11px 0 11px 10px;
 
	text-transform:uppercase;
 
    font-weight: bold;
 
    font-size: 14px;
 
}
 
.breadcrumbs a{
 
 color: #FFFFFF;
 
}
 
 
 
/* -----------------------------------------------------------
 
    FLASH MSG
 
----------------------------------------------------------- */
 
.flash_msg ul {
 
    margin: 0;
 
    padding: 0px 0px 10px 0px;
 
}
 
 
.error_msg {
 
    background-color: #FFCFCF;
 
    background-image: url("/images/icons/error_msg.png");
 
    border: 1px solid #FF9595;
 
    color: #CC3300;
 
}
 
 
.warning_msg {
 
    background-color: #FFFBCC;
 
    background-image: url("/images/icons/warning_msg.png");
 
    border: 1px solid #FFF35E;
 
    color: #C69E00;
 
}
 
 
.success_msg {
 
    background-color: #D5FFCF;
 
    background-image: url("/images/icons/success_msg.png");
 
    border: 1px solid #97FF88;
 
    color: #009900;
 
}
 
 
.notice_msg {
 
    background-color: #DCE3FF;
 
    background-image: url("/images/icons/notice_msg.png");
 
    border: 1px solid #93A8FF;
 
    color: #556CB5;
 
}
 
 
.success_msg,.error_msg,.notice_msg,.warning_msg {
 
    background-position: 10px center;
 
    background-repeat: no-repeat;
 
    font-size: 12px;
 
    font-weight: bold;
 
    min-height: 14px;
 
    line-height: 14px;
 
    margin-bottom: 0px;
 
    margin-top: 0px;
 
    padding: 6px 10px 6px 40px;
 
    display: block;
 
    overflow: auto;
 
}
 
 
#msg_close {
 
    background: transparent url("icons/cross_grey_small.png") no-repeat
 
        scroll 0 0;
 
    cursor: pointer;
 
    height: 16px;
 
    position: absolute;
 
    right: 5px;
 
    top: 5px;
 
    width: 16px;
 
}
 
/* -----------------------------------------------------------
 
	YUI FLOT
 
----------------------------------------------------------- */
 
 
div#commit_history{
 
	float: left;
 
}
 
div#legend_data{
 
	float:left;
 
	
 
}
 
div#legend_container {
 
	float: left;
 
}
 
 
div#legend_container table,div#legend_choices table{
 
	width:auto !important;
 
}
 
 
div#legend_container table td{
 
	border: none !important;
 
	padding: 2px !important;
 
}
 
 
div#legend_choices table td{
 
	border: none !important;
 
	padding: 0px !important;
 
}
 
 
div#legend_choices{
 
	float:left;
 
}
 
 
/* -----------------------------------------------------------
 
    PERMISSIONS TABLE
 
----------------------------------------------------------- */
 
table#permissions_manage{
 
    width: 0 !important;
 
 
}
 
table#permissions_manage span.private_repo_msg{
 
    font-size: 0.8em;
 
    opacity:0.6;
 
    
 
}
 
table#permissions_manage td.private_repo_msg{
 
    font-size: 0.8em;
 
    
 
}
 
table#permissions_manage tr#add_perm_input td{
 
    vertical-align:middle;
 
 
}
 
 
/* -----------------------------------------------------------
 
    GRAVATARS
 
----------------------------------------------------------- */
 
.gravatar_box img{
 
 	float:left;
 
 	padding-right: 5px;
 
 	padding-top:3px;
 
}
 
 
 
/* -----------------------------------------------------------
 
	jquery ui
 
----------------------------------------------------------- */
 
 
.ui-helper-hidden { display: none; }
 
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
 
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
 
 
/* -----------------------------------------------------------
 
	jquery ui -> icons
 
----------------------------------------------------------- */
 
 
.ui-icon { width: 16px; height: 16px; background-image: url(../images/ui/ui-icons_222222_256x240.png); }
 
.ui-widget-content .ui-icon {background-image: url(../images/ui/ui-icons_222222_256x240.png); }
 
.ui-widget-header .ui-icon {background-image: url(../images/ui/ui-icons_222222_256x240.png); }
 
.ui-state-default .ui-icon { background-image: url(../images/ui/ui-icons_ef8c08_256x240.png); }
 
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon { background-image: url(../images/ui/ui-icons_ef8c08_256x240.png); }
 
.ui-state-active .ui-icon {background-image: url(../images/ui/ui-icons_ef8c08_256x240.png); }
 
.ui-state-highlight .ui-icon {background-image: url(../images/ui/ui-icons_228ef1_256x240.png); }
 
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(../images/ui/ui-icons_ffd27a_256x240.png); }
 
 
/* -----------------------------------------------------------
 
	jquery ui -> icon positioning
 
----------------------------------------------------------- */
 
.ui-icon-carat-1-n { background-position: 0 0; }
 
.ui-icon-carat-1-ne { background-position: -16px 0; }
 
.ui-icon-carat-1-e { background-position: -32px 0; }
 
.ui-icon-carat-1-se { background-position: -48px 0; }
 
.ui-icon-carat-1-s { background-position: -64px 0; }
 
.ui-icon-carat-1-sw { background-position: -80px 0; }
 
.ui-icon-carat-1-w { background-position: -96px 0; }
 
.ui-icon-carat-1-nw { background-position: -112px 0; }
 
.ui-icon-carat-2-n-s { background-position: -128px 0; }
 
.ui-icon-carat-2-e-w { background-position: -144px 0; }
 
.ui-icon-triangle-1-n { background-position: 0 -16px; }
 
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
 
.ui-icon-triangle-1-e { background-position: -32px -16px; }
 
.ui-icon-triangle-1-se { background-position: -48px -16px; }
 
.ui-icon-triangle-1-s { background-position: -64px -16px; }
 
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
 
.ui-icon-triangle-1-w { background-position: -96px -16px; }
 
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
 
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
 
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
 
.ui-icon-arrow-1-n { background-position: 0 -32px; }
 
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
 
.ui-icon-arrow-1-e { background-position: -32px -32px; }
 
.ui-icon-arrow-1-se { background-position: -48px -32px; }
 
.ui-icon-arrow-1-s { background-position: -64px -32px; }
 
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
 
.ui-icon-arrow-1-w { background-position: -96px -32px; }
 
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
 
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
 
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
 
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
 
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
 
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
 
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
 
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
 
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
 
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
 
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
 
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
 
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
 
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
 
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
 
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
 
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
 
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
 
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
 
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
 
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
 
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
 
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
 
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
 
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
 
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
 
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
 
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
 
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
 
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
 
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
 
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
 
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
 
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
 
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
 
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
 
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
 
.ui-icon-arrow-4 { background-position: 0 -80px; }
 
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
 
.ui-icon-extlink { background-position: -32px -80px; }
 
.ui-icon-newwin { background-position: -48px -80px; }
 
.ui-icon-refresh { background-position: -64px -80px; }
 
.ui-icon-shuffle { background-position: -80px -80px; }
 
.ui-icon-transfer-e-w { background-position: -96px -80px; }
 
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
 
.ui-icon-folder-collapsed { background-position: 0 -96px; }
 
.ui-icon-folder-open { background-position: -16px -96px; }
 
.ui-icon-document { background-position: -32px -96px; }
 
.ui-icon-document-b { background-position: -48px -96px; }
 
.ui-icon-note { background-position: -64px -96px; }
 
.ui-icon-mail-closed { background-position: -80px -96px; }
 
.ui-icon-mail-open { background-position: -96px -96px; }
 
.ui-icon-suitcase { background-position: -112px -96px; }
 
.ui-icon-comment { background-position: -128px -96px; }
 
.ui-icon-person { background-position: -144px -96px; }
 
.ui-icon-print { background-position: -160px -96px; }
 
.ui-icon-trash { background-position: -176px -96px; }
 
.ui-icon-locked { background-position: -192px -96px; }
 
.ui-icon-unlocked { background-position: -208px -96px; }
 
.ui-icon-bookmark { background-position: -224px -96px; }
 
.ui-icon-tag { background-position: -240px -96px; }
 
.ui-icon-home { background-position: 0 -112px; }
 
.ui-icon-flag { background-position: -16px -112px; }
 
.ui-icon-calendar { background-position: -32px -112px; }
 
.ui-icon-cart { background-position: -48px -112px; }
 
.ui-icon-pencil { background-position: -64px -112px; }
 
.ui-icon-clock { background-position: -80px -112px; }
 
.ui-icon-disk { background-position: -96px -112px; }
 
.ui-icon-calculator { background-position: -112px -112px; }
 
.ui-icon-zoomin { background-position: -128px -112px; }
 
.ui-icon-zoomout { background-position: -144px -112px; }
 
.ui-icon-search { background-position: -160px -112px; }
 
.ui-icon-wrench { background-position: -176px -112px; }
 
.ui-icon-gear { background-position: -192px -112px; }
 
.ui-icon-heart { background-position: -208px -112px; }
 
.ui-icon-star { background-position: -224px -112px; }
 
.ui-icon-link { background-position: -240px -112px; }
 
.ui-icon-cancel { background-position: 0 -128px; }
 
.ui-icon-plus { background-position: -16px -128px; }
 
.ui-icon-plusthick { background-position: -32px -128px; }
 
.ui-icon-minus { background-position: -48px -128px; }
 
.ui-icon-minusthick { background-position: -64px -128px; }
 
.ui-icon-close { background-position: -80px -128px; }
 
.ui-icon-closethick { background-position: -96px -128px; }
 
.ui-icon-key { background-position: -112px -128px; }
 
.ui-icon-lightbulb { background-position: -128px -128px; }
 
.ui-icon-scissors { background-position: -144px -128px; }
 
.ui-icon-clipboard { background-position: -160px -128px; }
 
.ui-icon-copy { background-position: -176px -128px; }
 
.ui-icon-contact { background-position: -192px -128px; }
 
.ui-icon-image { background-position: -208px -128px; }
 
.ui-icon-video { background-position: -224px -128px; }
 
.ui-icon-script { background-position: -240px -128px; }
 
.ui-icon-alert { background-position: 0 -144px; }
 
.ui-icon-info { background-position: -16px -144px; }
 
.ui-icon-notice { background-position: -32px -144px; }
 
.ui-icon-help { background-position: -48px -144px; }
 
.ui-icon-check { background-position: -64px -144px; }
 
.ui-icon-bullet { background-position: -80px -144px; }
 
.ui-icon-radio-off { background-position: -96px -144px; }
 
.ui-icon-radio-on { background-position: -112px -144px; }
 
.ui-icon-pin-w { background-position: -128px -144px; }
 
.ui-icon-pin-s { background-position: -144px -144px; }
 
.ui-icon-play { background-position: 0 -160px; }
 
.ui-icon-pause { background-position: -16px -160px; }
 
.ui-icon-seek-next { background-position: -32px -160px; }
 
.ui-icon-seek-prev { background-position: -48px -160px; }
 
.ui-icon-seek-end { background-position: -64px -160px; }
 
.ui-icon-seek-start { background-position: -80px -160px; }
 
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
 
.ui-icon-seek-first { background-position: -80px -160px; }
 
.ui-icon-stop { background-position: -96px -160px; }
 
.ui-icon-eject { background-position: -112px -160px; }
 
.ui-icon-volume-off { background-position: -128px -160px; }
 
.ui-icon-volume-on { background-position: -144px -160px; }
 
.ui-icon-power { background-position: 0 -176px; }
 
.ui-icon-signal-diag { background-position: -16px -176px; }
 
.ui-icon-signal { background-position: -32px -176px; }
 
.ui-icon-battery-0 { background-position: -48px -176px; }
 
.ui-icon-battery-1 { background-position: -64px -176px; }
 
.ui-icon-battery-2 { background-position: -80px -176px; }
 
.ui-icon-battery-3 { background-position: -96px -176px; }
 
.ui-icon-circle-plus { background-position: 0 -192px; }
 
.ui-icon-circle-minus { background-position: -16px -192px; }
 
.ui-icon-circle-close { background-position: -32px -192px; }
 
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
 
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
 
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
 
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
 
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
 
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
 
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
 
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
 
.ui-icon-circle-zoomin { background-position: -176px -192px; }
 
.ui-icon-circle-zoomout { background-position: -192px -192px; }
 
.ui-icon-circle-check { background-position: -208px -192px; }
 
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
 
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
 
.ui-icon-circlesmall-close { background-position: -32px -208px; }
 
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
pylons_app/templates/admin/users/user_edit.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('User administration')}
 
</%def>
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(_('Admin'),h.url('admin_home'))} 
 
    &raquo; 
 
    ${h.link_to(_('Users'),h.url('users'))} 
 
    &raquo;
 
    ${_('edit')} "${c.user.username}"
 
</%def>
 

	
 
<%def name="page_nav()">
 
	${self.menu('admin')}
 
</%def>
 

	
 
<%def name="main()">
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}       
 
    </div>
 
    <!-- end box / title -->
 
    ${h.form(url('user', id=c.user.user_id),method='put')}
 
    <div class="form">
 
        <!-- fields -->
 
        <div class="fields">
 
             <div class="field">
 
                <div class="gravatar_box">
 
              		<img alt="gravatar" src="${h.gravatar_url(c.user.email)}"/>
 
              		<p>
 
              		<strong>Change your avatar at <a href="http://gravatar.com">gravatar.com</a></strong><br/> 
 
              		${_('Using')} ${c.user.email}
 
              		</p>
 
            	</div>
 
             </div>        
 
        
 
             <div class="field">
 
                <div class="label">
 
                    <label for="username">${_('Username')}:</label>
 
                </div>
 
                <div class="input">
 
                    ${h.text('username')}
 
                </div>
 
             </div>
 
            
 
             <div class="field">
 
                <div class="label">
 
                    <label for="new_password">${_('New password')}:</label>
 
                </div>
 
                <div class="input">
 
                    ${h.password('new_password')}
 
                </div>
 
             </div>
 
            
 
             <div class="field">
 
                <div class="label">
 
                    <label for="name">${_('Name')}:</label>
 
                </div>
 
                <div class="input">
 
                    ${h.text('name')}
 
                </div>
 
             </div>
 
            
 
             <div class="field">
 
                <div class="label">
 
                    <label for="lastname">${_('Lastname')}:</label>
 
                </div>
 
                <div class="input">
 
                    ${h.text('lastname')}
 
                </div>
 
             </div>
 
            
 
             <div class="field">
 
                <div class="label">
 
                    <label for="email">${_('Email')}:</label>
 
                </div>
 
                <div class="input">
 
                    ${h.text('email')}
 
                </div>
 
             </div>
 
            
 
             <div class="field">
 
                <div class="label label-checkbox">
 
                    <label for="active">${_('Active')}:</label>
 
                </div>
 
                <div class="checkboxes">
 
                    ${h.checkbox('active',value=True)}
 
                </div>
 
             </div>
 
             
 
             <div class="field">
 
                <div class="label label-checkbox">
 
                    <label for="admin">${_('Admin')}:</label>
 
                </div>
 
                <div class="checkboxes">
 
                    ${h.checkbox('admin',value=True)}
 
                </div>
 
             </div>             
 
            
 
            <div class="buttons">
 
              ${h.submit('save','save',class_="ui-button ui-widget ui-state-default ui-corner-all")}
 
            </div>             
 
    	</div>    
 
    </div>
 
    ${h.end_form()}
 
</div>    
 
</%def>  
 
\ No newline at end of file
pylons_app/templates/admin/users/users.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Users administration')}
 
</%def>
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Users')}
 
</%def>
 

	
 
<%def name="page_nav()">
 
	${self.menu('admin')}
 
</%def>
 

	
 
<%def name="main()">
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
        <ul class="links">
 
          <li>
 
            <span>${h.link_to(u'ADD NEW USER',h.url('new_user'),class_="add_icon")}</span>
 
          </li>
 
          
 
        </ul>        
 
    </div>
 
    <!-- end box / title -->
 
    <div class="table">
 
        <table class="table_disp">
 
        <tr class="header">
 
        	<th></th>
 
            <th class="left">${_('username')}</th>
 
            <th class="left">${_('name')}</th>
 
            <th class="left">${_('lastname')}</th>
 
            <th class="left">${_('active')}</th>
 
            <th class="left">${_('admin')}</th>
 
            <th class="left">${_('action')}</th>
 
        </tr>
 
            %for cnt,user in enumerate(c.users_list):
 
             %if user.name !='default':
 
                <tr class="parity${cnt%2}">
 
                	<td> <img alt="gravatar" src="${h.gravatar_url(user.email)}"> </td>
 
                    <td>${h.link_to(user.username,h.url('edit_user', id=user.user_id))}</td>
 
                    <td>${user.name}</td>
 
                    <td>${user.lastname}</td>
 
                    <td>${user.active}</td>
 
                    <td>${user.admin}</td>
 
                    <td>
 
                        ${h.form(url('user', id=user.user_id),method='delete')}
 
                            ${h.submit('remove','delete',class_="delete_icon action_button")}
 
                        ${h.end_form()}
 
                    </td>
 
                </tr>
 
             %endif
 
            %endfor
 
        </table>
 
    </div>
 
</div>
 
</%def>
0 comments (0 inline, 0 general)