276 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			276 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <div id="tagContextMenu" class="dropdown clearfix" tabindex="-1">
 | |
|   <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu">
 | |
|     <li><a tabindex="-1" href="javascript:void(0)" ng-click="askDeleteTag(currentMenuTag)">Delete Tag</a></li>
 | |
|   </ul>
 | |
| </div>
 | |
| 
 | |
| <div class="resource-view" resource="repository" error-message="'No Repository Found'">
 | |
|   <div class="container repo">
 | |
|     <!-- Repo Header -->
 | |
|     <div class="header">
 | |
|       <h3>
 | |
|         <span class="repo-circle" repo="repo"></span>
 | |
|         <span class="repo-breadcrumb" repo="repo"></span>
 | |
|         <span class="settings-cog" ng-show="repo.can_admin" title="Repository Settings" bs-tooltip="tooltip.title" data-placement="bottom">
 | |
|           <a href="{{ '/repository/' + repo.namespace + '/' + repo.name + '/admin' }}">
 | |
|             <i class="fa fa-cog fa-lg"></i>
 | |
|           </a>
 | |
|         </span>
 | |
|       </h3>   
 | |
|       
 | |
|       <!-- Pull command -->
 | |
|       <div class="pull-command visible-md visible-lg" style="display: none;">
 | |
|         <span class="pull-command-title">Pull repository:</span>
 | |
|         <div class="pull-container">
 | |
|           <div class="input-group">
 | |
|             <input id="pull-text" type="text" class="form-control" value="{{ 'docker pull quay.io/' + repo.namespace + '/' + repo.name }}" readonly>
 | |
|             <span id="copyClipboard" class="input-group-addon" title="Copy to Clipboard" data-clipboard-target="pull-text">
 | |
|               <i class="fa fa-copy"></i>
 | |
|             </span>
 | |
|           </div>
 | |
|         </div>
 | |
| 
 | |
|         <div id="clipboardCopied" class="hovering" style="display: none">
 | |
|           Copied to clipboard
 | |
|         </div>
 | |
|       </div>
 | |
|     </div>
 | |
| 
 | |
|     <!-- Status boxes -->
 | |
|     <div class="status-boxes">
 | |
|       <div id="buildInfoBox" class="status-box" ng-show="repo.is_building"
 | |
|            bs-popover="'static/partials/build-status-item.html'" data-placement="bottom">
 | |
|         <span class="title">
 | |
|           <span class="quay-spinner"></span>
 | |
|           <b>Building Images</b>
 | |
|         </span>
 | |
|         <span class="count" ng-class="buildsInfo ? 'visible' : ''"><span>{{ buildsInfo ? buildsInfo.length : '-' }}</span></span>
 | |
|       </div>
 | |
|     </div>
 | |
| 
 | |
|     <!-- Description -->
 | |
|     <div class="description markdown-input" content="repo.description" can-write="repo.can_write"
 | |
|          content-changed="updateForDescription" field-title="'repository description'"></div>
 | |
| 
 | |
|     <!-- Empty message -->
 | |
|     <div class="repo-content" ng-show="!currentTag.image && !currentImage && !repo.is_building">
 | |
|       <div class="empty-message">
 | |
|         This repository is empty
 | |
|       </div>
 | |
| 
 | |
|       <div class="empty-description" ng-show="repo.can_write">
 | |
|         To push images to this repository:<br><br>
 | |
|         <pre>sudo docker tag <i>0u123imageidgoeshere</i> quay.io/{{repo.namespace}}/{{repo.name}}
 | |
| sudo docker push quay.io/{{repo.namespace}}/{{repo.name}}</pre>
 | |
|       </div>
 | |
|     </div>
 | |
| 
 | |
|     <div class="repo-content" ng-show="!currentTag.image && repo.is_building">
 | |
|       <div class="empty-message">
 | |
|         Your build is currently processing, if this takes longer than an hour, please contact <a href="mailto:support@quay.io">Quay.io support</a>
 | |
