diff options
Diffstat (limited to 'bitbake/lib/toaster/toastergui/tables.py')
-rw-r--r-- | bitbake/lib/toaster/toastergui/tables.py | 162 |
1 files changed, 83 insertions, 79 deletions
diff --git a/bitbake/lib/toaster/toastergui/tables.py b/bitbake/lib/toaster/toastergui/tables.py index 2bbef637aa..a0eb69591b 100644 --- a/bitbake/lib/toaster/toastergui/tables.py +++ b/bitbake/lib/toaster/toastergui/tables.py | |||
@@ -118,7 +118,7 @@ class LayersTable(ToasterTable): | |||
118 | </a> | 118 | </a> |
119 | {% if data.get_vcs_link_url %} | 119 | {% if data.get_vcs_link_url %} |
120 | <a target="_blank" href="{{ data.get_vcs_link_url }}"> | 120 | <a target="_blank" href="{{ data.get_vcs_link_url }}"> |
121 | <i class="icon-share get-info"></i> | 121 | <span class="glyphicon glyphicon-new-window"></span> |
122 | </a> | 122 | </a> |
123 | {% endif %} | 123 | {% endif %} |
124 | ''' | 124 | ''' |
@@ -135,7 +135,7 @@ class LayersTable(ToasterTable): | |||
135 | </a> | 135 | </a> |
136 | {% if data.dirpath and data.get_vcs_dirpath_link_url %} | 136 | {% if data.dirpath and data.get_vcs_dirpath_link_url %} |
137 | <a target="_blank" href="{{ data.get_vcs_dirpath_link_url }}"> | 137 | <a target="_blank" href="{{ data.get_vcs_dirpath_link_url }}"> |
138 | <i class="icon-share get-info"></i> | 138 | <span class="glyphicon glyphicon-new-window"></span> |
139 | </a> | 139 | </a> |
140 | {% endif %}''' | 140 | {% endif %}''' |
141 | 141 | ||
@@ -166,8 +166,8 @@ class LayersTable(ToasterTable): | |||
166 | deps_template = ''' | 166 | deps_template = ''' |
167 | {% with ods=data.dependencies.all%} | 167 | {% with ods=data.dependencies.all%} |
168 | {% if ods.count %} | 168 | {% if ods.count %} |
169 | <a class="btn" title="<a href='{% url "layerdetails" extra.pid data.id %}'>{{data.layer.name}}</a> dependencies" | 169 | <a class="btn btn-default" title="<a href='{% url "layerdetails" extra.pid data.id %}'>{{data.layer.name}}</a> dependencies" |
170 | data-content="<ul class='unstyled'> | 170 | data-content="<ul class='list-unstyled'> |
171 | {% for i in ods%} | 171 | {% for i in ods%} |
172 | <li><a href='{% url "layerdetails" extra.pid i.depends_on.pk %}'>{{i.depends_on.layer.name}}</a></li> | 172 | <li><a href='{% url "layerdetails" extra.pid i.depends_on.pk %}'>{{i.depends_on.layer.name}}</a></li> |
173 | {% endfor %} | 173 | {% endfor %} |
@@ -196,7 +196,7 @@ class MachinesTable(ToasterTable): | |||
196 | 196 | ||
197 | def __init__(self, *args, **kwargs): | 197 | def __init__(self, *args, **kwargs): |
198 | super(MachinesTable, self).__init__(*args, **kwargs) | 198 | super(MachinesTable, self).__init__(*args, **kwargs) |
199 | self.empty_state = "No machines maybe you need to do a build?" | 199 | self.empty_state = "Toaster has no machine information for this project. Sadly, machine information cannot be obtained from builds, so this page will remain empty." |
200 | self.title = "Compatible machines" | 200 | self.title = "Compatible machines" |
201 | self.default_orderby = "name" | 201 | self.default_orderby = "name" |
202 | 202 | ||
@@ -264,7 +264,7 @@ class MachinesTable(ToasterTable): | |||
264 | field_name="layer_version__get_vcs_reference") | 264 | field_name="layer_version__get_vcs_reference") |
265 | 265 | ||
266 | machine_file_template = '''<code>conf/machine/{{data.name}}.conf</code> | 266 | machine_file_template = '''<code>conf/machine/{{data.name}}.conf</code> |
267 | <a href="{{data.get_vcs_machine_file_link_url}}" target="_blank"><i class="icon-share get-info"></i></a>''' | 267 | <a href="{{data.get_vcs_machine_file_link_url}}" target="_blank"><span class="glyphicon glyphicon-new-window"></i></a>''' |
268 | 268 | ||
269 | self.add_column(title="Machine file", | 269 | self.add_column(title="Machine file", |
270 | hidden=True, | 270 | hidden=True, |
@@ -307,7 +307,11 @@ class LayerMachinesTable(MachinesTable): | |||
307 | self.add_column(title="Description", | 307 | self.add_column(title="Description", |
308 | field_name="description") | 308 | field_name="description") |
309 | 309 | ||
310 | select_btn_template = '<a href="{% url "project" extra.pid %}?setMachine={{data.name}}" class="btn btn-block select-machine-btn" {% if extra.in_prj == 0%}disabled="disabled"{%endif%}>Select machine</a>' | 310 | select_btn_template = ''' |
311 | <a href="{% url "project" extra.pid %}?setMachine={{data.name}}" | ||
312 | class="btn btn-default btn-block select-machine-btn | ||
313 | {% if extra.in_prj == 0%}disabled{%endif%}">Select machine</a> | ||
314 | ''' | ||
311 | 315 | ||
312 | self.add_column(title="Select machine", | 316 | self.add_column(title="Select machine", |
313 | static_data_name="add-del-layers", | 317 | static_data_name="add-del-layers", |
@@ -319,10 +323,10 @@ class RecipesTable(ToasterTable): | |||
319 | 323 | ||
320 | def __init__(self, *args, **kwargs): | 324 | def __init__(self, *args, **kwargs): |
321 | super(RecipesTable, self).__init__(*args, **kwargs) | 325 | super(RecipesTable, self).__init__(*args, **kwargs) |
322 | self.empty_state = "Toaster has no recipe information. To generate recipe information you can configure a layer source then run a build." | 326 | self.empty_state = "Toaster has no recipe information. To generate recipe information you need to run a build." |
323 | 327 | ||
324 | build_col = { 'title' : "Build", | 328 | build_col = { 'title' : "Build", |
325 | 'help_text' : "Add or delete recipes to and from your project", | 329 | 'help_text' : "Before building a recipe, you might need to add the corresponding layer to your project", |
326 | 'hideable' : False, | 330 | 'hideable' : False, |
327 | 'filter_name' : "in_current_project", | 331 | 'filter_name' : "in_current_project", |
328 | 'static_data_name' : "add-del-layers", | 332 | 'static_data_name' : "add-del-layers", |
@@ -383,7 +387,7 @@ class RecipesTable(ToasterTable): | |||
383 | recipe_file_template = ''' | 387 | recipe_file_template = ''' |
384 | <code>{{data.file_path}}</code> | 388 | <code>{{data.file_path}}</code> |
385 | <a href="{{data.get_vcs_recipe_file_link_url}}" target="_blank"> | 389 | <a href="{{data.get_vcs_recipe_file_link_url}}" target="_blank"> |
386 | <i class="icon-share get-info"></i> | 390 | <span class="glyphicon glyphicon-new-window"></i> |
387 | </a> | 391 | </a> |
388 | ''' | 392 | ''' |
389 | 393 | ||
@@ -454,7 +458,11 @@ class LayerRecipesTable(RecipesTable): | |||
454 | self.add_column(title="Description", | 458 | self.add_column(title="Description", |
455 | field_name="get_description_or_summary") | 459 | field_name="get_description_or_summary") |
456 | 460 | ||
457 | build_recipe_template ='<button class="btn btn-block build-recipe-btn" data-recipe-name="{{data.name}}" {%if extra.in_prj == 0 %}disabled="disabled"{%endif%}>Build recipe</button>' | 461 | build_recipe_template = ''' |
462 | <a class="btn btn-default btn-block build-recipe-btn | ||
463 | {% if extra.in_prj == 0 %}disabled{% endif %}" | ||
464 | data-recipe-name="{{data.name}}">Build recipe</a> | ||
465 | ''' | ||
458 | 466 | ||
459 | self.add_column(title="Build recipe", | 467 | self.add_column(title="Build recipe", |
460 | static_data_name="add-del-layers", | 468 | static_data_name="add-del-layers", |
@@ -497,7 +505,8 @@ class CustomImagesTable(ToasterTable): | |||
497 | recipe_file_template = ''' | 505 | recipe_file_template = ''' |
498 | {% if data.get_base_recipe_file %} | 506 | {% if data.get_base_recipe_file %} |
499 | <code>{{data.name}}_{{data.version}}.bb</code> | 507 | <code>{{data.name}}_{{data.version}}.bb</code> |
500 | <a href="{% url 'customrecipedownload' extra.pid data.pk %}" class="icon-download-alt get-help" title="Download recipe file"></a> | 508 | <a href="{% url 'customrecipedownload' extra.pid data.pk %}" |
509 | class="glyphicon glyphicon-download-alt get-help" title="Download recipe file"></a> | ||
501 | {% endif %}''' | 510 | {% endif %}''' |
502 | 511 | ||
503 | self.add_column(title="Recipe file", | 512 | self.add_column(title="Recipe file", |
@@ -505,18 +514,20 @@ class CustomImagesTable(ToasterTable): | |||
505 | static_data_template=recipe_file_template) | 514 | static_data_template=recipe_file_template) |
506 | 515 | ||
507 | approx_packages_template = ''' | 516 | approx_packages_template = ''' |
517 | {% if data.get_all_packages.count > 0 %} | ||
508 | <a href="{% url 'customrecipe' extra.pid data.id %}"> | 518 | <a href="{% url 'customrecipe' extra.pid data.id %}"> |
509 | {{data.get_all_packages.count}} | 519 | {{data.get_all_packages.count}} |
510 | </a>''' | 520 | </a> |
521 | {% endif %}''' | ||
511 | 522 | ||
512 | self.add_column(title="Approx packages", | 523 | self.add_column(title="Packages", |
513 | static_data_name='approx_packages', | 524 | static_data_name='approx_packages', |
514 | static_data_template=approx_packages_template) | 525 | static_data_template=approx_packages_template) |
515 | 526 | ||
516 | 527 | ||
517 | build_btn_template = ''' | 528 | build_btn_template = ''' |
518 | <button data-recipe-name="{{data.name}}" | 529 | <button data-recipe-name="{{data.name}}" |
519 | class="btn btn-block build-recipe-btn" style="margin-top: 5px;" > | 530 | class="btn btn-default btn-block build-recipe-btn"> |
520 | Build | 531 | Build |
521 | </button>''' | 532 | </button>''' |
522 | 533 | ||
@@ -704,7 +715,8 @@ class PackagesTable(ToasterTable): | |||
704 | 715 | ||
705 | self.add_column(title="License", | 716 | self.add_column(title="License", |
706 | field_name="license", | 717 | field_name="license", |
707 | orderable=True) | 718 | orderable=True, |
719 | hidden=True) | ||
708 | 720 | ||
709 | 721 | ||
710 | self.add_column(title="Dependencies", | 722 | self.add_column(title="Dependencies", |
@@ -847,26 +859,22 @@ class ProjectsTable(ToasterTable): | |||
847 | last_activity_on_template = ''' | 859 | last_activity_on_template = ''' |
848 | {% load project_url_tag %} | 860 | {% load project_url_tag %} |
849 | <span data-project-field="updated"> | 861 | <span data-project-field="updated"> |
850 | <a href="{% project_url data %}"> | ||
851 | {{data.updated | date:"d/m/y H:i"}} | 862 | {{data.updated | date:"d/m/y H:i"}} |
852 | </a> | ||
853 | </span> | 863 | </span> |
854 | ''' | 864 | ''' |
855 | 865 | ||
856 | release_template = ''' | 866 | release_template = ''' |
857 | <span data-project-field="release"> | 867 | <span data-project-field="release"> |
858 | {% if data.release %} | 868 | {% if data.release %} |
859 | <a href="{% url 'project' data.id %}#project-details"> | 869 | {{data.release.name}} |
860 | {{data.release.name}} | ||
861 | </a> | ||
862 | {% elif data.is_default %} | 870 | {% elif data.is_default %} |
863 | <span class="muted">Not applicable</span> | 871 | <span class="text-muted">Not applicable</span> |
864 | <i class="icon-question-sign get-help hover-help" | 872 | <span class="glyphicon glyphicon-question-sign get-help hover-help" |
865 | data-original-title="This project does not have a release set. | 873 | title="This project does not have a release set. |
866 | It simply collects information about the builds you start from | 874 | It simply collects information about the builds you start from |
867 | the command line while Toaster is running" | 875 | the command line while Toaster is running" |
868 | style="visibility: hidden;"> | 876 | style="visibility: hidden;"> |
869 | </i> | 877 | </span> |
870 | {% else %} | 878 | {% else %} |
871 | No release available | 879 | No release available |
872 | {% endif %} | 880 | {% endif %} |
@@ -876,16 +884,14 @@ class ProjectsTable(ToasterTable): | |||
876 | machine_template = ''' | 884 | machine_template = ''' |
877 | <span data-project-field="machine"> | 885 | <span data-project-field="machine"> |
878 | {% if data.is_default %} | 886 | {% if data.is_default %} |
879 | <span class="muted">Not applicable</span> | 887 | <span class="text-muted">Not applicable</span> |
880 | <i class="icon-question-sign get-help hover-help" | 888 | <span class="glyphicon glyphicon-question-sign get-help hover-help" |
881 | data-original-title="This project does not have a machine | 889 | title="This project does not have a machine |
882 | set. It simply collects information about the builds you | 890 | set. It simply collects information about the builds you |
883 | start from the command line while Toaster is running" | 891 | start from the command line while Toaster is running" |
884 | style="visibility: hidden;"></i> | 892 | style="visibility: hidden;"></span> |
885 | {% else %} | 893 | {% else %} |
886 | <a href="{% url 'project' data.id %}#machine-distro"> | 894 | {{data.get_current_machine_name}} |
887 | {{data.get_current_machine_name}} | ||
888 | </a> | ||
889 | {% endif %} | 895 | {% endif %} |
890 | </span> | 896 | </span> |
891 | ''' | 897 | ''' |
@@ -895,20 +901,16 @@ class ProjectsTable(ToasterTable): | |||
895 | <a href="{% url 'projectbuilds' data.id %}"> | 901 | <a href="{% url 'projectbuilds' data.id %}"> |
896 | {{data.get_number_of_builds}} | 902 | {{data.get_number_of_builds}} |
897 | </a> | 903 | </a> |
898 | {% else %} | ||
899 | <span class="muted">0</span> | ||
900 | {% endif %} | 904 | {% endif %} |
901 | ''' | 905 | ''' |
902 | 906 | ||
903 | last_build_outcome_template = ''' | 907 | last_build_outcome_template = ''' |
904 | {% if data.get_number_of_builds > 0 %} | 908 | {% if data.get_number_of_builds > 0 %} |
905 | <a href="{% url 'builddashboard' data.get_last_build_id %}"> | 909 | {% if data.get_last_outcome == extra.Build.SUCCEEDED %} |
906 | {% if data.get_last_outcome == extra.Build.SUCCEEDED %} | 910 | <span class="glyphicon glyphicon-ok-circle"></span> |
907 | <i class="icon-ok-sign success"></i> | 911 | {% elif data.get_last_outcome == extra.Build.FAILED %} |
908 | {% elif data.get_last_outcome == extra.Build.FAILED %} | 912 | <span class="glyphicon glyphicon-minus-sign"></span> |
909 | <i class="icon-minus-sign error"></i> | 913 | {% endif %} |
910 | {% endif %} | ||
911 | </a> | ||
912 | {% endif %} | 914 | {% endif %} |
913 | ''' | 915 | ''' |
914 | 916 | ||
@@ -922,7 +924,7 @@ class ProjectsTable(ToasterTable): | |||
922 | 924 | ||
923 | errors_template = ''' | 925 | errors_template = ''' |
924 | {% if data.get_number_of_builds > 0 and data.get_last_errors > 0 %} | 926 | {% if data.get_number_of_builds > 0 and data.get_last_errors > 0 %} |
925 | <a class="errors.count error" | 927 | <a class="errors.count text-danger" |
926 | href="{% url "builddashboard" data.get_last_build_id %}#errors"> | 928 | href="{% url "builddashboard" data.get_last_build_id %}#errors"> |
927 | {{data.get_last_errors}} error{{data.get_last_errors | pluralize}} | 929 | {{data.get_last_errors}} error{{data.get_last_errors | pluralize}} |
928 | </a> | 930 | </a> |
@@ -931,7 +933,7 @@ class ProjectsTable(ToasterTable): | |||
931 | 933 | ||
932 | warnings_template = ''' | 934 | warnings_template = ''' |
933 | {% if data.get_number_of_builds > 0 and data.get_last_warnings > 0 %} | 935 | {% if data.get_number_of_builds > 0 and data.get_last_warnings > 0 %} |
934 | <a class="warnings.count warning" | 936 | <a class="warnings.count text-warning" |
935 | href="{% url "builddashboard" data.get_last_build_id %}#warnings"> | 937 | href="{% url "builddashboard" data.get_last_build_id %}#warnings"> |
936 | {{data.get_last_warnings}} warning{{data.get_last_warnings | pluralize}} | 938 | {{data.get_last_warnings}} warning{{data.get_last_warnings | pluralize}} |
937 | </a> | 939 | </a> |
@@ -940,9 +942,7 @@ class ProjectsTable(ToasterTable): | |||
940 | 942 | ||
941 | image_files_template = ''' | 943 | image_files_template = ''' |
942 | {% if data.get_number_of_builds > 0 and data.get_last_outcome == extra.Build.SUCCEEDED %} | 944 | {% if data.get_number_of_builds > 0 and data.get_last_outcome == extra.Build.SUCCEEDED %} |
943 | <a href="{% url "builddashboard" data.get_last_build_id %}#images"> | 945 | {{data.get_last_build_extensions}} |
944 | {{data.get_last_build_extensions}} | ||
945 | </a> | ||
946 | {% endif %} | 946 | {% endif %} |
947 | ''' | 947 | ''' |
948 | 948 | ||
@@ -978,7 +978,7 @@ class ProjectsTable(ToasterTable): | |||
978 | static_data_name='machine', | 978 | static_data_name='machine', |
979 | static_data_template=machine_template) | 979 | static_data_template=machine_template) |
980 | 980 | ||
981 | self.add_column(title='Number of builds', | 981 | self.add_column(title='Builds', |
982 | help_text='The number of builds which have been run \ | 982 | help_text='The number of builds which have been run \ |
983 | for the project', | 983 | for the project', |
984 | hideable=False, | 984 | hideable=False, |
@@ -1108,19 +1108,17 @@ class BuildsTable(ToasterTable): | |||
1108 | 1108 | ||
1109 | def setup_columns(self, *args, **kwargs): | 1109 | def setup_columns(self, *args, **kwargs): |
1110 | outcome_template = ''' | 1110 | outcome_template = ''' |
1111 | <a href="{% url "builddashboard" data.id %}"> | 1111 | {% if data.outcome == data.SUCCEEDED %} |
1112 | {% if data.outcome == data.SUCCEEDED %} | 1112 | <span class="glyphicon glyphicon-ok-circle"></span> |
1113 | <i class="icon-ok-sign success"></i> | 1113 | {% elif data.outcome == data.FAILED %} |
1114 | {% elif data.outcome == data.FAILED %} | 1114 | <span class="glyphicon glyphicon-minus-sign"></span> |
1115 | <i class="icon-minus-sign error"></i> | 1115 | {% endif %} |
1116 | {% endif %} | ||
1117 | </a> | ||
1118 | 1116 | ||
1119 | {% if data.cooker_log_path %} | 1117 | {% if data.cooker_log_path %} |
1120 | | 1118 | |
1121 | <a href="{% url "build_artifact" data.id "cookerlog" data.id %}"> | 1119 | <a href="{% url "build_artifact" data.id "cookerlog" data.id %}"> |
1122 | <i class="icon-download-alt get-help" | 1120 | <span class="glyphicon glyphicon-download-alt get-help" |
1123 | data-original-title="Download build log"></i> | 1121 | data-original-title="Download build log"></span> |
1124 | </a> | 1122 | </a> |
1125 | {% endif %} | 1123 | {% endif %} |
1126 | ''' | 1124 | ''' |
@@ -1135,45 +1133,39 @@ class BuildsTable(ToasterTable): | |||
1135 | ''' | 1133 | ''' |
1136 | 1134 | ||
1137 | machine_template = ''' | 1135 | machine_template = ''' |
1138 | <a href="{% url "builddashboard" data.id %}"> | 1136 | {{data.machine}} |
1139 | {{data.machine}} | ||
1140 | </a> | ||
1141 | ''' | 1137 | ''' |
1142 | 1138 | ||
1143 | started_on_template = ''' | 1139 | started_on_template = ''' |
1144 | <a href="{% url "builddashboard" data.id %}"> | 1140 | {{data.started_on | date:"d/m/y H:i"}} |
1145 | {{data.started_on | date:"d/m/y H:i"}} | ||
1146 | </a> | ||
1147 | ''' | 1141 | ''' |
1148 | 1142 | ||
1149 | completed_on_template = ''' | 1143 | completed_on_template = ''' |
1150 | <a href="{% url "builddashboard" data.id %}"> | 1144 | {{data.completed_on | date:"d/m/y H:i"}} |
1151 | {{data.completed_on | date:"d/m/y H:i"}} | ||
1152 | </a> | ||
1153 | ''' | 1145 | ''' |
1154 | 1146 | ||
1155 | failed_tasks_template = ''' | 1147 | failed_tasks_template = ''' |
1156 | {% if data.failed_tasks.count == 1 %} | 1148 | {% if data.failed_tasks.count == 1 %} |
1157 | <a href="{% url "task" data.id data.failed_tasks.0.id %}"> | 1149 | <a class="text-danger" href="{% url "task" data.id data.failed_tasks.0.id %}"> |
1158 | <span class="error"> | 1150 | <span> |
1159 | {{data.failed_tasks.0.recipe.name}}.{{data.failed_tasks.0.task_name}} | 1151 | {{data.failed_tasks.0.recipe.name}} {{data.failed_tasks.0.task_name}} |
1160 | </span> | 1152 | </span> |
1161 | </a> | 1153 | </a> |
1162 | <a href="{% url "build_artifact" data.id "tasklogfile" data.failed_tasks.0.id %}"> | 1154 | <a href="{% url "build_artifact" data.id "tasklogfile" data.failed_tasks.0.id %}"> |
1163 | <i class="icon-download-alt" | 1155 | <span class="glyphicon glyphicon-download-alt get-help" |
1164 | data-original-title="Download task log file"> | 1156 | title="Download task log file"> |
1165 | </i> | 1157 | </span> |
1166 | </a> | 1158 | </a> |
1167 | {% elif data.failed_tasks.count > 1 %} | 1159 | {% elif data.failed_tasks.count > 1 %} |
1168 | <a href="{% url "tasks" data.id %}?filter=outcome%3A{{extra.Task.OUTCOME_FAILED}}"> | 1160 | <a href="{% url "tasks" data.id %}?filter=outcome%3A{{extra.Task.OUTCOME_FAILED}}"> |
1169 | <span class="error">{{data.failed_tasks.count}} tasks</span> | 1161 | <span class="text-danger">{{data.failed_tasks.count}} tasks</span> |
1170 | </a> | 1162 | </a> |
1171 | {% endif %} | 1163 | {% endif %} |
1172 | ''' | 1164 | ''' |
1173 | 1165 | ||
1174 | errors_template = ''' | 1166 | errors_template = ''' |
1175 | {% if data.errors_no %} | 1167 | {% if data.errors_no %} |
1176 | <a class="errors.count error" href="{% url "builddashboard" data.id %}#errors"> | 1168 | <a class="errors.count text-danger" href="{% url "builddashboard" data.id %}#errors"> |
1177 | {{data.errors_no}} error{{data.errors_no|pluralize}} | 1169 | {{data.errors_no}} error{{data.errors_no|pluralize}} |
1178 | </a> | 1170 | </a> |
1179 | {% endif %} | 1171 | {% endif %} |
@@ -1181,7 +1173,7 @@ class BuildsTable(ToasterTable): | |||
1181 | 1173 | ||
1182 | warnings_template = ''' | 1174 | warnings_template = ''' |
1183 | {% if data.warnings_no %} | 1175 | {% if data.warnings_no %} |
1184 | <a class="warnings.count warning" href="{% url "builddashboard" data.id %}#warnings"> | 1176 | <a class="warnings.count text-warning" href="{% url "builddashboard" data.id %}#warnings"> |
1185 | {{data.warnings_no}} warning{{data.warnings_no|pluralize}} | 1177 | {{data.warnings_no}} warning{{data.warnings_no|pluralize}} |
1186 | </a> | 1178 | </a> |
1187 | {% endif %} | 1179 | {% endif %} |
@@ -1196,9 +1188,7 @@ class BuildsTable(ToasterTable): | |||
1196 | 1188 | ||
1197 | image_files_template = ''' | 1189 | image_files_template = ''' |
1198 | {% if data.outcome == extra.Build.SUCCEEDED %} | 1190 | {% if data.outcome == extra.Build.SUCCEEDED %} |
1199 | <a href="{% url "builddashboard" data.id %}#images"> | ||
1200 | {{data.get_image_file_extensions}} | 1191 | {{data.get_image_file_extensions}} |
1201 | </a> | ||
1202 | {% endif %} | 1192 | {% endif %} |
1203 | ''' | 1193 | ''' |
1204 | 1194 | ||
@@ -1416,10 +1406,10 @@ class AllBuildsTable(BuildsTable): | |||
1416 | {{data.project.name}} | 1406 | {{data.project.name}} |
1417 | </a> | 1407 | </a> |
1418 | {% if data.project.is_default %} | 1408 | {% if data.project.is_default %} |
1419 | <i class="icon-question-sign get-help hover-help" title="" | 1409 | <span class="glyphicon glyphicon-question-sign get-help hover-help" title="" |
1420 | data-original-title="This project shows information about | 1410 | data-original-title="This project shows information about |
1421 | the builds you start from the command line while Toaster is | 1411 | the builds you start from the command line while Toaster is |
1422 | running" style="visibility: hidden;"></i> | 1412 | running" style="visibility: hidden;"></span> |
1423 | {% endif %} | 1413 | {% endif %} |
1424 | ''' | 1414 | ''' |
1425 | 1415 | ||
@@ -1469,7 +1459,6 @@ class ProjectBuildsTable(BuildsTable): | |||
1469 | """ | 1459 | """ |
1470 | self.project_id = kwargs['pid'] | 1460 | self.project_id = kwargs['pid'] |
1471 | super(ProjectBuildsTable, self).setup_queryset(*args, **kwargs) | 1461 | super(ProjectBuildsTable, self).setup_queryset(*args, **kwargs) |
1472 | |||
1473 | project = Project.objects.get(pk=self.project_id) | 1462 | project = Project.objects.get(pk=self.project_id) |
1474 | self.queryset = self.queryset.filter(project=project) | 1463 | self.queryset = self.queryset.filter(project=project) |
1475 | 1464 | ||
@@ -1483,8 +1472,23 @@ class ProjectBuildsTable(BuildsTable): | |||
1483 | self.project_id = kwargs['pid'] | 1472 | self.project_id = kwargs['pid'] |
1484 | context = super(ProjectBuildsTable, self).get_context_data(**kwargs) | 1473 | context = super(ProjectBuildsTable, self).get_context_data(**kwargs) |
1485 | 1474 | ||
1475 | empty_state_template = ''' | ||
1476 | This project has no builds. | ||
1477 | <a href="{% url 'projectimagerecipes' data.pid %}"> | ||
1478 | Choose a recipe to build</a> | ||
1479 | ''' | ||
1480 | context['empty_state'] = self.render_static_data(empty_state_template, | ||
1481 | kwargs) | ||
1482 | |||
1486 | project = Project.objects.get(pk=self.project_id) | 1483 | project = Project.objects.get(pk=self.project_id) |
1487 | context['mru'] = Build.get_recent(project) | 1484 | context['mru'] = Build.get_recent(project) |
1488 | context['project'] = project | 1485 | context['project'] = project |
1489 | 1486 | ||
1487 | self.setup_queryset(**kwargs) | ||
1488 | if self.queryset.count() == 0 and \ | ||
1489 | project.build_set.filter(outcome=Build.IN_PROGRESS).count() > 0: | ||
1490 | context['build_in_progress_none_completed'] = True | ||
1491 | else: | ||
1492 | context['build_in_progress_none_completed'] = False | ||
1493 | |||
1490 | return context | 1494 | return context |