185 lines
5.5 KiB
Svelte
185 lines
5.5 KiB
Svelte
<script>
|
|
import EasyMDE from "easymde"
|
|
import "easymde/dist/easymde.min.css"
|
|
import { onMount } from "svelte"
|
|
|
|
export let height = null
|
|
export let scroll = true
|
|
export let easyMDEOptions = null
|
|
export let mde = null
|
|
export let id = null
|
|
export let fullScreenOffset = null
|
|
export let disabled = false
|
|
|
|
let element
|
|
|
|
onMount(() => {
|
|
height = height || "200px"
|
|
mde = new EasyMDE({
|
|
element,
|
|
spellChecker: false,
|
|
status: false,
|
|
unorderedListStyle: "-",
|
|
maxHeight: scroll ? height : undefined,
|
|
minHeight: scroll ? undefined : height,
|
|
...easyMDEOptions,
|
|
})
|
|
|
|
// Revert the editor when we unmount
|
|
return () => {
|
|
mde.toTextArea()
|
|
}
|
|
})
|
|
|
|
$: styleString = getStyleString(fullScreenOffset)
|
|
|
|
const getStyleString = offset => {
|
|
let string = ""
|
|
string += `--fullscreen-offset-x:${offset?.x || "0px"};`
|
|
string += `--fullscreen-offset-y:${offset?.y || "0px"};`
|
|
return string
|
|
}
|
|
</script>
|
|
|
|
<div class:disabled style={styleString}>
|
|
<textarea disabled {id} bind:this={element} />
|
|
</div>
|
|
|
|
<style>
|
|
/* Disabled styles */
|
|
.disabled :global(textarea) {
|
|
display: none;
|
|
}
|
|
.disabled :global(.CodeMirror-cursor) {
|
|
display: none;
|
|
}
|
|
.disabled :global(.EasyMDEContainer) {
|
|
pointer-events: none;
|
|
}
|
|
.disabled :global(.editor-toolbar button i) {
|
|
color: var(--spectrum-global-color-gray-400);
|
|
}
|
|
.disabled :global(.CodeMirror) {
|
|
color: var(--spectrum-global-color-gray-600);
|
|
}
|
|
|
|
/* Toolbar container */
|
|
:global(.EasyMDEContainer .editor-toolbar) {
|
|
background: var(--spectrum-global-color-gray-50);
|
|
border-top: 1px solid var(--spectrum-alias-border-color);
|
|
border-left: 1px solid var(--spectrum-alias-border-color);
|
|
border-right: 1px solid var(--spectrum-alias-border-color);
|
|
}
|
|
/* Main code mirror instance and default color */
|
|
:global(.EasyMDEContainer .CodeMirror) {
|
|
border: 1px solid var(--spectrum-alias-border-color);
|
|
background: var(--spectrum-global-color-gray-50);
|
|
color: var(--spectrum-alias-text-color);
|
|
}
|
|
/* Toolbar button active state */
|
|
:global(.EasyMDEContainer .editor-toolbar button.active) {
|
|
background: var(--spectrum-global-color-gray-200);
|
|
border-color: var(--spectrum-global-color-gray-400);
|
|
}
|
|
/* Toolbar button hover state */
|
|
:global(.EasyMDEContainer .editor-toolbar button:hover) {
|
|
background: var(--spectrum-global-color-gray-200);
|
|
border-color: var(--spectrum-global-color-gray-400);
|
|
}
|
|
/* Toolbar button color */
|
|
:global(.EasyMDEContainer .editor-toolbar button) {
|
|
color: var(--spectrum-global-color-gray-800);
|
|
}
|
|
/* Separator between toolbar buttons*/
|
|
:global(.EasyMDEContainer .editor-toolbar i.separator) {
|
|
border-color: var(--spectrum-global-color-gray-300);
|
|
}
|
|
/* Cursor */
|
|
:global(.EasyMDEContainer .CodeMirror-cursor) {
|
|
border-color: var(--spectrum-alias-text-color);
|
|
}
|
|
/* Text selections */
|
|
:global(.EasyMDEContainer .CodeMirror-selectedtext) {
|
|
background: var(--spectrum-global-color-gray-400) !important;
|
|
}
|
|
/* Background of lines containing selected text */
|
|
:global(.EasyMDEContainer .CodeMirror-selected) {
|
|
background: var(--spectrum-global-color-gray-400) !important;
|
|
}
|
|
/* Color of text for images and links */
|
|
:global(.EasyMDEContainer .cm-s-easymde .cm-link) {
|
|
color: var(--spectrum-global-color-gray-600);
|
|
}
|
|
/* Color of URL for images and links */
|
|
:global(.EasyMDEContainer .cm-s-easymde .cm-url) {
|
|
color: var(--spectrum-global-color-gray-500);
|
|
}
|
|
/* Full preview window */
|
|
:global(.EasyMDEContainer .editor-preview) {
|
|
background: var(--spectrum-global-color-gray-50);
|
|
}
|
|
/* Side by side preview window */
|
|
:global(.EasyMDEContainer .editor-preview) {
|
|
border: 1px solid var(--spectrum-alias-border-color);
|
|
}
|
|
/* Code blocks in editor */
|
|
:global(.EasyMDEContainer .cm-s-easymde .cm-comment) {
|
|
background: var(--spectrum-global-color-gray-100);
|
|
}
|
|
/* Code blocks in preview */
|
|
:global(.EasyMDEContainer pre) {
|
|
background: var(--spectrum-global-color-gray-100);
|
|
padding: 4px;
|
|
border-radius: 4px;
|
|
}
|
|
:global(.EasyMDEContainer code) {
|
|
color: #e83e8c;
|
|
}
|
|
:global(.EasyMDEContainer pre code) {
|
|
color: var(--spectrum-alias-text-color);
|
|
}
|
|
/* Block quotes */
|
|
:global(.EasyMDEContainer blockquote) {
|
|
border-left: 4px solid var(--spectrum-global-color-gray-400);
|
|
color: var(--spectrum-global-color-gray-700);
|
|
margin-left: 0;
|
|
padding-left: 20px;
|
|
}
|
|
/* HR's */
|
|
:global(.EasyMDEContainer hr) {
|
|
background-color: var(--spectrum-global-color-gray-300);
|
|
border: none;
|
|
height: 2px;
|
|
}
|
|
/* Tables */
|
|
:global(.EasyMDEContainer td, .EasyMDEContainer th) {
|
|
border-color: var(--spectrum-alias-border-color) !important;
|
|
}
|
|
/* Links */
|
|
:global(.EasyMDEContainer a) {
|
|
color: var(--primaryColor);
|
|
}
|
|
:global(.EasyMDEContainer a:hover) {
|
|
color: var(--primaryColorHover);
|
|
}
|
|
/* Allow full screen offset */
|
|
:global(.EasyMDEContainer .editor-toolbar.fullscreen) {
|
|
left: var(--fullscreen-offset-x);
|
|
top: var(--fullscreen-offset-y);
|
|
}
|
|
:global(.EasyMDEContainer .CodeMirror-fullscreen) {
|
|
left: var(--fullscreen-offset-x);
|
|
top: calc(50px + var(--fullscreen-offset-y));
|
|
}
|
|
|
|
:global(.EasyMDEContainer .CodeMirror-fullscreen.CodeMirror-sided) {
|
|
width: calc((100% - var(--fullscreen-offset-x)) / 2) !important;
|
|
}
|
|
|
|
:global(.EasyMDEContainer .editor-preview-side) {
|
|
left: calc(50% + (var(--fullscreen-offset-x) / 2));
|
|
top: calc(50px + var(--fullscreen-offset-y));
|
|
width: calc((100% - var(--fullscreen-offset-x)) / 2) !important;
|
|
}
|
|
</style>
|