From f677f4a51542fe82f8f22e223e9beb39594dbfbc Mon Sep 17 00:00:00 2001 From: Sergio Vera Date: Tue, 26 Nov 2024 16:07:28 +0100 Subject: [PATCH] UI QoL changes --- go.mod | 65 ++++---- go.sum | 69 +++++++++ internal/metadata/epub.go | 3 +- .../webserver/controller/document/search.go | 7 +- .../controller/highlight/controller.go | 2 + .../webserver/controller/highlight/delete.go | 10 +- .../webserver/controller/highlight/list.go | 95 +++++++++--- .../webserver/controller/home/controller.go | 2 - internal/webserver/controller/home/index.go | 30 ---- internal/webserver/embedded/css/display.css | 12 ++ .../webserver/embedded/images/eye-solid.svg | 4 + .../webserver/embedded/images/star-hollow.svg | 3 + .../webserver/embedded/images/star-solid.svg | 3 + .../webserver/embedded/js/cover-loader.js | 30 ---- internal/webserver/embedded/js/cover.js | 9 ++ internal/webserver/embedded/js/highlight.js | 55 ++----- internal/webserver/embedded/js/send-email.js | 4 +- .../webserver/embedded/views/auth/login.html | 4 +- .../webserver/embedded/views/document.html | 48 +----- .../webserver/embedded/views/highlights.html | 28 ++-- internal/webserver/embedded/views/index.html | 45 +----- internal/webserver/embedded/views/layout.html | 2 +- .../embedded/views/partials/actions.html | 29 +--- .../embedded/views/partials/cover.html | 28 ++++ .../embedded/views/partials/delete-modal.html | 2 +- .../embedded/views/partials/docs-list.html | 141 ++++++++---------- .../views/partials/highlight-toggle.html | 12 ++ .../views/partials/latest-highlights.html | 40 +++++ .../embedded/views/partials/main.html | 2 +- .../embedded/views/partials/related.html | 13 -- .../embedded/views/partials/searchbox.html | 2 +- .../webserver/embedded/views/results.html | 11 +- 32 files changed, 421 insertions(+), 389 deletions(-) create mode 100644 internal/webserver/embedded/images/eye-solid.svg create mode 100644 internal/webserver/embedded/images/star-hollow.svg create mode 100644 internal/webserver/embedded/images/star-solid.svg delete mode 100644 internal/webserver/embedded/js/cover-loader.js create mode 100644 internal/webserver/embedded/js/cover.js create mode 100644 internal/webserver/embedded/views/partials/cover.html create mode 100644 internal/webserver/embedded/views/partials/highlight-toggle.html create mode 100644 internal/webserver/embedded/views/partials/latest-highlights.html delete mode 100644 internal/webserver/embedded/views/partials/related.html diff --git a/go.mod b/go.mod index 683b84eb..da6fe687 100644 --- a/go.mod +++ b/go.mod @@ -1,37 +1,37 @@ module github.com/svera/coreander/v4 -go 1.21.0 +go 1.22.0 -toolchain go1.21.1 +toolchain go1.23.0 require ( - github.com/blevesearch/bleve/v2 v2.4.0 - github.com/bmatcuk/doublestar/v4 v4.6.1 + github.com/blevesearch/bleve/v2 v2.4.2 + github.com/bmatcuk/doublestar/v4 v4.7.1 github.com/disintegration/imaging v1.6.2 github.com/glebarez/sqlite v1.11.0 github.com/gofiber/fiber/v2 v2.52.5 github.com/gofiber/jwt/v3 v3.3.10 - github.com/gofiber/template/html/v2 v2.1.1 + github.com/gofiber/template/html/v2 v2.1.2 github.com/golang-jwt/jwt/v4 v4.5.1 github.com/google/uuid v1.6.0 github.com/hhrutter/tiff v1.0.1 github.com/ilyakaznacheev/cleanenv v1.5.0 github.com/magefile/mage v1.15.0 - github.com/microcosm-cc/bluemonday v1.0.26 - github.com/pdfcpu/pdfcpu v0.7.0 + github.com/microcosm-cc/bluemonday v1.0.27 + github.com/pdfcpu/pdfcpu v0.9.1 github.com/rjeczalik/notify v0.9.3 github.com/spf13/afero v1.11.0 - golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 - golang.org/x/text v0.16.0 + golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c + golang.org/x/text v0.19.0 gopkg.in/yaml.v2 v2.4.0 - gorm.io/gorm v1.25.9 + gorm.io/gorm v1.25.12 ) require ( github.com/andybalholm/cascadia v1.3.2 // indirect github.com/beevik/etree v1.4.1 // indirect - github.com/blevesearch/go-faiss v1.0.13 // indirect - github.com/blevesearch/zapx/v16 v16.0.12 // indirect + github.com/blevesearch/go-faiss v1.0.23 // indirect + github.com/blevesearch/zapx/v16 v16.1.7 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/glebarez/go-sqlite v1.22.0 // indirect github.com/gofiber/template v1.8.3 // indirect @@ -46,33 +46,34 @@ require ( github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect github.com/pgaskin/kepubify/_/go116-zip.go117 v0.0.0-20210611152744-2d89b3182523 // indirect github.com/pgaskin/kepubify/_/html v0.0.0-20211223234002-6ee2cc632cdc // indirect - github.com/philhofer/fwd v1.1.2 // indirect + github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/tinylib/msgp v1.1.9 // indirect - golang.org/x/sync v0.7.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/tinylib/msgp v1.2.4 // indirect + golang.org/x/sync v0.8.0 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect - modernc.org/libc v1.49.3 // indirect + modernc.org/libc v1.61.0 // indirect modernc.org/mathutil v1.6.0 // indirect modernc.org/memory v1.8.0 // indirect - modernc.org/sqlite v1.29.6 // indirect + modernc.org/sqlite v1.33.1 // indirect ) require ( - github.com/BurntSushi/toml v1.3.2 // indirect + github.com/BurntSushi/toml v1.4.0 // indirect github.com/PuerkitoBio/goquery v1.8.1 - github.com/RoaringBitmap/roaring v1.9.2 // indirect - github.com/andybalholm/brotli v1.1.0 // indirect + github.com/RoaringBitmap/roaring v1.9.4 // indirect + github.com/andybalholm/brotli v1.1.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect - github.com/bits-and-blooms/bitset v1.13.0 // indirect - github.com/blevesearch/bleve_index_api v1.1.6 + github.com/bits-and-blooms/bitset v1.14.3 // indirect + github.com/blevesearch/bleve_index_api v1.1.12 github.com/blevesearch/geo v0.1.20 // indirect github.com/blevesearch/go-porterstemmer v1.0.3 // indirect github.com/blevesearch/gtreap v0.1.1 // indirect github.com/blevesearch/mmap-go v1.0.4 // indirect - github.com/blevesearch/scorch_segment_api/v2 v2.2.11 // indirect + github.com/blevesearch/scorch_segment_api/v2 v2.2.16 // indirect github.com/blevesearch/segment v0.9.1 // indirect github.com/blevesearch/snowballstem v0.9.0 // indirect github.com/blevesearch/upsidedown_store_api v1.0.2 // indirect @@ -81,7 +82,7 @@ require ( github.com/blevesearch/zapx/v12 v12.3.10 // indirect github.com/blevesearch/zapx/v13 v13.3.10 // indirect github.com/blevesearch/zapx/v14 v14.3.10 // indirect - github.com/blevesearch/zapx/v15 v15.3.13 // indirect + github.com/blevesearch/zapx/v15 v15.3.16 // indirect github.com/flotzilla/pdf_parser v0.1.96 github.com/golang/geo v0.0.0-20230421003525-6adc56603217 // indirect github.com/golang/protobuf v1.5.4 // indirect @@ -90,10 +91,10 @@ require ( github.com/gosimple/slug v1.14.0 github.com/joho/godotenv v1.5.1 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.8 // indirect + github.com/klauspost/compress v1.17.11 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mschoch/smat v0.2.0 // indirect @@ -101,13 +102,13 @@ require ( github.com/pirmd/epub v0.3.0 github.com/rivo/uniseg v0.4.7 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasthttp v1.52.0 + github.com/valyala/fasthttp v1.57.0 github.com/valyala/tcplisten v1.0.0 // indirect - go.etcd.io/bbolt v1.3.9 // indirect - golang.org/x/image v0.18.0 // indirect - golang.org/x/net v0.24.0 // indirect - golang.org/x/sys v0.19.0 // indirect - google.golang.org/protobuf v1.33.0 // indirect + go.etcd.io/bbolt v1.3.11 // indirect + golang.org/x/image v0.21.0 // indirect + golang.org/x/net v0.30.0 // indirect + golang.org/x/sys v0.26.0 // indirect + google.golang.org/protobuf v1.35.1 // indirect gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df gopkg.in/yaml.v3 v3.0.1 // indirect olympos.io/encoding/edn v0.0.0-20201019073823-d3554ca0b0a3 // indirect diff --git a/go.sum b/go.sum index b98c6b64..8006ff17 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,19 @@ github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM= github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ= github.com/RoaringBitmap/roaring v1.9.2 h1:TjoelXOmLrpjbDTzXwr6F17pusrgqUeBE2lp9N6YHRg= github.com/RoaringBitmap/roaring v1.9.2/go.mod h1:6AXUsoIEzDTFFQCe1RbGA6uFONMhvejWj5rqITANK90= +github.com/RoaringBitmap/roaring v1.9.4 h1:yhEIoH4YezLYT04s1nHehNO64EKFTop/wBhxv2QzDdQ= +github.com/RoaringBitmap/roaring v1.9.4/go.mod h1:6AXUsoIEzDTFFQCe1RbGA6uFONMhvejWj5rqITANK90= github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= +github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= +github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss= github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU= @@ -23,14 +29,22 @@ github.com/beevik/etree v1.4.1/go.mod h1:gPNJNaBGVZ9AwsidazFZyygnd+0pAU38N4D+Wem github.com/bits-and-blooms/bitset v1.12.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bits-and-blooms/bitset v1.14.3 h1:Gd2c8lSNf9pKXom5JtD7AaKO8o7fGQ2LtFj1436qilA= +github.com/bits-and-blooms/bitset v1.14.3/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/blevesearch/bleve/v2 v2.4.0 h1:2xyg+Wv60CFHYccXc+moGxbL+8QKT/dZK09AewHgKsg= github.com/blevesearch/bleve/v2 v2.4.0/go.mod h1:IhQHoFAbHgWKYavb9rQgQEJJVMuY99cKdQ0wPpst2aY= +github.com/blevesearch/bleve/v2 v2.4.2 h1:NooYP1mb3c0StkiY9/xviiq2LGSaE8BQBCc/pirMx0U= +github.com/blevesearch/bleve/v2 v2.4.2/go.mod h1:ATNKj7Yl2oJv/lGuF4kx39bST2dveX6w0th2FFYLkc8= github.com/blevesearch/bleve_index_api v1.1.6 h1:orkqDFCBuNU2oHW9hN2YEJmet+TE9orml3FCGbl1cKk= github.com/blevesearch/bleve_index_api v1.1.6/go.mod h1:PbcwjIcRmjhGbkS/lJCpfgVSMROV6TRubGGAODaK1W8= +github.com/blevesearch/bleve_index_api v1.1.12 h1:P4bw9/G/5rulOF7SJ9l4FsDoo7UFJ+5kexNy1RXfegY= +github.com/blevesearch/bleve_index_api v1.1.12/go.mod h1:PbcwjIcRmjhGbkS/lJCpfgVSMROV6TRubGGAODaK1W8= github.com/blevesearch/geo v0.1.20 h1:paaSpu2Ewh/tn5DKn/FB5SzvH0EWupxHEIwbCk/QPqM= github.com/blevesearch/geo v0.1.20/go.mod h1:DVG2QjwHNMFmjo+ZgzrIq2sfCh6rIHzy9d9d0B59I6w= github.com/blevesearch/go-faiss v1.0.13 h1:zfFs7ZYD0NqXVSY37j0JZjZT1BhE9AE4peJfcx/NB4A= github.com/blevesearch/go-faiss v1.0.13/go.mod h1:jrxHrbl42X/RnDPI+wBoZU8joxxuRwedrxqswQ3xfU8= +github.com/blevesearch/go-faiss v1.0.23 h1:Wmc5AFwDLKGl2L6mjLX1Da3vCL0EKa2uHHSorcIS1Uc= +github.com/blevesearch/go-faiss v1.0.23/go.mod h1:OMGQwOaRRYxrmeNdMrXJPvVx8gBnvE5RYrr0BahNnkk= github.com/blevesearch/go-porterstemmer v1.0.3 h1:GtmsqID0aZdCSNiY8SkuPJ12pD4jI+DdXTAn4YRcHCo= github.com/blevesearch/go-porterstemmer v1.0.3/go.mod h1:angGc5Ht+k2xhJdZi511LtmxuEf0OVpvUUNrwmM1P7M= github.com/blevesearch/gtreap v0.1.1 h1:2JWigFrzDMR+42WGIN/V2p0cUvn4UP3C4Q5nmaZGW8Y= @@ -39,6 +53,8 @@ github.com/blevesearch/mmap-go v1.0.4 h1:OVhDhT5B/M1HNPpYPBKIEJaD0F3Si+CrEKULGCD github.com/blevesearch/mmap-go v1.0.4/go.mod h1:EWmEAOmdAS9z/pi/+Toxu99DnsbhG1TIxUoRmJw/pSs= github.com/blevesearch/scorch_segment_api/v2 v2.2.11 h1:nb5KTeIhDUu+Ka6He7xXvOXcJOt9Db7c3Vy2ptqJQRs= github.com/blevesearch/scorch_segment_api/v2 v2.2.11/go.mod h1:QVakeAECt+Fxe+zu0A4V1bgPdqNeC93wQvzaXDF3NPo= +github.com/blevesearch/scorch_segment_api/v2 v2.2.16 h1:uGvKVvG7zvSxCwcm4/ehBa9cCEuZVE+/zvrSl57QUVY= +github.com/blevesearch/scorch_segment_api/v2 v2.2.16/go.mod h1:VF5oHVbIFTu+znY1v30GjSpT5+9YFs9dV2hjvuh34F0= github.com/blevesearch/segment v0.9.1 h1:+dThDy+Lvgj5JMxhmOVlgFfkUtZV2kw49xax4+jTfSU= github.com/blevesearch/segment v0.9.1/go.mod h1:zN21iLm7+GnBHWTao9I+Au/7MBiL8pPFtJBJTsk6kQw= github.com/blevesearch/snowballstem v0.9.0 h1:lMQ189YspGP6sXvZQ4WZ+MLawfV8wOmPoD/iWeNXm8s= @@ -57,10 +73,16 @@ github.com/blevesearch/zapx/v14 v14.3.10 h1:SG6xlsL+W6YjhX5N3aEiL/2tcWh3DO75Bnz7 github.com/blevesearch/zapx/v14 v14.3.10/go.mod h1:qqyuR0u230jN1yMmE4FIAuCxmahRQEOehF78m6oTgns= github.com/blevesearch/zapx/v15 v15.3.13 h1:6EkfaZiPlAxqXz0neniq35my6S48QI94W/wyhnpDHHQ= github.com/blevesearch/zapx/v15 v15.3.13/go.mod h1:Turk/TNRKj9es7ZpKK95PS7f6D44Y7fAFy8F4LXQtGg= +github.com/blevesearch/zapx/v15 v15.3.16 h1:Ct3rv7FUJPfPk99TI/OofdC+Kpb4IdyfdMH48sb+FmE= +github.com/blevesearch/zapx/v15 v15.3.16/go.mod h1:Turk/TNRKj9es7ZpKK95PS7f6D44Y7fAFy8F4LXQtGg= github.com/blevesearch/zapx/v16 v16.0.12 h1:Uccxvjmn+hQ6ywQP+wIiTpdq9LnAviGoryJOmGwAo/I= github.com/blevesearch/zapx/v16 v16.0.12/go.mod h1:MYnOshRfSm4C4drxx1LGRI+MVFByykJ2anDY1fxdk9Q= +github.com/blevesearch/zapx/v16 v16.1.7 h1:I07qV6l1rPda19zyof9Q2J9E8cjZ57pQhNY0+ePI5vM= +github.com/blevesearch/zapx/v16 v16.1.7/go.mod h1:JqQlOqlRVaYDkpLIl3JnKql8u4zKTNlVEa3nLsi0Gn8= github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I= github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= +github.com/bmatcuk/doublestar/v4 v4.7.1 h1:fdDeAqgT47acgwd9bd9HxJRDmc9UAmPpc+2m0CXv75Q= +github.com/bmatcuk/doublestar/v4 v4.7.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -84,6 +106,8 @@ github.com/gofiber/template v1.8.3 h1:hzHdvMwMo/T2kouz2pPCA0zGiLCeMnoGsQZBTSYgZx github.com/gofiber/template v1.8.3/go.mod h1:bs/2n0pSNPOkRa5VJ8zTIvedcI/lEYxzV3+YPXdBvq8= github.com/gofiber/template/html/v2 v2.1.1 h1:QEy3O3EBkvwDthy5bXVGUseOyO6ldJoiDxlF4+MJiV8= github.com/gofiber/template/html/v2 v2.1.1/go.mod h1:2G0GHHOUx70C1LDncoBpe4T6maQbNa4x1CVNFW0wju0= +github.com/gofiber/template/html/v2 v2.1.2 h1:wkK/mYJ3nIhongTkG3t0QgV4ADdgOYJYVSAF2AHnh8Y= +github.com/gofiber/template/html/v2 v2.1.2/go.mod h1:E98Z/FzvpaSib06aWEgYk6GXNf3ctoyaJH8yW5ay5ak= github.com/gofiber/utils v1.1.0 h1:vdEBpn7AzIUJRhe+CiTOJdUcTg4Q9RK+pEa0KPbLdrM= github.com/gofiber/utils v1.1.0/go.mod h1:poZpsnhBykfnY1Mc0KeEa6mSHrS3dV0+oBWyeQmb2e0= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= @@ -100,6 +124,7 @@ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= +github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -127,6 +152,8 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/smartypants v0.1.0 h1:Sn8hn5XrY+uXrxSWUdcr621Gfpk11mOGGVs4XX06kEw= github.com/kr/smartypants v0.1.0/go.mod h1:EcTX9ge+SWNaGwbQvHwNICsMGavh98FLUqyOWFr+j9c= @@ -146,9 +173,13 @@ github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58= github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs= +github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= +github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -162,6 +193,10 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWb github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/pdfcpu/pdfcpu v0.7.0 h1:cd7/z7hAyyDuzdciKfNZyQ3TYreJza2DsuPdIHYURcA= github.com/pdfcpu/pdfcpu v0.7.0/go.mod h1:kmpD0rk8YnZj0l3qSeGBlAB+XszHUgNv//ORH/E7EYo= +github.com/pdfcpu/pdfcpu v0.9.1 h1:q8/KlBdHjkE7ZJU4ofhKG5Rjf7M6L324CVM6BMDySao= +github.com/pdfcpu/pdfcpu v0.9.1/go.mod h1:fVfOloBzs2+W2VJCCbq60XIxc3yJHAZ0Gahv1oO0gyI= +github.com/pgaskin/kepubify v2.3.2+incompatible h1:0wWWxop5T5O+p6tlZ59saC9hZYtkrXaKWLiTXmUNHHg= +github.com/pgaskin/kepubify v2.3.2+incompatible/go.mod h1:vQR3SJUwNyKStXpUPsVcCjBZtjZ1TgYtgKb8jHMyEDg= github.com/pgaskin/kepubify/_/go116-zip.go117 v0.0.0-20210611152744-2d89b3182523 h1:pYGj3rKTy+TDs5Z707kT+ztjoIDCy76lc2UPkZocAFM= github.com/pgaskin/kepubify/_/go116-zip.go117 v0.0.0-20210611152744-2d89b3182523/go.mod h1:FNMbV/TSSnhqyzjq8jsS+VD0o/gwpuCH0dh8G1uQ/fw= github.com/pgaskin/kepubify/_/html v0.0.0-20211223234002-6ee2cc632cdc h1:mJk4TIXTO+JmxgHJ5iyil42PLQJWkyaKB/qNcjJU6h4= @@ -172,6 +207,8 @@ github.com/pgaskin/koboutils/v2 v2.1.2-0.20220306004009-a07e72ebae42/go.mod h1:w github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= +github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY= +github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pirmd/text v0.6.0/go.mod h1:CK1HypnOx5CsxYOEXHiSBQxZ2skU2MECCYX5Xpv2EBk= github.com/pirmd/text v0.6.2 h1:Stx6LDCwLxEyIfCY5C17shwWs06O5hiP4AbXFAIHXZY= github.com/pirmd/text v0.6.2/go.mod h1:CK1HypnOx5CsxYOEXHiSBQxZ2skU2MECCYX5Xpv2EBk= @@ -210,17 +247,24 @@ github.com/tinylib/msgp v1.1.6/go.mod h1:75BAfg2hauQhs3qedfdDZmWAPcFMAvJE5b9rGOM github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tinylib/msgp v1.1.9 h1:SHf3yoO2sGA0veCJeCBYLHuttAVFHGm2RHgNodW7wQU= github.com/tinylib/msgp v1.1.9/go.mod h1:BCXGB54lDD8qUEPmiG0cQQUANC4IUQyB2ItS2UDlO/k= +github.com/tinylib/msgp v1.2.4 h1:yLFeUGostXXSGW5vxfT5dXG/qzkn4schv2I7at5+hVU= +github.com/tinylib/msgp v1.2.4/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.47.0/go.mod h1:k2zXd82h/7UZc3VOdJ2WaUqt1uZ/XpXAfE9i+HBC3lA= github.com/valyala/fasthttp v1.52.0 h1:wqBQpxH71XW0e2g+Og4dzQM8pk34aFYlA1Ga8db7gU0= github.com/valyala/fasthttp v1.52.0/go.mod h1:hf5C4QnVMkNXMspnsUlfM3WitlgYflyhHYoKol/szxQ= +github.com/valyala/fasthttp v1.57.0 h1:Xw8SjWGEP/+wAAgyy5XTvgrWlOD1+TxbbvNADYCm1Tg= +github.com/valyala/fasthttp v1.57.0/go.mod h1:h6ZBaPRlzpZ6O3H5t2gEk1Qi33+TmLvfwgLLp0t9CpE= github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI= go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE= +go.etcd.io/bbolt v1.3.11 h1:yGEzV1wPz2yVCLsD8ZAiGHhHVlczyC9d1rP43/VCRJ0= +go.etcd.io/bbolt v1.3.11/go.mod h1:dksAq7YMXoljX0xu6VF5DMZGbhYYoLUalEiSySYAS4I= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -228,15 +272,20 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 h1:ESSUROHIBHg7USnszlcdmjBEwdMj9VUvU+OPk4yl2mc= golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= +golang.org/x/image v0.21.0 h1:c5qV36ajHpdj4Qi0GnE0jUc/yuo33OLFaa0d+crTD5s= +golang.org/x/image v0.21.0/go.mod h1:vUbsLavqK/W303ZroQQVKQ+Af3Yl6Uz1Ppu5J/cLz78= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -250,6 +299,8 @@ golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -257,6 +308,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -276,6 +329,8 @@ golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -293,6 +348,8 @@ golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -301,11 +358,14 @@ golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -320,16 +380,23 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/gorm v1.25.9 h1:wct0gxZIELDk8+ZqF/MVnHLkA1rvYlBWUMv2EdsK1g8= gorm.io/gorm v1.25.9/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= +gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= +gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= modernc.org/cc/v4 v4.20.0 h1:45Or8mQfbUqJOG9WaxvlFYOAQO0lQ5RvqBcFCXngjxk= modernc.org/cc/v4 v4.20.0/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= +modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ= modernc.org/ccgo/v4 v4.16.0 h1:ofwORa6vx2FMm0916/CkZjpFPSR70VwTjUCe2Eg5BnA= modernc.org/ccgo/v4 v4.16.0/go.mod h1:dkNyWIjFrVIZ68DTo36vHK+6/ShBn4ysU61So6PIqCI= +modernc.org/ccgo/v4 v4.21.0 h1:kKPI3dF7RIag8YcToh5ZwDcVMIv6VGa0ED5cvh0LMW4= modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw= modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= +modernc.org/gc/v2 v2.5.0 h1:bJ9ChznK1L1mUtAQtxi0wi5AtAs5jQuw4PrPHO5pb6M= modernc.org/libc v1.49.3 h1:j2MRCRdwJI2ls/sGbeSk0t2bypOG/uvPZUsGQFDulqg= modernc.org/libc v1.49.3/go.mod h1:yMZuGkn7pXbKfoT/M35gFJOAEdSKdxL0q64sF7KqCDo= +modernc.org/libc v1.61.0 h1:eGFcvWpqlnoGwzZeZe3PWJkkKbM/3SUGyk1DVZQ0TpE= +modernc.org/libc v1.61.0/go.mod h1:DvxVX89wtGTu+r72MLGhygpfi3aUGgZRdAYGCAVVud0= modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= @@ -340,6 +407,8 @@ modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= modernc.org/sqlite v1.29.6 h1:0lOXGrycJPptfHDuohfYgNqoe4hu+gYuN/pKgY5XjS4= modernc.org/sqlite v1.29.6/go.mod h1:S02dvcmm7TnTRvGhv8IGYyLnIt7AS2KPaB1F/71p75U= +modernc.org/sqlite v1.33.1 h1:trb6Z3YYoeM9eDL1O8do81kP+0ejv+YzgyFo+Gwy0nM= +modernc.org/sqlite v1.33.1/go.mod h1:pXV2xHxhzXZsgT/RtTFAPY6JJDEvOTcTdwADQCCWD4k= modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= diff --git a/internal/metadata/epub.go b/internal/metadata/epub.go index ace34881..533523e8 100644 --- a/internal/metadata/epub.go +++ b/internal/metadata/epub.go @@ -13,7 +13,6 @@ import ( "github.com/bmatcuk/doublestar/v4" "github.com/disintegration/imaging" - "github.com/gofiber/fiber/v2" "github.com/microcosm-cc/bluemonday" "github.com/pirmd/epub" ) @@ -197,7 +196,7 @@ func extractCover(r *zip.ReadCloser, coverFile string, coverMaxWidth int) ([]byt } src, err := imaging.Decode(rc) if err != nil { - return nil, fiber.ErrInternalServerError + return nil, err } return resize(src, coverMaxWidth, err) } diff --git a/internal/webserver/controller/document/search.go b/internal/webserver/controller/document/search.go index 88a7073b..81ba1b8f 100644 --- a/internal/webserver/controller/document/search.go +++ b/internal/webserver/controller/document/search.go @@ -48,7 +48,7 @@ func (d *Controller) Search(c *fiber.Ctx) error { searchResults = d.hlRepository.HighlightedPaginatedResult(int(session.ID), searchResults) } - return c.Render("results", fiber.Map{ + err = c.Render("results", fiber.Map{ "Keywords": keywords, "Results": searchResults, "Paginator": view.Pagination(model.MaxPagesNavigator, searchResults, map[string]string{"search": keywords}), @@ -58,4 +58,9 @@ func (d *Controller) Search(c *fiber.Ctx) error { "WordsPerMinute": d.config.WordsPerMinute, }, "layout") + if err != nil { + log.Println(err) + return fiber.ErrInternalServerError + } + return nil } diff --git a/internal/webserver/controller/highlight/controller.go b/internal/webserver/controller/highlight/controller.go index 0a75306d..28c38ee8 100644 --- a/internal/webserver/controller/highlight/controller.go +++ b/internal/webserver/controller/highlight/controller.go @@ -6,6 +6,8 @@ import ( "github.com/svera/coreander/v4/internal/webserver/model" ) +const latestHighlightsAmount = 6 + type highlightsRepository interface { Highlights(userID int, page int, resultsPerPage int) (result.Paginated[[]string], error) Highlight(userID int, documentPath string) error diff --git a/internal/webserver/controller/highlight/delete.go b/internal/webserver/controller/highlight/delete.go index 3c4f419a..bc94330a 100644 --- a/internal/webserver/controller/highlight/delete.go +++ b/internal/webserver/controller/highlight/delete.go @@ -1,6 +1,8 @@ package highlight import ( + "log" + "github.com/gofiber/fiber/v2" "github.com/svera/coreander/v4/internal/webserver/model" ) @@ -13,5 +15,11 @@ func (h *Controller) Delete(c *fiber.Ctx) error { return fiber.ErrBadRequest } - return h.hlRepository.Remove(int(user.ID), document.ID) + if err = h.hlRepository.Remove(int(user.ID), document.ID); err != nil { + log.Println(err) + return fiber.ErrInternalServerError + } + + c.Response().Header.Set("HX-Trigger", "dehighlight") + return nil } diff --git a/internal/webserver/controller/highlight/list.go b/internal/webserver/controller/highlight/list.go index d3a8d162..fd258bca 100644 --- a/internal/webserver/controller/highlight/list.go +++ b/internal/webserver/controller/highlight/list.go @@ -1,6 +1,7 @@ package highlight import ( + "fmt" "log" "strconv" @@ -13,11 +14,6 @@ import ( ) func (h *Controller) List(c *fiber.Ctx) error { - emailSendingConfigured := true - if _, ok := h.sender.(*infrastructure.NoEmail); ok { - emailSendingConfigured = false - } - page, err := strconv.Atoi(c.Query("page")) if err != nil { page = 1 @@ -42,14 +38,75 @@ func (h *Controller) List(c *fiber.Ctx) error { return fiber.ErrNotFound } - docsSortedByHighlightedDate, err := h.hlRepository.Highlights(int(user.ID), page, model.ResultsPerPage) + emailSendingConfigured := true + if _, ok := h.sender.(*infrastructure.NoEmail); ok { + emailSendingConfigured = false + } + + if c.Query("view") == "latest" { + highlights, _, err := h.sortedHighlights(c, page, user, latestHighlightsAmount) + if err != nil { + return err + } + return h.latest(c, highlights, emailSendingConfigured) + } + + highlights, totalHits, err := h.sortedHighlights(c, page, user, model.ResultsPerPage) if err != nil { - return fiber.ErrInternalServerError + return err + } + + paginatedResults := result.NewPaginated[[]index.Document]( + model.ResultsPerPage, + page, + totalHits, + highlights, + ) + + url := fmt.Sprintf("/highlights?view=list&page=%d", page) + + layout := "layout" + if c.Query("view") == "list" { + layout = "" + } + + err = c.Render("highlights", fiber.Map{ + "Results": paginatedResults, + "Paginator": view.Pagination(model.MaxPagesNavigator, paginatedResults, nil), + "Title": "Highlights", + "EmailSendingConfigured": emailSendingConfigured, + "EmailFrom": h.sender.From(), + "WordsPerMinute": h.wordsPerMinute, + "Url": url, + }, layout) + + if err != nil { + log.Println(err) + } + + return nil +} + +func (h *Controller) sortedHighlights(c *fiber.Ctx, page int, user *model.User, highlightsAmount int) ([]index.Document, int, error) { + docsSortedByHighlightedDate, err := h.hlRepository.Highlights(int(user.ID), page, highlightsAmount) + if err != nil { + log.Println(err) + return nil, 0, fiber.ErrInternalServerError + } + + if docsSortedByHighlightedDate.TotalPages() < page { + page = docsSortedByHighlightedDate.TotalPages() + docsSortedByHighlightedDate, err = h.hlRepository.Highlights(int(user.ID), page, highlightsAmount) + if err != nil { + log.Println(err) + return nil, 0, fiber.ErrInternalServerError + } } docs, err := h.idx.Documents(docsSortedByHighlightedDate.Hits()) if err != nil { - return fiber.ErrInternalServerError + log.Println(err) + return nil, 0, fiber.ErrInternalServerError } highlights := make([]index.Document, 0, len(docs)) @@ -62,19 +119,19 @@ func (h *Controller) List(c *fiber.Ctx) error { highlights = append(highlights, doc) } - paginatedResults := result.NewPaginated[[]index.Document]( - model.ResultsPerPage, - page, - docsSortedByHighlightedDate.TotalHits(), - highlights, - ) + return highlights, docsSortedByHighlightedDate.TotalHits(), nil +} - return c.Render("highlights", fiber.Map{ - "Results": paginatedResults, - "Paginator": view.Pagination(model.MaxPagesNavigator, paginatedResults, nil), - "Title": "Highlights", +func (h *Controller) latest(c *fiber.Ctx, highlights []index.Document, emailSendingConfigured bool) error { + err := c.Render("partials/latest-highlights", fiber.Map{ + "Highlights": highlights, "EmailSendingConfigured": emailSendingConfigured, "EmailFrom": h.sender.From(), "WordsPerMinute": h.wordsPerMinute, - }, "layout") + }) + if err != nil { + log.Println(err) + } + + return nil } diff --git a/internal/webserver/controller/home/controller.go b/internal/webserver/controller/home/controller.go index b4439841..945caf1d 100644 --- a/internal/webserver/controller/home/controller.go +++ b/internal/webserver/controller/home/controller.go @@ -5,8 +5,6 @@ import ( "github.com/svera/coreander/v4/internal/result" ) -const highlightsAmount = 6 - type Sender interface { SendDocument(address string, libraryPath string, fileName string) error From() string diff --git a/internal/webserver/controller/home/index.go b/internal/webserver/controller/home/index.go index febfdc4a..2054e7e5 100644 --- a/internal/webserver/controller/home/index.go +++ b/internal/webserver/controller/home/index.go @@ -4,9 +4,7 @@ import ( "log" "github.com/gofiber/fiber/v2" - "github.com/svera/coreander/v4/internal/index" "github.com/svera/coreander/v4/internal/webserver/infrastructure" - "github.com/svera/coreander/v4/internal/webserver/model" ) func (d *Controller) Index(c *fiber.Ctx) error { @@ -15,43 +13,15 @@ func (d *Controller) Index(c *fiber.Ctx) error { emailSendingConfigured = false } - var session model.Session - if val, ok := c.Locals("Session").(model.Session); ok { - session = val - } - count, err := d.idx.Count() if err != nil { log.Println(err) return fiber.ErrInternalServerError } - docsSortedByHighlightedDate, err := d.hlRepository.Highlights(int(session.ID), 0, highlightsAmount) - if err != nil { - log.Println(err) - return fiber.ErrInternalServerError - } - - docs, err := d.idx.Documents(docsSortedByHighlightedDate.Hits()) - if err != nil { - log.Println(err) - return fiber.ErrInternalServerError - } - - highlights := make([]index.Document, 0, len(docs)) - for _, path := range docsSortedByHighlightedDate.Hits() { - if _, ok := docs[path]; !ok { - continue - } - doc := docs[path] - doc.Highlighted = true - highlights = append(highlights, doc) - } - return c.Render("index", fiber.Map{ "Count": count, "Title": "Coreander", - "Highlights": highlights, "EmailSendingConfigured": emailSendingConfigured, "EmailFrom": d.sender.From(), "HomeNavbar": true, diff --git a/internal/webserver/embedded/css/display.css b/internal/webserver/embedded/css/display.css index a1f9307b..820b9bd9 100644 --- a/internal/webserver/embedded/css/display.css +++ b/internal/webserver/embedded/css/display.css @@ -100,3 +100,15 @@ a.collapse-control.collapsed:after { filter: invert(100%); } } + +.cover-corner { + clip-path: polygon(100% 0, 100% calc(100% - 3em), calc(100% - 3em) 100%, 0 100%, 0 0); +} + +.cover-background { + background-color: #eee; +} + +.cursor-pointer { + cursor: pointer; +} diff --git a/internal/webserver/embedded/images/eye-solid.svg b/internal/webserver/embedded/images/eye-solid.svg new file mode 100644 index 00000000..f4559e6c --- /dev/null +++ b/internal/webserver/embedded/images/eye-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/internal/webserver/embedded/images/star-hollow.svg b/internal/webserver/embedded/images/star-hollow.svg new file mode 100644 index 00000000..a3780bf2 --- /dev/null +++ b/internal/webserver/embedded/images/star-hollow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/internal/webserver/embedded/images/star-solid.svg b/internal/webserver/embedded/images/star-solid.svg new file mode 100644 index 00000000..af53c816 --- /dev/null +++ b/internal/webserver/embedded/images/star-solid.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/internal/webserver/embedded/js/cover-loader.js b/internal/webserver/embedded/js/cover-loader.js deleted file mode 100644 index a96364ad..00000000 --- a/internal/webserver/embedded/js/cover-loader.js +++ /dev/null @@ -1,30 +0,0 @@ -window.onload = function () { - let imgs = document.querySelectorAll('.cover'); - for (i = 0; i < imgs.length; i++) { - let img = imgs[i]; - - if (!img.getAttribute('data-src')) { - continue; - } - - img.addEventListener('error', function onError(e) { - this.setAttribute('src', '/images/generic.jpg'); - }); - - img.setAttribute('src', img.getAttribute('data-src')); - - img.addEventListener('load', (event) => { - if (img.getAttribute('src') == '/images/generic.jpg') { - return; - } - let cardTitle = img.nextElementSibling.getElementsByClassName('card-title')[0]; - let cardTitleLink = cardTitle.getElementsByTagName('a')[0] - if (cardTitleLink) { - cardTitleLink.text = ''; - } else { - cardTitle.innerHTML = '' - } - img.nextElementSibling.getElementsByClassName('card-text')[0].innerHTML = ''; - }); - } -} diff --git a/internal/webserver/embedded/js/cover.js b/internal/webserver/embedded/js/cover.js new file mode 100644 index 00000000..bb823e80 --- /dev/null +++ b/internal/webserver/embedded/js/cover.js @@ -0,0 +1,9 @@ +"use strict" + +document.querySelectorAll(".cover").forEach(function(elem) { + elem.addEventListener("error", () => { + elem.onerror = null + elem.parentNode.children[0].srcset = elem.src + elem.parentNode.parentNode.children[1].classList.remove('d-none') + }) +}) diff --git a/internal/webserver/embedded/js/highlight.js b/internal/webserver/embedded/js/highlight.js index bc89fa84..e7e3fdb0 100644 --- a/internal/webserver/embedded/js/highlight.js +++ b/internal/webserver/embedded/js/highlight.js @@ -1,46 +1,15 @@ "use strict"; -let links = document.querySelectorAll("a.highlight, a.dehighlight"); - -Array.from(links).forEach((link) => { - link.addEventListener("click", (event) => { - event.preventDefault(); - const parent = link.closest(".actions"); - const method = link.getAttribute("data-method"); - - let highlightLinkParent = parent.querySelector(".highlight"); - let dehighlightLinkParent = parent.querySelector(".dehighlight"); - fetch(link.getAttribute("href"), { - method: method, - headers: { - "Content-Type": "application/x-www-form-urlencoded", - }, - credentials: "same-origin", - }) - .then((response) => { - if (response.ok) { - if (method == "DELETE") { - if (link.getAttribute("data-dehighlight") == "remove") { - location.reload(); - return; - } - dehighlightLinkParent.classList.add("visually-hidden"); - highlightLinkParent.classList.remove("visually-hidden"); - } else { - highlightLinkParent.classList.add("visually-hidden"); - dehighlightLinkParent.classList.remove( - "visually-hidden" - ); - } - return; - } - if (response.status == "403") { - location.reload() - } - }) - .catch(function (error) { - // Catch errors - console.log(error); - }); - }); +// Control which star icon to show when highlighting / dehighlighting an item +// To use only when we want to avoid refreshing the documents list +document.body.addEventListener('htmx:afterRequest', function(evt) { + if (!evt.detail.successful) { + return + } + evt.detail.elt.parentNode.classList.add("visually-hidden"); + if (evt.detail.elt.getAttribute('hx-delete')) { + evt.detail.elt.parentNode.nextElementSibling.classList.remove("visually-hidden"); + } else { + evt.detail.elt.parentNode.previousElementSibling.classList.remove("visually-hidden"); + } }); diff --git a/internal/webserver/embedded/js/send-email.js b/internal/webserver/embedded/js/send-email.js index 60860bb0..8d832cd2 100644 --- a/internal/webserver/embedded/js/send-email.js +++ b/internal/webserver/embedded/js/send-email.js @@ -1,8 +1,6 @@ "use strict" -let forms = document.getElementsByClassName("send-email"); - -Array.from(forms).forEach(form => { +Array.from(document.getElementsByClassName("send-email")).forEach(form => { form.addEventListener("submit", event => { event.preventDefault(); diff --git a/internal/webserver/embedded/views/auth/login.html b/internal/webserver/embedded/views/auth/login.html index 8b26d346..21d66ede 100644 --- a/internal/webserver/embedded/views/auth/login.html +++ b/internal/webserver/embedded/views/auth/login.html @@ -2,11 +2,11 @@

{{t .Lang "Please sign in"}}

- +
- + {{if .EmailSendingConfigured}} diff --git a/internal/webserver/embedded/views/document.html b/internal/webserver/embedded/views/document.html index aaed4398..139eb9cd 100644 --- a/internal/webserver/embedded/views/document.html +++ b/internal/webserver/embedded/views/document.html @@ -7,30 +7,9 @@
- {{t $lang "\"%s\" cover" .Document.Title}} - -
-

{{.Document.Title}}

-

- {{if .Document.Authors}} - {{join .Document.Authors ", "}} - {{else}} - {{t $lang "Unknown author"}} - {{end}} -

-
+ {{template "partials/cover" dict "Lang" .Lang "Document" .Document "Session" .Session "DisableCoverMainLink" true}}
- - - - - -   {{t .Lang "Read"}} - - @@ -49,22 +28,6 @@

KEPUB - {{if and (.Session) (ne .Session.Name "")}} - - - - -   {{t .Lang "Highlight"}} - - - - - - -   {{t .Lang "Remove from highlights"}} - - {{end}} - {{if not .EmailSendingConfigured}}

{{t .Lang "Send to email unavailable, no email service configured"}}

{{else}} @@ -159,7 +122,7 @@

{{t $lang "Other documents in collection \"%s\"" .Document.Series}}

{{range $i, $doc := .SameSeries}}
- {{template "partials/related" dict "Lang" $lang "Document" $doc}} + {{template "partials/cover" dict "Lang" $lang "Document" $doc "Session" $session}}
{{end}}
@@ -182,7 +145,7 @@

{{range $i, $doc := .SameAuthors}}
- {{template "partials/related" dict "Lang" $lang "Document" $doc}} + {{template "partials/cover" dict "Lang" $lang "Document" $doc "Session" $session}}
{{end}}
@@ -202,7 +165,7 @@

{{t $lang "Other documents with similar subjects"}}

{{range $i, $doc := .SameSubjects}}
- {{template "partials/related" dict "Lang" $lang "Document" $doc}} + {{template "partials/cover" dict "Lang" $lang "Document" $doc "Session" $session}}
{{end}}
@@ -211,8 +174,5 @@

{{t $lang "Other documents with similar subjects"}}

- - - diff --git a/internal/webserver/embedded/views/highlights.html b/internal/webserver/embedded/views/highlights.html index 7eed4045..3825890a 100644 --- a/internal/webserver/embedded/views/highlights.html +++ b/internal/webserver/embedded/views/highlights.html @@ -1,14 +1,18 @@ -
-

{{t .Lang "%s highlights" .Session.Name}}

- {{if gt .Results.TotalHits 0}} -

{{t .Lang "%d highlighted documents" .Results.TotalHits }}

- {{else}} -

{{t .Lang "No highlighted documents" }}

- {{end}} -
+
+
+

{{t .Lang "%s highlights" .Session.Name}}

+ {{if gt .Results.TotalHits 0}} +

{{t .Lang "%d highlighted documents" .Results.TotalHits }}

+ {{else}} +

{{t .Lang "No highlighted documents" }}

+ {{end}} +
-{{ template "partials/docs-list" .}} +
+ {{ template "partials/docs-list" .}} +
+
-{{ $length := len .Paginator.Pages }} {{ if gt $length 1 }} -{{template "partials/pagination" .}} -{{end}} + + + diff --git a/internal/webserver/embedded/views/index.html b/internal/webserver/embedded/views/index.html index b1ed2ec6..0796cd44 100644 --- a/internal/webserver/embedded/views/index.html +++ b/internal/webserver/embedded/views/index.html @@ -1,50 +1,11 @@
- + {{template "partials/searchbox" .}}

{{t .Lang "%d documents available" .Count}}

{{if and (.Session) (ne .Session.Name "")}} -
-
-

{{t .Lang "Your highlights" }}

-
- {{if gt (len .Highlights) 0}} - +
-
- {{$lang := .Lang}} - {{$emailSendingConfigured := .EmailSendingConfigured}} - {{$session := .Session}} - {{$emailFrom := .EmailFrom}} - - {{range $i, $doc := .Highlights}} -
- {{template "partials/related" dict "Lang" $lang "Document" $doc}} -
- -
-
- {{end}} -
- {{template "partials/delete-modal" dict "Lang" .Lang "Action" "/documents" "ModalHeader" "Delete document" "ModalBody" "Are you sure you want to delete this document?" "ModalErrorMessage" "There was an error deleting the document"}} - - - - - {{else}} -

{{t .Lang "You haven't highlighted any document yet."}}

- {{end}}
-{{else}} + {{template "partials/delete-modal" dict "Lang" .Lang "Action" "/documents" "ModalHeader" "Delete document" "ModalBody" "Are you sure you want to delete this document?" "ModalErrorMessage" "There was an error deleting the document"}} {{end}} diff --git a/internal/webserver/embedded/views/layout.html b/internal/webserver/embedded/views/layout.html index 50e07795..d4a7bf8e 100644 --- a/internal/webserver/embedded/views/layout.html +++ b/internal/webserver/embedded/views/layout.html @@ -32,7 +32,7 @@ Logo -
+
diff --git a/internal/webserver/embedded/views/partials/actions.html b/internal/webserver/embedded/views/partials/actions.html index cf8b5f8d..9328d0f8 100644 --- a/internal/webserver/embedded/views/partials/actions.html +++ b/internal/webserver/embedded/views/partials/actions.html @@ -1,12 +1,4 @@ -