From 45afd8c3235c20696ea78bfc6f0278cb2b8a0d0a Mon Sep 17 00:00:00 2001 From: llj Date: Fri, 22 Jan 2021 18:18:13 +0800 Subject: [PATCH] [share dialog] added QR code for share/upload links (#4798) --- frontend/package.json | 1 + frontend/src/components/btn-qr-code.js | 47 ++++++++++++++++++ .../components/dialog/generate-share-link.js | 25 +++++----- .../components/dialog/generate-upload-link.js | 10 ++-- frontend/src/components/shared-link.js | 36 ++++++++++++++ frontend/src/css/btn-qr-code.css | 6 +++ media/css/sf_font3/iconfont.css | 16 +++--- media/css/sf_font3/iconfont.eot | Bin 5228 -> 5680 bytes media/css/sf_font3/iconfont.js | 2 +- media/css/sf_font3/iconfont.svg | 5 +- media/css/sf_font3/iconfont.ttf | Bin 5060 -> 5512 bytes media/css/sf_font3/iconfont.woff | Bin 3288 -> 3568 bytes media/css/sf_font3/iconfont.woff2 | Bin 2660 -> 2908 bytes 13 files changed, 125 insertions(+), 23 deletions(-) create mode 100644 frontend/src/components/btn-qr-code.js create mode 100644 frontend/src/components/shared-link.js create mode 100644 frontend/src/css/btn-qr-code.css diff --git a/frontend/package.json b/frontend/package.json index 0d505ce731..97ffe75246 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -30,6 +30,7 @@ "react-i18next": "^10.12.2", "react-mentions": "^3.0.2", "react-moment": "^0.7.9", + "react-qr-code": "^1.0.5", "react-responsive": "^6.1.2", "react-select": "^2.4.1", "reactstrap": "^6.4.0", diff --git a/frontend/src/components/btn-qr-code.js b/frontend/src/components/btn-qr-code.js new file mode 100644 index 0000000000..71c93937ea --- /dev/null +++ b/frontend/src/components/btn-qr-code.js @@ -0,0 +1,47 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import QRCode from 'react-qr-code'; +import { Button, Popover, PopoverBody } from 'reactstrap'; +import { gettext } from '../utils/constants'; + +import '../css/btn-qr-code.css'; + +const propTypes = { + link: PropTypes.string.isRequired +}; + +class ButtonQR extends React.Component { + constructor(props) { + super(props); + this.state = { + isPopoverOpen: false + }; + + this.btnID = 'btn-' + Math.random().toString().substr(2,5); + } + + togglePopover = () => { + this.setState({ + isPopoverOpen: !this.state.isPopoverOpen + }); + } + + render() { + const { link } = this.props; + const { isPopoverOpen } = this.state; + return ( +
+ + + + +

{gettext('Scan the QR code to view the shared content directly')}

+
+
+
+ ); + } +} + +ButtonQR.propTypes = propTypes; +export default ButtonQR; diff --git a/frontend/src/components/dialog/generate-share-link.js b/frontend/src/components/dialog/generate-share-link.js index 15df216fd2..0cde7f8f29 100644 --- a/frontend/src/components/dialog/generate-share-link.js +++ b/frontend/src/components/dialog/generate-share-link.js @@ -12,6 +12,7 @@ import toaster from '../toast'; import Loading from '../loading'; import SendLink from '../send-link'; import DateTimePicker from '../date-and-time-picker'; +import SharedLink from '../shared-link'; const propTypes = { itemPath: PropTypes.string.isRequired, @@ -370,23 +371,23 @@ class GenerateShareLink extends React.Component {
{gettext('Link:')}
-
- {sharedLinkInfo.link}{' '} - {sharedLinkInfo.is_expired ? - ({gettext('Expired')}) : - - } +
+
{!sharedLinkInfo.is_dir && sharedLinkInfo.permissions.can_download &&( //just for file
{gettext('Direct Download Link:')}
-
- {sharedLinkInfo.link}?dl=1{' '} - {sharedLinkInfo.is_expired ? - ({gettext('Expired')}) : - - } +
+
)} diff --git a/frontend/src/components/dialog/generate-upload-link.js b/frontend/src/components/dialog/generate-upload-link.js index 0a91826aa0..50da663a97 100644 --- a/frontend/src/components/dialog/generate-upload-link.js +++ b/frontend/src/components/dialog/generate-upload-link.js @@ -10,6 +10,7 @@ import UploadLink from '../../models/upload-link'; import toaster from '../toast'; import SendLink from '../send-link'; import DateTimePicker from '../date-and-time-picker'; +import SharedLink from '../shared-link'; const propTypes = { itemPath: PropTypes.string.isRequired, @@ -264,9 +265,12 @@ class GenerateUploadLink extends React.Component {
{gettext('Upload Link:')}
-
- {sharedUploadInfo.link} - +
+
{sharedUploadInfo.expire_date && ( diff --git a/frontend/src/components/shared-link.js b/frontend/src/components/shared-link.js new file mode 100644 index 0000000000..2fb185eea6 --- /dev/null +++ b/frontend/src/components/shared-link.js @@ -0,0 +1,36 @@ +import React, { Fragment } from 'react'; +import PropTypes from 'prop-types'; +import { Button, Input, InputGroup, InputGroupAddon } from 'reactstrap'; +import { gettext } from '../utils/constants'; +import ButtonQR from './btn-qr-code'; + +const propTypes = { + link: PropTypes.string.isRequired, + linkExpired: PropTypes.bool.isRequired, + copyLink: PropTypes.func.isRequired +}; + +// for 'share link' & 'upload link' +class SharedLink extends React.Component { + + render() { + const { link, linkExpired, copyLink } = this.props; + return ( + +
+ + + + + + + +
+ {linkExpired &&

({gettext('Expired')})

} +
+ ); + } +} + +SharedLink.propTypes = propTypes; +export default SharedLink; diff --git a/frontend/src/css/btn-qr-code.css b/frontend/src/css/btn-qr-code.css new file mode 100644 index 0000000000..4b58a8b890 --- /dev/null +++ b/frontend/src/css/btn-qr-code.css @@ -0,0 +1,6 @@ +.btn-qr-code-icon { + font-size: 1.5rem; + line-height: 1; + font-weight: normal; + padding: 0.375rem; +} diff --git a/media/css/sf_font3/iconfont.css b/media/css/sf_font3/iconfont.css index d2f432917f..80a84e9122 100644 --- a/media/css/sf_font3/iconfont.css +++ b/media/css/sf_font3/iconfont.css @@ -1,10 +1,10 @@ @font-face {font-family: "sf3-font"; - src: url('iconfont.eot?t=1608001670426'); /* IE9 */ - src: url('iconfont.eot?t=1608001670426#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), - url('iconfont.woff?t=1608001670426') format('woff'), - url('iconfont.ttf?t=1608001670426') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ - url('iconfont.svg?t=1608001670426#sf3-font') format('svg'); /* iOS 4.1- */ + src: url('iconfont.eot?t=1611200069054'); /* IE9 */ + src: url('iconfont.eot?t=1611200069054#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAtcAAsAAAAAFYgAAAsNAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCFGgqaXJUdATYCJANECyQABCAFhG0HgWIb2xEzo7aLkxIh+68S6Cl7tDyjEd62rd06I+0HjEfJ/Llb1zX+M1mkz5iOpzn7ebsbe7vJJkC0jqdNDag4ZvVsgtVDqMOlZ7JpPalfhJTeEfBQtaRQ9QB3zn2Bc08A8Py/t/u2f8YzCySwRJPAAgyxNIKkNDelhLEJJrYHpzan1jVQHj00emZ3sdJffHLFlkcz5JOV9Pr/t9+vKhpFow7eCMVTJ8SZ7yPIxR+qlojQOCSiqDdWNMT1ELduaBtK3VDyWohXnewLYeFUOPJsgABgQxmgNbfYCGIUzhDK7auqloE4EYoqMUHEgULLngXoAgFx20HcB4A93tdHP6REDEAQdOBbzrPmWCC9Hw2oSD7CR4XRAkV/EgC87QdAAjAAoAB6rTHXgQyowePYVp1SC6Ajz/zmj+hfyGwZmxccd94l4QF2QBWJ9CO77lGDZ63hsxGdwUJ3uHbsf+IBsORkpBg0TEJETEiAQiIggAaAM6T/OFcO+pFyByzoJ+Q2sRAAMggzAKQQywDAQNgAQEO8AAAMcRQAEohjABBBHAeAGOI8AIQQlwAggHgGAAoiDHdAggEWgPCECsr9jyvMHrEACgCoDUCwAA/avMSc2Uc5QTEIdcRgHJlCkhBMEaUUMHK5gGIlmJIxrMzCIolYkq46VqtlmAkMJeRGsZRGJKpgOaNmhkpmmBSe5EeOjlEqS6paAkDw7fFMawci7YeSXoHa2G4YYcCoHGhEtwS08K4sAyO27GL0OpUtfLzLoWq1L3E2NsOMoyStcAa0RG3SWEfWyStTqWbrGzyjlq+NcTlaD9jrqp0Bvt3RYT/02oGORFnzeQ3UcoxozjPI20Y7A8ruJFcr976M/ZDaHQC+fSUUfT4H3tUx4AvQ0p4yREPdtVEMSOvqB+EV4bCxu5vr7TX39BhbLvBBx1Fd3SWj2a00elTGukPOC/x5Rwfn9ao5lytmrjMUP37jsWU9/abeAXP3/7nw/xY72oHgAzTtPLQQUgcu+dYHbUR6paa+yScZhHyS0STs8ORTb/GZ6lQmjyPG6PIl0E43AO/C1czvH6SWIo/a61ZWuvkYi6tVjcoANwc1hC+UQAO+2RNr9yCy/tq0NnoinV9dluOVHjaMS6aNZmx2Ncfwp2d6jqqT2sSWSY5wYuvVoR57wplupacnUWYP83iV3MSuONj1GiEFhsAkg6RkuQL6NYJBNJIBDQwZGWOEl5cCBryuqq5e5/Go2JbWjptBv56TNQf5UAJrbMcSgRujHPQGDLQZJZAFYZCuCMDWNCXiZM2wlz6YbDX9ejl75skQ6uDjNNnZp0MF9c9em36RirF2D8Yp+XZbw+lFYzw9Q5t6K1enfEVWKvfaVZ4Yo0lluXglZ9SJbrWZA8lLMjl71+1JKwqMrmbcellnr1Ob949t9Jzv4OHTI02Ur/1VPtTlGp32y4lM8+FSaVuQFARf6FM6Zj+6J2oOI+VIFaJPs7JFH462zpVyW0Sbqsq2dQ4SHLicuGQPBIBXit8I60tp0i9S78r7gsuabbtstX26lHTghNZ34dwx3eFyjda7Iz1ml6b2eLIroFYfupfUduzdi/EOl6l2rS1Jt9zRuw+pVB0ndQdyns/lMnZlNx/Wut3KgHOQF9WdGuVVeRzWcHhe0BDu5nwhvRHcLUrnXny0JHPLDbrX3Nox6HR4Im5N9LhisFG+Iw9SqwcN8h5QXRxztSf12LTO3rxzE250z3Af0foaANrOKJX1PWOOznzaY7p5rBSyFQWKbCj0qk94Lk8PaXL9PL7U3Nzmec16yIYHP8XCfxpZnHhn4a8/sSp7is4OOrtn2m6z6O5p3W5FtqJQ8XHdRaRFdRtyc259+iWFvNL4s5VU9tNNr+7NG9pbtFR13yC0gh8ppDb2iyP81qXDxIf/fDQ3lBVqT9m9KZcWsVGDWZLdJ9wmYlOksriuvhSGjcvUDw9lHdmwPVYYgqqotRlj+zOzQtF/n9zP95MxVctb/x98lWhoIF51sCFaGb1sU8PM0hp2PIz/XpTMbt29KnPml2tzNLmVw8SR8WwKOz4Cktxy7VtZOWvFazQwnh3/SN4HkSV3KLmMukeYIu5QrIpM9tU3bCobrQKyvPDMgzEVOxr8EbWGcW5FJah6876VUuk6N78GBDY4wAmcWRZVoxLn1jWMX3Ifq20lZsXbR0/+5+GQhyf/77RBGYL9GEeF6X+IJLfEX+C64/ixNLysYaKJs0ZZ9V0d7dJw43ezb/VtYQMMlfZB8eNxhRmNAoP4uKGeC46YM8ip6WIjZ8qoEtP02nHyyy9JrTlOBGr6WyS/nLCrQV+458awLVOVpT9f+Im6e33EifMXJhrDE7JFNrhWeXq+IrqtzKvir56fNWv3kDkIpvClyQsTuPj5utVjLSUQT6bzPBpmdVK16QjS0/muLon9sMlETEFPCq/r11b/4NhIKJDqxZhVr1TxHw1O/vqXs99vTy/v6/rxx1w60XJlK4Gg+rs+fu2CT/su9BFfX+u7NtLHIlnThQ36YF9Qei3YJEPs7YlvgwZs672tFHTtzZZ0SbL3ekvA4KalFrRlC7II6y2bLUTI5s3RU23eEr/iL/wp0/Uy4fcTL5vI2qgO/A3zV2JMrixTPlcyiyOes6GFsN5gW0hwG65aY9MyVXLLt58UFM8t/uRbq7yyoKigwKqwfPNxQXF+sSEF2H1ZSUYW/Jmh+Zaev9zmmETXKEQMtyM0cLOE1qR0Dlxjf+hLWfKCcco742xf6KI1MzTRaVE1M/b+OGX3azVRE0JCpx6kJaIndtb8J+2/mk71Tzrtj/B+i6vA65XYn8415eASrlMw05+KeZzq5735oT4yC6wak4xJ9WXwS/OV+/Xf3v4toH5/rY9c2Dz4xZwHlsp0N9GMU4zd879BhQ2xvtjauLTCp5z1ntWEz/o93xv+/TSqWRdXG7sjJbPF8EIut/nC8LLjYc5qVa21gKHv7+hCf+r2HQjP/6BQtGkawVXHFeGGMdnXdo1jKqT02OPkcpK8z+n/6B5WDMXqSXOiyueKjfja7WXfZ1E5+lhynGCKYUGlNt3yzqU2+q27Snb7mpTeU00Dq1JWfrfRdu7mIEaTdS9WI51LVnOx/Mx80fZw8FaED4DINUNkumf7vqfJ4TX89pFLAeCuT4YZ5EN8b4uKdCl4OibdqCvpb+RyUmRWjN9w3bmX/dG4NiYnCXlfO0CqH9HWglsVGZaw03/Z0E9yMz4aq872IOLvt9pSABAjcIZ6kD1+NaAQQOTvpN5VFKao7w5SylmlgULgcSCLAIDFIIBHr4Qon4wbpLzVlhBxQvGGCCJDEEksXpvSNyABWhoSEpuFsFHy9qdFswEJlQQARtriIETuGCLIdCKS3ANtSv9jJKDyDRKSh0SYCUUfkbbzS9LulREEnaofKlnqvSwmu+Iv2i//hWFogeMqz+YPuaR0dTLHdP4n9sh9bFPGcBbxyjN16sM5H7Ytqcx0QysmiuTr4eBt2xpL3WTnlRHEuHRK/fCYLPV+M9kp/kJnvvwXhqEFLmn2J+YPa/CEhSsnxhHan7yv1excMIqO4UxI8krVZeqUD5KwFTmkZPtqN7RixBZZ+erAuvN1uVnKgG63p4BW8J0VmSHJYLLYnBvOG3J5fIpOlSfrg7Ulh88lAqPeBEtpkoisC/Ior10WknJZDbklcKuWAg2ycakPAm2zxn5zJwZc9WYXpvs2Q0Bd0j8uk8dbCtQtVhZ6i61O/ZgEZEdYbVGIZQ7O7V0p011Chdt3J86cCuo72ggymQAAAA==') format('woff2'), + url('iconfont.woff?t=1611200069054') format('woff'), + url('iconfont.ttf?t=1611200069054') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1611200069054#sf3-font') format('svg'); /* iOS 4.1- */ } .sf3-font { @@ -15,6 +15,10 @@ -moz-osx-font-smoothing: grayscale; } +.sf3-font-qr-code:before { + content: "\e716"; +} + .sf3-font-share-from-other-servers:before { content: "\e70f"; } diff --git a/media/css/sf_font3/iconfont.eot b/media/css/sf_font3/iconfont.eot index 68fead9060b649c5514aa7813559a06bace1d575..2aa77daaa668cedc239a0ac3dd3fabf712733384 100644 GIT binary patch delta 1407 zcmYjRU1(cn7=GV#l5?6g>FMeDOVXyEBsN(kW^MBaPP$=(qU<7LYM~S~ww-k}w$=@* z9b~;w2VTq(6!Au!MG?AM*pHJM1RaV6L2$Gxy(kJ_K)lQB#h|J0m($|T;rYJzynoMk zp7$jG99c_B117*FAc z0IuHv{NvM8rOEE4`L`%{hme~lhy0g#ne1-}4^NlREfkO}z`L{*W@aZ!L9=It>TmFP zxwJ5c3Ajmd>JRp-rSjD0ABXOp0_e&RVR>%$^>Zf+@#g^aWlH$7I*GA96?jX+*7(l$ z3(DjFLc5C`0NY2c!r@+B!62&DAMg`2tJA`%>P;bZe4|wfa0kSem89KEtv0{~A5vuq zI=P1l>@*u?B{t8_vo&^`t+TszrEXSzV#rlD_xGzyVsH>Cz2|}327X8B22iL`2l&AU z?L^=K8QMU)J|kLK`Gud5u1)|(@4!Lnzyt>^|7o%b)B@P318N4WAycrlocue@>{wm~ItBsH)P(t1RM@qAASe`i4whipDcJTvH80ZQkOmIEs2# zf03?!)xbva5$@dBZM^5}_637{*?b^*fO06m`4!&{^~c=?{@rNoz0LEm)9(!h{C>e_ zhQrC89;}Q}%3&%#O(o5*ISFy$Q_IT~{JGemwH11{(Kso~oyQbeR*nfD93Bs!`JbKJ z#YUs?DW&vw=yIE41_K@8B(a5C(*G{r5N-Mz{Ll>v$W@>~(vLw2&cZw_lJqG|L`ZET z(ih97t$3c)BJoH|DQ=OPGz}V#E+Gvd&2x=jOh@8kHf;=JK4L^@jrCCjnh}{PZg52t z!zkxXOO7YxVRS_1@rp&M`POp^bK+xY2lw8zqA1*N4%BL2csy=ZR=NaL@v4^;UGo!~ zwc52dkJ!AARu|4ZQLl9-L(PjQ3bOnevc;>Scy*Dl%f|ze$e@j4=BNA!NJrUnLZWJC+6 zHD(;qY6nD|ZmiWi5VS9kDD6*rWIJfvL$>XeecpoP_aupy$gh7Z?fU3%=$2-;V;9J; R%|ALZJ2_R|(%z?^(tnqXCf@)6 delta 978 zcmYk4Ur19?9LIm>-0j}!bX#}c-Fc(w?w!j*7rM0(tg)yESG^1&sfTK*Imqe!M;5^z zjEssvM$n%J>B$~q3KsY$K|%`BClv~U5Q1ZbZ<+Ms?03Bi-oxjd-~Ii5=llEJbM8dl zMlIi20kGg4;ln0(kGwn*f1D!#J)H4i4xn|6Z(Jr+h;GizZf z*2@Oi1e;>BY<1nfvjf1$fk=Rg5EAZc3s*4lYvo#U4Jv$2nqmeF+eF`DFYM*)@z`D3>z@OLcj_JSQ6N{0Tu^_ zH>#5Z0S&wk9WdiMYk=ngY{dXi1Q=eQ4q#*J*sRXpSr%Z6M9C9cM*TEIuhN%vlgn~H zOtq#p^BQJht2=YtG8e~&Yo8E*Q! z=sQ(xB{F9x%|qiHH$J4#g|muR4XN5lFK_QN_Yt(!pmxj3Jv3YBX+`w~y(&i)O;cuC z5(!asT1ts7PKmP$D^y9_@o_bAyne~)4v;J7ow2%qfn#6x#Pt$4w4karYOk6c)(fJh gsCqG5xtQQ>)*yzk*yL@?RvG^0T~alH{0r&Xe{EIeRsaA1 diff --git a/media/css/sf_font3/iconfont.js b/media/css/sf_font3/iconfont.js index b598b1d934..da135190b6 100644 --- a/media/css/sf_font3/iconfont.js +++ b/media/css/sf_font3/iconfont.js @@ -1 +1 @@ -!function(c){var t,l,e,o,h,s,i='',v=(v=document.getElementsByTagName("script"))[v.length-1].getAttribute("data-injectcss");if(v&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}function n(){h||(h=!0,e())}t=function(){var c,t,l,e;(e=document.createElement("div")).innerHTML=i,i=null,(l=e.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",c=l,(t=document.body).firstChild?(e=c,(l=t.firstChild).parentNode.insertBefore(e,l)):t.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(l=function(){document.removeEventListener("DOMContentLoaded",l,!1),t()},document.addEventListener("DOMContentLoaded",l,!1)):document.attachEvent&&(e=t,o=c.document,h=!1,(s=function(){try{o.documentElement.doScroll("left")}catch(c){return void setTimeout(s,50)}n()})(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,n())})}(window); \ No newline at end of file +!function(c){var t,h,l,e,o,v,s='',i=(i=document.getElementsByTagName("script"))[i.length-1].getAttribute("data-injectcss");if(i&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}function m(){o||(o=!0,l())}t=function(){var c,t,h,l;(l=document.createElement("div")).innerHTML=s,s=null,(h=l.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",c=h,(t=document.body).firstChild?(l=c,(h=t.firstChild).parentNode.insertBefore(l,h)):t.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),t()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(l=t,e=c.document,o=!1,(v=function(){try{e.documentElement.doScroll("left")}catch(c){return void setTimeout(v,50)}m()})(),e.onreadystatechange=function(){"complete"==e.readyState&&(e.onreadystatechange=null,m())})}(window); \ No newline at end of file diff --git a/media/css/sf_font3/iconfont.svg b/media/css/sf_font3/iconfont.svg index 64cf84ae25..4392ca95e9 100644 --- a/media/css/sf_font3/iconfont.svg +++ b/media/css/sf_font3/iconfont.svg @@ -20,7 +20,10 @@ Created by iconfont /> - + + + + diff --git a/media/css/sf_font3/iconfont.ttf b/media/css/sf_font3/iconfont.ttf index 9eda7b5c5bdf3da581e4201add2afb441c6ad49d..817a43775daf4b50b89dd6cb6bd67d77e897f354 100644 GIT binary patch delta 1432 zcmYjQU1%It6h3EWcW!pGyOYWM?QXJhX4mW*yKa8=53HocEQ(TOOVvOqm^Dp}C2L}A zA)3Or4{G09Srzfc+6F~PW1&?m>4IoL3;f%r9Ts^a2QB!iO)-zJ7G=2Q>rW`4u2|cxJkCr04X) zo0NN#P?#YH`&&Fq_I1L8Gu7jZB_s>*XBtYgb5oUw(Yr$Xukv`cvN(?^_=4h8AFNj@ z)#*<^irzX1(48Z~>ipbm#}AZ}&jD!5lE671-s2G`Y25(=_tL}nDfK@57>)Wjc(5K6qN$Cx7hoO4ww0#YPpKQ=fe$D@3SHb& ze?~B@En{~Vz(MDbGwxKJ1?Pmb>RfZyoEuv*kJbMaBEv{qdhdHJ;BTB>0GWz~AP52I zBoZGmI-GQ6T`;ls6NUNH#R*(cIyiK8j<)|0*#s&9&bSLI22RBVl?7+P1rdOA!Ug{x zXVnFfg7dixq6g=)iyEB-oNF#XqIt~)Q1hJ|E=Uq^sF55b3T)8=EhKoCL(hqVq<98%h5ivklj6x-0WT}MuC%`7qd1OQ_duDR z0Y%4V`C;zd*lwN+^aLUiK5X8XJVZH^-};Kry7K*Y6aQ^Cci!T8*cJ3g!@-~sFk-QE zZ!gv+DCKS{K1EwvUvm=T!Y7xPDfnZ#Nn<IOAOlaLya<+*wvX6>Yy&+4OCv~`=tL_Zav9+8>h23IsSimYgu zESX}X=!(qaHIq_{?R5qV;-hFqcHS`KDBNxhH5#A!d|rjg-GUFD8q2DV{*c+G1^`Gk*I5z88}EI$kQOH$C6CR!qI-=5v`;!SaqE@}_#fhz;jKLJ$g YA=T={ZeXu2JTf(RWV$}6zDJkqe~DQnv;Y7A delta 981 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 diff --git a/media/css/sf_font3/iconfont.woff2 b/media/css/sf_font3/iconfont.woff2 index 463d1856bc1be0b26fba8793a2021b747e6fdd99..09463ba459e66bd8b7ddb64b9f5fbcdbb1471de7 100644 GIT binary patch literal 2908 zcmV-i3#0URPew8T0RR9101I3I3jhEB02PP;01FKO0RR9100000000000000000000 z0000SLIzd3Z3ls38`}{xqqd8a5+VDq66h&=v^=8` z-nOmXIwS1|j7Q1*xm(vY{xeym&zO#HHJ2`07& zr#7e7HBcTsGbTMGvt$%^!op|->)hfMWYVh2*pz;#F_6S$i*M3mWa?e zB%-J{Ry4%*5Vvk<8%o_!@>+;jo$L!?;Z!*CY=8h@Lm8kox7Y|`6wVOJ?W?MmfjAM0 zDltLCfkMlk1?U0+aoa)M2Y@}^*GE63L<~R>bl_Xgv*uVJy&nyzNIt?xh0y{tFaV$cdaW_nfefg@Lo~oxwtPxOVJ+;sLPaWTY50OhQCVNPt2jAb6jhmu}_ z+SqOwVZf*yXhgRJwD7Jh10%NVV)QzdEquJop=z}+aW*!?jH4v2a0awQZPHjr*2ybV zsb=dNJfoJcjd3|z57_IfodLex(P2OI+JTNlS@U@f)N+hy&NIl{Mmqz_?j%<$_r8q% zklGypzI`PWeLe@?)iK};(9)hVL_^)RQ4C1y>IdN!;jpp0o9pd0_w*QBF7QFeQC;07 zquH%AdQ`@`L(U8Qc}EB5^{P3SD`u`U6hD6Bv1L8|rrrT__y4)@{}wyif#3r)?L4#) zQU@;i)(34wdZnhm$tM|ve3H>5?C|7MZ}FMxR3?uj#^~}T&`vi1@50s0?;oU=B9GeZ zR#v+C7>lb_jmiKw2Q`E*lt2T%*%NE`AhQ12v^IJoonKv+V}zHN0tURUs;*w=@u=9A){dJ&zn+sd2l-F}Yi!37fg7V7^ac#H86}VfVUVr} zz}7S+;$+RRmp+(mHT`-yd*;ay>fqxv+1aN<1@+Hfn|_gsv33u}DfxC=!|6q1JUv63 zdMj6_d_`6&_u5sS7^6vLxp*aK)QN7jnFGm7GC6zK?MW*NjIL(fdRb?$Q=9jXZSV>q}|UFH-Ny`-01wZM$r>eY%u%;Dpw9;oLFZ;c|`E zyCXejm!|f3vMZogAG(*+cI@4Y@eY@%cC9T*x7^XY52;igCv^vMp3mhnc4apo*1Fxw zfOC)+)twsURe2oNaClzO5boxDA-xgYElTHJe6%EU%MH5M+}bhdba*0eP4u{8uu;Av z4^pcK4e}mPT^w_@C-vC0&fdIp6K-_Ra39h78UWhPD3$d+V~);z+GDzTtQ4{p1&VAa z^r}yIE>90>a{WBM)ZEPuaaGmlm;6gISW@C)_4tQ>3!EuD%q8jmy*z4`m(Musv27f~u&s8Dsl1 zvqI5-pWM&)lQC7xTmK(?m1t-nUUje`S{c1;Q^U;C8g@L4|6Y{LZr!~qbLN+8b2Pb? z!^DyCYzjL*0+QTv?ORznYsG6cFrFR%NZtpLC3h&fjJijdBJNPEicI#^H*6{!tpc*V z@XUiT6+0UI5w(VKZbc=idh@=OQt3K3zXk+0IKT;3@hMx5QuIy5snq_mDXVrtqc73lq5b z`MT9(EhP|7rt>@+W_41v=?K!(`K~UB{jkYIOhHcyuj|)V|KQk2D3I#Km{qS-@gEIN z{`!}*-)~PZ@9X;U$6Pwma%C%lp!&N$e(i!!`!4hmUtjCHHqyr;S<{6L`e0vBdM(%_ zL+tH|Z-WMG>%FZMbnVTSbV;)JdP~6Irll6NWec(h>n)otM9AjN(Nk^S62Iav{3+A* zGU4|VFPq5Ps1E!M^H*X_t}IhNS2Bwup0lBau-;%>NN^jjT4U2PRdUO>pA;0&E&k+N ztGu$HsGz{Auzd4zL2-VuAqCidSxH6~{F$NomY%=d=9om+C`1gmBQ$Wcgw~{V4qRh@ z=u27hf^o__<7{8(qBS!#(P>dNGxq*CW%p|}Q4>N!ryiswq9=CN{3q?dnojjkI_;0} zev7NX>y_A_&Nb!W60TD))1QiYoa*Pj`Jp~C3#=NGj7jxn@JsWR`}N=6{w<(>f31&P z*gW{foClW5bT`qAQ;gm7zd?l!vA)>axU|Bjob{g7gwOgt-y8n@G^$w_R~x${C9}ow zLN2%Y!tk==Va{q*t+jxm@9*eBf9m!f2+#kZP_$_p!Bxi<;f68U*LIC#Dx~z-;~oM4J!L8Ug`^3J6;`mMW4cKe!?-cwBj zt5Q~ex6yX)<{(CsbuU&Uol918vHZ+@(e`lgR)i0L$TdS`x@Y^or^(?p{PvMc0pPAr zh8g5Td~b`2bSZc`Cf%qj>2Kt6Qe;+)-*DZzm;KSWHYO(td0#s~svptTf?E|Cmax-* z+0ajNGd>!t&h{YU@3-1g01zW^hI)`ael?&FK;-YF-c=N)sP7I^%2}m>Lf~;AivWPd zAb>}&geaek8>GC|mJo45@rDQ@Ll8+UUYpW4AOTt$5)zw*uu<~%r$w^?36%r@M%v;a zMD7?O$aEr-+yiY&|6?Se@(mJ_heVhOMIVv2^Gnk1l@SD;svjy@>b)!`yW%g}FaL#M zXo2G@&*l%gq;z#M$8`QD_Q-u~Q^s%>@yauG>ccr7wk@g5bVDm9isb9z;BDI)OWkDW zl@Y|abV~j3m@M^vGubKrLTA4G7lxq)E@}2B<_~M|goP_7#u3_|ysy>lTri4`;Y>*K zO4ViRln;`y6*;72`)W6|V#F3%`Rc&B^L4pd%7AXSr+`-QofVlO$zZbBoEy#?a(R4; zPL(I?gS91x&m{t*-ULf&l8CGe@+hxe7LsyV4Y?(7tCj){vT>;o0&TO#esd=VT=ixb zru#NSKwZ*5E|bSw3e+uD7J7@VPW_k!WJg$SQHW&@&h1?((_KP^+jl3YvB~sPrZ_800000Z~*`S z1pklwv2*vfFOHZ*Djo`nRH$0<)=f&Ie@fitvgIkQX3+oLQM;->pWBqblAF!m|9~o0 zSrkez2noV5Ab_`j)nA~Q9uf?qDDVOdDB>p({*VOr;b~L##W-5wVJ6YpQ~5UzwOUKmftqHh+*gpXQ@-f9==m8D{MwW{prhbwb=d-}`$9 z4;M>BXbd5VdJ_#955+2>5lSVLjDmQztS^)Uap2YvD9p-#%gu-9SFDFeqz6Ba31os?Q&ITMi6t zV|XaX20jZm**2LXEj%-?@{G+sEnIq+@*iw zag0W*Rw)&Ka+yRb@Qfp91WZL#ev?}CP}rhDj|qS1Y5+B;7C;5M0YC|A08oHF0U!sR z0+4}D14uw;0HmPj00hvB06gd;00!!XEgb&2;+@8HYKeJ_UCdqp{0((GA7!Eurw58Z zG7!f0OfDQ36hg8&gqZg+b|{Y38?M` zo4j7N&qoIWTEAayaT*V7wa3b?G+D#Hhq}GUdt5Hm=WtdH>rGcZ)M`H=>G><7l)Ybts z3S3<7{oAvQIsvfN=yN^B9Dt@p`{YD90L`gVHK2dw#pE zVq)~Ty!HIqX+_&u)X>d1Mr)O|%*0qnrPA?R(ZkbS7b477P0Or}NeteIwT(+8V7b;hcJZBT64#cPY!4qhRD0@|T5 zPKJZTnbfTayQMnMULw0K zJR&$!o%myY?JZ%UrSn&5;-{;BZtTaVrm+1CDJ;eAJ|?HiHYl)keuf||?De+2)$2Yt z)Rr2;*!&E#xAd@W)Wo7AHI*+YE-3`*sp&9X0OGnEEFOn-OGCux220P!;e7EGH=QdK zigMGttivPG*9LwQY$q*;VIACk@Qp1LwbN$Y4j59%Mm`i87w(32mc!eB$sYD?B<5vn z`EN~~c>nIayC*)f7(fHudl1$N3VsV^Uz_t8YM(*(Des2fEDfy}=;cw(Bb2xAo2A!+ zhq$98E8|~F?x)n2_Jt(OnMvrT9gF%5JXUv+66#_%5840R4F37&xRlKh3@Q07VxEqC zr8l*nP}$IqS5QhPHiLJeTH`P53jaJa!PFR?1Wf0^V z>tj|&(h(~a+mdy4AObHj(g0BGCIt#0C@C>|JRDhGIhaR8&J;W!yJPov=KUBSN}d#L zeP*-qKXYTg{OQcMM@t%mp6|b}BBFF}AI2cq{Y{YWTlN3o`5^Xx^u9XWp{pa_^ zI)V;r*3r*_-0N9yfsDpY_m()s^Lho_!>)MU90SblU$29Q4nZB`A3CVRJPsao&+6cz zh)sW>|C64lv7R36X${^Y7(-u?e?*C@IAy%$>|z?*Yk;f4-)C5jF$U~)k3mju=IOrv zpK8hSCI9V^=Idfks&fKDZ z*Y>vn-EX$E;;RSdK3RE3*IZ)522h&XxAH4k+Z)yz))Jmk`;gY((reI}9_HJGzyB{7 zP=vRH9ZM@4On9P-K6rj%!;F{K>m@sMAR+jtu(l`t=rM>^{;M|hKt4wA4quFVlPYFk zNgDb?V3zmQ-((Gk|#^rO=X!iPsZ_8Pgv0->hNN&QaW_gLO^Wre^ z(oHe<==QXLR8IcM)|vnPoxQ3gW#wOCGHQ9dyI#33s_A~`Xh3w@Lp+&qjB)QG zz#x0DKh7_Dj4=s)GR%Hgqsz1GIIzdOd562~dkZgrV{jTs{?aNwJy1-=w>07Yy4HWn zi06($e}AhEn-F{I74#=C<6ek9g%1m*Vh-Y;W4%kLSGVt45aJ$1)A_iCWjj)^Ht?Vj zI_S4ew~<>#f608JH!~+SLo7~ZnRuvdn+2sEl0aqOtgz*1`O*;7PB8~Iy}(R5pJqfUCQ;Ye`N*%|`m1QECdI$G-ryOhmwclnQ?WZ$J*lV)R@^Q5ozbCdpM{Ul7ta zX;no06)xhD6WfZza{eG>Pu2h=Qe;ZRr&g8phE!grI7&slIrP3Nkm~n zHzbQ3rlBiQi=b=urb0u(+dJs=udkCtJ%Ujw5(!bkCQVC%mVdGi?~vL>5cCJB@