| 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 |