luci-base: cbi.js: string formatting fixes
authorJo-Philipp Wich <jow@openwrt.org>
Mon, 15 Feb 2016 11:45:39 +0000 (12:45 +0100)
committerJo-Philipp Wich <jow@openwrt.org>
Mon, 15 Feb 2016 11:45:42 +0000 (12:45 +0100)
* Fix left and right justify/padding in formats
* Do not emit decimal numbers for small values in %m format

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
modules/luci-base/htdocs/luci-static/resources/cbi.js

index f583069..c084709 100644 (file)
@@ -1309,7 +1309,7 @@ String.prototype.format = function()
        var re = /^(([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X|q|h|j|t|m))/;
        var a = b = [], numSubstitutions = 0, numMatches = 0;
 
-       while( a = re.exec(str) )
+       while (a = re.exec(str))
        {
                var m = a[1];
                var leftpart = a[2], pPad = a[3], pJustify = a[4], pMinLength = a[5];
@@ -1332,6 +1332,8 @@ String.prototype.format = function()
                                        pad = leftpart.substr(1,1);
                                else if (pPad)
                                        pad = pPad;
+                               else
+                                       pad = ' ';
 
                                var justifyRight = true;
                                if (pJustify && pJustify === "-")
@@ -1432,17 +1434,27 @@ String.prototype.format = function()
 
                                                var i = 0;
                                                var val = (+param || 0);
-                                               var units = [ '', 'K', 'M', 'G', 'T', 'P', 'E' ];
+                                               var units = [ ' ', ' K', ' M', ' G', ' T', ' P', ' E' ];
 
                                                for (i = 0; (i < units.length) && (val > mf); i++)
                                                        val /= mf;
 
-                                               subst = val.toFixed(pr) + ' ' + units[i];
+                                               subst = (i ? val.toFixed(pr) : val) + units[i];
+                                               pMinLength = null;
                                                break;
                                }
                        }
                }
 
+               if (pMinLength) {
+                       subst = subst.toString();
+                       for (var i = subst.length; i < pMinLength; i++)
+                               if (pJustify == '-')
+                                       subst = subst + ' ';
+                               else
+                                       subst = pad + subst;
+               }
+
                out += leftpart + subst;
                str = str.substr(m.length);
        }