https://github.com/Sphinxxxx/cm-resize
A Pen by Andreas Borgen on CodePen.
<link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.29.0/codemirror.min.css" rel="stylesheet" /> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.29.0/codemirror.min.js"></script> | |
<script src="https://unpkg.com/cm-resize"></script> | |
<h1><a href="https://github.com/Sphinxxxx/cm-resize" target="_blank">cm-resize</a> demo</h1> | |
<main> | |
<textarea id="text1">Example with the default handle. ...</textarea> | |
<textarea id="text2">Example with two handles, custom cssClass and resizableWidth/Height only. ...</textarea> | |
<div id="joystick3"></div> | |
<textarea id="text3">Example with a custom handle element. This allows for handle UI outside of the editor area. ...</textarea> | |
</main> |
//Default | |
var cm1 = CodeMirror.fromTextArea(document.querySelector('#text1')); | |
cmResize(cm1); | |
//Custom cssClass | |
var cm2 = CodeMirror.fromTextArea(document.querySelector('#text2')); | |
cmResize(cm2, { | |
resizableHeight: false, | |
cssClass: 'handle handle2 handle-w', | |
}); | |
cmResize(cm2, { | |
resizableWidth: false, | |
cssClass: 'handle handle2 handle-h', | |
}); | |
//Custom handle | |
var cm3 = CodeMirror.fromTextArea(document.querySelector('#text3')); | |
cmResize(cm3, { | |
handle: document.querySelector('#joystick3'), | |
//resizableWidth: true, | |
//resizableHeight: true, | |
//minWidth: 200, | |
//minHeight: 100, | |
//cssClass: 'cm-resize-handle', | |
}); |
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.29.0/codemirror.min.js"></script> | |
<script src="https://unpkg.com/cm-resize"></script> |
.handle { | |
position: absolute; | |
bottom:0; right:0; | |
z-index: 99; | |
width: 3em; | |
height: 3em; | |
margin: -1.5em; | |
border: .5em solid #bada55; | |
border-radius: 100%; | |
box-sizing: border-box; | |
background: tomato; | |
cursor: pointer; | |
text-align: center; | |
&::after { | |
content: '⇕'; | |
color: black; | |
font-size: 2em; | |
line-height: .95; | |
} | |
opacity: .4; | |
&:hover { | |
opacity: .7; | |
} | |
&.handle-w { | |
bottom: 50%; | |
transform: rotate(-90deg); | |
cursor: ew-resize; | |
} | |
&.handle-h { | |
right: 50%; | |
cursor: ns-resize; | |
} | |
} | |
.handle2 { | |
margin: -1em; | |
border-radius: 100% 100% 0 0; | |
&::after { | |
font-size: 1.5em; | |
line-height: 1.1; | |
} | |
&.handle-w { | |
margin-bottom: -1.5em; | |
} | |
&.handle-h { | |
margin-right: -1.5em; | |
} | |
} | |
#joystick3 { | |
display: block; | |
position: relative; | |
width: 80px; | |
height: 80px; | |
margin: 2em auto 1em auto; | |
color: dodgerblue; | |
background-image: | |
linear-gradient( 45deg, transparent 33%, currentColor 0, currentColor 67%, transparent 0), | |
linear-gradient(135deg, transparent 33%, currentColor 0, currentColor 67%, transparent 0); | |
transform: rotate(45deg); | |
cursor: move; | |
&::before { | |
content: ''; | |
display: block; | |
position: absolute; | |
top:5px;left:5px;bottom:5px;right:5px; | |
color: black; | |
background-image: | |
linear-gradient( 45deg, currentColor 15%, transparent 0, transparent 85%, currentColor 0), | |
linear-gradient(135deg, currentColor 15%, transparent 0, transparent 85%, currentColor 0), | |
radial-gradient(currentColor 35%, transparent 36%); | |
} | |
} | |
/* Not important */ | |
body { | |
background: #444; | |
color: #eee; | |
font-family: sans-serif; | |
a { | |
color: skyblue; | |
} | |
} | |
.CodeMirror { | |
margin-bottom: 1em; | |
font-size: 1.2em; | |
} |
<link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.29.0/codemirror.min.css" rel="stylesheet" /> |