Skip to content

Commit 2a987a9

Browse files
committed
Implement saving for script files
1 parent b1e71de commit 2a987a9

File tree

6 files changed

+87
-8
lines changed

6 files changed

+87
-8
lines changed

etc/index.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,5 +152,13 @@
152152
<script src="js/common.js"></script>
153153
<script src="js/module_loader.js"></script>
154154
<script src="js/app.js"></script>
155+
156+
<script>
157+
window.addEventListener("keydown", function(e) {
158+
if ((e.ctrlKey || e.metaKey) && e.key === "s") {
159+
e.preventDefault();
160+
}
161+
});
162+
</script>
155163
</body>
156164
</html>

etc/js/app.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ let components = [
137137
loadModule('js/components/pages/entities/pane-tree.vue', options),
138138
loadModule('js/components/pages/entities/pane-inspector.vue', options),
139139
loadModule('js/components/pages/entities/pane-scripts.vue', options),
140+
loadModule('js/components/pages/entities/pane-scripts-close-button.vue', options),
140141
loadModule('js/components/pages/entities/flecs-script.vue', options),
141142

142143
// Tree widget

etc/js/components/pages/entities/flecs-script.vue

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const props = defineProps({
1515
script: {type: Object, required: true},
1616
});
1717
18+
const changed = defineModel("changed");
1819
const error = defineModel("error");
1920
2021
// Editor object
@@ -36,6 +37,9 @@ function loadScript() {
3637
editorObj.focus();
3738
isLoading = false;
3839
error.value = reply.error;
40+
41+
// So we get an updated changed value
42+
scriptUpdate(reply.code);
3943
});
4044
}
4145
@@ -44,14 +48,21 @@ function onScriptChange(editorObj) {
4448
return;
4549
}
4650
47-
props.conn.scriptUpdate(props.script.path, editorObj.getValue(), {
48-
try: true
51+
scriptUpdate(editorObj.getValue());
52+
}
53+
54+
function scriptUpdate(code, save = false) {
55+
props.conn.scriptUpdate(props.script.path, code, {
56+
try: true,
57+
check_file: true,
58+
save_file: save
4959
}, (msg) => {
5060
if (msg.error) {
5161
error.value = msg.error;
5262
} else {
5363
error.value = undefined;
5464
}
65+
changed.value = msg.changed;
5566
});
5667
}
5768
@@ -67,6 +78,15 @@ onMounted(() => {
6778
onScriptChange(editorObj);
6879
});
6980
81+
editorObj.commands.addCommand({
82+
name: "save",
83+
bindKey: { win: "Ctrl-S", mac: "Command-S" },
84+
exec: function(editorObj) {
85+
scriptUpdate(editorObj.getValue(), true);
86+
},
87+
readOnly: false // false if this command should not be available in read-only mode
88+
});
89+
7090
loadScript();
7191
});
7292
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<template>
2+
<icon-button
3+
:src="iconImage"
4+
@mouseover="onEnter" @mouseleave="onLeave"
5+
@click.stop="onClose">
6+
</icon-button>
7+
</template>
8+
9+
<script>
10+
export default { name: "pane-scripts-close-button" }
11+
</script>
12+
13+
<script setup>
14+
15+
import { defineProps, defineEmits, computed, ref } from 'vue';
16+
17+
const props = defineProps({
18+
changed: {type: Boolean, required: false, default: false}
19+
});
20+
21+
const emit = defineEmits(["onClose"]);
22+
const hover = ref(false);
23+
24+
const iconImage = computed(() => {
25+
if (hover.value) {
26+
return "close";
27+
}
28+
if (props.changed) {
29+
return "circle-filled";
30+
}
31+
return "close";
32+
});
33+
34+
function onEnter() {
35+
hover.value = true;
36+
}
37+
38+
function onLeave() {
39+
hover.value = false;
40+
}
41+
42+
function onClose() {
43+
emit("onClose");
44+
}
45+
46+
</script>
47+
48+
<style scoped>
49+
</style>

etc/js/components/pages/entities/pane-scripts.vue

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
v-for="script in scriptLabels">
1111
{{ script.label }}
1212
<div class="script-close-button">
13-
<icon-button
14-
src="close"
13+
<pane-scripts-close-button
14+
:changed="scriptChanged"
1515
v-if="activeScript && script.label == activeScript.label"
16-
@click.stop="onClose(script)">
17-
</icon-button>
16+
@onClose="onClose(script)">
17+
</pane-scripts-close-button>
1818
</div>
1919
</div>
2020
</div>
@@ -24,6 +24,7 @@
2424
:conn="conn"
2525
:script="activeScript"
2626
v-model:error="scriptError"
27+
v-model:changed="scriptChanged"
2728
v-if="activeScript">
2829
</flecs-script>
2930
</div>
@@ -53,6 +54,7 @@ const activeScriptPath = defineModel("script");
5354
const scripts = defineModel("scripts");
5455
const activeScript = ref();
5556
const scriptError = ref();
57+
const scriptChanged = ref();
5658
5759
watch(() => [activeScript.value], () => {
5860
if (activeScript.value) {
@@ -256,6 +258,7 @@ div.flecs-script-button-active {
256258
background-color: var(--bg-pane);
257259
border-bottom-color: rgba(0, 0, 0, 0);
258260
border-top-color: var(--dark-green);
261+
color: var(--primary-text);
259262
}
260263
261264
div.flecs-script-button:hover {

etc/js/components/widgets/inspector/entity-inspector-component.vue

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,6 @@ function toggle() {
169169
}
170170
171171
const singleTarget = computed(() => {
172-
console.log(props.name + ":");
173-
console.log(props.targets);
174172
return props.targets && !Array.isArray(props.targets);
175173
});
176174

0 commit comments

Comments
 (0)