From 45625cd73774e53eb0e954512ebf3e30e696720e Mon Sep 17 00:00:00 2001 From: Julian Leucker <leuckerj@gmail.com> Date: Fri, 3 Feb 2023 20:43:58 +0100 Subject: [PATCH] Start developing functionality --- src/DragContainer.vue | 28 ++++++++++++++++++++++----- src/Grid.vue | 44 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 62 insertions(+), 10 deletions(-) diff --git a/src/DragContainer.vue b/src/DragContainer.vue index 6ee4051..2f27374 100644 --- a/src/DragContainer.vue +++ b/src/DragContainer.vue @@ -1,7 +1,14 @@ <template> - <div @dragstart="handleDragStart"> + <div @dragstart="handleDragStart" draggable="true" id="wrapper"> <slot> - <div id="container"></div> + <div id="container"> + <dl> + <dt>Position</dt> + <dd>{{ x }}, {{ y }}</dd> + <dt>Size</dt> + <dd>{{ w }} × {{ h }}</dd> + </dl> + </div> </slot> </div> </template> @@ -12,12 +19,23 @@ export default { methods: { handleDragStart(event) { event.dataTransfer.setData("text", event.target.id); - } - } -} + }, + }, + props: { + x: Number, + y: Number, + w: Number, + h: Number, + }, +}; </script> <style scoped> +#wrapper { + grid-column: v-bind(x) / span v-bind(w); + grid-row: v-bind(y) / span v-bind(h); +} + #container { background: lightcoral; width: 100%; diff --git a/src/Grid.vue b/src/Grid.vue index e1cb497..4cef694 100644 --- a/src/Grid.vue +++ b/src/Grid.vue @@ -1,14 +1,28 @@ <template> - <div @dragover.prevent @drop.prevent=""> + <div @dragover.prevent @drop.prevent="handleDrop" class="grid"> <slot name="highlight"> <div id="highlight"></div> </slot> + <DragContainer + v-for="item in items" + :key="item.key" + :x="item.x" + :y="item.y" + :w="item.w" + :h="item.h" + > + </DragContainer> </div> </template> <script> +import DragContainer from "./DragContainer.vue"; + export default { - name: 'Grid', + name: "Grid", + components: { + DragContainer, + }, props: { rows: { type: Number, @@ -23,9 +37,18 @@ export default { handleDrop(event) { let data = event.dataTransfer.getData("text"); event.target.appendChild(document.getElementById(data)); - } - } -} + }, + }, + data() { + return { + items: [ + { x: 3, y: 3, w: 1, h: 1, key: "obj1" }, + { x: 1, y: 1, w: 1, h: 1, key: "obj2" }, + { x: 4, y: 3, w: 2, h: 2, key: "obj3" }, + ], + }; + }, +}; </script> <style scoped> @@ -33,4 +56,15 @@ export default { background: darkgrey; border: grey dashed 2px; } + +.grid { + display: grid; + grid-template-columns: repeat(v-bind(cols), 1fr); + grid-template-rows: repeat(v-bind(rows), 1fr); + width: 100%; + height: 100%; + min-width: 100px; + min-height: 100px; + gap: 1em; +} </style> -- GitLab