Add types to components and remove unused components
This commit is contained in:
		| @@ -1,94 +0,0 @@ | ||||
| <script> | ||||
|     import {onMount, tick, beforeUpdate} from 'svelte' ; | ||||
|  | ||||
|     let barcodeReady = false; | ||||
|     let mounted = false; | ||||
|  | ||||
|     onMount(() => { | ||||
|         // The payment-form is ready. | ||||
|         mounted = true; | ||||
|         //if (barcodeReady) { | ||||
|         loadBarcodeElements(); | ||||
|         //} | ||||
|     }); | ||||
|  | ||||
|     //export const  | ||||
|  | ||||
|     const target = (bc) => bc.length < 9 ? 7 : 12; | ||||
|  | ||||
|     let error; | ||||
|  | ||||
|     $: format = barcode.length < 9 ? "EAN8" : "EAN13"; | ||||
|  | ||||
|  | ||||
|     function padBarcode(bc, length, pad = 0) { | ||||
|         return bc; | ||||
|         while (bc.length < length) { | ||||
|             bc = pad + bc.toString(); | ||||
|         } | ||||
|  | ||||
|         return bc; | ||||
|     } | ||||
|  | ||||
|     const loadBarcodeElements = () => { | ||||
|         clearCanvas(document.getElementById("barcode").getContext("2d")); | ||||
|         error = null; | ||||
|         if (barcode != null && barcode.length > 0) { | ||||
|             //bwipjs.toCanvas("barcode", {bcid:format, text: padBarcode(barcode, target(barcode))}); | ||||
|             try { | ||||
|  | ||||
|                 const x = JsBarcode("#barcode", padBarcode(barcode, target(barcode)), {format: format}); | ||||
|                 console.log(x); | ||||
|             } catch { | ||||
|                 error = "Invalid barcode" | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     export let barcode = ""; | ||||
|  | ||||
|     beforeUpdate(async () => { | ||||
|         if (mounted) { | ||||
|             loadBarcodeElements(); | ||||
|         } | ||||
|         await tick(); | ||||
|     }); | ||||
|  | ||||
|     export const appendCheckDigit = () => { | ||||
|         if (barcode.length === 7 || barcode.length === 12) { | ||||
|             const check = eanCheckDigit(barcode); | ||||
|             //if (barcode[barcode.length-1] !== check) | ||||
|             //{ | ||||
|             barcode += check; | ||||
|             //} | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|  | ||||
|     function clearCanvas(context, canvas = context.canvas) { | ||||
|         context.clearRect(0, 0, canvas.width, canvas.height); | ||||
|         const w = canvas.width; | ||||
|         canvas.width = 1; | ||||
|         canvas.width = w; | ||||
|     } | ||||
|  | ||||
|     // definitely a hack. | ||||
|     export const eanCheckDigit = (s) => { | ||||
|         let x = JsBarcode("#barcode", s, {format: format}); | ||||
|  | ||||
|         //EAN barcodes by default have 5 parts (prefix -> left part -> middle seperator -> right part -> suffix) | ||||
|         // we only want left & right part (which contain a text | ||||
|         let calculated = ""; | ||||
|         x._encodings[0].filter(e => e.text !== "").forEach(e => calculated += e.text); | ||||
|         console.log(calculated); | ||||
|         return calculated[calculated.length - 1]; | ||||
|     } | ||||
|  | ||||
| </script> | ||||
|  | ||||
|  | ||||
| <canvas id="barcode" width="50%" height="100%"></canvas> | ||||
| {#if error} | ||||
|     <p>Error: {error}</p> | ||||
| {/if} | ||||
|  | ||||
| @@ -1,36 +0,0 @@ | ||||
| <script> | ||||
|     import {getContext} from 'svelte'; | ||||
|     import {writable} from 'svelte/store'; | ||||
|  | ||||
|     const navigate = getContext('navigate'); | ||||
|     const navaid = getContext('navaid'); | ||||
|  | ||||
|     const base = navaid && navaid.base || writable('/'); | ||||
|     const library = navaid && navaid.library || writable(null); | ||||
|     let props; | ||||
|     let href; | ||||
|  | ||||
|     export let append; | ||||
|  | ||||
|     $: { | ||||
|         props = {...$$props}; | ||||
|         href = props.href; | ||||
|         delete props.href; | ||||
|         href = ($library && $library.prefix ? $library.prefix : '') + (!append ? $base : '') + href.replace(/^\//, ''); | ||||
|     } | ||||
|  | ||||
|     const click = () => { | ||||
|         navigate(href); | ||||
|     } | ||||
| </script> | ||||
|  | ||||
| <style> | ||||
|     span { | ||||
|         text-decoration: none; | ||||
|         padding: 1rem 0.5rem; | ||||
|         display: block; | ||||
|         color: #005de6; | ||||
|     } | ||||
| </style> | ||||
|  | ||||
| <span {...props} on:click={click}><slot></slot></span> | ||||
| @@ -1,19 +1,24 @@ | ||||
| <script> | ||||
|     import {setContext as baseSetContext, createEventDispatcher} from 'svelte'; | ||||
|     import {fade} from 'svelte/transition'; | ||||
| <script lang="ts"> | ||||
|     //@ts-nocheck | ||||
|     import { | ||||
|         setContext as baseSetContext, | ||||
|         createEventDispatcher, | ||||
|     } from "svelte"; | ||||
|     import { fade } from "svelte/transition"; | ||||
|  | ||||
|     export let key = 'simple-modal'; | ||||
|     export let key = "simple-modal"; | ||||
|     export let closeButton = true; | ||||
|     export let closeOnEsc = true; | ||||
|     export let closeOnOuterClick = true; | ||||
|     export let transitionBg = fade; | ||||
|     export let transitionBgProps = {duration: 250}; | ||||
|     export let transitionBgProps = { duration: 250 }; | ||||
|     export let transitionWindow = transitionBg; | ||||
|     export let transitionWindowProps = transitionBgProps; | ||||
|     export let styleBg = {top: 0, left: 0}; | ||||
|     export let styleBg = { top: 0, left: 0 }; | ||||
|     export let styleWindow = {}; | ||||
|     export let styleContent = {}; | ||||
|     export let setContext = baseSetContext; | ||||
|     export let show: boolean = false; | ||||
|  | ||||
|     let Component = null; | ||||
|     let props = null; | ||||
| @@ -24,23 +29,38 @@ | ||||
|     let customStyleWindow = {}; | ||||
|     let customStyleContent = {}; | ||||
|  | ||||
|     let Callback = (props) => { | ||||
|     }; | ||||
|     let Callback = (props) => {}; | ||||
|  | ||||
|     $: Component, | ||||
|         () => { | ||||
|             show = !!Component; | ||||
|         }; | ||||
|  | ||||
|     const dispatch = createEventDispatcher(); | ||||
|  | ||||
|     const camelCaseToDash = str => str | ||||
|         .replace(/([a-zA-Z])(?=[A-Z])/g, '$1-').toLowerCase(); | ||||
|     const camelCaseToDash = (str) => | ||||
|         str.replace(/([a-zA-Z])(?=[A-Z])/g, "$1-").toLowerCase(); | ||||
|  | ||||
|     const toCssString = (props) => Object.keys(props) | ||||
|         .reduce((str, key) => `${str}; ${camelCaseToDash(key)}: ${props[key]}`, ''); | ||||
|     const toCssString = (props) => | ||||
|         Object.keys(props).reduce( | ||||
|             (str, key) => `${str}; ${camelCaseToDash(key)}: ${props[key]}`, | ||||
|             "" | ||||
|         ); | ||||
|  | ||||
|     $: cssBg = toCssString(Object.assign({}, styleBg, customStyleBg)); | ||||
|     $: cssWindow = toCssString(Object.assign({}, styleWindow, customStyleWindow)); | ||||
|     $: cssContent = toCssString(Object.assign({}, styleContent, customStyleContent)); | ||||
|     $: cssWindow = toCssString( | ||||
|         Object.assign({}, styleWindow, customStyleWindow) | ||||
|     ); | ||||
|     $: cssContent = toCssString( | ||||
|         Object.assign({}, styleContent, customStyleContent) | ||||
|     ); | ||||
|  | ||||
|     const open = (NewComponent, newProps = {}, style = {bg: {}, window: {}, content: {}}, newCallback = () => { | ||||
|     }) => { | ||||
|     const open = ( | ||||
|         NewComponent, | ||||
|         newProps = {}, | ||||
|         style = { bg: {}, window: {}, content: {} }, | ||||
|         newCallback = () => {} | ||||
|     ) => { | ||||
|         Component = NewComponent; | ||||
|         props = newProps; | ||||
|         Callback = newCallback; | ||||
| @@ -58,8 +78,8 @@ | ||||
|         customStyleContent = {}; | ||||
|     }; | ||||
|  | ||||
|     const handleKeyup = ({key}) => { | ||||
|         if (closeOnEsc && Component && key === 'Escape') { | ||||
|     const handleKeyup = ({ key }) => { | ||||
|         if (closeOnEsc && Component && key === "Escape") { | ||||
|             event.preventDefault(); | ||||
|             close(); | ||||
|         } | ||||
| @@ -67,18 +87,47 @@ | ||||
|  | ||||
|     const handleOuterClick = (event) => { | ||||
|         if ( | ||||
|             closeOnOuterClick && ( | ||||
|                 event.target === background || event.target === wrap | ||||
|             ) | ||||
|             closeOnOuterClick && | ||||
|             (event.target === background || event.target === wrap) | ||||
|         ) { | ||||
|             event.preventDefault(); | ||||
|             close(); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     setContext(key, {open, close}); | ||||
|     setContext(key, { open: show, close }); | ||||
| </script> | ||||
|  | ||||
| <svelte:window on:keyup={handleKeyup} /> | ||||
|  | ||||
| <div> | ||||
|     {#if Component} | ||||
|         <div | ||||
|             class="bg" | ||||
|             on:click={handleOuterClick} | ||||
|             bind:this={background} | ||||
|             transition:transitionBg={transitionBgProps} | ||||
|             style={cssBg} | ||||
|         > | ||||
|             <div class="window-wrap" bind:this={wrap}> | ||||
|                 <div | ||||
|                     class="window" | ||||
|                     transition:transitionWindow={transitionWindowProps} | ||||
|                     style={cssWindow} | ||||
|                 > | ||||
|                     {#if closeButton} | ||||
|                         <button on:click={close} class="close" /> | ||||
|                     {/if} | ||||
|                     <div class="content" style={cssContent}> | ||||
|                         <Component {...props} {close} /> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     {/if} | ||||
|     <slot /> | ||||
| </div> | ||||
|  | ||||
| <!-- | ||||
|  | ||||
| ** LICENSE ** | ||||
| @@ -165,12 +214,13 @@ https://github.com/flekschas/svelte-simple-moda | ||||
|         background: white; | ||||
|         box-shadow: 0 0 0 1px black; | ||||
|         transition: transform 0.2s cubic-bezier(0.25, 0.1, 0.25, 1), | ||||
|         background 0.2s cubic-bezier(0.25, 0.1, 0.25, 1); | ||||
|             background 0.2s cubic-bezier(0.25, 0.1, 0.25, 1); | ||||
|         -webkit-appearance: none; | ||||
|     } | ||||
|  | ||||
|     .close:before, .close:after { | ||||
|         content: ''; | ||||
|     .close:before, | ||||
|     .close:after { | ||||
|         content: ""; | ||||
|         display: block; | ||||
|         box-sizing: border-box; | ||||
|         position: absolute; | ||||
| @@ -180,7 +230,7 @@ https://github.com/flekschas/svelte-simple-moda | ||||
|         background: black; | ||||
|         transform-origin: center; | ||||
|         transition: height 0.2s cubic-bezier(0.25, 0.1, 0.25, 1), | ||||
|         background 0.2s cubic-bezier(0.25, 0.1, 0.25, 1); | ||||
|             background 0.2s cubic-bezier(0.25, 0.1, 0.25, 1); | ||||
|     } | ||||
|  | ||||
|     .close:before { | ||||
| @@ -201,7 +251,8 @@ https://github.com/flekschas/svelte-simple-moda | ||||
|         background: black; | ||||
|     } | ||||
|  | ||||
|     .close:hover:before, .close:hover:after { | ||||
|     .close:hover:before, | ||||
|     .close:hover:after { | ||||
|         height: 2px; | ||||
|         background: white; | ||||
|     } | ||||
| @@ -215,35 +266,9 @@ https://github.com/flekschas/svelte-simple-moda | ||||
|         transform: scale(0.9); | ||||
|     } | ||||
|  | ||||
|     .close:hover, .close:focus, .close:active { | ||||
|     .close:hover, | ||||
|     .close:focus, | ||||
|     .close:active { | ||||
|         outline: none; | ||||
|     } | ||||
| </style> | ||||
|  | ||||
| <svelte:window on:keyup={handleKeyup}/> | ||||
|  | ||||
| <div> | ||||
|     {#if Component} | ||||
|         <div | ||||
|                 class="bg" | ||||
|                 on:click={handleOuterClick} | ||||
|                 bind:this={background} | ||||
|                 transition:transitionBg={transitionBgProps} | ||||
|                 style={cssBg}> | ||||
|             <div class="window-wrap" bind:this={wrap}> | ||||
|                 <div | ||||
|                         class="window" | ||||
|                         transition:transitionWindow={transitionWindowProps} | ||||
|                         style={cssWindow}> | ||||
|                     {#if closeButton} | ||||
|                         <button on:click={close} class="close"></button> | ||||
|                     {/if} | ||||
|                     <div class="content" style={cssContent}> | ||||
|                         <Component {...props} {close}/> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     {/if} | ||||
|     <slot></slot> | ||||
| </div> | ||||
|   | ||||
| @@ -1,6 +1,24 @@ | ||||
| <script lang="ts"> | ||||
|     import { fly } from "svelte/transition"; | ||||
|     import Modal from "./Modal.svelte"; | ||||
|  | ||||
|     const click = () => { | ||||
|         modal_show = true; | ||||
|         show = false; | ||||
|     }; | ||||
|  | ||||
|     function overlay_click(e: MouseEvent) { | ||||
|         //@ts-ignore | ||||
|         if ("close" in e.target.dataset) show = false; | ||||
|     } | ||||
|  | ||||
|     export let show = false; | ||||
|     let modal_show = false; | ||||
| </script> | ||||
|  | ||||
| {#if show} | ||||
|     <div class="overlay" data-close on:click={overlay_click}> | ||||
|         <nav transition:fly={{x: -250, opacity: 1}}> | ||||
|         <nav transition:fly={{ x: -250, opacity: 1 }}> | ||||
|             <slot> | ||||
|                 <button on:click={click}>About</button> | ||||
|             </slot> | ||||
| @@ -8,25 +26,7 @@ | ||||
|     </div> | ||||
| {/if} | ||||
|  | ||||
| <Modal bind:show={modal_show}/> | ||||
|  | ||||
| <script> | ||||
|     import {fly} from 'svelte/transition'; | ||||
|     import Modal from './Modal.svelte'; | ||||
|  | ||||
|     const click = () => { | ||||
|         modal_show = true; | ||||
|         show = false; | ||||
|     }; | ||||
|  | ||||
|     function overlay_click(e) { | ||||
|         if ('close' in e.target.dataset) | ||||
|             show = false; | ||||
|     } | ||||
|  | ||||
|     export let show = false; | ||||
|     let modal_show = false; | ||||
| </script> | ||||
| <Modal bind:show={modal_show} /> | ||||
|  | ||||
| <style> | ||||
|     .overlay { | ||||
| @@ -53,4 +53,4 @@ | ||||
|         overflow-y: auto; | ||||
|         width: 20rem; | ||||
|     } | ||||
| </style> | ||||
| </style> | ||||
|   | ||||
| @@ -1,23 +1,23 @@ | ||||
| <script> | ||||
|  | ||||
|     import {quintOut} from "svelte/easing"; | ||||
|     import {crossfade} from "svelte/transition"; | ||||
|     import {flip} from "svelte/animate"; | ||||
| <script lang="ts"> | ||||
|     //@ts-nocheck | ||||
|     import { quintOut } from "svelte/easing"; | ||||
|     import { crossfade } from "svelte/transition"; | ||||
|     import { flip } from "svelte/animate"; | ||||
|     // FLIP ANIMATION | ||||
|     const [send, receive] = crossfade({ | ||||
|         duration: d => Math.sqrt(d * 200), | ||||
|         duration: (d) => Math.sqrt(d * 200), | ||||
|         fallback(node, params) { | ||||
|             const style = getComputedStyle(node); | ||||
|             const transform = style.transform === "none" ? "" : style.transform; | ||||
|             return { | ||||
|                 duration: 600, | ||||
|                 easing: quintOut, | ||||
|                 css: t => ` | ||||
|                 css: (t) => ` | ||||
| 					transform: ${transform} scale(${t}); | ||||
| 					opacity: ${t} | ||||
| 				` | ||||
| 				`, | ||||
|             }; | ||||
|         } | ||||
|         }, | ||||
|     }); | ||||
|     // DRAG AND DROP | ||||
|     let isOver = false; | ||||
| @@ -25,56 +25,68 @@ | ||||
|     const getDraggedParent = (node) => { | ||||
|         return node.dataset && node.dataset.index | ||||
|             ? node.dataset | ||||
|             : getDraggedParent(node.parentNode) | ||||
|             : getDraggedParent(node.parentNode); | ||||
|     }; | ||||
|     const click = ev => { | ||||
|     const click = (ev) => { | ||||
|         dispatch("slotclick", { | ||||
|             source: ev.target.parentElement.dataset.index, | ||||
|             sourceItem: list[ev.target.parentElement.dataset.index] | ||||
|             sourceItem: list[ev.target.parentElement.dataset.index], | ||||
|         }); | ||||
|     }; | ||||
|     const start = ev => { | ||||
|     const start = (ev) => { | ||||
|         isDragging = true; | ||||
|         ev.dataTransfer.setData("source", ev.target.dataset.index); | ||||
|     }; | ||||
|     const over = ev => { | ||||
|     const over = (ev) => { | ||||
|         ev.preventDefault(); | ||||
|         let dragged = getDraggedParent(ev.target); | ||||
|         if (isOver !== dragged.id) isOver = JSON.parse(dragged.id); | ||||
|     }; | ||||
|     const leave = ev => { | ||||
|     const leave = (ev) => { | ||||
|         let dragged = getDraggedParent(ev.target); | ||||
|         if (isOver === dragged.id) isOver = false; | ||||
|     }; | ||||
|     const drop = ev => { | ||||
|     const drop = (ev) => { | ||||
|         isOver = false; | ||||
|         ev.preventDefault(); | ||||
|         let dragged = getDraggedParent(ev.target); | ||||
|         let from = ev.dataTransfer.getData("source"); | ||||
|         let to = dragged.index; | ||||
|         reorder({from, to}); | ||||
|         reorder({ from, to }); | ||||
|         isDragging = false; | ||||
|     }; | ||||
|     // DISPATCH REORDER | ||||
|     import {createEventDispatcher, onMount, afterUpdate, beforeUpdate, tick} from "svelte"; | ||||
|     import { | ||||
|         createEventDispatcher, | ||||
|         onMount, | ||||
|         afterUpdate, | ||||
|         beforeUpdate, | ||||
|         tick, | ||||
|     } from "svelte"; | ||||
|  | ||||
|     const dispatch = createEventDispatcher(); | ||||
|     const reorder = ({from, to}) => { | ||||
|     const reorder = ({ from, to }) => { | ||||
|         let newList = [...list]; | ||||
|         let temp = newList[from]; | ||||
|         newList[from] = newList[to]; | ||||
|         newList[to] = temp; | ||||
|         //newList[from] = [newList[to], (newList[to] = newList[from])][0]; | ||||
|         dispatch("sort", {data: newList, from: from, to: to}); | ||||
|         dispatch("sort", { data: newList, from: from, to: to }); | ||||
|     }; | ||||
|     // UTILS | ||||
|     const getKey = item => (key ? item[key] : item); | ||||
|     const getKey = (item) => (key ? item[key] : item); | ||||
|  | ||||
|     type ListItem = { | ||||
|         displayTileSize: number; | ||||
|         endsGroup: boolean; | ||||
|         startsNewGroup: boolean; | ||||
|     }; | ||||
|     // PROPS | ||||
|     export let list; | ||||
|     export let list: ListItem[][]; | ||||
|     export let key; | ||||
|     export let ulclass; | ||||
|  | ||||
|     export let breakon; | ||||
|     export let breakon: string | null = null; | ||||
|  | ||||
|     export let breakComponent; | ||||
|     //    return `<><li class='${breakClass}' style='height:100%; grid-column: span 5;'><div style='width:100%;height:inherit;'></li>`; | ||||
| @@ -113,16 +125,16 @@ | ||||
|             let carry = 0; | ||||
|             let elements = Elements(); | ||||
|  | ||||
|  | ||||
|             for (let x = 0; x < list.length; x++) { | ||||
|  | ||||
|                 if (last != null) { | ||||
|                     if (list[x][breakon] > last) { | ||||
|  | ||||
|                         if (elements.length) { | ||||
|                             let targetIndex = x + breaks; | ||||
|  | ||||
|                             if (list.length !== elements[0].children.length - breaks) { | ||||
|                             if ( | ||||
|                                 list.length !== | ||||
|                                 elements[0].children.length - breaks | ||||
|                             ) { | ||||
|                                 if (lastCollection) | ||||
|                                     if (lastCollection.length) | ||||
|                                         targetIndex += lastCollection.length; | ||||
| @@ -159,23 +171,49 @@ | ||||
|         updateBreak(); | ||||
|  | ||||
|         updating = false; | ||||
|  | ||||
|     }); | ||||
|  | ||||
|     const getClass = () => { | ||||
|         let ret = ""; | ||||
|         if (key) | ||||
|             ret += ` ${key}`; | ||||
|         if (ulclass) | ||||
|             ret += ` ${ulclass}`; | ||||
|         if (key) ret += ` ${key}`; | ||||
|         if (ulclass) ret += ` ${ulclass}`; | ||||
|  | ||||
|         return ret; | ||||
|     } | ||||
|  | ||||
|     }; | ||||
| </script> | ||||
|  | ||||
| <style> | ||||
| {#if list && list.length} | ||||
|     <ul class={getClass()}> | ||||
|         {#each list as item, index (getKey(item))} | ||||
|             <li | ||||
|                 class:small={item.displayTileSize === 2} | ||||
|                 class:medium={item.displayTileSize === 3} | ||||
|                 class:large={item.displayTileSize === 4} | ||||
|                 class:startsNewGroup={item.startsNewGroup} | ||||
|                 class:endsGroup={item.endsGroup} | ||||
|                 data-index={index} | ||||
|                 data-item={JSON.stringify(item)} | ||||
|                 data-id={JSON.stringify(getKey(item))} | ||||
|                 draggable="true" | ||||
|                 on:dragstart={start} | ||||
|                 on:dragover={over} | ||||
|                 on:dragleave={leave} | ||||
|                 on:drop={drop} | ||||
|                 on:click={click} | ||||
|                 in:receive={{ key: getKey(item) }} | ||||
|                 out:send={{ key: getKey(item) }} | ||||
|                 animate:flip={{ duration: 300 }} | ||||
|                 class:over={getKey(item) === isOver} | ||||
|             > | ||||
|                 <slot {item} {index}> | ||||
|                     <p>{getKey(item)}</p> | ||||
|                 </slot> | ||||
|             </li> | ||||
|         {/each} | ||||
|     </ul> | ||||
| {/if} | ||||
|  | ||||
| <style> | ||||
|     ul { | ||||
|         display: inline-grid; | ||||
|         list-style: none; | ||||
| @@ -189,7 +227,7 @@ | ||||
|         transition: border 0.1s linear; | ||||
|         width: 100%; | ||||
|         height: 100%; | ||||
|         margin: .5%; | ||||
|         margin: 0.5%; | ||||
|     } | ||||
|  | ||||
|     .startsNewGroup { | ||||
| @@ -215,35 +253,3 @@ | ||||
|         border-color: rgba(48, 12, 200, 0.2); | ||||
|     } | ||||
| </style> | ||||
|  | ||||
| {#if list && list.length} | ||||
|     <ul class={getClass()}> | ||||
|         {#each list as item, index (getKey(item))} | ||||
|             <li | ||||
|                     class:small={item.displayTileSize === 2} | ||||
|                     class:medium={item.displayTileSize === 3} | ||||
|                     class:large={item.displayTileSize === 4} | ||||
|                     class:startsNewGroup={item.startsNewGroup} | ||||
|                     class:endsGroup={item.endsGroup} | ||||
|                     data-index={index} | ||||
|                     data-item={JSON.stringify(item)} | ||||
|                     data-id={JSON.stringify(getKey(item))} | ||||
|                     draggable="true" | ||||
|                     on:dragstart={start} | ||||
|                     on:dragover={over} | ||||
|                     on:dragleave={leave} | ||||
|                     on:drop={drop} | ||||
|                     on:click={click} | ||||
|                     in:receive={{ key: getKey(item) }} | ||||
|                     out:send={{ key: getKey(item) }} | ||||
|                     animate:flip={{ duration: 300 }} | ||||
|                     class:over={getKey(item) === isOver}> | ||||
|  | ||||
|                 <slot {item} {index}> | ||||
|                     <p>{getKey(item)}</p> | ||||
|                 </slot> | ||||
|  | ||||
|             </li> | ||||
|         {/each} | ||||
|     </ul> | ||||
| {/if} | ||||
| @@ -1,11 +1,24 @@ | ||||
| <script> | ||||
|     export let name; | ||||
|     export let link; | ||||
| <script lang="ts"> | ||||
|     export let name: string; | ||||
|     export let link: string; | ||||
|     export let img = "https://placehold.it/600x300"; | ||||
|     export let size = { width: 600, height: 300 }; | ||||
|     export let description; | ||||
|     export let description: string; | ||||
| </script> | ||||
|  | ||||
| <div class="card"> | ||||
|     <div class="back"> | ||||
|         <a href={link}> | ||||
|             <img src={img} alt={name} width={size.width} height={size.height} /> | ||||
|         </a> | ||||
|     </div> | ||||
|     <div class="description"> | ||||
|         <h2>{name}</h2> | ||||
|         <p>{description}</p> | ||||
|     </div> | ||||
| </div> | ||||
| <br /> | ||||
|  | ||||
| <style> | ||||
|     .card { | ||||
|         display: flex; | ||||
| @@ -28,16 +41,3 @@ | ||||
|         } | ||||
|     } | ||||
| </style> | ||||
|  | ||||
| <div class="card"> | ||||
|     <div class="back"> | ||||
|         <a href="{link}"> | ||||
|             <img src={img} alt={name} width={size.width} height={size.height}> | ||||
|         </a> | ||||
|     </div> | ||||
|     <div class="description"> | ||||
|         <h2>{name}</h2> | ||||
|         <p>{description}</p> | ||||
|     </div> | ||||
| </div> | ||||
| <br> | ||||
|   | ||||
| @@ -1,13 +1,13 @@ | ||||
| <script> | ||||
|     import {onMount} from 'svelte' | ||||
|     import Banner from '../components/Banner.svelte' | ||||
| <script lang="ts"> | ||||
|   import { onMount } from "svelte"; | ||||
|   import Banner from "../components/Banner.svelte"; | ||||
|  | ||||
|     export let status; | ||||
|     export let error; | ||||
|   export let status: string; | ||||
|   export let error: Error; | ||||
|  | ||||
|     const dev = process.env.NODE_ENV === 'development'; | ||||
|   const dev = process.env.NODE_ENV === "development"; | ||||
|  | ||||
|     var appa = `             .,-:;//;:=, | ||||
|   var appa = `             .,-:;//;:=, | ||||
|          . :H@@@MM@M#H/.,+%;, | ||||
|       ,/X+ +M@@M@MM%=,-%HMMM@X/, | ||||
|      -+@MM; $M@@MH+-,;XMMMM@MMMM@+- | ||||
| @@ -28,7 +28,7 @@ | ||||
|          ,:+$+-,/H#MMMMMMM@- -, | ||||
|                =++%%%%+/:-.`; | ||||
|  | ||||
|     var nuke = `             =+$HM####@H%;, | ||||
|   var nuke = `             =+$HM####@H%;, | ||||
|           /H###############M$, | ||||
|           ,@################+ | ||||
|            .H##############+ | ||||
| @@ -49,7 +49,7 @@ X##############%,      ,+##############X | ||||
|     .+M###@,                ,@###M+. | ||||
|        :XH.                  .HX:`; | ||||
|  | ||||
|     var atom = `                 =/;;/- | ||||
|   var atom = `                 =/;;/- | ||||
|                 +:    // | ||||
|                /;      /; | ||||
|               -X        H. | ||||
| @@ -70,7 +70,7 @@ M-       ,=;;;#:,      ,:#;;:=,       ,@ | ||||
|                 //    +; | ||||
|                  ,////,`; | ||||
|  | ||||
|     var heart = `                          .,---. | ||||
|   var heart = `                          .,---. | ||||
|                         ,/XM#MMMX;, | ||||
|                       -%##########M%, | ||||
|                      -@######%  $###@= | ||||
| @@ -91,7 +91,7 @@ X################,      -$=X#######@: | ||||
|                   .,/X$;   .::, | ||||
|                       .,    ..`; | ||||
|  | ||||
|     var fire = `                     -$- | ||||
|   var fire = `                     -$- | ||||
|                     .H##H, | ||||
|                    +######+ | ||||
|                 .+#########H. | ||||
| @@ -112,7 +112,7 @@ X################,      -$=X#######@: | ||||
| /XHX%:#####MH%=    ,---:;;;;/&&XHM,:###$ | ||||
| $@#MX %+;-                           .`; | ||||
|  | ||||
|     var tick = `                                     :X- | ||||
|   var tick = `                                     :X- | ||||
|                                   :X### | ||||
|                                 ;@####@ | ||||
|                               ;M######X | ||||
| @@ -133,7 +133,7 @@ $@#MX %+;-                           .`; | ||||
|               +####: | ||||
|                ,$M-`; | ||||
|  | ||||
|     var bang = `            .+ | ||||
|   var bang = `            .+ | ||||
|              /M; | ||||
|               H#@:              ;, | ||||
|               -###H-          -@/ | ||||
| @@ -154,7 +154,7 @@ $@#MX %+;-                           .`; | ||||
|                 .#H,               :XH, | ||||
|                  +                   .;-`; | ||||
|  | ||||
|     var mesa = `           .-;+$XHHHHHHX$+;-. | ||||
|   var mesa = `           .-;+$XHHHHHHX$+;-. | ||||
|         ,;X@@X%/;=----=:/%X@@X/, | ||||
|       =$@@%=.              .=+H@X: | ||||
|     -XMX:                      =XMX= | ||||
| @@ -175,7 +175,7 @@ H@:         :HHHHHHHHHHHHHHHHHHX,    =@H | ||||
|         ,;$@@@@@@@@@@@@@@@@@@X/- | ||||
|            .-;+$XXHHHHHX$+;-.`; | ||||
|  | ||||
|     var cube = `       #+ @      # #              M#@ | ||||
|   var cube = `       #+ @      # #              M#@ | ||||
|  .    .X  X.%##@;# #   +@#######X. @H% | ||||
|    ,==.   ,######M+  -#####%M####M-    # | ||||
|   :H##M%:=##+ .M##M,;#####/+#######% ,M# | ||||
| @@ -196,7 +196,7 @@ H@:         :HHHHHHHHHHHHHHHHHHX,    =@H | ||||
|       H#M    /@####/      ,++.  / ==-, | ||||
|                ,=/:, .+X@MMH@#H  #####$=`; | ||||
|  | ||||
|     var cake = `  ,:/+/- | ||||
|   var cake = `  ,:/+/- | ||||
|               /M/              .,-=;//;- | ||||
|         .:/= ;MH/,    ,=/+%$XH@MM#@: | ||||
|         -$##@+$###@H@MMM#######H:.    -/H# | ||||
| @@ -217,23 +217,70 @@ H@:         :HHHHHHHHHHHHHHHHHHX,    =@H | ||||
|           ,:/%XM####H/. | ||||
|                 ,.:=-.`; | ||||
|  | ||||
|     // appa, atom, nuke | ||||
|     var options = [cake, heart, fire, tick, bang, mesa, cube]; | ||||
|     let active = cake | ||||
|   // appa, atom, nuke | ||||
|   var options = [cake, heart, fire, tick, bang, mesa, cube]; | ||||
|   let active = cake; | ||||
|  | ||||
|     function updateView() { | ||||
|         active = options[Math.floor((Math.random() * options.length))]; | ||||
|         setTimeout(updateView, 5000); | ||||
|     } | ||||
|   function updateView() { | ||||
|     active = options[Math.floor(Math.random() * options.length)]; | ||||
|     setTimeout(updateView, 5000); | ||||
|   } | ||||
|  | ||||
|     onMount(() => updateView()); | ||||
|   onMount(() => updateView()); | ||||
| </script> | ||||
|  | ||||
| <svelte:head> | ||||
|   <title>Quartnzet - {status}</title> | ||||
| </svelte:head> | ||||
|  | ||||
| <Banner title={status} /> | ||||
|  | ||||
| <main class="container"> | ||||
|   <p>{error.message}</p> | ||||
|  | ||||
|   {#if dev && error.stack} | ||||
|     <pre>{error.stack}</pre> | ||||
|   {:else} | ||||
|     <audio controls autoplay> | ||||
|       <track kind="captions" /> | ||||
|       <source src="http://quartznet.info/alive.ogg" type="audio/wav" /> | ||||
|     </audio> | ||||
|     <div class="ascii"> | ||||
|       <div> | ||||
|         <pre><br />{active}</pre> | ||||
|       </div> | ||||
|     </div> | ||||
|     <hr /> | ||||
|     <p class="info"> | ||||
|       This was a triumph! I'm making a note here: Huge success! It's hard to | ||||
|       overstate my satisfaction. Aperture Science: We do what we must because we | ||||
|       can For the good of all of us. Except the ones who are dead. But there's | ||||
|       no sense crying over every mistake. You just keep on trying 'til you run | ||||
|       out of cake. And the science gets done. And you make a neat gun for the | ||||
|       people who are still alive. I'm not even angry... I'm being so sincere | ||||
|       right now. Even though you broke my heart, and killed me. And tore me to | ||||
|       pieces. And threw every piece into a fire. As they burned it hurt because | ||||
|       I was so happy for you! Now, these points of data make a beautiful line. | ||||
|       And we're out of beta. We're releasing on time! So I'm GLaD I got burned! | ||||
|       Think of all the things we learned! for the people who are still alive. Go | ||||
|       ahead and leave me... I think I'd prefer to stay inside... Maybe you'll | ||||
|       find someone else to help you. Maybe Black Mesa? That was a joke. Ha Ha. | ||||
|       Fat Chance! Anyway this cake is great! It's so delicious and moist! Look | ||||
|       at me: still talking when there's science to do! When I look out there, it | ||||
|       makes me glad I'm not you. I've experiments to run. There is research to | ||||
|       be done. On the people who are still alive. And believe me I am still | ||||
|       alive. I'm doing science and I'm still alive. I feel fantastic and I'm | ||||
|       still alive. While you're dying I'll be still alive. And when you're dead | ||||
|       I will be still alive Still alive. Still alive. | ||||
|     </p> | ||||
|   {/if} | ||||
| </main> | ||||
|  | ||||
| <style> | ||||
|   * { | ||||
|       color: white !important; | ||||
|       font-family: monospace; | ||||
|       white-space: pre; | ||||
|     color: white !important; | ||||
|     font-family: monospace; | ||||
|     white-space: pre; | ||||
|   } | ||||
|  | ||||
|   .ascii { | ||||
| @@ -249,109 +296,8 @@ H@:         :HHHHHHHHHHHHHHHHHHX,    =@H | ||||
|   } | ||||
|  | ||||
|   pre { | ||||
|       margin: 0 auto; | ||||
|       font-family: monospace; | ||||
|       white-space: pre; | ||||
|     margin: 0 auto; | ||||
|     font-family: monospace; | ||||
|     white-space: pre; | ||||
|   } | ||||
| </style> | ||||
|  | ||||
| <svelte:head> | ||||
|     <title>Quartnzet - {status}</title> | ||||
| </svelte:head> | ||||
|  | ||||
| <Banner title="{status}"/> | ||||
|  | ||||
| <main class="container"> | ||||
|     <p>{error.message}</p> | ||||
|  | ||||
|     {#if dev && error.stack} | ||||
|         <pre>{error.stack}</pre> | ||||
|     {:else} | ||||
|         <audio controls autoplay> | ||||
|             <track kind="captions"/> | ||||
|             <source src="http://quartznet.info/alive.ogg" type="audio/wav"> | ||||
|         </audio> | ||||
|         <div class="ascii"> | ||||
|             <div> | ||||
|               <pre><br>{active}</pre> | ||||
|             </div> | ||||
|         </div> | ||||
|         <hr> | ||||
|         <p class="info"> | ||||
| This was a triumph! | ||||
| I'm making a note here: | ||||
| Huge success! | ||||
|  | ||||
| It's hard to overstate | ||||
| my satisfaction. | ||||
|  | ||||
| Aperture Science: | ||||
| We do what we must | ||||
| because we can | ||||
| For the good of all of us. | ||||
| Except the ones who are dead. | ||||
|  | ||||
| But there's no sense crying | ||||
| over every mistake. | ||||
| You just keep on trying | ||||
| 'til you run out of cake. | ||||
| And the science gets done. | ||||
| And you make a neat gun | ||||
| for the people who are | ||||
| still alive. | ||||
|  | ||||
| I'm not even angry... | ||||
| I'm being so sincere right now. | ||||
| Even though you broke my heart, | ||||
| and killed me. | ||||
|  | ||||
| And tore me to pieces. | ||||
| And threw every piece into a fire. | ||||
| As they burned it hurt because | ||||
| I was so happy for you! | ||||
|  | ||||
| Now, these points of data | ||||
| make a beautiful line. | ||||
| And we're out of beta. | ||||
| We're releasing on time! | ||||
| So I'm GLaD I got burned! | ||||
| Think of all the things we learned! | ||||
| for the people who are | ||||
| still alive. | ||||
|  | ||||
| Go ahead and leave me... | ||||
| I think I'd prefer to stay inside... | ||||
| Maybe you'll find someone else | ||||
| to help you. | ||||
| Maybe Black Mesa? | ||||
| That was a joke. Ha Ha. Fat Chance! | ||||
|  | ||||
| Anyway this cake is great! | ||||
| It's so delicious and moist! | ||||
|  | ||||
| Look at me: still talking | ||||
| when there's science to do! | ||||
| When I look out there, | ||||
| it makes me glad I'm not you. | ||||
|  | ||||
| I've experiments to run. | ||||
| There is research to be done. | ||||
| On the people who are | ||||
| still alive. | ||||
| And believe me I am | ||||
| still alive. | ||||
| I'm doing science and I'm | ||||
| still alive. | ||||
| I feel fantastic and I'm | ||||
| still alive. | ||||
| While you're dying I'll be | ||||
| still alive. | ||||
| And when you're dead I will be | ||||
| still alive | ||||
|  | ||||
| Still alive. | ||||
|  | ||||
| Still alive. | ||||
|         </p> | ||||
|     {/if} | ||||
| </main> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user