diff options
19 files changed, 180 insertions, 145 deletions
diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css index da78f47f85..072a71d834 100644 --- a/bitbake/lib/toaster/toastergui/static/css/default.css +++ b/bitbake/lib/toaster/toastergui/static/css/default.css | |||
| @@ -179,7 +179,6 @@ table { table-layout: fixed; word-wrap: break-word; } | |||
| 179 | .well-alert > .lead { color: #C09853; padding-bottom: .75em; } | 179 | .well-alert > .lead { color: #C09853; padding-bottom: .75em; } |
| 180 | .configuration-alert { margin-bottom: 0px; padding: 8px 14px; } | 180 | .configuration-alert { margin-bottom: 0px; padding: 8px 14px; } |
| 181 | .configuration-alert p { margin-bottom: 0px; } | 181 | .configuration-alert p { margin-bottom: 0px; } |
| 182 | fieldset { padding-left: 19px; } | ||
| 183 | .project-form { margin-top: 10px; } | 182 | .project-form { margin-top: 10px; } |
| 184 | .add-layers .btn-block + .btn-block, .build .btn-block + .btn-block { margin-top: 0px; } | 183 | .add-layers .btn-block + .btn-block, .build .btn-block + .btn-block { margin-top: 0px; } |
| 185 | input.huge { font-size: 17.5px; padding: 11px 19px; } | 184 | input.huge { font-size: 17.5px; padding: 11px 19px; } |
diff --git a/bitbake/lib/toaster/toastergui/static/js/base.js b/bitbake/lib/toaster/toastergui/static/js/base.js index f1711c134f..6fd77ea457 100644 --- a/bitbake/lib/toaster/toastergui/static/js/base.js +++ b/bitbake/lib/toaster/toastergui/static/js/base.js | |||
| @@ -3,33 +3,57 @@ | |||
| 3 | function basePageInit(ctx) { | 3 | function basePageInit(ctx) { |
| 4 | 4 | ||
| 5 | var newBuildButton = $("#new-build-button"); | 5 | var newBuildButton = $("#new-build-button"); |
| 6 | /* Hide the button if we're on the project,newproject or importlyaer page | 6 | var newBuildTargetInput; |
| 7 | var newBuildTargetBuildBtn; | ||
| 8 | |||
| 9 | var selectedProject = libtoaster.ctx; | ||
| 10 | var selectedTarget; | ||
| 11 | |||
| 12 | var newBuildProjectInput = $("#new-build-button #project-name-input"); | ||
| 13 | var newBuildProjectSaveBtn = $("#new-build-button #save-project-button"); | ||
| 14 | |||
| 15 | $("#config-nav .nav li a").each(function(){ | ||
| 16 | if (window.location.pathname === $(this).attr('href')) | ||
| 17 | $(this).parent().addClass('active'); | ||
| 18 | else | ||
| 19 | $(this).parent().removeClass('active'); | ||
| 20 | }); | ||
| 21 | |||
| 22 | if ($(".total-builds").length !== 0){ | ||
| 23 | libtoaster.getProjectInfo(libtoaster.ctx.projectPageUrl, function(prjInfo){ | ||
| 24 | if (prjInfo.builds) | ||
| 25 | $(".total-builds").text(prjInfo.builds.length); | ||
| 26 | }); | ||
| 27 | } | ||
| 28 | |||
| 29 | /* Hide the button if we're on the project,newproject or importlyaer page | ||
| 7 | * or if there are no projects yet defined | 30 | * or if there are no projects yet defined |
| 31 | * only show if there isn't already a build-target-input already | ||
| 8 | */ | 32 | */ |
| 9 | if (ctx.numProjects === 0 || ctx.currentUrl.search('newproject|project/\\d$|importlayer$') > 0) { | 33 | if (ctx.numProjects > 0 && |
| 10 | newBuildButton.hide(); | 34 | ctx.currentUrl.search('newproject') < 0 && |
| 35 | $(".build-target-input").length === 1) { | ||
| 36 | |||
| 37 | newBuildTargetInput = $("#new-build-button .build-target-input"); | ||
| 38 | newBuildTargetBuildBtn = $("#new-build-button .build-button"); | ||
| 39 | |||
| 40 | newBuildButton.show(); | ||
| 41 | _setupNewBuildButton(); | ||
| 42 | } else if ($(".build-target-input").length > 0) { | ||
| 43 | newBuildTargetInput = $("#project-topbar .build-target-input"); | ||
| 44 | newBuildTargetBuildBtn = $("#project-topbar .build-button"); | ||
| 45 | } else { | ||
| 11 | return; | 46 | return; |
| 12 | } | 47 | } |
| 13 | 48 | ||
| 14 | var selectedProject = libtoaster.ctx; | ||
| 15 | var selectedTarget; | ||
| 16 | 49 | ||
| 17 | /* Hide the change project icon when there is only one project */ | 50 | /* Hide the change project icon when there is only one project */ |
| 18 | if (ctx.numProjects === 1) { | 51 | if (ctx.numProjects === 1) { |
| 19 | $('#project .icon-pencil').hide(); | 52 | $('#project .icon-pencil').hide(); |
| 20 | } | 53 | } |
| 21 | 54 | ||
| 22 | newBuildButton.show().removeAttr("disabled"); | ||
| 23 | |||
| 24 | |||
| 25 | var newBuildProjectInput = $("#new-build-button #project-name-input"); | ||
| 26 | var newBuildTargetBuildBtn = $("#new-build-button #build-button"); | ||
| 27 | var newBuildTargetInput = $("#new-build-button #build-target-input"); | ||
| 28 | var newBuildProjectSaveBtn = $("#new-build-button #save-project-button"); | ||
| 29 | |||
| 30 | 55 | ||
| 31 | _checkProjectBuildable(); | 56 | _checkProjectBuildable(); |
| 32 | _setupNewBuildButton(); | ||
| 33 | 57 | ||
| 34 | 58 | ||
| 35 | function _checkProjectBuildable() { | 59 | function _checkProjectBuildable() { |
| @@ -57,8 +81,6 @@ function basePageInit(ctx) { | |||
| 57 | selectedProject.projectName = item.name; | 81 | selectedProject.projectName = item.name; |
| 58 | selectedProject.projectId = item.id; | 82 | selectedProject.projectId = item.id; |
| 59 | selectedProject.projectBuildsUrl = item.projectBuildsUrl; | 83 | selectedProject.projectBuildsUrl = item.projectBuildsUrl; |
| 60 | |||
| 61 | |||
| 62 | }); | 84 | }); |
| 63 | 85 | ||
| 64 | } | 86 | } |
diff --git a/bitbake/lib/toaster/toastergui/static/js/layerdetails.js b/bitbake/lib/toaster/toastergui/static/js/layerdetails.js index 0accd971d4..e522373b3f 100644 --- a/bitbake/lib/toaster/toastergui/static/js/layerdetails.js +++ b/bitbake/lib/toaster/toastergui/static/js/layerdetails.js | |||
| @@ -15,6 +15,19 @@ function layerDetailsPageInit (ctx) { | |||
| 15 | layerDepBtn.removeAttr("disabled"); | 15 | layerDepBtn.removeAttr("disabled"); |
| 16 | }); | 16 | }); |
| 17 | 17 | ||
| 18 | $(".breadcrumb li:first a").click(function(e){ | ||
| 19 | /* By default this link goes to the project configuration page. However | ||
| 20 | * if we have some builds we go there instead of the default href | ||
| 21 | */ | ||
| 22 | libtoaster.getProjectInfo(libtoaster.ctx.projectPageUrl, function(prjInfo){ | ||
| 23 | if (prjInfo.builds && prjInfo.builds.length > 0) { | ||
| 24 | window.location.replace(libtoaster.ctx.projectBuildsUrl); | ||
| 25 | e.preventDefault(); | ||
| 26 | return; | ||
| 27 | } | ||
| 28 | }); | ||
| 29 | }); | ||
| 30 | |||
| 18 | function addRemoveDep(depLayerId, add, doneCb) { | 31 | function addRemoveDep(depLayerId, add, doneCb) { |
| 19 | var data = { layer_version_id : ctx.layerVersion.id }; | 32 | var data = { layer_version_id : ctx.layerVersion.id }; |
| 20 | if (add) | 33 | if (add) |
diff --git a/bitbake/lib/toaster/toastergui/templates/base.html b/bitbake/lib/toaster/toastergui/templates/base.html index b34e6c37d3..6c3e1a3823 100644 --- a/bitbake/lib/toaster/toastergui/templates/base.html +++ b/bitbake/lib/toaster/toastergui/templates/base.html | |||
| @@ -80,7 +80,6 @@ | |||
| 80 | {% endif %} | 80 | {% endif %} |
| 81 | </span> | 81 | </span> |
| 82 | <ul class="nav"> | 82 | <ul class="nav"> |
| 83 | |||
| 84 | <li {% if "builds" in request.path %} | 83 | <li {% if "builds" in request.path %} |
| 85 | class="active" | 84 | class="active" |
| 86 | {% endif %}> | 85 | {% endif %}> |
| @@ -105,7 +104,7 @@ | |||
| 105 | <a class="btn" id="new-project-button" href="{% url 'newproject' %}">New project</a> | 104 | <a class="btn" id="new-project-button" href="{% url 'newproject' %}">New project</a> |
| 106 | </div> | 105 | </div> |
| 107 | <!-- New build popover --> | 106 | <!-- New build popover --> |
| 108 | <div class="btn-group pull-right" id="new-build-button"> | 107 | <div class="btn-group pull-right" id="new-build-button" style="display:none"> |
| 109 | <button class="btn dropdown-toggle" data-toggle="dropdown"> | 108 | <button class="btn dropdown-toggle" data-toggle="dropdown"> |
| 110 | New build | 109 | New build |
| 111 | <i class="icon-caret-down"></i> | 110 | <i class="icon-caret-down"></i> |
| @@ -136,7 +135,7 @@ | |||
| 136 | <li id="targets-form"> | 135 | <li id="targets-form"> |
| 137 | <h6>Recipe(s):</h6> | 136 | <h6>Recipe(s):</h6> |
| 138 | <form> | 137 | <form> |
| 139 | <input type="text" class="input-xlarge" id="build-target-input" placeholder="Type a recipe name" autocomplete="off" data-minLength="1" data-autocomplete="off" data-provide="typeahead" disabled/> | 138 | <input type="text" class="input-xlarge build-target-input" placeholder="Type a recipe name" autocomplete="off" data-minLength="1" data-autocomplete="off" data-provide="typeahead" disabled/> |
| 140 | <div> | 139 | <div> |
| 141 | <button class="btn btn-primary" id="build-button" disabled>Build</button> | 140 | <button class="btn btn-primary" id="build-button" disabled>Build</button> |
| 142 | </div> | 141 | </div> |
diff --git a/bitbake/lib/toaster/toastergui/templates/baseprojectbuildspage.html b/bitbake/lib/toaster/toastergui/templates/baseprojectbuildspage.html new file mode 100644 index 0000000000..8b043d1e44 --- /dev/null +++ b/bitbake/lib/toaster/toastergui/templates/baseprojectbuildspage.html | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | {% extends "base.html" %} | ||
| 2 | {% load projecttags %} | ||
| 3 | {% load humanize %} | ||
| 4 | {% block pagecontent %} | ||
| 5 | |||
| 6 | {% include "projecttopbar.html" %} | ||
| 7 | |||
| 8 | <!-- Begin main page container --> | ||
| 9 | <div class="row-fluid"> | ||
| 10 | {% block projectinfomain %}{% endblock %} | ||
| 11 | </div> | ||
| 12 | <!-- End main container --> | ||
| 13 | |||
| 14 | {% endblock %} | ||
| 15 | |||
diff --git a/bitbake/lib/toaster/toastergui/templates/baseprojectpage.html b/bitbake/lib/toaster/toastergui/templates/baseprojectpage.html index c8a7743b13..ac32deac2f 100644 --- a/bitbake/lib/toaster/toastergui/templates/baseprojectpage.html +++ b/bitbake/lib/toaster/toastergui/templates/baseprojectpage.html | |||
| @@ -3,44 +3,40 @@ | |||
| 3 | {% load humanize %} | 3 | {% load humanize %} |
| 4 | {% block pagecontent %} | 4 | {% block pagecontent %} |
| 5 | 5 | ||
| 6 | {% include "projecttopbar.html" %} | ||
| 7 | <script type="text/javascript"> | ||
| 8 | $(document).ready(function(){ | ||
| 9 | $("#config-nav .nav li a").each(function(){ | ||
| 10 | if (window.location.pathname === $(this).attr('href')) | ||
| 11 | $(this).parent().addClass('active'); | ||
| 12 | else | ||
| 13 | $(this).parent().removeClass('active'); | ||
| 14 | }); | ||
| 6 | 15 | ||
| 7 | <div class="row-fluid"> | 16 | $("#topbar-configuration-tab").addClass("active") |
| 8 | <!-- Breadcrumbs --> | 17 | }); |
| 9 | <div class="section"> | 18 | </script> |
| 10 | <ul class="breadcrumb" id="breadcrumb"> | ||
| 11 | <li><a href="{% url 'all-builds' %}">All builds</a></li> | ||
| 12 | {% block parentbreadcrumb %} | ||
| 13 | {% if project %} | ||
| 14 | {% if project_html %} | ||
| 15 | <li> | ||
| 16 | {{project.name}} | ||
| 17 | </li> | ||
| 18 | {% else %} | ||
| 19 | <li> | ||
| 20 | <a href="{%url 'project' project.id %}"><span id="project_name">{{project.name}}</span> | ||
| 21 | </a> | ||
| 22 | </li> | ||
| 23 | {% endif %} | ||
| 24 | {% endif %} | ||
| 25 | {% endblock %} | ||
| 26 | {% block localbreadcrumb %}{% endblock %} | ||
| 27 | </ul> | ||
| 28 | <script> | ||
| 29 | $( function () { | ||
| 30 | $('#breadcrumb > li').append("<span class=\"divider\">→</span>"); | ||
| 31 | $('#breadcrumb > li:last').addClass("active"); | ||
| 32 | $('#breadcrumb > li:last > span').remove(); | ||
| 33 | }); | ||
| 34 | </script> | ||
| 35 | </div> | ||
| 36 | 19 | ||
| 37 | <!-- Begin main page container --> | 20 | <div class="row-fluid"> |
| 38 | <div style="padding: 0px, margin: 0px, display: inline"> | 21 | <!-- only on config pages --> |
| 22 | <div id="config-nav" class="span2"> | ||
| 23 | <ul class="nav nav-list well"> | ||
| 24 | <li class="nav-header">Configuration</li> | ||
| 25 | <li><a href="{% url 'project' project.id %}">Basic configuration</a></li> | ||
| 26 | <li><a href="{% url 'projectconf' project.id %}">BitBake variables</a></li> | ||
| 27 | <li class="nav-header">Compatible metadata</li> | ||
| 28 | <!-- <li><a href="all-image-recipes.html">Image recipes</a></li> --> | ||
| 29 | <li><a href="{% url 'projecttargets' project.id %}">Recipes</a></li> | ||
| 30 | <li><a href="{% url 'projectmachines' project.id %}">Machines</a></li> | ||
| 31 | <li><a href="{% url 'projectlayers' project.id %}">Layers</a></li> | ||
| 32 | <li class="nav-header">Actions</li> | ||
| 33 | <li><a href="{% url 'importlayer' project.id %}">Import layer</a></li> | ||
| 34 | </ul> | ||
| 35 | </div> | ||
| 36 | <div class="span10"> | ||
| 39 | {% block projectinfomain %}{% endblock %} | 37 | {% block projectinfomain %}{% endblock %} |
| 40 | </div> | ||
| 41 | <!-- End main container --> | ||
| 42 | </div> | 38 | </div> |
| 43 | 39 | </div> | |
| 44 | 40 | ||
| 45 | {% endblock %} | 41 | {% endblock %} |
| 46 | 42 | ||
diff --git a/bitbake/lib/toaster/toastergui/templates/basetable_top.html b/bitbake/lib/toaster/toastergui/templates/basetable_top.html index 8dd56ed224..d4bac36d77 100644 --- a/bitbake/lib/toaster/toastergui/templates/basetable_top.html +++ b/bitbake/lib/toaster/toastergui/templates/basetable_top.html | |||
| @@ -168,7 +168,6 @@ | |||
| 168 | <button class="btn" type="submit" value="Search">Search</button> | 168 | <button class="btn" type="submit" value="Search">Search</button> |
| 169 | </form> | 169 | </form> |
| 170 | <div class="pull-right"> | 170 | <div class="pull-right"> |
| 171 | {% block custombuttons%} {% endblock %} | ||
| 172 | {% if tablecols %} | 171 | {% if tablecols %} |
| 173 | <div class="btn-group"> | 172 | <div class="btn-group"> |
| 174 | <button class="btn dropdown-toggle" data-toggle="dropdown">Edit columns | 173 | <button class="btn dropdown-toggle" data-toggle="dropdown">Edit columns |
diff --git a/bitbake/lib/toaster/toastergui/templates/basetable_top_buildprojects.html b/bitbake/lib/toaster/toastergui/templates/basetable_top_buildprojects.html deleted file mode 100644 index 7b19f4befe..0000000000 --- a/bitbake/lib/toaster/toastergui/templates/basetable_top_buildprojects.html +++ /dev/null | |||
| @@ -1,14 +0,0 @@ | |||
| 1 | {% extends "basetable_top.html" %} | ||
| 2 | |||
| 3 | {%block custombuttons %} | ||
| 4 | <div class="btn-group builds-projects"> | ||
| 5 | <button class="btn dropdown-toggle" data-toggle="dropdown"> | ||
| 6 | <span class="selection">Show all builds</span> | ||
| 7 | <i class="icon-caret-down"></i> | ||
| 8 | </button> | ||
| 9 | <ul class="dropdown-menu"> | ||
| 10 | <li><a href="{% url 'all-builds'%}">Show all builds</a></li> | ||
| 11 | <li><a href="{% url 'all-projects'%}">Show all projects</a></li> | ||
| 12 | </ul> | ||
| 13 | </div> | ||
| 14 | {%endblock%} | ||
diff --git a/bitbake/lib/toaster/toastergui/templates/buildrequestdetails.html b/bitbake/lib/toaster/toastergui/templates/buildrequestdetails.html index 9bb9bc1785..70fa1fb9a4 100644 --- a/bitbake/lib/toaster/toastergui/templates/buildrequestdetails.html +++ b/bitbake/lib/toaster/toastergui/templates/buildrequestdetails.html | |||
| @@ -4,9 +4,6 @@ | |||
| 4 | {% load projecttags %} | 4 | {% load projecttags %} |
| 5 | {% load humanize %} | 5 | {% load humanize %} |
| 6 | 6 | ||
| 7 | {% block localbreadcrumb %} | ||
| 8 | <li> {{buildrequest.get_sorted_target_list.0.target}} {%if buildrequest.brtarget_set.all.count > 1%}(+ {{buildrequest.brtarget_set.all.count|add:"-1"}}){%endif%} {{buildrequest.get_machine}} ({{buildrequest.updated|date:"d/m/y H:i"}}) </li> | ||
| 9 | {% endblock %} | ||
| 10 | 7 | ||
| 11 | {% block projectinfomain %} | 8 | {% block projectinfomain %} |
| 12 | <!-- begin content --> | 9 | <!-- begin content --> |
diff --git a/bitbake/lib/toaster/toastergui/templates/builds.html b/bitbake/lib/toaster/toastergui/templates/builds.html index 00d1d4edd1..b68fa6f6db 100644 --- a/bitbake/lib/toaster/toastergui/templates/builds.html +++ b/bitbake/lib/toaster/toastergui/templates/builds.html | |||
| @@ -59,7 +59,7 @@ | |||
| 59 | 59 | ||
| 60 | 60 | ||
| 61 | {% else %} | 61 | {% else %} |
| 62 | {% include "basetable_top_buildprojects.html" %} | 62 | {% include "basetable_top.html" %} |
| 63 | <!-- Table data rows; the order needs to match the order of "tablecols" definitions; and the <td class value needs to match the tablecols clclass value for show/hide buttons to work --> | 63 | <!-- Table data rows; the order needs to match the order of "tablecols" definitions; and the <td class value needs to match the tablecols clclass value for show/hide buttons to work --> |
| 64 | {% for build in objects %} | 64 | {% for build in objects %} |
| 65 | <tr class="data"> | 65 | <tr class="data"> |
diff --git a/bitbake/lib/toaster/toastergui/templates/generic-toastertable-page.html b/bitbake/lib/toaster/toastergui/templates/generic-toastertable-page.html index 78e942c7c0..654cdf4bab 100644 --- a/bitbake/lib/toaster/toastergui/templates/generic-toastertable-page.html +++ b/bitbake/lib/toaster/toastergui/templates/generic-toastertable-page.html | |||
| @@ -3,19 +3,13 @@ | |||
| 3 | {% load humanize %} | 3 | {% load humanize %} |
| 4 | {% load static %} | 4 | {% load static %} |
| 5 | 5 | ||
| 6 | {% block localbreadcrumb %} | ||
| 7 | |||
| 8 | |||
| 9 | <li>{{title}}</li>{% endblock %} | ||
| 10 | |||
| 11 | {% block projectinfomain %} | 6 | {% block projectinfomain %} |
| 12 | <div class="page-header"> | 7 | |
| 13 | <h1>{{title}} (<span class="table-count-{{table_name}}"></span>) | 8 | <h2>{{title}} (<span class="table-count-{{table_name}}"></span>) |
| 14 | {% if project.release %} | 9 | {% if project.release %} |
| 15 | <i class="icon-question-sign get-help heading-help" title="This page lists {{title}} compatible with the release selected for this project, which is {{project.release.description}}"></i> | 10 | <i class="icon-question-sign get-help heading-help" title="This page lists {{title}} compatible with the release selected for this project, which is {{project.release.description}}"></i> |
| 16 | {% endif %} | 11 | {% endif %} |
| 17 | </h1> | 12 | </h2> |
| 18 | </div> | ||
| 19 | <div id="zone1alerts" style="display:none"> | 13 | <div id="zone1alerts" style="display:none"> |
| 20 | <div class="alert alert-info lead"> | 14 | <div class="alert alert-info lead"> |
| 21 | <button type="button" class="close" id="hide-alert">×</button> | 15 | <button type="button" class="close" id="hide-alert">×</button> |
| @@ -24,4 +18,5 @@ | |||
| 24 | </div> | 18 | </div> |
| 25 | {% url table_name project.id as xhr_table_url %} | 19 | {% url table_name project.id as xhr_table_url %} |
| 26 | {% include "toastertable.html" %} | 20 | {% include "toastertable.html" %} |
| 21 | |||
| 27 | {% endblock %} | 22 | {% endblock %} |
diff --git a/bitbake/lib/toaster/toastergui/templates/importlayer.html b/bitbake/lib/toaster/toastergui/templates/importlayer.html index 6a5d412d13..d6984bcc9f 100644 --- a/bitbake/lib/toaster/toastergui/templates/importlayer.html +++ b/bitbake/lib/toaster/toastergui/templates/importlayer.html | |||
| @@ -3,9 +3,6 @@ | |||
| 3 | {% load humanize %} | 3 | {% load humanize %} |
| 4 | {% load static %} | 4 | {% load static %} |
| 5 | 5 | ||
| 6 | {% block localbreadcrumb %} | ||
| 7 | <li>Import layer</li> | ||
| 8 | {% endblock %} | ||
| 9 | 6 | ||
| 10 | {% block projectinfomain %} | 7 | {% block projectinfomain %} |
| 11 | 8 | ||
| @@ -27,12 +24,10 @@ | |||
| 27 | }); | 24 | }); |
| 28 | </script> | 25 | </script> |
| 29 | 26 | ||
| 30 | <div class="page-header"> | 27 | <h2>Import layer</h2> |
| 31 | <h1>Import layer</h1> | ||
| 32 | </div> | ||
| 33 | 28 | ||
| 34 | <form> | 29 | <form> |
| 35 | <span class="help-block" style="padding-left:19px;">The layer you are importing must be compatible with <strong>{{project.release.description}}</strong>, which is the release you are using in this project.</span> | 30 | <span class="help-block">The layer you are importing must be compatible with <strong>{{project.release.description}}</strong>, which is the release you are using in this project.</span> |
| 36 | <fieldset class="air"> | 31 | <fieldset class="air"> |
| 37 | <legend>Layer repository information</legend> | 32 | <legend>Layer repository information</legend> |
| 38 | <div class="alert alert-error" id="import-error" style="display:none"> | 33 | <div class="alert alert-error" id="import-error" style="display:none"> |
| @@ -123,7 +118,7 @@ | |||
| 123 | </div> | 118 | </div> |
| 124 | <span class="help-inline">You can only add layers Toaster knows about</span> | 119 | <span class="help-inline">You can only add layers Toaster knows about</span> |
| 125 | </fieldset> | 120 | </fieldset> |
| 126 | <div class="form-actions" id="form-actions"> | 121 | <div class="air" id="form-actions"> |
| 127 | <button class="btn btn-primary btn-large" data-toggle="modal" id="import-and-add-btn" data-target="#dependencies-message" disabled>Import and add to project</button> | 122 | <button class="btn btn-primary btn-large" data-toggle="modal" id="import-and-add-btn" data-target="#dependencies-message" disabled>Import and add to project</button> |
| 128 | <span class="help-inline" id="import-and-add-hint" style="vertical-align: middle;">To import a layer you need to enter a layer name, a Git repository URL and a revision (branch, tag or commit)</span> | 123 | <span class="help-inline" id="import-and-add-hint" style="vertical-align: middle;">To import a layer you need to enter a layer name, a Git repository URL and a revision (branch, tag or commit)</span> |
| 129 | </div> | 124 | </div> |
diff --git a/bitbake/lib/toaster/toastergui/templates/layerdetails.html b/bitbake/lib/toaster/toastergui/templates/layerdetails.html index 7d81b14b61..6269b3630f 100644 --- a/bitbake/lib/toaster/toastergui/templates/layerdetails.html +++ b/bitbake/lib/toaster/toastergui/templates/layerdetails.html | |||
| @@ -1,14 +1,25 @@ | |||
| 1 | {% extends "baseprojectpage.html" %} | 1 | {% extends "base.html" %} |
| 2 | {% load projecttags %} | 2 | {% load projecttags %} |
| 3 | {% load humanize %} | 3 | {% load humanize %} |
| 4 | {% load static %} | 4 | {% load static %} |
| 5 | {% block localbreadcrumb %} | 5 | |
| 6 | <li><a href="{% url 'projectlayers' project.id %}">All compatible layers</a></li> | 6 | {% block pagecontent %} |
| 7 | <li> | 7 | |
| 8 | {{layerversion.layer.name}} ({{layerversion.get_vcs_reference|truncatechars:13}}) | 8 | <div class="section"> |
| 9 | </li> | 9 | <ul class="breadcrumb"> |
| 10 | {% endblock %} | 10 | <li> |
| 11 | {% block projectinfomain %} | 11 | <a href="{% url 'project' project.id %}">{{project.name}}</a> |
| 12 | <span class="divider">→</span> | ||
| 13 | </li> | ||
| 14 | <li><a href="{% url 'projectlayers' project.id %}">Compatible layers</a> | ||
| 15 | <span class="divider">→</span> | ||
| 16 | </li> | ||
| 17 | <li> | ||
| 18 | {{layerversion.layer.name}} ({{layerversion.get_vcs_reference|truncatechars:13}}) | ||
| 19 | </li> | ||
| 20 | </ul> | ||
| 21 | </div> | ||
| 22 | |||
| 12 | {# If this is not an imported layer then hide the edit ui #} | 23 | {# If this is not an imported layer then hide the edit ui #} |
| 13 | {% if not layerversion.layer_source_id or layerversion.layer_source.sourcetype != layerversion.layer_source.TYPE_IMPORTED %} | 24 | {% if not layerversion.layer_source_id or layerversion.layer_source.sourcetype != layerversion.layer_source.TYPE_IMPORTED %} |
| 14 | <style scoped> | 25 | <style scoped> |
diff --git a/bitbake/lib/toaster/toastergui/templates/project.html b/bitbake/lib/toaster/toastergui/templates/project.html index b5d97cb419..0fbfb599b7 100644 --- a/bitbake/lib/toaster/toastergui/templates/project.html +++ b/bitbake/lib/toaster/toastergui/templates/project.html | |||
| @@ -30,12 +30,7 @@ vim: expandtab tabstop=2 | |||
| 30 | 30 | ||
| 31 | {%else%} | 31 | {%else%} |
| 32 | 32 | ||
| 33 | <div id="main" role="main" data-ng-app="project" data-ng-controller="prjCtrl" class="top-padded" data-ng-cloak> | 33 | <div id="main" role="main" data-ng-app="project" data-ng-controller="prjCtrl" data-ng-cloak> |
| 34 | |||
| 35 | <!-- project name --> | ||
| 36 | <div class="page-header"> | ||
| 37 | <h1>{[project.name]}</h1> | ||
| 38 | </div> | ||
| 39 | 34 | ||
| 40 | <!-- alerts section 1--> | 35 | <!-- alerts section 1--> |
| 41 | <div data-ng-repeat="a in zone1alerts"> | 36 | <div data-ng-repeat="a in zone1alerts"> |
| @@ -120,27 +115,6 @@ vim: expandtab tabstop=2 | |||
| 120 | </script> | 115 | </script> |
| 121 | 116 | ||
| 122 | 117 | ||
| 123 | <!-- build form --> | ||
| 124 | <div class="well"> | ||
| 125 | <form class="build-form" data-ng-submit="buildNamedTarget()"> | ||
| 126 | <div class="input-append controls"> | ||
| 127 | <input type="text" class="huge input-xxlarge" placeholder="Type the recipe(s) you want to build" autocomplete="off" data-ng-model="targetName" data-typeahead="a.name for a in getRecipesAutocompleteSuggestions($viewValue)" data-typeahead-template-url="recipes_suggestion_details" data-ng-disabled="!project.release || !layers.length"/> | ||
| 128 | <button type="submit" class="btn btn-large btn-primary" data-ng-disabled="!targetName.length"> | ||
| 129 | Build | ||
| 130 | </button> | ||
| 131 | </div> | ||
| 132 | <i class="icon-question-sign get-help get-help-blue" title="Type the name of one or more recipes you want to build, separated by a space. You can also specify a task by appending a semicolon and a task name to a recipe name, like so: <code>core-image-minimal:do_build</code>"></i> | ||
| 133 | <p> | ||
| 134 | <a href="{% url 'projecttargets' project.id %}">View all compatible recipes</a> | ||
| 135 | <i class="icon-question-sign get-help get-help-blue heading-help" title="View all the recipes you can build with the release selected for this project, which is {[project.release.desc]}"></i> | ||
| 136 | {% if completedbuilds.count %} | ||
| 137 | | <a href="{% url 'projectbuilds' project.id %}">View all project builds ({{completedbuilds.count}})</a> | ||
| 138 | {% endif %} | ||
| 139 | </p> | ||
| 140 | </form> | ||
| 141 | </div> | ||
| 142 | |||
| 143 | |||
| 144 | <!-- latest builds list --> | 118 | <!-- latest builds list --> |
| 145 | 119 | ||
| 146 | <a id="buildslist"></a> | 120 | <a id="buildslist"></a> |
| @@ -290,7 +264,7 @@ vim: expandtab tabstop=2 | |||
| 290 | </div> | 264 | </div> |
| 291 | <form data-ng-submit="layerAdd()"> | 265 | <form data-ng-submit="layerAdd()"> |
| 292 | <div class="input-append"> | 266 | <div class="input-append"> |
| 293 | <input type="text" class="input-xlarge" id="layer" autocomplete="off" placeholder="Type a layer name" data-minLength="1" data-ng-model="layerAddName" data-typeahead="e for e in getLayersAutocompleteSuggestions($viewValue)" data-typeahead-template-url="layers_suggestion_details" data-typeahead-on-select="onLayerSelect($item, $model, $label)" data-typeahead-editable="false" data-ng-class="{ 'has-error': layerAddName.$invalid }" data-ng-disabled="!project.release" /> | 267 | <input type="text" style="width: 100%" id="layer" autocomplete="off" placeholder="Type a layer name" data-minLength="1" data-ng-model="layerAddName" data-typeahead="e for e in getLayersAutocompleteSuggestions($viewValue)" data-typeahead-template-url="layers_suggestion_details" data-typeahead-on-select="onLayerSelect($item, $model, $label)" data-typeahead-editable="false" data-ng-class="{ 'has-error': layerAddName.$invalid }" data-ng-disabled="!project.release" /> |
| 294 | <input type="submit" id="add-layer" class="btn" value="Add" data-ng-disabled="!layerAddName.length"/> | 268 | <input type="submit" id="add-layer" class="btn" value="Add" data-ng-disabled="!layerAddName.length"/> |
| 295 | </div> | 269 | </div> |
| 296 | {% csrf_token %} | 270 | {% csrf_token %} |
| @@ -317,7 +291,7 @@ vim: expandtab tabstop=2 | |||
| 317 | </h3> | 291 | </h3> |
| 318 | <form data-ng-submit="buildNamedTarget()"> | 292 | <form data-ng-submit="buildNamedTarget()"> |
| 319 | <div class="input-append"> | 293 | <div class="input-append"> |
| 320 | <input type="text" class="input-xlarge" placeholder="Type the recipe(s) you want to build" autocomplete="off" data-minLength="1" data-ng-model="targetName1" data-typeahead="a.name for a in getRecipesAutocompleteSuggestions($viewValue)" data-typeahead-template-url="recipes_suggestion_details" data-ng-disabled="!project.release || !layers.length"> | 294 | <input type="text" style="width: 100%" placeholder="Type the recipe(s) you want to build" autocomplete="off" data-minLength="1" data-ng-model="targetName1" data-typeahead="a.name for a in getRecipesAutocompleteSuggestions($viewValue)" data-typeahead-template-url="recipes_suggestion_details" data-ng-disabled="!project.release || !layers.length"> |
| 321 | <button type="submit" class="btn btn-primary" data-ng-disabled="!targetName1.length"> | 295 | <button type="submit" class="btn btn-primary" data-ng-disabled="!targetName1.length"> |
| 322 | Build </button> | 296 | Build </button> |
| 323 | </div> | 297 | </div> |
| @@ -420,8 +394,10 @@ vim: expandtab tabstop=2 | |||
| 420 | </div> | 394 | </div> |
| 421 | </div> | 395 | </div> |
| 422 | 396 | ||
| 423 | <!-- end main --> | 397 | </div> <!-- end main --> |
| 424 | </div> | 398 | |
| 399 | </div> <!-- end row --> | ||
| 400 | |||
| 425 | 401 | ||
| 426 | 402 | ||
| 427 | <!-- load application logic !--> | 403 | <!-- load application logic !--> |
diff --git a/bitbake/lib/toaster/toastergui/templates/projectbuilds.html b/bitbake/lib/toaster/toastergui/templates/projectbuilds.html index ac87d8c166..646755b183 100644 --- a/bitbake/lib/toaster/toastergui/templates/projectbuilds.html +++ b/bitbake/lib/toaster/toastergui/templates/projectbuilds.html | |||
| @@ -1,10 +1,7 @@ | |||
| 1 | {% extends "baseprojectpage.html" %} | 1 | {% extends "baseprojectbuildspage.html" %} |
| 2 | {% load projecttags %} | 2 | {% load projecttags %} |
| 3 | {% load humanize %} | 3 | {% load humanize %} |
| 4 | 4 | ||
| 5 | {% block localbreadcrumb %} | ||
| 6 | <li>Project builds</li> | ||
| 7 | {% endblock %} | ||
| 8 | 5 | ||
| 9 | {% block extraheadcontent %} | 6 | {% block extraheadcontent %} |
| 10 | <link rel="stylesheet" href="/static/css/jquery-ui.min.css" type='text/css'> | 7 | <link rel="stylesheet" href="/static/css/jquery-ui.min.css" type='text/css'> |
diff --git a/bitbake/lib/toaster/toastergui/templates/projectconf.html b/bitbake/lib/toaster/toastergui/templates/projectconf.html index 01ece24511..4c5a188a86 100644 --- a/bitbake/lib/toaster/toastergui/templates/projectconf.html +++ b/bitbake/lib/toaster/toastergui/templates/projectconf.html | |||
| @@ -2,14 +2,10 @@ | |||
| 2 | {% load projecttags %} | 2 | {% load projecttags %} |
| 3 | {% load humanize %} | 3 | {% load humanize %} |
| 4 | 4 | ||
| 5 | {% block localbreadcrumb %} | ||
| 6 | <li>Configuration variables</li> | ||
| 7 | {% endblock %} | ||
| 8 | 5 | ||
| 9 | {% block projectinfomain %} | 6 | {% block projectinfomain %} |
| 10 | <div class="page-header"> | 7 | |
| 11 | <h1>Configuration variables</h1> | 8 | <h2>Bitbake variables</h2> |
| 12 | </div> | ||
| 13 | 9 | ||
| 14 | <div style="padding-left:19px;"> | 10 | <div style="padding-left:19px;"> |
| 15 | 11 | ||
diff --git a/bitbake/lib/toaster/toastergui/templates/projecttopbar.html b/bitbake/lib/toaster/toastergui/templates/projecttopbar.html new file mode 100644 index 0000000000..46473cb76b --- /dev/null +++ b/bitbake/lib/toaster/toastergui/templates/projecttopbar.html | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | <!-- project name --> | ||
| 2 | <div class="row-fluid page-header"> | ||
| 3 | <h1>{{project.name}}</h1> | ||
| 4 | </div> | ||
| 5 | |||
| 6 | <div class="row-fluid" id="project-topbar"> | ||
| 7 | <ul class="nav nav-pills"> | ||
| 8 | <li> | ||
| 9 | <a href="{% url 'projectbuilds' project.id %}"> | ||
| 10 | Builds (<span class="total-builds"></span>) | ||
| 11 | </a> | ||
| 12 | </li> | ||
| 13 | <li id="topbar-configuration-tab"> | ||
| 14 | <a href="{% url 'project' project.id %}"> | ||
| 15 | Configuration | ||
| 16 | </a> | ||
| 17 | </li> | ||
| 18 | <!-- Coming soon | ||
| 19 | <li> | ||
| 20 | <a href="my-image-recipes.html"> | ||
| 21 | My image recipes | ||
| 22 | </a> | ||
| 23 | </li> | ||
| 24 | --> | ||
| 25 | <li class="pull-right"> | ||
| 26 | <form class="form-inline" style="margin-bottom: 0"> | ||
| 27 | |||
| 28 | <i class="icon-question-sign get-help heading-help" data-placement="left" title="" data-original-title="Type the name of one or more recipes you want to build, separated by a space. You can also specify a task by appending a semicolon and a task name to the recipe name, like so: <code>busybox:clean</code>"> | ||
| 29 | </i> | ||
| 30 | <div class="input-append"> | ||
| 31 | <input type="text" class="input-xlarge build-target-input" placeholder="Type the recipe you want to build" autocomplete="off"> | ||
| 32 | <button class="btn btn-primary build-button" data-project-id="{{project.id}}" disabled>Build | ||
| 33 | </button> | ||
| 34 | </div> | ||
| 35 | </form> | ||
| 36 | </li> | ||
| 37 | </ul> | ||
| 38 | </div> | ||
diff --git a/bitbake/lib/toaster/toastergui/urls.py b/bitbake/lib/toaster/toastergui/urls.py index feb15139fb..beb43038a1 100644 --- a/bitbake/lib/toaster/toastergui/urls.py +++ b/bitbake/lib/toaster/toastergui/urls.py | |||
| @@ -87,13 +87,13 @@ urlpatterns = patterns('toastergui.views', | |||
| 87 | url(r'^project/(?P<pid>\d+)/machines/$', | 87 | url(r'^project/(?P<pid>\d+)/machines/$', |
| 88 | tables.MachinesTable.as_view(template_name="generic-toastertable-page.html"), | 88 | tables.MachinesTable.as_view(template_name="generic-toastertable-page.html"), |
| 89 | { 'table_name': tables.MachinesTable.__name__.lower(), | 89 | { 'table_name': tables.MachinesTable.__name__.lower(), |
| 90 | 'title' : 'All compatible machines' }, | 90 | 'title' : 'Compatible machines' }, |
| 91 | name="projectmachines"), | 91 | name="projectmachines"), |
| 92 | 92 | ||
| 93 | url(r'^project/(?P<pid>\d+)/recipes/$', | 93 | url(r'^project/(?P<pid>\d+)/recipes/$', |
| 94 | tables.RecipesTable.as_view(template_name="generic-toastertable-page.html"), | 94 | tables.RecipesTable.as_view(template_name="generic-toastertable-page.html"), |
| 95 | { 'table_name': tables.RecipesTable.__name__.lower(), | 95 | { 'table_name': tables.RecipesTable.__name__.lower(), |
| 96 | 'title' : 'All compatible recipes' }, | 96 | 'title' : 'Compatible recipes' }, |
| 97 | name="projecttargets"), | 97 | name="projecttargets"), |
| 98 | 98 | ||
| 99 | url(r'^project/(?P<pid>\d+)/availablerecipes/$', | 99 | url(r'^project/(?P<pid>\d+)/availablerecipes/$', |
| @@ -105,7 +105,7 @@ urlpatterns = patterns('toastergui.views', | |||
| 105 | url(r'^project/(?P<pid>\d+)/layers/$', | 105 | url(r'^project/(?P<pid>\d+)/layers/$', |
| 106 | tables.LayersTable.as_view(template_name="generic-toastertable-page.html"), | 106 | tables.LayersTable.as_view(template_name="generic-toastertable-page.html"), |
| 107 | { 'table_name': tables.LayersTable.__name__.lower(), | 107 | { 'table_name': tables.LayersTable.__name__.lower(), |
| 108 | 'title' : 'All compatible layers' }, | 108 | 'title' : 'Compatible layers' }, |
| 109 | name="projectlayers"), | 109 | name="projectlayers"), |
| 110 | 110 | ||
| 111 | url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)$', | 111 | url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)$', |
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 82650d0a02..9c63aae251 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py | |||
| @@ -2627,6 +2627,7 @@ if True: | |||
| 2627 | except InvalidRequestException as e: | 2627 | except InvalidRequestException as e: |
| 2628 | raise RedirectException('projectbuilds', request.GET, e.response, pid = pid) | 2628 | raise RedirectException('projectbuilds', request.GET, e.response, pid = pid) |
| 2629 | 2629 | ||
| 2630 | context['project'] = prj | ||
| 2630 | _set_parameters_values(pagesize, orderby, request) | 2631 | _set_parameters_values(pagesize, orderby, request) |
| 2631 | 2632 | ||
| 2632 | return context | 2633 | return context |
