From d4fe9834a60132f118a1e8ee68e5221b28e10ccc Mon Sep 17 00:00:00 2001 From: Russ Handorf Date: Wed, 28 Dec 2022 23:10:25 -0500 Subject: [PATCH] dark mode and websockets --- logviewer/db.sqlite3 | Bin 0 -> 131072 bytes .../dbview/__pycache__/views.cpython-38.pyc | Bin 8767 -> 8762 bytes logviewer/dbview/views.py | 4 +- logviewer/eventbus/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 153 bytes .../__pycache__/consumers.cpython-38.pyc | Bin 0 -> 855 bytes .../__pycache__/routing.cpython-38.pyc | Bin 0 -> 341 bytes .../eventbus/__pycache__/urls.cpython-38.pyc | Bin 0 -> 284 bytes .../eventbus/__pycache__/views.cpython-38.pyc | Bin 0 -> 554 bytes logviewer/eventbus/consumers.py | 20 + logviewer/eventbus/routing.py | 7 + logviewer/eventbus/urls.py | 8 + logviewer/eventbus/views.py | 17 + .../logviewer/__pycache__/asgi.cpython-38.pyc | Bin 0 -> 901 bytes .../__pycache__/settings.cpython-38.pyc | Bin 2543 -> 2656 bytes .../logviewer/__pycache__/urls.cpython-38.pyc | Bin 2085 -> 2091 bytes logviewer/logviewer/asgi.py | 14 +- logviewer/logviewer/settings.py | 6 +- logviewer/logviewer/urls.py | 2 +- logviewer/logviewer/websocket.py | 18 + logviewer/static/adsb_map_panel.html | 611 ++++++++ logviewer/static/css/dark.css | 1315 +++++++++++++++++ .../static/css/dataTables.jqueryui.min.css | 1 + logviewer/static/css/datatables-dark.css | 577 ++++++++ logviewer/static/css/datatables.min.css | 33 + .../css/images/ui-icons_222222_256x240.png | Bin 0 -> 7077 bytes .../css/images/ui-icons_444444_256x240.png | Bin 6992 -> 7142 bytes .../css/images/ui-icons_4b8e0b_256x240.png | Bin 0 -> 4670 bytes .../css/images/ui-icons_555555_256x240.png | Bin 6988 -> 7126 bytes .../css/images/ui-icons_777620_256x240.png | Bin 4549 -> 4670 bytes .../css/images/ui-icons_777777_256x240.png | Bin 6999 -> 7163 bytes .../css/images/ui-icons_a83300_256x240.png | Bin 0 -> 4670 bytes .../css/images/ui-icons_cc0000_256x240.png | Bin 4549 -> 4670 bytes .../css/images/ui-icons_cccccc_256x240.png | Bin 0 -> 7086 bytes .../css/images/ui-icons_ffffff_256x240.png | Bin 6299 -> 6539 bytes logviewer/static/css/jquery.kismet.gps.css | 15 +- .../static/css/jquery.kismet.messagebus.css | 13 +- logviewer/static/css/kismet-dark.css | 285 ++++ logviewer/static/css/kismet.css | 17 +- logviewer/static/css/kismet.ui.base.css | 8 + logviewer/static/css/layout-default-1.4.0.css | 4 +- logviewer/static/css/layout.css | 60 +- logviewer/static/css/light.css | 1315 +++++++++++++++++ logviewer/static/css/text.css | 2 +- logviewer/static/js/chart.umd.js | 14 + logviewer/static/js/chart.umd.js.map | 0 .../static/js/dataTables.jqueryui.min.js | 4 + logviewer/static/js/dataTables.pageResize.js | 245 ++- .../static/js/dataTables.scrollResize.min.js | 27 + logviewer/static/js/datatables.min.js | 106 ++ .../static/js/jquery.kismet.channeldisplay.js | 5 +- .../static/js/jquery.kismet.packetrate.js | 16 + logviewer/static/js/kismet.ui.alerts.js | 52 +- logviewer/static/js/kismet.ui.base.js | 141 +- logviewer/static/js/kismet.ui.datasources.js | 6 +- logviewer/static/js/kismet.ui.dot11.js | 344 +++-- logviewer/static/js/kismet.ui.gadgets.js | 2 + logviewer/static/js/kismet.ui.js | 36 +- logviewer/static/js/kismet.ui.theme.js | 92 ++ logviewer/static/js/kismet.utils.js | 121 +- logviewer/templates/eventbus.html | 1 + logviewer/templates/index.html | 38 +- 62 files changed, 5216 insertions(+), 386 deletions(-) create mode 100644 logviewer/eventbus/__init__.py create mode 100644 logviewer/eventbus/__pycache__/__init__.cpython-38.pyc create mode 100644 logviewer/eventbus/__pycache__/consumers.cpython-38.pyc create mode 100644 logviewer/eventbus/__pycache__/routing.cpython-38.pyc create mode 100644 logviewer/eventbus/__pycache__/urls.cpython-38.pyc create mode 100644 logviewer/eventbus/__pycache__/views.cpython-38.pyc create mode 100644 logviewer/eventbus/consumers.py create mode 100644 logviewer/eventbus/routing.py create mode 100644 logviewer/eventbus/urls.py create mode 100644 logviewer/eventbus/views.py create mode 100644 logviewer/logviewer/__pycache__/asgi.cpython-38.pyc create mode 100644 logviewer/logviewer/websocket.py create mode 100644 logviewer/static/adsb_map_panel.html create mode 100644 logviewer/static/css/dark.css create mode 100644 logviewer/static/css/dataTables.jqueryui.min.css create mode 100644 logviewer/static/css/datatables-dark.css create mode 100644 logviewer/static/css/datatables.min.css create mode 100644 logviewer/static/css/images/ui-icons_222222_256x240.png create mode 100644 logviewer/static/css/images/ui-icons_4b8e0b_256x240.png create mode 100644 logviewer/static/css/images/ui-icons_a83300_256x240.png create mode 100644 logviewer/static/css/images/ui-icons_cccccc_256x240.png create mode 100644 logviewer/static/css/kismet-dark.css create mode 100644 logviewer/static/css/light.css create mode 100644 logviewer/static/js/chart.umd.js create mode 100644 logviewer/static/js/chart.umd.js.map create mode 100644 logviewer/static/js/dataTables.jqueryui.min.js create mode 100644 logviewer/static/js/dataTables.scrollResize.min.js create mode 100644 logviewer/static/js/datatables.min.js create mode 100644 logviewer/static/js/kismet.ui.theme.js create mode 100644 logviewer/templates/eventbus.html diff --git a/logviewer/db.sqlite3 b/logviewer/db.sqlite3 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..57fa7cc46cf363ba10364c0a5c663ab4f6ed6eba 100644 GIT binary patch literal 131072 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 literal 0 HcmV?d00001 diff --git a/logviewer/dbview/__pycache__/views.cpython-38.pyc b/logviewer/dbview/__pycache__/views.cpython-38.pyc index 33366f46412a52737406f5fa9fc1aba764d1df5d..0c4f6fb478dd772fa8f8dd3ab21673964212e5dc 100644 GIT binary patch delta 873 zcmZuw&rcIU6rP!Ox7%$O1PP^E3Ty!>a*;%1^n#csBpfv$tbhuy{-FHob``~0Q44y) z6y{*!2@FRsQsTjji6$J;qyK`OJb2>d+cB(?xRcGi{l53!eEYrKPq~jdW5_Ucg4fQ6 zcT=TxBTX09dj>m0GrFw}1LZuOsAklDy4*yGzj!_N=~`t;;?<9mIW|Hn;o=|knvcRrg18}G2VsoyF4F{o z(FA6@VXWM%PUZ$Roync)yLtb?*y3}PbE)F7TV*)!j$&NP? zM7&bcCzawaUK1#)!T6@gY1Z;Btc^HVWbI^`V*eyec_vTh$oQU@;wJQ?CKGo^5T1g3 zlAz8GAA{RoGa`3T|6Qq|@(*%PB5z?j$SFu<7iI!vw!m^Id=KUVXkI3LhlKzsO5{Ky zCOFcxX8CGT1PUvOY_xUU#^}g!U#{zCy6UF7_19Vxtuv2VcOSb)90#p^@Ly{eC4VTk zqdoMY_!e!i+vVxtoHWLdL|C_mmM~9qaCGqaSbvUq)M)_Ev!LJ0;5eh3`W8WRKaVl5 z-Rp28n;P%fqMpSqc#`y)ZLd|1V_7We7Y3f9)fwcTN$#wdBbNLCC<*9FY28MAs zSscs??p-_^3@KC5iax(84)v5Wh)-vP8SA7ks+VE|wbga=Wr)T^vgKTLsAZq34fsct zMnrep7uLwc&$icUA0pkgV$Hf7xAn#RWNCh?katVstJO>U1kIc>8!;nJPf+b>F^$EU H7Gd-^ec$Ks delta 909 zcmZuwOHUI~6ux)pOsCTqG$w7Q6xxDPU`3+wvEtE$#H9p;%0uDsD23V%e zC3m4=1%#D5(;Xo((S*1{{(y;Vcd{fdJaY|I66a=e&wSsx-#PQ0nS;#7jDOhgHwa#< zlY28$TmCp**y_F=cP$yq-mI4rP(fQKS>LP|+@P!at6+dYYP1M?y;|97d zPSxvluGXdX(X|96&SD`T(6OOJ2@lyGxLcu=jFEyeN~*5XA9mDXVJuAS2G#^FjPb6} zFoA5?Ipso)PUw203=u{a3EayoRn5gug0ampK6fHh*VTMkoIOTSp4-f{rr2ePqvQl}bLa}@l zfSW9edPh9QOz1-u6ZhFLVKJDC5>#$?Fqr4fh%Dgi<(vkscmE)Z5_u2#dd`wW4q>^D z6!J<2j~&CqI#iTN-=S1TEQy>-#Do>udb50S*#tIbi?pY8Vj83Kxj5}Uax!ggN8A1D zyot`57o2^J>Tauy&OiCD^G}i2Ek*2my6H1<;%RF-Wbt~PIL2k+GLplqG7t5EUC`%< zd#q-7&Xdr`Q#fs7$Gc0=+)v{QZ{zK@dq-#OyObwc64s&)v(H=QI9`adadYq`TAf1f zmE^ASG)sdED)I|kmsR&z3Px}^X&lT3?j0;$A5yBSmmL1JI5T4E9elbWOz&m7S?l!< z292yfl+P85xx##H)7)&JJ`rrWrm00MSFmdXEnle?!e3}5DqV?H fAj-*p@g>g`kf`;oWl0o!i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HWenx(7s(w*M zVqQvqQJQ{sW^rz6iEd7QdRb;_d1{e9f|Xj9npcukTC5)*pP83g5+AQuPfgc5S?8+i5n8}aX_eCIp70{#2G=Q3USM&LP$oHfQ+pkDHz`!TwLgR& zd*E;IBYfq=U*N>d#%ZILk#_vX`~3Fpj6aUYL!fy5EiZxOf_N6|p6*lK(*u%E+DGq~X#By#-KdiJn_$eUyR_Vh(mDKqD-dLS z53U9K>K97k+!Kl&R)^PM2gLjPZhG9*IJL)x(TzQvo|LXe|Eg+^mL;B|o!%ns986Vr zF*liiZwFKvRG!rwdjN6v?5^2KM^b^nBnrlCJecOTvsud^SWBht6K;p9Y8>XO(HP#Z zQWCaw={jW|>iYQS_m02i-E$Dphrz*90v^uAg%I36p~V#;_LR!mnf$z;%C5a*1R1#`gk|#Q$kdN1LVnHpz2S)R^b(Fwg5oFDk~PJpZ~V zs@0C&A|d;L(?d?&_>IJkv3x0Rp5v5=Bub+2E{)sxi)&1_t!Ur|D>pepgSJ$Y)Aes_ ac`kvyp&AYeJx|`OY`x{tg%Z~< literal 0 HcmV?d00001 diff --git a/logviewer/eventbus/__pycache__/routing.cpython-38.pyc b/logviewer/eventbus/__pycache__/routing.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7edebdaf3141eefbef62f146a4ee9b85550706a8 GIT binary patch literal 341 zcmYk1J5R$f5XWuDY09IhAn_qGkVwpckPs^iV#yMv@sXsB?aJpgf|V}=-aZfC%U2&ihT^|*UtD^}Qx8D|ZHc5Al`LbF2quCykUZm* z023VeJbWI#kSA8rEE3@@iAQU%BQbN4fqYrm+VO#FI&`VqDYe2*g2BflSb?&$4%1D7 zNsl-2*zJjVp(>qprbWZN$^;&cn9zr8dc750ZRfbCz`Ve!amPK(P?rm^x!3xo7L39- zVupt|_&QH(Eg>~^p@cT~>7qdi_N3L-s(~I%`j`D4XLM&9RVB*@H$IbEbS+#A&)~>o J%JzeU?;kZLVFCaE literal 0 HcmV?d00001 diff --git a/logviewer/eventbus/__pycache__/urls.cpython-38.pyc b/logviewer/eventbus/__pycache__/urls.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e5fd5b7e00a0cfd68f379814ee5694255739074 GIT binary patch literal 284 zcmYjLJ5s|i5S1*+WXR_pF0gurVK_k=hQ^)4ZfpmAGLoIZAvg#H7g9@=E6~6y6yeS6 z+kLa2w@=IEH6v_RpUCj{S-M33V9o7!ylsaDcD5?OKcLs!Vg(wXXB^6if^SjfZR>WTuiR z&8b7TMhq@~u#jIr)Az0Jy+s}R)`1UO{W3(0>Jha;9HNF8D5`MU1RGNC(9GWM$$N zI$@`LbmJsD{@b$slXKPS>wlrOPdudb`TUeTs+uu+9y4=%w8n;i~8L!=IE}dXr z>@mc!KrwRPiojVVuAtIa71gX3*RpzCU)VL#$o$w}=ylP|f;d>{Sgge@K;!n8b=F}1 zSByNUL2%`P4;83GYkX(ixkBZ`nxF9%iZ>YUd)?sjN6_ov%>7iyk?v=KE!9tFP~wccSD6?c0RJ38Qu37An0eM{4eE-p6TYh_ic#K}B| zV>Pj$i{|O^{!(>$TRkDv4A@&`tU1zr$mItrIHOi+7rr+Ho0P4RThkQ}w%_#*caM_( z&dJH%;ch=UINCnl-?`je(Ha`Cmdl}W7^>xjMRNw{Mx_^EyPHKLN!++eQeb7`b~>U` zf-oU?Mt1>evrU^t#-|xa00k z+VhDCuZtG`ji+dUoN}#X5jf-w26Q59+_?TPzQ1aaOti?Ubv#N_tlc8zo2NS^#8Uiz z;qEJgNV~z9(u3%Nn+)ue6+O}av=V5T&kO(Ma?f5NSIRteqT2Lv3w2NnwXl!Zs~A-g JM(cm^pMP;a8@d1h literal 0 HcmV?d00001 diff --git a/logviewer/logviewer/__pycache__/settings.cpython-38.pyc b/logviewer/logviewer/__pycache__/settings.cpython-38.pyc index 33105ddf3357aa2903e0084084d0f03eed62a3f7..9f4c0d58edd5d562498b0c204f6423aaac05aafa 100644 GIT binary patch delta 403 zcmZ`#OG^S#6rMYC)v;#M)T}gnXPG&*Y!}iZq?ce39D9nK8#`v<47PWxMY}k;(}2KDGFl}Q;v@5q=K0zRWcgJEap7TEav;X z(C4&df>Q*G6vYz7;G+=_ab#$B)Uz)q6)$ki(Jsbc65gGCRVj%$vV#3vzCsho!4fJB zVwF3$?lX/device.json', include('devices.urls')), path('devices/multikey/as-object/devices.json', include('dbview.urls')), path('datasource/by-uuid//source.json', include('devices.urls')), path('phy/phy80211/ssids/by-hash//ssid.json', include('devices.urls')), + path('eventbus/', include('eventbus.urls')), ] diff --git a/logviewer/logviewer/websocket.py b/logviewer/logviewer/websocket.py new file mode 100644 index 0000000..4124c3f --- /dev/null +++ b/logviewer/logviewer/websocket.py @@ -0,0 +1,18 @@ +async def websocket_application(scope, receive, send): + while True: + event = await receive() + + if event['type'] == 'websocket.connect': + await send({ + 'type': 'websocket.accept' + }) + + if event['type'] == 'websocket.disconnect': + break + + if event['type'] == 'websocket.receive': + isf event['text'] == 'ping': + await send({ + 'type': 'websocket.send', + 'text': 'pong!' + }) diff --git a/logviewer/static/adsb_map_panel.html b/logviewer/static/adsb_map_panel.html new file mode 100644 index 0000000..99ac302 --- /dev/null +++ b/logviewer/static/adsb_map_panel.html @@ -0,0 +1,611 @@ + + + + live adsb map + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Warning! +

To display the live ADSB map, your browser will connect to the Leaflet and Open Street Map servers to fetch the map tiles. This requires you have a functional Internet connection, and will reveal something about your location (the bounding region where planes have been seen.) +

Don't warn me again +

+

