editor: autoswitch to next/prev editor on cursor movement
This commit is contained in:
		
							parent
							
								
									8809384264
								
							
						
					
					
						commit
						96b47e7bdd
					
				| 
						 | 
				
			
			@ -146,6 +146,12 @@ h2 .svg-icon, label .svg-icon {
 | 
			
		|||
#sections {
 | 
			
		||||
  counter-reset: codebox;
 | 
			
		||||
}
 | 
			
		||||
#sections > div > label {
 | 
			
		||||
  animation: 2s highlight;
 | 
			
		||||
  animation-play-state: paused;
 | 
			
		||||
  animation-direction: reverse;
 | 
			
		||||
  animation-fill-mode: both;
 | 
			
		||||
}
 | 
			
		||||
#sections > div > label::after {
 | 
			
		||||
  counter-increment: codebox;
 | 
			
		||||
  content: counter(codebox);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										54
									
								
								edit/edit.js
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								edit/edit.js
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -196,8 +196,8 @@ function initCodeMirror() {
 | 
			
		|||
 | 
			
		||||
  // additional commands
 | 
			
		||||
  CM.commands.jumpToLine = jumpToLine;
 | 
			
		||||
  CM.commands.nextEditor = cm => { nextPrevEditor(cm, 1); };
 | 
			
		||||
  CM.commands.prevEditor = cm => { nextPrevEditor(cm, -1); };
 | 
			
		||||
  CM.commands.nextEditor = cm => nextPrevEditor(cm, 1);
 | 
			
		||||
  CM.commands.prevEditor = cm => nextPrevEditor(cm, -1);
 | 
			
		||||
  CM.commands.save = save;
 | 
			
		||||
  CM.commands.blockComment = cm => {
 | 
			
		||||
    cm.blockComment(cm.getCursor('from'), cm.getCursor('to'), {fullLines: false});
 | 
			
		||||
| 
						 | 
				
			
			@ -385,6 +385,7 @@ function setupCodeMirror(textarea, index) {
 | 
			
		|||
    cm.on('changes', autocompleteOnTyping);
 | 
			
		||||
    cm.on('pick', autocompletePicked);
 | 
			
		||||
  }
 | 
			
		||||
  wrapper.addEventListener('keydown', event => nextPrevEditorOnKeydown(cm, event), true);
 | 
			
		||||
  cm.on('blur', () => {
 | 
			
		||||
    editors.lastActive = cm;
 | 
			
		||||
    hotkeyRerouter.setState(true);
 | 
			
		||||
| 
						 | 
				
			
			@ -1071,6 +1072,55 @@ function nextPrevEditor(cm, direction) {
 | 
			
		|||
  cm = editors[(editors.indexOf(cm) + direction + editors.length) % editors.length];
 | 
			
		||||
  makeSectionVisible(cm);
 | 
			
		||||
  cm.focus();
 | 
			
		||||
  return cm;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function nextPrevEditorOnKeydown(cm, event) {
 | 
			
		||||
  const key = event.which;
 | 
			
		||||
  if (key < 37 || key > 40 || event.shiftKey || event.altKey || event.metaKey) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  const {line, ch} = cm.getCursor();
 | 
			
		||||
  switch (key) {
 | 
			
		||||
    case 37:
 | 
			
		||||
      // arrow Left
 | 
			
		||||
      if (line || ch) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    // fallthrough to arrow Up
 | 
			
		||||
    case 38:
 | 
			
		||||
      // arrow Up
 | 
			
		||||
      if (line > 0 || cm === editors[0]) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      event.preventDefault();
 | 
			
		||||
      event.stopPropagation();
 | 
			
		||||
      cm = nextPrevEditor(cm, -1);
 | 
			
		||||
      cm.setCursor(cm.doc.size - 1, key === 37 ? 1e20 : ch);
 | 
			
		||||
      break;
 | 
			
		||||
    case 39:
 | 
			
		||||
      // arrow Right
 | 
			
		||||
      if (line < cm.doc.size - 1 || ch < cm.getLine(line).length - 1) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    // fallthrough to arrow Down
 | 
			
		||||
    case 40:
 | 
			
		||||
      // arrow Down
 | 
			
		||||
      if (line < cm.doc.size - 1 || cm === editors.last) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      event.preventDefault();
 | 
			
		||||
      event.stopPropagation();
 | 
			
		||||
      cm = nextPrevEditor(cm, 1);
 | 
			
		||||
      cm.setCursor(0, 0);
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  const animation = (cm.getSection().firstElementChild.getAnimations() || [])[0];
 | 
			
		||||
  if (animation) {
 | 
			
		||||
    animation.playbackRate = -1;
 | 
			
		||||
    animation.currentTime = 2000;
 | 
			
		||||
    animation.play();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getEditorInSight(nearbyElement) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user