OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 var g_browserBridge; | 5 var g_browserBridge; |
6 var g_mainView; | 6 var g_mainView; |
7 | 7 |
8 // TODO(eroman): Don't repeat the work of grouping, sorting, merging on every | 8 // TODO(eroman): Don't repeat the work of grouping, sorting, merging on every |
9 // redraw. Rather do it only once when one of its dependencies | 9 // redraw. Rather do it only once when one of its dependencies |
10 // change and cache the result. | 10 // change and cache the result. |
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 function setSelectedOptionByValue(select, value) { | 696 function setSelectedOptionByValue(select, value) { |
697 for (var i = 0; i < select.options.length; ++i) { | 697 for (var i = 0; i < select.options.length; ++i) { |
698 if (select.options[i].value == value) { | 698 if (select.options[i].value == value) { |
699 select.options[i].selected = true; | 699 select.options[i].selected = true; |
700 return true; | 700 return true; |
701 } | 701 } |
702 } | 702 } |
703 return false; | 703 return false; |
704 } | 704 } |
705 | 705 |
| 706 /** |
| 707 * Return the last component in a path which is separated by either forward |
| 708 * slashes or backslashes. |
| 709 */ |
| 710 function getFilenameFromPath(path) { |
| 711 var lastSlash = Math.max(path.lastIndexOf('/'), |
| 712 path.lastIndexOf('\\')); |
| 713 if (lastSlash == -1) |
| 714 return path; |
| 715 |
| 716 return path.substr(lastSlash + 1); |
| 717 } |
| 718 |
706 // -------------------------------------------------------------------------- | 719 // -------------------------------------------------------------------------- |
707 // Functions that augment, bucket, and compute aggregates for the input data. | 720 // Functions that augment, bucket, and compute aggregates for the input data. |
708 // -------------------------------------------------------------------------- | 721 // -------------------------------------------------------------------------- |
709 | 722 |
710 /** | 723 /** |
711 * Selects all the data in |rows| which are matched by |filterFunc|, and | 724 * Selects all the data in |rows| which are matched by |filterFunc|, and |
712 * buckets the results using |entryToGroupKeyFunc|. For each bucket aggregates | 725 * buckets the results using |entryToGroupKeyFunc|. For each bucket aggregates |
713 * are computed, and the results are sorted. | 726 * are computed, and the results are sorted. |
714 * | 727 * |
715 * Returns a dictionary whose keys are the group name, and the value is an | 728 * Returns a dictionary whose keys are the group name, and the value is an |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 */ | 1006 */ |
994 function drawValueToCell(td, key, value) { | 1007 function drawValueToCell(td, key, value) { |
995 // Get a text representation of the value. | 1008 // Get a text representation of the value. |
996 var text = getTextValueForProperty(key, value); | 1009 var text = getTextValueForProperty(key, value); |
997 | 1010 |
998 // Apply the desired cell alignment. | 1011 // Apply the desired cell alignment. |
999 var cellAlignment = KEY_PROPERTIES[key].cellAlignment; | 1012 var cellAlignment = KEY_PROPERTIES[key].cellAlignment; |
1000 if (cellAlignment) | 1013 if (cellAlignment) |
1001 td.align = cellAlignment; | 1014 td.align = cellAlignment; |
1002 | 1015 |
1003 var parent = td; | |
1004 | |
1005 if (key == KEY_SOURCE_LOCATION) { | 1016 if (key == KEY_SOURCE_LOCATION) { |
1006 // Linkify the source column so it jumps to the source code. This doesn't | 1017 // Linkify the source column so it jumps to the source code. This doesn't |
1007 // take into account the particular code this build was compiled from, or | 1018 // take into account the particular code this build was compiled from, or |
1008 // local edits to source. It should however work correctly for top of tree | 1019 // local edits to source. It should however work correctly for top of tree |
1009 // builds. | 1020 // builds. |
1010 var m = /^(.*) \[(\d+)\]$/.exec(text); | 1021 var m = /^(.*) \[(\d+)\]$/.exec(text); |
1011 if (m) { | 1022 if (m) { |
1012 var link = addNode(td, 'a'); | 1023 var filepath = m[1]; |
| 1024 var filename = getFilenameFromPath(filepath); |
| 1025 var linenumber = m[2]; |
| 1026 |
| 1027 var link = addNode(td, 'a', filename + ' [' + linenumber + ']'); |
1013 // http://chromesrc.appspot.com is a server I wrote specifically for | 1028 // http://chromesrc.appspot.com is a server I wrote specifically for |
1014 // this task. It redirects to the appropriate source file; the file | 1029 // this task. It redirects to the appropriate source file; the file |
1015 // paths given by the compiler can be pretty crazy and different | 1030 // paths given by the compiler can be pretty crazy and different |
1016 // between platforms. | 1031 // between platforms. |
1017 link.href = 'http://chromesrc.appspot.com/?path=' + | 1032 link.href = 'http://chromesrc.appspot.com/?path=' + |
1018 encodeURIComponent(m[1]) + '&line=' + m[2]; | 1033 encodeURIComponent(filepath) + '&line=' + linenumber; |
1019 parent = link; | 1034 return; |
1020 } | 1035 } |
1021 } | 1036 } |
1022 | 1037 |
1023 // String values can get pretty long. If the string contains no spaces, then | 1038 // String values can get pretty long. If the string contains no spaces, then |
1024 // CSS fails to wrap it, and it overflows the cell causing the table to get | 1039 // CSS fails to wrap it, and it overflows the cell causing the table to get |
1025 // really big. We solve this using a hack: insert a <wbr> element after | 1040 // really big. We solve this using a hack: insert a <wbr> element after |
1026 // every single character. This will allow the rendering engine to wrap the | 1041 // every single character. This will allow the rendering engine to wrap the |
1027 // value, and hence avoid it overflowing! | 1042 // value, and hence avoid it overflowing! |
1028 var kMinLengthBeforeWrap = 20; | 1043 var kMinLengthBeforeWrap = 20; |
1029 | 1044 |
1030 addText(parent, text.substr(0, kMinLengthBeforeWrap)); | 1045 addText(td, text.substr(0, kMinLengthBeforeWrap)); |
1031 for (var i = kMinLengthBeforeWrap; i < text.length; ++i) { | 1046 for (var i = kMinLengthBeforeWrap; i < text.length; ++i) { |
1032 addNode(parent, 'wbr'); | 1047 addNode(td, 'wbr'); |
1033 addText(parent, text.substr(i, 1)); | 1048 addText(td, text.substr(i, 1)); |
1034 } | 1049 } |
1035 } | 1050 } |
1036 | 1051 |
1037 function drawTableBody(tbody, rows, columns) { | 1052 function drawTableBody(tbody, rows, columns) { |
1038 for (var i = 0; i < rows.length; ++i) { | 1053 for (var i = 0; i < rows.length; ++i) { |
1039 var e = rows[i]; | 1054 var e = rows[i]; |
1040 | 1055 |
1041 var tr = addNode(tbody, 'tr'); | 1056 var tr = addNode(tbody, 'tr'); |
1042 | 1057 |
1043 for (var c = 0; c < columns.length; ++c) { | 1058 for (var c = 0; c < columns.length; ++c) { |
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1523 groupKey.push(entry); | 1538 groupKey.push(entry); |
1524 } | 1539 } |
1525 | 1540 |
1526 return JSON.stringify(groupKey); | 1541 return JSON.stringify(groupKey); |
1527 }; | 1542 }; |
1528 }, | 1543 }, |
1529 }; | 1544 }; |
1530 | 1545 |
1531 return MainView; | 1546 return MainView; |
1532 })(); | 1547 })(); |
OLD | NEW |