Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(451)

Side by Side Diff: chrome/browser/resources/settings/settings_main/settings_main.js

Issue 986843002: Scaffold for MD-Settings, inside chrome://md-settings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add to chrome://md-settings Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 /**
6 * @fileoverview
7 * 'cr-settings-main' displays the selected settings page.
8 *
9 * Example:
10 *
11 * <cr-settings-main pages="{{pages}}" currentPageIndex="{{index}}">
12 * </cr-settings-main>
13 *
14 * See cr-settings-drawer for example of use in 'core-panel'.
15 *
16 * @group Chrome Settings Elements
17 * @element cr-settings-main
18 */
19 Polymer('cr-settings-main', {
20 publish: {
21 /**
22 * Pages that may be shown.
23 *
24 * @attribute pages
25 * @type Array<!CrSettingsPage>
26 * @default []
27 */
28 pages: [],
Jeremy Klein 2015/03/07 23:55:14 Same comment about initialization.
29
30 /**
31 * Index of the currently selected page.
32 *
33 * @attribute selectedIndex
34 * @type number
35 * default 0
36 */
37 currentPageIndex: 0,
38 },
39
40 /**
41 * Polymer pages changed method. Ensures the pages container contains the
42 * pages in the right order.
43 *
44 * @param {*} value The old value if the property value has changed, or the
Jeremy Klein 2015/03/07 23:55:13 Please use a more specific type.
45 * array of splices if the existing array has been changed.
46 */
47 pagesChanged: function(value) {
48 // If value is an array of plain objects, it represents splices from an
49 // ArrayObserver.
50 if (value instanceof Array && value.length &&
51 Object.prototype.isPrototypeOf(value[0])) {
52 this.applyPageSplices_(value);
53 } else {
54 this.updatePages_(this.pages);
55 }
56 },
57
58 /**
59 * Sets the list of pages shown in the 'core-animated-pages'. Rebuilds the DOM
60 * for 'core-animated-pages', so this should be called sparingly.
61 *
62 * @private
63 */
64 updatePages_: function() {
Jeremy Klein 2015/03/07 23:55:13 A lot of the logic in this file could be simplifie
65 this.$.pages.innerHTML = '';
66 if (!this.pages.length)
67 return;
68
69 if (this.currentPageIndex >= this.pages.length)
70 this.currentPageIndex = 0;
71
72 for (var i = 0; i < this.pages.length; i++)
73 this.$.pages.appendChild(this.createSection_(this.pages[i]));
74 },
75
76 /**
77 * Applies the splices for the list of pages to the sections in the DOM.
78 *
79 * TODO(michaelpg): core-animated-pages throws when all pages are removed.
80 *
81 * @param {!Array<!Object>} splices The changes made to 'pages'.
82 * @private
83 */
84 applyPageSplices_: function(splices) {
85 var numRemoved = 0;
86 splices.forEach(function(splice) {
87 // Remove the sections to be removed before inserting new children.
88 for (var i = 0; i < splice.removed.length; i++)
89 this.$.pages.removeChild(splice.removed[i].parentNode);
90 numRemoved += splice.removed.length;
91
92 if (!splice.addedCount)
93 return;
94
95 // Find the node to insert before, unless splice.index indicates the end
96 // of the array.
97 var sectionAfter = null;
98 if (splice.index < this.$.pages.children.length)
99 sectionAfter = this.$.pages.children[splice.index];
100
101 for (var i = 0; i < splice.addedCount; i++) {
102 var section = this.createSection_(this.pages[splice.index + i]);
103 this.$.pages.insertBefore(section, sectionAfter);
104 }
105 }.bind(this));
106
107 if (this.currentPageIndex >= this.pages.length)
108 this.currentPageIndex = 0;
109 },
110
111 /** Creates a section for 'core-animated-pages' for the given element.
112 *
113 * @param {HTMLElement} element Element to add to 'core-animated-pages'.
114 * @private
115 */
116 createSection_: function(element) {
117 element.setAttribute('cross-fade', '');
118 var section = document.createElement('section');
119 section.appendChild(element);
120 return section;
121 },
122 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698