OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 cr.define('extensions', function() { | 5 cr.define('extensions', function() { |
6 'use strict'; | |
7 | |
8 /** | |
9 * Compares two extensions to determine which should come first in the list. | |
Devlin
2015/11/18 00:38:57
note: copy-paste from service.js
| |
10 * @param {chrome.developerPrivate.ExtensionInfo} a | |
11 * @param {chrome.developerPrivate.ExtensionInfo} b | |
12 * @return {number} | |
13 */ | |
14 var compareExtensions = function(a, b) { | |
15 function compare(x, y) { | |
16 return x < y ? -1 : (x > y ? 1 : 0); | |
17 } | |
18 function compareLocation(x, y) { | |
19 if (x.location == y.location) | |
20 return 0; | |
21 if (x.location == chrome.developerPrivate.Location.UNPACKED) | |
22 return -1; | |
23 if (y.location == chrome.developerPrivate.Location.UNPACKED) | |
24 return 1; | |
25 return 0; | |
26 } | |
27 return compareLocation(a, b) || | |
28 compare(a.name.toLowerCase(), b.name.toLowerCase()) || | |
29 compare(a.id, b.id); | |
30 }; | |
31 | |
6 var Manager = Polymer({ | 32 var Manager = Polymer({ |
7 is: 'extensions-manager', | 33 is: 'extensions-manager', |
8 | 34 |
9 properties: { | 35 properties: { |
10 sidebar: { | 36 sidebar: { |
michaelpg
2015/11/18 09:08:45
/** @type {extensions.Sidebar} */
Devlin
2015/11/18 17:16:59
Ah, didn't realize that worked. Done.
| |
11 type: Object, | 37 type: Object, |
12 } | 38 } |
13 }, | 39 }, |
14 | 40 |
15 ready: function() { | 41 ready: function() { |
42 /** @type {extensions.Sidebar} */ | |
16 this.sidebar = this.$$('extensions-sidebar'); | 43 this.sidebar = this.$$('extensions-sidebar'); |
17 extensions.Service.getInstance().managerReady(this); | 44 extensions.Service.getInstance().managerReady(this); |
18 this.sidebar.setScrollDelegate(new ScrollHelper(this)); | 45 this.sidebar.setScrollDelegate(new ScrollHelper(this)); |
19 }, | 46 }, |
20 | 47 |
21 /** | 48 /** |
22 * Creates and adds a new extensions-item element to the list. | 49 * Creates and adds a new extensions-item element to the list. |
michaelpg
2015/11/18 09:08:45
nit: ", inserting it into its sorted position in t
Devlin
2015/11/18 17:16:59
Done.
| |
23 * @param {!chrome.developerPrivate.ExtensionInfo} extension The extension | 50 * @param {!chrome.developerPrivate.ExtensionInfo} extension The extension |
24 * the item is representing. | 51 * the item is representing. |
25 * @param {!extensions.ItemDelegate} delegate The delegate for the item. | 52 * @param {!extensions.ItemDelegate} delegate The delegate for the item. |
26 * @param {!number=} opt_index The index at which to place the item. If | |
27 * not present, the item is appended to the end of the list. | |
28 */ | 53 */ |
29 addItem: function(extension, delegate, opt_index) { | 54 addItem: function(extension, delegate) { |
30 var listId; | 55 var listId; |
31 var ExtensionType = chrome.developerPrivate.ExtensionType; | 56 var ExtensionType = chrome.developerPrivate.ExtensionType; |
32 switch (extension.type) { | 57 switch (extension.type) { |
33 case ExtensionType.HOSTED_APP: | 58 case ExtensionType.HOSTED_APP: |
34 case ExtensionType.LEGACY_PACKAGED_APP: | 59 case ExtensionType.LEGACY_PACKAGED_APP: |
35 listId = 'websites-list'; | 60 listId = 'websites-list'; |
36 break; | 61 break; |
37 case ExtensionType.PLATFORM_APP: | 62 case ExtensionType.PLATFORM_APP: |
38 listId = 'apps-list'; | 63 listId = 'apps-list'; |
39 break; | 64 break; |
40 case ExtensionType.EXTENSION: | 65 case ExtensionType.EXTENSION: |
41 case ExtensionType.SHARED_MODULE: | 66 case ExtensionType.SHARED_MODULE: |
42 listId = 'extensions-list'; | 67 listId = 'extensions-list'; |
43 break; | 68 break; |
44 case ExtensionType.THEME: | 69 case ExtensionType.THEME: |
45 assertNotReached( | 70 assertNotReached( |
46 'Don\'t send themes to the chrome://extensions page'); | 71 'Don\'t send themes to the chrome://extensions page'); |
47 break; | 72 break; |
48 } | 73 } |
49 assert(listId); | 74 assert(listId); |
50 var extensionItem = new extensions.Item(extension, delegate); | 75 var extensionItem = new extensions.Item(extension, delegate); |
51 var itemList = this.$[listId]; | 76 var itemList = this.$[listId]; |
52 var refNode = opt_index !== undefined ? | 77 |
53 itemList.children[opt_index] : undefined; | 78 var insertBeforeChild = Array.prototype.find.call(itemList.children, |
54 itemList.insertBefore(extensionItem, refNode); | 79 function(item) { |
80 return compareExtensions(item.data, extension) > 0; | |
81 }); | |
82 itemList.insertBefore(extensionItem, insertBeforeChild); | |
55 }, | 83 }, |
56 | 84 |
57 /** | 85 /** |
58 * @param {string} id The id of the extension to get the item for. | 86 * @param {string} id The id of the extension to get the item for. |
59 * @return {?extensions.Item} | 87 * @return {?extensions.Item} |
60 */ | 88 */ |
61 getItem: function(id) { | 89 getItem: function(id) { |
62 return this.$$('#' + id); | 90 return this.$$('#' + id); |
63 }, | 91 }, |
64 | 92 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
105 | 133 |
106 /** @override */ | 134 /** @override */ |
107 scrollToWebsites: function() { | 135 scrollToWebsites: function() { |
108 this.items_.scrollTop = | 136 this.items_.scrollTop = |
109 this.items_.querySelector('#websites-header').offsetTop; | 137 this.items_.querySelector('#websites-header').offsetTop; |
110 }, | 138 }, |
111 }; | 139 }; |
112 | 140 |
113 return {Manager: Manager}; | 141 return {Manager: Manager}; |
114 }); | 142 }); |
OLD | NEW |