From e1b5d2fe397a70306dd80590f168f7c1272ad830 Mon Sep 17 00:00:00 2001 From: Nicola Murino Date: Tue, 9 Jan 2024 19:54:08 +0100 Subject: [PATCH] WebAdmin: use the new UI for user pages Signed-off-by: Nicola Murino --- go.mod | 58 +- go.sum | 113 +- internal/dataprovider/dataprovider.go | 26 + internal/httpd/server.go | 2 + internal/httpd/webadmin.go | 122 +- internal/util/i18n.go | 12 + pkgs/build.sh | 2 +- .../custom/datatables/datatables.bundle.css | 2 +- .../custom/datatables/datatables.bundle.js | 50 +- static/locales/en/translation.json | 192 +- static/locales/it/translation.json | 194 +- templates/common/base.html | 103 +- templates/webadmin/base.html | 14 +- templates/webadmin/fsconfig.html | 835 +++----- templates/webadmin/user.html | 1883 +++++++++-------- templates/webadmin/users.html | 569 ++++- templates/webclient/base.html | 2 +- templates/webclient/files.html | 96 +- templates/webclient/mfa.html | 2 +- templates/webclient/profile.html | 26 +- templates/webclient/share.html | 42 +- templates/webclient/shares.html | 45 +- 22 files changed, 2615 insertions(+), 1775 deletions(-) diff --git a/go.mod b/go.mod index b8aa8148..f472903c 100644 --- a/go.mod +++ b/go.mod @@ -9,15 +9,15 @@ require ( github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5 github.com/alexedwards/argon2id v1.0.0 github.com/amoghe/go-crypt v0.0.0-20220222110647-20eada5f5964 - github.com/aws/aws-sdk-go-v2 v1.24.0 - github.com/aws/aws-sdk-go-v2/config v1.26.2 - github.com/aws/aws-sdk-go-v2/credentials v1.16.13 - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.9 - github.com/aws/aws-sdk-go-v2/service/marketplacemetering v1.19.5 - github.com/aws/aws-sdk-go-v2/service/s3 v1.47.7 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.26.0 - github.com/aws/aws-sdk-go-v2/service/sts v1.26.6 + github.com/aws/aws-sdk-go-v2 v1.24.1 + github.com/aws/aws-sdk-go-v2/config v1.26.3 + github.com/aws/aws-sdk-go-v2/credentials v1.16.14 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.11 + github.com/aws/aws-sdk-go-v2/service/marketplacemetering v1.19.6 + github.com/aws/aws-sdk-go-v2/service/s3 v1.48.0 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.26.1 + github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 github.com/bmatcuk/doublestar/v4 v4.6.1 github.com/cockroachdb/cockroach-go/v2 v2.3.5 github.com/coreos/go-oidc/v3 v3.9.0 @@ -39,7 +39,7 @@ require ( github.com/jackc/pgx/v5 v5.5.1 github.com/jlaffaye/ftp v0.0.0-20201112195030-9aae4d151126 github.com/klauspost/compress v1.17.4 - github.com/lestrrat-go/jwx/v2 v2.0.18 + github.com/lestrrat-go/jwx/v2 v2.0.19 github.com/lithammer/shortuuid/v3 v3.0.7 github.com/mattn/go-sqlite3 v1.14.19 github.com/mhale/smtpd v0.8.1 @@ -68,13 +68,13 @@ require ( go.etcd.io/bbolt v1.3.8 go.uber.org/automaxprocs v1.5.3 gocloud.dev v0.36.0 - golang.org/x/crypto v0.17.0 - golang.org/x/net v0.19.0 - golang.org/x/oauth2 v0.15.0 - golang.org/x/sys v0.15.0 - golang.org/x/term v0.15.0 + golang.org/x/crypto v0.18.0 + golang.org/x/net v0.20.0 + golang.org/x/oauth2 v0.16.0 + golang.org/x/sys v0.16.0 + golang.org/x/term v0.16.0 golang.org/x/time v0.5.0 - google.golang.org/api v0.154.0 + google.golang.org/api v0.155.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 ) @@ -86,16 +86,16 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 // indirect github.com/ajg/form v1.5.1 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.9 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.9 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.9 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.18.5 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.18.6 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.6 // indirect github.com/aws/smithy-go v1.19.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/boombuler/barcode v1.0.1 // indirect @@ -165,16 +165,16 @@ require ( go.opentelemetry.io/otel/metric v1.21.0 // indirect go.opentelemetry.io/otel/trace v1.21.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/exp v0.0.0-20231226003508-02704c960a9b // indirect + golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/sync v0.5.0 // indirect + golang.org/x/sync v0.6.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.16.1 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect + google.golang.org/genproto v0.0.0-20240108191215-35c7eff3a6b1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240108191215-35c7eff3a6b1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1 // indirect google.golang.org/grpc v1.60.1 // indirect google.golang.org/protobuf v1.32.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go.sum b/go.sum index e054f882..adb72f72 100644 --- a/go.sum +++ b/go.sum @@ -33,46 +33,46 @@ github.com/alexedwards/argon2id v1.0.0 h1:wJzDx66hqWX7siL/SRUmgz3F8YMrd/nfX/xHHc github.com/alexedwards/argon2id v1.0.0/go.mod h1:tYKkqIjzXvZdzPvADMWOEZ+l6+BD6CtBXMj5fnJppiw= github.com/amoghe/go-crypt v0.0.0-20220222110647-20eada5f5964 h1:I9YN9WMo3SUh7p/4wKeNvD/IQla3U3SUa61U7ul+xM4= github.com/amoghe/go-crypt v0.0.0-20220222110647-20eada5f5964/go.mod h1:eFiR01PwTcpbzXtdMces7zxg6utvFM5puiWHpWB8D/k= -github.com/aws/aws-sdk-go-v2 v1.24.0 h1:890+mqQ+hTpNuw0gGP6/4akolQkSToDJgHfQE7AwGuk= -github.com/aws/aws-sdk-go-v2 v1.24.0/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= +github.com/aws/aws-sdk-go-v2 v1.24.1 h1:xAojnj+ktS95YZlDf0zxWBkbFtymPeDP+rvUQIH3uAU= +github.com/aws/aws-sdk-go-v2 v1.24.1/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 h1:OCs21ST2LrepDfD3lwlQiOqIGp6JiEUqG84GzTDoyJs= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4/go.mod h1:usURWEKSNNAcAZuzRn/9ZYPT8aZQkR7xcCtunK/LkJo= -github.com/aws/aws-sdk-go-v2/config v1.26.2 h1:+RWLEIWQIGgrz2pBPAUoGgNGs1TOyF4Hml7hCnYj2jc= -github.com/aws/aws-sdk-go-v2/config v1.26.2/go.mod h1:l6xqvUxt0Oj7PI/SUXYLNyZ9T/yBPn3YTQcJLLOdtR8= -github.com/aws/aws-sdk-go-v2/credentials v1.16.13 h1:WLABQ4Cp4vXtXfOWOS3MEZKr6AAYUpMczLhgKtAjQ/8= -github.com/aws/aws-sdk-go-v2/credentials v1.16.13/go.mod h1:Qg6x82FXwW0sJHzYruxGiuApNo31UEtJvXVSZAXeWiw= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10 h1:w98BT5w+ao1/r5sUuiH6JkVzjowOKeOJRHERyy1vh58= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10/go.mod h1:K2WGI7vUvkIv1HoNbfBA1bvIZ+9kL3YVmWxeKuLQsiw= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.9 h1:5zA8qVCXMPGt6YneFnll5B157SfdK2SewU85PH9/yM0= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.9/go.mod h1:t4gy210hPxkbtYM8xOzrWdxVq1PyekR76OOKXy3s0Vs= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9 h1:v+HbZaCGmOwnTTVS86Fleq0vPzOd7tnJGbFhP0stNLs= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9/go.mod h1:Xjqy+Nyj7VDLBtCMkQYOw1QYfAEZCVLrfI0ezve8wd4= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9 h1:N94sVhRACtXyVcjXxrwK1SKFIJrA9pOJ5yu2eSHnmls= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9/go.mod h1:hqamLz7g1/4EJP+GH5NBhcUMLjW+gKLQabgyz6/7WAU= +github.com/aws/aws-sdk-go-v2/config v1.26.3 h1:dKuc2jdp10y13dEEvPqWxqLoc0vF3Z9FC45MvuQSxOA= +github.com/aws/aws-sdk-go-v2/config v1.26.3/go.mod h1:Bxgi+DeeswYofcYO0XyGClwlrq3DZEXli0kLf4hkGA0= +github.com/aws/aws-sdk-go-v2/credentials v1.16.14 h1:mMDTwwYO9A0/JbOCOG7EOZHtYM+o7OfGWfu0toa23VE= +github.com/aws/aws-sdk-go-v2/credentials v1.16.14/go.mod h1:cniAUh3ErQPHtCQGPT5ouvSAQ0od8caTO9OOuufZOAE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 h1:c5I5iH+DZcH3xOIMlz3/tCKJDaHFwYEmxvlh2fAcFo8= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11/go.mod h1:cRrYDYAMUohBJUtUnOhydaMHtiK/1NZ0Otc9lIb6O0Y= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.11 h1:I6lAa3wBWfCz/cKkOpAcumsETRkFAl70sWi8ItcMEsM= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.11/go.mod h1:be1NIO30kJA23ORBLqPo1LttEM6tPNSEcjkd1eKzNW0= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 h1:vF+Zgd9s+H4vOXd5BMaPWykta2a6Ih0AKLq/X6NYKn4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10/go.mod h1:6BkRjejp/GR4411UGqkX8+wFMbFbqsUIimfK4XjOKR4= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 h1:nYPe006ktcqUji8S2mqXf9c/7NdiKriOwMvWQHgYztw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10/go.mod h1:6UV4SZkVvmODfXKql4LCbaZUpF7HO2BX38FgBf9ZOLw= github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 h1:GrSw8s0Gs/5zZ0SX+gX4zQjRnRsMJDJ2sLur1gRBhEM= github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.9 h1:ugD6qzjYtB7zM5PN/ZIeaAIyefPaD82G8+SJopgvUpw= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.9/go.mod h1:YD0aYBWCrPENpHolhKw2XDlTIWae2GKXT1T4o6N6hiM= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10 h1:5oE2WzJE56/mVveuDZPJESKlg/00AaS2pY2QZcnxg4M= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10/go.mod h1:FHbKWQtRBYUz4vO5WBWjzMD2by126ny5y/1EoaWoLfI= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 h1:/b31bi3YVNlkzkBrm9LfpaKoaYZUxIAj4sHfOTmLfqw= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4/go.mod h1:2aGXHFmbInwgP9ZfpmdIfOELL79zhdNYNmReK8qDfdQ= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.9 h1:/90OR2XbSYfXucBMJ4U14wrjlfleq/0SB6dZDPncgmo= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.9/go.mod h1:dN/Of9/fNZet7UrQQ6kTDo/VSwKPIq94vjlU16bRARc= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9 h1:Nf2sHxjMJR8CSImIVCONRi4g0Su3J+TSTbS7G0pUeMU= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9/go.mod h1:idky4TER38YIjr2cADF1/ugFMKvZV7p//pVeV5LZbF0= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.9 h1:iEAeF6YC3l4FzlJPP9H3Ko1TXpdjdqWffxXjp8SY6uk= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.9/go.mod h1:kjsXoK23q9Z/tLBrckZLLyvjhZoS+AGrzqzUfEClvMM= -github.com/aws/aws-sdk-go-v2/service/marketplacemetering v1.19.5 h1:Fp3Gcbp3lAJAxeFRVSxc6tWOUPSG8iSkJEiFl3eZZ3o= -github.com/aws/aws-sdk-go-v2/service/marketplacemetering v1.19.5/go.mod h1:XABJbVXMa0xnVqaGbhkfUeVV0GrPsc3Jqscu87IovXU= -github.com/aws/aws-sdk-go-v2/service/s3 v1.47.7 h1:o0ASbVwUAIrfp/WcCac+6jioZt4Hd8k/1X8u7GJ/QeM= -github.com/aws/aws-sdk-go-v2/service/s3 v1.47.7/go.mod h1:vADO6Jn+Rq4nDtfwNjhgR84qkZwiC6FqCaXdw/kYwjA= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.26.0 h1:dPCRgAL4WD9tSMaDglRNGOiAtSTjkwNiUW5GDpWFfHA= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.26.0/go.mod h1:4Ae1NCLK6ghmjzd45Tc33GgCKhUWD2ORAlULtMO1Cbs= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.5 h1:ldSFWz9tEHAwHNmjx2Cvy1MjP5/L9kNoR0skc6wyOOM= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.5/go.mod h1:CaFfXLYL376jgbP7VKC96uFcU8Rlavak0UlAwk1Dlhc= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5 h1:2k9KmFawS63euAkY4/ixVNsYYwrwnd5fIvgEKkfZFNM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5/go.mod h1:W+nd4wWDVkSUIox9bacmkBP5NMFQeTJ/xqNabpzSR38= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.6 h1:HJeiuZ2fldpd0WqngyMR6KW7ofkXNLyOaHwEIGm39Cs= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.6/go.mod h1:XX5gh4CB7wAs4KhcF46G6C8a2i7eupU19dcAAE+EydU= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10 h1:L0ai8WICYHozIKK+OtPzVJBugL7culcuM4E4JOpIEm8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10/go.mod h1:byqfyxJBshFk0fF9YmK0M0ugIO8OWjzH2T3bPG4eGuA= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 h1:DBYTXwIGQSGs9w4jKm60F5dmCQ3EEruxdc0MFh+3EY4= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10/go.mod h1:wohMUQiFdzo0NtxbBg0mSRGZ4vL3n0dKjLTINdcIino= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10 h1:KOxnQeWy5sXyS37fdKEvAsGHOr9fa/qvwxfJurR/BzE= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10/go.mod h1:jMx5INQFYFYB3lQD9W0D8Ohgq6Wnl7NYOJ2TQndbulI= +github.com/aws/aws-sdk-go-v2/service/marketplacemetering v1.19.6 h1:JWy+uLKZQR/9a3gQ+jQa28FEJ/41Z0spdbbQodaXFeA= +github.com/aws/aws-sdk-go-v2/service/marketplacemetering v1.19.6/go.mod h1:T2NcfuIuXWcuwVwg3rBIW6h1cfzCdrzSn4Hs0KltND8= +github.com/aws/aws-sdk-go-v2/service/s3 v1.48.0 h1:PJTdBMsyvra6FtED7JZtDpQrIAflYDHFoZAu/sKYkwU= +github.com/aws/aws-sdk-go-v2/service/s3 v1.48.0/go.mod h1:4qXHrG1Ne3VGIMZPCB8OjH/pLFO94sKABIusjh0KWPU= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.26.1 h1:Sn3MAV9YeACCULaxNWWYFH1a6G4wYFwBn3/TA5MwE2Q= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.26.1/go.mod h1:qutL00aW8GSo2D0I6UEOqMvRS3ZyuBrOC1BLe5D2jPc= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.6 h1:dGrs+Q/WzhsiUKh82SfTVN66QzyulXuMDTV/G8ZxOac= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.6/go.mod h1:+mJNDdF+qiUlNKNC3fxn74WWNN+sOiGOEImje+3ScPM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.6 h1:Yf2MIo9x+0tyv76GljxzqA3WtC5mw7NmazD2chwjxE4= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.6/go.mod h1:ykf3COxYI0UJmxcfcxcVuz7b6uADi1FkiUz6Eb7AgM8= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 h1:NzO4Vrau795RkUdSHKEwiR01FaGzGOH1EETJ+5QHnm0= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.7/go.mod h1:6h2YuIoxaMSCFf5fi1EgZAwdfkGMgDY+DVfa61uLe4U= github.com/aws/smithy-go v1.19.0 h1:KWFKQV80DpP3vJrrA9sVAHQ5gc2z8i4EzrLhLlWXcBM= github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -105,7 +105,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= @@ -264,9 +263,8 @@ github.com/lestrrat-go/httprc v1.0.4 h1:bAZymwoZQb+Oq8MEbyipag7iSq6YIga8Wj6GOiJG github.com/lestrrat-go/httprc v1.0.4/go.mod h1:mwwz3JMTPBjHUkkDv/IGJ39aALInZLrhBp0X7KGUZlo= github.com/lestrrat-go/iter v1.0.2 h1:gMXo1q4c2pHmC3dn8LzRhJfP1ceCbgSiT9lUydIzltI= github.com/lestrrat-go/iter v1.0.2/go.mod h1:Momfcq3AnRlRjI5b5O8/G5/BvpzrhoFTZcn06fEOPt4= -github.com/lestrrat-go/jwx/v2 v2.0.18 h1:HHZkYS5wWDDyAiNBwztEtDoX07WDhGEdixm8G06R50o= -github.com/lestrrat-go/jwx/v2 v2.0.18/go.mod h1:fAJ+k5eTgKdDqanzCuK6DAt3W7n3cs2/FX7JhQdk83U= -github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= +github.com/lestrrat-go/jwx/v2 v2.0.19 h1:ekv1qEZE6BVct89QA+pRF6+4pCpfVrOnEJnTnT4RXoY= +github.com/lestrrat-go/jwx/v2 v2.0.19/go.mod h1:l3im3coce1lL2cDeAjqmaR+Awx+X8Ih+2k8BuHNJ4CU= github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU= github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= @@ -432,8 +430,8 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8 gocloud.dev v0.36.0 h1:q5zoXux4xkOZP473e1EZbG8Gq9f0vlg1VNH5Du/ybus= gocloud.dev v0.36.0/go.mod h1:bLxah6JQVKBaIxzsr5BQLYB4IYdWHkMZdzCXlo6F0gg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20231226003508-02704c960a9b h1:kLiC65FbiHWFAOu+lxwNPujcsl8VYyTYYEZnsOO1WK4= -golang.org/x/exp v0.0.0-20231226003508-02704c960a9b/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= +golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM= +golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -452,19 +450,19 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= -golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= +golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/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-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.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -479,7 +477,6 @@ golang.org/x/sys v0.0.0-20210601080250-7ecdf8ef093b/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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= @@ -490,14 +487,16 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.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-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= @@ -525,8 +524,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= -google.golang.org/api v0.154.0 h1:X7QkVKZBskztmpPKWQXgjJRPA2dJYrL6r+sYPRLj050= -google.golang.org/api v0.154.0/go.mod h1:qhSMkM85hgqiokIYsrRyKxrjfBeIhgl4Z2JmeRkYylc= +google.golang.org/api v0.155.0 h1:vBmGhCYs0djJttDNynWo44zosHlPvHmA0XiN2zP2DtA= +google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= @@ -534,12 +533,12 @@ google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 h1:YJ5pD9rF8o9Qtta0Cmy9rdBwkSjrTCT6XTiUQVOtIos= -google.golang.org/genproto v0.0.0-20231212172506-995d672761c0/go.mod h1:l/k7rMz0vFTBPy+tFSGvXEd3z+BcoG1k7EHbqm+YBsY= -google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0 h1:s1w3X6gQxwrLEpxnLd/qXTVLgQE2yXwaOaoa6IlY/+o= -google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0/go.mod h1:CAny0tYF+0/9rmDB9fahA9YLzX3+AEVl1qXbv5hhj6c= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= +google.golang.org/genproto v0.0.0-20240108191215-35c7eff3a6b1 h1:/IWabOtPziuXTEtI1KYCpM6Ss7vaAkeMxk+uXV/xvZs= +google.golang.org/genproto v0.0.0-20240108191215-35c7eff3a6b1/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k= +google.golang.org/genproto/googleapis/api v0.0.0-20240108191215-35c7eff3a6b1 h1:OPXtXn7fNMaXwO3JvOmF1QyTc00jsSFFz1vXXBOdCDo= +google.golang.org/genproto/googleapis/api v0.0.0-20240108191215-35c7eff3a6b1/go.mod h1:B5xPO//w8qmBDjGReYLpR6UJPnkldGkCSMoH/2vxJeg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1 h1:gphdwh0npgs8elJ4T6J+DQJHPVF7RsuJHCfwztUb4J4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1/go.mod h1:daQN87bsDqDoe316QbbvX60nMoJQa4r6Ds0ZuoAe5yA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= diff --git a/internal/dataprovider/dataprovider.go b/internal/dataprovider/dataprovider.go index c7a48d7c..3bb7c780 100644 --- a/internal/dataprovider/dataprovider.go +++ b/internal/dataprovider/dataprovider.go @@ -307,6 +307,32 @@ type PasswordValidation struct { Users PasswordValidationRules `json:"users" mapstructure:"users"` } +// FilesystemProvider defines the supported storage filesystems +type FilesystemProvider struct { + sdk.FilesystemProvider +} + +// I18nString returns the translation key +func (p FilesystemProvider) I18nString() string { + switch p.FilesystemProvider { + case sdk.LocalFilesystemProvider: + return util.I18nStorageLocal + case sdk.S3FilesystemProvider: + return util.I18nStorageS3 + case sdk.GCSFilesystemProvider: + return util.I18nStorageGCS + case sdk.AzureBlobFilesystemProvider: + return util.I18nStorageAzureBlob + case sdk.CryptedFilesystemProvider: + return util.I18nStorageLocalEncrypted + case sdk.SFTPFilesystemProvider: + return util.I18nStorageSFTP + case sdk.HTTPFilesystemProvider: + return util.I18nStorageHTTP + } + return "" +} + type wrappedFolder struct { Folder vfs.BaseVirtualFolder } diff --git a/internal/httpd/server.go b/internal/httpd/server.go index be229de4..20dadf62 100644 --- a/internal/httpd/server.go +++ b/internal/httpd/server.go @@ -1682,6 +1682,8 @@ func (s *httpdServer) setupWebAdminRoutes() { router.With(s.checkPerm(dataprovider.PermAdminViewUsers), s.refreshCookie). Get(webUsersPath, s.handleGetWebUsers) + router.With(s.checkPerm(dataprovider.PermAdminViewUsers), s.refreshCookie). + Get(webUsersPath+"/json", getAllUsers) router.With(s.checkPerm(dataprovider.PermAdminAddUsers), s.refreshCookie). Get(webUserPath, s.handleWebAddUserGet) router.With(s.checkPerm(dataprovider.PermAdminChangeUsers), s.refreshCookie). diff --git a/internal/httpd/webadmin.go b/internal/httpd/webadmin.go index 742f6130..d8c899dd 100644 --- a/internal/httpd/webadmin.go +++ b/internal/httpd/webadmin.go @@ -170,11 +170,6 @@ type basePage struct { Branding UIBranding } -type usersPage struct { - basePage - Users []dataprovider.User -} - type adminsPage struct { basePage Admins []dataprovider.Admin @@ -228,7 +223,7 @@ type userPage struct { basePage User *dataprovider.User RootPerms []string - Error string + Error *util.I18nError ValidPerms []string ValidLoginMethods []string ValidProtocols []string @@ -405,9 +400,8 @@ func loadAdminTemplates(templatesPath string) { filepath.Join(templatesPath, templateAdminDir, templateUsers), } userPaths := []string{ - filepath.Join(templatesPath, templateCommonDir, templateCommonCSS), + filepath.Join(templatesPath, templateCommonDir, templateCommonBase), filepath.Join(templatesPath, templateAdminDir, templateBase), - filepath.Join(templatesPath, templateAdminDir, templateSharedComponents), filepath.Join(templatesPath, templateAdminDir, templateFsConfig), filepath.Join(templatesPath, templateAdminDir, templateUser), } @@ -566,10 +560,15 @@ func loadAdminTemplates(templatesPath string) { } fsBaseTpl := template.New("fsBaseTemplate").Funcs(template.FuncMap{ - "ListFSProviders": func() []sdk.FilesystemProvider { - return []sdk.FilesystemProvider{sdk.LocalFilesystemProvider, sdk.CryptedFilesystemProvider, - sdk.S3FilesystemProvider, sdk.GCSFilesystemProvider, sdk.AzureBlobFilesystemProvider, - sdk.SFTPFilesystemProvider, sdk.HTTPFilesystemProvider, + "ListFSProviders": func() []dataprovider.FilesystemProvider { + return []dataprovider.FilesystemProvider{ + {FilesystemProvider: sdk.LocalFilesystemProvider}, + {FilesystemProvider: sdk.CryptedFilesystemProvider}, + {FilesystemProvider: sdk.S3FilesystemProvider}, + {FilesystemProvider: sdk.GCSFilesystemProvider}, + {FilesystemProvider: sdk.AzureBlobFilesystemProvider}, + {FilesystemProvider: sdk.SFTPFilesystemProvider}, + {FilesystemProvider: sdk.HTTPFilesystemProvider}, } }, "HumanizeBytes": util.ByteCountSI, @@ -948,20 +947,20 @@ func (s *httpdServer) getUserPageTitleAndURL(mode userPageMode, username string) var title, currentURL string switch mode { case userPageModeAdd: - title = "Add a new user" + title = util.I18nAddUserTitle currentURL = webUserPath case userPageModeUpdate: - title = "Update user" + title = util.I18nUpdateUserTitle currentURL = fmt.Sprintf("%v/%v", webUserPath, url.PathEscape(username)) case userPageModeTemplate: - title = "User template" + title = util.I18nTemplateUserTitle currentURL = webTemplateUser } return title, currentURL } func (s *httpdServer) renderUserPage(w http.ResponseWriter, r *http.Request, user *dataprovider.User, - mode userPageMode, errorString string, admin *dataprovider.Admin, + mode userPageMode, err error, admin *dataprovider.Admin, ) { user.SetEmptySecretsIfNil() title, currentURL := s.getUserPageTitleAndURL(mode, user.Username) @@ -985,24 +984,28 @@ func (s *httpdServer) renderUserPage(w http.ResponseWriter, r *http.Request, use } var roles []dataprovider.Role if basePage.LoggedUser.Role == "" { - var err error - roles, err = s.getWebRoles(w, r, 10, true) - if err != nil { + var errRoles error + roles, errRoles = s.getWebRoles(w, r, 10, true) + if errRoles != nil { return } } - folders, err := s.getWebVirtualFolders(w, r, defaultQueryLimit, true) - if err != nil { + folders, errFolders := s.getWebVirtualFolders(w, r, defaultQueryLimit, true) + if errFolders != nil { return } - groups, err := s.getWebGroups(w, r, defaultQueryLimit, true) - if err != nil { + groups, errGroups := s.getWebGroups(w, r, defaultQueryLimit, true) + if errGroups != nil { return } + var errI18n *util.I18nError + if err != nil { + errI18n = util.NewI18nError(err, util.I18nError500Message) + } data := userPage{ basePage: basePage, Mode: mode, - Error: errorString, + Error: errI18n, User: user, ValidPerms: dataprovider.ValidPerms, ValidLoginMethods: dataprovider.ValidLoginMethods, @@ -1469,7 +1472,7 @@ func getFiltersFromUserPostFields(r *http.Request) (sdk.BaseUserFilters, error) } maxFileSize, err := util.ParseBytes(r.Form.Get("max_upload_file_size")) if err != nil { - return filters, fmt.Errorf("invalid max upload file size: %w", err) + return filters, util.NewI18nError(fmt.Errorf("invalid max upload file size: %w", err), util.I18nErrorInvalidMaxFilesize) } defaultSharesExpiration, err := strconv.Atoi(r.Form.Get("default_shares_expiration")) if err != nil { @@ -1960,7 +1963,7 @@ func getTransferLimits(r *http.Request) (int64, int64, int64, error) { func getQuotaLimits(r *http.Request) (int64, int, error) { quotaSize, err := util.ParseBytes(r.Form.Get("quota_size")) if err != nil { - return 0, 0, fmt.Errorf("invalid quota size: %w", err) + return 0, 0, util.NewI18nError(fmt.Errorf("invalid quota size: %w", err), util.I18nErrorInvalidQuotaSize) } quotaFiles, err := strconv.Atoi(r.Form.Get("quota_files")) if err != nil { @@ -1973,7 +1976,7 @@ func getUserFromPostFields(r *http.Request) (dataprovider.User, error) { user := dataprovider.User{} err := r.ParseMultipartForm(maxRequestSize) if err != nil { - return user, err + return user, util.NewI18nError(err, util.I18nErrorInvalidForm) } defer r.MultipartForm.RemoveAll() //nolint:errcheck uid, err := strconv.Atoi(r.Form.Get("uid")) @@ -2916,6 +2919,28 @@ func (s *httpdServer) handleWebDefenderPage(w http.ResponseWriter, r *http.Reque renderAdminTemplate(w, templateDefender, data) } +func getAllUsers(w http.ResponseWriter, r *http.Request) { + r.Body = http.MaxBytesReader(w, r.Body, maxRequestSize) + claims, err := getTokenClaims(r) + if err != nil || claims.Username == "" { + sendAPIResponse(w, r, nil, util.I18nErrorDirList403, http.StatusForbidden) + return + } + users := make([]dataprovider.User, 0, defaultQueryLimit) + for { + u, err := dataprovider.GetUsers(defaultQueryLimit, len(users), dataprovider.OrderASC, claims.Role) + if err != nil { + sendAPIResponse(w, r, err, getI18NErrorString(err, util.I18nError500Message), http.StatusInternalServerError) + return + } + users = append(users, u...) + if len(u) < defaultQueryLimit { + break + } + } + render.JSON(w, r, users) +} + func (s *httpdServer) handleGetWebUsers(w http.ResponseWriter, r *http.Request) { r.Body = http.MaxBytesReader(w, r.Body, maxRequestSize) claims, err := getTokenClaims(r) @@ -2923,32 +2948,7 @@ func (s *httpdServer) handleGetWebUsers(w http.ResponseWriter, r *http.Request) s.renderBadRequestPage(w, r, errors.New("invalid token claims")) return } - var limit int - if _, ok := r.URL.Query()["qlimit"]; ok { - var err error - limit, err = strconv.Atoi(r.URL.Query().Get("qlimit")) - if err != nil { - limit = defaultQueryLimit - } - } else { - limit = defaultQueryLimit - } - users := make([]dataprovider.User, 0, limit) - for { - u, err := dataprovider.GetUsers(limit, len(users), dataprovider.OrderASC, claims.Role) - if err != nil { - s.renderInternalServerErrorPage(w, r, err) - return - } - users = append(users, u...) - if len(u) < limit { - break - } - } - data := usersPage{ - basePage: s.getBasePageData(pageUsersTitle, webUsersPath, r), - Users: users, - } + data := s.getBasePageData(pageUsersTitle, webUsersPath, r) renderAdminTemplate(w, templateUsers, data) } @@ -3053,7 +3053,7 @@ func (s *httpdServer) handleWebTemplateUserGet(w http.ResponseWriter, r *http.Re if user.ExpirationDate == 0 && admin.Filters.Preferences.DefaultUsersExpiration > 0 { user.ExpirationDate = util.GetTimeAsMsSinceEpoch(time.Now().Add(24 * time.Hour * time.Duration(admin.Filters.Preferences.DefaultUsersExpiration))) } - s.renderUserPage(w, r, &user, userPageModeTemplate, "", &admin) + s.renderUserPage(w, r, &user, userPageModeTemplate, nil, &admin) } else if errors.Is(err, util.ErrNotFound) { s.renderNotFoundPage(w, r, err) } else { @@ -3069,7 +3069,7 @@ func (s *httpdServer) handleWebTemplateUserGet(w http.ResponseWriter, r *http.Re if admin.Filters.Preferences.DefaultUsersExpiration > 0 { user.ExpirationDate = util.GetTimeAsMsSinceEpoch(time.Now().Add(24 * time.Hour * time.Duration(admin.Filters.Preferences.DefaultUsersExpiration))) } - s.renderUserPage(w, r, &user, userPageModeTemplate, "", &admin) + s.renderUserPage(w, r, &user, userPageModeTemplate, nil, &admin) } } @@ -3148,7 +3148,7 @@ func (s *httpdServer) handleWebAddUserGet(w http.ResponseWriter, r *http.Request if admin.Filters.Preferences.DefaultUsersExpiration > 0 { user.ExpirationDate = util.GetTimeAsMsSinceEpoch(time.Now().Add(24 * time.Hour * time.Duration(admin.Filters.Preferences.DefaultUsersExpiration))) } - s.renderUserPage(w, r, &user, userPageModeAdd, "", &admin) + s.renderUserPage(w, r, &user, userPageModeAdd, nil, &admin) } func (s *httpdServer) handleWebUpdateUserGet(w http.ResponseWriter, r *http.Request) { @@ -3161,7 +3161,7 @@ func (s *httpdServer) handleWebUpdateUserGet(w http.ResponseWriter, r *http.Requ username := getURLParam(r, "username") user, err := dataprovider.UserExists(username, claims.Role) if err == nil { - s.renderUserPage(w, r, &user, userPageModeUpdate, "", nil) + s.renderUserPage(w, r, &user, userPageModeUpdate, nil, nil) } else if errors.Is(err, util.ErrNotFound) { s.renderNotFoundPage(w, r, err) } else { @@ -3178,7 +3178,7 @@ func (s *httpdServer) handleWebAddUserPost(w http.ResponseWriter, r *http.Reques } user, err := getUserFromPostFields(r) if err != nil { - s.renderUserPage(w, r, &user, userPageModeAdd, err.Error(), nil) + s.renderUserPage(w, r, &user, userPageModeAdd, err, nil) return } ipAddr := util.GetIPFromRemoteAddress(r.RemoteAddr) @@ -3200,7 +3200,7 @@ func (s *httpdServer) handleWebAddUserPost(w http.ResponseWriter, r *http.Reques } err = dataprovider.AddUser(&user, claims.Username, ipAddr, claims.Role) if err != nil { - s.renderUserPage(w, r, &user, userPageModeAdd, err.Error(), nil) + s.renderUserPage(w, r, &user, userPageModeAdd, err, nil) return } http.Redirect(w, r, webUsersPath, http.StatusSeeOther) @@ -3224,7 +3224,7 @@ func (s *httpdServer) handleWebUpdateUserPost(w http.ResponseWriter, r *http.Req } updatedUser, err := getUserFromPostFields(r) if err != nil { - s.renderUserPage(w, r, &user, userPageModeUpdate, err.Error(), nil) + s.renderUserPage(w, r, &user, userPageModeUpdate, err, nil) return } ipAddr := util.GetIPFromRemoteAddress(r.RemoteAddr) @@ -3257,7 +3257,7 @@ func (s *httpdServer) handleWebUpdateUserPost(w http.ResponseWriter, r *http.Req err = dataprovider.UpdateUser(&updatedUser, claims.Username, ipAddr, claims.Role) if err != nil { - s.renderUserPage(w, r, &updatedUser, userPageModeUpdate, err.Error(), nil) + s.renderUserPage(w, r, &updatedUser, userPageModeUpdate, err, nil) return } if r.Form.Get("disconnect") != "" { diff --git a/internal/util/i18n.go b/internal/util/i18n.go index e8800221..067665a9 100644 --- a/internal/util/i18n.go +++ b/internal/util/i18n.go @@ -48,6 +48,9 @@ const ( I18nError500Title = "title.error500" I18nErrorPDFTitle = "title.errorPDF" I18nErrorEditorTitle = "title.error_editor" + I18nAddUserTitle = "title.add_user" + I18nUpdateUserTitle = "title.update_user" + I18nTemplateUserTitle = "title.template_user" I18nErrorSetupInstallCode = "setup.install_code_mismatch" I18nInvalidAuth = "general.invalid_auth_request" I18nError429Message = "general.error429" @@ -149,6 +152,15 @@ const ( I18nOIDCTokenInvalidRoleAdmin = "oidc.role_admin_err" I18nOIDCTokenInvalidRoleUser = "oidc.role_user_err" I18nOIDCErrGetUser = "oidc.get_user_err" + I18nStorageLocal = "storage.local" + I18nStorageLocalEncrypted = "storage.encrypted" + I18nStorageS3 = "storage.s3" + I18nStorageGCS = "storage.gcs" + I18nStorageAzureBlob = "storage.azblob" + I18nStorageSFTP = "storage.sftp" + I18nStorageHTTP = "storage.http" + I18nErrorInvalidQuotaSize = "user.invalid_quota_size" + I18nErrorInvalidMaxFilesize = "filters.max_upload_size_invalid" ) // NewI18nError returns a I18nError wrappring the provided error diff --git a/pkgs/build.sh b/pkgs/build.sh index a8bb2b5f..d53c5291 100755 --- a/pkgs/build.sh +++ b/pkgs/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -NFPM_VERSION=2.35.1 +NFPM_VERSION=2.35.2 NFPM_ARCH=${NFPM_ARCH:-amd64} if [ -z ${SFTPGO_VERSION} ] then diff --git a/static/assets/plugins/custom/datatables/datatables.bundle.css b/static/assets/plugins/custom/datatables/datatables.bundle.css index 304bf49c..2b968684 100644 --- a/static/assets/plugins/custom/datatables/datatables.bundle.css +++ b/static/assets/plugins/custom/datatables/datatables.bundle.css @@ -2,4 +2,4 @@ * * ©2020 SpryMedia Ltd, all rights reserved. * License: MIT datatables.net/license/mit - */table.dataTable{clear:both;margin-top:6px!important;margin-bottom:6px!important;max-width:none!important;border-collapse:separate!important;border-spacing:0}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap td,table.dataTable.nowrap th{white-space:nowrap}table.dataTable.table-striped>tbody>tr:nth-of-type(2n+1)>*{box-shadow:none}table.dataTable>tbody>tr{background-color:transparent}table.dataTable>tbody>tr.selected>*{box-shadow:inset 0 0 0 9999px #0d6efd;box-shadow:inset 0 0 0 9999px rgb(var(--dt-row-selected));color:#fff;color:rgb(var(--dt-row-selected-text))}table.dataTable>tbody>tr.selected a{color:#090a0b;color:rgb(var(--dt-row-selected-link))}table.dataTable.table-striped>tbody>tr:nth-of-type(2n+1)>*{box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-stripe),.05)}table.dataTable.table-striped>tbody>tr:nth-of-type(2n+1).selected>*{box-shadow:inset 0 0 0 9999px rgba(13,110,253,.95);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected),.95)}table.dataTable.table-hover>tbody>tr:hover>*{box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover),.075)}table.dataTable.table-hover>tbody>tr.selected:hover>*{box-shadow:inset 0 0 0 9999px rgba(13,110,253,.975);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected),.975)}div.dataTables_wrapper div.dataTables_length label{font-weight:400;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:auto;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:400;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:.85em}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dt-row{position:relative}div.dataTables_scrollHead table.dataTable{margin-bottom:0!important}div.dataTables_scrollBody>table{border-top:none;margin-top:0!important;margin-bottom:0!important}div.dataTables_scrollBody>table>thead .sorting:after,div.dataTables_scrollBody>table>thead .sorting:before,div.dataTables_scrollBody>table>thead .sorting_asc:after,div.dataTables_scrollBody>table>thead .sorting_asc:before,div.dataTables_scrollBody>table>thead .sorting_desc:after,div.dataTables_scrollBody>table>thead .sorting_desc:before{display:none}div.dataTables_scrollBody>table>tbody tr:first-child td,div.dataTables_scrollBody>table>tbody tr:first-child th{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0!important;border-top:none}@media screen and (max-width:767px){div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_paginate{text-align:center}div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:center!important}}table.dataTable.table-sm>thead>tr>th:not(.sorting_disabled){padding-right:20px}table.dataTable.table-sm>thead>tr>th:not(.sorting_disabled):after,table.dataTable.table-sm>thead>tr>th:not(.sorting_disabled):before{right:5px}table.table-bordered.dataTable{border-right-width:0}table.table-bordered.dataTable thead tr:first-child td,table.table-bordered.dataTable thead tr:first-child th{border-top-width:1px}table.table-bordered.dataTable td,table.table-bordered.dataTable th{border-left-width:0}table.table-bordered.dataTable td:first-child,table.table-bordered.dataTable th:first-child{border-left-width:1px}table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable th:last-child{border-right-width:1px}table.table-bordered.dataTable td,table.table-bordered.dataTable th{border-bottom-width:1px}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^=col-]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^=col-]:last-child{padding-right:0}:root[data-bs-theme=dark]{--dt-row-hover:255,255,255;--dt-row-stripe:255,255,255;--dt-column-ordering:255,255,255}@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dataTables_wrapper{position:relative}div.dt-buttons{position:initial}div.dt-buttons .dt-button{overflow:hidden;text-overflow:ellipsis}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:#fff;border-radius:.75em;box-shadow:3px 4px 10px 1px rgba(0,0,0,.8);text-align:center;z-index:2003;overflow:hidden}div.dt-button-info h2{padding:2rem 2rem 1rem 2rem;margin:0;font-weight:400}div.dt-button-info>div{padding:1em 2em 2em 2em}div.dtb-popover-close{position:absolute;top:6px;right:6px;width:22px;height:22px;text-align:center;border-radius:3px;cursor:pointer;z-index:2003}button.dtb-hide-drop{display:none!important}div.dt-button-collection-title{text-align:center;padding:.3em 0 .5em;margin-left:.5em;margin-right:.5em;font-size:.9em}div.dt-button-collection-title:empty{display:none}span.dt-button-spacer{display:inline-block;margin:.5em;white-space:nowrap}span.dt-button-spacer.bar{border-left:1px solid rgba(0,0,0,.3);vertical-align:middle;padding-left:.5em}span.dt-button-spacer.bar:empty{height:1em;width:1px;padding-left:0}div.dt-button-collection .dt-button-active{padding-right:3em}div.dt-button-collection .dt-button-active:after{position:absolute;top:50%;margin-top:-10px;right:1em;display:inline-block;content:"✓";color:inherit}div.dt-button-collection .dt-button-active.dt-button-split{padding-right:0}div.dt-button-collection .dt-button-active.dt-button-split:after{display:none}div.dt-button-collection .dt-button-active.dt-button-split>:first-child{padding-right:3em}div.dt-button-collection .dt-button-active.dt-button-split>:first-child:after{position:absolute;top:50%;margin-top:-10px;right:1em;display:inline-block;content:"✓";color:inherit}div.dt-button-collection .dt-button-active-a a{padding-right:3em}div.dt-button-collection .dt-button-active-a a:after{position:absolute;right:1em;display:inline-block;content:"✓";color:inherit}div.dt-button-collection span.dt-button-spacer{width:100%;font-size:.9em;text-align:center;margin:.5em 0}div.dt-button-collection span.dt-button-spacer:empty{height:0;width:100%}div.dt-button-collection span.dt-button-spacer.bar{border-left:none;border-bottom:1px solid rgba(0,0,0,.1);padding-left:0}html.dark div.dt-button-info{background-color:var(--dt-html-background);border:1px solid rgba(255,255,255,.15)}div.dt-buttons div.btn-group{position:initial}div.dt-buttons div.dropdown-menu{margin-top:4px}div.dt-buttons div.dropdown-menu .dt-button{position:relative}div.dt-buttons div.dropdown-menu div.dt-button-split{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:stretch}div.dt-buttons div.dropdown-menu div.dt-button-split a:first-child{min-width:auto;flex:1 0 50px;padding-right:0}div.dt-buttons div.dropdown-menu div.dt-button-split button:last-child{min-width:33px;flex:0;background:0 0;border:none;line-height:1rem;color:var(--bs-dropdown-link-color);padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x)}div.dt-buttons div.dropdown-menu div.dt-button-split button:last-child:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}div.dt-buttons div.dropdown-menu div.dt-button-split button:last-child:after{position:relative;left:-3px}div.dt-buttons div.dropdown-menu.fixed{position:fixed;display:block;top:50%;left:50%;margin-left:-75px;border-radius:5px;background-color:#fff;padding:.5em}div.dt-buttons div.dropdown-menu.fixed.two-column{margin-left:-200px}div.dt-buttons div.dropdown-menu.fixed.three-column{margin-left:-225px}div.dt-buttons div.dropdown-menu.fixed.four-column{margin-left:-300px}div.dt-buttons div.dropdown-menu.fixed.columns{margin-left:-409px}@media screen and (max-width:1024px){div.dt-buttons div.dropdown-menu.fixed.columns{margin-left:-308px}}@media screen and (max-width:640px){div.dt-buttons div.dropdown-menu.fixed.columns{margin-left:-203px}}@media screen and (max-width:460px){div.dt-buttons div.dropdown-menu.fixed.columns{margin-left:-100px}}div.dt-buttons div.dropdown-menu.fixed>:last-child{max-height:100vh;overflow:auto}div.dt-buttons div.dropdown-menu.four-column>:last-child,div.dt-buttons div.dropdown-menu.three-column>:last-child,div.dt-buttons div.dropdown-menu.two-column>:last-child{display:block!important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-buttons div.dropdown-menu.four-column>:last-child>*,div.dt-buttons div.dropdown-menu.three-column>:last-child>*,div.dt-buttons div.dropdown-menu.two-column>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-buttons div.dropdown-menu.two-column{width:400px}div.dt-buttons div.dropdown-menu.two-column>:last-child{padding-bottom:1px;column-count:2}div.dt-buttons div.dropdown-menu.three-column{width:450px}div.dt-buttons div.dropdown-menu.three-column>:last-child{padding-bottom:1px;column-count:3}div.dt-buttons div.dropdown-menu.four-column{width:600px}div.dt-buttons div.dropdown-menu.four-column>:last-child{padding-bottom:1px;column-count:4}div.dt-buttons div.dropdown-menu .dt-button{border-radius:0}div.dt-buttons div.dropdown-menu.columns{width:auto}div.dt-buttons div.dropdown-menu.columns>:last-child{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:6px;width:818px;padding-bottom:1px}div.dt-buttons div.dropdown-menu.columns>:last-child .dt-button{min-width:200px;flex:0 1;margin:0}div.dt-buttons div.dropdown-menu.columns.dtb-b1>:last-child,div.dt-buttons div.dropdown-menu.columns.dtb-b2>:last-child,div.dt-buttons div.dropdown-menu.columns.dtb-b3>:last-child{justify-content:space-between}div.dt-buttons div.dropdown-menu.columns.dtb-b3 .dt-button{flex:1 1 32%}div.dt-buttons div.dropdown-menu.columns.dtb-b2 .dt-button{flex:1 1 48%}div.dt-buttons div.dropdown-menu.columns.dtb-b1 .dt-button{flex:1 1 100%}@media screen and (max-width:1024px){div.dt-buttons div.dropdown-menu.columns>:last-child{width:612px}}@media screen and (max-width:640px){div.dt-buttons div.dropdown-menu.columns>:last-child{width:406px}div.dt-buttons div.dropdown-menu.columns.dtb-b3 .dt-button{flex:0 1 32%}}@media screen and (max-width:460px){div.dt-buttons div.dropdown-menu.columns>:last-child{width:200px}}div.dt-buttons span.dt-button-spacer.empty{margin:1px}div.dt-buttons span.dt-button-spacer.bar:empty{height:inherit}div.dt-buttons .btn.processing{color:rgba(0,0,0,.2)}div.dt-buttons .btn.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:" ";border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1.5s infinite linear;-o-animation:dtb-spinner 1.5s infinite linear;-ms-animation:dtb-spinner 1.5s infinite linear;-webkit-animation:dtb-spinner 1.5s infinite linear;-moz-animation:dtb-spinner 1.5s infinite linear}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:999}@media screen and (max-width:767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:.5em}div.dt-buttons a.btn{float:none}}:root[data-bs-theme=dark] div.dropdown-menu.dt-button-collection.fixed{background-color:#212529;border:1px solid rgba(255,255,255,.15);border-radius:8px}table.DTCR_clonedTable.dataTable{position:absolute!important;background-color:rgba(255,255,255,.7);z-index:202;border-radius:4px}div.DTCR_pointer{width:1px;background-color:#0d6efd;z-index:201}html.dark table.DTCR_clonedTable.dataTable{background-color:rgba(33,33,33,.9)}html.dark div.DTCR_pointer{background-color:#0d6efd}table.dataTable tfoot tr>.dtfc-fixed-left,table.dataTable tfoot tr>.dtfc-fixed-right,table.dataTable thead tr>.dtfc-fixed-left,table.dataTable thead tr>.dtfc-fixed-right{top:0;bottom:0;z-index:3;background-color:#fff}table.dataTable tbody tr>.dtfc-fixed-left,table.dataTable tbody tr>.dtfc-fixed-right{z-index:1;background-color:#fff}div.dtfc-left-top-blocker,div.dtfc-right-top-blocker{background-color:#fff}html.dark table.dataTable tfoot tr>.dtfc-fixed-left,html.dark table.dataTable tfoot tr>.dtfc-fixed-right,html.dark table.dataTable thead tr>.dtfc-fixed-left,html.dark table.dataTable thead tr>.dtfc-fixed-right{background-color:var(--dt-html-background)}html.dark table.dataTable tbody tr>.dtfc-fixed-left,html.dark table.dataTable tbody tr>.dtfc-fixed-right{background-color:var(--dt-html-background)}html.dark div.dtfc-left-top-blocker,html.dark div.dtfc-right-top-blocker{background-color:var(--dt-html-background)}div.dtfc-left-top-blocker,div.dtfc-right-top-blocker{margin-top:6px;border-bottom:0 solid #ddd!important}table.dataTable.table-bordered.dtfc-has-left{border-left:none}div.dataTables_scroll.dtfc-has-left table.table-bordered{border-left:none}div.dataTables_scrollBody{border-left:1px solid #ddd!important}div.dataTables_scrollFootInner table.table-bordered tr th:first-child,div.dataTables_scrollHeadInner table.table-bordered tr th:first-child{border-left:1px solid #ddd!important}html[data-bs-theme=dark] table.dataTable tfoot tr>.dtfc-fixed-left,html[data-bs-theme=dark] table.dataTable tfoot tr>.dtfc-fixed-right,html[data-bs-theme=dark] table.dataTable thead tr>.dtfc-fixed-left,html[data-bs-theme=dark] table.dataTable thead tr>.dtfc-fixed-right{background-color:var(--bs-body-bg)}html[data-bs-theme=dark] table.dataTable tbody tr>.dtfc-fixed-left,html[data-bs-theme=dark] table.dataTable tbody tr>.dtfc-fixed-right{background-color:var(--bs-body-bg)}html[data-bs-theme=dark] div.dtfc-left-top-blocker,html[data-bs-theme=dark] div.dtfc-right-top-blocker{background-color:var(--bs-body-bg)}html[data-bs-theme=dark] div.dataTables_scrollBody{border-left-color:var(--bs-border-color)!important}html[data-bs-theme=dark] div.dataTables_scrollFootInner table.table-bordered tr th:first-child,html[data-bs-theme=dark] div.dataTables_scrollHeadInner table.table-bordered tr th:first-child{border-left-color:var(--bs-border-color)!important}table.dataTable.fixedHeader-floating,table.dataTable.fixedHeader-locked{background-color:#fff;margin-top:0!important;margin-bottom:0!important}table.dataTable.fixedHeader-locked{position:absolute!important}@media print{table.fixedHeader-floating{display:none}}html[data-bs-theme=dark] table.dataTable.fixedHeader-floating,html[data-bs-theme=dark] table.dataTable.fixedHeader-locked{background-color:var(--bs-body-bg)}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child{cursor:default!important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before{display:none!important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control{cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before{margin-right:.5em;display:inline-block;color:rgba(0,0,0,.5);content:"►"}table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control.arrow-right::before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control.arrow-right::before{content:"◄"}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before{content:"▼"}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control{padding-left:.333em}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>td.dtr-control,table.dataTable.dtr-column>tbody>tr>th.control,table.dataTable.dtr-column>tbody>tr>th.dtr-control{cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>td.dtr-control:before,table.dataTable.dtr-column>tbody>tr>th.control:before,table.dataTable.dtr-column>tbody>tr>th.dtr-control:before{display:inline-block;color:rgba(0,0,0,.5);content:"►"}table.dataTable.dtr-column>tbody>tr>td.control.arrow-right::before,table.dataTable.dtr-column>tbody>tr>td.dtr-control.arrow-right::before,table.dataTable.dtr-column>tbody>tr>th.control.arrow-right::before,table.dataTable.dtr-column>tbody>tr>th.dtr-control.arrow-right::before{content:"◄"}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent td.dtr-control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before,table.dataTable.dtr-column>tbody>tr.parent th.dtr-control:before{content:"▼"}table.dataTable>tbody>tr.child{padding:.5em 1em}table.dataTable>tbody>tr.child:hover{background:0 0!important}table.dataTable>tbody>tr.child ul.dtr-details{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul.dtr-details>li{border-bottom:1px solid #efefef;padding:.5em 0}table.dataTable>tbody>tr.child ul.dtr-details>li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul.dtr-details>li:last-child{padding-bottom:0;border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:700}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:fit-content;max-height:75%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid #000;border-radius:.5em;box-shadow:0 12px 30px rgba(0,0,0,.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:2.5em}div.dtr-modal div.dtr-modal-content h2{margin-top:0}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,.6)}@media screen and (max-width:767px){div.dtr-modal div.dtr-modal-display{width:95%}}html.dark table.dataTable>tbody>tr>td.dtr-control:before{color:rgba(255,255,255,.5)!important}html.dark table.dataTable>tbody>tr.child ul.dtr-details>li{border-bottom-color:#404346}html.dark div.dtr-modal div.dtr-modal-display{background-color:#212529;border:1px solid rgba(255,255,255,.15)}div.dtr-bs-modal table.table tr:first-child td{border-top:none}table.dataTable.table-bordered td.dtr-control.dtr-hidden+*,table.dataTable.table-bordered th.dtr-control.dtr-hidden+*{border-left-width:1px}div.dt-rowReorder-float-parent{table-layout:fixed;outline:2px solid #0d6efd;z-index:2001;position:absolute!important;overflow:hidden;border-radius:3px}div.dt-rowReorder-float-parent table.dt-rowReorder-float{opacity:.9;background-color:#fff;margin:0!important}div.dt-rowReorder-float-parent.drop-not-allowed{cursor:not-allowed}tr.dt-rowReorder-moving{outline:2px solid #888;outline-offset:-2px}body.dt-rowReorder-noOverflow{overflow-x:hidden}table.dataTable td.reorder{text-align:center;cursor:move}html.dark div.dt-rowReorder-float-parent{outline-color:#6ea8fe}html.dark div.dt-rowReorder-float-parent table.dt-rowReorder-float{background-color:var(--dt-html-background)}html.dark tr.dt-rowReorder-moving{outline-color:#aaa}html[data-bs-theme=dark] div.dt-rowReorder-float-parent{outline-color:#0d6efd}div.dts{display:block!important}div.dts tbody td,div.dts tbody th{white-space:nowrap}div.dts div.dts_loading{z-index:1}div.dts div.dts_label{position:absolute;right:20px;background:rgba(0,0,0,.8);color:#fff;box-shadow:3px 3px 10px rgba(0,0,0,.5);text-align:right;border-radius:3px;padding:.4em;z-index:2;display:none}div.dts div.dataTables_scrollBody{background:repeating-linear-gradient(45deg,rgba(0,0,0,.025),rgba(0,0,0,.025) 10px,rgba(0,0,0,0) 10px,rgba(0,0,0,0) 20px)}div.dts div.dataTables_scrollBody table{background-color:#fff;z-index:2}div.dts div.dataTables_length,div.dts div.dataTables_paginate,div.dts div.dt-length,div.dts div.dt-paging{display:none}html.dark div.dts div.dts_label{background:rgba(255,255,255,.8);color:#000}html.dark div.dts div.dataTables_scrollBody{background:repeating-linear-gradient(45deg,rgba(255,255,255,.025),rgba(255,255,255,.025) 10px,rgba(255,255,255,0) 10px,rgba(255,255,255,0) 20px)}html.dark div.dts div.dataTables_scrollBody table{background-color:var(--dt-html-background);z-index:2}div.DTS div.dataTables_scrollBody table{background-color:#fff}html[data-bs-theme=dark] div.DTS div.dataTables_scrollBody table{background-color:var(--bs-body-bg)}table.dataTable>tbody>tr>.selected{background-color:rgba(13,110,253,.9);color:#fff}table.dataTable>tbody>tr>td.select-checkbox,table.dataTable>tbody>tr>th.select-checkbox{position:relative}table.dataTable>tbody>tr>td.select-checkbox:after,table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:after,table.dataTable>tbody>tr>th.select-checkbox:before{display:block;position:absolute;top:50%;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:before{content:" ";margin-top:-6px;margin-left:-6px;border:1px solid #000;border-radius:3px}table.dataTable>tbody>tr.selected>td.select-checkbox:before,table.dataTable>tbody>tr.selected>th.select-checkbox:before{border:1px solid #fff}table.dataTable>tbody>tr.selected>td.select-checkbox:after,table.dataTable>tbody>tr.selected>th.select-checkbox:after{content:"✓";font-size:20px;margin-top:-12px;margin-left:-6px;text-align:center}table.dataTable.compact>tbody>tr>td.select-checkbox:before,table.dataTable.compact>tbody>tr>th.select-checkbox:before{margin-top:-12px}table.dataTable.compact>tbody>tr.selected>td.select-checkbox:after,table.dataTable.compact>tbody>tr.selected>th.select-checkbox:after{margin-top:-16px}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:.5em}html.dark table.dataTable>tbody>tr>td.select-checkbox:before,html.dark table.dataTable>tbody>tr>th.select-checkbox:before,html[data-bs-theme=dark] table.dataTable>tbody>tr>td.select-checkbox:before,html[data-bs-theme=dark] table.dataTable>tbody>tr>th.select-checkbox:before{border:1px solid rgba(255,255,255,.6)}@media screen and (max-width:640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}table.dataTable.table-sm tbody td.select-checkbox::before{margin-top:-9px}div.dt-datetime{position:absolute;background-color:#fff;z-index:2050;border:1px solid #ccc;box-shadow:0 5px 15px -5px rgba(0,0,0,.5);padding:6px 20px;width:275px;border-radius:5px}div.dt-datetime.inline{position:relative;box-shadow:none}div.dt-datetime div.dt-datetime-title{text-align:center;padding:5px 0 3px}div.dt-datetime div.dt-datetime-buttons{text-align:center}div.dt-datetime div.dt-datetime-buttons a{display:inline-block;padding:0 .5em .5em .5em;margin:0;font-size:.9em}div.dt-datetime div.dt-datetime-buttons a:hover{text-decoration:underline}div.dt-datetime table{border-spacing:0;margin:12px 0;width:100%}div.dt-datetime table.dt-datetime-table-nospace{margin-top:-12px}div.dt-datetime table th{font-size:.8em;color:#777;font-weight:400;width:14.285714286%;padding:0 0 4px 0;text-align:center}div.dt-datetime table td{font-size:.9em;color:#444;padding:0}div.dt-datetime table td.selectable{text-align:center;background:#f5f5f5}div.dt-datetime table td.selectable.disabled{color:#aaa;background:#fff}div.dt-datetime table td.selectable.disabled button:hover{color:#aaa;background:#fff}div.dt-datetime table td.selectable.now{background-color:#ddd}div.dt-datetime table td.selectable.now button{font-weight:700}div.dt-datetime table td.selectable.selected button{background:#4e6ca3;color:#fff;border-radius:2px}div.dt-datetime table td.selectable button:hover{background:#ff8000;color:#fff;border-radius:2px}div.dt-datetime table td.dt-datetime-week{font-size:.7em}div.dt-datetime table button{width:100%;box-sizing:border-box;border:none;background:0 0;font-size:inherit;color:inherit;text-align:center;padding:4px 0;cursor:pointer;margin:0}div.dt-datetime table button span{display:inline-block;min-width:14px;text-align:right}div.dt-datetime table.weekNumber th{width:12.5%}div.dt-datetime div.dt-datetime-calendar table{margin-top:0}div.dt-datetime div.dt-datetime-label{position:relative;display:inline-block;height:30px;padding:5px 6px;border:1px solid transparent;box-sizing:border-box;cursor:pointer}div.dt-datetime div.dt-datetime-label:hover{border:1px solid #ddd;border-radius:2px;background-color:#f5f5f5}div.dt-datetime div.dt-datetime-label select{position:absolute;top:6px;left:0;cursor:pointer;opacity:0}div.dt-datetime.horizontal{width:550px}div.dt-datetime.horizontal div.dt-datetime-date,div.dt-datetime.horizontal div.dt-datetime-time{width:48%}div.dt-datetime.horizontal div.dt-datetime-time{margin-left:4%}div.dt-datetime div.dt-datetime-date{position:relative;float:left;width:100%}div.dt-datetime div.dt-datetime-time{position:relative;float:left;width:100%;text-align:center}div.dt-datetime div.dt-datetime-time>span{vertical-align:middle}div.dt-datetime div.dt-datetime-time th{text-align:left}div.dt-datetime div.dt-datetime-time div.dt-datetime-timeblock{display:inline-block;vertical-align:middle}div.dt-datetime div.dt-datetime-iconLeft,div.dt-datetime div.dt-datetime-iconRight{width:30px;height:30px;background-position:center;background-repeat:no-repeat;opacity:.3;overflow:hidden;box-sizing:border-box;border:1px solid transparent}div.dt-datetime div.dt-datetime-iconLeft:hover,div.dt-datetime div.dt-datetime-iconRight:hover{border:1px solid #ccc;border-radius:2px;background-color:#f0f0f0;opacity:.6}div.dt-datetime div.dt-datetime-iconLeft button,div.dt-datetime div.dt-datetime-iconRight button{border:none;background:0 0;text-indent:30px;height:100%;width:100%;cursor:pointer}div.dt-datetime div.dt-datetime-iconLeft{position:absolute;top:5px;left:5px}div.dt-datetime div.dt-datetime-iconLeft button{position:relative;z-index:1}div.dt-datetime div.dt-datetime-iconLeft:after{position:absolute;top:7px;left:10px;display:block;content:"";border-top:7px solid transparent;border-right:7px solid #000;border-bottom:7px solid transparent}div.dt-datetime div.dt-datetime-iconRight{position:absolute;top:5px;right:5px}div.dt-datetime div.dt-datetime-iconRight button{position:relative;z-index:1}div.dt-datetime div.dt-datetime-iconRight:after{position:absolute;top:7px;left:12px;display:block;content:"";border-top:7px solid transparent;border-left:7px solid #000;border-bottom:7px solid transparent}div.dt-datetime-error{clear:both;padding:0 1em;max-width:240px;font-size:11px;line-height:1.25em;text-align:center;color:#b11f1f}html.dark input.dt-datetime{color-scheme:dark}html.dark div.dt-datetime{border:1px solid #595b5e;background-color:#212529;box-shadow:3px 4px 10px 1px rgba(0,0,0,.8)}html.dark div.dt-datetime table th{color:#ccc}html.dark div.dt-datetime table td{color:#eee}html.dark div.dt-datetime table td.selectable{background:#373c41}html.dark div.dt-datetime table td.selectable.disabled{color:#aaa;background:#171b1f}html.dark div.dt-datetime table td.selectable.disabled button:hover{color:#aaa;background:#171b1f}html.dark div.dt-datetime table td.selectable.now{background:#4b5055}html.dark div.dt-datetime table td.selectable.selected button{background:#6ea8fe;color:#000}html.dark div.dt-datetime table td.selectable button:hover{background:#ff8000;color:#000}html.dark div.dt-datetime div.dt-datetime-label:hover{border:1px solid transparent;background-color:rgba(255,255,255,.1)}html.dark div.dt-datetime div.dt-datetime-iconDown:hover,html.dark div.dt-datetime div.dt-datetime-iconLeft:hover,html.dark div.dt-datetime div.dt-datetime-iconRight:hover,html.dark div.dt-datetime div.dt-datetime-iconUp:hover{border:1px solid transparent;background-color:rgba(255,255,255,.1)}html.dark div.dt-datetime div.dt-datetime-iconLeft:after{border-right-color:#fff}html.dark div.dt-datetime div.dt-datetime-iconRight:after{border-left-color:#fff}html.dark div.dt-datetime select{color-scheme:dark}html.dark div.dt-datetime-error{color:#b11f1f} \ No newline at end of file + */table.dataTable{clear:both;margin-top:6px!important;margin-bottom:6px!important;max-width:none!important;border-collapse:separate!important;border-spacing:0}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap td,table.dataTable.nowrap th{white-space:nowrap}table.dataTable.table-striped>tbody>tr:nth-of-type(2n+1)>*{box-shadow:none}table.dataTable>tbody>tr{background-color:transparent}table.dataTable>tbody>tr.selected>*{box-shadow:inset 0 0 0 9999px #0d6efd;box-shadow:inset 0 0 0 9999px rgb(var(--dt-row-selected));color:#fff;color:rgb(var(--dt-row-selected-text))}table.dataTable>tbody>tr.selected a{color:#090a0b;color:rgb(var(--dt-row-selected-link))}table.dataTable.table-striped>tbody>tr:nth-of-type(2n+1)>*{box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-stripe),.05)}table.dataTable.table-striped>tbody>tr:nth-of-type(2n+1).selected>*{box-shadow:inset 0 0 0 9999px rgba(13,110,253,.95);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected),.95)}table.dataTable.table-hover>tbody>tr:hover>*{box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover),.075)}table.dataTable.table-hover>tbody>tr.selected:hover>*{box-shadow:inset 0 0 0 9999px rgba(13,110,253,.975);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected),.975)}div.dataTables_wrapper div.dataTables_length label{font-weight:400;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:auto;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:400;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:.85em}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dt-row{position:relative}div.dataTables_scrollHead table.dataTable{margin-bottom:0!important}div.dataTables_scrollBody>table{border-top:none;margin-top:0!important;margin-bottom:0!important}div.dataTables_scrollBody>table>thead .sorting:after,div.dataTables_scrollBody>table>thead .sorting:before,div.dataTables_scrollBody>table>thead .sorting_asc:after,div.dataTables_scrollBody>table>thead .sorting_asc:before,div.dataTables_scrollBody>table>thead .sorting_desc:after,div.dataTables_scrollBody>table>thead .sorting_desc:before{display:none}div.dataTables_scrollBody>table>tbody tr:first-child td,div.dataTables_scrollBody>table>tbody tr:first-child th{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0!important;border-top:none}@media screen and (max-width:767px){div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_paginate{text-align:center}div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:center!important}}table.dataTable.table-sm>thead>tr>th:not(.sorting_disabled){padding-right:20px}table.dataTable.table-sm>thead>tr>th:not(.sorting_disabled):after,table.dataTable.table-sm>thead>tr>th:not(.sorting_disabled):before{right:5px}table.table-bordered.dataTable{border-right-width:0}table.table-bordered.dataTable thead tr:first-child td,table.table-bordered.dataTable thead tr:first-child th{border-top-width:1px}table.table-bordered.dataTable td,table.table-bordered.dataTable th{border-left-width:0}table.table-bordered.dataTable td:first-child,table.table-bordered.dataTable th:first-child{border-left-width:1px}table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable th:last-child{border-right-width:1px}table.table-bordered.dataTable td,table.table-bordered.dataTable th{border-bottom-width:1px}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^=col-]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^=col-]:last-child{padding-right:0}:root[data-bs-theme=dark]{--dt-row-hover:255,255,255;--dt-row-stripe:255,255,255;--dt-column-ordering:255,255,255}table.DTCR_clonedTable.dataTable{position:absolute!important;background-color:rgba(255,255,255,.7);z-index:202;border-radius:4px}div.DTCR_pointer{width:1px;background-color:#0d6efd;z-index:201}html.dark table.DTCR_clonedTable.dataTable{background-color:rgba(33,33,33,.9)}html.dark div.DTCR_pointer{background-color:#0d6efd}table.dataTable tfoot tr>.dtfc-fixed-left,table.dataTable tfoot tr>.dtfc-fixed-right,table.dataTable thead tr>.dtfc-fixed-left,table.dataTable thead tr>.dtfc-fixed-right{top:0;bottom:0;z-index:3;background-color:#fff}table.dataTable tbody tr>.dtfc-fixed-left,table.dataTable tbody tr>.dtfc-fixed-right{z-index:1;background-color:#fff}div.dtfc-left-top-blocker,div.dtfc-right-top-blocker{background-color:#fff}html.dark table.dataTable tfoot tr>.dtfc-fixed-left,html.dark table.dataTable tfoot tr>.dtfc-fixed-right,html.dark table.dataTable thead tr>.dtfc-fixed-left,html.dark table.dataTable thead tr>.dtfc-fixed-right{background-color:var(--dt-html-background)}html.dark table.dataTable tbody tr>.dtfc-fixed-left,html.dark table.dataTable tbody tr>.dtfc-fixed-right{background-color:var(--dt-html-background)}html.dark div.dtfc-left-top-blocker,html.dark div.dtfc-right-top-blocker{background-color:var(--dt-html-background)}div.dtfc-left-top-blocker,div.dtfc-right-top-blocker{margin-top:6px;border-bottom:0 solid #ddd!important}table.dataTable.table-bordered.dtfc-has-left{border-left:none}div.dataTables_scroll.dtfc-has-left table.table-bordered{border-left:none}div.dataTables_scrollBody{border-left:1px solid #ddd!important}div.dataTables_scrollFootInner table.table-bordered tr th:first-child,div.dataTables_scrollHeadInner table.table-bordered tr th:first-child{border-left:1px solid #ddd!important}html[data-bs-theme=dark] table.dataTable tfoot tr>.dtfc-fixed-left,html[data-bs-theme=dark] table.dataTable tfoot tr>.dtfc-fixed-right,html[data-bs-theme=dark] table.dataTable thead tr>.dtfc-fixed-left,html[data-bs-theme=dark] table.dataTable thead tr>.dtfc-fixed-right{background-color:var(--bs-body-bg)}html[data-bs-theme=dark] table.dataTable tbody tr>.dtfc-fixed-left,html[data-bs-theme=dark] table.dataTable tbody tr>.dtfc-fixed-right{background-color:var(--bs-body-bg)}html[data-bs-theme=dark] div.dtfc-left-top-blocker,html[data-bs-theme=dark] div.dtfc-right-top-blocker{background-color:var(--bs-body-bg)}html[data-bs-theme=dark] div.dataTables_scrollBody{border-left-color:var(--bs-border-color)!important}html[data-bs-theme=dark] div.dataTables_scrollFootInner table.table-bordered tr th:first-child,html[data-bs-theme=dark] div.dataTables_scrollHeadInner table.table-bordered tr th:first-child{border-left-color:var(--bs-border-color)!important}table.dataTable.fixedHeader-floating,table.dataTable.fixedHeader-locked{background-color:#fff;margin-top:0!important;margin-bottom:0!important}table.dataTable.fixedHeader-locked{position:absolute!important}@media print{table.fixedHeader-floating{display:none}}html[data-bs-theme=dark] table.dataTable.fixedHeader-floating,html[data-bs-theme=dark] table.dataTable.fixedHeader-locked{background-color:var(--bs-body-bg)}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child{cursor:default!important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before{display:none!important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control{cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before{margin-right:.5em;display:inline-block;color:rgba(0,0,0,.5);content:"►"}table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control.arrow-right::before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control.arrow-right::before{content:"◄"}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before{content:"▼"}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control{padding-left:.333em}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>td.dtr-control,table.dataTable.dtr-column>tbody>tr>th.control,table.dataTable.dtr-column>tbody>tr>th.dtr-control{cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>td.dtr-control:before,table.dataTable.dtr-column>tbody>tr>th.control:before,table.dataTable.dtr-column>tbody>tr>th.dtr-control:before{display:inline-block;color:rgba(0,0,0,.5);content:"►"}table.dataTable.dtr-column>tbody>tr>td.control.arrow-right::before,table.dataTable.dtr-column>tbody>tr>td.dtr-control.arrow-right::before,table.dataTable.dtr-column>tbody>tr>th.control.arrow-right::before,table.dataTable.dtr-column>tbody>tr>th.dtr-control.arrow-right::before{content:"◄"}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent td.dtr-control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before,table.dataTable.dtr-column>tbody>tr.parent th.dtr-control:before{content:"▼"}table.dataTable>tbody>tr.child{padding:.5em 1em}table.dataTable>tbody>tr.child:hover{background:0 0!important}table.dataTable>tbody>tr.child ul.dtr-details{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul.dtr-details>li{border-bottom:1px solid #efefef;padding:.5em 0}table.dataTable>tbody>tr.child ul.dtr-details>li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul.dtr-details>li:last-child{padding-bottom:0;border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:700}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:fit-content;max-height:75%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid #000;border-radius:.5em;box-shadow:0 12px 30px rgba(0,0,0,.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:2.5em}div.dtr-modal div.dtr-modal-content h2{margin-top:0}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,.6)}@media screen and (max-width:767px){div.dtr-modal div.dtr-modal-display{width:95%}}html.dark table.dataTable>tbody>tr>td.dtr-control:before{color:rgba(255,255,255,.5)!important}html.dark table.dataTable>tbody>tr.child ul.dtr-details>li{border-bottom-color:#404346}html.dark div.dtr-modal div.dtr-modal-display{background-color:#212529;border:1px solid rgba(255,255,255,.15)}div.dtr-bs-modal table.table tr:first-child td{border-top:none}table.dataTable.table-bordered td.dtr-control.dtr-hidden+*,table.dataTable.table-bordered th.dtr-control.dtr-hidden+*{border-left-width:1px}div.dts{display:block!important}div.dts tbody td,div.dts tbody th{white-space:nowrap}div.dts div.dts_loading{z-index:1}div.dts div.dts_label{position:absolute;right:20px;background:rgba(0,0,0,.8);color:#fff;box-shadow:3px 3px 10px rgba(0,0,0,.5);text-align:right;border-radius:3px;padding:.4em;z-index:2;display:none}div.dts div.dataTables_scrollBody{background:repeating-linear-gradient(45deg,rgba(0,0,0,.025),rgba(0,0,0,.025) 10px,rgba(0,0,0,0) 10px,rgba(0,0,0,0) 20px)}div.dts div.dataTables_scrollBody table{background-color:#fff;z-index:2}div.dts div.dataTables_length,div.dts div.dataTables_paginate,div.dts div.dt-length,div.dts div.dt-paging{display:none}html.dark div.dts div.dts_label{background:rgba(255,255,255,.8);color:#000}html.dark div.dts div.dataTables_scrollBody{background:repeating-linear-gradient(45deg,rgba(255,255,255,.025),rgba(255,255,255,.025) 10px,rgba(255,255,255,0) 10px,rgba(255,255,255,0) 20px)}html.dark div.dts div.dataTables_scrollBody table{background-color:var(--dt-html-background);z-index:2}div.DTS div.dataTables_scrollBody table{background-color:#fff}html[data-bs-theme=dark] div.DTS div.dataTables_scrollBody table{background-color:var(--bs-body-bg)}table.dataTable>tbody>tr>.selected{background-color:rgba(13,110,253,.9);color:#fff}table.dataTable>tbody>tr>td.select-checkbox,table.dataTable>tbody>tr>th.select-checkbox{position:relative}table.dataTable>tbody>tr>td.select-checkbox:after,table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:after,table.dataTable>tbody>tr>th.select-checkbox:before{display:block;position:absolute;top:50%;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable>tbody>tr>td.select-checkbox:before,table.dataTable>tbody>tr>th.select-checkbox:before{content:" ";margin-top:-6px;margin-left:-6px;border:1px solid #000;border-radius:3px}table.dataTable>tbody>tr.selected>td.select-checkbox:before,table.dataTable>tbody>tr.selected>th.select-checkbox:before{border:1px solid #fff}table.dataTable>tbody>tr.selected>td.select-checkbox:after,table.dataTable>tbody>tr.selected>th.select-checkbox:after{content:"✓";font-size:20px;margin-top:-12px;margin-left:-6px;text-align:center}table.dataTable.compact>tbody>tr>td.select-checkbox:before,table.dataTable.compact>tbody>tr>th.select-checkbox:before{margin-top:-12px}table.dataTable.compact>tbody>tr.selected>td.select-checkbox:after,table.dataTable.compact>tbody>tr.selected>th.select-checkbox:after{margin-top:-16px}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:.5em}html.dark table.dataTable>tbody>tr>td.select-checkbox:before,html.dark table.dataTable>tbody>tr>th.select-checkbox:before,html[data-bs-theme=dark] table.dataTable>tbody>tr>td.select-checkbox:before,html[data-bs-theme=dark] table.dataTable>tbody>tr>th.select-checkbox:before{border:1px solid rgba(255,255,255,.6)}@media screen and (max-width:640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}table.dataTable.table-sm tbody td.select-checkbox::before{margin-top:-9px}div.dt-datetime{position:absolute;background-color:#fff;z-index:2050;border:1px solid #ccc;box-shadow:0 5px 15px -5px rgba(0,0,0,.5);padding:6px 20px;width:275px;border-radius:5px}div.dt-datetime.inline{position:relative;box-shadow:none}div.dt-datetime div.dt-datetime-title{text-align:center;padding:5px 0 3px}div.dt-datetime div.dt-datetime-buttons{text-align:center}div.dt-datetime div.dt-datetime-buttons a{display:inline-block;padding:0 .5em .5em .5em;margin:0;font-size:.9em}div.dt-datetime div.dt-datetime-buttons a:hover{text-decoration:underline}div.dt-datetime table{border-spacing:0;margin:12px 0;width:100%}div.dt-datetime table.dt-datetime-table-nospace{margin-top:-12px}div.dt-datetime table th{font-size:.8em;color:#777;font-weight:400;width:14.285714286%;padding:0 0 4px 0;text-align:center}div.dt-datetime table td{font-size:.9em;color:#444;padding:0}div.dt-datetime table td.selectable{text-align:center;background:#f5f5f5}div.dt-datetime table td.selectable.disabled{color:#aaa;background:#fff}div.dt-datetime table td.selectable.disabled button:hover{color:#aaa;background:#fff}div.dt-datetime table td.selectable.now{background-color:#ddd}div.dt-datetime table td.selectable.now button{font-weight:700}div.dt-datetime table td.selectable.selected button{background:#4e6ca3;color:#fff;border-radius:2px}div.dt-datetime table td.selectable button:hover{background:#ff8000;color:#fff;border-radius:2px}div.dt-datetime table td.dt-datetime-week{font-size:.7em}div.dt-datetime table button{width:100%;box-sizing:border-box;border:none;background:0 0;font-size:inherit;color:inherit;text-align:center;padding:4px 0;cursor:pointer;margin:0}div.dt-datetime table button span{display:inline-block;min-width:14px;text-align:right}div.dt-datetime table.weekNumber th{width:12.5%}div.dt-datetime div.dt-datetime-calendar table{margin-top:0}div.dt-datetime div.dt-datetime-label{position:relative;display:inline-block;height:30px;padding:5px 6px;border:1px solid transparent;box-sizing:border-box;cursor:pointer}div.dt-datetime div.dt-datetime-label:hover{border:1px solid #ddd;border-radius:2px;background-color:#f5f5f5}div.dt-datetime div.dt-datetime-label select{position:absolute;top:6px;left:0;cursor:pointer;opacity:0}div.dt-datetime.horizontal{width:550px}div.dt-datetime.horizontal div.dt-datetime-date,div.dt-datetime.horizontal div.dt-datetime-time{width:48%}div.dt-datetime.horizontal div.dt-datetime-time{margin-left:4%}div.dt-datetime div.dt-datetime-date{position:relative;float:left;width:100%}div.dt-datetime div.dt-datetime-time{position:relative;float:left;width:100%;text-align:center}div.dt-datetime div.dt-datetime-time>span{vertical-align:middle}div.dt-datetime div.dt-datetime-time th{text-align:left}div.dt-datetime div.dt-datetime-time div.dt-datetime-timeblock{display:inline-block;vertical-align:middle}div.dt-datetime div.dt-datetime-iconLeft,div.dt-datetime div.dt-datetime-iconRight{width:30px;height:30px;background-position:center;background-repeat:no-repeat;opacity:.3;overflow:hidden;box-sizing:border-box;border:1px solid transparent}div.dt-datetime div.dt-datetime-iconLeft:hover,div.dt-datetime div.dt-datetime-iconRight:hover{border:1px solid #ccc;border-radius:2px;background-color:#f0f0f0;opacity:.6}div.dt-datetime div.dt-datetime-iconLeft button,div.dt-datetime div.dt-datetime-iconRight button{border:none;background:0 0;text-indent:30px;height:100%;width:100%;cursor:pointer}div.dt-datetime div.dt-datetime-iconLeft{position:absolute;top:5px;left:5px}div.dt-datetime div.dt-datetime-iconLeft button{position:relative;z-index:1}div.dt-datetime div.dt-datetime-iconLeft:after{position:absolute;top:7px;left:10px;display:block;content:"";border-top:7px solid transparent;border-right:7px solid #000;border-bottom:7px solid transparent}div.dt-datetime div.dt-datetime-iconRight{position:absolute;top:5px;right:5px}div.dt-datetime div.dt-datetime-iconRight button{position:relative;z-index:1}div.dt-datetime div.dt-datetime-iconRight:after{position:absolute;top:7px;left:12px;display:block;content:"";border-top:7px solid transparent;border-left:7px solid #000;border-bottom:7px solid transparent}div.dt-datetime-error{clear:both;padding:0 1em;max-width:240px;font-size:11px;line-height:1.25em;text-align:center;color:#b11f1f}html.dark input.dt-datetime{color-scheme:dark}html.dark div.dt-datetime{border:1px solid #595b5e;background-color:#212529;box-shadow:3px 4px 10px 1px rgba(0,0,0,.8)}html.dark div.dt-datetime table th{color:#ccc}html.dark div.dt-datetime table td{color:#eee}html.dark div.dt-datetime table td.selectable{background:#373c41}html.dark div.dt-datetime table td.selectable.disabled{color:#aaa;background:#171b1f}html.dark div.dt-datetime table td.selectable.disabled button:hover{color:#aaa;background:#171b1f}html.dark div.dt-datetime table td.selectable.now{background:#4b5055}html.dark div.dt-datetime table td.selectable.selected button{background:#6ea8fe;color:#000}html.dark div.dt-datetime table td.selectable button:hover{background:#ff8000;color:#000}html.dark div.dt-datetime div.dt-datetime-label:hover{border:1px solid transparent;background-color:rgba(255,255,255,.1)}html.dark div.dt-datetime div.dt-datetime-iconDown:hover,html.dark div.dt-datetime div.dt-datetime-iconLeft:hover,html.dark div.dt-datetime div.dt-datetime-iconRight:hover,html.dark div.dt-datetime div.dt-datetime-iconUp:hover{border:1px solid transparent;background-color:rgba(255,255,255,.1)}html.dark div.dt-datetime div.dt-datetime-iconLeft:after{border-right-color:#fff}html.dark div.dt-datetime div.dt-datetime-iconRight:after{border-left-color:#fff}html.dark div.dt-datetime select{color-scheme:dark}html.dark div.dt-datetime-error{color:#b11f1f} \ No newline at end of file diff --git a/static/assets/plugins/custom/datatables/datatables.bundle.js b/static/assets/plugins/custom/datatables/datatables.bundle.js index 6b9a422d..05a7b851 100644 --- a/static/assets/plugins/custom/datatables/datatables.bundle.js +++ b/static/assets/plugins/custom/datatables/datatables.bundle.js @@ -18,63 +18,29 @@ * * For details please refer to: https://www.datatables.net */ -!function(A){"use strict";if("function"==typeof define&&define.amd)define(["jquery"],(function(t){return A(t,window,document)}));else if("object"==typeof exports){var t=require("jquery");"undefined"==typeof window?module.exports=function(e,n){return e||(e=window),n||(n=t(e)),A(n,e,e.document)}:module.exports=A(t,window,window.document)}else window.DataTable=A(jQuery,window,document)}((function(A,t,e,n){"use strict";var r,i,o,s,a=function(t,e){if(a.factory(t,e))return a;if(this instanceof a)return A(t).DataTable(e);e=t,this.$=function(A,t){return this.api(!0).$(A,t)},this._=function(A,t){return this.api(!0).rows(A,t).data()},this.api=function(A){return new i(A?at(this[r.iApiIndex]):this)},this.fnAddData=function(t,e){var r=this.api(!0),i=Array.isArray(t)&&(Array.isArray(t[0])||A.isPlainObject(t[0]))?r.rows.add(t):r.row.add(t);return(e===n||e)&&r.draw(),i.flatten().toArray()},this.fnAdjustColumnSizing=function(A){var t=this.api(!0).columns.adjust(),e=t.settings()[0],r=e.oScroll;A===n||A?t.draw(!1):""===r.sX&&""===r.sY||JA(e)},this.fnClearTable=function(A){var t=this.api(!0).clear();(A===n||A)&&t.draw()},this.fnClose=function(A){this.api(!0).row(A).child.hide()},this.fnDeleteRow=function(A,t,e){var r=this.api(!0),i=r.rows(A),o=i.settings()[0],s=o.aoData[i[0][0]];return i.remove(),t&&t.call(this,o,s),(e===n||e)&&r.draw(),s},this.fnDestroy=function(A){this.api(!0).destroy(A)},this.fnDraw=function(A){this.api(!0).draw(A)},this.fnFilter=function(A,t,e,r,i,o){var s=this.api(!0);null===t||t===n?s.search(A,e,r,o):s.column(t).search(A,e,r,o),s.draw()},this.fnGetData=function(A,t){var e=this.api(!0);if(A!==n){var r=A.nodeName?A.nodeName.toLowerCase():"";return t!==n||"td"==r||"th"==r?e.cell(A,t).data():e.row(A).data()||null}return e.data().toArray()},this.fnGetNodes=function(A){var t=this.api(!0);return A!==n?t.row(A).node():t.rows().nodes().flatten().toArray()},this.fnGetPosition=function(A){var t=this.api(!0),e=A.nodeName.toUpperCase();if("TR"==e)return t.row(A).index();if("TD"==e||"TH"==e){var n=t.cell(A).index();return[n.row,n.columnVisible,n.column]}return null},this.fnIsOpen=function(A){return this.api(!0).row(A).child.isShown()},this.fnOpen=function(A,t,e){return this.api(!0).row(A).child(t,e).show().child()[0]},this.fnPageChange=function(A,t){var e=this.api(!0).page(A);(t===n||t)&&e.draw(!1)},this.fnSetColumnVis=function(A,t,e){var r=this.api(!0).column(A).visible(t);(e===n||e)&&r.columns.adjust().draw()},this.fnSettings=function(){return at(this[r.iApiIndex])},this.fnSort=function(A){this.api(!0).order(A).draw()},this.fnSortListener=function(A,t,e){this.api(!0).order.listener(A,t,e)},this.fnUpdate=function(A,t,e,r,i){var o=this.api(!0);return e===n||null===e?o.row(t).data(A):o.cell(t,e).data(A),(i===n||i)&&o.columns.adjust(),(r===n||r)&&o.draw(),0},this.fnVersionCheck=r.fnVersionCheck;var o=this,s=e===n,c=this.length;for(var B in s&&(e={}),this.oApi=this.internal=r.internal,a.ext.internal)B&&(this[B]=Wt(B));return this.each((function(){var t,r=c>1?gt({},e,!0):e,i=0,B=this.getAttribute("id"),g=!1,l=a.defaults,u=A(this);if("table"==this.nodeName.toLowerCase()){U(l),x(l.column),Y(l,l,!0),Y(l.column,l.column,!0),Y(l,A.extend(r,u.data()),!0);var h=a.settings;for(i=0,t=h.length;i").appendTo(u)),Q.nTHead=s[0];var a=u.children("tbody");0===a.length&&(a=A("").insertAfter(s)),Q.nTBody=a[0];var c=u.children("tfoot");if(0===c.length&&o.length>0&&(""!==Q.oScroll.sX||""!==Q.oScroll.sY)&&(c=A("").appendTo(u)),0===c.length||0===c.children().length?u.addClass(d.sNoFooter):c.length>0&&(Q.nTFoot=c[0],lA(Q.aoFooter,Q.nTFoot)),r.aaData)for(i=0;i/g,l=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,u=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^","-"].join("|\\")+")","g"),h=/['\u00A0,$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,w=function(A){return!A||!0===A||"-"===A},f=function(A){var t=parseInt(A,10);return!isNaN(t)&&isFinite(A)?t:null},E=function(A,t){return c[t]||(c[t]=new RegExp(yA(t),"g")),"string"==typeof A&&"."!==t?A.replace(/\./g,"").replace(c[t],"."):A},Q=function(A,t,e){var n=typeof A,r="string"===n;return"number"===n||"bigint"===n||(!!w(A)||(t&&r&&(A=E(A,t)),e&&r&&(A=A.replace(h,"")),!isNaN(parseFloat(A))&&isFinite(A)))},d=function(A,t,e){if(w(A))return!0;var n=function(A){return w(A)||"string"==typeof A}(A);return n&&!!Q(D(A),t,e)||null},C=function(A,t,e){var r=[],i=0,o=A.length;if(e!==n)for(;i").css({position:"fixed",top:0,left:-1*A(t).scrollLeft(),height:1,width:1,overflow:"hidden"}).append(A("
").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(A("
").css({width:"100%",height:10}))).appendTo("body"),i=r.children(),o=i.children();n.barWidth=i[0].offsetWidth-i[0].clientWidth,n.bScrollOversize=100===o[0].offsetWidth&&100!==i[0].clientWidth,n.bScrollbarLeft=1!==Math.round(o.offset().left),n.bBounding=!!r[0].getBoundingClientRect().width,r.remove()}A.extend(e.oBrowser,a.__browser),e.oScroll.iBarWidth=a.__browser.barWidth}function S(A,t,e,r,i,o){var s,a=r,c=!1;for(e!==n&&(s=e,c=!0);a!==i;)A.hasOwnProperty(a)&&(s=c?t(s,A[a],a,A):A[a],c=!0,a+=o);return s}function T(t,n){var r=a.defaults.column,i=t.aoColumns.length,o=A.extend({},a.models.oColumn,r,{nTh:n||e.createElement("th"),sTitle:r.sTitle?r.sTitle:n?n.innerHTML:"",aDataSort:r.aDataSort?r.aDataSort:[i],mData:r.mData?r.mData:i,idx:i});t.aoColumns.push(o);var s=t.aoPreSearchCols;s[i]=A.extend({},a.models.oSearch,s[i]),P(t,i,A(n).data())}function P(t,e,r){var i=t.aoColumns[e],o=t.oClasses,s=A(i.nTh);if(!i.sWidthOrig){i.sWidthOrig=s.attr("width")||null;var c=(s.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);c&&(i.sWidthOrig=c[1])}if(r!==n&&null!==r){x(r),Y(a.defaults.column,r,!0),r.mDataProp===n||r.mData||(r.mData=r.mDataProp),r.sType&&(i._sManualType=r.sType),r.className&&!r.sClass&&(r.sClass=r.className),r.sClass&&s.addClass(r.sClass);var B=i.sClass;A.extend(i,r),Bt(i,r,"sWidth","sWidthOrig"),B!==i.sClass&&(i.sClass=B+" "+i.sClass),r.iDataSort!==n&&(i.aDataSort=[r.iDataSort]),Bt(i,r,"aDataSort"),i.ariaTitle||(i.ariaTitle=s.attr("aria-label"))}var g=i.mData,l=q(g),u=i.mRender?q(i.mRender):null,h=function(A){return"string"==typeof A&&-1!==A.indexOf("@")};i._bAttrSrc=A.isPlainObject(g)&&(h(g.sort)||h(g.type)||h(g.filter)),i._setter=null,i.fnGetData=function(A,t,e){var r=l(A,t,n,e);return u&&t?u(r,t,A,e):r},i.fnSetData=function(A,t,e){return $(g)(A,t,e)},"number"==typeof g||i._isArrayHost||(t._rowReadObject=!0),t.oFeatures.bSort||(i.bSortable=!1,s.addClass(o.sSortableNone));var w=-1!==A.inArray("asc",i.asSorting),f=-1!==A.inArray("desc",i.asSorting);i.bSortable&&(w||f)?w&&!f?(i.sSortingClass=o.sSortableAsc,i.sSortingClassJUI=o.sSortJUIAscAllowed):!w&&f?(i.sSortingClass=o.sSortableDesc,i.sSortingClassJUI=o.sSortJUIDescAllowed):(i.sSortingClass=o.sSortable,i.sSortingClassJUI=o.sSortJUI):(i.sSortingClass=o.sSortableNone,i.sSortingClassJUI="")}function R(A){if(!1!==A.oFeatures.bAutoWidth){var t=A.aoColumns;KA(A);for(var e=0,n=t.length;e=0;o--){var h=(l=e[o]).target!==n?l.target:l.targets!==n?l.targets:l.aTargets;for(Array.isArray(h)||(h=[h]),a=0,c=h.length;a=0){for(;u.length<=h[a];)T(t);i(h[a],l)}else if("number"==typeof h[a]&&h[a]<0)i(u.length+h[a],l);else if("string"==typeof h[a])for(B=0,g=u.length;Bt&&A[i]--;-1!=r&&e===n&&A.splice(r,1)}function nA(A,t,e,r){var i,o,s=A.aoData[t],a=function(e,n){for(;e.childNodes.length;)e.removeChild(e.firstChild);e.innerHTML=W(A,t,n,"display")};if("dom"!==e&&(e&&"auto"!==e||"dom"!==s.src)){var c=s.anCells;if(c)if(r!==n)a(c[r],r);else for(i=0,o=c.length;i").appendTo(s)),e=0,n=g.length;e=0;s--)t.aoColumns[s].bVisible||r||h[i].splice(s,1);w.push([])}for(i=0,o=h.length;i=A.fnRecordsDisplay()?0:e,A.iInitDisplayStart=-1)}(t);var r=ht(t,"aoPreDrawCallback","preDraw",[t]);if(-1===A.inArray(!1,r)){var i=[],o=0,s=t.asStripeClasses,a=s.length,c=t.oLanguage,B="ssp"==Et(t),g=t.aiDisplay,l=t._iDisplayStart,u=t.fnDisplayEnd();if(t.bDrawing=!0,t.bDeferLoading)t.bDeferLoading=!1,t.iDraw++,kA(t,!1);else if(B){if(!t.bDestroying&&!e)return void wA(t)}else t.iDraw++;if(0!==g.length)for(var h=B?0:l,w=B?t.aoData.length:u,f=h;f",{class:a?s[0]:""}).append(A("",{valign:"top",colSpan:k(t),class:t.oClasses.sRowEmpty}).html(M))[0]}ht(t,"aoHeaderCallback","header",[A(t.nTHead).children("tr")[0],AA(t),l,u,g]),ht(t,"aoFooterCallback","footer",[A(t.nTFoot).children("tr")[0],AA(t),l,u,g]);var I=A(t.nTBody);I.children().detach(),I.append(A(i)),ht(t,"aoDrawCallback","draw",[t]),t.bSorted=!1,t.bFiltered=!1,t.bDrawing=!1}else kA(t,!1)}function BA(A,t){var e=A.oFeatures,n=e.bSort,r=e.bFilter;n&&$A(A),r?CA(A,A.oPreviousSearch):A.aiDisplay=A.aiDisplayMaster.slice(),!0!==t&&(A._iDisplayStart=0),A._drawHold=t,cA(A),A._drawHold=!1}function gA(t){var e=t.oClasses,n=A(t.nTable),r=A("
").insertBefore(n),i=t.oFeatures,o=A("
",{id:t.sTableId+"_wrapper",class:e.sWrapper+(t.nTFoot?"":" "+e.sNoFooter)});t.nHolding=r[0],t.nTableWrapper=o[0],t.nTableReinsertBefore=t.nTable.nextSibling;for(var s,c,B,g,l,u,h=t.sDom.split(""),w=0;w")[0],"'"==(g=h[w+1])||'"'==g){for(l="",u=2;h[w+u]!=g;)l+=h[w+u],u++;if("H"==l?l=e.sJUIHeader:"F"==l&&(l=e.sJUIFooter),-1!=l.indexOf(".")){var f=l.split(".");B.id=f[0].substr(1,f[0].length-1),B.className=f[1]}else"#"==l.charAt(0)?B.id=l.substr(1,l.length-1):B.className=l;w+=u}o.append(B),o=A(B)}else if(">"==c)o=o.parent();else if("l"==c&&i.bPaginate&&i.bLengthChange)s=PA(t);else if("f"==c&&i.bFilter)s=dA(t);else if("r"==c&&i.bProcessing)s=HA(t);else if("t"==c)s=LA(t);else if("i"==c&&i.bInfo)s=zA(t);else if("p"==c&&i.bPaginate)s=RA(t);else if(0!==a.ext.feature.length)for(var E=a.ext.feature,Q=0,d=E.length;Q',c=i.sSearch;c=c.match(/_INPUT_/)?c.replace("_INPUT_",a):c+a;var B=A("
",{id:s.f?null:r+"_filter",class:n.sFilter}).append(A("
").addClass(e.sLength);return t.aanFeatures.l||(g[0].id=n+"_length"),g.children().append(t.oLanguage.sLengthMenu.replace("_MENU_",a[0].outerHTML)),A("select",g).val(t._iDisplayLength).on("change.DT",(function(e){TA(t,A(this).val()),cA(t)})),A(t.nTable).on("length.dt.DT",(function(e,n,r){t===n&&A("select",g).val(r)})),g[0]}function RA(t){var e=t.sPaginationType,n=a.ext.pager[e],r="function"==typeof n,i=function(A){cA(A)},o=A("
").addClass(t.oClasses.sPaging+e)[0],s=t.aanFeatures;return r||n.fnInit(t,o,i),s.p||(o.id=t.sTableId+"_paginate",t.aoDrawCallback.push({fn:function(A){if(r){var t,e,o=A._iDisplayStart,a=A._iDisplayLength,c=A.fnRecordsDisplay(),B=-1===a,g=B?0:Math.ceil(o/a),l=B?1:Math.ceil(c/a),u=n(g,l);for(t=0,e=s.p.length;ti&&(n=0):"first"==t?n=0:"previous"==t?(n=r>=0?n-r:0)<0&&(n=0):"next"==t?n+r",{id:t.aanFeatures.r?null:t.sTableId+"_processing",class:t.oClasses.sProcessing,role:"status"}).html(t.oLanguage.sProcessing).append("
").insertBefore(t.nTable)[0]}function kA(t,e){t.oFeatures.bProcessing&&A(t.aanFeatures.r).css("display",e?"block":"none"),ht(t,null,"processing",[t,e])}function LA(t){var e=A(t.nTable),n=t.oScroll;if(""===n.sX&&""===n.sY)return t.nTable;var r=n.sX,i=n.sY,o=t.oClasses,s=e.children("caption"),a=s.length?s[0]._captionSide:null,c=A(e[0].cloneNode(!1)),B=A(e[0].cloneNode(!1)),g=e.children("tfoot"),l="
",u=function(A){return A?_A(A):null};g.length||(g=null);var h=A(l,{class:o.sScrollWrapper}).append(A(l,{class:o.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:r?u(r):"100%"}).append(A(l,{class:o.sScrollHeadInner}).css({"box-sizing":"content-box",width:n.sXInner||"100%"}).append(c.removeAttr("id").css("margin-left",0).append("top"===a?s:null).append(e.children("thead"))))).append(A(l,{class:o.sScrollBody}).css({position:"relative",overflow:"auto",width:u(r)}).append(e));g&&h.append(A(l,{class:o.sScrollFoot}).css({overflow:"hidden",border:0,width:r?u(r):"100%"}).append(A(l,{class:o.sScrollFootInner}).append(B.removeAttr("id").css("margin-left",0).append("bottom"===a?s:null).append(e.children("tfoot")))));var w=h.children(),f=w[0],E=w[1],Q=g?w[2]:null;return r&&A(E).on("scroll.DT",(function(A){var t=this.scrollLeft;f.scrollLeft=t,g&&(Q.scrollLeft=t)})),A(E).css("max-height",i),n.bCollapse||A(E).css("height",i),t.nScrollHead=f,t.nScrollBody=E,t.nScrollFoot=Q,t.aoDrawCallback.push({fn:JA,sName:"scrolling"}),h[0]}function JA(e){var r,i,o,s,a,c,B,g,l,u=e.oScroll,h=u.sX,w=u.sXInner,f=u.sY,E=u.iBarWidth,Q=A(e.nScrollHead),d=Q[0].style,M=Q.children("div"),I=M[0].style,p=M.children("table"),D=e.nScrollBody,y=A(D),m=D.style,F=A(e.nScrollFoot).children("div"),v=F.children("table"),Y=A(e.nTHead),b=A(e.nTable),z=b[0],U=z.style,x=e.nTFoot?A(e.nTFoot):null,N=e.oBrowser,S=N.bScrollOversize,T=(C(e.aoColumns,"nTh"),[]),P=[],H=[],k=[],L=function(A){var t=A.style;t.paddingTop="0",t.paddingBottom="0",t.borderTopWidth="0",t.borderBottomWidth="0",t.height=0},J=D.scrollHeight>D.clientHeight;if(e.scrollBarVis!==J&&e.scrollBarVis!==n)return e.scrollBarVis=J,void R(e);e.scrollBarVis=J,b.children("thead, tfoot").remove(),x&&(c=x.clone().prependTo(b),i=x.find("tr"),s=c.find("tr"),c.find("[id]").removeAttr("id")),a=Y.clone().prependTo(b),r=Y.find("tr"),o=a.find("tr"),a.find("th, td").removeAttr("tabindex"),a.find("[id]").removeAttr("id"),h||(m.width="100%",Q[0].style.width="100%"),A.each(uA(e,a),(function(A,t){B=G(e,A),t.style.width=e.aoColumns[B].sWidth})),x&&jA((function(A){A.style.width=""}),s),l=b.outerWidth(),""===h?(U.width="100%",S&&(b.find("tbody").height()>D.offsetHeight||"scroll"==y.css("overflow-y"))&&(U.width=_A(b.outerWidth()-E)),l=b.outerWidth()):""!==w&&(U.width=_A(w),l=b.outerWidth()),jA(L,o),jA((function(e){var n=t.getComputedStyle?t.getComputedStyle(e).width:_A(A(e).width());H.push(e.innerHTML),T.push(n)}),o),jA((function(A,t){A.style.width=T[t]}),r),A(o).css("height",0),x&&(jA(L,s),jA((function(t){k.push(t.innerHTML),P.push(_A(A(t).css("width")))}),s),jA((function(A,t){A.style.width=P[t]}),i),A(s).height(0)),jA((function(A,t){A.innerHTML='
'+H[t]+"
",A.childNodes[0].style.height="0",A.childNodes[0].style.overflow="hidden",A.style.width=T[t]}),o),x&&jA((function(A,t){A.innerHTML='
'+k[t]+"
",A.childNodes[0].style.height="0",A.childNodes[0].style.overflow="hidden",A.style.width=P[t]}),s),Math.round(b.outerWidth())D.offsetHeight||"scroll"==y.css("overflow-y")?l+E:l,S&&(D.scrollHeight>D.offsetHeight||"scroll"==y.css("overflow-y"))&&(U.width=_A(g-E)),""!==h&&""===w||ct(e,1,"Possible column misalignment",6)):g="100%",m.width=_A(g),d.width=_A(g),x&&(e.nScrollFoot.style.width=_A(g)),f||S&&(m.height=_A(z.offsetHeight+E));var j=b.outerWidth();p[0].style.width=_A(j),I.width=_A(j);var O=b.height()>D.clientHeight||"scroll"==y.css("overflow-y"),K="padding"+(N.bScrollbarLeft?"Left":"Right");I[K]=O?E+"px":"0px",x&&(v[0].style.width=_A(j),F[0].style.width=_A(j),F[0].style[K]=O?E+"px":"0px"),b.children("colgroup").insertBefore(b.children("thead")),y.trigger("scroll"),!e.bSorted&&!e.bFiltered||e._drawHold||(D.scrollTop=0)}function jA(A,t,e){for(var n,r,i=0,o=0,s=t.length;o/g;function KA(e){var n,r,i,o=e.nTable,s=e.aoColumns,a=e.oScroll,c=a.sY,B=a.sX,g=a.sXInner,l=s.length,u=L(e,"bVisible"),h=A("th",e.nTHead),w=o.getAttribute("width"),f=o.parentNode,E=!1,Q=e.oBrowser,d=Q.bScrollOversize,M=o.style.width;M&&-1!==M.indexOf("%")&&(w=M);var I=VA(C(s,"sWidthOrig"),f);for(n=0;n").appendTo(D.find("tbody"));for(D.find("thead, tfoot").remove(),D.append(A(e.nTHead).clone()).append(A(e.nTFoot).clone()),D.find("tfoot th, tfoot td").css("width",""),h=uA(e,D.find("thead")[0]),n=0;n").css({width:r.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(e.aoData.length)for(n=0;n").css(B||c?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(D).appendTo(f);B&&g?D.width(g):B?(D.css("width","auto"),D.removeAttr("width"),D.width()").css("width",_A(t[o])).appendTo(n||e.body)):r.push(null);for(o=0;o").html(W(t,n,e,"display"))[0]}function ZA(A,t){for(var e,n=-1,r=-1,i=0,o=A.aoData.length;in&&(n=e.length,r=i);return r}function _A(A){return null===A?"0px":"number"==typeof A?A<0?"0px":A+"px":A.match(/\d$/)?A+"px":A}function qA(t){var e,r,i,o,s,c,B,g=[],l=t.aoColumns,u=t.aaSortingFixed,h=A.isPlainObject(u),w=[],f=function(t){t.length&&!Array.isArray(t[0])?w.push(t):A.merge(w,t)};for(Array.isArray(u)&&f(u),h&&u.pre&&f(u.pre),f(t.aaSorting),h&&u.post&&f(u.post),e=0;en?1:0))return"asc"===a.dir?s:-s;return(e=o[A])<(n=o[t])?-1:e>n?1:0})):g.sort((function(A,t){var e,n,r,a,B,g=i.length,l=c[A]._aSortData,u=c[t]._aSortData;for(r=0;rn?1:0}))}A.bSorted=!0}function At(A){for(var t,e,n=A.aoColumns,r=qA(A),i=A.oLanguage.oAria,o=0,s=n.length;o/g,""),g=a.nTh;g.removeAttribute("aria-sort"),a.bSortable?(r.length>0&&r[0].col==o?(g.setAttribute("aria-sort","asc"==r[0].dir?"ascending":"descending"),e=c[r[0].index+1]||c[0]):e=c[0],t=B+("asc"===e?i.sSortAscending:i.sSortDescending)):t=B,g.setAttribute("aria-label",t)}}function tt(t,e,r,i){var o,s=t.aoColumns[e],a=t.aaSorting,c=s.asSorting,B=function(t,e){var r=t._idx;return r===n&&(r=A.inArray(t[1],c)),r+10&&e.time<+new Date-1e3*g)return t._bLoadingState=!1,void r();if(e.columns&&s.length!==e.columns.length)return t._bLoadingState=!1,void r();if(t.oLoadedState=A.extend(!0,{},e),e.length!==n&&(c?c.page.len(e.length):t._iDisplayLength=e.length),e.start!==n&&(null===c?(t._iDisplayStart=e.start,t.iInitDisplayStart=e.start):GA(t,e.start/t._iDisplayLength)),e.order!==n&&(t.aaSorting=[],A.each(e.order,(function(A,e){t.aaSorting.push(e[0]>=s.length?[0,e[1]]:e)}))),e.search!==n&&A.extend(t.oPreviousSearch,bA(e.search)),e.columns){for(i=0,o=e.columns.length;i=e&&(t=e-n),t-=t%n,(-1===n||t<0)&&(t=0),A._iDisplayStart=t}function ft(t,e){var n=t.renderer,r=a.ext.renderer[e];return A.isPlainObject(n)&&n[e]?r[n[e]]||r._:"string"==typeof n&&r[n]||r._}function Et(A){return A.oFeatures.bServerSide?"ssp":A.ajax||A.sAjaxSource?"ajax":"dom"}var Qt=[],dt=Array.prototype;i=function(t,e){if(!(this instanceof i))return new i(t,e);var n=[],r=function(t){var e=function(t){var e,n,r=a.settings,i=A.map(r,(function(A,t){return A.nTable}));return t?t.nTable&&t.oApi?[t]:t.nodeName&&"table"===t.nodeName.toLowerCase()?-1!==(e=A.inArray(t,i))?[r[e]]:null:t&&"function"==typeof t.settings?t.settings().toArray():("string"==typeof t?n=A(t):t instanceof A&&(n=t),n?n.map((function(t){return-1!==(e=A.inArray(this,i))?r[e]:null})).toArray():void 0):[]}(t);e&&n.push.apply(n,e)};if(Array.isArray(t))for(var o=0,s=t.length;oA?new i(t[A],this[A]):null},filter:function(A){var t=[];if(dt.filter)t=dt.filter.call(this,A,this);else for(var e=0,n=this.length;e0)return A[0].json})),o("ajax.params()",(function(){var A=this.context;if(A.length>0)return A[0].oAjaxData})),o("ajax.reload()",(function(A,t){return this.iterator("table",(function(e){Mt(e,!1===t,A)}))})),o("ajax.url()",(function(t){var e=this.context;return t===n?0===e.length?n:(e=e[0]).ajax?A.isPlainObject(e.ajax)?e.ajax.url:e.ajax:e.sAjaxSource:this.iterator("table",(function(e){A.isPlainObject(e.ajax)?e.ajax.url=t:e.ajax=t}))})),o("ajax.url().load()",(function(A,t){return this.iterator("table",(function(e){Mt(e,!1===t,A)}))}));var It=function(A,t,e,i,o){var s,a,c,B,g,l,u=[],h=typeof t;for(t&&"string"!==h&&"function"!==h&&t.length!==n||(t=[t]),c=0,B=t.length;c0)return A[0]=A[t],A[0].length=1,A.length=1,A.context=[A.context[t]],A;return A.length=0,A},yt=function(t,e){var n,r=[],i=t.aiDisplay,o=t.aiDisplayMaster,s=e.search,a=e.order,c=e.page;if("ssp"==Et(t))return"removed"===s?[]:I(0,o.length);if("current"==c)for(g=t._iDisplayStart,l=t.fnDisplayEnd();g=0&&"applied"==s)&&r.push(g);return r};o("rows()",(function(t,e){t===n?t="":A.isPlainObject(t)&&(e=t,t=""),e=pt(e);var r=this.iterator("table",(function(r){return function(t,e,r){var i;return It("row",e,(function(e){var o=f(e),s=t.aoData;if(null!==o&&!r)return[o];if(i||(i=yt(t,r)),null!==o&&-1!==A.inArray(o,i))return[o];if(null===e||e===n||""===e)return i;if("function"==typeof e)return A.map(i,(function(A){var t=s[A];return e(A,t._aData,t.nTr)?A:null}));if(e.nodeName){var a=e._DT_RowIndex,c=e._DT_CellIndex;if(a!==n)return s[a]&&s[a].nTr===e?[a]:[];if(c)return s[c.row]&&s[c.row].nTr===e.parentNode?[c.row]:[];var B=A(e).closest("*[data-dt-row]");return B.length?[B.data("dt-row")]:[]}if("string"==typeof e&&"#"===e.charAt(0)){var g=t.aIds[e.replace(/^#/,"")];if(g!==n)return[g.idx]}var l=p(M(t.aoData,i,"nTr"));return A(l).filter(e).map((function(){return this._DT_RowIndex})).toArray()}),t,r)}(r,t,e)}),1);return r.selector.rows=t,r.selector.opts=e,r})),o("rows().nodes()",(function(){return this.iterator("row",(function(A,t){return A.aoData[t].nTr||n}),1)})),o("rows().data()",(function(){return this.iterator(!0,"rows",(function(A,t){return M(A.aoData,t,"_aData")}),1)})),s("rows().cache()","row().cache()",(function(A){return this.iterator("row",(function(t,e){var n=t.aoData[e];return"search"===A?n._aFilterData:n._aSortData}),1)})),s("rows().invalidate()","row().invalidate()",(function(A){return this.iterator("row",(function(t,e){nA(t,e,A)}))})),s("rows().indexes()","row().index()",(function(){return this.iterator("row",(function(A,t){return t}),1)})),s("rows().ids()","row().id()",(function(A){for(var t=[],e=this.context,n=0,r=e.length;n0&&t._iRecordsDisplay--,wt(t);var u=t.rowIdFn(l._aData);u!==n&&delete t.aIds[u]})),this.iterator("table",(function(A){for(var t=0,e=A.aoData.length;t0&&(e.on(r,(function(A,n){t===n&&e.rows({page:"current"}).eq(0).each((function(A){var t=a[A];t._detailsShow&&t._details.insertAfter(t.nTr)}))})),e.on(o,(function(e,n,r,i){if(t===n)for(var o,s=k(n),c=0,B=a.length;c").addClass(n);A("td",a).addClass(n).html(e)[0].colSpan=k(t),i.push(a[0])}};o(n,r),e._details&&e._details.detach(),e._details=A(i),e._detailsShow&&e._details.insertAfter(e.nTr)}(r[0],r[0].aoData[this[0]],t,e),this)})),o([bt+".show()",zt+".show()"],(function(A){return vt(this,!0),this})),o([bt+".hide()",zt+".hide()"],(function(){return vt(this,!1),this})),o([bt+".remove()",zt+".remove()"],(function(){return Ft(this),this})),o(bt+".isShown()",(function(){var A=this.context;return A.length&&this.length&&A[0].aoData[this[0]]._detailsShow||!1}));var Ut=/^([^:]+):(name|visIdx|visible)$/,xt=function(A,t,e,n,r){for(var i=[],o=0,s=r.length;o=0?s:r.length+s];if("function"==typeof e){var a=yt(t,n);return A.map(r,(function(A,n){return e(n,xt(t,n,0,0,a),o[n])?n:null}))}var c="string"==typeof e?e.match(Ut):"";if(c)switch(c[2]){case"visIdx":case"visible":var B=parseInt(c[1],10);if(B<0){var g=A.map(r,(function(A,t){return A.bVisible?t:null}));return[g[g.length+B]]}return[G(t,B)];case"name":return A.map(i,(function(A,t){return A===c[1]?t:null}));default:return[]}if(e.nodeName&&e._DT_CellIndex)return[e._DT_CellIndex.column];var l=A(o).filter(e).map((function(){return A.inArray(this,o)})).toArray();if(l.length||!e.nodeName)return l;var u=A(e).closest("*[data-dt-column]");return u.length?[u.data("dt-column")]:[]}),t,n)}(n,t,e)}),1);return r.selector.cols=t,r.selector.opts=e,r})),s("columns().header()","column().header()",(function(A,t){return this.iterator("column",(function(A,t){return A.aoColumns[t].nTh}),1)})),s("columns().footer()","column().footer()",(function(A,t){return this.iterator("column",(function(A,t){return A.aoColumns[t].nTf}),1)})),s("columns().data()","column().data()",(function(){return this.iterator("column-rows",xt,1)})),s("columns().dataSrc()","column().dataSrc()",(function(){return this.iterator("column",(function(A,t){return A.aoColumns[t].mData}),1)})),s("columns().cache()","column().cache()",(function(A){return this.iterator("column-rows",(function(t,e,n,r,i){return M(t.aoData,i,"search"===A?"_aFilterData":"_aSortData",e)}),1)})),s("columns().nodes()","column().nodes()",(function(){return this.iterator("column-rows",(function(A,t,e,n,r){return M(A.aoData,r,"anCells",t)}),1)})),s("columns().visible()","column().visible()",(function(t,e){var r=this,i=this.iterator("column",(function(e,r){if(t===n)return e.aoColumns[r].bVisible;!function(t,e,r){var i,o,s,a,c=t.aoColumns,B=c[e],g=t.aoData;if(r===n)return B.bVisible;if(B.bVisible!==r){if(r){var l=A.inArray(!0,C(c,"bVisible"),e+1);for(o=0,s=g.length;oe;return!0},a.isDataTable=a.fnIsDataTable=function(t){var e=A(t).get(0),n=!1;return t instanceof a.Api||(A.each(a.settings,(function(t,r){var i=r.nScrollHead?A("table",r.nScrollHead)[0]:null,o=r.nScrollFoot?A("table",r.nScrollFoot)[0]:null;r.nTable!==e&&i!==e&&o!==e||(n=!0)})),n)},a.tables=a.fnTables=function(t){var e=!1;A.isPlainObject(t)&&(e=t.api,t=t.visible);var n=A.map(a.settings,(function(e){if(!t||t&&A(e.nTable).is(":visible"))return e.nTable}));return e?new i(n):n},a.camelToHungarian=Y,o("$()",(function(t,e){var n=this.rows(e).nodes(),r=A(n);return A([].concat(r.filter(t).toArray(),r.find(t).toArray()))})),A.each(["on","one","off"],(function(t,e){o(e+"()",(function(){var t=Array.prototype.slice.call(arguments);t[0]=A.map(t[0].split(/\s/),(function(A){return A.match(/\.dt\b/)?A:A+".dt"})).join(" ");var n=A(this.tables().nodes());return n[e].apply(n,t),this}))})),o("clear()",(function(){return this.iterator("table",(function(A){tA(A)}))})),o("settings()",(function(){return new i(this.context,this.context)})),o("init()",(function(){var A=this.context;return A.length?A[0].oInit:null})),o("data()",(function(){return this.iterator("table",(function(A){return C(A.aoData,"_aData")})).flatten()})),o("destroy()",(function(e){return e=e||!1,this.iterator("table",(function(n){var r,o=n.oClasses,s=n.nTable,c=n.nTBody,B=n.nTHead,g=n.nTFoot,l=A(s),u=A(c),h=A(n.nTableWrapper),w=A.map(n.aoData,(function(A){return A.nTr}));n.bDestroying=!0,ht(n,"aoDestroyCallback","destroy",[n]),e||new i(n).columns().visible(!0),h.off(".DT").find(":not(tbody *)").off(".DT"),A(t).off(".DT-"+n.sInstance),s!=B.parentNode&&(l.children("thead").detach(),l.append(B)),g&&s!=g.parentNode&&(l.children("tfoot").detach(),l.append(g)),n.aaSorting=[],n.aaSortingFixed=[],nt(n),A(w).removeClass(n.asStripeClasses.join(" ")),A("th, td",B).removeClass(o.sSortable+" "+o.sSortableAsc+" "+o.sSortableDesc+" "+o.sSortableNone),u.children().detach(),u.append(w);var f=n.nTableWrapper.parentNode,E=e?"remove":"detach";l[E](),h[E](),!e&&f&&(f.insertBefore(s,n.nTableReinsertBefore),l.css("width",n.sDestroyWidth).removeClass(o.sTable),(r=n.asDestroyStripes.length)&&u.children().each((function(t){A(this).addClass(n.asDestroyStripes[t%r])})));var Q=A.inArray(n,a.settings);-1!==Q&&a.settings.splice(Q,1)}))})),A.each(["column","row","cell"],(function(A,t){o(t+"s().every()",(function(A){var e=this.selector.opts,r=this;return this.iterator(t,(function(i,o,s,a,c){A.call(r[t](o,"cell"===t?s:e,"cell"===t?e:n),o,s,a,c)}))}))})),o("i18n()",(function(t,e,r){var i=this.context[0],o=q(t)(i.oLanguage);return o===n&&(o=e),r!==n&&A.isPlainObject(o)&&(o=o[r]!==n?o[r]:o._),"string"==typeof o?o.replace("%d",r):o})),a.version="1.13.7",a.settings=[],a.models={},a.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0,return:!1},a.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1},a.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null},a.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(A){return A.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(A){try{return JSON.parse((-1===A.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+A.sInstance+"_"+location.pathname))}catch(A){return{}}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(A,t){try{(-1===A.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+A.sInstance+"_"+location.pathname,JSON.stringify(t))}catch(A){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:A.extend({},a.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"},v(a.defaults),a.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null},v(a.defaults.column),a.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,jqXHR:null,json:n,oAjaxData:n,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==Et(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==Et(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var A=this._iDisplayLength,t=this._iDisplayStart,e=t+A,n=this.aiDisplay.length,r=this.oFeatures,i=r.bPaginate;return r.bServerSide?!1===i||-1===A?t+n:Math.min(t+A,this._iRecordsDisplay):!i||e>n||-1===A?n:e},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null},a.ext=r={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:a.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:a.version},A.extend(r,{afnFiltering:r.search,aTypes:r.type.detect,ofnSearch:r.type.search,oSort:r.type.order,afnSortData:r.order,aoFeatures:r.feature,oApi:r.internal,oStdClasses:r.classes,oPagination:r.pager}),A.extend(a.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_desc_disabled",sSortableDesc:"sorting_asc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var Nt=a.ext.pager;function St(A,t){var e=[],n=Nt.numbers_length,r=Math.floor(n/2);return t<=n?e=I(0,t):A<=r?((e=I(0,n-2)).push("ellipsis"),e.push(t-1)):A>=t-1-r?((e=I(t-(n-2),t)).splice(0,0,"ellipsis"),e.splice(0,0,0)):((e=I(A-r+2,A+r-1)).push("ellipsis"),e.push(t-1),e.splice(0,0,"ellipsis"),e.splice(0,0,0)),e.DT_el="span",e}A.extend(Nt,{simple:function(A,t){return["previous","next"]},full:function(A,t){return["first","previous","next","last"]},numbers:function(A,t){return[St(A,t)]},simple_numbers:function(A,t){return["previous",St(A,t),"next"]},full_numbers:function(A,t){return["first","previous",St(A,t),"next","last"]},first_last_numbers:function(A,t){return["first",St(A,t),"last"]},_numbers:St,numbers_length:7}),A.extend(!0,a.ext.renderer,{pageButton:{_:function(t,r,i,o,s,a){var c,B,g,l=t.oClasses,u=t.oLanguage.oPaginate,h=t.oLanguage.oAria.paginate||{},w=function(e,n){var r,o,g,f=l.sPageButtonDisabled,E=function(A){GA(t,A.data.action,!0)};for(r=0,o=n.length;r").appendTo(e);w(Q,g)}else{var d=!1;switch(c=null,B=g,g){case"ellipsis":e.append('');break;case"first":c=u.sFirst,0===s&&(d=!0);break;case"previous":c=u.sPrevious,0===s&&(d=!0);break;case"next":c=u.sNext,0!==a&&s!==a-1||(d=!0);break;case"last":c=u.sLast,0!==a&&s!==a-1||(d=!0);break;default:c=t.fnFormatNumber(g+1),B=s===g?l.sPageButtonActive:""}if(null!==c){var C=t.oInit.pagingTag||"a";d&&(B+=" "+f),lt(A("<"+C+">",{class:l.sPageButton+" "+B,"aria-controls":t.sTableId,"aria-disabled":d?"true":null,"aria-label":h[g],role:"link","aria-current":B===l.sPageButtonActive?"page":null,"data-dt-idx":g,tabindex:d?-1:t.iTabIndex,id:0===i&&"string"==typeof g?t.sTableId+"_"+g:null}).html(c).appendTo(e),{action:g},E)}}};try{g=A(r).find(e.activeElement).data("dt-idx")}catch(A){}w(A(r).empty(),o),g!==n&&A(r).find("[data-dt-idx="+g+"]").trigger("focus")}}}),A.extend(a.ext.type.detect,[function(A,t){var e=t.oLanguage.sDecimal;return Q(A,e)?"num"+e:null},function(A,t){if(A&&!(A instanceof Date)&&!l.test(A))return null;var e=Date.parse(A);return null!==e&&!isNaN(e)||w(A)?"date":null},function(A,t){var e=t.oLanguage.sDecimal;return Q(A,e,!0)?"num-fmt"+e:null},function(A,t){var e=t.oLanguage.sDecimal;return d(A,e)?"html-num"+e:null},function(A,t){var e=t.oLanguage.sDecimal;return d(A,e,!0)?"html-num-fmt"+e:null},function(A,t){return w(A)||"string"==typeof A&&-1!==A.indexOf("<")?"html":null}]),A.extend(a.ext.type.search,{html:function(A){return w(A)?A:"string"==typeof A?A.replace(B," ").replace(g,""):""},string:function(A){return w(A)?A:"string"==typeof A?A.replace(B," "):A}});var Tt=function(A,t,e,n){if(0!==A&&(!A||"-"===A))return-1/0;var r=typeof A;return"number"===r||"bigint"===r?A:(t&&(A=E(A,t)),A.replace&&(e&&(A=A.replace(e,"")),n&&(A=A.replace(n,""))),1*A)};function Pt(t){A.each({num:function(A){return Tt(A,t)},"num-fmt":function(A){return Tt(A,t,h)},"html-num":function(A){return Tt(A,t,g)},"html-num-fmt":function(A){return Tt(A,t,g,h)}},(function(A,e){r.type.order[A+t+"-pre"]=e,A.match(/^html\-/)&&(r.type.search[A+t]=r.type.search.html)}))}A.extend(r.type.order,{"date-pre":function(A){var t=Date.parse(A);return isNaN(t)?-1/0:t},"html-pre":function(A){return w(A)?"":A.replace?A.replace(/<.*?>/g,"").toLowerCase():A+""},"string-pre":function(A){return w(A)?"":"string"==typeof A?A.toLowerCase():A.toString?A.toString():""},"string-asc":function(A,t){return At?1:0},"string-desc":function(A,t){return At?-1:0}}),Pt(""),A.extend(!0,a.ext.renderer,{header:{_:function(t,e,n,r){A(t.nTable).on("order.dt.DT",(function(A,i,o,s){if(t===i){var a=n.idx;e.removeClass(r.sSortAsc+" "+r.sSortDesc).addClass("asc"==s[a]?r.sSortAsc:"desc"==s[a]?r.sSortDesc:n.sSortingClass)}}))},jqueryui:function(t,e,n,r){A("
").addClass(r.sSortJUIWrapper).append(e.contents()).append(A("").addClass(r.sSortIcon+" "+n.sSortingClassJUI)).appendTo(e),A(t.nTable).on("order.dt.DT",(function(A,i,o,s){if(t===i){var a=n.idx;e.removeClass(r.sSortAsc+" "+r.sSortDesc).addClass("asc"==s[a]?r.sSortAsc:"desc"==s[a]?r.sSortDesc:n.sSortingClass),e.find("span."+r.sSortIcon).removeClass(r.sSortJUIAsc+" "+r.sSortJUIDesc+" "+r.sSortJUI+" "+r.sSortJUIAscAllowed+" "+r.sSortJUIDescAllowed).addClass("asc"==s[a]?r.sSortJUIAsc:"desc"==s[a]?r.sSortJUIDesc:n.sSortingClassJUI)}}))}}});var Rt=function(A){return Array.isArray(A)&&(A=A.join(",")),"string"==typeof A?A.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""):A};function Gt(A,e,n,r,i){return t.moment?A[e](i):t.luxon?A[n](i):r?A[r](i):A}var Ht=!1;function kt(A,e,n){var r;if(t.moment){if(!(r=t.moment.utc(A,e,n,!0)).isValid())return null}else if(t.luxon){if(!(r=e&&"string"==typeof A?t.luxon.DateTime.fromFormat(A,e):t.luxon.DateTime.fromISO(A)).isValid)return null;r.setLocale(n)}else e?(Ht||alert("DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17"),Ht=!0):r=new Date(A);return r}function Lt(A){return function(t,e,r,i){0===arguments.length?(r="en",e=null,t=null):1===arguments.length?(r="en",e=t,t=null):2===arguments.length&&(r=e,e=t,t=null);var o="datetime-"+e;return a.ext.type.order[o]||(a.ext.type.detect.unshift((function(A){return A===o&&o})),a.ext.type.order[o+"-asc"]=function(A,t){var e=A.valueOf(),n=t.valueOf();return e===n?0:en?-1:1}),function(s,a){if(null===s||s===n)if("--now"===i){var c=new Date;s=new Date(Date.UTC(c.getFullYear(),c.getMonth(),c.getDate(),c.getHours(),c.getMinutes(),c.getSeconds()))}else s="";if("type"===a)return o;if(""===s)return"sort"!==a?"":kt("0000-01-01 00:00:00",null,r);if(null!==e&&t===e&&"sort"!==a&&"type"!==a&&!(s instanceof Date))return s;var B=kt(s,t,r);if(null===B)return s;if("sort"===a)return B;var g=null===e?Gt(B,"toDate","toJSDate","")[A]():Gt(B,"format","toFormat","toISOString",e);return"display"===a?Rt(g):g}}}var Jt=",",jt=".";if(t.Intl!==n)try{for(var Ot=(new Intl.NumberFormat).formatToParts(100000.1),Kt=0;Kt1?ue({},n,!0):n,r=0,c=this.getAttribute("id"),u=!1,f=l.defaults,h=t(this);if("table"==this.nodeName.toLowerCase()){k(f),P(f.column),R(f,f,!0),R(f.column,f.column,!0),R(f,t.extend(o,h.data()),!0);var p=l.settings;for(r=0,e=p.length;r").appendTo(h)),v.nTHead=i[0];var l=h.children("tbody");0===l.length&&(l=t("").insertAfter(i)),v.nTBody=l[0];var d=h.children("tfoot");if(0===d.length&&a.length>0&&(""!==v.oScroll.sX||""!==v.oScroll.sY)&&(d=t("").appendTo(h)),0===d.length||0===d.children().length?h.addClass(y.sNoFooter):d.length>0&&(v.nTFoot=d[0],ft(v.aoFooter,v.nTFoot)),o.aaData)for(r=0;r/g,f=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,h=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^","-"].join("|\\")+")","g"),p=/['\u00A0,$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,m=function(t){return!t||!0===t||"-"===t},g=function(t){var e=parseInt(t,10);return!isNaN(e)&&isFinite(t)?e:null},b=function(t,e){return d[e]||(d[e]=new RegExp(xt(e),"g")),"string"==typeof t&&"."!==e?t.replace(/\./g,"").replace(d[e],"."):t},v=function(t,e,n){var s=typeof t,o="string"===s;return"number"===s||"bigint"===s||(!!m(t)||(e&&o&&(t=b(t,e)),n&&o&&(t=t.replace(p,"")),!isNaN(parseFloat(t))&&isFinite(t)))},y=function(t,e,n){if(m(t))return!0;var s=function(t){return m(t)||"string"==typeof t}(t);return s&&!!v(S(t),e,n)||null},_=function(t,e,n){var o=[],r=0,a=t.length;if(n!==s)for(;r").css({position:"fixed",top:0,left:-1*t(e).scrollLeft(),height:1,width:1,overflow:"hidden"}).append(t("
").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(t("
").css({width:"100%",height:10}))).appendTo("body"),r=o.children(),a=r.children();s.barWidth=r[0].offsetWidth-r[0].clientWidth,s.bScrollOversize=100===a[0].offsetWidth&&100!==r[0].clientWidth,s.bScrollbarLeft=1!==Math.round(a.offset().left),s.bBounding=!!o[0].getBoundingClientRect().width,o.remove()}t.extend(n.oBrowser,l.__browser),n.oScroll.iBarWidth=l.__browser.barWidth}function j(t,e,n,o,r,a){var i,l=o,d=!1;for(n!==s&&(i=n,d=!0);l!==r;)t.hasOwnProperty(l)&&(i=d?e(i,t[l],l,t):t[l],d=!0,l+=a);return i}function N(e,s){var o=l.defaults.column,r=e.aoColumns.length,a=t.extend({},l.models.oColumn,o,{nTh:s||n.createElement("th"),sTitle:o.sTitle?o.sTitle:s?s.innerHTML:"",aDataSort:o.aDataSort?o.aDataSort:[r],mData:o.mData?o.mData:r,idx:r});e.aoColumns.push(a);var i=e.aoPreSearchCols;i[r]=t.extend({},l.models.oSearch,i[r]),O(e,r,t(s).data())}function O(e,n,o){var r=e.aoColumns[n],a=e.oClasses,i=t(r.nTh);if(!r.sWidthOrig){r.sWidthOrig=i.attr("width")||null;var d=(i.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);d&&(r.sWidthOrig=d[1])}if(o!==s&&null!==o){P(o),R(l.defaults.column,o,!0),o.mDataProp===s||o.mData||(o.mData=o.mDataProp),o.sType&&(r._sManualType=o.sType),o.className&&!o.sClass&&(o.sClass=o.className),o.sClass&&i.addClass(o.sClass);var c=r.sClass;t.extend(r,o),ce(r,o,"sWidth","sWidthOrig"),c!==r.sClass&&(r.sClass=c+" "+r.sClass),o.iDataSort!==s&&(r.aDataSort=[o.iDataSort]),ce(r,o,"aDataSort"),r.ariaTitle||(r.ariaTitle=i.attr("aria-label"))}var u=r.mData,f=K(u),h=r.mRender?K(r.mRender):null,p=function(t){return"string"==typeof t&&-1!==t.indexOf("@")};r._bAttrSrc=t.isPlainObject(u)&&(p(u.sort)||p(u.type)||p(u.filter)),r._setter=null,r.fnGetData=function(t,e,n){var o=f(t,e,s,n);return h&&e?h(o,e,t,n):o},r.fnSetData=function(t,e,n){return Z(u)(t,e,n)},"number"==typeof u||r._isArrayHost||(e._rowReadObject=!0),e.oFeatures.bSort||(r.bSortable=!1,i.addClass(a.sSortableNone));var m=-1!==t.inArray("asc",r.asSorting),g=-1!==t.inArray("desc",r.asSorting);r.bSortable&&(m||g)?m&&!g?(r.sSortingClass=a.sSortableAsc,r.sSortingClassJUI=a.sSortJUIAscAllowed):!m&&g?(r.sSortingClass=a.sSortableDesc,r.sSortingClassJUI=a.sSortJUIDescAllowed):(r.sSortingClass=a.sSortable,r.sSortingClassJUI=a.sSortJUI):(r.sSortingClass=a.sSortableNone,r.sSortingClassJUI="")}function M(t){if(!1!==t.oFeatures.bAutoWidth){var e=t.aoColumns;Yt(t);for(var n=0,s=e.length;n=0;a--){var p=(f=n[a]).target!==s?f.target:f.targets!==s?f.targets:f.aTargets;for(Array.isArray(p)||(p=[p]),l=0,d=p.length;l=0){for(;h.length<=p[l];)N(e);r(p[l],f)}else if("number"==typeof p[l]&&p[l]<0)r(h.length+p[l],f);else if("string"==typeof p[l])for(c=0,u=h.length;ce&&t[r]--;-1!=o&&n===s&&t.splice(o,1)}function st(t,e,n,o){var r,a,i=t.aoData[e],l=function(n,s){for(;n.childNodes.length;)n.removeChild(n.firstChild);n.innerHTML=X(t,e,s,"display")};if("dom"!==n&&(n&&"auto"!==n||"dom"!==i.src)){var d=i.anCells;if(d)if(o!==s)l(d[o],o);else for(r=0,a=d.length;r").appendTo(i)),n=0,s=u.length;n=0;i--)e.aoColumns[i].bVisible||o||p[r].splice(i,1);m.push([])}for(r=0,a=p.length;r=t.fnRecordsDisplay()?0:n,t.iInitDisplayStart=-1)}(e);var o=pe(e,"aoPreDrawCallback","preDraw",[e]);if(-1===t.inArray(!1,o)){var r=[],a=0,i=e.asStripeClasses,l=i.length,d=e.oLanguage,c="ssp"==be(e),u=e.aiDisplay,f=e._iDisplayStart,h=e.fnDisplayEnd();if(e.bDrawing=!0,e.bDeferLoading)e.bDeferLoading=!1,e.iDraw++,Ut(e,!1);else if(c){if(!e.bDestroying&&!n)return void mt(e)}else e.iDraw++;if(0!==u.length)for(var p=c?0:f,m=c?e.aoData.length:h,g=p;g",{class:l?i[0]:""}).append(t("",{valign:"top",colSpan:U(e),class:e.oClasses.sRowEmpty}).html(w))[0]}pe(e,"aoHeaderCallback","header",[t(e.nTHead).children("tr")[0],tt(e),f,h,u]),pe(e,"aoFooterCallback","footer",[t(e.nTFoot).children("tr")[0],tt(e),f,h,u]);var T=t(e.nTBody);T.children().detach(),T.append(t(r)),pe(e,"aoDrawCallback","draw",[e]),e.bSorted=!1,e.bFiltered=!1,e.bDrawing=!1}else Ut(e,!1)}function ct(t,e){var n=t.oFeatures,s=n.bSort,o=n.bFilter;s&&Zt(t),o?_t(t,t.oPreviousSearch):t.aiDisplay=t.aiDisplayMaster.slice(),!0!==e&&(t._iDisplayStart=0),t._drawHold=e,dt(t),t._drawHold=!1}function ut(e){var n=e.oClasses,s=t(e.nTable),o=t("
").insertBefore(s),r=e.oFeatures,a=t("
",{id:e.sTableId+"_wrapper",class:n.sWrapper+(e.nTFoot?"":" "+n.sNoFooter)});e.nHolding=o[0],e.nTableWrapper=a[0],e.nTableReinsertBefore=e.nTable.nextSibling;for(var i,d,c,u,f,h,p=e.sDom.split(""),m=0;m")[0],"'"==(u=p[m+1])||'"'==u){for(f="",h=2;p[m+h]!=u;)f+=p[m+h],h++;if("H"==f?f=n.sJUIHeader:"F"==f&&(f=n.sJUIFooter),-1!=f.indexOf(".")){var g=f.split(".");c.id=g[0].substr(1,g[0].length-1),c.className=g[1]}else"#"==f.charAt(0)?c.id=f.substr(1,f.length-1):c.className=f;m+=h}a.append(c),a=t(c)}else if(">"==d)a=a.parent();else if("l"==d&&r.bPaginate&&r.bLengthChange)i=Ot(e);else if("f"==d&&r.bFilter)i=yt(e);else if("r"==d&&r.bProcessing)i=Wt(e);else if("t"==d)i=Et(e);else if("i"==d&&r.bInfo)i=Lt(e);else if("p"==d&&r.bPaginate)i=Mt(e);else if(0!==l.ext.feature.length)for(var b=l.ext.feature,v=0,y=b.length;v',d=r.sSearch;d=d.match(/_INPUT_/)?d.replace("_INPUT_",l):d+l;var c=t("
",{id:i.f?null:o+"_filter",class:s.sFilter}).append(t("
").addClass(n.sLength);return e.aanFeatures.l||(u[0].id=s+"_length"),u.children().append(e.oLanguage.sLengthMenu.replace("_MENU_",l[0].outerHTML)),t("select",u).val(e._iDisplayLength).on("change.DT",(function(n){Nt(e,t(this).val()),dt(e)})),t(e.nTable).on("length.dt.DT",(function(n,s,o){e===s&&t("select",u).val(o)})),u[0]}function Mt(e){var n=e.sPaginationType,s=l.ext.pager[n],o="function"==typeof s,r=function(t){dt(t)},a=t("
").addClass(e.oClasses.sPaging+n)[0],i=e.aanFeatures;return o||s.fnInit(e,a,r),i.p||(a.id=e.sTableId+"_paginate",e.aoDrawCallback.push({fn:function(t){if(o){var e,n,a=t._iDisplayStart,l=t._iDisplayLength,d=t.fnRecordsDisplay(),c=-1===l,u=c?0:Math.ceil(a/l),f=c?1:Math.ceil(d/l),h=s(u,f);for(e=0,n=i.p.length;er&&(s=0):"first"==e?s=0:"previous"==e?(s=o>=0?s-o:0)<0&&(s=0):"next"==e?s+o",{id:e.aanFeatures.r?null:e.sTableId+"_processing",class:e.oClasses.sProcessing,role:"status"}).html(e.oLanguage.sProcessing).append("
").insertBefore(e.nTable)[0]}function Ut(e,n){e.oFeatures.bProcessing&&t(e.aanFeatures.r).css("display",n?"block":"none"),pe(e,null,"processing",[e,n])}function Et(e){var n=t(e.nTable),s=e.oScroll;if(""===s.sX&&""===s.sY)return e.nTable;var o=s.sX,r=s.sY,a=e.oClasses,i=n.children("caption"),l=i.length?i[0]._captionSide:null,d=t(n[0].cloneNode(!1)),c=t(n[0].cloneNode(!1)),u=n.children("tfoot"),f="
",h=function(t){return t?Qt(t):null};u.length||(u=null);var p=t(f,{class:a.sScrollWrapper}).append(t(f,{class:a.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:o?h(o):"100%"}).append(t(f,{class:a.sScrollHeadInner}).css({"box-sizing":"content-box",width:s.sXInner||"100%"}).append(d.removeAttr("id").css("margin-left",0).append("top"===l?i:null).append(n.children("thead"))))).append(t(f,{class:a.sScrollBody}).css({position:"relative",overflow:"auto",width:h(o)}).append(n));u&&p.append(t(f,{class:a.sScrollFoot}).css({overflow:"hidden",border:0,width:o?h(o):"100%"}).append(t(f,{class:a.sScrollFootInner}).append(c.removeAttr("id").css("margin-left",0).append("bottom"===l?i:null).append(n.children("tfoot")))));var m=p.children(),g=m[0],b=m[1],v=u?m[2]:null;return o&&t(b).on("scroll.DT",(function(t){var e=this.scrollLeft;g.scrollLeft=e,u&&(v.scrollLeft=e)})),t(b).css("max-height",r),s.bCollapse||t(b).css("height",r),e.nScrollHead=g,e.nScrollBody=b,e.nScrollFoot=v,e.aoDrawCallback.push({fn:qt,sName:"scrolling"}),p[0]}function qt(n){var o,r,a,i,l,d,c,u,f,h=n.oScroll,p=h.sX,m=h.sXInner,g=h.sY,b=h.iBarWidth,v=t(n.nScrollHead),y=v[0].style,w=v.children("div"),T=w[0].style,C=w.children("table"),S=n.nScrollBody,x=t(S),D=S.style,A=t(n.nScrollFoot).children("div"),I=A.children("table"),R=t(n.nTHead),F=t(n.nTable),L=F[0],k=L.style,P=n.nTFoot?t(n.nTFoot):null,H=n.oBrowser,j=H.bScrollOversize,N=(_(n.aoColumns,"nTh"),[]),O=[],W=[],U=[],E=function(t){var e=t.style;e.paddingTop="0",e.paddingBottom="0",e.borderTopWidth="0",e.borderBottomWidth="0",e.height=0},q=S.scrollHeight>S.clientHeight;if(n.scrollBarVis!==q&&n.scrollBarVis!==s)return n.scrollBarVis=q,void M(n);n.scrollBarVis=q,F.children("thead, tfoot").remove(),P&&(d=P.clone().prependTo(F),r=P.find("tr"),i=d.find("tr"),d.find("[id]").removeAttr("id")),l=R.clone().prependTo(F),o=R.find("tr"),a=l.find("tr"),l.find("th, td").removeAttr("tabindex"),l.find("[id]").removeAttr("id"),p||(D.width="100%",v[0].style.width="100%"),t.each(ht(n,l),(function(t,e){c=B(n,t),e.style.width=n.aoColumns[c].sWidth})),P&&Vt((function(t){t.style.width=""}),i),f=F.outerWidth(),""===p?(k.width="100%",j&&(F.find("tbody").height()>S.offsetHeight||"scroll"==x.css("overflow-y"))&&(k.width=Qt(F.outerWidth()-b)),f=F.outerWidth()):""!==m&&(k.width=Qt(m),f=F.outerWidth()),Vt(E,a),Vt((function(n){var s=e.getComputedStyle?e.getComputedStyle(n).width:Qt(t(n).width());W.push(n.innerHTML),N.push(s)}),a),Vt((function(t,e){t.style.width=N[e]}),o),t(a).css("height",0),P&&(Vt(E,i),Vt((function(e){U.push(e.innerHTML),O.push(Qt(t(e).css("width")))}),i),Vt((function(t,e){t.style.width=O[e]}),r),t(i).height(0)),Vt((function(t,e){t.innerHTML='
'+W[e]+"
",t.childNodes[0].style.height="0",t.childNodes[0].style.overflow="hidden",t.style.width=N[e]}),a),P&&Vt((function(t,e){t.innerHTML='
'+U[e]+"
",t.childNodes[0].style.height="0",t.childNodes[0].style.overflow="hidden",t.style.width=O[e]}),i),Math.round(F.outerWidth())S.offsetHeight||"scroll"==x.css("overflow-y")?f+b:f,j&&(S.scrollHeight>S.offsetHeight||"scroll"==x.css("overflow-y"))&&(k.width=Qt(u-b)),""!==p&&""===m||de(n,1,"Possible column misalignment",6)):u="100%",D.width=Qt(u),y.width=Qt(u),P&&(n.nScrollFoot.style.width=Qt(u)),g||j&&(D.height=Qt(L.offsetHeight+b));var V=F.outerWidth();C[0].style.width=Qt(V),T.width=Qt(V);var z=F.height()>S.clientHeight||"scroll"==x.css("overflow-y"),Y="padding"+(H.bScrollbarLeft?"Left":"Right");T[Y]=z?b+"px":"0px",P&&(I[0].style.width=Qt(V),A[0].style.width=Qt(V),A[0].style[Y]=z?b+"px":"0px"),F.children("colgroup").insertBefore(F.children("thead")),x.trigger("scroll"),!n.bSorted&&!n.bFiltered||n._drawHold||(S.scrollTop=0)}function Vt(t,e,n){for(var s,o,r=0,a=0,i=e.length;a/g;function Yt(n){var s,o,r,a=n.nTable,i=n.aoColumns,l=n.oScroll,d=l.sY,c=l.sX,u=l.sXInner,f=i.length,h=E(n,"bVisible"),p=t("th",n.nTHead),m=a.getAttribute("width"),g=a.parentNode,b=!1,v=n.oBrowser,y=v.bScrollOversize,w=a.style.width;w&&-1!==w.indexOf("%")&&(m=w);var T=Jt(_(i,"sWidthOrig"),g);for(s=0;s").appendTo(S.find("tbody"));for(S.find("thead, tfoot").remove(),S.append(t(n.nTHead).clone()).append(t(n.nTFoot).clone()),S.find("tfoot th, tfoot td").css("width",""),p=ht(n,S.find("thead")[0]),s=0;s").css({width:o.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(n.aoData.length)for(s=0;s").css(c||d?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(S).appendTo(g);c&&u?S.width(u):c?(S.css("width","auto"),S.removeAttr("width"),S.width()").css("width",Qt(e[a])).appendTo(s||n.body)):o.push(null);for(a=0;a").html(X(e,s,n,"display"))[0]}function Gt(t,e){for(var n,s=-1,o=-1,r=0,a=t.aoData.length;rs&&(s=n.length,o=r);return o}function Qt(t){return null===t?"0px":"number"==typeof t?t<0?"0px":t+"px":t.match(/\d$/)?t+"px":t}function Kt(e){var n,o,r,a,i,d,c,u=[],f=e.aoColumns,h=e.aaSortingFixed,p=t.isPlainObject(h),m=[],g=function(e){e.length&&!Array.isArray(e[0])?m.push(e):t.merge(m,e)};for(Array.isArray(h)&&g(h),p&&h.pre&&g(h.pre),g(e.aaSorting),p&&h.post&&g(h.post),n=0;ns?1:0))return"asc"===l.dir?i:-i;return(n=a[t])<(s=a[e])?-1:n>s?1:0})):u.sort((function(t,e){var n,s,o,l,c,u=r.length,f=d[t]._aSortData,h=d[e]._aSortData;for(o=0;os?1:0}))}t.bSorted=!0}function te(t){for(var e,n,s=t.aoColumns,o=Kt(t),r=t.oLanguage.oAria,a=0,i=s.length;a/g,""),u=l.nTh;u.removeAttribute("aria-sort"),l.bSortable?(o.length>0&&o[0].col==a?(u.setAttribute("aria-sort","asc"==o[0].dir?"ascending":"descending"),n=d[o[0].index+1]||d[0]):n=d[0],e=c+("asc"===n?r.sSortAscending:r.sSortDescending)):e=c,u.setAttribute("aria-label",e)}}function ee(e,n,o,r){var a,i=e.aoColumns[n],l=e.aaSorting,d=i.asSorting,c=function(e,n){var o=e._idx;return o===s&&(o=t.inArray(e[1],d)),o+10&&n.time<+new Date-1e3*u)return e._bLoadingState=!1,void o();if(n.columns&&i.length!==n.columns.length)return e._bLoadingState=!1,void o();if(e.oLoadedState=t.extend(!0,{},n),n.length!==s&&(d?d.page.len(n.length):e._iDisplayLength=n.length),n.start!==s&&(null===d?(e._iDisplayStart=n.start,e.iInitDisplayStart=n.start):Bt(e,n.start/e._iDisplayLength)),n.order!==s&&(e.aaSorting=[],t.each(n.order,(function(t,n){e.aaSorting.push(n[0]>=i.length?[0,n[1]]:n)}))),n.search!==s&&t.extend(e.oPreviousSearch,Ft(n.search)),n.columns){for(r=0,a=n.columns.length;r=n&&(e=n-s),e-=e%s,(-1===s||e<0)&&(e=0),t._iDisplayStart=e}function ge(e,n){var s=e.renderer,o=l.ext.renderer[n];return t.isPlainObject(s)&&s[n]?o[s[n]]||o._:"string"==typeof s&&o[s]||o._}function be(t){return t.oFeatures.bServerSide?"ssp":t.ajax||t.sAjaxSource?"ajax":"dom"}var ve=[],ye=Array.prototype;r=function(e,n){if(!(this instanceof r))return new r(e,n);var s=[],o=function(e){var n=function(e){var n,s,o=l.settings,r=t.map(o,(function(t,e){return t.nTable}));return e?e.nTable&&e.oApi?[e]:e.nodeName&&"table"===e.nodeName.toLowerCase()?-1!==(n=t.inArray(e,r))?[o[n]]:null:e&&"function"==typeof e.settings?e.settings().toArray():("string"==typeof e?s=t(e):e instanceof t&&(s=e),s?s.map((function(e){return-1!==(n=t.inArray(this,r))?o[n]:null})).toArray():void 0):[]}(e);n&&s.push.apply(s,n)};if(Array.isArray(e))for(var a=0,i=e.length;at?new r(e[t],this[t]):null},filter:function(t){var e=[];if(ye.filter)e=ye.filter.call(this,t,this);else for(var n=0,s=this.length;n0)return t[0].json})),a("ajax.params()",(function(){var t=this.context;if(t.length>0)return t[0].oAjaxData})),a("ajax.reload()",(function(t,e){return this.iterator("table",(function(n){we(n,!1===e,t)}))})),a("ajax.url()",(function(e){var n=this.context;return e===s?0===n.length?s:(n=n[0]).ajax?t.isPlainObject(n.ajax)?n.ajax.url:n.ajax:n.sAjaxSource:this.iterator("table",(function(n){t.isPlainObject(n.ajax)?n.ajax.url=e:n.ajax=e}))})),a("ajax.url().load()",(function(t,e){return this.iterator("table",(function(n){we(n,!1===e,t)}))}));var Te=function(t,e,n,r,a){var i,l,d,c,u,f,h=[],p=typeof e;for(e&&"string"!==p&&"function"!==p&&e.length!==s||(e=[e]),d=0,c=e.length;d0)return t[0]=t[e],t[0].length=1,t.length=1,t.context=[t.context[e]],t;return t.length=0,t},xe=function(e,n){var s,o=[],r=e.aiDisplay,a=e.aiDisplayMaster,i=n.search,l=n.order,d=n.page;if("ssp"==be(e))return"removed"===i?[]:T(0,a.length);if("current"==d)for(u=e._iDisplayStart,f=e.fnDisplayEnd();u=0&&"applied"==i)&&o.push(u);return o};a("rows()",(function(e,n){e===s?e="":t.isPlainObject(e)&&(n=e,e=""),n=Ce(n);var o=this.iterator("table",(function(o){return function(e,n,o){var r;return Te("row",n,(function(n){var a=g(n),i=e.aoData;if(null!==a&&!o)return[a];if(r||(r=xe(e,o)),null!==a&&-1!==t.inArray(a,r))return[a];if(null===n||n===s||""===n)return r;if("function"==typeof n)return t.map(r,(function(t){var e=i[t];return n(t,e._aData,e.nTr)?t:null}));if(n.nodeName){var l=n._DT_RowIndex,d=n._DT_CellIndex;if(l!==s)return i[l]&&i[l].nTr===n?[l]:[];if(d)return i[d.row]&&i[d.row].nTr===n.parentNode?[d.row]:[];var c=t(n).closest("*[data-dt-row]");return c.length?[c.data("dt-row")]:[]}if("string"==typeof n&&"#"===n.charAt(0)){var u=e.aIds[n.replace(/^#/,"")];if(u!==s)return[u.idx]}var f=C(w(e.aoData,r,"nTr"));return t(f).filter(n).map((function(){return this._DT_RowIndex})).toArray()}),e,o)}(o,e,n)}),1);return o.selector.rows=e,o.selector.opts=n,o})),a("rows().nodes()",(function(){return this.iterator("row",(function(t,e){return t.aoData[e].nTr||s}),1)})),a("rows().data()",(function(){return this.iterator(!0,"rows",(function(t,e){return w(t.aoData,e,"_aData")}),1)})),i("rows().cache()","row().cache()",(function(t){return this.iterator("row",(function(e,n){var s=e.aoData[n];return"search"===t?s._aFilterData:s._aSortData}),1)})),i("rows().invalidate()","row().invalidate()",(function(t){return this.iterator("row",(function(e,n){st(e,n,t)}))})),i("rows().indexes()","row().index()",(function(){return this.iterator("row",(function(t,e){return e}),1)})),i("rows().ids()","row().id()",(function(t){for(var e=[],n=this.context,s=0,o=n.length;s0&&e._iRecordsDisplay--,me(e);var h=e.rowIdFn(f._aData);h!==s&&delete e.aIds[h]})),this.iterator("table",(function(t){for(var e=0,n=t.aoData.length;e0&&(n.on(o,(function(t,s){e===s&&n.rows({page:"current"}).eq(0).each((function(t){var e=l[t];e._detailsShow&&e._details.insertAfter(e.nTr)}))})),n.on(a,(function(n,s,o,r){if(e===s)for(var a,i=U(s),d=0,c=l.length;d").addClass(s);t("td",l).addClass(s).html(n)[0].colSpan=U(e),r.push(l[0])}};a(s,o),n._details&&n._details.detach(),n._details=t(r),n._detailsShow&&n._details.insertAfter(n.nTr)}(o[0],o[0].aoData[this[0]],e,n),this)})),a([Fe+".show()",Le+".show()"],(function(t){return Ie(this,!0),this})),a([Fe+".hide()",Le+".hide()"],(function(){return Ie(this,!1),this})),a([Fe+".remove()",Le+".remove()"],(function(){return Ae(this),this})),a(Fe+".isShown()",(function(){var t=this.context;return t.length&&this.length&&t[0].aoData[this[0]]._detailsShow||!1}));var ke=/^([^:]+):(name|visIdx|visible)$/,Pe=function(t,e,n,s,o){for(var r=[],a=0,i=o.length;a=0?i:o.length+i];if("function"==typeof n){var l=xe(e,s);return t.map(o,(function(t,s){return n(s,Pe(e,s,0,0,l),a[s])?s:null}))}var d="string"==typeof n?n.match(ke):"";if(d)switch(d[2]){case"visIdx":case"visible":var c=parseInt(d[1],10);if(c<0){var u=t.map(o,(function(t,e){return t.bVisible?e:null}));return[u[u.length+c]]}return[B(e,c)];case"name":return t.map(r,(function(t,e){return t===d[1]?e:null}));default:return[]}if(n.nodeName&&n._DT_CellIndex)return[n._DT_CellIndex.column];var f=t(a).filter(n).map((function(){return t.inArray(this,a)})).toArray();if(f.length||!n.nodeName)return f;var h=t(n).closest("*[data-dt-column]");return h.length?[h.data("dt-column")]:[]}),e,s)}(s,e,n)}),1);return o.selector.cols=e,o.selector.opts=n,o})),i("columns().header()","column().header()",(function(t,e){return this.iterator("column",(function(t,e){return t.aoColumns[e].nTh}),1)})),i("columns().footer()","column().footer()",(function(t,e){return this.iterator("column",(function(t,e){return t.aoColumns[e].nTf}),1)})),i("columns().data()","column().data()",(function(){return this.iterator("column-rows",Pe,1)})),i("columns().dataSrc()","column().dataSrc()",(function(){return this.iterator("column",(function(t,e){return t.aoColumns[e].mData}),1)})),i("columns().cache()","column().cache()",(function(t){return this.iterator("column-rows",(function(e,n,s,o,r){return w(e.aoData,r,"search"===t?"_aFilterData":"_aSortData",n)}),1)})),i("columns().nodes()","column().nodes()",(function(){return this.iterator("column-rows",(function(t,e,n,s,o){return w(t.aoData,o,"anCells",e)}),1)})),i("columns().visible()","column().visible()",(function(e,n){var o=this,r=this.iterator("column",(function(n,o){if(e===s)return n.aoColumns[o].bVisible;!function(e,n,o){var r,a,i,l,d=e.aoColumns,c=d[n],u=e.aoData;if(o===s)return c.bVisible;if(c.bVisible!==o){if(o){var f=t.inArray(!0,_(d,"bVisible"),n+1);for(a=0,i=u.length;an;return!0},l.isDataTable=l.fnIsDataTable=function(e){var n=t(e).get(0),s=!1;return e instanceof l.Api||(t.each(l.settings,(function(e,o){var r=o.nScrollHead?t("table",o.nScrollHead)[0]:null,a=o.nScrollFoot?t("table",o.nScrollFoot)[0]:null;o.nTable!==n&&r!==n&&a!==n||(s=!0)})),s)},l.tables=l.fnTables=function(e){var n=!1;t.isPlainObject(e)&&(n=e.api,e=e.visible);var s=t.map(l.settings,(function(n){if(!e||e&&t(n.nTable).is(":visible"))return n.nTable}));return n?new r(s):s},l.camelToHungarian=R,a("$()",(function(e,n){var s=this.rows(n).nodes(),o=t(s);return t([].concat(o.filter(e).toArray(),o.find(e).toArray()))})),t.each(["on","one","off"],(function(e,n){a(n+"()",(function(){var e=Array.prototype.slice.call(arguments);e[0]=t.map(e[0].split(/\s/),(function(t){return t.match(/\.dt\b/)?t:t+".dt"})).join(" ");var s=t(this.tables().nodes());return s[n].apply(s,e),this}))})),a("clear()",(function(){return this.iterator("table",(function(t){et(t)}))})),a("settings()",(function(){return new r(this.context,this.context)})),a("init()",(function(){var t=this.context;return t.length?t[0].oInit:null})),a("data()",(function(){return this.iterator("table",(function(t){return _(t.aoData,"_aData")})).flatten()})),a("destroy()",(function(n){return n=n||!1,this.iterator("table",(function(s){var o,a=s.oClasses,i=s.nTable,d=s.nTBody,c=s.nTHead,u=s.nTFoot,f=t(i),h=t(d),p=t(s.nTableWrapper),m=t.map(s.aoData,(function(t){return t.nTr}));s.bDestroying=!0,pe(s,"aoDestroyCallback","destroy",[s]),n||new r(s).columns().visible(!0),p.off(".DT").find(":not(tbody *)").off(".DT"),t(e).off(".DT-"+s.sInstance),i!=c.parentNode&&(f.children("thead").detach(),f.append(c)),u&&i!=u.parentNode&&(f.children("tfoot").detach(),f.append(u)),s.aaSorting=[],s.aaSortingFixed=[],se(s),t(m).removeClass(s.asStripeClasses.join(" ")),t("th, td",c).removeClass(a.sSortable+" "+a.sSortableAsc+" "+a.sSortableDesc+" "+a.sSortableNone),h.children().detach(),h.append(m);var g=s.nTableWrapper.parentNode,b=n?"remove":"detach";f[b](),p[b](),!n&&g&&(g.insertBefore(i,s.nTableReinsertBefore),f.css("width",s.sDestroyWidth).removeClass(a.sTable),(o=s.asDestroyStripes.length)&&h.children().each((function(e){t(this).addClass(s.asDestroyStripes[e%o])})));var v=t.inArray(s,l.settings);-1!==v&&l.settings.splice(v,1)}))})),t.each(["column","row","cell"],(function(t,e){a(e+"s().every()",(function(t){var n=this.selector.opts,o=this;return this.iterator(e,(function(r,a,i,l,d){t.call(o[e](a,"cell"===e?i:n,"cell"===e?n:s),a,i,l,d)}))}))})),a("i18n()",(function(e,n,o){var r=this.context[0],a=K(e)(r.oLanguage);return a===s&&(a=n),o!==s&&t.isPlainObject(a)&&(a=a[o]!==s?a[o]:a._),"string"==typeof a?a.replace("%d",o):a})),l.version="1.13.7",l.settings=[],l.models={},l.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0,return:!1},l.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1},l.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null},l.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(t){try{return JSON.parse((-1===t.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+t.sInstance+"_"+location.pathname))}catch(t){return{}}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(t,e){try{(-1===t.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+t.sInstance+"_"+location.pathname,JSON.stringify(e))}catch(t){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:t.extend({},l.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"},I(l.defaults),l.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null},I(l.defaults.column),l.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,jqXHR:null,json:s,oAjaxData:s,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==be(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==be(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var t=this._iDisplayLength,e=this._iDisplayStart,n=e+t,s=this.aiDisplay.length,o=this.oFeatures,r=o.bPaginate;return o.bServerSide?!1===r||-1===t?e+s:Math.min(e+t,this._iRecordsDisplay):!r||n>s||-1===t?s:n},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null},l.ext=o={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:l.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:l.version},t.extend(o,{afnFiltering:o.search,aTypes:o.type.detect,ofnSearch:o.type.search,oSort:o.type.order,afnSortData:o.order,aoFeatures:o.feature,oApi:o.internal,oStdClasses:o.classes,oPagination:o.pager}),t.extend(l.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_desc_disabled",sSortableDesc:"sorting_asc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var He=l.ext.pager;function je(t,e){var n=[],s=He.numbers_length,o=Math.floor(s/2);return e<=s?n=T(0,e):t<=o?((n=T(0,s-2)).push("ellipsis"),n.push(e-1)):t>=e-1-o?((n=T(e-(s-2),e)).splice(0,0,"ellipsis"),n.splice(0,0,0)):((n=T(t-o+2,t+o-1)).push("ellipsis"),n.push(e-1),n.splice(0,0,"ellipsis"),n.splice(0,0,0)),n.DT_el="span",n}t.extend(He,{simple:function(t,e){return["previous","next"]},full:function(t,e){return["first","previous","next","last"]},numbers:function(t,e){return[je(t,e)]},simple_numbers:function(t,e){return["previous",je(t,e),"next"]},full_numbers:function(t,e){return["first","previous",je(t,e),"next","last"]},first_last_numbers:function(t,e){return["first",je(t,e),"last"]},_numbers:je,numbers_length:7}),t.extend(!0,l.ext.renderer,{pageButton:{_:function(e,o,r,a,i,l){var d,c,u,f=e.oClasses,h=e.oLanguage.oPaginate,p=e.oLanguage.oAria.paginate||{},m=function(n,s){var o,a,u,g=f.sPageButtonDisabled,b=function(t){Bt(e,t.data.action,!0)};for(o=0,a=s.length;o").appendTo(n);m(v,u)}else{var y=!1;switch(d=null,c=u,u){case"ellipsis":n.append('');break;case"first":d=h.sFirst,0===i&&(y=!0);break;case"previous":d=h.sPrevious,0===i&&(y=!0);break;case"next":d=h.sNext,0!==l&&i!==l-1||(y=!0);break;case"last":d=h.sLast,0!==l&&i!==l-1||(y=!0);break;default:d=e.fnFormatNumber(u+1),c=i===u?f.sPageButtonActive:""}if(null!==d){var _=e.oInit.pagingTag||"a";y&&(c+=" "+g),fe(t("<"+_+">",{class:f.sPageButton+" "+c,"aria-controls":e.sTableId,"aria-disabled":y?"true":null,"aria-label":p[u],role:"link","aria-current":c===f.sPageButtonActive?"page":null,"data-dt-idx":u,tabindex:y?-1:e.iTabIndex,id:0===r&&"string"==typeof u?e.sTableId+"_"+u:null}).html(d).appendTo(n),{action:u},b)}}};try{u=t(o).find(n.activeElement).data("dt-idx")}catch(t){}m(t(o).empty(),a),u!==s&&t(o).find("[data-dt-idx="+u+"]").trigger("focus")}}}),t.extend(l.ext.type.detect,[function(t,e){var n=e.oLanguage.sDecimal;return v(t,n)?"num"+n:null},function(t,e){if(t&&!(t instanceof Date)&&!f.test(t))return null;var n=Date.parse(t);return null!==n&&!isNaN(n)||m(t)?"date":null},function(t,e){var n=e.oLanguage.sDecimal;return v(t,n,!0)?"num-fmt"+n:null},function(t,e){var n=e.oLanguage.sDecimal;return y(t,n)?"html-num"+n:null},function(t,e){var n=e.oLanguage.sDecimal;return y(t,n,!0)?"html-num-fmt"+n:null},function(t,e){return m(t)||"string"==typeof t&&-1!==t.indexOf("<")?"html":null}]),t.extend(l.ext.type.search,{html:function(t){return m(t)?t:"string"==typeof t?t.replace(c," ").replace(u,""):""},string:function(t){return m(t)?t:"string"==typeof t?t.replace(c," "):t}});var Ne=function(t,e,n,s){if(0!==t&&(!t||"-"===t))return-1/0;var o=typeof t;return"number"===o||"bigint"===o?t:(e&&(t=b(t,e)),t.replace&&(n&&(t=t.replace(n,"")),s&&(t=t.replace(s,""))),1*t)};function Oe(e){t.each({num:function(t){return Ne(t,e)},"num-fmt":function(t){return Ne(t,e,p)},"html-num":function(t){return Ne(t,e,u)},"html-num-fmt":function(t){return Ne(t,e,u,p)}},(function(t,n){o.type.order[t+e+"-pre"]=n,t.match(/^html\-/)&&(o.type.search[t+e]=o.type.search.html)}))}t.extend(o.type.order,{"date-pre":function(t){var e=Date.parse(t);return isNaN(e)?-1/0:e},"html-pre":function(t){return m(t)?"":t.replace?t.replace(/<.*?>/g,"").toLowerCase():t+""},"string-pre":function(t){return m(t)?"":"string"==typeof t?t.toLowerCase():t.toString?t.toString():""},"string-asc":function(t,e){return te?1:0},"string-desc":function(t,e){return te?-1:0}}),Oe(""),t.extend(!0,l.ext.renderer,{header:{_:function(e,n,s,o){t(e.nTable).on("order.dt.DT",(function(t,r,a,i){if(e===r){var l=s.idx;n.removeClass(o.sSortAsc+" "+o.sSortDesc).addClass("asc"==i[l]?o.sSortAsc:"desc"==i[l]?o.sSortDesc:s.sSortingClass)}}))},jqueryui:function(e,n,s,o){t("
").addClass(o.sSortJUIWrapper).append(n.contents()).append(t("").addClass(o.sSortIcon+" "+s.sSortingClassJUI)).appendTo(n),t(e.nTable).on("order.dt.DT",(function(t,r,a,i){if(e===r){var l=s.idx;n.removeClass(o.sSortAsc+" "+o.sSortDesc).addClass("asc"==i[l]?o.sSortAsc:"desc"==i[l]?o.sSortDesc:s.sSortingClass),n.find("span."+o.sSortIcon).removeClass(o.sSortJUIAsc+" "+o.sSortJUIDesc+" "+o.sSortJUI+" "+o.sSortJUIAscAllowed+" "+o.sSortJUIDescAllowed).addClass("asc"==i[l]?o.sSortJUIAsc:"desc"==i[l]?o.sSortJUIDesc:s.sSortingClassJUI)}}))}}});var Me=function(t){return Array.isArray(t)&&(t=t.join(",")),"string"==typeof t?t.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""):t};function Be(t,n,s,o,r){return e.moment?t[n](r):e.luxon?t[s](r):o?t[o](r):t}var We=!1;function Ue(t,n,s){var o;if(e.moment){if(!(o=e.moment.utc(t,n,s,!0)).isValid())return null}else if(e.luxon){if(!(o=n&&"string"==typeof t?e.luxon.DateTime.fromFormat(t,n):e.luxon.DateTime.fromISO(t)).isValid)return null;o.setLocale(s)}else n?(We||alert("DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17"),We=!0):o=new Date(t);return o}function Ee(t){return function(e,n,o,r){0===arguments.length?(o="en",n=null,e=null):1===arguments.length?(o="en",n=e,e=null):2===arguments.length&&(o=n,n=e,e=null);var a="datetime-"+n;return l.ext.type.order[a]||(l.ext.type.detect.unshift((function(t){return t===a&&a})),l.ext.type.order[a+"-asc"]=function(t,e){var n=t.valueOf(),s=e.valueOf();return n===s?0:ns?-1:1}),function(i,l){if(null===i||i===s)if("--now"===r){var d=new Date;i=new Date(Date.UTC(d.getFullYear(),d.getMonth(),d.getDate(),d.getHours(),d.getMinutes(),d.getSeconds()))}else i="";if("type"===l)return a;if(""===i)return"sort"!==l?"":Ue("0000-01-01 00:00:00",null,o);if(null!==n&&e===n&&"sort"!==l&&"type"!==l&&!(i instanceof Date))return i;var c=Ue(i,e,o);if(null===c)return i;if("sort"===l)return c;var u=null===n?Be(c,"toDate","toJSDate","")[t]():Be(c,"format","toFormat","toISOString",n);return"display"===l?Me(u):u}}}var qe=",",Ve=".";if(e.Intl!==s)try{for(var ze=(new Intl.NumberFormat).formatToParts(100000.1),Ye=0;Ye<'col-sm-12 col-md-6'f>><'row dt-row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",renderer:"bootstrap"}),A.extend(r.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap5",sFilterInput:"form-control form-control-sm",sLengthSelect:"form-select form-select-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"}),r.ext.renderer.pageButton.bootstrap=function(t,i,o,s,a,c){var B,g,l,u=new r.Api(t),h=t.oClasses,w=t.oLanguage.oPaginate,f=t.oLanguage.oAria.paginate||{},E=function(e,n){var r,i,s,l,Q=function(t){t.preventDefault(),A(t.currentTarget).hasClass("disabled")||u.page()==t.data.action||u.page(t.data.action).draw("page")};for(r=0,i=n.length;r0?"":" disabled");break;case"previous":B=w.sPrevious,g=l+(a>0?"":" disabled");break;case"next":B=w.sNext,g=l+(a",{class:h.sPageButton+" "+g,id:0===o&&"string"==typeof l?t.sTableId+"_"+l:null}).append(A("",{href:d?null:"#","aria-controls":t.sTableId,"aria-disabled":d?"true":null,"aria-label":f[l],role:"link","aria-current":"active"===g?"page":null,"data-dt-idx":l,tabindex:d?-1:t.iTabIndex,class:"page-link"}).html(B)).appendTo(e),t.oApi._fnBindAction(s,{action:l},Q)}}},Q=A(i);try{l=Q.find(e.activeElement).data("dt-idx")}catch(A){}var d=Q.children("ul.pagination");d.length?d.empty():d=Q.html("