blob: a5bc48127c7de7efc8372854d27ed56e87255c70 [file] [log] [blame]
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001{% extends "basebuildpage.html" %}
2{% block extraheadcontent %}
3{% load static %}
4<link rel="stylesheet" href="{% static 'css/jquery.treetable.css' %}" type="text/css">
5<link rel="stylesheet" href="{% static 'css/jquery.treetable.theme.toaster.css' %}" type="text/css">
6{% endblock extraheadcontent %}
7
8{% block localbreadcrumb %}
9<li>{{target.target}}</li>
10{% endblock localbreadcrumb%}
11
12{% block buildinfomain %}
13
14{% load static %}
15<script src="{% static 'js/jquery.treetable.js' %}">
16</script>
17{% load projecttags %}
18
19<script type='text/javascript'>
20 function setupTreetable() {
21 $("#dirtable").treetable({
22 expandable: true,
23 branchAttr: "ttBranch",
24 clickableNodeNames: true,
25 onNodeCollapse: function() {
26 /* Do nothing, keep cached */
27 },
28 onNodeExpand: function() {
29 var start = this.id;
30 var n = $("#dirtable").treetable("node", start);
31 if (this.children.length > 0) {
32 /* already was expanded once */
33 $("#dirtable").treetable("reveal", start);
34 }
35 else {
36 var url = "{% url "dirinfo_ajax" build.id target.id %}";
37 $.ajax({
38 async: false,
39 type : "GET",
40 url : url,
41 data : "start=" + start,
42 success : function(response) {
43 addRows(n, response)
44 },
45 error : function(jqXHR, textStatus, errorThrown ) {alert(textStatus + ":" + errorThrown)},
46 });
47 }
48 },
49 });
50 }
51 function td(data) {
52 if (data == null) {
53 data = '';
54 }
55 return '<td>' + data + '</td>'
56 }
57
58 function formatRow(o) {
59 /* setup tr-wide formatting */
60 var tr = '<tr class="';
61 if (o.link_to != null) {
62 tr += 'muted ';
63 }
64 if (o.isdir && o.childcount) {
65 tr += 'branch" data-tt-branch="true" ';
66 }
67 else {
68 tr += 'leaf" data-tt-branch="false" ';
69 }
70 tr += ' data-tt-id="' + o.fullpath +'" ';
71 if (o.parent != "/") {
72 tr += ' data-tt-parent-id="' + o.parent +'" ';
73 }
74 tr += '>';
75
76 /* setup td specific formatting */
77 var link_to = td(o.link_to);
78 var size = '<td class = "sizecol">' + o.size + '</td>'
79 var permission = td(o.permission);
80 var owner = td(o.owner);
81 var group = td(o.group);
82
83 /* handle the name column */
84 var name = null;;
85 var namespan=1;
86 if (o.isdir) {
87 if (o.link_to == null) {
88 namespan = 2;
89 if (o.package == null) {
90 namespan = 3;
91 }
92 }
93 var colspan = 'colspan="' + namespan + '"';
94 name = '<td class="content-directory"' + colspan + '>';
95 if (o.childcount) {
96 name += '<a href="">';
97 }
98 name += '<i class="icon-folder-close"></i>';
99 name += '&nbsp;' + o.name;
100 if (o.childcount) {
101 name += '</a>';
102 }
103 name += '</td>';
104 }
105 else {
106 name = '<td>';
107 if (o.link_to == null) {
108 name += '<i class="icon-file"></i>';
109 }
110 else {
111 name += '<i class="icon-hand-right"></i>';
112 }
113 name += '&nbsp;' + o.name;
114 name += '</td>';
115 }
116
117 /* handle the package column */
118 var package = null;
119 if (o.package != null) {
120 /* add link to included package page */
121 build_id = {{ build.id }};
122 target_id = {{ target.id }};
123 /* Create a url for a dummy package id of 0 */
124 dummy = "{% url 'package_included_detail' build.id target.id 0 %}"
125 /* fill in the package id */
126 url = dummy.substr(0, dummy.length-1) + o.package_id;
127 package = '<a href=' + url + '>' ;
128 package += o.package;
129 package += '</a>';
130 if (o.installed_package != o.package) {
131 /* make class muted and add hover help */
132 package += '<span class="muted"> as ' + o.installed_package + ' </span>';
133 package += '<i class="icon-question-sign get-help hover-help" ';
134 package += 'title="' + o.package + ' was renamed at packaging time and was installed in your image as ' + o.installed_package + '">';
135 package += '</i>';
136 }
137 }
138 package = td(package);
139
140 var cols1to3;
141 switch (namespan) {
142 case 3:
143 cols1to3 = name;
144 break;
145 case 2:
146 cols1to3 = name + package;
147 break;
148 default:
149 cols1to3 = name + link_to + package;
150 }
151 r = tr + cols1to3 + size + permission + owner + group + "</tr>"
152 return r;
153 }
154
155 function addRows(n, objs) {
156 rows = "";
157 for (i=0; i<objs.length; i++) {
158 rows += formatRow(objs[i]);
159 }
160 $("#dirtable").treetable("loadBranch", n, rows);
161 }
162
163 $.fn.isOffScreen = function(){
164 var win = $(window);
165 viewportBottom = win.scrollTop() + win.height();
166
167 var bounds = this.offset();
168 bounds.bottom = bounds.top + this.outerHeight();
169
170 return (bounds.bottom > viewportBottom);
171 };
172
173 function selectRow(path) {
174 var row = $('tr[data-tt-id="' + path + '"]');
175 row.addClass(" highlight");
176 if (row.isOffScreen()) {
177 $('html, body').animate({ scrollTop: row.offset().top - 150}, 2000);
178 }
179 }
180</script>
181
182<div class="span10">
183
184 <div class="page-header">
185 <h1> {{target.target}} </h1>
186 </div>
187
188 <ul class="nav nav-pills">
189 <li class="">
190 <a href="{% url 'target' build.id target.id %}">
191 <i class="icon-question-sign get-help" title="Of all the packages built, the subset installed in the root file system of this image"></i>
192 Packages included ({{target.package_count}} - {{packages_sum|filtered_filesizeformat}})
193 </a>
194 </li>
195 <li class="active">
196 <a href="{% url 'dirinfo' build.id target.id %}">
197 <i class="icon-question-sign get-help" title="The directories and files in the root file system of this image"></i>
198 Directory structure
199 </a>
200 </li>
201 </ul>
202
203 <div id="directory-structure" class="tab-pane active">
204 <table id="dirtable" class="table table-bordered table-hover treetable">
205 <thead>
206 <tr>
207 <th>Directory / File</th>
208 <th>Symbolic link to</th>
209 <th>Source package</th>
210 <th>Size</th>
211 <th>Permissions</th>
212 <th>Owner</th>
213 <th>Group</th>
214 </tr>
215 </thead>
216 <tbody>
217 <script type='text/javascript'>
218 setupTreetable();
219 addRows(null, {{ objects|safe }} );
220 {% if file_path %}
221 {% comment %}
222 link from package_included_detail specifies file path
223 {% endcomment %}
224 {% for dir_elem in dir_list %}
225 $("#dirtable").treetable("expandNode", "{{dir_elem}}");
226 {% endfor %}
227 selectRow("{{file_path}}");
228 {% endif %}
229 </script>
230 </tbody>
231 </table>
232 </div> <!-- directory-structure -->
233</div> <!-- span10 -->
234
235{% endblock buildinfomain %}
236