From d40eea6eab80593009da8d52e5f58f3bf1907ebe Mon Sep 17 00:00:00 2001 From: bruno Date: Thu, 27 Oct 2022 13:11:22 -0400 Subject: [PATCH] adding dashbord section --- code/web_utils.nim | 34 +++ data/dashbord.xlsx | Bin 9358 -> 10967 bytes main.nim | 40 ++- public/css/bouton.css | 515 ++++++++++++++++++++++++++++++++++++ tmpl/tests/test_bouton.tmpl | 36 +++ tmpl/website.tmpl | 2 +- 6 files changed, 605 insertions(+), 22 deletions(-) create mode 100644 public/css/bouton.css create mode 100644 tmpl/tests/test_bouton.tmpl diff --git a/code/web_utils.nim b/code/web_utils.nim index 0dfc3d9..91977fd 100644 --- a/code/web_utils.nim +++ b/code/web_utils.nim @@ -6,6 +6,7 @@ # web_utils : procedure related web interface # # --==--==--==--==--==--==--==--==--==--==--==--==--==--==--==-- # +import xlsx # read dashbord.xlsx import jester import joplin_utils @@ -46,3 +47,36 @@ type ColomnRightData* = ref object of RootObj req*: Request +# --==--==--==--==--==--==--==--==--==--==-- # +# TYPE : Dashbord information +# --==--==--==--==--==--==--==--==--==--==-- # +type DashbordData* = ref object of RootObj + position*: seq[int] + ext_link*: seq[string] + int_link*: seq[string] + title*: seq[string] + category*: seq[string] + icon*: seq[string] + open_method*: seq[string] + tag*: seq[string] + hotkey*: seq[string] + color*: seq[string] + req*: Request + + +# --==--==--==--==--==--==--==--==--==--==--==--==--==--==-- # +# PROC : +# --==--==--==--==--==--==--==--==--==--==--==--==--==--==-- # +proc getDashbordData(ddata: var DashbordData) = + let + data = parseExcel("data/dashbord.xlsx", header = true) + sheetName = "dashbord" + echo data[sheetName] + + let rows = data[sheetName].toSeq(true) + echo rows.len() + # for i in 0 ..data[sheetName]: + # ddata.position[i] = row[i] + for row in rows: + echo "position: " & row[0] + echo "URL externe: " & row[1] diff --git a/data/dashbord.xlsx b/data/dashbord.xlsx index 41e27249789f7bf80afa6ac39e3532cb4282f31b..659371c065b7a5220b1814fd60e1f9877c903121 100644 GIT binary patch delta 6813 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 delta 5234 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 JODuoi{tEy)j)njL diff --git a/main.nim b/main.nim index 6ac4343..e39accf 100644 --- a/main.nim +++ b/main.nim @@ -18,7 +18,7 @@ # --==--==--==--==--==--==--==--==--==--==-- # import os # Used to get arguments import uri # We need to encode urls: encodeUrl() -import xlsx # read dashbord.xlsx + import times # Time and date import jester # Our webserver import logging # Logging utils @@ -50,9 +50,9 @@ let db_host = dict.getSectionValue("Database", "host") # Website let mainURL = dict.getSectionValue("Server", "url") let mainPort = parseInt dict.getSectionValue("Server", "port") -let mainWebsite = dict.getSectionValue("Server", "website") + #let mainWebsite = dict.getSectionValue("Server", "website") -# Joplin + # Joplin let joplin_token = dict.getSectionValue("Joplin", "token") # --==--==--==--==--==--==--==--==--==--==-- # @@ -195,21 +195,27 @@ template createTFD() = # Assign the c to TDATA var c {.inject.}: TData - # Assign the c to TDATA + # Assign the cld et crd to ColomnData var cld {.inject.}: ColomnLeftData var crd {.inject.}: ColomnRightData + # Assign the dashData to DashbordData + var dashData {.inject.}: DashbordData + # New instance of c new(c) new(cld) new(crd) + new(dashData) # Set standard values init(c, cld, crd) + # Get users request c.req = request cld.req = request crd.req = request + dashData.req = request # Check for cookies (we need the cookie named sid) if cookies(request).len > 0: @@ -261,6 +267,7 @@ include "tmpl/tests/test_notebooks.tmpl" include "tmpl/tests/test_notes.tmpl" include "tmpl/tests/test_tags.tmpl" include "tmpl/tests/test_viewtree.tmpl" +include "tmpl/tests/test_bouton.tmpl" # --==--==--==--==--==--==--==--==--==--==-- # @@ -300,8 +307,6 @@ routes: # Start joplin terminal cli if stropped if @"msg" == "startStopJoplin": var isStart = joplin_cli_start_stop() - - redirect(url_note) # if Joplin application work @@ -335,10 +340,6 @@ routes: cld.j_notes = waitFor get_joplin_notes(joplin_token) cld.j_notes_nb = cld.j_notes.id.len() - # for i in 0 .. (cld.j_notes.id.len() - 1): - # echo cld.j_notes.id[i] - # echo cld.j_notes.created_time[i] - if selectedNoteId != "": crd.j_SelectedNote = waitFor get_joplin_note(joplin_token, selectedNoteId) @@ -351,22 +352,13 @@ routes: echo "=> Section dashbord" #cld.option = dashbord - let - data = parseExcel("data/dashbord.xlsx", header = true) - sheetName = "dashbord" - echo data[sheetName] - - let rows = data[sheetName].toSeq(true) - for row in rows: - echo "position: " & row[0] - echo "URL externe: " & row[1] - + # getDashbordData(dashData) elif @"msg" == "sendFeedBack": echo "Todo" resp Http200, {"Access-Control-Allow-Origin": "http://127.0.0.1:7000"}, - genSecret(c, cld, crd) + genSecret(c, cld, crd, dashData) # Login route @@ -459,6 +451,12 @@ routes: createTFD() resp test_viewtree(c) + # Test a viewtree + # --==--==--==--==--==--==--==--==--==--==-- # + get "/test_bouton": + createTFD() + resp test_bonton(dashData) + # Test geting all tags as JSON output # --==--==--==--==--==--==--==--==--==--==-- # get "/test_tags_json": diff --git a/public/css/bouton.css b/public/css/bouton.css new file mode 100644 index 0000000..b7f6e8d --- /dev/null +++ b/public/css/bouton.css @@ -0,0 +1,515 @@ +@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; + } +} + +.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); +} + +.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 { + 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; + } +} \ No newline at end of file diff --git a/tmpl/tests/test_bouton.tmpl b/tmpl/tests/test_bouton.tmpl new file mode 100644 index 0000000..95447bf --- /dev/null +++ b/tmpl/tests/test_bouton.tmpl @@ -0,0 +1,36 @@ +#? stdtmpl | standard +# +#proc test_bonton(dashData: var DashbordData): string = +# result = "" + + + + + + + Document + + + + + + + + +

TEST Bouton Dashbord

+
+ +
+ + +#end proc \ No newline at end of file diff --git a/tmpl/website.tmpl b/tmpl/website.tmpl index 44af9da..ff58ad2 100644 --- a/tmpl/website.tmpl +++ b/tmpl/website.tmpl @@ -13,7 +13,7 @@ # # import snippet_html # import snippet_icons -#proc genSecret(c: var TData, columnLeftInfo: var ColomnLeftData, ColomnRightInfo: var ColomnRightData): string = +#proc genSecret(c: var TData, columnLeftInfo: var ColomnLeftData, ColomnRightInfo: var ColomnRightData, DashbordInfo: var DashbordData): string = # result = ""