Merge master into ibranch
This commit is contained in:
commit
f8192a1140
34 changed files with 940 additions and 358 deletions
6
static/directives/filter-box.html
Normal file
6
static/directives/filter-box.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
<div class="filter-box-element" ng-show="collection.length">
|
||||
<span class="filter-message" ng-if="filterModel">
|
||||
Showing {{ (collection|filter:filterModel).length }} of {{ collection.length }} {{ filterName }}
|
||||
</span>
|
||||
<input class="form-control" type="text" ng-model="filterModel" placeholder="Filter {{ filterName }}...">
|
||||
</div>
|
|
@ -185,7 +185,8 @@
|
|||
<span class="avatar" data="result.namespace.avatar" size="16"></span>
|
||||
<span class="result-name">{{ result.namespace.name }}/{{ result.name }}</span>
|
||||
<div class="description" ng-if="result.description">
|
||||
{{ result.description }}
|
||||
<div class="description markdown-view" content="result.description"
|
||||
first-line-only="true" placeholder-needed="false"></div>
|
||||
</div>
|
||||
</span>
|
||||
</span>
|
||||
|
|
51
static/directives/repo-tag-history.html
Normal file
51
static/directives/repo-tag-history.html
Normal file
|
@ -0,0 +1,51 @@
|
|||
<div class="repo-tag-history-element">
|
||||
<div class="cor-loader" ng-if="!historyEntries"></div>
|
||||
|
||||
<span class="co-filter-box" style="float:right">
|
||||
<input class="form-control" type="text" ng-model="filter" placeholder="Filter History...">
|
||||
</span>
|
||||
|
||||
<div class="history-list">
|
||||
<div class="empty" ng-if="!historyEntries.length">
|
||||
<div class="empty-primary-msg">No recent tag activity.</div>
|
||||
<div class="empty-secondary-msg">There has not been any recent tag activity on this repository.</div>
|
||||
</div>
|
||||
|
||||
<div class="history-entry" ng-repeat="entry in historyEntries"
|
||||
ng-class="getEntryClasses(entry, filter)">
|
||||
<div class="history-date-break" ng-if="entry.date_break">
|
||||
{{ entry.date | amDateFormat:'dddd, MMMM Do YYYY' }}
|
||||
</div>
|
||||
<div ng-if="!entry.date_break">
|
||||
<div class="history-icon-container"><div class="history-icon"></div></div>
|
||||
<div class="history-text">
|
||||
<div class="history-description">
|
||||
<span class="tag-span"
|
||||
ng-click="showHistory(true, entry.tag_name)">{{ entry.tag_name }}</span>
|
||||
<span ng-switch on="entry.action">
|
||||
<span ng-switch-when="create">
|
||||
was created pointing to image <span class="image-link" repository="repository" image-id="entry.docker_image_id"></span>
|
||||
</span>
|
||||
<span ng-switch-when="delete">
|
||||
was deleted
|
||||
</span>
|
||||
<span ng-switch-when="move">
|
||||
was moved to image
|
||||
<span class="image-link" repository="repository" image-id="entry.docker_image_id"></span>
|
||||
from image
|
||||
<span class="image-link" repository="repository" image-id="entry.old_docker_image_id"></span>
|
||||
</span>
|
||||
<span ng-switch-when="revert">
|
||||
was reverted to image
|
||||
<span class="image-link" repository="repository" image-id="entry.docker_image_id"></span>
|
||||
from image
|
||||
<span class="image-link" repository="repository" image-id="entry.old_docker_image_id"></span>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="history-datetime">{{ entry.time | amDateFormat:'dddd, MMMM Do YYYY, h:mm:ss a' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,5 +1,5 @@
|
|||
<div class="repo-panel-tags-element">
|
||||
<div class="tab-header-controls">
|
||||
<div class="tab-header-controls" ng-show="images">
|
||||
<div class="btn-group btn-group-sm" ng-show="repository.can_write">
|
||||
<button class="btn" ng-class="!showingHistory ? 'btn-primary active' : 'btn-default'" ng-click="showHistory(false)">
|
||||
<i class="fa fa-tags"></i>Current Tags
|
||||
|
@ -13,56 +13,8 @@
|
|||
<h3 class="tab-header">Repository Tags</h3>
|
||||
|
||||
<!-- History view -->
|
||||
<div ng-show="showingHistory">
|
||||
<div ng-show="showingHistory">
|
||||
<div class="cor-loader" ng-if="!tagHistoryData"></div>
|
||||
</div>
|
||||
|
||||
<div style="height: 40px;">
|
||||
<span class="co-filter-box" style="float:right">
|
||||
<input class="form-control" type="text" ng-model="options.historyFilter" placeholder="Filter History...">
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="history-list">
|
||||
<div class="empty" ng-if="!tagHistoryData.length">
|
||||
<div class="empty-primary-msg">This repository is empty.</div>
|
||||
<div class="empty-secondary-msg">Push a tag or initiate a build to populate this repository.</div>
|
||||
</div>
|
||||
|
||||
<div class="history-entry" ng-repeat="entry in tagHistoryData"
|
||||
ng-class="getEntryClasses(entry, options.historyFilter)">
|
||||
<div class="history-date-break" ng-if="entry.date_break">
|
||||
{{ entry.date | amDateFormat:'dddd, MMMM Do YYYY' }}
|
||||
</div>
|
||||
<div ng-if="!entry.date_break">
|
||||
<div class="history-icon"></div>
|
||||
<div class="history-text">
|
||||
<div class="history-description">
|
||||
<span class="tag-span"
|
||||
ng-class="isChecked(entry.tag_name, checkedTags.checked) ? 'checked' : ''"
|
||||
ng-click="showHistory(true, entry.tag_name)">{{ entry.tag_name }}</span>
|
||||
<span ng-switch on="entry.action">
|
||||
<span ng-switch-when="create">
|
||||
was created pointing to image <span class="image-link" repository="repository" image-id="entry.docker_image_id"></span>
|
||||
</span>
|
||||
<span ng-switch-when="delete">
|
||||
was deleted
|
||||
</span>
|
||||
<span ng-switch-when="move">
|
||||
was moved to image
|
||||
<span class="image-link" repository="repository" image-id="entry.docker_image_id"></span>
|
||||
from image
|
||||
<span class="image-link" repository="repository" image-id="entry.old_docker_image_id"></span>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="history-datetime">{{ entry.time | amDateFormat:'dddd, MMMM Do YYYY, h:mm:ss a' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="repo-tag-history" repository="repository" filter="options.historyFilter"
|
||||
is-enabled="showingHistory" ng-show="showingHistory"></div>
|
||||
|
||||
<!-- Normal View -->
|
||||
<div class="resource-view" resource="imagesResource" error-message="'Could not load images'"
|
||||
|
@ -125,6 +77,7 @@
|
|||
style="min-width: 120px;">
|
||||
<a href="javascript:void(0)" ng-click="orderBy('image_id')">Image</a>
|
||||
</td>
|
||||
<td class="options-col" ng-if="repository.can_write"></td>
|
||||
<td class="options-col"></td>
|
||||
<td class="options-col"></td>
|
||||
</thead>
|
||||
|
@ -140,7 +93,7 @@
|
|||
</td>
|
||||
<td>{{ tag.size | bytes }}</td>
|
||||
<td class="image-id-col">
|
||||
<span class="image-link" repoository="repository" image-id="tag.image_id"></span>
|
||||
<span class="image-link" repository="repository" image-id="tag.image_id"></span>
|
||||
</td>
|
||||
<td class="image-track" ng-repeat="it in imageTracks">
|
||||
<span class="image-track-dot" ng-if="it.image_id == tag.image_id"
|
||||
|
@ -153,12 +106,30 @@
|
|||
ng-click="fetchTagActionHandler.askFetchTag(tag)">
|
||||
</i>
|
||||
</td>
|
||||
<td class="options-col" ng-if="repository.can_write">
|
||||
<div class="dropdown" style="text-align: left;">
|
||||
<i class="fa fa-history dropdown-toggle" data-toggle="dropdown" data-title="Tag History"
|
||||
ng-click="loadTagHistory(tag)"
|
||||
bs-tooltip></i>
|
||||
<ul class="dropdown-menu pull-right">
|
||||
<li ng-if="!tagHistory[tag.name]"><div class="cor-loader"></div></li>
|
||||
<li class="tag-image-history-item" ng-repeat="entry in tagHistory[tag.name]">
|
||||
<a href="javascript:void(0)" ng-click="askRevertTag(tag, entry.docker_image_id)">
|
||||
<div class="image-id">
|
||||
<i class="fa fa-circle-o"
|
||||
ng-style="{'color': imageMap[entry.docker_image_id].color || '#eee'}"></i>
|
||||
{{ entry.docker_image_id.substr(0, 12) }}
|
||||
</div>
|
||||
<div class="image-apply-time">
|
||||
{{ entry.start_ts * 1000 | amDateFormat:'dddd, MMMM Do YYYY, h:mm:ss a' }}
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td class="options-col">
|
||||
<span class="cor-options-menu" ng-if="repository.can_write">
|
||||
<span class="cor-option" option-click="showHistory(true, tag.name)"
|
||||
ng-if="tag.last_modified">
|
||||
<i class="fa fa-history"></i> View Tag History
|
||||
</span>
|
||||
<span class="cor-option" option-click="askDeleteTag(tag.name)">
|
||||
<i class="fa fa-times"></i> Delete Tag
|
||||
</span>
|
||||
|
@ -185,5 +156,4 @@
|
|||
<div class="tag-operations-dialog" repository="repository" images="images"
|
||||
action-handler="tagActionHandler"></div>
|
||||
|
||||
<div class="fetch-tag-dialog" repository="repository" action-handler="fetchTagActionHandler">
|
||||
</div>
|
||||
<div class="fetch-tag-dialog" repository="repository" action-handler="fetchTagActionHandler"></div>
|
|
@ -16,9 +16,7 @@
|
|||
be shared, such as deployment systems.
|
||||
</div>
|
||||
|
||||
<div class="manager-filter-box" ng-show="robots.length">
|
||||
<input class="form-control" type="text" ng-model="robotFilter" placeholder="Filter Robot Accounts...">
|
||||
</div>
|
||||
<div class="filter-box" collection="robots" filter-model="robotFilter" filter-name="Robot Accounts"></div>
|
||||
|
||||
<div class="empty" ng-if="!robots.length">
|
||||
<div class="empty-primary-msg">No robot accounts defined.</div>
|
||||
|
@ -39,7 +37,7 @@
|
|||
<td class="caret-col hidden-xs" ng-if="(user || organization.is_admin) && Config.isNewLayout()"></td>
|
||||
<td>Robot Account Name</td>
|
||||
<td ng-if="organization && Config.isNewLayout()">Teams</td>
|
||||
<td ng-if="Config.isNewLayout()">Repository Permissions</td>
|
||||
<td ng-if="Config.isNewLayout()">Direct Repository Permissions</td>
|
||||
<td class="options-col"></td>
|
||||
</thead>
|
||||
|
||||
|
@ -73,11 +71,11 @@
|
|||
</td>
|
||||
<td ng-if="Config.isNewLayout()">
|
||||
<span class="empty" ng-if="robotInfo.repositories.length == 0">
|
||||
(No permissions on any repositories)
|
||||
(No direct permissions on any repositories)
|
||||
</span>
|
||||
|
||||
<span class="member-perm-summary" ng-if="robotInfo.repositories.length > 0">
|
||||
Permissions on
|
||||
Direct Permissions on
|
||||
<span class="anchor hidden-xs" href="javascript:void(0)" is-text-only="!organization.is_admin"
|
||||
ng-click="showPermissions(robotInfo)">{{ robotInfo.repositories.length }}
|
||||
<span ng-if="robotInfo.repositories.length == 1">repository</span>
|
||||
|
|
|
@ -85,3 +85,20 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Recert Tag Confirm -->
|
||||
<div class="cor-confirm-dialog"
|
||||
dialog-context="revertTagInfo"
|
||||
dialog-action="revertTag(info.tag, info.image_id, callback)"
|
||||
dialog-title="Revert Tag"
|
||||
dialog-action-title="Revert Tag">
|
||||
|
||||
<div class="co-alert co-alert-warning">
|
||||
This will change the image to which the tag points.
|
||||
</div>
|
||||
|
||||
Are you sure you want to revert tag
|
||||
<span class="label label-default tag">{{ revertTagInfo.tag.name }}</span> to image
|
||||
<span class="image-id">{{ revertTagInfo.image_id.substr(0, 12) }}?</span>
|
||||
</div>
|
||||
</div>
|
Reference in a new issue