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

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

Issue 1641513003: [DevTools] Split DeviceModeView.js into view, toolbar and wrapper. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@device-mode-cleanup-remove-files
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 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 /** 5 /**
6 * @constructor 6 * @constructor
7 * @extends {WebInspector.VBox} 7 * @extends {WebInspector.VBox}
8 */ 8 */
9 WebInspector.DeviceModeView = function() 9 WebInspector.DeviceModeView = function()
10 { 10 {
(...skipping 15 matching lines...) Expand all
26 this._topRuler.element.classList.add("device-mode-ruler-top"); 26 this._topRuler.element.classList.add("device-mode-ruler-top");
27 this._leftRuler = new WebInspector.DeviceModeView.Ruler(false, this._model.s etHeightAndScaleToFit.bind(this._model)); 27 this._leftRuler = new WebInspector.DeviceModeView.Ruler(false, this._model.s etHeightAndScaleToFit.bind(this._model));
28 this._leftRuler.element.classList.add("device-mode-ruler-left"); 28 this._leftRuler.element.classList.add("device-mode-ruler-left");
29 this._createUI(); 29 this._createUI();
30 WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.Zo omChanged, this._zoomChanged, this); 30 WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.Zo omChanged, this._zoomChanged, this);
31 }; 31 };
32 32
33 WebInspector.DeviceModeView.prototype = { 33 WebInspector.DeviceModeView.prototype = {
34 _createUI: function() 34 _createUI: function()
35 { 35 {
36 this._toolbar = new WebInspector.DeviceModeView.Toolbar(this._model, thi s._showMediaInspectorSetting, this._showRulersSetting); 36 this._toolbar = new WebInspector.DeviceModeToolbar(this._model, this._sh owMediaInspectorSetting, this._showRulersSetting);
37 this.contentElement.appendChild(this._toolbar.element()); 37 this.contentElement.appendChild(this._toolbar.element());
38 38
39 this._contentClip = this.contentElement.createChild("div", "device-mode- content-clip vbox"); 39 this._contentClip = this.contentElement.createChild("div", "device-mode- content-clip vbox");
40 this._responsivePresetsContainer = this._contentClip.createChild("div", "device-mode-presets-container"); 40 this._responsivePresetsContainer = this._contentClip.createChild("div", "device-mode-presets-container");
41 this._populatePresetsContainer(); 41 this._populatePresetsContainer();
42 this._mediaInspectorContainer = this._contentClip.createChild("div", "de vice-mode-media-container"); 42 this._mediaInspectorContainer = this._contentClip.createChild("div", "de vice-mode-media-container");
43 this._contentArea = this._contentClip.createChild("div", "device-mode-co ntent-area"); 43 this._contentArea = this._contentClip.createChild("div", "device-mode-co ntent-area");
44 44
45 this._screenArea = this._contentArea.createChild("div", "device-mode-scr een-area"); 45 this._screenArea = this._contentArea.createChild("div", "device-mode-scr een-area");
46 this._screenImage = this._screenArea.createChild("img", "device-mode-scr een-image hidden"); 46 this._screenImage = this._screenArea.createChild("img", "device-mode-scr een-image hidden");
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 willHide: function() 336 willHide: function()
337 { 337 {
338 this._model.emulate(WebInspector.DeviceModeModel.Type.None, null, null); 338 this._model.emulate(WebInspector.DeviceModeModel.Type.None, null, null);
339 this._mediaInspector.setEnabled(false); 339 this._mediaInspector.setEnabled(false);
340 }, 340 },
341 341
342 __proto__: WebInspector.VBox.prototype 342 __proto__: WebInspector.VBox.prototype
343 } 343 }
344 344
345 /** 345 /**
346 * @param {!WebInspector.DeviceModeModel} model
347 * @param {!WebInspector.Setting} showMediaInspectorSetting
348 * @param {!WebInspector.Setting} showRulersSetting
349 * @constructor
350 */
351 WebInspector.DeviceModeView.Toolbar = function(model, showMediaInspectorSetting, showRulersSetting)
352 {
353 this._model = model;
354 this._showMediaInspectorSetting = showMediaInspectorSetting;
355 this._showRulersSetting = showRulersSetting;
356 /** @type {!Map<!WebInspector.EmulatedDevice, !WebInspector.EmulatedDevice.M ode>} */
357 this._lastMode = new Map();
358
359 this._element = createElementWithClass("div", "device-mode-toolbar");
360
361 var leftContainer = this._element.createChild("div", "device-mode-toolbar-sp acer");
362 leftContainer.createChild("div", "device-mode-toolbar-spacer");
363 var leftToolbar = new WebInspector.Toolbar("", leftContainer);
364 leftToolbar.makeWrappable();
365 this._fillLeftToolbar(leftToolbar);
366
367 var mainToolbar = new WebInspector.Toolbar("", this._element);
368 mainToolbar.makeWrappable();
369 this._fillMainToolbar(mainToolbar);
370
371 var rightContainer = this._element.createChild("div", "device-mode-toolbar-s pacer");
372 var rightToolbar = new WebInspector.Toolbar("device-mode-toolbar-fixed-size" , rightContainer);
373 rightToolbar.makeWrappable();
374 this._fillRightToolbar(rightToolbar);
375 var modeToolbar = new WebInspector.Toolbar("device-mode-toolbar-fixed-size", rightContainer);
376 modeToolbar.makeWrappable();
377 this._fillModeToolbar(modeToolbar);
378 rightContainer.createChild("div", "device-mode-toolbar-spacer");
379 var optionsToolbar = new WebInspector.Toolbar("", rightContainer);
380 optionsToolbar.makeWrappable(true);
381 this._fillOptionsToolbar(optionsToolbar);
382
383 WebInspector.emulatedDevicesList.addEventListener(WebInspector.EmulatedDevic esList.Events.CustomDevicesUpdated, this._deviceListChanged, this);
384 WebInspector.emulatedDevicesList.addEventListener(WebInspector.EmulatedDevic esList.Events.StandardDevicesUpdated, this._deviceListChanged, this);
385
386 this._persistenceSetting = WebInspector.settings.createSetting("emulation.de viceModeValue", {device: "", orientation: "", mode: ""});
387 }
388
389 WebInspector.DeviceModeView.Toolbar.prototype = {
390 /**
391 * @param {!WebInspector.Toolbar} toolbar
392 */
393 _fillLeftToolbar: function(toolbar)
394 {
395 toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass(" div", "device-mode-empty-toolbar-element")));
396 this._deviceSelectItem = new WebInspector.ToolbarMenuButton(this._append DeviceMenuItems.bind(this));
397 this._deviceSelectItem.setGlyph("");
398 this._deviceSelectItem.turnIntoSelect(95);
399 toolbar.appendToolbarItem(this._deviceSelectItem);
400 },
401
402 /**
403 * @param {!WebInspector.Toolbar} toolbar
404 */
405 _fillMainToolbar: function(toolbar)
406 {
407 var widthInput = createElementWithClass("input", "device-mode-size-input ");
408 widthInput.maxLength = 4;
409 widthInput.type = "text";
410 widthInput.title = WebInspector.UIString("Width");
411 this._updateWidthInput = this._bindInput(widthInput, this._model.setWidt hAndScaleToFit.bind(this._model), WebInspector.DeviceModeModel.deviceSizeValidat or);
412 this._widthInput = widthInput;
413 this._widthItem = this._wrapToolbarItem(widthInput);
414 toolbar.appendToolbarItem(this._widthItem);
415
416 var xElement = createElementWithClass("div", "device-mode-x");
417 xElement.textContent = "\u00D7";
418 this._xItem = this._wrapToolbarItem(xElement);
419 toolbar.appendToolbarItem(this._xItem);
420
421 var heightInput = createElementWithClass("input", "device-mode-size-inpu t");
422 heightInput.maxLength = 4;
423 heightInput.type = "text";
424 heightInput.title = WebInspector.UIString("Height (leave empty for full) ");
425 this._updateHeightInput = this._bindInput(heightInput, this._model.setHe ightAndScaleToFit.bind(this._model), validateHeight);
426 this._heightInput = heightInput;
427 this._heightItem = this._wrapToolbarItem(heightInput);
428 toolbar.appendToolbarItem(this._heightItem);
429
430 /**
431 * @param {string} value
432 * @return {string}
433 */
434 function validateHeight(value)
435 {
436 return !value ? "" : WebInspector.DeviceModeModel.deviceSizeValidato r(value);
437 }
438 },
439
440 /**
441 * @param {!WebInspector.Toolbar} toolbar
442 */
443 _fillRightToolbar: function(toolbar)
444 {
445 toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass(" div", "device-mode-empty-toolbar-element")));
446 this._scaleItem = new WebInspector.ToolbarMenuButton(this._appendScaleMe nuItems.bind(this));
447 this._scaleItem.setTitle(WebInspector.UIString("Zoom"));
448 this._scaleItem.setGlyph("");
449 this._scaleItem.turnIntoSelect();
450 toolbar.appendToolbarItem(this._scaleItem);
451 },
452
453 /**
454 * @param {!WebInspector.Toolbar} toolbar
455 */
456 _fillModeToolbar: function(toolbar)
457 {
458 toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass(" div", "device-mode-empty-toolbar-element")));
459 this._modeButton = new WebInspector.ToolbarButton("", "rotate-screen-too lbar-item");
460 this._modeButton.addEventListener("click", this._modeMenuClicked, this);
461 toolbar.appendToolbarItem(this._modeButton);
462 },
463
464 /**
465 * @param {!WebInspector.Toolbar} toolbar
466 */
467 _fillOptionsToolbar: function(toolbar)
468 {
469 this._uaItem = new WebInspector.ToolbarText();
470 this._uaItem.setVisible(false);
471 this._uaItem.setTitle(WebInspector.UIString("User agent type"));
472 toolbar.appendToolbarItem(this._uaItem);
473
474 this._deviceScaleItem = new WebInspector.ToolbarText();
475 this._deviceScaleItem.setVisible(false);
476 this._deviceScaleItem.setTitle(WebInspector.UIString("Device pixel ratio "));
477 toolbar.appendToolbarItem(this._deviceScaleItem);
478
479 var moreOptionsButton = new WebInspector.ToolbarMenuButton(this._appendO ptionsMenuItems.bind(this));
480 moreOptionsButton.setTitle(WebInspector.UIString("More options"));
481 toolbar.appendToolbarItem(moreOptionsButton);
482
483 toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass(" div", "device-mode-empty-toolbar-element")));
484 },
485
486
487 /**
488 * @param {!Element} input
489 * @param {function(number)} apply
490 * @param {function(string):?string} validate
491 * @return {function(number)}
492 */
493 _bindInput: function(input, apply, validate)
494 {
495 input.addEventListener("change", onChange, false);
496 input.addEventListener("input", onInput, false);
497 input.addEventListener("keydown", onKeyDown, false);
498 input.addEventListener("focus", input.select.bind(input), false);
499
500 function onInput()
501 {
502 input.classList.toggle("error-input", !!validate(input.value));
503 }
504
505 function onChange()
506 {
507 var valid = !validate(input.value);
508 input.classList.toggle("error-input", !valid);
509 if (valid)
510 apply(input.value ? Number(input.value) : 0);
511 }
512
513 /**
514 * @param {!Event} event
515 */
516 function onKeyDown(event)
517 {
518 if (isEnterKey(event)) {
519 if (!validate(input.value))
520 apply(input.value ? Number(input.value) : 0);
521 return;
522 }
523
524 var increment = event.keyIdentifier === "Up" ? 1 : event.keyIdentifi er === "Down" ? -1 : 0;
525 if (!increment)
526 return;
527 if (event.shiftKey)
528 increment *= 10;
529
530 var value = input.value;
531 if (validate(value) || !value)
532 return;
533
534 value = (value ? Number(value) : 0) + increment;
535 var stringValue = value ? String(value) : "";
536 if (validate(stringValue) || !value)
537 return;
538
539 input.value = stringValue;
540 apply(input.value ? Number(input.value) : 0);
541 event.preventDefault();
542 }
543
544 /**
545 * @param {number} value
546 */
547 function setValue(value)
548 {
549 var stringValue = value ? String(value) : "";
550 if (stringValue === input.value)
551 return;
552 var valid = !validate(stringValue);
553 input.classList.toggle("error-input", !valid);
554 input.value = stringValue;
555 input.setSelectionRange(stringValue.length, stringValue.length);
556 }
557
558 return setValue;
559 },
560
561 /**
562 * @param {!WebInspector.ContextMenu} contextMenu
563 */
564 _appendScaleMenuItems: function(contextMenu)
565 {
566 var scaleSetting = this._model.scaleSetting();
567 if (this._model.type() === WebInspector.DeviceModeModel.Type.Device) {
568 contextMenu.appendItem(WebInspector.UIString("Fit to window (%.0f%%) ", this._model.fitScale() * 100), scaleSetting.set.bind(scaleSetting, this._mode l.fitScale()), false);
569 contextMenu.appendSeparator();
570 }
571 appendScaleItem(WebInspector.UIString("50%"), 0.5);
572 appendScaleItem(WebInspector.UIString("75%"), 0.75);
573 appendScaleItem(WebInspector.UIString("100%"), 1);
574 appendScaleItem(WebInspector.UIString("125%"), 1.25);
575 appendScaleItem(WebInspector.UIString("150%"), 1.5);
576
577 /**
578 * @param {string} title
579 * @param {number} value
580 */
581 function appendScaleItem(title, value)
582 {
583 contextMenu.appendCheckboxItem(title, scaleSetting.set.bind(scaleSet ting, value), scaleSetting.get() === value, false);
584 }
585 },
586
587 /**
588 * @param {!WebInspector.ContextMenu} contextMenu
589 */
590 _appendOptionsMenuItems: function(contextMenu)
591 {
592 var uaDisabled = this._model.type() !== WebInspector.DeviceModeModel.Typ e.Responsive;
593 var uaSetting = this._model.uaSetting();
594 var uaSubmenu = contextMenu.appendSubMenuItem(WebInspector.UIString("Use r agent type"), false);
595 var uaValue = this._model.uaSetting().get();
596 if (this._model.type() === WebInspector.DeviceModeModel.Type.None)
597 uaValue = WebInspector.DeviceModeModel.UA.Desktop;
598 if (this._model.type() === WebInspector.DeviceModeModel.Type.Device)
599 uaValue = this._model.device().mobile() ? WebInspector.DeviceModeMod el.UA.Mobile : this._model.device().touch() ? WebInspector.DeviceModeModel.UA.De sktopTouch : WebInspector.DeviceModeModel.UA.Desktop;
600 appendUAItem(WebInspector.UIString("Mobile (default)"), WebInspector.Dev iceModeModel.UA.Mobile);
601 appendUAItem(WebInspector.UIString("Desktop"), WebInspector.DeviceModeMo del.UA.Desktop);
602 appendUAItem(WebInspector.UIString("Desktop with touch"), WebInspector.D eviceModeModel.UA.DesktopTouch);
603
604 /**
605 * @param {string} title
606 * @param {!WebInspector.DeviceModeModel.UA} value
607 */
608 function appendUAItem(title, value)
609 {
610 uaSubmenu.appendCheckboxItem(title, uaSetting.set.bind(uaSetting, va lue), uaValue === value, uaDisabled);
611 }
612
613 var deviceScaleFactorDisabled = this._model.type() !== WebInspector.Devi ceModeModel.Type.Responsive;
614 var deviceScaleFactorSubmenu = contextMenu.appendSubMenuItem(WebInspecto r.UIString("Device pixel ratio"), false);
615 var deviceScaleFactorSetting = this._model.deviceScaleFactorSetting();
616 var deviceScaleFactorValue = deviceScaleFactorDisabled ? 0 : deviceScale FactorSetting.get();
617 appendDeviceScaleFactorItem(WebInspector.UIString("Default: %f", this._m odel.defaultDeviceScaleFactor()), 0);
618 deviceScaleFactorSubmenu.appendSeparator();
619 appendDeviceScaleFactorItem(WebInspector.UIString("1"), 1);
620 appendDeviceScaleFactorItem(WebInspector.UIString("2"), 2);
621 appendDeviceScaleFactorItem(WebInspector.UIString("3"), 3);
622
623 /**
624 * @param {string} title
625 * @param {number} value
626 */
627 function appendDeviceScaleFactorItem(title, value)
628 {
629 deviceScaleFactorSubmenu.appendCheckboxItem(title, deviceScaleFactor Setting.set.bind(deviceScaleFactorSetting, value), deviceScaleFactorValue === va lue, deviceScaleFactorDisabled);
630 }
631
632 contextMenu.appendItem(WebInspector.UIString("Reset to defaults"), this. _model.reset.bind(this._model), this._model.type() !== WebInspector.DeviceModeMo del.Type.Responsive);
633 contextMenu.appendSeparator();
634
635 contextMenu.appendCheckboxItem(WebInspector.UIString("Show media queries "), this._toggleMediaInspector.bind(this), this._showMediaInspectorSetting.get() , this._model.type() === WebInspector.DeviceModeModel.Type.None);
636 contextMenu.appendCheckboxItem(WebInspector.UIString("Show rulers"), thi s._toggleRulers.bind(this), this._showRulersSetting.get(), this._model.type() == = WebInspector.DeviceModeModel.Type.None);
637 contextMenu.appendItem(WebInspector.UIString("Configure network\u2026"), this._openNetworkConfig.bind(this), false);
638 contextMenu.appendItemsAtLocation("deviceModeMenu");
639 },
640
641 _toggleMediaInspector: function()
642 {
643 this._showMediaInspectorSetting.set(!this._showMediaInspectorSetting.get ());
644 },
645
646 _toggleRulers: function()
647 {
648 this._showRulersSetting.set(!this._showRulersSetting.get());
649 },
650
651 _openNetworkConfig: function()
652 {
653 InspectorFrontendHost.bringToFront();
654 // TODO(dgozman): make it explicit.
655 WebInspector.actionRegistry.action("network.show-config").execute();
656 },
657
658 /**
659 * @param {!Element} element
660 * @return {!WebInspector.ToolbarItem}
661 */
662 _wrapToolbarItem: function(element)
663 {
664 var container = createElement("div");
665 var shadowRoot = WebInspector.createShadowRootWithCoreStyles(container, "emulation/deviceModeToolbar.css");
666 shadowRoot.appendChild(element);
667 return new WebInspector.ToolbarItem(container);
668 },
669
670 /**
671 * @param {!WebInspector.EmulatedDevice} device
672 */
673 _emulateDevice: function(device)
674 {
675 this._model.emulate(WebInspector.DeviceModeModel.Type.Device, device, th is._lastMode.get(device) || device.modes[0]);
676 },
677
678 _switchToResponsive: function()
679 {
680 this._model.emulate(WebInspector.DeviceModeModel.Type.Responsive, null, null);
681 },
682
683 /**
684 * @param {!Array<!WebInspector.EmulatedDevice>} devices
685 * @return {!Array<!WebInspector.EmulatedDevice>}
686 */
687 _filterDevices: function(devices)
688 {
689 devices = devices.filter(function(d) { return d.show(); });
690 devices.sort(WebInspector.EmulatedDevice.deviceComparator);
691 return devices;
692 },
693
694 /**
695 * @return {!Array<!WebInspector.EmulatedDevice>}
696 */
697 _standardDevices: function()
698 {
699 return this._filterDevices(WebInspector.emulatedDevicesList.standard());
700 },
701
702 /**
703 * @return {!Array<!WebInspector.EmulatedDevice>}
704 */
705 _customDevices: function()
706 {
707 return this._filterDevices(WebInspector.emulatedDevicesList.custom());
708 },
709
710 /**
711 * @return {!Array<!WebInspector.EmulatedDevice>}
712 */
713 _allDevices: function()
714 {
715 return this._standardDevices().concat(this._customDevices());
716 },
717
718 /**
719 * @param {!WebInspector.ContextMenu} contextMenu
720 */
721 _appendDeviceMenuItems: function(contextMenu)
722 {
723 contextMenu.appendCheckboxItem(WebInspector.UIString("Responsive"), this ._switchToResponsive.bind(this), this._model.type() === WebInspector.DeviceModeM odel.Type.Responsive, false);
724 appendGroup.call(this, this._standardDevices());
725 appendGroup.call(this, this._customDevices());
726 contextMenu.appendSeparator();
727 contextMenu.appendItem(WebInspector.UIString("Edit\u2026"), WebInspector .emulatedDevicesList.revealCustomSetting.bind(WebInspector.emulatedDevicesList), false);
728
729 /**
730 * @param {!Array<!WebInspector.EmulatedDevice>} devices
731 * @this {WebInspector.DeviceModeView.Toolbar}
732 */
733 function appendGroup(devices)
734 {
735 if (!devices.length)
736 return;
737 contextMenu.appendSeparator();
738 for (var device of devices)
739 contextMenu.appendCheckboxItem(device.title, this._emulateDevice .bind(this, device), this._model.device() === device, false);
740 }
741 },
742
743 /**
744 * @this {WebInspector.DeviceModeView.Toolbar}
745 */
746 _deviceListChanged: function()
747 {
748 if (!this._model.device())
749 return;
750
751 var devices = this._allDevices();
752 if (devices.indexOf(this._model.device()) === -1)
753 this._emulateDevice(devices[0] || WebInspector.emulatedDevicesList.s tandard()[0]);
754 },
755
756 /**
757 * @param {!WebInspector.Event} event
758 */
759 _modeMenuClicked: function(event)
760 {
761 var device = this._model.device();
762 var model = this._model;
763
764 if (device.modes.length === 2 && device.modes[0].orientation !== device. modes[1].orientation) {
765 model.emulate(model.type(), model.device(), model.mode() === device. modes[0] ? device.modes[1] : device.modes[0]);
766 return;
767 }
768
769 var contextMenu = new WebInspector.ContextMenu(/** @type {!Event} */ (ev ent.data),
770 false,
771 event.target.element.totalOffsetLeft(),
772 event.target.element.totalOffsetTop() + event.target.element.offsetH eight);
773 addOrientation(WebInspector.EmulatedDevice.Vertical, WebInspector.UIStri ng("Portrait"));
774 addOrientation(WebInspector.EmulatedDevice.Horizontal, WebInspector.UISt ring("Landscape"));
775 contextMenu.show();
776
777 /**
778 * @param {string} orientation
779 * @param {string} title
780 */
781 function addOrientation(orientation, title)
782 {
783 var modes = device.modesForOrientation(orientation);
784 if (!modes.length)
785 return;
786 if (modes.length === 1) {
787 addMode(modes[0], title);
788 } else {
789 for (var index = 0; index < modes.length; index++)
790 addMode(modes[index], title + " \u2013 " + modes[index].titl e);
791 }
792 }
793
794 /**
795 * @param {!WebInspector.EmulatedDevice.Mode} mode
796 * @param {string} title
797 */
798 function addMode(mode, title)
799 {
800 contextMenu.appendCheckboxItem(title, applyMode.bind(null, mode), mo del.mode() === mode, false);
801 }
802
803 /**
804 * @param {!WebInspector.EmulatedDevice.Mode} mode
805 */
806 function applyMode(mode)
807 {
808 model.emulate(model.type(), model.device(), mode);
809 }
810 },
811
812 /**
813 * @return {!Element}
814 */
815 element: function()
816 {
817 return this._element;
818 },
819
820 update: function()
821 {
822 if (this._model.type() !== this._cachedModelType) {
823 this._cachedModelType = this._model.type();
824 this._widthInput.disabled = this._model.type() !== WebInspector.Devi ceModeModel.Type.Responsive;
825 this._heightInput.disabled = this._model.type() !== WebInspector.Dev iceModeModel.Type.Responsive;
826 }
827
828 var size = this._model.appliedDeviceSize();
829 this._updateHeightInput(this._model.type() === WebInspector.DeviceModeMo del.Type.Responsive && this._model.isFullHeight() ? 0 : size.height);
830 this._updateWidthInput(size.width);
831 this._heightInput.placeholder = size.height;
832
833 if (this._model.scale() !== this._cachedScale) {
834 this._scaleItem.setText(WebInspector.UIString("%.0f%%", this._model. scale() * 100));
835 this._scaleItem.setState(this._model.scale() === 1 ? "off" : "on");
836 this._cachedScale = this._model.scale();
837 }
838
839 var deviceScale = this._model.deviceScaleFactorSetting().get();
840 this._deviceScaleItem.setVisible(this._model.type() === WebInspector.Dev iceModeModel.Type.Responsive && !!deviceScale);
841 if (deviceScale !== this._cachedDeviceScale) {
842 this._deviceScaleItem.setText(WebInspector.UIString("DPR: %.1f", dev iceScale));
843 this._cachedDeviceScale = deviceScale;
844 }
845
846 var uaType = this._model.type() === WebInspector.DeviceModeModel.Type.Re sponsive ? this._model.uaSetting().get() : WebInspector.DeviceModeModel.UA.Mobil e;
847 this._uaItem.setVisible(this._model.type() === WebInspector.DeviceModeMo del.Type.Responsive && uaType !== WebInspector.DeviceModeModel.UA.Mobile);
848 if (uaType !== this._cachedUaType) {
849 this._uaItem.setText(uaType === WebInspector.DeviceModeModel.UA.Desk top ? WebInspector.UIString("Desktop") : WebInspector.UIString("Touch"));
850 this._cachedUaType = uaType;
851 }
852
853 var deviceItemTitle = WebInspector.UIString("None");
854 if (this._model.type() === WebInspector.DeviceModeModel.Type.Responsive)
855 deviceItemTitle = WebInspector.UIString("Responsive");
856 if (this._model.type() === WebInspector.DeviceModeModel.Type.Device)
857 deviceItemTitle = this._model.device().title;
858 this._deviceSelectItem.setText(deviceItemTitle);
859
860 if (this._model.device() !== this._cachedModelDevice) {
861 var device = this._model.device();
862 this._modeButton.setVisible(!!device);
863 if (device) {
864 var modeCount = device ? device.modes.length : 0;
865 this._modeButton.setEnabled(modeCount >= 2);
866 this._modeButton.setTitle(modeCount === 2 ? WebInspector.UIStrin g("Rotate") : WebInspector.UIString("Screen options"));
867 }
868 this._cachedModelDevice = device;
869 }
870
871 if (this._model.type() === WebInspector.DeviceModeModel.Type.Device)
872 this._lastMode.set(/** @type {!WebInspector.EmulatedDevice} */ (this ._model.device()), /** @type {!WebInspector.EmulatedDevice.Mode} */ (this._model .mode()));
873
874 if (this._model.mode() !== this._cachedModelMode && this._model.type() ! == WebInspector.DeviceModeModel.Type.None) {
875 this._cachedModelMode = this._model.mode();
876 var value = this._persistenceSetting.get();
877 if (this._model.device()) {
878 value.device = this._model.device().title;
879 value.orientation = this._model.mode() ? this._model.mode().orie ntation : "";
880 value.mode = this._model.mode() ? this._model.mode().title : "";
881 } else {
882 value.device = "";
883 value.orientation = "";
884 value.mode = "";
885 }
886 this._persistenceSetting.set(value);
887 }
888 },
889
890 restore: function()
891 {
892 for (var device of this._allDevices()) {
893 if (device.title === this._persistenceSetting.get().device) {
894 for (var mode of device.modes) {
895 if (mode.orientation === this._persistenceSetting.get().orie ntation && mode.title === this._persistenceSetting.get().mode) {
896 this._lastMode.set(device, mode);
897 this._emulateDevice(device);
898 return;
899 }
900 }
901 }
902 }
903
904 this._model.emulate(WebInspector.DeviceModeModel.Type.Responsive, null, null);
905 }
906 }
907
908 /**
909 * @constructor 346 * @constructor
910 * @extends {WebInspector.VBox} 347 * @extends {WebInspector.VBox}
911 * @param {boolean} horizontal 348 * @param {boolean} horizontal
912 * @param {function(number)} applyCallback 349 * @param {function(number)} applyCallback
913 */ 350 */
914 WebInspector.DeviceModeView.Ruler = function(horizontal, applyCallback) 351 WebInspector.DeviceModeView.Ruler = function(horizontal, applyCallback)
915 { 352 {
916 WebInspector.VBox.call(this); 353 WebInspector.VBox.call(this);
917 this._contentElement = this.element.createChild("div", "device-mode-ruler fl ex-auto"); 354 this._contentElement = this.element.createChild("div", "device-mode-ruler fl ex-auto");
918 this._horizontal = horizontal; 355 this._horizontal = horizontal;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
1005 /** 442 /**
1006 * @param {number} size 443 * @param {number} size
1007 */ 444 */
1008 _onMarkerClick: function(size) 445 _onMarkerClick: function(size)
1009 { 446 {
1010 this._applyCallback.call(null, size); 447 this._applyCallback.call(null, size);
1011 }, 448 },
1012 449
1013 __proto__: WebInspector.VBox.prototype 450 __proto__: WebInspector.VBox.prototype
1014 } 451 }
1015
1016
1017 /**
1018 * @constructor
1019 * @implements {WebInspector.ActionDelegate}
1020 */
1021 WebInspector.DeviceModeView.ActionDelegate = function()
1022 {
1023 }
1024
1025 WebInspector.DeviceModeView.ActionDelegate.prototype = {
1026 /**
1027 * @override
1028 * @param {!WebInspector.Context} context
1029 * @param {string} actionId
1030 * @return {boolean}
1031 */
1032 handleAction: function(context, actionId)
1033 {
1034 if (WebInspector.DeviceModeView._wrapperInstance) {
1035 if (actionId === "emulation.toggle-device-mode") {
1036 WebInspector.DeviceModeView._wrapperInstance._toggleDeviceMode() ;
1037 return true;
1038 }
1039 if (actionId === "emulation.request-app-banner") {
1040 WebInspector.DeviceModeView._wrapperInstance._requestAppBanner() ;
1041 return true;
1042 }
1043 }
1044 return false;
1045 }
1046 }
1047
1048
1049 /**
1050 * @extends {WebInspector.VBox}
1051 * @param {!WebInspector.InspectedPagePlaceholder} inspectedPagePlaceholder
1052 * @constructor
1053 */
1054 WebInspector.DeviceModeView.Wrapper = function(inspectedPagePlaceholder)
1055 {
1056 WebInspector.VBox.call(this);
1057 WebInspector.DeviceModeView._wrapperInstance = this;
1058 this._inspectedPagePlaceholder = inspectedPagePlaceholder;
1059 /** @type {?WebInspector.DeviceModeView} */
1060 this._deviceModeView = null;
1061 this._toggleDeviceModeAction = WebInspector.actionRegistry.action("emulation .toggle-device-mode");
1062 this._showDeviceModeSetting = WebInspector.settings.createSetting("emulation .showDeviceMode", false);
1063 this._showDeviceModeSetting.addChangeListener(this._update.bind(this, false) );
1064 this._update(true);
1065 }
1066
1067 /** @type {!WebInspector.DeviceModeView.Wrapper} */
1068 WebInspector.DeviceModeView._wrapperInstance;
1069
1070 WebInspector.DeviceModeView.Wrapper.prototype = {
1071 _toggleDeviceMode: function()
1072 {
1073 this._showDeviceModeSetting.set(!this._showDeviceModeSetting.get());
1074 },
1075
1076 /**
1077 * @param {boolean} force
1078 */
1079 _update: function(force)
1080 {
1081 this._toggleDeviceModeAction.setToggled(this._showDeviceModeSetting.get( ));
1082 if (!force) {
1083 var showing = this._deviceModeView && this._deviceModeView.isShowing ();
1084 if (this._showDeviceModeSetting.get() === showing)
1085 return;
1086 }
1087
1088 if (this._showDeviceModeSetting.get()) {
1089 if (!this._deviceModeView)
1090 this._deviceModeView = new WebInspector.DeviceModeView();
1091 this._deviceModeView.show(this.element);
1092 this._inspectedPagePlaceholder.clearMinimumSizeAndMargins();
1093 this._inspectedPagePlaceholder.show(this._deviceModeView.element);
1094 } else {
1095 if (this._deviceModeView)
1096 this._deviceModeView.detach();
1097 this._inspectedPagePlaceholder.restoreMinimumSizeAndMargins();
1098 this._inspectedPagePlaceholder.show(this.element);
1099 }
1100 },
1101
1102 _requestAppBanner: function()
1103 {
1104 this._deviceModeView._model.requestAppBanner();
1105 },
1106
1107 __proto__: WebInspector.VBox.prototype
1108 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698