1
0
Fork 0
mirror of synced 2024-09-20 19:33:10 +12:00
budibase/packages/builder/src/components/userInterface/CodeEditor.svelte

112 lines
2.4 KiB
Svelte
Raw Normal View History

2020-01-22 03:50:35 +13:00
<script>
import { store } from "builderStore"
2020-02-03 22:50:30 +13:00
import UIkit from "uikit"
import ActionButton from "components/common/ActionButton.svelte"
import ButtonGroup from "components/common/ButtonGroup.svelte"
2020-02-03 22:50:30 +13:00
import CodeMirror from "codemirror"
import "codemirror/mode/javascript/javascript.js"
export let onCodeChanged
export let code
export const show = () => {
UIkit.modal(codeModal).show()
2020-01-22 03:50:35 +13:00
}
2020-02-03 22:50:30 +13:00
let codeModal
let editor
let cmInstance
$: currentCode = code
$: originalCode = code
$: {
if (editor) {
if (!cmInstance) {
cmInstance = CodeMirror.fromTextArea(editor, {
mode: "javascript",
lineNumbers: false,
lineWrapping: true,
smartIndent: true,
matchBrackets: true,
readOnly: false,
})
cmInstance.on("change", () => (currentCode = cmInstance.getValue()))
}
cmInstance.focus()
cmInstance.setValue(code || "")
}
}
2020-01-22 03:50:35 +13:00
2020-02-03 22:50:30 +13:00
const cancel = () => {
UIkit.modal(codeModal).hide()
currentCode = originalCode
}
2020-01-22 03:50:35 +13:00
2020-02-03 22:50:30 +13:00
const save = () => {
originalCode = currentCode
onCodeChanged(currentCode)
UIkit.modal(codeModal).hide()
}
</script>
2020-01-22 03:50:35 +13:00
<div bind:this={codeModal} uk-modal>
2020-02-03 22:50:30 +13:00
<div class="uk-modal-dialog" uk-overflow-auto>
2020-02-03 22:50:30 +13:00
<div class="uk-modal-header">
<h3>Code</h3>
</div>
<div class="uk-modal-body uk-form-horizontal">
2020-02-03 22:50:30 +13:00
<p>
Use the code box below to control how this component is displayed, with
javascript.
</p>
<div>
<div class="editor-code-surround">
2020-02-26 05:01:23 +13:00
function(render, context, state, route) {'{'}
2020-02-03 22:50:30 +13:00
</div>
<div class="editor">
<textarea bind:this={editor} />
</div>
2020-02-03 22:50:30 +13:00
<div class="editor-code-surround">{'}'}</div>
</div>
</div>
2020-02-03 22:50:30 +13:00
2020-02-27 07:16:10 +13:00
<div class="uk-modal-footer">
<ButtonGroup>
<ActionButton primary on:click={save}>Save</ActionButton>
<ActionButton alert on:click={cancel}>Close</ActionButton>
</ButtonGroup>
</div>
2020-02-03 22:50:30 +13:00
</div>
2020-01-22 03:50:35 +13:00
</div>
<style>
h3 {
text-transform: uppercase;
font-size: 13px;
2020-01-22 03:50:35 +13:00
font-weight: 700;
color: #8997ab;
margin-bottom: 10px;
}
p {
font-size: 13px;
2020-01-22 03:50:35 +13:00
color: #333;
margin-top: 0;
}
.editor {
border-style: dotted;
border-width: 1px;
border-color: gainsboro;
padding: 10px 30px;
2020-01-22 03:50:35 +13:00
}
.editor-code-surround {
font-family: "Courier New", Courier, monospace;
2020-01-22 03:50:35 +13:00
}
</style>