Changeset - 757c7eef0dcd
[Not reviewed]
default
0 3 0
Marcin Kuzminski - 16 years ago 2010-08-08 13:05:56
marcin@python-works.com
implemented gravatars into main bar.
Readme update
3 files changed with 33 insertions and 10 deletions:
0 comments (0 inline, 0 general)
README.rst
Show inline comments
 
-------------------------------------
 
Pylons based replacement for hgwebdir
 
-------------------------------------
 

	
 
Fully customizable, with authentication, permissions. Based on vcs library.
 

	
 
**Overview**
 

	
 
- has it's own middleware to handle mercurial protocol request each request can 
 
  be logged and authenticated + threaded performance unlikely to hgweb
 
- full permissions per project read/write/admin access even on mercurial request
 
- mako templates let's you cusmotize look and feel of application.
 
- diffs annotations and source code all colored by pygments.
 
- mercurial branch graph and yui-flot powered graphs
 
- admin interface for performing user/permission managments as well as repository
 
  managment. 
 
- Additionall settings for mercurial web, (hooks editable from admin
 
  panel !) also paths,archive,remote messages  
 
- Additional settings for mercurial web, (hooks editable from admin
 
  panel !) also manage paths, archive, remote messages  
 
- backup scripts can do backup of whole app and send it over scp to desired location
 
- setup project descriptions and info inside built in db for easy, non 
 
  file-system operations
 
- added cache with invalidation on push/repo managment for high performance and
 
  always upto date data. 
 
- rss /atom feed customizable
 
- rss / atom feeds, gravatar support
 
- based on pylons 1.0 / sqlalchemy 0.6
 

	
 
**Incoming**
 

	
 
- code review based on hg-review (when it's stable)
 
- git support (when vcs can handle it)
 
- full text search of source codes with indexing daemons using whoosh
 
  (no external search servers required all in one application)
 
- manage hg ui() per repo, add hooks settings, per repo, and not globally
 
- other cools stuff that i can figure out
 
- full text search of source codes
 
- manage hg ui() per repo, add hooks settings, per repo, and not globally
 

	
 
.. note::
 
   This software is still in beta mode. 
 
   I don't guarantee that it'll work correctly.
 
   
 

	
 
-------------
 
Installation
 
-------------
 
.. note::
 
   I recomend to install tip version of vcs while the app is in beta mode.
 
   
 
   
 
- create new virtualenv and activate it - highly recommend that you use separate
 
  virtual-env for whole application
 
- download hg app from default (not demo) branch from bitbucket and run 
 
  'python setup.py install' this will install all required dependencies needed
 
- run paster setup-app production.ini it should create all needed tables 
 
  and an admin account. 
 
- remember that the given path for mercurial repositories must be write 
 
  accessible for the application
 
- run paster serve development.ini - or you can use manage-hg_app script.
 
  the app should be available at the 127.0.0.1:5000
 
- use admin account you created to login.
 
- default permissions on each repository is read, and owner is admin. So remember
 
  to update those.
 
  to update these.
 
     
 
\ No newline at end of file
pylons_app/public/css/style.css
Show inline comments
 
/* -----------------------------------------------------------
 
	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;	
 
}
 
	border-left: none;
 
	margin:-6px;	
 
}
 
#header ul#logged-user li.first div.account
 
{
 
	padding-top: 4px;
 
	float: left;
 
}
 
 
 
#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;
 
}
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"/>
 
    <!-- 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('admin_settings_my_account'))}
 
	            <div class="gravatar">
 
	            	<img alt="gravatar" src="${h.gravatar_url(c.hg_app_user.email,24)}" />
 
	            </div>
 
	            <div class="account">
 
	            	${h.link_to('%s %s'%(c.hg_app_user.name,c.hg_app_user.lastname),h.url('admin_settings_my_account'))}<br/>
 
	            	${h.link_to(c.hg_app_user.username,h.url('admin_settings_my_account'))}
 
	            </div>	
 
            </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 -->
 

	
 
	<!-- 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>
 

	
 
</html>
 

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

	
 
<%def name="menu(current=None)">
 
		<% 
 
		def is_current(selected):
 
			if selected == current:
 
				return "class='current'"
 
		%>
 
		%if current not in ['home','admin']:
 
           <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.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='__REPO__')}".replace('__REPO__',wa);
 
                    window.location = url;
 
                })
 
               });
 
            </script>
 
            		
 
		   ##REGULAR MENU            
 
	        <ul id="quick">
 
				<!-- repo switcher -->
 
				<li>
 
					<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;">
 
						<select id="repos_list" size="10">
 
						%for repo in c.repo_switcher_list:
 
							<option value="${repo}">${repo}</option>
 
						%endfor
 
						</select>
 
					</div>			
 
				</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')}>
 
                   <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 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>
 

	
 
                
 
                <li>
 
                    <a title="${_('Search')}"  href="${h.url('search')}">
 
                    <span class="icon">
 
                        <img src="/images/icons/search_16.png" alt="${_('Search')}" />
 
                    </span>
 
                    <span>${_('Search')}</span>                 
 
                    </a>        
 
                </li>
 
                
 
				%if h.HasPermissionAll('hg.admin')('access admin main page'):
 
                <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
 
				
 
			</ul>
 
		%endif    
 
</%def>
 

	
 

	
 
<%def name="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>
 

	
 
<%def name="breadcrumbs()">
 
    <div class="breadcrumbs">
 
    ${self.breadcrumbs_links()}
 
    </div>
 
</%def>
 
\ No newline at end of file
0 comments (0 inline, 0 general)