diff --git a/data/model.py b/data/model.py index 831e66fd3..05d9ff681 100644 --- a/data/model.py +++ b/data/model.py @@ -326,7 +326,7 @@ def verify_user(username, password): def get_user_organizations(username): UserAlias = User.alias() - all_teams = User.select().join(Team).join(TeamMember) + all_teams = User.select().distinct().join(Team).join(TeamMember) with_user = all_teams.join(UserAlias, on=(UserAlias.id == TeamMember.user)) return with_user.where(User.organization == True, UserAlias.username == username) diff --git a/endpoints/api.py b/endpoints/api.py index 5c2636e47..bd9afc873 100644 --- a/endpoints/api.py +++ b/endpoints/api.py @@ -74,7 +74,8 @@ def get_logged_in_user(): return { 'name': o.username, 'gravatar': compute_hash(o.email), - 'is_org_admin': admin_org.can() + 'is_org_admin': admin_org.can(), + 'can_create_repo': admin_org.can() or CreateRepositoryPermission(o.username).can() } if current_user.is_anonymous(): @@ -90,7 +91,8 @@ def get_logged_in_user(): 'email': user.email, 'gravatar': compute_hash(user.email), 'askForPassword': user.password_hash is None, - 'organizations': [org_view(o) for o in organizations] + 'organizations': [org_view(o) for o in organizations], + 'can_create_repo': True }) diff --git a/endpoints/web.py b/endpoints/web.py index 6596a52ba..9f8712629 100644 --- a/endpoints/web.py +++ b/endpoints/web.py @@ -58,6 +58,11 @@ def guide(): return index('') +@app.route('/organizations/') +@app.route('/organizations/new/') +def organizations(): + return index('') + @app.route('/user/') def user(): return index('') diff --git a/static/css/quay.css b/static/css/quay.css index 0fead2172..5671c1109 100644 --- a/static/css/quay.css +++ b/static/css/quay.css @@ -46,6 +46,26 @@ font-size: 14px; } +.namespace-selector-dropdown .namespace-item { + position: relative; +} + +.namespace-selector-dropdown .namespace-item .fa { + position: absolute; + right: 12px; + top: 12px; + color: #aaa; +} + +.namespace-selector-dropdown .namespace-item.disabled img { + -webkit-filter: grayscale(1); + opacity: 0.5; +} + +.namespace-selector-dropdown .namespace-item .tooltip-inner { + min-width: 200px; +} + .user-notification { background: red; } @@ -930,6 +950,20 @@ p.editable:hover i { margin-bottom: 40px; } +.repo-list .button-bar-right { + float: right; +} + +.repo-list .section-header { + padding: 10px; + border-bottom: 1px solid #eee; + margin-bottom: 10px; +} + +.repo-list .button-bar-right button { + margin-right: 10px; +} + .repo-listing { display: block; margin-bottom: 20px; @@ -1559,6 +1593,24 @@ p.editable:hover i { display: inline-block; } +.org-list h2 { + margin-bottom: 20px; +} + +.org-list .button-bar-right { + text-align: right; +} + +.org-list .organization-listing { + font-size: 18px; + padding: 10px; +} + +.org-list .organization-listing img { + margin-left: 10px; + margin-right: 16px; +} + .plan-manager-element .plans-table thead td { color: #aaa; font-weight: bold; diff --git a/static/directives/namespace-selector.html b/static/directives/namespace-selector.html index bc8abc9a2..98d91394d 100644 --- a/static/directives/namespace-selector.html +++ b/static/directives/namespace-selector.html @@ -10,11 +10,17 @@ {{namespace}}
@@ -45,6 +46,7 @@ 1 +