layerindex-web/templates/layerindex/detail.html
Alex Franco fd63761d2a Support for recipe inherits field
To identify image recipes and provide inheritance data for recipes, an
inherits field was added to the recipe model, and then populated using
refactored data from __inherit_cache. Finally the field was also added
to page templates, along with style changes proposed in attachment, and
an additional style change to display the inherits field as a list in
detailed view. The field skips globally inherited data as proposed.

[YOCTO #7575]

Signed-off-by: Alex Franco <alejandro.franco@linux.intel.com>
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
2015-10-07 11:34:28 +01:00

331 lines
13 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 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">
<h3>Dependencies </h3>
<p>The {{ layeritem.name }} layer depends upon:</p>
<ul>
{% for dep in layerbranch.dependencies_set.all %}
<li><a href="{% url layer_item url_branch dep.dependency.name %}">{{ dep.dependency.name }}</a></li>
{% endfor %}
</ul>
</div> <!-- end of well -->
{% endif %}
</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 %}
</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</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 %}</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</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</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</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 %}
</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"});
});
});
</script>
{% endblock %}