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

Side by Side Diff: chrome/browser/resources/file_manager/js/combobutton.js

Issue 39123003: [Files.app] Split the JavaScript files into subdirectories: common, background, and foreground (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed test failure. Created 7 years, 1 month 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 'use strict';
6
7 /**
8 * @fileoverview This implements a combobutton control.
9 */
10
11 cr.define('cr.ui', function() {
12 /**
13 * Creates a new combobutton element.
14 * @param {Object=} opt_propertyBag Optional properties.
15 * @constructor
16 * @extends {HTMLUListElement}
17 */
18 var ComboButton = cr.ui.define(cr.ui.MenuButton);
19
20
21 ComboButton.prototype = {
22 __proto__: cr.ui.MenuButton.prototype,
23
24 defaultItem_: null,
25
26 /**
27 * Truncates drop-down list.
28 */
29 clear: function() {
30 this.menu.clear();
31 this.multiple = false;
32 },
33
34 addDropDownItem: function(item) {
35 this.multiple = true;
36 var menuitem = this.menu.addMenuItem(item);
37 menuitem.data = item;
38 if (item.iconType) {
39 menuitem.style.backgroundImage = '';
40 menuitem.setAttribute('file-type-icon', item.iconType);
41 }
42 if (item.bold) {
43 menuitem.style.fontWeight = 'bold';
44 }
45 return menuitem;
46 },
47
48 /**
49 * Adds separator to drop-down list.
50 */
51 addSeparator: function() {
52 this.menu.addSeparator();
53 },
54
55 /**
56 * Default item to fire on combobox click
57 */
58 get defaultItem() {
59 return this.defaultItem_;
60 },
61 set defaultItem(defaultItem) {
62 this.defaultItem_ = defaultItem;
63
64 this.actionNode_.textContent = defaultItem.label || '';
65
66 if (defaultItem.iconType) {
67 this.actionNode_.style.backgroundImage = '';
68 this.actionNode_.setAttribute('file-type-icon', defaultItem.iconType);
69 } else if (defaultItem.iconUrl) {
70 this.actionNode_.style.backgroundImage =
71 'url(' + defaultItem.iconUrl + ')';
72 } else {
73 this.actionNode_.style.backgroundImage = '';
74 }
75 },
76
77 /**
78 * Initializes the element.
79 */
80 decorate: function() {
81 cr.ui.MenuButton.prototype.decorate.call(this);
82
83 this.classList.add('combobutton');
84
85 this.actionNode_ = this.ownerDocument.createElement('div');
86 this.actionNode_.classList.add('action');
87 this.appendChild(this.actionNode_);
88
89 var triggerIcon = this.ownerDocument.createElement('span');
90 triggerIcon.className = 'disclosureindicator';
91 this.trigger_ = this.ownerDocument.createElement('div');
92 this.trigger_.classList.add('trigger');
93 this.trigger_.appendChild(triggerIcon);
94
95 this.appendChild(this.trigger_);
96
97 this.addEventListener('click', this.handleButtonClick_.bind(this));
98
99 this.trigger_.addEventListener('click',
100 this.handleTriggerClicked_.bind(this));
101
102 this.menu.addEventListener('activate',
103 this.handleMenuActivate_.bind(this));
104
105 // Remove mousedown event listener created by MenuButton::decorate,
106 // and move it down to trigger_.
107 this.removeEventListener('mousedown', this);
108 this.trigger_.addEventListener('mousedown', this);
109 },
110
111 /**
112 * Handles the keydown event for the menu button.
113 */
114 handleKeyDown: function(e) {
115 switch (e.keyIdentifier) {
116 case 'Down':
117 case 'Up':
118 if (!this.isMenuShown())
119 this.showMenu();
120 e.preventDefault();
121 break;
122 case 'Esc':
123 case 'U+001B': // Maybe this is remote desktop playing a prank?
124 this.hideMenu();
125 break;
126 }
127 },
128
129 handleTriggerClicked_: function(event) {
130 event.stopPropagation();
131 },
132
133 handleMenuActivate_: function(event) {
134 this.dispatchSelectEvent(event.target.data);
135 },
136
137 handleButtonClick_: function() {
138 this.dispatchSelectEvent(this.defaultItem_);
139 },
140
141 dispatchSelectEvent: function(item) {
142 var selectEvent = new Event('select');
143 selectEvent.item = item;
144 this.dispatchEvent(selectEvent);
145 }
146 };
147
148 cr.defineProperty(ComboButton, 'disabled', cr.PropertyKind.BOOL_ATTR);
149 cr.defineProperty(ComboButton, 'multiple', cr.PropertyKind.BOOL_ATTR);
150
151 return {
152 ComboButton: ComboButton
153 };
154 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/file_manager/js/butter_bar.js ('k') | chrome/browser/resources/file_manager/js/commandbutton.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698