Index: content/browser/resources/media/new/table_gen.js |
diff --git a/content/browser/resources/media/new/table_gen.js b/content/browser/resources/media/new/table_gen.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..55c87fc64d685064c41330c1d88921f50c6aac1c |
--- /dev/null |
+++ b/content/browser/resources/media/new/table_gen.js |
@@ -0,0 +1,138 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+/** |
+ * @fileoverview Helper functions for generating tables |
+ */ |
+ |
+/** |
+ * Given an array of strings (or anything that will be cast to a string) |
+ * generate an HTML <tr> element that contains <td>s that contain an element |
+ * in the array. |
+ * |
+ * Meant to be used with appendRow() |
+ */ |
+function genRow(arr) { |
+ "use strict"; |
+ |
+ var tr = document.createElement('tr'); |
+ |
+ arr.forEach(function (text) { |
+ var td = document.createElement('td'); |
+ var textNode = document.createTextNode(text); |
+ td.appendChild(textNode); |
+ tr.appendChild(td); |
+ }); |
+ return tr; |
+} |
+ |
+function genLogRow(logObj) { |
+ "use strict"; |
+ var tr = document.createElement("tr"); |
+ |
+ // Unrolled for performance. |
+ // This function gets called potentially thousands of times per second |
+ var td1 = document.createElement('td'); |
+ var td2 = document.createElement('td'); |
+ var td3 = document.createElement('td'); |
+ |
+ var text1 = document.createTextNode(goog.time.millisToString(logObj.time)); |
+ var text2 = document.createTextNode(logObj.key); |
+ var text3 = document.createTextNode(logObj.value); |
+ |
+ td1.appendChild(text1); |
+ td2.appendChild(text2); |
+ td3.appendChild(text3); |
+ |
+ tr.appendChild(td1); |
+ tr.appendChild(td2); |
+ tr.appendChild(td3); |
+ |
+ return tr; |
+} |
+ |
+/** |
+ * Creates an HTML <table> element that contains <thead> |
+ * and <tbody> elements. If arguments are applied to this function, |
+ * those arguments are inserted into the <thead> section. |
+ */ |
+function makeTable(headers) { |
+ "use strict"; |
+ |
+ var table = document.createElement('table'); |
+ |
+ if (arguments.length > 0) { |
+ var thead = document.createElement('thead'); |
+ var tr = document.createElement('tr'); |
+ thead.appendChild(tr); |
+ table.appendChild(thead); |
+ |
+ (Array.prototype.slice.call(arguments)).forEach(function (arg) { |
+ var td = document.createElement('td'); |
+ var text = document.createTextNode(arg); |
+ td.appendChild(text); |
+ tr.appendChild(td); |
+ }); |
+ } |
+ |
+ var tbody = document.createElement('tbody'); |
+ table.appendChild(tbody); |
+ return table; |
+} |
+ |
+/** |
+ * Adds a row to a table |
+ */ |
+function appendRow(table, row) { |
+ "use strict"; |
+ // last child should be the <tbody> |
+ table.lastChild.appendChild(row); |
+} |
+ |
+function removeChildren(element) { |
+ "use strict"; |
+ |
+// console.trace(); |
+// throw "error"; |
+ |
+ while (element.hasChildNodes()) { |
+ element.removeChild(element.lastChild); |
+ } |
+} |
+ |
+ |
+/* If you are treating a table like it is a map where the first <td> |
+ * is the name, and the remaining <td>s are properties of that object, then |
+ * it might be useful to update that table. |
+ */ |
+function modRow(table, key, valueMult) { |
+ "use strict"; |
+ |
+ // Since we can get multiple values as arguments, make a list of them. |
+ // leaving off the first two args. |
+ // Then reverse beause we pop them off in the opposite order. |
+ var values = goog.array.toArray(arguments).splice(2).reverse(); |
+ |
+ var tbody = table.querySelector("tbody"); |
+ var rows = tbody.querySelectorAll("tr"); |
+ |
+ rows.forEach(function (row) { |
+ // We need to copy them because we are going to pop them out to |
+ // populate the columns |
+ var modValues = goog.array.toArray(values); |
+ var firstColumn = row.querySelector("td"); |
+ if (firstColumn.textContent.trim() === key) { |
+ var remainingColumns = goog.array.toArray( |
+ row.querySelectorAll("td")).slice(1); |
+ remainingColumns.forEach(function (column) { |
+ var replacement = modValues.pop(); |
+ // If the value is either null or undefined, |
+ // don't update the text. |
+ if (replacement) { |
+ column.textContent = replacement; |
+ } |
+ }); |
+ } |
+ }); |
+} |