mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-06-26 10:48:38 +00:00
crude basic animation and button
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
/* eslint max-lines: ["error", { "max": 400 }] */
|
/* eslint max-lines: ["error", { "max": 500 }] */
|
||||||
import './codeEditor.less';
|
import './codeEditor.less';
|
||||||
import React, { useEffect, useRef, forwardRef, useImperativeHandle } from 'react';
|
import React, { useEffect, useRef, forwardRef, useImperativeHandle } from 'react';
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ const themes = { default: defaultCM5Theme, ...cm5Themes, darkbrewery };
|
|||||||
const themeCompartment = new Compartment();
|
const themeCompartment = new Compartment();
|
||||||
const highlightCompartment = new Compartment();
|
const highlightCompartment = new Compartment();
|
||||||
|
|
||||||
import { generalKeymap, markdownKeymap, cssKeymap } from './customKeyMaps.js';
|
import { generalKeymap, markdownKeymap, cssKeymap, formatCSS } from './customKeyMaps.js';
|
||||||
import foldOnPages from './customFolding.js';
|
import foldOnPages from './customFolding.js';
|
||||||
import { customHighlightStyle, tokenizeCustomMarkdown, tokenizeCustomCSS } from './customHighlight.js';
|
import { customHighlightStyle, tokenizeCustomMarkdown, tokenizeCustomCSS } from './customHighlight.js';
|
||||||
import { legacyCustomHighlightStyle, legacyTokenizeCustomMarkdown } from './legacyCustomHighlight.js';
|
import { legacyCustomHighlightStyle, legacyTokenizeCustomMarkdown } from './legacyCustomHighlight.js';
|
||||||
@@ -411,6 +411,8 @@ const CodeEditor = forwardRef(
|
|||||||
}, 400);
|
}, 400);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
formatCode : ()=>formatCSS(viewRef.current),
|
||||||
|
|
||||||
undo : ()=>undo(viewRef.current),
|
undo : ()=>undo(viewRef.current),
|
||||||
redo : ()=>redo(viewRef.current),
|
redo : ()=>redo(viewRef.current),
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@keyframes slideacross {
|
||||||
|
0% {
|
||||||
|
bottom: -200px;
|
||||||
|
left: -200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
bottom:100%;
|
||||||
|
left:100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
:where(.codeEditor) {
|
:where(.codeEditor) {
|
||||||
width : 100%;
|
width : 100%;
|
||||||
height : calc(100% - 25px);
|
height : calc(100% - 25px);
|
||||||
@@ -23,6 +35,23 @@
|
|||||||
.cm-editor {
|
.cm-editor {
|
||||||
height : 100%;
|
height : 100%;
|
||||||
outline : none !important;
|
outline : none !important;
|
||||||
|
|
||||||
|
&.cm-flash {
|
||||||
|
position:relative;
|
||||||
|
&::after {
|
||||||
|
position:absolute;
|
||||||
|
content:'';
|
||||||
|
bottom:-200px;
|
||||||
|
left:-200px;
|
||||||
|
translate:-50%;
|
||||||
|
width:200%;
|
||||||
|
height:100px;
|
||||||
|
background:linear-gradient(0deg, #89eafc00 0px, #89ebfc8e 50px, #89eafc00 100px, transparent);
|
||||||
|
display:block;
|
||||||
|
animation: .5s linear 1 slideacross ;
|
||||||
|
rotate:30deg
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.brewSnippets .cm-snippetLine,
|
&.brewSnippets .cm-snippetLine,
|
||||||
|
|||||||
@@ -12,14 +12,24 @@ export async function formatCSS(view) {
|
|||||||
parser : 'css',
|
parser : 'css',
|
||||||
plugins : [postcssPlugin]
|
plugins : [postcssPlugin]
|
||||||
});
|
});
|
||||||
|
if(formatted === code) return;
|
||||||
|
|
||||||
view.dispatch({
|
|
||||||
changes : {
|
const dom = view.dom;
|
||||||
from : 0,
|
|
||||||
to : view.state.doc.length,
|
dom.classList.add('cm-flash');
|
||||||
insert : formatted
|
|
||||||
}
|
setTimeout(()=>{
|
||||||
});
|
dom.classList.remove('cm-flash');
|
||||||
|
view.dispatch({
|
||||||
|
changes : {
|
||||||
|
from : 0,
|
||||||
|
to : view.state.doc.length,
|
||||||
|
insert : formatted
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}, 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
const indentLess = (view)=>{
|
const indentLess = (view)=>{
|
||||||
|
|||||||
@@ -154,6 +154,10 @@ const Editor = createReactClass({
|
|||||||
this.codeEditor.current?.injectText(injectText);
|
this.codeEditor.current?.injectText(injectText);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
handleFormatCode: function () {
|
||||||
|
this.codeEditor.current?.formatCode();
|
||||||
|
},
|
||||||
|
|
||||||
handleViewChange : function(newView){
|
handleViewChange : function(newView){
|
||||||
this.props.setMoveArrows(newView === 'text');
|
this.props.setMoveArrows(newView === 'text');
|
||||||
|
|
||||||
@@ -333,6 +337,7 @@ const Editor = createReactClass({
|
|||||||
redo={this.redo}
|
redo={this.redo}
|
||||||
foldCode={this.foldCode}
|
foldCode={this.foldCode}
|
||||||
unfoldCode={this.unfoldCode}
|
unfoldCode={this.unfoldCode}
|
||||||
|
formatCode={this.isStyle() ? this.handleFormatCode : null}
|
||||||
historySize={this.historySize()}
|
historySize={this.historySize()}
|
||||||
currentEditorTheme={this.state.editorTheme}
|
currentEditorTheme={this.state.editorTheme}
|
||||||
updateEditorTheme={this.updateEditorTheme}
|
updateEditorTheme={this.updateEditorTheme}
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ const Snippetbar = createReactClass({
|
|||||||
historySize : ()=>{},
|
historySize : ()=>{},
|
||||||
foldCode : ()=>{},
|
foldCode : ()=>{},
|
||||||
unfoldCode : ()=>{},
|
unfoldCode : ()=>{},
|
||||||
|
formatCode : ()=>{},
|
||||||
updateEditorTheme : ()=>{},
|
updateEditorTheme : ()=>{},
|
||||||
cursorPos : {},
|
cursorPos : {},
|
||||||
themeBundle : [],
|
themeBundle : [],
|
||||||
@@ -269,6 +270,10 @@ const Snippetbar = createReactClass({
|
|||||||
onClick={this.props.unfoldCode} >
|
onClick={this.props.unfoldCode} >
|
||||||
<i className='fas fa-expand-alt' />
|
<i className='fas fa-expand-alt' />
|
||||||
</div>
|
</div>
|
||||||
|
<div className={`editorTool formatCode ${this.props.formatCode ? 'active' : ''}`}
|
||||||
|
onClick={this.props.formatCode} >
|
||||||
|
<i className='fas fa-wand-magic-sparkles' />
|
||||||
|
</div>
|
||||||
<div className={`editorTheme ${this.state.themeSelector ? 'active' : ''}`}
|
<div className={`editorTheme ${this.state.themeSelector ? 'active' : ''}`}
|
||||||
onClick={this.toggleThemeSelector} >
|
onClick={this.toggleThemeSelector} >
|
||||||
<i className='fas fa-palette' />
|
<i className='fas fa-palette' />
|
||||||
|
|||||||
@@ -79,6 +79,12 @@
|
|||||||
color : grey;
|
color : grey;
|
||||||
&.active { color : inherit; }
|
&.active { color : inherit; }
|
||||||
}
|
}
|
||||||
|
&.formatCode {
|
||||||
|
.tooltipLeft('Clean your Code');
|
||||||
|
font-size : 0.75em;
|
||||||
|
color : grey;
|
||||||
|
&.active { color : inherit; }
|
||||||
|
}
|
||||||
&.history {
|
&.history {
|
||||||
.tooltipLeft('History');
|
.tooltipLeft('History');
|
||||||
position : relative;
|
position : relative;
|
||||||
|
|||||||
Reference in New Issue
Block a user