Updated patch attached. See comments below.

On 05/08/2012 04:23 AM, Endi Sukma Dewata wrote:
On 5/3/2012 8:26 AM, Petr Vobornik wrote:
On 05/03/2012 03:19 PM, Petr Vobornik wrote:
I found that limitation of maximum pkey length in facet header is not
working well. Attaching patch #134 which actually calculates it.

I found useless line in the patch. Corrected version attached.

Try adding a very long DNS zone, then open the zone. Compare the
breadcrumbs in the DNS Resource Records page and in the Settings page,
in my case the second one is a bit longer. I think the length of the
breadcrumb should be calculated differently.

I remade how breadcrumb is limited. Now it tries to use as much space available with keeping low complexity level of calculation. It still uses an average but now the average is calculated in two phases in order to neglect a presence of short keys.


Btw, I just noticed that the facet tab label for DNS Resource Records is
changed to 'Search'. Same problem happens in Automount.


New ticket: #2744, patch on the list.


--
Petr Vobornik
From cfc37cb8cf8a823bc21207bab5722d17fbf63b55 Mon Sep 17 00:00:00 2001
From: Petr Vobornik <pvobo...@redhat.com>
Date: Thu, 3 May 2012 14:42:01 +0200
Subject: [PATCH] Improved calculation of max pkey length in facet header

Very long pkeys in facet header were limited to 60 characters. This magic number was good enough but with new action lists it isn't.

This patch is adding calculation of maximum characters for pkey in facet header. It fixes regression introduced by Action Lists and also it uses effectively available space.

Also this patch is changing limiting of breadcrumbs element to use as much space as possible. It works in three steps. First a threshold is set which is equal to length average. Then a total length of keys with length less than threshold is calculated. From this we can get remaining space for long keys and calculate new threshold. At last keys are limited to new threshold.

https://fedorahosted.org/freeipa/ticket/2247

f
---
 install/ui/facet.js |   64 +++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 55 insertions(+), 9 deletions(-)

diff --git a/install/ui/facet.js b/install/ui/facet.js
index 64d4f5d2adaafbce08d571060cb0fd723b10e558..31a9df73c289cb591434254d37d4a5f424469d74 100644
--- a/install/ui/facet.js
+++ b/install/ui/facet.js
@@ -369,17 +369,21 @@ IPA.facet_header = function(spec) {
 
         if (!value) return;
 
-        var limited_value = IPA.limit_text(value, 60);
+        var key, i;
+        var pkey_max = that.get_max_pkey_length();
+        var limited_value = IPA.limit_text(value, pkey_max);
 
         if (!that.facet.disable_breadcrumb) {
             var breadcrumb = [];
+            var keys = [];
 
             var entity = that.facet.entity.get_containing_entity();
 
             while (entity) {
+                key = IPA.nav.get_state(entity.name+'-pkey');
                 breadcrumb.unshift($('<a/>', {
                     'class': 'breadcrumb-element',
-                    text: IPA.nav.get_state(entity.name+'-pkey'),
+                    text: key,
                     title: entity.metadata.label_singular,
                     click: function(entity) {
                         return function() {
@@ -390,17 +394,34 @@ IPA.facet_header = function(spec) {
                 }));
 
                 entity = entity.get_containing_entity();
+                keys.unshift(key);
             }
 
+            //calculation of breadcrumb keys length
+            keys.push(value);
+            var max_bc_l = 140; //max chars which can fit on one line
+            var max_key_l = (max_bc_l / keys.length) - 4; //4 chars as divider
+            var bc_l = 0;
+            var to_limit = keys.length;
+
+            //count how many won't be limited and how much space they take
+            for (i=0; i<keys.length; i++) {
+                var key_l = keys[i].length;
+                if (key_l <= max_key_l) {
+                    to_limit--;
+                    bc_l += key_l + 4;
+                }
+            }
+
+            max_key_l = ((max_bc_l - bc_l) / to_limit) - 4;
+
+
             that.path.empty();
-            var key_max_lenght = 60 / breadcrumb.length;
 
-            for (var i=0; i<breadcrumb.length; i++) {
+            for (i=0; i<breadcrumb.length; i++) {
                 var item = breadcrumb[i];
-
-                var entity_key = item.text();
-                var limited_entity_key = IPA.limit_text(entity_key, key_max_lenght);
-                item.text(limited_entity_key);
+                key = IPA.limit_text(keys[i], max_key_l);
+                item.text(key);
 
                 that.path.append(' &raquo; ');
                 that.path.append(item);
@@ -408,10 +429,12 @@ IPA.facet_header = function(spec) {
 
             that.path.append(' &raquo; ');
 
+            key = IPA.limit_text(keys[i], max_key_l);
+
             $('<span>', {
                 'class': 'breadcrumb-element',
                 title: value,
-                text: limited_value
+                text: key
             }).appendTo(that.path);
         }
 
@@ -580,6 +603,29 @@ IPA.facet_header = function(spec) {
         that.adjust_elements();
     };
 
+    that.get_max_pkey_length = function() {
+
+        var label_w, max_pkey_w, max_pkey_l, al, al_w, icon_w, char_w, container_w;
+
+        container_w = that.container.width();
+        icon_w = that.title_widget.icon.width();
+        label_w = that.title_widget.title.width();
+        char_w = label_w / that.title_widget.title.text().length;
+        max_pkey_w = container_w - icon_w - label_w;
+        max_pkey_w -= 10; //some space correction to be safe
+
+        if (that.action_list) {
+            al = that.action_list.container;
+            al_w = al.width();
+
+            max_pkey_w -=  al_w;
+        }
+
+        max_pkey_l = Math.ceil(max_pkey_w / char_w);
+
+        return max_pkey_l;
+    };
+
     that.adjust_elements = function() {
 
         if (that.action_list) {
-- 
1.7.7.6

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to