blob: f1569bd6302fa31b0bb17af0184a4f5093d3f75b [file] [log] [blame]
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001{% extends "base.html" %}
2{% load projecttags %}
3{% load humanize %}
4{% load static %}
5
Patrick Williamsf1e5d692016-03-30 15:21:19 -05006{% block title %} {{layerversion.layer.name}} - {{project.name}} - Toaster {% endblock %}
Patrick Williamsc124f4f2015-09-15 14:41:29 -05007{% block pagecontent %}
8
Patrick Williamsc0f7c042017-02-23 20:41:17 -06009<div id="delete-layer-modal" class="modal fade" tabindex="-1" role="dialog"
10 data-keyboard="false" data-backdrop="static">
11 <div class="modal-dialog" role="document">
12 <div class="modal-content">
13 <div class="modal-body">
14 Are you sure you want to delete the <strong>{{layerversion.layer.name}}</strong> layer?
15 </div>
16 <div class="modal-footer">
17 <button type="button" id="layer-delete-confirmed" class="btn
18 btn-primary">Delete layer</button>
19 <button type="button" class="btn btn-default btn-link" data-dismiss="modal">Cancel</button>
20 </div>
21 </div>
22 </div>
Patrick Williamsc124f4f2015-09-15 14:41:29 -050023</div>
24
Patrick Williamsc0f7c042017-02-23 20:41:17 -060025<div class="row">
26 <div class="col-md-12">
27 <ul class="breadcrumb">
28 <li>
29 <a href="{% url 'project' project.id %}">{{project.name}}</a>
30 <span class="divider">&rarr;</span>
31 </li>
32 <li><a href="{% url 'projectlayers' project.id %}">Compatible layers</a>
33 <span class="divider">&rarr;</span>
34 </li>
35 <li class="active">
36 {{layerversion.layer.name}} ({{layerversion.get_vcs_reference|truncatechars:13}})
37 </li>
38 </ul>
Patrick Williamsc124f4f2015-09-15 14:41:29 -050039
Patrick Williamsc0f7c042017-02-23 20:41:17 -060040 {# If this is not an imported layer then hide the edit ui #}
41 {% if layerversion.layer_source != layer_source.TYPE_IMPORTED %}
42 <style scoped>
43 .glyphicon-edit {
44 display:none;
Patrick Williamsc124f4f2015-09-15 14:41:29 -050045 }
Patrick Williamsc0f7c042017-02-23 20:41:17 -060046 .delete-current-value{
47 display: none;
48 }
49 li .glyphicon-trash {
50 display:none;
51 }
52 .add-deps {
53 display:none;
54 }
55 </style>
56 {% endif %}
Patrick Williamsc124f4f2015-09-15 14:41:29 -050057
Patrick Williamsc0f7c042017-02-23 20:41:17 -060058 <script src="{% static 'js/layerdetails.js' %}"></script>
59 <script>
Patrick Williamsc124f4f2015-09-15 14:41:29 -050060
Patrick Williamsc0f7c042017-02-23 20:41:17 -060061 $(document).ready(function(){
62 var ctx = {
63 xhrUpdateLayerUrl : "{% url 'xhr_layer' project.id layerversion.pk %}",
64 layerVersion : {
65 name : "{{layerversion.layer.name}}",
66 id : {{layerversion.id}},
67 commit: "{{layerversion.get_vcs_reference}}",
68 {%if layerversion.id in projectlayers %}
69 inCurrentPrj : true,
70 {% else %}
71 inCurrentPrj : false,
Patrick Williamsc124f4f2015-09-15 14:41:29 -050072 {% endif %}
Patrick Williamsc0f7c042017-02-23 20:41:17 -060073 layerdetailurl : "{% url 'layerdetails' project.id layerversion.id %}",
74 layer_source: {{layerversion.layer_source|json}},
75 },
76 layerSourceTypes: {{layer_source|json}},
77 };
78
79 try {
80 layerDetailsPageInit(ctx);
81 } catch (e) {
82 document.write("Sorry, An error has occurred loading this page");
83 console.warn(e);
84 }
85 });
86 </script>
87
88 <div class="page-header">
89 {% if layerversion.layer.local_source_dir %}
90 <h1>{{layerversion.layer.name}} <small class="commit" style="display:none;"></small>
91 </h1>
92 {% else %}
93 <h1>{{layerversion.layer.name}} <small class="commit"
94 {% if layerversion.get_vcs_reference|length > 13 %}
95 data-toggle="tooltip" title="{{layerversion.get_vcs_reference}}"
96 {% endif %}>({{layerversion.get_vcs_reference|truncatechars:13}})</small>
97 </h1>
98 {% endif %}
99 </div>
100 <div class="row">
101 <!-- container for tabs -->
102 <div class="col-md-8 tabbable">
103 <div class="alert alert-info lead" id="alert-area" style="display:none">
104 <button type="button" class="close" id="dismiss-alert">&times;</button>
105 <span id="alert-msg"></span>
106 </div>
107
108 {% if layerversion.id not in projectlayers %}
109 <button id="add-remove-layer-btn" data-directive="add" class="btn btn-default btn-lg btn-block">
110 <span class="glyphicon glyphicon-plus"></span>
111 Add the {{layerversion.layer.name}} layer to your project
112 </button>
113 {% else %}
114 <button id="add-remove-layer-btn" data-directive="remove" class="btn btn-default btn-block btn-lg btn-danger">
115 <span class="glyphicon glyphicon-trash"></span>
116 Remove the {{layerversion.layer.name}} layer from your project
117 </button>
118 {% endif %}
119
120 <ul class="nav nav-tabs">
121 <li class="active">
122 <a data-toggle="tab" href="#information" id="details-tab">Layer details</a>
123 </li>
124 <li>
125 <a data-toggle="tab" href="#recipes" class="text-muted" id="targets-tab">Recipes (<span class="table-count-recipestable"></span>)</a>
126 </li>
127 <li>
128 <a data-toggle="tab" href="#machines" class="text-muted" id="machines-tab">Machines (<span class="table-count-machinestable"></span>)</a>
129 </li>
130 </ul>
131 <div class="tab-content">
132
133 <!-- layer details pane -->
134 <div id="information" class="tab-pane active">
135 <h3>Layer source code location</h3>
136 {% if layerversion.layer.local_source_dir %}
137 <dl class="dl-horizontal" id="directory-info">
138 <dt>
139 Path to the layer directory
140 </dt>
141 <dd>
142 <code>{{layerversion.layer.local_source_dir}}</code>
143 </dd>
144 </dl>
145 {% else %}
146 <dl class="dl-horizontal" id="git-repo-info">
147 <dt class="">
148 <span class="glyphicon glyphicon-question-sign get-help" title="Fetch/clone URL of the repository"></span>
149 Repository URL
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500150 </dt>
151 <dd>
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600152 <span class="current-value">{{layerversion.layer.vcs_url}}</span>
153 {% if layerversion.get_vcs_link_url %}
154 <a href="{{layerversion.get_vcs_link_url}}/" class="glyphicon glyphicon-new-window" target="_blank"></a>
155 {% endif %}
156 <form id="change-repo-form" class="form-inline" style="display:none">
157 <div class="form-group">
158 <input type="text" class="form-control" value="{{layerversion.layer.vcs_url}}">
159 </div>
160 </form>
161 </dd>
162 {% if layerversion.dirpath %}
163 <dt>
164 <span class="glyphicon glyphicon-question-sign get-help" title="Subdirectory within the repository where the layer is located, if not in the root (usually only used if the repository contains more than one layer)"></span>
165 Repository subdirectory
166 </dt>
167 <dd>
168 <span class="text-muted" style="display:none">Not set</span>
169 <span class="current-value">{{layerversion.dirpath}}</span>
170 {% if layerversion.get_vcs_dirpath_link_url %}
171 <a href="{{layerversion.get_vcs_dirpath_link_url}}" class="glyphicon glyphicon-new-window" target="_blank"></a>
172 {% endif %}
173 <form id="change-subdir-form" class="form-inline" style="display:none;">
174 <div class="form-group">
175 <input type="text" class="form-control" value="{{layerversion.dirpath}}">
176 </div>
177 </form>
178 </dd>
179 {% endif %}
180 <dt>
181 <span class="glyphicon glyphicon-question-sign get-help" title="The Git branch, tag or commit"></span>
182 Git revision
183 </dt>
184 <dd>
185 <span class="current-value">{{layerversion.get_vcs_reference}}</span>
186 <form style="display:none;" class="form-inline">
187 <div class="form-group">
188 <input type="text" class="form-control" value="{{layerversion.get_vcs_reference}}">
189 </div>
190 </form>
191 </dd>
192 </dl>
193 {% endif %}
194 {% if layerversion.layer_source == layer_source.TYPE_IMPORTED %}
195 <button class="btn btn-default btn-lg" id="edit-layer-source" style="margin-left:220px;">Edit layer source code location</button>
196 {% endif %}
197 <form id="edit-layer-source-form" style="display:none;">
198 <fieldset>
199 <legend class="radioLegend">Where is the layer source code?</legend>
200 <div class="radio">
201 <label>
202 <input type="radio" name="source-location" id="repo" value="repo">
203 In a <strong>Git repository</strong>
204 </label>
205 <p class="help-block" style="margin-left:20px;width:70%;">To build the layer Toaster must be able to access the Git repository, otherwise builds will fail. Toaster will fetch and checkout your chosen Git revision every time you start a build.</p>
206 </div>
207 <div class="radio" style="margin-top:15px;">
208 <label>
209 <input type="radio" name="source-location" id="dir" value="dir" checked>
210 In a <strong>directory</strong>
211 </label>
212 <p class="help-block" style="margin-left:20px;width:70%;">Use this option for quick layer development, by simply providing the path to the layer source code.</p>
213 </div>
214 </fieldset>
215
216 <fieldset id="layer-git">
217 <legend>Git repository information</legend>
218 <div class="form-group">
219 <label for="layer-git-repo-url">
220 Git repository URL
221 <span class="glyphicon glyphicon-question-sign get-help" title="Fetch/clone URL of the repository. Currently, Toaster only supports Git repositories." ></span>
222 </label>
223 <input type="text" id="layer-git-repo-url" class="form-control" value="{{layerversion.layer.vcs_url|default_if_none:''}}">
224 </div>
225 <div class="form-group">
226 <label for="layer-subdir">
227 Repository subdirectory
228 <span class="text-muted">(optional)</span>
229 <span class="glyphicon glyphicon-question-sign get-help" title="Subdirectory within the repository where the layer is located, if not in the root (usually only used if the repository contains more than one layer)"></span>
230 </label>
231 <input type="text" class="form-control" id="layer-subdir" value="{{layerversion.dirpath|default_if_none:''}}">
232 </div>
233 <div class="form-group" id="layer-revision-ctrl">
234 <label for="layer-git-ref">Git revision
235 <span class="glyphicon glyphicon-question-sign get-help" title="You can provide a Git branch, a tag or a commit SHA as the revision"></span>
236 </label>
237 <input type="text" class="form-control" id="layer-git-ref" value="{{layerversion.get_vcs_reference|default_if_none:''}}">
238 <span class="help-inline" style="display:none;" id="invalid-layer-revision-hint"></span>
239 </div>
240 </fieldset>
241
242 <fieldset id="layer-dir">
243 <legend>Layer directory information</legend>
244 <div class="form-group">
245 <label for="layer-dir-path">
246 Enter the absolute path to the layer directory
247 </label>
248 <input type="text" id="layer-dir-path-in-details" class="form-control" value="{{layerversion.layer.local_source_dir}}" required>
249 </div>
250 </fieldset>
251
252 <div style="margin-top:25px;">
253 <a href="#" class="btn btn-primary btn-lg" id="save-changes-for-switch">Save changes</a>
254 <a href="#" class="btn btn-link btn-lg" id="cancel-changes-for-switch">Cancel</a>
255 </div>
256 </form>
257
258 <h3 class="top-air">Layer dependencies
259 <span class="glyphicon glyphicon-question-sign get-help" title="Other layers this layer depends upon"></span>
260 </h3>
261
262 <ul class="list-unstyled current-value lead" id="layer-deps-list">
263 {% for ld in layerversion.dependencies.all %}
264 <li data-layer-id="{{ld.depends_on.id}}">
265 <a data-toggle="tooltip" title="{{ld.depends_on.layer.vcs_url}} | {{ld.depends_on.get_vcs_reference}}" href="{% url 'layerdetails' project.id ld.depends_on.id %}">{{ld.depends_on.layer.name}}</a>
266 <span class="glyphicon glyphicon-trash " data-toggle="tooltip" title="Delete"></span>
267 </li>
268 {% endfor %}
269 </ul>
270 <form class="form-inline add-deps">
271 <div class="form-group">
272 <input class="form-control" type="text" autocomplete="off" data-minLength="1" data-autocomplete="off" placeholder="Type a layer name" id="layer-dep-input">
273 </div>
274 <a class="btn btn-default" id="add-layer-dependency-btn" disabled="disabled">
275 Add layer
276 </a>
277 <span class="help-block add-deps">You can only add layers Toaster knows about</span>
278 </form>
279 </div>
280 <!-- end layerdetails tab -->
281 <!-- targets tab -->
282 <div id="recipes" class="tab-pane">
283 <!-- Recipe table -->
284 <div id="no-recipes-yet" class="alert alert-info" style="display:none">
285 <p>Toaster does not have recipe information for the <strong> {{layerversion.layer.name}} </strong> layer.</p>
286 <p>Toaster learns about layers when you build them. If this layer provides any recipes, they will be listed here after you build the <strong> {{layerversion.layer.name}} </strong> layer.</p>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500287 </div>
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600288 {% url 'layerrecipestable' project.id layerversion.id as xhr_table_url %}
289 {% with "recipestable" as table_name %}
290 {% with "Recipes" as title %}
291 {% include 'toastertable-simple.html' %}
292 {% endwith %}
293 {% endwith %}
294 </div>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500295
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600296 <div id="machines" class="tab-pane">
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500297
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600298 <div id="no-machines-yet" class="alert alert-info" style="display:none">
299 <p>Toaster does not have machine information for the <strong> {{layerversion.layer.name}} </strong> layer.</p>
300 <p>Sadly, machine information cannot be obtained from builds, so this page will remain empty.</p>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500301 </div>
302
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500303
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600304 <!-- Machines table -->
305 {% url 'layermachinestable' project.id layerversion.id as xhr_table_url %}
306 {% with "machinestable" as table_name %}
307 {% with "Machines" as title %}
308 {% include 'toastertable-simple.html' %}
309 {% endwith %}
310 {% endwith %}
311 </div>
312 </div> <!-- end tab content -->
313 </div> <!-- end tabable -->
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500314
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600315 <div class="col-md-4"> <!-- info side panel -->
316 <div class="well">
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500317 <h2>About {{layerversion.layer.name}}</h2>
318 <dl class="item-info">
319
320 <dt>
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600321 Summary
322 <span class="glyphicon glyphicon-question-sign get-help" title="One-line description of the layer"></span>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500323 </dt>
324 <dd>
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600325 <span class="text-muted" style="display:none">Not set</span>
326 <span class="current-value">{{layerversion.layer.summary|default_if_none:''}}</span>
327 <form style="display:none; margin-bottom:20px; margin-top:5px;">
328 <div class="form-group">
329 <textarea class="form-control" rows="2">{% if layerversion.layer.summary %}{{layerversion.layer.summary}}{% endif %}</textarea>
330 </div>
331 <button class="btn btn-default change-btn" data-layer-prop="summary" type="button">Save</button>
332 <a href="#" class="btn btn-link cancel">Cancel</a>
333 </form>
334 <span class="glyphicon glyphicon-edit"></span>
335 <span class="glyphicon glyphicon-trash delete-current-value" data-toggle="tooltip" title="Delete"></span>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500336 </dd>
337 <dt>
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600338 Description
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500339 </dt>
340 <dd>
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600341 <span class="text-muted" style="display:none">Not set</span>
342 <span class="current-value">{{layerversion.layer.description|default_if_none:''}}</span>
343 <form style="display:none; margin-bottom:20px; margin-top:5px;">
344 <div class="form-group">
345 <textarea class="form-control" rows="6">{% if layerversion.layer.description %}{{layerversion.layer.description}}{% endif %}</textarea>
346 </div>
347 <button class="btn btn-default change-btn" data-layer-prop="description" type="button" >Save</button>
348 <a href="#" class="btn btn-link cancel">Cancel</a>
349 </form>
350 <span class="glyphicon glyphicon-edit"></span>
351 <span class="glyphicon glyphicon-trash delete-current-value" data-toggle="tooltip" title="Delete"></span>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500352 </dd>
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600353 {% if layerversion.layer_source == layer_source.TYPE_LAYERINDEX %}
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500354 <dt>Layer index</dt>
355 <dd>
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600356 <a href="http://layers.openembedded.org/layerindex/branch/{{layerversion.release.name}}/layer/{{layerversion.layer.name}}">Layer index {{layerversion.layer.name}}</a>
357 </dd>
358 {% endif %}
359 </dl>
360 {# Only show delete link for imported layers #}
361 {% if layerversion.layer_source == layer_source.TYPE_IMPORTED %}
362 <i class="icon-trash text-danger"></i>
363 <a href="#delete-layer-modal" role="button" class="text-danger"
364 data-toggle="modal" data-target="#delete-layer-modal">Delete layer</a>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500365 {% endif %}
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600366 </div>
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500367 </div>
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600368 </div>
369 </div> <!-- close column 12 div -->
370</div> <!-- close top row div -->
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500371
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600372{% endblock %}