|       </div>
 | |
|     </div>
 | |
| 
 | |
|     <!-- Content view -->
 | |
|     <div class="repo-content" ng-show="currentTag.image || currentImage">
 | |
|       <!-- Image History -->
 | |
|       <div id="image-history" style="max-height: 10px;">
 | |
|         <div class="row">
 | |
|           <!-- Tree View container -->
 | |
|           <div  class="col-md-8">
 | |
|             <div class="panel panel-default">             
 | |
|               <!-- Image history tree -->
 | |
|               <div class="resource-view" resource="imageHistory">
 | |
|                 <div id="image-history-container" onresize="tree.notifyResized()"></div>
 | |
|               </div>
 | |
|             </div>	
 | |
|           </div>
 | |
| 
 | |
|           <!-- Side Panel -->
 | |
|           <div class="col-md-4">
 | |
|             <div class="panel panel-default">
 | |
|               <div class="panel-heading">
 | |
|                 <!-- Dropdown -->
 | |
|                 <div class="tag-dropdown dropdown" data-placement="top">
 | |
|                   <i class="fa fa-tag" ng-show="currentTag"></i>
 | |
|                   <i class="fa fa-archive" ng-show="!currentTag"></i>
 | |
|                   <a href="javascript:void(0)" class="dropdown-toggle" data-toggle="dropdown">{{currentTag ? currentTag.name : currentImage.id.substr(0, 12)}} <b class="caret"></b></a>
 | |
|                   <ul class="dropdown-menu">
 | |
|                     <li ng-repeat="tag in repo.tags">
 | |
|                       <a href="javascript:void(0)" ng-click="setTag(tag.name, true)">
 | |
|                         <i class="fa fa-tag"></i>{{tag.name}}
 | |
|                       </a>
 | |
|                     </li>
 | |
|                     <li class="divider"></li>
 | |
|                     <li ng-repeat="image in imageHistory.value">
 | |
|                       <a href="javascript:void(0)" ng-click="setImage(image.id, true)">
 | |
|                         {{image.id.substr(0, 12)}}
 | |
|                       </a>
 | |
|                     </li>
 | |
|                   </ul>
 | |
|                 </div>
 | |
|                 <span class="right-tag-controls">
 | |
|                   <i class="fa fa-tag" title="Tags" bs-tooltip="title">
 | |
|                     <span class="tag-count">{{getTagCount(repo)}}</span>
 | |
|                   </i>
 | |
|                   <i class="fa fa-archive" title="Images" bs-tooltip="title">
 | |
|                     <span class="tag-count">{{imageHistory.value.length}}</span>
 | |
|                   </i>
 | |
|                 </span>
 | |
|               </div>
 | |
|               
 | |
|               <div class="panel-body">
 | |
|                 <!-- Current Tag -->
 | |
|                 <div id="current-tag" ng-show="currentTag">
 | |
|                   <dl class="dl-normal">
 | |
|                     <dt>Last Modified</dt>
 | |
|                     <dd am-time-ago="parseDate(currentTag.image.created)"></dd>
 | |
|                     <dt>Total Compressed Size</dt>
 | |
|                     <dd><span class="context-tooltip"
 | |
|                               title="The amount of data sent between Docker and Quay.io when pushing/pulling"
 | |
|                               bs-tooltip="tooltip.title" data-container="body">{{ getTotalSize(currentTag) | bytes }}</span>
 | |
|                     </dd>
 | |
|                   </dl>
 | |
|                   
 | |
|                   <div class="tag-image-sizes">
 | |
|                     <div class="tag-image-size" ng-repeat="image in getImagesForTagBySize(currentTag) | limitTo: 10">
 | |
|                       <span class="size-limiter">
 | |
|                         <span class="size-bar" style="{{ 'width:' + (image.size / getTotalSize(currentTag)) * 100 + '%' }}"
 | |
|                               bs-tooltip="image.size | bytes"></span>
 | |
