mirror of
				https://github.com/microsoft/playwright.git
				synced 2025-06-26 21:40:17 +00:00 
			
		
		
		
	feat(recorder): allow dragging toolbar (#5316)
This commit is contained in:
		
							parent
							
								
									d1aad632ee
								
							
						
					
					
						commit
						c1b08f1a8c
					
				@ -138,7 +138,7 @@ export class Recorder {
 | 
			
		||||
        </x-pw-button-group>
 | 
			
		||||
      </x-pw-toolbar>`;
 | 
			
		||||
 | 
			
		||||
    this._outerToolbarElement = html`<x-pw-div style="position: fixed; top: 100px; left: 10px; flex-direction: column; z-index: 2147483647;"></x-pw-div>`;
 | 
			
		||||
    this._outerToolbarElement = html`<x-pw-div style="position: fixed; top: 100px; left: 10px; flex-direction: column; z-index: 2147483646;"></x-pw-div>`;
 | 
			
		||||
    const toolbarShadow = this._outerToolbarElement.attachShadow({ mode: 'open' });
 | 
			
		||||
    toolbarShadow.appendChild(this._toolbar);
 | 
			
		||||
 | 
			
		||||
@ -153,6 +153,37 @@ export class Recorder {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private _hydrate() {
 | 
			
		||||
    this._toolbar.addEventListener('mousedown', e => {
 | 
			
		||||
      if (e.target !== this._toolbar)
 | 
			
		||||
        return;
 | 
			
		||||
      this._outerGlassPaneElement.style.pointerEvents = 'initial';
 | 
			
		||||
      this._outerGlassPaneElement.style.cursor = 'grab';
 | 
			
		||||
      this._outerGlassPaneElement.setAttribute('tabIndex', '0');
 | 
			
		||||
      const offsetLeft = e.pageX - this._outerToolbarElement.offsetLeft;
 | 
			
		||||
      const offsetTop = e.pageY - this._outerToolbarElement.offsetTop;
 | 
			
		||||
      const toolbarWidth = this._outerToolbarElement.offsetWidth;
 | 
			
		||||
      const toolbarHeight = this._outerToolbarElement.offsetHeight;
 | 
			
		||||
      const glassWidth = this._outerGlassPaneElement.offsetWidth;
 | 
			
		||||
      const glassHeight = this._outerGlassPaneElement.offsetHeight;
 | 
			
		||||
      const maxX = glassWidth - toolbarWidth;
 | 
			
		||||
      const maxY = glassHeight - toolbarHeight;
 | 
			
		||||
      const onMouseMove = (e: MouseEvent) => {
 | 
			
		||||
        this._outerToolbarElement.style.top = Math.min(maxY, Math.max(e.pageY - offsetTop, 0)) + 'px';
 | 
			
		||||
        this._outerToolbarElement.style.left = Math.min(maxX, Math.max(e.pageX - offsetLeft, 0)) + 'px';
 | 
			
		||||
      };
 | 
			
		||||
      const onMouseUp = () => {
 | 
			
		||||
        this._outerGlassPaneElement.removeEventListener('mousemove', onMouseMove);
 | 
			
		||||
        this._outerGlassPaneElement.removeEventListener('mouseup', onMouseUp);
 | 
			
		||||
        this._outerGlassPaneElement.removeEventListener('blur', onMouseUp);
 | 
			
		||||
        this._outerGlassPaneElement.style.pointerEvents = 'none';
 | 
			
		||||
        this._outerGlassPaneElement.style.background = 'initial';
 | 
			
		||||
        this._outerGlassPaneElement.removeAttribute('tabIndex');
 | 
			
		||||
        this._outerGlassPaneElement.style.cursor = 'initial';
 | 
			
		||||
      };
 | 
			
		||||
      this._outerGlassPaneElement.addEventListener('mousemove', onMouseMove);
 | 
			
		||||
      this._outerGlassPaneElement.addEventListener('mouseup', onMouseUp);
 | 
			
		||||
      this._outerGlassPaneElement.addEventListener('blur', onMouseUp);
 | 
			
		||||
    });
 | 
			
		||||
    this._toolbar.$('#pw-button-inspect').addEventListener('click', () => {
 | 
			
		||||
      if (this._toolbar.$('#pw-button-inspect').classList.contains('disabled'))
 | 
			
		||||
        return;
 | 
			
		||||
@ -197,7 +228,19 @@ export class Recorder {
 | 
			
		||||
      }, true),
 | 
			
		||||
    ];
 | 
			
		||||
    document.documentElement.appendChild(this._outerGlassPaneElement);
 | 
			
		||||
    if (window.top === window)
 | 
			
		||||
    if (window.top === window) {
 | 
			
		||||
      let moveCount = 0;
 | 
			
		||||
      this._listeners.push(addEventListener(document, 'mousedown', e => moveCount = 0));
 | 
			
		||||
      this._listeners.push(addEventListener(document, 'mousemove', e => {
 | 
			
		||||
        ++moveCount;
 | 
			
		||||
        if (++moveCount === 10)
 | 
			
		||||
          this._ensureToolbarVisible();
 | 
			
		||||
      }));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private _ensureToolbarVisible() {
 | 
			
		||||
    if (!this._outerToolbarElement.parentElement)
 | 
			
		||||
      document.documentElement.appendChild(this._outerToolbarElement);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -233,6 +276,8 @@ export class Recorder {
 | 
			
		||||
 | 
			
		||||
    if (isPaused !== this._state.isPaused) {
 | 
			
		||||
      this._state.isPaused = isPaused;
 | 
			
		||||
      if (isPaused)
 | 
			
		||||
        this._ensureToolbarVisible();
 | 
			
		||||
      this._toolbar.$('#pw-button-resume-group').classList.toggle('hidden', !isPaused);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -680,6 +725,8 @@ x-pw-toolbar {
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  fill: #333;
 | 
			
		||||
  flex: none;
 | 
			
		||||
  padding-top: 10px;
 | 
			
		||||
  cursor: grab;
 | 
			
		||||
}
 | 
			
		||||
x-pw-toolbar.vertical {
 | 
			
		||||
  flex-direction: column;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user