Bug 861487 - Sizes are displayed with non-localized decimal separator, r=rcampbell

This commit is contained in:
Victor Porof 2013-04-18 09:35:27 +03:00
parent 723d0f8e44
commit b819ec95df
6 changed files with 43 additions and 14 deletions

View File

@ -505,7 +505,8 @@ create({ constructor: RequestsMenuView, proto: MenuContainer.prototype }, {
break;
}
case "contentSize": {
let size = (aValue / 1024).toFixed(CONTENT_SIZE_DECIMALS);
let kb = aValue / 1024;
let size = L10N.numberWithDecimals(kb, CONTENT_SIZE_DECIMALS);
let node = $(".requests-menu-size", aItem.target);
let text = L10N.getFormatStr("networkMenu.sizeKB", size);
node.setAttribute("value", text);
@ -522,7 +523,7 @@ create({ constructor: RequestsMenuView, proto: MenuContainer.prototype }, {
}
case "totalTime": {
let node = $(".requests-menu-timings-total", aItem.target);
let text = L10N.getFormatStr("networkMenu.totalMS", aValue);
let text = L10N.getFormatStr("networkMenu.totalMS", aValue); // integer
node.setAttribute("value", text);
node.setAttribute("tooltiptext", text);
break;
@ -880,9 +881,10 @@ create({ constructor: NetworkDetailsView, proto: MenuContainer.prototype }, {
* The message received from the server.
*/
_addHeaders: function NVND__addHeaders(aName, aResponse) {
let kb = (aResponse.headersSize / 1024).toFixed(HEADERS_SIZE_DECIMALS);
let size = L10N.getFormatStr("networkMenu.sizeKB", kb);
let headersScope = this._headers.addScope(aName + " (" + size + ")");
let kb = aResponse.headersSize / 1024;
let size = L10N.numberWithDecimals(kb, HEADERS_SIZE_DECIMALS);
let text = L10N.getFormatStr("networkMenu.sizeKB", size);
let headersScope = this._headers.addScope(aName + " (" + text + ")");
headersScope.expanded = true;
for (let header of aResponse.headers) {

View File

@ -48,7 +48,7 @@ function test() {
statusText: "OK",
type: "json",
fullMimeType: "application/json; charset=utf-8",
size: L10N.getFormatStr("networkMenu.sizeKB", 0.03),
size: L10N.getFormatStr("networkMenu.sizeKB", 0.02),
time: true
});
verifyRequestItemTarget(RequestsMenu.getItemAtIndex(4),
@ -66,7 +66,7 @@ function test() {
statusText: "OK",
type: "png",
fullMimeType: "image/png",
size: L10N.getFormatStr("networkMenu.sizeKB", 0.76),
size: L10N.getFormatStr("networkMenu.sizeKB", 0.75),
time: true
});

View File

@ -25,7 +25,7 @@ function test() {
statusText: "OK",
type: "json",
fullMimeType: "text/json; charset=utf-8",
size: L10N.getFormatStr("networkMenu.sizeKB", 83.96),
size: L10N.getFormatStr("networkMenu.sizeKB", 83.95),
time: true
});

View File

@ -73,14 +73,15 @@ function test() {
is(responseScope.querySelector(".name").getAttribute("value"),
L10N.getStr("responseHeaders") + " (" +
L10N.getFormatStr("networkMenu.sizeKB", "0.169") + ")",
L10N.getFormatStr("networkMenu.sizeKB", L10N.numberWithDecimals(0.168, 3)) + ")",
"The response headers scope doesn't have the correct title.");
ok(requestScope.querySelector(".name").getAttribute("value").contains(
L10N.getStr("requestHeaders") + " (0."),
// Can't test for full request headers title because the size may
// vary across platforms ("User-Agent" header differs).
L10N.getStr("requestHeaders") + " (0"),
"The request headers scope doesn't have the correct title.");
// Can't test for full request headers title because the size may
// vary across platforms ("User-Agent" header differs). We're pretty
// sure it's smaller than 1 MB though, so it starts with a 0.
is(responseScope.querySelectorAll(".variables-view-variable .name")[0].getAttribute("value"),
"Connection", "The first response header name was incorrect.");

View File

@ -24,7 +24,7 @@ function test() {
statusText: "Switching Protocols",
type: "plain",
fullMimeType: "text/plain; charset=utf-8",
size: L10N.getFormatStr("networkMenu.sizeKB", "0.00"),
size: L10N.getFormatStr("networkMenu.sizeKB", 0),
time: true
});
verifyRequestItemTarget(requestItems[1] = RequestsMenu.getItemAtIndex(1),
@ -42,7 +42,7 @@ function test() {
statusText: "See Other",
type: "plain",
fullMimeType: "text/plain; charset=utf-8",
size: L10N.getFormatStr("networkMenu.sizeKB", "0.00"),
size: L10N.getFormatStr("networkMenu.sizeKB", 0),
time: true
});
verifyRequestItemTarget(requestItems[3] = RequestsMenu.getItemAtIndex(3),

View File

@ -201,6 +201,32 @@ ViewHelpers.L10N.prototype = {
*/
getFormatStr: function L10N_getFormatStr(aName, ...aArgs) {
return this.stringBundle.formatStringFromName(aName, aArgs, aArgs.length);
},
/**
* Converts a number to a locale-aware string format and keeps a certain
* number of decimals.
*
* @param number aNumber
* The number to convert.
* @param number aDecimals [optional]
* Total decimals to keep.
* @return string
* The localized number as a string.
*/
numberWithDecimals: function L10N__numberWithDecimals(aNumber, aDecimals = 0) {
// If this is an integer, don't do anything special.
if (aNumber == (aNumber | 0)) {
return aNumber;
}
// Remove {n} trailing decimals. Can't use toFixed(n) because
// toLocaleString converts the number to a string. Also can't use
// toLocaleString(, { maximumFractionDigits: n }) because it's not
// implemented on OS X (bug 368838). Gross.
let localized = aNumber.toLocaleString(); // localize
let padded = localized + new Array(aDecimals).join("0"); // pad with zeros
let match = padded.match("([^]*?\\d{" + aDecimals + "})\\d*$");
return match.pop();
}
};