Comments (4)
If you use prism-react-renderer for highlighting it becomes quite trivial to add line numbers :) https://github.com/FormidableLabs/prism-react-renderer
The example CodeSandbox shows how to integrate it with react-simple-code-editor and I have another snippet somewhere that has line numbers which I can upload later :)
from react-simple-code-editor.
Turns out you can't add html tags in the lines as it breaks weirdly when using thing like backspace. I am injecting the line numbers in the before pseudo element - no idea how well that scales though... I am also adding a sharp gradient background to editor for a nice margin.
// I am using JSON - make it look nice
const initialValue = JSON.stringify(myJson, null, 4)
// Count newlines and pad to match actual line numbers
const lines = (initialValue.match(/\n/g) || []).length + 2
// Determine padding needed (length of line number length)
const pad = String(lines).length
// Make sharp stop editor gradient background padded to fit font size/style
const bg = `linear-gradient(90deg, #EDF2F7 ${20 + pad * 8}px, ${20 + pad * 8}px, #FFF 100%)`
// Create content with all line numbers and newline them
const lineNos = [...Array(lines).keys()].slice(1).join('\\00000a')
// Style pseudo
const before = {
fontFamily: 'Inconsolata, monospace',
paddingTop: '10px',
content: `"${lineNos}"`,
width: `${20 + pad * 8}px`,
position: 'absolute',
whiteSpace: 'pre',
paddingRight: '10px',
textAlign: 'right',
opacity: 1
}
// Note: PseudoBox is from chakra-ui - basically just a div - _before is the pseudo elements style
return (
<PseudoBox h="100%" position="relative" background={bg} _before={before}>
<Editor
width="100%"
value={initialValue}
onValueChange={onChange}
highlight={code =>
highlight(code, languages.json)
}
padding={10}
style={{
fontFamily: 'Inconsolata, monospace',
fontSize: 16,
marginLeft: `${20 + pad * 8}px`,
}}
/>
</PseudoBox>
)
from react-simple-code-editor.
You can also check this on how to add line numbers with just CSS: 809d5f0
from react-simple-code-editor.
Wow @kitten that's fantastic! Are you just doing the line numbers using CSS then?
from react-simple-code-editor.
Related Issues (20)
- a11y: "Form control element <textarea> has no associated label" HOT 1
- demo is broken HOT 2
- Incorrect import with ESBuild bundling (must use <Editor.default ... />) HOT 1
- styles.root.fontFamily inconsistent behavior
- pasting code inside Editor, breaks the component
- Token highlight issue in Google Chrome HOT 3
- Is it possible to unindent with Shift + Tab? HOT 1
- How can we add tooltip on highlight position?
- Doesn't it support multiple languages? HOT 2
- Getting "global is not defined" after configuring supabase
- highlight.js theme import doesn't work for some reason
- Editor not working as expected with android phone which changed text size
- Padding is marked as required in TS, but has a default value of 0 HOT 1
- FR: Autocomplete support
- Editor may not work well in all sizes
- Uncaught ReferenceError: global is not defined | React Typescript HOT 7
- Long text renders incorrectly HOT 4
- Cannot read property 'rest' of undefined HOT 1
- readonly HOT 2
- [Security] Workflow main.yaml is using vulnerable action actions/checkout
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-simple-code-editor.