From 4ffdb5780a4739b7ac3adbb1578af6ed81a3ea3d Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 9 Nov 2022 12:38:32 -0500 Subject: [PATCH] commit mix - code incomplet --- code/joplin_utils.nim | 3 +- code/web_utils.nim | 8 +- data/dashbord.xlsx | Bin 21476 -> 21886 bytes data/~$dashbord.xlsx | Bin 0 -> 165 bytes main.nim | 10 +- public/css/bouton.css | 699 --------------------------- public/css/dashboard.css | 352 ++++++++++++++ public/css/main.css | 9 +- public/css/styles.css | 13 + public/images/icons/Book_02-512.webp | Bin 0 -> 4774 bytes public/images/svg/Shaarli.svg | 45 ++ public/images/svg/bookmark.svg | 2 + public/images/svg/emby.svg | 1 + public/images/svg/filebrowser.svg | 147 ++++++ public/images/svg/internet.svg | 141 ++++++ public/images/svg/nginx.svg | 1 + public/images/svg/qbittorrent.svg | 1 + public/js/all.min.js | 6 + public/js/main.js | 162 ++++--- tmpl/dashboard.nim | 108 +++++ tmpl/snippet_icons.nim | 58 +++ tmpl/tests/test_bouton.nim | 109 ++++- tmpl/tests/test_homepage.nim | 3 +- tmpl/website.nim | 14 +- 24 files changed, 1076 insertions(+), 816 deletions(-) create mode 100644 data/~$dashbord.xlsx delete mode 100644 public/css/bouton.css create mode 100644 public/css/dashboard.css create mode 100644 public/images/icons/Book_02-512.webp create mode 100644 public/images/svg/Shaarli.svg create mode 100644 public/images/svg/bookmark.svg create mode 100644 public/images/svg/emby.svg create mode 100644 public/images/svg/filebrowser.svg create mode 100644 public/images/svg/internet.svg create mode 100644 public/images/svg/nginx.svg create mode 100644 public/images/svg/qbittorrent.svg create mode 100644 public/js/all.min.js create mode 100644 tmpl/dashboard.nim diff --git a/code/joplin_utils.nim b/code/joplin_utils.nim index ee5b199..a51c4cf 100644 --- a/code/joplin_utils.nim +++ b/code/joplin_utils.nim @@ -15,14 +15,13 @@ import std/json import httpcore import strutils import strformat -import std/times import std/options import std/httpclient import std/asyncdispatch import utils # Joplin utils procedures and types -from os import sleep +# from os import sleep from posix import read, write, fdatasync, close # --==--==--==--==--==--==--==--==--==--==-- # diff --git a/code/web_utils.nim b/code/web_utils.nim index 70d9ffa..918cec4 100644 --- a/code/web_utils.nim +++ b/code/web_utils.nim @@ -38,7 +38,7 @@ type DashbordData* = object category*: seq[string] icon*: seq[string] open_method*: seq[string] - tag*: seq[string] + tag*: seq[seq[string]] hotkey*: seq[string] color*: seq[string] @@ -75,6 +75,7 @@ type ColomnRightData* = ref object of RootObj proc getDashbordData*(): Future[DashbordData] {.async.} = var ddata: DashbordData + var tagslist: seq[string] let data = parseExcel("data/dashbord.xlsx", header = true) @@ -101,7 +102,10 @@ proc getDashbordData*(): Future[DashbordData] {.async.} = ddata.category.add(rows[i][10]) ddata.icon.add(rows[i][11]) ddata.open_method.add(rows[i][12]) - ddata.tag.add(rows[i][13]) + + tagslist = rows[i][13].split(',') + + ddata.tag.add(tagslist) ddata.hotkey.add(rows[i][14]) ddata.color.add(rows[i][15]) diff --git a/data/dashbord.xlsx b/data/dashbord.xlsx index 0d9e103a25bb9719060f472bb71c142d31eb398c..bf6e8377db79c5df47a011401037f4b21469987e 100644 GIT binary patch delta 15262 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 delta 14856 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 diff --git a/data/~$dashbord.xlsx b/data/~$dashbord.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6a5a0566001a3cb74dae7f17008e73c90ff80cc8 GIT binary patch literal 165 fcmZQgDk{y(S0ELzG9)n+F_bdoG2}BS&>R8)uDB4F literal 0 HcmV?d00001 diff --git a/main.nim b/main.nim index 80329eb..c2a4847 100644 --- a/main.nim +++ b/main.nim @@ -260,8 +260,10 @@ when isMainModule: # ---------------------------- # #include "tmpl/main.tmpl" include "tmpl/user.nim" +include "tmpl/dashboard.nim" include "tmpl/website.nim" + # Tests pages include # ---------------------------- # include "tmpl/tests/test_homepage.nim" @@ -354,6 +356,10 @@ routes: echo "=> Section dashbord" #url_note = "/secret?msg=dashbord" cld.option = dashbord + cld.dashbord = waitFor getDashbordData() + # resp test_bouton(cld) + #resp dashbord(cld) + elif @"msg" == "sendFeedBack": @@ -458,10 +464,6 @@ routes: get "/test_bouton": createTFD() cld.dashbord = waitFor getDashbordData() - - #dashData.title.add("test de titre ...") - # echo dashData.title[0] - resp test_bouton(cld) # Test geting all tags as JSON output diff --git a/public/css/bouton.css b/public/css/bouton.css deleted file mode 100644 index 2477951..0000000 --- a/public/css/bouton.css +++ /dev/null @@ -1,699 +0,0 @@ -@charset "UTF-8"; -body { - margin: auto; - font-family: Tahoma, sans-serif; - font-size: 16px; -} - -a { - text-decoration: none; - cursor: pointer; -} - -.disabled { - opacity: .5; - cursor: default; -} - -.ellipsis { - display: block; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} - -.panel { - padding: 5px; - text-align: center; -} - -.apps { - margin: auto; - width: 100%; - display: flex; - flex-wrap: wrap; - justify-content: center; -} - -div.footer.version { - font-size: 10px; - margin-top: 10px; -} - -div.footer.sorts { - text-align: center; -} - -.dialog>div { - margin: 5px 20px; - padding: 1px; - text-align: left; -} - -.dialog>div.center { - text-align: center; -} - -.dialog>div>button { - margin-right: 5px; -} - -.title { - padding: 5px; - text-align: center; - font-size: 20px; -} - -.headline { - padding: 5px; - text-align: center; - font-size: 18px; -} - -.logout { - text-align: center; - font-size: 12px; -} - -.content { - display: grid; - grid-template-columns: auto; - grid-gap: 10px; - justify-content: center; - padding: 10px; - margin: auto; - width: 95%; -} - -@media only screen and (min-width: 800px) { - .content { - grid-template-columns: auto auto; - } -} - -@media only screen and (min-width: 1200px) { - .content { - grid-template-columns: auto auto auto; - } -} - -@media only screen and (min-width: 1600px) { - .content { - grid-template-columns: auto auto auto auto; - } -} - -@media (prefers-color-scheme: dark) { - body { - background-color: #333; - color: #fff; - } -} - -.content>div { - max-width: 350px; -} - -.gwt-Button { - margin: 0px; - border: none; - padding: 6px; - cursor: pointer; - border-radius: 6px; - min-width: 28px; - min-height: 28px; -} - -.gwt-Anchor.spacer, -.gwt-Button.spacer { - margin-left: 5px; -} - -.gwt-Button:disabled { - cursor: auto; -} - -.gwt-DialogBox { - border-radius: 6px; -} - -.gwt-DialogBox .Caption { - padding: 4px 8px 4px 4px; - cursor: default; -} - -.gwt-DialogBox .dialogTopLeftInner { - width: 10px; - height: 8px; - zoom: 1; -} - -.gwt-DialogBox .dialogTopRightInner { - width: 12px; - zoom: 1; -} - -.gwt-DialogBox .dialogBottomLeftInner { - width: 10px; - height: 12px; - zoom: 1; -} - -.gwt-DialogBox .dialogBottomRightInner { - width: 12px; - height: 12px; - zoom: 1; -} - -.gwt-DialogBox .dialogMiddleCenter { - padding: 3px; -} - - -/** Light theme */ - -body.light { - background: #f5f5f5 url("images/Background.png") no-repeat center fixed; - background-size: contain; -} - -.light a { - color: black; -} - -.light a:hover { - color: #248bfb; -} - -.light a.pagination:hover { - color: #248bfb; - background: #ececec; -} - -.light a.pagination.current { - color: #248bfb; - background: #ececec; -} - -.light .title { - background-color: #248bfb; - color: white; -} - -.light .content { - background-color: white; -} - -.light .gwt-Button { - border: 1px solid navy; - background-color: #248bfb; - color: white; -} - -.light .gwt-Button:hover { - background-color: #0362cb; -} - -.light .gwt-Button:disabled { - border-color: #aaa; - background-color: #ccc; - color: white; -} - -.light .gwt-Button.sort:disabled { - border-color: green; - background-color: #03cb62; - color: white; -} - -.light .gwt-DialogBox { - background-color: #248bfb; - border: 3px solid #abd2fe; -} - -.light .gwt-DialogBox .Caption { - color: white; -} - -.light .gwt-DialogBox .dialogMiddleCenter { - background: white; -} - -.light .gwt-PopupPanelGlass { - background-color: black; - opacity: 0.3; - filter: alpha(opacity=30); -} - -.light .content>div { - border: 1px solid #f5f5f5; -} - - -/** Dark theme */ - -body.dark { - background: #272c30 url("images/Background-Dark.png") no-repeat center fixed; - background-size: contain; - color: #95c7fd; -} - -.dark a { - color: #95c7fd; -} - -.dark a:hover { - color: #e7e9eb; -} - -.dark a.pagination:hover { - color: #e7e9eb; - background: #95a0aa; -} - -.dark a.pagination.current { - color: #e7e9eb; - background: #95a0aa; -} - -.dark .title { - background-color: #024793; - color: #95c7fd; -} - -.dark .content { - background-color: #202326; -} - -.dark .gwt-Button { - border: 1px solid black; - background-color: #95a0aa; - color: #04356b; -} - -.dark .gwt-Button:hover { - background-color: #bec5cb; -} - -.dark .gwt-Button:disabled { - border-color: #666; - background-color: #333; - color: #248bfb; -} - -.dark .gwt-Button.sort:disabled { - color: #03cb62; -} - -.dark .gwt-DialogBox { - background-color: #555; - border: 3px solid #999; -} - -.dark .gwt-DialogBox .Caption { - color: #95c7fd; -} - -.dark .gwt-DialogBox .dialogMiddleCenter { - background: #272c30; -} - -.dark .gwt-PopupPanelGlass { - background-color: black; - opacity: 0.5; - filter: alpha(opacity=50); -} - -.dark .content>div { - border: 1px solid #b9b9b9; -} - -.grid-container-title { - grid-area: title; - text-align: center; - font-size: min(max(5vw, 10px), 24px); -} - -.grid-container-title.jp { - font-size: min(max(3.75vw, 6px), 21px); -} - -.grid-container-logo { - grid-area: logo; -} - -.grid-container-description { - grid-area: description; - font-size: min(max(3.25vw, 8px), 18px); - padding: 10px; -} - -.grid-container-description.jp { - font-size: min(max(3vw, 5px), 15px); -} - -.grid-container-languages { - grid-area: languages; - font-size: min(max(3vw, 7px), 16px); -} - -.grid-container-languages.jp { - font-size: min(max(2.75vw, 5px), 13px); - ; -} - -.grid-container { - display: grid; - grid-template-areas: 'logo title' 'logo description' 'logo languages'; - gap: 2px; - padding: 10px; -} - - -/** Glow */ - - -/** https://webdeasy.de/en/top-css-buttons-en */ - -.glow-on-hover { - display: inline-block; - width: 90vw; - max-width: 400px; - height: 45vw; - max-height: 200px; - margin: 5px; - border: 1px solid #111; - outline: none; - cursor: pointer; - position: relative; - z-index: 0; - border-radius: 10px; - padding: 6px; -} - -.light .glow-on-hover { - color: white; - background-color: rgba(36, 139, 251, 0.5); -} - -.dark .glow-on-hover { - color: #95c7fd; - background-color: rgba(190, 197, 203, 0.3); -} - -.glow-on-hover:before { - content: ''; - background: linear-gradient(45deg, #ff0000, #ff7300, #fffb00, #48ff00, #00ffd5, #002bff, #7a00ff, #ff00c8, #ff0000); - position: absolute; - top: -2px; - left: -2px; - background-size: 400%; - z-index: -1; - filter: blur(5px); - width: calc(100% + 4px); - height: calc(100% + 4px); - animation: glowing 20s linear infinite; - opacity: 0; - transition: opacity .3s ease-in-out; - border-radius: 10px; -} - -.glow-on-hover:active { - color: #888888 -} - -.glow-on-hover:active:after { - background: transparent; -} - -.glow-on-hover:hover:before { - opacity: 1; -} - -.glow-on-hover:after { - z-index: -1; - content: ''; - position: absolute; - width: 100%; - height: 100%; - left: 0; - top: 0; - border-radius: 10px; -} - -.light .glow-on-hover:hover:after { - background-color: rgba(0, 33, 122, 1); -} - -.dark .glow-on-hover:hover:after { - background-color: rgba(25, 25, 25, 1); -} - -@keyframes glowing { - 0% { - background-position: 0 0; - } - 50% { - background-position: 400% 0; - } - 100% { - background-position: 0 0; - } -} - -div.crossfade { - position: relative; - width: min(32.4vw, 144px); - height: min(32.4vw, 144px); -} - -div.crossfade>img { - position: absolute; - top: -1px; - bottom: 0; - left: -1px; - right: 0; - width: min(32.4vw, 144px); - height: min(32.4vw, 144px); -} - -div.crossfade>img.bottom { - animation-name: fade-bottom; - animation-timing-function: ease-in-out; - animation-iteration-count: infinite; - animation-duration: 5s; - animation-direction: alternate; -} - -div.crossfade>img.top { - animation-name: fade-top; - animation-timing-function: ease-in-out; - animation-iteration-count: infinite; - animation-duration: 5s; - animation-direction: alternate; -} - -@keyframes fade-bottom { - 0% { - opacity: 0; - } - 25% { - opacity: 0; - } - 75% { - opacity: 1; - } - 100% { - opacity: 1; - } -} - -@keyframes fade-top { - 0% { - opacity: 1; - } - 25% { - opacity: 1; - } - 75% { - opacity: 0; - } - 100% { - opacity: 0; - } -} - - -/* loading.css */ - -#fountainG { - position: relative; - width: 234px; - height: 38px; - margin: auto; -} - -.fountainG { - position: absolute; - top: 0; - background-color: rgb(255, 255, 255); - width: 28px; - height: 28px; - animation-name: bounce_fountainG; - -o-animation-name: bounce_fountainG; - -ms-animation-name: bounce_fountainG; - -webkit-animation-name: bounce_fountainG; - -moz-animation-name: bounce_fountainG; - animation-duration: 0.975s; - -o-animation-duration: 0.975s; - -ms-animation-duration: 0.975s; - -webkit-animation-duration: 0.975s; - -moz-animation-duration: 0.975s; - animation-iteration-count: infinite; - -o-animation-iteration-count: infinite; - -ms-animation-iteration-count: infinite; - -webkit-animation-iteration-count: infinite; - -moz-animation-iteration-count: infinite; - animation-direction: normal; - -o-animation-direction: normal; - -ms-animation-direction: normal; - -webkit-animation-direction: normal; - -moz-animation-direction: normal; - transform: scale(.3); - -o-transform: scale(.3); - -ms-transform: scale(.3); - -webkit-transform: scale(.3); - -moz-transform: scale(.3); - border-radius: 19px; - -o-border-radius: 19px; - -ms-border-radius: 19px; - -webkit-border-radius: 19px; - -moz-border-radius: 19px; -} - -#fountainG_1 { - left: 0; - animation-delay: 0.386s; - -o-animation-delay: 0.386s; - -ms-animation-delay: 0.386s; - -webkit-animation-delay: 0.386s; - -moz-animation-delay: 0.386s; -} - -#fountainG_2 { - left: 29px; - animation-delay: 0.4825s; - -o-animation-delay: 0.4825s; - -ms-animation-delay: 0.4825s; - -webkit-animation-delay: 0.4825s; - -moz-animation-delay: 0.4825s; -} - -#fountainG_3 { - left: 58px; - animation-delay: 0.589s; - -o-animation-delay: 0.589s; - -ms-animation-delay: 0.589s; - -webkit-animation-delay: 0.589s; - -moz-animation-delay: 0.589s; -} - -#fountainG_4 { - left: 88px; - animation-delay: 0.6855s; - -o-animation-delay: 0.6855s; - -ms-animation-delay: 0.6855s; - -webkit-animation-delay: 0.6855s; - -moz-animation-delay: 0.6855s; -} - -#fountainG_5 { - left: 117px; - animation-delay: 0.782s; - -o-animation-delay: 0.782s; - -ms-animation-delay: 0.782s; - -webkit-animation-delay: 0.782s; - -moz-animation-delay: 0.782s; -} - -#fountainG_6 { - left: 146px; - animation-delay: 0.8785s; - -o-animation-delay: 0.8785s; - -ms-animation-delay: 0.8785s; - -webkit-animation-delay: 0.8785s; - -moz-animation-delay: 0.8785s; -} - -#fountainG_7 { - left: 175px; - animation-delay: 0.975s; - -o-animation-delay: 0.975s; - -ms-animation-delay: 0.975s; - -webkit-animation-delay: 0.975s; - -moz-animation-delay: 0.975s; -} - -#fountainG_8 { - left: 205px; - animation-delay: 1.0715s; - -o-animation-delay: 1.0715s; - -ms-animation-delay: 1.0715s; - -webkit-animation-delay: 1.0715s; - -moz-animation-delay: 1.0715s; -} - -@keyframes bounce_fountainG { - 0% { - transform: scale(1); - background-color: rgb(255, 0, 0); - } - 100% { - transform: scale(.3); - background-color: rgb(255, 255, 255); - } -} - -@-o-keyframes bounce_fountainG { - 0% { - -o-transform: scale(1); - background-color: rgb(255, 0, 0); - } - 100% { - -o-transform: scale(.3); - background-color: rgb(255, 255, 255); - } -} - -@-ms-keyframes bounce_fountainG { - 0% { - -ms-transform: scale(1); - background-color: rgb(255, 0, 0); - } - 100% { - -ms-transform: scale(.3); - background-color: rgb(255, 255, 255); - } -} - -@-webkit-keyframes bounce_fountainG { - 0% { - -webkit-transform: scale(1); - background-color: rgb(255, 0, 0); - } - 100% { - -webkit-transform: scale(.3); - background-color: rgb(255, 255, 255); - } -} - -@-moz-keyframes bounce_fountainG { - 0% { - -moz-transform: scale(1); - background-color: rgb(255, 0, 0); - } - 100% { - -moz-transform: scale(.3); - background-color: rgb(255, 255, 255); - } -} \ No newline at end of file diff --git a/public/css/dashboard.css b/public/css/dashboard.css new file mode 100644 index 0000000..a983f60 --- /dev/null +++ b/public/css/dashboard.css @@ -0,0 +1,352 @@ +/*////////////////////////////////////////////////////////////////// +[ FIN ]*/ + +@charset "UTF-8"; +body { + margin: auto; + font-family: Tahoma, sans-serif; + font-size: 16px; +} + +/*////////////////////////////////////////////////////////////////// +[ Page layout ]*/ + +.panel { + padding: 5px; + text-align: center; +} + +.apps { + margin: auto; + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; +} + +div.footer.version { + font-size: 12px; + margin-top: 12px; +} + +@media only screen and (min-width: 800px) { + .content { + grid-template-columns: auto auto; + } +} + +@media only screen and (min-width: 1200px) { + .content { + grid-template-columns: auto auto auto; + } +} + +@media only screen and (min-width: 1600px) { + .content { + grid-template-columns: auto auto auto auto; + } +} + + +/*////////////////////////////////////////////////////////////////// +[ Button grid layout ]*/ + +.grid-container { + display: grid; + /* grid-template-areas: 'logo title' 'logo description' 'logo infos' 'logo status'; */ + grid-template-areas: + 'logo title' + 'logo description' + 'logo info' + 'status tags'; + gap: 2px; + padding: 2px; +} + +.grid-container-title { + grid-area: title; + text-align: right; + font-weight: bold; + padding-right: 2px; + font-size: min(max(3vw, 8px), 18px); + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow: hidden; + max-width: 25ch; + +} + +.grid-container-title.jp { + font-size: min(max(3.75vw, 6px), 21px); +} + +.grid-container-logo { + grid-area: logo; + padding-top: 10px; +} + +.grid-container-description { + grid-area: description; + text-align: right; + font-size: min(max(3vw, 8px), 15px); + font-style: italic; + padding: 0.5px; + padding-right: 2px; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; +} + +.grid-container-info { + grid-area: info; + text-align: right; + padding: 0.25px; + padding-right: 2px; + text-align: right; + font-size: 15px; + +} + +.grid-container-tags { + grid-area: tags; + text-align: right; + padding: 0.5px; + padding-right: 2px; + padding-top: 3px; + fill: blue; +} + +.grid-container-status { + grid-area: status; + text-align: left; + padding: 2px; + padding-left: 20px; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow: hidden; + max-width: 25ch; +} + +/*////////////////////////////////////////////////////////////////// +[ Icons ]*/ + +.dashboard-logo { + padding: 0.5px; + padding-left: 4px; + width: min(3.24vw, 14px); + height: min(3.24vw, 14px); +} + +.lock { + padding: 0.8px; + /* padding-top: 5px; */ + width: min(3.24vw, 20px); + height: min(3.24vw, 20px); + fill: green; +} + +.lockopen { + padding: 0.8px; + /* padding-top: 5px; */ + width: min(3.24vw, 20px); + height: min(3.24vw, 20px); + fill: red; +} + +.status-logo { + padding: 0.8px; + /* padding-top: 5px; */ + width: min(3.24vw, 20px); + height: min(3.24vw, 20px); + fill: blue; +} + +/*////////////////////////////////////////////////////////////////// +[ Glow ] https://webdeasy.de/en/top-css-buttons-en */ + +.glow-on-hover { + display: inline-block; + width: 90vw; + max-width: 400px; + height: 45vw; + max-height: 200px; + margin: 5px; + border: 1px solid #111; + outline: none; + cursor: pointer; + position: relative; + z-index: 0; + border-radius: 10px; + padding: 6px; +} + +/* .light .glow-on-hover { + color: white; + background-color: rgba(41, 109, 181, 0.5); +} + +.dark .glow-on-hover { + color: #95c7fd; + background-color: rgba(190, 197, 203, 0.3); +} */ + +.glow-on-hover:before { + content: ''; + /* background: linear-gradient(45deg, #ff0000, #ff7300, #fffb00, #48ff00, #00ffd5, #002bff, #7a00ff, #ff00c8, #ff0000); */ + background: linear-gradient(45deg,#052479, #0b36ac, #1b58fe, #3c6ffa, #5580f7, #6c93fe, #91adf9, #b7c9fc, #91adf9, #6c93fe, #5580f7, #3c6ffa, #1b58fe, #0b36ac, #052479, #091c4f); + position: absolute; + top: -2px; + left: -2px; + background-size: 400%; + z-index: -1; + filter: blur(5px); + width: calc(100% + 4px); + height: calc(100% + 4px); + animation: glowing 20s linear infinite; + opacity: 0; + transition: opacity .3s ease-in-out; + border-radius: 10px; + color: white; + background-color: rgba(36, 139, 251, 0.5); +} + +.glow-on-hover:active { + color: #888888 +} + +.glow-on-hover:active:after { + background: transparent; +} + +.glow-on-hover:hover:before { + opacity: 1; +} + +.glow-on-hover:after { + z-index: -1; + content: ''; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + border-radius: 10px; +} + +.glow-on-hover:hover:after { + color: white; + background-color: rgb(41, 139, 214) +} + +.dark .glow-on-hover:hover:after { + background-color: rgba(25, 25, 25, 1); +} + +@keyframes glowing { + 0% { + background-position: 0 0; + } + 50% { + background-position: 400% 0; + } + 100% { + background-position: 0 0; + } +} + +/*////////////////////////////////////////////////////////////////// +[ Cross fade image Brands - Bookmark ]*/ +div.crossfade { + position: relative; + width: min(32.4vw, 124px); + height: min(32.4vw, 124px); +} + +div.crossfade > img { + position: absolute; + top: -1px; + bottom: 0; + left: -1px; + right: 0; + width: min(32.4vw, 124px); + height: min(32.4vw, 124px); +} + + + div.crossfade > img { + position:absolute; + left:0; + -webkit-transition: all 1s ease-in-out; + -moz-transition: all 1s ease-in-out; + -o-transition: all 1s ease-in-out; + transition: all 1s ease-in-out; + } + + div.crossfade > img.bookmark { + -webkit-transform:scale(0,0); + -moz-transform:scale(0,0); + -o-transform:scale(0,0); + transform:scale(0,0); + opacity:0; + + } + + div.crossfade:hover img.bookmark, div.crossfade.hover_effect img.bookmark { + opacity:1; + -webkit-transform:scale(1,1); + -webkit-transform-origin: top right; + -moz-transform:scale(1,1); + -moz-transform-origin: top right; + -o-transform:scale(1,1); + -o-transform-origin: top right; + transform:scale(1,1); + transform-origin: top right; + } + + div.crossfade:hover img.brands, div.crossfade.hover_effect img.brands { + -webkit-transform:scale(0,0); + -webkit-transform-origin: bottom left; + -moz-transform:scale(0,0); + -moz-transform-origin: bottom left; + -o-transform:scale(0,0); + -o-transform-origin: bottom left; + transform:scale(0,0); + transform-origin: bottom left; + } + + +@keyframes fade-bottom { + 0% { + opacity: 0; + } + 25% { + opacity: 0; + } + 75% { + opacity: 1; + } + 100% { + opacity: 1; + } +} + +@keyframes fade-top { + 0% { + opacity: 1; + } + 25% { + opacity: 1; + } + 75% { + opacity: 0; + } + 100% { + opacity: 0; + } +} + +/*////////////////////////////////////////////////////////////////// +[ FIN ]*/ \ No newline at end of file diff --git a/public/css/main.css b/public/css/main.css index a39d557..aab13b3 100755 --- a/public/css/main.css +++ b/public/css/main.css @@ -1,7 +1,3 @@ - - - - /*////////////////////////////////////////////////////////////////// [ FONT ]*/ @@ -25,9 +21,6 @@ src: url('../fonts/poppins/Poppins-SemiBold.ttf'); } - - - /*////////////////////////////////////////////////////////////////// [ RESTYLE TAG ]*/ @@ -489,6 +482,8 @@ iframe { } } +/*////////////////////////////////////////////////////////////////// +[ FIN ]*/ diff --git a/public/css/styles.css b/public/css/styles.css index d203180..1d2eaa9 100755 --- a/public/css/styles.css +++ b/public/css/styles.css @@ -119,6 +119,19 @@ a { } +/* Search bar */ +.search-wrapper { + display: flex; + flex-direction: column; + gap: .25rem; + padding:3em; +} + +input { + font-size: 1.5rem; +} + + /* Clear floats after the columns */ .row:after { diff --git a/public/images/icons/Book_02-512.webp b/public/images/icons/Book_02-512.webp new file mode 100644 index 0000000000000000000000000000000000000000..d2244231e74cd5b95543d1f2737e131fa7f0d8b0 GIT binary patch literal 4774 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 literal 0 HcmV?d00001 diff --git a/public/images/svg/Shaarli.svg b/public/images/svg/Shaarli.svg new file mode 100644 index 0000000..8438dab --- /dev/null +++ b/public/images/svg/Shaarli.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/svg/bookmark.svg b/public/images/svg/bookmark.svg new file mode 100644 index 0000000..ddf2f2b --- /dev/null +++ b/public/images/svg/bookmark.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/public/images/svg/emby.svg b/public/images/svg/emby.svg new file mode 100644 index 0000000..c8bb9dd --- /dev/null +++ b/public/images/svg/emby.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/svg/filebrowser.svg b/public/images/svg/filebrowser.svg new file mode 100644 index 0000000..5e78ecc --- /dev/null +++ b/public/images/svg/filebrowser.svg @@ -0,0 +1,147 @@ + +image/svg+xml + + + + + \ No newline at end of file diff --git a/public/images/svg/internet.svg b/public/images/svg/internet.svg new file mode 100644 index 0000000..22cbf0e --- /dev/null +++ b/public/images/svg/internet.svg @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/svg/nginx.svg b/public/images/svg/nginx.svg new file mode 100644 index 0000000..a3eef82 --- /dev/null +++ b/public/images/svg/nginx.svg @@ -0,0 +1 @@ +file_type_nginx \ No newline at end of file diff --git a/public/images/svg/qbittorrent.svg b/public/images/svg/qbittorrent.svg new file mode 100644 index 0000000..0cee965 --- /dev/null +++ b/public/images/svg/qbittorrent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/js/all.min.js b/public/js/all.min.js new file mode 100644 index 0000000..d45b67d --- /dev/null +++ b/public/js/all.min.js @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. + */ +!function(){"use strict";var c={},s={};try{"undefined"!=typeof window&&(c=window),"undefined"!=typeof document&&(s=document)}catch(c){}var l=(c.navigator||{}).userAgent,z=void 0===l?"":l,a=c,e=s;a.document,e.documentElement&&e.head&&"function"==typeof e.addEventListener&&e.createElement,~z.indexOf("MSIE")||z.indexOf("Trident/");function C(s,c){var l,z=Object.keys(s);return Object.getOwnPropertySymbols&&(l=Object.getOwnPropertySymbols(s),c&&(l=l.filter(function(c){return Object.getOwnPropertyDescriptor(s,c).enumerable})),z.push.apply(z,l)),z}function H(s){for(var c=1;cc.length)&&(s=c.length);for(var l=0,z=new Array(s);lc.length)&&(s=c.length);for(var l=0,z=new Array(s);lc.length)&&(s=c.length);for(var l=0,z=new Array(s);lc.length)&&(s=c.length);for(var l=0,z=new Array(s);l>>0;l--;)s[l]=c[l];return s}function z1(c){return c.classList?l1(c.classList):(c.getAttribute("class")||"").split(" ").filter(function(c){return c})}function a1(c){return"".concat(c).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function e1(l){return Object.keys(l||{}).reduce(function(c,s){return c+"".concat(s,": ").concat(l[s].trim(),";")},"")}function C1(c){return c.size!==J.size||c.x!==J.x||c.y!==J.y||c.rotate!==J.rotate||c.flipX||c.flipY}function H1(){var c,s,l=b,z=G.cssPrefix,a=G.replacementClass,e=':host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Solid";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Regular";--fa-font-light:normal 300 1em/1 "Font Awesome 6 Light";--fa-font-thin:normal 100 1em/1 "Font Awesome 6 Thin";--fa-font-duotone:normal 900 1em/1 "Font Awesome 6 Duotone";--fa-font-sharp-solid:normal 900 1em/1 "Font Awesome 6 Sharp";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}svg:not(:host).svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible;box-sizing:content-box}.svg-inline--fa{display:var(--fa-display,inline-block);height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0}.svg-inline--fa.fa-sm{vertical-align:-.0714285705em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left{margin-right:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-pull-right{margin-left:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-li{width:var(--fa-li-width,2em);top:.25em}.svg-inline--fa.fa-fw{width:var(--fa-fw-width,1.25em)}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:var(--fa-counter-background-color,#ff253a);border-radius:var(--fa-counter-border-radius,1em);box-sizing:border-box;color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);max-width:var(--fa-counter-max-width,5em);min-width:var(--fa-counter-min-width,1.5em);overflow:hidden;padding:var(--fa-counter-padding,.25em .5em);right:var(--fa-right,0);text-overflow:ellipsis;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-counter-scale,.25));transform:scale(var(--fa-counter-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:var(--fa-bottom,0);right:var(--fa-right,0);top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:var(--fa-bottom,0);left:var(--fa-left,0);right:auto;top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{top:var(--fa-top,0);right:var(--fa-right,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:var(--fa-left,0);right:auto;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top left;transform-origin:top left}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.0714285718em;vertical-align:.0535714295em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.0416666682em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width,2em) * -1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);border-style:var(--fa-border-style,solid);border-width:var(--fa-border-width,.08em);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}100%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}100%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}24%,8%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}100%,40%{-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}24%,8%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}100%,40%{-webkit-transform:rotate(0);transform:rotate(0)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;vertical-align:middle;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;z-index:var(--fa-stack-z-index,auto)}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-sr-only,.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.fa-sr-only-focusable:not(:focus),.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor);opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fa-duotone.fa-inverse,.fad.fa-inverse{color:var(--fa-inverse,#fff)}';return"fa"===z&&a===l||(c=new RegExp("\\.".concat("fa","\\-"),"g"),s=new RegExp("\\--".concat("fa","\\-"),"g"),l=new RegExp("\\.".concat(l),"g"),e=e.replace(c,".".concat(z,"-")).replace(s,"--".concat(z,"-")).replace(l,".".concat(a))),e}var t1=!1;function V1(){G.autoAddCss&&!t1&&(function(c){if(c&&L){var s=v.createElement("style");s.setAttribute("type","text/css"),s.innerHTML=c;for(var l=v.head.childNodes,z=null,a=l.length-1;-1").concat(z.map(o1).join(""),"")}function m1(c,s,l){if(c&&c[s]&&c[s][l])return{prefix:s,iconName:l,icon:c[s][l]}}L&&((n1=(v.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(v.readyState))||v.addEventListener("DOMContentLoaded",r1));function f1(c,s,l,z){for(var a,e,C=Object.keys(c),H=C.length,t=void 0!==z?v1(s,z):s,V=void 0===l?(a=1,c[C[0]]):(a=0,l);a +
+
+
+ # var count: int = 1 + # var i: int + # for i in 0 .. (columnLeftInfo.dashbord.position.len() - 1) : + # count += 1 + + # end for +
+
+
+ + + + +#end proc \ No newline at end of file diff --git a/tmpl/snippet_icons.nim b/tmpl/snippet_icons.nim index b8d0812..bda78ad 100644 --- a/tmpl/snippet_icons.nim +++ b/tmpl/snippet_icons.nim @@ -212,3 +212,61 @@ proc SendFeedback_icon*(): string = tmpli html""" """ + + +# --==--==--==--==--==--==--==--==--==--==-- # +# SVG : Bookmark icon +# --==--==--==--==--==--==--==--==--==--==-- # +proc Bookmark_icon*(): string = tmpli html""" + + + """ + +# --==--==--==--==--==--==--==--==--==--==-- # +# SVG : Docker icon +# --==--==--==--==--==--==--==--==--==--==-- # +proc Docker_icon*(): string = tmpli html""" + + + """ + + +# --==--==--==--==--==--==--==--==--==--==-- # +# SVG : Lock icon +# --==--==--==--==--==--==--==--==--==--==-- # +proc Lock_icon*(): string = tmpli html""" + + + """ + +# --==--==--==--==--==--==--==--==--==--==-- # +# SVG : Lock-open icon +# --==--==--==--==--==--==--==--==--==--==-- # +proc Lockopen_icon*(): string = tmpli html""" + + + """ + +# --==--==--==--==--==--==--==--==--==--==-- # +# SVG : tag icon +# --==--==--==--==--==--==--==--==--==--==-- # +proc Tag_icon*(): string = tmpli html""" + + """ + +# --==--==--==--==--==--==--==--==--==--==-- # +# SVG : internet icon +# --==--==--==--==--==--==--==--==--==--==-- # +proc Internet_icon*(): string = tmpli html""" + + """ + +# --==--==--==--==--==--==--==--==--==--==-- # +# SVG : LocalNetwork icon +# --==--==--==--==--==--==--==--==--==--==-- # +proc LocalNetwork_icon*(): string = tmpli html""" + + """ \ No newline at end of file diff --git a/tmpl/tests/test_bouton.nim b/tmpl/tests/test_bouton.nim index d7dd1f0..0f13e52 100644 --- a/tmpl/tests/test_bouton.nim +++ b/tmpl/tests/test_bouton.nim @@ -1,5 +1,5 @@ #? stdtmpl | standard -# +# import ../snippet_icons #proc test_bouton(columnLeftInfo: var ColomnLeftData): string = # result = "" @@ -9,20 +9,22 @@ - Document - + Bonton Dashboard + - - + +

TEST Bouton Dashbord

@@ -32,26 +34,87 @@ # var i: int # for i in 0 .. (columnLeftInfo.dashbord.position.len() - 1) : # count += 1 - # if columnLeftInfo.dashbord.ext_link[i] == "" and columnLeftInfo.dashbord.int_link[i] == "": - # end for
@@ -62,7 +125,7 @@
diff --git a/tmpl/tests/test_homepage.nim b/tmpl/tests/test_homepage.nim index ce77261..a3d7bd2 100644 --- a/tmpl/tests/test_homepage.nim +++ b/tmpl/tests/test_homepage.nim @@ -19,7 +19,8 @@

Test joplin Notebooks

Test Joplin Notes

Test Joplin Tags

-

Test View Tree

Test Bouton

+

Test View Tree

+

Test Bouton

diff --git a/tmpl/website.nim b/tmpl/website.nim index 44af9da..74031e1 100644 --- a/tmpl/website.nim +++ b/tmpl/website.nim @@ -25,6 +25,7 @@ Joplin-TheNewWeb + @@ -32,13 +33,15 @@
+ +
+ + +
+