summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2015-05-11 18:58:25 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-05-14 18:04:09 +0100
commitc5a16235b8b56102703bc264768ba386ebe90611 (patch)
tree1a3822b4225ac5de88cc812e14ec0080ffec0a4b /bitbake
parent35d75c83522a050f0e35a33f73317461e2adf554 (diff)
downloadpoky-c5a16235b8b56102703bc264768ba386ebe90611.tar.gz
bitbake: toaster: fix html5 compliance
This patch brings needed changes in all views so that each view passes the HTML5 compliance test by the W3C Markup Service. (Bitbake rev: 6e60ed8ab71e4300ab571f42b7af5011086df697) Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/toaster/orm/models.py2
-rw-r--r--bitbake/lib/toaster/toastergui/templates/base.html8
-rw-r--r--bitbake/lib/toaster/toastergui/templates/baseprojectpage.html3
-rw-r--r--bitbake/lib/toaster/toastergui/templates/builddashboard.html2
-rw-r--r--bitbake/lib/toaster/toastergui/templates/buildrequestdetails.html2
-rw-r--r--bitbake/lib/toaster/toastergui/templates/importlayer.html16
-rw-r--r--bitbake/lib/toaster/toastergui/templates/layerdetails.html50
-rw-r--r--bitbake/lib/toaster/toastergui/templates/layers.html2
-rw-r--r--bitbake/lib/toaster/toastergui/templates/machines.html2
-rw-r--r--bitbake/lib/toaster/toastergui/templates/newproject.html7
-rw-r--r--bitbake/lib/toaster/toastergui/templates/project.html184
-rw-r--r--bitbake/lib/toaster/toastergui/templates/recipe.html6
-rw-r--r--bitbake/lib/toaster/toastergui/templates/targets.html4
-rw-r--r--bitbake/lib/toaster/toastergui/templates/task.html37
-rw-r--r--bitbake/lib/toaster/toastergui/urls.py12
-rwxr-xr-xbitbake/lib/toaster/toastergui/views.py22
16 files changed, 176 insertions, 183 deletions
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py
index c00c3520d8..b097504bbb 100644
--- a/bitbake/lib/toaster/orm/models.py
+++ b/bitbake/lib/toaster/orm/models.py
@@ -556,7 +556,7 @@ class Recipe(models.Model):
556 return "Recipe " + self.name + ":" + self.version 556 return "Recipe " + self.name + ":" + self.version
557 557
558 def get_local_path(self): 558 def get_local_path(self):
559 if settings.MANAGED and self.layer_version.build.project is not None: 559 if settings.MANAGED and self.layer_version.build is not None and self.layer_version.build.project is not None:
560 # strip any tag prefixes ('virtual:native:') 560 # strip any tag prefixes ('virtual:native:')
561 layer_path=self.layer_version.layer.local_path.split(":")[-1] 561 layer_path=self.layer_version.layer.local_path.split(":")[-1]
562 recipe_path=self.file_path.split(":")[-1] 562 recipe_path=self.file_path.split(":")[-1]
diff --git a/bitbake/lib/toaster/toastergui/templates/base.html b/bitbake/lib/toaster/toastergui/templates/base.html
index 47bbbbda14..230dee49d6 100644
--- a/bitbake/lib/toaster/toastergui/templates/base.html
+++ b/bitbake/lib/toaster/toastergui/templates/base.html
@@ -29,10 +29,10 @@
29<script> 29<script>
30 libtoaster.ctx = { 30 libtoaster.ctx = {
31 projectId : {{project.id|default:'undefined'}}, 31 projectId : {{project.id|default:'undefined'}},
32 xhrDataTypeaheadUrl : "{% url 'xhr_datatypeahead' %}",
33 jsUrl : "{% static 'js/' %}", 32 jsUrl : "{% static 'js/' %}",
34 htmlUrl : "{% static 'html/' %}", 33 htmlUrl : "{% static 'html/' %}",
35 {% if project.id %} 34 {% if project.id %}
35 xhrDataTypeaheadUrl : "{% url 'xhr_datatypeahead' project.id %}",
36 xhrProjectEditUrl : "{% url 'xhr_projectedit' project.id %}", 36 xhrProjectEditUrl : "{% url 'xhr_projectedit' project.id %}",
37 projectPageUrl : "{% url 'project' project.id %}", 37 projectPageUrl : "{% url 'project' project.id %}",
38 projectName : "{{project.name}}", 38 projectName : "{{project.name}}",
@@ -104,16 +104,16 @@
104 <p><a id="view-all-projects" href="{% url 'all-projects' %}">View all projects</a></p> 104 <p><a id="view-all-projects" href="{% url 'all-projects' %}">View all projects</a></p>
105 </form> 105 </form>
106 </li> 106 </li>
107 <div class="alert" style="display:none"> 107 <li style="display: none">
108 This project's configuration is incomplete,<br/>so you cannot run builds.<br/> 108 This project's configuration is incomplete,<br/>so you cannot run builds.<br/>
109 <p><a href="{% if project.id %}{% url 'project' project.id %}{% endif %}">View project configuration</a></p> 109 <p><a href="{% if project.id %}{% url 'project' project.id %}{% endif %}">View project configuration</a></p>
110 </div> 110 </li>
111 <li id="targets-form"> 111 <li id="targets-form">
112 <h6>Recipe(s):</h6> 112 <h6>Recipe(s):</h6>
113 <form> 113 <form>
114 <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" /> 114 <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" />
115 <div> 115 <div>
116 <a class="btn btn-primary" id="build-button" disabled="disabled" data-project-id="{{project.id}}">Build</a> 116 <a class="btn btn-primary" id="build-button" data-project-id="{{project.id}}">Build</a>
117 </div> 117 </div>
118 </form> 118 </form>
119 </li> 119 </li>
diff --git a/bitbake/lib/toaster/toastergui/templates/baseprojectpage.html b/bitbake/lib/toaster/toastergui/templates/baseprojectpage.html
index 0807f4cb1d..c8a7743b13 100644
--- a/bitbake/lib/toaster/toastergui/templates/baseprojectpage.html
+++ b/bitbake/lib/toaster/toastergui/templates/baseprojectpage.html
@@ -35,9 +35,10 @@
35 </div> 35 </div>
36 36
37 <!-- Begin main page container --> 37 <!-- Begin main page container -->
38 <div style="padding: 0px, margin: 0px, display: inline">
38 {% block projectinfomain %}{% endblock %} 39 {% block projectinfomain %}{% endblock %}
40 </div>
39 <!-- End main container --> 41 <!-- End main container -->
40
41 </div> 42 </div>
42 43
43 44
diff --git a/bitbake/lib/toaster/toastergui/templates/builddashboard.html b/bitbake/lib/toaster/toastergui/templates/builddashboard.html
index 4e600283a5..d5fe92a2be 100644
--- a/bitbake/lib/toaster/toastergui/templates/builddashboard.html
+++ b/bitbake/lib/toaster/toastergui/templates/builddashboard.html
@@ -182,7 +182,7 @@
182 {% endfor %} 182 {% endfor %}
183 </div> 183 </div>
184 </dd> 184 </dd>
185 185 </dl>
186 </div> 186 </div>
187 187
188</div> 188</div>
diff --git a/bitbake/lib/toaster/toastergui/templates/buildrequestdetails.html b/bitbake/lib/toaster/toastergui/templates/buildrequestdetails.html
index 2a4571f42e..9bb9bc1785 100644
--- a/bitbake/lib/toaster/toastergui/templates/buildrequestdetails.html
+++ b/bitbake/lib/toaster/toastergui/templates/buildrequestdetails.html
@@ -36,7 +36,7 @@
36 </p> 36 </p>
37 </div> 37 </div>
38 38
39 <div class="accordion" id="errors" name="errors"> 39 <div class="accordion" id="errors">
40 <div class="accordion-group"> 40 <div class="accordion-group">
41 <div class="accordion-heading"> 41 <div class="accordion-heading">
42 <a class="accordion-toggle error toggle-errors"> 42 <a class="accordion-toggle error toggle-errors">
diff --git a/bitbake/lib/toaster/toastergui/templates/importlayer.html b/bitbake/lib/toaster/toastergui/templates/importlayer.html
index f956dbcaa9..af8f4f985a 100644
--- a/bitbake/lib/toaster/toastergui/templates/importlayer.html
+++ b/bitbake/lib/toaster/toastergui/templates/importlayer.html
@@ -39,7 +39,7 @@
39 <legend>Layer repository information</legend> 39 <legend>Layer repository information</legend>
40 <div class="alert alert-error" id="import-error" style="display:none"> 40 <div class="alert alert-error" id="import-error" style="display:none">
41 <button type="button" class="close" data-dismiss="alert">&times;</button> 41 <button type="button" class="close" data-dismiss="alert">&times;</button>
42 <h3></h3> 42 <h3>&nbsp;</h3>
43 <p></p> 43 <p></p>
44 <ul></ul> 44 <ul></ul>
45 </div> 45 </div>
@@ -56,7 +56,7 @@
56 </div> 56 </div>
57 57
58 </div> 58 </div>
59 <span id="duplicate-layer-info" style="display:none"> 59 <div id="duplicate-layer-info" style="display:none">
60 <div class="alert warning"> 60 <div class="alert warning">
61 <h3>A layer called <a href="" class="dup-layer-link"><span class="dup-layer-name"></span></a> already exists</h3> 61 <h3>A layer called <a href="" class="dup-layer-link"><span class="dup-layer-name"></span></a> already exists</h3>
62 <p>Layer names must be unqiue. Please use a different layer name.</p> 62 <p>Layer names must be unqiue. Please use a different layer name.</p>
@@ -79,9 +79,9 @@
79 79
80 <p><a href="" class="dup-layer-link">View the <span class="dup-layer-name"></span> layer information</a></p> 80 <p><a href="" class="dup-layer-link">View the <span class="dup-layer-name"></span> layer information</a></p>
81 81
82 </span> 82 </div>
83 83
84 <span class="fields-apart-from-layer-name"> 84 <div class="fields-apart-from-layer-name">
85 <label for="layer-git-repo-url" class="project-form"> 85 <label for="layer-git-repo-url" class="project-form">
86 Git repository URL 86 Git repository URL
87 <span class="icon-question-sign get-help" title="Fetch/clone URL of the repository. Currently, Toaster only supports Git repositories." ></span> 87 <span class="icon-question-sign get-help" title="Fetch/clone URL of the repository. Currently, Toaster only supports Git repositories." ></span>
@@ -104,11 +104,11 @@
104 <span class="help-inline" style="diaply:none;" id="invalid-layer-revision-hint"></span> 104 <span class="help-inline" style="diaply:none;" id="invalid-layer-revision-hint"></span>
105 </div> 105 </div>
106 </div> 106 </div>
107 </span> 107 </div>
108 108
109 </fieldset> 109 </fieldset>
110 110
111 <span class="fields-apart-from-layer-name"> 111 <div class="fields-apart-from-layer-name">
112 <fieldset class="air"> 112 <fieldset class="air">
113 <legend> 113 <legend>
114 Layer dependencies 114 Layer dependencies
@@ -119,7 +119,7 @@
119 </ul> 119 </ul>
120 <div class="input-append"> 120 <div class="input-append">
121 <input type="text" autocomplete="off" data-minLength="1" data-autocomplete="off" data-provide="typeahead" placeholder="Type a layer name" id="layer-dependency" class="input-xlarge"> 121 <input type="text" autocomplete="off" data-minLength="1" data-autocomplete="off" data-provide="typeahead" placeholder="Type a layer name" id="layer-dependency" class="input-xlarge">
122 <a class="btn" type="button" id="add-layer-dependency-btn" disabled> 122 <a class="btn" id="add-layer-dependency-btn">
123 Add layer 123 Add layer
124 </a> 124 </a>
125 </div> 125 </div>
@@ -129,7 +129,7 @@
129 <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> 129 <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>
130 <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> 130 <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>
131 </div> 131 </div>
132 </span> 132 </div>
133 </form> 133 </form>
134 134
135{% endblock %} 135{% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/templates/layerdetails.html b/bitbake/lib/toaster/toastergui/templates/layerdetails.html
index 4d892d56f9..7b62b64893 100644
--- a/bitbake/lib/toaster/toastergui/templates/layerdetails.html
+++ b/bitbake/lib/toaster/toastergui/templates/layerdetails.html
@@ -9,6 +9,23 @@
9</li> 9</li>
10{% endblock %} 10{% endblock %}
11{% block projectinfomain %} 11{% block projectinfomain %}
12{# 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 %}
14<style scoped>
15 .icon-pencil {
16 display:none;
17 }
18.delete-current-value{
19 display: none;
20}
21 li .icon-trash {
22 display:none;
23 }
24 .add-deps {
25 display:none;
26 }
27</style>
28{% endif %}
12 29
13 30
14<script src="{% static 'js/layerdetails.js' %}"></script> 31<script src="{% static 'js/layerdetails.js' %}"></script>
@@ -27,7 +44,7 @@
27 commit: "{{layerversion.get_vcs_reference}}", 44 commit: "{{layerversion.get_vcs_reference}}",
28 inCurrentPrj : {{layer_in_project}}, 45 inCurrentPrj : {{layer_in_project}},
29 url : "{% url 'layerdetails' project.id layerversion.id %}", 46 url : "{% url 'layerdetails' project.id layerversion.id %}",
30 sourceId: {{layerversion.layer_source_id}}, 47 sourceId: {{layerversion.layer_source_id|json}},
31 } 48 }
32 }; 49 };
33 50
@@ -40,24 +57,6 @@
40 }); 57 });
41</script> 58</script>
42 59
43{# If this is not an imported layer then hide the edit ui #}
44{% if layerversion.layer_source_id != 3 %}
45<style>
46 .icon-pencil {
47 display:none;
48 }
49.delete-current-value{
50 display: none;
51}
52 li .icon-trash {
53 display:none;
54 }
55 .add-deps {
56 display:none;
57 }
58</style>
59{% endif %}
60
61 <div class="row-fluid span11"> 60 <div class="row-fluid span11">
62 <div class="page-header"> 61 <div class="page-header">
63 <h1>{{layerversion.layer.name}} <small class="commit" 62 <h1>{{layerversion.layer.name}} <small class="commit"
@@ -100,7 +99,7 @@
100 </span> 99 </span>
101 100
102 <!-- layer details pane --> 101 <!-- layer details pane -->
103 <div name="information" id="information" class="tab-pane active"> 102 <div id="information" class="tab-pane active">
104 <dl class="dl-horizontal"> 103 <dl class="dl-horizontal">
105 <dt class=""> 104 <dt class="">
106 <i class="icon-question-sign get-help" title="Fetch/clone URL of the repository"></i> 105 <i class="icon-question-sign get-help" title="Fetch/clone URL of the repository"></i>
@@ -160,19 +159,17 @@
160 Layer dependencies 159 Layer dependencies
161 </dt> 160 </dt>
162 <dd> 161 <dd>
163 <ul class="unstyled" id="layer-deps-list"> 162 <ul class="unstyled current-value" id="layer-deps-list">
164 {% for ld in layerversion.dependencies.all %} 163 {% for ld in layerversion.dependencies.all %}
165 <span class="current-value">
166 <li data-layer-id="{{ld.depends_on.id}}"> 164 <li data-layer-id="{{ld.depends_on.id}}">
167 <a data-toggle="tooltip" title="{{ld.depends_on.layer.vcs_url}} | {{ld.depends_on.get_vcs_reference}}" href="{% url 'layerdetails' project.id ld.depends_on.id %}">{{ld.depends_on.layer.name}}</a> 165 <a data-toggle="tooltip" title="{{ld.depends_on.layer.vcs_url}} | {{ld.depends_on.get_vcs_reference}}" href="{% url 'layerdetails' project.id ld.depends_on.id %}">{{ld.depends_on.layer.name}}</a>
168 <span class="icon-trash " data-toggle="tooltip" title="Delete"></span> 166 <span class="icon-trash " data-toggle="tooltip" title="Delete"></span>
169 </li> 167 </li>
170 </span>
171 {% endfor %} 168 {% endfor %}
172 </ul> 169 </ul>
173 <div class="input-append add-deps"> 170 <div class="input-append add-deps">
174 <input type="text" autocomplete="off" data-minLength="1" data-autocomplete="off" placeholder="Type a layer name" id="layer-dep-input"> 171 <input type="text" autocomplete="off" data-minLength="1" data-autocomplete="off" placeholder="Type a layer name" id="layer-dep-input">
175 <a class="btn" type="button" id="add-layer-dependency-btn" disabled> 172 <a class="btn" id="add-layer-dependency-btn" >
176 Add layer 173 Add layer
177 </a> 174 </a>
178 </div> 175 </div>
@@ -181,7 +178,7 @@
181 </dl> 178 </dl>
182 </div> 179 </div>
183 <!-- targets tab --> 180 <!-- targets tab -->
184 <div name="targets" id="targets" class="tab-pane"> 181 <div id="targets" class="tab-pane">
185 {% if total_targets == 0 %} 182 {% if total_targets == 0 %}
186 <div class="alert alert-info"> 183 <div class="alert alert-info">
187 <p>Toaster does not have recipe information for the <strong> {{layerversion.layer.name}} </strong> layer.</p> 184 <p>Toaster does not have recipe information for the <strong> {{layerversion.layer.name}} </strong> layer.</p>
@@ -316,7 +313,7 @@
316 </div> 313 </div>
317 314
318 315
319 <div name="machines" id="machines" class="tab-pane"> 316 <div id="machines" class="tab-pane">
320 {% if total_machines == 0 %} 317 {% if total_machines == 0 %}
321 <div class="alert alert-info"> 318 <div class="alert alert-info">
322 <p>Toaster does not have machine information for the <strong> {{layerversion.layer.name}} </strong> layer.</p> 319 <p>Toaster does not have machine information for the <strong> {{layerversion.layer.name}} </strong> layer.</p>
@@ -482,7 +479,6 @@
482 <i class="icon-pencil"></i> 479 <i class="icon-pencil"></i>
483 <span class="icon-trash delete-current-value" data-toggle="tooltip" title="Delete"></span> 480 <span class="icon-trash delete-current-value" data-toggle="tooltip" title="Delete"></span>
484 </dd> 481 </dd>
485 </dd>
486 {% if layerversion.layer.up_id %} 482 {% if layerversion.layer.up_id %}
487 <dt>Layer index</dt> 483 <dt>Layer index</dt>
488 <dd> 484 <dd>
diff --git a/bitbake/lib/toaster/toastergui/templates/layers.html b/bitbake/lib/toaster/toastergui/templates/layers.html
index abad007ee4..e6861c2708 100644
--- a/bitbake/lib/toaster/toastergui/templates/layers.html
+++ b/bitbake/lib/toaster/toastergui/templates/layers.html
@@ -112,7 +112,7 @@
112 {% endwith %} 112 {% endwith %}
113 </td> 113 </td>
114 {% if project %} 114 {% if project %}
115 <td class="add-del-layers" value="{{o.pk}}"> 115 <td class="add-del-layers" data-value="{{o.pk}}">
116 <button class="btn btn-danger btn-block layer-exists-{{o.pk}} layerbtn" style="display:none;" data-layer='{ "id": {{o.pk}}, "name": "{{o.layer.name}}", "url": "{%url 'layerdetails' project.id o.pk%}"}' data-directive="remove" > 116 <button class="btn btn-danger btn-block layer-exists-{{o.pk}} layerbtn" style="display:none;" data-layer='{ "id": {{o.pk}}, "name": "{{o.layer.name}}", "url": "{%url 'layerdetails' project.id o.pk%}"}' data-directive="remove" >
117 <i class="icon-trash"></i> 117 <i class="icon-trash"></i>
118 Delete layer 118 Delete layer
diff --git a/bitbake/lib/toaster/toastergui/templates/machines.html b/bitbake/lib/toaster/toastergui/templates/machines.html
index 4a0986276f..9979376b07 100644
--- a/bitbake/lib/toaster/toastergui/templates/machines.html
+++ b/bitbake/lib/toaster/toastergui/templates/machines.html
@@ -77,7 +77,7 @@
77 <button class="btn btn-block layerbtn layer-add-{{o.layer_version.id}}" data-layer='{ "id": {{o.layer_version.id}}, "name": "{{o.layer_version.layer.name}}", "url": "{%url 'layerdetails' project.id o.layer_version.id %}"}' data-directive="add"> 77 <button class="btn btn-block layerbtn layer-add-{{o.layer_version.id}}" data-layer='{ "id": {{o.layer_version.id}}, "name": "{{o.layer_version.layer.name}}", "url": "{%url 'layerdetails' project.id o.layer_version.id %}"}' data-directive="add">
78 <i class="icon-plus"></i> 78 <i class="icon-plus"></i>
79 Add layer 79 Add layer
80 <i title="" class="icon-question-sign get-help" data-original-title="To enable this machine, you must first add the {{o.layer_version.layer.name}} layer to your project"></i></i> 80 <i title="" class="icon-question-sign get-help" data-original-title="To enable this machine, you must first add the {{o.layer_version.layer.name}} layer to your project"></i>
81 </button> 81 </button>
82 </td> 82 </td>
83 </tr> 83 </tr>
diff --git a/bitbake/lib/toaster/toastergui/templates/newproject.html b/bitbake/lib/toaster/toastergui/templates/newproject.html
index dcb6590642..ed3a279052 100644
--- a/bitbake/lib/toaster/toastergui/templates/newproject.html
+++ b/bitbake/lib/toaster/toastergui/templates/newproject.html
@@ -43,7 +43,7 @@
43 </fieldset> 43 </fieldset>
44 44
45 <div class="form-actions"> 45 <div class="form-actions">
46 <input type="submit" class="btn btn-primary btn-large" value="Create project"></input> 46 <input type="submit" class="btn btn-primary btn-large" value="Create project"/>
47 <span class="help-inline" style="vertical-align:middle;">To create a project, you need to enter a project name</span> 47 <span class="help-inline" style="vertical-align:middle;">To create a project, you need to enter a project name</span>
48 </div> 48 </div>
49 </form> 49 </form>
@@ -64,7 +64,8 @@
64 </div> 64 </div>
65 {% endif %} 65 {% endif %}
66 66
67 </div> 67</div>
68
68 <script type="text/javascript"> 69 <script type="text/javascript">
69 $(document).ready(function () { 70 $(document).ready(function () {
70 // hide the new project button 71 // hide the new project button
@@ -95,5 +96,5 @@
95 }); 96 });
96 }) 97 })
97 </script> 98 </script>
98</div> 99
99{% endblock %} 100{% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/templates/project.html b/bitbake/lib/toaster/toastergui/templates/project.html
index 85a1b164dd..933da4f7da 100644
--- a/bitbake/lib/toaster/toastergui/templates/project.html
+++ b/bitbake/lib/toaster/toastergui/templates/project.html
@@ -30,7 +30,7 @@ vim: expandtab tabstop=2
30 30
31{%else%} 31{%else%}
32 32
33<div id="main" role="main" ng-app="project" ng-controller="prjCtrl" class="top-padded"> 33<div id="main" role="main" data-ng-app="project" data-ng-controller="prjCtrl" class="top-padded">
34 34
35 <!-- project name --> 35 <!-- project name -->
36 <div class="page-header"> 36 <div class="page-header">
@@ -38,9 +38,9 @@ vim: expandtab tabstop=2
38 </div> 38 </div>
39 39
40 <!-- alerts section 1--> 40 <!-- alerts section 1-->
41 <div ng-repeat="a in zone1alerts"> 41 <div data-ng-repeat="a in zone1alerts">
42 <div class="alert alert-dismissible lead" role="alert" ng-class="a.type"><button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span></button> 42 <div class="alert alert-dismissible lead" role="alert" data-ng-class="a.type"><button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span></button>
43 <span ng-bind-html="a.text"></span> 43 <span data-ng-bind-html="a.text"></span>
44 </div> 44 </div>
45 </div> 45 </div>
46 46
@@ -54,21 +54,21 @@ vim: expandtab tabstop=2
54 <script type="text/ng-template" id="dependencies_modal"> 54 <script type="text/ng-template" id="dependencies_modal">
55 <div class="modal-header"> 55 <div class="modal-header">
56 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button> 56 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
57 <h3><span ng-bind="layerAddName"></span> dependencies</h3> 57 <h3><span data-ng-bind="layerAddName"></span> dependencies</h3>
58 </div> 58 </div>
59 <div class="modal-body"> 59 <div class="modal-body">
60 <p><strong>{[layerAddName]}</strong> depends on some layers that are not added to your project. Select the ones you want to add:</p> 60 <p><strong>{[layerAddName]}</strong> depends on some layers that are not added to your project. Select the ones you want to add:</p>
61 <ul class="unstyled"> 61 <ul class="unstyled">
62 <li ng-repeat="ld in items"> 62 <li data-ng-repeat="ld in items">
63 <label class="checkbox"> 63 <label class="checkbox">
64 <input type="checkbox" ng-model="selectedItems[ld.id]"> {[ld.name]} 64 <input type="checkbox" data-ng-model="selectedItems[ld.id]"> {[ld.name]}
65 </label> 65 </label>
66 </li> 66 </li>
67 </ul> 67 </ul>
68 </div> 68 </div>
69 <div class="modal-footer"> 69 <div class="modal-footer">
70 <button class="btn btn-primary" ng-click="ok()">Add layers</button> 70 <button class="btn btn-primary" data-ng-click="ok()">Add layers</button>
71 <button class="btn" ng-click="cancel()">Cancel</button> 71 <button class="btn" data-ng-click="cancel()">Cancel</button>
72 </div> 72 </div>
73 </form> 73 </form>
74 </script> 74 </script>
@@ -82,30 +82,30 @@ vim: expandtab tabstop=2
82 <div class="modal-body"> 82 <div class="modal-body">
83 <p>The following project layers do not exist for the {[releaseDescription]} release:</p> 83 <p>The following project layers do not exist for the {[releaseDescription]} release:</p>
84 <ul> 84 <ul>
85 <li ng-repeat="i in items"><span class="layer-info" data-toggle="tooltip" tooltip="{[i.detail]}">{[i.name]}</span></li> 85 <li data-ng-repeat="i in items"><span class="layer-info" data-toggle="tooltip" tooltip="{[i.detail]}">{[i.name]}</span></li>
86 </ul> 86 </ul>
87 <p>If you change the release to {[releaseDescription]}, the above layers will be deleted from your project.</p> 87 <p>If you change the release to {[releaseDescription]}, the above layers will be deleted from your project.</p>
88 </div> 88 </div>
89 <div class="modal-footer"> 89 <div class="modal-footer">
90 <button class="btn btn-primary" ng-click="ok()">Change release and delete layers</button> 90 <button class="btn btn-primary" data-ng-click="ok()">Change release and delete layers</button>
91 <button class="btn" ng-click="cancel()">Cancel</button> 91 <button class="btn" data-ng-click="cancel()">Cancel</button>
92 </div> 92 </div>
93 </script> 93 </script>
94 94
95 <script type="text/ng-template" id="target_display"> 95 <script type="text/ng-template" id="target_display">
96 <div ng-switch on="t.task.length"> 96 <div data-ng-switch on="t.task.length">
97 <div ng-switch-when="0">{[t.target]}</div> 97 <div data-ng-switch-when="0">{[t.target]}</div>
98 <div ng-switch-default>{[t.target]}:{[t.task]}</div> 98 <div data-ng-switch-default>{[t.target]}:{[t.task]}</div>
99 </div> 99 </div>
100 </script> 100 </script>
101 101
102 102
103 <!-- build form --> 103 <!-- build form -->
104 <div class="well"> 104 <div class="well">
105 <form class="build-form" ng-submit="buildNamedTarget()"> 105 <form class="build-form" data-ng-submit="buildNamedTarget()">
106 <div class="input-append controls"> 106 <div class="input-append controls">
107 <input type="text" class="huge input-xxlarge" placeholder="Type the recipe(s) you want to build" autocomplete="off" ng-model="targetName" typeahead="e.name for e in getAutocompleteSuggestions('targets', $viewValue)|filter:$viewValue" typeahead-template-url="suggestion_details" ng-disabled="!layers.length"/> 107 <input type="text" class="huge input-xxlarge" placeholder="Type the recipe(s) you want to build" autocomplete="off" data-ng-model="targetName" data-typeahead="e.name for e in getAutocompleteSuggestions('targets', $viewValue)|filter:$viewValue" data-typeahead-template-url="suggestion_details" data-ng-disabled="!layers.length"/>
108 <button type="submit" class="btn btn-large btn-primary" ng-disabled="!targetName.length"> 108 <button type="submit" class="btn btn-large btn-primary" data-ng-disabled="!targetName.length">
109 Build 109 Build
110 </button> 110 </button>
111 </div> 111 </div>
@@ -124,27 +124,27 @@ vim: expandtab tabstop=2
124 <!-- latest builds list --> 124 <!-- latest builds list -->
125 125
126 <a id="buildslist"></a> 126 <a id="buildslist"></a>
127 <h2 class="air" ng-if="builds.length">Latest builds</h2> 127 <h2 class="air" data-ng-if="builds.length">Latest builds</h2>
128 <div class="animate-repeat alert" ng-repeat="b in builds track by b.id" ng-class="{'queued':'alert-info', 'deleted':'alert-info', 'in progress': 'alert-info', 'failed':'alert-error', 'completed':{'In Progress':'alert-info', 'Succeeded':'alert-success', 'Failed':'alert-error'}[b.build[0].status]}[b.status]"> 128 <div class="animate-repeat alert" data-ng-repeat="b in builds track by b.id" data-ng-class="{'queued':'alert-info', 'deleted':'alert-info', 'in progress': 'alert-info', 'failed':'alert-error', 'completed':{'In Progress':'alert-info', 'Succeeded':'alert-success', 'Failed':'alert-error'}[b.build[0].status]}[b.status]">
129 <div class="row-fluid"> 129 <div class="row-fluid">
130 <switch ng-switch="b.status"> 130 <switch data-ng-switch="b.status">
131 131
132 <case ng-switch-when="failed"> 132 <case data-ng-switch-when="failed">
133 <div class="lead span3"> 133 <div class="lead span3">
134 <a ng-class="{'succeeded': 'success', 'failed': 'error'}[b.status]" href="{[b.br_page_url]}"> 134 <a data-ng-class="{'succeeded': 'success', 'failed': 'error'}[b.status]" href="{[b.br_page_url]}">
135 <span ng-repeat="t in b.targets" ng-include src="'target_display'"></span> 135 <span data-ng-repeat="t in b.targets" data-ng-include src="'target_display'"></span>
136 </a> 136 </a>
137 </div> 137 </div>
138 <div class="span2 lead"> 138 <div class="span2 lead">
139 <ngif ng-if="b.updated - todaydate > 0"> 139 <ngif data-ng-if="b.updated - todaydate > 0">
140 {[b.updated|date:'HH:mm']} 140 {[b.updated|date:'HH:mm']}
141 </ngif> 141 </ngif>
142 <ngif ng-if="b.updated - todaydate < 0"> 142 <ngif data-ng-if="b.updated - todaydate < 0">
143 {[b.updated|date:'dd/MM/yy HH:mm']} 143 {[b.updated|date:'dd/MM/yy HH:mm']}
144 </ngif> 144 </ngif>
145 </div> 145 </div>
146 <div class="span2"> 146 <div class="span2">
147 <ngif ng-if="b.errors.length"> 147 <ngif data-ng-if="b.errors.length">
148 <span> 148 <span>
149 <i class="icon-minus-sign red lead"></i> 149 <i class="icon-minus-sign red lead"></i>
150 <a href="{[b.br_page_url]}#errors" class="lead error">{[b.errors.length]} 150 <a href="{[b.br_page_url]}#errors" class="lead error">{[b.errors.length]}
@@ -156,47 +156,47 @@ vim: expandtab tabstop=2
156 <!-- we don't have warnings in this case --> 156 <!-- we don't have warnings in this case -->
157 </div> 157 </div>
158 <div> <span class="lead">Build time: {[b.command_time|timediff]}</span> 158 <div> <span class="lead">Build time: {[b.command_time|timediff]}</span>
159 <button class="btn pull-right" ng-class="{'succeeded': 'btn-success', 'failed': 'btn-danger'}[b.status]" 159 <button class="btn pull-right" data-ng-class="{'succeeded': 'btn-success', 'failed': 'btn-danger'}[b.status]"
160 ng-click="buildExistingTarget(b.targets)">Run again</button> 160 data-ng-click="buildExistingTarget(b.targets)">Run again</button>
161 161
162 </div> 162 </div>
163 </case> 163 </case>
164 164
165 <case ng-switch-when="queued"> 165 <case data-ng-switch-when="queued">
166 <div class="lead span5"> <span ng-repeat="t in b.targets" ng-include src="'target_display'"></span> </div> 166 <div class="lead span5"> <span data-ng-repeat="t in b.targets" data-ng-include src="'target_display'"></span> </div>
167 <div class="span4 lead" >Build queued 167 <div class="span4 lead" >Build queued
168 <i title="This build will start as soon as a build server is available" class="icon-question-sign get-help get-help-blue heading-help" data-toggle="tooltip"></i> 168 <i title="This build will start as soon as a build server is available" class="icon-question-sign get-help get-help-blue heading-help" data-toggle="tooltip"></i>
169 </div> 169 </div>
170 <button class="btn pull-right btn-info" ng-click="buildCancel(b)">Cancel</button> 170 <button class="btn pull-right btn-info" data-ng-click="buildCancel(b)">Cancel</button>
171 </case> 171 </case>
172 172
173 <case ng-switch-when="created"> 173 <case data-ng-switch-when="created">
174 <div class="lead span5"> <span ng-repeat="t in b.targets" ng-include src="'target_display'"></span> </div> 174 <div class="lead span5"> <span data-ng-repeat="t in b.targets" data-ng-include src="'target_display'"></span> </div>
175 <div class="span4"> 175 <div class="span4">
176 <span class="lead">Creating build</span> 176 <span class="lead">Creating build</span>
177 </div> 177 </div>
178 <button class="btn pull-right btn-info" ng-click="buildCancel(b)">Cancel</button> 178 <button class="btn pull-right btn-info" data-ng-click="buildCancel(b)">Cancel</button>
179 </case> 179 </case>
180 180
181 <case ng-switch-when="deleted"> 181 <case data-ng-switch-when="deleted">
182 <div class="lead span5"> <span ng-repeat="t in b.targets" ng-include src="'target_display'"></span> </div> 182 <div class="lead span5"> <span data-ng-repeat="t in b.targets" data-ng-include src="'target_display'"></span> </div>
183 <div class="span4" id="{[b.id]}-deleted" > 183 <div class="span4" id="{[b.id]}-deleted" >
184 <span class="lead">Build cancelled</span> 184 <span class="lead">Build cancelled</span>
185 </div> 185 </div>
186 <button class="btn pull-right btn-info" ng-click="buildDelete(b)">Close</button> 186 <button class="btn pull-right btn-info" data-ng-click="buildDelete(b)">Close</button>
187 </case> 187 </case>
188 188
189 189
190 <case ng-switch-when="in progress"> 190 <case data-ng-switch-when="in progress">
191 <switch ng-switch="b.build.length"> 191 <switch data-ng-switch="b.build.length">
192 <case ng-switch-when="0"> 192 <case data-ng-switch-when="0">
193 <div class="lead span5"> <span ng-repeat="t in b.targets" ng-include src="'target_display'"></span> </div> 193 <div class="lead span5"> <span data-ng-repeat="t in b.targets" data-ng-include src="'target_display'"></span> </div>
194 <div class="span4 lead"> 194 <div class="span4 lead">
195 Checking out layers 195 Checking out layers
196 </div> 196 </div>
197 </case> 197 </case>
198 <case ng-switch-default=""> 198 <case data-ng-switch-default="">
199 <div class="lead span3"> <span ng-repeat="t in b.targets" ng-include src="'target_display'"></span> </div> 199 <div class="lead span3"> <span data-ng-repeat="t in b.targets" data-ng-include src="'target_display'"></span> </div>
200 <div class="span4 offset1" > 200 <div class="span4 offset1" >
201 <div class="progress" style="margin-top:5px;" data-toggle="tooltip" tooltip="{[b.build[0].completeper]}% of tasks complete"> 201 <div class="progress" style="margin-top:5px;" data-toggle="tooltip" tooltip="{[b.build[0].completeper]}% of tasks complete">
202 <div style="width: {[b.build[0].completeper]}%;" class="bar"></div> 202 <div style="width: {[b.build[0].completeper]}%;" class="bar"></div>
@@ -207,22 +207,22 @@ vim: expandtab tabstop=2
207 </case> 207 </case>
208 208
209 209
210 <case ng-switch-when="completed"> 210 <case data-ng-switch-when="completed">
211 <div class="lead span3"> 211 <div class="lead span3">
212 <a ng-class="{'Succeeded': 'success', 'Failed': 'error'}[b.build[0].status]" href="{[b.build[0].build_page_url]}"> 212 <a data-ng-class="{'Succeeded': 'success', 'Failed': 'error'}[b.build[0].status]" href="{[b.build[0].build_page_url]}">
213 <span ng-repeat="t in b.targets" ng-include src="'target_display'"></span> 213 <span data-ng-repeat="t in b.targets" data-ng-include src="'target_display'"></span>
214 </a> 214 </a>
215 </div> 215 </div>
216 <div class="span2 lead"> 216 <div class="span2 lead">
217 <ngif ng-if="b.build[0].completed_on - todaydate > 0"> 217 <ngif data-ng-if="b.build[0].completed_on - todaydate > 0">
218 {[b.build[0].completed_on|date:'HH:mm']} 218 {[b.build[0].completed_on|date:'HH:mm']}
219 </ngif> 219 </ngif>
220 <ngif ng-if="b.build[0].completed_on - todaydate < 0"> 220 <ngif data-ng-if="b.build[0].completed_on - todaydate < 0">
221 {[b.build[0].completed_on|date:'dd/MM/yy HH:mm']} 221 {[b.build[0].completed_on|date:'dd/MM/yy HH:mm']}
222 </ngif> 222 </ngif>
223 </div> 223 </div>
224 <div class="span2"> 224 <div class="span2">
225 <ngif ng-if="b.build[0].errors"> 225 <ngif data-ng-if="b.build[0].errors">
226 <span> 226 <span>
227 <i class="icon-minus-sign red lead"></i> 227 <i class="icon-minus-sign red lead"></i>
228 <a href="{[b.build[0].build_page_url]}#errors" class="lead error">{[b.build[0].errors]} 228 <a href="{[b.build[0].build_page_url]}#errors" class="lead error">{[b.build[0].errors]}
@@ -231,7 +231,7 @@ vim: expandtab tabstop=2
231 </ngif> 231 </ngif>
232 </div> 232 </div>
233 <div class="span2"> 233 <div class="span2">
234 <ngif ng-if="b.build[0].warnings"> 234 <ngif data-ng-if="b.build[0].warnings">
235 <span> 235 <span>
236 <i class="icon-warning-sign yellow lead"></i> 236 <i class="icon-warning-sign yellow lead"></i>
237 <a href="{[b.build[0].build_page_url]}#warnings" class="lead warning">{[b.build[0].warnings]} 237 <a href="{[b.build[0].build_page_url]}#warnings" class="lead warning">{[b.build[0].warnings]}
@@ -240,14 +240,14 @@ vim: expandtab tabstop=2
240 </ngif> 240 </ngif>
241 </div> 241 </div>
242 <div> <span class="lead">Build time: <a href="{[b.build[0].build_time_page_url]}">{[b.build[0].build_time|timediff]}</a></span> 242 <div> <span class="lead">Build time: <a href="{[b.build[0].build_time_page_url]}">{[b.build[0].build_time|timediff]}</a></span>
243 <button class="btn pull-right" ng-class="{'Succeeded': 'btn-success', 'Failed': 'btn-danger'}[b.build[0].status]" 243 <button class="btn pull-right" data-ng-class="{'Succeeded': 'btn-success', 'Failed': 'btn-danger'}[b.build[0].status]"
244 ng-click="buildExistingTarget(b.targets)">Run again</button> 244 data-ng-click="buildExistingTarget(b.targets)">Run again</button>
245 245
246 </div> 246 </div>
247 </case> 247 </case>
248 248
249 249
250 <case ng-switch-default=""> 250 <case data-ng-switch-default="">
251 <div>FIXME!</div> 251 <div>FIXME!</div>
252 </case> 252 </case>
253 </switch> 253 </switch>
@@ -259,9 +259,9 @@ vim: expandtab tabstop=2
259 <h2 class="air">Project configuration</h2> 259 <h2 class="air">Project configuration</h2>
260 260
261 <!-- alerts section 2 --> 261 <!-- alerts section 2 -->
262 <div ng-repeat="a in zone2alerts"> 262 <div data-ng-repeat="a in zone2alerts">
263 <div class="alert alert-dismissible lead" role="alert" ng-class="a.type"><button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span></button> 263 <div class="alert alert-dismissible lead" role="alert" data-ng-class="a.type"><button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span></button>
264 <span ng-bind-html="a.text"></span> 264 <span data-ng-bind-html="a.text"></span>
265 </div> 265 </div>
266 </div> 266 </div>
267 267
@@ -273,7 +273,7 @@ vim: expandtab tabstop=2
273 Layers <span class="muted counter">({[layers.length]})</span> 273 Layers <span class="muted counter">({[layers.length]})</span>
274 <i class="icon-question-sign get-help heading-help" title="Bitbake reads metadata files from modules called 'layers'. Layers allow you to isolate different types of customizations from each other. <a href='http://www.yoctoproject.org/docs/current/dev-manual/dev-manual.html#understanding-and-creating-layers' target='_blank'>More on layers</a>"></i> 274 <i class="icon-question-sign get-help heading-help" title="Bitbake reads metadata files from modules called 'layers'. Layers allow you to isolate different types of customizations from each other. <a href='http://www.yoctoproject.org/docs/current/dev-manual/dev-manual.html#understanding-and-creating-layers' target='_blank'>More on layers</a>"></i>
275 </h3> 275 </h3>
276 <div class="alert" ng-if="!layers.length"> 276 <div class="alert" data-ng-if="!layers.length">
277 <b>You need to add some layers </b> 277 <b>You need to add some layers </b>
278 <p> 278 <p>
279 You can: 279 You can:
@@ -285,10 +285,10 @@ vim: expandtab tabstop=2
285 Or type a layer name below. 285 Or type a layer name below.
286 </p> 286 </p>
287 </div> 287 </div>
288 <form ng-submit="layerAdd()"> 288 <form data-ng-submit="layerAdd()">
289 <div class="input-append"> 289 <div class="input-append">
290 <input type="text" class="input-xlarge" id="layer" autocomplete="off" placeholder="Type a layer name" data-minLength="1" ng-model="layerAddName" typeahead="e.name for e in getAutocompleteSuggestions('layers', $viewValue)|filter:$viewValue" typeahead-template-url="suggestion_details" typeahead-on-select="onLayerSelect($item, $model, $label)" typeahead-editable="false" ng-class="{ 'has-error': layerAddName.$invalid }" /> 290 <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.name for e in getAutocompleteSuggestions('layers', $viewValue)|filter:$viewValue" data-typeahead-template-url="suggestion_details" data-typeahead-on-select="onLayerSelect($item, $model, $label)" data-typeahead-editable="false" data-ng-class="{ 'has-error': layerAddName.$invalid }" />
291 <input type="submit" id="add-layer" class="btn" value="Add" ng-disabled="!layerAddName.length"/> 291 <input type="submit" id="add-layer" class="btn" value="Add" data-ng-disabled="!layerAddName.length"/>
292 </div> 292 </div>
293 {% csrf_token %} 293 {% csrf_token %}
294 </form> 294 </form>
@@ -298,9 +298,9 @@ vim: expandtab tabstop=2
298 | 298 |
299 <a href="{% url 'importlayer' project.id %}">Import layer</a></p> 299 <a href="{% url 'importlayer' project.id %}">Import layer</a></p>
300 <ul class="unstyled configuration-list"> 300 <ul class="unstyled configuration-list">
301 <li ng-repeat="l in layers track by l.id" class="animate-repeat"> 301 <li data-ng-repeat="l in layers track by l.id" class="animate-repeat">
302 <a href="{[l.layerdetailurl]}" class="layer-info" data-toggle="tooltip" tooltip-placement="right" tooltip="{[l.giturl]} | {[l.branch.name]}">{[l.name]}</a> 302 <a href="{[l.layerdetailurl]}" class="layer-info" data-toggle="tooltip" tooltip-placement="right" tooltip="{[l.giturl]} | {[l.branch.name]}">{[l.name]}</a>
303 <i class="icon-trash" ng-click="layerDel(l.id)" tooltip="Delete"></i> 303 <i class="icon-trash" data-ng-click="layerDel(l.id)" tooltip="Delete"></i>
304 </li> 304 </li>
305 </ul> 305 </ul>
306 </div> 306 </div>
@@ -312,10 +312,10 @@ vim: expandtab tabstop=2
312 Recipes 312 Recipes
313 <i class="icon-question-sign get-help heading-help" title="What you build, often an image recipe that produces a root file system file. Something like <code>core-image-minimal</code> or <code>core-image-sato</code>"></i> 313 <i class="icon-question-sign get-help heading-help" title="What you build, often an image recipe that produces a root file system file. Something like <code>core-image-minimal</code> or <code>core-image-sato</code>"></i>
314 </h3> 314 </h3>
315 <form ng-submit="buildNamedTarget()"> 315 <form data-ng-submit="buildNamedTarget()">
316 <div class="input-append"> 316 <div class="input-append">
317 <input type="text" class="input-xlarge" placeholder="Type the recipe(s) you want to build" autocomplete="off" data-minLength="1" ng-model="targetName1" typeahead="e.name for e in getAutocompleteSuggestions('targets', $viewValue)|filter:$viewValue" typeahead-template-url="suggestion_details" ng-disabled="!layers.length"> 317 <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="e.name for e in getAutocompleteSuggestions('targets', $viewValue)|filter:$viewValue" data-typeahead-template-url="suggestion_details" data-ng-disabled="!layers.length">
318 <button type="submit" class="btn btn-primary" ng-disabled="!targetName1.length"> 318 <button type="submit" class="btn btn-primary" data-ng-disabled="!targetName1.length">
319 Build </button> 319 Build </button>
320 </div> 320 </div>
321 {% csrf_token %} 321 {% csrf_token %}
@@ -324,18 +324,18 @@ vim: expandtab tabstop=2
324 <a href="{% url 'all-targets' project.id %}">View all compatible recipes</a> 324 <a href="{% url 'all-targets' project.id %}">View all compatible recipes</a>
325 <i class="icon-question-sign get-help" title="View all the recipes you can build with the release selected for this project, which is {[project.release.desc]}"></i> 325 <i class="icon-question-sign get-help" title="View all the recipes you can build with the release selected for this project, which is {[project.release.desc]}"></i>
326 </p> 326 </p>
327 <div ng-if="frequenttargets.length"> 327 <div data-ng-if="frequenttargets.length">
328 <h4 class="air"> 328 <h4 class="air">
329 Most built recipes 329 Most built recipes
330 </h4> 330 </h4>
331 <ul class="unstyled configuration-list {[mutedtargets]}"> 331 <ul class="unstyled configuration-list {[mutedtargets]}">
332 <li ng-repeat="t in frequenttargets"> 332 <li data-ng-repeat="t in frequenttargets">
333 <label class="checkbox"> 333 <label class="checkbox">
334 <input type="checkbox" ng-model="mostBuiltTargets[t]" ng-disabled="disableBuildCheckbox(t)" ng-checked="mostBuiltTargets[t] && !disableBuildCheckbox(t)">{[t]} 334 <input type="checkbox" data-ng-model="mostBuiltTargets[t]" data-ng-disabled="disableBuildCheckbox(t)" data-ng-checked="mostBuiltTargets[t] && !disableBuildCheckbox(t)">{[t]}
335 </label> 335 </label>
336 </li> 336 </li>
337 </ul> 337 </ul>
338 <button class="btn btn-large btn-primary" ng-disabled="enableBuildSelectedTargets()" ng-click="buildSelectedTargets()">Build selected recipes</button> 338 <button class="btn btn-large btn-primary" data-ng-disabled="enableBuildSelectedTargets()" data-ng-click="buildSelectedTargets()">Build selected recipes</button>
339 </div> 339 </div>
340 </div> 340 </div>
341 341
@@ -347,17 +347,17 @@ vim: expandtab tabstop=2
347 </h3> 347 </h3>
348 <p class="lead" id="select-machine-opposite"> 348 <p class="lead" id="select-machine-opposite">
349 <span>{[machine.name]}</span> 349 <span>{[machine.name]}</span>
350 <i id="change-machine" class="icon-pencil" ng-click="toggle('#select-machine')"></i> 350 <i id="change-machine" class="icon-pencil" data-ng-click="toggle('#select-machine')"></i>
351 </p> 351 </p>
352 <div id="select-machine" style="display: none"> 352 <div id="select-machine" style="display: none">
353 <div class="alert alert-info"> 353 <div class="alert alert-info">
354 <strong>Machine changes have a big impact on build outcome.</strong> 354 <strong>Machine changes have a big impact on build outcome.</strong>
355 You cannot really compare the builds for the new machine with the previous ones. 355 You cannot really compare the builds for the new machine with the previous ones.
356 </div> 356 </div>
357 <form ng-submit="editProjectSettings('#select-machine')" class="input-append"> 357 <form data-ng-submit="editProjectSettings('#select-machine')" class="input-append">
358 <input type="text" id="machine" autocomplete="off" ng-model="machineName" value="{[machine.name]}" typeahead="m.name for m in getAutocompleteSuggestions('machines', $viewValue)" typeahead-template-url="suggestion_details" /> 358 <input type="text" id="machine" autocomplete="off" data-ng-model="machineName" value="{[machine.name]}" data-typeahead="m.name for m in getAutocompleteSuggestions('machines', $viewValue)" data-typeahead-template-url="suggestion_details" />
359 <input type="submit" id="apply-change-machine" class="btn" type="button" ng-disabled="machineName == machine.name || machineName.length == 0" value="Save"></input> 359 <input type="submit" id="apply-change-machine" class="btn" data-ng-disabled="machineName == machine.name || machineName.length == 0" value="Save"/>
360 <input type="reset" id="cancel-machine" class="btn btn-link" ng-click="toggle('#select-machine')" value="Cancel"></input> 360 <input type="reset" id="cancel-machine" class="btn btn-link" data-ng-click="toggle('#select-machine')" value="Cancel"/>
361 {% csrf_token %} 361 {% csrf_token %}
362 </form> 362 </form>
363 <p> 363 <p>
@@ -376,9 +376,9 @@ vim: expandtab tabstop=2
376 <h2>Project details</h2> 376 <h2>Project details</h2>
377 377
378 <!-- alerts section 3 --> 378 <!-- alerts section 3 -->
379 <div ng-repeat="a in zone3alerts"> 379 <div data-ng-repeat="a in zone3alerts">
380 <div class="alert alert-dismissible lead" role="alert" ng-class="a.type"><button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span></button> 380 <div class="alert alert-dismissible lead" role="alert" data-ng-class="a.type"><button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span></button>
381 <span ng-bind-html="a.text"></span> 381 <span data-ng-bind-html="a.text"></span>
382 </div> 382 </div>
383 </div> 383 </div>
384 384
@@ -387,31 +387,31 @@ vim: expandtab tabstop=2
387 <h3>Project name</h3> 387 <h3>Project name</h3>
388 <p class="lead" id="change-project-name-opposite"> 388 <p class="lead" id="change-project-name-opposite">
389 <span >{[project.name]}</span> 389 <span >{[project.name]}</span>
390 <i class="icon-pencil" ng-click="toggle('#change-project-name')" ></i> 390 <i class="icon-pencil" data-ng-click="toggle('#change-project-name')" ></i>
391 </p> 391 </p>
392 <div id="change-project-name" style="display:none;"> 392 <div id="change-project-name" style="display:none;">
393 <form ng-submit="editProjectSettings('#change-project-name')" class="input-append"> 393 <form data-ng-submit="editProjectSettings('#change-project-name')" class="input-append">
394 <input type="text" class="input-xlarge" id="type-project-name" ng-model="projectName" value="{[project.name]}"> 394 <input type="text" class="input-xlarge" id="type-project-name" data-ng-model="projectName" value="{[project.name]}">
395 <input type="submit" class="btn" value="Save" ng-disabled="project.name == projectName"/> 395 <input type="submit" class="btn" value="Save" data-ng-disabled="project.name == projectName"/>
396 <input type="reset" class="btn btn-link" value="Cancel" ng-click="toggle('#change-project-name')"> 396 <input type="reset" class="btn btn-link" value="Cancel" data-ng-click="toggle('#change-project-name')">
397 </form> 397 </form>
398 </div> 398 </div>
399 399
400 <h3 ng-if="releases.length > 1"> 400 <h3 data-ng-if="releases.length > 1">
401 Release 401 Release
402 <i class="icon-question-sign get-help heading-help" title="The version of the build system you want to use"></i> 402 <i class="icon-question-sign get-help heading-help" title="The version of the build system you want to use"></i>
403 </h3> 403 </h3>
404 <p ng-if="releases.length > 1" class="lead" id="change-project-version-opposite"> 404 <p data-ng-if="releases.length > 1" class="lead" id="change-project-version-opposite">
405 <span id="project-version">{[project.release.desc]}</span> 405 <span id="project-version">{[project.release.desc]}</span>
406 <i id="change-version" class="icon-pencil" ng-click="toggle('#change-project-version')" ></i> 406 <i id="change-version" class="icon-pencil" data-ng-click="toggle('#change-project-version')" ></i>
407 </p> 407 </p>
408 <div class="div-inline" id="change-project-version" style="display:none;"> 408 <div class="div-inline" id="change-project-version" style="display:none;">
409 <form ng-submit="testProjectSettingsChange('#change-project-version')" class="input-append"> 409 <form data-ng-submit="testProjectSettingsChange('#change-project-version')" class="input-append">
410 <select id="select-version" ng-model="projectVersion"> 410 <select id="select-version" data-ng-model="projectVersion">
411 <option ng-repeat="r in releases" value="{[r.id]}" ng-selected="r.id == project.release.id">{[r.description]}</option> 411 <option data-ng-repeat="r in releases" value="{[r.id]}" data-ng-selected="r.id == project.release.id">{[r.description]}</option>
412 </select> 412 </select>
413 <input type="submit" class="btn" style="margin-left:5px;" value="Save" ng-disabled="project.release.id == projectVersion"/> 413 <input type="submit" class="btn" style="margin-left:5px;" value="Save" data-ng-disabled="project.release.id == projectVersion"/>
414 <input type="reset" class="btn btn-link" value="Cancel" ng-click="toggle('#change-project-version')"/> 414 <input type="reset" class="btn btn-link" value="Cancel" data-ng-click="toggle('#change-project-version')"/>
415 415
416 </form> 416 </form>
417 </div> 417 </div>
@@ -431,7 +431,7 @@ angular.element(document).ready(function() {
431 scope.urls = {}; 431 scope.urls = {};
432 scope.urls.xhr_build = "{% url 'xhr_projectbuild' project.id %}"; 432 scope.urls.xhr_build = "{% url 'xhr_projectbuild' project.id %}";
433 scope.urls.xhr_edit = "{% url 'xhr_projectedit' project.id %}"; 433 scope.urls.xhr_edit = "{% url 'xhr_projectedit' project.id %}";
434 scope.urls.xhr_datatypeahead = "{% url 'xhr_datatypeahead' %}"; 434 scope.urls.xhr_datatypeahead = "{% url 'xhr_datatypeahead' project.id %}";
435 scope.urls.layers = "{% url 'all-layers' project.id %}"; 435 scope.urls.layers = "{% url 'all-layers' project.id %}";
436 scope.urls.targets = "{% url 'all-targets' project.id %}"; 436 scope.urls.targets = "{% url 'all-targets' project.id %}";
437 scope.urls.importlayer = "{% url 'importlayer' project.id %}"; 437 scope.urls.importlayer = "{% url 'importlayer' project.id %}";
diff --git a/bitbake/lib/toaster/toastergui/templates/recipe.html b/bitbake/lib/toaster/toastergui/templates/recipe.html
index 6eba9b6f0b..a0fe6d71d3 100644
--- a/bitbake/lib/toaster/toastergui/templates/recipe.html
+++ b/bitbake/lib/toaster/toastergui/templates/recipe.html
@@ -45,7 +45,7 @@
45 </li> 45 </li>
46 </ul> 46 </ul>
47 <div class="tab-content"> 47 <div class="tab-content">
48 <div class="tab-pane {{tab_states.1}}" id="information" name="information"> 48 <div class="tab-pane {{tab_states.1}}" id="information">
49 <dl class="dl-horizontal"> 49 <dl class="dl-horizontal">
50 <dt> 50 <dt>
51 <i class="icon-question-sign get-help" title="The name of the layer providing the recipe"></i> 51 <i class="icon-question-sign get-help" title="The name of the layer providing the recipe"></i>
@@ -144,7 +144,7 @@
144 </table> 144 </table>
145 {% endif %} 145 {% endif %}
146 </div> 146 </div>
147 <div class="tab-pane {{tab_states.3}}" id="dependencies" name="dependencies"> 147 <div class="tab-pane {{tab_states.3}}" id="dependencies">
148 148
149 {% if not object.r_dependencies_recipe.all %} 149 {% if not object.r_dependencies_recipe.all %}
150 <div class="alert alert-info"> 150 <div class="alert alert-info">
@@ -176,7 +176,7 @@
176 {% endif %} 176 {% endif %}
177 177
178 </div> 178 </div>
179 <div class="tab-pane {{tab_states.4}}" id="brought-in-by" name="brought-in-by"> 179 <div class="tab-pane {{tab_states.4}}" id="brought-in-by">
180 180
181 {% if not object.r_dependencies_depends.all %} 181 {% if not object.r_dependencies_depends.all %}
182 <div class="alert alert-info"> 182 <div class="alert alert-info">
diff --git a/bitbake/lib/toaster/toastergui/templates/targets.html b/bitbake/lib/toaster/toastergui/templates/targets.html
index dc2cef6882..224288ea35 100644
--- a/bitbake/lib/toaster/toastergui/templates/targets.html
+++ b/bitbake/lib/toaster/toastergui/templates/targets.html
@@ -97,14 +97,14 @@
97 </a> 97 </a>
98 {% endif %} 98 {% endif %}
99 </td> 99 </td>
100 <td class="add-layer" value="{{o.pk}}"> 100 <td class="add-layer" data-value="{{o.pk}}">
101 <a href="{% url 'project' project.id %}#/targetbuild={{o.name}}" class="btn btn-block layer-exists-{{o.preffered_layerversion.pk}}" style="display:none; margin-top: 5px;" > 101 <a href="{% url 'project' project.id %}#/targetbuild={{o.name}}" class="btn btn-block layer-exists-{{o.preffered_layerversion.pk}}" style="display:none; margin-top: 5px;" >
102 Build recipe 102 Build recipe
103 </a> 103 </a>
104 <button class="btn btn-block layerbtn layer-add-{{o.preffered_layerversion.pk}}" data-layer='{ "id": {{o.preffered_layerversion.pk}}, "name": "{{o.preffered_layerversion.layer.name}}", "url": "{%url 'layerdetails' project.id o.preffered_layerversion.pk%}"}' data-directive="add"> 104 <button class="btn btn-block layerbtn layer-add-{{o.preffered_layerversion.pk}}" data-layer='{ "id": {{o.preffered_layerversion.pk}}, "name": "{{o.preffered_layerversion.layer.name}}", "url": "{%url 'layerdetails' project.id o.preffered_layerversion.pk%}"}' data-directive="add">
105 <i class="icon-plus"></i> 105 <i class="icon-plus"></i>
106 Add layer 106 Add layer
107 <i title="" class="icon-question-sign get-help" data-original-title="To build this target, you must first add the {{o.preffered_layerversion.layer.name}} layer to your project"></i></i> 107 <i title="" class="icon-question-sign get-help" data-original-title="To build this target, you must first add the {{o.preffered_layerversion.layer.name}} layer to your project"></i>
108 </button> 108 </button>
109 </td> 109 </td>
110 </tr> 110 </tr>
diff --git a/bitbake/lib/toaster/toastergui/templates/task.html b/bitbake/lib/toaster/toastergui/templates/task.html
index 907c621834..6e06ddfa31 100644
--- a/bitbake/lib/toaster/toastergui/templates/task.html
+++ b/bitbake/lib/toaster/toastergui/templates/task.html
@@ -22,19 +22,20 @@
22</h2> 22</h2>
23{%if task.task_executed %} 23{%if task.task_executed %}
24 {# executed tasks outcome #} 24 {# executed tasks outcome #}
25 <dl class="dl-horizontal"> 25 {% if task.logfile %}
26 {% if task.logfile %} 26 {% if MANAGED and build.project %}
27 {% if MANAGED and build.project %}
28 <a class="btn btn-large" href="{% url 'build_artifact' build.id "tasklogfile" task.pk %}" style="margin:15px;">Download task log</a> 27 <a class="btn btn-large" href="{% url 'build_artifact' build.id "tasklogfile" task.pk %}" style="margin:15px;">Download task log</a>
29 {% else %} 28 {% else %}
29 <dl class="dl-horizontal">
30 <dt> 30 <dt>
31 <i class="icon-question-sign get-help" title="Path the task log file"></i> Log file 31 <i class="icon-question-sign get-help" title="Path the task log file"></i> Log file
32 </dt> 32 </dt>
33 <dd> 33 <dd>
34 <code>{{task.logfile}}</code> 34 <code>{{task.logfile}}</code>
35 </dd> 35 </dd>
36 {% endif %} 36 </dl>
37 {% endif %} 37 {% endif %}
38 {% endif %}
38 {# show stack trace for failed task #} 39 {# show stack trace for failed task #}
39 {% if task.outcome == task.OUTCOME_FAILED and log_head %} 40 {% if task.outcome == task.OUTCOME_FAILED and log_head %}
40 <h3>Python stack trace</h3> 41 <h3>Python stack trace</h3>
@@ -45,7 +46,6 @@
45 <code>{{log_body}}</code><br><a id="full-trace-hide" class="btn btn-mini collapsed" style="font-family:Helvetica Neue" data-target="#fulltrace" data-toggle="collapse">Collapse stack trace<i class="icon-caret-up"></i></a></div></pre> 46 <code>{{log_body}}</code><br><a id="full-trace-hide" class="btn btn-mini collapsed" style="font-family:Helvetica Neue" data-target="#fulltrace" data-toggle="collapse">Collapse stack trace<i class="icon-caret-up"></i></a></div></pre>
46 </div> 47 </div>
47 {% endif %} 48 {% endif %}
48 </dl>
49{% else %} 49{% else %}
50{# not executed tasks outcome #} 50{# not executed tasks outcome #}
51 {% if task.outcome == task.OUTCOME_PREBUILT %} 51 {% if task.outcome == task.OUTCOME_PREBUILT %}
@@ -155,15 +155,16 @@
155 155
156{# Execution section #} 156{# Execution section #}
157 {% if task.task_executed %} 157 {% if task.task_executed %}
158 <h2> 158 <h2>
159 Executed 159 Executed
160 <i class="icon-question-sign get-help heading-help" title="'Executed' tasks are those that need to run in order to generate the task output"></i> 160 <i class="icon-question-sign get-help heading-help" title="'Executed' tasks are those that need to run in order to generate the task output"></i>
161 {% else %} 161 {% else %}
162 <h2 class="muted"> 162 <h2 class="muted">
163 Not Executed 163 Not Executed
164 <i class="icon-question-sign get-help heading-help" title="'Not executed' tasks don't need to run because their outcome is provided by another task"></i> 164 <i class="icon-question-sign get-help heading-help" title="'Not executed' tasks don't need to run because their outcome is provided by another task"></i>
165 {% endif %} 165 {% endif %}
166 </h2> 166 </h2>
167
167<dl class="dl-horizontal"> 168<dl class="dl-horizontal">
168 <dt> 169 <dt>
169 <i class="icon-question-sign get-help" title="To make builds more efficient, the build system detects changes in the 'inputs' to a given task by creating a 'task signature'. If the signature changes, the build system assumes the inputs have changed and the task needs to be rerun"></i> 170 <i class="icon-question-sign get-help" title="To make builds more efficient, the build system detects changes in the 'inputs' to a given task by creating a 'task signature'. If the signature changes, the build system assumes the inputs have changed and the task needs to be rerun"></i>
@@ -172,12 +173,12 @@
172 <dd> 173 <dd>
173 {{task.sstate_checksum}} 174 {{task.sstate_checksum}}
174 </dd> 175 </dd>
176</dl>
175 {% if task.sstate_result != task.SSTATE_NA %} 177 {% if task.sstate_result != task.SSTATE_NA %}
176 </dl>
177 <div class="alert alert-info">Attempting to restore output from sstate cache 178 <div class="alert alert-info">Attempting to restore output from sstate cache
178 <i class="icon-question-sign get-help get-help-blue" title="The build system is searching for the task output in your <code>sstate-cache</code> directory and mirrors. If the build system finds the task output, it will reuse it instead of building it from scratch by running the real task. Reusing the task output makes the build faster"></i> 179 <i class="icon-question-sign get-help get-help-blue" title="The build system is searching for the task output in your <code>sstate-cache</code> directory and mirrors. If the build system finds the task output, it will reuse it instead of building it from scratch by running the real task. Reusing the task output makes the build faster"></i>
179 </div> 180 </div>
180 <dl class="dl-horizontal"> 181 <dl class="dl-horizontal">
181 <dt> 182 <dt>
182 <i class="icon-question-sign get-help" title="The name of the file searched for in your <code>sstate-cache</code> directory and mirrors"></i> 183 <i class="icon-question-sign get-help" title="The name of the file searched for in your <code>sstate-cache</code> directory and mirrors"></i>
183 File searched for 184 File searched for
@@ -274,27 +275,27 @@
274 <h2 class="details">Performance</h2> 275 <h2 class="details">Performance</h2>
275{% endif %} 276{% endif %}
276 <dl class="dl-horizontal"> 277 <dl class="dl-horizontal">
277 {% if task.elapsed_time %} 278 {% if task.elapsed_time %}
278 <dt> 279 <dt>
279 <i class="icon-question-sign get-help" title="How long it took the task to finish in seconds"></i> 280 <i class="icon-question-sign get-help" title="How long it took the task to finish in seconds"></i>
280 Time (secs) 281 Time (secs)
281 </dt> 282 </dt>
282 <dd>{{task.elapsed_time|format_none_and_zero|floatformat:2}}</dd> 283 <dd>{{task.elapsed_time|format_none_and_zero|floatformat:2}}</dd>
283 {% endif %} 284 {% endif %}
284 {% if task.cpu_usage > 0 %} 285 {% if task.cpu_usage > 0 %}
285 <dt> 286 <dt>
286 <i class="icon-question-sign get-help" title="The percentage of task CPU utilization"></i> 287 <i class="icon-question-sign get-help" title="The percentage of task CPU utilization"></i>
287 CPU usage 288 CPU usage
288 </dt> 289 </dt>
289 <dd>{{task.cpu_usage|format_none_and_zero|floatformat:2}}%</dd> 290 <dd>{{task.cpu_usage|format_none_and_zero|floatformat:2}}%</dd>
290 {% endif %} 291 {% endif %}
291 {% if task.disk_io > 0 %} 292 {% if task.disk_io > 0 %}
292 <dt> 293 <dt>
293 <i class="icon-question-sign get-help" title="Number of miliseconds the task spent doing disk input and output"></i> 294 <i class="icon-question-sign get-help" title="Number of miliseconds the task spent doing disk input and output"></i>
294 Disk I/O (ms) 295 Disk I/O (ms)
295 </dt> 296 </dt>
296 <dd>{{task.disk_io|format_none_and_zero}}</dd> 297 <dd>{{task.disk_io|format_none_and_zero}}</dd>
297 {% endif %} 298 {% endif %}
298 </dl> 299 </dl>
299 300
300</div> 301</div>
diff --git a/bitbake/lib/toaster/toastergui/urls.py b/bitbake/lib/toaster/toastergui/urls.py
index de8c62cd62..d686c967dc 100644
--- a/bitbake/lib/toaster/toastergui/urls.py
+++ b/bitbake/lib/toaster/toastergui/urls.py
@@ -53,7 +53,7 @@ urlpatterns = patterns('toastergui.views',
53 # images are known as targets in the internal model 53 # images are known as targets in the internal model
54 url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'target', name='target'), 54 url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'target', name='target'),
55 url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/targetpkg$', 'targetpkg', name='targetpkg'), 55 url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/targetpkg$', 'targetpkg', name='targetpkg'),
56 url(r'^dentries/build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'dirinfo_ajax', name='dirinfo_ajax'), 56 url(r'^dentries/build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'xhr_dirinfo', name='dirinfo_ajax'),
57 url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo$', 'dirinfo', name='dirinfo'), 57 url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo$', 'dirinfo', name='dirinfo'),
58 url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo_filepath/_(?P<file_path>(?:/[^/\n]+)*)$', 'dirinfo', name='dirinfo_filepath'), 58 url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo_filepath/_(?P<file_path>(?:/[^/\n]+)*)$', 'dirinfo', name='dirinfo_filepath'),
59 url(r'^build/(?P<build_id>\d+)/configuration$', 'configuration', name='configuration'), 59 url(r'^build/(?P<build_id>\d+)/configuration$', 'configuration', name='configuration'),
@@ -83,7 +83,7 @@ urlpatterns = patterns('toastergui.views',
83 83
84 url(r'^project/(?P<pid>\d+)/layers/$', 'layers', name='all-layers'), 84 url(r'^project/(?P<pid>\d+)/layers/$', 'layers', name='all-layers'),
85 url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)$', 'layerdetails', name='layerdetails'), 85 url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)$', 'layerdetails', name='layerdetails'),
86 url(r'^project/(?P<pid>\d+)/layer/$', lambda x: HttpResponseBadRequest(), name='base_layerdetails'), 86 url(r'^project/(?P<pid>\d+)/layer/$', lambda x,pid: HttpResponseBadRequest(), name='base_layerdetails'),
87 87
88 # the import layer is a project-specific functionality; 88 # the import layer is a project-specific functionality;
89 url(r'^project/(?P<pid>\d+)/importlayer$', 'importlayer', name='importlayer'), 89 url(r'^project/(?P<pid>\d+)/importlayer$', 'importlayer', name='importlayer'),
@@ -92,12 +92,12 @@ urlpatterns = patterns('toastergui.views',
92 url(r'^project/(?P<pid>\d+)/machines/$', 'machines', name='all-machines'), 92 url(r'^project/(?P<pid>\d+)/machines/$', 'machines', name='all-machines'),
93 93
94 url(r'^xhr_build/$', 'xhr_build', name='xhr_build'), 94 url(r'^xhr_build/$', 'xhr_build', name='xhr_build'),
95 url(r'^xhr_projectbuild/(?P<pid>\d+)/$', 'xhr_projectbuild', name='xhr_projectbuild'), 95 url(r'^xhr_projectbuild/(?P<pid>\d+)$', 'xhr_projectbuild', name='xhr_projectbuild'),
96 url(r'^xhr_projectinfo/$', 'xhr_projectinfo', name='xhr_projectinfo'), 96 url(r'^xhr_projectinfo/$', 'xhr_projectinfo', name='xhr_projectinfo'),
97 url(r'^xhr_projectedit/(?P<pid>\d+)/$', 'xhr_projectedit', name='xhr_projectedit'), 97 url(r'^xhr_projectedit/(?P<pid>\d+)$', 'xhr_projectedit', name='xhr_projectedit'),
98 url(r'^xhr_configvaredit/(?P<pid>\d+)/$', 'xhr_configvaredit', name='xhr_configvaredit'), 98 url(r'^xhr_configvaredit/(?P<pid>\d+)$', 'xhr_configvaredit', name='xhr_configvaredit'),
99 99
100 url(r'^xhr_datatypeahead/$', 'xhr_datatypeahead', name='xhr_datatypeahead'), 100 url(r'^xhr_datatypeahead/(?P<pid>\d+)$', 'xhr_datatypeahead', name='xhr_datatypeahead'),
101 url(r'^xhr_importlayer/$', 'xhr_importlayer', name='xhr_importlayer'), 101 url(r'^xhr_importlayer/$', 'xhr_importlayer', name='xhr_importlayer'),
102 url(r'^xhr_updatelayer/$', 'xhr_updatelayer', name='xhr_updatelayer'), 102 url(r'^xhr_updatelayer/$', 'xhr_updatelayer', name='xhr_updatelayer'),
103 103
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index d938fd8280..44f33beba6 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -743,9 +743,9 @@ def targetpkg( request, build_id, target_id ):
743 743
744from django.core.serializers.json import DjangoJSONEncoder 744from django.core.serializers.json import DjangoJSONEncoder
745from django.http import HttpResponse 745from django.http import HttpResponse
746def dirinfo_ajax(request, build_id, target_id): 746def xhr_dirinfo(request, build_id, target_id):
747 top = request.GET.get('start', '/') 747 top = request.GET.get('start', '/')
748 return HttpResponse(_get_dir_entries(build_id, target_id, top)) 748 return HttpResponse(_get_dir_entries(build_id, target_id, top), content_type = "application/json")
749 749
750from django.utils.functional import Promise 750from django.utils.functional import Promise
751from django.utils.encoding import force_text 751from django.utils.encoding import force_text
@@ -1961,7 +1961,7 @@ if toastermain.settings.MANAGED:
1961 1961
1962 if (insert_projects): 1962 if (insert_projects):
1963 context['tablecols'].append( 1963 context['tablecols'].append(
1964 {'name': 'Project', 'clclass': 'project', 1964 {'name': 'Project', 'clclass': 'project_column',
1965 } 1965 }
1966 ) 1966 )
1967 1967
@@ -2307,14 +2307,9 @@ if toastermain.settings.MANAGED:
2307 2307
2308 from django.views.decorators.csrf import csrf_exempt 2308 from django.views.decorators.csrf import csrf_exempt
2309 @csrf_exempt 2309 @csrf_exempt
2310 def xhr_datatypeahead(request): 2310 def xhr_datatypeahead(request, pid):
2311 try: 2311 try:
2312 prj = None 2312 prj = Project.objects.get(pk = pid)
2313 if request.GET.has_key('project_id'):
2314 prj = Project.objects.get(pk = request.GET['project_id'])
2315 else:
2316 raise Exception("No valid project selected")
2317
2318 2313
2319 def _lv_to_dict(x): 2314 def _lv_to_dict(x):
2320 return {"id": x.pk, 2315 return {"id": x.pk,
@@ -2322,7 +2317,7 @@ if toastermain.settings.MANAGED:
2322 "tooltip": x.layer.vcs_url+" | "+x.get_vcs_reference(), 2317 "tooltip": x.layer.vcs_url+" | "+x.get_vcs_reference(),
2323 "detail": "(" + x.layer.vcs_url + (")" if x.up_branch == None else " | "+x.get_vcs_reference()+")"), 2318 "detail": "(" + x.layer.vcs_url + (")" if x.up_branch == None else " | "+x.get_vcs_reference()+")"),
2324 "giturl": x.layer.vcs_url, 2319 "giturl": x.layer.vcs_url,
2325 "layerdetailurl" : reverse('layerdetails', args=(x.pk,)), 2320 "layerdetailurl" : reverse('layerdetails', args=(pid, x.pk,)),
2326 "revision" : x.get_vcs_reference(), 2321 "revision" : x.get_vcs_reference(),
2327 } 2322 }
2328 2323
@@ -2867,8 +2862,7 @@ if toastermain.settings.MANAGED:
2867 ] 2862 ]
2868 } 2863 }
2869 2864
2870 if 'project_id' in request.session: 2865 context['tablecols'] += [
2871 context['tablecols'] += [
2872 { 'name': 'Build', 2866 { 'name': 'Build',
2873 'dclass': 'span2', 2867 'dclass': 'span2',
2874 'qhelp': "Add or delete targets to / from your project ", 2868 'qhelp': "Add or delete targets to / from your project ",
@@ -3509,7 +3503,7 @@ else:
3509 def layerdetails(request, layerid): 3503 def layerdetails(request, layerid):
3510 return render(request, 'landing_not_managed.html') 3504 return render(request, 'landing_not_managed.html')
3511 3505
3512 def targets(request): 3506 def targets(request, pid):
3513 return render(request, 'landing_not_managed.html') 3507 return render(request, 'landing_not_managed.html')
3514 3508
3515 def machines(request): 3509 def machines(request):