diff options
author | Michael Wood <michael.g.wood@intel.com> | 2015-01-14 12:46:52 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-01-16 08:25:31 +0000 |
commit | 025533d90b694ed37278c8f5be85afbd05857971 (patch) | |
tree | 51bb70fa2873285e1e6d716cf637d78ccb538317 /bitbake/lib/toaster/toastergui/templates | |
parent | 2a6f739f1d3a0383d849cb2944c69797b4b3e437 (diff) | |
download | poky-025533d90b694ed37278c8f5be85afbd05857971.tar.gz |
bitbake: toaster: Add layer details page feature
This commit adds the layer details page which shows the metadata for the
layer such as layer description, machines associated with the layer as well
as the targets provided.
If the layer is an imported layer this page also allows you to update
the layer's configuration.
>From this page you can add/remove the layer from the current project
(Bitbake rev: c1442bc68ad8ba20c37b1a7cde1400297f4be811)
Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/toaster/toastergui/templates')
-rw-r--r-- | bitbake/lib/toaster/toastergui/templates/layerdetails.html | 644 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/templates/layers_dep_modal.html | 9 |
2 files changed, 504 insertions, 149 deletions
diff --git a/bitbake/lib/toaster/toastergui/templates/layerdetails.html b/bitbake/lib/toaster/toastergui/templates/layerdetails.html index 78dc54bfd1..c69f9e945a 100644 --- a/bitbake/lib/toaster/toastergui/templates/layerdetails.html +++ b/bitbake/lib/toaster/toastergui/templates/layerdetails.html | |||
@@ -1,159 +1,505 @@ | |||
1 | {% extends "baseprojectpage.html" %} | 1 | {% extends "baseprojectpage.html" %} |
2 | {% load projecttags %} | 2 | {% load projecttags %} |
3 | {% load humanize %} | 3 | {% load humanize %} |
4 | 4 | {% load static %} | |
5 | {% block localbreadcrumb %} | 5 | {% block localbreadcrumb %} |
6 | <li>Layer Details</li> | 6 | <li><a href="{% url 'layers' %}">All Layers</a></li> |
7 | <li> | ||
8 | {{layerversion.layer.name}} ({{layerversion.commit|truncatechars:13}}) | ||
9 | </li> | ||
7 | {% endblock %} | 10 | {% endblock %} |
8 | |||
9 | {% block projectinfomain %} | 11 | {% block projectinfomain %} |
10 | <div class="page-header"> | 12 | |
11 | <h1>Layer Details</h1> | 13 | |
12 | </div> | 14 | <script src="{% static 'js/layerdetails.js' %}"></script> |
13 | 15 | <script> | |
14 | <div class="row-fluid span7 tabbable"> | 16 | |
15 | <ul class="nav nav-pills"> | 17 | $(document).ready(function (){ |
16 | <li class="active"> | 18 | var ctx = { |
17 | <a data-toggle="tab" href="#information">Layer details</a> | 19 | projectBuildUrl : "{% url 'xhr_build' %}", |
18 | </li> | 20 | layerDetailsUrl : "{% url 'layerdetails' %}", |
19 | <li> | 21 | projectPageUrl : "{% url 'project' project.id %}", |
20 | <a data-toggle="tab" href="#targets">Targets (0)</a> | 22 | xhrEditProjectUrl : "{% url 'xhr_projectedit' project.id %}", |
21 | </li> | 23 | xhrDataTypeaheadUrl : "{% url 'xhr_datatypeahead' %}", |
22 | <li> | 24 | xhrUpdateLayerUrl : "{% url 'xhr_updatelayer' %}", |
23 | <a data-toggle="tab" href="#machines">Machines (0)</a> | 25 | projectId : {{project.id}}, |
24 | </li> | 26 | numTargets : {{total_targets}}, |
25 | <li> | 27 | numMachines: {{machines|length}}, |
26 | <a data-toggle="tab" href="#classes">Classes (0)</a> | 28 | layerVersion : { |
27 | </li> | 29 | name : "{{layerversion.layer.name}}", |
28 | <li> | 30 | id : {{layerversion.id}}, |
29 | <a data-toggle="tab" href="#bbappends">bbappends (0)</a> | 31 | commit: "{{layerversion.commit}}", |
30 | </li> | 32 | inCurrentPrj : {{layer_in_project}}, |
31 | </ul> | 33 | url : "{% url 'layerdetails' layerversion.id %}", |
32 | <div class="tab-content"> | 34 | sourceId: {{layerversion.layer_source_id}}, |
33 | <div name="information" id="information" class="tab-pane active"> | 35 | } |
34 | <dl class="dl-horizontal"> | 36 | }; |
35 | <dt class=""> | 37 | |
36 | <i class="icon-question-sign get-help" title="Fetch/clone URL of the repository"></i> | 38 | try { |
37 | Repository URL | 39 | layerDetailsPageInit(ctx); |
38 | </dt> | 40 | } catch (e) { |
39 | <dd> | 41 | document.write("Sorry, An error has occurred loading this page"); |
40 | <form id="change-repo-form" class="control-group"> | 42 | console.warn(e); |
41 | <div class="input-append"> | 43 | } |
42 | <input type="text" class="input-xlarge" id="type-repo" value="{{layerversion.layer.vcs_url}}"> | 44 | }); |
43 | <button id="apply-change-repo" class="btn" type="button">Change</button> | 45 | </script> |
44 | <!--a href="#" id="cancel-change-repo" class="btn btn-link">Cancel</a--> | 46 | |
45 | </div> | 47 | {# If this is not an imported layer then hide the edit ui #} |
46 | <span class="help-block">Cloning this Git repository failed</span> | 48 | {% if layerversion.layer_source_id != 3 %} |
47 | </form> | 49 | <style> |
48 | </dd> | 50 | .icon-pencil { |
49 | <dt> | 51 | display:none; |
50 | <i class="icon-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)"></i> | 52 | } |
51 | Repository subdirectory | 53 | .delete-current-value{ |
52 | </dt> | 54 | display: none; |
53 | <dd> | 55 | } |
54 | <span id="subdir">{{layerversion.dirpath}}</span> | 56 | li .icon-trash { |
55 | <i id="change-subdir" class="icon-pencil"></i> | 57 | display:none; |
56 | <i id="delete-subdir" class="icon-trash"></i> | 58 | } |
57 | <form id="change-subdir-form" style="display:none;"> | 59 | .add-deps { |
58 | <div class="input-append"> | 60 | display:none; |
59 | <input type="text" id="type-subdir" value="meta-acer"> | 61 | } |
60 | <button id="apply-change-subdir" class="btn" type="button">Change</button> | 62 | </style> |
61 | <a href="#" id="cancel-change-subdir" class="btn btn-link">Cancel</a> | 63 | {% endif %} |
62 | </div> | 64 | |
63 | </form> | 65 | {% include "layers_dep_modal.html" %} |
64 | </dd> | 66 | <div class="container-fluid top-padded"> |
65 | <dt>Brach, tag or commit</dt> | 67 | <div class="row-fluid"> |
66 | <dd> | 68 | <div class="span11"> |
67 | {{layerversion.up_branch.name}} | 69 | <div class="page-header"> |
68 | <i class="icon-pencil"></i> | 70 | <h1>{{layerversion.layer.name}} <small class="commit" data-toggle="tooltip" title="{{layerversion.commit}}">({{layerversion.commit|truncatechars:13}})</small></h1> |
69 | </dd> | 71 | </div> |
70 | <dt> | ||
71 | <i class="icon-question-sign get-help" title="The Yocto Project versions with which this layer is compatible. Currently Toaster supports Yocto Project 1.6 and 1.7"></i> | ||
72 | Yocto Project compatibility | ||
73 | </dt> | ||
74 | <dd> | ||
75 | <i class="icon-pencil"></i> | ||
76 | </dd> | ||
77 | <dt> | ||
78 | <i class="icon-question-sign get-help" title="Other layers this layer depends upon"></i> | ||
79 | Layer dependencies | ||
80 | </dt> | ||
81 | <dd> | ||
82 | <ul class="unstyled"> | ||
83 | {% for ld in layer.dependencies.all %} | ||
84 | <li> | ||
85 | <a href="#">openembedded core (meta)</a> | ||
86 | <i class="icon-trash"></i> | ||
87 | </li> | ||
88 | {% endfor %} | ||
89 | </ul> | ||
90 | <div class="input-append"> | ||
91 | <input type="text" autocomplete="off" data-minLength="1" data-autocomplete="off" | ||
92 | data-provide="typeahead" data-source=' | ||
93 | ' | ||
94 | placeholder="Type a layer name" id="layer-dependency"> | ||
95 | <a class="btn" type="button" id="add-layer-dependency" disabled> | ||
96 | Add layer | ||
97 | </a> | ||
98 | </div> | ||
99 | <span class="help-block">You can only add layers Toaster knows about</span> | ||
100 | </dd> | ||
101 | </dl> | ||
102 | </div> | ||
103 | <div name="targets" id="targets" class="tab-pane"> | ||
104 | <div class="alert alert-info"> | ||
105 | <strong>There is no target data for {{layerversion.layer.name}} ... yet</strong> <br /> | ||
106 | Toaster learns about layers as they are built. Once you have used {{layerversion.layer.name}} in a build, Toaster will show you | ||
107 | here the targets it provides. | ||
108 | </div> | ||
109 | </div> | ||
110 | <div name="machines" id="machines" class="tab-pane"> | ||
111 | <div class="alert alert-info"> | ||
112 | <strong>There is no machine data for {{layerversion.layer.name}} ... yet</strong> <br /> | ||
113 | Toaster learns about layers as they are built. Once you have used {{layerversion.layer.name}} in a build, Toaster will show you | ||
114 | here the machines it provides. | ||
115 | </div> | ||
116 | </div> | ||
117 | </div> | 72 | </div> |
118 | </div> | 73 | </div> |
119 | <div class="row span4 well"> | 74 | |
120 | <h2>About {{layerversion.layer.name}}</h2> | 75 | <div class="row-fluid"> |
121 | <dl> | 76 | <div class="span7"> |
122 | 77 | <div class="tabbable"> | |
123 | <dt> | 78 | <div class="alert alert-info lead" id="alert-area" style="display:none"> |
124 | Summary | 79 | <button type="button" class="close" id="dismiss-alert" data-dismiss="alert">×</button> |
125 | <i class="icon-question-sign get-help" title="One-line description of the layer"></i> | 80 | <span id="alert-msg"></span> |
126 | </dt> | 81 | <p style="margin-top:10px;"><a href="{% url 'project' project.id %}">Go to project configuration</a></p> |
127 | <dd> | 82 | </div> |
128 | <span >{{layerversion.layer.summary}}</span> | 83 | <ul class="nav nav-pills"> |
129 | <i class="icon-pencil"></i> | 84 | <li class="active"> |
130 | </dd> | 85 | <a data-toggle="tab" href="#information" id="details-tab">Layer details</a> |
131 | <!--form> | 86 | </li> |
132 | <textarea class="span12" rows="2"></textarea> | 87 | <li> |
133 | <button class="btn" type="button">Change</button> | 88 | <a data-toggle="tab" href="#targets" id="targets-tab">Targets ({{total_targets}})</a> |
134 | <a href="#" class="btn btn-link">Cancel</a> | 89 | </li> |
135 | </form--> | 90 | <li> |
136 | <dt> | 91 | <a data-toggle="tab" href="#machines" id="machines-tab">Machines ({{total_machines}})</a> |
137 | Description | 92 | </li> |
138 | </dt> | 93 | </ul> |
139 | <dd> | 94 | </div> |
140 | <span >{{layerversion.layer.description}}</span> | 95 | <div class="tab-content"> |
141 | <i class="icon-pencil"></i> | 96 | <span class="button-place"> |
142 | </dd> | 97 | {% if layer_in_project == 0 %} |
143 | <!--form> | 98 | <button id="add-remove-layer-btn" data-directive="add" class="btn btn-large btn-block"> |
144 | <textarea class="span12" rows="6"></textarea> | 99 | <span class="icon-plus"></span> |
145 | <button class="btn" type="button">Change</button> | 100 | Add the {{layerversion.layer.name}} layer to your project |
146 | <a href="#" class="btn btn-link">Cancel</a> | 101 | </button> |
147 | </form--> | 102 | {% else %} |
148 | <dt> | 103 | <button id="add-remove-layer-btn" data-directive="remove" class="btn btn-block btn-large btn-danger"> |
149 | Maintainer(s) | 104 | <span class="icon-trash"></span> |
150 | </dt> | 105 | Delete the {{layerversion.layer.name}} layer from your project |
151 | <dd> | 106 | </button> |
152 | <span class="muted">Not set</span> | 107 | {% endif %} |
153 | <i class="icon-pencil"></i> | 108 | </span> |
154 | </dd> | 109 | |
155 | </dl> | 110 | <!-- layer details pane --> |
156 | </div> | 111 | <div name="information" id="information" class="tab-pane active"> |
112 | <dl class="dl-horizontal"> | ||
113 | <dt class=""> | ||
114 | <i class="icon-question-sign get-help" title="Fetch/clone URL of the repository"></i> | ||
115 | Repository URL | ||
116 | </dt> | ||
117 | <dd> | ||
118 | <span class="current-value">{{layerversion.layer.vcs_url}}</span> | ||
119 | {% if layerversion.get_vcs_link_url %} | ||
120 | <a href="{{layerversion.get_vcs_link_url}}/" class="icon-share get-info"></a> | ||
121 | {% endif %} | ||
122 | <form id="change-repo-form" class="control-group" style="display:none"> | ||
123 | <div class="input-append"> | ||
124 | <input type="text" class="input-xlarge" value="{{layerversion.layer.vcs_url}}"> | ||
125 | <button data-layer-prop="vcs_url" class="btn change-btn" type="button">Save</button> | ||
126 | <a href="#" style="display:none" class="btn btn-link cancel">Cancel</a> | ||
127 | </div> | ||
128 | </form> | ||
129 | <i class="icon-pencil" ></i> | ||
130 | </dd> | ||
131 | <dt> | ||
132 | <i class="icon-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)"></i> | ||
133 | Repository subdirectory | ||
134 | </dt> | ||
135 | <dd> | ||
136 | <span class="muted" style="display:none">Not set</span> | ||
137 | <span class="current-value">{{layerversion.dirpath}}</span> | ||
138 | {% if layerversion.get_vcs_dirpath_link_url %} | ||
139 | <a href="{{layerversion.get_vcs_dirpath_link_url}}" class="icon-share get-info"></a> | ||
140 | {% endif %} | ||
141 | <form id="change-subdir-form" style="display:none;"> | ||
142 | <div class="input-append"> | ||
143 | <input type="text" value="{{layerversion.dirpath}}"> | ||
144 | <button data-layer-prop="dirpath" class="btn change-btn" type="button">Save</button> | ||
145 | <a href="#" style="display:none" class="btn btn-link cancel">Cancel</a> | ||
146 | </div> | ||
147 | </form> | ||
148 | <i id="change-subdir" class="icon-pencil"></i> | ||
149 | <span class="icon-trash delete-current-value" data-toggle="tooltip" title="Delete"></span> | ||
150 | </dd> | ||
151 | <dt>Brach, tag or commit</dt> | ||
152 | <dd> | ||
153 | <span class="current-value">{{layerversion.commit}}</span> | ||
154 | <form style="display:none;"> | ||
155 | <div class="input-append"> | ||
156 | <input type="text" value="{{layerversion.commit}}"> | ||
157 | <button data-layer-prop="commit" class="btn change-btn" type="button">Save</button> | ||
158 | <a href="#" style="display:none" class="btn btn-link cancel">Cancel</a> | ||
159 | </div> | ||
160 | </form> | ||
161 | <i class="icon-pencil"></i> | ||
162 | </dd> | ||
163 | <dt> | ||
164 | <i class="icon-question-sign get-help" title="The Yocto Project versions with which this layer is compatible. Currently Toaster supports Yocto Project 1.6 and 1.7"></i> | ||
165 | Yocto Project compatibility | ||
166 | </dt> | ||
167 | <dd> | ||
168 | <span class="current-value">{{layerversion.up_branch.name}}</span> | ||
169 | <form style="display:none"> | ||
170 | <div class="input-append"> | ||
171 | <select name="projectversion" id="projectversion"> | ||
172 | {% for compat in yocto_compat %} | ||
173 | <option value="{{compat.id}}" {%if layerversion.up_branch.id == compat.id %} selected{%endif%}>{{compat.name}}</option> | ||
174 | {% endfor %} | ||
175 | </select> | ||
176 | <button data-layer-prop="up_branch" class="btn change-btn" type="button">Save</button> | ||
177 | <a href="#" style="display:none" class="btn btn-link cancel">Cancel</a> | ||
178 | </div> | ||
179 | </form> | ||
180 | <i class="icon-pencil"></i> | ||
181 | </dd> | ||
182 | <dt> | ||
183 | <i class="icon-question-sign get-help" title="Other layers this layer depends upon"></i> | ||
184 | Layer dependencies | ||
185 | </dt> | ||
186 | <dd> | ||
187 | <ul class="unstyled" id="layer-deps-list"> | ||
188 | {% for ld in layerversion.dependencies.all %} | ||
189 | <span class="current-value"> | ||
190 | <li data-layer-id="{{ld.depends_on.id}}"> | ||
191 | <!-- TODO use ld.depends_on.get_vcs_reference instead of commit --> | ||
192 | <a data-toggle="tooltip" title="{{ld.depends_on.layer.vcs_url}} | {{ld.depends_on.commit}}" href="{% url 'layerdetails' ld.depends_on.id %}">{{ld.depends_on.layer.name}}</a> | ||
193 | <span class="icon-trash " data-toggle="tooltip" title="Delete"></span> | ||
194 | </li> | ||
195 | </span> | ||
196 | {% endfor %} | ||
197 | </ul> | ||
198 | <div class="input-append add-deps"> | ||
199 | <input type="text" autocomplete="off" data-minLength="1" data-autocomplete="off" placeholder="Type a layer name" id="layer-dep-input"> | ||
200 | <a class="btn" type="button" id="add-layer-dependency-btn" disabled> | ||
201 | Add layer | ||
202 | </a> | ||
203 | </div> | ||
204 | <span class="help-block add-deps">You can only add layers Toaster knows about</span> | ||
205 | </dd> | ||
206 | </dl> | ||
207 | </div> | ||
208 | <!-- targets tab --> | ||
209 | <div name="targets" id="targets" class="tab-pane"> | ||
210 | {% if total_targets == 0 %} | ||
211 | <div class="alert alert-info"> | ||
212 | <strong>There is no target data for {{layerversion.layer.name}} ... yet</strong> <br /> | ||
213 | Toaster learns about layers as they are built. Once you have used {{layerversion.layer.name}} in a build, Toaster will show you | ||
214 | here the targets it provides. | ||
215 | </div> | ||
216 | {% else %} | ||
217 | |||
218 | <div class="row-fluid"> | ||
219 | |||
220 | {% if targets.paginator.count == 0 %} | ||
221 | <div class="alert"> | ||
222 | <h3>No targets found</h3> | ||
223 | {% endif %} | ||
224 | |||
225 | {# only show the search form if we have more than 10 results #} | ||
226 | {% if targets.paginator.count > 10 or request.GET.targets_search %} | ||
227 | {% if targets.paginator.count == 0 %} | ||
228 | <form class="input-append"> | ||
229 | {% else %} | ||
230 | <form class="navbar-search input-append pull-left"> | ||
231 | {% endif %} | ||
232 | |||
233 | <input type="text" id="target-search" name="targets_search" placeholder="Search targets" class="input-xlarge" value="{{request.GET.targets_search}}"> | ||
234 | {% if request.GET.targets_search %} | ||
235 | <a class="add-on btn" id="target-search-clear"> | ||
236 | <i class="icon-remove"></i> | ||
237 | </a> | ||
238 | {% endif %} | ||
239 | <button type="submit" class="btn">Search</button> | ||
240 | </form> | ||
241 | {% endif %} | ||
242 | |||
243 | {% if targets.paginator.count == 0 %} | ||
244 | <!-- end alert --> | ||
245 | </div> | ||
246 | <!-- end row-fluid --> | ||
247 | </div> | ||
248 | {% else %} | ||
249 | |||
250 | <div class="pull-right"> | ||
251 | <span class="help-inline" style="padding-top:5px;">Show rows:</span> | ||
252 | <select style="margin-top:5px;margin-bottom:0px;" class="pagesize"> | ||
253 | {% with "10 25 50 100 150" as list%} | ||
254 | {% for i in list.split %} | ||
255 | {% if request.session.limit == i %} | ||
256 | <option value="{{i}}" selected>{{i}}</option> | ||
257 | {% else %} | ||
258 | <option value="{{i}}">{{i}}</option> | ||
259 | {% endif %} | ||
260 | {% endfor %} | ||
261 | {% endwith %} | ||
262 | </select> | ||
263 | </div> | ||
264 | </div> | ||
265 | |||
266 | <table class="table table-bordered table-hover"> | ||
267 | <thead> | ||
268 | <tr> | ||
269 | <th> | ||
270 | <i class="icon-question-sign get-help" title="Information about a single piece of software, including where to download the source, configuration options, how to compile the source files and how to package the compiled output"></i> | ||
271 | Target | ||
272 | {% if request.GET.targets_search %} | ||
273 | <span class="badge badge-info">{{targets.paginator.count}}</span> | ||
274 | {% endif %} | ||
275 | </th> | ||
276 | <th> | ||
277 | <i class="icon-question-sign get-help" title="The recipe version and revision"></i> | ||
278 | Target version | ||
279 | </th> | ||
280 | <th class="span4">Description</th> | ||
281 | <th>Build target</th> | ||
282 | </tr> | ||
283 | </thead> | ||
284 | <tbody> | ||
285 | {% for target in targets %} | ||
286 | <tr> | ||
287 | <td> | ||
288 | {{target.name}} | ||
289 | {% if target.up_id %} | ||
290 | <a href="http://layers.openembedded.org/layerindex/recipe/{{target.up_id}}/" class="icon-share get-info"></a> | ||
291 | {% endif %} | ||
292 | </td> | ||
293 | <td>{{target.version}}</td> | ||
294 | <td>{{target.summary}}</td> | ||
295 | <td><button class="btn btn-block build-target-btn" data-target-name="{{target.name}}" {% if layer_in_project == 0 %}disabled="disabled"{% endif %} >Build Target</button></td> | ||
296 | </tr> | ||
297 | {% endfor %} | ||
298 | </tbody> | ||
299 | </table> | ||
300 | |||
301 | <!-- Show pagination controls --> | ||
302 | <div class="pagination"> | ||
303 | <ul> | ||
304 | {%if targets.has_previous %} | ||
305 | <li><a href="?tpage={{targets.previous_page_number}}{{request.GET.limit}}#targets">«</a></li> | ||
306 | {%else%} | ||
307 | <li class="disabled"><a href="#">«</a></li> | ||
308 | {%endif%} | ||
309 | {% for i in targets.paginator.page_range %} | ||
310 | <li {%if i == targets.number %} class="active" {%endif%}><a href="?tpage={{i}}#targets">{{i}}</a></li> | ||
311 | {% endfor %} | ||
312 | {%if targets.has_next%} | ||
313 | <li><a href="?tpage={{targets.next_page_number}}#targets">»</a></li> | ||
314 | {%else%} | ||
315 | <li class="disabled"><a href="#">»</a></li> | ||
316 | {%endif%} | ||
317 | </ul> | ||
318 | <div class="pull-right"> | ||
319 | <span class="help-inline" style="padding-top:5px;">Show rows:</span> | ||
320 | <select style="margin-top:5px;margin-bottom:0px;" class="pagesize"> | ||
321 | {% with "10 25 50 100 150" as list%} | ||
322 | {% for i in list.split %} | ||
323 | {% if request.session.limit == i %} | ||
324 | <option value="{{i}}" selected>{{i}}</option> | ||
325 | {% else %} | ||
326 | <option value="{{i}}">{{i}}</option> | ||
327 | {% endif %} | ||
328 | {% endfor %} | ||
329 | {% endwith %} | ||
330 | </select> | ||
331 | </div> | ||
332 | </div> | ||
333 | {% endif %} | ||
334 | {% endif %} | ||
335 | </div> | ||
336 | |||
337 | |||
338 | <div name="machines" id="machines" class="tab-pane"> | ||
339 | {% if total_machines == 0 %} | ||
340 | <div class="alert alert-info"> | ||
341 | <strong>There is no machine data for {{layerversion.layer.name}} ... yet</strong> <br /> | ||
342 | Toaster learns about layers as they are built. Once you have used {{layerversion.layer.name}} in a build, Toaster will show you | ||
343 | here the machines it provides. | ||
344 | </div> | ||
345 | {% else %} | ||
346 | |||
347 | <div class="row-fluid"> | ||
348 | |||
349 | {% if machines.paginator.count == 0 %} | ||
350 | <div class="alert"> | ||
351 | <h3>No machines found</h3> | ||
352 | {% endif %} | ||
353 | |||
354 | {# only show the search form if we have more than 10 results #} | ||
355 | {% if machines.paginator.count > 10 or request.GET.machines_search %} | ||
356 | {% if machines.paginator.count == 0 %} | ||
357 | <form class="input-append"> | ||
358 | {% else %} | ||
359 | <form class="navbar-search input-append pull-left"> | ||
360 | {% endif %} | ||
361 | |||
362 | <input type="text" id="machine-search" name="machines_search" placeholder="Search machines" class="input-xlarge" value="{{request.GET.machines_search}}"> | ||
363 | {% if request.GET.machines_search %} | ||
364 | <a class="add-on btn" id="machine-search-clear"> | ||
365 | <i class="icon-remove"></i> | ||
366 | </a> | ||
367 | {% endif %} | ||
368 | <button type="submit" class="btn">Search</button> | ||
369 | </form> | ||
370 | {% endif %} | ||
371 | |||
372 | {% if machines.paginator.count == 0 %} | ||
373 | <!-- end alert --> | ||
374 | </div> | ||
375 | <!-- end row-fluid --> | ||
376 | </div> | ||
377 | {% else %} | ||
378 | |||
379 | <div class="pull-right"> | ||
380 | <span class="help-inline" style="padding-top:5px;">Show rows:</span> | ||
381 | <select style="margin-top:5px;margin-bottom:0px;" class="pagesize"> | ||
382 | {% with "10 25 50 100 150" as list%} | ||
383 | {% for i in list.split %} | ||
384 | {% if request.session.limit == i %} | ||
385 | <option value="{{i}}" selected>{{i}}</option> | ||
386 | {% else %} | ||
387 | <option value="{{i}}">{{i}}</option> | ||
388 | {% endif %} | ||
389 | {% endfor %} | ||
390 | {% endwith %} | ||
391 | </select> | ||
392 | </div> | ||
393 | </div> | ||
394 | |||
395 | <table class="table table-bordered table-hover"> | ||
396 | <thead> | ||
397 | <tr> | ||
398 | <th> | ||
399 | <i class="icon-question-sign get-help" title="The machine is the hardware for which you are building"></i> | ||
400 | Machine | ||
401 | {% if request.GET.machines_search %} | ||
402 | <span class="badge badge-info">{{machines.paginator.count}}</span> | ||
403 | {% endif %} | ||
404 | </th> | ||
405 | <th>Description</th> | ||
406 | <th>Select machine</th> | ||
407 | </tr> | ||
408 | </thead> | ||
409 | <tbody> | ||
410 | {% for machine in machines %} | ||
411 | <tr> | ||
412 | <td>{{machine.name}}</td> | ||
413 | <td>{{machine.description}}</td> | ||
414 | <td><button class="btn btn-block select-machine-btn" data-machine-name="{{machine.name}}" {% if layer_in_project == 0 %}disabled="disabled"{% endif %}}>Select machine</button></td> | ||
415 | </tr> | ||
416 | {% endfor %} | ||
417 | </tbody> | ||
418 | </table> | ||
419 | |||
420 | <!-- Show pagination controls --> | ||
421 | <div class="pagination"> | ||
422 | <ul> | ||
423 | {%if machines.has_previous %} | ||
424 | <li><a href="?mpage={{machines.previous_page_number}}{{request.GET.limit}}#machines">«</a></li> | ||
425 | {%else%} | ||
426 | <li class="disabled"><a href="#">«</a></li> | ||
427 | {%endif%} | ||
428 | {% for i in machines.paginator.page_range %} | ||
429 | <li {%if i == machines.number %} class="active" {%endif%}><a href="?mpage={{i}}#machines">{{i}}</a></li> | ||
430 | {% endfor %} | ||
431 | {%if machines.has_next%} | ||
432 | <li><a href="?mpage={{machines.next_page_number}}#machines">»</a></li> | ||
433 | {%else%} | ||
434 | <li class="disabled"><a href="#">»</a></li> | ||
435 | {%endif%} | ||
436 | </ul> | ||
437 | <div class="pull-right"> | ||
438 | <span class="help-inline" style="padding-top:5px;">Show rows:</span> | ||
439 | <select style="margin-top:5px;margin-bottom:0px;" class="pagesize"> | ||
440 | {% with "10 25 50 100 150" as list%} | ||
441 | {% for i in list.split %} | ||
442 | {% if request.session.limit == i %} | ||
443 | <option value="{{i}}" selected>{{i}}</option> | ||
444 | {% else %} | ||
445 | <option value="{{i}}">{{i}}</option> | ||
446 | {% endif %} | ||
447 | {% endfor %} | ||
448 | {% endwith %} | ||
449 | </select> | ||
450 | </div> | ||
451 | </div> | ||
452 | {% endif %} | ||
453 | {% endif %} | ||
454 | </div> | ||
455 | </div> | ||
456 | </div> | ||
457 | <div class="row span4 well"> | ||
458 | <h2>About {{layerversion.layer.name}}</h2> | ||
459 | <dl> | ||
460 | |||
461 | <dt> | ||
462 | Summary | ||
463 | <i class="icon-question-sign get-help" title="One-line description of the layer"></i> | ||
464 | </dt> | ||
465 | <dd> | ||
466 | <span class="muted" style="display:none">Not set</span> | ||
467 | <span class="current-value">{{layerversion.layer.summary}}</span> | ||
468 | <form style="display:none; margin-bottom:20px"> | ||
469 | <textarea class="span12" rows="2">{% if layerversion.layer.summary %}{{layerversion.layer.summary}}{% endif %}</textarea> | ||
470 | <button class="btn change-btn" data-layer-prop="summary" type="button">Save</button> | ||
471 | <a href="#" class="btn btn-link cancel">Cancel</a> | ||
472 | </form> | ||
473 | <i class="icon-pencil"></i> | ||
474 | <span class="icon-trash delete-current-value" data-toggle="tooltip" title="Delete"></span> | ||
475 | </dd> | ||
476 | <dt> | ||
477 | Description | ||
478 | </dt> | ||
479 | <dd> | ||
480 | <span class="muted" style="display:none">Not set</span> | ||
481 | <span class="current-value">{{layerversion.layer.description}}</span> | ||
482 | <form style="display:none; margin-bottom:20px"> | ||
483 | <textarea class="span12" rows="6">{% if layerversion.layer.description %}{{layerversion.layer.description}}{% endif %}</textarea> | ||
484 | <button class="btn change-btn" data-layer-prop="description" type="button" >Save</button> | ||
485 | <a href="#" class="btn btn-link cancel">Cancel</a> | ||
486 | </form> | ||
487 | <i class="icon-pencil"></i> | ||
488 | <span class="icon-trash delete-current-value" data-toggle="tooltip" title="Delete"></span> | ||
489 | </dd> | ||
490 | </dd> | ||
491 | {% if layerversion.layer.up_id %} | ||
492 | <dt>Layer index</dt> | ||
493 | <dd> | ||
494 | <a href="http://layers.openembedded.org/layerindex/branch/{{layerversion.up_branch.name}}/layer/{{layerversion.layer.name}}"/>layer index link</a> | ||
495 | |||
496 | </dd> | ||
497 | {% endif %} | ||
157 | 498 | ||
499 | </dl> | ||
500 | </div> | ||
158 | 501 | ||
502 | </div> | ||
503 | </div> | ||
504 | </div> | ||
159 | {% endblock %} | 505 | {% endblock %} |
diff --git a/bitbake/lib/toaster/toastergui/templates/layers_dep_modal.html b/bitbake/lib/toaster/toastergui/templates/layers_dep_modal.html index b03fd0b218..8222027d4f 100644 --- a/bitbake/lib/toaster/toastergui/templates/layers_dep_modal.html +++ b/bitbake/lib/toaster/toastergui/templates/layers_dep_modal.html | |||
@@ -18,7 +18,16 @@ | |||
18 | </div> | 18 | </div> |
19 | 19 | ||
20 | <script> | 20 | <script> |
21 | /* projectId: current project | ||
22 | * layer: Object representing the parent layer { id: .. name: ... url } | ||
23 | * dependencies: array of dependency layer objects { id: .. name: ..} | ||
24 | * title: optional override for title | ||
25 | * body: optional override for body | ||
26 | * addToProject: Whether to add layers to project on accept | ||
27 | * successAdd: function to run on success | ||
28 | */ | ||
21 | function show_layer_deps_modal(projectId, layer, dependencies, title, body, addToProject, successAdd) { | 29 | function show_layer_deps_modal(projectId, layer, dependencies, title, body, addToProject, successAdd) { |
30 | |||
22 | // update layer name | 31 | // update layer name |
23 | if (title) { | 32 | if (title) { |
24 | $('#dependencies_modal #title').text(title); | 33 | $('#dependencies_modal #title').text(title); |