mishig HF staff commited on
Commit
6934440
1 Parent(s): 0dfc33a

better img uplaod behaviour

Browse files
Files changed (1) hide show
  1. src/routes/+page.svelte +43 -13
src/routes/+page.svelte CHANGED
@@ -188,18 +188,45 @@
188
  context!.drawImage(canvas, 0, 0);
189
  }
190
 
191
- async function onChange() {
 
 
 
 
 
 
 
 
 
 
 
192
  const file = fileInput.files?.[0];
193
  if (file) {
194
- const imgEl = new Image();
195
- imgEl.src = URL.createObjectURL(file);
196
- // await image.onload
197
- await new Promise((resolve, _) => {
198
- imgEl.onload = () => resolve(imgEl);
199
- });
200
- const { width, height } = imgEl;
201
- ctx?.drawImage(imgEl, 0, 0, width, height, 0, 0, canvasSize, canvasSize);
202
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
203
  }
204
 
205
  onMount(async () => {
@@ -213,8 +240,6 @@
213
  drawingBoard = new window.DrawingBoard.Board('board-container', {
214
  size: 10,
215
  controls: ['Color', { Size: { type: 'dropdown' } }, { DrawingMode: { filler: false } }],
216
- droppable: true,
217
- stretchImg: true,
218
  webStorage: false,
219
  enlargeYourContainer: true
220
  });
@@ -222,7 +247,10 @@
222
  ctx = canvas.getContext('2d');
223
  copySketch();
224
 
225
- console.log(drawingBoard._onCanvasDrop);
 
 
 
226
  });
227
  </script>
228
 
@@ -238,6 +266,8 @@
238
  src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.1/iframeResizer.contentWindow.min.js"></script>
239
  </svelte:head>
240
 
 
 
241
  <div class="flex flex-wrap gap-x-4 gap-y-2 justify-center my-8">
242
  <canvas
243
  class="border-[1.2px] desktop:mt-[34px] {!isShowSketch && false ? 'hidden' : ''}"
@@ -261,7 +291,7 @@
261
  <input
262
  accept="image/*"
263
  bind:this={fileInput}
264
- on:change={onChange}
265
  style="display: none;"
266
  type="file"
267
  />
 
188
  context!.drawImage(canvas, 0, 0);
189
  }
190
 
191
+ async function drawUploadedImg(file: File) {
192
+ const imgEl = new Image();
193
+ imgEl.src = URL.createObjectURL(file);
194
+ // await image.onload
195
+ await new Promise((resolve, _) => {
196
+ imgEl.onload = () => resolve(imgEl);
197
+ });
198
+ const { width, height } = imgEl;
199
+ ctx?.drawImage(imgEl, 0, 0, width, height, 0, 0, canvasSize, canvasSize);
200
+ }
201
+
202
+ function onfImgUpload() {
203
  const file = fileInput.files?.[0];
204
  if (file) {
205
+ drawUploadedImg(file);
206
+ }
207
+ }
208
+
209
+ function handleDrop(e: DragEvent) {
210
+ if (!e.dataTransfer?.files) {
211
+ return;
 
212
  }
213
+ e.preventDefault();
214
+ const files = Array.from(e.dataTransfer.files);
215
+ const file = files[0];
216
+ drawUploadedImg(file);
217
+ }
218
+
219
+ function handlePaste(e: ClipboardEvent) {
220
+ if (!e.clipboardData) {
221
+ return;
222
+ }
223
+ const files = Array.from(e.clipboardData.files);
224
+ if (files.length === 0) {
225
+ return;
226
+ }
227
+ e.preventDefault();
228
+ const file = files[0];
229
+ drawUploadedImg(file);
230
  }
231
 
232
  onMount(async () => {
 
240
  drawingBoard = new window.DrawingBoard.Board('board-container', {
241
  size: 10,
242
  controls: ['Color', { Size: { type: 'dropdown' } }, { DrawingMode: { filler: false } }],
 
 
243
  webStorage: false,
244
  enlargeYourContainer: true
245
  });
 
247
  ctx = canvas.getContext('2d');
248
  copySketch();
249
 
250
+ canvas.ondragover = function (e) {
251
+ e.preventDefault();
252
+ return false;
253
+ };
254
  });
255
  </script>
256
 
 
266
  src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.1/iframeResizer.contentWindow.min.js"></script>
267
  </svelte:head>
268
 
269
+ <svelte:window on:drop|preventDefault|stopPropagation={handleDrop} on:paste={handlePaste} />
270
+
271
  <div class="flex flex-wrap gap-x-4 gap-y-2 justify-center my-8">
272
  <canvas
273
  class="border-[1.2px] desktop:mt-[34px] {!isShowSketch && false ? 'hidden' : ''}"
 
291
  <input
292
  accept="image/*"
293
  bind:this={fileInput}
294
+ on:change={onfImgUpload}
295
  style="display: none;"
296
  type="file"
297
  />