mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-03 18:47:53 +00:00
Bug 1058249 - Allow TableWidget to append DOMNodes as Cell values. r=bgrins, f=Optimizer
This commit is contained in:
parent
68f9edf635
commit
cfc6588a61
@ -108,11 +108,15 @@ function populateTable() {
|
|||||||
col3: "value27",
|
col3: "value27",
|
||||||
col4: "value34"
|
col4: "value34"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let span = doc.createElement("span");
|
||||||
|
span.textContent = "domnode";
|
||||||
|
|
||||||
table.push({
|
table.push({
|
||||||
col1: "id9",
|
col1: "id9",
|
||||||
col2: "value11",
|
col2: "value11",
|
||||||
col3: "value23",
|
col3: "value23",
|
||||||
col4: "value38"
|
col4: span
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,7 +139,7 @@ function testTreeItemInsertedCorrectly() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests if the API exposed by TreeWidget works properly
|
* Tests if the API exposed by TableWidget works properly
|
||||||
*/
|
*/
|
||||||
function testAPI() {
|
function testAPI() {
|
||||||
info("Testing TableWidget API");
|
info("Testing TableWidget API");
|
||||||
@ -300,22 +304,48 @@ function testAPI() {
|
|||||||
// Calling it on an unsorted column should sort by it in ascending manner
|
// Calling it on an unsorted column should sort by it in ascending manner
|
||||||
table.sortBy("col2");
|
table.sortBy("col2");
|
||||||
let cell = table.tbody.children[2].firstChild.children[2];
|
let cell = table.tbody.children[2].firstChild.children[2];
|
||||||
while(cell) {
|
checkAscendingOrder(cell);
|
||||||
ok(cell.value >= cell.previousSibling.value, "Sorting is in ascending order");
|
|
||||||
cell = cell.nextSibling;
|
|
||||||
}
|
|
||||||
// Calling it again should sort by it in descending manner
|
// Calling it again should sort by it in descending manner
|
||||||
table.sortBy("col2");
|
table.sortBy("col2");
|
||||||
let cell = table.tbody.children[2].firstChild.lastChild.previousSibling;
|
let cell = table.tbody.children[2].firstChild.lastChild.previousSibling;
|
||||||
while(cell != cell.parentNode.firstChild) {
|
checkDescendingOrder(cell);
|
||||||
ok(cell.value >= cell.nextSibling.value, "Sorting is in descending order");
|
|
||||||
cell = cell.previousSibling;
|
|
||||||
}
|
|
||||||
// Calling it again should sort by it in ascending manner
|
// Calling it again should sort by it in ascending manner
|
||||||
table.sortBy("col2");
|
table.sortBy("col2");
|
||||||
let cell = table.tbody.children[2].firstChild.children[2];
|
let cell = table.tbody.children[2].firstChild.children[2];
|
||||||
|
checkAscendingOrder(cell);
|
||||||
|
|
||||||
|
table.clear();
|
||||||
|
populateTable();
|
||||||
|
|
||||||
|
// testing if sorting works should sort by ascending manner
|
||||||
|
table.sortBy("col4");
|
||||||
|
let cell = table.tbody.children[6].firstChild.children[1];
|
||||||
|
is(cell.textContent, "domnode", "DOMNode sorted correctly");
|
||||||
|
checkAscendingOrder(cell.nextSibling);
|
||||||
|
|
||||||
|
// Calling it again should sort it in descending order
|
||||||
|
table.sortBy("col4");
|
||||||
|
let cell = table.tbody.children[6].firstChild.children[9];
|
||||||
|
is(cell.textContent, "domnode", "DOMNode sorted correctly");
|
||||||
|
checkDescendingOrder(cell.previousSibling);
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkAscendingOrder(cell) {
|
||||||
while(cell) {
|
while(cell) {
|
||||||
ok(cell.value >= cell.previousSibling.value, "Sorting is in ascending order");
|
let currentCell = cell.value || cell.textContent;
|
||||||
|
let prevCell = cell.previousSibling.value || cell.previousSibling.textContent;
|
||||||
|
ok(currentCell >= prevCell, "Sorting is in ascending order");
|
||||||
cell = cell.nextSibling;
|
cell = cell.nextSibling;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkDescendingOrder(cell) {
|
||||||
|
while(cell != cell.parentNode.firstChild) {
|
||||||
|
let currentCell = cell.value || cell.textContent;
|
||||||
|
let nextCell = cell.nextSibling.value || cell.nextSibling.textContent;
|
||||||
|
ok(currentCell >= nextCell, "Sorting is in descending order");
|
||||||
|
cell = cell.previousSibling;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const { Cu } = require("chrome");
|
const {Cc, Ci, Cu} = require("chrome");
|
||||||
|
|
||||||
const EventEmitter = require("devtools/toolkit/event-emitter");
|
const EventEmitter = require("devtools/toolkit/event-emitter");
|
||||||
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||||
@ -754,15 +754,22 @@ Column.prototype = {
|
|||||||
* by this column.
|
* by this column.
|
||||||
*/
|
*/
|
||||||
sort: function(items) {
|
sort: function(items) {
|
||||||
|
|
||||||
// Only sort the array if we are sorting based on this column
|
// Only sort the array if we are sorting based on this column
|
||||||
if (this.sorted == 1) {
|
if (this.sorted == 1) {
|
||||||
items.sort((a, b) => {
|
items.sort((a, b) => {
|
||||||
return a[this.id] > b[this.id]
|
let val1 = (a[this.id] instanceof Ci.nsIDOMNode) ?
|
||||||
|
a[this.id].textContent : a[this.id];
|
||||||
|
let val2 = (b[this.id] instanceof Ci.nsIDOMNode) ?
|
||||||
|
b[this.id].textContent : b[this.id];
|
||||||
|
return val1 > val2;
|
||||||
});
|
});
|
||||||
} else if (this.sorted > 1) {
|
} else if (this.sorted > 1) {
|
||||||
items.sort((a, b) => {
|
items.sort((a, b) => {
|
||||||
return b[this.id] > a[this.id]
|
let val1 = (a[this.id] instanceof Ci.nsIDOMNode) ?
|
||||||
|
a[this.id].textContent : a[this.id];
|
||||||
|
let val2 = (b[this.id] instanceof Ci.nsIDOMNode) ?
|
||||||
|
b[this.id].textContent : b[this.id];
|
||||||
|
return val2 > val1;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -806,8 +813,18 @@ Column.prototype = {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (event.button == 0) {
|
if (event.button == 0) {
|
||||||
this.table.emit(EVENTS.ROW_SELECTED,
|
let target = event.originalTarget;
|
||||||
event.originalTarget.getAttribute("data-id"));
|
let dataid = null;
|
||||||
|
|
||||||
|
while (target) {
|
||||||
|
dataid = target.getAttribute("data-id");
|
||||||
|
if (dataid) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
target = target.parentNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.table.emit(EVENTS.ROW_SELECTED, dataid);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -854,7 +871,9 @@ Column.prototype = {
|
|||||||
* @param {Column} column
|
* @param {Column} column
|
||||||
* The column object to which the cell belongs.
|
* The column object to which the cell belongs.
|
||||||
* @param {object} item
|
* @param {object} item
|
||||||
* The object representing the row.
|
* The object representing the row. It contains a key value pair
|
||||||
|
* representing the column id and its associated value. The value
|
||||||
|
* can be a DOMNode that is appended or a string value.
|
||||||
* @param {Cell} nextCell
|
* @param {Cell} nextCell
|
||||||
* The cell object which is next to this cell. null if this cell is last
|
* The cell object which is next to this cell. null if this cell is last
|
||||||
* cell of the column
|
* cell of the column
|
||||||
@ -892,10 +911,23 @@ Cell.prototype = {
|
|||||||
this.label.setAttribute("value", "");
|
this.label.setAttribute("value", "");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value.length > MAX_VISIBLE_STRING_SIZE) {
|
|
||||||
|
if (!(value instanceof Ci.nsIDOMNode) &&
|
||||||
|
value.length > MAX_VISIBLE_STRING_SIZE) {
|
||||||
value = value .substr(0, MAX_VISIBLE_STRING_SIZE) + "\u2026"; // …
|
value = value .substr(0, MAX_VISIBLE_STRING_SIZE) + "\u2026"; // …
|
||||||
}
|
}
|
||||||
this.label.setAttribute("value", value + "");
|
|
||||||
|
if (value instanceof Ci.nsIDOMNode) {
|
||||||
|
this.label.removeAttribute("value");
|
||||||
|
|
||||||
|
while (this.label.firstChild) {
|
||||||
|
this.label.removeChild(this.label.firstChild);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.label.appendChild(value);
|
||||||
|
} else {
|
||||||
|
this.label.setAttribute("value", value + "");
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
get value() {
|
get value() {
|
||||||
|
Loading…
Reference in New Issue
Block a user