Modify

Opened 5 years ago

Closed 4 years ago

Last modified 4 years ago

#7025 closed enhancement (fixed)

Rewrite ticket properties table on-the-fly to remove whitespace left from stream filtering

Reported by: josh@… Owned by: bobbysmith007
Priority: normal Component: TimingAndEstimationPlugin
Severity: normal Keywords:
Cc: Trac Release: 0.11

Description

Currently, when you remove fields using stream-filters and permissions, the empty table-cell gets left behind, leaving a lot of ugly white-space.

You could use jQuery (or possibly more stream-filters?) to rewrite the table on the fly, in order to remove the extra white-space.

The current way I'm doing this is:

blackmagic.py

def remove_field(stream , field):
    """ Removes a field from the form area"""
    stream = stream | Transformer('//label[@for="field-%s"]' % field).replace(tag.span(class_='empty'))
    stream = stream | Transformer('//*[@id="field-%s"]' % field).replace(tag.span(class_='empty'))
    return remove_changelog(remove_header(stream , field), field)

jquery

/*  
*   Function attempts to rewrite a table to remove fields that have
*   been removed during stream filtering.
*   Only works for <table>, <thead>, <tbody> and <tfoot> tags.
*   Code by Josh Godsiff, for www.oxideinteractive.com.au
*   Email: josh@oxideinteractive.com.au
*/
$.prototype.cleanupTable = function() {
    if($(this).is('table')) {
        var body = $(this).children('thead, tbody, tfoot');
    } else if($(this).is('thead, tbody, tfoot')) {
        var body = $(this);
    } else {
        return 0;
    }
    
    var full = $(body).children('tr').filter(function() {
        return $(this).children('td.fullrow').length > 0;
    });
    $(full).detach();
    
    var data = $(body).find('tr').children().filter(function() {
        return ($(this).find('span.empty').length == 0 && $(this).is(':not(:empty)'));
    });
    
    $(body).children('tr').detach();
    $(body).append($(full));

    $(data).each(function(ind, val) {
        if(ind % 4 == 0) {
            $(body).append('<tr class="current"></tr>');
        }
        
        var col = (ind % 4 <= 1 ? 1 : 2);
        if($(this).children('span.empty').length <= 0) {
            $(this).attr('class', 'col' + col);
            $(body).find('tr.current').append($(this));
        }

        if(ind % 4 == 3) {
            $(body).find('tr.current').removeClass('current');
        }
    });
}

$(document).ready(function() {
    $('#properties table').cleanupTable();
    $('table.properties').cleanupTable();
});

Attachments (0)

Change History (3)

comment:1 Changed 5 years ago by bobbysmith007

I will try to incorporate this into the plugin soon, thanks for your input

comment:2 Changed 4 years ago by bobbysmith007

  • Resolution set to fixed
  • Status changed from new to closed

(In [8262]) Added a whitespace cleaner (from Josh Godsiff - thanks!) to the ticket page to remove extra whitespace, and fixed csv exports in permissions branch. ver 1.0.5 - fix #7354 and #7025

comment:3 Changed 4 years ago by bobbysmith007

Sorry it took me a while to get to this. I added you to the authors list in setup.py. Thanks much for the patch!

Add Comment

Modify Ticket

Action
as closed The owner will remain bobbysmith007.
The resolution will be deleted. Next status will be 'reopened'.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.