OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 /** | 5 /** |
6 * WebUI to monitor File Metadata per Extension ID. | 6 * WebUI to monitor File Metadata per Extension ID. |
7 */ | 7 */ |
8 var FileMetadata = (function() { | 8 var FileMetadata = (function() { |
9 'use strict'; | 9 'use strict'; |
10 | 10 |
11 var FileMetadata = {}; | 11 var FileMetadata = {}; |
12 | 12 |
13 /** | 13 /** |
14 * Gets extension data so the select drop down can be filled. | 14 * Gets extension data so the select drop down can be filled. |
15 */ | 15 */ |
16 function getExtensions() { | 16 function getExtensions() { |
17 chrome.send('getExtensions'); | 17 chrome.send('getExtensions'); |
18 } | |
19 | |
20 /** | |
21 * Renders result of getFileMetadata as a table. | |
22 * @param {Array} list of dictionaries containing 'extensionName', | |
23 * 'extensionID', 'status'. | |
24 */ | |
25 FileMetadata.onGetExtensions = function(extensionStatuses) { | |
26 var select = $('extensions-select'); | |
27 | |
28 // Record existing drop down extension ID. If it's still there after the | |
29 // refresh then keep it as the selected value. | |
30 var oldSelectedExtension = getSelectedExtensionId(); | |
31 | |
32 select.textContent = ''; | |
33 for (var i = 0; i < extensionStatuses.length; i++) { | |
34 var originEntry = extensionStatuses[i]; | |
35 var tr = document.createElement('tr'); | |
36 var title = originEntry.extensionName + ' [' + originEntry.status + ']'; | |
37 select.options.add(new Option(title, originEntry.extensionID)); | |
38 | |
39 // If option was the previously only selected, make it selected again. | |
40 if (originEntry.extensionID != oldSelectedExtension) | |
41 continue; | |
42 select.options[select.options.length - 1].selected = true; | |
43 } | 18 } |
44 | 19 |
45 // After drop down has been loaded with options, file metadata can be loaded | 20 /** |
46 getFileMetadata(); | 21 * Renders result of getFileMetadata as a table. |
47 }; | 22 * @param {Array} list of dictionaries containing 'extensionName', |
| 23 * 'extensionID', 'status'. |
| 24 */ |
| 25 FileMetadata.onGetExtensions = function(extensionStatuses) { |
| 26 var select = $('extensions-select'); |
48 | 27 |
49 /** | 28 // Record existing drop down extension ID. If it's still there after the |
| 29 // refresh then keep it as the selected value. |
| 30 var oldSelectedExtension = getSelectedExtensionId(); |
| 31 |
| 32 select.textContent = ''; |
| 33 for (var i = 0; i < extensionStatuses.length; i++) { |
| 34 var originEntry = extensionStatuses[i]; |
| 35 var tr = document.createElement('tr'); |
| 36 var title = originEntry.extensionName + ' [' + originEntry.status + ']'; |
| 37 select.options.add(new Option(title, originEntry.extensionID)); |
| 38 |
| 39 // If option was the previously only selected, make it selected again. |
| 40 if (originEntry.extensionID != oldSelectedExtension) |
| 41 continue; |
| 42 select.options[select.options.length - 1].selected = true; |
| 43 } |
| 44 |
| 45 // After drop down has been loaded with options, file metadata can be loaded |
| 46 getFileMetadata(); |
| 47 }; |
| 48 |
| 49 /** |
50 * @return {string} extension ID that's currently selected in drop down box. | 50 * @return {string} extension ID that's currently selected in drop down box. |
51 */ | 51 */ |
52 function getSelectedExtensionId() { | 52 function getSelectedExtensionId() { |
53 var dropDown = $('extensions-select').options; | 53 var dropDown = $('extensions-select').options; |
54 if (dropDown.selectedIndex >= 0) | 54 if (dropDown.selectedIndex >= 0) |
55 return dropDown[dropDown.selectedIndex].value; | 55 return dropDown[dropDown.selectedIndex].value; |
56 | 56 |
57 return null; | 57 return null; |
58 } | |
59 | |
60 /** | |
61 * Get File Metadata depending on which extension is selected from the drop down | |
62 * if any. | |
63 */ | |
64 function getFileMetadata() { | |
65 var dropDown = $('extensions-select'); | |
66 if (dropDown.options.length === 0) { | |
67 $('file-metadata-header').textContent = ''; | |
68 $('file-metadata-entries').textContent = 'No file metadata available.'; | |
69 return; | |
70 } | 58 } |
71 | 59 |
72 var selectedExtensionId = getSelectedExtensionId(); | 60 /** |
73 chrome.send('getFileMetadata', [selectedExtensionId]); | 61 * Get File Metadata depending on which extension is selected from the drop |
74 } | 62 * down |
| 63 * if any. |
| 64 */ |
| 65 function getFileMetadata() { |
| 66 var dropDown = $('extensions-select'); |
| 67 if (dropDown.options.length === 0) { |
| 68 $('file-metadata-header').textContent = ''; |
| 69 $('file-metadata-entries').textContent = 'No file metadata available.'; |
| 70 return; |
| 71 } |
75 | 72 |
76 /** | 73 var selectedExtensionId = getSelectedExtensionId(); |
77 * Renders result of getFileMetadata as a table. | 74 chrome.send('getFileMetadata', [selectedExtensionId]); |
78 */ | |
79 FileMetadata.onGetFileMetadata = function(fileMetadataMap) { | |
80 var header = $('file-metadata-header'); | |
81 // Only draw the header if it hasn't been drawn yet | |
82 if (header.children.length === 0) { | |
83 var tr = document.createElement('tr'); | |
84 tr.appendChild(createElementFromText('td', 'Type')); | |
85 tr.appendChild(createElementFromText('td', 'Status')); | |
86 tr.appendChild(createElementFromText('td', 'Path', {width: '250px'})); | |
87 tr.appendChild(createElementFromText('td', 'Details')); | |
88 header.appendChild(tr); | |
89 } | 75 } |
90 | 76 |
91 // Add row entries. | 77 /** |
92 var itemContainer = $('file-metadata-entries'); | 78 * Renders result of getFileMetadata as a table. |
93 itemContainer.textContent = ''; | 79 */ |
94 for (var i = 0; i < fileMetadataMap.length; i++) { | 80 FileMetadata.onGetFileMetadata = function(fileMetadataMap) { |
95 var metadatEntry = fileMetadataMap[i]; | 81 var header = $('file-metadata-header'); |
96 var tr = document.createElement('tr'); | 82 // Only draw the header if it hasn't been drawn yet |
97 tr.appendChild(createFileIconCell(metadatEntry.type)); | 83 if (header.children.length === 0) { |
98 tr.appendChild(createElementFromText('td', metadatEntry.status)); | 84 var tr = document.createElement('tr'); |
99 tr.appendChild(createElementFromText('td', metadatEntry.path)); | 85 tr.appendChild(createElementFromText('td', 'Type')); |
100 tr.appendChild(createElementFromDictionary('td', metadatEntry.details)); | 86 tr.appendChild(createElementFromText('td', 'Status')); |
101 itemContainer.appendChild(tr); | 87 tr.appendChild(createElementFromText('td', 'Path', {width: '250px'})); |
102 } | 88 tr.appendChild(createElementFromText('td', 'Details')); |
103 }; | 89 header.appendChild(tr); |
| 90 } |
104 | 91 |
105 /** | 92 // Add row entries. |
| 93 var itemContainer = $('file-metadata-entries'); |
| 94 itemContainer.textContent = ''; |
| 95 for (var i = 0; i < fileMetadataMap.length; i++) { |
| 96 var metadatEntry = fileMetadataMap[i]; |
| 97 var tr = document.createElement('tr'); |
| 98 tr.appendChild(createFileIconCell(metadatEntry.type)); |
| 99 tr.appendChild(createElementFromText('td', metadatEntry.status)); |
| 100 tr.appendChild(createElementFromText('td', metadatEntry.path)); |
| 101 tr.appendChild(createElementFromDictionary('td', metadatEntry.details)); |
| 102 itemContainer.appendChild(tr); |
| 103 } |
| 104 }; |
| 105 |
| 106 /** |
106 * @param {string} file type string. | 107 * @param {string} file type string. |
107 * @return {HTMLElement} TD with file or folder icon depending on type. | 108 * @return {HTMLElement} TD with file or folder icon depending on type. |
108 */ | 109 */ |
109 function createFileIconCell(type) { | 110 function createFileIconCell(type) { |
110 var img = document.createElement('div'); | 111 var img = document.createElement('div'); |
111 var lowerType = type.toLowerCase(); | 112 var lowerType = type.toLowerCase(); |
112 if (lowerType == 'file') { | 113 if (lowerType == 'file') { |
113 img.style.content = cr.icon.getImage('chrome://theme/IDR_DEFAULT_FAVICON'); | 114 img.style.content = |
114 } else if (lowerType == 'folder') { | 115 cr.icon.getImage('chrome://theme/IDR_DEFAULT_FAVICON'); |
115 img.style.content = cr.icon.getImage('chrome://theme/IDR_FOLDER_CLOSED'); | 116 } else if (lowerType == 'folder') { |
116 img.className = 'folder-image'; | 117 img.style.content = cr.icon.getImage('chrome://theme/IDR_FOLDER_CLOSED'); |
| 118 img.className = 'folder-image'; |
| 119 } |
| 120 |
| 121 var imgWrapper = document.createElement('div'); |
| 122 imgWrapper.appendChild(img); |
| 123 |
| 124 var td = document.createElement('td'); |
| 125 td.className = 'file-icon-cell'; |
| 126 td.appendChild(imgWrapper); |
| 127 td.appendChild(document.createTextNode(type)); |
| 128 return td; |
117 } | 129 } |
118 | 130 |
119 var imgWrapper = document.createElement('div'); | 131 function main() { |
120 imgWrapper.appendChild(img); | 132 getExtensions(); |
| 133 $('refresh-metadata-button').addEventListener('click', getExtensions); |
| 134 $('extensions-select').addEventListener('change', getFileMetadata); |
| 135 } |
121 | 136 |
122 var td = document.createElement('td'); | 137 document.addEventListener('DOMContentLoaded', main); |
123 td.className = 'file-icon-cell'; | 138 return FileMetadata; |
124 td.appendChild(imgWrapper); | |
125 td.appendChild(document.createTextNode(type)); | |
126 return td; | |
127 } | |
128 | |
129 function main() { | |
130 getExtensions(); | |
131 $('refresh-metadata-button').addEventListener('click', getExtensions); | |
132 $('extensions-select').addEventListener('change', getFileMetadata); | |
133 } | |
134 | |
135 document.addEventListener('DOMContentLoaded', main); | |
136 return FileMetadata; | |
137 })(); | 139 })(); |
OLD | NEW |