Add basic user interface for application repos

Adds support for creating app repos, viewing app repos and seeing the list of app repos in the Quay UI.
This commit is contained in:
Joseph Schorr 2017-03-23 17:16:19 -04:00
parent 3dd6e6919d
commit f9e6110f73
47 changed files with 1009 additions and 106 deletions

View file

@ -30,6 +30,7 @@
<!-- Signed in -->
<ul class="nav navbar-nav navbar-links" ng-if="!user.anonymous">
<li quay-require="['APP_REGISTRY']"><a ng-href="/application/" quay-section="application">Applications</a></li>
<li><a ng-href="/repository/" quay-section="repository">Repositories</a></li>
<li><a ng-href="/tutorial/" quay-section="tutorial">Tutorial</a></li>
<li><a href="https://docs.quay.io/" ng-safenewtab>Docs</a></li>

View file

@ -1,2 +1,3 @@
<i class="fa fa-lock fa-lg" style="{{ repo.is_public ? 'visibility: hidden' : 'visibility: inherit' }}" data-title="Private Repository"></i>
<i class="fa fa-hdd-o"></i>
<i class="fa fa-hdd-o" ng-if="repo.kind == 'image'"></i>
<i class="fa ci-appcube" ng-if="repo.kind == 'application'"></i>

View file

@ -28,7 +28,11 @@
<div class="col-lg-10 col-md-10 col-sm-10 col-xs-10 repo-panel-title-row">
<span class="repo-icon repo-circle no-background" repo="repository"></span>
<a ng-href="/repository/{{repository.namespace}}/{{ repository.name }}" class="repo-panel-repo-link"
data-repo="{{repository.namespace}}/{{ repository.name }}">
data-repo="{{repository.namespace}}/{{ repository.name }}" ng-if="repoKind != 'application'">
<span ng-show="!hideNamespaces">{{ repository.namespace }}/</span>{{ repository.name }}
</a>
<a ng-href="/application/{{repository.namespace}}/{{ repository.name }}" class="repo-panel-repo-link"
data-repo="{{repository.namespace}}/{{ repository.name }}" ng-if="repoKind == 'application'">
<span ng-show="!hideNamespaces">{{ repository.namespace }}/</span>{{ repository.name }}
</a>
</div>

View file

@ -38,7 +38,7 @@
<td class="hidden-xs"
ng-class="tablePredicateClass('is_starred', options.predicate, options.reverse)"
style="width: 70px"
ng-if="loggedIn">
ng-if="loggedIn && repoKind != 'application'">
<a ng-click="orderBy('is_starred')">Star</a>
</td>
</thead>
@ -47,7 +47,11 @@
<tr ng-repeat="repository in orderedRepositories.entries | slice:(reposPerPage * options.page):(reposPerPage * (options.page + 1))">
<td class="repo-name-icon">
<span class="avatar" size="24" data="::getAvatarData(repository.namespace)"></span>
<a href="/repository/{{ ::repository.namespace }}/{{ ::repository.name }}">
<a href="/repository/{{ ::repository.namespace }}/{{ ::repository.name }}" ng-if="repoKind != 'application'">
<span class="namespace">{{ ::repository.namespace }}</span>
<span class="name">{{ ::repository.name }}</span>
</a>
<a href="/application/{{ ::repository.namespace }}/{{ ::repository.name }}" ng-if="repoKind == 'application'">
<span class="namespace">{{ ::repository.namespace }}</span>
<span class="name">{{ ::repository.name }}</span>
</a>
@ -62,7 +66,7 @@
<span class="strength-indicator" value="::repository.popularity" maximum="::maxPopularity"
log-base="10"></span>
</td>
<td ng-show="loggedIn">
<td ng-show="loggedIn && repoKind != 'application'">
<span class="repo-star" repository="::repository"
star-toggled="starToggled({'repository': repository})"></span>
</td>

View file

@ -12,7 +12,8 @@
<!-- Table View -->
<div ng-if="showAsList">
<div class="repo-list-table" repositories-resources="resources" namespaces="namespaces"
star-toggled="starToggled({'repository': repository})">
star-toggled="starToggled({'repository': repository})"
repo-kind="{{ repoKind }}">
</div>
</div>
@ -22,7 +23,8 @@
<div class="repo-list-grid" repositories-resource="starredRepositories"
starred="true"
star-toggled="starToggled({'repository': repository})"
ng-if="starredRepositories">
ng-if="starredRepositories"
repo-kind="{{ repoKind }}">
</div>
<!-- User and Org Repository Listings -->
@ -31,7 +33,8 @@
starred="false" namespace="namespace"
star-toggled="starToggled({'repository': repository})"
hide-title="namespaces.length == 1"
hide-namespaces="true">
hide-namespaces="true"
repo-kind="{{ repoKind }}">
</div>
</div>
</div>

