layerindex-web/templates/layerindex/detail.html
Amanda Brindle fdcde00710 Indicate if layer has YP Compatible certification
Allow admin to create Yocto Project versions with the version name,
description, an icon link that represents that version, and a link that
contains more information about the version.

Admins who have the "set_yp_compatibility" permission can then
decide if a layer has Yocto Project compatible certification,
and if it does, admin can choose which version of Yocto Project
the layer is compatible with. If a layer is deemed compatible,
the version's icon will appear next to the layer's name, and
the icon be a clickable link to a page with more information.

Fixes [YOCTO #11452]

Signed-off-by: Amanda Brindle <amanda.r.brindle@intel.com>
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
2017-09-27 15:26:24 +13:00

405 lines
18 KiB
HTML

{% extends "base.html" %}
{% load i18n %}
{% load static %}
{% comment %}
layerindex-web - layer detail page template
Copyright (C) 2013 Intel Corporation
Licensed under the MIT license, see COPYING.MIT for details
{% endcomment %}
<!--
{% autoescape on %}
{% block title_append %} - {{ layeritem.name }}{% endblock %}
{% endautoescape %}
-->
{% block content %}
{% autoescape on %}
<ul class="breadcrumb">
<li><a href="{% url 'layer_list' url_branch %}">{{ layerbranch.branch.name }}</a> <span class="divider">&rarr;</span></li>
<li class="active">{{ layeritem.name }}</li>
</ul>
<div class="container-fluid">
<div class="row-fluid">
<div class="page-header">
<h1>{{ layeritem.name }}
{% if layerbranch.yp_compatible_version %}
<a href="{{layerbranch.yp_compatible_version.link_url}}"><img src="{{layerbranch.yp_compatible_version.image_url}}" alt="{{layerbranch.yp_compatible_version.description}}" class="yp-icon" title="{{layerbranch.yp_compatible_version.description}}"></a>
{% endif %}
{% if layeritem.status = "N" %}
<span class="label label-warning">Unpublished</span>
{% endif %}
{% if user.is_authenticated %}
<span class="pull-right">
{% if perms.layerindex.publish_layer or useredit %}
<a href="{% url 'edit_layer' url_branch layeritem.name %}" class="btn">Edit layer</a>
{% if layeritem.layernote_set.count = 0 %}
<a href="{% url 'add_layernote' layeritem.name %}" class="btn">Add note</a>
{% endif %}
{% endif %}
</span>
{% endif %}
</h1>
</div>
</div> <!-- end of row-fluid -->
</div> <!-- end of container-fluid -->
<div class="container-fluid">
{% if not layerbranch %}
<div class="row-fluid">
<div class="alert alert-error">
This layer does not exist for branch {{ url_branch }}.
</div>
</div>
{% endif %}
<div class="row-fluid">
{% for note in layeritem.layernote_set.all %}
<div class="alert">
{{ note.text }}
{% if perms.layerindex.publish_layer or useredit %}
<br><br>
<p>
<a href="{% url 'edit_layernote' layeritem.name note.pk %}" class="btn">Edit note</a>
<a href="{% url 'delete_layernote' layeritem.name note.pk %}" class='btn'>Delete note</a>
</p>
{% endif %}
</div>
{% endfor %}
</div>
<div class="row-fluid">
<div class="description span7">
<p>
{{ layeritem.description }}
</p>
<p>
{% if layeritem.usage_url %}
<span class="label label-info">
<a href="{{ layerbranch.get_usage_url }}">Setup information</a>
</span>
{% endif %}
{% if layeritem.mailing_list_url %}
<span class="label label-info">
<a href="{{ layeritem.mailing_list_url }}">Mailing list</a>
</span>
{% endif %}
</p>
<h3>Git repository</h3>
<p><span data-toggle="tooltip" title="Select URL"><i class="icon-circle-arrow-right selectallicon" for="vcs_url" id="vcs_url_select"></i></span><span id="vcs_url" class="copyable">{{ layeritem.vcs_url }}</span>
{% if layeritem.vcs_web_url %}
<span class="label label-info">
<a href="{{ layeritem.vcs_web_url }}">web repo</a>
</span>
{% endif %}
</p>
{% if layerbranch.vcs_subdir %}
<h4>Subdirectory</h4>
<p><span data-toggle="tooltip" title="Select subdirectory"><i class="icon-circle-arrow-right selectallicon" for="vcs_subdir" id="vcs_subdir_select"></i></span><span id="vcs_subdir" class="copyable">{{ layerbranch.vcs_subdir }}</span>
{% if layerbranch.tree_url %}
<span class="label label-info">
<a href="{{ layerbranch.tree_url }}">web subdirectory</a>
</span>
{% endif %}
</p>
{% endif %}
{% if layerbranch.vcs_last_commit %}
<p>
<span class="muted"><small>Last commit: {{ layerbranch.vcs_last_commit|timesince }} ago ({{ layerbranch.branch.name }} branch)</small></span>
</p>
{% endif %}
{% if layerbranch.active_maintainers.count > 0 %}
<h3>{% if layerbranch.active_maintainers|length = 1 %}Maintainer{% else %}Maintainers{% endif %}</h3>
<ul>
{% for maintainer in layerbranch.active_maintainers %}
<li>
{{ maintainer.name }}
{% if maintainer.responsibility %}
<span>({{ maintainer.responsibility }})</span>
{% endif %}
<span class="label label-info">
<a href="mailto:{{ maintainer.email }}">email</a>
</span>
</li>
{% endfor %}
</ul>
{% endif %}
</div> <!-- end of span7 -->
<div class="span4 pull-right description">
{% if layerbranch.dependencies_set.count > 0 %}
<div class="well dependency-well">
{% if layerbranch.get_required.count > 0 %}
<h3>Dependencies </h3>
<p>The {{ layeritem.name }} layer depends upon:</p>
<ul>
{% for dep in layerbranch.get_required %}
<li><a href="{% url 'layer_item' url_branch dep.dependency.name %}">{{ dep.dependency.name }}</a></li>
{% endfor %}
</ul>
{% endif %} <!-- end of layerbranch.get_required.count -->
{% if layerbranch.get_recommends.count > 0 %}
<h3>Recommends </h3>
<p>The {{ layeritem.name }} layer recommends:</p>
<ul>
{% for rec in layerbranch.get_recommends %}
<li><a href="{% url 'layer_item' url_branch rec.dependency.name %}">{{ rec.dependency.name }}</a></li>
{% endfor %}
</ul>
{% endif %} <!-- end of layerbranch.get_recommends.count -->
</div> <!-- end of well -->
{% endif %} <!-- end of layerbranch.dependencies_set.count -->
</div> <!-- end of span4 -->
</div> <!-- end of row-fluid -->
</div> <!-- end of container-fluid -->
<ul class="nav nav-tabs" id="layertabbar">
{% if layerbranch.recipe_set.count > 0 %}
<li><a href="#recipes" data-toggle="tab">Recipes</a></li>
{% endif %}
{% if machines.count > 0 %}
<li><a href="#machines" data-toggle="tab">Machines</a></li>
{% endif %}
{% if appends.count > 0 %}
<li><a href="#appends" data-toggle="tab">Appends</a></li>
{% endif %}
{% if classes.count > 0 %}
<li><a href="#classes" data-toggle="tab">Classes</a></li>
{% endif %}
{% if distros.count > 0 %}
<li><a href="#distros" data-toggle="tab">Distros</a></li>
{% endif %}
{% if updates.count > 0 %}
<li><a href="#updates" data-toggle="tab">Updates</a></li>
{% endif %}
</ul>
<div class="tab-content">
{% if layerbranch.recipe_set.count > 0 %}
<div class="tab-pane" id="recipes">
<div class="navbar">
<div class="navbar-inner">
<a class="brand pull-left">{{ layeritem.name }} recipes <span class="muted">({{ layerbranch.sorted_recipes.count }})</span></a>
<ul class="nav pull-right">
<li>
<form action="" class="navbar-search pull-right" id="filter-form">
<input type="text" placeholder="Search recipes" class="search-query" id="filter">
</form>
</li>
</ul>
</div>
</div>
<table class="table table-bordered recipestable">
<thead>
<tr>
<th>Recipe name</th>
<th>Version</th>
<th>Description</th>
</tr>
</thead>
<tbody>
{% for recipe in layerbranch.sorted_recipes %}
<tr>
<td><a href="{% url 'recipe' recipe.id %}">{{ recipe.name }}</a>{% if 'image' in recipe.inherits.split %}<i class="icon-hdd"></i>{% endif %}{% if recipe.blacklisted %}<span class="label label-inverse" title="{{ recipe.blacklisted }}">blacklisted</span>{% endif %}</td>
<td>{{ recipe.pv }}</td>
<td class="span8">{{ recipe.short_desc }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
{% if machines.count > 0 %}
<div class="tab-pane" id="machines">
<div class="navbar">
<div class="navbar-inner">
<a class="brand pull-left">{{ layeritem.name }} machines <span class="muted">({{ machines.count }})</span></a>
</div>
</div>
<table class="table table-bordered">
<tbody>
{% for machine in machines %}
<tr>
<td><a href="{{ machine.vcs_web_url }}">{{ machine.name }}</a></td>
<td>{{ machine.description }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
{% if appends.count > 0 %}
<div class="tab-pane" id="appends">
<div class="navbar">
<div class="navbar-inner">
<a class="brand pull-left">{{ layeritem.name }} bbappends <span class="muted">({{ appends.count }})</span></a>
</div>
</div>
<table class="table table-bordered">
<tbody>
{% for append in appends %}
<tr>
<td><a href="{{ append.vcs_web_url }}">{{ append.filename }}</a></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
{% if classes.count > 0 %}
<div class="tab-pane" id="classes">
<div class="navbar">
<div class="navbar-inner">
<a class="brand pull-left">{{ layeritem.name }} classes <span class="muted">({{ classes.count }})</span></a>
</div>
</div>
<table class="table table-bordered">
<tbody>
{% for class in classes %}
<tr>
<td><a href="{{ class.vcs_web_url }}">{{ class.name }}</a></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
{% if distros.count > 0 %}
<div class="tab-pane" id="distros">
<div class="navbar">
<div class="navbar-inner">
<a class="brand pull-left">{{ layeritem.name }} distros <span class="muted">({{ distros.count }})</span></a>
</div>
</div>
<table class="table table-bordered">
<tbody>
{% for distro in distros %}
<tr>
<td><a href="{{ distro.vcs_web_url }}">{{ distro.name }}</a></td>
<td>{{ distro.description }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
{% if updates.count > 0 %}
<div class="tab-pane" id="updates">
<div class="navbar">
<div class="navbar-inner">
<a class="brand pull-left">{{ layeritem.name }} updates</a>
</div>
</div>
<table class="table table-bordered">
<thead>
<tr>
<th>Date/time</th>
<th>Errors</th>
<th>Warnings</th>
</tr>
</thead>
<tbody>
{% for update in updates %}
<tr>
<td>
{% if update.log %}
<a href="{% url 'layerupdate' update.id %}">{{ update.started }}{% if update.update.reload %} (reload){% endif%}</a>
{% else %}
<span class="muted">{{ update.started }}{% if update.update.reload %} (reload){% endif%}</span>
{% endif %}
</td>
<td>{% if update.errors %}<span class="badge badge-important">{{ update.errors }}</span>{% endif %}</td>
<td>{% if update.warnings %}<span class="badge badge-warning">{{ update.warnings }}</span>{% endif %}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
</div>
{% endautoescape %}
{% endblock %}
{% block scripts %}
<script src="{% static "js/uitablefilter.js" %}"></script>
<script>
// selectText plugin Borrowed from http://jsfiddle.net/edelman/KcX6A/1506/
jQuery.fn.selectText = function() {
var doc = document
, element = this[0]
, range, selection
;
if (doc.body.createTextRange) {
range = document.body.createTextRange();
range.moveToElementText(element);
range.select();
} else if (window.getSelection) {
selection = window.getSelection();
range = document.createRange();
range.selectNodeContents(element);
selection.removeAllRanges();
selection.addRange(range);
}
};
$(document).ready(function() {
$(function() {
var theTable = $('table.recipestable');
$("#filter").keyup(function() {
$.uiTableFilter( theTable, this.value );
})
$('#filter-form').submit(function(){
theTable.find("tbody > tr:visible > td:eq(1)").mousedown();
return false;
}).focus(); //Give focus to input field
$('.selectallicon').mouseup(function() {
$('#' + $(this).attr('for')).selectText();
});
$('#layertabbar a:first').tab('show');
$('#layertabbar a').click(function (e) {
e.preventDefault();
$(this).tab('show');
})
$('.icon-hdd').tooltip({title:"Inherits image"});
$('.label-inverse').tooltip();
});
});
</script>
{% endblock %}