OLD | NEW |
(Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 cr.define('options', function() { |
| 6 var OptionsPage = options.OptionsPage; |
| 7 var ExtensionsList = options.ExtensionsList; |
| 8 |
| 9 /** |
| 10 * ExtensionSettings class |
| 11 * Encapsulated handling of the 'Manage Extensions' page. |
| 12 * @class |
| 13 */ |
| 14 function ExtensionSettings() { |
| 15 OptionsPage.call(this, |
| 16 'extensionSettings', |
| 17 templateData.extensionSettingsTitle, |
| 18 'extension-settings'); |
| 19 } |
| 20 |
| 21 cr.addSingletonGetter(ExtensionSettings); |
| 22 |
| 23 ExtensionSettings.prototype = { |
| 24 __proto__: OptionsPage.prototype, |
| 25 |
| 26 /** |
| 27 * Initialize the page. |
| 28 */ |
| 29 initializePage: function() { |
| 30 OptionsPage.prototype.initializePage.call(this); |
| 31 |
| 32 // This will request the data to show on the page and will get a response |
| 33 // back in returnExtensionsData. |
| 34 chrome.send('requestExtensionsData'); |
| 35 |
| 36 // Set up the developer mode button. |
| 37 var toggleDevMode = $('toggle-dev-on'); |
| 38 toggleDevMode.addEventListener('click', |
| 39 this.handleToggleDevMode_.bind(this)); |
| 40 |
| 41 // Setup the gallery related links and text. |
| 42 $('suggest-gallery').innerHTML = |
| 43 localStrings.getString('suggestGallery'); |
| 44 $('get-more-extensions').innerHTML = |
| 45 localStrings.getString('getMoreExtensions'); |
| 46 |
| 47 // Set up the three dev mode buttons (load unpacked, pack and update). |
| 48 $('load-unpacked').addEventListener('click', |
| 49 this.handleLoadUnpackedExtension_.bind(this)); |
| 50 $('pack-extension').addEventListener('click', |
| 51 this.handlePackExtension_.bind(this)); |
| 52 $('update-extensions-now').addEventListener('click', |
| 53 this.handleUpdateExtensionNow_.bind(this)); |
| 54 }, |
| 55 |
| 56 /** |
| 57 * Utility function which asks the C++ to show a platform-specific file |
| 58 * select dialog, and fire |callback| with the |filePath| that resulted. |
| 59 * |selectType| can be either 'file' or 'folder'. |operation| can be 'load', |
| 60 * 'packRoot', or 'pem' which are signals to the C++ to do some |
| 61 * operation-specific configuration. |
| 62 */ |
| 63 showFileDialog_: function(selectType, operation, callback) { |
| 64 handleFilePathSelected = function(filePath) { |
| 65 callback(filePath); |
| 66 handleFilePathSelected = function() {}; |
| 67 }; |
| 68 |
| 69 chrome.send('selectFilePath', [selectType, operation]); |
| 70 }, |
| 71 |
| 72 /** |
| 73 * Handles the Load Unpacked Extension button. |
| 74 * @param {Event} e Change event. |
| 75 * @private |
| 76 */ |
| 77 handleLoadUnpackedExtension_: function(e) { |
| 78 this.showFileDialog_('folder', 'load', function(filePath) { |
| 79 chrome.send('load', [String(filePath)]); |
| 80 }); |
| 81 |
| 82 chrome.send('coreOptionsUserMetricsAction', |
| 83 ['Options_LoadUnpackedExtension']); |
| 84 }, |
| 85 |
| 86 /** |
| 87 * Handles the Pack Extension button. |
| 88 * @param {Event} e Change event. |
| 89 * @private |
| 90 */ |
| 91 handlePackExtension_: function(e) { |
| 92 OptionsPage.navigateToPage('packExtensionOverlay'); |
| 93 chrome.send('coreOptionsUserMetricsAction', ['Options_PackExtension']); |
| 94 }, |
| 95 |
| 96 /** |
| 97 * Handles the Update Extension Now button. |
| 98 * @param {Event} e Change event. |
| 99 * @private |
| 100 */ |
| 101 handleUpdateExtensionNow_: function(e) { |
| 102 chrome.send('autoupdate', []); |
| 103 }, |
| 104 |
| 105 /** |
| 106 * Handles the Toggle Dev Mode button. |
| 107 * @param {Event} e Change event. |
| 108 * @private |
| 109 */ |
| 110 handleToggleDevMode_: function(e) { |
| 111 var dev = $('dev'); |
| 112 if (dev.className.indexOf('dev-open') == -1) { |
| 113 // Make the Dev section visible. |
| 114 dev.classList.add('dev-open'); |
| 115 dev.classList.remove('dev-closed'); |
| 116 |
| 117 $('load-unpacked').classList.add('dev-button-visible'); |
| 118 $('load-unpacked').classList.remove('dev-button-hidden'); |
| 119 $('pack-extension').classList.add('dev-button-visible'); |
| 120 $('pack-extension').classList.remove('dev-button-hidden'); |
| 121 $('update-extensions-now').classList.add('dev-button-visible'); |
| 122 $('update-extensions-now').classList.remove('dev-button-hidden'); |
| 123 } else { |
| 124 // Hide the Dev section. |
| 125 dev.classList.add('dev-closed'); |
| 126 dev.classList.remove('dev-open'); |
| 127 |
| 128 $('load-unpacked').classList.add('dev-button-hidden'); |
| 129 $('load-unpacked').classList.remove('dev-button-visible'); |
| 130 $('pack-extension').classList.add('dev-button-hidden'); |
| 131 $('pack-extension').classList.remove('dev-button-visible'); |
| 132 $('update-extensions-now').classList.add('dev-button-hidden'); |
| 133 $('update-extensions-now').classList.remove('dev-button-visible'); |
| 134 } |
| 135 |
| 136 chrome.send('toggleDeveloperMode', []); |
| 137 }, |
| 138 }; |
| 139 |
| 140 /** |
| 141 * Called by the dom_ui_ to re-populate the page with data representing |
| 142 * the current state of installed extensions. |
| 143 */ |
| 144 ExtensionSettings.returnExtensionsData = function(extensionsData) { |
| 145 $('no-extensions').style.display = "none"; |
| 146 $('suggest-gallery').style.display = "none"; |
| 147 $('get-more-extensions-container').style.display = "none"; |
| 148 |
| 149 if (extensionsData.extensions.length > 0) { |
| 150 // Enforce order specified in the data or (if equal) then sort by |
| 151 // extension name (case-insensitive). |
| 152 extensionsData.extensions.sort(function(a, b) { |
| 153 if (a.order == b.order) { |
| 154 a = a.name.toLowerCase(); |
| 155 b = b.name.toLowerCase(); |
| 156 return a < b ? -1 : (a > b ? 1 : 0); |
| 157 } else { |
| 158 return a.order < b.order ? -1 : 1; |
| 159 } |
| 160 }); |
| 161 |
| 162 $('get-more-extensions-container').style.display = "-webkit-box"; |
| 163 } else { |
| 164 $('no-extensions').style.display = "-webkit-box"; |
| 165 $('suggest-gallery').style.display = "-webkit-box"; |
| 166 } |
| 167 |
| 168 ExtensionsList.prototype.data_ = extensionsData; |
| 169 |
| 170 var extensionList = $('extension-settings-list'); |
| 171 ExtensionsList.decorate(extensionList); |
| 172 } |
| 173 |
| 174 // Export |
| 175 return { |
| 176 ExtensionSettings: ExtensionSettings |
| 177 }; |
| 178 }); |
OLD | NEW |