Update: replace html with jet for template

This commit is contained in:
VnPower 2023-06-12 19:33:26 +07:00
parent 7239e4b287
commit 718e10e44d
Signed by: vnpower
GPG key ID: 881DE3DEB966106C
26 changed files with 297 additions and 528 deletions

38
go.mod
View file

@ -3,57 +3,29 @@ module pixivfe
go 1.20
require (
github.com/chenyahui/gin-cache v1.8.1
github.com/gin-gonic/gin v1.9.1
github.com/goccy/go-json v0.10.2
github.com/gofiber/fiber/v2 v2.46.0
github.com/gofiber/template/jet/v2 v2.1.3
)
require (
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 // indirect
github.com/CloudyKit/jet/v6 v6.2.0 // indirect
github.com/andybalholm/brotli v1.0.5 // indirect
github.com/bytedance/sonic v1.9.1 // indirect
github.com/cbroglie/mustache v1.4.0 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.14.1 // indirect
github.com/go-redis/redis/v8 v8.11.5 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/gofiber/fiber/v2 v2.46.0 // indirect
github.com/gofiber/template v1.8.2 // indirect
github.com/gofiber/template/html/v2 v2.0.4 // indirect
github.com/gofiber/template/mustache/v2 v2.0.4 // indirect
github.com/gofiber/utils v1.1.0 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/jellydator/ttlcache/v2 v2.11.1 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.16.5 // indirect
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
github.com/leodido/go-urn v1.2.4 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/mattn/go-runewidth v0.0.14 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
github.com/philhofer/fwd v1.1.2 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/savsgio/dictpool v0.0.0-20221023140959-7bf2e61cea94 // indirect
github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee // indirect
github.com/tinylib/msgp v1.1.8 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.47.0 // indirect
github.com/valyala/tcplisten v1.0.0 // indirect
golang.org/x/arch v0.3.0 // indirect
golang.org/x/crypto v0.9.0 // indirect
golang.org/x/net v0.10.0 // indirect
golang.org/x/sync v0.2.0 // indirect
golang.org/x/sys v0.8.0 // indirect
golang.org/x/text v0.9.0 // indirect
google.golang.org/protobuf v1.30.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

207
go.sum
View file

@ -1,138 +1,33 @@
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4slttB4vD+b9btVEnWgL3Q00OBTzVT8B9C0c=
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno=
github.com/CloudyKit/jet/v6 v6.2.0 h1:EpcZ6SR9n28BUGtNJSvlBqf90IpjeFr36Tizxhn/oME=
github.com/CloudyKit/jet/v6 v6.2.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4=
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
github.com/cbroglie/mustache v1.4.0 h1:Azg0dVhxTml5me+7PsZ7WPrQq1Gkf3WApcHMjMprYoU=
github.com/cbroglie/mustache v1.4.0/go.mod h1:SS1FTIghy0sjse4DUVGV1k/40B1qE1XkD9DtDsHo9iM=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chenyahui/gin-cache v1.8.1 h1:5ENT9VUt1uM6893S1h9qYQmQmD/vp+K+tgDEjtZsTgc=
github.com/chenyahui/gin-cache v1.8.1/go.mod h1:wh30aYY5rRMUAJmQvw1qoIIcEVRV1EkMJkpXzgipe8U=
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
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=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U=
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-playground/validator/v10 v10.14.1 h1:9c50NUPC30zyuKprjL3vNZ0m5oG+jU0zvx4AqHGnv4k=
github.com/go-playground/validator/v10 v10.14.1/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/gofiber/fiber/v2 v2.46.0 h1:wkkWotblsGVlLjXj2dpgKQAYHtXumsK/HyFugQM68Ns=
github.com/gofiber/fiber/v2 v2.46.0/go.mod h1:DNl0/c37WLe0g92U6lx1VMQuxGUQY5V7EIaVoEsUffc=
github.com/gofiber/template v1.8.2 h1:PIv9s/7Uq6m+Fm2MDNd20pAFFKt5wWs7ZBd8iV9pWwk=
github.com/gofiber/template v1.8.2/go.mod h1:bs/2n0pSNPOkRa5VJ8zTIvedcI/lEYxzV3+YPXdBvq8=
github.com/gofiber/template/html/v2 v2.0.4 h1:exZDo23hrYRqxoX4vPkJj31yxXTmlFEu2aHd+XmJmLM=
github.com/gofiber/template/html/v2 v2.0.4/go.mod h1:RCF14eLeQDCSUPp0IGc2wbSSDv6yt+V54XB/+Unz+LM=
github.com/gofiber/template/mustache/v2 v2.0.4 h1:n6Un05JZVeSjQgjYN5aiG/hvBVErc/CCPW3SzyzJo/U=
github.com/gofiber/template/mustache/v2 v2.0.4/go.mod h1:U75y7n5F3OJu8P5dUn1m9dX8RU6Jf/uvIORAVAQpYOc=
github.com/gofiber/template/jet/v2 v2.1.3 h1:l/mDuBrJAG1z2sPNQ8/Fn8PRX+6ywhhNCtEqUHEPpAE=
github.com/gofiber/template/jet/v2 v2.1.3/go.mod h1:eWS6P1s/VloKrzOIHLkYFOfjI7KAdFb9ZEaLU6Gtca8=
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/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/jellydator/ttlcache/v2 v2.11.1 h1:AZGME43Eh2Vv3giG6GeqeLeFXxwxn1/qHItqWZl6U64=
github.com/jellydator/ttlcache/v2 v2.11.1/go.mod h1:RtE5Snf0/57e+2cLWFYWCCsLas2Hy3c5Z4n14XmSvTI=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY=
github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI=
github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
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=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/savsgio/dictpool v0.0.0-20221023140959-7bf2e61cea94 h1:rmMl4fXJhKMNWl+K+r/fq4FbbKI+Ia2m9hYBLm2h4G4=
@ -140,28 +35,9 @@ github.com/savsgio/dictpool v0.0.0-20221023140959-7bf2e61cea94/go.mod h1:90zrgN3
github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d/go.mod h1:Gy+0tqhJvgGlqnTF8CVGP0AaGRjwBtXs/a5PA0Y3+A4=
github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee h1:8Iv5m6xEo1NR1AvpV+7XmhI4r39LGNzwUL4YpMuL5vk=
github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee/go.mod h1:qwtSXrKuJh/zsFQ12yEE89xfCrGKK63Rr7ctU/uCo4g=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/tinylib/msgp v1.1.6/go.mod h1:75BAfg2hauQhs3qedfdDZmWAPcFMAvJE5b9rGOMufyw=
github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0=
github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
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 h1:y7moDoxYzMooFpT5aHgNgVOQDrS3qlkfiP9mDtGGK9c=
@ -170,64 +46,32 @@ github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVS
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
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.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
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=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
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/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
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-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
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=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/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=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@ -235,53 +79,14 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210112230658-8b4aab62c064/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ=
golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
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-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=

View file

@ -8,10 +8,10 @@ import (
"strconv"
"strings"
"github.com/gofiber/template/html/v2"
"github.com/gofiber/template/jet/v2"
)
func GetTemplateFunctions(engine *html.Engine) {
func GetTemplateFunctions(engine *jet.Engine) {
engine.AddFunc("inc", func(n int) int {
// For rankings to increment a number by 1
return n + 1

View file

@ -5,7 +5,7 @@ import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cache"
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/template/html/v2"
"github.com/gofiber/template/jet/v2"
"pixivfe/configs"
"pixivfe/handler"
"pixivfe/views"
@ -13,7 +13,7 @@ import (
func setupRouter() *fiber.App {
// HTML templates, automatically loaded
engine := html.New("./template", ".html")
engine := jet.New("./template", ".jet.html")
handler.GetTemplateFunctions(engine)

View file

@ -1,26 +1,24 @@
{{ template "header" .Title }} {{ $parent := . }}
<div class="container">
<div class="artwork-page">
{{ with .Illust }}
<div class="artwork-content">
<div class="artwork-images">
{{ range .Images }}
<a href="{{ proxyImage .Original }}" target="_blank">
{{ range index := Illust.Images }}
<a href="{{ proxyImage(.Original) }}" target="_blank">
<img
src="{{ proxyImage .Large }}"
alt="{{ proxyImage .Original }}"
src="{{ proxyImage(.Large) }}"
alt="Page {{ index }}"
class="artwork-image-page"
/>
</a>
{{ end }}
</div>
<h2>{{ .Title }}</h2>
<p>{{ .Description }}</p>
<h2>{{ Illust.Title }}</h2>
<p>{{ Illust.Description }}</p>
<div class="artwork-tags">
{{ if eq .AiType 2 }}
{{ if Illust.AiType == 2 }}
<span class="artwork-tag-name emphasize">AI-generated</span>
{{ end }} {{ range .Tags }} {{ if isEmphasize .Name }}
{{ end }} {{ range Illust.Tags }} {{ if isEmphasize(.Name) }}
<span class="artwork-tag-name emphasize">{{ .Name }}</span>
{{ else }}
<a href="/tags/{{ .Name }}" class="artwork-tag-name">#{{ .Name }}</a
@ -28,32 +26,32 @@
{{ end }} {{ end }}
</div>
<br />
<span>{{ .Views }} views | {{ .Bookmarks }} bookmarks</span>
<span>{{ Illust.Views }} views | {{ Illust.Bookmarks }} bookmarks</span>
<br />
<small>{{ .Date }}</small>
<small>{{ Illust.Date }}</small>
<a href="/users/{{ $parent.Artist.ID }}" class="artwork-artist flex"
<a href="/users/{{ Artist.ID }}" class="artwork-artist flex"
><img
src="{{ proxyImage $parent.Artist.Avatar }}"
alt="{{ $parent.Artist.Name }}"
src="{{ proxyImage(Artist.Avatar) }}"
alt="{{ Artist.Name }}"
class="artwork-artist-avatar border-rounded"
/>
{{ $parent.Artist.Name }}</a
{{ Artist.Name }}</a
>
<div class="thumbnail-container">
{{ range $parent.Artist.Artworks }}
{{ range Artist.Artworks }}
<div class="artwork-thumbnail-small artwork-thumbnail">
{{ template "thumbnail-dt" . }}
{{ include "thumbnail-dt" . }}
</div>
{{ end }}
</div>
<hr />
<h2>Comments</h2>
{{ range $parent.Comments }}
{{ range Comments }}
<div class="comment">
<img
class="comment-avatar"
src="{{ proxyImage .Avatar }}"
src="{{ proxyImage(.Avatar) }}"
alt="{{ .AuthorName }}"
/>
<div class="comment-context">
@ -65,7 +63,7 @@
src="https://s.pximg.net/common/images/stamp/generated-stamps/{{ .Stamp }}_s.jpg"
alt="https://s.pximg.net/common/images/stamp/generated-stamps/{{ .Stamp }}_s.jpg"
/>
{{ else }} {{ parseEmojis .Context }} {{ end }}
{{ else }} {{ raw: parseEmojis(.Context) }} {{ end }}
</p>
<small>{{ .Date }}</small>
@ -73,10 +71,7 @@
</div>
{{ end }}
</div>
{{ end }}
</div>
<h2>Related works</h2>
<div>{{ template "small-tn" .Related }}</div>
<div>{{ include "small-tn" Related }}</div>
</div>
{{ template "footer" }}

View file

@ -1,5 +1,3 @@
{{ template "header.html" .Title}}
<div class="container">
<h2>Discover works</h2>
<div class="switcher">
@ -8,10 +6,8 @@
<a href="/discovery?mode=safe" class="switch-button">Safe</a>
<a href="/discovery?mode=r18" class="switch-button">R-18</a>
</div>
<div>{{ template "small-tn.html" .Artworks }}</div>
<div>{{ include "small-tn" Artworks }}</div>
<div class="pagination">
<a href="" class="pagination-button">Reload</a>
</div>
</div>
{{ template "footer.html" }}

View file

@ -1,9 +0,0 @@
<div class="footer">
<a href="https://codeberg.org/VnPower/pixivfe">
<p>Join the development on Codeberg!</p>
</a>
</div>
</body>
</html>

View file

@ -1,15 +0,0 @@
{{ range $i, $_ := . }}
<div class="artwork-thumbnail-large artwork-thumbnail">
<div class="artwork-rank-circle">{{ $i | inc}}</div>
<a href="/artworks/{{ .ID }}">
<img data-src="{{ proxyImage (index .Images 0).Small }}" alt="{{ .Title }}" class="artwork-master-image lazy" />
</a>
<a class="artwork-thumbnail-title" href="/artworks/{{ .ID }}">
<h3 class="no-margin">{{ .Title }}</h3>
</a>
<a href="/users/{{ .ArtistID }}" class="artwork-thumbnail-artist flex"><img data-src="{{ proxyImage .Artist.Avatar }}"
alt="{{ .ArtistName }}" class="artwork-thumbnail-artist-avatar border-rounded lazy" />
{{ .ArtistName }}</a>
</div>
{{ end }}

View file

@ -1,10 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
{{ if not . }}
<title>PixivFE</title>
{{ if isset(Title) }}
<title>{{ Title }} - PixivFE</title>
{{ else }}
<title>{{ . }} - PixivFE</title>
<title>PixivFE</title>
{{ end }}
<meta charset="UTF-8" />
<meta name="description" content="View this page on PixivFE." />
@ -78,5 +78,12 @@
</li>
</ul>
</nav>
{{ embed() }}
<div class="footer">
<a href="https://codeberg.org/VnPower/pixivfe">
<p>Join the development on Codeberg!</p>
</a>
</div>
</body>
</html>

View file

@ -1,8 +0,0 @@
{{ template "header.html" }}
<div class="container">
<h2>{{ .Title }}</h2>
<div>{{ template "small-tn.html" .Items }}</div>
</div>
{{ template "footer.html" }}

View file

@ -1,5 +1,3 @@
{{ template "header.html" .Title}}
<div class="container">
<h2>Newest works from all users</h2>
<div class="switcher">
@ -7,7 +5,5 @@
<a href="/newest" class="switch-button">Safe</a>
<a href="/newest?mode=r18" class="switch-button">R-18</a>
</div>
<div>{{ template "small-tn.html" .Items }}</div>
<div>{{ include "small-tn" Items }}</div>
</div>
{{ template "footer.html" }}

View file

@ -1,20 +1,18 @@
{{ template "header" .Title}}
<div class="container">
<h2>{{ .Title }}</h2>
<h2>{{ Title }}</h2>
<div class="switcher">
<span class="switch-title">Content</span>
<a href="/ranking?content=all&mode={{ .Mode }}&page=1" class="switch-button"
<a href="/ranking?content=all&mode={{ Mode }}&page=1" class="switch-button"
>Overall</a
>
<a
href="/ranking?content=illust&mode={{ .Mode }}&page=1"
href="/ranking?content=illust&mode={{ Mode }}&page=1"
class="switch-button"
>Illustrations</a
>
<a
href="/ranking?content=manga&mode={{ .Mode }}&page=1"
href="/ranking?content=manga&mode={{ Mode }}&page=1"
class="switch-button"
>Mangas</a
>
@ -24,48 +22,48 @@
<div class="switcher">
<span class="switch-title">Modes</span>
<a
href="/ranking?content={{ .Content }}&mode=daily&page=1"
href="/ranking?content={{ Content }}&mode=daily&page=1"
class="switch-button"
>Daily</a
>
<a
href="/ranking?content={{ .Content }}&mode=weekly&page=1"
href="/ranking?content={{ Content }}&mode=weekly&page=1"
class="switch-button"
>Weekly</a
>
<a
href="/ranking?content={{ .Content }}&mode=monthly&page=1"
href="/ranking?content={{ Content }}&mode=monthly&page=1"
class="switch-button"
>Monthly</a
>
<a
href="/ranking?content={{ .Content }}&mode=rookie&page=1"
href="/ranking?content={{ Content }}&mode=rookie&page=1"
class="switch-button"
>Rookie</a
>
<span class="switch-seperator"></span>
<a
href="/ranking?content={{ .Content }}&mode=daily_r18&page=1"
href="/ranking?content={{ Content }}&mode=daily_r18&page=1"
class="switch-button"
>Daily (R-18)</a
>
<a
href="/ranking?content={{ .Content }}&mode=weekly_r18&page=1"
href="/ranking?content={{ Content }}&mode=weekly_r18&page=1"
class="switch-button"
>Weekly (R-18)</a
>
</div>
<br />
{{ range .Items }}
{{ range Items }}
<div class="artwork-thumbnail-small artwork-thumbnail artwork-mobile">
<div class="artwork-rank-circle">{{ .Rank }}</div>
{{ if gt (toInt .Pages) 1 }}
{{ if toInt(.Pages) >= 1 }}
<div class="artwork-page-count"><span>&boxbox; {{ .Pages }}</span></div>
{{ end }}
<a href="/artworks/{{ .ID }}">
<img
src="{{ proxyImage .Image }}"
src="{{ proxyImage(.Image) }}"
alt="{{ .Title }}"
class="artwork-master-image"
/>
@ -76,7 +74,7 @@
</a>
<a href="/users/{{ .ArtistID }}" class="artwork-thumbnail-artist flex"
><img
src="{{ proxyImage .ArtistAvatar }}"
src="{{ proxyImage(.ArtistAvatar) }}"
alt="{{ .ArtistName }}"
class="artwork-thumbnail-artist-avatar border-rounded"
/>
@ -86,40 +84,38 @@
{{ end }}
<div class="pagination">
{{ if eq .Page 1 }}
{{ if Page >= 1 }}
<a href="#" class="pagination-button disabled">First</a>
<a href="#" class="pagination-button disabled">Previous</a>
{{ else }}
<a
href="/ranking?content={{ .Content }}&mode={{ .Mode }}&page=1"
href="/ranking?content={{ Content }}&mode={{ Mode }}&page=1"
class="pagination-button"
>First</a
>
<a
href="/ranking?content={{ .Content }}&mode={{ .Mode }}&page={{ dec .Page }}"
href="/ranking?content={{ Content }}&mode={{ Mode }}&page={{ dec(Page) }}"
class="pagination-button"
>Previous</a
>
{{ end }}
<a href="#" class="pagination-button disabled">{{ .Page }}</a>
<a href="#" class="pagination-button disabled">{{ Page }}</a>
{{ if eq .Page 10 }}
{{ if Page == 10 }}
<a href="#" class="pagination-button disabled">Next</a>
<a href="#" class="pagination-button disabled">Last</a>
{{ else }}
<a
href="/ranking?content={{ .Content }}&mode={{ .Mode }}&page={{ inc .Page }}"
href="/ranking?content={{ Content }}&mode={{ Mode }}&page={{ inc(Page) }}"
class="pagination-button"
>Next</a
>
<a
href="/ranking?content={{ .Content }}&mode={{ .Mode }}&page=10"
href="/ranking?content={{ Content }}&mode={{ Mode }}&page=10"
class="pagination-button"
>Last</a
>
{{ end }}
</div>
</div>
{{ template "footer" }}

View file

@ -1,37 +0,0 @@
{{ template "header.html" .Title }}
<div class="container">
<h2>Settings</h2>
<form action="/settings" method="post">
<fieldset class="settings-fieldset">
<legend>Proxy server {{ .Settings.Proxy }}</legend>
<input type="radio" name="image-proxy-server" id="image-proxy-server" value="i.pixiv.cat" />
<label for="image-proxy-server">i.pixiv.cat</label>
<br />
<input type="radio" name="image-proxy-server" id="image-proxy-server" value="px2.rainchan.win" />
<label for="image-proxy-server">px2.rainchan.win</label>
<br />
<input type="radio" name="image-proxy-server" id="image-proxy-server" value="px3.rainchan.win" />
<label for="image-proxy-server">px3.rainchan.win</label>
<br />
<input type="radio" name="image-proxy-server" id="image-proxy-server" value="px.s.rainchan.win" />
<label for="image-proxy-server">px.s.rainchan.win</label>
<br />
<input type="radio" name="image-proxy-server" id="image-proxy-server" value="sex.nyan.xyz" />
<label for="image-proxy-server">___.nyan.xyz</label>
<br />
<input type="radio" name="image-proxy-server" id="image-proxy-server" value="pximg.wjghj.cn" />
<label for="image-proxy-server">pximg.wjghj.cn</label>
<br />
<br />
<label for="image-proxy-server">Custom image proxy server</label>
<br />
<input type="text" name="image-proxy-server" id="image-proxy-server" placeholder="Paste the address here..."
autocomplete="off" />
<br />
<input type="submit" value="Apply" />
</fieldset>
</form>
</div>
{{ template "footer.html" }}

View file

@ -0,0 +1,68 @@
<div class="container">
<h2>Settings</h2>
<form action="/settings" method="post">
<fieldset class="settings-fieldset">
<legend>Proxy server {{ Settings.Proxy }}</legend>
<input
type="radio"
name="image-proxy-server"
id="image-proxy-server"
value="i.pixiv.cat"
/>
<label for="image-proxy-server">i.pixiv.cat</label>
<br />
<input
type="radio"
name="image-proxy-server"
id="image-proxy-server"
value="px2.rainchan.win"
/>
<label for="image-proxy-server">px2.rainchan.win</label>
<br />
<input
type="radio"
name="image-proxy-server"
id="image-proxy-server"
value="px3.rainchan.win"
/>
<label for="image-proxy-server">px3.rainchan.win</label>
<br />
<input
type="radio"
name="image-proxy-server"
id="image-proxy-server"
value="px.s.rainchan.win"
/>
<label for="image-proxy-server">px.s.rainchan.win</label>
<br />
<input
type="radio"
name="image-proxy-server"
id="image-proxy-server"
value="sex.nyan.xyz"
/>
<label for="image-proxy-server">___.nyan.xyz</label>
<br />
<input
type="radio"
name="image-proxy-server"
id="image-proxy-server"
value="pximg.wjghj.cn"
/>
<label for="image-proxy-server">pximg.wjghj.cn</label>
<br />
<br />
<label for="image-proxy-server">Custom image proxy server</label>
<br />
<input
type="text"
name="image-proxy-server"
id="image-proxy-server"
placeholder="Paste the address here..."
autocomplete="off"
/>
<br />
<input type="submit" value="Apply" />
</fieldset>
</form>
</div>

View file

@ -1,6 +1,6 @@
{{ range . }} {{ if not (isEmpty .ID) }}
{{ range . }} {{ if .ID }}
<div class="artwork-thumbnail-small artwork-thumbnail artwork-mobile">
{{ template "thumbnail-dt" . }} {{ template "thumbnail-tt" . }} {{ template
{{ include "thumbnail-dt" . }} {{ include "thumbnail-tt" . }} {{ include
"thumbnail-at" . }}
</div>
{{ end }} {{ end }}

View file

@ -1,119 +0,0 @@
{{ template "header.html" .Title}}
<div class="container">
<div class="tag-header">
{{ if .Tag.Metadata.id }}
<a href="/artworks/{{ .Tag.Metadata.id }}">
<img
class="tag-thumbnail"
src="{{ proxyImage .Tag.Metadata.image }}"
alt="{{ .Tag.Name }}"
/>
</a>
{{ end }}
<div class="tag-details">
<b class="main-tag">#{{ .Tag.Name }}</b>
<span class="translated-tag">{{ .Tag.Metadata.tag }}</span>
<br />
<br />
<span><b>{{ .Data.Artworks.Total }}</b> works</span>
<p class="tag-description">{{ .Tag.Metadata.abstract }}</p>
</div>
</div>
<div class="thumbnail-container">
{{ range .Data.RelatedTags }}
<a class="tag-container" href="/tags/{{ . }}">#{{ . }}</a>
{{ end }}
</div>
<div class="switcher">
<span class="switch-title">Type</span>
<a
href="/tags/{{ .Tag.Name }}?category=artworks&order={{ .Queries.Order }}&mode={{ .Queries.Mode }}&p=1"
class="switch-button"
>All</a
>
<a
href="/tags/{{ .Tag.Name }}?category=illustrations&order={{ .Queries.Order }}&mode={{ .Queries.Mode }}&p=1"
class="switch-button"
>Illustrations</a
>
<a
href="/tags/{{ .Tag.Name }}?category=manga&order={{ .Queries.Order }}&mode={{ .Queries.Mode }}&p=1"
class="switch-button"
>Manga</a
>
</div>
<div class="switcher">
<span class="switch-title">Order</span>
<a
href="/tags/{{ .Tag.Name }}?category={{ .Queries.Category }}&order=date_d&mode={{ .Queries.Mode }}&p=1"
class="switch-button"
>Newest</a
>
<a
href="/tags/{{ .Tag.Name }}?category={{ .Queries.Category }}&order=date&mode={{ .Queries.Mode }}&p=1"
class="switch-button"
>Oldest</a
>
</div>
<div class="switcher">
<span class="switch-title">Filter</span>
<a
href="/tags/{{ .Tag.Name }}?category={{ .Queries.Category }}&order={{ .Queries.Order }}&mode=all&p=1"
class="switch-button"
>All</a
>
<a
href="/tags/{{ .Tag.Name }}?category={{ .Queries.Category }}&order={{ .Queries.Order }}&mode=safe&p=1"
class="switch-button"
>Safe</a
>
<a
href="/tags/{{ .Tag.Name }}?category={{ .Queries.Category }}&order={{ .Queries.Order }}&mode=r18&p=1"
class="switch-button"
>R18</a
>
</div>
{{ if .Data.Popular.Recent }}
<h2>Popular artworks</h2>
<div class="thumbnail-container">
{{ template "small-tn-normal.html" .Data.Popular.Recent }} {{ template
"small-tn-normal.html" .Data.Popular.Permanent }}
</div>
{{ end }}
<!-- Switchers here -->
<br />
<h2>Works</h2>
<div>{{ template "small-tn.html" .Data.Artworks.Artworks }}</div>
<div class="pagination">
{{ if eq (toInt .Queries.Page) 1 }}
<a href="#" class="pagination-button disabled">First</a>
<a href="#" class="pagination-button disabled">Previous</a>
{{ else }}
<a
href="/tags/{{ .Tag.Name }}?category={{ .Queries.Category }}&order={{ .Queries.Order }}&mode={{ .Queries.Mode }}&page=1"
class="pagination-button"
>First</a
>
<a
href="/tags/{{ .Tag.Name }}?category={{ .Queries.Category }}&order={{ .Queries.Order }}&mode={{ .Queries.Mode }}&page={{ dec (toInt .Queries.Page) }}"
class="pagination-button"
>Previous</a
>
{{ end }}
<a href="#" class="pagination-button disabled">{{ .Queries.Page }}</a>
<a
href="/tags/{{ .Tag.Name }}?category={{ .Queries.Category }}&order={{ .Queries.Order }}&mode={{ .Queries.Mode }}&page={{ inc (toInt .Queries.Page) }}"
class="pagination-button"
>Next</a
>
</div>
</div>
{{ template "footer.html" }}

116
template/tag.jet.html Normal file
View file

@ -0,0 +1,116 @@
<div class="container">
<div class="tag-header">
{{ if Tag.Metadata.id }}
<a href="/artworks/{{ Tag.Metadata.id }}">
<img
class="tag-thumbnail"
src="{{ proxyImage(Tag.Metadata.image) }}"
alt="{{ Tag.Name }}"
/>
</a>
{{ end }}
<div class="tag-details">
<b class="main-tag">#{{ Tag.Name }}</b>
<span class="translated-tag">{{ Tag.Metadata.tag }}</span>
<br />
<br />
<span><b>{{ Data.Artworks.Total }}</b> works</span>
<p class="tag-description">{{ Tag.Metadata.abstract }}</p>
</div>
</div>
<div class="thumbnail-container">
{{ range Data.RelatedTags }}
<a class="tag-container" href="/tags/{{ . }}">#{{ . }}</a>
{{ end }}
</div>
<div class="switcher">
<span class="switch-title">Type</span>
<a
href="/tags/{{ Tag.Name }}?category=artworks&order={{ Queries.Order }}&mode={{ Queries.Mode }}&p=1"
class="switch-button"
>All</a
>
<a
href="/tags/{{ Tag.Name }}?category=illustrations&order={{ Queries.Order }}&mode={{ Queries.Mode }}&p=1"
class="switch-button"
>Illustrations</a
>
<a
href="/tags/{{ Tag.Name }}?category=manga&order={{ Queries.Order }}&mode={{ Queries.Mode }}&p=1"
class="switch-button"
>Manga</a
>
</div>
<div class="switcher">
<span class="switch-title">Order</span>
<a
href="/tags/{{ Tag.Name }}?category={{ Queries.Category }}&order=date_d&mode={{ Queries.Mode }}&p=1"
class="switch-button"
>Newest</a
>
<a
href="/tags/{{ Tag.Name }}?category={{ Queries.Category }}&order=date&mode={{ Queries.Mode }}&p=1"
class="switch-button"
>Oldest</a
>
</div>
<div class="switcher">
<span class="switch-title">Filter</span>
<a
href="/tags/{{ Tag.Name }}?category={{ Queries.Category }}&order={{ Queries.Order }}&mode=all&p=1"
class="switch-button"
>All</a
>
<a
href="/tags/{{ Tag.Name }}?category={{ Queries.Category }}&order={{ Queries.Order }}&mode=safe&p=1"
class="switch-button"
>Safe</a
>
<a
href="/tags/{{ Tag.Name }}?category={{ Queries.Category }}&order={{ Queries.Order }}&mode=r18&p=1"
class="switch-button"
>R18</a
>
</div>
{{ if Data.Popular.Recent }}
<h2>Popular artworks</h2>
<div class="thumbnail-container">
{{ include "small-tn-normal" Data.Popular.Recent }} {{ include
"small-tn-normal" Data.Popular.Permanent }}
</div>
{{ end }}
<!-- Switchers here -->
<br />
<h2>Works</h2>
<div>{{ include "small-tn" Data.Artworks.Artworks }}</div>
<div class="pagination">
{{ if toInt (.Queries.Page) == 1 }}
<a href="#" class="pagination-button disabled">First</a>
<a href="#" class="pagination-button disabled">Previous</a>
{{ else }}
<a
href="/tags/{{ Tag.Name }}?category={{ Queries.Category }}&order={{ Queries.Order }}&mode={{ Queries.Mode }}&page=1"
class="pagination-button"
>First</a
>
<a
href="/tags/{{ Tag.Name }}?category={{ Queries.Category }}&order={{ Queries.Order }}&mode={{ Queries.Mode }}&page={{ dec(toInt(Queries.Page)) }}"
class="pagination-button"
>Previous</a
>
{{ end }}
<a href="#" class="pagination-button disabled">{{ .Queries.Page }}</a>
<a
href="/tags/{{ Tag.Name }}?category={{ Queries.Category }}&order={{ Queries.Order }}&mode={{ Queries.Mode }}&page={{ inc(toInt(Queries.Page)) }}"
class="pagination-button"
>Next</a
>
</div>
</div>

View file

@ -1,4 +1,3 @@
{{ template "header" }}
<div
class="container"
style="
@ -19,4 +18,3 @@
if you are using the official instance :D</small
>
</div>
{{ template "footer" }}

View file

@ -1,3 +0,0 @@
<a href="/users/{{ .ArtistID }}" class="artwork-thumbnail-artist flex"><img src="{{ proxyImage .ArtistAvatar }}"
alt="{{ .ArtistName }}" class="artwork-thumbnail-artist-avatar border-rounded" />
{{ .ArtistName }}</a>

View file

@ -0,0 +1,8 @@
<a href="/users/{{ .ArtistID }}" class="artwork-thumbnail-artist flex"
><img
src="{{ proxyImage(.ArtistAvatar) }}"
alt="{{ .ArtistName }}"
class="artwork-thumbnail-artist-avatar border-rounded"
/>
{{ .ArtistName }}</a
>

View file

@ -1,10 +0,0 @@
{{ if ne .XRestrict 0 }}
<div class="artwork-profanity-label">
<span>{{ if eq .XRestrict 1 }}R-18{{ else }}R-18G{{ end }}</span>
</div>
{{ end }} {{ if gt .Pages 1 }}
<div class="artwork-page-count"><span>&boxbox; {{ .Pages }}</span></div>
{{ end }}
<a href="/artworks/{{ .ID }}">
<img src="{{ proxyImage .Thumbnail }}" alt="{{ .Title }}" class="artwork-master-image" />
</a>

View file

@ -0,0 +1,14 @@
{{ if .XRestrict != 0 }}
<div class="artwork-profanity-label">
<span>{{ if .XRestrict == 1 }}R-18{{ else }}R-18G{{ end }}</span>
</div>
{{ end }} {{ if .Pages > 1 }}
<div class="artwork-page-count"><span>&boxbox; {{ .Pages }}</span></div>
{{ end }}
<a href="/artworks/{{ .ID }}">
<img
src="{{ proxyImage(.Thumbnail) }}"
alt="{{ .Title }}"
class="artwork-master-image"
/>
</a>

View file

@ -1,59 +1,58 @@
{{ template "header.html" .Title}} {{ if isEmpty .User.BackgroundImage }}
{{ if ! User.BackgroundImage }}
<div class="user-background-placeholder"></div>
{{ else }}
<div class="user-background">
<img src="{{ proxyImage .User.BackgroundImage }}" alt="{{ .User.Name }}" />
<img src="{{ proxyImage(User.BackgroundImage) }}" alt="{{ User.Name }}" />
</div>
{{ end }}
<div class="container">
<div class="user-page">
<div class="user-details">
<img
src="{{ proxyImage .User.Avatar }}"
src="{{ proxyImage(User.Avatar) }}"
alt="avatar"
class="user-avatar"
/>
<h2 class="user-name">{{ .User.Name }}</h2>
<h2 class="user-name">{{ User.Name }}</h2>
<p class="user-id">
{{ .User.Following }} Following | {{ .User.MyPixiv }} MyPixiv
{{ User.Following }} Following | {{ User.MyPixiv }} MyPixiv
</p>
<p class="user-comment">{{ .User.Comment }}</p>
<p class="user-comment">{{ raw: User.Comment }}</p>
</div>
</div>
<div>
<h1>Illustrations and Mangas</h1>
{{ template "small-tn.html" .User.Artworks }}
{{ include "small-tn" User.Artworks }}
</div>
<div class="pagination">
{{ if eq .Page 1 }}
{{ if Page == 1 }}
<a href="#" class="pagination-button disabled">First</a>
<a href="#" class="pagination-button disabled">Previous</a>
{{ else }}
<a href="/users/{{ .User.ID }}?page=1" class="pagination-button">First</a>
<a href="/users/{{ User.ID }}?page=1" class="pagination-button">First</a>
<a
href="/users/{{ .User.ID }}?page={{ dec .Page }}"
href="/users/{{ User.ID }}?page={{ dec(Page) }}"
class="pagination-button"
>Previous</a
>
{{ end }}
<a href="#" class="pagination-button disabled">{{ .Page }}</a>
<a href="#" class="pagination-button disabled">{{ Page }}</a>
{{ if eq .Page (dec .PageLimit) }}
{{ if Page == dec(PageLimit) }}
<a href="#" class="pagination-button disabled">Next</a>
<a href="#" class="pagination-button disabled">Last</a>
{{ else }}
<a
href="/users/{{ .User.ID }}?page={{ inc .Page }}"
href="/users/{{ User.ID }}?page={{ inc(Page) }}"
class="pagination-button"
>Next</a
>
<a
href="/users/{{ .User.ID }}?page={{ dec .PageLimit }}"
href="/users/{{ User.ID }}?page={{ dec(PageLimit) }}"
class="pagination-button"
>Last</a
>
{{ end }}
</div>
</div>
{{ template "footer.html" }}

View file

@ -39,7 +39,7 @@ func artwork_page(c *fiber.Ctx) error {
"Artist": artist_info,
"Comments": comments,
"Title": illust.Title,
})
}, "layout")
}
func index_page(c *fiber.Ctx) error {
@ -53,7 +53,7 @@ func index_page(c *fiber.Ctx) error {
// "Spotlights": spotlight,
// "Newest": newest,
// })
return c.Render("temp", fiber.Map{})
return c.Render("temp", fiber.Map{"Title": "Test"}, "layout")
}
func user_page(c *fiber.Ctx) error {
@ -72,7 +72,7 @@ func user_page(c *fiber.Ctx) error {
worksCount, _ := PC.GetUserArtworksCount(id)
pageLimit := math.Ceil(float64(worksCount)/30.0) + 1.0
return c.Render("user", fiber.Map{"Title": user.Name, "User": user, "PageLimit": int(pageLimit), "Page": pageInt})
return c.Render("user", fiber.Map{"Title": user.Name, "User": user, "PageLimit": int(pageLimit), "Page": pageInt}, "layout")
}
func ranking_page(c *fiber.Ctx) error {
@ -94,7 +94,7 @@ func ranking_page(c *fiber.Ctx) error {
"Items": response.Artworks,
"Mode": mode,
"Content": content,
"Page": pageInt})
"Page": pageInt}, "layout")
}
func newest_artworks_page(c *fiber.Ctx) error {
@ -110,7 +110,7 @@ func newest_artworks_page(c *fiber.Ctx) error {
return c.Render("newest", fiber.Map{
"Items": works,
"Title": "Newest works",
})
}, "layout")
}
func search_page(c *fiber.Ctx) error {
@ -139,7 +139,7 @@ func search_page(c *fiber.Ctx) error {
"Mode": mode,
"Category": category,
}
return c.Render("tag", fiber.Map{"Title": "Results for " + tag.Name, "Tag": tag, "Data": result, "Queries": queries})
return c.Render("tag", fiber.Map{"Title": "Results for " + tag.Name, "Tag": tag, "Data": result, "Queries": queries}, "layout")
}
func search(c *fiber.Ctx) error {
@ -156,7 +156,7 @@ func discovery_page(c *fiber.Ctx) error {
return err
}
return c.Render("discovery", fiber.Map{"Title": "Discovery", "Artworks": artworks})
return c.Render("discovery", fiber.Map{"Title": "Discovery", "Artworks": artworks}, "layout")
}
// func not_found_page(c *fiber.Ctx) {