Changeset - 558eb7c5028f
[Not reviewed]
Marcin Kuzminski - 15 years ago 2010-07-24 02:17:48
marcin@python-works.com
version bump to 0.8
hg app 0.8 new template.
Add yui flot and graph into summary page.
+ various tweeks and patches into look of application
80 files changed with 8559 insertions and 2231 deletions:
0 comments (0 inline, 0 general)
pylons_app/__init__.py
Show inline comments
 
@@ -15,21 +15,21 @@
 
# 
 
# You should have received a copy of the GNU General Public License
 
# along with this program; if not, write to the Free Software
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 
# MA  02110-1301, USA.
 

	
 
"""
 
Created on April 9, 2010
 
Hg app, a web based mercurial repository managment based on pylons
 
@author: marcink
 
"""
 

	
 
VERSION = (0, 7, 9, 'beta')
 
VERSION = (0, 8, 0, 'beta')
 

	
 
__version__ = '.'.join((str(each) for each in VERSION[:4]))
 

	
 
def get_version():
 
    """
 
    Returns shorter version (digit parts only) as string.
 
    """
 
    return '.'.join((str(each) for each in VERSION[:3]))
pylons_app/controllers/summary.py
Show inline comments
 
#!/usr/bin/env python
 
# encoding: utf-8
 
# summary controller for pylons
 
# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
 
 
 
# 
 
# This program is free software; you can redistribute it and/or
 
# modify it under the terms of the GNU General Public License
 
# as published by the Free Software Foundation; version 2
 
# of the License or (at your opinion) any later version of the license.
 
# 
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
# 
 
# You should have received a copy of the GNU General Public License
 
# along with this program; if not, write to the Free Software
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 
# MA  02110-1301, USA.
 
"""
 
Created on April 18, 2010
 
summary controller for pylons
 
@author: marcink
 
"""
 
from datetime import datetime, timedelta
 
from pylons import tmpl_context as c, request
 
from pylons_app.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from pylons_app.lib.base import BaseController, render
 
from pylons_app.lib.helpers import person
 
from pylons_app.lib.utils import OrderedDict
 
from pylons_app.model.hg_model import HgModel
 
from time import mktime
 
from webhelpers.paginate import Page
 
import calendar
 
import logging
 

	
 
log = logging.getLogger(__name__)
 

	
 
class SummaryController(BaseController):
 
    
 
    @LoginRequired()
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
 
                                   'repository.admin')           
 
    def __before__(self):
 
        super(SummaryController, self).__before__()
 
                
 
    def index(self):
 
        hg_model = HgModel()
 
@@ -47,14 +53,86 @@ class SummaryController(BaseController):
 
                                        'protocol': e.get('wsgi.url_scheme'),
 
                                        'user':str(c.hg_app_user.username),
 
                                        'host':e.get('HTTP_HOST'),
 
                                        'repo_name':c.repo_name, }
 
        c.clone_repo_url = uri
 
        c.repo_tags = {}
 
        for name, hash in c.repo_info.tags.items()[:10]:
 
            c.repo_tags[name] = c.repo_info.get_changeset(hash)
 
        
 
        c.repo_branches = {}
 
        for name, hash in c.repo_info.branches.items()[:10]:
 
            c.repo_branches[name] = c.repo_info.get_changeset(hash)
 
                    
 

	
 
        c.commit_data = self.__get_commit_stats(c.repo_info)
 
        
 
        return render('summary/summary.html')
 

	
 

	
 

	
 
    def __get_commit_stats(self, repo):
 
        aggregate = OrderedDict()
 
        
 
        
 
        #graph range
 
        td = datetime.today() 
 
        y = td.year
 
        m = td.month
 
        d = td.day
 
        c.ts_min = mktime((y, (td - timedelta(days=calendar.mdays[m] - 1)).month, d, 0, 0, 0, 0, 0, 0,))
 
        c.ts_max = mktime((y, m, d, 0, 0, 0, 0, 0, 0,))
 
        
 
        
 
#        #generate this monhts keys
 
#        dates_range = OrderedDict()
 
#        year_range = range(2010, datetime.today().year + 1)
 
#        month_range = range(1, datetime.today().month + 1)
 
#        
 
#
 
#        
 
#        for y in year_range:
 
#            for m in month_range:
 
#                for d in range(1, calendar.mdays[m] + 1):
 
#                    k = '%s-%s-%s' % (y, m, d)
 
#                    timetupple = [int(x) for x in k.split('-')]
 
#                    timetupple.extend([0 for _ in xrange(6)])
 
#                    k = mktime(timetupple)                    
 
#                    dates_range[k] = 0
 
        
 
        def author_key_cleaner(k):
 
            k = person(k)
 
            return k
 
                
 
        for cs in repo:
 
            k = '%s-%s-%s' % (cs.date.timetuple()[0], cs.date.timetuple()[1],
 
                              cs.date.timetuple()[2])
 
            timetupple = [int(x) for x in k.split('-')]
 
            timetupple.extend([0 for _ in xrange(6)])
 
            k = mktime(timetupple)
 
            if aggregate.has_key(author_key_cleaner(cs.author)):
 
                if aggregate[author_key_cleaner(cs.author)].has_key(k):
 
                    aggregate[author_key_cleaner(cs.author)][k] += 1
 
                else:
 
                    #aggregate[author_key_cleaner(cs.author)].update(dates_range)
 
                    if k >= c.ts_min and k <= c.ts_max:
 
                        aggregate[author_key_cleaner(cs.author)][k] = 1
 
            else:
 
                if k >= c.ts_min and k <= c.ts_max:
 
                    aggregate[author_key_cleaner(cs.author)] = OrderedDict()
 
                    #aggregate[author_key_cleaner(cs.author)].update(dates_range)
 
                    aggregate[author_key_cleaner(cs.author)][k] = 1
 
        
 
        d = ''
 
        tmpl0 = u""""%s":%s"""
 
        tmpl1 = u"""{label:"%s",data:%s},"""
 
        for author in aggregate:
 
            d += tmpl0 % (author.decode('utf8'),
 
                          tmpl1 \
 
                          % (author.decode('utf8'),
 
                        [[x, aggregate[author][x]] for x in aggregate[author]]))
 
        if d == '':
 
            d = '"%s":{label:"%s",data:[[0,0],]}' \
 
                % (author_key_cleaner(repo.contact),
 
                   author_key_cleaner(repo.contact))
 
        return d
 

	
 

	
pylons_app/lib/base.py
Show inline comments
 
@@ -6,25 +6,25 @@ from pylons import config, tmpl_context 
 
from pylons.controllers import WSGIController
 
from pylons.templating import render_mako as render
 
from pylons_app.lib import auth
 
from pylons_app.lib.utils import get_repo_slug
 
from pylons_app.model import meta
 
from pylons_app.model.hg_model import _get_repos_cached
 
from pylons_app import __version__
 

	
 
class BaseController(WSGIController):
 
    
 
    def __before__(self):
 
        c.hg_app_version = __version__
 
        c.repos_prefix = config['hg_app_name']
 
        c.hg_app_name = config['hg_app_name']
 
        c.repo_name = get_repo_slug(request)
 
        c.hg_app_user = auth.get_user(session)
 
        c.cached_repo_list = _get_repos_cached()
 
        self.sa = meta.Session
 
    
 
    def __call__(self, environ, start_response):
 
        """Invoke the Controller"""
 
        # WSGIController.__call__ dispatches to the Controller method
 
        # the request is routed to. This routing information is
 
        # available in environ['pylons.routes_dict']
 
        try:
 
            return WSGIController.__call__(self, environ, start_response)
pylons_app/public/css/colors/blue.css
Show inline comments
 
new file 100644
 
/* -----------------------------------------------------------
 
    header
 
----------------------------------------------------------- */ 
 

	
 
#header #header-inner
 
{
 
    background: #b0b0b0 url("../../images/colors/blue/header_inner.png") repeat-x;
 
}
 

	
 
/* -----------------------------------------------------------
 
    header -> home
 
----------------------------------------------------------- */ 
 

	
 
#header #header-inner #home a
 
{
 
    background: url("../../images/colors/blue/button_home.png");
 
}
 

	
 
/* -----------------------------------------------------------
 
    header -> quick
 
----------------------------------------------------------- */
 

	
 
#header #header-inner #quick li a
 
{
 
    background: #336699 url("../../images/colors/blue/quick_l.png") no-repeat top left;
 
}
 

	
 
#header #header-inner #quick li span
 
{
 
    background: url("../../images/colors/blue/quick_r.png") no-repeat top right;
 
    border-left: 1px solid #3f6f9f;
 
}
 

	
 
#header #header-inner #quick li span.icon
 
{
 
    background: url("../../images/colors/blue/quick_l.png") no-repeat top left;
 
    border-right: 1px solid #2e5c89;
 
}
 

	
 
#header #header-inner #quick li a:hover
 
{
 
    background: #4e4e4e url("../../images/colors/blue/quick_l_selected.png") no-repeat top left;
 
}
 

	
 
#header #header-inner #quick li a:hover span
 
{
 
    background: url("../../images/colors/blue/quick_r_selected.png") no-repeat top right;
 
}
 

	
 
#header #header-inner #quick li a:hover span.icon
 
{
 
    background: url("../../images/colors/blue/quick_l_selected.png") no-repeat top left;
 
}
 

	
 
/* -----------------------------------------------------------
 
    header corners
 
----------------------------------------------------------- */ 
 

	
 
#header #header-inner div.corner
 
{
 
    background: url("../../images/colors/blue/header_inner_corners.png") no-repeat;
 
}
 

	
 
#header #header-inner div.tl
 
{
 
    top: 0;
 
    left: 0;
 
    background-position: 0 0;
 
}
 

	
 
#header #header-inner div.tr
 
{
 
    top: 0;
 
    right: 0;
 
    background-position: -6px 0;
 
}
 

	
 
/* -----------------------------------------------------------
 
    content -> left -> menu
 
----------------------------------------------------------- */ 
 

	
 
#content #left #menu h6.selected
 
{
 
    background: #00376e url("../../images/colors/blue/menu_selected.png") repeat-x;
 
}
 

	
 
#content #left #menu h6.selected a
 
{
 
    background: url("../../images/colors/blue/menu_l_selected.png") no-repeat top left;
 
}
 

	
 
#content #left #menu h6.selected span
 
{
 
    background: url("../../images/colors/blue/menu_r_selected.png") no-repeat top right;
 
}
 

	
 
#content #left #menu ul
 
{
 
    background: #376ea6;
 
}
 

	
 
#content #left #menu li
 
{
 
    border-top: 1px solid #4377ab;
 
    border-bottom: 1px solid #326395;
 
}
 

	
 
#content #left #menu li a
 
{
 
    background: url("../../images/colors/blue/menu_arrow.png") no-repeat 0 9px;
 
}
 

	
 
#content #left #menu li a:hover
 
{
 
    color: #b9dcff;
 
}
 

	
 
#content #left #menu li.collapsible
 
{
 
    background: url("../../images/colors/blue/menu_border.png") no-repeat top left;
 
}
 

	
 
#content #left #menu li.collapsible a.minus
 
{
 
    border-bottom: 1px solid #326395;
 
}
 

	
 
#content #left #menu li ul
 
{
 
    border-left: 18px solid #326395;
 
}
 

	
 
#content #left #menu li ul li
 
{
 
    background: url("../../images/colors/blue/menu_arrow.png") no-repeat 10px 9px;
 
    border-top: 1px solid #4377ab;
 
    border-bottom: 1px solid #326395;
 
}
 

	
 
/* -----------------------------------------------------------
 
    content -> right -> box / title
 
----------------------------------------------------------- */
 

	
 
#content div.box div.title
 
{
 
    background: #336699 url("../../images/colors/blue/title.png") repeat-x;
 
}
 

	
 
#content div.box div.title ul.links li a
 
{
 
    background: url("../../images/colors/blue/title_link.png") no-repeat top left;
 
    border-left: 1px solid #316293;
 
}
 

	
 
#content div.box div.title ul.links li a:hover
 
{
 
    background: url("../../images/colors/blue/title_tab_selected.png") no-repeat bottom center;
 
    color: #bfe3ff;
 
}
 

	
 
#content div.box div.title ul.links li.ui-tabs-selected a
 
{
 
    background: url("../../images/colors/blue/title_tab_selected.png") no-repeat bottom center;
 
    color: #bfe3ff;
 
}
 

	
 
/* -----------------------------------------------------------
 
    content -> right -> box / search
 
----------------------------------------------------------- */ 
 

	
 
#content div.box div.title div.search
 
{
 
    background: url("../../images/colors/blue/title_link.png") no-repeat top left;
 
    border-left: 1px solid #316293;
 
}
 

	
 
#content div.box div.title div.search div.input input
 
{
 
    border: 1px solid #316293;
 
}
 

	
 
#content div.box div.title div.search div.button input.ui-state-default
 
{
 
    background: #4e85bb url("../../images/colors/blue/button_highlight.png") repeat-x;
 
    border: 1px solid #316293;
 
    border-left: none;
 
    color: #FFFFFF;
 
}
 

	
 
#content div.box div.title div.search div.button input.ui-state-hover
 
{
 
    background: #46a0c1 url("../../images/colors/blue/button_highlight_selected.png") repeat-x;
 
    border: 1px solid #316293;
 
    border-left: none;
 
    color: #FFFFFF;
 
}
 

	
 
/* -----------------------------------------------------------
 
    content -> right -> forms -> button
 
----------------------------------------------------------- */
 

	
 
#content div.box div.form div.fields div.field div.highlight .ui-state-default
 
{
 
    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.field div.highlight .ui-state-hover
 
{
 
    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 div.highlight input.ui-state-default
 
{
 
    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
 
{
 
    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;
 
}
 

	
 
/* -----------------------------------------------------------
 
    login -> title
 
----------------------------------------------------------- */ 
 

	
 
#login div.title
 
{
 
    background: #003367 url("../../images/colors/blue/header_inner.png") repeat-x;
 
}
 

	
 
/* -----------------------------------------------------------
 
    login -> title / corners
 
----------------------------------------------------------- */ 
 

	
 
#login div.title div.corner
 
{
 
    background: url("../../images/colors/blue/login_corners.png") no-repeat;
 
}
 

	
 
#login div.title div.tl
 
{
 
    top: 0;
 
    left: 0;
 
    background-position: 0 0;
 
}
 

	
 
#login div.title div.tr
 
{
 
    top: 0;
 
    right: 0;
 
    background-position: -6px 0;
 
}
 

	
 
/* -----------------------------------------------------------
 
    jquery ui -> select styling
 
----------------------------------------------------------- */
 

	
 
.ui-selectmenu-open li.ui-selectmenu-item-focus { background: #376ea6; }
 
.ui-selectmenu-open li.ui-selectmenu-item-focus a { color: #ffffff; }
 

	
 
/* -----------------------------------------------------------
 
    jquery ui -> datepicker
 
----------------------------------------------------------- */
 
.ui-datepicker td span, .ui-datepicker td a:hover { background: #376ea6; color: #ffffff; }
 
.ui-datepicker td span, .ui-datepicker td.ui-datepicker-current-day a { background: #376ea6; color: #ffffff; }
 

	
 
/* -----------------------------------------------------------
 
    jquery ui -> autocomplete
 
----------------------------------------------------------- */
 

	
 
.ui-autocomplete .ui-menu-item a:hover { background: #376ea6; color: #ffffff; }
 

	
 
/* -----------------------------------------------------------
 
    jquery ui -> dialog
 
----------------------------------------------------------- */
 

	
 
.ui-dialog { border: 1px solid #336699; }
 
.ui-dialog .ui-dialog-titlebar { background: #336699 url("../../images/colors/blue/title.png") repeat-x; }
 
\ No newline at end of file
pylons_app/public/css/diff.css
Show inline comments
 
@@ -17,32 +17,40 @@ div.diffblock .code-header{
 
div.diffblock .code-header div{
 
	margin-left:25px;
 
	font-weight: bold;
 
}
 
div.diffblock .code-body{
 
	background: #FFFFFF;
 
}
 
div.diffblock pre.raw{
 
	background: #FFFFFF;
 
	color:#000000;
 
}
 

	
 
.code-difftable{
 
table.code-difftable{
 
	border-collapse: collapse;
 
	width: 99%;
 
}
 
.code-difftable td:target *{
 
table.code-difftable td:target *{
 
	background:  repeat scroll 0 0 #FFFFBE !important;
 
	text-decoration: underline;
 
}
 

	
 
table.code-difftable td {
 
    padding: 0 !important; 
 
    background: none !important; 
 
    border:0 !important;    
 
}
 

	
 

	
 
.code-difftable .context{
 
	background:none repeat scroll 0 0 #DDE7EF;
 
}
 
.code-difftable .add{
 
	background:none repeat scroll 0 0 #DDFFDD;
 
}
 
.code-difftable .add ins{
 
	background:none repeat scroll 0 0 #AAFFAA;
 
	text-decoration:none;
 
}
 

	
 
.code-difftable .del{
 
@@ -73,25 +81,24 @@ div.diffblock pre.raw{
 
.code-difftable .lineno a{
 
	color:#0000CC !important;
 
}
 
.code-difftable .code td{
 
	margin:0;
 
	padding: 0;
 
}
 
.code-difftable .code pre{
 
	margin:0;
 
	padding:0;
 
}
 

	
 

	
 
.code { 
 
	display: block;
 
	width: 100%;
 
}
 
.code-diff {
 
    padding: 0px;
 
    margin-top: 5px;
 
    margin-bottom: 5px;
 
    border-left: 2px solid #ccc;
 
}
 
.code-diff pre, .line pre { 
 
	padding: 3px;
pylons_app/public/css/monoblue_custom.css
Show inline comments
 
deleted file
pylons_app/public/css/pygments.css
Show inline comments
 
@@ -13,24 +13,33 @@ div.codeblock .code-header{
 
	background: #EEEEEE;
 
	color:blue;
 
	padding:10px 0 10px 0;
 
}
 
div.codeblock .code-header .revision{
 
	margin-left:25px;
 
	font-weight: bold;
 
}
 
div.codeblock .code-header .commit{
 
	margin-left:25px;
 
	font-weight: normal;
 
}
 
div.codeblock .code-body table{
 
    width: 0 !important;    
 
}
 

	
 
div.annotatediv{
 
	margin-left:2px;
 
	margin-right:4px;
 
}
 

	
 

	
 
.code-highlight {
 
    padding: 0px;
 
    margin-top: 5px;
 
    margin-bottom: 5px;
 
    border-left: 2px solid #ccc;
 
}
 
.code-highlight pre, .linenodiv pre { 
 
	padding: 5px;
 
    margin: 0;
 
}
 
.linenos a { text-decoration: none; }
pylons_app/public/css/reset.css
Show inline comments
 
new file 100644
 
/* http://meyerweb.com/eric/tools/css/reset/ */
 
/* v1.0 | 20080212 */
 

	
 
html, body, div, span, applet, object, iframe,
 
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
 
a, abbr, acronym, address, big, cite, code,
 
del, dfn, em, font, img, ins, kbd, q, s, samp,
 
small, strike, strong, sub, sup, tt, var,
 
b, u, i, center,
 
dl, dt, dd, ol, ul, li,
 
fieldset, form, label, legend,
 
table, caption, tbody, tfoot, thead, tr, th, td {
 
	margin: 0;
 
	padding: 0;
 
	border: 0;
 
	outline: 0;
 
	font-size: 100%;
 
	vertical-align: baseline;
 
	background: transparent;
 
}
 
body {
 
	line-height: 1;
 
}
 
ol, ul {
 
	list-style: none;
 
}
 
blockquote, q {
 
	quotes: none;
 
}
 
blockquote:before, blockquote:after,
 
q:before, q:after {
 
	content: '';
 
	content: none;
 
}
 

	
 
/* remember to define focus styles! */
 
:focus {
 
	outline: 0;
 
}
 

	
 
/* remember to highlight inserts somehow! */
 
ins {
 
	text-decoration: none;
 
}
 
del {
 
	text-decoration: line-through;
 
}
 

	
 
/* tables still need 'cellspacing="0"' in the markup */
 
table {
 
	border-collapse: collapse;
 
	border-spacing: 0;
 
}
 
\ No newline at end of file
pylons_app/public/css/style.css
Show inline comments
 
new file 100644
 
/* -----------------------------------------------------------
 
	main stylesheet
 
----------------------------------------------------------- */ 
 
 
html
 
{
 
    height: 100%;  
 
}
 
 
body
 
{
 
	margin: 0;
 
	padding: 0;
 
    height: 100%;
 
	background: #d1d1d1 url("../images/background.png") repeat;
 
	font-family: Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
 
	font-size: 11px;
 
}
 
 
/* -----------------------------------------------------------
 
	images
 
----------------------------------------------------------- */ 
 
 
img
 
{
 
	border: none;	
 
}
 
 
/* -----------------------------------------------------------
 
	anchors
 
----------------------------------------------------------- */ 
 
 
a
 
{
 
	color: #0066CC;	
 
	text-decoration: none;
 
	cursor: pointer;
 
}
 
 
a:hover
 
{
 
	color: #000000;	
 
	text-decoration: underline;
 
}
 
 
/* -----------------------------------------------------------
 
	headings
 
----------------------------------------------------------- */ 
 
 
h1, h2, h3, h4, h5, h6
 
{
 
    color: #292929;
 
    font-weight: bold;
 
}
 
 
h1
 
{
 
    font-size: 22px;
 
}
 
 
h2
 
{
 
    font-size: 20px;
 
}
 
 
h3
 
{
 
    font-size: 18px;  
 
}
 
 
h4
 
{
 
    font-size: 16px;
 
}
 
 
h5
 
{
 
    font-size: 14px; 
 
}
 
 
h6
 
{
 
    font-size: 11px; 
 
}
 
 
/* -----------------------------------------------------------
 
	lists
 
----------------------------------------------------------- */ 
 
 
ul.circle { list-style-type: circle; }
 
ul.disc { list-style-type: disc; }
 
ul.square { list-style-type: square; }
 
ol.lower-roman { list-style-type: lower-roman; }
 
ol.upper-roman { list-style-type: upper-roman; }
 
ol.lower-alpha { list-style-type: lower-alpha; }
 
ol.upper-alpha { list-style-type: upper-alpha; }
 
ol.decimal  { list-style-type: decimal; }
 
 
/* -----------------------------------------------------------
 
	colors
 
----------------------------------------------------------- */ 
 
 
div.color
 
{
 
    margin: 7px 0 0 60px;
 
    padding: 1px 1px 1px 0px;
 
	clear: both;
 
	overflow: hidden;
 
    position: absolute;
 
    background: #FFFFFF;
 
}
 
 
div.color a
 
{
 
    margin: 0 0 0 1px;
 
    padding: 0;
 
    width: 15px;
 
    height: 15px;
 
    display: block;
 
    float: left;
 
}
 
 
div.color a.blue
 
{
 
    background: #376ea6;
 
}
 
 
div.color a.green
 
{
 
    background: #85924b;
 
}
 
 
div.color a.brown
 
{
 
    background: #9b6e42;
 
}
 
 
div.color a.purple
 
{
 
    background: #88528b;
 
}
 
 
div.color a.red
 
{
 
    background: #bd3220;
 
}
 
 
div.color a.greyblue
 
{
 
    background: #566e86;
 
}
 
 
/* -----------------------------------------------------------
 
	options
 
----------------------------------------------------------- */ 
 
 
div.options
 
{
 
    margin: 7px 0 0 162px;
 
    padding: 0;
 
	clear: both;
 
	overflow: hidden;
 
    position: absolute;
 
    background: #FFFFFF;
 
}
 
 
div.options a
 
{
 
	margin: 0;
 
    padding: 3px 8px 3px 8px;
 
    height: 1%;
 
    display: block;
 
	text-decoration: none;	
 
}
 
 
div.options a:hover
 
{
 
	text-decoration: none;	
 
}
 
 
/* -----------------------------------------------------------
 
	header
 
----------------------------------------------------------- */ 
 
 
#header
 
{
 
	margin: 0;
 
	padding: 0 60px 0 60px;
 
	background: #b0b0b0 url("../images/header_background.png") repeat;
 
}
 
 
 
/* -----------------------------------------------------------
 
	header -> user
 
----------------------------------------------------------- */ 
 
 
#header ul#logged-user
 
{
 
	margin: 0;
 
	padding: 0;
 
	float: right;
 
}
 
 
#header ul#logged-user li
 
{
 
	margin: 0;
 
	padding: 10px 12px 10px 12px;
 
	list-style: none;
 
	float: left;
 
	border-left: 1px solid #bbbbbb;
 
	border-right: 1px solid #a5a5a5;
 
}
 
 
#header ul#logged-user li.first
 
{
 
	border-left: none;	
 
}
 
 
#header ul#logged-user li.last
 
{
 
	border-right: none;	
 
}
 
 
#header ul#logged-user li a
 
{
 
	color: #4e4e4e;
 
	font-weight: bold;
 
	text-decoration: none;
 
}
 
 
#header ul#logged-user li a:hover
 
{
 
	color: #376ea6;
 
	text-decoration: underline;
 
}
 
 
#header ul#logged-user li.highlight a
 
{
 
	color: #ffffff;
 
}
 
 
#header ul#logged-user li.highlight a:hover
 
{
 
	color: #376ea6;
 
}
 
 
#header #header-inner
 
{
 
	margin: 0;
 
	padding: 0;
 
	height: 40px;
 
	clear: both;
 
	position: relative;
 
	background: #003367 url("../images/colors/blue/header_inner.png") repeat-x;
 
	border-bottom: 6px solid #ffffff;
 
}
 
 
/* -----------------------------------------------------------
 
	header -> home
 
----------------------------------------------------------- */ 
 
 
#header #header-inner #home
 
{
 
	float: left;	
 
}
 
 
#header #header-inner #home a
 
{
 
	margin: 0;
 
	padding: 0;
 
	height: 40px;
 
	width: 46px;
 
	display: block;
 
	background: url("../images/colors/blue/button_home.png");
 
	background-position: 0 0;	
 
}
 
 
#header #header-inner #home a:hover
 
{
 
	background-position: 0 -40px;	
 
}
 
 
/* -----------------------------------------------------------
 
	header -> logo
 
----------------------------------------------------------- */ 
 
 
#header #header-inner #logo
 
{
 
	float: left;	
 
}
 
 
#header #header-inner #logo h1
 
{
 
	margin: 13px 0 0 13px;
 
	padding: 0;
 
	color: #FFFFFF;
 
	font-size: 14px;
 
	text-transform: uppercase;	
 
}
 
 
#header #header-inner #logo a
 
{
 
	color: #ffffff;
 
	text-decoration: none;	
 
}
 
 
#header #header-inner #logo a:hover
 
{
 
	color: #dabf29;
 
}
 
 
/* -----------------------------------------------------------
 
	header -> quick
 
----------------------------------------------------------- */ 
 

	
 
#header #header-inner #quick,
 
#header #header-inner #quick ul
 
{
 
	margin: 10px 5px 0 0;
 
	padding: 0;
 
	position: relative;
 
	float: right;
 
	list-style-type: none;
 
	list-style-position: outside;
 
}
 
 
#header #header-inner #quick li
 
{
 
	margin: 0 4px 0 0;
 
	padding: 0;
 
	position: relative;
 
	float: left;
 
}
 
 
#header #header-inner #quick li a
 
{
 
	top: 0;
 
	left: 0;
 
	padding: 0;
 
	height: 1%;
 
	display: block;
 
	clear: both;
 
	overflow: hidden;
 
	background: #336699 url("../images/colors/blue/quick_l.png") no-repeat top left;
 
	color: #FFFFFF;
 
	font-weight: bold;
 
	text-decoration: none;
 
}
 
 
#header #header-inner #quick li span
 
{
 
	top: 0;
 
	right: 0;
 
	margin: 0;
 
	padding: 10px 12px 8px 10px;
 
	height: 1%;
 
	display: block;
 
	float: left;
 
	background: url("../images/colors/blue/quick_r.png") no-repeat top right;
 
	border-left: 1px solid #3f6f9f;
 
}
 
 
#header #header-inner #quick li span.icon
 
{
 
	top: 0;
 
	left: 0;
 
	padding: 8px 8px 4px 8px;
 
	background: url("../images/colors/blue/quick_l.png") no-repeat top left;
 
	border-left: none;
 
	border-right: 1px solid #2e5c89;
 
}
 
 
#header #header-inner #quick li a:hover
 
{
 
	background: #4e4e4e;
 
}
 
 
#header #header-inner #quick li a:hover span
 
{
 
	background: url("../images/colors/blue/quick_r_selected.png") no-repeat top right;
 
	border-left: 1px solid #545454;
 
}
 
 
#header #header-inner #quick li a:hover span.icon
 
{
 
	background: url("../images/colors/blue/quick_l_selected.png") no-repeat top left;
 
	border-left: none;
 
	border-right: 1px solid #464646;
 
}
 
 
#header #header-inner #quick ul
 
{
 
	top: 29px;
 
	right: 0;
 
	margin: 0;
 
	padding: 0;
 
	width: 200px;
 
	display: none;
 
    position: absolute;
 
	background: #FFFFFF;
 
	border: 1px solid #666;
 
    border-top: 1px solid #003367;
 
}
 

	
 
#header #header-inner #quick li ul li
 
{
 
	border-bottom: 1px solid #dddddd;	
 
}
 

	
 
#header #header-inner #quick li ul li.last
 
{
 
	border: none;	
 
}
 
 
#header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover
 
{
 
	margin: 0;
 
	padding: 12px 9px 7px 28px;
 
	width: 167px;
 
	background: #FFFFFF url("../images/icons/folder_edit.png") no-repeat 8px 9px;
 
}
 
#header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover
 
{
 
	margin: 0;
 
	padding: 12px 9px 7px 28px;
 
	width: 167px;
 
	background: #FFFFFF url("../images/icons/user_edit.png") no-repeat 8px 9px;
 
}
 
#header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover
 
{
 
	margin: 0;
 
	padding: 12px 9px 7px 28px;
 
	width: 167px;
 
	background: #FFFFFF url("../images/icons/cog.png") no-repeat 8px 9px;
 
}
 
 
#header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover
 
{
 
	margin: 0;
 
	padding: 12px 9px 7px 28px;
 
	width: 167px;
 
	background: #FFFFFF url("../images/icons/key.png") no-repeat 8px 9px;
 
}
 

	
 
#header #header-inner #quick li ul li a
 
{
 
	margin: 0;
 
	padding: 7px 9px 7px 9px;
 
	height: 1%;
 
	width: 182px;
 
	height: auto;
 
	display: block;
 
	float: left;
 
	background: #FFFFFF;
 
	color: #0066CC;
 
	font-weight: normal;
 
}
 
 
#header #header-inner #quick li ul li a:hover
 
{
 
	color: #000000;
 
	background: #FFFFFF;
 
}
 

	
 
#header #header-inner #quick ul ul 
 
{
 
	top: auto;
 
}	
 

	
 
#header #header-inner #quick li ul ul 
 
{
 
	right: 200px;
 
}
 

	
 
#header #header-inner #quick li:hover ul ul, 
 
#header #header-inner #quick li:hover ul ul ul, 
 
#header #header-inner #quick li:hover ul ul ul ul 
 
{
 
	display: none;
 
}
 

	
 
#header #header-inner #quick li:hover ul, 
 
#header #header-inner #quick li li:hover ul, 
 
#header #header-inner #quick li li li:hover ul, 
 
#header #header-inner #quick li li li li:hover ul
 
{
 
	display: block;
 
}
 
 
/* -----------------------------------------------------------
 
	header corners
 
----------------------------------------------------------- */ 
 
 
#header #header-inner div.corner
 
{
 
	height: 6px;
 
	width: 6px;
 
	position: absolute;
 
	background: url("../images/colors/blue/header_inner_corners.png") no-repeat;
 
}
 
 
#header #header-inner div.tl
 
{
 
	top: 0;
 
	left: 0;
 
    background-position: 0 0;
 
}
 
 
#header #header-inner div.tr
 
{
 
	top: 0;
 
	right: 0;
 
    background-position: -6px 0;
 
}
 
 
/* -----------------------------------------------------------
 
	content
 
----------------------------------------------------------- */ 
 
 
#content 
 
{
 
	margin: 10px 0 0 0;
 
	padding: 0;
 
    min-height: 100%;
 
	clear: both;
 
	overflow: hidden;
 
	background: url("../images/content.png") repeat-y top left;	
 
}
 
 
/* -----------------------------------------------------------
 
	content -> left
 
----------------------------------------------------------- */ 
 
 
#content #left
 
{
 
	left: 0;
 
	width: 280px;
 
	position: absolute;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> left -> menu
 
----------------------------------------------------------- */ 
 
 
#content #left #menu
 
{
 
	margin: 5px 10px 0 60px;
 
	padding: 0;
 
	clear: both;
 
	overflow: hidden;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> left -> menu / heading
 
----------------------------------------------------------- */ 
 
 
#content #left #menu h6
 
{
 
	margin: 5px 0 0 0;
 
	padding: 0;
 
	clear: both;
 
	overflow: hidden;
 
	background: #dfdfdf url("../images/menu.png") repeat-x;
 
	color: #6e6e6e;
 
}
 
 
#content #left #menu h6 a
 
{
 
	margin: 0;
 
	padding: 0;
 
	height: 1%;
 
	display: block;
 
    clear: both;
 
    overflow: hidden;
 
	background: url("../images/menu_l.png") no-repeat top left;
 
	color: #6e6e6e;
 
	text-decoration: none;
 
}
 
 
#content #left #menu h6 span
 
{
 
	margin: 0;
 
	padding: 9px 10px 10px 10px;
 
	height: 1%;
 
	display: block;
 
	background: url("../images/menu_r.png") no-repeat top right;
 
}
 
 
#content #left #menu h6.selected
 
{
 
	background: #00376e url("../images/colors/blue/menu_selected.png") repeat-x;
 
	color: #FFFFFF;
 
}
 
 
#content #left #menu h6.selected a
 
{
 
	background: url("../images/colors/blue/menu_l_selected.png") no-repeat top left;
 
	color: #ffffff;
 
}
 
 
#content #left #menu h6.selected span
 
{
 
	background: url("../images/colors/blue/menu_r_selected.png") no-repeat top right;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> left -> menu / links
 
----------------------------------------------------------- */
 
 
#content #left #menu ul
 
{
 
	margin: 0;
 
	padding: 0;
 
	background: #376ea6;
 
}
 
 
#content #left #menu ul.opened
 
{
 
	display: block;	
 
}
 
 
#content #left #menu ul.closed
 
{
 
	display: none;	
 
}
 
 
#content #left #menu li
 
{
 
	margin: 0;
 
	padding: 0;
 
	clear: both;
 
	overflow: hidden;
 
	list-style: none;
 
	border-bottom: 1px solid #5f8bb7;
 
	color: #ffffff;
 
}
 
 
#content #left #menu li a
 
{
 
	margin: 0 0 0 6px;
 
	padding: 8px 0 8px 18px;
 
	height: 1%;
 
	display: block;
 
	float: left;
 
	background: url("../images/colors/colors/blue/menu_arrow.png") no-repeat 0 9px;
 
	color: #ffffff;
 
	text-decoration: none;
 
}
 
 
#content #left #menu li a:hover
 
{
 
	color: #b9dcff;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> left -> menu / collapsible
 
----------------------------------------------------------- */ 
 
 
#content #left #menu li.collapsible
 
{
 
	background: url("../images/colors/blue/menu_border.png") no-repeat top left;
 
}
 
 
#content #left #menu li.collapsible a
 
{
 
	margin: 0 0 0 6px;
 
	padding: 8px 0 8px 0;
 
	height: 1%;
 
	display: block;
 
	background: transparent;
 
	float: left;
 
	font-weight: bold;
 
}
 
 
#content #left #menu li.collapsible a.plus
 
{
 
	margin: 0;
 
	padding: 8px 0 9px 24px;
 
	height: 10px;
 
	width: 10px;
 
	display: block;
 
	float: left;
 
	background: url("../images/menu_plus.png") no-repeat 5px 10px;
 
	border: none;
 
}
 
 
#content #left #menu li.collapsible a.minus
 
{
 
	margin: 0;
 
	padding: 8px 0 9px 24px;
 
	height: 10px;
 
	width: 10px;
 
	display: block;
 
	float: left;
 
	background: url("../images/menu_minus.png") no-repeat 5px 10px;
 
	border: none;
 
}
 
 
#content #left #menu li ul
 
{
 
	margin: 0;
 
	padding: 0;
 
	border-left: 18px solid #285889;
 
}
 
 
#content #left #menu li ul.expanded
 
{
 
	display: block;	
 
}
 
 
#content #left #menu li ul.collapsed
 
{
 
	display: none;	
 
}
 
 
#content #left #menu li ul li
 
{
 
	margin: 0;
 
	padding: 0;
 
	clear: both;
 
	overflow: hidden;
 
	list-style: none;
 
	border-bottom: 1px solid #5f8bb7;
 
	color: #ffffff;
 
}
 
 
#content #left #menu li.collapsible ul li a
 
{
 
	font-weight: normal;
 
}
 
 
#content #left #menu li.last
 
{
 
	border-bottom: none;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> left -> date picker
 
----------------------------------------------------------- */ 
 
 
#content #left #date-picker
 
{
 
	margin: 10px 10px 0 60px;
 
	padding: 0;
 
	clear: both;
 
	overflow: hidden;
 
}
 
 
#content #left #date-picker .ui-datepicker  
 
{
 
	width: auto; 
 
	padding: 0; 
 
	clear: both;
 
	overflow: hidden;
 
	background: #FFFFFF; 
 
	border: 1px solid #d1d1d1; 
 
}
 
 
#content #left #date-picker .ui-datepicker .ui-datepicker-header  
 
{
 
	padding: 5px 0;
 
}
 
 
#content #left #date-picker .ui-datepicker .ui-datepicker-prev
 
{
 
	top: 5px;
 
	left: 4px;
 
}
 
 
#content #left #date-picker .ui-datepicker .ui-datepicker-next  
 
{
 
	top: 5px;
 
	right: 4px;
 
}
 
 
#content #left #date-picker .ui-datepicker .ui-datepicker-prev-hover
 
{
 
	top: 5px;
 
	left: 4px;
 
}
 
 
#content #left #date-picker .ui-datepicker .ui-datepicker-next-hover  
 
{
 
	top: 5px;
 
	right: 4px;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right
 
----------------------------------------------------------- */ 
 
 
#content #right
 
{
 
	margin: 0 60px 10px 290px;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> box
 
----------------------------------------------------------- */
 
 
#content div.box
 
{
 
	margin: 0 0 10px 0;
 
	padding: 0 0 10px 0;
 
	clear: both;
 
	overflow: hidden;
 
	background: #ffffff;
 
}
 
 
#content div.box-left
 
{
 
	margin: 0 0 10px;
 
	width: 49%;
 
	clear: none;
 
	float: left;	
 
}
 
 
#content div.box-right
 
{
 
	margin: 0 0 10px;
 
	width: 49%;
 
	clear: none;
 
	float: right;	
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> box / title
 
----------------------------------------------------------- */
 
 
#content div.box div.title
 
{
 
	margin: 0 0 20px 0;
 
	padding: 0;
 
	clear: both;
 
	overflow: hidden;
 
	background: #336699 url("../images/colors/blue/title.png") repeat-x;
 
}
 
 
#content div.box div.title h5
 
{
 
	margin: 0;
 
	padding: 11px 0 11px 10px;
 
	float: left;
 
	border: none;
 
	color: #ffffff;
 
	text-transform: uppercase;
 
}
 
 
#content div.box div.title ul.links
 
{
 
	margin: 0;
 
	padding: 0;
 
	float: right;
 
}
 
 
#content div.box div.title ul.links li
 
{
 
	margin: 0;
 
	padding: 0;
 
	list-style: none;
 
	float: left;
 
}
 
 
#content div.box div.title ul.links li a
 
{
 
	margin: 0;
 
	padding: 13px 16px 12px 16px;
 
	height: 1%;
 
	display: block;
 
	float: left;
 
	background: url("../images/colors/blue/title_link.png") no-repeat top left;
 
	border-left: 1px solid #316293;
 
	color: #ffffff;
 
	font-size: 11px;
 
	font-weight: bold;
 
	text-decoration: none;
 
}
 
 
#content div.box div.title ul.links li a:hover
 
{
 
	color: #bfe3ff;
 
}
 
 
#content div.box div.title ul.links li.ui-tabs-selected a
 
{
 
	background: url("../../../resources/images/colors/blue/title_tab_selected.png") no-repeat bottom center;
 
	color: #bfe3ff;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> box / headings
 
----------------------------------------------------------- */
 
 
#content div.box h1,
 
#content div.box h2,
 
#content div.box h3,
 
#content div.box h4,
 
#content div.box h5,
 
#content div.box h6
 
{
 
    margin: 10px 20px 10px 20px;
 
    padding: 0 0 15px 0;
 
    clear: both;
 
    overflow: hidden;
 
    border-bottom: 1px solid #DDDDDD;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> box / paragraphs
 
----------------------------------------------------------- */
 
 
#content div.box p
 
{
 
    margin: 0 24px 10px 24px;
 
    padding: 0;
 
    color: #5f5f5f;
 
    font-size: 12px;
 
    line-height: 150%;
 
}
 
 
#content div.box blockquote
 
{
 
    margin: 0 34px 0 34px;
 
    padding: 0 0 0 14px;
 
    border-left: 4px solid #DDDDDD;
 
    color: #5f5f5f;
 
    font-size: 11px;
 
    line-height: 150%;
 
}
 
 
#content div.box blockquote p
 
{
 
    margin: 10px 0 10px 0;
 
    padding: 0; 
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> box / lists
 
----------------------------------------------------------- */
 
 
#content div.box dl
 
{
 
    margin: 10px 24px 10px 24px;	
 
}
 
 
#content div.box dt
 
{
 
	margin: 0;
 
    font-size: 12px; 
 
}
 
 
#content div.box dd
 
{
 
	margin: 0;
 
	padding: 8px 0 8px 15px;
 
    font-size: 12px; 
 
}
 
 
#content div.box ul.left
 
{
 
    float: left;    
 
}
 
 
#content div.box ol.left
 
{
 
    float: left;    
 
}
 
 
#content div.box li
 
{
 
    padding: 4px 0 4px 0;
 
    font-size: 12px;  
 
}
 
 
#content div.box ol.lower-roman, 
 
#content div.box ol.upper-roman 
 
{
 
    margin: 10px 24px 10px 44px;
 
}
 
 
#content div.box ol.lower-alpha, 
 
#content div.box ol.upper-alpha
 
{
 
    margin: 10px 24px 10px 44px;
 
}
 
 
#content div.box ol.decimal
 
{
 
    margin: 10px 24px 10px 44px;
 
}
 
 
#content div.box ul.disc,
 
#content div.box ul.circle
 
{
 
    margin: 10px 24px 10px 38px;
 
}
 
 
#content div.box ul.square  
 
{
 
    margin: 10px 24px 10px 40px; 
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> box / images
 
----------------------------------------------------------- */
 
 
#content div.box img.left
 
{
 
    margin: 10px 10px 10px 0;
 
	border: none;
 
	float: left;
 
}
 
 
#content div.box img.right
 
{
 
    margin: 10px 0 10px 10px;
 
	border: none;
 
	float: right;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> box / messages
 
----------------------------------------------------------- */ 
 
 
#content div.box div.messages
 
{
 
	margin: 0 20px 0 20px;
 
    padding: 0;
 
	clear: both;
 
	overflow: hidden;
 
}
 
 
#content div.box div.message
 
{
 
	margin: 0 0 10px 0;
 
    padding: 0;
 
	clear: both;
 
	overflow: hidden;
 
}
 
 
#content div.box div.message div.image
 
{
 
	margin: 9px 0 0 5px;
 
	padding: 6px;
 
	float: left;
 
}
 
 
#content div.box div.message div.image img
 
{
 
    margin: 0;
 
    vertical-align: middle;
 
}
 
 
#content div.box div.message div.text
 
{
 
    margin: 0;
 
    padding: 9px 6px 9px 6px;
 
    float: left;
 
}
 
 
#content div.box div.message div.dismiss
 
{
 
    margin: 0;
 
    padding: 0;
 
    float: right;
 
}
 
 
#content div.box div.message div.dismiss a
 
{
 
	margin: 15px 14px 0 0;
 
	padding: 0;
 
	height: 16px;
 
	width: 16px;
 
	display: block;
 
	background: url("../images/icons/cross.png") no-repeat;
 
}
 
 
#content div.box div.message div.text h1,
 
#content div.box div.message div.text h2,
 
#content div.box div.message div.text h3,
 
#content div.box div.message div.text h4,
 
#content div.box div.message div.text h5,
 
#content div.box div.message div.text h6
 
{
 
    margin: 0;
 
    padding: 0px;
 
    border: none;
 
}
 
 
#content div.box div.message div.text span
 
{
 
    margin: 0;
 
    padding: 5px 0 0 0;
 
    height: 1%;
 
    display: block;
 
}
 
 
#content div.box div.message-error
 
{
 
    height: 1%;
 
	clear: both;
 
	overflow: hidden;
 
	background: #FBE3E4;
 
    border: 1px solid #FBC2C4;
 
	color: #860006;
 
}
 
 
#content div.box div.message-error h6
 
{
 
	color: #860006;
 
}
 
 
#content div.box div.message-warning
 
{
 
    height: 1%;
 
	clear: both;
 
	overflow: hidden;
 
    background: #FFF6BF;
 
    border: 1px solid #FFD324;
 
    color: #5f5200;
 
}
 
 
#content div.box div.message-warning h6
 
{
 
    color: #5f5200;
 
}
 
 
#content div.box div.message-notice
 
{
 
    height: 1%;
 
	clear: both;
 
	overflow: hidden;
 
    background: #8FBDE0;
 
    border: 1px solid #6BACDE;
 
    color: #003863;
 
}
 
 
#content div.box div.message-notice h6
 
{
 
    color: #003863;
 
}
 
 
#content div.box div.message-success
 
{
 
    height: 1%;
 
	clear: both;
 
	overflow: hidden;
 
    background: #E6EFC2;
 
    border: 1px solid #C6D880;
 
    color: #4e6100;
 
}
 
 
#content div.box div.message-success h6
 
{
 
    color: #4e6100;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> box / forms
 
----------------------------------------------------------- */
 
 
#content div.box div.form
 
{
 
	margin: 0;
 
	padding: 0 20px 10px 20px;
 
    clear: both;
 
    overflow: hidden;
 
}
 
 
#content div.box div.form div.fields
 
{
 
	margin: 0;
 
	padding: 0;
 
    clear: both;
 
    overflow: hidden;
 
}
 
 
#content div.box div.form div.fields div.field
 
{
 
	margin: 0;
 
	padding: 10px 0 10px 0; 
 
	height: 1%;
 
	border-bottom: 1px solid #DDDDDD;
 
	clear: both;
 
	overflow: hidden;
 
}
 
 
#content div.box div.form div.fields div.field-first
 
{
 
	padding: 0 0 10px 0; 
 
}
 
 
#content div.box div.form div.fields div.field span.error-message
 
{
 
	margin: 8px 0 0 0;
 
	padding: 0;
 
	height: 1%;
 
	display: block;
 
	color: #FF0000;
 
}
 
 
#content div.box div.form div.fields div.field span.success
 
{
 
	margin: 8px 0 0 0;
 
	padding: 0;
 
	height: 1%;
 
	display: block;
 
	color: #316309;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> labels
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.label
 
{
 
	left: 310px;
 
	margin: 0;
 
	padding: 8px 0 0 5px;
 
	width: auto;
 
	position: absolute;
 
}
 
 
#content div.box-left div.form div.fields div.field div.label,
 
#content div.box-right div.form div.fields div.field div.label
 
{
 
	left: 0;
 
	margin: 0;
 
	padding: 0 0 8px 0;
 
	width: auto;
 
	position: relative;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> label (select)
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.label-select
 
{
 
	padding: 2px 0 0 5px;
 
}
 
 
#content div.box-left div.form div.fields div.field div.label-select,
 
#content div.box-right div.form div.fields div.field div.label-select
 
{
 
	padding: 0 0 8px 0;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> label (checkbox)
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.label-checkbox
 
{
 
	padding: 0 0 0 5px;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> label (radio)
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.label-radio
 
{
 
	padding: 0 0 0 5px;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> label (textarea)
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.label-textarea
 
{
 
	padding: 0 0 0 5px;
 
}
 
 
#content div.box-left div.form div.fields div.field div.label-textarea,
 
#content div.box-right div.form div.fields div.field div.label-textarea
 
{
 
	padding: 0 0 8px 0;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> labels (label)
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.label label
 
{
 
    color: #393939;
 
    font-weight: bold;
 
}
 
 
#content div.box div.form div.fields div.field div.label span
 
{
 
	margin: 0;
 
	padding: 2px 0 0 0;
 
	height: 1%;
 
	display: block;
 
	color: #363636;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> input
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.input
 
{
 
	margin: 0 0 0 200px;
 
	padding: 0;
 
}
 
 
#content div.box-left div.form div.fields div.field div.input,
 
#content div.box-right div.form div.fields div.field div.input
 
{
 
	margin: 0;
 
    padding: 7px 7px 6px 7px;
 
    border-top: 1px solid #b3b3b3;
 
    border-left: 1px solid #b3b3b3;
 
    border-right: 1px solid #eaeaea;
 
    border-bottom: 1px solid #eaeaea;
 
}
 
 
#content div.box div.form div.fields div.field div.input input
 
{
 
    margin: 0;
 
    padding: 7px 7px 6px 7px;
 
    background: #FFFFFF;
 
    border-top: 1px solid #b3b3b3;
 
    border-left: 1px solid #b3b3b3;
 
    border-right: 1px solid #eaeaea;
 
    border-bottom: 1px solid #eaeaea;
 
    color: #000000;
 
	font-family: Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
 
	font-size: 11px;
 
}
 
 
#content div.box-left div.form div.fields div.field div.input input,
 
#content div.box-right div.form div.fields div.field div.input input
 
{
 
	width: 100%;
 
    padding: 0;
 
    border: none;
 
}
 
 
#content div.box div.form div.fields div.field div.input input.small
 
{
 
	width: 30%;	
 
}
 
 
#content div.box div.form div.fields div.field div.input input.medium
 
{
 
	width: 55%;	
 
}
 
 
#content div.box div.form div.fields div.field div.input input.large
 
{
 
	width: 85%;	
 
}
 
 
#content div.box div.form div.fields div.field div.input input.date
 
{
 
	width: 177px;	
 
}
 
 
#content div.box div.form div.fields div.field div.input input.button
 
{
 
    margin: 0;
 
    padding: 4px 8px 4px 8px;
 
    background: #D4D0C8;
 
    border-top: 1px solid #FFFFFF;
 
    border-left: 1px solid #FFFFFF;
 
    border-right: 1px solid #404040;
 
    border-bottom: 1px solid #404040;
 
    color: #000000;
 
}
 
 
#content div.box div.form div.fields div.field div.input input.error
 
{
 
	background: #FBE3E4;
 
	border-top: 1px solid #e1b2b3;
 
	border-left: 1px solid #e1b2b3;
 
	border-right: 1px solid #FBC2C4;
 
	border-bottom: 1px solid #FBC2C4;
 
}
 
 
#content div.box div.form div.fields div.field div.input input.success
 
{
 
	background: #E6EFC2;
 
	border-top: 1px solid #cebb98;
 
	border-left: 1px solid #cebb98;
 
	border-right: 1px solid #c6d880;
 
	border-bottom: 1px solid #c6d880;
 
}
 
 
#content div.box div.form div.fields div.field div.input img.ui-datepicker-trigger
 
{
 
    margin: 0 0 0 6px;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> input (file styling)
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.input a.ui-input-file
 
{
 
    margin: 0 0 0 6px;
 
    padding: 0;
 
    width: 28px;
 
    height: 28px;
 
    display: inline;
 
    position: absolute;
 
    overflow: hidden;
 
    cursor: pointer;
 
    background: #e5e3e3 url("../images/button_browse.png") no-repeat;
 
    border: none;
 
    text-decoration: none;
 
}
 
 
#content div.box div.form div.fields div.field div.input a:hover.ui-input-file
 
{
 
    background: #e5e3e3 url("../images/button_browse_selected.png") no-repeat;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> textarea
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.textarea
 
{
 
	margin: 0 0 0 200px;
 
	padding: 10px;
 
    border-top: 1px solid #b3b3b3;
 
    border-left: 1px solid #b3b3b3;
 
    border-right: 1px solid #eaeaea;
 
    border-bottom: 1px solid #eaeaea;
 
}
 
 
#content div.box div.form div.fields div.field div.textarea-editor
 
{
 
	padding: 0;
 
    border: 1px solid #dddddd;
 
}
 
 
#content div.box-left div.form div.fields div.field div.textarea,
 
#content div.box-right div.form div.fields div.field div.textarea
 
{
 
	margin: 0;
 
}
 
 
#content div.box div.form div.fields div.field div.textarea textarea
 
{
 
    margin: 0;
 
    padding: 0;
 
	width: 100%;
 
	height: 220px;
 
	overflow: hidden;
 
    background: #FFFFFF;
 
	border-width: 0;
 
    color: #000000;
 
	font-family: Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
 
	font-size: 11px;
 
    outline: none;
 
}
 
 
#content div.box-left div.form div.fields div.field div.textarea textarea,
 
#content div.box-right div.form div.fields div.field div.textarea textarea
 
{
 
	width: 100%;
 
	height: 100px;
 
}
 
 
#content div.box div.form div.fields div.field div.textarea textarea.error
 
{
 
    padding: 3px 10px 10px 23px;
 
	background-color: #FBE3E4;
 
	background-image: url("../../../resources/images/icons/exclamation.png");
 
	background-repeat: no-repeat;
 
	background-position: 3px 3px;
 
    border: 1px solid #FBC2C4;
 
}
 
 
#content div.box div.form div.fields div.field div.textarea textarea.success
 
{
 
    padding: 3px 10px 10px 23px;
 
	background-color: #E6EFC2;
 
	background-image: url("../../../resources/images/icons/accept.png");
 
	background-repeat: no-repeat;
 
	background-position: 3px 3px;
 
    border: 1px solid #C6D880;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> textarea (tinymce editor)
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.textarea table
 
{
 
	margin: 0;
 
	padding: 0;
 
	width: 100%;
 
	border: none;
 
}
 
 
#content div.box div.form div.fields div.field div.textarea table td
 
{
 
	padding: 0;
 
	background: #DDDDDD;
 
	border: none;	
 
}
 
 
#content div.box div.form div.fields div.field div.textarea table td table
 
{
 
	margin: 0;
 
	padding: 0;
 
	width: auto;
 
	border: none;
 
}
 
 
#content div.box div.form div.fields div.field div.textarea table td table td
 
{
 
	padding: 5px 5px 5px 0;
 
	font-family: Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
 
	font-size: 11px;
 
}
 
 
#content div.box div.form div.fields div.field div.textarea table td table td a
 
{
 
	border: none;	
 
}
 
 
#content div.box div.form div.fields div.field div.textarea table td table td a.mceButtonActive
 
{
 
	background: #b1b1b1;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> select
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.select
 
{
 
	margin: 0 0 0 200px;
 
	padding: 0;
 
}
 
 
#content div.box div.form div.fields div.field div.select a:hover
 
{
 
    color: #000000;
 
    text-decoration: none;
 
}
 
 
#content div.box div.form div.fields div.field div.select select
 
{
 
    margin: 0;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> select (jquery styling)
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus
 
{
 
	border: 1px solid #666666;
 
}
 
 
#content div.box div.form div.fields div.field div.select a.ui-selectmenu  
 
{
 
    color: #565656; 
 
    text-decoration: none;
 
}
 
 
#content div.box div.form div.fields div.field div.select a.ui-selectmenu:hover  
 
{
 
	color: #000000;
 
    text-decoration: none; 
 
}
 
 
#content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus span.ui-icon
 
{
 
	background-image: url(../images/ui/ui-icons_222222_256x240.png);
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> element focus
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field input[type=text]:focus, 
 
#content div.box div.form div.fields div.field input[type=password]:focus,
 
#content div.box div.form div.fields div.field input[type=file]:focus,
 
#content div.box div.form div.fields div.field textarea:focus,
 
#content div.box div.form div.fields div.field select:focus 
 
{
 
	background: #f6f6f6;
 
    border-color: #666;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> checkboxes
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.checkboxes
 
{
 
	margin: 0 0 0 200px;
 
	padding: 0;
 
}
 
 
#content div.box div.form div.fields div.field div.checkboxes div.checkbox
 
{
 
	margin: 0;
 
	padding: 2px 0 2px 0;
 
	clear: both;
 
	overflow: hidden;
 
}
 
 
#content div.box div.form div.fields div.field div.checkboxes div.checkbox input
 
{
 
	margin: 0;	
 
	float: left;
 
}
 
 
#content div.box div.form div.fields div.field div.checkboxes div.checkbox label
 
{
 
	margin: 3px 0 0 4px;
 
	height: 1%;
 
	display: block;
 
	float: left;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> radios
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.radios
 
{
 
	margin: 0 0 0 200px;
 
	padding: 0;
 
}
 
 
#content div.box div.form div.fields div.field div.radios div.radio
 
{
 
	margin: 0;
 
	padding: 2px 0 2px 0;
 
	clear: both;
 
	overflow: hidden;
 
}
 
 
#content div.box div.form div.fields div.field div.radios div.radio input
 
{
 
	margin: 0;	
 
	float: left;
 
}
 
 
#content div.box div.form div.fields div.field div.radios div.radio label
 
{
 
	margin: 3px 0 0 4px;
 
	height: 1%;
 
	display: block;
 
	float: left;
 
}
 
 
/* -----------------------------------------------------------
 
	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 (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;
 
}
 
 
#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;   
 
}
 
 
#content div.box div.pagination ul.pager li.current
 
{
 
    padding: 6px;   
 
    background: #b4b4b4 url("../images/pager_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.pagination ul.pager li.disabled
 
{
 
    padding: 6px;
 
    color: #B4B4B4;
 
}
 
 
#content div.box div.pagination ul.pager li a 
 
{
 
    margin: 0;
 
    padding: 6px;
 
    height: 1%;
 
    display: block;
 
    float: left;
 
    color: #515151;
 
	text-decoration: none;
 
}
 
 
#content div.box div.pagination ul.pager li a:hover, 
 
#content div.box div.pagination ul.pager li a:active 
 
{
 
    margin: -1px;
 
    background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
 
    border-top: 1px solid #cccccc;
 
    border-left: 1px solid #bebebe;
 
    border-right: 1px solid #b1b1b1;
 
    border-bottom: 1px solid #afafaf;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> webhelpers pagination
 
----------------------------------------------------------- */
 
 
#content div.box div.pagination-wh
 
{
 
    margin: 10px 0 0 0;
 
    padding: 0;
 
    height: 1%;
 
    clear: both;
 
    overflow: hidden;
 
    text-align: right;
 
}
 
 
#content div.box div.pagination-wh div.results
 
{
 
    margin: 0;
 
    padding: 0;
 
    text-align: left;
 
    float: left
 
}
 
 
#content div.box div.pagination-wh 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-left{
 
	float:left;
 
}
 
#content div.box div.pagination-right{
 
	float:right;
 
}
 
 
#content div.box div.pagination-wh a, 
 
#content div.box div.pagination-wh span.pager_dotdot
 
{
 
    margin: 0 0 0 4px;
 
    padding: 6px;
 
    height: 1%;
 
    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-wh span.pager_curpage
 
{
 
    margin: 0 0 0 4px;
 
    padding: 6px;
 
    height: 1%;
 
    float: left;
 
    background: #b4b4b4 url("../images/pager_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;
 
    font-weight: bold;    
 
}
 
 
#content div.box div.pagination-wh a.disabled
 
{
 
    padding: 6px;
 
    color: #B4B4B4;
 
}
 
 
 
#content div.box div.pagination-wh a:hover, 
 
#content div.box div.pagination-wh a:active 
 
{
 
    background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
 
    border-top: 1px solid #cccccc;
 
    border-left: 1px solid #bebebe;
 
    border-right: 1px solid #b1b1b1;
 
    border-bottom: 1px solid #afafaf;
 
    text-decoration: none;
 
}
 
 
 
/* -----------------------------------------------------------
 
	content -> right -> traffic chart
 
----------------------------------------------------------- */
 
 
#content div.box div.traffic
 
{
 
	margin: 0;
 
	padding: 0 20px 10px 20px;
 
    clear: both;
 
    overflow: hidden;
 
}
 
 
#content div.box div.traffic div.legend
 
{
 
	margin: 0 0 10px 0;
 
	padding: 0 0 10px 0;
 
	clear: both;
 
	overflow: hidden;
 
	border-bottom: 1px solid #dddddd;
 
}
 
 
#content div.box div.traffic div.legend h6
 
{
 
	margin: 0;
 
	padding: 0;
 
	float: left;
 
	border: none;
 
}
 
 
#content div.box div.traffic div.legend ul
 
{
 
	margin: 0;
 
	padding: 0;
 
	float: right;	
 
}
 
 
#content div.box div.traffic div.legend li
 
{
 
	margin: 0;
 
	padding: 0 8px 0 4px;
 
	list-style: none;
 
	float: left;
 
	font-size: 11px;
 
}
 
 
#content div.box div.traffic div.legend li.visits
 
{
 
	border-left: 12px solid #edc240;
 
}
 
 
#content div.box div.traffic div.legend li.pageviews
 
{
 
	border-left: 12px solid #afd8f8;
 
}
 
 
#content div.box div.traffic table
 
{
 
	width: auto;
 
}
 
 
#content div.box div.traffic table td
 
{
 
	padding: 2px 3px 3px 3px;
 
	background: transparent;
 
	border: none;
 
}
 
 
#content div.box div.traffic table td.legendLabel
 
{
 
	padding: 0 3px 2px 3px;
 
}
 
 
/* -----------------------------------------------------------
 
	footer
 
----------------------------------------------------------- */
 
 
#footer
 
{
 
    margin: 0;
 
    padding: 5px 0 5px 0;
 
    clear: both;
 
    overflow: hidden;
 
    background: #2a2a2a;
 
    text-align: right;
 
}
 
 
#footer p
 
{
 
    margin: 0 80px 0 80px;
 
    padding: 10px 0 10px 0;
 
    color: #ffffff;
 
}
 
 
/* -----------------------------------------------------------
 
	login
 
----------------------------------------------------------- */
 
 
#login
 
{
 
    margin: 10% auto 0 auto;
 
    padding: 0;
 
	width: 420px;
 
}
 
 
/* -----------------------------------------------------------
 
	login -> colors
 
----------------------------------------------------------- */ 
 
 
#login div.color
 
{
 
    margin: 10px auto 0 auto;
 
    padding: 3px 3px 3px 0;
 
	clear: both;
 
	overflow: hidden;
 
    background: #FFFFFF;
 
}
 
 
#login div.color a
 
{
 
    margin: 0 0 0 3px;
 
    padding: 0;
 
    width: 20px;
 
    height: 20px;
 
    display: block;
 
    float: left;
 
}
 
 
/* -----------------------------------------------------------
 
	login -> title
 
----------------------------------------------------------- */ 
 
 
#login div.title
 
{
 
	margin: 0 auto;
 
	padding: 0;
 
	width: 420px;
 
	clear: both;
 
	overflow: hidden;
 
	position: relative;
 
	background: #003367 url("../images/colors/blue/header_inner.png") repeat-x;
 
}
 
 
#login div.title h5
 
{
 
	margin: 10px;
 
	padding: 0;
 
	color: #ffffff;	
 
}
 
 
/* -----------------------------------------------------------
 
	login -> title / corners
 
----------------------------------------------------------- */ 
 
 
#login div.title div.corner
 
{
 
	height: 6px;
 
	width: 6px;
 
	position: absolute;
 
	background: url("../images/colors/blue/login_corners.png") no-repeat;
 
}
 
 
#login div.title div.tl
 
{
 
	top: 0;
 
	left: 0;
 
    background-position: 0 0;
 
}
 
 
#login div.title div.tr
 
{
 
	top: 0;
 
	right: 0;
 
    background-position: -6px 0;
 
}
 
 
#login div.inner
 
{
 
    margin: 0 auto;
 
    padding: 20px;
 
    width: 380px;
 
	background: #FFFFFF url("../images/login.png") no-repeat top left;
 
    border-top: none;
 
    border-bottom: none;
 
}
 
 
/* -----------------------------------------------------------
 
	login -> form
 
----------------------------------------------------------- */
 
 
#login div.form
 
{
 
    margin: 0;
 
    padding: 0;
 
    clear: both;
 
    overflow: hidden;
 
}
 
 
#login div.form div.fields
 
{
 
	margin: 0;
 
	padding: 0;
 
    clear: both;
 
    overflow: hidden;
 
}
 
 
#login div.form div.fields div.field
 
{
 
	margin: 0;
 
	padding: 0 0 10px 0; 
 
	clear: both;
 
	overflow: hidden;
 
}
 
 
#login div.form div.fields div.field span.error-message
 
{
 
	margin: 8px 0 0 0;
 
	padding: 0;
 
	height: 1%;
 
	display: block;
 
	color: #FF0000;
 
}
 
 
#login div.form div.fields div.field div.label
 
{
 
	margin: 2px 10px 0 0;
 
	padding: 5px 0 0 5px;
 
	width: 173px;
 
	float: left;
 
    text-align: right;
 
}
 
 
#login div.form div.fields div.field div.label label
 
{
 
    color: #000000;
 
    font-weight: bold;
 
}
 
 
#login  div.form div.fields div.field div.label span
 
{
 
	margin: 0;
 
	padding: 2px 0 0 0;
 
	height: 1%;
 
	display: block;
 
	color: #363636;
 
}
 
 
#login div.form div.fields div.field div.input
 
{
 
	margin: 0;
 
	padding: 0;
 
	float: left;
 
}
 
 
#login div.form div.fields div.field div.input input
 
{
 
    margin: 0;
 
    padding: 7px 7px 6px 7px;
 
    width: 176px;
 
    background: #FFFFFF;
 
    border-top: 1px solid #b3b3b3;
 
    border-left: 1px solid #b3b3b3;
 
    border-right: 1px solid #eaeaea;
 
    border-bottom: 1px solid #eaeaea;
 
    color: #000000;
 
	font-family: Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
 
	font-size: 11px;
 
}
 
 
#login div.form div.fields div.field div.input  input.error
 
{
 
	background: #FBE3E4;
 
	border-top: 1px solid #e1b2b3;
 
	border-left: 1px solid #e1b2b3;
 
	border-right: 1px solid #FBC2C4;
 
	border-bottom: 1px solid #FBC2C4;
 
}
 
 
#login div.form div.fields div.field div.input  input.success
 
{
 
	background: #E6EFC2;
 
	border-top: 1px solid #cebb98;
 
	border-left: 1px solid #cebb98;
 
	border-right: 1px solid #c6d880;
 
	border-bottom: 1px solid #c6d880;
 
}
 
 
#login div.form div.fields div.field div.input div.link
 
{
 
	margin: 6px 0 0 0;
 
	padding: 0;
 
	text-align: right;
 
}
 
 
#login div.form div.fields div.field div.checkbox
 
{
 
	margin: 0 0 0 184px;
 
	padding: 0;
 
}
 
 
#login div.form div.fields div.field div.checkbox label
 
{
 
    color: #565656;
 
    font-weight: bold;
 
}
 
 
#login div.form div.fields div.buttons
 
{
 
	margin: 0;
 
	padding: 10px 0 0 0;
 
	clear: both;
 
	overflow: hidden;
 
	border-top: 1px solid #DDDDDD;
 
	text-align: right;
 
}
 
 
#login div.form div.fields div.buttons input
 
{
 
	margin: 0;
 
    color: #000000;
 
	font-size: 1.0em; 
 
    font-weight: bold;
 
	font-family: Verdana, Helvetica, Sans-Serif; 
 
}
 
 
#login 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;
 
}
 
 
#login 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;
 
}
 
 
/* -----------------------------------------------------------
 
	login -> links
 
----------------------------------------------------------- */
 
 
#login div.form div.links
 
{
 
	margin: 10px 0 0 0;
 
	padding: 0 0 2px 0;
 
    clear: both;
 
    overflow: hidden;
 
}
 
 
/* -----------------------------------------------------------
 
	register
 
----------------------------------------------------------- */
 
 
#register
 
{
 
    margin: 10% auto 0 auto;
 
    padding: 0;
 
	width: 420px;
 
}
 
 
/* -----------------------------------------------------------
 
	register -> colors
 
----------------------------------------------------------- */ 
 
 
#register div.color
 
{
 
    margin: 10px auto 0 auto;
 
    padding: 3px 3px 3px 0;
 
	clear: both;
 
	overflow: hidden;
 
    background: #FFFFFF;
 
}
 
 
#register div.color a
 
{
 
    margin: 0 0 0 3px;
 
    padding: 0;
 
    width: 20px;
 
    height: 20px;
 
    display: block;
 
    float: left;
 
}
 
 
/* -----------------------------------------------------------
 
	register -> title
 
----------------------------------------------------------- */ 
 
 
#register div.title
 
{
 
	margin: 0 auto;
 
	padding: 0;
 
	width: 420px;
 
	clear: both;
 
	overflow: hidden;
 
	position: relative;
 
	background: #003367 url("../images/colors/blue/header_inner.png") repeat-x;
 
}
 
 
#register div.title h5
 
{
 
	margin: 10px;
 
	padding: 0;
 
	color: #ffffff;	
 
}
 
 
/* -----------------------------------------------------------
 
	register -> inner
 
----------------------------------------------------------- */
 
#register div.title div.corner
 
{
 
	height: 6px;
 
	width: 6px;
 
	position: absolute;
 
	background: url("../images/colors/blue/login_corners.png") no-repeat;
 
}
 
 
#register div.title div.tl
 
{
 
	top: 0;
 
	left: 0;
 
    background-position: 0 0;
 
}
 
 
#register div.title div.tr
 
{
 
	top: 0;
 
	right: 0;
 
    background-position: -6px 0;
 
    
 
}
 
#register div.inner
 
{
 
    margin: 0 auto;
 
    padding: 20px;
 
    width: 380px;
 
	background: #FFFFFF;
 
    border-top: none;
 
    border-bottom: none;
 
}
 
 
/* -----------------------------------------------------------
 
	register -> form
 
----------------------------------------------------------- */
 
 
#register div.form
 
{
 
    margin: 0;
 
    padding: 0;
 
    clear: both;
 
    overflow: hidden;
 
}
 
 
#register div.form div.fields
 
{
 
	margin: 0;
 
	padding: 0;
 
    clear: both;
 
    overflow: hidden;
 
}
 
 
#register div.form div.fields div.field
 
{
 
	margin: 0;
 
	padding: 0 0 10px 0; 
 
	clear: both;
 
	overflow: hidden;
 
}
 
 
#register div.form div.fields div.field span.error-message
 
{
 
	margin: 8px 0 0 0;
 
	padding: 0;
 
	height: 1%;
 
	display: block;
 
	color: #FF0000;
 
}
 
 
#register div.form div.fields div.field div.label
 
{
 
	margin: 2px 10px 0 0;
 
	padding: 5px 0 0 5px;
 
	width: 82px;
 
	float: left;
 
    text-align: right;
 
}
 
 
#register div.form div.fields div.field div.label label
 
{
 
    color: #000000;
 
    font-weight: bold;
 
}
 
 
#register  div.form div.fields div.field div.label span
 
{
 
	margin: 0;
 
	padding: 2px 0 0 0;
 
	height: 1%;
 
	display: block;
 
	color: #363636;
 
}
 
 
#register div.form div.fields div.field div.input
 
{
 
	margin: 0;
 
	padding: 0;
 
	float: left;
 
}
 
 
#register div.form div.fields div.field div.input input
 
{
 
    margin: 0;
 
    padding: 7px 7px 6px 7px;
 
    width: 266px;
 
    background: #FFFFFF;
 
    border-top: 1px solid #b3b3b3;
 
    border-left: 1px solid #b3b3b3;
 
    border-right: 1px solid #eaeaea;
 
    border-bottom: 1px solid #eaeaea;
 
    color: #000000;
 
	font-family: Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
 
	font-size: 11px;
 
}
 
 
#register div.form div.fields div.field div.input  input.error
 
{
 
	background: #FBE3E4;
 
	border-top: 1px solid #e1b2b3;
 
	border-left: 1px solid #e1b2b3;
 
	border-right: 1px solid #FBC2C4;
 
	border-bottom: 1px solid #FBC2C4;
 
}
 
 
#register div.form div.fields div.field div.input  input.success
 
{
 
	background: #E6EFC2;
 
	border-top: 1px solid #cebb98;
 
	border-left: 1px solid #cebb98;
 
	border-right: 1px solid #c6d880;
 
	border-bottom: 1px solid #c6d880;
 
}
 
 
#register div.form div.fields div.field div.input div.link
 
{
 
	margin: 6px 0 0 0;
 
	padding: 0;
 
	text-align: right;
 
}
 
 
#register div.form div.fields div.field div.checkbox
 
{
 
	margin: 0 0 0 184px;
 
	padding: 0;
 
}
 
 
#register div.form div.fields div.field div.checkbox label
 
{
 
    color: #565656;
 
    font-weight: bold;
 
}
 
 
#register div.form div.fields div.buttons
 
{
 
	margin: 0;
 
	padding: 10px 0 0 97px;
 
	clear: both;
 
	overflow: hidden;
 
	border-top: 1px solid #DDDDDD;
 
	text-align: left;
 
}
 
 
#register div.form div.fields div.buttons input
 
{
 
	margin: 0;
 
    color: #000000;
 
	font-size: 1.0em; 
 
    font-weight: bold;
 
	font-family: Verdana, Helvetica, Sans-Serif; 
 
}
 
 
#register 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;
 
}
 
#register div.form div.fields div.buttons div.highlight input.ui-state-default
 
{
 
	background:url("../images/colors/blue/button_highlight.png") repeat-x scroll 0 0 #4E85BB;
 
	border-color:#5C91A4 #2B7089 #1A6480 #2A6F89;
 
	border-style:solid;
 
	border-width:1px;
 
	color:#FFFFFF;
 
}
 
 
 
 
#register 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;
 
}
 
 
 
/* -----------------------------------------------------------
 
	CHANGESETS
 
----------------------------------------------------------- */
 
#changeset_content {
 
	border:1px solid #CCCCCC;
 
	padding:5px;
 
}
 
 
#changeset_content .container .wrapper {
 
	width: 600px;
 
}
 
 
#changeset_content .container {
 
	height: 120px;
 
}
 
 
#changeset_content .container .left {
 
	float: left;
 
	width: 70%;
 
	padding-left: 5px;
 
}
 
 
#changeset_content .container .right {
 
	float: right;
 
	width: 25%;
 
	text-align: right;
 
}
 
 
#changeset_content .container .left .date {
 
	font-weight: bold;
 
}
 
 
#changeset_content .container .left .author {
 
	
 
}
 
 
#changeset_content .container .left .message {
 
	font-style: italic;
 
	color: #556CB5;
 
}
 
 
.cs_files {
 
 
}
 
 
.cs_files .cs_added {
 
	background: url("/images/icons/page_white_add.png") no-repeat scroll 3px;
 
	/*background-color:#BBFFBB;*/
 
	height: 16px;
 
	padding-left: 20px;
 
	margin-top: 7px;
 
	text-align: left;
 
}
 
 
.cs_files .cs_changed {
 
	background: url("/images/icons/page_white_edit.png") no-repeat scroll
 
		3px;
 
	/*background-color: #FFDD88;*/
 
	height: 16px;
 
	padding-left: 20px;
 
	margin-top: 7px;
 
	text-align: left;
 
}
 
 
.cs_files .cs_removed {
 
	background: url("/images/icons/page_white_delete.png") no-repeat scroll
 
		3px;
 
	/*background-color: #FF8888;*/
 
	height: 16px;
 
	padding-left: 20px;
 
	margin-top: 7px;
 
	text-align: left;
 
}
 
 
 
 
/* -----------------------------------------------------------
 
	CHANGESETS - CANVAS
 
----------------------------------------------------------- */
 
 
#graph {
 
	overflow: hidden;
 
}
 
 
#graph_nodes {
 
	width: 160px;
 
	float: left;
 
	margin-left:-50px;
 
	margin-top: 5px;
 
}
 
 
#graph_content {
 
	width: 800px;
 
	float: left;
 
}
 
 
#graph_content .container_header {
 
	border: 1px solid #CCCCCC;
 
	padding:10px;
 
}
 
 
#graph_content .container .wrapper {
 
	width: 600px;
 
}
 
 
#graph_content .container {
 
	border-bottom: 1px solid #CCCCCC;
 
	border-left: 1px solid #CCCCCC;
 
	border-right: 1px solid #CCCCCC;
 
	min-height: 80px;
 
	overflow: hidden;
 
}
 
 
#graph_content .container .left {
 
	float: left;
 
	width: 70%;
 
	padding-left: 5px;
 
}
 
 
#graph_content .container .right {
 
	float: right;
 
	width: 25%;
 
	text-align: right;
 
}
 
 
#graph_content .container .left .date {
 
	font-weight: bold;
 
}
 
 
#graph_content .container .left .author {
 
	
 
}
 
 
#graph_content .container .left .message {
 
	font-size: 80%;
 
}
 
 
.right div {
 
	clear: both;
 
}
 
 
.right .changes .added,.changed,.removed {
 
	border: 1px solid #DDDDDD;
 
	display: block;
 
	float: right;
 
	font-size: 0.75em;
 
	text-align: center;
 
	min-width: 15px;
 
}
 
 
.right .changes .added {
 
	background: #BBFFBB;
 
}
 
 
.right .changes .changed {
 
	background: #FFDD88;
 
}
 
 
.right .changes .removed {
 
	background: #FF8888;
 
}
 
 
.right .merge {
 
	vertical-align: top;
 
	font-size: 60%;
 
	font-weight: bold;
 
}
 
 
.right .merge img {
 
	vertical-align: bottom;
 
}
 
 
.right .parent {
 
	font-size: 90%;
 
	font-family: monospace;
 
}
 
 
 
 
/* -----------------------------------------------------------
 
	FILE BROWSER
 
----------------------------------------------------------- */
 
div.browserblock {
 
	overflow: hidden;
 
	padding: 0px;
 
	border: 1px solid #ccc;
 
	background: #f8f8f8;
 
	font-size: 100%;
 
	line-height: 100%;
 
	/* new */
 
	line-height: 125%;
 
}
 
 
div.browserblock .browser-header {
 
	border-bottom: 1px solid #CCCCCC;
 
	background: #FFFFFF;
 
	color: blue;
 
	padding: 10px 0 10px 0;
 
}
 
 
div.browserblock .browser-header span {
 
	margin-left: 25px;
 
	font-weight: bold;
 
}
 
 
div.browserblock .browser-body {
 
	background: #EEEEEE;
 
}
 
 
table.code-browser {
 
	border-collapse: collapse;
 
	width: 100%;
 
}
 
 
table.code-browser tr {
 
	margin: 3px;
 
}
 
 
table.code-browser thead th {
 
	background-color: #EEEEEE;
 
	height: 20px;
 
	font-size: 1.1em;
 
	font-weight: bold;
 
	text-align: center;
 
	text-align: left;
 
	padding-left: 10px;
 
}
 
 
table.code-browser tbody tr {
 
	
 
}
 
 
table.code-browser tbody td {
 
	padding-left: 10px;
 
	height: 20px;
 
}
 
table.code-browser .browser-file {
 
	background: url("/images/icons/document_16.png") no-repeat scroll 3px;
 
	height: 16px;
 
	padding-left: 20px;
 
	text-align: left;
 
}
 
 
table.code-browser .browser-dir {
 
	background: url("/images/icons/folder_16.png") no-repeat scroll 3px;
 
	height: 16px;
 
	padding-left: 20px;
 
	text-align: left;
 
}
 
 
 
/* -----------------------------------------------------------
 
    INFOBOX
 
----------------------------------------------------------- */
 
.info_box *{
 
	background:url("../../images/pager.png") repeat-x scroll 0 0 #EBEBEB;
 
	border-color:#DEDEDE #C4C4C4 #C4C4C4 #CFCFCF;
 
	border-style:solid;
 
	border-width:1px;
 
	color:#4A4A4A;
 
	display:block;
 
	font-weight:bold;
 
	height:1%;
 
	padding:4px 6px;
 
	display: inline;
 
}
 
.info_box span{
 
    margin-left:3px;
 
    margin-righ:3px;
 
}
 
.info_box input {
 
    padding:3px 6px;
 
}
 
 
/* -----------------------------------------------------------
 
    TOOLTIP
 
----------------------------------------------------------- */
 
.yui-overlay,.yui-panel-container {
 
    visibility: hidden;
 
    position: absolute;
 
    z-index: 2;
 
}
 
 
.yui-tt {
 
    visibility: hidden;
 
    position: absolute;
 
    color: #666666;
 
    background-color: #FFFFFF;
 
    font-family: arial, helvetica, verdana, sans-serif;
 
    padding: 8px;
 
    border: 2px solid #556CB5;
 
    font: 100% sans-serif;
 
    width: auto;
 
    opacity: 1.0;
 
}
 
 
.yui-tt-shadow {
 
    display: none;
 
}
 
 
/* -----------------------------------------------------------
 
    AUTOCOMPLETE 
 
----------------------------------------------------------- */
 
 
.ac{
 
    vertical-align: top;
 
 
}
 
.ac .match {
 
    font-weight:bold;
 
}
 
 
.ac .yui-ac {
 
    position: relative;
 
    font-family: arial;
 
    font-size: 100%;
 
}
 
 
.ac .perm_ac{
 
    width:15em;
 
}
 
/* styles for input field */
 
.ac .yui-ac-input {
 
    width: 100%;
 
}
 
 
/* styles for results container */
 
.ac .yui-ac-container {
 
    position: absolute;
 
    top: 1.6em;
 
    width: 100%;
 
}
 
 
/* styles for header/body/footer wrapper within container */
 
.ac .yui-ac-content {
 
    position: absolute;
 
    width: 100%;
 
    border: 1px solid #808080;
 
    background: #fff;
 
    overflow: hidden;
 
    z-index: 9050;
 
}
 
 
/* styles for container shadow */
 
.ac .yui-ac-shadow {
 
    position: absolute;
 
    margin: .3em;
 
    width: 100%;
 
    background: #000;
 
    -moz-opacity: 0.10;
 
    opacity: .10;
 
    filter: alpha(opacity = 10);
 
    z-index: 9049;
 
}
 
 
/* styles for results list */
 
.ac .yui-ac-content ul {
 
    margin: 0;
 
    padding: 0;
 
    width: 100%;
 
}
 
 
/* styles for result item */
 
.ac .yui-ac-content li {
 
    margin: 0;
 
    padding: 2px 5px;
 
    cursor: default;
 
    white-space: nowrap;
 
}
 
 
/* styles for prehighlighted result item */
 
.ac .yui-ac-content li.yui-ac-prehighlight {
 
    background: #B3D4FF;
 
}
 
 
/* styles for highlighted result item */
 
.ac .yui-ac-content li.yui-ac-highlight {
 
    background: #556CB5;
 
    color: #FFF;
 
}
 
 
 
/* -----------------------------------------------------------
 
    ACTION ICONS
 
----------------------------------------------------------- */
 
.add_icon {
 
    background: url("/images/icons/add.png") no-repeat scroll 3px ;
 
    height: 16px;
 
    padding-left: 20px;
 
    padding-top: 1px;
 
    text-align: left;
 
}
 
 
.edit_icon {
 
    background: url("/images/icons/folder_edit.png") no-repeat scroll 3px;
 
    height: 16px;
 
    padding-left: 20px;
 
    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;
 
}
 
 
/* -----------------------------------------------------------
 
    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{
 
    style="font-size: 0.8em"
 
}
 
table#permissions_manage tr#add_perm_input td{
 
    vertical-align:middle;
 
 
}
 
 
 
/* -----------------------------------------------------------
 
	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; }
 
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
 
.ui-icon-squaresmall-close { background-position: -80px -208px; }
 
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
 
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
 
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
 
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
 
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
 
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
 
 
/* -----------------------------------------------------------
 
	jquery ui -> tabs
 
----------------------------------------------------------- */
 
.ui-tabs .ui-tabs-hide { display: none; }
 
 
/* -----------------------------------------------------------
 
	jquery ui -> datepicker
 
----------------------------------------------------------- */
 
.ui-datepicker { width: 17em; padding: .2em .2em 0; background: #FFFFFF; border: 1px solid #000000; border-top: none; }
 
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; background: #F6F6F6; }
 
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 1px; width: 1.8em; height: 1.8em; }
 
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
 
.ui-datepicker .ui-datepicker-prev { left: 0; }
 
.ui-datepicker .ui-datepicker-next { right: 0; }
 
.ui-datepicker .ui-datepicker-prev-hover { left: 0; }
 
.ui-datepicker .ui-datepicker-next-hover { right: 0; }
 
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
 
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
 
.ui-datepicker .ui-datepicker-title select { margin:1px 0; }
 
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
 
.ui-datepicker select.ui-datepicker-month, 
 
.ui-datepicker select.ui-datepicker-year { width: 49%;}
 
.ui-datepicker table {width: 100%; border-collapse: collapse; margin:0 0 .4em; }
 
.ui-datepicker th { padding: .7em .3em; text-align: center; border: 0;  }
 
.ui-datepicker td { border: 0; padding: 1px; }
 
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: 3px; text-align: center;  text-decoration: none; }
 
.ui-datepicker td span, .ui-datepicker td a:hover { background: #376ea6; color: #ffffff; }
 
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
 
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
 
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
 
.ui-datepicker td span, .ui-datepicker td.ui-datepicker-today a { background: #DDDDDD; color: #585858; }
 
.ui-datepicker td span, .ui-datepicker td.ui-datepicker-current-day a { background: #376ea6; color: #ffffff; }
 
 
/* -----------------------------------------------------------
 
	jquery ui -> datepicker / multiple calenders
 
----------------------------------------------------------- */
 
.ui-datepicker.ui-datepicker-multi { width:auto; }
 
.ui-datepicker-multi .ui-datepicker-group { float:left; }
 
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
 
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
 
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
 
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
 
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
 
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
 
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
 
.ui-datepicker-row-break { clear:both; width:100%; }
 
 
/* -----------------------------------------------------------
 
	jquery ui -> datepicker / rtl support
 
----------------------------------------------------------- */
 
.ui-datepicker-rtl { direction: rtl; }
 
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
 
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
 
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
 
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
 
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
 
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
 
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
 
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
 
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
 
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
 
 
/* -----------------------------------------------------------
 
	jquery ui -> select styling
 
----------------------------------------------------------- */
 
 
.ui-selectmenu  
 
{
 
	display: block; 
 
	position: relative;
 
	overflow: hidden;
 
	background: #ffffff;
 
    border-top: 1px solid #b3b3b3;
 
    border-left: 1px solid #b3b3b3;
 
    border-right: 1px solid #eaeaea;
 
    border-bottom: 1px solid #eaeaea;
 
	text-align: left; 
 
	text-decoration: none; 
 
}
 
 
.ui-selectmenu-icon { position:absolute; right:6px; margin-top:-8px; top: 50%; }
 
.ui-selectmenu-menu { padding:0; margin:0; list-style:none; position:absolute; top: 0; visibility: hidden; overflow: auto; }
 
.ui-selectmenu-open { background: #ffffff; border: 1px solid #666666; border-top: none; visibility: visible; }
 
.ui-selectmenu-menu-popup { margin-top: -1px; }
 
.ui-selectmenu-menu-dropdown { }
 
.ui-selectmenu-menu li { padding:0; margin:0; display: block; border-top: 1px dotted transparent; border-bottom: 1px dotted transparent; border-right-width: 0 !important; border-left-width: 0 !important; }
 
.ui-selectmenu-menu li a,.ui-selectmenu-status {line-height: 1.4em; display:block; padding: 5px 0 5px 8px; outline:none; text-decoration:none; color: #000000; }
 
.ui-selectmenu-menu li.ui-selectmenu-hasIcon a,
 
.ui-selectmenu-hasIcon .ui-selectmenu-status  { margin-left: 5px; padding-left: 20px; position: relative; }
 
.ui-selectmenu-menu li .ui-icon, .ui-selectmenu-status .ui-icon { position: absolute; top: 1em; margin-top: -8px; left: 0; }
 
.ui-selectmenu-status { line-height: 1.4em; }
 
.ui-selectmenu-open li.ui-selectmenu-item-focus { background: #376ea6; }
 
.ui-selectmenu-open li.ui-selectmenu-item-focus a { color: #ffffff; }
 
.ui-selectmenu-open li.ui-selectmenu-item-selected { background: #dfdfdf; }
 
.ui-selectmenu-open li.ui-selectmenu-item-selected a { color: #000000; }
 
.ui-selectmenu-menu li span,.ui-selectmenu-status span { display:block; margin-bottom: .2em; }
 
.ui-selectmenu-menu .ui-selectmenu-group .ui-selectmenu-group-label { line-height: 1.4em; display:block; padding:.6em .5em 0; }
 
.ui-selectmenu-menu .ui-selectmenu-group ul { margin: 0; padding: 0; }
 
\ No newline at end of file
pylons_app/public/css/style_full.css
Show inline comments
 
new file 100644
 
/* -----------------------------------------------------------
 
	content
 
----------------------------------------------------------- */ 
 
 
#content 
 
{
 
	margin: 10px 60px 0 60px;
 
	padding: 0;
 
    min-height: 100%;
 
	clear: both;
 
	overflow: hidden;
 
	background: transparent;
 
}
 
 
/* -----------------------------------------------------------
 
	content -> right -> forms -> labels
 
----------------------------------------------------------- */
 
 
#content div.box div.form div.fields div.field div.label
 
{
 
	left: 80px;
 
	margin: 0;
 
	padding: 8px 0 0 5px;
 
	width: auto;
 
	position: absolute;
 
}
 
 
#content div.box-left div.form div.fields div.field div.label,
 
#content div.box-right div.form div.fields div.field div.label
 
{
 
	left: 0;
 
	margin: 0;
 
	padding: 0 0 8px 0;
 
	width: auto;
 
	position: relative;
 
}
 
\ No newline at end of file
pylons_app/public/images/background.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/button.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/button_browse.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/button_browse_selected.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/button_selected.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/button_highlight.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/button_highlight_selected.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/button_home.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/header_inner.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/header_inner_corners.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/index.sof
Show inline comments
 
new file 100644
 
binary diff not shown
pylons_app/public/images/colors/blue/login_corners.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/menu_arrow.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/menu_border.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/menu_l_selected.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/menu_r_selected.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/menu_selected.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/quick_l.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/quick_l_selected.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/quick_r.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/quick_r_selected.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/title.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/title_link.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/colors/blue/title_tab_selected.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/content.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/header_background.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/icons/cross.png
Show inline comments
 
binary diff not shown
Show images
pylons_app/public/images/icons/index.sof
Show inline comments
 
new file 100644
 
binary diff not shown
pylons_app/public/images/icons/success.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/icons/warning.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/login.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/menu.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/menu_l.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/menu_minus.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/menu_plus.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/menu_r.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/pager.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/pager_selected.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/js/excanvas.min.js
Show inline comments
 
new file 100644
 
if(!document.createElement("canvas").getContext){(function(){var R=Math;var S=R.round;var O=R.sin;var a=R.cos;var J=R.abs;var Y=R.sqrt;var A=10;var K=A/2;function G(){return this.context_||(this.context_=new M(this))}var Q=Array.prototype.slice;function b(c,d,e){var Z=Q.call(arguments,2);return function(){return c.apply(d,Z.concat(Q.call(arguments)))}}var H={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var c=Z||document;c.createElement("canvas");c.attachEvent("onreadystatechange",b(this.init_,this,c))}},init_:function(e){if(!e.namespaces.g_vml_){e.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!e.namespaces.g_o_){e.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!e.styleSheets.ex_canvas_){var d=e.createStyleSheet();d.owningElement.id="ex_canvas_";d.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}g_o_\\:*{behavior:url(#default#VML)}"}var c=e.getElementsByTagName("canvas");for(var Z=0;Z<c.length;Z++){this.initElement(c[Z])}},initElement:function(c){if(!c.getContext){c.getContext=G;c.innerHTML="";c.attachEvent("onpropertychange",X);c.attachEvent("onresize",B);var Z=c.attributes;if(Z.width&&Z.width.specified){c.style.width=Z.width.nodeValue+"px"}else{c.width=c.clientWidth}if(Z.height&&Z.height.specified){c.style.height=Z.height.nodeValue+"px"}else{c.height=c.clientHeight}}return c}};function X(c){var Z=c.srcElement;switch(c.propertyName){case"width":Z.style.width=Z.attributes.width.nodeValue+"px";Z.getContext().clearRect();break;case"height":Z.style.height=Z.attributes.height.nodeValue+"px";Z.getContext().clearRect();break}}function B(c){var Z=c.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}H.init();var E=[];for(var V=0;V<16;V++){for(var U=0;U<16;U++){E[V*16+U]=V.toString(16)+U.toString(16)}}function N(){return[[1,0,0],[0,1,0],[0,0,1]]}function D(e,d){var c=N();for(var Z=0;Z<3;Z++){for(var h=0;h<3;h++){var f=0;for(var g=0;g<3;g++){f+=e[Z][g]*d[g][h]}c[Z][h]=f}}return c}function T(c,Z){Z.fillStyle=c.fillStyle;Z.lineCap=c.lineCap;Z.lineJoin=c.lineJoin;Z.lineWidth=c.lineWidth;Z.miterLimit=c.miterLimit;Z.shadowBlur=c.shadowBlur;Z.shadowColor=c.shadowColor;Z.shadowOffsetX=c.shadowOffsetX;Z.shadowOffsetY=c.shadowOffsetY;Z.strokeStyle=c.strokeStyle;Z.globalAlpha=c.globalAlpha;Z.arcScaleX_=c.arcScaleX_;Z.arcScaleY_=c.arcScaleY_;Z.lineScale_=c.lineScale_}function C(c){var f,e=1;c=String(c);if(c.substring(0,3)=="rgb"){var h=c.indexOf("(",3);var Z=c.indexOf(")",h+1);var g=c.substring(h+1,Z).split(",");f="#";for(var d=0;d<3;d++){f+=E[Number(g[d])]}if(g.length==4&&c.substr(3,1)=="a"){e=g[3]}}else{f=c}return{color:f,alpha:e}}function P(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function M(c){this.m_=N();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=A*1;this.globalAlpha=1;this.canvas=c;var Z=c.ownerDocument.createElement("div");Z.style.width=c.clientWidth+"px";Z.style.height=c.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";c.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var I=M.prototype;I.clearRect=function(){this.element_.innerHTML=""};I.beginPath=function(){this.currentPath_=[]};I.moveTo=function(c,Z){var d=this.getCoords_(c,Z);this.currentPath_.push({type:"moveTo",x:d.x,y:d.y});this.currentX_=d.x;this.currentY_=d.y};I.lineTo=function(c,Z){var d=this.getCoords_(c,Z);this.currentPath_.push({type:"lineTo",x:d.x,y:d.y});this.currentX_=d.x;this.currentY_=d.y};I.bezierCurveTo=function(d,c,j,i,h,f){var Z=this.getCoords_(h,f);var g=this.getCoords_(d,c);var e=this.getCoords_(j,i);L(this,g,e,Z)};function L(Z,e,d,c){Z.currentPath_.push({type:"bezierCurveTo",cp1x:e.x,cp1y:e.y,cp2x:d.x,cp2y:d.y,x:c.x,y:c.y});Z.currentX_=c.x;Z.currentY_=c.y}I.quadraticCurveTo=function(h,d,c,Z){var g=this.getCoords_(h,d);var f=this.getCoords_(c,Z);var i={x:this.currentX_+2/3*(g.x-this.currentX_),y:this.currentY_+2/3*(g.y-this.currentY_)};var e={x:i.x+(f.x-this.currentX_)/3,y:i.y+(f.y-this.currentY_)/3};L(this,i,e,f)};I.arc=function(k,i,j,f,c,d){j*=A;var o=d?"at":"wa";var l=k+a(f)*j-K;var n=i+O(f)*j-K;var Z=k+a(c)*j-K;var m=i+O(c)*j-K;if(l==Z&&!d){l+=0.125}var e=this.getCoords_(k,i);var h=this.getCoords_(l,n);var g=this.getCoords_(Z,m);this.currentPath_.push({type:o,x:e.x,y:e.y,radius:j,xStart:h.x,yStart:h.y,xEnd:g.x,yEnd:g.y})};I.rect=function(d,c,Z,e){this.moveTo(d,c);this.lineTo(d+Z,c);this.lineTo(d+Z,c+e);this.lineTo(d,c+e);this.closePath()};I.strokeRect=function(d,c,Z,e){var f=this.currentPath_;this.beginPath();this.moveTo(d,c);this.lineTo(d+Z,c);this.lineTo(d+Z,c+e);this.lineTo(d,c+e);this.closePath();this.stroke();this.currentPath_=f};I.fillRect=function(d,c,Z,e){var f=this.currentPath_;this.beginPath();this.moveTo(d,c);this.lineTo(d+Z,c);this.lineTo(d+Z,c+e);this.lineTo(d,c+e);this.closePath();this.fill();this.currentPath_=f};I.createLinearGradient=function(c,e,Z,d){var f=new W("gradient");f.x0_=c;f.y0_=e;f.x1_=Z;f.y1_=d;return f};I.createRadialGradient=function(e,g,d,c,f,Z){var h=new W("gradientradial");h.x0_=e;h.y0_=g;h.r0_=d;h.x1_=c;h.y1_=f;h.r1_=Z;return h};I.drawImage=function(s,e){var l,j,n,AA,q,o,u,AC;var m=s.runtimeStyle.width;var r=s.runtimeStyle.height;s.runtimeStyle.width="auto";s.runtimeStyle.height="auto";var k=s.width;var y=s.height;s.runtimeStyle.width=m;s.runtimeStyle.height=r;if(arguments.length==3){l=arguments[1];j=arguments[2];q=o=0;u=n=k;AC=AA=y}else{if(arguments.length==5){l=arguments[1];j=arguments[2];n=arguments[3];AA=arguments[4];q=o=0;u=k;AC=y}else{if(arguments.length==9){q=arguments[1];o=arguments[2];u=arguments[3];AC=arguments[4];l=arguments[5];j=arguments[6];n=arguments[7];AA=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AB=this.getCoords_(l,j);var f=u/2;var c=AC/2;var z=[];var Z=10;var i=10;z.push(" <g_vml_:group",' coordsize="',A*Z,",",A*i,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",i,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]){var g=[];g.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",S(AB.x/A),",","Dy=",S(AB.y/A),"");var x=AB;var v=this.getCoords_(l+n,j);var t=this.getCoords_(l,j+AA);var p=this.getCoords_(l+n,j+AA);x.x=R.max(x.x,v.x,t.x,p.x);x.y=R.max(x.y,v.y,t.y,p.y);z.push("padding:0 ",S(x.x/A),"px ",S(x.y/A),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",g.join(""),", sizingmethod='clip');")}else{z.push("top:",S(AB.y/A),"px;left:",S(AB.x/A),"px;")}z.push(' ">','<g_vml_:image src="',s.src,'"',' style="width:',A*n,"px;"," height:",A*AA,'px;"',' cropleft="',q/k,'"',' croptop="',o/y,'"',' cropright="',(k-q-u)/k,'"',' cropbottom="',(y-o-AC)/y,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",z.join(""))};I.stroke=function(AE){var j=[];var k=false;var AP=C(AE?this.fillStyle:this.strokeStyle);var AA=AP.color;var AK=AP.alpha*this.globalAlpha;var f=10;var m=10;j.push("<g_vml_:shape",' filled="',!!AE,'"',' style="position:absolute;width:',f,"px;height:",m,'px;"',' coordorigin="0 0" coordsize="',A*f," ",A*m,'"',' stroked="',!AE,'"',' path="');var l=false;var AO={x:null,y:null};var w={x:null,y:null};for(var AJ=0;AJ<this.currentPath_.length;AJ++){var AI=this.currentPath_[AJ];var AN;switch(AI.type){case"moveTo":AN=AI;j.push(" m ",S(AI.x),",",S(AI.y));break;case"lineTo":j.push(" l ",S(AI.x),",",S(AI.y));break;case"close":j.push(" x ");AI=null;break;case"bezierCurveTo":j.push(" c ",S(AI.cp1x),",",S(AI.cp1y),",",S(AI.cp2x),",",S(AI.cp2y),",",S(AI.x),",",S(AI.y));break;case"at":case"wa":j.push(" ",AI.type," ",S(AI.x-this.arcScaleX_*AI.radius),",",S(AI.y-this.arcScaleY_*AI.radius)," ",S(AI.x+this.arcScaleX_*AI.radius),",",S(AI.y+this.arcScaleY_*AI.radius)," ",S(AI.xStart),",",S(AI.yStart)," ",S(AI.xEnd),",",S(AI.yEnd));break}if(AI){if(AO.x==null||AI.x<AO.x){AO.x=AI.x}if(w.x==null||AI.x>w.x){w.x=AI.x}if(AO.y==null||AI.y<AO.y){AO.y=AI.y}if(w.y==null||AI.y>w.y){w.y=AI.y}}}j.push(' ">');if(!AE){var v=this.lineScale_*this.lineWidth;if(v<1){AK*=v}j.push("<g_vml_:stroke",' opacity="',AK,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',P(this.lineCap),'"',' weight="',v,'px"',' color="',AA,'" />')}else{if(typeof this.fillStyle=="object"){var n=this.fillStyle;var t=0;var AH={x:0,y:0};var AB=0;var r=1;if(n.type_=="gradient"){var q=n.x0_/this.arcScaleX_;var d=n.y0_/this.arcScaleY_;var o=n.x1_/this.arcScaleX_;var AQ=n.y1_/this.arcScaleY_;var AM=this.getCoords_(q,d);var AL=this.getCoords_(o,AQ);var h=AL.x-AM.x;var g=AL.y-AM.y;t=Math.atan2(h,g)*180/Math.PI;if(t<0){t+=360}if(t<0.000001){t=0}}else{var AM=this.getCoords_(n.x0_,n.y0_);var Z=w.x-AO.x;var e=w.y-AO.y;AH={x:(AM.x-AO.x)/Z,y:(AM.y-AO.y)/e};Z/=this.arcScaleX_*A;e/=this.arcScaleY_*A;var AG=R.max(Z,e);AB=2*n.r0_/AG;r=2*n.r1_/AG-AB}var z=n.colors_;z.sort(function(i,c){return i.offset-c.offset});var u=z.length;var y=z[0].color;var x=z[u-1].color;var AD=z[0].alpha*this.globalAlpha;var AC=z[u-1].alpha*this.globalAlpha;var AF=[];for(var AJ=0;AJ<u;AJ++){var s=z[AJ];AF.push(s.offset*r+AB+" "+s.color)}j.push('<g_vml_:fill type="',n.type_,'"',' method="none" focus="100%"',' color="',y,'"',' color2="',x,'"',' colors="',AF.join(","),'"',' opacity="',AC,'"',' g_o_:opacity2="',AD,'"',' angle="',t,'"',' focusposition="',AH.x,",",AH.y,'" />')}else{j.push('<g_vml_:fill color="',AA,'" opacity="',AK,'" />')}}j.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",j.join(""))};I.fill=function(){this.stroke(true)};I.closePath=function(){this.currentPath_.push({type:"close"})};I.getCoords_=function(d,c){var Z=this.m_;return{x:A*(d*Z[0][0]+c*Z[1][0]+Z[2][0])-K,y:A*(d*Z[0][1]+c*Z[1][1]+Z[2][1])-K}};I.save=function(){var Z={};T(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=D(N(),this.m_)};I.restore=function(){T(this.aStack_.pop(),this);this.m_=this.mStack_.pop()};I.translate=function(d,c){var Z=[[1,0,0],[0,1,0],[d,c,1]];this.m_=D(Z,this.m_)};I.rotate=function(d){var f=a(d);var e=O(d);var Z=[[f,e,0],[-e,f,0],[0,0,1]];this.m_=D(Z,this.m_)};I.scale=function(f,e){this.arcScaleX_*=f;this.arcScaleY_*=e;var c=[[f,0,0],[0,e,0],[0,0,1]];var Z=this.m_=D(c,this.m_);var d=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];this.lineScale_=Y(J(d))};I.clip=function(){};I.arcTo=function(){};I.createPattern=function(){return new F};function W(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}W.prototype.addColorStop=function(c,Z){Z=C(Z);this.colors_.push({offset:c,color:Z.color,alpha:Z.alpha})};function F(){}G_vmlCanvasManager=H;CanvasRenderingContext2D=M;CanvasGradient=W;CanvasPattern=F})()};
 
\ No newline at end of file
pylons_app/public/js/yui.flot.js
Show inline comments
 
new file 100644
 
/**
 
\file yui.flot.js
 
\brief Javascript plotting library for YUI based on Flot v. 0.5.
 
\details
 
This file contains a port of Flot for YUI
 

	
 
Copyright (c) 2009 Yahoo! Inc.  All rights reserved.  The copyrights embodied
 
in the content of this file are licenced by Yahoo! Inc. under the BSD (revised)
 
open source license.
 

	
 
Requires yahoo-dom-event and datasource which you can get here:
 
<script type="text/javascript" src="http://yui.yahooapis.com/combo?2.7.0/build/yahoo-dom-event/yahoo-dom-event.js&2.7.0/build/datasource/datasource-min.js"></script>
 

	
 
Datasource is optional, you only need it if one of your axes has its mode set to "time"
 
*/
 

	
 
(function() {
 
	var L = YAHOO.lang;
 
	var UA = YAHOO.env.ua;
 
	var DOM = YAHOO.util.Dom;
 
	var E = YAHOO.util.Event;
 

	
 
	if(!DOM.createElementFromMarkup) {
 
		DOM.createElementFromMarkup = function(markup) {
 
			var p=document.createElement('div');
 
			p.innerHTML = markup;
 
			var e = p.firstChild;
 
			return p.removeChild(e);
 
		};
 
	}
 

	
 
	if(!DOM.removeElement) {
 
		DOM.removeElement = function(el) {
 
			return el.parentNode.removeChild(el);
 
		};
 
	}
 

	
 
	function Plot(target_, data_, options_) {
 
		// data is on the form:
 
		//   [ series1, series2 ... ]
 
		// where series is either just the data as [ [x1, y1], [x2, y2], ... ]
 
		// or { data: [ [x1, y1], [x2, y2], ... ], label: "some label" }
 

	
 
		var series = [],
 
			options = {
 
				// the color theme used for graphs
 
				colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],
 
				locale: "en",
 
				legend: {
 
					show: true,
 
					noColumns: 1, // number of colums in legend table
 
					labelFormatter: null, // fn: string -> string
 
					labelBoxBorderColor: "#ccc", // border color for the little label boxes
 
					container: null, // container (as jQuery object) to put legend in, null means default on top of graph
 
					position: "ne", // position of default legend container within plot
 
					margin: 5, // distance from grid edge to default legend container within plot
 
					backgroundColor: null, // null means auto-detect
 
					backgroundOpacity: 0.85 // set to 0 to avoid background
 
				},
 
				xaxis: {
 
					mode: null, // null or "time"
 
					min: null, // min. value to show, null means set automatically
 
					max: null, // max. value to show, null means set automatically
 
					autoscaleMargin: null, // margin in % to add if auto-setting min/max
 
					ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks
 
					tickFormatter: null, // fn: number -> string
 
					label: null,
 
					labelWidth: null, // size of tick labels in pixels
 
					labelHeight: null,
 

	
 
					scaleType: 'linear',	// may be 'linear' or 'log'
 

	
 
					// mode specific options
 
					tickDecimals: null, // no. of decimals, null means auto
 
					tickSize: null, // number or [number, "unit"]
 
					minTickSize: null, // number or [number, "unit"]
 
					timeformat: null // format string to use
 
				},
 
				yaxis: {
 
					label: null,
 
					autoscaleMargin: 0.02
 
				},
 
				x2axis: {
 
					label: null,
 
					autoscaleMargin: null
 
				},
 
				y2axis: {
 
					label: null,
 
					autoscaleMargin: 0.02
 
				},			  
 
				points: {
 
					show: false,
 
					radius: 3,
 
					lineWidth: 2, // in pixels
 
					fill: true,
 
					fillColor: "#ffffff"
 
				},
 
				lines: {
 
					// we don't put in show: false so we can see
 
					// whether lines were actively disabled 
 
					lineWidth: 2, // in pixels
 
					fill: false,
 
					fillColor: null
 
				},
 
				bars: {
 
					show: false,
 
					lineWidth: 2, // in pixels
 
					barWidth: 1, // in units of the x axis
 
					fill: true,
 
					fillColor: null,
 
					align: "left" // or "center" 
 
				},
 
				grid: {
 
					show: true,
 
					showLines: true,
 
					color: "#545454", // primary color used for outline and labels
 
					backgroundColor: null, // null for transparent, else color
 
					tickColor: "#dddddd", // color used for the ticks
 
					labelMargin: 5, // in pixels
 
					labelFontSize: 16,
 
					borderWidth: 2, // in pixels
 
					borderColor: null, // set if different from the grid color
 
					markings: null, // array of ranges or fn: axes -> array of ranges
 
					markingsColor: "#f4f4f4",
 
					markingsLineWidth: 2,
 
					// interactive stuff
 
					clickable: false,
 
					hoverable: false,
 
					autoHighlight: true, // highlight in case mouse is near
 
					mouseActiveRadius: 10 // how far the mouse can be away to activate an item
 
				},
 
				selection: {
 
					mode: null, // one of null, "x", "y" or "xy"
 
					color: "#e8cfac"
 
				},
 
				crosshair: {
 
					mode: null, // one of null, "x", "y" or "xy",
 
					color: "#aa0000"
 
				},
 
				shadowSize: 3
 
			},
 
		canvas = null,	  // the canvas for the plot itself
 
		overlay = null,	 // canvas for interactive stuff on top of plot
 
		eventHolder = null, // jQuery object that events should be bound to
 
		ctx = null, octx = null,
 
		target = DOM.get(target_),
 
		axes = { xaxis: {}, yaxis: {}, x2axis: {}, y2axis: {} },
 
		plotOffset = { left: 0, right: 0, top: 0, bottom: 0},
 
		canvasWidth = 0, canvasHeight = 0,
 
		plotWidth = 0, plotHeight = 0,
 
		// dedicated to storing data for buggy standard compliance cases
 
		workarounds = {};
 

	
 
		this.setData = setData;
 
		this.setupGrid = setupGrid;
 
		this.draw = draw;
 
		this.clearSelection = clearSelection;
 
		this.setSelection = setSelection;
 
		this.getCanvas = function() { return canvas; };
 
		this.getPlotOffset = function() { return plotOffset; };
 
		this.getData = function() { return series; };
 
		this.getAxes = function() { return axes; };
 
		this.setCrosshair = setCrosshair;
 
		this.clearCrosshair = function () { setCrosshair(null); };
 
		this.highlight = highlight;
 
		this.unhighlight = unhighlight;
 

	
 
		// initialize
 
		parseOptions(options_);
 
		setData(data_);
 
		constructCanvas();
 
		setupGrid();
 
		draw();
 

	
 
		var plot = this;
 

	
 
		plot.createEvent('plotclick');
 
		plot.createEvent('plothover');
 
		plot.createEvent('plotselected');
 
		plot.createEvent('plotunselected');
 

	
 

	
 

	
 
		function setData(d) {
 
			series = parseData(d);
 

	
 
			fillInSeriesOptions();
 
			processData();
 
		}
 

	
 
		function normalizeData(d) {
 
			var possible_controls = ['x', 'time', 'date'];
 

	
 
			if (L.isArray(d)) {
 
				d = { data: d };
 
			} else {
 
				d = L.merge(d);
 
			}
 

	
 
			if(d.disabled) {
 
				return undefined;
 
			}
 

	
 
			if (d.data.length === 0) {
 
				return undefined;
 
			}
 

	
 
			var j, k;
 

	
 
			// Make a copy so we don't obliterate the caller's data
 
			var _data = [];
 

	
 
			if (L.isArray(d.data[0])) {
 
				for(j=0; j<d.data.length; j++) {
 
					if(d.data[j]) {
 
						var x = d.data[j][0];
 
						var y = d.data[j][1];
 

	
 
						if(L.isObject(x) && x.getTime) x = x.getTime()/1000;
 
						else x = parseFloat(x);
 

	
 
						if(L.isObject(y) && y.getTime) y = y.getTime()/1000;
 
						else y = parseFloat(y);
 

	
 
						_data.push({ x: x, y: y});
 
					} else {
 
						_data.push(d.data[j]);
 
					}
 
				}
 
				d.control='x';
 
				d.schema='y';
 
			} else {
 
				for(j=0; j<d.data.length; j++) {
 
					_data.push({});
 
					for(k in d.data[j]) {
 
						if(L.isObject(d.data[j][k]) && d.data[j][k].getTime)
 
							_data[j][k] = d.data[j][k].getTime()/1000;
 
						else
 
							_data[j][k] = parseFloat(d.data[j][k]);
 
					}
 
				}
 
			}
 

	
 
			d.data = _data;
 

	
 
			if (!d.control) {
 
				// try to guess the control field
 
				for (j=0; j<possible_controls.length; j++) {
 
					if(possible_controls[j] in d.data[0]) {
 
						d.control = possible_controls[j];
 
						break;
 
					}
 
				}
 
			}
 

	
 
			if (!d.schema) {
 
				d.schema = [];
 
				for(k in d.data[0]) {
 
					if(!d.control) {
 
						d.control = k;
 
					}
 
					if(k !== d.control) {
 
						d.schema.push(k);
 
					}
 
				}
 
			}
 

	
 
			return L.merge(d, {dropped: []});
 
		}
 

	
 
		function markDroppedPoints(s) {
 
			var l=s.data.length;
 

	
 
			if(l <= canvasWidth/10 || options.dontDropPoints) {	// at least 10px per point
 
				return s;
 
			}
 

	
 
			var dropperiod = 1-canvasWidth/10/l;
 
			var drops = 0;
 
			var points = l;
 

	
 
			for(var j=0; j<l; j++) {
 
				var x = s.data[j].x;
 
				var y = s.data[j].y;
 

	
 
				s.dropped[j] = (drops > 1);
 
				if(s.dropped[j]) {
 
					drops-=1;
 
				}
 

	
 
				if(!isNaN(x) && !isNaN(x))
 
					drops+=dropperiod;
 
				else {
 
					drops=0;	// bonus for a null point
 
					points--; 
 
					dropperiod=1-canvasWidth/10/points;
 
				}
 
			}
 

	
 
			return s;
 
		}
 

	
 
		function splitSeries(s) {
 
			var res = [];
 

	
 
			for(var k=0; k<s.schema.length; k++) {
 
				res[k] = L.merge(s, {data: []});
 
				if(s.label && L.isObject(s.label) && s.label[s.schema[k]]) {
 
					res[k].label = s.label[s.schema[k]];
 
				}
 
				if(s.color && L.isObject(s.color) && s.color[s.schema[k]]) {
 
					res[k].color = s.color[s.schema[k]];
 
				}
 
			}
 

	
 
			for(var i=0; i<s.data.length; i++) {
 
				var d = s.data[i];
 
				for(k=0; k<s.schema.length; k++) {
 
					var tuple = { x: d[s.control], y: d[s.schema[k]] };
 
					res[k].data.push(tuple);
 
					res[k].control='x';
 
					res[k].schema='y';
 
				}
 
			}
 

	
 
			return res;
 
		}
 

	
 
		function parseData(d) {
 
			if(d.length === 0) {
 
				return null;
 
			}
 
			
 
			// get the canvas width so we know if we have to drop points
 
			canvasWidth = parseInt(DOM.getStyle(target, 'width'), 10);
 

	
 
			// First we normalise the data into a standard format
 
			var s, res = [];
 
			for (var i = 0; i < d.length; ++i) {
 
				s = normalizeData(d[i]);
 
				if(typeof s === 'undefined') 
 
					continue;
 

	
 
				if(L.isArray(s.schema)) {
 
					s = splitSeries(s);
 
				}
 
				else {
 
					s = [s];
 
				}
 

	
 
				for(var k=0; k<s.length; k++) {
 
					s[k] = markDroppedPoints(s[k]);
 
					res.push(s[k]);
 
				}
 
			}
 

	
 
			return res;
 
		}
 

	
 
		function parseOptions(o) {
 
			if (options.grid.borderColor == null)
 
				options.grid.borderColor = options.grid.color;
 

	
 
			if(typeof o === 'undefined') {
 
				return;
 
			}
 
			o = YAHOO.lang.merge(o);
 
			for(var k in o)	{
 
				if(L.isObject(o[k]) && L.isObject(options[k])) {
 
					L.augmentObject(options[k], o[k], true);
 
					delete o[k];
 
				}
 
			}
 
			L.augmentObject(options, o, true);
 
		}
 

	
 
		function fillInSeriesOptions() {
 
			var i;
 

	
 
			// collect what we already got of colors
 
			var neededColors = series.length,
 
				usedColors = [],
 
				assignedColors = [];
 
			for (i = 0; i < series.length; ++i) {
 
				var sc = series[i].color;
 
				if (sc != null) {
 
					--neededColors;
 
					if (typeof sc == "number")
 
						assignedColors.push(sc);
 
					else
 
						usedColors.push(parseColor(series[i].color));
 
				}
 
			}
 

	
 
			// we might need to generate more colors if higher indices
 
			// are assigned
 
			for (i = 0; i < assignedColors.length; ++i) {
 
				neededColors = Math.max(neededColors, assignedColors[i] + 1);
 
			}
 

	
 
			// produce colors as needed
 
			var colors = [], variation = 0;
 
			i = 0;
 
			while (colors.length < neededColors) {
 
				var c;
 
				if (options.colors.length == i) // check degenerate case
 
					c = new Color(100, 100, 100);
 
				else
 
					c = parseColor(options.colors[i]);
 

	
 
				// vary color if needed
 
				var sign = variation % 2 == 1 ? -1 : 1;
 
				var factor = 1 + sign * Math.ceil(variation / 2) * 0.2;
 
				c.scale(factor, factor, factor);
 

	
 
				// FIXME: if we're getting too close to something else,
 
				// we should probably skip this one
 
				colors.push(c);
 

	
 
				++i;
 
				if (i >= options.colors.length) {
 
					i = 0;
 
					++variation;
 
				}
 
			}
 

	
 
			// fill in the options
 
			var colori = 0, s;
 
			for (i = 0; i < series.length; ++i) {
 
				s = series[i];
 

	
 
				// assign colors
 
				if (s.color == null) {
 
					s.color = colors[colori].toString();
 
					++colori;
 
				}
 
				else if (typeof s.color == "number")
 
					s.color = colors[s.color].toString();
 

	
 
				// copy the rest
 
				s.lines = L.merge(options.lines, s.lines || {});
 
				s.points = L.merge(options.points, s.points || {});
 
				s.bars = L.merge(options.bars, s.bars || {});
 

	
 
				// turn on lines automatically in case nothing is set
 
				if (s.lines.show == null && !s.bars.show && !s.points.show)
 
					s.lines.show = true;
 

	
 
				if (s.shadowSize == null)
 
					s.shadowSize = options.shadowSize;
 

	
 
				if (s.xaxis && s.xaxis == 2)
 
					s.xaxis = axes.x2axis;
 
				else
 
					s.xaxis = axes.xaxis;
 
				if (s.yaxis && s.yaxis >= 2) {
 
					if(!axes['y' + s.yaxis + 'axis'])
 
						axes['y' + s.yaxis + 'axis'] = {};
 
					if(!options['y' + s.yaxis + 'axis'])
 
						options['y' + s.yaxis + 'axis'] = { autoscaleMargin: 0.02 };
 
					s.yaxis = axes['y' + s.yaxis + 'axis'];
 
				}
 
				else
 
					s.yaxis = axes.yaxis;
 
			}
 
		}
 

	
 
		function processData() {
 
			var topSentry = Number.POSITIVE_INFINITY,
 
				bottomSentry = Number.NEGATIVE_INFINITY,
 
				axis;
 

	
 
			for (axis in axes) {
 
				axes[axis].datamin = topSentry;
 
				axes[axis].datamax = bottomSentry;
 
				axes[axis].min = options[axis].min;
 
				axes[axis].max = options[axis].max;
 
				axes[axis].used = false;
 
			}
 

	
 
			for (var i = 0; i < series.length; ++i) {
 
				var s = series[i];
 
				var data = s.data,
 
					axisx = s.xaxis, axisy = s.yaxis,
 
					xmin = topSentry, xmax = bottomSentry,
 
					ymin = topSentry, ymax = bottomSentry,
 
					x, y, p;
 

	
 
				axisx.used = axisy.used = true;
 

	
 
				if (s.bars.show) {
 
					// make sure we got room for the bar
 
					var delta = s.bars.align == "left" ? 0 : -s.bars.barWidth/2;
 
					xmin += delta;
 
					xmax += delta + s.bars.barWidth;
 
				}
 

	
 
				for (var j = 0; j < data.length; ++j) {
 
					p = data[j];
 

	
 
					if(data[j] === null)
 
						continue;
 

	
 
					x = p.x;
 
					y = p.y;
 

	
 
					if(L.isObject(x) && x.getTime) {	// this is a Date object
 
						x = x.getTime()/1000;
 
					}
 

	
 
					if(L.isObject(y) && y.getTime) {	// this is a Date object
 
						y = y.getTime()/1000;
 
					}
 

	
 
					// convert to number
 
					if (x != null && !isNaN(x = +x)) {
 
						if (x < xmin)
 
							xmin = x;
 
						if (x > xmax)
 
							xmax = x;
 
					}
 
					else
 
						x = null;
 

	
 
					if (y != null && !isNaN(y = +y)) {
 
						if (y < ymin)
 
							ymin = y;
 
						if (y > ymax)
 
							ymax = y;
 
					}
 
					else
 
						y = null;
 

	
 
					if (x == null || y == null)
 
						data[j] = x = y = null; // mark this point invalid
 
				}
 

	
 
				axisx.datamin = Math.min(axisx.datamin, xmin);
 
				axisx.datamax = Math.max(axisx.datamax, xmax);
 
				axisy.datamin = Math.min(axisy.datamin, ymin);
 
				axisy.datamax = Math.max(axisy.datamax, ymax);
 
			}
 
		}
 

	
 
		function constructCanvas() {
 
			function makeCanvas(width, height, container, style) {
 
				var c = document.createElement('canvas');
 
				c.width = width;
 
				c.height = height;
 
				if (typeof G_vmlCanvasManager !== 'undefined') // excanvas hack
 
					c = G_vmlCanvasManager.initElement(c);
 

	
 
				if(style) {
 
					for(var k in style) {
 
						c.style[k] = style[k];
 
					}
 
				}
 
				container.appendChild(c);
 

	
 
				return c;
 
			}
 

	
 
			canvasWidth = parseInt(DOM.getStyle(target, 'width'), 10);
 
			canvasHeight = parseInt(DOM.getStyle(target, 'height'), 10);
 
			target.innerHTML = ""; // clear target
 
			target.style.position = "relative"; // for positioning labels and overlay
 

	
 
			if (canvasWidth <= 0 || canvasHeight <= 0)
 
				throw "Invalid dimensions for plot, width = " + canvasWidth + ", height = " + canvasHeight;
 

	
 
			if (YAHOO.env.ua.ie) {
 
				G_vmlCanvasManager.init_(document);
 
			}
 

	
 
			// the canvas
 
			canvas = makeCanvas(canvasWidth, canvasHeight, target);
 
			ctx = canvas.getContext("2d");
 

	
 
			// overlay canvas for interactive features
 
			overlay = makeCanvas(canvasWidth, canvasHeight, target, { position: 'absolute', left: '0px', top: '0px' });
 
			octx = overlay.getContext("2d");
 

	
 
			// we include the canvas in the event holder too, because IE 7
 
			// sometimes has trouble with the stacking order
 
			eventHolder = [overlay, canvas];
 

	
 
			// bind events
 
			if (options.selection.mode != null || options.crosshair.mode != null || options.grid.hoverable) {
 
				E.on(eventHolder, 'mousemove', onMouseMove);
 

	
 
				if (options.selection.mode != null)
 
					E.on(eventHolder, "mousedown", onMouseDown);
 
			}
 

	
 
			if (options.crosshair.mode != null)
 
				E.on(eventHolder, "mouseout", onMouseOut);
 

	
 
			if (options.grid.clickable)
 
				E.on(eventHolder, "click", onClick);
 
		}
 

	
 
		function setupGrid() {
 
			function setupAxis(axis, options, type) {
 
				setRange(axis, options);
 
				prepareTickGeneration(axis, options);
 
				setTicks(axis, options);
 
				// add transformation helpers
 
				if (type == 'x') {
 
					// data point to canvas coordinate
 
					axis.p2c = function (p) { return (p - axis.min) * axis.scale; };
 
					// canvas coordinate to data point
 
					axis.c2p = function (c) { return axis.min + c / axis.scale; };
 
				}
 
				else {
 
					axis.p2c = function (p) { return (axis.max - p) * axis.scale; };
 
					axis.c2p = function (c) { return axis.max - c / axis.scale; };
 
				}
 
			}
 

	
 
			for (var axis in axes)
 
				setupAxis(axes[axis], options[axis], axis.charAt(0));
 

	
 
			setSpacing();
 
			if(options.grid.show)
 
			  insertLabels();
 
			insertLegend();
 
			insertAxisLabels();
 
		}
 

	
 
		function setRange(axis, axisOptions) {
 
			var min = axisOptions.min != null ? (axisOptions.scaleType == 'log' ? Math.log(axisOptions.min<=0?1:axisOptions.min) * Math.LOG10E : axisOptions.min) : axis.datamin;
 
			var max = axisOptions.max != null ? (axisOptions.scaleType == 'log' ? Math.log(axisOptions.max) * Math.LOG10E : axisOptions.max) : axis.datamax;
 

	
 
			if(axisOptions.mode === 'time') {
 
				if(L.isObject(min) && min.getTime) min = min.getTime()/1000;
 
				if(L.isObject(max) && max.getTime) max = max.getTime()/1000;
 
			}
 

	
 
			// degenerate case
 
			if (min == Number.POSITIVE_INFINITY)
 
				min = 0;
 
			if (max == Number.NEGATIVE_INFINITY)
 
				max = 1;
 

	
 
			if (max - min == 0.0) {
 
				// degenerate case
 
				var widen = max == 0 ? 1 : 0.01;
 

	
 
				if (axisOptions.min == null)
 
					min -= widen;
 
				// alway widen max if we couldn't widen min to ensure we
 
				// don't fall into min == max which doesn't work
 
				if (axisOptions.max == null || axisOptions.min != null)
 
					max += widen;
 
			}
 
			else {
 
				// consider autoscaling
 
				var margin = axisOptions.autoscaleMargin;
 
				if (margin != null) {
 
					if (axisOptions.min == null) {
 
						min -= (max - min) * margin;
 
						// make sure we don't go below zero if all values
 
						// are positive
 
						if (min < 0 && axis.datamin >= 0)
 
							min = 0;
 
					}
 
					if (axisOptions.max == null) {
 
						max += (max - min) * margin;
 
						if (max > 0 && axis.datamax <= 0)
 
							max = 0;
 
					}
 
				}
 
			}
 
			axis.min = min;
 
			axis.max = max;
 
		}
 

	
 
		function prepareTickGeneration(axis, axisOptions) {
 
			// estimate number of ticks
 
			var noTicks;
 
			if (typeof axisOptions.ticks == "number" && axisOptions.ticks > 0)
 
				noTicks = axisOptions.ticks;
 
			else if (axis == axes.xaxis || axis == axes.x2axis)
 
				noTicks = canvasWidth / 100;
 
			else
 
				noTicks = canvasHeight / 60;
 

	
 
			var delta = (axis.max - axis.min) / noTicks;
 
			var size, generator, unit, formatter, magn, norm;
 

	
 
			if (axisOptions.mode == "time") {
 
				// pretty handling of time
 

	
 
				delta*=1000;
 

	
 
				// map of app. size of time units in milliseconds
 
				var timeUnitSize = {
 
					"second": 1000,
 
					"minute": 60 * 1000,
 
					"hour": 60 * 60 * 1000,
 
					"day": 24 * 60 * 60 * 1000,
 
					"month": 30 * 24 * 60 * 60 * 1000,
 
					"year": 365.2425 * 24 * 60 * 60 * 1000
 
				};
 

	
 

	
 
				// the allowed tick sizes, after 1 year we use
 
				// an integer algorithm
 
				var spec = [
 
					[1, "second"], [2, "second"], [5, "second"], [10, "second"],
 
					[30, "second"], 
 
					[1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],
 
					[30, "minute"], 
 
					[1, "hour"], [2, "hour"], [4, "hour"],
 
					[8, "hour"], [12, "hour"],
 
					[1, "day"], [2, "day"], [3, "day"],
 
					[0.25, "month"], [0.5, "month"], [1, "month"],
 
					[2, "month"], [3, "month"], [6, "month"],
 
					[1, "year"]
 
				];
 

	
 
				var minSize = 0;
 
				if (axisOptions.minTickSize != null) {
 
					if (typeof axisOptions.tickSize == "number")
 
						minSize = axisOptions.tickSize;
 
					else
 
						minSize = axisOptions.minTickSize[0] * timeUnitSize[axisOptions.minTickSize[1]];
 
				}
 

	
 
				for (var i = 0; i < spec.length - 1; ++i)
 
					if (delta < (spec[i][0] * timeUnitSize[spec[i][1]]
 
								 + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2
 
					   && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize)
 
						break;
 
				size = spec[i][0];
 
				unit = spec[i][1];
 

	
 
				// special-case the possibility of several years
 
				if (unit == "year") {
 
					magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10));
 
					norm = (delta / timeUnitSize.year) / magn;
 
					if (norm < 1.5)
 
						size = 1;
 
					else if (norm < 3)
 
						size = 2;
 
					else if (norm < 7.5)
 
						size = 5;
 
					else
 
						size = 10;
 

	
 
					size *= magn;
 
				}
 

	
 
				if (axisOptions.tickSize) {
 
					size = axisOptions.tickSize[0];
 
					unit = axisOptions.tickSize[1];
 
				}
 

	
 
				generator = function(axis) {
 
					var ticks = [],
 
						tickSize = axis.tickSize[0], unit = axis.tickSize[1],
 
						d = new Date(axis.min*1000);
 

	
 
					var step = tickSize * timeUnitSize[unit];
 

	
 
					if (unit == "second")
 
						d.setUTCSeconds(floorInBase(d.getUTCSeconds(), tickSize));
 
					if (unit == "minute")
 
						d.setUTCMinutes(floorInBase(d.getUTCMinutes(), tickSize));
 
					if (unit == "hour")
 
						d.setUTCHours(floorInBase(d.getUTCHours(), tickSize));
 
					if (unit == "month")
 
						d.setUTCMonth(floorInBase(d.getUTCMonth(), tickSize));
 
					if (unit == "year")
 
						d.setUTCFullYear(floorInBase(d.getUTCFullYear(), tickSize));
 

	
 
					// reset smaller components
 
					d.setUTCMilliseconds(0);
 
					if (step >= timeUnitSize.minute)
 
						d.setUTCSeconds(0);
 
					if (step >= timeUnitSize.hour)
 
						d.setUTCMinutes(0);
 
					if (step >= timeUnitSize.day)
 
						d.setUTCHours(0);
 
					if (step >= timeUnitSize.day * 4)
 
						d.setUTCDate(1);
 
					if (step >= timeUnitSize.year)
 
						d.setUTCMonth(0);
 

	
 

	
 
					var carry = 0, v = Number.NaN, prev;
 
					do {
 
						prev = v;
 
						v = d.getTime();
 
						ticks.push({ v: v/1000, label: axis.tickFormatter(v, axis) });
 
						if (unit == "month") {
 
							if (tickSize < 1) {
 
								// a bit complicated - we'll divide the month
 
								// up but we need to take care of fractions
 
								// so we don't end up in the middle of a day
 
								d.setUTCDate(1);
 
								var start = d.getTime();
 
								d.setUTCMonth(d.getUTCMonth() + 1);
 
								var end = d.getTime();
 
								d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);
 
								carry = d.getUTCHours();
 
								d.setUTCHours(0);
 
							}
 
							else
 
								d.setUTCMonth(d.getUTCMonth() + tickSize);
 
						}
 
						else if (unit == "year") {
 
							d.setUTCFullYear(d.getUTCFullYear() + tickSize);
 
						}
 
						else
 
							d.setTime(v + step);
 
					} while (v < axis.max*1000 && v != prev);
 

	
 
					return ticks;
 
				};
 

	
 
				formatter = function (v, axis) {
 
					var d = new Date(v);
 

	
 
					// first check global format
 
					if (axisOptions.timeformat != null)
 
						return YAHOO.util.Date.format(d, {format: axisOptions.timeformat}, options.locale);
 

	
 
					var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];
 
					var span = axis.max - axis.min;
 
					span*=1000;
 

	
 
					if (t < timeUnitSize.minute)
 
						var fmt = "%k:%M:%S";
 
					else if (t < timeUnitSize.day) {
 
						if (span < 2 * timeUnitSize.day)
 
							fmt = "%k:%M";
 
						else
 
							fmt = "%b %d %k:%M";
 
					}
 
					else if (t < timeUnitSize.month)
 
						fmt = "%b %d";
 
					else if (t < timeUnitSize.year) {
 
						if (span < timeUnitSize.year/2)
 
							fmt = "%b";
 
						else
 
							fmt = "%b %Y";
 
					}
 
					else
 
						fmt = "%Y";
 

	
 
					return YAHOO.util.Date.format(d, {format: fmt}, axisOptions.timelang);
 
				};
 
			}
 
			else {
 
				// pretty rounding of base-10 numbers
 
				var maxDec = axisOptions.tickDecimals;
 
				var dec = -Math.floor(Math.log(delta) / Math.LN10);
 
				if (maxDec != null && dec > maxDec)
 
					dec = maxDec;
 

	
 
				magn = Math.pow(10, -dec);
 
				norm = delta / magn; // norm is between 1.0 and 10.0
 

	
 
				if (norm < 1.5)
 
					size = 1;
 
				else if (norm < 3) {
 
					size = 2;
 
					// special case for 2.5, requires an extra decimal
 
					if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {
 
						size = 2.5;
 
						++dec;
 
					}
 
				}
 
				else if (norm < 7.5)
 
					size = 5;
 
				else
 
					size = 10;
 

	
 
				size *= magn;
 

	
 
				if (axisOptions.minTickSize != null && size < axisOptions.minTickSize)
 
					size = axisOptions.minTickSize;
 

	
 
				if (axisOptions.tickSize != null)
 
					size = axisOptions.tickSize;
 

	
 
				axis.tickDecimals = Math.max(0, (maxDec != null) ? maxDec : dec);
 

	
 
				generator = function (axis) {
 
					var ticks = [];
 

	
 
					// spew out all possible ticks
 
					var start = floorInBase(axis.min, axis.tickSize),
 
						i = 0, v = Number.NaN, prev;
 
					do {
 
						prev = v;
 
						v = start + i * axis.tickSize;
 
						var t=v;
 
						if(axis.scaleType == 'log') {
 
							t = Math.exp(t / Math.LOG10E);
 
						}
 
						ticks.push({ v: v, label: axis.tickFormatter(t, axis) });
 
						++i;
 
					} while (v < axis.max && v != prev);
 
					return ticks;
 
				};
 

	
 
				formatter = function (v, axis) {
 
					return v.toFixed(axis.tickDecimals);
 
				};
 
			}
 

	
 
			axis.scaleType = axisOptions.scaleType;
 
			axis.tickSize = unit ? [size, unit] : size;
 
			axis.tickGenerator = generator;
 
			if (L.isFunction(axisOptions.tickFormatter))
 
				axis.tickFormatter = function (v, axis) { return "" + axisOptions.tickFormatter(v, axis); };
 
			else
 
				axis.tickFormatter = formatter;
 
			if (axisOptions.labelWidth != null)
 
				axis.labelWidth = axisOptions.labelWidth;
 
			if (axisOptions.labelHeight != null)
 
				axis.labelHeight = axisOptions.labelHeight;
 
		}
 

	
 
		function setTicks(axis, axisOptions) {
 
			axis.ticks = [];
 

	
 
			if (!axis.used)
 
				return;
 

	
 
			if (axisOptions.ticks == null)
 
				axis.ticks = axis.tickGenerator(axis);
 
			else if (typeof axisOptions.ticks == "number") {
 
				if (axisOptions.ticks > 0)
 
					axis.ticks = axis.tickGenerator(axis);
 
			}
 
			else if (axisOptions.ticks) {
 
				var ticks = axisOptions.ticks;
 

	
 
				if (L.isFunction(ticks))
 
					// generate the ticks
 
					ticks = ticks({ min: axis.min, max: axis.max });
 

	
 
				// clean up the user-supplied ticks, copy them over
 
				var v;
 
				for (var i = 0; i < ticks.length; ++i) {
 
					var label = null;
 
					var t = ticks[i];
 
					if (typeof t == "object") {
 
						v = t[0];
 
						if (t.length > 1)
 
							label = t[1];
 
					}
 
					else
 
						v = t;
 
					if (axisOptions.scaleType == 'log') {
 
						if (label == null)
 
							label = v;
 
						v = Math.log(v) * Math.LOG10E;
 
					}
 

	
 
					if (label == null)
 
						label = axis.tickFormatter(v, axis);
 
					axis.ticks[i] = { v: v, label: label };
 
				}
 
			}
 

	
 
			if (axisOptions.autoscaleMargin != null && axis.ticks.length > 0) {
 
				// snap to ticks
 
				if (axisOptions.min == null)
 
					axis.min = Math.min(axis.min, axis.ticks[0].v);
 
				if (axisOptions.max == null && axis.ticks.length > 1)
 
					axis.max = Math.min(axis.max, axis.ticks[axis.ticks.length - 1].v);
 
			}
 
		}
 

	
 
		function setSpacing() {
 
			function measureXLabels(axis) {
 
  			if(options.grid.show){
 
  				// to avoid measuring the widths of the labels, we
 
  				// construct fixed-size boxes and put the labels inside
 
  				// them, we don't need the exact figures and the
 
  				// fixed-size box content is easy to center
 
  				if (axis.labelWidth == null)
 
  					axis.labelWidth = canvasWidth / 6;
 

	
 
  				// measure x label heights
 
  				if (axis.labelHeight == null) {
 
  					var labels = [];
 
  					for (var i = 0; i < axis.ticks.length; ++i) {
 
  						var l = axis.ticks[i].label;
 
  						if (l)
 
  							labels.push('<div class="tickLabel" style="float:left;width:' + axis.labelWidth + 'px">' + l + '</div>');
 
  					}
 

	
 
  					axis.labelHeight = 0;
 
  					if (labels.length > 0) {
 
  						var dummyDiv = target.appendChild(DOM.createElementFromMarkup('<div style="position:absolute;top:-10000px;width:10000px;font-size:smaller">'
 
  										 + labels.join("") + '<div style="clear:left"></div></div>'));
 
  						axis.labelHeight = dummyDiv.offsetHeight;
 
  						target.removeChild(dummyDiv);
 
  					}
 
  				}
 
			  }
 
			  else{
 
				  axis.labelHeight = 0;
 
				  axis.labelWidth = 0;
 
			  }
 
			}
 

	
 
			function measureYLabels(axis) {
 
  			if(options.grid.show){
 
  				if (axis.labelWidth == null || axis.labelHeight == null) {
 
  					var labels = [], l;
 
  					// calculate y label dimensions
 
  					for (var i = 0; i < axis.ticks.length; ++i) {
 
  						l = axis.ticks[i].label;
 
  						if (l)
 
  							labels.push('<div class="tickLabel">' + l + '</div>');
 
  					}
 

	
 
  					if (labels.length > 0) {
 
  						var dummyDiv = target.appendChild(DOM.createElementFromMarkup('<div style="position:absolute;top:-10000px;font-size:smaller">'
 
  										 + labels.join("") + '</div>'));
 
  						if (axis.labelWidth == null)
 
  							axis.labelWidth = dummyDiv.offsetWidth;
 
  						if (axis.labelHeight == null)
 
  							axis.labelHeight = dummyDiv.firstChild.offsetHeight;
 
  						target.removeChild(dummyDiv);
 
  					}
 

	
 
  					if (axis.labelWidth == null)
 
  						axis.labelWidth = 0;
 
  					if (axis.labelHeight == null)
 
  						axis.labelHeight = 0;
 
  				}
 
  		  }
 
			  else{
 
				  axis.labelHeight = 0;
 
				  axis.labelWidth = 0;
 
			  }
 
			}
 

	
 
			measureXLabels(axes.xaxis);
 
			measureYLabels(axes.yaxis);
 
			measureXLabels(axes.x2axis);
 
			measureYLabels(axes.y2axis);
 
			// get the most space needed around the grid for things
 
			// that may stick out
 
			var maxOutset = (options.grid.show) ? options.grid.borderWidth : 0;
 
			for (var i = 0; i < series.length; ++i)
 
				maxOutset = (Math.max(maxOutset, 2 * (((series[i].points.show) ? series[i].points.radius : 0 ) + series[i].points.lineWidth/2)));
 
      
 
			plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = maxOutset;
 

	
 
			var margin = options.grid.labelMargin + options.grid.borderWidth;
 

	
 
			if (axes.xaxis.labelHeight > 0)
 
				plotOffset.bottom = Math.max(maxOutset, axes.xaxis.labelHeight + margin);
 
			if (axes.yaxis.labelWidth > 0)
 
				plotOffset.left = Math.max(maxOutset, axes.yaxis.labelWidth + margin);
 

	
 
			if (axes.x2axis.labelHeight > 0)
 
				plotOffset.top = Math.max(maxOutset, axes.x2axis.labelHeight + margin);
 

	
 
			if (axes.y2axis.labelWidth > 0)
 
				plotOffset.right = Math.max(maxOutset, axes.y2axis.labelWidth + margin);
 

	
 
			plotWidth = canvasWidth - plotOffset.left - plotOffset.right;
 
			plotHeight = canvasHeight - plotOffset.bottom - plotOffset.top;
 

	
 
			// precompute how much the axis is scaling a point in canvas space
 
			for(var axis in axes) {
 
				axes[axis].scale = (axis.charAt(0) == 'x' ? plotWidth : plotHeight) / (axes[axis].max - axes[axis].min);
 
			}
 
		}
 

	
 
		function draw() {
 
			drawGrid();
 
			for (var i = 0; i < series.length; i++) {
 
				drawSeries(series[i]);
 
			}
 
		}
 

	
 
		function extractRange(ranges, coord) {
 
			var firstAxis = coord + "axis",
 
				secondaryAxis = coord + "2axis",
 
				axis, from, to, reverse;
 

	
 
			if (ranges[firstAxis]) {
 
				axis = firstAxis;
 
			}
 
			else if (ranges[secondaryAxis]) {
 
				axis = secondaryAxis;
 
			}
 
			else {
 
				return { from: null, to: null, axis: axes[firstAxis] };
 
			}
 

	
 
			from = ranges[axis].from;
 
			to = ranges[axis].to;
 

	
 
			if (options[axis].scaleType == 'log') {
 
				if (from != null)
 
					from = Math.log(from) * Math.LOG10E;
 
				if (to != null)
 
					to = Math.log(to) * Math.LOG10E;
 
			}
 

	
 
			axis = axes[axis];
 

	
 
			// auto-reverse as an added bonus
 
			if (from != null && to != null && from > to)
 
				return { from: to, to: from, axis: axis };
 

	
 
			return { from: from, to: to, axis: axis };
 
		}
 

	
 
		function drawGrid() {
 
			var i;
 

	
 
			ctx.save();
 
			ctx.clearRect(0, 0, canvasWidth, canvasHeight);
 
			ctx.translate(plotOffset.left, plotOffset.top);
 

	
 
			// draw background, if any
 
			if (options.grid.backgroundColor) {
 
				ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)");
 
				ctx.fillRect(0, 0, plotWidth, plotHeight);
 
			}
 

	
 
			// draw markings
 
			var markings = options.grid.markings;
 
			if (markings) {
 
				if (L.isFunction(markings))
 
					markings = markings({ xaxis: axes.xaxis, yaxis: axes.yaxis, x2axis: axes.x2axis, y2axis: axes.y2axis });
 

	
 
				for (i = 0; i < markings.length; ++i) {
 
					var m = markings[i],
 
						xrange = extractRange(m, "x"),
 
						yrange = extractRange(m, "y");
 

	
 
					// fill in missing
 
					if (xrange.from == null)
 
						xrange.from = xrange.axis.min;
 
					if (xrange.to == null)
 
						xrange.to = xrange.axis.max;
 
					if (yrange.from == null)
 
						yrange.from = yrange.axis.min;
 
					if (yrange.to == null)
 
						yrange.to = yrange.axis.max;
 

	
 
					// clip
 
					if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||
 
						yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)
 
						continue;
 

	
 
					xrange.from = Math.max(xrange.from, xrange.axis.min);
 
					xrange.to = Math.min(xrange.to, xrange.axis.max);
 
					yrange.from = Math.max(yrange.from, yrange.axis.min);
 
					yrange.to = Math.min(yrange.to, yrange.axis.max);
 

	
 
					if (xrange.from == xrange.to && yrange.from == yrange.to)
 
						continue;
 

	
 
					// then draw
 
					xrange.from = xrange.axis.p2c(xrange.from);
 
					xrange.to = xrange.axis.p2c(xrange.to);
 
					yrange.from = yrange.axis.p2c(yrange.from);
 
					yrange.to = yrange.axis.p2c(yrange.to);
 

	
 
					if (xrange.from == xrange.to || yrange.from == yrange.to) {
 
						// draw line
 
						ctx.strokeStyle = m.color || options.grid.markingsColor;
 
						ctx.beginPath();
 
						ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;
 
						ctx.moveTo(xrange.from, yrange.from);
 
						ctx.lineTo(xrange.to, yrange.to);
 
						ctx.stroke();
 
					}
 
					else {
 
						// fill area
 
						ctx.fillStyle = m.color || options.grid.markingsColor;
 
						ctx.fillRect(xrange.from, yrange.to,
 
									 xrange.to - xrange.from,
 
									 yrange.from - yrange.to);
 
					}
 
				}
 
			}
 

	
 
			if(options.grid.show && options.grid.showLines) {
 
				// draw the inner grid
 
				ctx.lineWidth = 1;
 
				ctx.strokeStyle = options.grid.tickColor;
 
				ctx.beginPath();
 
				var v, axis = axes.xaxis;
 
				for (i = 0; i < axis.ticks.length; ++i) {
 
					v = axis.ticks[i].v;
 
					if (v <= axis.min || v >= axes.xaxis.max)
 
						continue;   // skip those lying on the axes
 
	
 
					ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 0);
 
					ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, plotHeight);
 
				}
 
	
 
				axis = axes.yaxis;
 
				for (i = 0; i < axis.ticks.length; ++i) {
 
					v = axis.ticks[i].v;
 
					if (v <= axis.min || v >= axis.max)
 
						continue;
 
	
 
					ctx.moveTo(0, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
 
					ctx.lineTo(plotWidth, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
 
				}
 
	
 
				axis = axes.x2axis;
 
				for (i = 0; i < axis.ticks.length; ++i) {
 
					v = axis.ticks[i].v;
 
					if (v <= axis.min || v >= axis.max)
 
						continue;
 
	
 
					ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, -5);
 
					ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 5);
 
				}
 
	
 
				axis = axes.y2axis;
 
				for (i = 0; i < axis.ticks.length; ++i) {
 
					v = axis.ticks[i].v;
 
					if (v <= axis.min || v >= axis.max)
 
						continue;
 
	
 
					ctx.moveTo(plotWidth-5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
 
					ctx.lineTo(plotWidth+5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
 
				}
 
	
 
				ctx.stroke();
 
			}
 

	
 
			if (options.grid.show && options.grid.borderWidth) {
 
				// draw border
 
				var bw = options.grid.borderWidth;
 
				ctx.lineWidth = bw;
 
				ctx.strokeStyle = options.grid.borderColor;
 
				ctx.lineJoin = "round";
 
				ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);
 
			}
 

	
 
			ctx.restore();
 
		}
 

	
 
		function insertLabels() {
 
			DOM.getElementsByClassName("tickLabels", "div", target, DOM.removeElement);
 

	
 
			var html = ['<div class="tickLabels" style="font-size:smaller;color:' + options.grid.color + '">'];
 

	
 
			function addLabels(axis, labelGenerator) {
 
				for (var i = 0; i < axis.ticks.length; ++i) {
 
					var tick = axis.ticks[i];
 
					if (!tick.label || tick.v < axis.min || tick.v > axis.max)
 
						continue;
 
					html.push(labelGenerator(tick, axis));
 
				}
 
			}
 

	
 
			var margin = options.grid.labelMargin + options.grid.borderWidth;
 

	
 
			addLabels(axes.xaxis, function (tick, axis) {
 
				return '<div style="position:absolute;top:' + (plotOffset.top + plotHeight + margin) + 'px;left:' + Math.round(plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2) + 'px;width:' + axis.labelWidth + 'px;text-align:center" class="tickLabel">' + tick.label + "</div>";
 
			});
 

	
 

	
 
			addLabels(axes.yaxis, function (tick, axis) {
 
				return '<div style="position:absolute;top:' + Math.round(plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2) + 'px;right:' + (plotOffset.right + plotWidth + margin) + 'px;width:' + axis.labelWidth + 'px;text-align:right" class="tickLabel">' + tick.label + "</div>";
 
			});
 

	
 
			addLabels(axes.x2axis, function (tick, axis) {
 
				return '<div style="position:absolute;bottom:' + (plotOffset.bottom + plotHeight + margin) + 'px;left:' + Math.round(plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2) + 'px;width:' + axis.labelWidth + 'px;text-align:center" class="tickLabel">' + tick.label + "</div>";
 
			});
 

	
 
			addLabels(axes.y2axis, function (tick, axis) {
 
				return '<div style="position:absolute;top:' + Math.round(plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2) + 'px;left:' + (plotOffset.left + plotWidth + margin) +'px;width:' + axis.labelWidth + 'px;text-align:left" class="tickLabel">' + tick.label + "</div>";
 
			});
 

	
 
			html.push('</div>');
 

	
 
			target.appendChild(DOM.createElementFromMarkup(html.join("")));
 
		}
 

	
 
		function insertAxisLabels() {
 
			var xLocation, yLocation;
 
			if( options.xaxis.label ) {
 
				yLocation = plotOffset.top + plotHeight + ( axes.xaxis.labelHeight * 1.5 );
 
				xLocation = plotOffset.left;
 
				DOM.getElementsByClassName("xaxislabel", "div", target, DOM.removeElement);
 
				target.appendChild(
 
					DOM.createElementFromMarkup(
 
						"<div class='xaxislabel' style='color:" + options.grid.color + ";width:" + plotWidth + "px;"
 
							+ "text-align:center;position:absolute;top:" + yLocation + "px;left:" + xLocation + "px;'>"
 
							+ options.xaxis.label + "</div>"
 
					)
 
				);
 
			}
 
			if( options.yaxis.label ) {
 
				xLocation = plotOffset.left - ( axes.yaxis.labelWidth * 2 ) - options.grid.labelFontSize;
 
				yLocation = plotOffset.top + plotHeight/2;
 
				DOM.getElementsByClassName("yaxislabel", "div", target, DOM.removeElement);
 

	
 
				target.appendChild(
 
					DOM.createElementFromMarkup(
 
						"<div class='yaxislabel' style='-moz-transform:rotate(270deg);-webkit-transform:rotate(270deg);writing-mode:tb-rl;filter:flipV flipH;color:" + options.grid.color + ";"
 
							+ "text-align:center;position:absolute;top:" + yLocation + "px;left:" + xLocation + "px;'>"
 
							+ options.yaxis.label + "</div>")
 
				);
 
			}
 
	        }
 

	
 
		function drawSeries(series) {
 
			if (series.lines.show)
 
				drawSeriesLines(series);
 
			if (series.bars.show)
 
				drawSeriesBars(series);
 
			if (series.points.show)
 
				drawSeriesPoints(series);
 
		}
 

	
 
		function drawSeriesLines(series) {
 
			function plotLine(data, xoffset, yoffset, axisx, axisy) {
 
				var prev = null, cur=null, drawx = null, drawy = null;
 

	
 
				ctx.beginPath();
 
				for (var i = 0; i < data.length; i++) {
 
					prev = cur;
 
					cur = data[i];
 

	
 
					if(prev == null || cur == null)
 
						continue;
 

	
 
					var x1 = prev.x, y1 = prev.y,
 
						x2 = cur.x, y2 = cur.y;
 

	
 
					// clip with ymin
 
					if (y1 <= y2 && y1 < axisy.min) {
 
						if (y2 < axisy.min)
 
							continue;   // line segment is outside
 
						// compute new intersection point
 
						x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
 
						y1 = axisy.min;
 
					}
 
					else if (y2 <= y1 && y2 < axisy.min) {
 
						if (y1 < axisy.min)
 
							continue;
 
						x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
 
						y2 = axisy.min;
 
					}
 

	
 
					// clip with ymax
 
					if (y1 >= y2 && y1 > axisy.max) {
 
						if (y2 > axisy.max)
 
							continue;
 
						x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
 
						y1 = axisy.max;
 
					}
 
					else if (y2 >= y1 && y2 > axisy.max) {
 
						if (y1 > axisy.max)
 
							continue;
 
						x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
 
						y2 = axisy.max;
 
					}
 

	
 
					// clip with xmin
 
					if (x1 <= x2 && x1 < axisx.min) {
 
						if (x2 < axisx.min)
 
							continue;
 
						y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
 
						x1 = axisx.min;
 
					}
 
					else if (x2 <= x1 && x2 < axisx.min) {
 
						if (x1 < axisx.min)
 
							continue;
 
						y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
 
						x2 = axisx.min;
 
					}
 

	
 
					// clip with xmax
 
					if (x1 >= x2 && x1 > axisx.max) {
 
						if (x2 > axisx.max)
 
							continue;
 
						y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
 
						x1 = axisx.max;
 
					}
 
					else if (x2 >= x1 && x2 > axisx.max) {
 
						if (x1 > axisx.max)
 
							continue;
 
						y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
 
						x2 = axisx.max;
 
					}
 

	
 
					if (drawx != axisx.p2c(x1) + xoffset || drawy != axisy.p2c(y1) + yoffset)
 
						ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);
 

	
 
					drawx = axisx.p2c(x2) + xoffset;
 
					drawy = axisy.p2c(y2) + yoffset;
 
					ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);
 
				}
 
				ctx.stroke();
 
			}
 

	
 
			function plotLineArea(data, axisx, axisy) {
 
				var prev, cur = null,
 
					bottom = Math.min(Math.max(0, axisy.min), axisy.max),
 
					top, lastX = 0, areaOpen = false;
 

	
 
				for (var i = 0; i < data.length; i++) {
 
					prev = cur;
 
					cur = data[i];
 

	
 
					if (areaOpen && x1 != null && x2 == null) {
 
						// close area
 
						ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom));
 
						ctx.fill();
 
						areaOpen = false;
 
						continue;
 
					}
 

	
 
					if (prev == null || cur == null) {
 
						if(areaOpen) {
 
							ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom));
 
							ctx.fill();
 
						}
 
						areaOpen = false;
 
						continue;
 
					}
 

	
 
					var x1 = prev.x, y1 = prev.y,
 
						x2 = cur.x, y2 = cur.y;
 

	
 
					// clip x values
 

	
 
					// clip with xmin
 
					if (x1 <= x2 && x1 < axisx.min) {
 
						if (x2 < axisx.min)
 
							continue;
 
						y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
 
						x1 = axisx.min;
 
					}
 
					else if (x2 <= x1 && x2 < axisx.min) {
 
						if (x1 < axisx.min)
 
							continue;
 
						y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
 
						x2 = axisx.min;
 
					}
 

	
 
					// clip with xmax
 
					if (x1 >= x2 && x1 > axisx.max) {
 
						if (x2 > axisx.max)
 
							continue;
 
						y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
 
						x1 = axisx.max;
 
					}
 
					else if (x2 >= x1 && x2 > axisx.max) {
 
						if (x1 > axisx.max)
 
							continue;
 
						y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
 
						x2 = axisx.max;
 
					}
 

	
 
					if (!areaOpen) {
 
						// open area
 
						ctx.beginPath();
 
						ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));
 
						areaOpen = true;
 
					}
 

	
 
					// now first check the case where both is outside
 
					if (y1 >= axisy.max && y2 >= axisy.max) {
 
						ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));
 
						ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));
 
						lastX = x2;
 
						continue;
 
					}
 
					else if (y1 <= axisy.min && y2 <= axisy.min) {
 
						ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));
 
						ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));
 
						lastX = x2;
 
						continue;
 
					}
 

	
 
					// else it's a bit more complicated, there might
 
					// be two rectangles and two triangles we need to fill
 
					// in; to find these keep track of the current x values
 
					var x1old = x1, x2old = x2;
 

	
 
					// and clip the y values, without shortcutting
 

	
 
					// clip with ymin
 
					if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {
 
						x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
 
						y1 = axisy.min;
 
					}
 
					else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {
 
						x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
 
						y2 = axisy.min;
 
					}
 

	
 
					// clip with ymax
 
					if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {
 
						x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
 
						y1 = axisy.max;
 
					}
 
					else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {
 
						x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
 
						y2 = axisy.max;
 
					}
 

	
 

	
 
					// if the x value was changed we got a rectangle
 
					// to fill
 
					if (x1 != x1old) {
 
						if (y1 <= axisy.min)
 
							top = axisy.min;
 
						else
 
							top = axisy.max;
 

	
 
						ctx.lineTo(axisx.p2c(x1old), axisy.p2c(top));
 
						ctx.lineTo(axisx.p2c(x1), axisy.p2c(top));
 
					}
 

	
 
					// fill the triangles
 
					ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));
 
					ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));
 

	
 
					// fill the other rectangle if it's there
 
					if (x2 != x2old) {
 
						if (y2 <= axisy.min)
 
							top = axisy.min;
 
						else
 
							top = axisy.max;
 

	
 
						ctx.lineTo(axisx.p2c(x2), axisy.p2c(top));
 
						ctx.lineTo(axisx.p2c(x2old), axisy.p2c(top));
 
					}
 

	
 
					lastX = Math.max(x2, x2old);
 
				}
 

	
 
				if (areaOpen) {
 
					ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom));
 
					ctx.fill();
 
				}
 
			}
 

	
 
			ctx.save();
 
			ctx.translate(plotOffset.left, plotOffset.top);
 
			ctx.lineJoin = "round";
 

	
 
			var lw = series.lines.lineWidth,
 
				sw = series.shadowSize;
 
			// FIXME: consider another form of shadow when filling is turned on
 
			if (lw > 0 && sw > 0) {
 
				// draw shadow as a thick and thin line with transparency
 
				ctx.lineWidth = sw;
 
				ctx.strokeStyle = "rgba(0,0,0,0.1)";
 
				var xoffset = 1;
 
				plotLine(series.data, xoffset, Math.sqrt((lw/2 + sw/2)*(lw/2 + sw/2) - xoffset*xoffset), series.xaxis, series.yaxis);
 
				ctx.lineWidth = sw/2;
 
				plotLine(series.data, xoffset, Math.sqrt((lw/2 + sw/4)*(lw/2 + sw/4) - xoffset*xoffset), series.xaxis, series.yaxis);
 
			}
 

	
 
			ctx.lineWidth = lw;
 
			ctx.strokeStyle = series.color;
 
			var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);
 
			if (fillStyle) {
 
				ctx.fillStyle = fillStyle;
 
				plotLineArea(series.data, series.xaxis, series.yaxis);
 
			}
 

	
 
			if (lw > 0)
 
				plotLine(series.data, 0, 0, series.xaxis, series.yaxis);
 
			ctx.restore();
 
		}
 

	
 
		function drawSeriesPoints(series) {
 
			function plotPoints(data, radius, fillStyle, offset, circumference, axisx, axisy) {
 
				for (var i = 0; i < data.length; i++) {
 
					if (data[i] == null || series.dropped[i])
 
						continue;
 

	
 
					var x = data[i].x, y = data[i].y;
 
					if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)
 
						continue;
 

	
 
					ctx.beginPath();
 
					ctx.arc(axisx.p2c(x), axisy.p2c(y) + offset, radius, 0, circumference, true);
 
					if (fillStyle) {
 
						ctx.fillStyle = fillStyle;
 
						ctx.fill();
 
					}
 
					ctx.stroke();
 
				}
 
			}
 

	
 
			ctx.save();
 
			ctx.translate(plotOffset.left, plotOffset.top);
 

	
 
			var lw = series.lines.lineWidth,
 
				sw = series.shadowSize,
 
				radius = series.points.radius;
 
			if (lw > 0 && sw > 0) {
 
				// draw shadow in two steps
 
				var w = sw / 2;
 
				ctx.lineWidth = w;
 
				ctx.strokeStyle = "rgba(0,0,0,0.1)";
 
				plotPoints(series.data, radius, null, w + w/2, 2 * Math.PI,
 
						   series.xaxis, series.yaxis);
 

	
 
				ctx.strokeStyle = "rgba(0,0,0,0.2)";
 
				plotPoints(series.data, radius, null, w/2, 2 * Math.PI,
 
						   series.xaxis, series.yaxis);
 
			}
 

	
 
			ctx.lineWidth = lw;
 
			ctx.strokeStyle = series.color;
 
			plotPoints(series.data, radius,
 
					   getFillStyle(series.points, series.color), 0, 2 * Math.PI,
 
					   series.xaxis, series.yaxis);
 
			ctx.restore();
 
		}
 

	
 
		function drawBar(x, y, barLeft, barRight, offset, fill, axisx, axisy, c) {
 
			var drawLeft = true, drawRight = true,
 
				drawTop = true, drawBottom = false,
 
				left = x + barLeft, right = x + barRight,
 
				bottom = 0, top = y;
 

	
 
			// account for negative bars
 
			if (top < bottom) {
 
				top = 0;
 
				bottom = y;
 
				drawBottom = true;
 
				drawTop = false;
 
			}
 
		   
 
			// clip
 
			if (right < axisx.min || left > axisx.max ||
 
				top < axisy.min || bottom > axisy.max)
 
				return;
 

	
 
			if (left < axisx.min) {
 
				left = axisx.min;
 
				drawLeft = false;
 
			}
 

	
 
			if (right > axisx.max) {
 
				right = axisx.max;
 
				drawRight = false;
 
			}
 

	
 
			if (bottom < axisy.min) {
 
				bottom = axisy.min;
 
				drawBottom = false;
 
			}
 

	
 
			if (top > axisy.max) {
 
				top = axisy.max;
 
				drawTop = false;
 
			}
 

	
 
			left = axisx.p2c(left);
 
			bottom = axisy.p2c(bottom);
 
			right = axisx.p2c(right);
 
			top = axisy.p2c(top);
 

	
 
			// fill the bar
 
			if (fill) {
 
				c.beginPath();
 
				c.moveTo(left, bottom);
 
				c.lineTo(left, top);
 
				c.lineTo(right, top);
 
				c.lineTo(right, bottom);
 
				if(typeof fill === 'function') {
 
					c.fillStyle = fill(bottom, top);
 
				} else if(typeof fill === 'string') {
 
					c.fillStyle = fill;
 
				}
 
				c.fill();
 
			}
 

	
 
			// draw outline
 
			if (drawLeft || drawRight || drawTop || drawBottom) {
 
				c.beginPath();
 

	
 
				// FIXME: inline moveTo is buggy with excanvas
 
				c.moveTo(left, bottom + offset);
 
				if (drawLeft)
 
					c.lineTo(left, top + offset);
 
				else
 
					c.moveTo(left, top + offset);
 
				if (drawTop)
 
					c.lineTo(right, top + offset);
 
				else
 
					c.moveTo(right, top + offset);
 
				if (drawRight)
 
					c.lineTo(right, bottom + offset);
 
				else
 
					c.moveTo(right, bottom + offset);
 
				if (drawBottom)
 
					c.lineTo(left, bottom + offset);
 
				else
 
					c.moveTo(left, bottom + offset);
 
				c.stroke();
 
			}
 
		}
 

	
 
		function drawSeriesBars(series) {
 
			function plotBars(data, barLeft, barRight, offset, fill, axisx, axisy) {
 

	
 
				for (var i = 0; i < data.length; i++) {
 
					if (data[i] == null)
 
						continue;
 
					drawBar(data[i].x, data[i].y, barLeft, barRight, offset, fill, axisx, axisy, ctx);
 
				}
 
			}
 

	
 
			ctx.save();
 
			ctx.translate(plotOffset.left, plotOffset.top);
 

	
 
			// FIXME: figure out a way to add shadows (for instance along the right edge)
 
			ctx.lineWidth = series.bars.lineWidth;
 
			ctx.strokeStyle = series.color;
 
			var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;
 
			var fill = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;
 
			plotBars(series.data, barLeft, barLeft + series.bars.barWidth, 0, fill, series.xaxis, series.yaxis);
 
			ctx.restore();
 
		}
 

	
 
		function getFillStyle(filloptions, seriesColor, bottom, top) {
 
			var fill = filloptions.fill;
 
			if (!fill)
 
				return null;
 

	
 
			if (filloptions.fillColor)
 
				return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);
 

	
 
			var c = parseColor(seriesColor);
 
			c.a = typeof fill == "number" ? fill : 0.4;
 
			c.normalize();
 
			return c.toString();
 
		}
 

	
 
		function insertLegend() {
 
			DOM.getElementsByClassName("legend", "div", target, DOM.removeElement);
 

	
 
			if (!options.legend.show)
 
				return;
 

	
 
			var fragments = [], rowStarted = false,
 
				lf = options.legend.labelFormatter, s, label;
 
			for (var i = 0; i < series.length; ++i) {
 
				s = series[i];
 
				label = s.label;
 
				if (!label)
 
					continue;
 

	
 
				if (i % options.legend.noColumns == 0) {
 
					if (rowStarted)
 
						fragments.push('</tr>');
 
					fragments.push('<tr>');
 
					rowStarted = true;
 
				}
 

	
 
				if (lf)
 
					label = lf(label, s);
 

	
 
				fragments.push(
 
					'<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + s.color + ';overflow:hidden"></div></div></td>' +
 
					'<td class="legendLabel">' + label + '</td>');
 
			}
 
			if (rowStarted)
 
				fragments.push('</tr>');
 

	
 
			if (fragments.length == 0)
 
				return;
 

	
 
			var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join("") + '</table>';
 
			if (options.legend.container != null)
 
				DOM.get(options.legend.container).innerHTML = table;
 
			else {
 
				var pos = "",
 
					p = options.legend.position,
 
					m = options.legend.margin;
 
				if (m[0] == null)
 
					m = [m, m];
 
				if (p.charAt(0) == "n")
 
					pos += 'top:' + (m[1] + plotOffset.top) + 'px;';
 
				else if (p.charAt(0) == "s")
 
					pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';
 
				if (p.charAt(1) == "e")
 
					pos += 'right:' + (m[0] + plotOffset.right) + 'px;';
 
				else if (p.charAt(1) == "w")
 
					pos += 'left:' + (m[0] + plotOffset.left) + 'px;';
 
				var legend = target.appendChild(DOM.createElementFromMarkup('<div class="legend">' + table.replace('style="', 'style="position:absolute;' + pos +';') + '</div>'));
 
				if (options.legend.backgroundOpacity != 0.0) {
 
					// put in the transparent background
 
					// separately to avoid blended labels and
 
					// label boxes
 
					var c = options.legend.backgroundColor;
 
					if (c == null) {
 
						var tmp;
 
						if (options.grid.backgroundColor && typeof options.grid.backgroundColor == "string")
 
							tmp = options.grid.backgroundColor;
 
						else
 
							tmp = extractColor(legend);
 
						c = parseColor(tmp).adjust(null, null, null, 1).toString();
 
					}
 
					var div = legend.firstChild;
 
					var _el = DOM.insertBefore(
 
								DOM.createElementFromMarkup('<div style="position:absolute;width:' + parseInt(DOM.getStyle(div, 'width'), 10)
 
											+ 'px;height:' + parseInt(DOM.getStyle(div, 'height'), 10) + 'px;'
 
											+ pos +'background-color:' + c + ';"> </div>'),
 
								legend
 
							);
 
					DOM.setStyle(_el, 'opacity', options.legend.backgroundOpacity);
 
				}
 
			}
 
		}
 

	
 

	
 
		// interactive features
 

	
 
		var lastMousePos = { pageX: null, pageY: null },
 
			selection = {
 
				first: { x: -1, y: -1}, second: { x: -1, y: -1},
 
				show: false, active: false },
 
			crosshair = { pos: { x: -1, y: -1 } },
 
			highlights = [],
 
			clickIsMouseUp = false,
 
			redrawTimeout = null,
 
			hoverTimeout = null;
 

	
 
		// Returns the data item the mouse is over, or null if none is found
 
		function findNearbyItem(mouseX, mouseY) {
 
			var maxDistance = options.grid.mouseActiveRadius,
 
				lowestDistance = maxDistance * maxDistance + 1,
 
				item = null, foundPoint = false, j, x, y;
 

	
 
			function result(i, j) {
 
				return {
 
					datapoint: series[i].data[j],
 
					dataIndex: j,
 
					series: series[i],
 
					seriesIndex: i
 
				};
 
			}
 

	
 
			for (var i = 0; i < series.length; ++i) {
 
				var s = series[i],
 
					axisx = s.xaxis,
 
					axisy = s.yaxis,
 
					mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster
 
					my = axisy.c2p(mouseY),
 
					maxx = maxDistance / axisx.scale,
 
					maxy = maxDistance / axisy.scale;
 

	
 
				var data = s.data;
 

	
 
				if (s.lines.show || s.points.show) {
 
					for (j = 0; j < data.length; j++ ) {
 
						if (data[j] == null)
 
							continue;
 

	
 
						x = data[j].x;
 
						y = data[j].y;
 

	
 
						// For points and lines, the cursor must be within a
 
						// certain distance to the data point
 
						if (x - mx > maxx || x - mx < -maxx ||
 
							y - my > maxy || y - my < -maxy)
 
							continue;
 

	
 
						// We have to calculate distances in pixels, not in
 
						// data units, because the scales of the axes may be different
 
						var dx = Math.abs(axisx.p2c(x) - mouseX),
 
							dy = Math.abs(axisy.p2c(y) - mouseY),
 
							dist = dx * dx + dy * dy; // no idea in taking sqrt
 
						if (dist < lowestDistance) {
 
							lowestDistance = dist;
 
							item = result(i, j);
 
						}
 
					}
 
				}
 

	
 
				if (s.bars.show && !item) { // no other point can be nearby
 
					var barLeft = s.bars.align == "left" ? 0 : -s.bars.barWidth/2,
 
						barRight = barLeft + s.bars.barWidth;
 

	
 
					for (j = 0; j < data.length; j++) {
 
						x = data[j].x;
 
						y = data[j].y;
 
						if (x == null)
 
							continue;
 
  
 
						// for a bar graph, the cursor must be inside the bar
 
						if ((mx >= x + barLeft && mx <= x + barRight &&
 
							 my >= Math.min(0, y) && my <= Math.max(0, y)))
 
								item = result(i, j);
 
					}
 
				}
 
			}
 

	
 
			return item;
 
		}
 

	
 
		function onMouseMove(e) {
 
			lastMousePos.pageX = E.getPageX(e);
 
			lastMousePos.pageY = E.getPageY(e);
 

	
 
			if (options.grid.hoverable)
 
				triggerClickHoverEvent("plothover", lastMousePos);
 

	
 
			if (options.crosshair.mode != null) {
 
				if (!selection.active) {
 
					setPositionFromEvent(crosshair.pos, lastMousePos);
 
					triggerRedrawOverlay();
 
				}
 
				else
 
					crosshair.pos.x = -1; // hide the crosshair while selecting
 
			}
 

	
 
			if (selection.active) {
 
				updateSelection(lastMousePos);
 
			}
 
		}
 

	
 
		function onMouseDown(e) {
 
			var button = e.which || e.button;
 
			if (button != 1)  // only accept left-click
 
				return;
 

	
 
			// cancel out any text selections
 
			document.body.focus();
 

	
 
			// prevent text selection and drag in old-school browsers
 
			if (document.onselectstart !== undefined && workarounds.onselectstart == null) {
 
				workarounds.onselectstart = document.onselectstart;
 
				document.onselectstart = function () { return false; };
 
			}
 
			if (document.ondrag !== undefined && workarounds.ondrag == null) {
 
				workarounds.ondrag = document.ondrag;
 
				document.ondrag = function () { return false; };
 
			}
 

	
 
			var mousePos = {pageX: E.getPageX(e), pageY: E.getPageY(e)};
 
			setSelectionPos(selection.first, mousePos);
 

	
 
			lastMousePos.pageX = null;
 
			selection.active = true;
 
			E.on(document, "mouseup", onSelectionMouseUp);
 
		}
 

	
 
		function onMouseOut(e) {
 
			if (options.crosshair.mode != null && crosshair.pos.x != -1) {
 
				crosshair.pos.x = -1;
 
				triggerRedrawOverlay();
 
			}
 
		}
 

	
 
		function onClick(e) {
 
			if (clickIsMouseUp) {
 
				clickIsMouseUp = false;
 
				return;
 
			}
 

	
 
			var mousePos = {pageX: E.getPageX(e), pageY: E.getPageY(e)};
 
			triggerClickHoverEvent("plotclick", mousePos);
 
		}
 

	
 
		// trigger click or hover event (they send the same parameters
 
		// so we share their code)
 
		function triggerClickHoverEvent(eventname, event) {
 
			var offset = DOM.getXY(eventHolder[0]),
 
				pos = { pageX: event.pageX, pageY: event.pageY },
 
				canvasX = event.pageX - offset[0] - plotOffset.left,
 
				canvasY = event.pageY - offset[1] - plotOffset.top;
 

	
 
			for(var axis in axes)
 
				if(axes[axis].used)
 
					pos[axis.replace(/axis$/, '')] = axes[axis].c2p(axis.charAt(0) == 'x' ? canvasX :  canvasY);
 

	
 
			var item = findNearbyItem(canvasX, canvasY);
 

	
 
			if (item) {
 
				// fill in mouse pos for any listeners out there
 
				item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint.x) + offset[0] + plotOffset.left, 10);
 
				item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint.y) + offset[1] + plotOffset.top, 10);
 
			}
 

	
 
			if (options.grid.autoHighlight) {
 
				// clear auto-highlights
 
				for (var i = 0; i < highlights.length; ++i) {
 
					var h = highlights[i];
 
					if (h.auto == eventname &&
 
						!(item && h.series == item.series && h.point == item.datapoint))
 
						unhighlight(h.series, h.point);
 
				}
 

	
 
				if (item)
 
					highlight(item.series, item.datapoint, eventname);
 
			}
 

	
 
			plot.fireEvent(eventname, {pos: pos, item: item });
 
		}
 

	
 
		function triggerRedrawOverlay() {
 
			if (!redrawTimeout)
 
				redrawTimeout = setTimeout(redrawOverlay, 30);
 
		}
 

	
 
		function redrawOverlay() {
 
			redrawTimeout = null;
 

	
 
			// redraw highlights
 
			octx.save();
 
			octx.clearRect(0, 0, canvasWidth, canvasHeight);
 
			octx.translate(plotOffset.left, plotOffset.top);
 

	
 
			var hi;
 
			for (var i = 0; i < highlights.length; ++i) {
 
				hi = highlights[i];
 

	
 
				if (hi.series.bars.show)
 
					drawBarHighlight(hi.series, hi.point);
 
				else
 
					drawPointHighlight(hi.series, hi.point);
 
			}
 

	
 
			// redraw selection
 
			if (selection.show && selectionIsSane()) {
 
				octx.strokeStyle = parseColor(options.selection.color).scale(null, null, null, 0.8).toString();
 
				octx.lineWidth = 1;
 
				ctx.lineJoin = "round";
 
				octx.fillStyle = parseColor(options.selection.color).scale(null, null, null, 0.4).toString();
 

	
 
				var x = Math.min(selection.first.x, selection.second.x),
 
					y = Math.min(selection.first.y, selection.second.y),
 
					w = Math.abs(selection.second.x - selection.first.x),
 
					h = Math.abs(selection.second.y - selection.first.y);
 

	
 
				octx.fillRect(x, y, w, h);
 
				octx.strokeRect(x, y, w, h);
 
			}
 

	
 
			// redraw crosshair
 
			var pos = crosshair.pos, mode = options.crosshair.mode;
 
			if (mode != null && pos.x != -1) {
 
				octx.strokeStyle = parseColor(options.crosshair.color).scale(null, null, null, 0.8).toString();
 
				octx.lineWidth = 1;
 
				ctx.lineJoin = "round";
 

	
 
				octx.beginPath();
 
				if (mode.indexOf("x") != -1) {
 
					octx.moveTo(pos.x, 0);
 
					octx.lineTo(pos.x, plotHeight);
 
				}
 
				if (mode.indexOf("y") != -1) {
 
					octx.moveTo(0, pos.y);
 
					octx.lineTo(plotWidth, pos.y);
 
				}
 
				octx.stroke();
 

	
 
			}
 
			octx.restore();
 
		}
 

	
 
		function highlight(s, point, auto) {
 
			if (typeof s == "number")
 
				s = series[s];
 

	
 
			if (typeof point == "number")
 
				point = s.data[point];
 

	
 
			var i = indexOfHighlight(s, point);
 
			if (i == -1) {
 
				highlights.push({ series: s, point: point, auto: auto });
 

	
 
				triggerRedrawOverlay();
 
			}
 
			else if (!auto)
 
				highlights[i].auto = false;
 
		}
 

	
 
		function unhighlight(s, point) {
 
			if (typeof s == "number")
 
				s = series[s];
 

	
 
			if (typeof point == "number")
 
				point = s.data[point];
 

	
 
			var i = indexOfHighlight(s, point);
 
			if (i != -1) {
 
				highlights.splice(i, 1);
 

	
 
				triggerRedrawOverlay();
 
			}
 
		}
 

	
 
		function indexOfHighlight(s, p) {
 
			for (var i = 0; i < highlights.length; ++i) {
 
				var h = highlights[i];
 
				if (h.series == s && h.point[0] == p[0]
 
					&& h.point[1] == p[1])
 
					return i;
 
			}
 
			return -1;
 
		}
 

	
 
		function drawPointHighlight(series, point) {
 
			var x = point.x, y = point.y,
 
				axisx = series.xaxis, axisy = series.yaxis;
 

	
 
			if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)
 
				return;
 

	
 
			var pointRadius = series.points.radius + series.points.lineWidth / 2;
 
			octx.lineWidth = pointRadius;
 
			octx.strokeStyle = parseColor(series.color).scale(1, 1, 1, 0.5).toString();
 
			var radius = 1.5 * pointRadius;
 
			octx.beginPath();
 
			octx.arc(axisx.p2c(x), axisy.p2c(y), radius, 0, 2 * Math.PI, true);
 
			octx.stroke();
 
		}
 

	
 
		function drawBarHighlight(series, point) {
 
			octx.lineJoin = "round";
 
			octx.lineWidth = series.bars.lineWidth;
 
			octx.strokeStyle = parseColor(series.color).scale(1, 1, 1, 0.5).toString();
 
			var fillStyle = parseColor(series.color).scale(1, 1, 1, 0.5).toString();
 
			var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;
 
			drawBar(point.x, point.y, barLeft, barLeft + series.bars.barWidth,
 
					0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx);
 
		}
 

	
 
		function setPositionFromEvent(pos, e) {
 
			var offset = DOM.getXY(eventHolder[0]);
 
			pos.x = clamp(0, e.pageX - offset[0] - plotOffset.left, plotWidth);
 
			pos.y = clamp(0, e.pageY - offset[1] - plotOffset.top, plotHeight);
 
		}
 

	
 
		function setCrosshair(pos) {
 
			if (pos == null)
 
				crosshair.pos.x = -1;
 
			else {
 
				crosshair.pos.x = clamp(0, pos.x != null ? axes.xaxis.p2c(pos.x) : axes.x2axis.p2c(pos.x2), plotWidth);
 
				crosshair.pos.y = clamp(0, pos.y != null ? axes.yaxis.p2c(pos.y) : axes.y2axis.p2c(pos.y2), plotHeight);
 
			}
 
			triggerRedrawOverlay();
 
		}
 

	
 
		function getSelectionForEvent() {
 
			var x1 = Math.min(selection.first.x, selection.second.x),
 
				x2 = Math.max(selection.first.x, selection.second.x),
 
				y1 = Math.max(selection.first.y, selection.second.y),
 
				y2 = Math.min(selection.first.y, selection.second.y);
 

	
 
			var r = {};
 
			if (axes.xaxis.used)
 
				r.xaxis = { from: axes.xaxis.c2p(x1), to: axes.xaxis.c2p(x2) };
 
			if (axes.x2axis.used)
 
				r.x2axis = { from: axes.x2axis.c2p(x1), to: axes.x2axis.c2p(x2) };
 
			if (axes.yaxis.used)
 
				r.yaxis = { from: axes.yaxis.c2p(y1), to: axes.yaxis.c2p(y2) };
 
			if (axes.y2axis.used)
 
				r.y2axis = { from: axes.y2axis.c2p(y1), to: axes.y2axis.c2p(y2) };
 
			return r;
 
		}
 

	
 
		function triggerSelectedEvent() {
 
			var r = getSelectionForEvent();
 

	
 
			plot.fireEvent("plotselected", r);
 
		}
 

	
 
		function onSelectionMouseUp(e) {
 
			// revert drag stuff for old-school browsers
 
			if (document.onselectstart !== undefined)
 
				document.onselectstart = workarounds.onselectstart;
 
			if (document.ondrag !== undefined)
 
				document.ondrag = workarounds.ondrag;
 

	
 
			// no more draggy-dee-drag
 
			selection.active = false;
 
			var mousePos = {pageX: E.getPageX(e), pageY: E.getPageY(e)};
 
			updateSelection(mousePos);
 

	
 
			if (selectionIsSane()) {
 
				triggerSelectedEvent();
 
				clickIsMouseUp = true;
 
			}
 
			else {
 
				// this counts as a clear
 
				plot.fireEvent("plotunselected", {});
 
			}
 

	
 
			E.removeListener(document, "mouseup", onSelectionMouseUp);
 
			return false;
 
		}
 

	
 
		function setSelectionPos(pos, e) {
 
			setPositionFromEvent(pos, e);
 

	
 
			if (options.selection.mode == "y") {
 
				if (pos == selection.first)
 
					pos.x = 0;
 
				else
 
					pos.x = plotWidth;
 
			}
 

	
 
			if (options.selection.mode == "x") {
 
				if (pos == selection.first)
 
					pos.y = 0;
 
				else
 
					pos.y = plotHeight;
 
			}
 
		}
 

	
 
		function updateSelection(pos) {
 
			if (pos.pageX == null)
 
				return;
 

	
 
			setSelectionPos(selection.second, pos);
 
			if (selectionIsSane()) {
 
				selection.show = true;
 
				triggerRedrawOverlay();
 
			}
 
			else
 
				clearSelection(true);
 
		}
 

	
 
		function clearSelection(preventEvent) {
 
			if (selection.show) {
 
				selection.show = false;
 
				triggerRedrawOverlay();
 
				if (!preventEvent)
 
					plot.fireEvent("plotunselected", {});
 
			}
 
		}
 

	
 
		function setSelection(ranges, preventEvent) {
 
			var range;
 

	
 
			if (options.selection.mode == "y") {
 
				selection.first.x = 0;
 
				selection.second.x = plotWidth;
 
			}
 
			else {
 
				range = extractRange(ranges, "x");
 

	
 
				selection.first.x = range.axis.p2c(range.from);
 
				selection.second.x = range.axis.p2c(range.to);
 
			}
 

	
 
			if (options.selection.mode == "x") {
 
				selection.first.y = 0;
 
				selection.second.y = plotHeight;
 
			}
 
			else {
 
				range = extractRange(ranges, "y");
 

	
 
				selection.first.y = range.axis.p2c(range.from);
 
				selection.second.y = range.axis.p2c(range.to);
 
			}
 

	
 
			selection.show = true;
 
			triggerRedrawOverlay();
 
			if (!preventEvent)
 
				triggerSelectedEvent();
 
		}
 

	
 
		function selectionIsSane() {
 
			var minSize = 5;
 
			return Math.abs(selection.second.x - selection.first.x) >= minSize &&
 
				Math.abs(selection.second.y - selection.first.y) >= minSize;
 
		}
 

	
 
		function getColorOrGradient(spec, bottom, top, defaultColor) {
 
			if (typeof spec == "string")
 
				return spec;
 
			else {
 
				// assume this is a gradient spec; IE currently only
 
				// supports a simple vertical gradient properly, so that's
 
				// what we support too
 
				var gradient = ctx.createLinearGradient(0, top, 0, bottom);
 

	
 
				for (var i = 0, l = spec.colors.length; i < l; ++i) {
 
					var c = spec.colors[i];
 
					gradient.addColorStop(i / (l - 1), typeof c == "string" ? c : parseColor(defaultColor).scale(c.brightness, c.brightness, c.brightness, c.opacity));
 
				}
 

	
 
				return gradient;
 
			}
 
		}
 
	}
 

	
 
	L.augment(Plot, YAHOO.util.EventProvider);
 

	
 
	YAHOO.widget.Flot = function(target, data, options) {
 
		return new Plot(target, data, options);
 
	};
 

	
 
	// round to nearby lower multiple of base
 
	function floorInBase(n, base) {
 
		return base * Math.floor(n / base);
 
	}
 

	
 
	function clamp(min, value, max) {
 
		if (value < min)
 
			return min;
 
		else if (value > max)
 
			return max;
 
		else
 
			return value;
 
	}
 

	
 
	// color helpers, inspiration from the jquery color animation
 
	// plugin by John Resig
 
	function Color (r, g, b, a) {
 
	   
 
		var rgba = ['r','g','b','a'];
 
		var x = 4; //rgba.length
 
	   
 
		while (-1<--x) {
 
			this[rgba[x]] = arguments[x] || ((x==3) ? 1.0 : 0);
 
		}
 
	   
 
		this.toString = function() {
 
			if (this.a >= 1.0) {
 
				return "rgb("+[this.r,this.g,this.b].join(",")+")";
 
			} else {
 
				return "rgba("+[this.r,this.g,this.b,this.a].join(",")+")";
 
			}
 
		};
 

	
 
		this.scale = function(rf, gf, bf, af) {
 
			x = 4; //rgba.length
 
			while (-1<--x) {
 
				if (arguments[x] != null)
 
					this[rgba[x]] *= arguments[x];
 
			}
 
			return this.normalize();
 
		};
 

	
 
		this.adjust = function(rd, gd, bd, ad) {
 
			x = 4; //rgba.length
 
			while (-1<--x) {
 
				if (arguments[x] != null)
 
					this[rgba[x]] += arguments[x];
 
			}
 
			return this.normalize();
 
		};
 

	
 
		this.clone = function() {
 
			return new Color(this.r, this.b, this.g, this.a);
 
		};
 

	
 
		var limit = function(val,minVal,maxVal) {
 
			return Math.max(Math.min(val, maxVal), minVal);
 
		};
 

	
 
		this.normalize = function() {
 
			this.r = clamp(0, parseInt(this.r, 10), 255);
 
			this.g = clamp(0, parseInt(this.g, 10), 255);
 
			this.b = clamp(0, parseInt(this.b, 10), 255);
 
			this.a = clamp(0, this.a, 1);
 
			return this;
 
		};
 

	
 
		this.normalize();
 
	}
 

	
 
	var lookupColors = {
 
		aqua:[0,255,255],
 
		azure:[240,255,255],
 
		beige:[245,245,220],
 
		black:[0,0,0],
 
		blue:[0,0,255],
 
		brown:[165,42,42],
 
		cyan:[0,255,255],
 
		darkblue:[0,0,139],
 
		darkcyan:[0,139,139],
 
		darkgrey:[169,169,169],
 
		darkgreen:[0,100,0],
 
		darkkhaki:[189,183,107],
 
		darkmagenta:[139,0,139],
 
		darkolivegreen:[85,107,47],
 
		darkorange:[255,140,0],
 
		darkorchid:[153,50,204],
 
		darkred:[139,0,0],
 
		darksalmon:[233,150,122],
 
		darkviolet:[148,0,211],
 
		fuchsia:[255,0,255],
 
		gold:[255,215,0],
 
		green:[0,128,0],
 
		indigo:[75,0,130],
 
		khaki:[240,230,140],
 
		lightblue:[173,216,230],
 
		lightcyan:[224,255,255],
 
		lightgreen:[144,238,144],
 
		lightgrey:[211,211,211],
 
		lightpink:[255,182,193],
 
		lightyellow:[255,255,224],
 
		lime:[0,255,0],
 
		magenta:[255,0,255],
 
		maroon:[128,0,0],
 
		navy:[0,0,128],
 
		olive:[128,128,0],
 
		orange:[255,165,0],
 
		pink:[255,192,203],
 
		purple:[128,0,128],
 
		violet:[128,0,128],
 
		red:[255,0,0],
 
		silver:[192,192,192],
 
		white:[255,255,255],
 
		yellow:[255,255,0]
 
	};
 

	
 
	function extractColor(element) {
 
		var color, elem = element;
 
		do {
 
			color = DOM.getStyle(elem, 'backgroundColor').toLowerCase();
 
			// keep going until we find an element that has color, or
 
			// we hit the body
 
			if (color != '' && color != 'transparent')
 
				break;
 
			elem = elem.parentNode;
 
		} while (!elem.nodeName == "body");
 

	
 
		// catch Safari's way of signalling transparent
 
		if (color == "rgba(0, 0, 0, 0)")
 
			return "transparent";
 

	
 
		return color;
 
	}
 

	
 
	// parse string, returns Color
 
	function parseColor(str) {
 
		var result;
 

	
 
		// Look for rgb(num,num,num)
 
		if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))
 
			return new Color(parseInt(result[1], 10), parseInt(result[2], 10), parseInt(result[3], 10));
 

	
 
		// Look for rgba(num,num,num,num)
 
		if (result = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))
 
			return new Color(parseInt(result[1], 10), parseInt(result[2], 10), parseInt(result[3], 10), parseFloat(result[4]));
 

	
 
		// Look for rgb(num%,num%,num%)
 
		if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))
 
			return new Color(parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55);
 

	
 
		// Look for rgba(num%,num%,num%,num)
 
		if (result = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))
 
			return new Color(parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55, parseFloat(result[4]));
 

	
 
		// Look for #a0b1c2
 
		if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))
 
			return new Color(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16));
 

	
 
		// Look for #fff
 
		if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))
 
			return new Color(parseInt(result[1]+result[1], 16), parseInt(result[2]+result[2], 16), parseInt(result[3]+result[3], 16));
 

	
 
		// Otherwise, we're most likely dealing with a named color
 
		var name = L.trim(str).toLowerCase();
 
		if (name == "transparent")
 
			return new Color(255, 255, 255, 0);
 
		else {
 
			result = lookupColors[name];
 
			return new Color(result[0], result[1], result[2]);
 
		}
 
	}
 

	
 
})();
pylons_app/templates/admin/admin.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Administration')}
 
</%def>
 
<%def name="breadcrumbs()">
 
	${h.link_to(u'Admin',h.url('admin_home'))}
 

	
 
<%def name="breadcrumbs_links()">
 
    ${_('Admin dashboard - journal')}
 
</%def>
 

	
 
<%def name="page_nav()">
 
	${self.menu('admin')}
 
	${self.submenu('')}
 
</%def>
 
<%def name="main()">
 
    <div>
 
        <h2>Welcome ${c.hg_app_user.username}</h2>
 
		    <div id="user_log">
 
				${c.log_data}
 
			</div>
 
    </div>
 
<div class="box">
 
	<!-- box / title -->
 
	<div class="title">
 
	    ${self.breadcrumbs()}
 
	</div>
 
	<!-- end box / title -->
 
	<div class="table">
 
	    <div id="user_log">
 
	        ${c.log_data}
 
	    </div>
 
	</div>
 
</div>    
 
</%def>
 
\ No newline at end of file
pylons_app/templates/admin/admin_log.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
%if c.users_log:
 
<table class="table_disp">
 
	<tr class="header">
 
		<td>${_('Username')}</td>
 
		<td>${_('Repository')}</td>
 
		<td>${_('Action')}</td>
 
		<td>${_('Date')}</td>
 
		<td>${_('From IP')}</td>
 
<table>
 
	<tr>
 
		<th class="left">${_('Username')}</th>
 
		<th class="left">${_('Repository')}</th>
 
		<th class="left">${_('Action')}</th>
 
		<th class="left">${_('Date')}</th>
 
		<th class="left">${_('From IP')}</th>
 
	</tr>
 

	
 
	%for cnt,l in enumerate(c.users_log):
 
	<tr class="parity${cnt%2}">
 
		<td>${l.user.username}</td>
 
		<td>${l.repository}</td>
 
		<td>${l.action}</td>
 
		<td>${l.action_date}</td>
 
		<td>${l.user_ip}</td>
 
	</tr>
 
	%endfor
 
</table>
 

	
 
</table>
 
<div>
 
		<script type="text/javascript">
 
		  var data_div = 'user_log';
 
		  YAHOO.util.Event.onDOMReady(function(){
 
			YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){
 
					YAHOO.util.Dom.setStyle('shortlog_data','opacity','0.3');});});
 
		</script>
 
		<h2>${c.users_log.pager('$link_previous ~2~ $link_next',
 
		onclick="""YAHOO.util.Connect.asyncRequest('GET','$partial_url',{
 
		success:function(o){YAHOO.util.Dom.get(data_div).innerHTML=o.responseText;
 
		YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){
 
				YAHOO.util.Dom.setStyle(data_div,'opacity','0.3');});		
 
		YAHOO.util.Dom.setStyle(data_div,'opacity','1');}},null); return false;""")}
 
		</h2>
 
<script type="text/javascript">
 
  var data_div = 'user_log';
 
  YAHOO.util.Event.onDOMReady(function(){
 
	YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){
 
			YAHOO.util.Dom.setStyle('shortlog_data','opacity','0.3');});});
 
</script>
 
		
 
		
 
<div class="pagination-wh pagination-left">
 
${c.users_log.pager('$link_previous ~2~ $link_next',
 
onclick="""YAHOO.util.Connect.asyncRequest('GET','$partial_url',{
 
success:function(o){YAHOO.util.Dom.get(data_div).innerHTML=o.responseText;
 
YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){
 
		YAHOO.util.Dom.setStyle(data_div,'opacity','0.3');});		
 
YAHOO.util.Dom.setStyle(data_div,'opacity','1');}},null); return false;""")}
 
</div>
 
%else: 
 
	${_('No actions yet')} 
 
%endif
pylons_app/templates/admin/permissions/permissions.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Permissions administration')}
 
</%def>
 
<%def name="breadcrumbs()">
 
	${h.link_to(u'Admin',h.url('admin_home'))}
 
	 /  
 
	 ${_('Permissions')}
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(_('Admin'),h.url('admin_home'))} 
 
    &raquo;
 
    ${_('Permissions')}
 
    
 
</%def>
 
<%def name="page_nav()">
 
	${self.menu('admin')}
 
	${self.submenu('permissions')}
 
</%def>
 
<%def name="main()">
 
	<div>
 
	<h2>${_('Permissions')}</h2>
 
	
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}       
 
    </div>
 
    <!-- end box / title -->
 
    <div class="table">
 
    To implement
 
    </div>
 
</div>
 
</%def>    
pylons_app/templates/admin/repos/repo_add.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Repositories administration')}
 
</%def>
 
<%def name="breadcrumbs()">
 
	${h.link_to(u'Admin',h.url('admin_home'))}
 
	 /  
 
	${_('Repos')}
 

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

	
 
<%def name="page_nav()">
 
	${self.menu('admin')}
 
	${self.submenu('repos')}
 
</%def>
 
<%def name="main()">
 
	<div>
 
        <h2>${_('Repositories')} - ${_('add new')}</h2>
 
        ${h.form(url('repos'))}
 
        <table>
 
        	<tr>
 
        		<td>${_('Name')}</td>
 
        		<td>${h.text('repo_name',c.new_repo)}</td>
 
        		<td>${self.get_form_error('repo_name')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Description')}</td>
 
        		<td>${h.textarea('description',cols=23,rows=5)}</td>
 
        		<td>${self.get_form_error('description')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Private')}</td>
 
        		<td>${h.checkbox('private',value="True")}</td>
 
        		<td>${self.get_form_error('private')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td></td>
 
        		<td>${h.submit('add','add')}</td>
 
        	</tr>
 
        	        	        	
 
        </table>
 
        ${h.end_form()}
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}      
 
    </div>
 
    ${h.form(url('repos'))}
 
    <div class="form">
 
        <!-- fields -->
 
        <div class="fields">
 
            <div class="field">
 
	            <div class="label">
 
	                <label for="repo_name">${_('Name')}:</label>
 
	            </div>
 
	            <div class="input">
 
	                ${h.text('repo_name',c.new_repo)}
 
	            </div>
 
             </div>
 
            <div class="field">
 
                <div class="label label-textarea">
 
                    <label for="description">${_('Description')}:</label>
 
                </div>
 
                <div class="textarea text-area editor">
 
                    ${h.textarea('description',cols=23,rows=5)}
 
                </div>
 
             </div>
 
            <div class="field">
 
                <div class="label label-checkbox">
 
                    <label for="private">${_('Private')}:</label>
 
                </div>
 
                <div class="checkboxes">
 
                    ${h.checkbox('private',value="True")}
 
                </div>
 
             </div>
 
	        <div class="buttons">
 
	          ${h.submit('add','add',class_="ui-button ui-widget ui-state-default ui-corner-all")}
 
	        </div>                                                          
 
        </div>
 
    </div>    
 
    ${h.end_form()}    
 
</div>
 
</%def>   
pylons_app/templates/admin/repos/repo_edit.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Repositories administration')}
 
</%def>
 
<%def name="breadcrumbs()">
 
	${h.link_to(u'Admin',h.url('admin_home'))}
 
	 /  
 
	 ${_('Repos')}
 

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

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

	
 
<%def name="main()">
 
	<div>
 
        <h2>${_('Repositories')} - ${_('edit')} "${c.repo_name}"</h2>
 
        ${h.form(url('repo', repo_name=c.repo_info.repo_name),method='put')}
 
        <table>
 
        	<tr>
 
        		<td>${_('Name')}</td>
 
        		<td>${h.text('repo_name',size="28")}</td>
 
        		<td>${self.get_form_error('repo_name')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Description')}</td>
 
        		<td>${h.textarea('description',cols=32,rows=5)}</td>
 
        		<td>${self.get_form_error('description')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Private')}</td>
 
        		<td>${h.checkbox('private',value="True")}</td>
 
        		<td>${self.get_form_error('private')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Owner')}</td>
 
				<td class='ac'>
 
					<div class="perm_ac">
 
						${h.text('user',class_='yui-ac-input')}
 
						<div id="owner_container"></div>
 
					</div>
 
				</td>        		
 
        		<td>${self.get_form_error('user')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Permissions')}</td>
 
        		<td>
 
        			<table>
 
        				<tr>
 
        					<td>${_('none')}</td>
 
        					<td>${_('read')}</td>
 
        					<td>${_('write')}</td>
 
        					<td>${_('admin')}</td>
 
        					<td>${_('user')}</td>
 
        				</tr>
 
        				
 
        				%for r2p in c.repo_info.repo2perm:
 
        					%if r2p.user.username =='default' and c.repo_info.private:
 
        						<tr>
 
									<td colspan="4">
 
										<span style="font-size: 0.8em">${_('disabled for private repository')}</span></td>
 
									<td>${r2p.user.username}</td>
 
								</tr>
 
							%else:
 
	        				<tr id="id${id(r2p.user.username)}">
 
	        					<td>${h.radio('perm_%s' % r2p.user.username,'repository.none')}</td>
 
	        					<td>${h.radio('perm_%s' % r2p.user.username,'repository.read')}</td>
 
	        					<td>${h.radio('perm_%s' % r2p.user.username,'repository.write')}</td>
 
	        					<td>${h.radio('perm_%s' % r2p.user.username,'repository.admin')}</td>
 
	        					<td>${r2p.user.username}</td>
 
	        					<td>
 
	        					  %if r2p.user.username !='default':
 
				                  	<span class="delete_icon action_button" onclick="ajaxAction(${r2p.user.user_id},'${'id%s'%id(r2p.user.username)}')">
 
				                  		<script type="text/javascript">
 
											function ajaxAction(user_id,field_id){
 
												var sUrl = "${h.url('delete_repo_user',repo_name=c.repo_name)}";
 
												var callback = { success:function(o){
 
												var tr = YAHOO.util.Dom.get(String(field_id));
 
												tr.parentNode.removeChild(tr);}};
 
												var postData = '_method=delete&user_id='+user_id; 
 
												var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);};
 
										</script>       	
 
				                  	</span>
 
				                  %endif					
 
	        					</td>
 
	        				</tr>
 
	        				%endif
 
						%endfor
 
						<%
 
							if not hasattr(c,'form_errors'):
 
								d = 'display:none;'
 
							else:
 
								d=''
 
						%>
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}      
 
    </div>
 
    ${h.form(url('repo', repo_name=c.repo_info.repo_name),method='put')}
 
    <div class="form">
 
        <!-- fields -->
 
        <div class="fields">
 
            <div class="field">
 
                <div class="label">
 
                    <label for="repo_name">${_('Name')}:</label>
 
                </div>
 
                <div class="input input-medium">
 
                    ${h.text('repo_name')}
 
                </div>
 
             </div>
 
             
 
            <div class="field">
 
                <div class="label label-textarea">
 
                    <label for="description">${_('Description')}:</label>
 
                </div>
 
                <div class="textarea text-area editor">
 
                    ${h.textarea('description',cols=23,rows=5)}
 
                </div>
 
            </div>
 
            
 
            <div class="field">
 
                <div class="label label-checkbox">
 
                    <label for="private">${_('Private')}:</label>
 
                </div>
 
                <div class="checkboxes">
 
                    ${h.checkbox('private',value="True")}
 
                </div>
 
            </div>
 
             
 
            <div class="field">
 
                <div class="label label-checkbox">
 
                    <label for="user">${_('Owner')}:</label>
 
                </div>
 
                <div class="input input-small ac">
 
                    <div class="perm_ac">
 
                       ${h.text('user',class_='yui-ac-input')}
 
                       <div id="owner_container"></div>
 
                    </div>
 
                </div>
 
             </div>                
 
             
 
            <div class="field">
 
                <div class="label">
 
                    <label for="input">${_('Permissions')}:</label>
 
                </div>
 
                <div class="input">
 
                    <table id="permissions_manage">
 
                        <tr>
 
                            <td>${_('none')}</td>
 
                            <td>${_('read')}</td>
 
                            <td>${_('write')}</td>
 
                            <td>${_('admin')}</td>
 
                            <td>${_('user')}</td>
 
                            <td></td>
 
                        </tr>
 
                        
 
                        %for r2p in c.repo_info.repo2perm:
 
                            %if r2p.user.username =='default' and c.repo_info.private:
 
                                <tr>
 
                                    <td colspan="6">
 
                                        <span class="private_repo_msg">
 
                                        ${_('disabled for private repository')}
 
                                        </span>
 
                                    </td>
 
                                    <td>${r2p.user.username}</td>
 
                                </tr>
 
                            %else:
 
                            <tr id="id${id(r2p.user.username)}">
 
                                <td>${h.radio('perm_%s' % r2p.user.username,'repository.none')}</td>
 
                                <td>${h.radio('perm_%s' % r2p.user.username,'repository.read')}</td>
 
                                <td>${h.radio('perm_%s' % r2p.user.username,'repository.write')}</td>
 
                                <td>${h.radio('perm_%s' % r2p.user.username,'repository.admin')}</td>
 
                                <td>${r2p.user.username}</td>
 
                                <td>
 
                                  %if r2p.user.username !='default':
 
                                    <span class="delete_icon action_button" onclick="ajaxAction(${r2p.user.user_id},'${'id%s'%id(r2p.user.username)}')">
 
                                        <script type="text/javascript">
 
                                            function ajaxAction(user_id,field_id){
 
                                                var sUrl = "${h.url('delete_repo_user',repo_name=c.repo_name)}";
 
                                                var callback = { success:function(o){
 
                                                var tr = YAHOO.util.Dom.get(String(field_id));
 
                                                tr.parentNode.removeChild(tr);}};
 
                                                var postData = '_method=delete&user_id='+user_id; 
 
                                                var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);};
 
                                        </script>           
 
                                    </span>
 
                                  %endif                    
 
                                </td>
 
                            </tr>
 
                            %endif
 
                        %endfor
 

	
 
        				<tr id="add_perm_input" style="${d}">
 
        					<td>${h.radio('perm_new_user','repository.none')}</td>
 
        					<td>${h.radio('perm_new_user','repository.read')}</td>
 
        					<td>${h.radio('perm_new_user','repository.write')}</td>
 
        					<td>${h.radio('perm_new_user','repository.admin')}</td>
 
        					<td class='ac'>
 
        						<div class="perm_ac" id="perm_ac">
 
        							${h.text('perm_new_user_name',class_='yui-ac-input')}
 
									<div id="perm_container"></div>
 
        						</div>
 
        					</td>
 
        					<td>${self.get_form_error('perm_new_user_name')}</td>     					
 
        				</tr>
 
        				<tr>
 
        					<td colspan="4">
 
        						<span id="add_perm" class="add_icon" style="cursor: pointer;">
 
        						${_('Add another user')}
 
        						</span>
 
        					</td>
 
        				</tr>
 
        			</table>
 
        		</td>
 
        		
 
        	</tr>
 
        	<tr>
 
        		<td></td>
 
        		<td>${h.submit('update','update')}</td>
 
        	</tr>
 
        	        	        	
 
        </table>
 
        ${h.end_form()}
 
                        <tr id="add_perm_input" >
 
                            <td>${h.radio('perm_new_user','repository.none')}</td>
 
                            <td>${h.radio('perm_new_user','repository.read')}</td>
 
                            <td>${h.radio('perm_new_user','repository.write')}</td>
 
                            <td>${h.radio('perm_new_user','repository.admin')}</td>
 
                            <td class='ac'>
 
                                <div class="perm_ac" id="perm_ac">
 
                                    ${h.text('perm_new_user_name',class_='yui-ac-input')}
 
                                    <div id="perm_container"></div>
 
                                </div>
 
                            </td>
 
                            <td></td>
 
                        </tr>
 
                        <tr>
 
                            <td colspan="6">
 
                                <span id="add_perm" class="add_icon" style="cursor: pointer;">
 
                                ${_('Add another user')}
 
                                </span>
 
                            </td>
 
                        </tr>
 
                    </table>             
 
             </div>
 
             
 
            <div class="buttons">
 
              ${h.submit('save','save',class_="ui-button ui-widget ui-state-default ui-corner-all")}
 
            </div>                                                          
 
        </div>
 
    </div>
 
    </div>    
 
    ${h.end_form()}
 
        <script type="text/javascript">
 
        	YAHOO.util.Event.onDOMReady(function(){
 
				var D = YAHOO.util.Dom;
 
				YAHOO.util.Event.addListener('add_perm','click',function(){
 
					D.setStyle('add_perm_input','display','');
 
					D.setStyle('add_perm','opacity','0.6');
 
					D.setStyle('add_perm','cursor','default');
 
				});
 
            YAHOO.util.Event.onDOMReady(function(){
 
                var D = YAHOO.util.Dom;
 
                if(!D.hasClass('perm_new_user_name','error')){
 
                    D.setStyle('add_perm_input','display','none');
 
                }
 
                YAHOO.util.Event.addListener('add_perm','click',function(){
 
                    D.setStyle('add_perm_input','display','');
 
                    D.setStyle('add_perm','opacity','0.6');
 
                    D.setStyle('add_perm','cursor','default');
 
                });
 
            });
 
        </script>
 
		<script type="text/javascript">    
 
		YAHOO.example.FnMultipleFields = function(){
 
		    var myContacts = ${c.users_array|n}
 
		    
 
		    // Define a custom search function for the DataSource
 
		    var matchNames = function(sQuery) {
 
		        // Case insensitive matching
 
		        var query = sQuery.toLowerCase(),
 
		            contact,
 
		            i=0,
 
		            l=myContacts.length,
 
		            matches = [];
 
		        
 
		        // Match against each name of each contact
 
		        for(; i<l; i++) {
 
		            contact = myContacts[i];
 
		            if((contact.fname.toLowerCase().indexOf(query) > -1) ||
 
		                (contact.lname.toLowerCase().indexOf(query) > -1) ||
 
		                (contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) {
 
		                matches[matches.length] = contact;
 
		            }
 
		        }
 
		
 
		        return matches;
 
		    };
 
		
 
		    // Use a FunctionDataSource
 
		    var oDS = new YAHOO.util.FunctionDataSource(matchNames);
 
		    oDS.responseSchema = {
 
		        fields: ["id", "fname", "lname", "nname"]
 
		    }
 
		
 
		    // Instantiate AutoComplete for perms
 
		    var oAC_perms = new YAHOO.widget.AutoComplete("perm_new_user_name", "perm_container", oDS);
 
		    oAC_perms.useShadow = false;
 
		    oAC_perms.resultTypeList = false;
 
		    
 
		    // Instantiate AutoComplete for owner
 
		 	var oAC_owner = new YAHOO.widget.AutoComplete("user", "owner_container", oDS);
 
		 	oAC_owner.useShadow = false;
 
		 	oAC_owner.resultTypeList = false;
 
		    
 
		    
 
		    // Custom formatter to highlight the matching letters
 
		    var custom_formatter = function(oResultData, sQuery, sResultMatch) {
 
		        var query = sQuery.toLowerCase(),
 
		            fname = oResultData.fname,
 
		            lname = oResultData.lname,
 
		            nname = oResultData.nname || "", // Guard against null value
 
		            query = sQuery.toLowerCase(),
 
		            fnameMatchIndex = fname.toLowerCase().indexOf(query),
 
		            lnameMatchIndex = lname.toLowerCase().indexOf(query),
 
		            nnameMatchIndex = nname.toLowerCase().indexOf(query),
 
		            displayfname, displaylname, displaynname;
 
		            
 
		        if(fnameMatchIndex > -1) {
 
		            displayfname = highlightMatch(fname, query, fnameMatchIndex);
 
		        }
 
		        else {
 
		            displayfname = fname;
 
		        }
 
		
 
		        if(lnameMatchIndex > -1) {
 
		            displaylname = highlightMatch(lname, query, lnameMatchIndex);
 
		        }
 
		        else {
 
		            displaylname = lname;
 
		        }
 
		
 
		        if(nnameMatchIndex > -1) {
 
		            displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")";
 
		        }
 
		        else {
 
		            displaynname = nname ? "(" + nname + ")" : "";
 
		        }
 
		
 
		        return displayfname + " " + displaylname + " " + displaynname;
 
		        
 
		    };
 
		    oAC_perms.formatResult = custom_formatter; 
 
		    oAC_owner.formatResult = custom_formatter;
 
		    			    
 
		    // Helper function for the formatter
 
		    var highlightMatch = function(full, snippet, matchindex) {
 
		        return full.substring(0, matchindex) + 
 
		                "<span class='match'>" + 
 
		                full.substr(matchindex, snippet.length) + 
 
		                "</span>" +
 
		                full.substring(matchindex + snippet.length);
 
		    };
 
		
 
		    var myHandler = function(sType, aArgs) {
 
		        var myAC = aArgs[0]; // reference back to the AC instance
 
		        var elLI = aArgs[1]; // reference to the selected LI element
 
		        var oData = aArgs[2]; // object literal of selected item's result data
 
		        myAC.getInputEl().value = oData.nname;
 
		    };
 
        <script type="text/javascript">    
 
        YAHOO.example.FnMultipleFields = function(){
 
            var myContacts = ${c.users_array|n}
 
            
 
            // Define a custom search function for the DataSource
 
            var matchNames = function(sQuery) {
 
                // Case insensitive matching
 
                var query = sQuery.toLowerCase(),
 
                    contact,
 
                    i=0,
 
                    l=myContacts.length,
 
                    matches = [];
 
                
 
                // Match against each name of each contact
 
                for(; i<l; i++) {
 
                    contact = myContacts[i];
 
                    if((contact.fname.toLowerCase().indexOf(query) > -1) ||
 
                        (contact.lname.toLowerCase().indexOf(query) > -1) ||
 
                        (contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) {
 
                        matches[matches.length] = contact;
 
                    }
 
                }
 
        
 
                return matches;
 
            };
 
        
 
            // Use a FunctionDataSource
 
            var oDS = new YAHOO.util.FunctionDataSource(matchNames);
 
            oDS.responseSchema = {
 
                fields: ["id", "fname", "lname", "nname"]
 
            }
 
        
 
            // Instantiate AutoComplete for perms
 
            var oAC_perms = new YAHOO.widget.AutoComplete("perm_new_user_name", "perm_container", oDS);
 
            oAC_perms.useShadow = false;
 
            oAC_perms.resultTypeList = false;
 
            
 
            // Instantiate AutoComplete for owner
 
            var oAC_owner = new YAHOO.widget.AutoComplete("user", "owner_container", oDS);
 
            oAC_owner.useShadow = false;
 
            oAC_owner.resultTypeList = false;
 
            
 
            
 
            // Custom formatter to highlight the matching letters
 
            var custom_formatter = function(oResultData, sQuery, sResultMatch) {
 
                var query = sQuery.toLowerCase(),
 
                    fname = oResultData.fname,
 
                    lname = oResultData.lname,
 
                    nname = oResultData.nname || "", // Guard against null value
 
                    query = sQuery.toLowerCase(),
 
                    fnameMatchIndex = fname.toLowerCase().indexOf(query),
 
                    lnameMatchIndex = lname.toLowerCase().indexOf(query),
 
                    nnameMatchIndex = nname.toLowerCase().indexOf(query),
 
                    displayfname, displaylname, displaynname;
 
                    
 
                if(fnameMatchIndex > -1) {
 
                    displayfname = highlightMatch(fname, query, fnameMatchIndex);
 
                }
 
                else {
 
                    displayfname = fname;
 
                }
 
        
 
                if(lnameMatchIndex > -1) {
 
                    displaylname = highlightMatch(lname, query, lnameMatchIndex);
 
                }
 
                else {
 
                    displaylname = lname;
 
                }
 
        
 
                if(nnameMatchIndex > -1) {
 
                    displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")";
 
                }
 
                else {
 
                    displaynname = nname ? "(" + nname + ")" : "";
 
                }
 
        
 
                return displayfname + " " + displaylname + " " + displaynname;
 
                
 
            };
 
            oAC_perms.formatResult = custom_formatter; 
 
            oAC_owner.formatResult = custom_formatter;
 
                            
 
            // Helper function for the formatter
 
            var highlightMatch = function(full, snippet, matchindex) {
 
                return full.substring(0, matchindex) + 
 
                        "<span class='match'>" + 
 
                        full.substr(matchindex, snippet.length) + 
 
                        "</span>" +
 
                        full.substring(matchindex + snippet.length);
 
            };
 
        
 
            var myHandler = function(sType, aArgs) {
 
                var myAC = aArgs[0]; // reference back to the AC instance
 
                var elLI = aArgs[1]; // reference to the selected LI element
 
                var oData = aArgs[2]; // object literal of selected item's result data
 
                myAC.getInputEl().value = oData.nname;
 
            };
 

	
 
		    oAC_perms.itemSelectEvent.subscribe(myHandler);
 
		    oAC_owner.itemSelectEvent.subscribe(myHandler);
 
		    
 
		    return {
 
		        oDS: oDS,
 
		        oAC_perms: oAC_perms,
 
		        oAC_owner: oAC_owner, 
 
		    };
 
		}();
 
		    
 
		</script>        
 
    </div>
 
</%def>   
 
            oAC_perms.itemSelectEvent.subscribe(myHandler);
 
            oAC_owner.itemSelectEvent.subscribe(myHandler);
 
            
 
            return {
 
                oDS: oDS,
 
                oAC_perms: oAC_perms,
 
                oAC_owner: oAC_owner, 
 
            };
 
        }();
 
            
 
        </script>      
 

	
 
</div>
 
</%def> 
 
\ No newline at end of file
pylons_app/templates/admin/repos/repos.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Repositories administration')}
 
</%def>
 
<%def name="breadcrumbs()">
 
	${h.link_to(u'Admin',h.url('admin_home'))}
 
	 /  
 
	 ${_('Repos')}
 

	
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Repositories')}
 
</%def>
 
<%def name="page_nav()">
 
	${self.menu('admin')}
 
	${self.submenu('repos')}
 
</%def>
 
<%def name="main()">
 
	<div>
 
        <h2>${_('Repositories administration')}</h2>
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
        <ul class="links">
 
          <li>
 
            <span>${h.link_to(u'ADD NEW REPO',h.url('new_repo'),class_="add_icon")}</span>
 
          </li>          
 
        </ul>        
 
    </div>
 
    <!-- end box / title -->
 
    <div class="table">
 
        <table class="table_disp">
 
        <tr class="header">
 
            <td>${_('name')}</td>
 
            <td>${_('last revision')}</td>
 
            <td>${_('action')}</td>
 
            <th class="left">${_('name')}</th>
 
            <th class="left">${_('last revision')}</th>
 
            <th class="left">${_('action')}</th>
 
        </tr>
 
	        %for cnt,repo in enumerate(c.repos_list):
 
	 		<tr class="parity${cnt%2}">
 
	 			 <td>
 
	 			 %if repo['repo'].dbrepo.private:
 
					<img alt="${_('private')}" src="/images/icons/lock.png">
 
				 %else:
 
				 	<img alt="${_('public')}" src="/images/icons/lock_open.png">
 
				 %endif	 		
 
			    ${h.link_to(repo['name'],h.url('edit_repo',repo_name=repo['name']))}</td>
 
		        <td>r${repo['rev']}:${repo['tip']}</td>
 
            %for cnt,repo in enumerate(c.repos_list):
 
            <tr class="parity${cnt%2}">
 
                 <td>
 
                 %if repo['repo'].dbrepo.private:
 
                    <img alt="${_('private')}" src="/images/icons/lock.png"/>
 
                 %else:
 
                    <img alt="${_('public')}" src="/images/icons/lock_open.png"/>
 
                 %endif         
 
                ${h.link_to(repo['name'],h.url('edit_repo',repo_name=repo['name']))}</td>
 
                <td>r${repo['rev']}:${repo['tip']}</td>
 
                <td>
 
                  ${h.form(url('repo', repo_name=repo['name']),method='delete')}
 
                  	${h.submit('remove','delete',class_="delete_icon action_button",onclick="return confirm('Confirm to delete this repository');")}
 
                    ${h.submit('remove','delete',class_="delete_icon action_button",onclick="return confirm('Confirm to delete this repository');")}
 
                  ${h.end_form()}
 
     			</td>
 
			</tr>
 
			%endfor
 
		</table>
 
		<span class="add_icon">${h.link_to(u'add repo',h.url('new_repo'))}</span>    
 
                </td>
 
            </tr>
 
            %endfor
 
        </table>
 
    </div>
 
</div> 
 
		   
 
</%def>    
pylons_app/templates/admin/settings/settings.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Settings administration')}
 
</%def>
 
<%def name="breadcrumbs()">
 
	${h.link_to(u'Admin',h.url('admin_home'))}
 
	 /  
 
	 ${_('Settings')}
 

	
 

	
 

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

	
 
<%def name="page_nav()">
 
	${self.menu('admin')}
 
	${self.submenu('settings')}
 
</%def>
 
<%def name="main()">
 
	<div>
 
	<h2>${_('Settings administration')}</h2>
 

	
 
     ${h.form(url('admin_setting', id='mapping'),method='put')}
 
       <table class="table_disp">
 
           <tr class="header">
 
            <td colspan="2">${_('Remap and rescan repositories')}</td>
 
           </tr>
 
           <tr align="right">
 
            <td><span class="tooltip" tooltip_title="${h.tooltip(_('In case a repository was deleted from filesystem and there are leftovers in the database check this option to scan obsolete data in database and remove it.'))}">
 
            ${_('destroy old data')}</span> ${h.checkbox('destroy',True)}</td>
 
            <td>${h.submit('rescan','rescan repositories')}</td>   
 
       </table>
 
     ${h.end_form()}
 
     <br/>	
 
     ${h.form(url('admin_setting', id='global'),method='put')}
 
	   <table class="table_disp">
 
	       <tr class="header">
 
	           <td colspan="3">${_('Global application settings')}</td>
 
	       </tr>
 
	       <tr>
 
	           <td>${_('Application name')}</td>
 
	           <td>${h.text('app_title',size=30)}${self.get_form_error('app_title')}</td>
 
	       </tr>
 
           <tr>
 
               <td>${_('Realm text')}</td>
 
               <td>${h.text('app_auth_realm',size=30)}${self.get_form_error('app_auth_realm')}</td>
 
           </tr>
 
           <tr>
 
	           <td></td>
 
	           <td>${h.submit('save','save settings')}</td>   
 
           </tr>
 
	   </table>
 
     ${h.end_form()}
 
<%def name="main()">
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}       
 
    </div>
 
    <!-- end box / title -->
 
    
 
    </div>
 
    ${h.form(url('admin_setting', id='mapping'),method='put')}
 
    <div class="form">
 
        <!-- fields -->
 
        <h3>${_('Remap and rescan repositories')}</h3>
 
        <div class="fields">
 
			<div class="field">
 
		        <div class="label label-checkbox">
 
		            <label for="-button">${_('rescan option')}:</label>
 
		        </div>
 
		        <div class="checkboxes">
 
		            <div class="checkbox">
 
		                ${h.checkbox('destroy',True)}
 
		                <label for="checkbox-1">
 
		                <span class="tooltip" tooltip_title="${h.tooltip(_('In case a repository was deleted from filesystem and there are leftovers in the database check this option to scan obsolete data in database and remove it.'))}">
 
		                ${_('destroy old data')}</span> </label>
 
		            </div>
 
		        </div>
 
			</div>
 
                            
 
            <div class="buttons">
 
            ${h.submit('rescan','rescan repositories',class_="ui-button ui-widget ui-state-default ui-corner-all")}</td>
 
            </div>                                                          
 
        </div>
 
    </div>  
 
    ${h.end_form()}
 
     
 
    ${h.form(url('admin_setting', id='global'),method='put')}
 
    <div class="form">
 
        <!-- fields -->
 
        <h3>${_('Global application settings')}</h3>
 
        <div class="fields">
 
             
 
             <div class="field">
 
                <div class="label">
 
                    <label for="input-small">${_('Application name')}:</label>
 
                </div>
 
                <div class="input">
 
                    ${h.text('app_title',size=30)}
 
                </div>
 
             </div>
 
                          
 
            <div class="field">
 
                <div class="label">
 
                    <label for="input-small">${_('Realm text')}:</label>
 
                </div>
 
                <div class="input">
 
                    ${h.text('app_auth_realm',size=30)}
 
                </div>
 
            </div>
 
                                     
 
            <div class="buttons">
 
                ${h.submit('save','save settings',class_="ui-button ui-widget ui-state-default ui-corner-all")}
 
           </div>                                                          
 
        </div>
 
    </div>      
 
    ${h.end_form()}
 
    
 
</div>
 
</%def>    
pylons_app/templates/admin/users/user_add.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('User administration')}
 
</%def>
 
<%def name="breadcrumbs()">
 
	${h.link_to(u'Admin',h.url('admin_home'))}
 
	 /  
 
	${_('Users')}
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(_('Admin'),h.url('admin_home'))} 
 
    &raquo; 
 
    ${h.link_to(_('Users'),h.url('users'))} 
 
    &raquo;
 
    ${_('add new user')}
 
</%def>
 

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

	
 
<%def name="main()">
 
	<div>
 
        <h2>${_('User')} - ${_('add new')}</h2>
 
        ${h.form(url('users'))}
 
        <table>
 
        	<tr>
 
        		<td>${_('Username')}</td>
 
        		<td>${h.text('username')}</td>
 
        		<td>${self.get_form_error('username')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Password')}</td>
 
        		<td>${h.password('password')}</td>
 
        		<td>${self.get_form_error('password')}</td>
 
        	</tr>        	
 
        	<tr>
 
        		<td>${_('Name')}</td>
 
        		<td>${h.text('name')}</td>
 
        		<td>${self.get_form_error('name')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Lastname')}</td>
 
        		<td>${h.text('lastname')}</td>
 
        		<td>${self.get_form_error('lastname')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Email')}</td>
 
        		<td>${h.text('email')}</td>
 
        		<td>${self.get_form_error('email')}</td>
 
        	</tr>        	        	
 
        	<tr>
 
        		<td>${_('Active')}</td>
 
        		<td>${h.checkbox('active',value=True)}</td>
 
        		<td>${self.get_form_error('active')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td></td>
 
        		<td>${h.submit('save','save')}</td>
 
        	</tr>
 
        </table>
 
        ${h.end_form()}
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}       
 
    </div>
 
    <!-- end box / title -->
 
    ${h.form(url('users'))}
 
    <div class="form">
 
        <!-- fields -->
 
        <div class="fields">
 
             <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="password">${_('Password')}:</label>
 
                </div>
 
                <div class="input">
 
                    ${h.password('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="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/user_edit.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('User administration')}
 
</%def>
 
<%def name="breadcrumbs()">
 
	${h.link_to(u'Admin',h.url('admin_home'))}
 
	 /  
 
	${_('Users')}
 

	
 
<%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')}
 
	${self.submenu('users')}
 
</%def>
 

	
 
<%def name="main()">
 
	<div>
 
        <h2>${_('User')} - ${c.user.username}</h2>
 
        ${h.form(url('user', id=c.user.user_id),method='put')}
 
        <table>
 
        	<tr>
 
        		<td>${_('Username')}</td>
 
        		<td>${h.text('username')}</td>
 
        		<td>${self.get_form_error('username')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('New password')}</td>
 
        		<td>${h.text('new_password')}</td>
 
        		<td>${self.get_form_error('new_password')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Name')}</td>
 
        		<td>${h.text('name')}</td>
 
        		<td>${self.get_form_error('name')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Lastname')}</td>
 
        		<td>${h.text('lastname')}</td>
 
        		<td>${self.get_form_error('lastname')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Email')}</td>
 
        		<td>${h.text('email')}</td>
 
        		<td>${self.get_form_error('email')}</td>
 
        	</tr>        	        	
 
        	<tr>
 
        		<td>${_('Active')}</td>
 
        		<td>${h.checkbox('active',value=True)}</td>
 
        		<td>${self.get_form_error('active')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Admin')}</td>
 
        		<td>${h.checkbox('admin',value=True)}</td>
 
        		<td>${self.get_form_error('admin')}</td>
 
        	</tr>        	
 
        	<tr>
 
        		<td></td>
 
        		<td>${h.submit('save','save')}</td>
 
        	</tr>
 
        	        	        	
 
        </table>
 
        ${h.end_form()}
 
<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="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.text('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.password('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()">
 
	${h.link_to(u'Admin',h.url('admin_home'))}
 
	 /  
 
	 ${_('Users')}
 

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

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

	
 
<%def name="main()">
 
	<div>
 
        <h2>${_('Users administration')}</h2>
 
<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">
 
            <td>${_('username')}</td>
 
            <td>${_('name')}</td>
 
            <td>${_('lastname')}</td>
 
            <td>${_('active')}</td>
 
            <td>${_('admin')}</td>
 
            <td>${_('action')}</td>
 
         </tr>
 
            %for user in c.users_list:
 
                <tr>
 
        <tr class="header">
 
            <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>${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>
 
                        ${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>
 
        <span class="add_icon">${h.link_to(u'add user',h.url('new_user'))}</span>        
 
    </div>
 
</div>
 
</%def>
pylons_app/templates/base/base.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" id="mainhtml">
 
<head>
 
    <title>${next.title()}</title>
 
    <link rel="icon" href="/images/hgicon.png" type="image/png" />
 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 
    <meta name="robots" content="index, nofollow"/>
 
    <title>${next.title()}</title>
 
    ##For future use yui reset for cross browser compatability.
 
    ##<link rel="stylesheet" href="/js/yui/reset-fonts-grids/reset-fonts-grids.css" type="text/css" />
 
    <!-- stylesheets -->
 
    ${self.css()}
 
    <!-- scripts -->
 
    ${self.js()}
 
</head>
 
<body>
 
    <!-- header -->
 
    <div id="header">
 
        <!-- user -->
 
        <ul id="logged-user">
 
            <li class="first">
 
            ${h.link_to('%s %s (%s)'%(c.hg_app_user.name,c.hg_app_user.lastname,c.hg_app_user.username),h.url('edit_user', id=c.hg_app_user.user_id))}
 
            </li>
 
            <li class="last highlight">${h.link_to(u'Logout',h.url('logout_home'))}</li>
 
        </ul>
 
        <!-- end user -->
 
        <div id="header-inner">
 
            <div id="home">
 
                <a href="${h.url('hg_home')}"></a>
 
            </div>
 
            <!-- logo -->
 
            <div id="logo">
 
                <h1><a href="${h.url('hg_home')}">${c.hg_app_name}</a></h1>
 
            </div>
 
            <!-- end logo -->
 
            <!-- quick menu -->
 
            ${self.page_nav()}
 
            <!-- end quick -->
 
            <div class="corner tl"></div>
 
            <div class="corner tr"></div>
 
        </div>
 
    </div>     
 
    <!-- end header -->
 
    
 
	<!-- CONTENT -->
 
	<div id="content"> 
 
        <div class="flash_msg">
 
            <% messages = h.flash.pop_messages() %>
 
            % if messages:
 
            <ul id="flash-messages">
 
                % for message in messages:
 
                <li class="${message.category}_msg">${message}</li>
 
                % endfor
 
            </ul>
 
            % endif
 
        </div>	    
 
	    <div id="main"> 
 
	        ${next.main()}
 
	    </div>
 
	</div> 
 
    <!-- END CONTENT -->
 

	
 
<body class="mainbody">
 
<div id="container">
 
    <div class="page-header">
 
        <h1 class="breadcrumbs">${next.breadcrumbs()}</h1>
 
        ${self.page_nav()}
 
    <div class="flash_msg">
 
    <% messages = h.flash.pop_messages() %>
 
		% if messages:
 
		<ul id="flash-messages">
 
		    % for message in messages:
 
		    <li class="${message.category}_msg">${message}</li>
 
		    % endfor
 
		</ul>
 
		% endif
 
    </div>        
 
    <div id="main"> 
 
    	${next.main()}
 
    	<script type="text/javascript">${h.tooltip.activate()}</script>    	
 
    </div>
 
    <div class="page-footer">
 
        Hg App ${c.hg_app_version} &copy; 2010 by Marcin Kuzminski
 
    </div>   
 
	<!-- footer -->
 
	<div id="footer">
 
	    <p>Hg App ${c.hg_app_version} &copy; 2010 by Marcin Kuzminski</p>
 
        <script type="text/javascript">${h.tooltip.activate()}</script>	    
 
	</div>
 
	<!-- end footer -->
 
</body>
 

	
 
    <div id="powered-by">
 
        <p>
 
        <a href="http://mercurial.selenic.com/" title="Mercurial">
 
            <img src="/images/hglogo.png" width="75" height="90" alt="mercurial"/></a>
 
        </p>
 
    </div>
 

	
 
    <div id="corner-top-left"></div>
 
    <div id="corner-top-right"></div>
 
    <div id="corner-bottom-left"></div>
 
    <div id="corner-bottom-right"></div>
 

	
 
</div>
 
</body>
 
</html>
 

	
 
### MAKO DEFS ### 
 

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

	
 
<%def name="menu(current)">
 
<% 
 
def is_current(selected):
 
	if selected == current:
 
		return "class='current'"
 
%>
 
<%def name="menu(current=None)">
 
		<% 
 
		def is_current(selected):
 
			if selected == current:
 
				return "class='current'"
 
		%>
 
		%if current not in ['home','admin']:
 
		##regular menu
 
	       <script type="text/javascript">
 
	       	YAHOO.util.Event.onDOMReady(function(){
 
				YAHOO.util.Event.addListener('repo_switcher','click',function(){
 
					if(YAHOO.util.Dom.hasClass('repo_switcher','selected')){
 
						YAHOO.util.Dom.setStyle('switch_repos','display','none');
 
						YAHOO.util.Dom.setStyle('repo_switcher','background','');
 
						YAHOO.util.Dom.removeClass('repo_switcher','selected');
 
						YAHOO.util.Dom.get('repo_switcher').removeAttribute('style');
 
					}
 
					else{
 
						YAHOO.util.Dom.setStyle('switch_repos','display','');
 
						YAHOO.util.Dom.setStyle('repo_switcher','background','#FFFFFF');
 
						YAHOO.util.Dom.setStyle('repo_switcher','color','#556CB5');
 
						YAHOO.util.Dom.addClass('repo_switcher','selected');
 
					}
 
					});
 
				YAHOO.util.Event.addListener('repos_list','change',function(e){
 
		            var wa = YAHOO.util.Dom.get('repos_list').value;
 
		        	
 
		            var url = "${h.url('summary_home',repo_name='__REPLACE__')}".replace('__REPLACE__',wa);
 
			        window.location = url;
 
				})
 
	           });
 
	       	</script>       	
 
	        <ul class="page-nav">
 
           <script type="text/javascript">
 
            YAHOO.util.Event.onDOMReady(function(){
 
                YAHOO.util.Event.addListener('repo_switcher','click',function(){
 
                    if(YAHOO.util.Dom.hasClass('repo_switcher','selected')){
 
                        YAHOO.util.Dom.setStyle('switch_repos','display','none');
 
                        YAHOO.util.Dom.setStyle('repo_switcher','background','');
 
                        YAHOO.util.Dom.removeClass('repo_switcher','selected');
 
                        YAHOO.util.Dom.get('repo_switcher').removeAttribute('style');
 
                    }
 
                    else{
 
                        YAHOO.util.Dom.setStyle('switch_repos','display','');
 
                        //YAHOO.util.Dom.setStyle('repo_switcher','background','#FFFFFF');
 
                        //YAHOO.util.Dom.setStyle('repo_switcher','color','#556CB5');
 
                        YAHOO.util.Dom.addClass('repo_switcher','selected');
 
                    }
 
                    });
 
                YAHOO.util.Event.addListener('repos_list','change',function(e){
 
                    var wa = YAHOO.util.Dom.get('repos_list').value;
 
                    
 
                    var url = "${h.url('summary_home',repo_name='__REPLACE__')}".replace('__REPLACE__',wa);
 
                    window.location = url;
 
                })
 
               });
 
            </script>
 
            		
 
		   ##REGULAR MENU            
 
	        <ul id="quick">
 
				<!-- repo switcher -->
 
				<li>
 
					<a id="repo_switcher" title="${_('Switch repository')}" href="#">&darr;</a>
 
					<div id="switch_repos" style="display:none;position: absolute;height: 25px">
 
					<a id="repo_switcher" title="${_('Switch repository')}" href="#">
 
                    <span class="icon">
 
                        <img src="/images/icons/database.png" alt="${_('Products')}" />
 
                    </span>
 
                    <span>&darr;</span>					
 
					</a>
 
					<div id="switch_repos" style="display:none;position: absolute;height: 25px;z-index: 1">
 
						<select id="repos_list" size="=10" style="min-width: 150px">
 
						%for repo in sorted(x.name.lower() for x in c.cached_repo_list.values()):
 
							<option value="${repo}">${repo}</option>
 
						%endfor
 
						</select>
 
					</div>			
 
				</li>
 
	            <li ${is_current('summary')}>${h.link_to(_('summary'),h.url('summary_home',repo_name=c.repo_name))}</li>
 
	            <li ${is_current('shortlog')}>${h.link_to(_('shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}</li>
 
				<li ${is_current('changelog')}>${h.link_to(_('changelog'),h.url('changelog_home',repo_name=c.repo_name))}</li>            
 
	            <li ${is_current('branches')}>${h.link_to(_('branches'),h.url('branches_home',repo_name=c.repo_name))}</li>
 
	            <li ${is_current('tags')}>${h.link_to(_('tags'),h.url('tags_home',repo_name=c.repo_name))}</li>
 
	            <li ${is_current('files')}>${h.link_to(_('files'),h.url('files_home',repo_name=c.repo_name))}</li>
 
				
 
	            <li ${is_current('summary')}>
 
	               <a title="${_('Summary')}" href="${h.url('summary_home',repo_name=c.repo_name)}">
 
	               <span class="icon">
 
	                   <img src="/images/icons/clipboard_16.png" alt="${_('Summary')}" />
 
	               </span>
 
	               <span>${_('Summary')}</span>                 
 
	               </a>	            
 
	            </li>
 
                <li ${is_current('shortlog')}>
 
                   <a title="${_('Shortlog')}" href="${h.url('shortlog_home',repo_name=c.repo_name)}">
 
                   <span class="icon">
 
                       <img src="/images/icons/application_double.png" alt="${_('Shortlog')}" />
 
                   </span>
 
                   <span>${_('Shortlog')}</span>                 
 
                   </a>             
 
                </li>	            
 
                <li ${is_current('changelog')}>
 
                   <a title="${_('Changelog')}" href="${h.url('changelog_home',repo_name=c.repo_name)}">
 
                   <span class="icon">
 
                       <img src="/images/icons/time.png" alt="${_('Changelog')}" />
 
                   </span>
 
                   <span>${_('Changelog')}</span>                 
 
                   </a>             
 
                </li>   	            
 
                <li ${is_current('branches')}>
 
                   <a title="${_('Branches')}" href="${h.url('branches_home',repo_name=c.repo_name)}">
 
                   <span class="icon">
 
                       <img src="/images/icons/arrow_branch.png" alt="${_('Branches')}" />
 
                   </span>
 
                   <span>${_('Branches')}</span>                 
 
                   </a>             
 
                </li> 	            
 
                <li ${is_current('tags')}>
 
                   <a title="${_('Tags')}" href="${h.url('tags_home',repo_name=c.repo_name)}">
 
                   <span class="icon">
 
                       <img src="/images/icons/tag_blue.png" alt="${_('Tags')}" />
 
                   </span>
 
                   <span>${_('Tags')}</span>                 
 
                   </a>             
 
                </li>
 
                <li ${is_current('files')}>
 
                   <a title="${_('Files')}" href="${h.url('files_home',repo_name=c.repo_name)}">
 
                   <span class="icon">
 
                       <img src="/images/icons/file.png" alt="${_('Files')}" />
 
                   </span>
 
                   <span>${_('Files')}</span>                 
 
                   </a>             
 
                </li>                            
 
				%if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
 
					<li ${is_current('settings')}>${h.link_to(_('settings'),h.url('repo_settings_home',repo_name=c.repo_name))}</li>
 
                <li ${is_current('settings')}>
 
                   <a title="${_('Settings')}" href="${h.url('repo_settings_home',repo_name=c.repo_name)}">
 
                   <span class="icon">
 
                       <img src="/images/icons/cog_edit.png" alt="${_('Settings')}" />
 
                   </span>
 
                   <span>${_('Settings')}</span>                 
 
                   </a>             
 
                </li>				
 
				%endif					        
 
	        </ul>
 
		%else:
 
		##Root menu
 
			<ul class="page-nav">
 
				<li ${is_current('home')}>${h.link_to(_('Home'),h.url('/'))}</li>
 
		    ##ROOT MENU
 
            <ul id="quick">
 
                <li>
 
                    <a title="${_('Home')}"  href="${h.url('hg_home')}">
 
                    <span class="icon">
 
                        <img src="/images/icons/home_16.png" alt="${_('Home')}" />
 
                    </span>
 
                    <span>${_('Home')}</span>                 
 
                    </a>        
 
                </li>
 

	
 
				%if h.HasPermissionAll('hg.admin')('access admin main page'):
 
					<li ${is_current('admin')}>${h.link_to(_('Admin'),h.url('admin_home'))}</li>
 
                <li ${is_current('admin')}>
 
                   <a title="${_('Admin')}" href="${h.url('admin_home')}">
 
                   <span class="icon">
 
                       <img src="/images/icons/cog_edit.png" alt="${_('Admin')}" />
 
                   </span>
 
                   <span>${_('Admin')}</span>                 
 
                   </a>    
 
				    <ul>
 
				        <li>${h.link_to(_('repositories'),h.url('repos'),class_='repos')}</li>
 
				        <li>${h.link_to(_('users'),h.url('users'),class_='users')}</li>
 
				        ##<li>${h.link_to(_('permissions'),h.url('permissions'),class_='permissions')}</li>
 
				        <li>${h.link_to(_('settings'),h.url('admin_settings'),class_='settings')}</li>        
 
				    </ul>
 
                </li>
 
				%endif
 
				<li class="logout">${h.link_to(u'Logout',h.url('logout_home'))}</li>
 
				></i>
 
			</ul>
 
		%endif    
 
		</div>
 
</%def>
 
<%def name="submenu(current=None)">
 
	<% 
 
	def is_current(selected):
 
		if selected == current:
 
			return "class='current_submenu'"
 
	%>
 
	%if current != None:
 
	<div>
 
    <ul class="submenu">
 
        <li ${is_current('repos')}>${h.link_to(_('repositories'),h.url('repos'),class_='repos')}</li>
 
        <li ${is_current('users')}>${h.link_to(_('users'),h.url('users'),class_='users')}</li>
 
        ##commented<li ${is_current('permissions')}>${h.link_to(_('permissions'),h.url('permissions'),class_='permissions')}</li>
 
		<li ${is_current('settings')}>${h.link_to(_('settings'),h.url('admin_settings'),class_='settings')}</li>        
 
    </ul>
 
    </div>
 
    %endif
 
</%def>
 

	
 

	
 
<%def name="css()">
 
<link rel="stylesheet" href="/css/monoblue_custom.css" type="text/css" />
 
<link rel="stylesheet" type="text/css" href="/css/reset.css" />
 
<link rel="stylesheet" type="text/css" href="/css/style.css" media="screen" />
 
<link rel="stylesheet" type="text/css" href="/css/style_full.css" />
 
<link id="color" rel="stylesheet" type="text/css" href="/css/colors/blue.css" />
 
<link rel="stylesheet" type="text/css" href="/css/pygments.css"  />
 
<link rel="stylesheet" type="text/css" href="/css/diff.css"  />
 
</%def>
 

	
 
<%def name="js()">
 
<script type="text/javascript" src="/js/yui/utilities/utilities.js"></script>
 
<!--[if IE]><script language="javascript" type="text/javascript" src="/js/excanvas.min.js"></script><![endif]-->
 
<script type="text/javascript" src="/js/yui/container/container-min.js"></script>
 
<script type="text/javascript" src="/js/yui/datasource/datasource-min.js"></script>
 
<script type="text/javascript" src="/js/yui/autocomplete/autocomplete-min.js"></script>
 
<script type="text/javascript" src="/js/yui.flot.js"></script>
 
</%def>
 

	
 
<!-- DEFINITION OF FORM ERROR FETCHER -->
 
<%def name="get_form_error(element)">
 
	%if hasattr(c,'form_errors') and type(c.form_errors) == dict:
 
        %if c.form_errors.get(element,False):
 
            <span class="error-message">
 
                ${c.form_errors.get(element,'')}
 
            </span>
 
        %endif
 
	%endif           
 
<%def name="breadcrumbs()">
 
    <div class="breadcrumbs">
 
    ${self.breadcrumbs_links()}
 
    </div>
 
</%def>
 
\ No newline at end of file
pylons_app/templates/branches/branches.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Branches')}
 
    ${_('Administration')}
 
</%def>
 
<%def name="breadcrumbs()">
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(u'Home',h.url('/'))}
 
    / 
 
    &raquo; 
 
    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
 
    /
 
    &raquo;
 
    ${_('branches')}
 
</%def>
 

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

	
 
<%def name="main()">
 
    <h2 class="no-link no-border">${_('Branches')}</h2>
 
	<%include file='branches_data.html'/>
 
</%def>    
 
\ No newline at end of file
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
    </div>
 
    <!-- end box / title -->
 
    <div class="table">
 
        <%include file='branches_data.html'/>
 
    </div>
 
</div>    
 
</%def>     
 
\ No newline at end of file
pylons_app/templates/branches/branches_data.html
Show inline comments
 
% if c.repo_branches:
 
    <table class="table_disp">
 
    	<tr class="header">
 
			<td>${_('date')}</td>
 
			<td>${_('revision')}</td>
 
			<td>${_('name')}</td>
 
			<td>${_('links')}</td>
 
    	</tr>
 
        <tr>
 
            <th class="left">${_('date')}</th>
 
            <th class="left">${_('revision')}</th>
 
            <th class="left">${_('name')}</th>
 
            <th class="left">${_('links')}</th>
 
        </tr>
 
		%for cnt,branch in enumerate(c.repo_branches.items()):
 
		<tr class="parity${cnt%2}">
 
			<td>${h.age(branch[1]._ctx.date())}</td>
 
			<td>r${branch[1].revision}:${branch[1].raw_id}</td>
 
			<td>
 
				<span class="logtags">
 
					<span class="branchtag">${h.link_to(branch[0],
 
					h.url('changeset_home',repo_name=c.repo_name,revision=branch[1].raw_id))}</span>
 
				</span>			
 
			</td>
 
			<td class="nowrap">
 
			${h.link_to(_('changeset'),h.url('changeset_home',repo_name=c.repo_name,revision=branch[1].raw_id))}
pylons_app/templates/changelog/changelog.html
Show inline comments
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Changelog - %s') % c.repo_name}
 
</%def>
 
<%def name="breadcrumbs()">
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(u'Home',h.url('/'))}
 
    / 
 
    ${h.link_to(c.repo_name,h.url('changelog_home',repo_name=c.repo_name))}
 
    /
 
    ${_('changelog')}
 
    &raquo;
 
    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
 
    &raquo;
 
    ${_('Changelog')} - ${_('showing ')} ${c.size if c.size <= c.total_cs else c.total_cs} ${_('out of')} ${c.total_cs} ${_('revisions')}  
 
</%def>
 

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

	
 
<%def name="main()">
 

	
 
    <h2 class="no-link no-border">${_('Changelog')} - ${_('showing ')} 
 
    	${c.size if c.size <= c.total_cs else c.total_cs}
 
    	${_('out of')} ${c.total_cs} ${_('revisions')}
 
    </h2>
 
	<noscript>${_('The revision graph only works with JavaScript-enabled browsers.')}</noscript>
 
% if c.pagination:
 

	
 
<div id="graph">
 
	<div id="graph_nodes">
 
		<canvas id="graph_canvas"></canvas>
 
	</div>
 
	<div id="graph_content">
 
		<div class="container_header">
 
			${h.form(h.url.current(),method='get')}
 
			<div>
 
				<span>${_('Show')}: </span>
 
				<span>${h.text('size',size=2,value=c.size)}</span>
 
				<span>${_('revisions')}</span>
 
				${h.submit('set',_('set'))}
 
			</div>
 
			${h.end_form()}
 
		</div>
 
	%for cnt,cs in enumerate(c.pagination):
 
		<div id="chg_${cnt+1}" class="container">
 
			<div class="left">
 
				<div class="date">${_('commit')} ${cs.revision}: ${cs.raw_id}@${cs.date}</div>
 
					<span class="logtags">
 
						<span class="branchtag">${cs.branch}</span>
 
						%for tag in cs.tags:
 
							<span class="tagtag">${tag}</span>
 
						%endfor
 
					</span>					
 
				<div class="author">${cs.author}</div>
 
				<div class="message">
 
					${h.link_to(h.wrap_paragraphs(cs.message),
 
					h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
    </div>
 
    <div class="table">
 
		% if c.pagination:
 
			<div id="graph">
 
				<div id="graph_nodes">
 
					<canvas id="graph_canvas"></canvas>
 
				</div>
 
			</div>	
 
			<div class="right">
 
						<div class="changes">
 
							<span class="removed" title="${_('removed')}">${len(cs.removed)}</span>
 
							<span class="changed" title="${_('changed')}">${len(cs.changed)}</span>
 
							<span class="added" title="${_('added')}">${len(cs.added)}</span>
 
						</div>					
 
							%if len(cs.parents)>1:
 
							<div class="merge">
 
								${_('merge')}<img alt="merge" src="/images/icons/arrow_join.png"/>
 
							</div>
 
							%endif						
 
						%for p_cs in reversed(cs.parents):
 
							<div class="parent">${_('Parent')} ${p_cs.revision}: ${h.link_to(p_cs.raw_id,
 
								h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}
 
				<div id="graph_content">
 
					<div class="container_header">
 
						
 
        ${h.form(h.url.current(),method='get')}
 
        <div class="info_box">
 
          <span>${_('Show')}:</span>
 
          ${h.text('size',size=1,value=c.size)}
 
          <span>${_('revisions')}</span>
 
          ${h.submit('set',_('set'))}
 
        </div>
 
        ${h.end_form()}
 
						
 
					</div>
 
				%for cnt,cs in enumerate(c.pagination):
 
					<div id="chg_${cnt+1}" class="container">
 
						<div class="left">
 
							<div class="date">${_('commit')} ${cs.revision}: ${cs.raw_id}@${cs.date}</div>
 
								<span class="logtags">
 
									<span class="branchtag">${cs.branch}</span>
 
									%for tag in cs.tags:
 
										<span class="tagtag">${tag}</span>
 
									%endfor
 
								</span>					
 
							<div class="author">${cs.author}</div>
 
							<div class="message">
 
								${h.link_to(h.wrap_paragraphs(cs.message),
 
								h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}
 
							</div>
 
						%endfor								
 
			</div>				
 
		</div>
 
		
 
	%endfor
 
	</div>
 
</div>
 
<script type="text/javascript" src="/js/graph.js"></script>
 

	
 
<script type="text/javascript">
 
YAHOO.util.Event.onDOMReady(function(){
 
	function set_canvas() {
 
		var c = document.getElementById('graph_nodes');
 
		var t = document.getElementById('graph_content');
 
		canvas = document.getElementById('graph_canvas');
 
		var div_h = t.clientHeight;
 
		c.style.height=div_h+'px';
 
		canvas.setAttribute('height',div_h);
 
		canvas.setAttribute('width',160);
 
	};
 

	
 
	set_canvas();
 
	
 
	var jsdata = ${c.jsdata|n};
 
	var r = new BranchRenderer();
 
	r.render(jsdata); 
 

	
 
});
 
</script>
 

	
 
<div>
 
	<h2>${c.pagination.pager('$link_previous ~2~ $link_next')}</h2>
 
</div>	
 
%else:
 
	${_('There are no changes yet')}
 
%endif
 
</%def>    
 
\ No newline at end of file
 
						</div>	
 
						<div class="right">
 
									<div class="changes">
 
										<span class="removed" title="${_('removed')}">${len(cs.removed)}</span>
 
										<span class="changed" title="${_('changed')}">${len(cs.changed)}</span>
 
										<span class="added" title="${_('added')}">${len(cs.added)}</span>
 
									</div>					
 
										%if len(cs.parents)>1:
 
										<div class="merge">
 
											${_('merge')}<img alt="merge" src="/images/icons/arrow_join.png"/>
 
										</div>
 
										%endif						
 
									%for p_cs in reversed(cs.parents):
 
										<div class="parent">${_('Parent')} ${p_cs.revision}: ${h.link_to(p_cs.raw_id,
 
											h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}
 
										</div>
 
									%endfor								
 
						</div>				
 
					</div>
 
					
 
				%endfor
 
				<div class="pagination-wh pagination-left">
 
					${c.pagination.pager('$link_previous ~2~ $link_next')}
 
				</div>			
 
				</div>
 
			</div>
 
			
 
			<script type="text/javascript" src="/js/graph.js"></script>
 
			<script type="text/javascript">
 
				YAHOO.util.Event.onDOMReady(function(){
 
					function set_canvas() {
 
						var c = document.getElementById('graph_nodes');
 
						var t = document.getElementById('graph_content');
 
						canvas = document.getElementById('graph_canvas');
 
						var div_h = t.clientHeight;
 
						c.style.height=div_h+'px';
 
						canvas.setAttribute('height',div_h);
 
						canvas.setAttribute('width',160);
 
					};
 
					set_canvas();
 
					var jsdata = ${c.jsdata|n};
 
					var r = new BranchRenderer();
 
					r.render(jsdata); 
 
				});
 
			</script>
 
		%else:
 
			${_('There are no changes yet')}
 
		%endif  
 
    </div>
 
</div>    
 
</%def>
 
\ No newline at end of file
pylons_app/templates/changeset/changeset.html
Show inline comments
 
<%inherit file="/base/base.html"/>
 

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

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(u'Home',h.url('/'))}
 
    / 
 
    ${h.link_to(c.repo_name,h.url('changeset_home',repo_name=c.repo_name))}
 
    /
 
    ${_('changeset')}
 
    &raquo;
 
    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
 
    &raquo;
 
    ${_('Changeset')} - r${c.changeset.revision}:${c.changeset.raw_id}
 
</%def>
 

	
 
<%def name="page_nav()">
 
    ${self.menu('changelog')}     
 
</%def>
 
<%def name="css()">
 
<link rel="stylesheet" href="/css/monoblue_custom.css" type="text/css" />
 
<link rel="stylesheet" href="/css/diff.css" type="text/css" />
 
</%def>
 

	
 
<%def name="main()">
 
    <h2 class="no-link no-border">${_('Changeset')} - r${c.changeset.revision}:${c.changeset.raw_id}</h2>
 
    
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
    </div>
 
    <div class="table">
 
    <div id="changeset_content">
 
		<div class="container">
 
			<div class="left">
 
				<div class="date">${_('Date')}: ${c.changeset.date}</div>
 
				<div class="author">${_('Author')}: ${c.changeset.author}</div>
 
				<div class="message">${h.wrap_paragraphs(c.changeset.message)}</div>
 
			</div>	
 
			<div class="right">
 
				<span class="logtags">
 
					<span class="branchtag">${c.changeset.branch}</span>
 
					%for tag in c.changeset.tags:
 
						<span class="tagtag">${tag}</span>
 
@@ -75,15 +78,17 @@
 
					%endif
 
				</div>
 
			</div>
 
			<div class="code-body">        
 
					%if diff:
 
						${diff|n}
 
					%else:
 
						${_('No changes in this file')}
 
					%endif
 
			</div>
 
		</div>
 
		%endif
 
	%endfor
 
			
 
</%def>    
 
\ No newline at end of file
 
	%endfor 
 
    </div>
 
</div>    
 
	
 
</%def>
 
\ No newline at end of file
pylons_app/templates/errors/error_document.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" id="mainhtml">
 
<head>
 
	<link rel="icon" href="/images/hgicon.png" type="image/png" />
 
    <title>Error - ${c.error_message}</title>
 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
 
    
 
    %if c.redirect_time:
 
        <meta http-equiv="refresh" content="${c.redirect_time}; url=${c.url_redirect}"/>
 
    %endif
 
    
 
    <head>
 
        <title>Error - ${c.error_message}</title>
 
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 
	    %if c.redirect_time:
 
	        <meta http-equiv="refresh" content="${c.redirect_time}; url=${c.url_redirect}"/>
 
	    %endif        
 
        <link rel="icon" href="/images/hgicon.png" type="image/png" />
 
        <meta name="robots" content="index, nofollow"/>
 
            
 
        <!-- stylesheets -->
 
        <link rel="stylesheet" type="text/css" href="/css/reset.css" />
 
        <link rel="stylesheet" type="text/css" href="/css/style.css" media="screen" />
 
        <link id="color" rel="stylesheet" type="text/css" href="/css/colors/blue.css" />
 
	    <style type="text/css">
 
	     #main_div{
 
	       border: 0px solid #000;
 
	       width: 500px;
 
	       margin: auto;
 
	       text-align: center;
 
	       margin-top: 200px;
 
	       font-size: 1.8em;
 
	     }
 
	     .error_message{
 
	        text-align: center;
 
	        color:red;
 
	        font-size: 1.8em;
 
	     }
 
	    </style>
 
    
 
    <style type="text/css">
 
     
 
     body {
 
       font-family: sans-serif;
 
     }
 
     #main_div{
 
       border: 0px solid #000;
 
       width: 500px;
 
       margin: auto;
 
       text-align: center;
 
       margin-top: 200px;
 
     }
 
     .error_message{
 
        text-align: center;
 
        color:red;
 
     }
 
    </style>
 
</head>
 
       
 
<body>
 
	<div id="main_div">
 
		<h1 class="error_message">${c.error_message}</h1>
 
		
 
		<p>${c.error_explanation}</p>
 
        %if c.redirect_time:
 
            <p>${_('You will be redirected to %s in %s seconds') % (c.redirect_module,c.redirect_time)}</p>
 
	    %endif		
 
		
 
	</div>
 
</body>
 
    </head>
 
    <body>
 

	
 
        <div id="login">
 
            <div class="table">            
 
				<div id="main_div">
 
					<h1 class="error_message">${c.error_message}</h1>
 
					
 
					<p>${c.error_explanation}</p>
 
			        %if c.redirect_time:
 
			            <p>${_('You will be redirected to %s in %s seconds') % (c.redirect_module,c.redirect_time)}</p>
 
				    %endif		
 
					
 
				</div>
 
            </div>
 
            <!-- end login -->
 
        </div>
 
    </body>
 
    
 
</html>
 

	
 

	
pylons_app/templates/files/file_diff.html
Show inline comments
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Repository managment')}
 
</%def>
 
<%def name="breadcrumbs()">
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(u'Home',h.url('/'))}
 
    / 
 
    ${h.link_to(c.repo_name,h.url('files_home',repo_name=c.repo_name))}
 
    /
 
    ${_('files')}
 
    &raquo;
 
    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
 
    &raquo;
 
    ${'%s:  %s %s %s' % (_('File diff'),c.diff2,'&rarr;',c.diff1)|n}
 
</%def>
 

	
 
<%def name="page_nav()">
 
    ${self.menu('files')}     
 
</%def>
 
<%def name="css()">
 
<link rel="stylesheet" href="/css/monoblue_custom.css" type="text/css" />
 
<link rel="stylesheet" href="/css/diff.css" type="text/css" />
 
</%def>
 
<%def name="main()">
 
    <h2 class="no-link no-border">${'%s:  %s %s %s' % (_('File diff'),c.diff2,'&rarr;',c.diff1)|n}</h2>
 
<div id="body" class="diffblock">
 
	<div class="code-header">
 
		<div>
 
		<span>${h.link_to(c.f_path,h.url('files_home',repo_name=c.repo_name,
 
		revision=c.diff2.split(':')[1],f_path=c.f_path))}</span>
 
		 &raquo; <span style="font-size:77%">${h.link_to(_('diff'),
 
		h.url.current(diff2=c.diff2.split(':')[-1],diff1=c.diff1.split(':')[-1],diff='diff'))}</span>
 
		 &raquo; <span style="font-size:77%">${h.link_to(_('raw diff'),
 
		h.url.current(diff2=c.diff2.split(':')[-1],diff1=c.diff1.split(':')[-1],diff='raw'))}</span>
 
		 &raquo; <span style="font-size:77%">${h.link_to(_('download diff'),
 
		h.url.current(diff2=c.diff2.split(':')[-1],diff1=c.diff1.split(':')[-1],diff='download'))}</span>
 
		</div>
 
	</div>
 
	<div class="code-body">
 
 			%if c.no_changes:
 
            	${_('No changes')}
 
            %else:        
 
				${c.cur_diff|n}
 
            %endif
 
	</div>
 
</div>
 
</%def>    
 
\ No newline at end of file
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
    </div>
 
    <div class="table">
 
		<div id="body" class="diffblock">
 
			<div class="code-header">
 
				<div>
 
				<span>${h.link_to(c.f_path,h.url('files_home',repo_name=c.repo_name,
 
				revision=c.diff2.split(':')[1],f_path=c.f_path))}</span>
 
				 &raquo; <span style="font-size:77%">${h.link_to(_('diff'),
 
				h.url.current(diff2=c.diff2.split(':')[-1],diff1=c.diff1.split(':')[-1],diff='diff'))}</span>
 
				 &raquo; <span style="font-size:77%">${h.link_to(_('raw diff'),
 
				h.url.current(diff2=c.diff2.split(':')[-1],diff1=c.diff1.split(':')[-1],diff='raw'))}</span>
 
				 &raquo; <span style="font-size:77%">${h.link_to(_('download diff'),
 
				h.url.current(diff2=c.diff2.split(':')[-1],diff1=c.diff1.split(':')[-1],diff='download'))}</span>
 
				</div>
 
			</div>
 
			<div class="code-body">
 
		 			%if c.no_changes:
 
		            	${_('No changes')}
 
		            %else:        
 
						${c.cur_diff|n}
 
		            %endif
 
			</div>
 
		</div>   
 
    </div>
 
</div>    
 
</%def>  
 

	
 
   
 
\ No newline at end of file
pylons_app/templates/files/files.html
Show inline comments
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Repository managment')}
 
</%def>
 
<%def name="breadcrumbs()">
 
    ${h.link_to(u'Home',h.url('/'))}
 
    / 
 
    ${h.link_to(c.repo_name,h.url('files_home',repo_name=c.repo_name))}
 
    /
 
    ${_('files')}
 
</%def>
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(u'Home',h.url('/'))}
 
    &raquo;
 
    ${h.link_to(c.repo_name,h.url('files_home',repo_name=c.repo_name))}
 
    &raquo;
 
    ${_('files')}
 
    %if c.files_list:
 
        @ R${c.rev_nr}:${c.cur_rev}
 
    %endif        
 
</%def>
 

	
 
<%def name="page_nav()">
 
    ${self.menu('files')}     
 
</%def>
 
<%def name="css()">
 
<link rel="stylesheet" href="/css/monoblue_custom.css" type="text/css" />
 
<link rel="stylesheet" href="/css/pygments.css" type="text/css" />
 
</%def>
 

	
 
<%def name="main()">
 
    <h2 class="no-link no-border">${_('Files')}</h2>
 
	<div id="files_data">
 
	%if c.files_list:
 
		<h2>${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cur_rev,c.files_list.path)}</h2>
 
			%if c.files_list.is_dir():
 
				<%include file='files_browser.html'/>
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}     
 
    </div>
 
    <div class="table">
 
		<div id="files_data">
 
			%if c.files_list:
 
				<h2>${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cur_rev,c.files_list.path)}</h2>
 
					%if c.files_list.is_dir():
 
						<%include file='files_browser.html'/>
 
					%else:
 
						<%include file='files_source.html'/>			
 
					%endif	
 
			%else:
 
				<%include file='files_source.html'/>			
 
			%endif	
 
	%else:
 
		<h2>
 
			<a href="#" onClick="javascript:parent.history.back();" target="main">${_('Go back')}</a> 
 
			${_('No files at given path')}: "${c.f_path or "/"}" 
 
		</h2>
 
	%endif
 

	
 
	</div>
 
				<h2>
 
					<a href="#" onClick="javascript:parent.history.back();" target="main">${_('Go back')}</a> 
 
					${_('No files at given path')}: "${c.f_path or "/"}" 
 
				</h2>
 
			%endif
 
		
 
		</div>    
 
    </div>
 
</div>    
 
	
 
</%def>    
 
\ No newline at end of file
pylons_app/templates/files/files_annotate.html
Show inline comments
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('File annotate')}
 
</%def>
 
<%def name="breadcrumbs()">
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(u'Home',h.url('/'))}
 
    / 
 
    ${h.link_to(c.repo_name,h.url('files_home',repo_name=c.repo_name))}
 
    /
 
    ${_('files')}
 
    &raquo;
 
    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
 
    &raquo;
 
    ${_('annotate')}  
 
</%def>
 

	
 
<%def name="page_nav()">
 
		${self.menu('files')}     
 
</%def>
 
<%def name="css()">
 
	<link rel="stylesheet" href="/css/monoblue_custom.css" type="text/css" />
 
	<link rel="stylesheet" href="/css/pygments.css" type="text/css" />
 
</%def>
 
<%def name="main()">
 
    <h2 class="no-link no-border">${_('Annotate')}</h2>
 
	<div id="files_data">
 
		<h2>${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cur_rev,c.file.path)}</h2>
 
		<dl class="overview">
 
			<dt>${_('Revision')}</dt>
 
			<dd>r${c.file.last_changeset.revision}:${c.file.last_changeset._short}</dd>
 
			<dt>${_('Size')}</dt>
 
			<dd>${h.format_byte_size(c.file.size,binary=True)}</dd>
 
			<dt>${_('Options')}</dt>
 
			<dd>${h.link_to(_('show source'),
 
					h.url('files_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))}  
 
				/ ${h.link_to(_('download as raw'),
 
					h.url('files_raw_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))}
 
			</dd>				
 
		</dl>
 
		<div id="body" class="codeblock">
 
			<div class="code-header">
 
				<div class="revision">${c.file.name}@r${c.file.last_changeset.revision}:${c.file.last_changeset._short}</div>
 
				<div class="commit" style="font-size:70%">"${c.file_msg}"</div>
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
    </div>
 
    <div class="table">
 
		<div id="files_data">
 
			<h2>${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cur_rev,c.file.path)}</h2>
 
			<dl class="overview">
 
				<dt>${_('Revision')}</dt>
 
				<dd>r${c.file.last_changeset.revision}:${c.file.last_changeset._short}</dd>
 
				<dt>${_('Size')}</dt>
 
				<dd>${h.format_byte_size(c.file.size,binary=True)}</dd>
 
				<dt>${_('Options')}</dt>
 
				<dd>${h.link_to(_('show source'),
 
						h.url('files_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))}  
 
					/ ${h.link_to(_('download as raw'),
 
						h.url('files_raw_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))}
 
				</dd>				
 
			</dl>
 
			<div id="body" class="codeblock">
 
				<div class="code-header">
 
					<div class="revision">${c.file.name}@r${c.file.last_changeset.revision}:${c.file.last_changeset._short}</div>
 
					<div class="commit" style="font-size:70%">"${c.file_msg}"</div>
 
				</div>
 
				<div class="code-body">
 
					${h.pygmentize_annotation(c.file,linenos=True,anchorlinenos=True,lineanchors='S',cssclass="code-highlight")}
 
				</div>
 
			</div>
 
			<div class="code-body">
 
				${h.pygmentize_annotation(c.file,linenos=True,anchorlinenos=True,lineanchors='S',cssclass="code-highlight")}
 
			</div>
 
		</div>
 
	</div>
 
</%def> 
 
\ No newline at end of file
 
		</div>    
 
    </div>
 
</div>    
 
</%def>   
 
\ No newline at end of file
pylons_app/templates/files/files_browser.html
Show inline comments
 
<%def name="file_class(node)">
 
	%if node.is_file():
 
		<%return "browser-file" %>
 
	%else:
 
		<%return "browser-dir"%>
 
	%endif
 
</%def>
 
<div id="body" class="browserblock">
 
	<div class="browser-header">
 
		${h.form(h.url.current())}
 
		<span>${_('view')}@rev <a style="font-size: 1.3em"  href="${c.url_prev}">&laquo;</a>${h.text('at_rev',value=c.rev_nr,size='5')}<a style="font-size: 1.3em" href="${c.url_next}">&raquo;</a></span>
 
		${c.cur_rev} 
 
		${h.submit('view','view')}
 
		<div class="info_box">
 
          <span >${_('view')}@rev</span> 
 
          <a href="${c.url_prev}">&laquo;</a>
 
          ${h.text('at_rev',value=c.rev_nr,size=3)}
 
          <a href="${c.url_next}">&raquo;</a>
 
          ${h.submit('view','view')}
 
	    </div>           
 
		${h.end_form()}
 
	</div>
 
	<div class="browser-body">
 
		<table class="code-browser">
 
		         <thead>
 
		             <tr>
 
		                 <th>${_('Name')}</th>
 
		                 <th>${_('Size')}</th>
 
		                 <th>${_('Revision')}</th>
 
		                 <th>${_('Last modified')}</th>
 
		                 <th>${_('Last commiter')}</th>
 
		             </tr>
pylons_app/templates/files/files_source.html
Show inline comments
 
<dl class="overview">
 
	<dt>${_('Revision')}</dt>
 
<dl>
 
	<dt>${_('Last revision')}</dt>
 
	<dd>r${c.files_list.last_changeset.revision}:${c.files_list.last_changeset._short}</dd>
 
	<dt>${_('Size')}</dt>
 
	<dd>${h.format_byte_size(c.files_list.size,binary=True)}</dd>
 
	<dt>${_('Options')}</dt>
 
	<dd>${h.link_to(_('show annotation'),
 
			h.url('files_annotate_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))}  
 
		 / ${h.link_to(_('download as raw'),
 
			h.url('files_raw_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))}
 
	</dd>
 
	<dt>${_('History')}</dt>
 
	<dd>
 
		${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='GET')}
 
		${h.hidden('diff2',c.files_list.last_changeset._short)}
 
		${h.select('diff1','',c.file_history)}
 
		${h.submit('diff','diff')}
 
		${h.submit('diff','diff',class_="ui-button ui-widget ui-state-default ui-corner-all")}
 
		${h.end_form()}
 
	</dd>
 
					
 
</dl>		
 
</dl>	
 

	
 
	
 
<div id="body" class="codeblock">
 
	<div class="code-header">
 
		<div class="revision">${c.files_list.name}@r${c.files_list.last_changeset.revision}:${c.files_list.last_changeset._short}</div>
 
		<div class="commit" style="font-size:70%">"${c.files_list.last_changeset.message}"</div>
 
	</div>
 
	<div class="code-body">
 
		${h.pygmentize(c.files_list,linenos=True,anchorlinenos=True,lineanchors='S',cssclass="code-highlight")}
 
	</div>
 
</div>
 
\ No newline at end of file
pylons_app/templates/index.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="base/base.html"/>
 
<%def name="title()">
 
    ${c.repos_prefix}
 
    ${c.hg_app_name}
 
</%def>
 
<%def name="breadcrumbs()">
 
	${c.repos_prefix}
 
	${c.hg_app_name}
 
</%def>
 
<%def name="page_nav()">
 
	${self.menu('home')}
 
</%def>
 
<%def name="main()">
 
	<%def name="get_sort(name)">
 
		<%name_slug = name.lower().replace(' ','_') %>
 
		%if name_slug == c.cs_slug:
 
			<span style="font-weight: bold;text-decoration: underline;">${name}</span>
 
		%else:
 
			<span style="font-weight: bold">${name}</span>
 
		%endif
 
		<a style="color:#FFF" href="?sort=${name_slug}">&darr;</a>
 
		<a style="color:#FFF" href="?sort=-${name_slug}">&uarr;</a>
 
		<a href="?sort=${name_slug}">&darr;</a>
 
		<a href="?sort=-${name_slug}">&uarr;</a>
 
	</%def>
 
	<table class="table_disp">
 
	  <tr class="header">
 
	    <td>${get_sort(_('Name'))}</td>
 
	    <td>${get_sort(_('Description'))}</td>
 
	    <td>${get_sort(_('Last change'))}</td>
 
	    <td>${get_sort(_('Tip'))}</td>
 
	    <td>${get_sort(_('Contact'))}</td>
 
	    <td>${_('RSS')}</td>
 
	    <td>${_('Atom')}</td>
 
	  </tr>	
 
	%for cnt,repo in enumerate(c.repos_list):
 
		%if h.HasRepoPermissionAny('repository.write','repository.read','repository.admin')(repo['name'],'main page check'):
 

	
 
 		<tr class="parity${cnt%2}">
 
		    <td>
 
 			 %if repo['repo'].dbrepo.private:
 
				<img alt="${_('private')}" src="/images/icons/lock.png">
 
			 %else:
 
			 	<img alt="${_('public')}" src="/images/icons/lock_open.png">
 
			 %endif	 
 
		    ${h.link_to(repo['name'],
 
		    	h.url('summary_home',repo_name=repo['name']))}</td>
 
		    <td title="${repo['description']}">${h.truncate(repo['description'],60)}</td>
 
	        <td>${h.age(repo['last_change'])}</td>
 
	        <td>${h.link_to_if(repo['rev']>=0,'r%s:%s' % (repo['rev'],repo['tip']),
 
		        h.url('changeset_home',repo_name=repo['name'],revision=repo['tip']),
 
	        	class_="tooltip",
 
		    	tooltip_title=h.tooltip(repo['last_msg']))}</td>
 
	        <td title="${repo['contact']}">${h.person(repo['contact'])}</td>
 
			<td>
 
				<a title="${_('Subscribe to %s rss feed')%repo['name']}" class="rss_logo"  href="${h.url('rss_feed_home',repo_name=repo['name'])}"></a>
 
			</td>        
 
			<td>
 
				<a title="${_('Subscribe to %s atom feed')%repo['name']}"  class="atom_logo" href="${h.url('atom_feed_home',repo_name=repo['name'])}"></a>
 
			</td>
 
		</tr>
 
		%endif
 
	%endfor
 
	</table>
 
	
 
	
 
	
 
    <div class="box">
 
	    <!-- box / title -->
 
	    <div class="title">
 
	        <h5>${_('Dashboard')}</h5>
 
	    </div>
 
	    <!-- end box / title -->
 
        <div class="table">
 
                    <table>
 
            <thead>
 
	            <tr>
 
			        <th class="left">${get_sort(_('Name'))}</th>
 
			        <th class="left">${get_sort(_('Description'))}</th>
 
			        <th class="left">${get_sort(_('Last change'))}</th>
 
			        <th class="left">${get_sort(_('Tip'))}</th>
 
			        <th class="left">${get_sort(_('Contact'))}</th>
 
			        <th class="left">${_('RSS')}</th>
 
			        <th class="left">${_('Atom')}</th>
 
	            </tr>
 
            </thead>
 
                        <tbody>
 
					    %for cnt,repo in enumerate(c.repos_list):
 
					        %if h.HasRepoPermissionAny('repository.write','repository.read','repository.admin')(repo['name'],'main page check'):
 
					        <tr class="parity${cnt%2}">
 
					            <td>
 
					             %if repo['repo'].dbrepo.private:
 
					                <img alt="${_('private')}" src="/images/icons/lock.png"/>
 
					             %else:
 
					                <img alt="${_('public')}" src="/images/icons/lock_open.png"/>
 
					             %endif  
 
					            ${h.link_to(repo['name'],
 
					                h.url('summary_home',repo_name=repo['name']))}</td>
 
					            <td title="${repo['description']}">${h.truncate(repo['description'],60)}</td>
 
					            <td>${h.age(repo['last_change'])}</td>
 
					            <td>${h.link_to_if(repo['rev']>=0,'r%s:%s' % (repo['rev'],repo['tip']),
 
					                h.url('changeset_home',repo_name=repo['name'],revision=repo['tip']),
 
					                class_="tooltip",
 
					                tooltip_title=h.tooltip(repo['last_msg']))}</td>
 
					            <td title="${repo['contact']}">${h.person(repo['contact'])}</td>
 
					            <td>
 
					                <a title="${_('Subscribe to %s rss feed')%repo['name']}" class="rss_icon"  href="${h.url('rss_feed_home',repo_name=repo['name'])}"></a>
 
					            </td>        
 
					            <td>
 
					                <a title="${_('Subscribe to %s atom feed')%repo['name']}"  class="atom_icon" href="${h.url('atom_feed_home',repo_name=repo['name'])}"></a>
 
					            </td>
 
					        </tr>
 
					        %endif
 
					    %endfor
 
                        </tbody>
 
                    </table>
 
            </div>
 
    </div>	
 
</%def>    
pylons_app/templates/login.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="base/base.html"/>
 
<%def name="title()">
 
    ${c.repos_prefix}
 
</%def>
 
<%def name="breadcrumbs()">
 
	${c.repos_prefix}
 
</%def>
 
<%def name="page_nav()">
 
	&nbsp;
 
	</div>
 
</%def>
 
<%def name="main()">
 
        <div>
 
        <br />
 
        <h2>${_('Login to hg app')}</h2>
 
        ${h.form(h.url.current())}
 
        <table>
 
            <tr>
 
                <td>${_('Username')}</td>
 
                <td>${h.text('username')}</td>
 
                <td>${self.get_form_error('username')}</td>
 
            </tr>
 
            <tr>
 
                <td>${_('Password')}</td>
 
                <td>${h.password('password')}</td>
 
                <td>${self.get_form_error('password')}</td> 
 
            </tr>
 
            <tr>
 
                <td></td>
 
                <td>${h.submit('login','login')}</td>
 
            </tr>            
 
        </table>
 
        ${h.end_form()}
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" id="mainhtml">
 
    <head>
 
        <title>${_('Sign In to hg-app')}</title>
 
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 
        <link rel="icon" href="/images/hgicon.png" type="image/png" />
 
        <meta name="robots" content="index, nofollow"/>
 
            
 
        <!-- stylesheets -->
 
        <link rel="stylesheet" type="text/css" href="/css/reset.css" />
 
        <link rel="stylesheet" type="text/css" href="/css/style.css" media="screen" />
 
        <link id="color" rel="stylesheet" type="text/css" href="/css/colors/blue.css" />
 

	
 
        <!-- scripts -->
 

	
 
    </head>
 
    <body>
 
<div id="login">
 
            <!-- login -->
 
            <div class="title">
 
                <h5>${_('Sign In to hg-app')}</h5>
 
                <div class="corner tl"></div>
 
                <div class="corner tr"></div>
 
            </div>
 
            <div class="inner">            
 
                ${h.form(h.url.current())}
 
                <div class="form">
 
                    <!-- fields -->
 

	
 
                    <div class="fields">
 
                        <div class="field">
 
                            <div class="label">
 
                                <label for="username">${_('Username')}:</label>
 
                            </div>
 
                            <div class="input">
 
                                ${h.text('username',class_='focus',size=40)}
 
                            </div>
 
                            
 
                        </div>                     
 
                        <div class="field">
 
                            <div class="label">
 
                                <label for="password">${_('Password')}:</label>
 
                            </div>
 
                            <div class="input">
 
                                ${h.password('password',class_='focus',size=40)}
 
                            </div>
 
                            
 
                        </div>
 
                        ##<div class="field">
 
                        ##    <div class="checkbox">
 
                        ##        <input type="checkbox" id="remember" name="remember" />
 
                        ##        <label for="remember">Remember me</label>
 
                        ##    </div>
 
                        ##</div>
 
                        <div class="buttons">
 
                            ${h.submit('sign_in','Sign In',class_="ui-button ui-widget ui-state-default ui-corner-all")}
 
                        </div>
 
                    </div>
 
                    <!-- end fields -->
 
                    <!-- links -->
 
                    <div class="links">
 
                        ${h.link_to(_('Forgot your password ?'),h.url('#'))}
 
                         / 
 
                        ${h.link_to(_("Don't have an account ?"),h.url('register'))}
 
                    </div>
 

	
 
                    <!-- end links -->
 
                </div>
 
                ${h.end_form()}
 
            </div>
 
            <!-- end login -->
 
        </div>
 
</%def>    
 
    </body>
 
</html>
 

	
 

	
pylons_app/templates/register.html
Show inline comments
 
new file 100644
 
## -*- coding: utf-8 -*-
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" id="mainhtml">
 
    <head>
 
        <title>${_('Sign Up to hg-app')}</title>
 
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 
        <link rel="icon" href="/images/hgicon.png" type="image/png" />
 
        <meta name="robots" content="index, nofollow"/>
 
            
 
        <!-- stylesheets -->
 
        <link rel="stylesheet" type="text/css" href="/css/reset.css" />
 
        <link rel="stylesheet" type="text/css" href="/css/style.css" media="screen" />
 
        <link id="color" rel="stylesheet" type="text/css" href="/css/colors/blue.css" />
 

	
 
        <!-- scripts -->
 

	
 
    </head>
 
    <body>
 
		<div id="register">
 
			
 
			<div class="title">
 
				<h5>${_('Sign Up to hg-app')}</h5>
 
                <div class="corner tl"></div>
 
                <div class="corner tr"></div>				
 
			</div>
 
			<div class="inner">
 
			    ${h.form(url('register'))}
 
			    <div class="form">
 
			        <!-- fields -->
 
			        <div class="fields">
 
			             <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="password">${_('New Password')}:</label>
 
			                </div>
 
			                <div class="input">
 
			                    ${h.password('password')}
 
			                </div>
 
			             </div>
 
			            
 
			             <div class="field">
 
			                <div class="label">
 
			                    <label for="name">${_('First Name')}:</label>
 
			                </div>
 
			                <div class="input">
 
			                    ${h.text('name')}
 
			                </div>
 
			             </div>
 
			            
 
			             <div class="field">
 
			                <div class="label">
 
			                    <label for="lastname">${_('Last Name')}:</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="buttons">
 
				            <div class="nohighlight">
 
				              ${h.submit('sign_up','Sign Up',class_="ui-button ui-widget ui-state-default ui-corner-all")}
 
				            </div>
 
			            </div>             
 
			    	</div>
 
			    </div>
 
			    ${h.end_form()}
 
			</div>    
 
	    </div>
 
    </body>
 
</html>
 

	
pylons_app/templates/settings/repo_settings.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Repository settings')}
 
    ${_('Repositories administration')}
 
</%def>
 
<%def name="breadcrumbs()">
 
    ${h.link_to(u'Home',h.url('/'))}
 
    / 
 
    ${h.link_to(c.repo_name,h.url('shortlog_home',repo_name=c.repo_name))}
 
    /
 
    ${_('settings')}
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(c.repo_info.repo_name,h.url('summary_home',repo_name=c.repo_info.repo_name))} 
 
    &raquo; 
 
    ${_('Settings')} 
 
    
 
</%def>
 
<%def name="page_nav()">
 
	${self.menu('settings')}     
 
    ${self.menu('settings')}
 
</%def>
 
<%def name="main()">
 
	<h2 class="no-link no-border">${_('Settings')}</h2>
 
	<div>
 
        ${h.form(url('repo_settings_update', repo_name=c.repo_info.repo_name),method='put')}
 
        <table>
 
        	<tr>
 
        		<td>${_('Name')}</td>
 
        		<td>${h.text('repo_name',size="28")}</td>
 
        		<td>${self.get_form_error('repo_name')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Description')}</td>
 
        		<td>${h.textarea('description',cols=32,rows=5)}</td>
 
        		<td>${self.get_form_error('description')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Private')}</td>
 
        		<td>${h.checkbox('private',value="True")}</td>
 
        		<td>${self.get_form_error('private')}</td>
 
        	</tr>
 
        	<tr>
 
        		<td>${_('Permissions')}</td>
 
        		<td>
 
        			<table>
 
        				<tr>
 
        					<td>${_('none')}</td>
 
        					<td>${_('read')}</td>
 
        					<td>${_('write')}</td>
 
        					<td>${_('admin')}</td>
 
        					<td>${_('user')}</td>
 
        				</tr>
 
        				
 
        				%for r2p in c.repo_info.repo2perm:
 
        					%if r2p.user.username =='default' and c.repo_info.private:
 
        						<tr>
 
									<td colspan="4">
 
										<span style="font-size: 0.8em">${_('disabled for private repository')}</span></td>
 
									<td>${r2p.user.username}</td>
 
								</tr>
 
							%else:
 
	        				<tr id=${id(r2p.user.username)}>
 
	        					<td>${h.radio('perm_%s' % r2p.user.username,'repository.none')}</td>
 
	        					<td>${h.radio('perm_%s' % r2p.user.username,'repository.read')}</td>
 
	        					<td>${h.radio('perm_%s' % r2p.user.username,'repository.write')}</td>
 
	        					<td>${h.radio('perm_%s' % r2p.user.username,'repository.admin')}</td>
 
	        					<td>${r2p.user.username}</td>
 
	        					<td>
 
	        					  %if r2p.user.username !='default':
 
				                  	<span class="delete_icon action_button" onclick="ajaxAction(${r2p.user.user_id},${id(r2p.user.username)})">
 
				                  		<script type="text/javascript">
 
											function ajaxAction(user_id,field_id){
 
												var sUrl = "${h.url('delete_repo_user',repo_name=c.repo_name)}";
 
												var callback = { success:function(o){
 
																YAHOO.util.Dom.get(String(field_id)).innerHTML = '<td colspan="6"></td>';
 
															 }};
 
												var postData = '_method=delete&user_id='+user_id; 
 
												var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData); 
 
						                	};
 
										</script>       	
 
				                  	</span>
 
				                  %endif					
 
	        					</td>
 
	        				</tr>
 
	        				%endif
 
						%endfor
 
						<%
 
							if not hasattr(c,'form_errors'):
 
								d = 'display:none;'
 
							else:
 
								d=''
 
						%>
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}      
 
    </div>
 
    ${h.form(url('repo_settings_update', repo_name=c.repo_info.repo_name),method='put')}
 
    <div class="form">
 
        <!-- fields -->
 
        <div class="fields">
 
            <div class="field">
 
                <div class="label">
 
                    <label for="input-medium">${_('Name')}:</label>
 
                </div>
 
                <div class="input">
 
                    ${h.text('repo_name')}
 
                </div>
 
             </div>
 
             
 
            <div class="field">
 
                <div class="label label-textarea">
 
                    <label for="input-small">${_('Description')}:</label>
 
                </div>
 
                <div class="textarea text-area editor">
 
                    ${h.textarea('description',cols=23,rows=5)}
 
                </div>
 
            </div>
 
            
 
            <div class="field">
 
                <div class="label label-checkbox">
 
                    <label for="input-small">${_('Private')}:</label>
 
                </div>
 
                <div class="checkboxes">
 
                    ${h.checkbox('private',value="True")}
 
                </div>
 
            </div>
 
             
 
             <div class="field">
 
                <div class="label">
 
                    <label for="input-small">${_('Permissions')}:</label>
 
                </div>
 
                <div class="input">
 
                    <table id="permissions_manage">
 
                        <tr>
 
                            <td>${_('none')}</td>
 
                            <td>${_('read')}</td>
 
                            <td>${_('write')}</td>
 
                            <td>${_('admin')}</td>
 
                            <td>${_('user')}</td>
 
                            <td></td>
 
                        </tr>
 
                        
 
                        %for r2p in c.repo_info.repo2perm:
 
                            %if r2p.user.username =='default' and c.repo_info.private:
 
                                <tr>
 
                                    <td colspan="6">
 
                                        <span class="private_repo_msg">
 
                                        ${_('disabled for private repository')}
 
                                        </span>
 
                                    </td>
 
                                    <td>${r2p.user.username}</td>
 
                                </tr>
 
                            %else:
 
                            <tr id="id${id(r2p.user.username)}">
 
                                <td>${h.radio('perm_%s' % r2p.user.username,'repository.none')}</td>
 
                                <td>${h.radio('perm_%s' % r2p.user.username,'repository.read')}</td>
 
                                <td>${h.radio('perm_%s' % r2p.user.username,'repository.write')}</td>
 
                                <td>${h.radio('perm_%s' % r2p.user.username,'repository.admin')}</td>
 
                                <td>${r2p.user.username}</td>
 
                                <td>
 
                                  %if r2p.user.username !='default':
 
                                    <span class="delete_icon action_button" onclick="ajaxAction(${r2p.user.user_id},'${'id%s'%id(r2p.user.username)}')">
 
                                        <script type="text/javascript">
 
                                            function ajaxAction(user_id,field_id){
 
                                                var sUrl = "${h.url('delete_repo_user',repo_name=c.repo_name)}";
 
                                                var callback = { success:function(o){
 
                                                var tr = YAHOO.util.Dom.get(String(field_id));
 
                                                tr.parentNode.removeChild(tr);}};
 
                                                var postData = '_method=delete&user_id='+user_id; 
 
                                                var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);};
 
                                        </script>           
 
                                    </span>
 
                                  %endif                    
 
                                </td>
 
                            </tr>
 
                            %endif
 
                        %endfor
 

	
 
        				<tr id="add_perm_input" style="${d}">
 
        					<td>${h.radio('perm_new_user','repository.none')}</td>
 
        					<td>${h.radio('perm_new_user','repository.read')}</td>
 
        					<td>${h.radio('perm_new_user','repository.write')}</td>
 
        					<td>${h.radio('perm_new_user','repository.admin')}</td>
 
        					<td class='ac'>
 
        						<div id="perm_ac">
 
        							${h.text('perm_new_user_name',class_='yui-ac-input')}
 
									<div id="perm_container"></div>
 
        						</div>
 
        					</td>
 
        					<td>${self.get_form_error('perm_new_user_name')}</td>     					
 
        				</tr>
 
        				<tr>
 
        					<td colspan="4">
 
        						<span id="add_perm" class="add_icon" style="cursor: pointer;">
 
        						${_('Add another user')}
 
        						</span>
 
        					</td>
 
        				</tr>
 
        			</table>
 
        		</td>
 
        		
 
        	</tr>
 
        	<tr>
 
        		<td></td>
 
        		<td>${h.submit('update','update')}</td>
 
        	</tr>
 
        	        	        	
 
        </table>
 
        ${h.end_form()}
 

	
 
                        <tr id="add_perm_input">
 
                            <td>${h.radio('perm_new_user','repository.none')}</td>
 
                            <td>${h.radio('perm_new_user','repository.read')}</td>
 
                            <td>${h.radio('perm_new_user','repository.write')}</td>
 
                            <td>${h.radio('perm_new_user','repository.admin')}</td>
 
                            <td class='ac'>
 
                                <div class="perm_ac" id="perm_ac">
 
                                    ${h.text('perm_new_user_name',class_='yui-ac-input')}
 
                                    <div id="perm_container"></div>
 
                                </div>
 
                            </td>
 
                            <td></td>
 
                        </tr>
 
                        <tr>
 
                            <td colspan="6">
 
                                <span id="add_perm" class="add_icon" style="cursor: pointer;">
 
                                ${_('Add another user')}
 
                                </span>
 
                            </td>
 
                        </tr>
 
                    </table>             
 
             </div>
 
             
 
            <div class="buttons">
 
              ${h.submit('update','update',class_="ui-button ui-widget ui-state-default ui-corner-all")}
 
            </div>                                                          
 
        </div>
 
    </div>    
 
    ${h.end_form()}
 
        <script type="text/javascript">
 
        	YAHOO.util.Event.onDOMReady(function(){
 
				var D = YAHOO.util.Dom;
 
				YAHOO.util.Event.addListener('add_perm','click',function(){
 
					D.setStyle('add_perm_input','display','');
 
					D.setStyle('add_perm','opacity','0.6');
 
					D.setStyle('add_perm','cursor','default');
 
				});
 
            YAHOO.util.Event.onDOMReady(function(){
 
                var D = YAHOO.util.Dom;
 
                YAHOO.util.Event.addListener('add_perm','click',function(){
 
                    D.setStyle('add_perm_input','display','');
 
                    D.setStyle('add_perm','opacity','0.6');
 
                    D.setStyle('add_perm','cursor','default');
 
                });
 
            });
 
        </script>
 
		<script type="text/javascript">    
 
		YAHOO.example.FnMultipleFields = function(){
 
		    var myContacts = ${c.users_array|n}
 
		    
 
		    // Define a custom search function for the DataSource
 
		    var matchNames = function(sQuery) {
 
		        // Case insensitive matching
 
		        var query = sQuery.toLowerCase(),
 
		            contact,
 
		            i=0,
 
		            l=myContacts.length,
 
		            matches = [];
 
		        
 
		        // Match against each name of each contact
 
		        for(; i<l; i++) {
 
		            contact = myContacts[i];
 
		            if((contact.fname.toLowerCase().indexOf(query) > -1) ||
 
		                (contact.lname.toLowerCase().indexOf(query) > -1) ||
 
		                (contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) {
 
		                matches[matches.length] = contact;
 
		            }
 
		        }
 
		
 
		        return matches;
 
		    };
 
		
 
		    // Use a FunctionDataSource
 
		    var oDS = new YAHOO.util.FunctionDataSource(matchNames);
 
		    oDS.responseSchema = {
 
		        fields: ["id", "fname", "lname", "nname"]
 
		    }
 
		
 
		    // Instantiate AutoComplete for perms
 
		    var oAC_perms = new YAHOO.widget.AutoComplete("perm_new_user_name", "perm_container", oDS);
 
		    oAC_perms.useShadow = false;
 
		    oAC_perms.resultTypeList = false;
 
		    
 
		    // Instantiate AutoComplete for owner
 
		 	var oAC_owner = new YAHOO.widget.AutoComplete("user", "owner_container", oDS);
 
		 	oAC_owner.useShadow = false;
 
		 	oAC_owner.resultTypeList = false;
 
		    
 
		    
 
		    // Custom formatter to highlight the matching letters
 
		    var custom_formatter = function(oResultData, sQuery, sResultMatch) {
 
		        var query = sQuery.toLowerCase(),
 
		            fname = oResultData.fname,
 
		            lname = oResultData.lname,
 
		            nname = oResultData.nname || "", // Guard against null value
 
		            query = sQuery.toLowerCase(),
 
		            fnameMatchIndex = fname.toLowerCase().indexOf(query),
 
		            lnameMatchIndex = lname.toLowerCase().indexOf(query),
 
		            nnameMatchIndex = nname.toLowerCase().indexOf(query),
 
		            displayfname, displaylname, displaynname;
 
		            
 
		        if(fnameMatchIndex > -1) {
 
		            displayfname = highlightMatch(fname, query, fnameMatchIndex);
 
		        }
 
		        else {
 
		            displayfname = fname;
 
		        }
 
		
 
		        if(lnameMatchIndex > -1) {
 
		            displaylname = highlightMatch(lname, query, lnameMatchIndex);
 
		        }
 
		        else {
 
		            displaylname = lname;
 
		        }
 
		
 
		        if(nnameMatchIndex > -1) {
 
		            displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")";
 
		        }
 
		        else {
 
		            displaynname = nname ? "(" + nname + ")" : "";
 
		        }
 
		
 
		        return displayfname + " " + displaylname + " " + displaynname;
 
		        
 
		    };
 
		    oAC_perms.formatResult = custom_formatter; 
 
		    oAC_owner.formatResult = custom_formatter;
 
		    			    
 
		    // Helper function for the formatter
 
		    var highlightMatch = function(full, snippet, matchindex) {
 
		        return full.substring(0, matchindex) + 
 
		                "<span class='match'>" + 
 
		                full.substr(matchindex, snippet.length) + 
 
		                "</span>" +
 
		                full.substring(matchindex + snippet.length);
 
		    };
 
		
 
		    var myHandler = function(sType, aArgs) {
 
		        var myAC = aArgs[0]; // reference back to the AC instance
 
		        var elLI = aArgs[1]; // reference to the selected LI element
 
		        var oData = aArgs[2]; // object literal of selected item's result data
 
		        myAC.getInputEl().value = oData.nname;
 
		    };
 
        <script type="text/javascript">    
 
        YAHOO.example.FnMultipleFields = function(){
 
            var myContacts = ${c.users_array|n}
 
            
 
            // Define a custom search function for the DataSource
 
            var matchNames = function(sQuery) {
 
                // Case insensitive matching
 
                var query = sQuery.toLowerCase(),
 
                    contact,
 
                    i=0,
 
                    l=myContacts.length,
 
                    matches = [];
 
                
 
                // Match against each name of each contact
 
                for(; i<l; i++) {
 
                    contact = myContacts[i];
 
                    if((contact.fname.toLowerCase().indexOf(query) > -1) ||
 
                        (contact.lname.toLowerCase().indexOf(query) > -1) ||
 
                        (contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) {
 
                        matches[matches.length] = contact;
 
                    }
 
                }
 
        
 
                return matches;
 
            };
 
        
 
            // Use a FunctionDataSource
 
            var oDS = new YAHOO.util.FunctionDataSource(matchNames);
 
            oDS.responseSchema = {
 
                fields: ["id", "fname", "lname", "nname"]
 
            }
 
        
 
            // Instantiate AutoComplete for perms
 
            var oAC_perms = new YAHOO.widget.AutoComplete("perm_new_user_name", "perm_container", oDS);
 
            oAC_perms.useShadow = false;
 
            oAC_perms.resultTypeList = false;
 
            
 
            // Instantiate AutoComplete for owner
 
            var oAC_owner = new YAHOO.widget.AutoComplete("user", "owner_container", oDS);
 
            oAC_owner.useShadow = false;
 
            oAC_owner.resultTypeList = false;
 
            
 
            
 
            // Custom formatter to highlight the matching letters
 
            var custom_formatter = function(oResultData, sQuery, sResultMatch) {
 
                var query = sQuery.toLowerCase(),
 
                    fname = oResultData.fname,
 
                    lname = oResultData.lname,
 
                    nname = oResultData.nname || "", // Guard against null value
 
                    query = sQuery.toLowerCase(),
 
                    fnameMatchIndex = fname.toLowerCase().indexOf(query),
 
                    lnameMatchIndex = lname.toLowerCase().indexOf(query),
 
                    nnameMatchIndex = nname.toLowerCase().indexOf(query),
 
                    displayfname, displaylname, displaynname;
 
                    
 
                if(fnameMatchIndex > -1) {
 
                    displayfname = highlightMatch(fname, query, fnameMatchIndex);
 
                }
 
                else {
 
                    displayfname = fname;
 
                }
 
        
 
                if(lnameMatchIndex > -1) {
 
                    displaylname = highlightMatch(lname, query, lnameMatchIndex);
 
                }
 
                else {
 
                    displaylname = lname;
 
                }
 
        
 
                if(nnameMatchIndex > -1) {
 
                    displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")";
 
                }
 
                else {
 
                    displaynname = nname ? "(" + nname + ")" : "";
 
                }
 
        
 
                return displayfname + " " + displaylname + " " + displaynname;
 
                
 
            };
 
            oAC_perms.formatResult = custom_formatter; 
 
            oAC_owner.formatResult = custom_formatter;
 
                            
 
            // Helper function for the formatter
 
            var highlightMatch = function(full, snippet, matchindex) {
 
                return full.substring(0, matchindex) + 
 
                        "<span class='match'>" + 
 
                        full.substr(matchindex, snippet.length) + 
 
                        "</span>" +
 
                        full.substring(matchindex + snippet.length);
 
            };
 
        
 
            var myHandler = function(sType, aArgs) {
 
                var myAC = aArgs[0]; // reference back to the AC instance
 
                var elLI = aArgs[1]; // reference to the selected LI element
 
                var oData = aArgs[2]; // object literal of selected item's result data
 
                myAC.getInputEl().value = oData.nname;
 
            };
 

	
 
		    oAC_perms.itemSelectEvent.subscribe(myHandler);
 
		    oAC_owner.itemSelectEvent.subscribe(myHandler);
 
		    
 
		    return {
 
		        oDS: oDS,
 
		        oAC_perms: oAC_perms,
 
		        oAC_owner: oAC_owner, 
 
		    };
 
		}();
 
		    
 
		</script>        
 
    </div>
 
</%def>   
 
            oAC_perms.itemSelectEvent.subscribe(myHandler);
 
            //oAC_owner.itemSelectEvent.subscribe(myHandler);
 
            
 
            return {
 
                oDS: oDS,
 
                oAC_perms: oAC_perms,
 
                oAC_owner: oAC_owner, 
 
            };
 
        }();
 
            
 
        </script>      
 
</div>
 
</%def> 
 
       
 
   
pylons_app/templates/shortlog/shortlog.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Repository managment')}
 
    ${_('Shortlog')}
 
</%def>
 
<%def name="breadcrumbs()">
 

	
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(u'Home',h.url('/'))}
 
    / 
 
    ${h.link_to(c.repo_name,h.url('shortlog_home',repo_name=c.repo_name))}
 
    /
 
    &raquo; 
 
    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
 
    &raquo;
 
    ${_('shortlog')}
 
</%def>
 

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

	
 
    <h2 class="no-link no-border">${_('Shortlog')}</h2>
 

	
 
	<div id="shortlog_data">
 
		${c.shortlog_data}
 
	</div>
 
</%def>    
 
\ No newline at end of file
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
    </div>
 
    <!-- end box / title -->
 
    <div class="table">
 
	    <div id="shortlog_data">
 
	        ${c.shortlog_data}
 
	    </div>
 
    </div>
 
</div>    
 
</%def>
 
\ No newline at end of file
pylons_app/templates/shortlog/shortlog_data.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
% if c.repo_changesets:
 

	
 
<table class="table_disp">
 
	<tr class="header">
 
		<td>${_('date')}</td>
 
		<td>${_('author')}</td>
 
		<td>${_('revision')}</td>
 
		<td>${_('commit message')}</td>
 
		<td>${_('branch')}</td>
 
		<td>${_('tags')}</td>
 
		<td>${_('links')}</td>
 
<table>
 
	<tr>
 
		<th class="left">${_('date')}</th>
 
		<th class="left">${_('author')}</th>
 
		<th class="left">${_('revision')}</th>
 
		<th class="left">${_('commit message')}</th>
 
		<th class="left">${_('branch')}</th>
 
		<th class="left">${_('tags')}</th>
 
		<th class="left">${_('links')}</th>
 
		
 
	</tr>
 
%for cnt,cs in enumerate(c.repo_changesets):
 
	<tr class="parity${cnt%2}">
 
		<td>${h.age(cs._ctx.date())}</td>
 
		<td title="${cs.author}">${h.person(cs.author)}</td>
 
		<td>r${cs.revision}:${cs.raw_id}</td>
 
		<td>
 
			${h.link_to(h.truncate(cs.message,60),
 
			h.url('changeset_home',repo_name=c.repo_name,revision=cs._short),
 
			title=cs.message)}
 
		</td>
 
@@ -34,31 +33,31 @@
 
				%endfor
 
			</span>
 
		</td>
 
		<td class="nowrap">
 
		${h.link_to(_('changeset'),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}
 
		|
 
		${h.link_to(_('files'),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
 
		</td>
 
	</tr>	
 
%endfor
 

	
 
</table>
 
	<div>
 
		<script type="text/javascript">
 
		var data_div = 'shortlog_data';
 
		YAHOO.util.Event.onDOMReady(function(){
 
			YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){
 
					YAHOO.util.Dom.setStyle('shortlog_data','opacity','0.3');});});
 
		</script>	
 
		<h2>
 
		${c.repo_changesets.pager('$link_previous ~2~ $link_next',
 
		onclick="""YAHOO.util.Connect.asyncRequest('GET','$partial_url',{
 
		success:function(o){YAHOO.util.Dom.get(data_div).innerHTML=o.responseText;
 
		YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){
 
				YAHOO.util.Dom.setStyle(data_div,'opacity','0.3');});		
 
		YAHOO.util.Dom.setStyle(data_div,'opacity','1');}},null); return false;""")}
 
		</h2>
 
	</div>	
 

	
 
<script type="text/javascript">
 
  var data_div = 'shortlog_data';
 
  YAHOO.util.Event.onDOMReady(function(){
 
    YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){
 
            YAHOO.util.Dom.setStyle('shortlog_data','opacity','0.3');});});
 
</script>
 

	
 
<div class="pagination-wh pagination-left">
 
${c.repo_changesets.pager('$link_previous ~2~ $link_next',     
 
onclick="""YAHOO.util.Connect.asyncRequest('GET','$partial_url',{
 
success:function(o){YAHOO.util.Dom.get(data_div).innerHTML=o.responseText;
 
YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){
 
        YAHOO.util.Dom.setStyle(data_div,'opacity','0.3');});       
 
YAHOO.util.Dom.setStyle(data_div,'opacity','1');}},null); return false;""")}
 
</div>
 
%else:
 
	${_('There are no commits yet')}
 
%endif
 
\ No newline at end of file
 
    ${_('There are no commits yet')}
 
%endif
pylons_app/templates/summary/summary.html
Show inline comments
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Repository managment')}
 
    ${_('Mercurial Repository Overview')}
 
</%def>
 
<%def name="breadcrumbs()">
 

	
 

	
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(u'Home',h.url('/'))}
 
    / 
 
    &raquo; 
 
    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
 
    /
 
    &raquo;
 
    ${_('summary')}
 
</%def>
 

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

	
 
<%def name="js()">
 
<script type="text/javascript" src="/js/yui/utilities/utilities.js"></script>
 
<%def name="main()">
 
<script type="text/javascript">
 
var E = YAHOO.util.Event;
 
var D = YAHOO.util.Dom;
 

	
 
E.onDOMReady(function(e){
 
    id = 'clone_url';
 
	E.addListener(id,'click',function(e){
 
	    D.get('clone_url').select();
 
	})
 
    E.addListener(id,'click',function(e){
 
        D.get('clone_url').select();
 
    })
 
})
 
</script>
 
</%def>
 
<div class="box box-left">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
    </div>
 
    <!-- end box / title -->
 
	<div class="form">
 
	  <div class="fields">
 
		 
 
			 <div class="field">
 
			  <div class="label">
 
			      <label>${_('Name')}:</label>
 
			  </div>
 
			  <div class="input-short">
 
			      ${c.repo_info.name}
 
			  </div>
 
			 </div>
 
			
 
			
 
			 <div class="field">
 
			  <div class="label">
 
			      <label>${_('Description')}:</label>
 
			  </div>
 
			  <div class="input-short">
 
			      ${c.repo_info.description}
 
			  </div>
 
			 </div>
 
			
 
			
 
			 <div class="field">
 
			  <div class="label">
 
			      <label>${_('Contact')}:</label>
 
			  </div>
 
			  <div class="input-short">
 
			      ${c.repo_info.contact}
 
			  </div>
 
			 </div>
 
			
 
			 <div class="field">
 
			  <div class="label">
 
			      <label>${_('Last change')}:</label>
 
			  </div>
 
			  <div class="input-short">
 
			      ${h.age(c.repo_info.last_change)} - ${h.rfc822date(c.repo_info.last_change)}
 
			  </div>
 
			 </div>
 
			
 
			 <div class="field">
 
			  <div class="label">
 
			      <label>${_('Clone url')}:</label>
 
			  </div>
 
			  <div class="input-short">
 
			      <input type="text" id="clone_url"  readonly="readonly" value="hg clone ${c.clone_repo_url}" size="70"/>
 
			  </div>
 
			 </div>
 
			
 
			 <div class="field">
 
			  <div class="label">
 
			      <label>${_('Download')}:</label>
 
			  </div>
 
			  <div class="input-short">
 
		        %for cnt,archive in enumerate(c.repo_info._get_archives()):
 
		             %if cnt >=1:
 
		             |
 
		             %endif
 
		             ${h.link_to(c.repo_info.name+'.'+archive['type'],
 
		                h.url('files_archive_home',repo_name=c.repo_info.name,
 
		                revision='tip',fileformat=archive['extension']),class_="archive_icon")}
 
		        %endfor
 
			  </div>
 
			 </div>
 
			 
 
			 <div class="field">
 
			  <div class="label">
 
			      <label>${_('Feeds')}:</label>
 
			  </div>
 
			  <div class="input-short">
 
	            ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.repo_info.name),class_='rss_icon')}
 
	            ${h.link_to(_('Atom'),h.url('atom_feed_home',repo_name=c.repo_info.name),class_='atom_icon')}
 
			  </div>
 
			 </div>				 			 			 
 
	  </div>		 
 
	</div>				
 
</div>
 
        
 
<div class="box box-right">
 
    <!-- box / title -->
 
    <div class="title">
 
        <h5>${_('Last month commit activity')}</h5>
 
    </div>
 
    
 
    <div class="table">
 
        <div id="commit_history" style="width:600px;height:370px;float:left"></div>
 
    	<div id="legend_data">
 
	    	<div id="legend_container"></div>
 
	    	<div id="legend_choices">
 
				<table id="legend_choices_tables" style="font-size:smaller;color:#545454">
 
				
 
				</table>
 
	    	</div>
 
    	</div>
 
		<script type="text/javascript">
 
		
 
		(function () {
 
			var datasets = {${c.commit_data|n}};
 
			var i = 0;
 
		    var choiceContainer = YAHOO.util.Dom.get("legend_choices");
 
		    var choiceContainerTable = YAHOO.util.Dom.get("legend_choices_tables");
 
		    for(var key in datasets) {
 
		        datasets[key].color = i;
 
		        i++;
 
		        choiceContainerTable.innerHTML += '<tr>'+
 
		        									'<td>'+
 
		        									'<input type="checkbox" name="' + key +'" checked="checked" />'+datasets[key].label+
 
		        									'</td>'+
 
		        								  '</tr>';
 
		    };
 
		    
 

	
 
<%def name="main()">
 
    <h2 class="no-link no-border">${_('Mercurial Repository Overview')}</h2>
 
    <dl class="overview">
 
        <dt>${_('name')}</dt>
 
        <dd>${c.repo_info.name}</dd>
 
        <dt>${_('description')}</dt>
 
        <dd>${c.repo_info.description}</dd>
 
        <dt>${_('contact')}</dt>
 
        <dd>${c.repo_info.contact}</dd>
 
        <dt>${_('last change')}</dt>
 
        <dd>${h.age(c.repo_info.last_change)} - ${h.rfc822date(c.repo_info.last_change)}</dd>
 
        <dt>${_('clone url')}</dt>
 
        <dd><input type="text" id="clone_url"  readonly="readonly" value="hg clone ${c.clone_repo_url}" size="70"/></dd>
 
        <dt>${_('download')}</dt>
 
        <dd>
 
       	%for cnt,archive in enumerate(c.repo_info._get_archives()):
 
       		 %if cnt >=1:
 
       		 |
 
       		 %endif
 
       		 ${h.link_to(c.repo_info.name+'.'+archive['type'],
 
       			h.url('files_archive_home',repo_name=c.repo_info.name,
 
       			revision='tip',fileformat=archive['extension']),class_="archive_logo")}
 
		%endfor
 
        </dd>
 
        <dt>${_('feeds')}</dt>
 
        <dd>
 
        	${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.repo_info.name),class_='rss_logo')}
 
			${h.link_to(_('Atom'),h.url('atom_feed_home',repo_name=c.repo_info.name),class_='atom_logo')}
 
        </dd>
 
    </dl>
 
		    function plotAccordingToChoices() {
 
		        var data = [];
 

	
 
		        var inputs = choiceContainer.getElementsByTagName("input");
 
		        for(var i=0; i<inputs.length; i++) {
 
		            if(!inputs[i].checked)
 
		                continue;
 

	
 
		            var key = inputs[i].name;
 
		            if (key && datasets[key])
 
		                data.push(datasets[key]);
 
		        };
 

	
 
		        if (data.length > 0){
 
				    var plot = YAHOO.widget.Flot("commit_history", data,
 
					        { bars: { show: true, align:'left' },
 
			    			  points: { show: true, radius:0,fill:true },
 
			    			  legend:{show:true, container:"legend_container"},
 
			    	          selection: { mode: "xy" },
 
			    	          yaxis:{tickSize:[1]},
 
				              xaxis: { mode: "time", timeformat: "%d",tickSize:[1, "day"],min:${c.ts_min},max:${c.ts_max} }, 
 
				              grid: { hoverable: true, clickable: true,autoHighlight:true },
 
					        });
 
		        
 
				    function showTooltip(x, y, contents) {
 
				        var div=document.getElementById('tooltip');
 
				        if(!div) {
 
				            div = document.createElement('div');
 
				            div.id="tooltip";
 
				            div.style.position="absolute";
 
				            div.style.border='1px solid #fdd';
 
				            div.style.padding='2px';
 
				            div.style.backgroundColor='#fee';
 
				            document.body.appendChild(div);
 
				        }
 
				        YAHOO.util.Dom.setStyle(div, 'opacity', 0);
 
				        div.innerHTML = contents;
 
				        div.style.top=(y + 5) + "px";
 
				        div.style.left=(x + 5) + "px";
 
		
 
				        var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
 
				        anim.animate();
 
				    }
 

	
 
    <h2>${h.link_to(_('Last ten changes'),h.url('changelog_home',repo_name=c.repo_name))}</h2>
 
	<%include file='../shortlog/shortlog_data.html'/>
 
			        var previousPoint = null;
 
			        plot.subscribe("plothover", function (o) {
 
				        var pos = o.pos;
 
				        var item = o.item;
 
				        
 
				        //YAHOO.util.Dom.get("x").innerHTML = pos.x.toFixed(2);
 
				        //YAHOO.util.Dom.get("y").innerHTML = pos.y.toFixed(2);
 
		                if (item) {
 
		                    if (previousPoint != item.datapoint) {
 
		                        previousPoint = item.datapoint;
 
		                        
 
		                        var tooltip = YAHOO.util.Dom.get("tooltip");
 
		                        if(tooltip) {
 
		                        	  tooltip.parentNode.removeChild(tooltip);
 
		                        }
 
		                        var x = item.datapoint.x.toFixed(2);
 
		                        var y = item.datapoint.y.toFixed(2);
 

	
 
		                        if (!item.series.label){
 
		                            item.series.label = 'commits';
 
			                    }
 
		                        var d = new Date(x*1000);
 
		                        var fd = d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate();
 
		                        var nr_commits = parseInt(y);
 
		                        showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd + ": " + nr_commits+" commits");
 
		                    }
 
		                }
 
		                else {
 
		                	  var tooltip = YAHOO.util.Dom.get("tooltip");
 
		                	  
 
					          if(tooltip) {
 
					                tooltip.parentNode.removeChild(tooltip);
 
					          }
 
		                    previousPoint = null;
 
		                }
 
			        });
 

	
 
    <h2>${h.link_to(_('Last ten tags'),h.url('tags_home',repo_name=c.repo_name))}</h2>
 
	<%include file='../tags/tags_data.html'/>
 
    
 
    <h2>${h.link_to(_('Last ten branches'),h.url('branches_home',repo_name=c.repo_name))}</h2>
 
	<%include file='../branches/branches_data.html'/>
 
			    }
 
		    }
 

	
 
		    YAHOO.util.Event.on(choiceContainer.getElementsByTagName("input"), "click", plotAccordingToChoices);
 

	
 
		    plotAccordingToChoices();
 
		    })();
 
         </script>
 

	
 
    </div>
 
</div>    
 

	
 
<div class="box">    
 
    <div class="title">
 
        <div class="breadcrumbs">${h.link_to(_('Last ten changes'),h.url('changelog_home',repo_name=c.repo_name))}</div>
 
    </div>    
 
    <div class="table">
 
        <%include file='../shortlog/shortlog_data.html'/>
 
    </div>
 
</div>
 
<div class="box">    
 
    <div class="title">
 
        <div class="breadcrumbs">${h.link_to(_('Last ten tags'),h.url('tags_home',repo_name=c.repo_name))}</div>
 
    </div>    
 
    <div class="table">
 
        <%include file='../tags/tags_data.html'/>
 
    </div>
 
</div>
 
<div class="box">
 
    <div class="title">
 
        <div class="breadcrumbs">${h.link_to(_('Last ten branches'),h.url('branches_home',repo_name=c.repo_name))}</div>
 
    </div>    
 
    <div class="table">
 
        <%include file='../branches/branches_data.html'/>
 
    </div>      
 
</div> 
 

	
 
</%def>    
 
\ No newline at end of file
pylons_app/templates/tags/tags.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
    ${_('Tags')}
 
    ${_('Administration')}
 
</%def>
 
<%def name="breadcrumbs()">
 

	
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(u'Home',h.url('/'))}
 
    / 
 
    &raquo; 
 
    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
 
    /
 
    &raquo;
 
    ${_('tags')}
 
</%def>
 

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

	
 
    <h2 class="no-link no-border">${_('Tags')}</h2>
 
	<%include file='tags_data.html'/>
 

	
 
</%def>    
 
\ No newline at end of file
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
    </div>
 
    <!-- end box / title -->
 
    <div class="table">
 
        <%include file='tags_data.html'/>
 
    </div>
 
</div>    
 
</%def> 
 
\ No newline at end of file
pylons_app/templates/tags/tags_data.html
Show inline comments
 
%if c.repo_tags:    
 
    <table class="table_disp">
 
    	<tr class="header">
 
			<td>${_('date')}</td>
 
			<td>${_('revision')}</td>
 
			<td>${_('name')}</td>
 
			<td>${_('links')}</td>
 
    <table>
 
    	<tr>
 
			<th class="left">${_('date')}</th>
 
			<th class="left">${_('revision')}</th>
 
			<th class="left">${_('name')}</th>
 
			<th class="left">${_('links')}</th>
 
    	</tr>
 
		%for cnt,tag in enumerate(c.repo_tags.items()):
 
		<tr class="parity${cnt%2}">
 
			<td>${h.age(tag[1]._ctx.date())}</td>
 
			<td>r${tag[1].revision}:${tag[1].raw_id}</td>
 
			<td>
 
				<span class="logtags">
 
					<span class="tagtag">${h.link_to(tag[0],
 
					h.url('changeset_home',repo_name=c.repo_name,revision=tag[1].raw_id))}</span>
 
				</span>
 
			</td>
 
			<td class="nowrap">
0 comments (0 inline, 0 general)