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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeToolbar.js

Issue 1642233002: [DevTools] Cleanup various bindInput implementations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@device-mode-cleanup-misc
Patch Set: Created 4 years, 10 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 * @param {!WebInspector.DeviceModeModel} model 6 * @param {!WebInspector.DeviceModeModel} model
7 * @param {!WebInspector.Setting} showMediaInspectorSetting 7 * @param {!WebInspector.Setting} showMediaInspectorSetting
8 * @param {!WebInspector.Setting} showRulersSetting 8 * @param {!WebInspector.Setting} showRulersSetting
9 * @constructor 9 * @constructor
10 */ 10 */
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 61
62 /** 62 /**
63 * @param {!WebInspector.Toolbar} toolbar 63 * @param {!WebInspector.Toolbar} toolbar
64 */ 64 */
65 _fillMainToolbar: function(toolbar) 65 _fillMainToolbar: function(toolbar)
66 { 66 {
67 var widthInput = createElementWithClass("input", "device-mode-size-input "); 67 var widthInput = createElementWithClass("input", "device-mode-size-input ");
68 widthInput.maxLength = 4; 68 widthInput.maxLength = 4;
69 widthInput.type = "text"; 69 widthInput.type = "text";
70 widthInput.title = WebInspector.UIString("Width"); 70 widthInput.title = WebInspector.UIString("Width");
71 this._updateWidthInput = this._bindInput(widthInput, this._model.setWidt hAndScaleToFit.bind(this._model), WebInspector.DeviceModeModel.deviceSizeValidat or); 71 this._updateWidthInput = WebInspector.bindInput(widthInput, applyWidth.b ind(this), WebInspector.DeviceModeModel.deviceSizeValidator, true);
72 this._widthInput = widthInput; 72 this._widthInput = widthInput;
73 this._widthItem = this._wrapToolbarItem(widthInput); 73 this._widthItem = this._wrapToolbarItem(widthInput);
74 toolbar.appendToolbarItem(this._widthItem); 74 toolbar.appendToolbarItem(this._widthItem);
75 75
76 var xElement = createElementWithClass("div", "device-mode-x"); 76 var xElement = createElementWithClass("div", "device-mode-x");
77 xElement.textContent = "\u00D7"; 77 xElement.textContent = "\u00D7";
78 this._xItem = this._wrapToolbarItem(xElement); 78 this._xItem = this._wrapToolbarItem(xElement);
79 toolbar.appendToolbarItem(this._xItem); 79 toolbar.appendToolbarItem(this._xItem);
80 80
81 var heightInput = createElementWithClass("input", "device-mode-size-inpu t"); 81 var heightInput = createElementWithClass("input", "device-mode-size-inpu t");
82 heightInput.maxLength = 4; 82 heightInput.maxLength = 4;
83 heightInput.type = "text"; 83 heightInput.type = "text";
84 heightInput.title = WebInspector.UIString("Height (leave empty for full) "); 84 heightInput.title = WebInspector.UIString("Height (leave empty for full) ");
85 this._updateHeightInput = this._bindInput(heightInput, this._model.setHe ightAndScaleToFit.bind(this._model), validateHeight); 85 this._updateHeightInput = WebInspector.bindInput(heightInput, applyHeigh t.bind(this), validateHeight, true);
86 this._heightInput = heightInput; 86 this._heightInput = heightInput;
87 this._heightItem = this._wrapToolbarItem(heightInput); 87 this._heightItem = this._wrapToolbarItem(heightInput);
88 toolbar.appendToolbarItem(this._heightItem); 88 toolbar.appendToolbarItem(this._heightItem);
89 89
90 /** 90 /**
91 * @param {string} value 91 * @param {string} value
92 * @return {string} 92 * @return {boolean}
93 */ 93 */
94 function validateHeight(value) 94 function validateHeight(value)
95 { 95 {
96 return !value ? "" : WebInspector.DeviceModeModel.deviceSizeValidato r(value); 96 return !value || WebInspector.DeviceModeModel.deviceSizeValidator(va lue);
97 }
98
99 /**
100 * @param {string} value
101 * @this {WebInspector.DeviceModeToolbar}
102 */
103 function applyWidth(value)
104 {
105 var width = value ? Number(value) : 0;
106 this._model.setWidthAndScaleToFit(width);
107 }
108
109 /**
110 * @param {string} value
111 * @this {WebInspector.DeviceModeToolbar}
112 */
113 function applyHeight(value)
114 {
115 var height = value ? Number(value) : 0;
116 this._model.setHeightAndScaleToFit(height);
97 } 117 }
98 }, 118 },
99 119
100 /** 120 /**
101 * @param {!WebInspector.Toolbar} toolbar 121 * @param {!WebInspector.Toolbar} toolbar
102 */ 122 */
103 _fillRightToolbar: function(toolbar) 123 _fillRightToolbar: function(toolbar)
104 { 124 {
105 toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass(" div", "device-mode-empty-toolbar-element"))); 125 toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass(" div", "device-mode-empty-toolbar-element")));
106 this._scaleItem = new WebInspector.ToolbarMenuButton(this._appendScaleMe nuItems.bind(this)); 126 this._scaleItem = new WebInspector.ToolbarMenuButton(this._appendScaleMe nuItems.bind(this));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 158
139 var moreOptionsButton = new WebInspector.ToolbarMenuButton(this._appendO ptionsMenuItems.bind(this)); 159 var moreOptionsButton = new WebInspector.ToolbarMenuButton(this._appendO ptionsMenuItems.bind(this));
140 moreOptionsButton.setTitle(WebInspector.UIString("More options")); 160 moreOptionsButton.setTitle(WebInspector.UIString("More options"));
141 toolbar.appendToolbarItem(moreOptionsButton); 161 toolbar.appendToolbarItem(moreOptionsButton);
142 162
143 toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass(" div", "device-mode-empty-toolbar-element"))); 163 toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass(" div", "device-mode-empty-toolbar-element")));
144 }, 164 },
145 165
146 166
147 /** 167 /**
148 * @param {!Element} input
149 * @param {function(number)} apply
150 * @param {function(string):?string} validate
151 * @return {function(number)}
152 */
153 _bindInput: function(input, apply, validate)
154 {
155 input.addEventListener("change", onChange, false);
156 input.addEventListener("input", onInput, false);
157 input.addEventListener("keydown", onKeyDown, false);
158 input.addEventListener("focus", input.select.bind(input), false);
159
160 function onInput()
161 {
162 input.classList.toggle("error-input", !!validate(input.value));
163 }
164
165 function onChange()
166 {
167 var valid = !validate(input.value);
168 input.classList.toggle("error-input", !valid);
169 if (valid)
170 apply(input.value ? Number(input.value) : 0);
171 }
172
173 /**
174 * @param {!Event} event
175 */
176 function onKeyDown(event)
177 {
178 if (isEnterKey(event)) {
179 if (!validate(input.value))
180 apply(input.value ? Number(input.value) : 0);
181 return;
182 }
183
184 var increment = event.keyIdentifier === "Up" ? 1 : event.keyIdentifi er === "Down" ? -1 : 0;
185 if (!increment)
186 return;
187 if (event.shiftKey)
188 increment *= 10;
189
190 var value = input.value;
191 if (validate(value) || !value)
192 return;
193
194 value = (value ? Number(value) : 0) + increment;
195 var stringValue = value ? String(value) : "";
196 if (validate(stringValue) || !value)
197 return;
198
199 input.value = stringValue;
200 apply(input.value ? Number(input.value) : 0);
201 event.preventDefault();
202 }
203
204 /**
205 * @param {number} value
206 */
207 function setValue(value)
208 {
209 var stringValue = value ? String(value) : "";
210 if (stringValue === input.value)
211 return;
212 var valid = !validate(stringValue);
213 input.classList.toggle("error-input", !valid);
214 input.value = stringValue;
215 input.setSelectionRange(stringValue.length, stringValue.length);
216 }
217
218 return setValue;
219 },
220
221 /**
222 * @param {!WebInspector.ContextMenu} contextMenu 168 * @param {!WebInspector.ContextMenu} contextMenu
223 */ 169 */
224 _appendScaleMenuItems: function(contextMenu) 170 _appendScaleMenuItems: function(contextMenu)
225 { 171 {
226 var scaleSetting = this._model.scaleSetting(); 172 var scaleSetting = this._model.scaleSetting();
227 if (this._model.type() === WebInspector.DeviceModeModel.Type.Device) { 173 if (this._model.type() === WebInspector.DeviceModeModel.Type.Device) {
228 contextMenu.appendItem(WebInspector.UIString("Fit to window (%.0f%%) ", this._model.fitScale() * 100), scaleSetting.set.bind(scaleSetting, this._mode l.fitScale()), false); 174 contextMenu.appendItem(WebInspector.UIString("Fit to window (%.0f%%) ", this._model.fitScale() * 100), scaleSetting.set.bind(scaleSetting, this._mode l.fitScale()), false);
229 contextMenu.appendSeparator(); 175 contextMenu.appendSeparator();
230 } 176 }
231 appendScaleItem(WebInspector.UIString("50%"), 0.5); 177 appendScaleItem(WebInspector.UIString("50%"), 0.5);
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 425
480 update: function() 426 update: function()
481 { 427 {
482 if (this._model.type() !== this._cachedModelType) { 428 if (this._model.type() !== this._cachedModelType) {
483 this._cachedModelType = this._model.type(); 429 this._cachedModelType = this._model.type();
484 this._widthInput.disabled = this._model.type() !== WebInspector.Devi ceModeModel.Type.Responsive; 430 this._widthInput.disabled = this._model.type() !== WebInspector.Devi ceModeModel.Type.Responsive;
485 this._heightInput.disabled = this._model.type() !== WebInspector.Dev iceModeModel.Type.Responsive; 431 this._heightInput.disabled = this._model.type() !== WebInspector.Dev iceModeModel.Type.Responsive;
486 } 432 }
487 433
488 var size = this._model.appliedDeviceSize(); 434 var size = this._model.appliedDeviceSize();
489 this._updateHeightInput(this._model.type() === WebInspector.DeviceModeMo del.Type.Responsive && this._model.isFullHeight() ? 0 : size.height); 435 this._updateHeightInput(this._model.type() === WebInspector.DeviceModeMo del.Type.Responsive && this._model.isFullHeight() ? "" : String(size.height));
490 this._updateWidthInput(size.width); 436 this._updateWidthInput(String(size.width));
491 this._heightInput.placeholder = size.height; 437 this._heightInput.placeholder = size.height;
492 438
493 if (this._model.scale() !== this._cachedScale) { 439 if (this._model.scale() !== this._cachedScale) {
494 this._scaleItem.setText(WebInspector.UIString("%.0f%%", this._model. scale() * 100)); 440 this._scaleItem.setText(WebInspector.UIString("%.0f%%", this._model. scale() * 100));
495 this._scaleItem.setState(this._model.scale() === 1 ? "off" : "on"); 441 this._scaleItem.setState(this._model.scale() === 1 ? "off" : "on");
496 this._cachedScale = this._model.scale(); 442 this._cachedScale = this._model.scale();
497 } 443 }
498 444
499 var deviceScale = this._model.deviceScaleFactorSetting().get(); 445 var deviceScale = this._model.deviceScaleFactorSetting().get();
500 this._deviceScaleItem.setVisible(this._model.type() === WebInspector.Dev iceModeModel.Type.Responsive && !!deviceScale); 446 this._deviceScaleItem.setVisible(this._model.type() === WebInspector.Dev iceModeModel.Type.Responsive && !!deviceScale);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 this._emulateDevice(device); 503 this._emulateDevice(device);
558 return; 504 return;
559 } 505 }
560 } 506 }
561 } 507 }
562 } 508 }
563 509
564 this._model.emulate(WebInspector.DeviceModeModel.Type.Responsive, null, null); 510 this._model.emulate(WebInspector.DeviceModeModel.Type.Responsive, null, null);
565 } 511 }
566 } 512 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698