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