mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-09-23 18:22:57 +00:00
skim lines
This commit is contained in:
@@ -84,18 +84,13 @@ const Editor = forwardRef(
|
|||||||
|
|
||||||
const isView = (name)=>view === name;
|
const isView = (name)=>view === name;
|
||||||
|
|
||||||
//componentDidMount equivalent
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
const brewRenderer = document.getElementById('BrewRenderer');
|
const brewRenderer = document.getElementById('BrewRenderer');
|
||||||
brewRenderer.onload = ()=>brewRenderer.contentDocument?.addEventListener('keydown', handleControlKeys);
|
brewRenderer.onload = ()=>brewRenderer.contentDocument?.addEventListener('keydown', handleControlKeys);
|
||||||
document.addEventListener('keydown', handleControlKeys);
|
document.addEventListener('keydown', handleControlKeys);
|
||||||
|
|
||||||
const editorTheme = window.localStorage.getItem(EDITOR_THEME_KEY);
|
const editorTheme = window.localStorage.getItem(EDITOR_THEME_KEY);
|
||||||
if(editorTheme && EditorThemes.includes(editorTheme)) {
|
if(editorTheme && EditorThemes.includes(editorTheme)) setEditorTheme(editorTheme); else setEditorTheme('default');
|
||||||
setEditorTheme(editorTheme);
|
|
||||||
} else {
|
|
||||||
setEditorTheme('default');
|
|
||||||
}
|
|
||||||
const snippetBar = document.querySelector('.editor > .snippetBar');
|
const snippetBar = document.querySelector('.editor > .snippetBar');
|
||||||
if(!snippetBar) return;
|
if(!snippetBar) return;
|
||||||
|
|
||||||
@@ -103,55 +98,18 @@ const Editor = forwardRef(
|
|||||||
const height = document.querySelector('.editor > .snippetBar').offsetHeight;
|
const height = document.querySelector('.editor > .snippetBar').offsetHeight;
|
||||||
setSnippetBarHeight(height);
|
setSnippetBarHeight(height);
|
||||||
});
|
});
|
||||||
|
|
||||||
resizeObserver.observe(snippetBar);
|
resizeObserver.observe(snippetBar);
|
||||||
|
|
||||||
//ComponentWillUnmount equivalent
|
|
||||||
return ()=>{
|
return ()=>{
|
||||||
if(resizeObserver) resizeObserver.disconnect();
|
if(resizeObserver) resizeObserver.disconnect();
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const previousProps = useRef({
|
useEffect(()=>{ if(moveBrew) brewJump(); }, [moveBrew]);
|
||||||
moveBrew,
|
useEffect(()=>{ if(moveSource) sourceJump(); }, [moveSource]);
|
||||||
moveSource,
|
useEffect(()=>{ if(liveScroll) sourceJump(currentBrewRendererPageNum, false); }, [currentBrewRendererPageNum, liveScroll]);
|
||||||
currentBrewRendererPageNum,
|
useEffect(()=>{ if(liveScroll) brewJump(currentEditorViewPageNum, false); }, [currentEditorViewPageNum, liveScroll]);
|
||||||
currentEditorViewPageNum,
|
useEffect(()=>{ if(liveScroll) brewJump(currentEditorCursorPageNum, false); }, [currentEditorCursorPageNum, liveScroll]);
|
||||||
currentEditorCursorPageNum,
|
|
||||||
});
|
|
||||||
|
|
||||||
//componentDidUpdate Equivalent
|
|
||||||
useEffect(()=>{
|
|
||||||
const prev = previousProps.current;
|
|
||||||
|
|
||||||
if(prev.moveBrew !== moveBrew) brewJump();
|
|
||||||
if(prev.moveSource !== moveSource) sourceJump();
|
|
||||||
|
|
||||||
if(liveScroll) {
|
|
||||||
if(prev.currentBrewRendererPageNum !== currentBrewRendererPageNum) {
|
|
||||||
sourceJump(currentBrewRendererPageNum, false);
|
|
||||||
} else if(prev.currentEditorViewPageNum !== currentEditorViewPageNum) {
|
|
||||||
brewJump(currentEditorViewPageNum, false);
|
|
||||||
} else if(prev.currentEditorCursorPageNum !== currentEditorCursorPageNum) {
|
|
||||||
brewJump(currentEditorCursorPageNum, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
previousProps.current = {
|
|
||||||
moveBrew,
|
|
||||||
moveSource,
|
|
||||||
currentBrewRendererPageNum,
|
|
||||||
currentEditorViewPageNum,
|
|
||||||
currentEditorCursorPageNum,
|
|
||||||
};
|
|
||||||
}, [
|
|
||||||
moveBrew,
|
|
||||||
moveSource,
|
|
||||||
liveScroll,
|
|
||||||
currentBrewRendererPageNum,
|
|
||||||
currentEditorViewPageNum,
|
|
||||||
currentEditorCursorPageNum,
|
|
||||||
]);
|
|
||||||
|
|
||||||
const handleControlKeys = (e)=>{
|
const handleControlKeys = (e)=>{
|
||||||
if(!(e.ctrlKey && e.metaKey && e.shiftKey)) return;
|
if(!(e.ctrlKey && e.metaKey && e.shiftKey)) return;
|
||||||
@@ -164,6 +122,7 @@ const Editor = forwardRef(
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const updateCurrentCursorPage = (pageNumber)=>{
|
const updateCurrentCursorPage = (pageNumber)=>{
|
||||||
onCursorPageChange(pageNumber);
|
onCursorPageChange(pageNumber);
|
||||||
};
|
};
|
||||||
@@ -180,7 +139,6 @@ const Editor = forwardRef(
|
|||||||
setMoveArrows(newView === 'text');
|
setMoveArrows(newView === 'text');
|
||||||
setView(newView);
|
setView(newView);
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
codeEditor.current?.focus();
|
codeEditor.current?.focus();
|
||||||
}, [view]);
|
}, [view]);
|
||||||
@@ -189,25 +147,25 @@ const Editor = forwardRef(
|
|||||||
if(!window || !isText() || isJumping || jumpSource === 'source') return;
|
if(!window || !isText() || isJumping || jumpSource === 'source') return;
|
||||||
|
|
||||||
const brewRenderer =
|
const brewRenderer =
|
||||||
window.frames['BrewRenderer'].contentDocument.getElementsByClassName('brewRenderer')[0];
|
window.frames['BrewRenderer'].contentDocument.getElementsByClassName('brewRenderer')[0];
|
||||||
|
|
||||||
const currentPos = brewRenderer.scrollTop;
|
const currentPos = brewRenderer.scrollTop;
|
||||||
|
|
||||||
const targetPos = window.frames['BrewRenderer'].contentDocument
|
const targetPos = window.frames['BrewRenderer'].contentDocument
|
||||||
.getElementById(`p${targetPage}`)
|
.getElementById(`p${targetPage}`)
|
||||||
.getBoundingClientRect().top;
|
.getBoundingClientRect().top;
|
||||||
|
|
||||||
let scrollingTimeout;
|
let scrollingTimeout;
|
||||||
|
|
||||||
const checkIfScrollComplete = ()=>{
|
const checkIfScrollComplete = ()=>{// Prevent interrupting a scroll in progress if user clicks multiple times
|
||||||
clearTimeout(scrollingTimeout);
|
clearTimeout(scrollingTimeout);// Reset the timer every time a scroll event occurs
|
||||||
|
|
||||||
scrollingTimeout = setTimeout(()=>{
|
scrollingTimeout = setTimeout(()=>{
|
||||||
isJumping = false;
|
isJumping = false;
|
||||||
jumpSource = null;
|
jumpSource = null;
|
||||||
|
|
||||||
brewRenderer.removeEventListener('scroll', checkIfScrollComplete);
|
brewRenderer.removeEventListener('scroll', checkIfScrollComplete);
|
||||||
}, 150);
|
}, 150);// If 150 ms pass without a brewRenderer scroll event, assume scrolling is done
|
||||||
};
|
};
|
||||||
|
|
||||||
isJumping = true;
|
isJumping = true;
|
||||||
@@ -217,31 +175,20 @@ const Editor = forwardRef(
|
|||||||
brewRenderer.addEventListener('scroll', checkIfScrollComplete);
|
brewRenderer.addEventListener('scroll', checkIfScrollComplete);
|
||||||
|
|
||||||
if(smooth) {
|
if(smooth) {
|
||||||
const bouncePos = targetPos >= 0 ? -30 : 30;
|
const bouncePos = targetPos >= 0 ? -30 : 30; //Do a little bounce before scrolling
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
|
|
||||||
// leading: true, trailing: false, 500ms throttle
|
|
||||||
if(now - throttleBrewMove.current >= 500) {
|
if(now - throttleBrewMove.current >= 500) {
|
||||||
throttleBrewMove.current = now;
|
throttleBrewMove.current = now;
|
||||||
|
|
||||||
brewRenderer.scrollTo({
|
brewRenderer.scrollTo({ top: currentPos + bouncePos, behavior: 'smooth' });
|
||||||
top : currentPos + bouncePos,
|
|
||||||
behavior : 'smooth',
|
|
||||||
});
|
|
||||||
|
|
||||||
setTimeout(()=>{
|
setTimeout(()=>{
|
||||||
brewRenderer.scrollTo({
|
brewRenderer.scrollTo({ top: currentPos + targetPos, behavior: 'smooth', block: 'start' });
|
||||||
top : currentPos + targetPos,
|
|
||||||
behavior : 'smooth',
|
|
||||||
block : 'start',
|
|
||||||
});
|
|
||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
brewRenderer.scrollTo({
|
brewRenderer.scrollTo({ top : currentPos + targetPos, behavior : 'instant', block : 'start',
|
||||||
top : currentPos + targetPos,
|
|
||||||
behavior : 'instant',
|
|
||||||
block : 'start',
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -249,11 +196,10 @@ const Editor = forwardRef(
|
|||||||
const sourceJump = (targetPage = currentBrewRendererPageNum, smooth = true)=>{
|
const sourceJump = (targetPage = currentBrewRendererPageNum, smooth = true)=>{
|
||||||
if(!isText() || isJumping || jumpSource === 'brew') return;
|
if(!isText() || isJumping || jumpSource === 'brew') return;
|
||||||
|
|
||||||
const editor = codeEditor.current;
|
if(!codeEditor.current) return;
|
||||||
if(!editor) return;
|
|
||||||
jumpSource = 'source';
|
jumpSource = 'source';
|
||||||
|
|
||||||
editor.scrollToPage(targetPage);
|
codeEditor.current.scrollToPage(targetPage);
|
||||||
setTimeout(()=>{
|
setTimeout(()=>{
|
||||||
jumpSource = null;
|
jumpSource = null;
|
||||||
}, 200);
|
}, 200);
|
||||||
@@ -303,20 +249,6 @@ const Editor = forwardRef(
|
|||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if(isMeta()) {
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<CodeEditor key='codeEditor' view={view} style={{ display: 'none' }} />
|
|
||||||
<MetadataEditor
|
|
||||||
metadata={brew}
|
|
||||||
themeBundle={themeBundle}
|
|
||||||
onChange={onBrewChange('metadata')}
|
|
||||||
reportError={reportError}
|
|
||||||
userThemes={userThemes}
|
|
||||||
/>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if(isSnip()) {
|
if(isSnip()) {
|
||||||
if(!brew.snippets) {
|
if(!brew.snippets) {
|
||||||
brew.snippets = DEFAULT_SNIPPET_TEXT;
|
brew.snippets = DEFAULT_SNIPPET_TEXT;
|
||||||
@@ -339,13 +271,29 @@ const Editor = forwardRef(
|
|||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if(isMeta()) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<CodeEditor key='codeEditor' view={view} style={{ display: 'none' }} />
|
||||||
|
<MetadataEditor
|
||||||
|
metadata={brew}
|
||||||
|
themeBundle={themeBundle}
|
||||||
|
onChange={onBrewChange('metadata')}
|
||||||
|
reportError={reportError}
|
||||||
|
userThemes={userThemes}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const redo = ()=>codeEditor.current?.redo();
|
const redo = ()=>codeEditor.current?.redo();
|
||||||
const historySize = ()=>codeEditor.current?.historySize();
|
const historySize = ()=>codeEditor.current?.historySize();
|
||||||
const undo = ()=>codeEditor.current?.undo();
|
const undo = ()=>codeEditor.current?.undo();
|
||||||
const foldCode = ()=>codeEditor.current?.foldAll();
|
const foldCode = ()=>codeEditor.current?.foldAll();
|
||||||
const unfoldCode = ()=>codeEditor.current?.unfoldAll();
|
const unfoldCode = ()=>codeEditor.current?.unfoldAll();
|
||||||
|
|
||||||
|
//Called when there are changes to the editor's dimensions
|
||||||
const update = ()=>{};
|
const update = ()=>{};
|
||||||
|
|
||||||
useImperativeHandle(ref, ()=>({
|
useImperativeHandle(ref, ()=>({
|
||||||
@@ -382,7 +330,7 @@ const Editor = forwardRef(
|
|||||||
{renderEditor()}
|
{renderEditor()}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
},
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
export default Editor;
|
export default Editor;
|
||||||
|
|||||||
Reference in New Issue
Block a user