diff options
Diffstat (limited to 'bitbake/lib/toaster/toastergui/templates')
3 files changed, 178 insertions, 80 deletions
diff --git a/bitbake/lib/toaster/toastergui/templates/basebuildpage.html b/bitbake/lib/toaster/toastergui/templates/basebuildpage.html index ff9433eee7..4a8e2a7abd 100644 --- a/bitbake/lib/toaster/toastergui/templates/basebuildpage.html +++ b/bitbake/lib/toaster/toastergui/templates/basebuildpage.html | |||
@@ -1,90 +1,149 @@ | |||
1 | {% extends "base.html" %} | 1 | {% extends "base.html" %} |
2 | {% load projecttags %} | 2 | {% load projecttags %} |
3 | {% load project_url_tag %} | 3 | {% load project_url_tag %} |
4 | {% load queryset_to_list_filter %} | ||
4 | {% load humanize %} | 5 | {% load humanize %} |
5 | {% block pagecontent %} | 6 | {% block pagecontent %} |
7 | <!-- breadcrumbs --> | ||
8 | <div class="section"> | ||
9 | <ul class="breadcrumb" id="breadcrumb"> | ||
10 | <li><a href="{% project_url build.project %}">{{build.project.name}}</a></li> | ||
11 | {% if not build.project.is_default %} | ||
12 | <li><a href="{% url 'projectbuilds' build.project.id %}">Builds</a></li> | ||
13 | {% endif %} | ||
14 | <li> | ||
15 | {% block parentbreadcrumb %} | ||
16 | <a href="{%url 'builddashboard' build.pk%}"> | ||
17 | {{build.get_sorted_target_list.0.target}} {% if build.target_set.all.count > 1 %}(+{{build.target_set.all.count|add:"-1"}}){% endif %} {{build.machine}} ({{build.completed_on|date:"d/m/y H:i"}}) | ||
18 | </a> | ||
19 | {% endblock %} | ||
20 | </li> | ||
21 | {% block localbreadcrumb %}{% endblock %} | ||
22 | </ul> | ||
23 | <script> | ||
24 | $( function () { | ||
25 | $('#breadcrumb > li').append('<span class="divider">→</span>'); | ||
26 | $('#breadcrumb > li:last').addClass("active"); | ||
27 | $('#breadcrumb > li:last > span').remove(); | ||
28 | }); | ||
29 | </script> | ||
30 | </div> | ||
31 | |||
32 | <div class="row-fluid"> | ||
33 | <!-- begin left sidebar container --> | ||
34 | <div id="nav" class="span2"> | ||
35 | <ul class="nav nav-list well"> | ||
36 | <li | ||
37 | {% if request.resolver_match.url_name == 'builddashboard' %} | ||
38 | class="active" | ||
39 | {% endif %} > | ||
40 | <a class="nav-parent" href="{% url 'builddashboard' build.pk %}">Build summary</a> | ||
41 | </li> | ||
42 | {% if build.target_set.all.0.is_image and build.outcome == 0 %} | ||
43 | <li class="nav-header">Images</li> | ||
44 | {% block nav-target %} | ||
45 | {% for t in build.get_sorted_target_list %} | ||
46 | <li><a href="{% url 'target' build.pk t.pk %}">{{t.target}}</a><li> | ||
47 | {% endfor %} | ||
48 | {% endblock %} | ||
49 | {% endif %} | ||
50 | <li class="nav-header">Build</li> | ||
51 | {% block nav-configuration %} | ||
52 | <li><a href="{% url 'configuration' build.pk %}">Configuration</a></li> | ||
53 | {% endblock %} | ||
54 | {% block nav-tasks %} | ||
55 | <li><a href="{% url 'tasks' build.pk %}">Tasks</a></li> | ||
56 | {% endblock %} | ||
57 | {% block nav-recipes %} | ||
58 | <li><a href="{% url 'recipes' build.pk %}">Recipes</a></li> | ||
59 | {% endblock %} | ||
60 | {% block nav-packages %} | ||
61 | <li><a href="{% url 'packages' build.pk %}">Packages</a></li> | ||
62 | {% endblock %} | ||
63 | <li class="nav-header">Performance</li> | ||
64 | {% block nav-buildtime %} | ||
65 | <li><a href="{% url 'buildtime' build.pk %}">Time</a></li> | ||
66 | {% endblock %} | ||
67 | {% block nav-cputime %} | ||
68 | <li><a href="{% url 'cputime' build.pk %}">CPU usage</a></li> | ||
69 | {% endblock %} | ||
70 | {% block nav-diskio %} | ||
71 | <li><a href="{% url 'diskio' build.pk %}">Disk I/O</a></li> | ||
72 | {% endblock %} | ||
6 | 73 | ||
74 | <li class="divider"></li> | ||
7 | 75 | ||
8 | <div class=""> | 76 | <li> |
9 | <!-- Breadcrumbs --> | 77 | <p class="navbar-btn"> |
10 | <div class="section"> | 78 | <a class="btn btn-block" href="{% url 'build_artifact' build.id 'cookerlog' build.id %}"> |
11 | <ul class="breadcrumb" id="breadcrumb"> | 79 | Download build log |
12 | <li><a href="{% project_url build.project %}">{{build.project.name}}</a></li> | ||
13 | {% if not build.project.is_default %} | ||
14 | <li><a href="{% url 'projectbuilds' build.project.id %}">Builds</a></li> | ||
15 | {% endif %} | ||
16 | <li> | ||
17 | {% block parentbreadcrumb %} | ||
18 | <a href="{%url 'builddashboard' build.pk%}"> | ||
19 | {{build.get_sorted_target_list.0.target}} {%if build.target_set.all.count > 1%}(+{{build.target_set.all.count|add:"-1"}}){%endif%} {{build.machine}} ({{build.completed_on|date:"d/m/y H:i"}}) | ||
20 | </a> | 80 | </a> |
21 | {% endblock %} | 81 | </p> |
22 | </li> | 82 | </li> |
23 | {% block localbreadcrumb %}{% endblock %} | ||
24 | </ul> | ||
25 | <script> | ||
26 | $( function () { | ||
27 | $('#breadcrumb > li').append('<span class="divider">→</span>'); | ||
28 | $('#breadcrumb > li:last').addClass("active"); | ||
29 | $('#breadcrumb > li:last > span').remove(); | ||
30 | }); | ||
31 | </script> | ||
32 | </div> | ||
33 | 83 | ||
34 | <div class="row-fluid"> | 84 | <li> |
85 | <!-- edit custom image built during this build --> | ||
86 | <p class="navbar-btn" data-role="edit-custom-image-trigger"> | ||
87 | <button class="btn btn-block">Edit custom image</button> | ||
88 | </p> | ||
89 | {% include 'editcustomimage_modal.html' %} | ||
90 | <script> | ||
91 | $(document).ready(function () { | ||
92 | var editableCustomImageRecipes = {{ build.get_custom_image_recipes | queryset_to_list:"id,name" | json }}; | ||
35 | 93 | ||
36 | <!-- begin left sidebar container --> | 94 | // edit custom image which was built during this build |
37 | <div id="nav" class="span2"> | 95 | var editCustomImageModal = $('#edit-custom-image-modal'); |
38 | <ul class="nav nav-list well"> | 96 | var editCustomImageTrigger = $('[data-role="edit-custom-image-trigger"]'); |
39 | <li | ||
40 | {% if request.resolver_match.url_name == 'builddashboard' %} | ||
41 | class="active" | ||
42 | {% endif %} > | ||
43 | <a class="nav-parent" href="{% url 'builddashboard' build.pk %}">Build summary</a> | ||
44 | </li> | ||
45 | {% if build.target_set.all.0.is_image and build.outcome == 0 %} | ||
46 | <li class="nav-header">Images</li> | ||
47 | {% block nav-target %} | ||
48 | {% for t in build.get_sorted_target_list %} | ||
49 | <li><a href="{% url 'target' build.pk t.pk %}">{{t.target}}</a><li> | ||
50 | {% endfor %} | ||
51 | {% endblock %} | ||
52 | {% endif %} | ||
53 | <li class="nav-header">Build</li> | ||
54 | {% block nav-configuration %} | ||
55 | <li><a href="{% url 'configuration' build.pk %}">Configuration</a></li> | ||
56 | {% endblock %} | ||
57 | {% block nav-tasks %} | ||
58 | <li><a href="{% url 'tasks' build.pk %}">Tasks</a></li> | ||
59 | {% endblock %} | ||
60 | {% block nav-recipes %} | ||
61 | <li><a href="{% url 'recipes' build.pk %}">Recipes</a></li> | ||
62 | {% endblock %} | ||
63 | {% block nav-packages %} | ||
64 | <li><a href="{% url 'packages' build.pk %}">Packages</a></li> | ||
65 | {% endblock %} | ||
66 | <li class="nav-header">Performance</li> | ||
67 | {% block nav-buildtime %} | ||
68 | <li><a href="{% url 'buildtime' build.pk %}">Time</a></li> | ||
69 | {% endblock %} | ||
70 | {% block nav-cputime %} | ||
71 | <li><a href="{% url 'cputime' build.pk %}">CPU time</a></li> | ||
72 | {% endblock %} | ||
73 | {% block nav-diskio %} | ||
74 | <li><a href="{% url 'diskio' build.pk %}">Disk I/O</a></li> | ||
75 | {% endblock %} | ||
76 | </ul> | ||
77 | </div> | ||
78 | <!-- end left sidebar container --> | ||
79 | 97 | ||
80 | <!-- Begin right container --> | 98 | editCustomImageTrigger.click(function () { |
81 | {% block buildinfomain %}{% endblock %} | 99 | // if there is a single editable custom image, go direct to the edit |
82 | <!-- End right container --> | 100 | // page for it; if there are multiple editable custom images, show |
101 | // dialog to select one of them for editing | ||
83 | 102 | ||
103 | // single editable custom image | ||
84 | 104 | ||
85 | </div> | 105 | // multiple editable custom images |
86 | </div> | 106 | editCustomImageModal.modal('show'); |
107 | }); | ||
108 | }); | ||
109 | </script> | ||
110 | </li> | ||
87 | 111 | ||
112 | <li> | ||
113 | <!-- new custom image from image recipe in this build --> | ||
114 | <p class="navbar-btn" data-role="new-custom-image-trigger"> | ||
115 | <button class="btn btn-block">New custom image</button> | ||
116 | </p> | ||
117 | {% include 'newcustomimage_modal.html' %} | ||
118 | <script> | ||
119 | // imageRecipes includes both custom image recipes and built-in | ||
120 | // image recipes, any of which can be used as the basis for a | ||
121 | // new custom image | ||
122 | var imageRecipes = {{ build.get_image_recipes | queryset_to_list:"id,name" | json }}; | ||
88 | 123 | ||
89 | {% endblock %} | 124 | $(document).ready(function () { |
125 | var newCustomImageModal = $('#new-custom-image-modal'); | ||
126 | var newCustomImageTrigger = $('[data-role="new-custom-image-trigger"]'); | ||
90 | 127 | ||
128 | // show create new custom image modal to select an image built | ||
129 | // during this build as the basis for the custom recipe | ||
130 | newCustomImageTrigger.click(function () { | ||
131 | if (!imageRecipes.length) { | ||
132 | return; | ||
133 | } | ||
134 | newCustomImageModalSetRecipes(imageRecipes); | ||
135 | newCustomImageModal.modal('show'); | ||
136 | }); | ||
137 | }); | ||
138 | </script> | ||
139 | </li> | ||
140 | </ul> | ||
141 | |||
142 | </div> | ||
143 | <!-- end left sidebar container --> | ||
144 | |||
145 | <!-- begin right container --> | ||
146 | {% block buildinfomain %}{% endblock %} | ||
147 | <!-- end right container --> | ||
148 | </div> | ||
149 | {% endblock %} | ||
diff --git a/bitbake/lib/toaster/toastergui/templates/editcustomimage_modal.html b/bitbake/lib/toaster/toastergui/templates/editcustomimage_modal.html new file mode 100644 index 0000000000..fd998f63eb --- /dev/null +++ b/bitbake/lib/toaster/toastergui/templates/editcustomimage_modal.html | |||
@@ -0,0 +1,23 @@ | |||
1 | <!-- | ||
2 | modal dialog shown on the build dashboard, for editing an existing custom image | ||
3 | --> | ||
4 | <div class="modal hide fade in" aria-hidden="false" id="edit-custom-image-modal"> | ||
5 | <div class="modal-header"> | ||
6 | <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||
7 | <h3>Select custom image to edit</h3> | ||
8 | </div> | ||
9 | <div class="modal-body"> | ||
10 | <div class="row-fluid"> | ||
11 | <span class="help-block"> | ||
12 | Explanation of what this modal is for | ||
13 | </span> | ||
14 | </div> | ||
15 | <div class="control-group controls"> | ||
16 | <input type="text" class="huge" placeholder="input box" required> | ||
17 | <span class="help-block error" style="display:none">Error text</span> | ||
18 | </div> | ||
19 | </div> | ||
20 | <div class="modal-footer"> | ||
21 | <button class="btn btn-primary btn-large" disabled>Action</button> | ||
22 | </div> | ||
23 | </div> | ||
diff --git a/bitbake/lib/toaster/toastergui/templates/newcustomimage_modal.html b/bitbake/lib/toaster/toastergui/templates/newcustomimage_modal.html index b1b5148c08..caeb302352 100644 --- a/bitbake/lib/toaster/toastergui/templates/newcustomimage_modal.html +++ b/bitbake/lib/toaster/toastergui/templates/newcustomimage_modal.html | |||
@@ -15,18 +15,34 @@ | |||
15 | <div class="modal hide fade in" id="new-custom-image-modal" aria-hidden="false"> | 15 | <div class="modal hide fade in" id="new-custom-image-modal" aria-hidden="false"> |
16 | <div class="modal-header"> | 16 | <div class="modal-header"> |
17 | <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | 17 | <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> |
18 | <h3>Name your custom image</h3> | 18 | <h3>New custom image</h3> |
19 | </div> | 19 | </div> |
20 | |||
20 | <div class="modal-body"> | 21 | <div class="modal-body"> |
22 | <!-- | ||
23 | this container is visible if there are multiple image recipes which could | ||
24 | be used as a basis for the new custom image; radio buttons are added to it | ||
25 | via newCustomImageModalSetRecipes() as required | ||
26 | --> | ||
27 | <div data-role="image-selector" style="display:none;"> | ||
28 | <h4>Which image do you want to customise?</h4> | ||
29 | <div data-role="image-selector-radios"></div> | ||
30 | <span class="help-block error" id="invalid-recipe-help" style="display:none"></span> | ||
31 | <div class="air"></div> | ||
32 | </div> | ||
33 | |||
34 | <h4>Name your custom image</h4> | ||
35 | |||
21 | <div class="row-fluid"> | 36 | <div class="row-fluid"> |
22 | <span class="help-block span8">Image names must be unique. They should not contain spaces or capital letters, and the only allowed special character is dash (-).<p></p> | 37 | <span class="help-block span8">Image names must be unique. They should not contain spaces or capital letters, and the only allowed special character is dash (-).<p></p> |
23 | </span></div> | 38 | </span></div> |
24 | <div class="control-group controls"> | 39 | <div class="control-group controls"> |
25 | <input type="text" class="huge" placeholder="Type the custom image name" required> | 40 | <input type="text" class="huge" placeholder="Type the custom image name" required> |
26 | <span class="help-block error" id="invalid-name-help" style="display:none"></span> | 41 | <span class="help-block error" id="invalid-name-help" style="display:none"></span> |
27 | </div> | ||
28 | </div> | ||
29 | <div class="modal-footer"> | ||
30 | <button id="create-new-custom-image-btn" class="btn btn-primary btn-large" data-original-title="" title="" disabled>Create custom image</button> | ||
31 | </div> | 42 | </div> |
43 | </div> | ||
44 | |||
45 | <div class="modal-footer"> | ||
46 | <button id="create-new-custom-image-btn" class="btn btn-primary btn-large" data-original-title="" title="" disabled>Create custom image</button> | ||
47 | </div> | ||
32 | </div> | 48 | </div> |