+
+
+
+
+
+
Altitude
+
+
+ + + + + diff --git a/logviewer/static/css/dark.css b/logviewer/static/css/dark.css new file mode 100644 index 0000000..08ea548 --- /dev/null +++ b/logviewer/static/css/dark.css @@ -0,0 +1,1315 @@ +/*! jQuery UI - v1.13.2 - 2022-12-17 +* http://jqueryui.com +* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=custom-theme&bgImgOpacityError=40&bgImgOpacityHighlight=80&bgImgOpacityActive=30&bgImgOpacityHover=40&bgImgOpacityDefault=20&bgImgOpacityContent=25&bgImgOpacityHeader=25&cornerRadiusShadow=8px&offsetLeftShadow=-7px&offsetTopShadow=-7px&thicknessShadow=7px&opacityShadow=60&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=%23cccccc&opacityOverlay=80&bgImgOpacityOverlay=50&bgTextureOverlay=flat&bgColorOverlay=%235c5c5c&iconColorError=%23a83300&fcError=%23111111&borderColorError=%23ffb73d&bgTextureError=flat&bgColorError=%23ffc73d&iconColorHighlight=%234b8e0b&fcHighlight=%232e7db2&borderColorHighlight=%23cccccc&bgTextureHighlight=flat&bgColorHighlight=%23eeeeee&iconColorActive=%23222222&fcActive=%23ffffff&borderColorActive=%23ffaf0f&bgTextureActive=flat&bgColorActive=%23f58400&iconColorHover=%23ffffff&fcHover=%23ffffff&borderColorHover=%2359b4d4&bgTextureHover=flat&bgColorHover=%230078a3&iconColorDefault=%23cccccc&fcDefault=%23eeeeee&borderColorDefault=%23666666&bgTextureDefault=flat&bgColorDefault=%23555555&iconColorContent=%23cccccc&fcContent=%23ffffff&borderColorContent=%23666666&bgTextureContent=flat&bgColorContent=%23222222&iconColorHeader=%23ffffff&fcHeader=%23ffffff&borderColorHeader=%23333333&bgTextureHeader=flat&bgColorHeader=%23333333&cornerRadius=0&fwDefault=bold&fsDefault=1.1em&ffDefault=Segoe%20UI%2CArial%2Csans-serif +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + -ms-filter: "alpha(opacity=0)"; /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; + pointer-events: none; +} + + +/* Icons +----------------------------------*/ +.ui-icon { + display: inline-block; + vertical-align: middle; + margin-top: -.25em; + position: relative; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + font-size: 100%; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px .4em; +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-button { + padding: .4em 1em; + display: inline-block; + position: relative; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + /* Support: IE <= 11 */ + overflow: visible; +} + +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} + +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; +} + +/* no icon support for input elements */ +input.ui-button.ui-button-icon-only { + text-indent: 0; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; +} + +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; + +} + +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; + padding: .4em 1em; +} + +/* workarounds */ +/* Support: Firefox 5 - 40 */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} +.ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,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"); + height: 100%; + -ms-filter: "alpha(opacity=25)"; /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: pointer; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + xfont-family: Segoe UI,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + xfont-family: Segoe UI,Arial,sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #666666; +} +.ui-widget-content { + border: 1px solid #666666; + background: #222222; + color: #ffffff; +} +.ui-widget-content a { + color: #ffffff; +} +.ui-widget-header { + border: 1px solid #333333; + background: #333333; + color: #ffffff; + font-weight: bold; +} +.ui-widget-header a { + color: #ffffff; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #666666; + background: #555555; + font-weight: bold; + color: #eeeeee; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #eeeeee; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #59b4d4; + background: #0078a3; + font-weight: bold; + color: #ffffff; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #ffffff; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #ffaf0f; + background: #f58400; + font-weight: bold; + color: #ffffff; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #ffaf0f; + background-color: #ffffff; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #ffffff; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #cccccc; + background: #eeeeee; + color: #2e7db2; +} +.ui-state-checked { + border: 1px solid #cccccc; + background: #eeeeee; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #2e7db2; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #ffb73d; + background: #ffc73d; + color: #111111; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #111111; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #111111; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + -ms-filter: "alpha(opacity=70)"; /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + -ms-filter: "alpha(opacity=35)"; /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + -ms-filter: "alpha(opacity=35)"; /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_cccccc_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_4b8e0b_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_a83300_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("images/ui-icons_cccccc_256x240.png"); +} + +/* positioning */ +/* Three classes needed to override `.ui-button:hover .ui-icon` */ +.ui-icon-blank.ui-icon-blank.ui-icon-blank { + background-image: none; +} +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 0; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 0; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 0; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 0; +} + +/* Overlays */ +.ui-widget-overlay { + background: #5c5c5c; + opacity: .8; + -ms-filter: Alpha(Opacity=80); /* support: IE8 */ +} +.ui-widget-shadow { + -webkit-box-shadow: -7px -7px 7px #cccccc; + box-shadow: -7px -7px 7px #cccccc; +} diff --git a/logviewer/static/css/dataTables.jqueryui.min.css b/logviewer/static/css/dataTables.jqueryui.min.css new file mode 100644 index 0000000..1538c46 --- /dev/null +++ b/logviewer/static/css/dataTables.jqueryui.min.css @@ -0,0 +1 @@ +table.dataTable td.dt-control{text-align:center;cursor:pointer}table.dataTable td.dt-control:before{height:1em;width:1em;margin-top:-9px;display:inline-block;color:white;border:.15em solid white;border-radius:1em;box-shadow:0 0 .2em #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:"Courier New",Courier,monospace;line-height:1em;content:"+";background-color:#31b131}table.dataTable tr.dt-hasChild td.dt-control:before{content:"-";background-color:#d33333}table.dataTable td.dt-control{text-align:center;cursor:pointer}table.dataTable td.dt-control:before{height:1em;width:1em;margin-top:-9px;display:inline-block;color:white;border:.15em solid white;border-radius:1em;box-shadow:0 0 .2em #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:"Courier New",Courier,monospace;line-height:1em;content:"+";background-color:#31b131}table.dataTable tr.dt-hasChild td.dt-control:before{content:"-";background-color:#d33333}table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting_asc_disabled,table.dataTable thead>tr>th.sorting_desc_disabled,table.dataTable thead>tr>td.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting_asc_disabled,table.dataTable thead>tr>td.sorting_desc_disabled{cursor:pointer;position:relative;padding-right:26px}table.dataTable thead>tr>th.sorting:before,table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:before,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>th.sorting_asc_disabled:after,table.dataTable thead>tr>th.sorting_desc_disabled:before,table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting:before,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:before,table.dataTable thead>tr>td.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_asc_disabled:after,table.dataTable thead>tr>td.sorting_desc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:after{position:absolute;display:block;opacity:.125;right:10px;line-height:9px;font-size:.8em}table.dataTable thead>tr>th.sorting:before,table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_desc:before,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>th.sorting_desc_disabled:before,table.dataTable thead>tr>td.sorting:before,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_desc:before,table.dataTable thead>tr>td.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:before{bottom:50%;content:"▲"}table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>th.sorting_asc_disabled:after,table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc_disabled:after,table.dataTable thead>tr>td.sorting_desc_disabled:after{top:50%;content:"▼"}table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_desc:after{opacity:.6}table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting_asc_disabled:before{display:none}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}div.dataTables_scrollBody table.dataTable thead>tr>th:before,div.dataTables_scrollBody table.dataTable thead>tr>th:after,div.dataTables_scrollBody table.dataTable thead>tr>td:before,div.dataTables_scrollBody table.dataTable thead>tr>td:after{display:none}div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:2px}div.dataTables_processing>div:last-child{position:relative;width:80px;height:15px;margin:1em auto}div.dataTables_processing>div:last-child>div{position:absolute;top:0;width:13px;height:13px;border-radius:50%;background:rgba(13, 110, 253, 0.9);animation-timing-function:cubic-bezier(0, 1, 1, 0)}div.dataTables_processing>div:last-child>div:nth-child(1){left:8px;animation:datatables-loader-1 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(2){left:8px;animation:datatables-loader-2 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(3){left:32px;animation:datatables-loader-2 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(4){left:56px;animation:datatables-loader-3 .6s infinite}@keyframes datatables-loader-1{0%{transform:scale(0)}100%{transform:scale(1)}}@keyframes datatables-loader-3{0%{transform:scale(1)}100%{transform:scale(0)}}@keyframes datatables-loader-2{0%{transform:translate(0, 0)}100%{transform:translate(24px, 0)}}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th,table.dataTable thead td,table.dataTable tfoot th,table.dataTable tfoot td{text-align:left}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 10px 6px 10px}table.dataTable tbody tr{background-color:transparent}table.dataTable tbody tr.selected>*{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.9);color:white}table.dataTable tbody tr.selected a{color:#090a0b}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid rgba(0, 0, 0, 0.15);border-right:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe>tbody>tr.odd>*,table.dataTable.display>tbody>tr.odd>*{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.023)}table.dataTable.stripe>tbody>tr.odd.selected>*,table.dataTable.display>tbody>tr.odd.selected>*{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.923)}table.dataTable.hover>tbody>tr:hover>*,table.dataTable.display>tbody>tr:hover>*{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.035)}table.dataTable.hover>tbody>tr.selected:hover>*,table.dataTable.display>tbody>tr.selected:hover>*{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.935)}table.dataTable.order-column>tbody tr>.sorting_1,table.dataTable.order-column>tbody tr>.sorting_2,table.dataTable.order-column>tbody tr>.sorting_3,table.dataTable.display>tbody tr>.sorting_1,table.dataTable.display>tbody tr>.sorting_2,table.dataTable.display>tbody tr>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.019)}table.dataTable.order-column>tbody tr.selected>.sorting_1,table.dataTable.order-column>tbody tr.selected>.sorting_2,table.dataTable.order-column>tbody tr.selected>.sorting_3,table.dataTable.display>tbody tr.selected>.sorting_1,table.dataTable.display>tbody tr.selected>.sorting_2,table.dataTable.display>tbody tr.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.919)}table.dataTable.display>tbody>tr.odd>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.054)}table.dataTable.display>tbody>tr.odd>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.047)}table.dataTable.display>tbody>tr.odd>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.039)}table.dataTable.display>tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.954)}table.dataTable.display>tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.947)}table.dataTable.display>tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.939)}table.dataTable.display>tbody>tr.even>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.019)}table.dataTable.display>tbody>tr.even>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.011)}table.dataTable.display>tbody>tr.even>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.003)}table.dataTable.display>tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.919)}table.dataTable.display>tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.911)}table.dataTable.display>tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.903)}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.082)}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.074)}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.062)}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.982)}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.974)}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.962)}table.dataTable.no-footer{border-bottom:1px solid rgba(0, 0, 0, 0.3)}table.dataTable.compact thead th,table.dataTable.compact thead td,table.dataTable.compact tfoot th,table.dataTable.compact tfoot td,table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_length select{border:1px solid #aaa;border-radius:3px;padding:5px;background-color:transparent;padding:4px}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{border:1px solid #aaa;border-radius:3px;padding:5px;background-color:transparent;margin-left:3px}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;color:inherit !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:inherit !important;border:1px solid rgba(0, 0, 0, 0.3);background-color:rgba(230, 230, 230, 0.1);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(230, 230, 230, 0.1)), color-stop(100%, rgba(0, 0, 0, 0.1)));background:-webkit-linear-gradient(top, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);background:-moz-linear-gradient(top, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);background:-ms-linear-gradient(top, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);background:-o-linear-gradient(top, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);background:linear-gradient(to bottom, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:inherit}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid rgba(0, 0, 0, 0.3)}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}table.dataTable thead th div.DataTables_sort_wrapper{position:relative}table.dataTable thead th div.DataTables_sort_wrapper span{position:absolute;top:50%;margin-top:-8px;right:-18px}table.dataTable thead th.ui-state-default,table.dataTable tfoot th.ui-state-default{border-left-width:0}table.dataTable thead th.ui-state-default:first-child,table.dataTable tfoot th.ui-state-default:first-child{border-left-width:1px}.dataTables_wrapper .dataTables_paginate .fg-button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;border:1px solid transparent}.dataTables_wrapper .dataTables_paginate .fg-button:active{outline:none}.dataTables_wrapper .dataTables_paginate .fg-button:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.dataTables_wrapper .dataTables_paginate .fg-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.dataTables_wrapper .ui-widget-header{font-weight:normal}.dataTables_wrapper .ui-toolbar{padding:8px}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:none}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:inherit} diff --git a/logviewer/static/css/datatables-dark.css b/logviewer/static/css/datatables-dark.css new file mode 100644 index 0000000..9eeddf1 --- /dev/null +++ b/logviewer/static/css/datatables-dark.css @@ -0,0 +1,577 @@ +@charset "UTF-8"; +table.dataTable td.dt-control { + text-align: center; + cursor: pointer; +} +table.dataTable td.dt-control:before { + height: 1em; + width: 1em; + margin-top: -9px; + display: inline-block; + color: white; + border: 0.15em solid white; + border-radius: 1em; + box-shadow: 0 0 0.2em #444; + box-sizing: content-box; + text-align: center; + text-indent: 0 !important; + font-family: "Courier New", Courier, monospace; + line-height: 1em; + content: "+"; + background-color: #31b131; +} +table.dataTable tr.dt-hasChild td.dt-control:before { + content: "-"; + background-color: #d33333; +} + +table.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting_asc_disabled, table.dataTable thead > tr > th.sorting_desc_disabled, +table.dataTable thead > tr > td.sorting, +table.dataTable thead > tr > td.sorting_asc, +table.dataTable thead > tr > td.sorting_desc, +table.dataTable thead > tr > td.sorting_asc_disabled, +table.dataTable thead > tr > td.sorting_desc_disabled { + cursor: pointer; + position: relative; + padding-right: 26px; +} +table.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:after, +table.dataTable thead > tr > td.sorting:before, +table.dataTable thead > tr > td.sorting:after, +table.dataTable thead > tr > td.sorting_asc:before, +table.dataTable thead > tr > td.sorting_asc:after, +table.dataTable thead > tr > td.sorting_desc:before, +table.dataTable thead > tr > td.sorting_desc:after, +table.dataTable thead > tr > td.sorting_asc_disabled:before, +table.dataTable thead > tr > td.sorting_asc_disabled:after, +table.dataTable thead > tr > td.sorting_desc_disabled:before, +table.dataTable thead > tr > td.sorting_desc_disabled:after { + position: absolute; + display: block; + opacity: 0.125; + right: 10px; + line-height: 9px; + font-size: 0.8em; +} +table.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:before, +table.dataTable thead > tr > td.sorting:before, +table.dataTable thead > tr > td.sorting_asc:before, +table.dataTable thead > tr > td.sorting_desc:before, +table.dataTable thead > tr > td.sorting_asc_disabled:before, +table.dataTable thead > tr > td.sorting_desc_disabled:before { + bottom: 50%; + content: "▲"; +} +table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after, +table.dataTable thead > tr > td.sorting:after, +table.dataTable thead > tr > td.sorting_asc:after, +table.dataTable thead > tr > td.sorting_desc:after, +table.dataTable thead > tr > td.sorting_asc_disabled:after, +table.dataTable thead > tr > td.sorting_desc_disabled:after { + top: 50%; + content: "▼"; +} +table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after, +table.dataTable thead > tr > td.sorting_asc:before, +table.dataTable thead > tr > td.sorting_desc:after { + opacity: 0.6; +} +table.dataTable thead > tr > th.sorting_desc_disabled:after, table.dataTable thead > tr > th.sorting_asc_disabled:before, +table.dataTable thead > tr > td.sorting_desc_disabled:after, +table.dataTable thead > tr > td.sorting_asc_disabled:before { + display: none; +} +table.dataTable thead > tr > th:active, +table.dataTable thead > tr > td:active { + outline: none; +} + +div.dataTables_scrollBody table.dataTable thead > tr > th:before, div.dataTables_scrollBody table.dataTable thead > tr > th:after, +div.dataTables_scrollBody table.dataTable thead > tr > td:before, +div.dataTables_scrollBody table.dataTable thead > tr > td:after { + display: none; +} + +div.dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 200px; + margin-left: -100px; + margin-top: -26px; + text-align: center; + padding: 2px; +} +div.dataTables_processing > div:last-child { + position: relative; + width: 80px; + height: 15px; + margin: 1em auto; +} +div.dataTables_processing > div:last-child > div { + position: absolute; + top: 0; + width: 13px; + height: 13px; + border-radius: 50%; + background: #555555; + animation-timing-function: cubic-bezier(0, 1, 1, 0); +} +div.dataTables_processing > div:last-child > div:nth-child(1) { + left: 8px; + animation: datatables-loader-1 0.6s infinite; +} +div.dataTables_processing > div:last-child > div:nth-child(2) { + left: 8px; + animation: datatables-loader-2 0.6s infinite; +} +div.dataTables_processing > div:last-child > div:nth-child(3) { + left: 32px; + animation: datatables-loader-2 0.6s infinite; +} +div.dataTables_processing > div:last-child > div:nth-child(4) { + left: 56px; + animation: datatables-loader-3 0.6s infinite; +} + +@keyframes datatables-loader-1 { + 0% { + transform: scale(0); + } + 100% { + transform: scale(1); + } +} +@keyframes datatables-loader-3 { + 0% { + transform: scale(1); + } + 100% { + transform: scale(0); + } +} +@keyframes datatables-loader-2 { + 0% { + transform: translate(0, 0); + } + 100% { + transform: translate(24px, 0); + } +} +table.dataTable.nowrap th, table.dataTable.nowrap td { + white-space: nowrap; +} +table.dataTable th.dt-left, +table.dataTable td.dt-left { + text-align: left; +} +table.dataTable th.dt-center, +table.dataTable td.dt-center, +table.dataTable td.dataTables_empty { + text-align: center; +} +table.dataTable th.dt-right, +table.dataTable td.dt-right { + text-align: right; +} +table.dataTable th.dt-justify, +table.dataTable td.dt-justify { + text-align: justify; +} +table.dataTable th.dt-nowrap, +table.dataTable td.dt-nowrap { + white-space: nowrap; +} +table.dataTable thead th, +table.dataTable thead td, +table.dataTable tfoot th, +table.dataTable tfoot td { + text-align: left; +} +table.dataTable thead th.dt-head-left, +table.dataTable thead td.dt-head-left, +table.dataTable tfoot th.dt-head-left, +table.dataTable tfoot td.dt-head-left { + text-align: left; +} +table.dataTable thead th.dt-head-center, +table.dataTable thead td.dt-head-center, +table.dataTable tfoot th.dt-head-center, +table.dataTable tfoot td.dt-head-center { + text-align: center; +} +table.dataTable thead th.dt-head-right, +table.dataTable thead td.dt-head-right, +table.dataTable tfoot th.dt-head-right, +table.dataTable tfoot td.dt-head-right { + text-align: right; +} +table.dataTable thead th.dt-head-justify, +table.dataTable thead td.dt-head-justify, +table.dataTable tfoot th.dt-head-justify, +table.dataTable tfoot td.dt-head-justify { + text-align: justify; +} +table.dataTable thead th.dt-head-nowrap, +table.dataTable thead td.dt-head-nowrap, +table.dataTable tfoot th.dt-head-nowrap, +table.dataTable tfoot td.dt-head-nowrap { + white-space: nowrap; +} +table.dataTable tbody th.dt-body-left, +table.dataTable tbody td.dt-body-left { + text-align: left; +} +table.dataTable tbody th.dt-body-center, +table.dataTable tbody td.dt-body-center { + text-align: center; +} +table.dataTable tbody th.dt-body-right, +table.dataTable tbody td.dt-body-right { + text-align: right; +} +table.dataTable tbody th.dt-body-justify, +table.dataTable tbody td.dt-body-justify { + text-align: justify; +} +table.dataTable tbody th.dt-body-nowrap, +table.dataTable tbody td.dt-body-nowrap { + white-space: nowrap; +} + +/* + * Table styles + */ +table.dataTable { + width: 100%; + margin: 0 auto; + clear: both; + border-collapse: separate; + border-spacing: 0; + /* + * Header and footer styles + */ + /* + * Body styles + */ +} +table.dataTable thead th, +table.dataTable tfoot th { + font-weight: bold; +} +table.dataTable thead th, +table.dataTable thead td { + padding: 10px; + border-bottom: 1px solid #303030; +} +table.dataTable thead th:active, +table.dataTable thead td:active { + outline: none; +} +table.dataTable tfoot th, +table.dataTable tfoot td { + padding: 10px 10px 6px 10px; + border-top: 1px solid #303030; +} +table.dataTable tbody tr { + background-color: #444444; +} +table.dataTable tbody tr.selected > * { + box-shadow: inset 0 0 0 9999px #555555; + color: white; +} +table.dataTable tbody tr.selected a { + color: #090a0b; +} +table.dataTable tbody th, +table.dataTable tbody td { + padding: 8px 10px; +} +table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { + border-top: 1px solid #3a3a3a; +} +table.dataTable.row-border tbody tr:first-child th, +table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, +table.dataTable.display tbody tr:first-child td { + border-top: none; +} +table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { + border-top: 1px solid #3a3a3a; + border-right: 1px solid #3a3a3a; +} +table.dataTable.cell-border tbody tr th:first-child, +table.dataTable.cell-border tbody tr td:first-child { + border-left: 1px solid #3a3a3a; +} +table.dataTable.cell-border tbody tr:first-child th, +table.dataTable.cell-border tbody tr:first-child td { + border-top: none; +} +table.dataTable.stripe > tbody > tr.odd > *, table.dataTable.display > tbody > tr.odd > * { + box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.023); +} +table.dataTable.stripe > tbody > tr.odd.selected > *, table.dataTable.display > tbody > tr.odd.selected > * { + box-shadow: inset 0 0 0 9999px #555555; +} +table.dataTable.hover > tbody > tr:hover > *, table.dataTable.display > tbody > tr:hover > * { + box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.035); +} +table.dataTable.hover > tbody > tr.selected:hover > *, table.dataTable.display > tbody > tr.selected:hover > * { + box-shadow: inset 0 0 0 9999px #555555; +} +table.dataTable.order-column > tbody tr > .sorting_1, +table.dataTable.order-column > tbody tr > .sorting_2, +table.dataTable.order-column > tbody tr > .sorting_3, table.dataTable.display > tbody tr > .sorting_1, +table.dataTable.display > tbody tr > .sorting_2, +table.dataTable.display > tbody tr > .sorting_3 { + box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.019); +} +table.dataTable.order-column > tbody tr.selected > .sorting_1, +table.dataTable.order-column > tbody tr.selected > .sorting_2, +table.dataTable.order-column > tbody tr.selected > .sorting_3, table.dataTable.display > tbody tr.selected > .sorting_1, +table.dataTable.display > tbody tr.selected > .sorting_2, +table.dataTable.display > tbody tr.selected > .sorting_3 { + box-shadow: inset 0 0 0 9999px #555555; +} +table.dataTable.display > tbody > tr.odd > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.odd > .sorting_1 { + box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.054); +} +table.dataTable.display > tbody > tr.odd > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.odd > .sorting_2 { + box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.047); +} +table.dataTable.display > tbody > tr.odd > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.odd > .sorting_3 { + box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.039); +} +table.dataTable.display > tbody > tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.odd.selected > .sorting_1 { + box-shadow: inset 0 0 0 9999px #555555; +} +table.dataTable.display > tbody > tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.odd.selected > .sorting_2 { + box-shadow: inset 0 0 0 9999px #555555; +} +table.dataTable.display > tbody > tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.odd.selected > .sorting_3 { + box-shadow: inset 0 0 0 9999px #555555; +} +table.dataTable.display > tbody > tr.even > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.even > .sorting_1 { + box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.019); +} +table.dataTable.display > tbody > tr.even > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.even > .sorting_2 { + box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.011); +} +table.dataTable.display > tbody > tr.even > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.even > .sorting_3 { + box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.003); +} +table.dataTable.display > tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.even.selected > .sorting_1 { + box-shadow: inset 0 0 0 9999px #555555; +} +table.dataTable.display > tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.even.selected > .sorting_2 { + box-shadow: inset 0 0 0 9999px #555555; +} +table.dataTable.display > tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.even.selected > .sorting_3 { + box-shadow: inset 0 0 0 9999px #555555; +} +table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 { + box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.082); +} +table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 { + box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.074); +} +table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 { + box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.062); +} +table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { + box-shadow: inset 0 0 0 9999px #555555; +} +table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { + box-shadow: inset 0 0 0 9999px #555555; +} +table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 { + box-shadow: inset 0 0 0 9999px #555555; +} +table.dataTable.no-footer { + border-bottom: 1px solid #303030; +} +table.dataTable.compact thead th, +table.dataTable.compact thead td, +table.dataTable.compact tfoot th, +table.dataTable.compact tfoot td, +table.dataTable.compact tbody th, +table.dataTable.compact tbody td { + padding: 4px; +} + +table.dataTable th, +table.dataTable td { + box-sizing: content-box; +} + +/* + * Control feature layout + */ +.dataTables_wrapper { + position: relative; + clear: both; +} +.dataTables_wrapper .dataTables_length { + float: left; +} +.dataTables_wrapper .dataTables_length select { + border: 1px solid #aaa; + border-radius: 3px; + padding: 5px; + background-color: transparent; + padding: 4px; +} +.dataTables_wrapper .dataTables_filter { + float: right; + text-align: right; +} +.dataTables_wrapper .dataTables_filter input { + border: 1px solid #aaa; + border-radius: 3px; + padding: 5px; + background-color: transparent; + margin-left: 3px; +} +.dataTables_wrapper .dataTables_info { + clear: both; + float: left; + padding-top: 0.755em; +} +.dataTables_wrapper .dataTables_paginate { + float: right; + text-align: right; + padding-top: 0.25em; +} +.dataTables_wrapper .dataTables_paginate .paginate_button { + box-sizing: border-box; + display: inline-block; + min-width: 1.5em; + padding: 0.5em 1em; + margin-left: 2px; + text-align: center; + text-decoration: none !important; + cursor: pointer; + color: inherit !important; + border: 1px solid transparent; + border-radius: 2px; +} +.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { + color: inherit !important; + border: 1px solid #303030; + background-color: rgba(230, 230, 230, 0.1); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(230, 230, 230, 0.1)), color-stop(100%, rgba(0, 0, 0, 0.1))); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%); + /* IE10+ */ + background: -o-linear-gradient(top, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%); + /* W3C */ +} +.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { + cursor: default; + color: #666 !important; + border: 1px solid transparent; + background: transparent; + box-shadow: none; +} +.dataTables_wrapper .dataTables_paginate .paginate_button:hover { + color: white !important; + border: 1px solid #dddddd; + background-color: white; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dddddd)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, white 0%, #dddddd 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, white 0%, #dddddd 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, white 0%, #dddddd 100%); + /* IE10+ */ + background: -o-linear-gradient(top, white 0%, #dddddd 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, white 0%, #dddddd 100%); + /* W3C */ +} +.dataTables_wrapper .dataTables_paginate .paginate_button:active { + outline: none; + background-color: #f7f7f7; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f7f7f7), color-stop(100%, #d8d8d8)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f7f7f7 0%, #d8d8d8 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #f7f7f7 0%, #d8d8d8 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #f7f7f7 0%, #d8d8d8 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #f7f7f7 0%, #d8d8d8 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #f7f7f7 0%, #d8d8d8 100%); + /* W3C */ + box-shadow: inset 0 0 3px #111; +} +.dataTables_wrapper .dataTables_paginate .ellipsis { + padding: 0 1em; +} +.dataTables_wrapper .dataTables_length, +.dataTables_wrapper .dataTables_filter, +.dataTables_wrapper .dataTables_info, +.dataTables_wrapper .dataTables_processing, +.dataTables_wrapper .dataTables_paginate { + color: inherit; +} +.dataTables_wrapper .dataTables_scroll { + clear: both; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { + -webkit-overflow-scrolling: touch; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td { + vertical-align: middle; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th > div.dataTables_sizing, +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th > div.dataTables_sizing, +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td > div.dataTables_sizing { + height: 0; + overflow: hidden; + margin: 0 !important; + padding: 0 !important; +} +.dataTables_wrapper.no-footer .dataTables_scrollBody { + border-bottom: 1px solid #303030; +} +.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable, +.dataTables_wrapper.no-footer div.dataTables_scrollBody > table { + border-bottom: none; +} +.dataTables_wrapper:after { + visibility: hidden; + display: block; + content: ""; + clear: both; + height: 0; +} + +@media screen and (max-width: 767px) { + .dataTables_wrapper .dataTables_info, +.dataTables_wrapper .dataTables_paginate { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_paginate { + margin-top: 0.5em; + } +} +@media screen and (max-width: 640px) { + .dataTables_wrapper .dataTables_length, +.dataTables_wrapper .dataTables_filter { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_filter { + margin-top: 0.5em; + } +} diff --git a/logviewer/static/css/datatables.min.css b/logviewer/static/css/datatables.min.css new file mode 100644 index 0000000..00d4f9f --- /dev/null +++ b/logviewer/static/css/datatables.min.css @@ -0,0 +1,33 @@ +/* + * This combined file was created by the DataTables downloader builder: + * https://datatables.net/download + * + * To rebuild or modify this file with the latest versions of the included + * software please visit: + * https://datatables.net/download/#dt/dt-1.13.1/b-2.3.3/fc-4.2.1/fh-3.3.1/r-2.4.0/sc-2.0.7/sr-1.2.0 + * + * Included libraries: + * DataTables 1.13.1, Buttons 2.3.3, FixedColumns 4.2.1, FixedHeader 3.3.1, Responsive 2.4.0, Scroller 2.0.7, StateRestore 1.2.0 + */ + +table.dataTable td.dt-control{text-align:center;cursor:pointer}table.dataTable td.dt-control:before{height:1em;width:1em;margin-top:-9px;display:inline-block;color:white;border:.15em solid white;border-radius:1em;box-shadow:0 0 .2em #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:"Courier New",Courier,monospace;line-height:1em;content:"+";background-color:#31b131}table.dataTable tr.dt-hasChild td.dt-control:before{content:"-";background-color:#d33333}table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting_asc_disabled,table.dataTable thead>tr>th.sorting_desc_disabled,table.dataTable thead>tr>td.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting_asc_disabled,table.dataTable thead>tr>td.sorting_desc_disabled{cursor:pointer;position:relative;padding-right:26px}table.dataTable thead>tr>th.sorting:before,table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:before,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>th.sorting_asc_disabled:after,table.dataTable thead>tr>th.sorting_desc_disabled:before,table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting:before,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:before,table.dataTable thead>tr>td.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_asc_disabled:after,table.dataTable thead>tr>td.sorting_desc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:after{position:absolute;display:block;opacity:.125;right:10px;line-height:9px;font-size:.8em}table.dataTable thead>tr>th.sorting:before,table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_desc:before,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>th.sorting_desc_disabled:before,table.dataTable thead>tr>td.sorting:before,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_desc:before,table.dataTable thead>tr>td.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:before{bottom:50%;content:"▲"}table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>th.sorting_asc_disabled:after,table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc_disabled:after,table.dataTable thead>tr>td.sorting_desc_disabled:after{top:50%;content:"▼"}table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_desc:after{opacity:.6}table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting_asc_disabled:before{display:none}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}div.dataTables_scrollBody table.dataTable thead>tr>th:before,div.dataTables_scrollBody table.dataTable thead>tr>th:after,div.dataTables_scrollBody table.dataTable thead>tr>td:before,div.dataTables_scrollBody table.dataTable thead>tr>td:after{display:none}div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:2px}div.dataTables_processing>div:last-child{position:relative;width:80px;height:15px;margin:1em auto}div.dataTables_processing>div:last-child>div{position:absolute;top:0;width:13px;height:13px;border-radius:50%;background:rgba(13, 110, 253, 0.9);animation-timing-function:cubic-bezier(0, 1, 1, 0)}div.dataTables_processing>div:last-child>div:nth-child(1){left:8px;animation:datatables-loader-1 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(2){left:8px;animation:datatables-loader-2 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(3){left:32px;animation:datatables-loader-2 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(4){left:56px;animation:datatables-loader-3 .6s infinite}@keyframes datatables-loader-1{0%{transform:scale(0)}100%{transform:scale(1)}}@keyframes datatables-loader-3{0%{transform:scale(1)}100%{transform:scale(0)}}@keyframes datatables-loader-2{0%{transform:translate(0, 0)}100%{transform:translate(24px, 0)}}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th,table.dataTable thead td,table.dataTable tfoot th,table.dataTable tfoot td{text-align:left}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px;border-bottom:1px solid rgba(0, 0, 0, 0.3)}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 10px 6px 10px;border-top:1px solid rgba(0, 0, 0, 0.3)}table.dataTable tbody tr{background-color:transparent}table.dataTable tbody tr.selected>*{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.9);color:white}table.dataTable tbody tr.selected a{color:#090a0b}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid rgba(0, 0, 0, 0.15);border-right:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe>tbody>tr.odd>*,table.dataTable.display>tbody>tr.odd>*{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.023)}table.dataTable.stripe>tbody>tr.odd.selected>*,table.dataTable.display>tbody>tr.odd.selected>*{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.923)}table.dataTable.hover>tbody>tr:hover>*,table.dataTable.display>tbody>tr:hover>*{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.035)}table.dataTable.hover>tbody>tr.selected:hover>*,table.dataTable.display>tbody>tr.selected:hover>*{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.935)}table.dataTable.order-column>tbody tr>.sorting_1,table.dataTable.order-column>tbody tr>.sorting_2,table.dataTable.order-column>tbody tr>.sorting_3,table.dataTable.display>tbody tr>.sorting_1,table.dataTable.display>tbody tr>.sorting_2,table.dataTable.display>tbody tr>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.019)}table.dataTable.order-column>tbody tr.selected>.sorting_1,table.dataTable.order-column>tbody tr.selected>.sorting_2,table.dataTable.order-column>tbody tr.selected>.sorting_3,table.dataTable.display>tbody tr.selected>.sorting_1,table.dataTable.display>tbody tr.selected>.sorting_2,table.dataTable.display>tbody tr.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.919)}table.dataTable.display>tbody>tr.odd>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.054)}table.dataTable.display>tbody>tr.odd>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.047)}table.dataTable.display>tbody>tr.odd>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.039)}table.dataTable.display>tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.954)}table.dataTable.display>tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.947)}table.dataTable.display>tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.939)}table.dataTable.display>tbody>tr.even>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.019)}table.dataTable.display>tbody>tr.even>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.011)}table.dataTable.display>tbody>tr.even>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.003)}table.dataTable.display>tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.919)}table.dataTable.display>tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.911)}table.dataTable.display>tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.903)}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.082)}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.074)}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.062)}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.982)}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.974)}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.962)}table.dataTable.no-footer{border-bottom:1px solid rgba(0, 0, 0, 0.3)}table.dataTable.compact thead th,table.dataTable.compact thead td,table.dataTable.compact tfoot th,table.dataTable.compact tfoot td,table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_length select{border:1px solid #aaa;border-radius:3px;padding:5px;background-color:transparent;padding:4px}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{border:1px solid #aaa;border-radius:3px;padding:5px;background-color:transparent;margin-left:3px}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;color:inherit !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:inherit !important;border:1px solid rgba(0, 0, 0, 0.3);background-color:rgba(230, 230, 230, 0.1);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(230, 230, 230, 0.1)), color-stop(100%, rgba(0, 0, 0, 0.1)));background:-webkit-linear-gradient(top, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);background:-moz-linear-gradient(top, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);background:-ms-linear-gradient(top, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);background:-o-linear-gradient(top, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);background:linear-gradient(to bottom, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:inherit}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid rgba(0, 0, 0, 0.3)}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}} + + +@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:white;border:2px solid #111;box-shadow:3px 4px 10px 1px rgba(0, 0, 0, 0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dtb-popover-close{position:absolute;top:10px;right:10px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;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, 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 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, 0.3);padding-left:0}button.dt-button,div.dt-button,a.dt-button,input.dt-button{position:relative;display:inline-block;box-sizing:border-box;margin-left:.167em;margin-right:.167em;margin-bottom:.333em;padding:.5em 1em;border:1px solid rgba(0, 0, 0, 0.3);border-radius:2px;cursor:pointer;font-size:.88em;line-height:1.6em;color:black;white-space:nowrap;overflow:hidden;background-color:rgba(0, 0, 0, 0.1);background:linear-gradient(to bottom, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(230, 230, 230, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)");-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none;outline:none;text-overflow:ellipsis}button.dt-button:first-child,div.dt-button:first-child,a.dt-button:first-child,input.dt-button:first-child{margin-left:0}button.dt-button.disabled,div.dt-button.disabled,a.dt-button.disabled,input.dt-button.disabled{cursor:default;opacity:.4}button.dt-button:active:not(.disabled),div.dt-button:active:not(.disabled),a.dt-button:active:not(.disabled),input.dt-button:active:not(.disabled){background-color:rgba(0, 0, 0, 0.1);background:linear-gradient(to bottom, rgba(179, 179, 179, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(179, 179, 179, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)");box-shadow:inset 1px 1px 3px #999}button.dt-button:active:not(.disabled):hover:not(.disabled),div.dt-button:active:not(.disabled):hover:not(.disabled),a.dt-button:active:not(.disabled):hover:not(.disabled),input.dt-button:active:not(.disabled):hover:not(.disabled){box-shadow:inset 1px 1px 3px #999;background-color:rgba(0, 0, 0, 0.1);background:linear-gradient(to bottom, rgba(128, 128, 128, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(128, 128, 128, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)")}button.dt-button:hover,div.dt-button:hover,a.dt-button:hover,input.dt-button:hover{text-decoration:none}button.dt-button:hover:not(.disabled),div.dt-button:hover:not(.disabled),a.dt-button:hover:not(.disabled),input.dt-button:hover:not(.disabled){border:1px solid #666;background-color:rgba(0, 0, 0, 0.1);background:linear-gradient(to bottom, rgba(153, 153, 153, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(153, 153, 153, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)")}button.dt-button:focus:not(.disabled),div.dt-button:focus:not(.disabled),a.dt-button:focus:not(.disabled),input.dt-button:focus:not(.disabled){border:1px solid #426c9e;text-shadow:0 1px 0 #c4def1;outline:none;background-color:#79ace9;background:linear-gradient(to bottom, #d1e2f7 0%, #79ace9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#d1e2f7", EndColorStr="#79ace9")}button.dt-button.active:focus:not(.disabled),div.dt-button.active:focus:not(.disabled),a.dt-button.active:focus:not(.disabled),input.dt-button.active:focus:not(.disabled){background:linear-gradient(to bottom, #d1e2f7 0%, #79ace9 100%) !important}button.dt-button span.dt-down-arrow,div.dt-button span.dt-down-arrow,a.dt-button span.dt-down-arrow,input.dt-button span.dt-down-arrow{position:relative;top:-2px;color:rgba(70, 70, 70, 0.75);font-size:8px;padding-left:10px;line-height:1em}.dt-button embed{outline:none}div.dt-buttons{float:left}div.dt-buttons.buttons-right{float:right}div.dataTables_layout_cell div.dt-buttons{float:none}div.dataTables_layout_cell div.dt-buttons.buttons-right{float:none}div.dt-btn-split-wrapper{display:inline-block}div.dt-button-collection{position:absolute;top:0;left:0;width:200px;margin-top:3px;margin-bottom:3px;padding:4px 4px 2px 4px;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.4);background-color:white;overflow:hidden;z-index:2002;border-radius:5px;box-shadow:3px 4px 10px 1px rgba(0, 0, 0, 0.3);box-sizing:border-box}div.dt-button-collection button.dt-button,div.dt-button-collection div.dt-button,div.dt-button-collection a.dt-button{position:relative;left:0;right:0;width:100%;display:block;float:none;margin:4px 0 2px 0}div.dt-button-collection button.dt-button:active:not(.disabled),div.dt-button-collection button.dt-button.active:not(.disabled),div.dt-button-collection div.dt-button:active:not(.disabled),div.dt-button-collection div.dt-button.active:not(.disabled),div.dt-button-collection a.dt-button:active:not(.disabled),div.dt-button-collection a.dt-button.active:not(.disabled){background-color:#dadada;background:linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#f0f0f0", EndColorStr="#dadada");box-shadow:inset 1px 1px 3px #666}div.dt-button-collection button.dt-button:first-child,div.dt-button-collection div.dt-button:first-child,div.dt-button-collection a.dt-button:first-child{margin-top:0;border-top-left-radius:3px;border-top-right-radius:3px}div.dt-button-collection button.dt-button:last-child,div.dt-button-collection div.dt-button:last-child,div.dt-button-collection a.dt-button:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}div.dt-button-collection div.dt-btn-split-wrapper{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;margin:4px 0 2px 0}div.dt-button-collection div.dt-btn-split-wrapper button.dt-button{margin:0;display:inline-block;width:0;flex-grow:1;flex-shrink:0;flex-basis:50px;border-radius:0}div.dt-button-collection div.dt-btn-split-wrapper button.dt-btn-split-drop{min-width:20px;flex-grow:0;flex-shrink:0;flex-basis:0}div.dt-button-collection div.dt-btn-split-wrapper:first-child{margin-top:0}div.dt-button-collection div.dt-btn-split-wrapper:first-child button.dt-button{border-top-left-radius:3px}div.dt-button-collection div.dt-btn-split-wrapper:first-child button.dt-btn-split-drop{border-top-right-radius:3px}div.dt-button-collection div.dt-btn-split-wrapper:last-child button.dt-button{border-bottom-left-radius:3px}div.dt-button-collection div.dt-btn-split-wrapper:last-child button.dt-btn-split-drop{border-bottom-right-radius:3px}div.dt-button-collection div.dt-btn-split-wrapper:active:not(.disabled) button.dt-button,div.dt-button-collection div.dt-btn-split-wrapper.active:not(.disabled) button.dt-button{background-color:#dadada;background:linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#f0f0f0", EndColorStr="#dadada");box-shadow:inset 0px 0px 4px #666}div.dt-button-collection div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop,div.dt-button-collection div.dt-btn-split-wrapper.active:not(.disabled) button.dt-btn-split-drop{box-shadow:none}div.dt-button-collection.fixed .dt-button:first-child{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}div.dt-button-collection.fixed .dt-button:last-child{border-bottom-left-radius:0;border-bottom-right-radius:0}div.dt-button-collection.fixed{position:fixed;display:block;top:50%;left:50%;margin-left:-75px;border-radius:5px;background-color:white}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection.fixed.columns{margin-left:-409px}@media screen and (max-width: 1024px){div.dt-button-collection.fixed.columns{margin-left:-308px}}@media screen and (max-width: 640px){div.dt-button-collection.fixed.columns{margin-left:-203px}}@media screen and (max-width: 460px){div.dt-button-collection.fixed.columns{margin-left:-100px}}div.dt-button-collection.fixed>:last-child{max-height:100vh;overflow:auto}div.dt-button-collection.two-column>:last-child,div.dt-button-collection.three-column>:last-child,div.dt-button-collection.four-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-button-collection.two-column>:last-child>*,div.dt-button-collection.three-column>:last-child>*,div.dt-button-collection.four-column>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.columns{width:auto}div.dt-button-collection.columns>:last-child{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:6px;width:818px;padding-bottom:1px}div.dt-button-collection.columns>:last-child .dt-button{min-width:200px;flex:0 1;margin:0}div.dt-button-collection.columns.dtb-b3>:last-child,div.dt-button-collection.columns.dtb-b2>:last-child,div.dt-button-collection.columns.dtb-b1>:last-child{justify-content:space-between}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:1 1 32%}div.dt-button-collection.columns.dtb-b2 .dt-button{flex:1 1 48%}div.dt-button-collection.columns.dtb-b1 .dt-button{flex:1 1 100%}@media screen and (max-width: 1024px){div.dt-button-collection.columns>:last-child{width:612px}}@media screen and (max-width: 640px){div.dt-button-collection.columns>:last-child{width:406px}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:0 1 32%}}@media screen and (max-width: 460px){div.dt-button-collection.columns>:last-child{width:200px}}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:2001}@media screen and (max-width: 640px){div.dt-buttons{float:none !important;text-align:center}}button.dt-button.processing,div.dt-button.processing,a.dt-button.processing{color:rgba(0, 0, 0, 0.2)}button.dt-button.processing:after,div.dt-button.processing:after,a.dt-button.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 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}button.dt-btn-split-drop{margin-left:calc(-1px - .333em);padding-bottom:calc(.5em - 1px);border-radius:0px 1px 1px 0px;color:rgba(70, 70, 70, 0.9);border-left:none}button.dt-btn-split-drop span.dt-btn-split-drop-arrow{position:relative;top:-1px;left:-2px;font-size:8px}button.dt-btn-split-drop:hover{z-index:2}button.buttons-split{border-right:1px solid rgba(70, 70, 70, 0);border-radius:1px 0px 0px 1px}button.dt-btn-split-drop-button{background-color:white}button.dt-btn-split-drop-button:hover{background-color:white} + + +table.dataTable thead tr>.dtfc-fixed-left,table.dataTable thead tr>.dtfc-fixed-right,table.dataTable tfoot tr>.dtfc-fixed-left,table.dataTable tfoot tr>.dtfc-fixed-right{top:0;bottom:0;z-index:3;background-color:white}table.dataTable tbody tr>.dtfc-fixed-left,table.dataTable tbody tr>.dtfc-fixed-right{z-index:1;background-color:white}div.dtfc-left-top-blocker,div.dtfc-right-top-blocker{background-color:white} + + +table.fixedHeader-floating{background-color:white}table.fixedHeader-floating.no-footer{border-bottom-width:0}table.fixedHeader-locked{position:absolute !important;background-color:white}@media print{table.fixedHeader-floating{display:none}} + + +table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before{top:50%;left:5px;height:1em;width:1em;margin-top:-9px;display:block;position:absolute;color:white;border:.15em solid white;border-radius:1em;box-shadow:0 0 .2em #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:"Courier New",Courier,monospace;line-height:1em;content:"+";background-color:#31b131}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:"-";background-color:#d33333}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control:before{left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.dtr-control,table.dataTable.dtr-column>tbody>tr>th.dtr-control,table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.dtr-control:before,table.dataTable.dtr-column>tbody>tr>th.dtr-control:before,table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:.8em;width:.8em;margin-top:-0.5em;margin-left:-0.5em;display:block;position:absolute;color:white;border:.15em solid white;border-radius:1em;box-shadow:0 0 .2em #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:"Courier New",Courier,monospace;line-height:1em;content:"+";background-color:#31b131}table.dataTable.dtr-column>tbody>tr.parent td.dtr-control:before,table.dataTable.dtr-column>tbody>tr.parent th.dtr-control:before,table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:"-";background-color:#d33333}table.dataTable>tbody>tr.child{padding:.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !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{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}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:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid black;border-radius:.5em;box-shadow:0 12px 30px rgba(0, 0, 0, 0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}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, 0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}} + + +div.dts{display:block !important}div.dts tbody th,div.dts tbody td{white-space:nowrap}div.dts div.dts_loading{z-index:1}div.dts div.dts_label{position:absolute;right:10px;background:rgba(0, 0, 0, 0.8);color:white;box-shadow:3px 3px 10px rgba(0, 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, #edeeff, #edeeff 10px, white 10px, white 20px)}div.dts div.dataTables_scrollBody table{background-color:white;z-index:2}div.dts div.dataTables_paginate,div.dts div.dataTables_length{display:none} + + +div.dtsr-confirmation,div.dtsr-creation{position:fixed;top:20%;left:50%;width:500px;background-color:white;margin-left:-250px;border-radius:6px;box-shadow:0 0 5px #555;border:2px solid #444;z-index:2003;box-sizing:border-box;padding:1em}div.dtsr-confirmation div.dtsr-confirmation-title-row,div.dtsr-creation div.dtsr-confirmation-title-row{text-align:left}div.dtsr-confirmation div.dtsr-confirmation-title-row h2,div.dtsr-creation div.dtsr-confirmation-title-row h2{border-bottom:0px;margin-top:0px;padding-top:0px}div.dtsr-confirmation div.dtsr-confirmation-text,div.dtsr-creation div.dtsr-confirmation-text{text-align:center}div.dtsr-confirmation div.dtsr-confirmation-buttons,div.dtsr-creation div.dtsr-confirmation-buttons{text-align:right;margin-top:1em}div.dtsr-confirmation div.dtsr-confirmation-buttons button.dtsr-confirmation-button,div.dtsr-creation div.dtsr-confirmation-buttons button.dtsr-confirmation-button{margin:0px}div.dtsr-confirmation div.dtsr-creation-text,div.dtsr-creation div.dtsr-creation-text{text-align:left;padding:0px;border:none}div.dtsr-confirmation div.dtsr-creation-text span,div.dtsr-creation div.dtsr-creation-text span{font-size:20px}div.dtsr-confirmation div.dtsr-creation-form div.dtsr-left,div.dtsr-confirmation div.dtsr-creation-form div.dtsr-right,div.dtsr-creation div.dtsr-creation-form div.dtsr-left,div.dtsr-creation div.dtsr-creation-form div.dtsr-right{display:inline-block;width:50%}div.dtsr-confirmation div.dtsr-creation-form div.dtsr-left,div.dtsr-creation div.dtsr-creation-form div.dtsr-left{text-align:right}div.dtsr-confirmation div.dtsr-creation-form div.dtsr-right,div.dtsr-confirmation div.dtsr-creation-form div.dtsr-name-row,div.dtsr-creation div.dtsr-creation-form div.dtsr-right,div.dtsr-creation div.dtsr-creation-form div.dtsr-name-row{text-align:left}div.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label,div.dtsr-creation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label{width:33.3%;display:inline-block;text-align:right;padding-right:15px;padding-left:15px}div.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input,div.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input{width:66.6%;display:inline-block}div.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box,div.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box{margin-left:33.3%;margin-right:14px;display:inline-block}div.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row label.dtsr-toggle-title,div.dtsr-creation div.dtsr-creation-form div.dtsr-form-row label.dtsr-toggle-title{margin-right:-33.3%}div.dtsr-confirmation div.dtsr-confirmation-text,div.dtsr-creation div.dtsr-confirmation-text{text-align:left}div.dtsr-confirmation div.dtsr-confirmation-text label.dtsr-name-label,div.dtsr-creation div.dtsr-confirmation-text label.dtsr-name-label{width:auto;display:inline-block;text-align:right;padding-right:15px}div.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-name-input,div.dtsr-creation div.dtsr-confirmation-text input.dtsr-name-input{width:66.6%;display:inline-block}div.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-check-box,div.dtsr-creation div.dtsr-confirmation-text input.dtsr-check-box{margin-left:33.3%;margin-right:14px;display:inline-block}div.dtsr-confirmation div.dtsr-modal-foot,div.dtsr-creation div.dtsr-modal-foot{text-align:right;padding-top:10px}div.dtsr-confirmation span.dtsr-modal-error,div.dtsr-creation span.dtsr-modal-error{color:red;font-size:.9em}div.dtsr-creation{top:10%}div.dtsr-form-row{padding:10px}div.dtsr-check-row{padding-top:0px}div.dtsr-creation-text{padding:10px}div.dtsr-popover-close{position:absolute;top:10px;right:10px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtsr-background{z-index:2002;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%)}div.dt-button-collection h3{text-align:center;margin-top:4px;margin-bottom:8px;font-size:1.5em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}div.dt-button-collection span.dtsr-emptyStates{border-radius:5px;display:inline-block;line-height:1.6em;white-space:nowrap;text-align:center;vertical-align:middle;width:100%;padding-bottom:7px;padding-top:3px}div.dt-button-collection h3{font-size:1.1em}div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input{width:57% !important;padding:5px 4px;border:1px solid #aaa;border-radius:3px}div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box{margin-left:calc(33.3% + 30px) !important}div.dtsr-creation-form div.dtsr-form-row label.dtsr-toggle-title{margin-right:calc(-33.3% - 30px) !important} + + diff --git a/logviewer/static/css/images/ui-icons_222222_256x240.png b/logviewer/static/css/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..6383aaf3cff72adac721b7b76380dff6b7d377ed GIT binary patch literal 7077 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%0Dp>^^)vtV!zewpA%{U_ zPGk)FT1ZZp)gPO`dNBETfe^9Y+2MtJt&vt7lA+(en+x*CNdgL)EsaaxuUR~%98^nrZ%&_^V9Wv~%bEBXqUV*V(zd*z#I7-E_- zoDYfI;%Bvde8Zzy5PVBKiWRLWmt{ArIMWpAS!97ZExuD#KQ5be+{sfpOSd3@@g*F1^jKVk{}GH|Q1l5*T;h?)-J|~mun!vI-2v|Z+k=mztDU!xm8-|UojekK zA_$WZ5tk78mlMgzwADKd-9Ipf?k|0Ot-S02d0TgDJ63g9D|;M1& literal 0 HcmV?d00001 diff --git a/logviewer/static/css/images/ui-icons_444444_256x240.png b/logviewer/static/css/images/ui-icons_444444_256x240.png index 19f664d970194372c3228494e34ac01d611a4d45..e7ccc6de2b1a472444b06977ddf4caf87129969a 100644 GIT binary patch literal 7142 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 ND9NkJmC3+E{vT6ELht|p literal 6992 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
`A6pHt6IR6lNF6^&(ovlbP|R$VC3 z#Kj`X&Lyxos$n5C#2uMfZZsvbj)i z+$1(n=6q63)^IOf+^1x0R%Jn?&*qGX`{G5;8i!QR3oXJfw~DcSI#S?P@6TZI#^)nO zwBfhXH&dU8oVeLDqb6r-R>&#mCM;g!tPBL&yUn8|aGk2Z;+<@plmQtZfs}+*Cs>)w zJK)hUcu#Axe^!n8SWqhu2KsCjRL7fdv|8+ohg@hb&_b}-xyXe1kWcrO41<^<<7&ZQ zz`{1CCxUin(^K(w@eEMT(^}Rul1#tbP)zHUXQs;T&4gaG6=ckgoPc(7n z*nP2UyM#N~U!%DWT-%~=m$RLWZ{BbaHA2Pw2Jkcvd9BQ+`pcKWLIsiFyNfBO1oInH zC%Gdn^(k@+F)a~?>K~};Kc#WB z^{nk2D~t~niv&TrKOd+v`FXMR=DN+SgIjGD%g1Ye+s=6>ipoV8mP1RD?mg8&DMU=q zO^zcP7!_*&@^Np)=&5r*;QialnPQcsta!aRkF70#VabT)k?5u-;YzptvmB<#WuY3R zCHt}suyr7}=u<>SA!(YcV$8U;juwU8^~d)`Oo#4yDH(yMUn7ajXIk654oRQH1d5R5 zWQl6N4<$AfH86-?|I)&>?_Yvz75C_;;V8U9u;+dh-hiJfqm(Gh|2>&!^|uw8Sf!N& z9WrD?bX<1ttD2$v^8DeVAp2*9cB(6Un`IlxfzXmt;l3tj(F!-4ZXJajoUOha-mse| zA!`x7DG7-qhC}*iY;B^j1mbc$3RLMO^k4L=lXULiXz#zsf{Fz|)4^5x2{aQ>Z*5#E z?vdX&8)WO?ucP>9E?pIzt1RwC{5rPs{h+hGPYV7P+>A3xJe?O)$@6T{rX>PzP+?q> z;;#q;(=T~?W`h>R_;Ks-_~}fi2}AdrFMFIdE1o0}W}xGQU9x@`PQY7H{;8Qo?e<{~ zpKwEX7LjJY8@J`OP0iy!ifw(LLS^?8cYRZLaU*tLUX+^zUp#OYztQ*IJJVtGpa=vt z5kUQuI#p2*!|A_c$k4oQv63yk2dbsn%h^HtD>s48SH&Fx^p!EU%dtP`gZW_eQ~lD% z=1H@F2j8g~?=|<`-+VUSqGzqu`pWji0Wn_*0&TTAnpzFDp}&mJKU@JgOf_ zb;2;7x~$&YR>MwuN4Y+=+#p^M4MJWZpFdmo<}A=FxP1T!{_NcOYnv;lm?Pr55-@Rp z_Zw(#Yp@9w*S~`|Bbq3EEti?agR{4d!p#l31aBX|JVE(dSOq@?uUcKRg4>v`Ea^WP zvScvPt5m&LU<@#dVu1HHWDd&M<}MA}MO{nFS4ALwSEZ&SkQdw*mL1lF(*{jkf#MMB zDV>%pS4?g14ZS1Mk<_u3q$@5+yn5KrVLW`$+I=o&gd}Nxq`=Yx|=X%|V^yMSA#&uGDocw=YDx0(zS#)KM1H zcoDN9KqHH7E90e0OzF(xVRN5$N2dQJSx(Pi?9tyoYdK*!kX=m5UqNr4#V%tnAXyf7 zh@#7GW^T>=a7yJ|->AUNYkTaF&Z3y^_JZa&v|Chg2WGnNI7g+Br+G{N_$LYQcblb3(QrR$@sbar5n*kBIjSafWl~O) z!}!-exeo$ZFhbe1GXl>SNQJ|K(@!Nl$wETs7nUKenZX|bynIKP@Sc+xXhW`-WP{Q# znGJRZ{n8~pVjUN|nJx6cPp1T|E}cOX`x_uF310qRZ&nkGYt=14@CQ^2_-^Syl*w#c zhTX`qiW%(KoCFMjV2^Gg)Q!t@HNpPl-)M0MK-J{85Q@g-{rMHerkBXXsBTNiu<+oQ zN_*2Wi0&X+{H=SoHscgP)2!BpnBWcAJ{dRSwjilve-qFi$_rqJz%pyu&v}Z&W{I9g zD~K=^RFMj1UI#(9fbZ0Bd`?LKmDIU1dz2C>Hn(By*(zLjIogqGttE5VO@Opqm8e|j zn|*e5+1qX1hqVBw{@|Vnx#PR}5cHP1IXLDTH7(IIU^kG^z0C}zV3r|Qg==OHDzt3N(HOX{{aG= BEO!6^ diff --git a/logviewer/static/css/images/ui-icons_4b8e0b_256x240.png b/logviewer/static/css/images/ui-icons_4b8e0b_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..f98d99d3e07b33de1bd96af64fa3b5381b7e163f GIT binary patch literal 4670 zcmeHLhf|YXvwxn1-iy+!XauB$-ULGLpcFww5_*#&gx*4tVgW=z5X7i}AS#ITPy&Kf zLFq^fAP9usQ3xNt@11Y%{U7dc&YaynbAD%Mc6UxozGkXNPs2q6006y#zP334fM+VO zNd-OY#|#XQ&IFm8hKU9Md`zW1b|62q1)TKFO#mPa1^}3N0Qh}2gjoWBKsW%bpa4KQ z8vxk-^6IZ&JzI?Vnz5yhQ3~z+YQ!&>V?xn18>p{4*xy_RJKaZe(JhZFp$Z@rNIYzAwk) zP*IePr#zIorX`i*I!fmsbf2XM03D6=w1FgYUi~wJ5^Z3jL%B%DbWT}r z>->>505EzPXlq!8{8+n9>oif#OwpzPb~!tpyUr+A(Wem>ATQZve|t30d#K23UbzHU zKny!QO{62xCaPR*GcR)IesQNu4+E^vgAGu`&7?Ch3&c22n2c4B;Qkb03X)(miP{z6 z!k5M57=uNzASRp&N{7h!LDYH78;F0@(Jw4aLp+T&?b|-b@-B@uWNEnplBL9%298AG zX!6m0Sb@5e!U^fi)5hH7pHS12W7r`BwW24#U{g8m&2mxafy z_{>_}ldEX<9u?7&&-{JVfBN>^l5#J}~tkV_nmZ{XD*6N`uYC{6jkn&ql5 zW?!ApQq?AyF=psXP?AaNVo|Hh`xMCa7IM0M(6TLt&j?Sik2 z^b%I&Z#PCTRic|6J9oT?2Y?KT&AA~i`{&)O45s+{hJNm@`{+^MWZx1Z|`QC7E1YO9Hk=USW%rd1=o_Fi)B5+IPGFw}#gOO|>-#C+(EI!}U zB|F2kzh(^c2dxWufxh`UrZ}5yARLV)-|}cb3@Vr+ zSbgfL^u=c3zV(;$=a#F7Jp@V!{dC*~0v{{W?%^;d=Ncl%%(-M?Uh9Qfc%@d zwmsdjc3)?<8fZk1)etvH?suw(2)@48F%0S9C&y%NUTl5N(ei=d9byGy>%O_%y>sMR zt`Sc)T|njLa)}rjNXLLTMo$tQ-Z(Uq)JF%wUT8^jD@ocjLD`YnWX&jPh&&bn4=rpQ z70_ZHxG|f0JQo{&J6A^0%p-mzm|%gf@!t# zrwH;dn61&oEJ)r1o3DI=Li195*psKBk@~v&2qgNu`rnkyxe8iDX;w#(Zm}lc(yHl0pj3sA9m%XJ*sCW9*3I>BT(cBaZTNx21m8wh z7ifqXIE^&Mc$f?9DR|SV=?~Ldg;=+EfPV}Fv)75Cn0J+@S%8(=Gsn{VgXG;3ej9x2 z5FRo~7+4OdK47 zRGhGUz2qoeEEPnf`=WPeUm{Im@0Tepfh@irFfIFnfAw{eB`s&Ks@*CIXb|ENU}LJM zzp<8+8vxH~3WQoK!k5JT_Ktx|SZ6F#u2z<~A$oIRcI!VCb5V zA5rg-g~}}Gx+c>n(_@9Hg9x0b+IcY6KKYFH8SWF zd?w#r5b0K{Y7ZfiMQ4>YqsTLfX3jhjons;C7Be-OUT$htqX*^8-xc9;jrV?HS%RK% z=JK+Gd%_qo6eEd-F)*%xd@W$F%k_o@t)*x6EhW zWbS%Q;H9%WK0=G75JYwup(~D2JzWwvMKb4jhgZ=!q1KB)*NbTX;GhE}a%elsVsbrf zyR{)KHZaEa%iMg2?TzZ0zF=EwCNj^|Yoe1+(h;ya{$cu&V6duPzqUSpWxYVLSuBZk z6=U|1G`IZJ|1dZDsPYnG|8yuo%>vy=aXlbC(`1`f9b+2KI=)X2R}0nHdsCxv-Fs!A zYvDeA?UgFO4K;=TUGnQ_s!e)+;eU2@+U&VxkA?0Qsh%CX)6lM4v{p;tG>(7QLxbkZ zQB!NpA}iv<;-Af7Yh*M%61%u6a$?k}zCM|F*^EGX4tu^@<6gx5>?q+z5#hzfNdtVr`7qe)XW^{N(NJEUy&8swq4 z&^1%tm-LJ!#YLj#YhG@iY81?y#_xw`X{_%DvV*b>KUdOsD~tpm*k)FYsLSnWc@S}H z%aSewbakb0L2l{Zou0sJ8K5OWWL_yo9HrLrXL#q6%z1lHNC63A5_A2FM>&c;Ik{%d z_YSa(yxrnTcSsj>iQtm^QuyJ{EZz+N_;^SEM7FCNU*wl0hS4tT&tFqliF;CwXMY>` z=_@lrobboo$92K;q$>94ZQIMxdKldRBLf2i9c1OotwJ}8A_AET%0UfJTdDLmiud_e2Cc*WVmYpn^S*Q_%W3e~{c||~JCP$PfG*qB z&CSg(ffHNPVlqR{SDJitijS-Q{bGQs!zDe$(GyP!{GmH((wpJi1j>W?5|0yLd>#%~ zdyORmv6T(`sod)L3cYVU4uw?>`osE14F;;w>Dfr)h3@OGvtT*T26~>+b5EUM*5;Rn zONA~_s8LyF~sWrk&43Zv{_;9bi}4n)R9LKsy z;Kpz(aV6#TbQQgrL$cXnYI_cI?nG#{*b#DH(*3qwF|hKAZQ30&U8$5bf!YzGF`>Q{ zhNUc~GYT|AhV?XSPnMo*N)&zbfzr#&kn!9PVF0s$o z?U2I$Mf7BE+tFdgccLDr&u-IPv%U8Iu|u5>$V=F(VNT=z&^rhtpViKdrhPf9F&1S*~=esQrY4OXA9T`4p!*dpS$$8ow@WbUub|y!>pkK-P54L{ONxy9LlqpapW5??|?y2|K948l8kggwXF(JX0G$yUc5H{>gu(V79o2z5Frew5*{?qdzoFh^0gDIxu~0O zoijP>tr77n_L5eern~?MBZq-jwiAon+xmO%6mdXaA2qh+!V5aM!aRc}FimGnE&N7( zMK_CIW^z#(3PZVm7kT$l&}aLU@|_MI!&c4)LT};Aoq+a{4ou7jB%;ZwCpd-~g^NP` zb5MLuI8~}3rtCIDqDVYzQyKQ%UG%^6?e=&?j_t6&IJf5t7r^^p6kg6mf3xD_y|Jlo zfI;A%oWCOT1&FM$+!)<}rP7P!(QE|>nr;n_lxlH)f7USia4Vu_cq7rWA5+C<%LNc=Gvjk!v9}F8spXM7r)k{Bl%yP{Z z(!?nUhDR(ev++7=_zwOBa`8 ztC56Xyb-`{u+rZmsn|NMzkh4RPgvc|?P!msPMo(ae_XxAJ@s(mDKdVXPq1&q4hh{g zF4MZvc#tQ{p^&t|ZY&rbrHLq4eRUMr>6S^#6+*={#r0`o);>MZZ22wDHuni5bA7p4 z9-NiHHbs^`NKUM$il^EQ64BVUxGC*7vd9>##*gA0dZuxW(Gi^n5yeqj5d{p0Z{ptN zOmEJoTk*Ru2qZK;+G~6il=+$C$Kz$9e&AmvbB$;ioGJ8o`@eAEYB6u3(Gxw!?NjLI zZMloUFJM1Q_z>>NukHXusi)5+BRI!U+FFlElRtVCjt=)3Mn>5q@t(-I5;p!UR zB8$Zd2ojsV%L$(HyZ7pAW8Zr*A<7P{2BKNn5POa0zjN8H`S?mA86ZEZ6fBT&T7mmj zywD1YBGTb~>)%LT?jFKKDM~{pakn&e^}c_Fm6g&szJpUhCdKFv1pnF14NKrq zebFcHDN{voIL+Gqa0i`RN#y~~m@WSrr^<1Eb%<-66aM_i>_-5!@hkEG+Gv$yb+aTl z^dsetytlv0G_Khn)jdX7J#@rA;T<72YKLj$0Y`^3d92Jid(28w|Dy)9YCE#&@8q1Q zOwGiJ-0rZ}4HEhHa2L6KakXvIVJ(}LP=lWfO6usO&R;sfO&;Sal-tzu;F1L?*P4Nh zvy>yPscjENbh9gchiGhBq=`6q$=ed-VzdB1$erRFtx7rhi*vi@XY~>ZyYuSo#(a-{ zV#|c_w0M*BSXim@>6jMV7F|AGW>kzk@X5DycT*j zl+4Q0O63~h&@($PZ$4qg}X#bS`CNkLoWsasofv8Q{u#Wr7~?u%`92U5LS zNL;=Rsjgz?v1e!_e|@|hoHuB_d1fV>ve%6p!48^cRyeWhMH&j`lQ~2@wAuk_jUX)M zkBZ7+cPr&EDmvE!J8`(GMZI`n9=+lpYJxd$=?xcd+*eC z#BBu%G8GCqC8n6|d2f~}7R{gM*1c^_iDLFYDA1>NyQ}hd6{h6?(fAx3G-;L6r-_Ii zg-Mp=rv1R)iEAXu-{BDQ4-WMxu$(g6r4MqSMX?4L;xrao)ZuF-3H`y>E=u6jtju<33Yl@4{JmqHt1Q zOee89V9{kc`+26`_OC=-liB!`U%qDFUgun%pJeRu)5J$rZqYfj^;NR&jFZ>hdK%MT zgnsdUiMG$E#`Ug%=PO%&W6UTUUAsPQy}G!Zv7aHZt-$fa`9o;SmHY}=n+I1Dm42)y zh!OkwId;5c>)I%Jt$CZV)Bo&6l^A`;Br~qonXWx@1E_y5xd!Ly}|TmvZWnDPF0 z2bNg}NX_;xUT}F9`y*MNIv{X(macH(TrG697^MCYW#PQHPJ0`9|7P+7+)Z)(&p*oH zEpl*Dt`}*VV>99>b61bAX7N7s?6LBNjWMHeQ+sEf(uBsQcKxPok*agUM(evvkpY)w zt&stT+Mme@rWKPj_?y2iEZcu-5U>8TwNOqxY&$+RZ4de5y=;_QKT#VZ=AY7(?r)f% zhqIYLHgtjXa4og3rI3>ftl@1XkESrOve8>cZnq&XXM!ZiIYq$zZ#s`4{i={J+`}dh z!xf4L%jzSgi4A|_snlIIy)0c>`9$7N0J}$2<~PH|cT0`C# z1to_i6>M>Lv)YOezenOENuT%6Y9<UqqVUEzRzQ$5%g*B;0vfJvsceYFl~2iRv{g#Nt4RzJlz7u$UFvxuXJiz||BT z1{P!fx48d@mAh2ozbfyiNZ^Ek8@8&o?`4mwBZa)vR zQKi%-EFqh|j0h=m!+%F=0qA>mA$2k#NDKcoD8a-_gOmBz(!U5bC4ce5RIkY#WPGb` zNa7j+8#{bwuQg7KrQ9!*nWB5Ry|^X4(LJf@TAYg{%q6wCY+uj>9;zlB7I#!g4f+ z4oN0go5+y>%7 z(113X?_!%lc#O@oBa({Zr`%zaO!t z%jyM$cA1izX)*|6`MwS+U#VE+?CwV8aoC%%!UYG*LGTJnT2!{v$CI>le`#6EJmRQi zS8s<$*%)0fQmh$H2%-g@w?Ln3tF@>lr|yhD+1J-IfH}%uwUzTM|8CGY=ck5^<7yRG zV`;0BrCx*mhTP@uY)Z5xYPO@L7#(tb0s+B|t^{`iZz4FI(X1Ub<-Qx_2bFM4CJ^!l zlFX0Gsl6}^i96)*jzS!`DV_E$>s~D{ODOF)<-I3J?z1bDj!S3BG?7o+v^t(+~&Wxa*5a$Ionph?TA2sN7rQ`5<<)aPa8Rx1MUM?jNf{JNwOo z?Y;~W)11muhR-EmbJ&Q^-}s0)o!Bu8QouebRH2hb2VT(n1?38th+?UO!25QO>2Jgi zY7biDq}C_ehgHV0XNR(x;Bw6liN=LAI-8Bf@%hqAGOB_P%9yyJAFrhvwLOr}){gK>^mD;Vl_yV!!b`{4 ziAt@zoH-kjbW`sxpBPaNQOIo^QPjlaQOpz5ighW(U>K~hp~DnUv)_iniUERQFE&)p zLF?2OH2VgPO*}3m@Jn~y1Fb_VLY!8UN%W^(+TQGe6vJO*I{9psUt`mB%KhurnP*{G znyQ?(HI#1;MJNX}IV&P#2jm=?PSlS0@-y+b3c;K8eWz_o{7Bf_nBEeSJkp#{UrW)aK6_NZ+Lm)KK43>2MPKAQp0DDUYZ;|ww+bLKz zMA&5Qecj^qUiRkc+JWCJl}(~SvsuBuOxE=ui@1GcQj+mG?FE}|CoU?ba1Vde8&24S z!kxojO7l0N^vgF0!X7n7EJJpHyd?vrU4fo>^}*+Pm&#z}VHUTEH&BA<^cge5)8hkI z`K6LzYQ(a(Y&Wwu-mq`7k`|4B=<+Y!NhZs;UN?dQORARLqC2DK4>Agr)KFr?=2EuF z5idnOR)W%w3NO+lzo&?2s3jF|2kM6x=EuknoV>YYv47*VSCTzt5x2eQC>4;`sPWdk zo8Ri`@Dl%X1gVbqn}G0A65&BvnTB^R7nNk^VsvOZfz>d}&a=9Lk9EiNpBT+b1eQqp z>bA31x3ZsTa2J|ScqSWG%wE0fqJhf;KUVmGTGK&-gP7W^ha-%-u9L;mU+nzWpNo=L z#f}_ZK9Bs(n=t5{xgliu!Yw>l_-4Qh&4Q&}SoI`I8)%N~HhpSNDgO=!A0yE#_DWFG zpljpzkqo2SL{fdfz`gyCz2aEn3d-;Zb-VE+GF$FSNXPs=R@5X%FLZ39qfM;i_7FGg zgE`BC9?(K{^a%Yv6T|Tm_2)1KBl2S=>w#|=?Y7~;YIVIg5kB8b(u01zKMFcvb#6!`KcKvRo1}j99n9&Nre_uM3yb+|^UC-cfvISJ zz_?4?&$$o`RqEjsqGrvX8=jqhP5WI>FOZBgZxmG3+;o}`B)uS<+iZ6qVdF~+0?Y$Rn&s>{lhv>EN2eqzjr_`E z6VdmR-nHWE)S%Rv@#lLRKmV!8h}(VdxtTtBNtHS@YL|uA^HIZpgF3+{XD-W=KFe`N!sPmGXdpfhJhhI%kWoP z1i}UZfyHFjaVD>m`~*g5Pg_ZFxFYe&9jP+zQ!L^(N6xvS5qgE*`qBwc zM!pDJHro#sR13IRyZm0ZaxzFUiQKr4-YQp|WUuXwj-pYiijC(9F1pPT@@sSe7S;$O z1CitOO%D@3G;4C*Qys{#=acyieV6BHa4ukf|JhL?CSDptTOql=6oKIdMz8iP1ZwW|_$_=TO>w0t6=ZaWgwoHDEw{`E>GhmvuLk*_;~lxY!=8QVIp z_bK+z6tPSRe@K9R$JT8FdPnB)Ms1&)o#T_y;bA6TH~}`QX1e36EQ8gLb%1rm_nBqD z-JLJCM=ynAvO7|@$Uc6s7FWeQp1pcBCZO{y+z3Yp&D~ki+&JPLMAO0c`_9;+&*Lqy ziy}iE+5t;Cev*7iqAZ+V!<+ zK@w4}US}2|W$t$;roW(jCl(<_vD5!p3MLwC;TWZW!3GAy=MLNL(OqEfV1nTHuEqM@ z42U)2oW4d4zb{hp(TT(j@UTX>P5h0d!?$H~5l92o2~J&n&2*1IAV`vvwVD-n6hRpf zC93oQFF`_eWOOO}K97W|>hKMTLzSn;Jh8%0Z1L-vua1mmPN{9LbHue{?lLU zuwiPc7mqsJy01I0SGo?@FLrLa8YyIavj^g>$&@vD>n7iKiYl6UF2ZbZhF!(u{_eph8Kbd+qRTp=kAMLStY@*(G4=iM)3|UO$x%4_rP(^K7rEDh;EC^ zx9hh#ljENxglZlTTYKHPzx;QLZTEMh`zZa{Ch2O?V#JE?Vt}PS!I_)e3v60T3R8>E zXy#cdc@?A~dJxo*Bja1Jr;#mhQ4khgP4__MPS}v~Qp7TIciWIy0% zvIhOMQ6CQ@qFkdVgNj1nJ4@rM`$q&};^l;F%JHS#Gt`wOsxE6y|*Dq?Q9BnuyQgCn=C z9Ao7p?>_65Jb<9L)G~FBoXA-hJKi!yf?!)9WpOoq&gFTWDT>{tVXtRHSyl_!=zWk5 zVOQstekPu>oWg1Cw-`d(z!ScK24or2Afvnd<A2+`BDo_;c-g=?1|sG=>&C7dg=IU2-CN$M2jST}gdRSzIPB^G-Ti~Gt?V1&Hdk3; zhxcQq;NS#~7KzIL|EApk$>ArV{}+a6e*AX;>s?wJz5TZ_cc6KTgr8a*YK=Bc`RVH! zSD9_OAzwK3*x7Y8vlU|#O(#a}J}IzfhO0u4*bOx95p93_zakG&%AN(r1my`;9xB+=s3Yk{4(oVQT4I-HTGW;O`259niJO5N zTLT31+vh^XRLAcwx5+$`N)XDjK zA|v6~@HjtV1=+LzM)JMmhP&;5?Yq6iD#VWf-mG4~&;KMHdmtv%O`1mYSvhv5W;hayzxssr*g% ze%yRu;ykt3D|n;~r?mX|bg_tYmXT`w-5g5$pqRW6q#Ga>B?@gK2@^DH-+%c^$ue5=eF9DZ=p zz~b!U^o%FcKCj=SVl$TU%bhj;l3R%5GCukxy|$Zp!GAUiV^#2H?oGN)iHnLqx$zx; z0r4o%nv}_sE4^0Y!)}L_>-(qF$5z+jPdu#UJPuB8c~%6!v!r=2)M7k36%ihG#6kC5i=VBAI(N6kcHQ7r}a_G6WVYsRK z+ydi?k?fP__tcu`k^J6cS*mG86=G8L)MZq{q0Nmq5C=QqSZ{)K9KH9#!6SGz)EcxJt^@s?lF=UK>-h@UoxS?dA{4%5Vn* zd@4r6=hW}gzfBN%xUa;%IzR(${RRe_A^ZI7pIBs%a2w3r%pkRwObpxh8K(_A|_G_d0-&%4W0v z-#ij8igE8?&;Lrh#|^+{wpzLb&PoBZyASfhElggO^PSz1hQ`7}wZA>nE|^cf`%|Yw zNih$o$G3EulcqPNCeI?kqAgj z4%JrcmeTIaks)Zw%e*yCJ8n`WAlc4>8w$7E26eBK*ZSTr{?eUXkL8p-XFxo{g8IiN z=&LP$n63CVpW-AooNN@Qf2M2Z%Q*AE5Ag(hgx z{cRTu;Ph89^>?)McanDSb-En@5g`!~eqj-QA&Do#64D})(qf`~LPF9)LI#0;M*jiu z^m24_4grLv9*FY`3-OCcJP~>zEi8UJ_5T2DLxzxB0MEZP_`7*J`T5&4W JE?2aT`X6G|f*1e* literal 6988 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 delta 4241 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 diff --git a/logviewer/static/css/images/ui-icons_777777_256x240.png b/logviewer/static/css/images/ui-icons_777777_256x240.png index 323c4564a74caa26eca81548d184610bcaedfb1d..09175d67319fe9f2f5ac8829db3ba1b1e8adba27 100644 GIT binary patch literal 7163 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 HR_Xr(%(3^G delta 4241 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 UHC2@VBiJSta03A8CwLY95BlucEdT%j diff --git a/logviewer/static/css/images/ui-icons_cccccc_256x240.png b/logviewer/static/css/images/ui-icons_cccccc_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..4e354dd8fc732ecb4c092c9b8a58b6f6695959f0 GIT binary patch literal 7086 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 Y*<0HoynfmL^N9wiDQhWJz~CYO4<311g#Z8m literal 0 HcmV?d00001 diff --git a/logviewer/static/css/images/ui-icons_ffffff_256x240.png b/logviewer/static/css/images/ui-icons_ffffff_256x240.png index fe41d2d0fdd40f87538d2312fa537a799994e55b..f979bc0e86d7bcc6b3b5d970c6515473fee7c581 100644 GIT binary patch literal 6539 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 literal 6299 zcmZu#XEQFF_{V1MIvK^OF~bls-Q9bK`Xv`yGy%b5otPGTUS6i;Q`USo z-*o35Lc(ij%hYFmE%@FKtCBJ~F14s=~XJ)gRXxQuvPKgU; z1CaJU_z=bq>K+AE`i>ZV5t^~_@{Yf9L(2nL1faCaUYX)w*-}4<(W?v2gi{iamuadO z^FC#0ceJZNuzG6R(|YFQ`vRG4bO?Ata97?^Hj8jPTu+7C3H_KU_J*2B`fWJaQ)n;C z^E5GNyH@Lzxy~Y;(X+*`{FyoBs-SNy~aMj+l(?IS|fG%juy8CQjB0>-hUiFd(sAyB|8}D9+L0t`RoCGDf#X z)XUd6G-jt1Hhb+gHsp=gHy5Qa3`DO|r6v5n&_ak$%izwpHuvC}I*~z_u+!i$ilfop z>**`*H3L@fLsp5jn$k@DdNP%pwwJuP@`fRcZ5uMX>m(vpsdFxlJD5Lb^iR zPkdd|rDGzlj!>QnEG*61Z!`+0?%u zmJ^;mK5?Zk4RC<0MI785WE-JC7SB8VrKdp<_D$giPTzwIkEG(V+N-8O&lh$Yqn zqm^y{-Nwc10q>!xK6DWQ(vECI$)d|gcteh7P(i1a)574!4Y*WZ4j>*bNbGn-Z*&jN znsP56w^)~U#8|?DCJSg@;4-!mM8*XnuHm z`11r22Lt~6LRF#cpcy6yur#QMmW`QJi|zL0BBZYsf^~K$c*YlJ0(TISvJG+QstBvc zXZJ)9RPD|l$9%4-ua89PkPAfBar>aV2d~`q%w_)iV`S*rE>Yt@d++arThC?H^zeHr zgMB^dc_{MheONoB zT3-(R=iWroo1wz!3T$JE{`X^1&Xd#AR8of~@1}zv0yz$}t7qUcewR~Hw|&~w+i@0J ze=^`LOzsT}Dk|ay<*~a{f?F_;!O}or!g!j;xl$V1nETGEDmngJRq~}VDF_Bc8 zg-X(ab|`N+L$;R%>wXX?fBwEM?fiZ#sd!lb1^`iZ=x$Vs+qS+YF(%2u^j8|$$f^Dd zkHmtAwHyX4>T#mb#kGM9OR1Hcbk5Yh;AnO+n=!dOVw^ECe34Y2Ftvi9hJ~EqdW*l$3c- zB0hrKu9Pupl-{#nu>SIA^2)-L&h!ckNvSV~u}lQs3V%pAX_dMT1{&^!E%YBYBj!J< zCfyivW5?1o*MHft1RYbUgm+#URh_m%BeBo37K45w5 z3oYt(sQiEy$CsArju3#=pNabC1x1tWmA6~srhb|`~qCDqSNCk=js6v7~YhtOv6X9Aqs{U@#PPoV+tuS!&+UuYmgJNub?7Wns; z0|;sd_z8(rbvPa8D_BXo+rwv}2KX8qsBoi7aH4GH^K(+Am>mERUNqowyil_cS^6OH zl{y+-$(|QW#OZzp(K|erl+_Gh5LFuD?>Fxw{UCq+BgUWk7(^%}gmAESKFb%rMlkN7 zAw+%0tY8PWhjsP~f+_T_r5JB(W@Sp^2PS(M&Ylb=L6t}uskJ9cgqT8BVd$VZFGZYW z2nA_UMbRR4)p~O ze0uUc7z7id`J3zg8?_$@wnms`tB*j@5sT(ou88;Df3QPv`K+v0YXs$ij=vwvSI9mye(oZ*@*j@D1RuQPb#f3=2R_xk`(6ql#fHB zQDft_ZLG4}3K4A9`!jmrwaY%P=4S)Fp%iSCQJ%(x?eJtf{FUIK+`F;Us1@}r7o(nZ zic)5@?$FQdIXSi2s8(;jf-_+l><5E$1GC=MQCYCEVIC&s&BO%V;nk!_q$kZN1{-Sj zj$ypS1+24>&yhiINy-EMBOksE!!5*N#FcAb>rRr$s^OoS=Z`T482{nEDp~mnJX;am z!WfjJAF8FstyBJ7ZQ`1x4Bv6}gi`^dPbIJ;8w@@>5krMxmK75Xt5Xy$J6Z2%x-k*x zP)rM-N!wz1cSR|s07SFp z&&?A(tDSq985W+pK@q8eJuBlm<2Q|5!&xf&NW`NIq5=<7A_2^sg~H)cJfSKcfA|n7 z1uj%eH_1kb=;Qt3aI^S@g^3k)yvx+C&UvHi*Pg1%kKd7PTp&F^EBOb=Vr#`W0G1SR3) z2rwUaP=eB+JE8uUYG49a$Gxi)%cnd$Ql%)4{)I@Lv<$ob9Qx@pZL6_nJ6V|Vu+1ys z-_OSgl|3B^;I}uAys*b>PVe6-qO0WnukD_>+S~c&Qvv9&swAZH5)Z5=D z%<_!Qs-G1gFJFVw+Ctc>c1;R1Y((*T4DxljzV54MP0|oO{5bPQm!BkDN~cv-E%rXQ zK^oBYfDxl%bF^Ml`7>K)G9W@p1$y%UCim&8trlm#@~^QqPhL9sVQiK_rntLSd&ROG zC~qjgl#X+(*($lulUPQz9RG>NI?HUCN`ARV9q_y#KHKO?@KNtRG?GtvB@xQM&a2b^ zBuV>EAiHxWhe?skF?wkcYHf(=XEAFfZ9Fu-rEiwK@)tX>pZyYZJ#L!C~~$dw2q)_B@iqps6;e(W1Yo`qB22)OVxO zd-?<<{?FNoqJ9Ry#OpADLosB=AH!CVMWH^?<(Mg2H4fLk7VggkQ(j}{?x@i z6VN$K(WHdH@wB-N&h*#s4)Y9bi_PNc*debeSA zO{|MWix^;SMA)AwjdKjAcZYP7`5FfW3VJ*@Zq!r@np{Dx%W@K>(Da0E@*OPX1iJCS z!)EWEyc$$ml*|CC#K^JXc{8F>69hKxxq)&^E=$k+kDiT=DKE~jp~=bX8xq;!he{nW z#l%3kRpUeH(2p3Ssmb4@-qFmk(Xm=JLkr217jDW>wAICxs+xHSjwG|pCdXx<^X~qR zc&akK55Z&Et?YJkn-|O*DtB>In`dLF^&}iB%1KuSB0xL*=9`Oyo@rLbIY_jNfJ{Cd zi``AGp89jhut|)g8)e@bWyhZ|tgeU(bP(p#fyx3=lOKea-(6QR(d^dY?%?tx3_ohE zp90|k-SyFUQx2)V=0yFa2Xn3%mJ{LS@1b7K^qcSgDSg4nJz3wk>wg z&NjY0p~JZYiHQEUl>d)3k;NQluDeFV4~qLPr3|sLtcuEFbR*l5f`oy5Ep*rDx^G<@ ztrWdl5=f+{4HKzzVjgkZCc8RPnFopr4oDMTn7mzwoT6fj93o1YR;Qe<8=UxLh8c>Y z1&#Y3IPguq{soYQuy^XSwP2G?{hE z4iDUvZnlU(O5qi-D;@6V0a|cGDmF!4X$*78og=XuR51Sfh{mr|==SttLa4%n8}9HV zY+^9=q8zvtVw9^KCGW58f=I7vKY1lmYA9Sk=WvYQD)frSQQj8osI-3kP%ic_;*Pu_ z`dfGEmP<&-8W6S* z%o78x#DG5?s|;ec-FLwk6_wf>4C13gA_7K76D2+;4rA4@bat%*dq%-7sr}C9#uVv2L8*@R z=LOl69w6(ve5VaWwPbB#V*j<)WM_QjB5NZff{}xKDfm+M3IY971v7?q94duX{^mt~ zOh@#j^$26U@x?;!iIycBA%GRO(sh+b=wGiwY&n?XRsZVjIi-=7mSNZ&JeJ`n^Fg-* z`$1JJ9o9N9D9unzh*ofmV4}d+B%nkcFxYX6745{6%5#&yYLz^%p_(6DA8*Kxv~v4!hru>w`L+G|d+WK(Fj$y{ zV<;3i-!;2$HZ@XtCG+6ykh7A#KjVD4vE*eag(BRS?u1_;=mnmq4+HU_liqhPBlz58 z6mvkB6$;C$$v$X$9a@$faxblM#dV|P7Dru1d%;VLVI5zDKSj>b6I>xSw+F-+%4t7C zWSo}a#{=NBn;-GF8yHST_`X0CS`-l&CE~=M;tL0)T>}QV4alHuqpZyTBs~8{i_))o z&11$r6$9Mn@MBWp%!TCX5i2ZABKGuVUe2%NS67?s<_c?K$S8S0mZS=u&u<~RpMRqs z|0$j)cQb*g?%+`KfiS&5$uEk{ZiO&2d4shSJDi?oFI7F{Z8eiOgTcBhjlbz0&cP?o+=rjt=PBoI#_w~hZ zg9XAR(Ujr7MCz35iMz ziAmfQ6O|JelarJc5EYdZ6=em*C;lG?S9jZ|_5uHN5S5h^my(mb{V#|8p*)&P2bRA^ tFm<>0_OtP{1C(vuAKP(iyV^L|nb_Ib1|a+F6fQdf+Uf>sl`7T|{{zsr!pr~w diff --git a/logviewer/static/css/jquery.kismet.gps.css b/logviewer/static/css/jquery.kismet.gps.css index 7c911e9..762c93f 100644 --- a/logviewer/static/css/jquery.kismet.gps.css +++ b/logviewer/static/css/jquery.kismet.gps.css @@ -1,3 +1,12 @@ +:root { + --gps-dialog-header-color: #AAA; + --gps-dialog-footer-color: #CCC; + --gps-icon-base-color: #707070; +} + +[data-theme="dark"] { +} + div.kg-top-icon { display: inline-block; font-size: 14px; @@ -14,7 +23,7 @@ div.kg-dialog-content { } div.kg-dialog-header { - background-color: #AAAAAA; + background-color: var(--gps-dialog-header-color); height: 20px; } @@ -24,12 +33,12 @@ div.kg-dialog-main { } div.kg-dialog-footer { - background-color: #CCCCCC; + background-color: var(--gps-dialog-footer-color); height: 20px; } i.kg-icon-base { - color: #707070; + color: var(--gps-icon-base-color); font-size: 18px; } diff --git a/logviewer/static/css/jquery.kismet.messagebus.css b/logviewer/static/css/jquery.kismet.messagebus.css index f00f851..2fc166c 100644 --- a/logviewer/static/css/jquery.kismet.messagebus.css +++ b/logviewer/static/css/jquery.kismet.messagebus.css @@ -1,3 +1,13 @@ +:root { + --messagebus-debug-color: grey; + --messagebus-info-color: yellow; + --messagebus-alert-color: #FF0000; +} + +[data-theme="dark"] { + --messagebus-alert-color: #960000; +} + .messagebus { overflow-y: scroll; overflow-x: hidden; @@ -12,6 +22,7 @@ margin-bottom: 3px; margin-top: 3px; padding-left: 5px; + background-color: transparent; } .messagebus_message:hover { @@ -58,7 +69,7 @@ } .messagebus_alert > p:nth-of-type(1) { - background-color: #FF0000; + background-color: var(--messagebus-alert-color); } diff --git a/logviewer/static/css/kismet-dark.css b/logviewer/static/css/kismet-dark.css new file mode 100644 index 0000000..01a2db0 --- /dev/null +++ b/logviewer/static/css/kismet-dark.css @@ -0,0 +1,285 @@ +html { + scrollbar-face-color: #646464; + scrollbar-base-color: #646464; + scrollbar-3dlight-color: #646464; + scrollbar-highlight-color: #646464; + scrollbar-track-color: #000; + scrollbar-arrow-color: #000; + scrollbar-shadow-color: #646464; + scrollbar-dark-shadow-color: #646464; +} + +::-webkit-scrollbar { width: 8px; height: 3px;} +::-webkit-scrollbar-button { background-color: #666; } +::-webkit-scrollbar-track { background-color: #646464;} +::-webkit-scrollbar-track-piece { background-color: #000;} +::-webkit-scrollbar-thumb { height: 50px; background-color: #666; border-radius: 3px;} +::-webkit-scrollbar-corner { background-color: #646464;}} +::-webkit-resizer { background-color: #666;} + +html, body { + height: 100% +} + +body { + overflow: hidden; + background-color: #303030; + color: #FFF; +} + +#mainholder { + /* + min-height: 100%; + position: relative; + */ + + min-width: 100%; + min-height: 100%; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -ms-flex-direction: column; + -moz-flex-direction: column; + -webkit-flex-direction: column; + flex-direction: column; + +} + +#panelcontainer { + /*padding-bottom: 30px;*/ + + -webkit-box-flex: 1; /* OLD - iOS 6-, Safari 3.1-6 */ + -moz-box-flex: 1; /* OLD - Firefox 19- */ + -webkit-flex: 1; /* Chrome */ + -ms-flex: 1; /* IE 10 */ + flex: 1; /* NEW, */ +} + +#golden { + width: 100%; + height: calc(100% - 60px); +} + +#creditbar { + + /* + width:100%; + position: absolute; + left: 0; + bottom: 30px; + */ + + background-color: #333; + font-size: 13px; + height: 20px; +} + + +.ui-layout-pane-north { + padding: 0 !important; + border-bottom: none; + overflow: hidden !important; +} + +.ui-layout-center { + overflow: hidden !important; +} + +.ui-layout-pane-south { + padding: 0 !important; + border-top: none; +} + +#topbar { + position: relative; + overflow: hidden !important; + height: 40px; + background-color: #444; + padding-left: 10px; + padding-right: 10px; +} + +/* Title text */ +#topbar_title { + float: left; + + position: relative; + padding-left: 10px; + + top: 50%; + transform: translateY(-50%); + + font-style: bold; + font-size: 24px; +} + +/* Sidebar button */ +#pm_open { + top: 50%; + transform: translateY(-50%); + + margin-left: 10px; + margin-right: 10px; + + float: left; + + position: relative; + + font-size: 18px; +} + +div.topright_holder { + float: right; + position: relative; + top: 50%; + transform: translateY(-50%); + margin-right: 10px; +} + +#topbar_battery { + display: inline-block; +} + +/* Tabs minimalism from http://keith-wood.name/uitabs.html#tabs-min */ +.tabs-min { + background: transparent; + border: none; +} + +.ui-tabs { + padding-top: 0; + padding-bottom: 0; + padding-left: 0.5em; + padding-right: 0.5em; +} + +.ui-tabs-panel { + padding: 0 !important; +} + +.ui-widget-header { + background: transparent; + border: none; + border-bottom: 1px solid #909090; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; +} +.ui-tabs-nav .ui-state-default { + background: transparent; + border: none; +} +.ui-tabs-nav .ui-state-active { + background: transparent url(images/uiTabsArrow.png) no-repeat bottom center; + border: none; +} +.ui-tabs-nav .ui-state-default a { + color: #A0A0A0; +} +.ui-tabs-nav .ui-state-active a { + color: #DDDDDD; +} + +.kismet-highlight { + filter: brightness(0.75); +} + +div.k-c-p-column { + padding: 2px; + margin: 3px; + border-style: solid; + border-width: 1px; + background-color: #444; +} + +div.k-c-p-header { + padding: 2px; + margin: 3px; + border-width: 1px; + border-style: transparent; +} + +div.k-c-p-column:hover { + background-color: #666; +} + +i.k-c-p-c-mover { + padding-left: 5px; + padding-right: 5px; + color: grey; +} + +.k-c-p-c-enable { + display: inline-block; + width: 1em; + padding-left: 5px; + padding-right: 5px; + text-align: center; +} + +div.k-c-p-c-name { + display: inline-block; + margin: 3px; + width: 15em; +} + +div.k-c-p-c-title { + display: inline-block; + margin: 3px; + width: 10em; +} + +div.k-c-p-c-notes { + display: inline-block; + margin: 3px; + width: 10em; +} + +.toggle.expander.expanded { + padding-left: 13px; + background-position: left center; + background-repeat: no-repeat; + background-image: url(../images/expanded.gif); +} + +.toggle.expander.collapsed { + padding-left: 13px; + background-position: left center; + background-repeat: no-repeat; + background-image: url(../images/collapsed.gif); +} + +.spacer { + height: 5px; + clear: both; + width: 100%; + display: block; +} + +.fixeddt { + table-layout: fixed; + word-wrap: break-word; +} + +.dt_td { + text-overflow: clip; + overflow: hidden; + padding-right: 1px; +} + +.jsPanel-hdr { + background-color: #888 !important; + color: #fff !important; +} + +.jsPanel-content { + background-color: #444 !important; + color: #fff !important; +} + +.kismet-ui-layout-resizer { + background-color: #444 !important; + color: #fff !important; +} diff --git a/logviewer/static/css/kismet.css b/logviewer/static/css/kismet.css index 76c575d..90eb8c5 100644 --- a/logviewer/static/css/kismet.css +++ b/logviewer/static/css/kismet.css @@ -1,9 +1,22 @@ +:root { + --main-background-color: #FFF; + --main-text-color: #000; +} + +[data-theme="dark"] { + --main-background-color: #222; + --main-text-color: #FFF; +} + + html, body { height: 100% } body { overflow: hidden; + background-color: --var(--main-background-color); + color: --var(--main-text-color); } #mainholder { @@ -50,7 +63,7 @@ body { bottom: 30px; */ - background-color: #cccccc; + background-color: #ccc; font-size: 13px; height: 20px; } @@ -75,7 +88,7 @@ body { position: relative; overflow: hidden !important; height: 40px; - background-color: #CCCCCC; + background-color: #ccc; padding-left: 10px; padding-right: 10px; } diff --git a/logviewer/static/css/kismet.ui.base.css b/logviewer/static/css/kismet.ui.base.css index b12b8ab..973aacb 100644 --- a/logviewer/static/css/kismet.ui.base.css +++ b/logviewer/static/css/kismet.ui.base.css @@ -93,6 +93,14 @@ canvas.k-mm-canvas { cursor: pointer; } +.clickable { + +} + +.clickable:hover { + cursor: pointer; +} + div.k-dsd-container { height: 100%; width: 100%; diff --git a/logviewer/static/css/layout-default-1.4.0.css b/logviewer/static/css/layout-default-1.4.0.css index 14e507b..26f43ba 100644 --- a/logviewer/static/css/layout-default-1.4.0.css +++ b/logviewer/static/css/layout-default-1.4.0.css @@ -19,7 +19,7 @@ * Just to make demo-pages look better - not actually relevant to Layout! */ body { - font-family: Geneva, Arial, Helvetica, sans-serif; + xfont-family: Geneva, Arial, Helvetica, sans-serif; font-size: 100%; *font-size: 80%; } @@ -221,4 +221,4 @@ iframe.ui-layout-mask {} /* extra mask for objects/applets */ height: auto !important; overflow: visible !important; } -} \ No newline at end of file +} diff --git a/logviewer/static/css/layout.css b/logviewer/static/css/layout.css index bcd77a3..309803a 100755 --- a/logviewer/static/css/layout.css +++ b/logviewer/static/css/layout.css @@ -1,11 +1,27 @@ +:root { + --layout-link-color: #000; + --layout-link-hover-color: #333; + --layout-input-text-color: #000; + --layout-offset-background-color: #FFF; + --layout-offset-background-light-color: #e9e9e9; +} + +[data-theme="dark"] { + --layout-link-color: #FFF; + --layout-link-hover-color: #BBB; + --layout-input-text-color: #FFF; + --layout-input-background-color: #444; + --layout-offset-background-color: #444; + --layout-offset-background-light-color: #666; +} + /* ----------------------------------------------- Grey Box Method - Layout CSS ----------------------------------------------- */ body { - background: #eee; - color: #333; + font: 10pt "Helvetica Neue", Arial, Helvetica, sans-serif; font-size: 11px; padding: 0; } @@ -14,12 +30,19 @@ body { /* anchors ----------------------------------------------- */ a { - color: #000; + color: var(--layout-link-color); font-weight:bold; text-decoration: none; } a:hover { - color:#333; + color: var(--layout-link-hover-color); +} + +/* input +----------------------------------------------- */ +input { + color: var(--layout-input-text-color); + background-color: var(--layout-input-background-color); } @@ -27,7 +50,6 @@ a:hover { ----------------------------------------------- */ .container_12, .container_16 { - background:#fff; } @@ -129,7 +151,7 @@ p { margin-bottom:1em; } blockquote { - font-family: Georgia, 'Times New Roman', serif; + xfont-family: Georgia, 'Times New Roman', serif; font-size:1.2em; padding-left:1em; border-left:4px solid #ccc; @@ -185,14 +207,14 @@ ul.section li { text-transform:uppercase; } ul.section li a { - background:#bbb; + xbackground:#bbb; } ul.section li a:hover { - background:#aaa; + xbackground:#aaa; } ul.section li a:active { color:#fff; - background:#666; + xbackground:#666; } ul.section li li a { background:#ddd; @@ -203,24 +225,24 @@ ul.section li li a:hover { } ul.section li li a:active { color:#000; - background:#fff; + xbackground:#fff; } ul.section ul li { text-transform:none; } ul.section ul.current li a { - background:#eee; + xbackground:#eee; border-bottom:1px solid #fff; } ul.section ul.current li a:hover { - background:#ddd; + xbackground:#ddd; } ul.section ul.current li a:active { - background:#fff; + xbackground:#fff; } ul.section li a.current { color:#fff; - background:#666; + xbackground:#666; } ul.section li a.current:hover { background:#555; @@ -271,16 +293,16 @@ tbody th, tbody td { border-top:1px solid #bbb; border-bottom:1px solid #bbb; - background:#eee; + xbackground:#eee; } tbody tr.odd th, tbody tr.odd td { - background:#fff; + xbackground:#fff; } tfoot th, tfoot td { border-top:2px solid #666; - background:#eee; + background:#555; } tfoot tr.total th, tfoot tr.total td { @@ -304,13 +326,13 @@ fieldset { border:1px solid #bbb; padding:10px; position:relative; - background:#e9e9e9; + background: var(--layout-offset-background-light-color); margin-bottom:10px; } legend { font-size:1.1em; padding:.4em .8em; - background:#fff; + background: var(--layout-offset-background-color); border:1px solid #bbb; } fieldset.login p { diff --git a/logviewer/static/css/light.css b/logviewer/static/css/light.css new file mode 100644 index 0000000..52bcee0 --- /dev/null +++ b/logviewer/static/css/light.css @@ -0,0 +1,1315 @@ +/*! jQuery UI - v1.13.2 - 2022-12-22 +* http://jqueryui.com +* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=custom-theme&bgImgOpacityError=&bgImgOpacityHighlight=&bgImgOpacityActive=&bgImgOpacityHover=&bgImgOpacityDefault=&bgImgOpacityContent=&bgImgOpacityHeader=&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=%23666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=%23aaaaaa&iconColorError=%23cc0000&fcError=%235f3f3f&borderColorError=%23f1a899&bgTextureError=flat&bgColorError=%23fddfdf&iconColorHighlight=%23777620&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgTextureHighlight=flat&bgColorHighlight=%23fffa90&iconColorActive=%23ffffff&fcActive=%23ffffff&borderColorActive=%23003eff&bgTextureActive=flat&bgColorActive=%23007fff&iconColorHover=%23555555&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgTextureHover=flat&bgColorHover=%23ededed&iconColorDefault=%23777777&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgTextureDefault=flat&bgColorDefault=%23f6f6f6&iconColorContent=%23444444&fcContent=%23333333&borderColorContent=%23dddddd&bgTextureContent=flat&bgColorContent=%23ffffff&iconColorHeader=%23444444&fcHeader=%23333333&borderColorHeader=%23dddddd&bgTextureHeader=flat&bgColorHeader=%23e9e9e9&cornerRadius=0&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + -ms-filter: "alpha(opacity=0)"; /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; + pointer-events: none; +} + + +/* Icons +----------------------------------*/ +.ui-icon { + display: inline-block; + vertical-align: middle; + margin-top: -.25em; + position: relative; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + font-size: 100%; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px .4em; +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-button { + padding: .4em 1em; + display: inline-block; + position: relative; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + /* Support: IE <= 11 */ + overflow: visible; +} + +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} + +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; +} + +/* no icon support for input elements */ +input.ui-button.ui-button-icon-only { + text-indent: 0; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; +} + +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; + +} + +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; + padding: .4em 1em; +} + +/* workarounds */ +/* Support: Firefox 5 - 40 */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} +.ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,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"); + height: 100%; + -ms-filter: "alpha(opacity=25)"; /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: pointer; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #c5c5c5; +} +.ui-widget-content { + border: 1px solid #dddddd; + background: #ffffff; + color: #333333; +} +.ui-widget-content a { + color: #333333; +} +.ui-widget-header { + border: 1px solid #dddddd; + background: #e9e9e9; + color: #333333; + font-weight: bold; +} +.ui-widget-header a { + color: #333333; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #c5c5c5; + background: #f6f6f6; + font-weight: normal; + color: #454545; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #454545; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #cccccc; + background: #ededed; + font-weight: normal; + color: #2b2b2b; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #2b2b2b; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #003eff; + background: #007fff; + font-weight: normal; + color: #ffffff; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #003eff; + background-color: #ffffff; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #ffffff; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #dad55e; + background: #fffa90; + color: #777620; +} +.ui-state-checked { + border: 1px solid #dad55e; + background: #fffa90; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #777620; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #f1a899; + background: #fddfdf; + color: #5f3f3f; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #5f3f3f; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #5f3f3f; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + -ms-filter: "alpha(opacity=70)"; /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + -ms-filter: "alpha(opacity=35)"; /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + -ms-filter: "alpha(opacity=35)"; /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("images/ui-icons_555555_256x240.png"); +} +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_777620_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cc0000_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("images/ui-icons_777777_256x240.png"); +} + +/* positioning */ +/* Three classes needed to override `.ui-button:hover .ui-icon` */ +.ui-icon-blank.ui-icon-blank.ui-icon-blank { + background-image: none; +} +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 0; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 0; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 0; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 0; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + -ms-filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + -webkit-box-shadow: 0px 0px 5px #666666; + box-shadow: 0px 0px 5px #666666; +} diff --git a/logviewer/static/css/text.css b/logviewer/static/css/text.css index 9866aac..548855a 100755 --- a/logviewer/static/css/text.css +++ b/logviewer/static/css/text.css @@ -10,7 +10,7 @@ body { - font: 13px/1.5 Helvetica, Arial, 'Liberation Sans', FreeSans, sans-serif; + xfont: 13px/1.5 Helvetica, Arial, 'Liberation Sans', FreeSans, sans-serif; } a:focus diff --git a/logviewer/static/js/chart.umd.js b/logviewer/static/js/chart.umd.js new file mode 100644 index 0000000..04752c4 --- /dev/null +++ b/logviewer/static/js/chart.umd.js @@ -0,0 +1,14 @@ +/*! + * Chart.js v4.1.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";var t=Object.freeze({__proto__:null,get Colors(){return Ho},get Decimation(){return Yo},get Filler(){return la},get Legend(){return ua},get SubTitle(){return ma},get Title(){return ga},get Tooltip(){return Ta}});function e(){}const i=(()=>{let t=0;return()=>t++})();function s(t){return null==t}function n(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function o(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function r(t,e){return a(t)?t:e}function l(t,e){return void 0===t?e:t}const h=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,c=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function d(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function u(t,e,i,s){let a,r,l;if(n(t))if(r=t.length,s)for(a=r-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;at,x:t=>t.x,y:t=>t.y};function v(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}function M(t,e){const i=y[e]||(y[e]=function(t){const e=v(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}const k=t=>void 0!==t,S=t=>"function"==typeof t,P=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function D(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const C=Math.PI,O=2*C,A=O+C,T=Number.POSITIVE_INFINITY,L=C/180,E=C/2,R=C/4,I=2*C/3,z=Math.log10,F=Math.sign;function V(t,e,i){return Math.abs(t-e)t-e)).pop(),e}function W(t){return!isNaN(parseFloat(t))&&isFinite(t)}function H(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}function j(t,e,i){let s,n,o;for(s=0,n=t.length;sl&&h=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function et(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const it=(t,e,i,s)=>et(t,i,s?s=>{const n=t[s][e];return nt[s][e]et(t,i,(s=>t[s][e]>=i));function nt(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n{const i="_onData"+w(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function rt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(ot.forEach((e=>{delete t[e]})),delete t._chartjs)}function lt(t){const e=new Set;let i,s;for(i=0,s=t.length;i{s=!1,t.apply(e,i)})))}}function dt(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const ut=t=>"start"===t?"left":"end"===t?"right":"center",ft=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,gt=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;function pt(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=J(Math.min(it(r,a.axis,h).lo,i?s:it(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?J(Math.max(it(r,a.axis,c,!0).hi+1,i?0:it(e,l,a.getPixelForValue(c),!0).hi+1),n,s)-n:s-n}return{start:n,count:o}}function mt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}class bt{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=ht.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var xt=new bt; +/*! + * @kurkle/color v0.3.0 + * https://github.com/kurkle/color#readme + * (c) 2022 Jukka Kurkela + * Released under the MIT License + */function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t),0,100)}const St={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Pt=[..."0123456789ABCDEF"],Dt=t=>Pt[15&t],Ct=t=>Pt[(240&t)>>4]+Pt[15&t],Ot=t=>(240&t)>>4==(15&t);function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const Tt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e>16&255,o>>8&255,255&o]}return t}(),Ht.transparent=[0,0,0,0]);const e=Ht[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const $t=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const Yt=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Ut=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=Ft(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function qt(t,e){return t?Object.assign(e||{},t):t}function Kt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=Mt(t[3]))):(e=qt(t,{r:0,g:0,b:0,a:1})).a=Mt(e.a),e}function Gt(t){return"r"===t.charAt(0)?function(t){const e=$t.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?vt(t):yt(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?vt(i):yt(i,0,255)),s=255&(e[4]?vt(s):yt(s,0,255)),n=255&(e[6]?vt(n):yt(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):Bt(t)}class Zt{constructor(t){if(t instanceof Zt)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=Kt(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*St[s[1]],g:255&17*St[s[2]],b:255&17*St[s[3]],a:5===o?17*St[s[4]]:255}:7!==o&&9!==o||(n={r:St[s[1]]<<4|St[s[2]],g:St[s[3]]<<4|St[s[4]],b:St[s[5]]<<4|St[s[6]],a:9===o?St[s[7]]<<4|St[s[8]]:255})),i=n||jt(t)||Gt(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=qt(this._rgb);return t&&(t.a=wt(t.a)),t}set rgb(t){this._rgb=Kt(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${wt(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?At(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=It(t),i=e[0],s=kt(e[1]),n=kt(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${wt(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=Ut(wt(t.r)),n=Ut(wt(t.g)),o=Ut(wt(t.b));return{r:Mt(Yt(s+i*(Ut(wt(e.r))-s))),g:Mt(Yt(n+i*(Ut(wt(e.g))-n))),b:Mt(Yt(o+i*(Ut(wt(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new Zt(this.rgb)}alpha(t){return this._rgb.a=Mt(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=_t(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Xt(this._rgb,2,t),this}darken(t){return Xt(this._rgb,2,-t),this}saturate(t){return Xt(this._rgb,1,t),this}desaturate(t){return Xt(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=It(t);i[0]=Vt(i[0]+e),i=Ft(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function Jt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Qt(t){return Jt(t)?t:new Zt(t)}function te(t){return Jt(t)?t:new Zt(t).saturate(.5).darken(.1).hexString()}const ee=["x","y","borderWidth","radius","tension"],ie=["color","borderColor","backgroundColor"];const se=new Map;function ne(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=se.get(i);return s||(s=new Intl.NumberFormat(t,e),se.set(i,s)),s}(e,i).format(t)}const oe={values:t=>n(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=z(Math.abs(o)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),ne(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(z(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?oe.numeric.call(this,t,e,i):""}};var ae={formatters:oe};const re=Object.create(null),le=Object.create(null);function he(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>te(e.backgroundColor),this.hoverBorderColor=(t,e)=>te(e.borderColor),this.hoverColor=(t,e)=>te(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return ce(this,t,e)}get(t){return he(this,t)}describe(t,e){return ce(le,t,e)}override(t,e){return ce(re,t,e)}route(t,e,i,s){const n=he(this,t),a=he(this,i),r="_"+e;Object.defineProperties(n,{[r]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[r],e=a[s];return o(t)?Object.assign({},e,t):l(t,e)},set(t){this[r]=t}}})}apply(t){t.forEach((t=>t(this)))}}var ue=new de({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:ie},numbers:{type:"number",properties:ee}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:ae.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function fe(){return"undefined"!=typeof window&&"undefined"!=typeof document}function ge(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function pe(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!==t.indexOf("%")&&(s=s/100*e.parentNode[i])):s=t,s}const me=t=>t.ownerDocument.defaultView.getComputedStyle(t,null);function be(t,e){return me(t).getPropertyValue(e)}const xe=["top","right","bottom","left"];function _e(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=xe[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function ye(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=me(i),o="border-box"===n.boxSizing,a=_e(n,"padding"),r=_e(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const ve=t=>Math.round(10*t)/10;function Me(t,e,i,s){const n=me(t),o=_e(n,"margin"),a=pe(n.maxWidth,t,"clientWidth")||T,r=pe(n.maxHeight,t,"clientHeight")||T,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=ge(t);if(o){const t=o.getBoundingClientRect(),a=me(o),r=_e(a,"border","width"),l=_e(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=pe(a.maxWidth,o,"clientWidth"),n=pe(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||T,maxHeight:n||T}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=_e(n,"border","width"),e=_e(n,"padding");h-=e.width+t.width,c-=e.height+t.height}h=Math.max(0,h-o.width),c=Math.max(0,s?h/s:c-o.height),h=ve(Math.min(h,a,l.maxWidth)),c=ve(Math.min(c,r,l.maxHeight)),h&&!c&&(c=ve(h/2));return(void 0!==e||void 0!==i)&&s&&l.height&&c>l.height&&(c=l.height,h=ve(Math.floor(c*s))),{width:h,height:c}}function we(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const ke=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function Se(t,e){const i=be(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function Pe(t){return!t||s(t.size)||s(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function De(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function Ce(t,e,i,s){let o=(s=s||{}).data=s.data||{},a=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(o=s.data={},a=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let r=0;const l=i.length;let h,c,d,u,f;for(h=0;hi.length){for(h=0;h0&&t.stroke()}}function Ee(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==r.strokeColor;let c,d;for(t.save(),t.font=a.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]);s(e.rotation)||t.rotate(e.rotation);e.color&&(t.fillStyle=e.color);e.textAlign&&(t.textAlign=e.textAlign);e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,r),c=0;ct[0])){k(s)||(s=Qe("_fallback",t));const o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:s,_getTarget:n,override:n=>He([n,...t],e,i,s)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>Xe(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=Qe(Ye(o,t),i),k(n))return Ue(t,n)?Ze(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>ti(t).includes(e),ownKeys:t=>ti(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function je(t,e,i,s){const a={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:$e(t,s),setContext:e=>je(t,e,i,s),override:n=>je(t.override(n),e,i,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>Xe(t,e,(()=>function(t,e,i){const{_proxy:s,_context:a,_subProxy:r,_descriptors:l}=t;let h=s[e];S(h)&&l.isScriptable(e)&&(h=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t),e=e(o,a||s),r.delete(t),Ue(t,e)&&(e=Ze(n._scopes,n,t,e));return e}(e,h,t,i));n(h)&&h.length&&(h=function(t,e,i,s){const{_proxy:n,_context:a,_subProxy:r,_descriptors:l}=i;if(k(a.index)&&s(t))e=e[a.index%e.length];else if(o(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const o of i){const i=Ze(s,n,t,o);e.push(je(i,a,r&&r[t],l))}}return e}(e,h,t,l.isIndexable));Ue(e,h)&&(h=je(h,a,r&&r[e],l));return h}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function $e(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:S(i)?i:()=>i,isIndexable:S(s)?s:()=>s}}const Ye=(t,e)=>t?t+w(e):e,Ue=(t,e)=>o(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function Xe(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function qe(t,e,i){return S(t)?t(e,i):t}const Ke=(t,e)=>!0===t?e:"string"==typeof t?M(e,t):void 0;function Ge(t,e,i,s,n){for(const o of e){const e=Ke(i,o);if(e){t.add(e);const o=qe(e._fallback,i,n);if(k(o)&&o!==i&&o!==s)return o}else if(!1===e&&k(s)&&i!==s)return null}return!1}function Ze(t,e,i,s){const a=e._rootScopes,r=qe(e._fallback,i,s),l=[...t,...a],h=new Set;h.add(s);let c=Je(h,l,i,r||i,s);return null!==c&&((!k(r)||r===i||(c=Je(h,l,r,c,s),null!==c))&&He(Array.from(h),[""],a,r,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const a=s[e];if(n(a)&&o(i))return i;return a||{}}(e,i,s))))}function Je(t,e,i,s,n){for(;i;)i=Ge(t,e,i,s,n);return i}function Qe(t,e){for(const i of e){if(!i)continue;const e=i[t];if(k(e))return e}}function ti(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function ei(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;re"x"===t?"y":"x";function oi(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=q(o,n),l=q(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function ai(t,e="x"){const i=ni(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=si(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)ai(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o0===t||1===t,ci=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*O/i),di=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*O/i)+1,ui={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*E),easeOutSine:t=>Math.sin(t*E),easeInOutSine:t=>-.5*(Math.cos(C*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>hi(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>hi(t)?t:ci(t,.075,.3),easeOutElastic:t=>hi(t)?t:di(t,.075,.3),easeInOutElastic(t){const e=.1125;return hi(t)?t:t<.5?.5*ci(2*t,e,.45):.5+.5*di(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-ui.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*ui.easeInBounce(2*t):.5*ui.easeOutBounce(2*t-1)+.5};function fi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function gi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function pi(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=fi(t,n,i),r=fi(n,o,i),l=fi(o,e,i),h=fi(a,r,i),c=fi(r,l,i);return fi(h,c,i)}const mi=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,bi=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function xi(t,e){const i=(""+t).match(mi);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}function _i(t,e){const i={},s=o(e),n=s?Object.keys(e):e,a=o(t)?s?i=>l(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=+a(t)||0;return i}function yi(t){return _i(t,{top:"y",right:"x",bottom:"y",left:"x"})}function vi(t){return _i(t,["topLeft","topRight","bottomLeft","bottomRight"])}function Mi(t){const e=yi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function wi(t,e){t=t||{},e=e||ue.font;let i=l(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=l(t.style,e.style);s&&!(""+s).match(bi)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:l(t.family,e.family),lineHeight:xi(l(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:l(t.weight,e.weight),string:""};return n.string=Pe(n),n}function ki(t,e,i,s){let o,a,r,l=!0;for(o=0,a=t.length;oi&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Pi(t,e){return Object.assign(Object.create(t),e)}function Di(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ci(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function Oi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Ai(t){return"angle"===t?{between:Z,compare:K,normalize:G}:{between:tt,compare:(t,e)=>t-e,normalize:t=>t}}function Ti({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Li(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Ai(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Ai(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;hx||l(n,b,p)&&0!==r(n,b),v=()=>!x||0===r(o,p)||l(o,b,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==b&&(x=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(Ti({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,b=p));return null!==_&&g.push(Ti({start:_,end:d,loop:u,count:a,style:f})),g}function Ei(t,e){const i=[],s=t.segments;for(let n=0;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Ii(t,[{start:a,end:r,loop:o}],i,e);return Ii(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var Yi={evaluateInteractionItems:Ni,modes:{index(t,e,i,s){const n=ye(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?Wi(t,n,o,s,a):ji(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=ye(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?Wi(t,n,o,s,a):ji(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;tWi(t,ye(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ye(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return ji(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>$i(t,ye(e,t),"x",i.intersect,s),y:(t,e,i,s)=>$i(t,ye(e,t),"y",i.intersect,s)}};const Ui=["left","top","right","bottom"];function Xi(t,e){return t.filter((t=>t.pos===e))}function qi(t,e){return t.filter((t=>-1===Ui.indexOf(t.pos)&&t.box.axis===e))}function Ki(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function Gi(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!Ui.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function es(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;ot.box.fullSize)),!0),s=Ki(Xi(e,"left"),!0),n=Ki(Xi(e,"right")),o=Ki(Xi(e,"top"),!0),a=Ki(Xi(e,"bottom")),r=qi(e,"x"),l=qi(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Xi(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;u(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),f=Object.assign({},n);Ji(f,Mi(s));const g=Object.assign({maxPadding:f,w:o,h:a,x:n.left,y:n.top},n),p=Gi(l.concat(h),d);es(r.fullSize,g,d,p),es(l,g,d,p),es(h,g,d,p)&&es(l,g,d,p),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(g),ss(r.leftAndTop,g,d,p),g.x+=g.w,g.y+=g.h,ss(r.rightAndBottom,g,d,p),t.chartArea={left:g.left,top:g.top,right:g.left+g.w,bottom:g.top+g.h,height:g.h,width:g.w},u(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})}))}};class os{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class as extends os{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const rs={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},ls=t=>null===t||""===t;const hs=!!ke&&{passive:!0};function cs(t,e,i){t.canvas.removeEventListener(e,i,hs)}function ds(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function us(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ds(i.addedNodes,s),e=e&&!ds(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function fs(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ds(i.removedNodes,s),e=e&&!ds(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const gs=new Map;let ps=0;function ms(){const t=window.devicePixelRatio;t!==ps&&(ps=t,gs.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function bs(t,e,i){const s=t.canvas,n=s&&ge(s);if(!n)return;const o=ct(((t,e)=>{const s=n.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){gs.size||window.addEventListener("resize",ms),gs.set(t,e)}(t,o),a}function xs(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){gs.delete(t),gs.size||window.removeEventListener("resize",ms)}(t)}function _s(t,e,i){const s=t.canvas,n=ct((e=>{null!==t.ctx&&i(function(t,e){const i=rs[t.type]||t.type,{x:s,y:n}=ye(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t.addEventListener(e,i,hs)}(s,e,n),n}class ys extends os{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t.$chartjs={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",ls(n)){const e=Se(t,"width");void 0!==e&&(t.width=e)}if(ls(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Se(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;["height","width"].forEach((t=>{const n=i[t];s(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=i.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:us,detach:fs,resize:bs}[e]||_s;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:xs,detach:xs,resize:xs}[e]||cs)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return Me(t,e,i,s)}isAttached(t){const e=ge(t);return!(!e||!e.isConnected)}}function vs(t){return!fe()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?as:ys}var Ms=Object.freeze({__proto__:null,_detectPlatform:vs,BasePlatform:os,BasicPlatform:as,DomPlatform:ys});const ws="transparent",ks={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Qt(t||ws),n=s.valid&&Qt(e||ws);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class Ss{constructor(t,e,i,s){const n=e[i];s=ki([t.to,s,n,t.from]);const o=ki([t.from,n,s]);this._active=!0,this._fn=t.fn||ks[t.type||typeof o],this._easing=ui[t.easing]||ui.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=ki([t.to,e,s,t.from]),this._from=ki([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t{const a=t[s];if(!o(a))return;const r={};for(const t of e)r[t]=a[t];(n(a.properties)&&a.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,r)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new Ss(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(xt.add(this._chart,i),!0):void 0}}function Ds(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Cs(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function Es(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Is(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const zs=t=>"reset"===t||"none"===t,Fs=(t,e)=>e?t:Object.assign({},t);class Vs{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=As(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Is(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=l(i.xAxisID,Rs(t,"x")),o=e.yAxisID=l(i.yAxisID,Rs(t,"y")),a=e.rAxisID=l(i.rAxisID,Rs(t,"r")),r=e.indexAxis,h=e.iAxisID=s(r,n,o,a),c=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&rt(this._data,this),t._stacked&&Is(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(o(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,d=s;else{d=n(s[t])?this.parseArrayData(i,s,t,e):o(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const a=()=>null===c[l]||f&&c[l]t&&!e.hidden&&e._stacked&&{keys:Cs(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:c,max:d}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(r);let u,f;function g(){f=s[u];const e=f[r.axis];return!a(f[t.axis])||c>e||d=0;--u)if(!g()){this.updateRangeFromParsed(h,t,f,l);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Fs(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new Ps(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||zs(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){zs(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!zs(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function Ns(t,e){const i=t.options.ticks,n=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),o=Math.min(i.maxTicksLimit||n,n),a=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;io)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nn)return e}return Math.max(n,1)}(a,e,o);if(r>0){let t,i;const n=r>1?Math.round((h-l)/(r-1)):null;for(Ws(e,c,d,s(n)?0:l-n,l),t=0,i=r-1;t"top"===e||"left"===e?t[e]+i:t[e]-i;function js(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return h}function Ys(t){return t.drawTicks?t.tickLength:0}function Us(t,e){if(!t.display)return 0;const i=wi(t.font,e),s=Mi(t.padding);return(n(t.text)?t.text.length:1)*i.lineHeight+s.height}function Xs(t,e,i){let s=ut(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class qs extends Bs{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=r(t,Number.POSITIVE_INFINITY),e=r(e,Number.NEGATIVE_INFINITY),i=r(i,Number.POSITIVE_INFINITY),s=r(s,Number.NEGATIVE_INFINITY),{min:r(t,i),max:r(e,s),minDefined:a(t),maxDefined:a(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;rs?s:i,s=n&&i>s?i:s,{min:r(i,r(s,i)),max:r(s,r(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){d(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Si(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=J(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Ys(t.grid)-e.padding-Us(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=Y(Math.min(Math.asin(J((h.highest.height+6)/o,-1,1)),Math.asin(J(a/r,-1,1))-Math.asin(J(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){d(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){d(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Us(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ys(n)+o):(t.height=this.maxHeight,t.width=Ys(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=$(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){d(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:a[t]||0,height:r[t]||0});return{first:k(0),last:k(e-1),widest:k(M),highest:k(w),widths:a,heights:r}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return Q(this._alignToPixels?Oe(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:a,border:r}=s,h=n.offset,c=this.isHorizontal(),d=this.ticks.length+(h?1:0),u=Ys(n),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(t){return Oe(i,t,p)};let x,_,y,v,M,w,k,S,P,D,C,O;if("top"===a)x=b(this.bottom),w=this.bottom-u,S=x-m,D=b(t.top)+m,O=t.bottom;else if("bottom"===a)x=b(this.top),D=t.top,O=b(t.bottom)-m,w=x+m,S=this.top+u;else if("left"===a)x=b(this.right),M=this.right-u,k=x-m,P=b(t.left)+m,C=t.right;else if("right"===a)x=b(this.left),P=t.left,C=b(t.right)-m,M=x+m,k=this.left+u;else if("x"===e){if("center"===a)x=b((t.top+t.bottom)/2+.5);else if(o(a)){const t=Object.keys(a)[0],e=a[t];x=b(this.chart.scales[t].getPixelForValue(e))}D=t.top,O=t.bottom,w=x+m,S=w+u}else if("y"===e){if("center"===a)x=b((t.left+t.right)/2);else if(o(a)){const t=Object.keys(a)[0],e=a[t];x=b(this.chart.scales[t].getPixelForValue(e))}M=x-m,k=M-u,P=t.left,C=t.right}const A=l(s.ticks.maxTicksLimit,d),T=Math.max(1,Math.ceil(d/A));for(_=0;_e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");ue.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&ue.describe(e,t.descriptors)}(t,o,i),this.override&&ue.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ue[s]&&(delete ue[s][i],this.override&&delete re[i])}}class Gs{constructor(){this.controllers=new Ks(Vs,"datasets",!0),this.elements=new Ks(Bs,"elements"),this.plugins=new Ks(Object,"plugins"),this.scales=new Ks(qs,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):u(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=w(t);d(i["before"+s],[],i),e[t](i),d(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Qs(t,e){return e||!1!==t?!0===t?{}:t:null}function tn(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function en(t,e){const i=ue.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function sn(t,e){if("x"===t||"y"===t||"r"===t)return t;var i;if(t=e.axis||("top"===(i=e.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&sn(t[0].toLowerCase(),e))return t;throw new Error(`Cannot determine type of '${name}' axis. Please provide 'axis' or 'position' option.`)}function nn(t){const e=t.options||(t.options={});e.plugins=l(e.plugins,{}),e.scales=function(t,e){const i=re[t.type]||{scales:{}},s=e.scales||{},n=en(t.type,e),a=Object.create(null);return Object.keys(s).forEach((t=>{const e=s[t];if(!o(e))return console.error(`Invalid scale configuration for scale: ${t}`);if(e._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const r=sn(t,e),l=function(t,e){return t===e?"_index_":"_value_"}(r,n),h=i.scales||{};a[t]=x(Object.create(null),[{axis:r},e,h[r],h[l]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,o=i.indexAxis||en(n,e),r=(re[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,o),n=i[e+"AxisID"]||e;a[n]=a[n]||Object.create(null),x(a[n],[{axis:e},s[n],r[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];x(e,[ue.scales[e.type],ue.scale])})),a}(t,e)}function on(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const an=new Map,rn=new Set;function ln(t,e){let i=an.get(t);return i||(i=e(),an.set(t,i),rn.add(i)),i}const hn=(t,e,i)=>{const s=M(e,i);void 0!==s&&t.add(s)};class cn{constructor(t){this._config=function(t){return(t=t||{}).data=on(t.data),nn(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=on(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),nn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return ln(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return ln(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return ln(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return ln(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>hn(r,t,e)))),e.forEach((t=>hn(r,s,t))),e.forEach((t=>hn(r,re[n]||{},t))),e.forEach((t=>hn(r,ue,t))),e.forEach((t=>hn(r,le,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),rn.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,re[e]||{},ue.datasets[e]||{},{type:e},ue,le]}resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=dn(this._resolverCache,t,s);let l=a;if(function(t,e){const{isScriptable:i,isIndexable:s}=$e(t);for(const o of e){const e=i(o),a=s(o),r=(a||e)&&t[o];if(e&&(S(r)||un(r))||a&&n(r))return!0}return!1}(a,e)){o.$shared=!1;l=je(a,i=S(i)?i():i,this.createResolver(t,i,r))}for(const t of e)o[t]=l[t];return o}createResolver(t,e,i=[""],s){const{resolver:n}=dn(this._resolverCache,t,i);return o(e)?je(n,e,void 0,s):n}}function dn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:He(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const un=t=>o(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||S(t[i])),!1);const fn=["top","bottom","left","right","chartArea"];function gn(t,e){return"top"===t||"bottom"===t||-1===fn.indexOf(t)&&"x"===e}function pn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function mn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),d(i&&i.onComplete,[t],e)}function bn(t){const e=t.chart,i=e.options.animation;d(i&&i.onProgress,[t],e)}function xn(t){return fe()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const _n={},yn=t=>{const e=xn(t);return Object.values(_n).filter((t=>t.canvas===e)).pop()};function vn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class Mn{static defaults=ue;static instances=_n;static overrides=re;static registry=Zs;static version="4.1.1";static getChart=yn;static register(...t){Zs.add(...t),wn()}static unregister(...t){Zs.remove(...t),wn()}constructor(t,e){const s=this.config=new cn(e),n=xn(t),o=yn(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||vs(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,h=l&&l.height,c=l&&l.width;this.id=i(),this.ctx=r,this.canvas=l,this.width=c,this.height=h,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Js,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=dt((t=>this.update(t)),a.resizeDelay||0),this._dataChanges=[],_n[this.id]=this,r&&l?(xt.listen(this,"complete",mn),xt.listen(this,"progress",bn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return s(t)?e&&o?o:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return Zs}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():we(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Ae(this.canvas,this.ctx),this}stop(){return xt.stop(this),this}resize(t,e){xt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,we(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),d(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){u(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=sn(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),u(n,(e=>{const n=e.options,o=n.id,a=sn(o,n),r=l(n.type,e.dtype);void 0!==n.position&&gn(n.position,a)===gn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===r)h=i[o];else{h=new(Zs.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),u(s,((t,e)=>{t||delete i[e]})),u(i,(t=>{ns.configure(this,t,t.options),ns.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(pn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){u(this.scales,(t=>{ns.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);P(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){vn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;ns.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],u(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=function(t){const{xScale:e,yScale:i}=t;if(e&&i)return{left:e.left,right:e.right,top:i.top,bottom:i.bottom}}(t)||this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&Re(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&Ie(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return Ee(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=Yi.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Pi(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);k(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),xt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};u(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){u(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},u(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!f(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=D(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,d(n.onHover,[t,a,this],this),r&&d(n.onClick,[t,a,this],this));const h=!f(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function wn(){return u(Mn.instances,(t=>t._plugins.invalidate()))}function kn(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Sn{static override(t){Object.assign(Sn.prototype,t)}constructor(t){this.options=t||{}}init(){}formats(){return kn()}parse(){return kn()}format(){return kn()}add(){return kn()}diff(){return kn()}startOf(){return kn()}endOf(){return kn()}}var Pn={_date:Sn};function Dn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;et-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(k(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function On(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;ht.x,i="left",s="right"):(e=t.base"spacing"!==t,_indexable:t=>"spacing"!==t};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,a,r=t=>+i[t];if(o(i[t])){const{key:t="value"}=this._parsing;r=e=>+M(i[e],t)}for(n=t,a=t+e;nZ(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Z(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(E,c,u),b=g(C,h,d),x=g(C+E,c,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),b=(i.width-o)/f,x=(i.height-o)/g,_=Math.max(Math.min(b,x)/2,0),y=c(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/O)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p0&&!isNaN(t)?O*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return ei.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(se.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*C;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?$(this.resolveDataElementOptions(t,e).angle||i):0}}var Fn=Object.freeze({__proto__:null,BarController:class extends Vs{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(t,e,i,s){return On(t,e,i,s)}parseArrayData(t,e,i,s){return On(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l="x"===n.axis?a:r,h="x"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;dt.controller.options.grouped)),o=i.options.stacked,a=[],r=t=>{const i=t.controller.getParsed(e),n=i&&i[t.vScale.axis];if(s(n)||isNaN(n))return!0};for(const i of n)if((void 0===e||!r(i))&&((!1===o||-1===a.indexOf(i.stack)||void 0===o&&void 0===i.stack)&&a.push(i.stack),i.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(u,e,r)*a,f===r&&(b-=u/2);const t=e.getPixelForDecimal(0),s=e.getPixelForDecimal(1),o=Math.min(t,s),h=Math.max(t,s);b=Math.max(Math.min(b,h),o),d=b+u,i&&!c&&(l._stacks[e.axis]._visualValues[n]=e.getValueForPixel(d)-e.getValueForPixel(b))}if(b===e.getPixelForValue(r)){const t=F(u)*e.getLineWidthForValue(r)/2;b+=t,u-=t}return{size:u,base:b,head:d,center:d+u/2}}_calculateBarIndexPixels(t,e){const i=e.scale,n=this.options,o=n.skipNull,a=l(n.maxBarThickness,1/0);let r,h;if(e.grouped){const i=o?this._getStackCount(t):e.stackCount,l="flex"===n.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),l=o._custom;return{label:i[t]||"",value:"("+a+", "+r+(l?", "+l:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:l}=this._getSharedOptions(e,s),h=o.axis,c=a.axis;for(let d=e;d0&&this.getParsed(e-1);for(let i=0;i<_;++i){const g=t[i],_=b?g:{};if(i=x){_.skip=!0;continue}const v=this.getParsed(i),M=s(v[f]),w=_[u]=a.getPixelForValue(v[u],i),k=_[f]=o||M?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,v,l):v[f],i);_.skip=isNaN(w)||isNaN(k)||M,_.stop=i>0&&Math.abs(v[u]-y[u])>m,p&&(_.parsed=v,_.raw=h.data[i]),d&&(_.options=c||this.resolveDataElementOptions(i,g.active?"active":n)),b||this.updateElement(g,i,_,n),y=v}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}},PolarAreaController:zn,PieController:class extends In{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}},RadarController:class extends Vs{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return ei.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a0&&this.getParsed(e-1);for(let c=e;c0&&Math.abs(i[f]-_[f])>b,m&&(p.parsed=i,p.raw=h.data[c]),u&&(p.options=d||this.resolveDataElementOptions(c,e.active?"active":n)),x||this.updateElement(e,c,p,n),_=i}this.updateSharedOptions(d,n,c)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}});function Vn(t,e,i,s){const n=_i(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return J(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:J(n.innerStart,0,a),innerEnd:J(n.innerEnd,0,a)}}function Bn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Nn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-h,0),u=c>0?c+s+i+h:0;let f=0;const g=n-l;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/C)/d)/2,m=l+p+f,b=n-p-f,{outerStart:x,outerEnd:_,innerStart:y,innerEnd:v}=Vn(e,u,d,b-m),M=d-x,w=d-_,k=m+x/M,S=b-_/w,P=u+y,D=u+v,O=m+y/P,A=b-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=Bn(w,S,a,r);t.arc(e.x,e.y,_,S,b+E)}const i=Bn(D,b,a,r);if(t.lineTo(i.x,i.y),v>0){const e=Bn(D,A,a,r);t.arc(e.x,e.y,v,b+E,A+Math.PI)}const s=(b-v/u+(m+y/u))/2;if(t.arc(a,r,u,b-v/u,s,!0),t.arc(a,r,u,s,m+y/u,!0),y>0){const e=Bn(P,O,a,r);t.arc(e.x,e.y,y,O+Math.PI,m-E)}const n=Bn(M,m,a,r);if(t.lineTo(n.x,n.y),x>0){const e=Bn(M,k,a,r);t.arc(e.x,e.y,x,m-E,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function Wn(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,options:l}=e,{borderWidth:h,borderJoinStyle:c}=l,d="inner"===l.borderAlign;if(!h)return;d?(t.lineWidth=2*h,t.lineJoin=c||"round"):(t.lineWidth=h,t.lineJoin=c||"bevel");let u=e.endAngle;if(o){Nn(t,e,i,s,u,n);for(let e=0;en?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+E,s-E),t.closePath(),t.clip()}(t,e,u),o||(Nn(t,e,i,s,u,n),t.stroke())}function Hn(t,e,i=e){t.lineCap=l(i.borderCapStyle,e.borderCapStyle),t.setLineDash(l(i.borderDash,e.borderDash)),t.lineDashOffset=l(i.borderDashOffset,e.borderDashOffset),t.lineJoin=l(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=l(i.borderWidth,e.borderWidth),t.strokeStyle=l(i.borderColor,e.borderColor)}function jn(t,e,i){t.lineTo(i.x,i.y)}function $n(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=nr&&o>r;return{count:s,start:l,loop:e.loop,ilen:h(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[x(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[x(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(b*m+e)/++b):(_(),t.lineTo(e,i),u=s,b=0,f=g=i),p=i}_()}function Xn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?Un:Yn}const qn="function"==typeof Path2D;function Kn(t,e,i,s){qn&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Hn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=Xn(e);for(const r of n)Hn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class Gn extends Bs{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;li(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Ri(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Ei(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?gi:t.tension||"monotone"===t.cubicInterpolationMode?pi:fi}(i);let l,h;for(l=0,h=o.length;l=O||Z(n,a,r),g=tt(o,h+u,c+u);return f&&g}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>O?Math.floor(i/O):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(C,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let l=e.endAngle;if(o){Nn(t,e,i,s,l,n);for(let e=0;e("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function ao(t){const e=this.getLabels();return t>=0&&ts=e?s:t,a=t=>n=i?n:t;if(t){const t=F(s),e=F(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const n=function(t,e){const i=[],{bounds:n,step:o,min:a,max:r,precision:l,count:h,maxTicks:c,maxDigits:d,includeBounds:u}=t,f=o||1,g=c-1,{min:p,max:m}=e,b=!s(a),x=!s(r),_=!s(h),y=(m-p)/(d+1);let v,M,w,k,S=B((m-p)/g/f)*f;if(S<1e-14&&!b&&!x)return[{value:p},{value:m}];k=Math.ceil(m/S)-Math.floor(p/S),k>g&&(S=B(k*S/g/f)*f),s(l)||(v=Math.pow(10,l),S=Math.ceil(S*v)/v),"ticks"===n?(M=Math.floor(p/S)*S,w=Math.ceil(m/S)*S):(M=p,w=m),b&&x&&o&&H((r-a)/o,S/1e3)?(k=Math.round(Math.min((r-a)/S,c)),S=(r-a)/k,M=a,w=r):_?(M=b?a:M,w=x?r:w,k=h-1,S=(w-M)/k):(k=(w-M)/S,k=V(k,Math.round(k),S/1e3)?Math.round(k):Math.ceil(k));const P=Math.max(U(S),U(M));v=Math.pow(10,s(l)?P:l),M=Math.round(M*v)/v,w=Math.round(w*v)/v;let D=0;for(b&&(u&&M!==a?(i.push({value:a}),MMath.floor(z(t)),uo=(t,e)=>Math.pow(10,co(t)+e);function fo(t){return 1===t/Math.pow(10,co(t))}function go(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math.ceil(e/s)-n}function po(t,{min:e,max:i}){e=r(t.min,e);const s=[],n=co(e);let o=function(t,e){let i=co(e-t);for(;go(t,e,i)>10;)i++;for(;go(t,e,i)<10;)i--;return Math.min(i,co(t))}(e,i),a=o<0?Math.pow(10,Math.abs(o)):1;const l=Math.pow(10,o),h=n>o?Math.pow(10,n):0,c=Math.round((e-h)*a)/a,d=Math.floor((e-h)/l/10)*l*10;let u=Math.floor((c-d)/Math.pow(10,o)),f=r(t.min,Math.round((h+d+u*Math.pow(10,o))*a)/a);for(;f=10?u=u<15?15:20:u++,u>=20&&(o++,u=2,a=o>=0?1:a),f=Math.round((h+d+u*Math.pow(10,o))*a)/a;const g=r(t.max,f);return s.push({value:g,major:fo(g),significand:u}),s}class mo extends qs{static id="logarithmic";static defaults={ticks:{callback:ae.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=lo.prototype.parse.apply(this,[t,e]);if(0!==i)return a(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?Math.max(0,t):null,this.max=a(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!a(this._userMin)&&(this.min=t===uo(this.min,0)?uo(this.min,-1):uo(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t;i===s&&(i<=0?(n(1),o(10)):(n(uo(i,-1)),o(uo(s,1)))),i<=0&&n(uo(s,-1)),s<=0&&o(uo(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=po({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&j(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":ne(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=z(t),this._valueRange=z(this.max)-z(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(z(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function bo(t){const e=t.ticks;if(e.display&&t.display){const t=Mi(e.backdropPadding);return l(e.font&&e.font.size,ue.font.size)+t.height}return 0}function xo(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:tn?{start:e-i,end:e}:{start:e,end:e+i}}function _o(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],o=[],a=t._pointLabels.length,r=t.options.pointLabels,l=r.centerPointLabels?C/a:0;for(let u=0;ue.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.starte.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function vo(t){return 0===t||180===t?"center":t<180?"left":"right"}function Mo(t,e,i){return"right"===i?t-=e:"center"===i&&(t-=e/2),t}function wo(t,e,i){return 90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e),t}function ko(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,O);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;ot,padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=Mi(bo(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=a(t)&&!isNaN(t)?t:0,this.max=a(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/bo(this.options))}generateTickLabels(t){lo.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=d(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?_o(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return G(t*(O/(this._pointLabels.length||1))+$(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(s(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(s(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t=0;o--){const e=n.setContext(t.getPointLabelContext(o)),a=wi(e.font),{x:r,y:l,textAlign:h,left:c,top:d,right:u,bottom:f}=t._pointLabelItems[o],{backdropColor:g}=e;if(!s(g)){const t=vi(e.borderRadius),s=Mi(e.backdropPadding);i.fillStyle=g;const n=c-s.left,o=d-s.top,a=u-c+s.width,r=f-d+s.height;Object.values(t).some((t=>0!==t))?(i.beginPath(),We(i,{x:n,y:o,w:a,h:r,radius:t}),i.fill()):i.fillRect(n,o,a,r)}Ve(i,t._pointLabels[o],r,l+a.lineHeight/2,a,{color:e.color,textAlign:h,textBaseline:"middle"})}}(this,a),n.display&&this.ticks.forEach(((t,e)=>{if(0!==e){l=this.getDistanceFromCenterForValue(t.value);const i=this.getContext(e),s=n.setContext(i),r=o.setContext(i);!function(t,e,i,s,n){const o=t.ctx,a=e.circular,{color:r,lineWidth:l}=e;!a&&!s||!r||!l||i<0||(o.save(),o.strokeStyle=r,o.lineWidth=l,o.setLineDash(n.dash),o.lineDashOffset=n.dashOffset,o.beginPath(),ko(t,i,a,s),o.closePath(),o.stroke(),o.restore())}(this,s,l,a,r)}})),i.display){for(t.save(),r=a-1;r>=0;r--){const s=i.setContext(this.getPointLabelContext(r)),{color:n,lineWidth:o}=s;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,l=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),h=this.getPointPosition(r,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(h.x,h.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=wi(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=Mi(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}Ve(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}const Po={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Do=Object.keys(Po);function Co(t,e){return t-e}function Oo(t,e){if(s(e))return null;const i=t._adapter,{parser:n,round:o,isoWeekday:r}=t._parseOpts;let l=e;return"function"==typeof n&&(l=n(l)),a(l)||(l="string"==typeof n?i.parse(l,n):i.parse(l)),null===l?null:(o&&(l="week"!==o||!W(r)&&!0!==r?i.startOf(l,o):i.startOf(l,"isoWeek",r)),+l)}function Ao(t,e,i,s){const n=Do.length;for(let o=Do.indexOf(t);o=e?i[s]:i[n]]=!0}}else t[e]=!0}function Lo(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[l].major=!0);return e}(t,s,n,i):s}class Eo extends qs{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new Pn._date(t.adapters.date);s.init(e),x(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:Oo(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:r}=this.getUserBounds();function l(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),r||isNaN(t.max)||(n=Math.max(n,t.max))}o&&r||(l(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||l(this.getMinMax(!1))),s=a(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=a(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=nt(s,n,this.max);return this._unit=e.unit||(i.autoSkip?Ao(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=Do.length-1;o>=Do.indexOf(i);o--){const i=Do[o];if(Po[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return Do[i?Do.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=Do.indexOf(t)+1,i=Do.length;e+t.value)))}initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=J(s,0,o),n=J(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||Ao(n.minUnit,e,i,this._getLabelCapacity(e)),a=l(s.ticks.stepSize,1),r="week"===o&&n.isoWeekday,h=W(r)||!0===r,c={};let d,u,f=e;if(h&&(f=+t.startOf(f,"isoWeek",r)),f=+t.startOf(f,h?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const g="data"===s.ticks.source&&this.getDataTimestamps();for(d=f,u=0;dt-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;if(o)return d(o,[t,e,i],this);const a=n.time.displayFormats,r=this._unit,l=this._majorUnit,h=r&&a[r],c=l&&a[l],u=i[e],f=l&&c&&u&&u.major;return this._adapter.format(t,s||(f?c:h))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=it(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=it(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}var Io=Object.freeze({__proto__:null,CategoryScale:class extends qs{static id="category";static defaults={ticks:{callback:ao}};constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(s(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:J(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:oo(i,t,l(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return ao.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}},LinearScale:ho,LogarithmicScale:mo,RadialLinearScale:So,TimeScale:Eo,TimeSeriesScale:class extends Eo{static id="timeseries";static defaults=Eo.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Ro(e,this.min),this._tableRange=Ro(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;ot.replace("rgb(","rgba(").replace(")",", 0.5)")));function Vo(t){return zo[t%zo.length]}function Bo(t){return Fo[t%Fo.length]}function No(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof In?e=function(t,e){return t.backgroundColor=t.data.map((()=>Vo(e++))),e}(i,e):n instanceof zn?e=function(t,e){return t.backgroundColor=t.data.map((()=>Bo(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Vo(e),t.backgroundColor=Bo(e),++e}(i,e))}}function Wo(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var Ho={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{options:{elements:s},data:{datasets:n}}=t.config;if(!i.forceOverride&&(Wo(n)||s&&Wo(s)))return;const o=No(t);n.forEach(o)}};function jo(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{value:e})}}function $o(t){t.data.datasets.forEach((t=>{jo(t)}))}var Yo={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void $o(t);const n=t.width;t.data.datasets.forEach(((e,o)=>{const{_data:a,indexAxis:r}=e,l=t.getDatasetMeta(o),h=a||e.data;if("y"===ki([r,t.options.indexAxis]))return;if(!l.controller.supportsDecimation)return;const c=t.scales[l.xAxisID];if("linear"!==c.type&&"time"!==c.type)return;if(t.options.parsing)return;let{start:d,count:u}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=J(it(e,o.axis,a).lo,0,i-1)),s=h?J(it(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(l,h);if(u<=(i.threshold||4*n))return void jo(e);let f;switch(s(a)&&(e._data=h,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":f=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;cu&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(h,d,u,n,i);break;case"min-max":f=function(t,e,i,n){let o,a,r,l,h,c,d,u,f,g,p=0,m=0;const b=[],x=e+i-1,_=t[e].x,y=t[x].x-_;for(o=e;og&&(g=l,d=o),p=(m*p+a.x)/++m;else{const i=o-1;if(!s(c)&&!s(d)){const e=Math.min(c,d),s=Math.max(c,d);e!==u&&e!==i&&b.push({...t[e],x:p}),s!==u&&s!==i&&b.push({...t[s],x:p})}o>0&&i!==u&&b.push(t[i]),b.push(a),h=e,m=0,f=g=l,c=d=u=o}}return b}(h,d,u,n);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=f}))},destroy(t){$o(t)}};function Uo(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=G(n),o=G(o)),{property:t,start:n,end:o}}function Xo(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function qo(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function Ko(t,e){let i=[],s=!1;return n(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=Xo(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new Gn({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function Go(t){return t&&!1!==t.fill}function Zo(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!a(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function Jo(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=l(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return"origin";return s}(t);if(o(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return a(n)&&Math.floor(n)===n?function(t,e,i,s){"-"!==t&&"+"!==t||(i=e+i);if(i===e||i<0||i>=s)return!1;return i}(s[0],e,n,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function Qo(t,e,i){const s=[];for(let n=0;n=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&sa(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;Go(i)&&sa(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;Go(s)&&"beforeDatasetDraw"===i.drawTime&&sa(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const ha=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class ca extends Bs{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=d(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=wi(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=ha(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,s,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!=typeof e.text&&(s=da(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=Di(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=ft(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=ft(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Re(t,this),this._draw(),Ie(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ue.color,r=Di(t.rtl,this.left,this.width),h=wi(o.font),{padding:c}=o,d=h.size,u=d/2;let f;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=ha(o,d),b=this.isHorizontal(),x=this._computeTitleHeight();f=b?{x:ft(n,this.left+c,this.right-i[0]),y:this.top+c+x,line:0}:{x:this.left+c,y:ft(n,this.top+x+c,this.bottom-e[0].height),line:0},Ci(this.ctx,t.textDirection);const _=m+c;this.legendItems.forEach(((y,v)=>{s.strokeStyle=y.fontColor,s.fillStyle=y.fontColor;const M=s.measureText(y.text).width,w=r.textAlign(y.textAlign||(y.textAlign=o.textAlign)),k=g+u+M;let S=f.x,P=f.y;r.setWidth(this.width),b?v>0&&S+k+c>this.right&&(P=f.y+=_,f.line++,S=f.x=ft(n,this.left+c,this.right-i[f.line])):v>0&&P+_>this.bottom&&(S=f.x=S+e[f.line].width+c,f.line++,P=f.y=ft(n,this.top+x+c,this.bottom-e[f.line].height));if(function(t,e,i){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;s.save();const n=l(i.lineWidth,1);if(s.fillStyle=l(i.fillStyle,a),s.lineCap=l(i.lineCap,"butt"),s.lineDashOffset=l(i.lineDashOffset,0),s.lineJoin=l(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=l(i.strokeStyle,a),s.setLineDash(l(i.lineDash,[])),o.usePointStyle){const a={radius:p*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},l=r.xPlus(t,g/2);Le(s,a,l,e+u,o.pointStyleWidth&&g)}else{const o=e+Math.max((d-p)/2,0),a=r.leftForLtr(t,g),l=vi(i.borderRadius);s.beginPath(),Object.values(l).some((t=>0!==t))?We(s,{x:a,y:o,w:g,h:p,radius:l}):s.rect(a,o,g,p),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(S),P,y),S=gt(w,S+g+u,b?S+k:this.right,t.rtl),function(t,e,i){Ve(s,i.text,t,e+m/2,h,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(S),P,y),b)f.x+=k+c;else if("string"!=typeof y.text){const t=h.lineHeight;f.y+=da(y,t)}else f.y+=_})),Oi(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=wi(e.font),s=Mi(e.padding);if(!e.display)return;const n=Di(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,l=s.top+r;let h,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+l,c=ft(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);h=l+ft(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=ft(a,c,c+d);o.textAlign=n.textAlign(ut(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,Ve(o,e.text,u,h,i)}_computeTitleHeight(){const t=this.options.title,e=wi(t.font),i=Mi(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(tt(t,this.left,this.right)&&tt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const l=t.controller.getStyle(i?0:void 0),h=Mi(l.borderWidth);return{text:e[t.index].label,fillStyle:l.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:l.borderColor,pointStyle:s||l.pointStyle,rotation:l.rotation,textAlign:n||l.textAlign,borderRadius:a&&(r||l.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class fa extends Bs{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=n(i.text)?i.text.length:1;this._padding=Mi(i.padding);const o=s*wi(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,l,h,c=0;return this.isHorizontal()?(l=ft(a,i,n),h=e+t,r=n-i):("left"===o.position?(l=i+t,h=ft(a,s,e),c=-.5*C):(l=n-t,h=ft(a,e,s),c=.5*C),r=s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=wi(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);Ve(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:ut(e.align),textBaseline:"middle",translation:[n,o]})}}var ga={id:"title",_element:fa,start(t,e,i){!function(t,e){const i=new fa({ctx:t.ctx,options:e,chart:t});ns.configure(t,i,e),ns.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;ns.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;ns.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const pa=new WeakMap;var ma={id:"subtitle",start(t,e,i){const s=new fa({ctx:t.ctx,options:i,chart:t});ns.configure(t,s,i),ns.addBox(t,s),pa.set(t,s)},stop(t){ns.removeBox(t,pa.get(t)),pa.delete(t)},beforeUpdate(t,e,i){const s=pa.get(t);ns.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const ba={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e-1?t.split("\n"):t}function ya(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function va(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=wi(e.bodyFont),h=wi(e.titleFont),c=wi(e.footerFont),d=o.length,f=n.length,g=s.length,p=Mi(e.padding);let m=p.height,b=0,x=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,d&&(m+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x){m+=g*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-g)*l.lineHeight+(x-1)*e.bodySpacing}f&&(m+=e.footerMarginTop+f*c.lineHeight+(f-1)*e.footerSpacing);let _=0;const y=function(t){b=Math.max(b,i.measureText(t).width+_)};return i.save(),i.font=h.string,u(t.title,y),i.font=l.string,u(t.beforeBody.concat(t.afterBody),y),_=e.displayColors?a+2+e.boxPadding:0,u(s,(t=>{u(t.before,y),u(t.lines,y),u(t.after,y)})),_=0,i.font=c.string,u(t.footer,y),i.restore(),b+=p.width,{width:b,height:m}}function Ma(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function wa(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||Ma(t,e,i,s),yAlign:s}}function ka(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=vi(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:J(g,0,s.width-e.width),y:J(p,0,s.height-e.height)}}function Sa(t,e,i){const s=Mi(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function Pa(t){return xa([],_a(t))}function Da(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const Ca={beforeTitle:e,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex{const e={before:[],lines:[],after:[]},n=Da(i,t);xa(e.before,_a(Oa(n,"beforeLabel",this,t))),xa(e.lines,Oa(n,"label",this,t)),xa(e.after,_a(Oa(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return Pa(Oa(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=Oa(i,"beforeFooter",this,t),n=Oa(i,"footer",this,t),o=Oa(i,"afterFooter",this,t);let a=[];return a=xa(a,_a(s)),a=xa(a,_a(n)),a=xa(a,_a(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),u(l,(e=>{const i=Da(t.callbacks,e);s.push(Oa(i,"labelColor",this,e)),n.push(Oa(i,"labelPointStyle",this,e)),o.push(Oa(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=ba[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=va(this,i),a=Object.assign({},t,e),r=wa(this.chart,i,a),l=ka(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=vi(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,b,x,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,x=_+o,y=_-o):(p=d+f,m=p+o,x=_-o,y=_+o),b=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(x=u,_=x-o,p=m-o,b=m+o):(x=u+g,_=x+o,p=m+o,b=m-o),y=x),{x1:p,x2:m,x3:b,y1:x,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=Di(i.rtl,this.x,this.width);for(t.x=Sa(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=wi(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,We(t,{x:e,y:p,w:h,h:l,radius:r}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),We(t,{x:i,y:p+1,w:h-2,h:l-2,radius:r}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,p,h,l),t.strokeRect(e,p,h,l),t.fillStyle=a.backgroundColor,t.fillRect(i,p+1,h-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=wi(i.bodyFont);let d=c.lineHeight,f=0;const g=Di(i.rtl,this.x,this.width),p=function(i){e.fillText(i,g.x(t.x+f),t.y+d/2),t.y+=d+n},m=g.textAlign(o);let b,x,_,y,v,M,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=Sa(this,m,i),e.fillStyle=i.bodyColor,u(this.beforeBody,p),f=a&&"right"!==m?"center"===o?l/2+h:l+2+h:0,y=0,M=s.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=ba[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=va(this,t),a=Object.assign({},i,this._size),r=wa(e,t,a),l=ka(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=Mi(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),Ci(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),Oi(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!f(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!f(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=ba[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var Ta={id:"tooltip",_element:Aa,positioners:ba,afterInit(t,e,i){i&&(t.tooltip=new Aa({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Ca},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};return Mn.register(Fn,Io,no,t),Mn.helpers={...Vi},Mn._adapters=Pn,Mn.Animation=Ss,Mn.Animations=Ps,Mn.animator=xt,Mn.controllers=Zs.controllers.items,Mn.DatasetController=Vs,Mn.Element=Bs,Mn.elements=no,Mn.Interaction=Yi,Mn.layouts=ns,Mn.platforms=Ms,Mn.Scale=qs,Mn.Ticks=ae,Object.assign(Mn,Fn,Io,no,t,Ms),Mn.Chart=Mn,"undefined"!=typeof window&&(window.Chart=Mn),Mn})); +//# sourceMappingURL=chart.umd.js.map diff --git a/logviewer/static/js/chart.umd.js.map b/logviewer/static/js/chart.umd.js.map new file mode 100644 index 0000000..e69de29 diff --git a/logviewer/static/js/dataTables.jqueryui.min.js b/logviewer/static/js/dataTables.jqueryui.min.js new file mode 100644 index 0000000..ad21681 --- /dev/null +++ b/logviewer/static/js/dataTables.jqueryui.min.js @@ -0,0 +1,4 @@ +/*! DataTables jQuery UI integration + * ©2011-2014 SpryMedia Ltd - datatables.net/license + */ +!function(a){"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(e){return a(e,window,document)}):"object"==typeof exports?module.exports=function(e,t){return e=e||window,(t=t||("undefined"!=typeof window?require("jquery"):require("jquery")(e))).fn.dataTable||require("datatables.net")(e,t),a(t,0,e.document)}:a(jQuery,window,document)}(function(e,t,a,u){"use strict";var i=e.fn.dataTable,n="fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-";return e.extend(!0,i.defaults,{dom:'<"'+n+'tl ui-corner-tr"lfr>t<"'+n+'bl ui-corner-br"ip>'}),e.extend(i.ext.classes,{sWrapper:"dataTables_wrapper dt-jqueryui",sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sScrollHead:"dataTables_scrollHead ui-state-default",sScrollFoot:"dataTables_scrollFoot ui-state-default",sHeaderTH:"ui-state-default",sFooterTH:"ui-state-default"}),i}); \ No newline at end of file diff --git a/logviewer/static/js/dataTables.pageResize.js b/logviewer/static/js/dataTables.pageResize.js index d5b0c35..161ce06 100644 --- a/logviewer/static/js/dataTables.pageResize.js +++ b/logviewer/static/js/dataTables.pageResize.js @@ -1,7 +1,238 @@ -/*! - PageResize for DataTables v1.0.0 - 2015 SpryMedia Ltd - datatables.net/license -*/ -(function(c){var d=function(a){var b=a.table();this.s={dt:a,host:c(b.container()).parent(),header:c(b.header()),footer:c(b.footer()),body:c(b.body()),container:c(b.container()),table:c(b.node())};a=this.s.host;"static"===a.css("position")&&a.css("position","relative");this._attach();this._size()};d.prototype={_size:function(){var a=this.s,b=a.dt,f=b.table(),g=c(a.table).offset().top,d=c("tr",a.body).eq(0).height(),e=a.host.height();f.header().parentNode===f.body().parentNode&&(e-=a.header.height(), -e-=a.footer.height());e=e-g-(a.container.height()-(g+a.table.height()));a=Math.floor(e/d);Infinity!==a&&(-Infinity!==a&&!isNaN(a)&&0").css({position:"absolute",top:0,left:0,height:"100%",width:"100%",zIndex:-1}).attr("type","text/html");b[0].onload=function(){var b=this.contentDocument.body,c=b.offsetHeight;this.contentDocument.defaultView.onresize=function(){var d=b.clientHeight||b.offsetHeight;d!==c&&(c=d,a._size())}}; -b.appendTo(this.s.host).attr("data","about:blank")}};c.fn.dataTable.PageResize=d;c.fn.DataTable.PageResize=d;c(document).on("init.dt",function(a,b){if("dt"===a.namespace){var f=new c.fn.dataTable.Api(b);(c(f.table().node()).hasClass("pageResize")||b.oInit.pageResize||c.fn.dataTable.defaults.pageResize)&&new d(f)}})})(jQuery); +/*! PageResize for DataTables v1.0.0 + * 2015 SpryMedia Ltd - datatables.net/license + */ + +/** + * @summary PageResize + * @description Automatically alter the DataTables page length to fit the table + into a container + * @version 1.0.0 + * @file dataTables.pageResize.js + * @author SpryMedia Ltd (www.sprymedia.co.uk) + * @contact www.sprymedia.co.uk/contact + * @copyright Copyright 2015 SpryMedia Ltd. + * + * License MIT - http://datatables.net/license/mit + * + * This feature plug-in for DataTables will automatically change the DataTables + * page length in order to fit inside its container. This can be particularly + * useful for control panels and other interfaces which resize dynamically with + * the user's browser window instead of scrolling. + * + * Page resizing in DataTables can be enabled by using any one of the following + * options: + * + * * Adding the class `pageResize` to the HTML table + * * Setting the `pageResize` parameter in the DataTables initialisation to + * be true - i.e. `pageResize: true` + * * Setting the `pageResize` parameter to be true in the DataTables + * defaults (thus causing all tables to have this feature) - i.e. + * `$.fn.dataTable.defaults.pageResize = true`. + * * Creating a new instance: `new $.fn.dataTable.PageResize( table );` where + * `table` is a DataTable's API instance. + * + * For more detailed information please see: + * http://datatables.net/blog/2015-04-10 + */ +(function( factory ){ + if ( typeof define === 'function' && define.amd ) { + // AMD + define( ['jquery', 'datatables.net'], function ( $ ) { + return factory( $, window, document ); + } ); + } + else if ( typeof exports === 'object' ) { + // CommonJS + module.exports = function (root, $) { + if ( ! root ) { + root = window; + } + + if ( ! $ || ! $.fn.dataTable ) { + $ = require('datatables.net')(root, $).$; + } + + return factory( $, root, root.document ); + }; + } + else { + // Browser + factory( jQuery, window, document ); + } +}(function( $, window, document, undefined ) { +'use strict'; + + +var PageResize = function ( dt, pageResizeManualDelta ) +{ + var table = dt.table(); + + this.s = { + dt: dt, + host: $(table.container()).parent(), + header: $(table.header()), + footer: $(table.footer()), + body: $(table.body()), + container: $(table.container()), + table: $(table.node()), + delta: pageResizeManualDelta + }; + + this.sizes = { + offsetTop: this._getOffsetTop(), + tableHeight: this._getTableHeight(), + containerHeight: this._getContainerHeight(), + headerHeight: this._getHeaderHeight(), + footerHeight: this._getFooterHeight() + }; + + var host = this.s.host; + if ( host.css('position') === 'static' ) { + host.css( 'position', 'relative' ); + } + + var onDestroy = function () { + dt.off('.pageResize', onDestroy); + this.s.obj && this.s.obj.remove(); + }.bind(this); + dt.on('destroy.pageResize', onDestroy); + + this._attach(); + + // Delay the initial sizing until the table is fully initialized + // such that the pagination element is also added and can be taken + // into account. + var initEvent = 'init.pageResize'; + dt.on(initEvent, function () { + dt.off(initEvent); + this._size(); + }.bind(this)); +}; + + +PageResize.prototype = { + _size: function () + { + var settings = this.s; + var dt = settings.dt; + var t = dt.table(); + var rows = $( 'tr', settings.body ); + var rowHeight = rows.eq( rows.length > 1 ? 1 : 0 ).height(); // Attempt to use the second row if poss, for top and bottom border + var availableHeight = settings.host.height(); + var scrolling = t.header().parentNode !== t.body().parentNode; + var delta = settings.delta; + + var offsetTop = this.sizes.offsetTop = this._getOffsetTop(); + var tableHeight = this.sizes.tableHeight = this._getTableHeight(); + var containerHeight = this.sizes.containerHeight = this._getContainerHeight(); + var headerHeight = this.sizes.headerHeight = this._getHeaderHeight(); + var footerHeight = this.sizes.footerHeight = this._getFooterHeight(); + + // Subtract the height of the header, footer and the elements + // surrounding the table + if ( ! scrolling ) { + if ( t.header() ) { + availableHeight -= headerHeight; + } + if ( t.footer() ) { + availableHeight -= footerHeight; + } + } + availableHeight -= offsetTop; + availableHeight -= containerHeight - ( offsetTop + tableHeight ); + + if ( !isNaN( parseFloat( delta ) ) && isFinite( delta ) ) { + availableHeight -= delta; + } + + var drawRows = Math.floor( availableHeight / rowHeight ); + + if ( drawRows !== Infinity && drawRows !== -Infinity && + ! isNaN( drawRows ) && drawRows > 0 && + drawRows !== dt.page.len() + ) { + dt.page.len( drawRows ).draw(); + } + }, + + _attach: function () { + // There is no `resize` event for elements, so to trigger this effect, + // create an empty HTML document using an which will issue a + // resize event inside itself when the document resizes. Since it is + // 100% x 100% that will occur whenever the host element is resized. + var that = this; + var obj = $('') + .css( { + position: 'absolute', + top: 0, + left: 0, + height: '100%', + width: '100%', + zIndex: -1 + } ) + .attr( 'type', 'text/html' ); + + obj[0].onload = function () { + var body = this.contentDocument.body; + var height = body.offsetHeight; + + this.contentDocument.defaultView.onresize = function () { + + var newHeight = body.clientHeight || body.offsetHeight; + if (newHeight !== height) { + height = newHeight; + that._size(); + return; + } + + // Width changes might lead to layout changes, which might require + // resizing the table + if (that.sizes.offsetTop !== that._getOffsetTop() + || that.sizes.containerHeight !== that._getContainerHeight() + || that.sizes.tableHeight !== that._getTableHeight() + || that.sizes.headerHeight !== that._getHeaderHeight() + || that.sizes.footerHeight !== that._getFooterHeight()) { + that._size(); + return; + } + + }; + }; + + obj + .appendTo( this.s.host ) + .attr( 'data', 'about:blank' ); + + this.s.obj = obj; + }, + + _getOffsetTop: function () { return $(this.s.table).offset().top; }, + _getTableHeight: function () { return this.s.table.height(); }, + _getContainerHeight: function () { return this.s.container.height(); }, + _getHeaderHeight: function () { return this.s.dt.table().header() ? this.s.header.height() : 0; }, + _getFooterHeight: function () { return this.s.dt.table().footer() ? this.s.footer.height() : 0; } + +}; + + +$.fn.dataTable.PageResize = PageResize; +$.fn.DataTable.PageResize = PageResize; + +// Automatic initialisation listener +$(document).on( 'preInit.dt', function ( e, settings ) { + if ( e.namespace !== 'dt' ) { + return; + } + + var api = new $.fn.dataTable.Api( settings ); + + if ( $( api.table().node() ).hasClass( 'pageResize' ) || + settings.oInit.pageResize || + $.fn.dataTable.defaults.pageResize ) + { + new PageResize( api, settings.oInit.pageResizeManualDelta ); + } +} ); + + +})); diff --git a/logviewer/static/js/dataTables.scrollResize.min.js b/logviewer/static/js/dataTables.scrollResize.min.js new file mode 100644 index 0000000..db35d38 --- /dev/null +++ b/logviewer/static/js/dataTables.scrollResize.min.js @@ -0,0 +1,27 @@ +/*! + Copyright 2015 SpryMedia Ltd. + + License MIT - http://datatables.net/license/mit + + This feature plug-in for DataTables will automatically change the DataTables + page length in order to fit inside its container. This can be particularly + useful for control panels and other interfaces which resize dynamically with + the user's browser window instead of scrolling. + + Page resizing in DataTables can be enabled by using any one of the following + options: + + * Setting the `scrollResize` parameter in the DataTables initialisation to + be true - i.e. `scrollResize: true` + * Setting the `scrollResize` parameter to be true in the DataTables + defaults (thus causing all tables to have this feature) - i.e. + `$.fn.dataTable.defaults.scrollResize = true`. + * Creating a new instance: `new $.fn.dataTable.ScrollResize( table );` where + `table` is a DataTable's API instance. + ScrollResize for DataTables v1.0.0 + 2015 SpryMedia Ltd - datatables.net/license +*/ +(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(e){return a(e,window,document)}):"object"===typeof exports?module.exports=function(e,f){e||(e=window);f&&f.fn.dataTable||(f=require("datatables.net")(e,f).$);return a(f,e,e.document)}:a(jQuery,window,document)})(function(a,e,f,n){var k=function(c){var d=this,b=c.table();this.s={dt:c,host:a(b.container()).parent(),header:a(b.header()),footer:a(b.footer()),body:a(b.body()),container:a(b.container()),table:a(b.node())}; +b=this.s.host;"static"===b.css("position")&&b.css("position","relative");c.on("draw",function(){d._size()});this._attach();this._size()};k.prototype={_size:function(){var c=this.s,d=c.dt.table(),b=a(c.table).offset().top,g=c.host.height(),h=a("div.dataTables_scrollBody",d.container());g=g-b-(c.container.height()-(b+h.height()));a("div.dataTables_scrollBody",d.container()).css({maxHeight:g,height:g})},_attach:function(){var c=this,d=a("