From bc9fec207beb37f9826f2e0db7eb9d1a350e8127 Mon Sep 17 00:00:00 2001 From: DebaucheryLibrarian Date: Mon, 29 May 2023 00:54:17 +0200 Subject: [PATCH] Initial commit, basic pages and sessions. --- .editorconfig | 14 + .eslintrc | 32 + .gitignore | 6 + README.md | 1 + assets/css/forms.css | 48 + assets/css/inputs.css | 44 + assets/css/markdown.css | 21 + assets/css/states.css | 36 + assets/css/style.css | 31 + assets/css/theme.css | 34 + assets/img/favicon.svg | 71 + assets/img/logo.svg | 83 + assets/img/logo_pixels.png | Bin 0 -> 17477 bytes assets/js/api.js | 86 + assets/js/navigate.js | 4 + components/form/checkbox.vue | 110 + knexfile.js | 6 + log/2023-05-26.log | 15 + log/2023-05-27.log | 42 + log/2023-05-28.log | 269 + log/2023-05-29.log | 28 + migrations/20230513004141_init.js | 97 + package-lock.json | 13275 ++++++++++++++++++++++++++++ package.json | 64 + pages/account/create.page.vue | 177 + pages/account/login.page.vue | 142 + pages/help/user-agreement.page.md | 7 + pages/index/Counter.vue | 8 + pages/index/index.page.vue | 25 + pages/index/indexbackup.page.vue | 12 + pages/shelf/@id/index.page.vue | 71 + pages/shelf/create.page.vue | 201 + renderer/Link.vue | 21 + renderer/PageShell.vue | 47 + renderer/_default.page.client.js | 15 + renderer/_default.page.server.js | 80 + renderer/_error.page.vue | 14 + renderer/app.js | 30 + renderer/container.vue | 127 + renderer/logo.svg | 36 + renderer/usePageContext.js | 19 + src/.eslintrc | 36 + src/cli.js | 11 + src/errors.js | 12 + src/knex.js | 10 + src/logger.js | 35 + src/redis.js | 14 + src/shelves.js | 17 + src/users.js | 147 + src/web/default.js | 32 + src/web/error.js | 22 + src/web/ip.js | 18 + src/web/server.js | 77 + src/web/shelves.js | 13 + src/web/users.js | 33 + stores/user.js | 18 + vite.config.js | 23 + 57 files changed, 15967 insertions(+) create mode 100755 .editorconfig create mode 100755 .eslintrc create mode 100644 .gitignore create mode 100644 README.md create mode 100644 assets/css/forms.css create mode 100644 assets/css/inputs.css create mode 100644 assets/css/markdown.css create mode 100755 assets/css/states.css create mode 100644 assets/css/style.css create mode 100644 assets/css/theme.css create mode 100644 assets/img/favicon.svg create mode 100644 assets/img/logo.svg create mode 100644 assets/img/logo_pixels.png create mode 100644 assets/js/api.js create mode 100644 assets/js/navigate.js create mode 100755 components/form/checkbox.vue create mode 100755 knexfile.js create mode 100644 log/2023-05-26.log create mode 100644 log/2023-05-27.log create mode 100644 log/2023-05-28.log create mode 100644 log/2023-05-29.log create mode 100644 migrations/20230513004141_init.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pages/account/create.page.vue create mode 100644 pages/account/login.page.vue create mode 100644 pages/help/user-agreement.page.md create mode 100644 pages/index/Counter.vue create mode 100644 pages/index/index.page.vue create mode 100644 pages/index/indexbackup.page.vue create mode 100644 pages/shelf/@id/index.page.vue create mode 100644 pages/shelf/create.page.vue create mode 100644 renderer/Link.vue create mode 100644 renderer/PageShell.vue create mode 100644 renderer/_default.page.client.js create mode 100644 renderer/_default.page.server.js create mode 100644 renderer/_error.page.vue create mode 100644 renderer/app.js create mode 100644 renderer/container.vue create mode 100644 renderer/logo.svg create mode 100644 renderer/usePageContext.js create mode 100755 src/.eslintrc create mode 100755 src/cli.js create mode 100755 src/errors.js create mode 100755 src/knex.js create mode 100755 src/logger.js create mode 100644 src/redis.js create mode 100644 src/shelves.js create mode 100644 src/users.js create mode 100644 src/web/default.js create mode 100755 src/web/error.js create mode 100644 src/web/ip.js create mode 100644 src/web/server.js create mode 100644 src/web/shelves.js create mode 100644 src/web/users.js create mode 100644 stores/user.js create mode 100644 vite.config.js diff --git a/.editorconfig b/.editorconfig new file mode 100755 index 0000000..2b49a63 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +indent_style = tab +indent_size = 4 + +# Matches multiple files with brace expansion notation +# Set default charset +[*.js] +charset = utf-8 diff --git a/.eslintrc b/.eslintrc new file mode 100755 index 0000000..def3f4b --- /dev/null +++ b/.eslintrc @@ -0,0 +1,32 @@ +{ + "root": true, + "extends": ["airbnb-base", "plugin:vue/recommended"], + "parserOptions": { + "parser": "@babel/eslint-parser", + "ecmaVersion": 2019, + "sourceType": "module", + "requireConfigFile": false + }, + "rules": { + "indent": ["error", "tab"], + "no-tabs": "off", + "no-unused-vars": ["error", {"argsIgnorePattern": "^_"}], + "no-console": 0, + "template-curly-spacing": "off", + "import/prefer-default-export": 0, + "max-len": 0, + "vue/no-v-html": 0, + "vue/html-indent": ["error", "tab"], + "vue/multiline-html-element-content-newline": 0, + "vue/singleline-html-element-content-newline": 0, + "vue/multi-word-component-names": 0, + "no-param-reassign": ["error", { + "props": true, + "ignorePropertyModificationsFor": ["state", "acc"] + }] + }, + "globals": { + "CONFIG": "readonly", + "CLIENT_VERSION": "readonly" + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62e059e --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +node_modules/ +dist/ +config/ +!config/default.js +assets/js/config/ +!assets/js/config/default.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..be96f46 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# shack diff --git a/assets/css/forms.css b/assets/css/forms.css new file mode 100644 index 0000000..253855a --- /dev/null +++ b/assets/css/forms.css @@ -0,0 +1,48 @@ +.form { + width: 100%; + max-width: 30rem; + display: flex; + flex-direction: column; +} + +.form-section { + margin-bottom: 1rem; +} + +.form-row { + display: flex; + flex-wrap: wrap; + margin-bottom: .5rem; + + .input { + flex-grow: 1; + } +} + +.form-column { + display: flex; + flex-grow: 1; + flex-direction: column; + min-width: 10rem; +} + +.form-actions { + display: flex; + margin-bottom: .5rem; + justify-content: flex-end; + margin-top: .5rem; +} + +.form-heading { + color: var(--primary-light-10); + margin: 0 0 .75rem 0; +} + +.form-error { + background: var(--error); + color: var(--text-light); + padding: 1rem; + border-radius: .25rem; + text-align: center; + font-weight: bold; +} diff --git a/assets/css/inputs.css b/assets/css/inputs.css new file mode 100644 index 0000000..3c05127 --- /dev/null +++ b/assets/css/inputs.css @@ -0,0 +1,44 @@ +.input { + padding: .5rem .75rem; + font-size: 1rem; + flex-basis: 0; + border: solid 1px var(--grey-light-30); + border-radius: .25rem; + font: inherit; + + &:focus { + outline: none; + border-color: var(--primary-light-30); + } +} + +.button { + padding: .5rem 1rem; + border: none; + border-radius: .25rem; + background: var(--grey-light-30); + font-size: 1rem; + font-weight: bold; + + &:focus { + outline: none; + } +} + +.button-submit { + background: var(--primary-light-30); + color: var(--text-light); + + &:hover:not(:disabled) { + background: var(--primary); + cursor: pointer; + } + + &:disabled { + background: var(--shadow-weak-10); + } +} + +.radio { + margin: 0 .5rem 0 0; +} diff --git a/assets/css/markdown.css b/assets/css/markdown.css new file mode 100644 index 0000000..e6ad1bb --- /dev/null +++ b/assets/css/markdown.css @@ -0,0 +1,21 @@ +.markdown-body { + margin: 0 auto; + max-width: 50rem; + flex-grow: 1; + padding: 1rem; + line-height: 1.5; + text-align: justify; + + & h1 { + margin: 0; + } + + & h2 { + color: var(--primary); + margin: 1rem 0 0 0; + } + + & p { + margin: 0; + } +} diff --git a/assets/css/states.css b/assets/css/states.css new file mode 100755 index 0000000..4db6218 --- /dev/null +++ b/assets/css/states.css @@ -0,0 +1,36 @@ +.noselect { + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -webkit-tap-highlight-color: transparent; +} + +.nolist { + list-style: none; + padding: 0; + margin: 0; + + li { + display: inline-block; + padding: 0; + margin: 0; + } +} + +.nolink { + display: inline-block; + color: inherit; + text-decoration: none; +} + +.nobar { + scrollbar-width: none; + -mis-overflow-style: none; + + &::-webkit-scrollbar { + background: transparent; + width: 0px; + height: 0px; + } +} diff --git a/assets/css/style.css b/assets/css/style.css new file mode 100644 index 0000000..2a5ddb1 --- /dev/null +++ b/assets/css/style.css @@ -0,0 +1,31 @@ +@import 'theme'; +@import 'states'; +@import 'inputs'; +@import 'forms'; +@import 'markdown'; + +html, +body, +#app { + height: 100%; +} + +body { + margin: 0; + color: var(--text); + font-family: sans-serif; +} + +.link { + color: var(--link); + text-decoration: none; + + &:hover { + text-decoration: underline; + } +} + +.heading { + margin: 0 0 1rem 0; + color: var(--primary-light-20); +} diff --git a/assets/css/theme.css b/assets/css/theme.css new file mode 100644 index 0000000..36a3dba --- /dev/null +++ b/assets/css/theme.css @@ -0,0 +1,34 @@ +:root { + --primary: hsl(300, 100%, 30%); + --primary-light-10: hsl(300, 50%, 40%); + --primary-light-20: hsl(300, 50%, 50%); + --primary-light-30: hsl(300, 50%, 60%); + + --grey-dark-40: #222; + --grey-dark-30: #444; + --grey-dark-20: #666; + --grey-dark-10: #888; + --grey: #aaa; + --grey-light-10: #bbb; + --grey-light-20: #ccc; + --grey-light-30: #ddd; + --grey-light-40: #eee; + + --background-dark-20: #eee; + --background-dark-10: #f8f8f8; + --background: #fff; + + --shadow-weak-30: rgba(0, 0, 0, .1); + --shadow-weak-20: rgba(0, 0, 0, .2); + --shadow-weak-10: rgba(0, 0, 0, .35); + --shadow: rgba(0, 0, 0, .5); + --shadow-strong-10: rgba(0, 0, 0, .6); + --shadow-strong-20: rgba(0, 0, 0, .75); + --shadow-strong-30: rgba(0, 0, 0, .9); + + --text: #222; + --text-light: #fff; + + --link: #48f; + --error: #f66; +} diff --git a/assets/img/favicon.svg b/assets/img/favicon.svg new file mode 100644 index 0000000..430213c --- /dev/null +++ b/assets/img/favicon.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/logo.svg b/assets/img/logo.svg new file mode 100644 index 0000000..5bd3ab7 --- /dev/null +++ b/assets/img/logo.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/logo_pixels.png b/assets/img/logo_pixels.png new file mode 100644 index 0000000000000000000000000000000000000000..52c315f52870f24081f141864917e1daf73bfaa7 GIT binary patch literal 17477 zcmeAS@N?(olHy`uVBq!ia0y~y5MW_oU~b`H1Bz(GhkRgQU~J8Fb`J1#c2+1T%1_J8 zNd-zwtet4lS}2DCbum)dNi;= z*W$;YgZ433b5Ea#Kg`KiCuE!ziO+Pp`6V3$9MN0ziaJ~F=b|2=}|`C^|M~4 zIGuSGcI1IJ6GtM$U5UvvQ_pw>am{=DTF!3Yy`vS=zVEbmUq5TR!~@~Z$7c*yA9;P` z^6b#&&vu0^Q&Xn?m{W0Q3Ad1aQEcJQ-r|dijp=S@e5(2^oOHyjBVHzi8JRxPe6(WK z%PIOPv0;|^h1X7*UfZQ!pJ=gOU%znfGlNMH2b5Gg0s;=Rom!#fw%V_&)#Rv#={&Mao)-Sn9KfAjsjQLQIA%{AvRFzIjmYskb>-k5fG+y4IC-IYu~<~M5Z zeY@VIVW$73*SWe?EMIb&#jof3-elG*Z#by#Y?kW&>9PnH>w~{N`!w0V+-I^~otMA1 zc8(o`O6wj^(N7l!{JxM1({ z$v_d#0*}aI1_nK45N51cYF`EvWH0gbb!C6f$|1%h|M~iEJD`wciEBiObAE1aYF-J0 zb5UwyNotBhd1gt5g1e`0KzJjcI0J(MgQtsQNX4x;cMftMcHm(+_@dyyuC}NI&(EAQ zKAcU=C)?)Uy~__Y3>i!)>Otm$*i|fyXhI4e0%#%(O{0oNgJ3ijFpLJlXb=F)#?i81 zxCeora>h(aX9k7`Tg$Es+>x)4XGqw8sP1Vk14F}a=I`tb3_I+>q78pf)g5&{&Vg28 zE^r^MLPuK>qYWvB(I6NN0$^Wdv@9460tST_Moc@l?{0(Cm3zAW%QJlVpLR@u0aTwd zF#I|3{hQc*;fMDOnb2y}7lOdS4iwO!;E2KpayW!W6^#bLXetB-8gQ>Dl@Dv z@IkLQZJW?V1XR%bvkZ=-ibjKAG!-z62Ek|$0E^4fvS7Fe!F0|CyJrG>q6d1*u5 z2aNMO@{oG+fOCy}&PRJwhW!?5XfCA7~S^!{Tq>`zl zCV?{cXkd;8!DuR=Zbkt1Om%l>voJJBpY0K3_^!YJtXd1|L6fSW94GhaZ)o@X=6U=! z@&|s)3WJ1@fJ46m5)aH|;Y1%Rc9<|26xH0=*(}1*D8bO=^5_5b$2Xg|vsN#C#o1^u zp%JuV4*^EYn9(w3w2T4fhtZ5M8U&-MfVvrB!DZMu?ma`}Hikc~cTK_L!kg~gj=m#& zu&%;>gZzi+c0ojS1ZEAPdKT5?gQM;rbrWg`FpNgaXb>=r2Ek|$0Lz7;TNYf%WYINF zhE=HgH)5SRKGyRw+yn0Cd3R_1fjWiJ2Ahkivg5e61X%yHmRMH5DYU^ECEMuT941cCW)uS^C8CKk}S j0Ehx|v}hc8wZjF*iIU0elm5 +