kopia lustrzana https://github.com/shoelace-style/shoelace
				
				
				
			Prevent iframes from stealing events while dragging
							rodzic
							
								
									e055fe9027
								
							
						
					
					
						commit
						e361a5cad7
					
				| 
						 | 
				
			
			@ -17,6 +17,18 @@
 | 
			
		|||
  padding: 1.5rem 3.25rem 1.5rem 1.5rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Block the preview while dragging to prevent iframes from intercepting drag events */
 | 
			
		||||
.code-block__preview--dragging::after {
 | 
			
		||||
  content: '';
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: 0;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  opacity: 0;
 | 
			
		||||
  cursor: ew-resize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.code-block__resizer {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -98,35 +98,37 @@
 | 
			
		|||
 | 
			
		||||
    // Horizontal resizing
 | 
			
		||||
    hook.doneEach(() => {
 | 
			
		||||
      [...document.querySelectorAll('.code-block__preview')].map(resizeElement => {
 | 
			
		||||
        const resizer = resizeElement.querySelector('.code-block__resizer');
 | 
			
		||||
      [...document.querySelectorAll('.code-block__preview')].map(preview => {
 | 
			
		||||
        const resizer = preview.querySelector('.code-block__resizer');
 | 
			
		||||
        let startX;
 | 
			
		||||
        let startY;
 | 
			
		||||
        let startWidth;
 | 
			
		||||
        let startHeight;
 | 
			
		||||
 | 
			
		||||
        const initDrag = event => {
 | 
			
		||||
        const dragStart = event => {
 | 
			
		||||
          startX = event.clientX;
 | 
			
		||||
          startY = event.clientY;
 | 
			
		||||
          startWidth = parseInt(document.defaultView.getComputedStyle(resizeElement).width, 10);
 | 
			
		||||
          startHeight = parseInt(document.defaultView.getComputedStyle(resizeElement).height, 10);
 | 
			
		||||
          document.documentElement.addEventListener('mousemove', doDrag, false);
 | 
			
		||||
          document.documentElement.addEventListener('mouseup', stopDrag, false);
 | 
			
		||||
          startWidth = parseInt(document.defaultView.getComputedStyle(preview).width, 10);
 | 
			
		||||
          startHeight = parseInt(document.defaultView.getComputedStyle(preview).height, 10);
 | 
			
		||||
          preview.classList.add('code-block__preview--dragging');
 | 
			
		||||
          document.documentElement.addEventListener('mousemove', dragMove, false);
 | 
			
		||||
          document.documentElement.addEventListener('mouseup', dragStop, false);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        const doDrag = event => {
 | 
			
		||||
        const dragMove = event => {
 | 
			
		||||
          setWidth(startWidth + event.clientX - startX);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        const stopDrag = event => {
 | 
			
		||||
          document.documentElement.removeEventListener('mousemove', doDrag, false);
 | 
			
		||||
          document.documentElement.removeEventListener('mouseup', stopDrag, false);
 | 
			
		||||
        const dragStop = event => {
 | 
			
		||||
          preview.classList.remove('code-block__preview--dragging');
 | 
			
		||||
          document.documentElement.removeEventListener('mousemove', dragMove, false);
 | 
			
		||||
          document.documentElement.removeEventListener('mouseup', dragStop, false);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        const handleKeyDown = event => {
 | 
			
		||||
          if (['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) {
 | 
			
		||||
            const currentWidth = resizeElement.clientWidth;
 | 
			
		||||
            const maxWidth = resizeElement.parentElement.clientWidth;
 | 
			
		||||
            const currentWidth = preview.clientWidth;
 | 
			
		||||
            const maxWidth = preview.parentElement.clientWidth;
 | 
			
		||||
            const incr = event.shiftKey ? 100 : 10;
 | 
			
		||||
 | 
			
		||||
            event.preventDefault();
 | 
			
		||||
| 
						 | 
				
			
			@ -139,16 +141,16 @@
 | 
			
		|||
        };
 | 
			
		||||
 | 
			
		||||
        const setWidth = width => {
 | 
			
		||||
          resizeElement.style.width = width + 'px';
 | 
			
		||||
          preview.style.width = width + 'px';
 | 
			
		||||
 | 
			
		||||
          const totalWidth = resizeElement.parentElement.clientWidth;
 | 
			
		||||
          const currentWidth = resizeElement.clientWidth;
 | 
			
		||||
          const totalWidth = preview.parentElement.clientWidth;
 | 
			
		||||
          const currentWidth = preview.clientWidth;
 | 
			
		||||
          const valuenow = Math.round((currentWidth / totalWidth) * 100);
 | 
			
		||||
 | 
			
		||||
          resizer.setAttribute('aria-valuenow', valuenow);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        resizer.addEventListener('mousedown', initDrag);
 | 
			
		||||
        resizer.addEventListener('mousedown', dragStart);
 | 
			
		||||
        resizer.addEventListener('keydown', handleKeyDown);
 | 
			
		||||
      }, false);
 | 
			
		||||
    });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue