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