Mercurial > kallithea
changeset 3543:6af65ba41115 beta
merge with UI branch
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 18 Mar 2013 18:17:58 +0100 |
parents | af96fb19b53a (current diff) fc79b3d5beb7 (diff) |
children | c0a157ab9a15 |
files | |
diffstat | 24 files changed, 1152 insertions(+), 845 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/controllers/summary.py Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/controllers/summary.py Mon Mar 18 18:17:58 2013 +0100 @@ -72,8 +72,6 @@ def index(self, repo_name): c.dbrepo = dbrepo = c.rhodecode_db_repo - c.following = self.scm_model.is_following_repo(repo_name, - self.rhodecode_user.user_id) def url_generator(**kw): return url('shortlog_home', repo_name=repo_name, size=10, **kw)
--- a/rhodecode/lib/base.py Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/lib/base.py Mon Mar 18 18:17:58 2013 +0100 @@ -313,6 +313,8 @@ c.rhodecode_db_repo: instance of db c.repository_followers: number of followers c.repository_forks: number of forks + c.repository_following: weather the current user is following the current repo + """ def __before__(self): @@ -333,3 +335,5 @@ c.repository_followers = self.scm_model.get_followers(dbr) c.repository_forks = self.scm_model.get_forks(dbr) c.repository_pull_requests = self.scm_model.get_pull_requests(dbr) + c.repository_following = self.scm_model.is_following_repo(c.repo_name, + self.rhodecode_user.user_id)
--- a/rhodecode/lib/helpers.py Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/lib/helpers.py Mon Mar 18 18:17:58 2013 +0100 @@ -363,7 +363,7 @@ from rhodecode.lib.utils2 import credentials_filter, age as _age from rhodecode.model.db import User, ChangesetStatus -age = lambda x: _age(x) +age = lambda x,y=False: _age(x,y) capitalize = lambda x: x.capitalize() email = author_email short_id = lambda x: x[:12] @@ -914,13 +914,13 @@ if not groups: if last_url: - return last_link - return repo_name + return literal('<span>%s</span>' % last_link) + return literal('<span>%s</span>' % repo_name) else: def make_link(group): return link_to(group.name, url('repos_group_home', group_name=group.group_name)) - return literal(' » '.join(map(make_link, groups) + [last_link])) + return literal(' » '.join(map(make_link, groups) + ['<span>' + last_link + '</span>'])) def fancy_file_stats(stats):
--- a/rhodecode/lib/utils2.py Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/lib/utils2.py Mon Mar 18 18:17:58 2013 +0100 @@ -349,11 +349,15 @@ return engine -def age(prevdate): +def age(prevdate, show_short_version=False): """ turns a datetime into an age string. + If show_short_version is True, then it will generate a not so accurate but shorter string, + example: 2days ago, instead of 2 days and 23 hours ago. + :param prevdate: datetime object + :param show_short_version: if it should aproximate the date and return a shorter string :rtype: unicode :returns: unicode words describing age """ @@ -423,7 +427,7 @@ else: sub_value = 0 - if sub_value == 0: + if sub_value == 0 or show_short_version: if future: return _(u'in %s') % fmt_funcs[part](value) else:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/public/css/contextbar.css Mon Mar 18 18:17:58 2013 +0100 @@ -0,0 +1,367 @@ +/** + * Stylesheets for the context bar + */ + +#quick .repo_switcher { background-image: url("../images/icons/database.png"); } +#quick .journal { background-image: url("../images/icons/book.png"); } +#quick .search { background-image: url("../images/icons/search_16.png"); } +#quick .admin { background-image: url("../images/icons/cog_edit.png"); } + +#context-bar button.follow { background-image: url("../images/icons/heart.png"); } +#context-bar button.following { background-image: url("../images/icons/heart_delete.png"); } +#context-bar a.fork { background-image: url("../images/icons/arrow_divide.png"); } +#context-bar a.summary { background-image: url("../images/icons/clipboard_16.png"); } +#context-bar a.changelogs { background-image: url("../images/icons/time.png"); } +#context-bar a.files { background-image: url("../images/icons/file.png"); } +#context-bar a.switch-to { background-image: url("../images/icons/arrow_switch.png"); } +#context-bar a.options { background-image: url("../images/icons/table_gear.png"); } +#context-bar a.pull-request { background-image: url("../images/icons/arrow_join.png"); } +#context-bar a.branches { background-image: url("../images/icons/arrow_branch.png"); } +#context-bar a.tags { background-image: url("../images/icons/tag_blue.png"); } +#context-bar a.bookmarks { background-image: url("../images/icons/tag_green.png"); } +#context-bar a.settings { background-image: url("../images/icons/cog.png"); } +#context-bar a.shortlog { background-image: url("../images/icons/time.png"); } +#context-bar a.search { background-image: url("../images/icons/search_16.png"); } +#context-bar a.admin { background-image: url("../images/icons/cog_edit.png"); } + +#context-bar a.journal { background-image: url("../images/icons/book.png"); } +#context-bar a.repos { background-image: url("../images/icons/database_edit.png"); } +#context-bar a.repos_groups { background-image: url("../images/icons/database_link.png"); } +#context-bar a.users { background-image: url("../images/icons/user_edit.png"); } +#context-bar a.groups { background-image: url("../images/icons/group_edit.png"); } +#context-bar a.permissions { background-image: url("../images/icons/key.png"); } +#context-bar a.ldap { background-image: url("../images/icons/server_key.png"); } +#context-bar a.defaults { background-image: url("../images/icons/wrench.png"); } +#context-bar a.settings { background-image: url("../images/icons/cog_edit.png"); } +#context-bar a.compare_request { background-image: url('../images/icons/arrow_inout.png')} +#context-bar a.locking_del { background-image: url('../images/icons/lock_delete.png')} +#context-bar a.locking_add { background-image: url('../images/icons/lock_add.png')} + +#content #context-bar { + position: relative; + background-color: #003B76 !important; + padding: 0px; + overflow: visible; +} + +#header #header-inner #quick a, +#content #context-bar, +#content #context-bar a, +#content #context-bar button { + color: #FFFFFF; +} + +#header #header-inner #quick a:hover, +#content #context-bar a:hover, +#content #context-bar button:hover { + text-decoration: none; +} + +#content #context-bar .icon { + display: inline-block; + width: 16px; + height: 16px; + vertical-align: text-bottom; +} + +ul.horizontal-list { + display: block; +} + +ul.horizontal-list > li { + float: left; + position: relative; +} + +#header #header-inner #quick ul, +ul.horizontal-list > li ul { + position: absolute; + display: none; + right: 0; + z-index: 999; +} + +#header #header-inner #quick li:hover > ul, +ul.horizontal-list li:hover > ul { + display: block; +} + +#header #header-inner #quick li ul li, +ul.horizontal-list ul li { + position: relative; + border-bottom: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid rgba(255,255,255,0.1); +} + +ul.horizontal-list > li ul ul { + position: absolute; + right: 100%; + top: -1px; + min-width: 200px; + max-height: 400px; + overflow-x: hidden; + overflow-y: auto; +} + +#header #header-inner #quick ul a, +ul.horizontal-list li a { + white-space: nowrap; +} + +#breadcrumbs { + float: left; + padding: 5px 0; + padding-left: 5px; + font-weight: bold; + font-size: 14px; +} + +#breadcrumbs span { + font-weight: bold; + font-size: 2em; +} + +#context-top { + position: relative; + overflow: hidden; + border-bottom: 1px solid #003162; + padding: 5px; +} + +#header #header-inner #quick ul, +#revision-changer, +#context-pages, +#context-pages ul { + background: #3b6998; /* Old browsers */ + background: -moz-linear-gradient(top, #4574a2 0%, #2f5d8b 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#4574a2), color-stop(100%,#2f5d8b)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #4574a2 0%, #2f5d8b 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #4574a2 0%, #2f5d8b 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #4574a2 0%, #2f5d8b 100%); /* IE10+ */ + background: linear-gradient(to bottom, #4574a2 0%, #2f5d8b 100%); /* W3C */ + /*Filter on IE will also use overflow:hidden implicitly, and that would clip our inner menus.*/ + /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#4574a2', endColorstr='#2f5d8b',GradientType=0 ); /* IE6-9 */*/ +} + +#header #header-inner #quick a, +#context-actions a, +#context-pages a { + background-repeat: no-repeat; + background-position: 10px 50%; + padding-left: 30px; +} + +#quick a, +#context-pages ul ul a { + padding-left: 10px; +} + +ul#context-actions { + display: inline-block; + float: right; + border-radius: 4px; + background-image: linear-gradient(top, #4574a2 0%, #2f5d8b 100%); +} +#content ul#context-actions li { + padding: 0px; + border-right: 1px solid rgba(0,0,0,0.1); + border-left: 1px solid rgba(255,255,255,0.1); +} + +#context-actions button, +#context-actions a { + display: block; + cursor: pointer; + background: none; + border: none; + margin: 0px; + height: auto; + padding: 10px 10px 10px 30px; + background-repeat: no-repeat; + background-position: 10px 50%; + font-size: 1em; +} + +#context-actions a { + padding: 11px 10px 12px 30px; +} + +#header #header-inner #quick li:hover, +#revision-changer:hover, +#context-pages li:hover, +#context-actions li:hover, +#content #context-actions li:hover, +#header #header-inner #quick li.current, +#context-pages li.current { + background: #6388ad; /* Old browsers */ + background: -moz-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.1)), color-stop(100%,rgba(255,255,255,0))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* IE10+ */ + background: linear-gradient(to bottom, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* W3C */ + /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#88bfe8', endColorstr='#70b0e0',GradientType=0 ); /* IE6-9 */*/ +} + + +#content #context-actions li:first-child { + border-left: none; + border-radius: 4px 0 0px 4px; +} + +#content #context-actions li:last-child { + border-right: none; + border-radius: 0 4px 4px 0; +} + +#content #context-actions .icon { + margin: auto; + margin-bottom: 5px; + display: block; + clear: both; + float: none; +} + +#content #context-actions button.follow, +#content #context-actions button.following { + width: auto; + float: none; +} + +#content #context-actions button .show-following, +#content #context-actions button .show-follow { + display: none; +} + +#content #context-bar #context-actions button.follow .show-follow { + display: block; +} + +#content #context-bar #context-actions button.following .show-following { + display: block; +} + +#context-state { + background-color: #336699; + border-top: 1px solid #517da8; + min-height: 36px; +} + +#context-pages { + float: right; + border-left: 1px solid rgba(0,0,0,0.1); +} + +#context-pages li.curreasdnt { + background: #535353; /* Old browsers */ + background: -moz-linear-gradient(top, #5d5d5d 0%, #484848 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#5d5d5d), color-stop(100%,#484848)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #5d5d5d 0%, #484848 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #5d5d5d 0%, #484848 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #5d5d5d 0%, #484848 100%); /* IE10+ */ + background: linear-gradient(to bottom, #5d5d5d 0%, #484848 100%); /* W3C */ +} + +#content #context-pages .icon { + margin-right: 5px; +} + +#header #header-inner #quick li, +#content #context-pages li { + border-right: 1px solid rgba(0,0,0,0.1); + border-left: 1px solid rgba(255,255,255,0.1); + padding: 0; +} +#header #header-inner #quick li:last-child, +#content #context-pages li:last-child { + border-right: none; +} + +#header #header-inner #quick li:first-child { + border-left: none; +} + +#header #header-inner #quick > li:first-child > a { + border-radius: 4px 0 0 4px; +} + +#header #header-inner #quick a, +#context-pages a, +#context-pages .admin_menu a { + display: block; + padding: 0px 10px 1px 30px; + padding-left: 30px; + line-height: 35px; +} + +#header #header-inner #quick a.thin, +#context-pages a.thin, +#context-pages .admin_menu a.thin { + line-height: 28px !important; +} + +#header #header-inner #quick a#quick_login_link { + padding-left: 0px; +} + +#header #header-inner #quick a { + overflow: hidden; +} +#quick a.childs:after, +#revision-changer:before, +#context-pages a.childs:after, +#context-pages a.dropdown:after { + content: ' \25BE'; +} +#context-pages a.childs { + padding-right: 20px; +} +#context-pages a.childs:after { + position: absolute; + float: right; + padding-left: 5px; + padding-right: 5px; +} + +#revision-changer:before { + position: absolute; + top: 0px; + right: 0px; + border-right: 1px solid rgba(0,0,0,0.1); + height: 25px; + padding-top: 10px; + padding-right: 10px; +} + +#context-pages li:last-child a { + padding-right: 10px; +} + +#context-bar #revision-changer { + position: relative; + cursor: pointer; + border: none; + padding: 0; + margin: 0; + color: #FFFFFF; + font-size: 0.85em; + padding: 2px 15px; + padding-bottom: 3px; + padding-right: 30px; + border-right: 1px solid rgba(255,255,255,0.1); +} + +#revision-changer .branch-name, +#revision-changer .revision { + display: block; + text-align: center; + line-height: 1.5em; +} + +#revision-changer .branch-name { + font-weight: bold; +} + +#revision-changer .revision { + text-transform: uppercase; +} \ No newline at end of file
--- a/rhodecode/public/css/style.css Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/public/css/style.css Mon Mar 18 18:17:58 2013 +0100 @@ -396,37 +396,14 @@ color: #bfe3ff; } -#header #header-inner #quick, #header #header-inner #quick ul { +#header #header-inner #quick { position: relative; float: right; list-style-type: none; list-style-position: outside; - margin: 8px 8px 0 0; - padding: 0; -} - -#header #header-inner #quick li { - position: relative; - float: left; - margin: 0 5px 0 0; + margin: 4px 8px 0 0; padding: 0; -} - -#header #header-inner #quick li a.menu_link { - top: 0; - left: 0; - height: 1%; - display: block; - clear: both; - overflow: hidden; - color: #FFF; - font-weight: 700; - text-decoration: none; - background: #369; - padding: 0; - -webkit-border-radius: 4px 4px 4px 4px; - -khtml-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; + border-radius: 4px; } #header #header-inner #quick li span.short { @@ -434,14 +411,8 @@ } #header #header-inner #quick li span { - top: 0; - right: 0; - height: 1%; - display: block; - float: left; - border-left: 1px solid #3f6f9f; + display: inline; margin: 0; - padding: 10px 12px 8px 10px; } #header #header-inner #quick li span.normal { @@ -450,13 +421,9 @@ } #header #header-inner #quick li span.icon { - top: 0; - left: 0; + border-left: none; - border-right: 1px solid #2e5c89; - padding: 8px 6px 4px; - min-width: 16px; - min-height: 16px; + padding-left: 10px ; } #header #header-inner #quick li span.icon_short { @@ -468,39 +435,8 @@ } #header #header-inner #quick li span.icon img, #header #header-inner #quick li span.icon_short img { - margin: 0px -2px 0px 0px; -} - -#header #header-inner #quick li.current a, -#header #header-inner #quick li a:hover { - background: #4e4e4e no-repeat top left; -} - -#header #header-inner #quick li.current a span, -#header #header-inner #quick li a:hover span { - border-left: 1px solid #545454; -} - -#header #header-inner #quick li.current a span.icon, -#header #header-inner #quick li.current a span.icon_short, -#header #header-inner #quick li a:hover span.icon, -#header #header-inner #quick li a:hover span.icon_short { - border-left: none; - border-right: 1px solid #464646; -} - -#header #header-inner #quick ul { - top: 29px; - right: 0; - min-width: 200px; - display: none; - position: absolute; - background: #FFF; - border: 1px solid #666; - border-top: 1px solid #003367; - z-index: 100; - margin: 0px 0px 0px 0px; - padding: 0; + vertical-align: middle; + margin-bottom: 2px; } #header #header-inner #quick ul.repo_switcher { @@ -510,216 +446,113 @@ } #header #header-inner #quick ul.repo_switcher li.qfilter_rs { - float: none; - margin: 0; - border-bottom: 2px solid #003367; + padding: 2px 3px; + padding-right: 17px; +} + +#header #header-inner #quick ul.repo_switcher li.qfilter_rs input { + width: 100%; + border-radius: 10px; + padding: 2px 7px; } #header #header-inner #quick .repo_switcher_type { position: absolute; left: 0; top: 9px; -} - -#header #header-inner #quick li ul li { - border-bottom: 1px solid #ddd; -} - -#header #header-inner #quick li ul li a { - width: 182px; - height: auto; - display: block; - float: left; - background: #FFF; - color: #003367; - font-weight: 400; - margin: 0; - padding: 7px 9px; -} - -#header #header-inner #quick li ul li a:hover { - color: #000; - background: #FFF; -} - -#header #header-inner #quick ul ul { - top: auto; -} - -#header #header-inner #quick li ul ul { - right: 200px; - max-height: 290px; - overflow: auto; - overflow-x: hidden; - white-space: normal; + margin: 0px 2px 0px 2px; } #header #header-inner #quick li ul li a.journal, #header #header-inner #quick li ul li a.journal:hover { - background: url("../images/icons/book.png") no-repeat scroll 4px 9px - #FFF; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/book.png"); } #header #header-inner #quick li ul li a.private_repo, #header #header-inner #quick li ul li a.private_repo:hover { - background: url("../images/icons/lock.png") no-repeat scroll 4px 9px - #FFF; - min-width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/lock.png") } #header #header-inner #quick li ul li a.public_repo, #header #header-inner #quick li ul li a.public_repo:hover { - background: url("../images/icons/lock_open.png") no-repeat scroll 4px - 9px #FFF; - min-width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/lock_open.png"); } #header #header-inner #quick li ul li a.hg, #header #header-inner #quick li ul li a.hg:hover { - background: url("../images/icons/hgicon.png") no-repeat scroll 4px 9px - #FFF; - min-width: 167px; - margin: 0 0 0 14px; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/hgicon.png"); + padding-left: 42px; + background-position: 20px 9px; } #header #header-inner #quick li ul li a.git, #header #header-inner #quick li ul li a.git:hover { - background: url("../images/icons/giticon.png") no-repeat scroll 4px 9px - #FFF; - min-width: 167px; - margin: 0 0 0 14px; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/giticon.png"); + padding-left: 42px; + background-position: 20px 9px; } #header #header-inner #quick li ul li a.repos, #header #header-inner #quick li ul li a.repos:hover { - background: url("../images/icons/database_edit.png") no-repeat scroll - 4px 9px #FFF; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/database_edit.png"); } #header #header-inner #quick li ul li a.repos_groups, #header #header-inner #quick li ul li a.repos_groups:hover { - background: url("../images/icons/database_link.png") no-repeat scroll - 4px 9px #FFF; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/database_link.png"); } #header #header-inner #quick li ul li a.users, #header #header-inner #quick li ul li a.users:hover { - background: #FFF url("../images/icons/user_edit.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/user_edit.png"); } #header #header-inner #quick li ul li a.groups, #header #header-inner #quick li ul li a.groups:hover { - background: #FFF url("../images/icons/group_edit.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/group_edit.png"); } #header #header-inner #quick li ul li a.defaults, #header #header-inner #quick li ul li a.defaults:hover { - background: #FFF url("../images/icons/wrench.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/wrench.png"); } #header #header-inner #quick li ul li a.settings, #header #header-inner #quick li ul li a.settings:hover { - background: #FFF url("../images/icons/cog.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/cog.png"); } #header #header-inner #quick li ul li a.permissions, #header #header-inner #quick li ul li a.permissions:hover { - background: #FFF url("../images/icons/key.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/key.png"); } #header #header-inner #quick li ul li a.ldap, #header #header-inner #quick li ul li a.ldap:hover { - background: #FFF url("../images/icons/server_key.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/server_key.png"); } #header #header-inner #quick li ul li a.fork, #header #header-inner #quick li ul li a.fork:hover { - background: #FFF url("../images/icons/arrow_divide.png") no-repeat 4px - 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/arrow_divide.png"); } #header #header-inner #quick li ul li a.locking_add, #header #header-inner #quick li ul li a.locking_add:hover { - background: #FFF url("../images/icons/lock_add.png") no-repeat 4px - 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/lock_add.png"); } #header #header-inner #quick li ul li a.locking_del, #header #header-inner #quick li ul li a.locking_del:hover { - background: #FFF url("../images/icons/lock_delete.png") no-repeat 4px - 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/lock_delete.png"); } #header #header-inner #quick li ul li a.pull_request, #header #header-inner #quick li ul li a.pull_request:hover { - background: #FFF url("../images/icons/arrow_join.png") no-repeat 4px - 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/arrow_join.png") ; } #header #header-inner #quick li ul li a.compare_request, #header #header-inner #quick li ul li a.compare_request:hover { - background: #FFF url("../images/icons/arrow_inout.png") no-repeat 4px - 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/arrow_inout.png"); } #header #header-inner #quick li ul li a.search, #header #header-inner #quick li ul li a.search:hover { - background: #FFF url("../images/icons/search_16.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/search_16.png"); } #header #header-inner #quick li ul li a.shortlog, #header #header-inner #quick li ul li a.shortlog:hover { - background: #FFF url("../images/icons/clock_16.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - + background-image: url("../images/icons/clock_16.png"); +} #header #header-inner #quick li ul li a.delete, #header #header-inner #quick li ul li a.delete:hover { - background: #FFF url("../images/icons/delete.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/delete.png"); } #header #header-inner #quick li ul li a.branches, #header #header-inner #quick li ul li a.branches:hover { - background: #FFF url("../images/icons/arrow_branch.png") no-repeat 4px - 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; + background-image: url("../images/icons/arrow_branch.png"); } #header #header-inner #quick li ul li a.tags, @@ -1076,7 +909,6 @@ #content div.box { clear: both; - overflow: hidden; background: #fff; margin: 0 0 10px; padding: 0 0 10px; @@ -1115,6 +947,7 @@ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', endColorstr='#00376e', GradientType=0 ); margin: 0 0 20px; padding: 0; + border-radius: 4px 4px 0 0; } #content div.box div.title h5 { @@ -1255,6 +1088,7 @@ background: linear-gradient(to bottom,rgba(255,255,255,0),rgba(64,96,128,0.1)); display: none; + overflow: hidden; } #content div.box div.expand .expandtext { background-color: #ffffff; @@ -1844,7 +1678,71 @@ padding: 0 3px 2px; } -#summary { +#content div.box #summary { + margin-right: 200px; +} + +#summary-menu-stats { + float: left; + width: 180px; + position: absolute; + top: 0; + right: 0; +} + +#summary-menu-stats ul { + margin: 0 10px; + display: block; + background-color: #f9f9f9; + border: 1px solid #d1d1d1; + border-radius: 4px; +} + +#content #summary-menu-stats li { + border-top: 1px solid #d1d1d1; + padding: 0; +} + +#content #summary-menu-stats li:hover { + background: #f0f0f0; +} + +#content #summary-menu-stats li:first-child { + border-top: none; +} + +#summary-menu-stats a.followers { background-image: url('../images/icons/heart.png')} +#summary-menu-stats a.forks { background-image: url('../images/icons/arrow_divide.png')} +#summary-menu-stats a.settings { background-image: url('../images/icons/cog_edit.png')} +#summary-menu-stats a.feed { background-image: url('../images/icons/rss_16.png')} +#summary-menu-stats a.repo-size { background-image: url('../images/icons/server.png')} + +#summary-menu-stats a { + display: block; + padding: 12px 30px; + background-repeat: no-repeat; + background-position: 10px 50%; + padding-right: 10px; +} + + +#repo_size_2 { + margin-left: 30px; + display: block; + padding-right: 10px; + padding-bottom: 7px; +} + +#summary-menu-stats a:hover { + text-decoration: none; +} + +#summary-menu-stats a span { + background-color: #FFF; + border: 1px inset #f0f0f0; + border-radius: 7px; + padding: 1px; + font-size: 10px; } #summary .metatag { @@ -2085,7 +1983,7 @@ } #quick_login .password_forgoten { - padding-right: 10px; + padding-right: 0px; padding-top: 0px; text-align: left; } @@ -2093,6 +1991,8 @@ #quick_login .password_forgoten a { font-size: 10px; color: #fff; + padding: 0px !important; + line-height: 20px !important; } #quick_login .register { @@ -2104,6 +2004,8 @@ #quick_login .register a { font-size: 10px; color: #fff; + padding: 0px !important; + line-height: 20px !important; } #quick_login .submit { @@ -2127,15 +2029,16 @@ padding: 4px 0px 0px 6px; } #quick_login .notifications { - padding: 4px 0px 0px 6px; + padding: 2px 0px 0px 6px; color: #FFFFFF; font-weight: bold; + line-height: 10px !important; } #quick_login .notifications a, #quick_login .unread a { color: #FFFFFF; display: block; - padding: 2px; + padding: 0px !important; } #quick_login .notifications a:hover, #quick_login .unread a:hover { @@ -2462,10 +2365,10 @@ text-align: right; } -#changeset_content .container .left .message { +#changeset_content .container .message { white-space: pre-wrap; } -#changeset_content .container .left .message a:hover { +#changeset_content .container .message a:hover { text-decoration: none; } .cs_files .cur_cs { @@ -2561,23 +2464,30 @@ text-align: left; } +.table { + position: relative; +} + #graph { + position: relative; overflow: hidden; } #graph_nodes { - float: left; - margin-right: 0px; - margin-top: 0px; + position: absolute; +} + +#graph_content, +#graph .info_box, +#graph .container_header { + margin-left: 100px; } #graph_content { - width: 80%; - float: left; -} - -#graph_content .container_header { - border-bottom: 1px solid #DDD; + position: relative; +} + +#graph .container_header { padding: 10px; height: 25px; } @@ -2592,49 +2502,143 @@ margin: 0px 0px 0px 3px; } +#graph_content #changesets { + table-layout: fixed; + border-collapse: collapse; + border-left: none; + border-right: none; + border-color: #cdcdcd; +} + #graph_content .container { - border-bottom: 1px solid #DDD; - height: 56px; + +} + +#graph_content #changesets td { overflow: hidden; -} - -#graph_content .container .right { - float: right; - width: 23%; - text-align: right; -} - -#graph_content .container .left { - float: left; - width: 25%; - padding-left: 5px; + text-overflow: ellipsis; + white-space: nowrap; + height: 31px; + border-color: #cdcdcd; + text-align: left; +} + +#graph_content .container .author { + width: 105px; +} + +#graph_content .container .hash { + width: 85px; + font-size: 0.85em; +} + +#graph_content #changesets .container .date { + width: 76px; + color: #666; + font-size: 10px; +} + +#graph_content #changesets .container .right { + width: 120px; + padding-right: 0px; + overflow: visible; + position: relative; } #graph_content .container .mid { + padding: 0; +} + +#graph_content .log-container { + position: relative; +} + +#graph_content #changesets td.checkbox { + width: 20px; +} + +#graph_content .container .changeset_range { float: left; - width: 49%; -} - - -#graph_content .container .left .date { - color: #666; - padding-left: 22px; - font-size: 10px; -} - -#graph_content .container .left .author { - height: 22px; -} - -#graph_content .container .left .author .user { + margin: 6px 3px; +} + +#graph_content .container .author img { + vertical-align: middle; +} + +#graph_content .container .author .user { color: #444444; - float: left; - margin-left: -4px; - margin-top: 4px; } #graph_content .container .mid .message { white-space: pre-wrap; + padding: 0; + overflow: hidden; + height: 1.1em; +} + +#graph_content .container .extra-container { + display: block; + position: absolute; + top: -15px; + right: 0; + padding-left: 5px; + background: #FFFFFF; + height: 41px; +} + +#graph_content .comments-container, +#graph_content .logtags { + display: block; + float: left; + overflow: hidden; + padding: 0; + margin: 0; +} + +#graph_content .comments-container { + margin: 0.8em 0; + margin-right: 0.5em; +} + +#graph_content .tagcontainer { + width: 80px; + position: relative; + float: right; + height: 100%; + top: 7px; + margin-left: 0.5em; +} + +#graph_content .logtags { + min-width: 80px; + height: 1.1em; + position: absolute; + left: 0px; + width: auto; + top: 0px; +} + +#graph_content .logtags.tags { + top: 14px; +} + +#graph_content .logtags:hover { + overflow: visible; + position: absolute; + width: auto; + right: 0; + left: initial; +} + +#graph_content .logtags .bookbook, +#graph_content .logtags .tagtag { + float: left; + line-height: 1em; + margin-bottom: 1px; + margin-right: 1px; + padding: 1px 3px; + font-size: 10px; } #graph_content .container .mid .message a:hover { @@ -2676,17 +2680,18 @@ .code-header .changeset-status-container .changeset-status-ico, .container .changeset-status-ico { float: left; } -.right .comments-container { - padding-right: 5px; - margin-top: 1px; - float: right; - height: 14px; -} - -.right .comments-cnt { - float: left; + +#graph_content .comments-cnt { color: rgb(136, 136, 136); - padding-right: 2px; + padding: 5px 0; +} + +#graph_content .comments-cnt a { + background-image: url('../images/icons/comments.png'); + background-repeat: no-repeat; + background-position: 100% 50%; + padding: 5px 0; + padding-right: 20px; } .right .changes { @@ -2731,7 +2736,6 @@ padding: 1px 3px 1px 3px; background-color: #fca062; font-size: 10px; - font-weight: bold; color: #ffffff; text-transform: uppercase; white-space: nowrap; @@ -2745,65 +2749,101 @@ clear: both; } .right .logtags { - padding: 2px 2px 2px 2px; -} -.right .logtags .branchtag, .right .logtags .tagtag, .right .logtags .booktag { + line-height: 2.2em; +} +.branchtag, .logtags .tagtag, .logtags .booktag { margin: 0px 2px; } +.branchtag, +.tagtag, +.bookbook, +.spantag { + padding: 1px 3px 1px 3px; + font-size: 10px; + color: #336699; + white-space: nowrap; + -webkit-border-radius: 4px; + border-radius: 4px; + border: 1px solid #d9e8f8; + line-height: 1.5em; +} + +#graph_content .branchtag, +#graph_content .tagtag, +#graph_content .bookbook { + margin: 1.1em 0; + margin-right: 0.5em; +} + +.branchtag, +.tagtag, +.bookbook { + float: left; +} + .right .logtags .branchtag, -.logtags .branchtag, -.spantag { +.logtags .tagtag, +.right .merge { + float: right; + line-height: 1em; + margin: 1px 1px !important; + display: block; +} + +.bookbook { + border-color: #46A546; + color: #46A546; +} + +.tagtag { + border-color: #62cffc; + color: #62cffc; +} + +.logtags .branchtag a:hover, +.logtags .branchtag a, +.branchtag a, +.branchtag a:hover { + text-decoration: none; + color: inherit; +} +.logtags .tagtag { padding: 1px 3px 1px 3px; - background-color: #bfbfbf; + background-color: #62cffc; font-size: 10px; - font-weight: bold; color: #ffffff; white-space: nowrap; -webkit-border-radius: 3px; border-radius: 3px; } -.right .logtags .branchtag a:hover, .logtags .branchtag a { - color: #ffffff; -} -.right .logtags .branchtag a:hover, .logtags .branchtag a:hover { + +.tagtag a, +.tagtag a:hover, +.logtags .tagtag a, +.logtags .tagtag a:hover { text-decoration: none; - color: #ffffff; -} -.right .logtags .tagtag, .logtags .tagtag { + color: inherit; +} +.logbooks .bookbook, .logbooks .bookbook, .logtags .bookbook, .logtags .bookbook { padding: 1px 3px 1px 3px; - background-color: #62cffc; + background-color: #46A546; font-size: 10px; - font-weight: bold; color: #ffffff; white-space: nowrap; -webkit-border-radius: 3px; border-radius: 3px; } -.right .logtags .tagtag a:hover, .logtags .tagtag a { - color: #ffffff; -} -.right .logtags .tagtag a:hover, .logtags .tagtag a:hover { - text-decoration: none; +.logbooks .bookbook, .logbooks .bookbook a, .right .logtags .bookbook, .logtags .bookbook a { color: #ffffff; } -.right .logbooks .bookbook, .logbooks .bookbook, .right .logtags .bookbook, .logtags .bookbook { - padding: 1px 3px 1px 3px; - background-color: #46A546; - font-size: 10px; - font-weight: bold; - color: #ffffff; - text-transform: uppercase; - white-space: nowrap; - -webkit-border-radius: 3px; - border-radius: 3px; -} -.right .logbooks .bookbook, .logbooks .bookbook a, .right .logtags .bookbook, .logtags .bookbook a { - color: #ffffff; -} -.right .logbooks .bookbook, .logbooks .bookbook a:hover, .right .logtags .bookbook, .logtags .bookbook a:hover { + +.logbooks .bookbook, .logbooks .bookbook a:hover, +.logtags .bookbook, .logtags .bookbook a:hover, +.bookbook a, +.bookbook a:hover { text-decoration: none; - color: #ffffff; + color: inherit; } div.browserblock { overflow: hidden; @@ -3468,7 +3508,6 @@ #content { clear: both; - overflow: hidden; padding: 10px 10px 14px 10px; } @@ -3616,7 +3655,6 @@ img, #header #header-inner #quick li a:hover span.normal, -#header #header-inner #quick li ul li.last, #content div.box div.form div.fields div.field div.textarea table td table td a, #clone_url, #clone_url_id @@ -3660,8 +3698,17 @@ padding: 0 10px 10px; } -#content div.box div.title ul.links li a:hover, #content div.box div.title ul.links li.ui-tabs-selected a { - color: #bfe3ff; +#content div.box div.title ul.links li a:hover, +#content div.box div.title ul.links li.ui-tabs-selected a { + + background: #6388ad; /* Old browsers */ + background: -moz-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.1)), color-stop(100%,rgba(255,255,255,0))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* IE10+ */ + background: linear-gradient(to bottom, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* W3C */ + /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#88bfe8', endColorstr='#70b0e0',GradientType=0 ); /* IE6-9 */*/ } #content div.box ol.lower-roman, #content div.box ol.upper-roman, #content div.box ol.lower-alpha, #content div.box ol.upper-alpha, #content div.box ol.decimal { @@ -3669,6 +3716,7 @@ } #content div.box div.form, #content div.box div.table, #content div.box div.traffic { + position: relative; clear: both; overflow: hidden; margin: 0; @@ -3752,7 +3800,6 @@ #content div.box div.form div.fields div.buttons input div.form div.fields div.buttons input, #content div.box div.action div.button input { - /*color: #000;*/ font-size: 11px; font-weight: 700; margin: 0; @@ -3926,13 +3973,7 @@ width: 600px; } -#changeset_content .container .left { - float: left; - width: 75%; - padding-left: 5px; -} - -#changeset_content .container .left .date, .ac .match { +#changeset_content .container .date, .ac .match { font-weight: 700; padding-top: 5px; padding-bottom: 5px; @@ -4352,21 +4393,6 @@ padding: 4px 0px 6px 0px; } - -tr.hl-comment { -/* - background-color: #FFFFCC !important; -*/ -} - -/* -tr.hl-comment pre { - border-top: 2px solid #FFEE33; - border-left: 2px solid #FFEE33; - border-right: 2px solid #FFEE33; -} -*/ - .comment-inline-form strong { display: block; margin-bottom: 15px; @@ -4467,22 +4493,16 @@ margin: 2px 0px 8px 5px !important } - .notification-paginator { padding: 0px 0px 4px 16px; float: left; } -.menu_link_user { - padding: 10px 8px 8px 8px !important; -} - +#context-pages .pull-request span, .menu_link_notifications { padding: 4px 4px !important; - margin: 7px 4px 0px 0px !important; text-align: center; color: #888 !important; - font-size: 10px; background-color: #DEDEDE !important; border-radius: 4px !important; -webkit-border-radius: 4px !important;
--- a/rhodecode/public/js/rhodecode.js Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/public/js/rhodecode.js Mon Mar 18 18:17:58 2013 +0100 @@ -509,7 +509,7 @@ }; var onSuccessFollow = function(target){ - var f = YUD.get(target.id); + var f = YUD.get(target); var f_cnt = YUD.get('current_followers_count'); if(YUD.hasClass(f, 'follow')){ @@ -576,6 +576,7 @@ return false; } + /** * TOOLTIP IMPL. */
--- a/rhodecode/templates/admin/repos/repo_edit.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/admin/repos/repo_edit.html Mon Mar 18 18:17:58 2013 +0100 @@ -6,11 +6,7 @@ </%def> <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » - ${_('edit')} + ${_('Edit Repository Settings')} </%def> <%def name="page_nav()"> @@ -18,6 +14,7 @@ </%def> <%def name="main()"> + ${self.context_bar('options')} <div class="box box-left"> <!-- box / title --> <div class="title">
--- a/rhodecode/templates/base/base.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/base/base.html Mon Mar 18 18:17:58 2013 +0100 @@ -61,11 +61,144 @@ </div> </%def> +<%def name="context_bar(current=None)"> + %if c.repo_name: + ${repo_context_bar(current)} + %endif +</%def> + +<%def name="admin_menu()"> + <ul class="admin_menu"> + <li>${h.link_to(_('admin journal'),h.url('admin_home'),class_='journal ')}</li> + <li>${h.link_to(_('repositories'),h.url('repos'),class_='repos')}</li> + <li>${h.link_to(_('repository groups'),h.url('repos_groups'),class_='repos_groups')}</li> + <li>${h.link_to(_('users'),h.url('users'),class_='users')}</li> + <li>${h.link_to(_('user groups'),h.url('users_groups'),class_='groups')}</li> + <li>${h.link_to(_('permissions'),h.url('edit_permission',id='default'),class_='permissions')}</li> + <li>${h.link_to(_('ldap'),h.url('ldap_home'),class_='ldap')}</li> + <li>${h.link_to(_('defaults'),h.url('defaults'),class_='defaults')}</li> + <li class="last">${h.link_to(_('settings'),h.url('admin_settings'),class_='settings')}</li> + </ul> +</%def> + +<%def name="admin_menu_simple()"> + <ul> + <li>${h.link_to(_('repositories groups'),h.url('repos_groups'),class_='repos_groups')}</li> + </ul> +</%def> + +<%def name="repo_context_bar(current=None)"> + <% + def follow_class(): + if c.repository_following: + return h.literal('following') + else: + return h.literal('follow') + %> + <% + def is_current(selected): + if selected == current: + return h.literal('class="current"') + %> + + <!--- CONTEXT BAR --> + <div id="context-bar" class="box"> + <div id="context-top"> + <div id="breadcrumbs"> + ${h.link_to(_(u'Repositories'),h.url('home'))} + » + ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} + </div> + ## TODO: this check feels wrong, it would be better to have a check for permissions + ## also it feels like a job for the controller + %if c.rhodecode_user.username != 'default': + <ul id="context-actions" class="horizontal-list"> + <li> + <button class="${follow_class()}" onclick="javascript:toggleFollowingRepo(this,${c.rhodecode_db_repo.repo_id},'${str(h.get_token())}');"> + <!--span class="icon show-follow follow"></span> + <span class="icon show-following following"></span--> + <span class="show-follow">${_('Follow')}</span> + <span class="show-following">${_('Unfollow')}</span> + </button> + </li> + <li><a href="${h.url('repo_fork_home',repo_name=c.repo_name)}" class="fork">${_('Fork')}</a></li> + %if h.is_hg(c.rhodecode_repo): + <li><a href="${h.url('pullrequest_home',repo_name=c.repo_name)}" class="pull-request">${_('Create Pull Request')}</a></li> + %endif + </ul> + %endif + </div> + <div id="context-state"> + <!--button id="revision-changer"> + <span class="branch-name">graphics/shader-move</span> + <span class="revision">@73318:8d3d6ee94072</span> + </button--> + <ul id="context-pages" class="horizontal-list"> + <li ${is_current('summary')}><a href="${h.url('summary_home', repo_name=c.repo_name)}" class="summary">${_('Summary')}</a></li> + <li ${is_current('changelog')}><a href="${h.url('changelog_home', repo_name=c.repo_name)}" class="changelogs">${_('Changelog')}</a></li> + <li ${is_current('files')}><a href="${h.url('files_home', repo_name=c.repo_name)}" class="files"></span>${_('Files')}</a></li> + <li ${is_current('switch-to')}> + <a href="#" id="branch_tag_switcher_2" class="dropdown switch-to"></span>${_('Switch To')}</a> + <ul id="switch_to_list_2" class="switch_to submenu"> + <li><a href="#">${_('loading...')}</a></li> + </ul> + </li> + <li ${is_current('options')}> + <a href="#" class="dropdown options"></span>Options</a> + <ul> + %if h.HasRepoPermissionAll('repository.admin')(c.repo_name): + %if h.HasPermissionAll('hg.admin')('access settings on repository'): + <li>${h.link_to(_('Settings'),h.url('edit_repo',repo_name=c.repo_name),class_='settings')}</li> + %else: + <li>${h.link_to(_('Settings'),h.url('repo_settings_home',repo_name=c.repo_name),class_='settings')}</li> + %endif + %endif + %if c.rhodecode_db_repo.fork: + <li>${h.link_to(_('Compare fork'),h.url('compare_url',repo_name=c.rhodecode_db_repo.fork.repo_name,org_ref_type='branch',org_ref='default',other_repo=c.repo_name,other_ref_type='branch',other_ref=request.GET.get('branch') or 'default'),class_='compare_request')}</li> + %endif + <li>${h.link_to(_('Lightweight changelog'),h.url('shortlog_home',repo_name=c.repo_name),class_='shortlog')}</li> + <li>${h.link_to(_('Search'),h.url('search_repo',repo_name=c.repo_name),class_='search')}</li> + + %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking: + %if c.rhodecode_db_repo.locked[0]: + <li>${h.link_to(_('Unlock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_del')}</li> + %else: + <li>${h.link_to(_('Lock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_add')}</li> + %endif + %endif + </ul> + </li> + <li ${is_current('showpullrequest')}> + <a href="${h.url('pullrequest_show_all',repo_name=c.repo_name)}" title="${_('Show Pull Requests')}" class="pull-request">Pull Requests + %if c.repository_pull_requests: + <span>${c.repository_pull_requests}</span> + %endif + </a> + </li> + </ul> + </div> + </div> + <script type="text/javascript"> + YUE.on('branch_tag_switcher_2','mouseover',function(){ + var loaded = YUD.hasClass('branch_tag_switcher_2','loaded'); + if(!loaded){ + YUD.addClass('branch_tag_switcher_2','loaded'); + ypjax("${h.url('branch_tag_switcher',repo_name=c.repo_name)}",'switch_to_list_2', + function(o){}, + function(o){YUD.removeClass('branch_tag_switcher_2','loaded');} + ,null); + } + return false; + }); + </script> + <!--- END CONTEXT BAR --> +</%def> + <%def name="usermenu()"> ## USER MENU <li> - <a class="menu_link" id="quick_login_link"> - <span class="icon" style="padding:5px 5px 0px 5px"> + <a class="menu_link childs" id="quick_login_link"> + <span class="icon"> <img src="${h.gravatar_url(c.rhodecode_user.email,20)}" alt="avatar"> </span> %if c.rhodecode_user.username != 'default': @@ -122,12 +255,12 @@ <div class="full_name">${c.rhodecode_user.full_name_or_username}</div> <div class="email">${c.rhodecode_user.email}</div> <div class="big_gravatar"><img alt="gravatar" src="${h.gravatar_url(c.rhodecode_user.email,48)}" /></div> - <div class="notifications"><a href="${h.url('notifications')}">${_('Notifications')}</a></div> - <div class="unread"><a href="${h.url('notifications')}">${_('Unread')}: ${c.unread_notifications}</a></div> + ##<div class="notifications"><a href="${h.url('notifications')}">${_('Notifications')}</a></div> + <div class="unread"><a href="${h.url('notifications')}">${_('Unread notifications')}: ${c.unread_notifications}</a></div> </div> <div class="links_right"> <ol class="links"> - <li>${h.link_to(_(u'Home'),h.url('home'))}</li> + ##<li>${h.link_to(_(u'Home'),h.url('home'))}</li> <li>${h.link_to(_(u'Journal'),h.url('journal'))}</li> <li>${h.link_to(_(u'My account'),h.url('admin_settings_my_account'))}</li> <li class="logout">${h.link_to(_(u'Log Out'),h.url('logout_home'))}</li> @@ -146,14 +279,11 @@ if selected == current: return h.literal('class="current"') %> - <ul id="quick"> + <ul id="quick" class="horizontal-list"> <!-- repo switcher --> <li ${is_current('home')}> - <a class="menu_link" id="repo_switcher" title="${_('Switch repository')}" href="${h.url('home')}"> - <span class="icon"> - <img src="${h.url('/images/icons/database.png')}" alt="${_('Products')}" /> - </span> - <span>${_('Repositories')}</span> + <a class="menu_link repo_switcher childs" id="repo_switcher" title="${_('Switch repository')}" href="${h.url('home')}"> + ${_('Repositories')} </a> <ul id="repo_switcher_list" class="repo_switcher"> <li> @@ -161,202 +291,41 @@ </li> </ul> </li> - ## we render this menu only not for those pages - %if current not in ['home','admin', 'search', 'journal']: - ##REGULAR MENU - <li ${is_current('summary')}> - <a class="menu_link" title="${_('Summary page')}" href="${h.url('summary_home',repo_name=c.repo_name)}"> - <span class="icon"> - <img src="${h.url('/images/icons/clipboard_16.png')}" alt="${_('Summary')}" /> - </span> - <span>${_('Summary')}</span> - </a> - </li> - <li ${is_current('changelog')}> - <a class="menu_link" title="${_('Changeset list')}" href="${h.url('changelog_home',repo_name=c.repo_name)}"> - <span class="icon"> - <img src="${h.url('/images/icons/time.png')}" alt="${_('Changelog')}" /> - </span> - <span>${_('Changelog')}</span> - </a> + ##ROOT MENU + %if c.rhodecode_user.username != 'default': + <li ${is_current('journal')}> + <a class="menu_link journal" title="${_('Show recent activity')}" href="${h.url('journal')}"> + ${_('Journal')} + </a> </li> - <li ${is_current('switch_to')}> - <a class="menu_link" id="branch_tag_switcher" title="${_('Switch to')}" href="#"> - <span class="icon"> - <img src="${h.url('/images/icons/arrow_switch.png')}" alt="${_('Switch to')}" /> - </span> - <span>${_('Switch to')}</span> - </a> - <ul id="switch_to_list" class="switch_to"> - <li><a href="#">${_('loading...')}</a></li> - </ul> - </li> - <li ${is_current('files')}> - <a class="menu_link" title="${_('Show repository content')}" href="${h.url('files_home',repo_name=c.repo_name)}"> - <span class="icon"> - <img src="${h.url('/images/icons/file.png')}" alt="${_('Files')}" /> - </span> - <span>${_('Files')}</span> - </a> + %else: + <li ${is_current('journal')}> + <a class="menu_link journal" title="${_('Public journal')}" href="${h.url('public_journal')}"> + ${_('Public journal')} + </a> </li> - <li ${is_current('options')}> - <a class="menu_link" title="${_('Options')}" href="#"> - <span class="icon"> - <img src="${h.url('/images/icons/table_gear.png')}" alt="${_('Admin')}" /> - </span> - <span>${_('Options')}</span> - </a> - <ul> - %if h.HasRepoPermissionAll('repository.admin')(c.repo_name): - %if h.HasPermissionAll('hg.admin')('access settings on repository'): - <li>${h.link_to(_('repository settings'),h.url('edit_repo',repo_name=c.repo_name),class_='settings')}</li> - %else: - <li>${h.link_to(_('repository settings'),h.url('repo_settings_home',repo_name=c.repo_name),class_='settings')}</li> - %endif - %endif - - <li>${h.link_to(_('fork'),h.url('repo_fork_home',repo_name=c.repo_name),class_='fork')}</li> - %if h.is_hg(c.rhodecode_repo): - <li>${h.link_to(_('open new pull request'),h.url('pullrequest_home',repo_name=c.repo_name),class_='pull_request')}</li> - %endif - %if c.rhodecode_db_repo.fork: - <li>${h.link_to(_('compare fork'),h.url('compare_url',repo_name=c.rhodecode_db_repo.fork.repo_name,org_ref_type='branch',org_ref='default',other_repo=c.repo_name,other_ref_type='branch',other_ref=request.GET.get('branch') or 'default'),class_='compare_request')}</li> - %endif - <li>${h.link_to(_('lightweight changelog'),h.url('shortlog_home',repo_name=c.repo_name),class_='shortlog')}</li> - <li>${h.link_to(_('search'),h.url('search_repo',repo_name=c.repo_name),class_='search')}</li> - - %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking: - %if c.rhodecode_db_repo.locked[0]: - <li>${h.link_to(_('unlock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_del')}</li> - %else: - <li>${h.link_to(_('lock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_add')}</li> - %endif - %endif - - % if h.HasPermissionAll('hg.admin')('access admin main page'): - <li> - ${h.link_to(_('admin'),h.url('admin_home'),class_='admin')} - <%def name="admin_menu()"> - <ul> - <li>${h.link_to(_('admin journal'),h.url('admin_home'),class_='journal')}</li> - <li>${h.link_to(_('repositories'),h.url('repos'),class_='repos')}</li> - <li>${h.link_to(_('repository groups'),h.url('repos_groups'),class_='repos_groups')}</li> - <li>${h.link_to(_('users'),h.url('users'),class_='users')}</li> - <li>${h.link_to(_('user groups'),h.url('users_groups'),class_='groups')}</li> - <li>${h.link_to(_('permissions'),h.url('edit_permission',id='default'),class_='permissions')}</li> - <li>${h.link_to(_('ldap'),h.url('ldap_home'),class_='ldap')}</li> - <li>${h.link_to(_('defaults'),h.url('defaults'),class_='defaults')}</li> - <li class="last">${h.link_to(_('settings'),h.url('admin_settings'),class_='settings')}</li> - </ul> - </%def> - ## ADMIN MENU - ${admin_menu()} - </li> - ## if you're a admin of any groups, show admin menu for it - % elif c.rhodecode_user.groups_admin: - <li> - ${h.link_to(_('admin'),h.url('admin_home'),class_='admin')} - <%def name="admin_menu_simple()"> - <ul> - <li>${h.link_to(_('repository groups'),h.url('repos_groups'),class_='repos_groups')}</li> - </ul> - </%def> - ## ADMIN MENU - ${admin_menu_simple()} - </li> - % endif - </ul> - </li> - <li> - <a class="menu_link" title="${_('Followers')}" href="${h.url('repo_followers_home',repo_name=c.repo_name)}"> - <span class="icon_short"> - <img src="${h.url('/images/icons/heart.png')}" alt="${_('Followers')}" /> - </span> - <span id="current_followers_count" class="short">${c.repository_followers}</span> - </a> + %endif + <li ${is_current('search')}> + <a class="menu_link search" title="${_('Search in repositories')}" href="${h.url('search')}"> + ${_('Search')} + </a> + </li> + % if h.HasPermissionAll('hg.admin')('access admin main page'): + <li ${is_current('admin')}> + <a class="menu_link admin childs" title="${_('Admin')}" href="${h.url('admin_home')}"> + ${_('Admin')} + </a> + ${admin_menu()} </li> - <li> - <a class="menu_link" title="${_('Forks')}" href="${h.url('repo_forks_home',repo_name=c.repo_name)}"> - <span class="icon_short"> - <img src="${h.url('/images/icons/arrow_divide.png')}" alt="${_('Forks')}" /> - </span> - <span class="short">${c.repository_forks}</span> - </a> - </li> - <li> - <a class="menu_link" title="${_('Pull requests')}" href="${h.url('pullrequest_show_all',repo_name=c.repo_name)}"> - <span class="icon_short"> - <img src="${h.url('/images/icons/arrow_join.png')}" alt="${_('Pull requests')}" /> - </span> - <span class="short">${c.repository_pull_requests}</span> - </a> - </li> - ${usermenu()} - <script type="text/javascript"> - YUE.on('branch_tag_switcher','mouseover',function(){ - var loaded = YUD.hasClass('branch_tag_switcher','loaded'); - if(!loaded){ - YUD.addClass('branch_tag_switcher','loaded'); - ypjax("${h.url('branch_tag_switcher',repo_name=c.repo_name)}",'switch_to_list', - function(o){}, - function(o){YUD.removeClass('branch_tag_switcher','loaded');} - ,null); - } - return false; - }); - </script> - %else: - ##ROOT MENU - %if c.rhodecode_user.username != 'default': - <li ${is_current('journal')}> - <a class="menu_link" title="${_('Show recent activity')}" href="${h.url('journal')}"> - <span class="icon"> - <img src="${h.url('/images/icons/book.png')}" alt="${_('Journal')}" /> - </span> - <span>${_('Journal')}</span> - </a> - </li> - %else: - <li ${is_current('journal')}> - <a class="menu_link" title="${_('Public journal')}" href="${h.url('public_journal')}"> - <span class="icon"> - <img src="${h.url('/images/icons/book.png')}" alt="${_('Public journal')}" /> - </span> - <span>${_('Public journal')}</span> - </a> - </li> - %endif - <li ${is_current('search')}> - <a class="menu_link" title="${_('Search in repositories')}" href="${h.url('search')}"> - <span class="icon"> - <img src="${h.url('/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 class="menu_link" title="${_('Admin')}" href="${h.url('admin_home')}"> - <span class="icon"> - <img src="${h.url('/images/icons/cog_edit.png')}" alt="${_('Admin')}" /> - </span> - <span>${_('Admin')}</span> - </a> - ${admin_menu()} - </li> - % elif c.rhodecode_user.groups_admin: - <li ${is_current('admin')}> - <a class="menu_link" title="${_('Admin')}" href="${h.url('admin_home')}"> - <span class="icon"> - <img src="${h.url('/images/icons/cog_edit.png')}" alt="${_('Admin')}" /> - </span> - <span>${_('Admin')}</span> - </a> - ${admin_menu_simple()} - </li> - % endif - ${usermenu()} - %endif + % elif c.rhodecode_user.groups_admin: + <li ${is_current('admin')}> + <a class="menu_link admin childs" title="${_('Admin')}" href="${h.url('admin_home')}"> + ${_('Admin')} + </a> + ${admin_menu_simple()} + </li> + % endif + ${usermenu()} <script type="text/javascript"> YUE.on('repo_switcher','mouseover',function(){ var target = 'q_filter_rs';
--- a/rhodecode/templates/base/root.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/base/root.html Mon Mar 18 18:17:58 2013 +0100 @@ -11,6 +11,8 @@ <%def name="css()"> <link rel="stylesheet" type="text/css" href="${h.url('/css/style.css', ver=c.rhodecode_version)}" media="screen"/> <link rel="stylesheet" type="text/css" href="${h.url('/css/pygments.css', ver=c.rhodecode_version)}"/> + + <link rel="stylesheet" type="text/css" href="${h.url('/css/contextbar.css', ver=c.rhodecode_version)}"/> ## EXTRA FOR CSS ${self.css_extra()} </%def>
--- a/rhodecode/templates/bookmarks/bookmarks.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/bookmarks/bookmarks.html Mon Mar 18 18:17:58 2013 +0100 @@ -8,11 +8,7 @@ <%def name="breadcrumbs_links()"> <input class="q_filter_box" id="q_filter_bookmarks" size="15" type="text" name="filter" value="${_('quick filter...')}"/> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » - ${_('bookmarks')} + ${_('Bookmarks')} </%def> <%def name="page_nav()"> @@ -20,6 +16,7 @@ </%def> <%def name="main()"> <div class="box"> +${self.context_bar('switch-to')} <!-- box / title --> <div class="title"> ${self.breadcrumbs()}
--- a/rhodecode/templates/branches/branches.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/branches/branches.html Mon Mar 18 18:17:58 2013 +0100 @@ -7,11 +7,7 @@ <%def name="breadcrumbs_links()"> <input class="q_filter_box" id="q_filter_branches" size="15" type="text" name="filter" value="${_('quick filter...')}"/> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » - ${_('branches')} + ${_('Branches')} </%def> <%def name="page_nav()"> @@ -19,6 +15,7 @@ </%def> <%def name="main()"> +${self.context_bar('switch-to')} <div class="box"> <!-- box / title --> <div class="title">
--- a/rhodecode/templates/changelog/changelog.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/changelog/changelog.html Mon Mar 18 18:17:58 2013 +0100 @@ -7,12 +7,8 @@ </%def> <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » <% size = c.size if c.size <= c.total_cs else c.total_cs %> - ${_('changelog')} - ${ungettext('showing %d out of %d revision', 'showing %d out of %d revisions', size) % (size, c.total_cs)} + ${_('Changelog')} - ${ungettext('showing %d out of %d revision', 'showing %d out of %d revisions', size) % (size, c.total_cs)} </%def> <%def name="page_nav()"> @@ -20,6 +16,7 @@ </%def> <%def name="main()"> +${self.context_bar('changelog')} <div class="box"> <!-- box / title --> <div class="title"> @@ -28,10 +25,6 @@ <div class="table"> % if c.pagination: <div id="graph"> - <div id="graph_nodes"> - <canvas id="graph_canvas"></canvas> - </div> - <div id="graph_content"> <div class="info_box" style="clear: both;padding: 10px 6px;min-height: 12px;text-align: right;"> <a href="#" class="ui-btn small" id="rev_range_container" style="display:none"></a> <a href="#" class="ui-btn small" id="rev_range_clear" style="display:none">${_('Clear selection')}</a> @@ -42,123 +35,105 @@ %if h.is_hg(c.rhodecode_repo): <a id="open_new_pr" href="${h.url('pullrequest_home',repo_name=c.repo_name)}" class="ui-btn small">${_('Open new pull request')}</a> %endif + </div> + <div class="container_header"> + ${h.form(h.url.current(),method='get')} + <div style="float:left"> + ${h.submit('set',_('Show'),class_="ui-btn")} + ${h.text('size',size=1,value=c.size)} + ${_('revisions')} </div> - <div class="container_header"> - ${h.form(h.url.current(),method='get')} - <div class="info_box" style="float:left"> - ${h.submit('set',_('Show'),class_="ui-btn")} - ${h.text('size',size=1,value=c.size)} - ${_('revisions')} - </div> - ${h.end_form()} + ${h.end_form()} <div style="float:right">${h.select('branch_filter',c.branch_name,c.branch_filters)}</div> - </div> + </div> + <div id="graph_nodes"> + <canvas id="graph_canvas"></canvas> + </div> + <div id="graph_content"> + <table id="changesets"> + <tbody> %for cnt,cs in enumerate(c.pagination): - <div id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}"> - <div class="left"> - <div> + <tr id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}"> + <td class="checkbox"> ${h.checkbox(cs.raw_id,class_="changeset_range")} - <span class="tooltip" title="${h.tooltip(h.age(cs.date))}"><a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}"><span class="changeset_id">${cs.revision}:<span class="changeset_hash">${h.short_id(cs.raw_id)}</span></span></a></span> - </div> - <div class="author"> - <div class="gravatar"> - <img alt="gravatar" src="${h.gravatar_url(h.email_or_none(cs.author),16)}"/> - </div> - <div title="${cs.author}" class="user">${h.shorter(h.person(cs.author),22)}</div> - </div> - <div class="date">${h.fmt_date(cs.date)}</div> - </div> - <div class="mid"> - <div class="message">${h.urlify_commit(cs.message, c.repo_name,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div> - <div class="expand"><span class="expandtext">↓ ${_('Show more')} ↓</span></div> - </div> - <div class="right"> - <div class="changes"> - <div id="changed_total_${cs.raw_id}" style="float:right;" class="changed_total tooltip" title="${h.tooltip(_('Affected number of files, click to show more details'))}">${len(cs.affected_files)}</div> + </td> + <td class="author"> + <img alt="gravatar" src="${h.gravatar_url(h.email_or_none(cs.author),16)}"/> + <span title="${cs.author}" class="user">${h.shorter(h.person(cs.author),22)}</span> + </td> + <td class="hash"> + <a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}"> + <span class="changeset_hash">${h.short_id(cs.raw_id)}</span> + </a> + </td> + <td class="date"> + <div class="date">${h.age(cs.date,True)}</div> + </td> + <td class="mid"> + <div class="log-container"> + <div class="message">${h.urlify_commit(cs.message, c.repo_name,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div> + <div class="expand"><span class="expandtext">↓ ${_('Show more')} ↓</span></div> + <div class="extra-container"> + %if c.comments.get(cs.raw_id,[]): <div class="comments-container"> - %if len(c.comments.get(cs.raw_id,[])) > 0: <div class="comments-cnt" title="${('comments')}"> - <a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id,anchor='comment-%s' % c.comments[cs.raw_id][0].comment_id)}"> - <div class="comments-cnt">${len(c.comments[cs.raw_id])}</div> - <img src="${h.url('/images/icons/comments.png')}"> - </a> + <a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id,anchor='comment-%s' % c.comments[cs.raw_id][0].comment_id)}"> + ${len(c.comments[cs.raw_id])} + </a> </div> - %endif </div> - <div class="changeset-status-container"> - %if c.statuses.get(cs.raw_id): - <div title="${_('Changeset status')}" class="changeset-status-lbl">${c.statuses.get(cs.raw_id)[1]}</div> - <div class="changeset-status-ico"> - %if c.statuses.get(cs.raw_id)[2]: - <a class="tooltip" title="${_('Click to open associated pull request #%s' % c.statuses.get(cs.raw_id)[2])}" href="${h.url('pullrequest_show',repo_name=c.statuses.get(cs.raw_id)[3],pull_request_id=c.statuses.get(cs.raw_id)[2])}"><img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses.get(cs.raw_id)[0])}" /></a> - %else: - <img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses.get(cs.raw_id)[0])}" /> - %endif - </div> - %endif - </div> - </div> - %if cs.parents: - %for p_cs in reversed(cs.parents): - <div class="parent">${_('Parent')} - <span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id), - h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span> + %endif + %if h.is_hg(c.rhodecode_repo): + %for book in cs.bookmarks: + <div class="bookbook" title="${'%s %s' % (_('bookmark'),book)}"> + ${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} + </div> + %endfor + %endif + %for tag in cs.tags: + <div class="tagtag" title="${'%s %s' % (_('tag'),tag)}"> + ${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} </div> %endfor - %else: - <div class="parent">${_('No parents')}</div> - %endif - - <span class="logtags"> - %if len(cs.parents)>1: - <span class="merge">${_('merge')}</span> - %endif - %if cs.branch: - <span class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}"> - ${h.link_to(h.shorter(cs.branch),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} - </span> + %if (not c.branch_name) and cs.branch: + <div class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}"> + ${h.link_to(h.shorter(cs.branch),h.url('changelog_home',repo_name=c.repo_name,branch=cs.branch))} + </div> %endif - %if h.is_hg(c.rhodecode_repo): - %for book in cs.bookmarks: - <span class="bookbook" title="${'%s %s' % (_('bookmark'),book)}"> - ${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} - </span> - %endfor - %endif - %for tag in cs.tags: - <span class="tagtag" title="${'%s %s' % (_('tag'),tag)}"> - ${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span> - %endfor - </span> - </div> - </div> + </div> + </div> + </td> + </tr> + %endfor + </tbody> + </table> - %endfor + <div class="pagination-wh pagination-left"> ${c.pagination.pager('$link_previous ~2~ $link_next')} </div> - </div> </div> + </div> - <script type="text/javascript" src="${h.url('/js/graph.js')}"></script> - <script type="text/javascript"> - YAHOO.util.Event.onDOMReady(function(){ + <script type="text/javascript" src="${h.url('/js/graph.js')}"></script> + <script type="text/javascript"> + YAHOO.util.Event.onDOMReady(function(){ - //Monitor range checkboxes and build a link to changesets - //ranges - var checkboxes = YUD.getElementsByClassName('changeset_range'); - var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}"; - var pr_tmpl = "${h.url('pullrequest_home',repo_name=c.repo_name)}"; + //Monitor range checkboxes and build a link to changesets + //ranges + var checkboxes = YUD.getElementsByClassName('changeset_range'); + var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}"; + var pr_tmpl = "${h.url('pullrequest_home',repo_name=c.repo_name)}"; var checkbox_checker = function(e){ - var checked_checkboxes = []; - for (pos in checkboxes){ - if(checkboxes[pos].checked){ - checked_checkboxes.push(checkboxes[pos]); - } + var checked_checkboxes = []; + for (pos in checkboxes){ + if(checkboxes[pos].checked){ + checked_checkboxes.push(checkboxes[pos]); } - if(YUD.get('open_new_pr')){ + } + if(YUD.get('open_new_pr')){ if(checked_checkboxes.length>1){ YUD.setStyle('open_new_pr','display','none'); } else { @@ -171,29 +146,28 @@ } } - if(checked_checkboxes.length>0){ - var rev_end = checked_checkboxes[0].name; - var rev_start = checked_checkboxes[checked_checkboxes.length-1].name; - var url = url_tmpl.replace('__REVRANGE__', - rev_start+'...'+rev_end); + if(checked_checkboxes.length>0){ + var rev_end = checked_checkboxes[0].name; + var rev_start = checked_checkboxes[checked_checkboxes.length-1].name; + var url = url_tmpl.replace('__REVRANGE__', + rev_start+'...'+rev_end); - var link = (rev_start == rev_end) - ? _TM['Show selected change __S'] - : _TM['Show selected changes __S -> __E']; + var link = (rev_start == rev_end) + ? _TM['Show selected change __S'] + : _TM['Show selected changes __S -> __E']; - link = link.replace('__S',rev_start.substr(0,6)); - link = link.replace('__E',rev_end.substr(0,6)); - YUD.get('rev_range_container').href = url; - YUD.get('rev_range_container').innerHTML = link; - YUD.setStyle('rev_range_container','display',''); - YUD.setStyle('rev_range_clear','display',''); + link = link.replace('__S',rev_start.substr(0,6)); + link = link.replace('__E',rev_end.substr(0,6)); + YUD.get('rev_range_container').href = url; + YUD.get('rev_range_container').innerHTML = link; + YUD.setStyle('rev_range_container','display',''); + YUD.setStyle('rev_range_clear','display',''); - YUD.get('open_new_pr').href = pr_tmpl + '?rev_start={0}&rev_end={1}'.format(rev_start,rev_end); + YUD.get('open_new_pr').href = pr_tmpl + '?rev_start={0}&rev_end={1}'.format(rev_start,rev_end); YUD.setStyle('compare_fork','display','none'); - } - else{ - YUD.setStyle('rev_range_container','display','none'); - YUD.setStyle('rev_range_clear','display','none'); + } else{ + YUD.setStyle('rev_range_container','display','none'); + YUD.setStyle('rev_range_clear','display','none'); if (checkboxes){ YUD.get('open_new_pr').href = pr_tmpl + '?rev_end={0}'.format(checkboxes[0].name); } @@ -203,94 +177,86 @@ YUE.onDOMReady(checkbox_checker); YUE.on(checkboxes,'click', checkbox_checker); - YUE.on('rev_range_clear','click',function(e){ - for (var i=0; i<checkboxes.length; i++){ - var cb = checkboxes[i]; - cb.checked = false; - } + YUE.on('rev_range_clear','click',function(e){ + for (var i=0; i<checkboxes.length; i++){ + var cb = checkboxes[i]; + cb.checked = false; + } checkbox_checker(); - YUE.preventDefault(e); - }) - - var msgs = YUQ('.message'); - // get first element height - var el = YUQ('#graph_content .container')[0]; - var row_h = el.clientHeight; - for(var i=0;i<msgs.length;i++){ - var m = msgs[i]; - - var h = m.clientHeight; - var pad = YUD.getStyle(m,'padding'); - if(h > row_h){ - var offset = row_h - (h+12); - YUD.setStyle(m.nextElementSibling,'display','block'); - YUD.setStyle(m.nextElementSibling,'margin-top',offset+'px'); - }; - } - YUE.on(YUQ('.expand'),'click',function(e){ - var elem = e.currentTarget.parentNode.parentNode; - YUD.setStyle(e.currentTarget,'display','none'); - YUD.setStyle(elem,'height','auto'); - - //redraw the graph, line_count and jsdata are global vars - set_canvas(100); - - var r = new BranchRenderer(); - r.render(jsdata,100,line_count); - - }) + YUE.preventDefault(e); + }); - // Fetch changeset details - YUE.on(YUD.getElementsByClassName('changed_total'),'click',function(e){ - var id = e.currentTarget.id; - var url = "${h.url('changelog_details',repo_name=c.repo_name,cs='__CS__')}"; - var url = url.replace('__CS__',id.replace('changed_total_','')); - ypjax(url,id,function(){tooltip_activate()}); - }); - - // change branch filter - YUE.on(YUD.get('branch_filter'),'change',function(e){ - var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value; - var url_main = "${h.url('changelog_home',repo_name=c.repo_name)}"; - var url = "${h.url('changelog_home',repo_name=c.repo_name,branch='__BRANCH__')}"; - var url = url.replace('__BRANCH__',selected_branch); - if(selected_branch != ''){ - window.location = url; - }else{ - window.location = url_main; - } - - }); + var msgs = YUQ('.message'); + // get first element height + var el = YUQ('#graph_content .container')[0]; + var row_h = el.clientHeight; + for(var i=0;i<msgs.length;i++){ + var m = msgs[i]; - function set_canvas(width) { - 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); - c.style.height=width+'px'; - canvas.setAttribute('width',width); + var h = m.clientHeight; + var pad = YUD.getStyle(m,'padding'); + if(h > row_h){ + var offset = row_h - (h+12); + YUD.setStyle(m.nextElementSibling,'display','block'); + YUD.setStyle(m.nextElementSibling,'margin-top',offset+'px'); }; - var heads = 1; - var line_count = 0; - var jsdata = ${c.jsdata|n}; + } + YUE.on(YUQ('.expand'),'click',function(e){ + var elem = e.currentTarget.parentNode.parentNode; + YUD.setStyle(e.currentTarget,'display','none'); + YUD.setStyle(elem,'height','auto'); - for (var i=0;i<jsdata.length;i++) { - var in_l = jsdata[i][2]; - for (var j in in_l) { - var m = in_l[j][1]; - if (m > line_count) - line_count = m; - } - } + //redraw the graph, line_count and jsdata are global vars set_canvas(100); var r = new BranchRenderer(); r.render(jsdata,100,line_count); }); - </script> + + // change branch filter + YUE.on(YUD.get('branch_filter'),'change',function(e){ + var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value; + var url_main = "${h.url('changelog_home',repo_name=c.repo_name)}"; + var url = "${h.url('changelog_home',repo_name=c.repo_name,branch='__BRANCH__')}"; + var url = url.replace('__BRANCH__',selected_branch); + if(selected_branch != ''){ + window.location = url; + }else{ + window.location = url_main; + } + + }); + + function set_canvas(width) { + 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); + //c.style.height=width+'px'; + canvas.setAttribute('width',width); + }; + var heads = 1; + var line_count = 0; + var jsdata = ${c.jsdata|n}; + + for (var i=0;i<jsdata.length;i++) { + var in_l = jsdata[i][2]; + for (var j in in_l) { + var m = in_l[j][1]; + if (m > line_count) + line_count = m; + } + } + set_canvas(100); + + var r = new BranchRenderer(); + r.render(jsdata,100,line_count); + + }); + </script> %else: ${_('There are no changes yet')} %endif
--- a/rhodecode/templates/changeset/changeset.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/changeset/changeset.html Mon Mar 18 18:17:58 2013 +0100 @@ -7,10 +7,6 @@ </%def> <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » ${_('changeset')} - <span class='hash'>r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}</span> </%def> @@ -19,6 +15,7 @@ </%def> <%def name="main()"> +${self.context_bar('changelog')} <div class="box"> <!-- box / title --> <div class="title">
--- a/rhodecode/templates/files/files.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/files/files.html Mon Mar 18 18:17:58 2013 +0100 @@ -5,11 +5,7 @@ </%def> <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » - ${_('files')} + ${_('Files')} %if c.file: @ r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} %endif @@ -20,6 +16,7 @@ </%def> <%def name="main()"> + ${self.context_bar('files')} <div class="box"> <!-- box / title --> <div class="title">
--- a/rhodecode/templates/followers/followers.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/followers/followers.html Mon Mar 18 18:17:58 2013 +0100 @@ -6,17 +6,14 @@ </%def> <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » - ${_('followers')} + ${_('Followers')} </%def> <%def name="page_nav()"> ${self.menu('followers')} </%def> <%def name="main()"> +${self.context_bar('followers')} <div class="box"> <!-- box / title --> <div class="title">
--- a/rhodecode/templates/forks/forks.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/forks/forks.html Mon Mar 18 18:17:58 2013 +0100 @@ -6,17 +6,14 @@ </%def> <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » - ${_('forks')} + ${_('Forks')} </%def> <%def name="page_nav()"> ${self.menu('forks')} </%def> <%def name="main()"> +${self.context_bar('forks')} <div class="box"> <!-- box / title --> <div class="title">
--- a/rhodecode/templates/index_base.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/index_base.html Mon Mar 18 18:17:58 2013 +0100 @@ -295,7 +295,7 @@ MSG_SORTASC:"${_('Click to sort ascending')}", MSG_SORTDESC:"${_('Click to sort descending')}", - MSG_EMPTY:"${_('No records found.')}", + MSG_EMPTY:"${_('No repositories found.')}", MSG_ERROR:"${_('Data error.')}", MSG_LOADING:"${_('Loading...')}", }
--- a/rhodecode/templates/pullrequests/pullrequest_show_all.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/pullrequests/pullrequest_show_all.html Mon Mar 18 18:17:58 2013 +0100 @@ -5,15 +5,11 @@ </%def> <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » - ${_('pull requests')} + ${_('Pull requests')} </%def> <%def name="main()"> - +${self.context_bar('showpullrequest')} <div class="box"> <!-- box / title --> <div class="title">
--- a/rhodecode/templates/repo_switcher_list.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/repo_switcher_list.html Mon Mar 18 18:17:58 2013 +0100 @@ -11,6 +11,6 @@ %elif not repo['dbrepo']['private'] and c.visual.show_public_icon: <img src="${h.url('/images/icons/lock_open.png')}" alt="${_('Public repository')}" class="repo_switcher_type" /> %endif - ${h.link_to(repo['name'],h.url('summary_home',repo_name=repo['name']),class_="repo_name %s" % repo['dbrepo']['repo_type'])} + ${h.link_to(repo['name'],h.url('summary_home',repo_name=repo['name']),class_="repo_name thin %s" % repo['dbrepo']['repo_type'])} </li> %endfor
--- a/rhodecode/templates/search/search.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/search/search.html Mon Mar 18 18:17:58 2013 +0100 @@ -11,13 +11,9 @@ <%def name="breadcrumbs_links()"> %if c.repo_name: - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » - ${_('search')} + ${_('Search')} %else: - ${_('search in all repositories')} + ${_('Search in all repositories')} %endif %if c.cur_query: » @@ -33,7 +29,7 @@ %endif </%def> <%def name="main()"> - + ${self.context_bar('options')} <div class="box"> <!-- box / title --> <div class="title">
--- a/rhodecode/templates/shortlog/shortlog.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/shortlog/shortlog.html Mon Mar 18 18:17:58 2013 +0100 @@ -7,16 +7,12 @@ <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » %if c.file_history: - ${h.link_to(_('shortlog'),h.url('shortlog_home',repo_name=c.repo_name))} + ${h.link_to(_('Shortlog'),h.url('shortlog_home',repo_name=c.repo_name))} » ${c.file_history} %else: - ${_('shortlog')} + ${_('Shortlog')} %endif </%def> @@ -24,6 +20,7 @@ ${self.menu('shortlog')} </%def> <%def name="main()"> + ${self.context_bar('options')} <div class="box"> <!-- box / title --> <div class="title">
--- a/rhodecode/templates/summary/summary.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/summary/summary.html Mon Mar 18 18:17:58 2013 +0100 @@ -5,11 +5,7 @@ </%def> <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » - ${_('summary')} + ${_('Summary')} </%def> <%def name="page_nav()"> @@ -22,6 +18,7 @@ </%def> <%def name="main()"> + ${self.context_bar('summary')} <% summary = lambda n:{False:'summary-short'}.get(n) %> @@ -43,30 +40,6 @@ <label>${_('Name')}:</label> </div> <div class="input ${summary(c.show_stats)}"> - <div style="float:right;padding:5px 0px 0px 5px"> - %if c.rhodecode_user.username != 'default': - ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='atom_icon')} - %else: - ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='atom_icon')} - %endif - </div> - %if c.rhodecode_user.username != 'default': - %if c.following: - <span id="follow_toggle" class="following tooltip" title="${_('Stop following this repository')}" - onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')"> - </span> - %else: - <span id="follow_toggle" class="follow tooltip" title="${_('Start following this repository')}" - onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')"> - </span> - %endif - <div style="float:right;padding:0px 0px 0px 0px"> - <span class="reposize tooltip" title="${_('Click to show size of repository')}" - onclick="javascript:showRepoSize('repo_size','${c.dbrepo.repo_name}','${str(h.get_token())}')"> - </span> - <span id="repo_size"></span> - </div> - %endif: ## locking icon %if c.rhodecode_db_repo.enable_locking: @@ -96,7 +69,7 @@ ##FORK %if c.dbrepo.fork: - <div style="margin-top:5px;clear:both""> + <div style="margin-top:5px;clear:both"> <a href="${h.url('summary_home',repo_name=c.dbrepo.fork.repo_name)}"><img class="icon" alt="${_('public')}" title="${_('Fork of')} ${c.dbrepo.fork.repo_name}" src="${h.url('/images/icons/arrow_divide.png')}"/> ${_('Fork of')} ${c.dbrepo.fork.repo_name} </a> @@ -188,7 +161,45 @@ %endif </div> </div> - </div> + </div> + <div id="summary-menu-stats"> + <ul> + <li> + <a class="followers" title="${_('Followers')}" href="${h.url('repo_followers_home',repo_name=c.repo_name)}"> + ${_('Followers')} + <span id="current_followers_count">${c.repository_followers}</span> + </a> + </li> + <li> + <a class="forks" title="${_('Forks')}" href="${h.url('repo_forks_home',repo_name=c.repo_name)}"> + ${_('Forks')} + <span>${c.repository_forks}</span> + </a> + </li> + <li> + %if h.HasRepoPermissionAll('repository.admin')(c.repo_name): + %if h.HasPermissionAll('hg.admin')('access settings on repository'): + ${h.link_to(_('Settings'),h.url('edit_repo',repo_name=c.repo_name),class_='settings')} + %else: + ${h.link_to(_('Settings'),h.url('repo_settings_home',repo_name=c.repo_name),class_='settings')} + %endif + %endif + </li> + <li> + %if c.rhodecode_user.username != 'default': + ${h.link_to(_('Feed'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='feed')} + %else: + ${h.link_to(_('Feed'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='feed')} + %endif + </li> + %if c.rhodecode_user.username != 'default': + <li class="repo_size"> + <a href="#" class="repo-size" onclick="javascript:showRepoSize('repo_size_2','${c.dbrepo.repo_name}','${str(h.get_token())}')">Repository Size</a> + <span id="repo_size_2"></span> + </li> + %endif + </ul> + </div> </div> </div>
--- a/rhodecode/templates/tags/tags.html Mon Mar 11 17:59:38 2013 +0100 +++ b/rhodecode/templates/tags/tags.html Mon Mar 18 18:17:58 2013 +0100 @@ -8,17 +8,14 @@ <%def name="breadcrumbs_links()"> <input class="q_filter_box" id="q_filter_tags" size="15" type="text" name="filter" value="${_('quick filter...')}"/> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)} - » - ${_('tags')} + ${_('Tags')} </%def> <%def name="page_nav()"> ${self.menu('tags')} </%def> <%def name="main()"> +${self.context_bar('switch-to')} <div class="box"> <!-- box / title --> <div class="title">