2015-04-07 22:33:43 +00:00
|
|
|
<span class="header-bar-parent">
|
2016-01-20 23:03:21 +00:00
|
|
|
<div class="header-bar-element" ng-class="Features.BILLING ? 'dark' : 'light'">
|
2015-06-29 09:33:00 +00:00
|
|
|
<div class="header-bar-content" ng-class="searchVisible ? 'search-visible' : ''">
|
|
|
|
<!-- Quay -->
|
|
|
|
<div class="navbar-header">
|
|
|
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
|
|
|
|
≡
|
|
|
|
</button>
|
|
|
|
<a class="navbar-brand" ng-href="{{ user.anonymous ? '/' : '/repository/' }}" target="{{ appLinkTarget() }}">
|
2015-10-22 18:56:36 +00:00
|
|
|
<span id="quay-logo" ng-style="{'background-image': 'url(' + getEnterpriseLogo() + ')'}"
|
|
|
|
ng-class="Config.ENTERPRISE_LOGO_URL ? 'enterprise-logo' : 'hosted-logo'"></span>
|
2015-06-29 09:33:00 +00:00
|
|
|
</a>
|
|
|
|
<span class="user-tools visible-xs" style="float: right;">
|
|
|
|
<i class="fa fa-search fa-lg user-tool" ng-click="toggleSearch()"
|
|
|
|
data-placement="bottom" data-title="Search" bs-tooltip
|
|
|
|
ng-if="searchingAllowed"></i>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- Collapsable stuff -->
|
|
|
|
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
|
|
|
<!-- Not signed in -->
|
|
|
|
<ul class="nav navbar-nav navbar-links" ng-if="user.anonymous">
|
|
|
|
<li><a ng-href="/tour/" target="{{ appLinkTarget() }}" quay-section="tour">Tour</a></li>
|
|
|
|
<li><a ng-href="/tutorial/" target="{{ appLinkTarget() }}" quay-section="tutorial">Tutorial</a></li>
|
|
|
|
<li quay-require="['BILLING']"><a ng-href="/plans/" target="{{ appLinkTarget() }}" quay-section="plans">Pricing</a></li>
|
2015-11-13 17:29:48 +00:00
|
|
|
<li><a href="https://docs.quay.io/" target="_blank">Docs</a></li>
|
|
|
|
<li><a href="https://blog.quay.io/" target="_blank">Blog</a></li>
|
2015-06-29 09:33:00 +00:00
|
|
|
</ul>
|
|
|
|
|
|
|
|
<!-- Signed in -->
|
|
|
|
<ul class="nav navbar-nav navbar-links" ng-if="!user.anonymous">
|
|
|
|
<li><a ng-href="/repository/" target="{{ appLinkTarget() }}" quay-section="repository">Repositories</a></li>
|
|
|
|
<li><a ng-href="/tutorial/" target="{{ appLinkTarget() }}" quay-section="tutorial">Tutorial</a></li>
|
2015-11-13 17:29:48 +00:00
|
|
|
<li><a href="https://docs.quay.io/" target="_blank">Docs</a></li>
|
|
|
|
<li><a href="https://blog.quay.io/" target="_blank">Blog</a></li>
|
2015-06-29 09:33:00 +00:00
|
|
|
</ul>
|
|
|
|
|
|
|
|
<!-- Phone -->
|
|
|
|
<ul class="nav navbar-nav navbar-right visible-xs" ng-switch on="user.anonymous">
|
|
|
|
<li ng-switch-when="false">
|
|
|
|
<a href="/user/{{ user.username }}?tab=settings" class="user-view" target="{{ appLinkTarget() }}">
|
|
|
|
<span class="avatar" size="32" data="user.avatar"></span>
|
|
|
|
{{ user.username }}
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li ng-switch-default>
|
2015-09-04 20:14:46 +00:00
|
|
|
<a class="user-view" href="/signin/" target="{{ appLinkTarget() }}" ng-if="!externalSigninUrl">Sign in</a>
|
|
|
|
<a class="user-view" ng-href="{{ externalSigninUrl }}" ng-if="externalSigninUrl">Sign in</a>
|
2015-06-29 09:33:00 +00:00
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<!-- Normal -->
|
|
|
|
<ul class="nav navbar-nav navbar-right hidden-xs" ng-switch on="user.anonymous">
|
|
|
|
<li>
|
|
|
|
<span class="navbar-left user-tools">
|
|
|
|
<i class="fa fa-search fa-lg user-tool" ng-click="toggleSearch()"
|
|
|
|
data-placement="bottom" data-title="Search - Keyboard Shortcut: /" bs-tooltip
|
|
|
|
ng-if="searchingAllowed"></i>
|
|
|
|
</span>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<span class="navbar-left user-tools with-menu" ng-show="!user.anonymous">
|
|
|
|
<span class="dropdown">
|
|
|
|
<a href="javascript:void(0)" class="dropdown-toggle new-menu" data-toggle="dropdown">
|
|
|
|
<i class="fa fa-plus user-tool"
|
|
|
|
data-placement="bottom" data-title="Create New..." bs-tooltip></i>
|
|
|
|
<b class="caret"></b>
|
|
|
|
</a>
|
|
|
|
<ul class="dropdown-menu context-dropdown">
|
|
|
|
<li>
|
|
|
|
<a href="/organizations/new">
|
|
|
|
<span class="avatar" size="16" data="{'name': '+', color: '#ccc'}"></span>
|
|
|
|
New Organization
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<a href="/new{{ getNamespace(currentPageContext) ? '?namespace=' + getNamespace(currentPageContext) : '' }}">
|
|
|
|
<i class="fa fa-hdd-o"></i> New Repository
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li role="presentation" class="divider" ng-if="getNamespace(currentPageContext) && canAdmin(getNamespace(currentPageContext))"></li>
|
|
|
|
<li role="presentation" class="dropdown-header"
|
|
|
|
ng-if="getNamespace(currentPageContext) && canAdmin(getNamespace(currentPageContext))">
|
|
|
|
Namespace {{ getNamespace(currentPageContext) }}
|
|
|
|
</li>
|
|
|
|
<li ng-if="isOrganization(getNamespace(currentPageContext)) && canAdmin(getNamespace(currentPageContext))">
|
|
|
|
<a href="javascript:void(0)" ng-click="createTeam(currentPageContext)">
|
|
|
|
<i class="fa fa-group"></i> New Team
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li ng-if="canAdmin(getNamespace(currentPageContext))">
|
|
|
|
<a href="javascript:void(0)" ng-click="createRobot(currentPageContext)">
|
|
|
|
<i class="fa ci-robot"></i> New Robot Account
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li role="presentation" class="divider" ng-if="currentPageContext.repository && currentPageContext.repository.can_write"></li>
|
|
|
|
<li role="presentation" class="dropdown-header"
|
|
|
|
ng-if="currentPageContext.repository && currentPageContext.repository.can_write">
|
|
|
|
Repository {{ currentPageContext.repository.namespace }}/{{ currentPageContext.repository.name }}
|
|
|
|
</li>
|
|
|
|
<li ng-if="currentPageContext.repository && currentPageContext.repository.can_write">
|
|
|
|
<a href="javascript:void(0)" ng-click="startBuild()">
|
|
|
|
<i class="fa fa-tasks"></i> New Dockerfile Build
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</span>
|
|
|
|
</span>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
<li>
|
|
|
|
<span class="navbar-left user-tools" ng-show="!user.anonymous">
|
|
|
|
<a href="javascript:void(0)" data-template="/static/directives/notification-bar.html"
|
|
|
|
data-container="body" data-animation="am-slide-right" bs-aside>
|
|
|
|
<i class="fa fa-bell user-tool"
|
|
|
|
data-placement="bottom" data-title="Notifications" bs-tooltip></i>
|
|
|
|
<span class="notifications-bubble"></span>
|
|
|
|
</a>
|
|
|
|
</span>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
<li class="dropdown" ng-switch-when="false">
|
|
|
|
<a href="javascript:void(0)" class="dropdown-toggle user-dropdown user-view" data-toggle="dropdown">
|
|
|
|
<span class="avatar" size="32" data="user.avatar"></span>
|
|
|
|
{{ user.username }}
|
|
|
|
<b class="caret"></b>
|
|
|
|
</a>
|
|
|
|
<ul class="dropdown-menu">
|
|
|
|
<li>
|
|
|
|
<a href="/user/{{ user.username }}?tab=settings" target="{{ appLinkTarget() }}">
|
|
|
|
Account Settings
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li ng-if="user.super_user"><a href="/superuser/"><strong>Super User Admin Panel</strong></a></li>
|
|
|
|
<li><a href="javascript:void(0)" ng-click="signout()">Sign out</a></li>
|
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
<li ng-switch-default>
|
2015-09-04 20:14:46 +00:00
|
|
|
<a class="user-view" href="/signin/" target="{{ appLinkTarget() }}" ng-if="!externalSigninUrl">Sign in</a>
|
|
|
|
<a class="user-view" ng-href="{{ externalSigninUrl }}" ng-if="externalSigninUrl">Sign in</a>
|
2015-06-29 09:33:00 +00:00
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div><!-- /.navbar-collapse -->
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="search-box" ng-class="getSearchBoxClasses(searchVisible, searchResultState)">
|
|
|
|
<div class="search-label">Search For</div>
|
|
|
|
<div class="search-box-wrapper">
|
|
|
|
<input id="search-box-input" type="search" placeholder="(Enter Search Terms)"
|
|
|
|
ng-model-options="{'debounce': 250}" ng-model="currentSearchQuery"
|
|
|
|
debounce="250"
|
|
|
|
ng-keydown="handleSearchKeyDown($event)">
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="search-results"
|
|
|
|
ng-class="searchVisible && searchResultState ? searchResultState.state : ''"
|
|
|
|
ng-class="{'height': (searchResultState.results.length * 40) + 28}">
|
|
|
|
<div class="cor-loader" ng-if="searchResultState.state == 'loading'"></div>
|
|
|
|
<div ng-if="searchResultState.state == 'no-results'">No matching results found</div>
|
|
|
|
<ul ng-if="searchResultState.state == 'results'">
|
|
|
|
<li ng-repeat="result in searchResultState.results" ng-mouseover="setCurrentResult($index)"
|
|
|
|
ng-class="searchResultState.current == $index ? 'current' : ''"
|
|
|
|
ng-click="showResult(result)">
|
|
|
|
<span class="kind">{{ result.kind }}</span>
|
|
|
|
<span class="score" style="display: none">{{ result.score.toString().substr(0, 4) }}</span>
|
|
|
|
<span ng-switch on="result.kind">
|
|
|
|
<!-- Team -->
|
|
|
|
<span ng-switch-when="team">
|
|
|
|
<strong>
|
|
|
|
<span class="avatar" data="result.avatar" size="16"></span>
|
|
|
|
<span class="result-name">{{ result.name }}</span>
|
|
|
|
</strong>
|
|
|
|
<span class="clarification">
|
|
|
|
under organization
|
|
|
|
<span class="avatar" data="result.organization.avatar" size="16"></span>
|
|
|
|
<span class="result-name">{{ result.organization.name }}</span>
|
|
|
|
</span>
|
|
|
|
</span>
|
|
|
|
<span ng-switch-when="user">
|
|
|
|
<span class="avatar" data="result.avatar" size="16"></span>
|
|
|
|
<span class="result-name">{{ result.name }}</span>
|
|
|
|
</span>
|
|
|
|
<span ng-switch-when="organization">
|
|
|
|
<span class="avatar" data="result.avatar" size="16"></span>
|
|
|
|
<span class="result-name">{{ result.name }}</span>
|
|
|
|
</span>
|
2015-08-03 20:56:32 +00:00
|
|
|
<span ng-switch-when="robot">
|
2015-06-29 09:33:00 +00:00
|
|
|
<i class="fa ci-robot"></i>
|
|
|
|
<span class="result-name">{{ result.name }}</span>
|
|
|
|
</span>
|
2015-08-03 20:56:32 +00:00
|
|
|
<span ng-switch-when="doc">
|
|
|
|
<i class="fa fa-book"></i>
|
|
|
|
<span class="result-name">{{ result.name }}</span>
|
|
|
|
</span>
|
2015-06-29 09:33:00 +00:00
|
|
|
<span ng-switch-when="repository">
|
|
|
|
<span class="avatar" data="result.namespace.avatar" size="16"></span>
|
|
|
|
<span class="result-name">{{ result.namespace.name }}/{{ result.name }}</span>
|
|
|
|
<div class="result-description" ng-if="result.description">
|
|
|
|
<div class="description markdown-view" content="result.description"
|
|
|
|
first-line-only="true" placeholder-needed="false"></div>
|
|
|
|
</div>
|
|
|
|
</span>
|
|
|
|
</span>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="dockerfile-build-dialog"
|
|
|
|
show-now="showBuildDialogCounter"
|
|
|
|
repository="currentPageContext.repository"
|
|
|
|
build-started="handleBuildStarted(build, currentPageContext)">
|
|
|
|
</div>
|
|
|
|
</div>
|
2015-04-07 22:33:43 +00:00
|
|
|
</span>
|