Better displaying of long names in tables and facet headers

Tables columns have computed width. If value in one column is very long it widens the column and shortens others. This change causes that body columns are not aligned with header columns which makes the table less readable.

Applying 'word-break: break-all' style breaks the word to multiple lines and solves the problem.

Simililar problem is in details facet when displaying text values. Very long values widens the table and a horizontal slider is displayed, which is bad. Applying same solution.

In facet headers and breadcrumb navigation breaking the pkey looks bad - there should be only on line of pkey. To solve this, the pkey is limited to 63 characters (empirically measured). Long pkeys are cut. Uncut pkey is set as a title to avoid losing information.

Whole breadcrump could be about 140 chars (with current styles). 10 chars is reserved for entity link, 60 for pkey the rest (about 60) for parent pkeys. The assumtion is that the parent pkeys wouldn't be so long so they won't be cut anyway.

Column width calculation in tables was iproved. Now it counts with cell spacing, padding, border. It uses these assumtions:
cell-spacing: 2px
cell-padding: 6px th:right, left; td: left
cell-border: th:1px; td:0px

It would be better to get these measures dynamically. Right now it is good enough - better than previous calculation.

Result: data cells are aligned with their header. This alignment fails if vertical scrollbar is displayed (existing problem).

Also added padding to headers in association adder dialog.

https://fedorahosted.org/freeipa/ticket/1890
This commit is contained in:
Petr Vobornik 2011-12-08 10:25:34 +01:00
parent 2403545163
commit a1c9e3618c
3 changed files with 63 additions and 20 deletions

View File

@ -193,12 +193,28 @@ IPA.facet_header = function(spec) {
}
};
that.limit_text = function(value, max_length) {
if (!value) return '';
var limited_text = value;
if (value.length && value.length > max_length + 3) {
limited_text = value.substring(0, max_length)+'...';
}
return limited_text;
};
that.set_pkey = function(value) {
if (!value) return;
var limited_value = that.limit_text(value, 60);
if (!that.facet.disable_breadcrumb) {
var breadcrumb = [];
var entity = that.facet.entity.get_containing_entity();
while (entity) {
@ -218,17 +234,25 @@ IPA.facet_header = function(spec) {
}
that.path.empty();
var key_max_lenght = 60/breadcrumb.length;
for (var i=0; i<breadcrumb.length; i++) {
var item = breadcrumb[i];
var entity_key = item.text();
var limited_entity_key = that.limit_text(entity_key, key_max_lenght);
item.text(limited_entity_key);
for (var i=0; i<breadcrumb.length; i++){
that.path.append(' &raquo; ');
that.path.append(breadcrumb[i]);
that.path.append(item);
}
that.path.append(' &raquo; ');
$('<span>', {
'class': 'breadcrumb-element',
text: value
title: value,
text: limited_value
}).appendTo(that.path);
}
@ -239,7 +263,8 @@ IPA.facet_header = function(spec) {
$('<span/>', {
'class': 'facet-pkey',
text: value
title: value,
text: limited_value
}).appendTo(h3);
};

View File

@ -680,7 +680,7 @@ span.main-nav-off > a:visited {
}
.search-table thead tr th {
padding: 0 0.5em;
padding: 0 6px;
background-color:#f6f6f6;
color:#333333;
text-align: left;
@ -689,11 +689,17 @@ span.main-nav-off > a:visited {
}
.search-table thead tr th .action-button {
margin: 0 0 0 0.5em;
margin: 0 0 0 6px;
}
.search-table tbody td {
padding-left: 0.5em;
padding: 0 0 0 7px;
}
.search-table thead th div,
.search-table tbody td div
{
word-wrap: break-word;
}
.search-table tfoot td {
@ -820,9 +826,11 @@ hr {
.section-cell-label {
vertical-align: top;
width: 120px;
max-width: 120px;
}
.section-cell-field {
max-width: 650px;
}
.details-section {
@ -841,10 +849,12 @@ hr {
text-align: right;
vertical-align: top;
width: 120px;
word-wrap: break-word;
}
.details-section .section-cell-field {
font-weight: bold;
word-wrap: break-word;
}
.undo {
@ -1111,11 +1121,12 @@ table.scrollable tbody {
right: 0;
height: 1.5em;
line-height: 1.5em;
padding: 0.2em 1em;
}
.adder-dialog-content {
position: absolute;
top: 1.5em;
top: 1.9em;
left: 0;
right: 0;
bottom: 0;
@ -1177,7 +1188,7 @@ table.scrollable tbody {
}
.adder-dialog-external .adder-dialog-content {
top: 1.9em;
top: 2.1em;
}
.adder-dialog-external input {

View File

@ -1064,7 +1064,7 @@ IPA.table_widget = function (spec) {
if (that.selectable) {
th = $('<th/>', {
'style': 'width: 22px;'
'style': 'width: '+IPA.checkbox_column_width+'px;'
}).appendTo(tr);
if (that.multivalued) {
@ -1101,29 +1101,32 @@ IPA.table_widget = function (spec) {
/* don't use the checkbox column as part of the overall
calculation for column widths. It is so small
that it throws off the average. */
width = (that.table.width() -
(that.selectable ?
IPA.checkbox_column_width : 0)) /
width = (that.table.width() - 4 -
((that.selectable ?
IPA.checkbox_column_width : 0) + 14)) /
columns.length;
width -= 16; //cell padding, border, spacing
}
width += 'px';
th.css('width', width);
th.css('max-width', width);
column.width = width;
} else {
if (column.width) {
th.css('width', column.width);
th.css('max-width', column.width);
}
}
var label = column.label;
$('<span/>', {
$('<div/>', {
'style': 'float: left;',
'html': label
}).appendTo(th);
if (i == columns.length-1) {
that.buttons = $('<span/>', {
that.buttons = $('<div/>', {
'name': 'buttons',
'style': 'float: right;'
}).appendTo(th);
@ -1145,7 +1148,7 @@ IPA.table_widget = function (spec) {
if (that.selectable) {
td = $('<td/>', {
'style': 'width: '+ IPA.checkbox_column_width +'px;'
'style': 'width: '+ (IPA.checkbox_column_width + 7) +'px;'
}).appendTo(that.row);
if (that.multivalued) {
@ -1168,10 +1171,14 @@ IPA.table_widget = function (spec) {
td = $('<td/>').appendTo(that.row);
if (column.width) {
td.css('width', column.width);
width = parseInt(
column.width.substring(0, column.width.length-2),10);
width += 7; //data cells lack right padding
td.css('width', width);
td.css('max-width', width);
}
$('<span/>', {
$('<div/>', {
'name': column.name
}).appendTo(td);
}
@ -1375,9 +1382,9 @@ IPA.table_widget = function (spec) {
$('input[name="'+that.name+'"]', tr).val(value);
}
var span = $('span[name="'+column.name+'"]', tr);
var div = $('div[name="'+column.name+'"]', tr);
column.setup(span, record);
column.setup(div, record);
}
};