View file

@ -1,5 +1,5 @@
<div class="repo-panel-settings-element">
<h3 class="tab-header">Repository Settings</h3>
<h3 class="tab-header"><span class="repository-title" repository="repository"></span> Settings</h3>
<!-- User/Team Permissions -->
<div class="co-panel" id="repoPermissions">
@ -11,7 +11,7 @@
</div>
<!-- Access Tokens (DEPRECATED) -->
<div class="co-panel" ng-show="hasTokens">
<div class="co-panel" ng-show="hasTokens && repository.kind == 'image'">
<div class="co-panel-heading"><i class="fa fa-key"></i> Access Token Permissions</div>
<div class="panel-body" style="padding-top: 5px;">
<div class="repository-tokens-table" repository="repository" has-tokens="hasTokens" is-enabled="isEnabled"></div>
@ -19,18 +19,22 @@
</div>
<!-- Events and Notifications -->
<div class="repository-events-table" repository="repository"
is-enabled="isEnabled"></div>
<div ng-if="repository.kind == 'image'">
<div class="repository-events-table" repository="repository"
is-enabled="isEnabled"></div>
</div>
<!-- Visibility settings -->
<div class="co-panel">
<div class="co-panel-heading"><i class="fa fa-unlock-alt"></i> Repository Visibility</div>
<div class="co-panel-heading"><i class="fa fa-unlock-alt"></i>
<span class="repository-title" repository="repository"></span> Visibility
</div>
<div class="cor-loader" ng-show="!repository"></div>
<div ng-show="repository">
<!-- Public/Private -->
<div class="panel-body panel-section lock-section" ng-if="!repository.is_public">
<i class="fa fa-lock lock-icon"></i>
<div>This repository is currently <b>private</b>. Only users on the permissions list may view and interact with it.</div>
<div>This <span class="repository-title" repository="repository"></span> is currently <b>private</b>. Only users on the permissions list may view and interact with it.</div>
<button class="btn btn-default" ng-click="askChangeAccess('public')">
<i class="fa fa-unlock"></i>Make Public
@ -40,7 +44,7 @@
<div class="panel-body panel-section lock-section" ng-if="repository.is_public">
<i class="fa fa-unlock lock-icon"></i>
<div>This repository is currently <b>public</b> and is visible to all users, and may be pulled by all users.</div>
<div>This <span class="repository-title" repository="repository"></span> is currently <b>public</b> and is visible to all users, and may be pulled by all users.</div>
<button class="btn btn-default" ng-click="askChangeAccess('private')" ng-show="!planRequired">
<i class="fa fa-lock"></i>Make Private
@ -56,17 +60,19 @@
<!-- Delete repository -->
<div class="co-panel">
<div class="co-panel-heading"><i class="fa fa-trash"></i> Delete Repository</div>
<div class="co-panel-heading">
<i class="fa fa-trash"></i> Delete <span class="repository-title" repository="repository"></span>
</div>
<div class="cor-loader" ng-show="!repository"></div>
<div ng-show="repository">
<div class="panel-body panel-section">
<div class="co-alert co-alert-danger">
<button class="btn btn-danger delete-btn" ng-click="askDelete()">
<i class="fa fa-trash"></i>
Delete Repository
Delete <span class="repository-title" repository="repository"></span>
</button>
Deleting a repository <b>cannot be undone</b>. Here be dragons!
Deleting a <span class="repository-title" repository="repository"></span> <b>cannot be undone</b>. Here be dragons!
</div>
</div>
</div>
@ -74,7 +80,7 @@
<!-- Build Status Badge -->
<div class="co-panel hidden-xs">
<div class="co-panel hidden-xs" ng-if="repository.kind == 'image'">
<div class="co-panel-heading"><i class="fa fa-tasks"></i> Build Status Badge</div>
<div class="cor-loader" ng-show="!repository"></div>
<div ng-show="repository">
@ -123,12 +129,12 @@
<div class="cor-confirm-dialog"
dialog-context="deleteRepoInfo"
dialog-action="deleteRepo(info, callback)"
dialog-title="Delete Repository"
dialog-action-title="Delete Repository">
dialog-title="Delete"
dialog-action-title="Delete">
<div class="co-alert co-alert-danger" style="margin-bottom: 10px;">
This action cannot be undone!
</div>
Continue with deletion of this repository?
Continue with deletion of this <span class="repository-title" repository="repository"></span>?
</div>
</div>

View file

@ -0,0 +1,4 @@
<span class="repository-title-element">
<span ng-if="repository.kind == 'image'">Repository</span>
<span ng-if="repository.kind == 'application'">Application</span>
</span>