Quick Start Labels
https://vanillawebdev.blogspot.com/search/label/coding-tips
Coding Tips
4
https://vanillawebdev.blogspot.com/search/label/project-setup
Project Setup
6
https://vanillawebdev.blogspot.com/search/label/starter-code
Starter Code
6
Reading List
https://jackwhiting.co.uk/posts/lazy-loading-vanilla-js-with-webpack-laravel-mix
https://medium.com/free-code-camp/reducing-css-bundle-size-70-by-cutting-the-class-names-and-using-scope-isolation-625440de600b
Libraries
https://github.com/verlok/vanilla-lazyload
Developer Resources
https://webpack.js.org/configuration/output/
https://web.dev/articles/preload-critical-assets
Reading List
https://www.codemzy.com/blog/how-to-name-webpack-chunk
How to name a webpack chunk (including split and common chunks)
Reading List
Featured Post
https://vanillawebdev.blogspot.com/2024/02/installable-web-app.html
Make Your Web App Installable
February 16, 2025How to make your web app installable.
true
https://vanillawebdev.blogspot.com/search/label/homepage
homepage
https://vanillawebdev.blogspot.com/search/label/project-setup
project-setup
Featured Post
Sidebar Labels
https://vanillawebdev.blogspot.com/search/label/app-component
App Component
1
https://vanillawebdev.blogspot.com/search/label/coding-tips
Coding Tips
4
https://vanillawebdev.blogspot.com/search/label/css-tips
CSS Tips
4
https://vanillawebdev.blogspot.com/search/label/data-server
Data Server
2
https://vanillawebdev.blogspot.com/search/label/layout
Layout
1
https://vanillawebdev.blogspot.com/search/label/project-setup
Project Setup
6
https://vanillawebdev.blogspot.com/2025/02/file-caching.html
https://vanillawebdev.blogspot.com/2025/02/list-view.html
https://vanillawebdev.blogspot.com/
https://vanillawebdev.blogspot.com/2025/02/dialog.html
Dialog
February 02, 2025
2025
February
03
06:29 AM
Implementing dialog using HTML <dialog>
element.
HTML
index.html
<div class="_dialogTemplates" hidden>
<!-- # dialogs -->
<!-- ========= -->
<template class="_dialogConfirm">
[dialog .wg-windog
<!-- # confirm -->
[ .backdrop]
<div class="inner">
[ .wrapper
[br]
<form method="dialog" data-ref="form">
[ data-slot="message"]
[ .flex .void-1]
[ .d-flex .justify-end .gap-50
[btn 'OK' value="ok"]
[btn 'Cancel']
]
</form>
]
</div>
]
</template>
<template class="_dialogAlert">
[dialog .wg-windog
<!-- # dialog alert -->
[ .backdrop]
<div class="inner">
[ .wrapper
[br]
<form method="dialog" data-ref="form">
[ data-slot="message"]
[ .flex .void-1]
[ .text-center
[btn 'Ok']
]
</form>
]
</div>
]
</template>
<template class="_dialogPrompt">
[dialog .wg-windog
<!-- # prompt -->
[ .backdrop]
<div class="inner">
[ .wrapper
[br]
<form method="dialog" data-ref="form">
[l data-slot="message" for="i1"]
[in type="text" data-slot="input" #i1]
[br][br]
[ .flex .justify-between
[btn 'Reset' type="reset"]
[ .gap-50 .flex
[btn 'Ok' value="ok"]
[btn 'Cancel']
]
]
</form>
]
</div>
]
</template>
</div>
<link href="style.css" rel="stylesheet"/>
<script src="https://cdn.jsdelivr.net/gh/tmpmachine/vanilla-framework@91de46a/js/infrastructure/libs/windog.js"></script>
<script>
async function init_() {
let userVal = await windog.prompt('John Doe');
if (userVal === null) return;
let isConfirm = await windog.confirm(`Hello ${userVal}. Would you like to continue?`);
if (!isConfirm) return;
await windog.alert('The page shall reload after you close this dialog.');
location.reload()
}
init_();
</script>
CSS
style.css
/* # windog */
.wg-windog {
& {
--sec: 250ms;
}
& {
transition: display var(--sec) allow-discrete, overlay var(--sec) allow-discrete, opacity var(--sec);
padding: 0;
background: transparent;
border: 0;
overflow: hidden;
height: 100%;
width: 100%;
}
&:not(.transitionless)::backdrop {
transition: opacity var(--sec);
opacity: 0;
}
&::backdrop {
background: rgb(0 0 0 / 60%);
}
.inner {
height: 100%;
display: flex;
overflow: hidden;
width: 100%;
}
.wrapper {
&{
transition: opacity var(--sec), transform var(--sec);
opacity: 0;
transform: scale(0.95);
min-width: 360px;
overflow: auto;
max-height: 100%;
max-width: 100%;
margin: auto;
position: relative;
}
&:not([class*="skin"]) {
border: 3px solid;
border-radius: 0.4rem;
background: white;
padding: 1rem;
}
&.varian-h100 {
height: 100%;
}
&.varian-flex{
&{
display: flex;
flex-direction: column;
}
.body{
flex: 1;
overflow: auto;
}
}
}
&[open] .wrapper {
& {
transform: scale(1);
opacity: 1;
}
@starting-style {
opacity: 0;
transform: scale(0.95);
}
}
&[open] {
&::backdrop {
opacity: 1;
}
@starting-style {
&::backdrop{
opacity: 0;
}
}
}
.backdrop {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
}
button:focus {
border-color: #4CAF50;
box-shadow: 0 0 0 3px rgba(76, 175, 80, 0.3);
}
}
https://www.blogger.com/comment/fullpage/post/8166404610182826392/710667067797080811
true
https://vanillawebdev.blogspot.com/search/label/%40lvc
@lvc
https://vanillawebdev.blogspot.com/2025/02/file-caching.html
https://vanillawebdev.blogspot.com/2025/02/list-view.html
https://vanillawebdev.blogspot.com/