diff options
| author | Farrell Wymore <farrell.wymore@windriver.com> | 2014-05-21 15:15:08 +0100 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-06-20 14:58:08 +0100 |
| commit | 18224a4a461754d660ed3e69a0545ac7e0a2d028 (patch) | |
| tree | 5ef1da271f5b2f599558b7cfb1f4c0c9086999af | |
| parent | 6d0ae0ef440d5ec6dac5410e77bc52e5323e7cfb (diff) | |
| download | poky-18224a4a461754d660ed3e69a0545ac7e0a2d028.tar.gz | |
bitbake: toaster: sort columns properly after edit columns
If a sorted column is made invisible through the edit columns function,
resort the table the its default order.
[YOCTO 5919]
(Bitbake rev: 23908ecddb908d8238be0c1bdbcf2ecf6a9a088f)
Signed-off-by: Farrell Wymore <farrell.wymore@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | bitbake/lib/toaster/toastergui/templates/basetable_top.html | 172 | ||||
| -rw-r--r-- | bitbake/lib/toaster/toastergui/views.py | 46 |
2 files changed, 204 insertions, 14 deletions
diff --git a/bitbake/lib/toaster/toastergui/templates/basetable_top.html b/bitbake/lib/toaster/toastergui/templates/basetable_top.html index 22c389799a..1231e1f924 100644 --- a/bitbake/lib/toaster/toastergui/templates/basetable_top.html +++ b/bitbake/lib/toaster/toastergui/templates/basetable_top.html | |||
| @@ -1,17 +1,42 @@ | |||
| 1 | {% load projecttags %} | 1 | {% load projecttags %} |
| 2 | <!-- component to display a generic table --> | 2 | <!-- component to display a generic table --> |
| 3 | <script> | 3 | <script> |
| 4 | function showhideTableColumn(clname, sh) { | ||
| 5 | if (sh) $('.' + clname).show(100); | ||
| 6 | else $('.' + clname).hide(100); | ||
| 7 | 4 | ||
| 8 | // save cookie for all checkboxes | 5 | // |
| 9 | save = ''; | 6 | // most of the following javascript is for managing the 'Edit Columns' |
| 10 | $('.chbxtoggle').each(function() { if ($(this).attr('id') != undefined) { save += ';' + $(this).attr('id') +':'+ $(this).is(':checked')} }) | 7 | // pop-up dialog and actions. the idea is that there are 2 types |
| 11 | $.cookie('_displaycols_{{objectname}}', save); | 8 | // of actions: immediate - performed while the dialog is still |
| 12 | save = ''; | 9 | // visible - hide/show columns, and delayed - performed when the |
| 13 | } | 10 | // dialog becomes invisible - any resorting if necessary. |
| 11 | // | ||
| 12 | // When the dialog is open, an interval timer is set up to | ||
| 13 | // determine if the dialog is still visible. when the dialog | ||
| 14 | // closes - goes invisible, the delayed actions are performed. | ||
| 15 | // | ||
| 16 | // the interval timer and interrupt handler is a way of simulating | ||
| 17 | // an onclose event. there is probably a simpler way to do this | ||
| 18 | // however the pop-up window id was elusive. | ||
| 19 | // | ||
| 20 | |||
| 21 | var editColTimer; | ||
| 22 | var editColAction; | ||
| 14 | 23 | ||
| 24 | // | ||
| 25 | // this is the target function of the interval timeout. | ||
| 26 | // check to see if the dialog is visible. if the dialog | ||
| 27 | // has gone invisible since the last check, take any delayed | ||
| 28 | // actions indicated in the action list and clear the timer. | ||
| 29 | // | ||
| 30 | |||
| 31 | function checkVisible( ) { | ||
| 32 | editcol = document.getElementById( 'editcol' ); | ||
| 33 | if ( editcol.offsetWidth <= 0 ) { | ||
| 34 | clearInterval( editColTimer ); | ||
| 35 | editColTimer = false; | ||
| 36 | hideshowColumns( ); | ||
| 37 | editColAction = [ ]; | ||
| 38 | } | ||
| 39 | } | ||
| 15 | 40 | ||
| 16 | function filterTableRows(test) { | 41 | function filterTableRows(test) { |
| 17 | if (test.length > 0) { | 42 | if (test.length > 0) { |
| @@ -24,6 +49,113 @@ | |||
| 24 | $('tr.data').show(); | 49 | $('tr.data').show(); |
| 25 | } | 50 | } |
| 26 | } | 51 | } |
| 52 | |||
| 53 | // | ||
| 54 | // determine the value of the indicated url arg. | ||
| 55 | // this is needed to determine whether a resort | ||
| 56 | // is necessary. it looks like a lot of gorp stuff | ||
| 57 | // but its actually pretty simple. | ||
| 58 | // | ||
| 59 | |||
| 60 | function getURLParameter( name ) { | ||
| 61 | return decodeURIComponent((new RegExp('[?|&]' + name + '=' + | ||
| 62 | '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, | ||
| 63 | '%20'))||null | ||
| 64 | } | ||
| 65 | |||
| 66 | // | ||
| 67 | // when the dialog box goes invisible | ||
| 68 | // this function is called to interpret | ||
| 69 | // the action list and take any delayed actions necessary. | ||
| 70 | // the editColAction list is a hash table with | ||
| 71 | // the column name as the hash key, the hash value | ||
| 72 | // is a 2 element list. the first element is a flag | ||
| 73 | // indicating whether the column is on or off. the | ||
| 74 | // 2nd element is the sort order indicator for the column. | ||
| 75 | // | ||
| 76 | |||
| 77 | function hideshowColumns( ) { | ||
| 78 | for( var k in editColAction ) { | ||
| 79 | showhideDelayedTableAction( k, editColAction[ k ][ 0 ], editColAction[ k ][ 1 ]); | ||
| 80 | } | ||
| 81 | } | ||
| 82 | |||
| 83 | // | ||
| 84 | // this function actually performs the delayed table actions | ||
| 85 | // namely any resorting if necessary | ||
| 86 | // | ||
| 87 | |||
| 88 | function showhideDelayedTableAction( clname, sh, orderkey ) { | ||
| 89 | if ( !sh ) { | ||
| 90 | p = getURLParameter( "orderby" ).split( ":" )[ 0 ]; | ||
| 91 | if ( p == orderkey ) { | ||
| 92 | reload_params({ 'orderby' : '{{default_orderby}}'}); | ||
| 93 | } | ||
| 94 | } | ||
| 95 | } | ||
| 96 | |||
| 97 | // | ||
| 98 | // this function actually performs the immediate table actions | ||
| 99 | // namely any colums that need to be hidden/shown | ||
| 100 | // | ||
| 101 | |||
| 102 | function showhideImmediateTableAction( clname, sh, orderkey ) { | ||
| 103 | if ( sh ) { | ||
| 104 | $( '.' + clname ).show( 100 ); | ||
| 105 | } | ||
| 106 | else { | ||
| 107 | $( '.' + clname ).hide( 100 ); | ||
| 108 | } | ||
| 109 | |||
| 110 | // save cookie for all checkboxes | ||
| 111 | save = ''; | ||
| 112 | $( '.chbxtoggle' ).each(function( ) { | ||
| 113 | if ( $( this ).attr( 'id' ) != undefined ) { | ||
| 114 | save += ';' + $( this ).attr( 'id' ) +':'+ $( this ).is( ':checked' ) | ||
| 115 | } | ||
| 116 | }); | ||
| 117 | $.cookie( '_displaycols_{{objectname}}', save ); | ||
| 118 | save = ''; | ||
| 119 | } | ||
| 120 | |||
| 121 | // | ||
| 122 | // this is the onclick handler for all of the check box | ||
| 123 | // items in edit columns dialog | ||
| 124 | // | ||
| 125 | |||
| 126 | function showhideTableColumn( clname, sh, orderkey ) { | ||
| 127 | editcol = document.getElementById( 'editcol' ); | ||
| 128 | if ( editcol.offsetWidth <= 0 ) { | ||
| 129 | |||
| 130 | // | ||
| 131 | // this path is taken when the page is first | ||
| 132 | // getting initialized - no dialog visible, | ||
| 133 | // perform both the immediate and delayed actions | ||
| 134 | // | ||
| 135 | |||
| 136 | showhideImmediateTableAction( clname, sh, orderkey ); | ||
| 137 | showhideDelayedTableAction( clname, sh, orderkey ); | ||
| 138 | return; | ||
| 139 | } | ||
| 140 | if ( !editColTimer ) { | ||
| 141 | |||
| 142 | // | ||
| 143 | // we don't have a timer active so set one up | ||
| 144 | // and clear the action list | ||
| 145 | // | ||
| 146 | |||
| 147 | editColTimer = setInterval( checkVisible, 250 ); | ||
| 148 | editColAction = [ ]; | ||
| 149 | } | ||
| 150 | |||
| 151 | // | ||
| 152 | // save the action to be taken when the dialog closes | ||
| 153 | // | ||
| 154 | |||
| 155 | editColAction[ clname ] = [ sh, orderkey ]; | ||
| 156 | showhideImmediateTableAction( clname, sh, orderkey ); | ||
| 157 | } | ||
| 158 | |||
| 27 | </script> | 159 | </script> |
| 28 | 160 | ||
| 29 | <!-- control header --> | 161 | <!-- control header --> |
| @@ -33,7 +165,6 @@ | |||
| 33 | <input class="input-xxlarge" id="search" name="search" type="text" placeholder="Search {%if object_search_display %}{{object_search_display}}{%else%}{{objectname}}{%endif%}" value="{{request.GET.search}}"/>{% if request.GET.search %}<a href="javascript:$('#search').val('');searchform.submit()" class="add-on btn" tabindex="-1"><i class="icon-remove"></i></a>{%endif%} | 165 | <input class="input-xxlarge" id="search" name="search" type="text" placeholder="Search {%if object_search_display %}{{object_search_display}}{%else%}{{objectname}}{%endif%}" value="{{request.GET.search}}"/>{% if request.GET.search %}<a href="javascript:$('#search').val('');searchform.submit()" class="add-on btn" tabindex="-1"><i class="icon-remove"></i></a>{%endif%} |
| 34 | <input type="hidden" name="orderby" value="{{request.GET.orderby}}"> | 166 | <input type="hidden" name="orderby" value="{{request.GET.orderby}}"> |
| 35 | <input type="hidden" name="page" value="1"> | 167 | <input type="hidden" name="page" value="1"> |
| 36 | <input type="hidden" name="count" value="{{request.GET.count}}"> | ||
| 37 | <button class="btn" type="submit" value="Search">Search</button> | 168 | <button class="btn" type="submit" value="Search">Search</button> |
| 38 | </form> | 169 | </form> |
| 39 | <div class="pull-right"> | 170 | <div class="pull-right"> |
| @@ -45,12 +176,27 @@ | |||
| 45 | <!-- | 176 | <!-- |
| 46 | {{tablecols|sortcols}} | 177 | {{tablecols|sortcols}} |
| 47 | --> | 178 | --> |
| 48 | <ul class="dropdown-menu">{% for i in tablecols|sortcols %} | 179 | <ul id='editcol' class="dropdown-menu"> |
| 180 | {% for i in tablecols|sortcols %} | ||
| 49 | <li> | 181 | <li> |
| 50 | <label {% if not i.clclass %} class="checkbox muted" {%else%} class="checkbox" {%endif%}> | 182 | <label {% if not i.clclass %} class="checkbox muted" {%else%} class="checkbox" {%endif%}> |
| 51 | <input type="checkbox" class="chbxtoggle" {% if i.clclass %}id="{{i.clclass}}" value="ct{{i.name}}" {% if not i.hidden %}checked="checked"{%endif%} onchange="showhideTableColumn($(this).attr('id'), $(this).is(':checked'))" {%else%} checked disabled {% endif %}/> {{i.name}} | 183 | <input type="checkbox" class="chbxtoggle" |
| 184 | {% if i.clclass %} | ||
| 185 | id="{{i.clclass}}" | ||
| 186 | value="ct{{i.name}}" | ||
| 187 | {% if not i.hidden %} | ||
| 188 | checked="checked" | ||
| 189 | {%endif%} | ||
| 190 | onclick="showhideTableColumn( | ||
| 191 | $(this).attr('id'), | ||
| 192 | $(this).is(':checked'), | ||
| 193 | '{{i.orderkey}}' )" | ||
| 194 | {%else%} | ||
| 195 | checked disabled | ||
| 196 | {% endif %}/> {{i.name}} | ||
| 52 | </label> | 197 | </label> |
| 53 | </li>{% endfor %} | 198 | </li> |
| 199 | {% endfor %} | ||
| 54 | </ul> | 200 | </ul> |
| 55 | </div> | 201 | </div> |
| 56 | {% endif %} | 202 | {% endif %} |
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index e3b24bace3..4622810cf9 100644 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py | |||
| @@ -262,6 +262,7 @@ def builds(request): | |||
| 262 | # TODO: common objects for all table views, adapt as needed | 262 | # TODO: common objects for all table views, adapt as needed |
| 263 | 'objects' : build_info, | 263 | 'objects' : build_info, |
| 264 | 'objectname' : "builds", | 264 | 'objectname' : "builds", |
| 265 | 'default_orderby' : 'completed_on:-', | ||
| 265 | 'fstypes' : fstypes_map, | 266 | 'fstypes' : fstypes_map, |
| 266 | 'search_term' : search_term, | 267 | 'search_term' : search_term, |
| 267 | 'total_count' : queryset_with_search.count(), | 268 | 'total_count' : queryset_with_search.count(), |
| @@ -311,6 +312,7 @@ def builds(request): | |||
| 311 | 'qhelp': "The date and time the build finished", | 312 | 'qhelp': "The date and time the build finished", |
| 312 | 'orderfield': _get_toggle_order(request, "completed_on", True), | 313 | 'orderfield': _get_toggle_order(request, "completed_on", True), |
| 313 | 'ordericon':_get_toggle_order_icon(request, "completed_on"), | 314 | 'ordericon':_get_toggle_order_icon(request, "completed_on"), |
| 315 | 'orderkey' : 'completed_on', | ||
| 314 | 'filter' : {'class' : 'completed_on', | 316 | 'filter' : {'class' : 'completed_on', |
| 315 | 'label': 'Show:', | 317 | 'label': 'Show:', |
| 316 | 'options' : [ | 318 | 'options' : [ |
| @@ -334,6 +336,7 @@ def builds(request): | |||
| 334 | 'qhelp': "How many errors were encountered during the build (if any)", | 336 | 'qhelp': "How many errors were encountered during the build (if any)", |
| 335 | 'orderfield': _get_toggle_order(request, "errors_no", True), | 337 | 'orderfield': _get_toggle_order(request, "errors_no", True), |
| 336 | 'ordericon':_get_toggle_order_icon(request, "errors_no"), | 338 | 'ordericon':_get_toggle_order_icon(request, "errors_no"), |
| 339 | 'orderkey' : 'errors_no', | ||
| 337 | 'filter' : {'class' : 'errors_no', | 340 | 'filter' : {'class' : 'errors_no', |
| 338 | 'label': 'Show:', | 341 | 'label': 'Show:', |
| 339 | 'options' : [ | 342 | 'options' : [ |
| @@ -346,6 +349,7 @@ def builds(request): | |||
| 346 | 'qhelp': "How many warnings were encountered during the build (if any)", | 349 | 'qhelp': "How many warnings were encountered during the build (if any)", |
| 347 | 'orderfield': _get_toggle_order(request, "warnings_no", True), | 350 | 'orderfield': _get_toggle_order(request, "warnings_no", True), |
| 348 | 'ordericon':_get_toggle_order_icon(request, "warnings_no"), | 351 | 'ordericon':_get_toggle_order_icon(request, "warnings_no"), |
| 352 | 'orderkey' : 'warnings_no', | ||
| 349 | 'filter' : {'class' : 'warnings_no', | 353 | 'filter' : {'class' : 'warnings_no', |
| 350 | 'label': 'Show:', | 354 | 'label': 'Show:', |
| 351 | 'options' : [ | 355 | 'options' : [ |
| @@ -358,6 +362,7 @@ def builds(request): | |||
| 358 | 'qhelp': "How long it took the build to finish", | 362 | 'qhelp': "How long it took the build to finish", |
| 359 | 'orderfield': _get_toggle_order(request, "timespent", True), | 363 | 'orderfield': _get_toggle_order(request, "timespent", True), |
| 360 | 'ordericon':_get_toggle_order_icon(request, "timespent"), | 364 | 'ordericon':_get_toggle_order_icon(request, "timespent"), |
| 365 | 'orderkey' : 'timespent', | ||
| 361 | }, | 366 | }, |
| 362 | {'name': 'Log', | 367 | {'name': 'Log', |
| 363 | 'dclass': "span4", | 368 | 'dclass': "span4", |
| @@ -365,6 +370,7 @@ def builds(request): | |||
| 365 | 'clclass': 'log', 'hidden': 1, | 370 | 'clclass': 'log', 'hidden': 1, |
| 366 | 'orderfield': _get_toggle_order(request, "cooker_log_path"), | 371 | 'orderfield': _get_toggle_order(request, "cooker_log_path"), |
| 367 | 'ordericon':_get_toggle_order_icon(request, "cooker_log_path"), | 372 | 'ordericon':_get_toggle_order_icon(request, "cooker_log_path"), |
| 373 | 'orderkey' : 'cooker_log_path', | ||
| 368 | }, | 374 | }, |
| 369 | {'name': 'Output', 'clclass': 'output', | 375 | {'name': 'Output', 'clclass': 'output', |
| 370 | 'qhelp': "The root file system types produced by the build. You can find them in your <code>/build/tmp/deploy/images/</code> directory", | 376 | 'qhelp': "The root file system types produced by the build. You can find them in your <code>/build/tmp/deploy/images/</code> directory", |
| @@ -502,7 +508,7 @@ def task( request, build_id, task_id ): | |||
| 502 | 'log_head' : log_head, | 508 | 'log_head' : log_head, |
| 503 | 'log_body' : log_body, | 509 | 'log_body' : log_body, |
| 504 | 'showing_matches' : False, | 510 | 'showing_matches' : False, |
| 505 | 'uri_list' : uri_list, | 511 | 'uri_list' : uri_list, |
| 506 | } | 512 | } |
| 507 | if request.GET.get( 'show_matches', "" ): | 513 | if request.GET.get( 'show_matches', "" ): |
| 508 | context[ 'showing_matches' ] = True | 514 | context[ 'showing_matches' ] = True |
| @@ -559,6 +565,7 @@ def target(request, build_id, target_id): | |||
| 559 | 'objects': packages, | 565 | 'objects': packages, |
| 560 | 'packages_sum' : packages_sum['installed_size__sum'], | 566 | 'packages_sum' : packages_sum['installed_size__sum'], |
| 561 | 'object_search_display': "packages included", | 567 | 'object_search_display': "packages included", |
| 568 | 'default_orderby' : 'name:+', | ||
| 562 | 'tablecols':[ | 569 | 'tablecols':[ |
| 563 | { | 570 | { |
| 564 | 'name':'Package', | 571 | 'name':'Package', |
| @@ -575,6 +582,7 @@ def target(request, build_id, target_id): | |||
| 575 | 'qhelp':'The size of the package', | 582 | 'qhelp':'The size of the package', |
| 576 | 'orderfield': _get_toggle_order(request, "size", True), | 583 | 'orderfield': _get_toggle_order(request, "size", True), |
| 577 | 'ordericon':_get_toggle_order_icon(request, "size"), | 584 | 'ordericon':_get_toggle_order_icon(request, "size"), |
| 585 | 'orderkey' : 'size', | ||
| 578 | 'clclass': 'size', | 586 | 'clclass': 'size', |
| 579 | 'dclass' : 'span2', | 587 | 'dclass' : 'span2', |
| 580 | 'hidden' : 0, | 588 | 'hidden' : 0, |
| @@ -582,6 +590,7 @@ def target(request, build_id, target_id): | |||
| 582 | { | 590 | { |
| 583 | 'name':'Size over total (%)', | 591 | 'name':'Size over total (%)', |
| 584 | 'qhelp':'Proportion of the overall included package size represented by this package', | 592 | 'qhelp':'Proportion of the overall included package size represented by this package', |
| 593 | 'orderkey' : 'size', | ||
| 585 | 'clclass': 'size_over_total', | 594 | 'clclass': 'size_over_total', |
| 586 | 'dclass' : 'span2', | 595 | 'dclass' : 'span2', |
| 587 | 'hidden' : 1, | 596 | 'hidden' : 1, |
| @@ -591,6 +600,7 @@ def target(request, build_id, target_id): | |||
| 591 | 'qhelp':'The license under which the package is distributed. Multiple license names separated by the pipe character indicates a choice between licenses. Multiple license names separated by the ampersand character indicates multiple licenses exist that cover different parts of the source', | 600 | 'qhelp':'The license under which the package is distributed. Multiple license names separated by the pipe character indicates a choice between licenses. Multiple license names separated by the ampersand character indicates multiple licenses exist that cover different parts of the source', |
| 592 | 'orderfield': _get_toggle_order(request, "license"), | 601 | 'orderfield': _get_toggle_order(request, "license"), |
| 593 | 'ordericon':_get_toggle_order_icon(request, "license"), | 602 | 'ordericon':_get_toggle_order_icon(request, "license"), |
| 603 | 'orderkey' : 'license', | ||
| 594 | 'clclass': 'license', | 604 | 'clclass': 'license', |
| 595 | 'hidden' : 1, | 605 | 'hidden' : 1, |
| 596 | }, | 606 | }, |
| @@ -611,6 +621,7 @@ def target(request, build_id, target_id): | |||
| 611 | 'qhelp':'The name of the recipe building the package', | 621 | 'qhelp':'The name of the recipe building the package', |
| 612 | 'orderfield': _get_toggle_order(request, "recipe__name"), | 622 | 'orderfield': _get_toggle_order(request, "recipe__name"), |
| 613 | 'ordericon':_get_toggle_order_icon(request, "recipe__name"), | 623 | 'ordericon':_get_toggle_order_icon(request, "recipe__name"), |
| 624 | 'orderkey' : 'recipe__name', | ||
| 614 | 'clclass': 'recipe_name', | 625 | 'clclass': 'recipe_name', |
| 615 | 'hidden' : 0, | 626 | 'hidden' : 0, |
| 616 | }, | 627 | }, |
| @@ -625,6 +636,7 @@ def target(request, build_id, target_id): | |||
| 625 | 'qhelp':'The name of the layer providing the recipe that builds the package', | 636 | 'qhelp':'The name of the layer providing the recipe that builds the package', |
| 626 | 'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__name"), | 637 | 'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__name"), |
| 627 | 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__name"), | 638 | 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__name"), |
| 639 | 'orderkey' : 'recipe__layer_version__layer__name', | ||
| 628 | 'clclass': 'layer_name', | 640 | 'clclass': 'layer_name', |
| 629 | 'hidden' : 1, | 641 | 'hidden' : 1, |
| 630 | }, | 642 | }, |
| @@ -633,6 +645,7 @@ def target(request, build_id, target_id): | |||
| 633 | 'qhelp':'The Git branch of the layer providing the recipe that builds the package', | 645 | 'qhelp':'The Git branch of the layer providing the recipe that builds the package', |
| 634 | 'orderfield': _get_toggle_order(request, "recipe__layer_version__branch"), | 646 | 'orderfield': _get_toggle_order(request, "recipe__layer_version__branch"), |
| 635 | 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__branch"), | 647 | 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__branch"), |
| 648 | 'orderkey' : 'recipe__layer_version__branch', | ||
| 636 | 'clclass': 'layer_branch', | 649 | 'clclass': 'layer_branch', |
| 637 | 'hidden' : 1, | 650 | 'hidden' : 1, |
| 638 | }, | 651 | }, |
| @@ -830,21 +843,25 @@ def tasks_common(request, build_id, variant, task_anchor): | |||
| 830 | object_search_display="time data" | 843 | object_search_display="time data" |
| 831 | filter_search_display="tasks" | 844 | filter_search_display="tasks" |
| 832 | mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'elapsed_time:-'}; | 845 | mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'elapsed_time:-'}; |
| 846 | default_orderby = 'elapsed_time:-'; | ||
| 833 | elif 'diskio' == variant: | 847 | elif 'diskio' == variant: |
| 834 | title_variant='Disk I/O' | 848 | title_variant='Disk I/O' |
| 835 | object_search_display="disk I/O data" | 849 | object_search_display="disk I/O data" |
| 836 | filter_search_display="tasks" | 850 | filter_search_display="tasks" |
| 837 | mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'disk_io:-'}; | 851 | mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'disk_io:-'}; |
| 852 | default_orderby = 'disk_io:-'; | ||
| 838 | elif 'cpuusage' == variant: | 853 | elif 'cpuusage' == variant: |
| 839 | title_variant='CPU usage' | 854 | title_variant='CPU usage' |
| 840 | object_search_display="CPU usage data" | 855 | object_search_display="CPU usage data" |
| 841 | filter_search_display="tasks" | 856 | filter_search_display="tasks" |
| 842 | mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'cpu_usage:-'}; | 857 | mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'cpu_usage:-'}; |
| 858 | default_orderby = 'cpu_usage:-'; | ||
| 843 | else : | 859 | else : |
| 844 | title_variant='Tasks' | 860 | title_variant='Tasks' |
| 845 | object_search_display="tasks" | 861 | object_search_display="tasks" |
| 846 | filter_search_display="tasks" | 862 | filter_search_display="tasks" |
| 847 | mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'order:+'}; | 863 | mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'order:+'}; |
| 864 | default_orderby = 'order:+'; | ||
| 848 | 865 | ||
| 849 | template = 'tasks.html' | 866 | template = 'tasks.html' |
| 850 | retval = _verify_parameters( request.GET, mandatory_parameters ) | 867 | retval = _verify_parameters( request.GET, mandatory_parameters ) |
| @@ -886,12 +903,14 @@ def tasks_common(request, build_id, variant, task_anchor): | |||
| 886 | 'name':'Order', | 903 | 'name':'Order', |
| 887 | 'qhelp':'The running sequence of each task in the build', | 904 | 'qhelp':'The running sequence of each task in the build', |
| 888 | 'clclass': 'order', 'hidden' : 1, | 905 | 'clclass': 'order', 'hidden' : 1, |
| 906 | 'orderkey' : 'order', | ||
| 889 | 'orderfield':_get_toggle_order(request, "order"), | 907 | 'orderfield':_get_toggle_order(request, "order"), |
| 890 | 'ordericon':_get_toggle_order_icon(request, "order")} | 908 | 'ordericon':_get_toggle_order_icon(request, "order")} |
| 891 | if 'tasks' == variant: tc_order['hidden']='0'; del tc_order['clclass'] | 909 | if 'tasks' == variant: tc_order['hidden']='0'; del tc_order['clclass'] |
| 892 | tc_recipe={ | 910 | tc_recipe={ |
| 893 | 'name':'Recipe', | 911 | 'name':'Recipe', |
| 894 | 'qhelp':'The name of the recipe to which each task applies', | 912 | 'qhelp':'The name of the recipe to which each task applies', |
| 913 | 'orderkey' : 'recipe__name', | ||
| 895 | 'orderfield': _get_toggle_order(request, "recipe__name"), | 914 | 'orderfield': _get_toggle_order(request, "recipe__name"), |
| 896 | 'ordericon':_get_toggle_order_icon(request, "recipe__name"), | 915 | 'ordericon':_get_toggle_order_icon(request, "recipe__name"), |
| 897 | } | 916 | } |
| @@ -905,6 +924,7 @@ def tasks_common(request, build_id, variant, task_anchor): | |||
| 905 | 'qhelp':'The name of the task', | 924 | 'qhelp':'The name of the task', |
| 906 | 'orderfield': _get_toggle_order(request, "task_name"), | 925 | 'orderfield': _get_toggle_order(request, "task_name"), |
| 907 | 'ordericon':_get_toggle_order_icon(request, "task_name"), | 926 | 'ordericon':_get_toggle_order_icon(request, "task_name"), |
| 927 | 'orderkey' : 'task_name', | ||
| 908 | } | 928 | } |
| 909 | tc_executed={ | 929 | tc_executed={ |
| 910 | 'name':'Executed', | 930 | 'name':'Executed', |
| @@ -912,6 +932,7 @@ def tasks_common(request, build_id, variant, task_anchor): | |||
| 912 | 'clclass': 'executed', 'hidden' : 0, | 932 | 'clclass': 'executed', 'hidden' : 0, |
| 913 | 'orderfield': _get_toggle_order(request, "task_executed"), | 933 | 'orderfield': _get_toggle_order(request, "task_executed"), |
| 914 | 'ordericon':_get_toggle_order_icon(request, "task_executed"), | 934 | 'ordericon':_get_toggle_order_icon(request, "task_executed"), |
| 935 | 'orderkey' : 'task_executed', | ||
| 915 | 'filter' : { | 936 | 'filter' : { |
| 916 | 'class' : 'executed', | 937 | 'class' : 'executed', |
| 917 | 'label': 'Show:', | 938 | 'label': 'Show:', |
| @@ -928,6 +949,7 @@ def tasks_common(request, build_id, variant, task_anchor): | |||
| 928 | 'clclass': 'outcome', 'hidden' : 0, | 949 | 'clclass': 'outcome', 'hidden' : 0, |
| 929 | 'orderfield': _get_toggle_order(request, "outcome"), | 950 | 'orderfield': _get_toggle_order(request, "outcome"), |
| 930 | 'ordericon':_get_toggle_order_icon(request, "outcome"), | 951 | 'ordericon':_get_toggle_order_icon(request, "outcome"), |
| 952 | 'orderkey' : 'outcome', | ||
| 931 | 'filter' : { | 953 | 'filter' : { |
| 932 | 'class' : 'outcome', | 954 | 'class' : 'outcome', |
| 933 | 'label': 'Show:', | 955 | 'label': 'Show:', |
| @@ -947,6 +969,7 @@ def tasks_common(request, build_id, variant, task_anchor): | |||
| 947 | 'qhelp':'Path to the task log file', | 969 | 'qhelp':'Path to the task log file', |
| 948 | 'orderfield': _get_toggle_order(request, "logfile"), | 970 | 'orderfield': _get_toggle_order(request, "logfile"), |
| 949 | 'ordericon':_get_toggle_order_icon(request, "logfile"), | 971 | 'ordericon':_get_toggle_order_icon(request, "logfile"), |
| 972 | 'orderkey' : 'logfile', | ||
| 950 | 'clclass': 'task_log', 'hidden' : 1, | 973 | 'clclass': 'task_log', 'hidden' : 1, |
| 951 | } | 974 | } |
| 952 | tc_cache={ | 975 | tc_cache={ |
| @@ -955,6 +978,7 @@ def tasks_common(request, build_id, variant, task_anchor): | |||
| 955 | 'clclass': 'cache_attempt', 'hidden' : 0, | 978 | 'clclass': 'cache_attempt', 'hidden' : 0, |
| 956 | 'orderfield': _get_toggle_order(request, "sstate_result"), | 979 | 'orderfield': _get_toggle_order(request, "sstate_result"), |
| 957 | 'ordericon':_get_toggle_order_icon(request, "sstate_result"), | 980 | 'ordericon':_get_toggle_order_icon(request, "sstate_result"), |
| 981 | 'orderkey' : 'sstate_result', | ||
| 958 | 'filter' : { | 982 | 'filter' : { |
| 959 | 'class' : 'cache_attempt', | 983 | 'class' : 'cache_attempt', |
| 960 | 'label': 'Show:', | 984 | 'label': 'Show:', |
| @@ -973,6 +997,7 @@ def tasks_common(request, build_id, variant, task_anchor): | |||
| 973 | 'qhelp':'How long it took the task to finish in seconds', | 997 | 'qhelp':'How long it took the task to finish in seconds', |
| 974 | 'orderfield': _get_toggle_order(request, "elapsed_time", True), | 998 | 'orderfield': _get_toggle_order(request, "elapsed_time", True), |
| 975 | 'ordericon':_get_toggle_order_icon(request, "elapsed_time"), | 999 | 'ordericon':_get_toggle_order_icon(request, "elapsed_time"), |
| 1000 | 'orderkey' : 'elapsed_time', | ||
| 976 | 'clclass': 'time_taken', 'hidden' : 1, | 1001 | 'clclass': 'time_taken', 'hidden' : 1, |
| 977 | } | 1002 | } |
| 978 | if 'buildtime' == variant: tc_time['hidden']='0'; del tc_time['clclass']; tc_cache['hidden']='1'; | 1003 | if 'buildtime' == variant: tc_time['hidden']='0'; del tc_time['clclass']; tc_cache['hidden']='1'; |
| @@ -981,6 +1006,7 @@ def tasks_common(request, build_id, variant, task_anchor): | |||
| 981 | 'qhelp':'The percentage of task CPU utilization', | 1006 | 'qhelp':'The percentage of task CPU utilization', |
| 982 | 'orderfield': _get_toggle_order(request, "cpu_usage", True), | 1007 | 'orderfield': _get_toggle_order(request, "cpu_usage", True), |
| 983 | 'ordericon':_get_toggle_order_icon(request, "cpu_usage"), | 1008 | 'ordericon':_get_toggle_order_icon(request, "cpu_usage"), |
| 1009 | 'orderkey' : 'cpu_usage', | ||
| 984 | 'clclass': 'cpu_used', 'hidden' : 1, | 1010 | 'clclass': 'cpu_used', 'hidden' : 1, |
| 985 | } | 1011 | } |
| 986 | if 'cpuusage' == variant: tc_cpu['hidden']='0'; del tc_cpu['clclass']; tc_cache['hidden']='1'; | 1012 | if 'cpuusage' == variant: tc_cpu['hidden']='0'; del tc_cpu['clclass']; tc_cache['hidden']='1'; |
| @@ -989,6 +1015,7 @@ def tasks_common(request, build_id, variant, task_anchor): | |||
| 989 | 'qhelp':'Number of miliseconds the task spent doing disk input and output', | 1015 | 'qhelp':'Number of miliseconds the task spent doing disk input and output', |
| 990 | 'orderfield': _get_toggle_order(request, "disk_io", True), | 1016 | 'orderfield': _get_toggle_order(request, "disk_io", True), |
| 991 | 'ordericon':_get_toggle_order_icon(request, "disk_io"), | 1017 | 'ordericon':_get_toggle_order_icon(request, "disk_io"), |
| 1018 | 'orderkey' : 'disk_io', | ||
| 992 | 'clclass': 'disk_io', 'hidden' : 1, | 1019 | 'clclass': 'disk_io', 'hidden' : 1, |
| 993 | } | 1020 | } |
| 994 | if 'diskio' == variant: tc_diskio['hidden']='0'; del tc_diskio['clclass']; tc_cache['hidden']='1'; | 1021 | if 'diskio' == variant: tc_diskio['hidden']='0'; del tc_diskio['clclass']; tc_cache['hidden']='1'; |
| @@ -1000,6 +1027,7 @@ def tasks_common(request, build_id, variant, task_anchor): | |||
| 1000 | 'title': title_variant, | 1027 | 'title': title_variant, |
| 1001 | 'build': Build.objects.filter(pk=build_id)[0], | 1028 | 'build': Build.objects.filter(pk=build_id)[0], |
| 1002 | 'objects': tasks, | 1029 | 'objects': tasks, |
| 1030 | 'default_orderby' : default_orderby, | ||
| 1003 | 'search_term': search_term, | 1031 | 'search_term': search_term, |
| 1004 | 'total_count': queryset_with_search.count(), | 1032 | 'total_count': queryset_with_search.count(), |
| 1005 | 'tablecols':[ | 1033 | 'tablecols':[ |
| @@ -1050,6 +1078,7 @@ def recipes(request, build_id): | |||
| 1050 | 'objectname': 'recipes', | 1078 | 'objectname': 'recipes', |
| 1051 | 'build': Build.objects.filter(pk=build_id)[0], | 1079 | 'build': Build.objects.filter(pk=build_id)[0], |
| 1052 | 'objects': recipes, | 1080 | 'objects': recipes, |
| 1081 | 'default_orderby' : 'name:+', | ||
| 1053 | 'tablecols':[ | 1082 | 'tablecols':[ |
| 1054 | { | 1083 | { |
| 1055 | 'name':'Recipe', | 1084 | 'name':'Recipe', |
| @@ -1076,6 +1105,7 @@ def recipes(request, build_id): | |||
| 1076 | 'qhelp':'Path to the recipe .bb file', | 1105 | 'qhelp':'Path to the recipe .bb file', |
| 1077 | 'orderfield': _get_toggle_order(request, "file_path"), | 1106 | 'orderfield': _get_toggle_order(request, "file_path"), |
| 1078 | 'ordericon':_get_toggle_order_icon(request, "file_path"), | 1107 | 'ordericon':_get_toggle_order_icon(request, "file_path"), |
| 1108 | 'orderkey' : 'file_path', | ||
| 1079 | 'clclass': 'recipe_file', 'hidden': 0, | 1109 | 'clclass': 'recipe_file', 'hidden': 0, |
| 1080 | }, | 1110 | }, |
| 1081 | { | 1111 | { |
| @@ -1083,6 +1113,7 @@ def recipes(request, build_id): | |||
| 1083 | 'qhelp':'The section in which recipes should be categorized', | 1113 | 'qhelp':'The section in which recipes should be categorized', |
| 1084 | 'orderfield': _get_toggle_order(request, "section"), | 1114 | 'orderfield': _get_toggle_order(request, "section"), |
| 1085 | 'ordericon':_get_toggle_order_icon(request, "section"), | 1115 | 'ordericon':_get_toggle_order_icon(request, "section"), |
| 1116 | 'orderkey' : 'section', | ||
| 1086 | 'clclass': 'recipe_section', 'hidden': 0, | 1117 | 'clclass': 'recipe_section', 'hidden': 0, |
| 1087 | }, | 1118 | }, |
| 1088 | { | 1119 | { |
| @@ -1090,6 +1121,7 @@ def recipes(request, build_id): | |||
| 1090 | 'qhelp':'The list of source licenses for the recipe. Multiple license names separated by the pipe character indicates a choice between licenses. Multiple license names separated by the ampersand character indicates multiple licenses exist that cover different parts of the source', | 1121 | 'qhelp':'The list of source licenses for the recipe. Multiple license names separated by the pipe character indicates a choice between licenses. Multiple license names separated by the ampersand character indicates multiple licenses exist that cover different parts of the source', |
| 1091 | 'orderfield': _get_toggle_order(request, "license"), | 1122 | 'orderfield': _get_toggle_order(request, "license"), |
| 1092 | 'ordericon':_get_toggle_order_icon(request, "license"), | 1123 | 'ordericon':_get_toggle_order_icon(request, "license"), |
| 1124 | 'orderkey' : 'license', | ||
| 1093 | 'clclass': 'recipe_license', 'hidden': 0, | 1125 | 'clclass': 'recipe_license', 'hidden': 0, |
| 1094 | }, | 1126 | }, |
| 1095 | { | 1127 | { |
| @@ -1097,6 +1129,7 @@ def recipes(request, build_id): | |||
| 1097 | 'qhelp':'The name of the layer providing the recipe', | 1129 | 'qhelp':'The name of the layer providing the recipe', |
| 1098 | 'orderfield': _get_toggle_order(request, "layer_version__layer__name"), | 1130 | 'orderfield': _get_toggle_order(request, "layer_version__layer__name"), |
| 1099 | 'ordericon':_get_toggle_order_icon(request, "layer_version__layer__name"), | 1131 | 'ordericon':_get_toggle_order_icon(request, "layer_version__layer__name"), |
| 1132 | 'orderkey' : 'layer_version__layer__name', | ||
| 1100 | 'clclass': 'layer_version__layer__name', 'hidden': 0, | 1133 | 'clclass': 'layer_version__layer__name', 'hidden': 0, |
| 1101 | }, | 1134 | }, |
| 1102 | { | 1135 | { |
| @@ -1104,6 +1137,7 @@ def recipes(request, build_id): | |||
| 1104 | 'qhelp':'The Git branch of the layer providing the recipe', | 1137 | 'qhelp':'The Git branch of the layer providing the recipe', |
| 1105 | 'orderfield': _get_toggle_order(request, "layer_version__branch"), | 1138 | 'orderfield': _get_toggle_order(request, "layer_version__branch"), |
| 1106 | 'ordericon':_get_toggle_order_icon(request, "layer_version__branch"), | 1139 | 'ordericon':_get_toggle_order_icon(request, "layer_version__branch"), |
| 1140 | 'orderkey' : 'layer_version__branch', | ||
| 1107 | 'clclass': 'layer_version__branch', 'hidden': 1, | 1141 | 'clclass': 'layer_version__branch', 'hidden': 1, |
| 1108 | }, | 1142 | }, |
| 1109 | { | 1143 | { |
| @@ -1116,6 +1150,7 @@ def recipes(request, build_id): | |||
| 1116 | 'qhelp':'Path to the layer prodiving the recipe', | 1150 | 'qhelp':'Path to the layer prodiving the recipe', |
| 1117 | 'orderfield': _get_toggle_order(request, "layer_version__layer__local_path"), | 1151 | 'orderfield': _get_toggle_order(request, "layer_version__layer__local_path"), |
| 1118 | 'ordericon':_get_toggle_order_icon(request, "layer_version__layer__local_path"), | 1152 | 'ordericon':_get_toggle_order_icon(request, "layer_version__layer__local_path"), |
| 1153 | 'orderkey' : 'layer_version__layer__local_path', | ||
| 1119 | 'clclass': 'layer_version__layer__local_path', 'hidden': 1, | 1154 | 'clclass': 'layer_version__layer__local_path', 'hidden': 1, |
| 1120 | }, | 1155 | }, |
| 1121 | ] | 1156 | ] |
| @@ -1198,6 +1233,7 @@ def configvars(request, build_id): | |||
| 1198 | 'build': Build.objects.filter(pk=build_id)[0], | 1233 | 'build': Build.objects.filter(pk=build_id)[0], |
| 1199 | 'objects' : variables, | 1234 | 'objects' : variables, |
| 1200 | 'total_count':queryset_with_search.count(), | 1235 | 'total_count':queryset_with_search.count(), |
| 1236 | 'default_orderby' : 'variable_name:+', | ||
| 1201 | 'search_term':search_term, | 1237 | 'search_term':search_term, |
| 1202 | # Specifies the display of columns for the table, appearance in "Edit columns" box, toggling default show/hide, and specifying filters for columns | 1238 | # Specifies the display of columns for the table, appearance in "Edit columns" box, toggling default show/hide, and specifying filters for columns |
| 1203 | 'tablecols' : [ | 1239 | 'tablecols' : [ |
| @@ -1213,6 +1249,7 @@ def configvars(request, build_id): | |||
| 1213 | {'name': 'Set in file', | 1249 | {'name': 'Set in file', |
| 1214 | 'qhelp': "The last configuration file that touched the variable value", | 1250 | 'qhelp': "The last configuration file that touched the variable value", |
| 1215 | 'clclass': 'file', 'hidden' : 0, | 1251 | 'clclass': 'file', 'hidden' : 0, |
| 1252 | 'orderkey' : 'vhistory__file_name', | ||
| 1216 | 'filter' : { | 1253 | 'filter' : { |
| 1217 | 'class' : 'vhistory__file_name', | 1254 | 'class' : 'vhistory__file_name', |
| 1218 | 'label': 'Show:', | 1255 | 'label': 'Show:', |
| @@ -1259,6 +1296,7 @@ def bpackage(request, build_id): | |||
| 1259 | 'objectname': 'packages built', | 1296 | 'objectname': 'packages built', |
| 1260 | 'build': Build.objects.filter(pk=build_id)[0], | 1297 | 'build': Build.objects.filter(pk=build_id)[0], |
| 1261 | 'objects' : packages, | 1298 | 'objects' : packages, |
| 1299 | 'default_orderby' : 'name:+', | ||
| 1262 | 'tablecols':[ | 1300 | 'tablecols':[ |
| 1263 | { | 1301 | { |
| 1264 | 'name':'Package', | 1302 | 'name':'Package', |
| @@ -1275,6 +1313,7 @@ def bpackage(request, build_id): | |||
| 1275 | 'qhelp':'The size of the package', | 1313 | 'qhelp':'The size of the package', |
| 1276 | 'orderfield': _get_toggle_order(request, "size", True), | 1314 | 'orderfield': _get_toggle_order(request, "size", True), |
| 1277 | 'ordericon':_get_toggle_order_icon(request, "size"), | 1315 | 'ordericon':_get_toggle_order_icon(request, "size"), |
| 1316 | 'orderkey' : 'size', | ||
| 1278 | 'clclass': 'size', 'hidden': 0, | 1317 | 'clclass': 'size', 'hidden': 0, |
| 1279 | 'dclass' : 'span2', | 1318 | 'dclass' : 'span2', |
| 1280 | }, | 1319 | }, |
| @@ -1283,6 +1322,7 @@ def bpackage(request, build_id): | |||
| 1283 | 'qhelp':'The license under which the package is distributed. Multiple license names separated by the pipe character indicates a choice between licenses. Multiple license names separated by the ampersand character indicates multiple licenses exist that cover different parts of the source', | 1322 | 'qhelp':'The license under which the package is distributed. Multiple license names separated by the pipe character indicates a choice between licenses. Multiple license names separated by the ampersand character indicates multiple licenses exist that cover different parts of the source', |
| 1284 | 'orderfield': _get_toggle_order(request, "license"), | 1323 | 'orderfield': _get_toggle_order(request, "license"), |
| 1285 | 'ordericon':_get_toggle_order_icon(request, "license"), | 1324 | 'ordericon':_get_toggle_order_icon(request, "license"), |
| 1325 | 'orderkey' : 'license', | ||
| 1286 | 'clclass': 'license', 'hidden': 1, | 1326 | 'clclass': 'license', 'hidden': 1, |
| 1287 | }, | 1327 | }, |
| 1288 | { | 1328 | { |
| @@ -1290,6 +1330,7 @@ def bpackage(request, build_id): | |||
| 1290 | 'qhelp':'The name of the recipe building the package', | 1330 | 'qhelp':'The name of the recipe building the package', |
| 1291 | 'orderfield': _get_toggle_order(request, "recipe__name"), | 1331 | 'orderfield': _get_toggle_order(request, "recipe__name"), |
| 1292 | 'ordericon':_get_toggle_order_icon(request, "recipe__name"), | 1332 | 'ordericon':_get_toggle_order_icon(request, "recipe__name"), |
| 1333 | 'orderkey' : 'recipe__name', | ||
| 1293 | 'clclass': 'recipe__name', 'hidden': 0, | 1334 | 'clclass': 'recipe__name', 'hidden': 0, |
| 1294 | }, | 1335 | }, |
| 1295 | { | 1336 | { |
| @@ -1302,6 +1343,7 @@ def bpackage(request, build_id): | |||
| 1302 | 'qhelp':'The name of the layer providing the recipe that builds the package', | 1343 | 'qhelp':'The name of the layer providing the recipe that builds the package', |
| 1303 | 'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__name"), | 1344 | 'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__name"), |
| 1304 | 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__name"), | 1345 | 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__name"), |
| 1346 | 'orderkey' : 'recipe__layer_version__layer__name', | ||
| 1305 | 'clclass': 'recipe__layer_version__layer__name', 'hidden': 1, | 1347 | 'clclass': 'recipe__layer_version__layer__name', 'hidden': 1, |
| 1306 | }, | 1348 | }, |
| 1307 | { | 1349 | { |
| @@ -1309,6 +1351,7 @@ def bpackage(request, build_id): | |||
| 1309 | 'qhelp':'The Git branch of the layer providing the recipe that builds the package', | 1351 | 'qhelp':'The Git branch of the layer providing the recipe that builds the package', |
| 1310 | 'orderfield': _get_toggle_order(request, "recipe__layer_version__branch"), | 1352 | 'orderfield': _get_toggle_order(request, "recipe__layer_version__branch"), |
| 1311 | 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__branch"), | 1353 | 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__branch"), |
| 1354 | 'orderkey' : 'recipe__layer_version__layer__branch', | ||
| 1312 | 'clclass': 'recipe__layer_version__branch', 'hidden': 1, | 1355 | 'clclass': 'recipe__layer_version__branch', 'hidden': 1, |
| 1313 | }, | 1356 | }, |
| 1314 | { | 1357 | { |
| @@ -1321,6 +1364,7 @@ def bpackage(request, build_id): | |||
| 1321 | 'qhelp':'Path to the layer providing the recipe that builds the package', | 1364 | 'qhelp':'Path to the layer providing the recipe that builds the package', |
| 1322 | 'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__local_path"), | 1365 | 'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__local_path"), |
| 1323 | 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__local_path"), | 1366 | 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__local_path"), |
| 1367 | 'orderkey' : 'recipe__layer_version__layer__local_path', | ||
| 1324 | 'clclass': 'recipe__layer_version__layer__local_path', 'hidden': 1, | 1368 | 'clclass': 'recipe__layer_version__layer__local_path', 'hidden': 1, |
| 1325 | }, | 1369 | }, |
| 1326 | ] | 1370 | ] |