|                       </span>
 | |
|                       <span class="size-title"><a href="javascript:void(0)" ng-click="setImage(image.id, true)">{{ image.id.substr(0, 12) }}</a></span>
 | |
|                     </div>
 | |
|                   </div>
 | |
| 
 | |
|                   <div class="control-bar" ng-show="repo.can_admin">
 | |
|                     <button class="btn btn-default" ng-click="askDeleteTag(currentTag.name)">
 | |
|                       Delete Tag
 | |
|                     </button>
 | |
|                   </div>
 | |
|                 </div>
 | |
| 
 | |
|                 <!-- Current Image -->
 | |
|                 <div id="current-image" ng-show="currentImage && !currentTag">
 | |
|                   <div ng-show="currentImage.comment">
 | |
|                     <blockquote style="margin-top: 10px;">
 | |
|                       <span class="markdown-view" content="currentImage.comment"></span>
 | |
|                     </blockquote>
 | |
|                   </div>
 | |
| 
 | |
|                   <dl class="dl-normal">
 | |
|                     <dt>Created</dt>
 | |
|                     <dd am-time-ago="parseDate(currentImage.created)"></dd>
 | |
|                     <dt>Image ID</dt>
 | |
|                     <dd><a href="{{'/repository/' + repo.namespace + '/' + repo.name + '/image/' + currentImage.id}}">{{ currentImage.id }}</a></dd>
 | |
|                     <dt>Compressed Image Size</dt>
 | |
|                     <dd><span class="context-tooltip"
 | |
|                               title="The amount of data sent between Docker and Quay.io when pushing/pulling"
 | |
|                               bs-tooltip="tooltip.title" data-container="body">{{ currentImage.size | bytes }}</span>
 | |
|                     </dd>
 | |
|                     <dt ng-show="currentImage.command && currentImage.command.length">Command</dt>
 | |
|                     <dd ng-show="currentImage.command && currentImage.command.length" class="codetooltipcontainer">
 | |
|                       <pre class="formatted-command trimmed"
 | |
|                            bs-tooltip="getTooltipCommand(currentImage)"
 | |
|                            data-placement="top">{{ getFormattedCommand(currentImage) }}</pre>
 | |
|                     </dd>
 | |
|                   </dl>
 | |
| 
 | |
|                   <!-- Image changes loading -->
 | |
|                   <div class="resource-view" resource="currentImageChangeResource">
 | |
|                     <div class="changes-container small-changes-container"
 | |
|                          ng-show="currentImageChanges.changed.length || currentImageChanges.added.length || currentImageChanges.removed.length">
 | |
|                       <div class="changes-count-container accordion-toggle" data-toggle="collapse" data-parent="#accordion" data-target="#collapseChanges">
 | |
|                         <span class="change-count added" ng-show="currentImageChanges.added.length > 0" title="Files Added"
 | |
|                               bs-tooltip="tooltip.title" data-placement="top">
 | |
|                           <i class="fa fa-plus-square"></i>
 | |
|                           <b>{{currentImageChanges.added.length}}</b>
 | |
|                         </span>
 | |
|                         <span class="change-count removed" ng-show="currentImageChanges.removed.length > 0" title="Files Removed"
 | |
|                               bs-tooltip="tooltip.title" data-placement="top">
 | |
|                           <i class="fa fa-minus-square"></i>
 | |
|                           <b>{{currentImageChanges.removed.length}}</b>
 | |
|                         </span>
 | |
|                         <span class="change-count changed" ng-show="currentImageChanges.changed.length > 0" title="Files Changed"
 | |
|                               bs-tooltip="tooltip.title" data-placement="top">
 | |
|                           <i class="fa fa-pencil-square"></i>
 | |
|                           <b>{{currentImageChanges.changed.length}}</b>
 | |
|                         </span>
 | |
|                       </div>
 | |
| 
 | |
|                       <div id="collapseChanges" class="panel-collapse collapse in">
 | |
|                         <div class="well well-sm">		     
 | |
|                           <div class="change added" ng-repeat="file in currentImageChanges.added | limitTo:5">
 | |
|                             <i class="fa fa-plus-square"></i>
 | |
|                             <span title="{{file}}">{{file}}</span>
 | |
|                           </div>
 | |
|                           <div class="change removed" ng-repeat="file in currentImageChanges.removed | limitTo:5">
 | |
|                             <i class="fa fa-minus-square"></i>
 | |
|                             <span title="{{file}}">{{file}}</span>
 | |
|                           </div>
 | |
|                           <div class="change changed" ng-repeat="file in currentImageChanges.changed | limitTo:5">
 | |
|                             <i class="fa fa-pencil-square"></i>
 | |
|                             <span title="{{file}}">{{file}}</span>
 | |
|                           </div>
 | |
|                         </div>
 | |
|                         <div class="more-changes" ng-show="getMoreCount(currentImageChanges) > 0">
 | |
|                           <a href="{{'/repository/' + repo.namespace + '/' + repo.name + '/image/' + currentImage.id}}">
 | |
|                             And {{getMoreCount(currentImageChanges)}} more...
 | |
|                           </a>
 | |
|                         </div>
 | |
|                       </div>
 | |
|                     </div>           
 | |
|                   </div>
 | |
|                 </div>
 | |
|               </div>
 | |
|             </div>
 | |
|           </div>
 | |
|         </div>
 | |
|       </div>
 | |
|     </div>
 | |
|   </div>
 | |
| </div>
 | |
| 
 | |
| <!-- Modal message dialog -->
 | |
| <div class="modal fade" id="confirmdeleteTagModal">
 | |
|   <div class="modal-dialog">
 | |
|     <div class="modal-content">
 | |
|       <div class="modal-header">
 | |
|         <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
 | |
|         <h4 class="modal-title">Delete tag
 | |
|           <span class="label tag" ng-class="tagToDelete == currentTag.name ? 'label-success' : 'label-default'">
 | |
|             {{ tagToDelete  }}
 | |
|           </span>?
 | |
|         </h4>
 | |
|       </div>
 | |
|       <div class="modal-body">
 | |
|         Are you sure you want to delete tag
 | |
|         <span class="label tag" ng-class="tagToDelete == currentTag.name ? 'label-success' : 'label-default'">
 | |
|           {{ tagToDelete  }}
 | |
|         </span>?
 | |
| 
 | |
|         <div ng-show="tagSpecificImages(tagToDelete).length" style="margin-top: 20px">
 | |
|           The following images will also be deleted:
 | |
|           <div class="image-listings">
 | |
|             <div class="image-listing" ng-repeat="image in tagSpecificImages(tagToDelete) | limitTo:5"
 | |
|                  ng-class="getImageListingClasses(image, tagToDelete)">
 | |
|               <!--<i class="fa fa-archive"></i>-->
 | |
|               <span class="image-listing-circle"></span>
 | |
|               <span class="image-listing-line"></span>
 | |
|               <span class="context-tooltip image-listing-id" bs-tooltip="getFirstTextLine(image.comment)">
 | |
|                 {{ image.id.substr(0, 12) }}
 | |
|               </span>
 | |
|             </div>
 | |
|           </div>
 | |
|           <div class="more-changes" ng-show="tagSpecificImages(tagToDelete).length > 5">
 | |
|             And {{ tagSpecificImages(tagToDelete).length - 5 }} more...
 | |
|           </div>
 | |
|         </div>
 | |
|       </div>
 | |
|       <div class="modal-footer">
 | |
|         <button type="button" class="btn btn-primary" ng-click="deleteTag(tagToDelete)">Delete Tag</button>
 | |
|         <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
 | |
|       </div>
 | |
|     </div><!-- /.modal-content -->
 | |
|   </div><!-- /.modal-dialog -->
 | |
| </div><!-- /.modal -->
 | |
| 
 |