@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.2.6 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dpr/all.mjs +7 -2646
- package/dpr/all.scss +253 -83
- package/dpr/assets/css/all.css +1 -1
- package/dpr/assets/images/icon-tag-remove-cross-white.svg +1 -0
- package/dpr/assets/js/all.min.mjs +7 -0
- package/dpr/components/_async/async-filters-form/view.njk +32 -6
- package/dpr/components/_async/request-details/view.njk +6 -6
- package/dpr/components/_catalogue/catalogue-list/utils.ts +1 -1
- package/dpr/components/_embedded/embedded-report/utils.js +3 -3
- package/dpr/components/_embedded/embedded-report/utils.ts +1 -1
- package/dpr/components/_filters/filters-actions/view.njk +9 -7
- package/dpr/components/_filters/filters-interactive/view.njk +11 -8
- package/dpr/components/_filters/filters-selected/view.njk +30 -24
- package/dpr/components/_reports/report/view.njk +2 -13
- package/dpr/components/_reports/report-columns/view.njk +13 -6
- package/dpr/components/_reports/report-data-table/utils.js +23 -3
- package/dpr/components/_reports/report-data-table/utils.ts +37 -3
- package/dpr/components/_reports/report-heading/view.njk +14 -1
- package/dpr/components/_reports/report-template/view.njk +1 -1
- package/dpr/components/_reports/report-totals/utils.js +4 -1
- package/dpr/components/_reports/report-totals/utils.ts +6 -1
- package/dpr/components/_reports/report-totals/view.njk +1 -1
- package/dpr/components/_reports/report-wrapper/view.njk +19 -0
- package/dpr/components/report-list/utils.js +4 -4
- package/dpr/components/report-list/utils.ts +1 -1
- package/dpr/components/report-list/view.njk +2 -2
- package/dpr/components/show-more/utils.js +1 -1
- package/dpr/components/show-more/utils.ts +1 -1
- package/dpr/components/user-reports/bookmarks/utils.js +1 -0
- package/dpr/components/user-reports/bookmarks/utils.ts +1 -0
- package/dpr/components/user-reports/utils.js +11 -10
- package/dpr/components/user-reports/utils.ts +5 -3
- package/dpr/data/restClient.js +17 -7
- package/dpr/routes/asyncReports.js +3 -3
- package/dpr/routes/asyncReports.ts +2 -2
- package/dpr/routes/syncReports.js +3 -3
- package/dpr/routes/syncReports.ts +2 -2
- package/dpr/services/bookmarkService.js +28 -5
- package/dpr/services/bookmarkService.ts +31 -5
- package/dpr/types/Bookmark.ts +2 -0
- package/dpr/types/Templates.d.ts +8 -1
- package/dpr/types/api.d.ts +8 -1
- package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.js +61 -22
- package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.ts +82 -29
- package/dpr/utils/SectionedDataTableBuilder/SectionedDataTableBuilder.js +188 -35
- package/dpr/utils/SectionedDataTableBuilder/SectionedDataTableBuilder.ts +206 -51
- package/dpr/utils/bookmarkUtils.js +15 -0
- package/dpr/utils/bookmarkUtils.ts +28 -0
- package/dpr/utils/downloadUtils.js +2 -2
- package/dpr/utils/downloadUtils.ts +1 -1
- package/dpr/utils/embeddedRouteUtils.js +1 -1
- package/dpr/utils/embeddedRouteUtils.ts +1 -1
- package/dpr/{components/_async/async-report/utils.js → utils/report/asyncReportUtils.js} +15 -37
- package/dpr/{components/_async/async-report/utils.ts → utils/report/asyncReportUtils.ts} +31 -58
- package/dpr/utils/report/syncReportUtils.js +166 -0
- package/dpr/utils/report/syncReportUtils.ts +278 -0
- package/dpr/utils/reportListsHelper.js +1 -1
- package/dpr/utils/reportListsHelper.ts +1 -1
- package/dpr/views/report.njk +7 -0
- package/package.json +1 -1
- package/package.zip +0 -0
- package/dpr/assets/js/all.mjs +0 -2646
- package/dpr/components/_async/async-report/view.njk +0 -5
- package/dpr/components/_sync/sync-report/view.njk +0 -5
- package/dpr/views/async-report.njk +0 -32
- package/dpr/views/sync-report.njk +0 -32
package/dpr/all.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+"").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",t="(?:\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",p="\\["+ge+"*("+t+")(?:"+ge+"*([*^$|!~]?=)"+ge+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+t+"))|)"+ge+"*\\]",g=":("+t+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+p+")*)|.*)\\)|)",v=new RegExp(ge+"+","g"),y=new RegExp("^"+ge+"*,"+ge+"*"),m=new RegExp("^"+ge+"*([>+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="<a id='"+S+"' href='' disabled='disabled'></a><select id='"+S+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&V(e);var n=b.attrHandle[t.toLowerCase()],r=n&&ue.call(b.attrHandle,t.toLowerCase())?n(e,t,!C):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&&ae.call(e,0),de.call(e,l),a){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(b=ce.expr={cacheLength:50,createPseudo:F,match:D,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(v," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(d,e,t,h,g){var v="nth"!==d.slice(0,3),y="last"!==d.slice(-4),m="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,c=m&&e.nodeName.toLowerCase(),f=!n&&!m,p=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u="only"===d&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){p=(a=(r=(i=l[S]||(l[S]={}))[d]||[])[0]===E&&r[1])&&r[2],o=a&&l.childNodes[a];while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if(1===o.nodeType&&++p&&o===e){i[d]=[E,a,p];break}}else if(f&&(p=a=(r=(i=e[S]||(e[S]={}))[d]||[])[0]===E&&r[1]),!1===p)while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&&++p&&(f&&((i=o[S]||(o[S]={}))[d]=[E,p]),o===e))break;return(p-=g)===h||p%h==0&&0<=p/h}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||I.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?F(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:F(function(e){var r=[],i=[],s=ne(e.replace(ve,"$1"));return s[S]?F(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:F(function(t){return function(e){return 0<I(t,e).length}}),contains:F(function(t){return t=t.replace(O,P),function(e){return-1<(e.textContent||ce.text(e)).indexOf(t)}}),lang:F(function(n){return A.test(n||"")||I.error("unsupported lang: "+n),n=n.replace(O,P).toLowerCase(),function(e){var t;do{if(t=C?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=ie.location&&ie.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return T.activeElement}catch(e){}}()&&T.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:z(!1),disabled:z(!0),checked:function(e){return fe(e,"input")&&!!e.checked||fe(e,"option")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return q.test(e.nodeName)},input:function(e){return N.test(e.nodeName)},button:function(e){return fe(e,"input")&&"button"===e.type||fe(e,"button")},text:function(e){var t;return fe(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:X(function(){return[0]}),last:X(function(e,t){return[t-1]}),eq:X(function(e,t,n){return[n<0?n+t:n]}),even:X(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:X(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:X(function(e,t,n){var r;for(r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:X(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=B(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=_(e);function G(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=y.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ve," ")}),a=a.slice(n.length)),b.filter)!(r=D[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?I.error(e):c(e,s).slice(0)}function Q(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[E,f];if(n){while(e=e[s])if((1===e.nodeType||c)&&a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[S]||(e[S]={}),u&&fe(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===E&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function K(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Z(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)),F(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)I(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),p=!d||!e&&h?f:Z(f,u,d,n,r);if(g?g(p,s=y||(e?d:c||v)?[]:t,n,r):s=p,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(s[l[o]]=!(p[l[o]]=a))}if(e){if(y||d){if(y){i=[],o=s.length;while(o--)(a=s[o])&&i.push(p[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&&-1<(i=y?se.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):k.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=J(function(e){return e===i},a,!0),l=J(function(e){return-1<se.call(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!=w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[J(K(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return ee(1<s&&K(c),1<s&&Q(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ve,"$1"),t,s<n&&te(e.slice(s,n)),n<r&&te(e=e.slice(n)),n<r&&Q(e))}c.push(t)}return K(c)}function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+" "];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[S]?i.push(a):o.push(a);(a=u(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=E+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==T||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==T||(V(o),n=!C);while(s=v[a++])if(s(o,t||T,n)){k.call(r,o);break}i&&(E=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=pe.call(r));f=Z(f)}k.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&ce.uniqueSort(r)}return i&&(E=h,w=p),c},m?F(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Y(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&C&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(O,P),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=D.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(O,P),H.test(o[0].type)&&U(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&Q(o)))return k.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!C,n,!t||H.test(e)&&U(t.parentNode)||t),n}G.prototype=b.filters=b.pseudos,b.setFilters=new G,le.sortStable=S.split("").sort(l).join("")===S,V(),le.sortDetached=$(function(e){return 1&e.compareDocumentPosition(T.createElement("fieldset"))}),ce.find=I,ce.expr[":"]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.tokenize=Y,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var d=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},b=ce.expr.match.needsContext,w=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1<se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)ce.find(e,i[t],n);return 1<r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&b.test(e)?ce(e):e||[],!1).length}});var k,S=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&ce(e);if(!b.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return d(e,"parentNode")},parentsUntil:function(e,t,n){return d(e,"parentNode",n)},next:function(e){return A(e,"nextSibling")},prev:function(e){return A(e,"previousSibling")},nextAll:function(e){return d(e,"nextSibling")},prevAll:function(e){return d(e,"previousSibling")},nextUntil:function(e,t,n){return d(e,"nextSibling",n)},prevUntil:function(e,t,n){return d(e,"previousSibling",n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(fe(e,"template")&&(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=ce.filter(t,n)),1<this.length&&(j[r]||ce.uniqueSort(n),E.test(r)&&n.reverse()),this.pushStack(n)}});var D=/[^\x20\t\r\n\f]+/g;function N(e){return e}function q(e){throw e}function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},ce.each(e.match(D)||[],function(e,t){n[t]=!0}),n):ce.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){ce.each(e,function(e,t){v(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==x(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1<(n=ce.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<ce.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},ce.extend({Deferred:function(e){var o=[["notify","progress",ce.Callbacks("memory"),ce.Callbacks("memory"),2],["resolve","done",ce.Callbacks("once memory"),ce.Callbacks("once memory"),0,"resolved"],["reject","fail",ce.Callbacks("once memory"),ce.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,v(t)?s?t.call(e,l(u,o,N,s),l(u,o,q,s)):(u++,t.call(e,l(u,o,N,s),l(u,o,q,s),l(u,o,N,o.notifyWith))):(a!==N&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&&ce.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==q&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&&(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:N,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:N)),o[2][3].add(l(0,e,v(n)?n:q))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(L(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||v(i[t]&&i[t].then)))return o.then();while(t--)L(i[t],a(t),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&&ie.console.warn&&e&&H.test(e.name)&&ie.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var O=ce.Deferred();function P(){C.removeEventListener("DOMContentLoaded",P),ie.removeEventListener("load",P),ce.ready()}ce.fn.ready=function(e){return O.then(e)["catch"](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&&0<--ce.readyWait||O.resolveWith(C,[ce])}}),ce.ready.then=O.then,"complete"===C.readyState||"loading"!==C.readyState&&!C.documentElement.doScroll?ie.setTimeout(ce.ready):(C.addEventListener("DOMContentLoaded",P),ie.addEventListener("load",P));var M=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n))for(s in i=!0,n)M(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},R=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function F(e){return e.replace(R,"ms-").replace(I,W)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function B(){this.expando=ce.expando+B.uid++}B.uid=1,B.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[F(t)]=n;else for(r in t)i[F(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][F(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(F):(t=F(t))in r?[t]:t.match(D)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!ce.isEmptyObject(t)}};var _=new B,z=new B,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,U=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(U,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:X.test(i)?JSON.parse(i):i)}catch(e){}z.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return z.hasData(e)||_.hasData(e)},data:function(e,t,n){return z.access(e,t,n)},removeData:function(e,t){z.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=z.get(o),1===o.nodeType&&!_.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=F(r.slice(5)),V(o,r,i[r]));_.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){z.set(this,n)}):M(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=z.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){z.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){z.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=_.get(e,t),n&&(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks("once memory").add(function(){_.remove(e,[t+"queue",n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=_.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var G=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Y=new RegExp("^(?:([+-])=|)("+G+")([a-z%]*)$","i"),Q=["Top","Right","Bottom","Left"],J=C.documentElement,K=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};J.getRootNode&&(K=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&K(e)&&"none"===ce.css(e,"display")};function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,"")},u=s(),l=n&&n[3]||(ce.cssNumber[t]?"":"px"),c=e.nodeType&&(ce.cssNumber[t]||"px"!==l&&+u)&&Y.exec(ce.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,ce.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ne={};function re(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=_.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ee(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ne[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ne[s]=u)))):"none"!==n&&(l[c]="none",_.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return re(this,!0)},hide:function(){return re(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var xe,be,we=/^(?:checkbox|radio)$/i,Te=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="<textarea>x</textarea>",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="<option></option>",le.option=!!xe.lastChild;var ke={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],"globalEval",!t||_.get(t[n],"globalEval"))}ke.tbody=ke.tfoot=ke.colgroup=ke.caption=ke.thead,ke.th=ke.td,le.option||(ke.optgroup=ke.option=[1,"<select multiple='multiple'>","</select>"]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))ce.merge(p,o.nodeType?[o]:o);else if(je.test(o)){a=a||f.appendChild(t.createElement("div")),s=(Te.exec(o)||["",""])[1].toLowerCase(),u=ke[s]||ke._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<ce.inArray(o,r))i&&i.push(o);else if(l=K(o),a=Se(f.appendChild(o),"script"),l&&Ee(a),n){c=0;while(o=a[c++])Ce.test(o.type||"")&&n.push(o)}return f}var De=/^([^.]*)(?:\.(.+)|)/;function Ne(){return!0}function qe(){return!1}function Le(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Le(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=qe;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(ce.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&&ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.get(t);if($(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&ce.find.matchesSelector(J,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof ce&&ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(D)||[""]).length;while(l--)d=g=(s=De.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},c=ce.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),ce.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.hasData(e)&&_.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(D)||[""]).length;while(l--)if(d=g=(s=De.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=ce.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||ce.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[l],n,r,!0);ce.isEmptyObject(u)&&_.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,"events")||Object.create(null))[u.type]||[],c=ce.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=ce.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<ce(i,this).index(l):ce.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click",!0),!1},trigger:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click"),!0},_default:function(e){var t=e.target;return we.test(t.type)&&t.click&&fe(t,"input")&&_.get(t,"click")||fe(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ne:qe,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:qe,isPropagationStopped:qe,isImmediatePropagationStopped:qe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},ce.event.addProp),ce.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){if(C.documentMode){var t=_.get(this,"handle"),n=ce.event.fix(e);n.type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(He(this,r,!0),!C.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return He(this,r),!0},teardown:function(){var e;if(!C.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i);n||(C.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(C.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return Le(this,e,t,n,r)},one:function(e,t,n,r){return Le(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=qe),this.each(function(){ce.event.remove(this,e,n,t)})}});var Oe=/<script|<style|<link/i,Pe=/checked\s*(?:[^=]|=\s*.checked.)/i,Me=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)ce.event.add(t,i,s[i][n]);z.hasData(e)&&(o=z.access(e),a=ce.extend({},o),z.set(t,a))}}function $e(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=v(d);if(h||1<f&&"string"==typeof d&&!le.checkClone&&Pe.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),$e(t,r,i,o)});if(f&&(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=ce.map(Se(e,"script"),Ie)).length;c<f;c++)u=e,c!==p&&(u=ce.clone(u,!0,!0),s&&ce.merge(a,Se(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,We),c=0;c<s;c++)u=a[c],Ce.test(u.type||"")&&!_.access(u,"globalEval")&&ce.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?ce._evalUrl&&!u.noModule&&ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):m(u.textContent.replace(Me,""),u,l))}return n}function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Se(r)),r.parentNode&&(n&&K(r)&&Ee(Se(r,"script")),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=K(e);if(!(le.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=Se(c),r=0,i=(o=Se(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&we.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Se(e),a=a||Se(c),r=0,i=o.length;r<i;r++)Fe(o[r],a[r]);else Fe(e,c);return 0<(a=Se(c,"script")).length&&Ee(a,!f&&Se(e,"script")),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if($(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[z.expando]&&(n[z.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return M(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return $e(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return $e(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(Se(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return M(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Oe.test(e)&&!ke[(Te.exec(e)||["",""])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(ce.cleanData(Se(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return $e(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)<0&&(ce.cleanData(Se(this)),t&&t.replaceChild(e,this))},n)}}),ce.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var _e=new RegExp("^("+G+")(?!px)[a-z%]+$","i"),ze=/^--/,Xe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=ie),t.getComputedStyle(e)},Ue=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ve=new RegExp(Q.join("|"),"i");function Ge(e,t,n){var r,i,o,a,s=ze.test(t),u=e.style;return(n=n||Xe(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace(ve,"$1")||void 0),""!==a||K(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&&_e.test(a)&&Ve.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function Ye(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",J.appendChild(u).appendChild(l);var e=ie.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),J.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=C.createElement("div"),l=C.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",le.clearCloneStyle="content-box"===l.style.backgroundClip,ce.extend(le,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=C.createElement("table"),t=C.createElement("tr"),n=C.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="box-sizing:content-box;border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",J.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,J.removeChild(e)),a}}))}();var Qe=["Webkit","Moz","ms"],Je=C.createElement("div").style,Ke={};function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Qe.length;while(n--)if((e=Qe[n]+t)in Je)return e}(e)||e)}var et=/^(none|table(?!-c[ea]).+)/,tt={position:"absolute",visibility:"hidden",display:"block"},nt={letterSpacing:"0",fontWeight:"400"};function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function it(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=ce.css(e,n+Q[a],!0,i)),r?("content"===n&&(u-=ce.css(e,"padding"+Q[a],!0,i)),"margin"!==n&&(u-=ce.css(e,"border"+Q[a]+"Width",!0,i))):(u+=ce.css(e,"padding"+Q[a],!0,i),"padding"!==n?u+=ce.css(e,"border"+Q[a]+"Width",!0,i):s+=ce.css(e,"border"+Q[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function ot(e,t,n){var r=Xe(e),i=(!le.boxSizingReliable()||n)&&"border-box"===ce.css(e,"boxSizing",!1,r),o=i,a=Ge(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a="auto"}return(!le.boxSizingReliable()&&i||!le.reliableTrDimensions()&&fe(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===ce.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===ce.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+it(e,t,n||(i?"border":"content"),o,r,a)+"px"}function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ge(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=F(t),u=ze.test(t),l=e.style;if(u||(t=Ze(s)),a=ce.cssHooks[t]||ce.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=Y.exec(n))&&i[1]&&(n=te(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(ce.cssNumber[s]?"":"px")),le.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=F(t);return ze.test(t)||(t=Ze(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ge(e,t,r)),"normal"===i&&t in nt&&(i=nt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each(["height","width"],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!et.test(ce.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,u,n):Ue(e,tt,function(){return ot(e,u,n)})},set:function(e,t,n){var r,i=Xe(e),o=!le.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===ce.css(e,"boxSizing",!1,i),s=n?it(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-it(e,u,"border",!1,i)-.5)),s&&(r=Y.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=ce.css(e,u)),rt(0,t,s)}}}),ce.cssHooks.marginLeft=Ye(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ge(e,"marginLeft"))||e.getBoundingClientRect().left-Ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),ce.each({margin:"",padding:"",border:"Width"},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+Q[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(ce.cssHooks[i+o].set=rt)}),ce.fn.extend({css:function(e,t){return M(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Xe(e),i=t.length;a<i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1<arguments.length)}}),((ce.Tween=at).prototype={constructor:at,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?"":"px")},cur:function(){var e=at.propHooks[this.prop];return e&&e.get?e.get(this):at.propHooks._default.get(this)},run:function(e){var t,n=at.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):at.propHooks._default.set(this),this}}).init.prototype=at.prototype,(at.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||!ce.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=at.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ce.fx=at.prototype.init,ce.fx.step={};var st,ut,lt,ct,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAnimationFrame(dt):ie.setTimeout(dt,ce.fx.interval),ce.fx.tick())}function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=Q[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=st||ht(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:ce.extend({},e),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},t),originalProperties:e,originalOptions:t,startTime:st||ht(),duration:t.duration,tweens:[],createTween:function(e,t){var n=ce.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=F(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=ce.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=yt.prefilters[r].call(l,o,c,l.opts))return v(n.stop)&&(ce._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return ce.map(c,vt,l),v(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),ce.fx.timer(ce.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}ce.Animation=ce.extend(yt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return te(n.elem,e,Y.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(D);for(var n,r=0,i=e.length;r<i;r++)n=e[r],yt.tweeners[n]=yt.tweeners[n]||[],yt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ee(e),v=_.get(e,"fxshow");for(r in n.queue||(null==(a=ce._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,ce.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ft.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||ce.style(e,r)}if((u=!ce.isEmptyObject(t))||!ce.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=_.get(e,"display")),"none"===(c=ce.css(e,"display"))&&(l?c=l:(re([e],!0),l=e.style.display||l,c=ce.css(e,"display"),re([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===ce.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=_.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&re([e],!0),p.done(function(){for(r in g||re([e]),_.remove(e,"fxshow"),d)ce.style(e,r,d[r])})),u=vt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?yt.prefilters.unshift(e):yt.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&"object"==typeof e?ce.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return ce.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in ce.fx.speeds?r.duration=ce.fx.speeds[r.duration]:r.duration=ce.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ee).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=ce.isEmptyObject(t),o=ce.speed(e,n,r),a=function(){var e=yt(this,ce.extend({},t),o);(i||_.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=ce.timers,r=_.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||ce.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=_.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=ce.timers,o=n?n.length:0;for(t.finish=!0,ce.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),ce.each(["toggle","show","hide"],function(e,r){var i=ce.fn[r];ce.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),ce.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){ce.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(st=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),st=void 0},ce.fx.timer=function(e){ce.timers.push(e),ce.fx.start()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=!0,dt())},ce.fx.stop=function(){ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(r,e){return r=ce.fx&&ce.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},lt=C.createElement("input"),ct=C.createElement("select").appendChild(C.createElement("option")),lt.type="checkbox",le.checkOn=""!==lt.value,le.optSelected=ct.selected,(lt=C.createElement("input")).value="t",lt.type="radio",le.radioValue="t"===lt.value;var mt,xt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return M(this,ce.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&&"radio"===t&&fe(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(D);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),function(e,t){var a=xt[t]||ce.find.attr;xt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=xt[o],xt[o]=r,r=null!=a(e,t,n)?o:null,xt[o]=i),r}});var bt=/^(?:input|select|textarea|button)$/i,wt=/^(?:a|area)$/i;function Tt(e){return(e.match(D)||[]).join(" ")}function Ct(e){return e.getAttribute&&e.getAttribute("class")||""}function kt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)||[]}ce.fn.extend({prop:function(e,t){return M(this,ce.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),le.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,Ct(this)))}):(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,Ct(this)))}):arguments.length?(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,Ct(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=kt(t),this.each(function(){if(s)for(o=ce(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=Ct(this))&&_.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":_.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+Tt(Ct(n))+" ").indexOf(t))return!0;return!1}});var St=/\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,ce(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=ce.map(t,function(e){return null==e?"":e+""})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(St,""):null==e?"":e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,"value");return null!=t?t:Tt(ce.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!fe(n.parentNode,"optgroup"))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<ce.inArray(ce.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each(["radio","checkbox"],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=ie.location,jt={guid:Date.now()},At=/\?/;ce.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||ce.error("Invalid XML: "+(n?ce.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Dt=/^(?:focusinfocus|focusoutblur)$/,Nt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||C],d=ue.call(e,"type")?e.type:e,h=ue.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||C,3!==n.nodeType&&8!==n.nodeType&&!Dt.test(d+ce.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[ce.expando]?e:new ce.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:ce.makeArray(t,[e]),c=ce.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!y(n)){for(s=c.delegateType||d,Dt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||C)&&p.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(_.get(o,"events")||Object.create(null))[e.type]&&_.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&$(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!$(n)||u&&v(n[d])&&!y(n)&&((a=n[u])&&(n[u]=null),ce.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Nt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Nt),ce.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var qt=/\[\]$/,Lt=/\r?\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||qt.test(n)?i(n,t):Pt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==x(e))i(n,e);else for(t in e)Pt(n+"["+t+"]",e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Pt(n,e[n],t,i);return r.join("&")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,"elements");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(":disabled")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}}):{name:t.name,value:n.replace(Lt,"\r\n")}}).get()}});var Mt=/%20/g,Rt=/#.*$/,It=/([?&])_=[^&]*/,Wt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:GET|HEAD)$/,$t=/^\/\//,Bt={},_t={},zt="*/".concat("*"),Xt=C.createElement("a");function Ut(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(D)||[];if(v(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!0,ce.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}Xt.href=Et.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Gt(Gt(e,ce.ajaxSettings),t):Gt(ce.ajaxSettings,e)},ajaxPrefilter:Ut(Bt),ajaxTransport:Ut(_t),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=ce.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?ce(y):ce.event,x=ce.Deferred(),b=ce.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Wt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace($t,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(D)||[""],null==v.crossDomain){r=C.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Xt.protocol+"//"+Xt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=ce.param(v.data,v.traditional)),Vt(Bt,v,t,T),h)return T;for(i in(g=ce.event&&v.global)&&0==ce.active++&&ce.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ft.test(v.type),f=v.url.replace(Rt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Mt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(At.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(It,"$1"),o=(At.test(f)?"&":"?")+"_="+jt.guid+++o),v.url=f+o),v.ifModified&&(ce.lastModified[f]&&T.setRequestHeader("If-Modified-Since",ce.lastModified[f]),ce.etag[f]&&T.setRequestHeader("If-None-Match",ce.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+zt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Vt(_t,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=ie.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&ie.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<ce.inArray("script",v.dataTypes)&&ce.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(ce.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(ce.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--ce.active||ce.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return ce.get(e,t,n,"json")},getScript:function(e,t){return ce.get(e,void 0,t,"script")}}),ce.each(["get","post"],function(e,i){ce[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),ce.ajax(ce.extend({url:e,type:i,dataType:r,data:t,success:n},ce.isPlainObject(e)&&e))}}),ce.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),ce._evalUrl=function(e,t,n){return ce.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){ce.globalEval(e,t,n)}})},ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ce.ajaxSettings.xhr=function(){try{return new ie.XMLHttpRequest}catch(e){}};var Yt={0:200,1223:204},Qt=ce.ajaxSettings.xhr();le.cors=!!Qt&&"withCredentials"in Qt,le.ajax=Qt=!!Qt,ce.ajaxTransport(function(i){var o,a;if(le.cors||Qt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Yt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&ie.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ce.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ce.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=ce("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Tt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&ce.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?ce("<div>").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var en=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=F,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?"":(e+"").replace(en,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ce});var tn=ie.jQuery,nn=ie.$;return ce.noConflict=function(e){return ie.$===ce&&(ie.$=nn),e&&ie.jQuery===ce&&(ie.jQuery=tn),ce},"undefined"==typeof e&&(ie.jQuery=ie.$=ce),ce});
|
|
3
3
|
|
|
4
4
|
!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).dayjs=e()}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",c="month",f="quarter",h="year",d="date",l="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},g="en",D={};D[g]=M;var p="$isDayjsObject",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if("string"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split("-");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v="set"+(this.$u?"UTC":"");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+"Hours",0);case u:return $(v+"Minutes",1);case s:return $(v+"Seconds",2);case i:return $(v+"Milliseconds",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f="set"+(this.$u?"UTC":""),l=(n={},n[a]=f+"Date",n[d]=f+"Date",n[c]=f+"Month",n[h]=f+"FullYear",n[u]=f+"Hours",n[s]=f+"Minutes",n[i]=f+"Seconds",n[r]=f+"Milliseconds",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||"YYYY-MM-DDTHH:mm:ssZ",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,"0")},$=f||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return b.s(e.$y,4,"0");case"M":return a+1;case"MM":return b.s(a+1,2,"0");case"MMM":return h(n.monthsShort,a,c,3);case"MMMM":return h(c,a);case"D":return e.$D;case"DD":return b.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return h(n.weekdaysMin,e.$W,o,2);case"ddd":return h(n.weekdaysShort,e.$W,o,3);case"dddd":return o[e.$W];case"H":return String(s);case"HH":return b.s(s,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return $(s,u,!0);case"A":return $(s,u,!1);case"m":return String(u);case"mm":return b.s(u,2,"0");case"s":return String(e.$s);case"ss":return b.s(e.$s,2,"0");case"SSS":return b.s(e.$ms,3,"0");case"Z":return i}return null}(t)||i.replace(":","")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[["$ms",r],["$s",i],["$m",s],["$H",u],["$W",a],["$M",c],["$y",h],["$D",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));
|
|
5
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,
|
|
5
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d/,r=/\d\d/,i=/\d\d?/,o=/\d*[^-_:/,()\s\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\d\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:"+"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?"pm":"PM");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[i,f("seconds")],ss:[i,f("seconds")],m:[i,f("minutes")],mm:[i,f("minutes")],H:[i,f("hours")],h:[i,f("hours")],HH:[i,f("hours")],hh:[i,f("hours")],D:[i,f("day")],DD:[r,f("day")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\[|\]/g,"")===e&&(this.day=r)}],w:[i,f("week")],ww:[r,f("week")],M:[i,f("month")],MM:[r,f("month")],MMM:[o,function(e){var t=u("months"),n=(u("monthsShort")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\d+/,f("year")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\d{4}/,f("year")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\[|\]$/g,"")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if("string"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,"")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if("string"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if(["x","X"].indexOf(t)>-1)return new Date(("X"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date("")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date("")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(""))}else i.call(this,e)}}}));
|
|
6
6
|
/*!
|
|
7
7
|
* Chart.js v3.9.1
|
|
8
8
|
* https://www.chartjs.org
|
|
@@ -25,2649 +25,10 @@
|
|
|
25
25
|
*/
|
|
26
26
|
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("chart.js/helpers"),require("chart.js")):"function"==typeof define&&define.amd?define(["chart.js/helpers","chart.js"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).ChartDataLabels=e(t.Chart.helpers,t.Chart)}(this,(function(t,e){"use strict";var r=function(){if("undefined"!=typeof window){if(window.devicePixelRatio)return window.devicePixelRatio;var t=window.screen;if(t)return(t.deviceXDPI||1)/(t.logicalXDPI||1)}return 1}(),a=function(e){var r,a=[];for(e=[].concat(e);e.length;)"string"==typeof(r=e.pop())?a.unshift.apply(a,r.split("\n")):Array.isArray(r)?e.push.apply(e,r):t.isNullOrUndef(e)||a.unshift(""+r);return a},o=function(t,e,r){var a,o=[].concat(e),n=o.length,i=t.font,l=0;for(t.font=r.string,a=0;a<n;++a)l=Math.max(t.measureText(o[a]).width,l);return t.font=i,{height:n*r.lineHeight,width:l}},n=function(t,e,r){return Math.max(t,Math.min(e,r))},i=function(t,e){var r,a,o,n,i=t.slice(),l=[];for(r=0,o=e.length;r<o;++r)n=e[r],-1===(a=i.indexOf(n))?l.push([n,1]):i.splice(a,1);for(r=0,o=i.length;r<o;++r)l.push([i[r],-1]);return l};function l(t,e){var r=e.x,a=e.y;if(null===r)return{x:0,y:-1};if(null===a)return{x:1,y:0};var o=t.x-r,n=t.y-a,i=Math.sqrt(o*o+n*n);return{x:i?o/i:0,y:i?n/i:-1}}function s(t,e,r){var a=0;return t<r.left?a|=1:t>r.right&&(a|=2),e<r.top?a|=8:e>r.bottom&&(a|=4),a}function u(t,e){var r,a,o=e.anchor,n=t;return e.clamp&&(n=function(t,e){for(var r,a,o,n=t.x0,i=t.y0,l=t.x1,u=t.y1,d=s(n,i,e),c=s(l,u,e);d|c&&!(d&c);)8&(r=d||c)?(a=n+(l-n)*(e.top-i)/(u-i),o=e.top):4&r?(a=n+(l-n)*(e.bottom-i)/(u-i),o=e.bottom):2&r?(o=i+(u-i)*(e.right-n)/(l-n),a=e.right):1&r&&(o=i+(u-i)*(e.left-n)/(l-n),a=e.left),r===d?d=s(n=a,i=o,e):c=s(l=a,u=o,e);return{x0:n,x1:l,y0:i,y1:u}}(n,e.area)),"start"===o?(r=n.x0,a=n.y0):"end"===o?(r=n.x1,a=n.y1):(r=(n.x0+n.x1)/2,a=(n.y0+n.y1)/2),function(t,e,r,a,o){switch(o){case"center":r=a=0;break;case"bottom":r=0,a=1;break;case"right":r=1,a=0;break;case"left":r=-1,a=0;break;case"top":r=0,a=-1;break;case"start":r=-r,a=-a;break;case"end":break;default:o*=Math.PI/180,r=Math.cos(o),a=Math.sin(o)}return{x:t,y:e,vx:r,vy:a}}(r,a,t.vx,t.vy,e.align)}var d=function(t,e){var r=(t.startAngle+t.endAngle)/2,a=Math.cos(r),o=Math.sin(r),n=t.innerRadius,i=t.outerRadius;return u({x0:t.x+a*n,y0:t.y+o*n,x1:t.x+a*i,y1:t.y+o*i,vx:a,vy:o},e)},c=function(t,e){var r=l(t,e.origin),a=r.x*t.options.radius,o=r.y*t.options.radius;return u({x0:t.x-a,y0:t.y-o,x1:t.x+a,y1:t.y+o,vx:r.x,vy:r.y},e)},h=function(t,e){var r=l(t,e.origin),a=t.x,o=t.y,n=0,i=0;return t.horizontal?(a=Math.min(t.x,t.base),n=Math.abs(t.base-t.x)):(o=Math.min(t.y,t.base),i=Math.abs(t.base-t.y)),u({x0:a,y0:o+i,x1:a+n,y1:o,vx:r.x,vy:r.y},e)},f=function(t,e){var r=l(t,e.origin);return u({x0:t.x,y0:t.y,x1:t.x+(t.width||0),y1:t.y+(t.height||0),vx:r.x,vy:r.y},e)},x=function(t){return Math.round(t*r)/r};function y(t,e){var r=e.chart.getDatasetMeta(e.datasetIndex).vScale;if(!r)return null;if(void 0!==r.xCenter&&void 0!==r.yCenter)return{x:r.xCenter,y:r.yCenter};var a=r.getBasePixel();return t.horizontal?{x:a,y:null}:{x:null,y:a}}function v(t,e,r){var a=r.backgroundColor,o=r.borderColor,n=r.borderWidth;(a||o&&n)&&(t.beginPath(),function(t,e,r,a,o,n){var i=Math.PI/2;if(n){var l=Math.min(n,o/2,a/2),s=e+l,u=r+l,d=e+a-l,c=r+o-l;t.moveTo(e,u),s<d&&u<c?(t.arc(s,u,l,-Math.PI,-i),t.arc(d,u,l,-i,0),t.arc(d,c,l,0,i),t.arc(s,c,l,i,Math.PI)):s<d?(t.moveTo(s,r),t.arc(d,u,l,-i,i),t.arc(s,u,l,i,Math.PI+i)):u<c?(t.arc(s,u,l,-Math.PI,0),t.arc(s,c,l,0,Math.PI)):t.arc(s,u,l,-Math.PI,Math.PI),t.closePath(),t.moveTo(e,r)}else t.rect(e,r,a,o)}(t,x(e.x)+n/2,x(e.y)+n/2,x(e.w)-n,x(e.h)-n,r.borderRadius),t.closePath(),a&&(t.fillStyle=a,t.fill()),o&&n&&(t.strokeStyle=o,t.lineWidth=n,t.lineJoin="miter",t.stroke()))}function b(t,e,r){var a=t.shadowBlur,o=r.stroked,n=x(r.x),i=x(r.y),l=x(r.w);o&&t.strokeText(e,n,i,l),r.filled&&(a&&o&&(t.shadowBlur=0),t.fillText(e,n,i,l),a&&o&&(t.shadowBlur=a))}var _=function(t,e,r,a){var o=this;o._config=t,o._index=a,o._model=null,o._rects=null,o._ctx=e,o._el=r};t.merge(_.prototype,{_modelize:function(r,a,n,i){var l,s=this,u=s._index,x=t.toFont(t.resolve([n.font,{}],i,u)),v=t.resolve([n.color,e.defaults.color],i,u);return{align:t.resolve([n.align,"center"],i,u),anchor:t.resolve([n.anchor,"center"],i,u),area:i.chart.chartArea,backgroundColor:t.resolve([n.backgroundColor,null],i,u),borderColor:t.resolve([n.borderColor,null],i,u),borderRadius:t.resolve([n.borderRadius,0],i,u),borderWidth:t.resolve([n.borderWidth,0],i,u),clamp:t.resolve([n.clamp,!1],i,u),clip:t.resolve([n.clip,!1],i,u),color:v,display:r,font:x,lines:a,offset:t.resolve([n.offset,4],i,u),opacity:t.resolve([n.opacity,1],i,u),origin:y(s._el,i),padding:t.toPadding(t.resolve([n.padding,4],i,u)),positioner:(l=s._el,l instanceof e.ArcElement?d:l instanceof e.PointElement?c:l instanceof e.BarElement?h:f),rotation:t.resolve([n.rotation,0],i,u)*(Math.PI/180),size:o(s._ctx,a,x),textAlign:t.resolve([n.textAlign,"start"],i,u),textShadowBlur:t.resolve([n.textShadowBlur,0],i,u),textShadowColor:t.resolve([n.textShadowColor,v],i,u),textStrokeColor:t.resolve([n.textStrokeColor,v],i,u),textStrokeWidth:t.resolve([n.textStrokeWidth,0],i,u)}},update:function(e){var r,o,n,i=this,l=null,s=null,u=i._index,d=i._config,c=t.resolve([d.display,!0],e,u);c&&(r=e.dataset.data[u],o=t.valueOrDefault(t.callback(d.formatter,[r,e]),r),(n=t.isNullOrUndef(o)?[]:a(o)).length&&(s=function(t){var e=t.borderWidth||0,r=t.padding,a=t.size.height,o=t.size.width,n=-o/2,i=-a/2;return{frame:{x:n-r.left-e,y:i-r.top-e,w:o+r.width+2*e,h:a+r.height+2*e},text:{x:n,y:i,w:o,h:a}}}(l=i._modelize(c,n,d,e)))),i._model=l,i._rects=s},geometry:function(){return this._rects?this._rects.frame:{}},rotation:function(){return this._model?this._model.rotation:0},visible:function(){return this._model&&this._model.opacity},model:function(){return this._model},draw:function(t,e){var r,a=t.ctx,o=this._model,i=this._rects;this.visible()&&(a.save(),o.clip&&(r=o.area,a.beginPath(),a.rect(r.left,r.top,r.right-r.left,r.bottom-r.top),a.clip()),a.globalAlpha=n(0,o.opacity,1),a.translate(x(e.x),x(e.y)),a.rotate(o.rotation),v(a,i.frame,o),function(t,e,r,a){var o,n=a.textAlign,i=a.color,l=!!i,s=a.font,u=e.length,d=a.textStrokeColor,c=a.textStrokeWidth,h=d&&c;if(u&&(l||h))for(r=function(t,e,r){var a=r.lineHeight,o=t.w,n=t.x;return"center"===e?n+=o/2:"end"!==e&&"right"!==e||(n+=o),{h:a,w:o,x:n,y:t.y+a/2}}(r,n,s),t.font=s.string,t.textAlign=n,t.textBaseline="middle",t.shadowBlur=a.textShadowBlur,t.shadowColor=a.textShadowColor,l&&(t.fillStyle=i),h&&(t.lineJoin="round",t.lineWidth=c,t.strokeStyle=d),o=0,u=e.length;o<u;++o)b(t,e[o],{stroked:h,filled:l,w:r.w,x:r.x,y:r.y+r.h*o})}(a,o.lines,i.text,o),a.restore())}});var p=Number.MIN_SAFE_INTEGER||-9007199254740991,g=Number.MAX_SAFE_INTEGER||9007199254740991;function m(t,e,r){var a=Math.cos(r),o=Math.sin(r),n=e.x,i=e.y;return{x:n+a*(t.x-n)-o*(t.y-i),y:i+o*(t.x-n)+a*(t.y-i)}}function w(t,e){var r,a,o,n,i,l=g,s=p,u=e.origin;for(r=0;r<t.length;++r)o=(a=t[r]).x-u.x,n=a.y-u.y,i=e.vx*o+e.vy*n,l=Math.min(l,i),s=Math.max(s,i);return{min:l,max:s}}function M(t,e){var r=e.x-t.x,a=e.y-t.y,o=Math.sqrt(r*r+a*a);return{vx:(e.x-t.x)/o,vy:(e.y-t.y)/o,origin:t,ln:o}}var k=function(){this._rotation=0,this._rect={x:0,y:0,w:0,h:0}};function $(t,e,r){var a=e.positioner(t,e),o=a.vx,n=a.vy;if(!o&&!n)return{x:a.x,y:a.y};var i=r.w,l=r.h,s=e.rotation,u=Math.abs(i/2*Math.cos(s))+Math.abs(l/2*Math.sin(s)),d=Math.abs(i/2*Math.sin(s))+Math.abs(l/2*Math.cos(s)),c=1/Math.max(Math.abs(o),Math.abs(n));return u*=o*c,d*=n*c,u+=e.offset*o,d+=e.offset*n,{x:a.x+u,y:a.y+d}}t.merge(k.prototype,{center:function(){var t=this._rect;return{x:t.x+t.w/2,y:t.y+t.h/2}},update:function(t,e,r){this._rotation=r,this._rect={x:e.x+t.x,y:e.y+t.y,w:e.w,h:e.h}},contains:function(t){var e=this,r=e._rect;return!((t=m(t,e.center(),-e._rotation)).x<r.x-1||t.y<r.y-1||t.x>r.x+r.w+2||t.y>r.y+r.h+2)},intersects:function(t){var e,r,a,o=this._points(),n=t._points(),i=[M(o[0],o[1]),M(o[0],o[3])];for(this._rotation!==t._rotation&&i.push(M(n[0],n[1]),M(n[0],n[3])),e=0;e<i.length;++e)if(r=w(o,i[e]),a=w(n,i[e]),r.max<a.min||a.max<r.min)return!1;return!0},_points:function(){var t=this,e=t._rect,r=t._rotation,a=t.center();return[m({x:e.x,y:e.y},a,r),m({x:e.x+e.w,y:e.y},a,r),m({x:e.x+e.w,y:e.y+e.h},a,r),m({x:e.x,y:e.y+e.h},a,r)]}});var C={prepare:function(t){var e,r,a,o,n,i=[];for(e=0,a=t.length;e<a;++e)for(r=0,o=t[e].length;r<o;++r)n=t[e][r],i.push(n),n.$layout={_box:new k,_hidable:!1,_visible:!0,_set:e,_idx:n._index};return i.sort((function(t,e){var r=t.$layout,a=e.$layout;return r._idx===a._idx?a._set-r._set:a._idx-r._idx})),this.update(i),i},update:function(t){var e,r,a,o,n,i=!1;for(e=0,r=t.length;e<r;++e)o=(a=t[e]).model(),(n=a.$layout)._hidable=o&&"auto"===o.display,n._visible=a.visible(),i|=n._hidable;i&&function(t){var e,r,a,o,n,i,l;for(e=0,r=t.length;e<r;++e)(o=(a=t[e]).$layout)._visible&&(l=new Proxy(a._el,{get:(t,e)=>t.getProps([e],!0)[e]}),n=a.geometry(),i=$(l,a.model(),n),o._box.update(i,n,a.rotation()));(function(t,e){var r,a,o,n;for(r=t.length-1;r>=0;--r)for(o=t[r].$layout,a=r-1;a>=0&&o._visible;--a)(n=t[a].$layout)._visible&&o._box.intersects(n._box)&&e(o,n)})(t,(function(t,e){var r=t._hidable,a=e._hidable;r&&a||a?e._visible=!1:r&&(t._visible=!1)}))}(t)},lookup:function(t,e){var r,a;for(r=t.length-1;r>=0;--r)if((a=t[r].$layout)&&a._visible&&a._box.contains(e))return t[r];return null},draw:function(t,e){var r,a,o,n,i,l;for(r=0,a=e.length;r<a;++r)(n=(o=e[r]).$layout)._visible&&(i=o.geometry(),l=$(o._el,o.model(),i),n._box.update(l,i,o.rotation()),o.draw(t,l))}},P="$default";function S(e,r,a,o){if(r){var n,i=a.$context,l=a.$groups;r[l._set]&&(n=r[l._set][l._key])&&!0===t.callback(n,[i,o])&&(e.$datalabels._dirty=!0,a.update(i))}}function I(t,e){var r,a,o=t.$datalabels,n=o._listeners;if(n.enter||n.leave){if("mousemove"===e.type)a=C.lookup(o._labels,e);else if("mouseout"!==e.type)return;r=o._hovered,o._hovered=a,function(t,e,r,a,o){var n,i;(r||a)&&(r?a?r!==a&&(i=n=!0):i=!0:n=!0,i&&S(t,e.leave,r,o),n&&S(t,e.enter,a,o))}(t,n,r,a,e)}}return{id:"datalabels",defaults:{align:"center",anchor:"center",backgroundColor:null,borderColor:null,borderRadius:0,borderWidth:0,clamp:!1,clip:!1,color:void 0,display:!0,font:{family:void 0,lineHeight:1.2,size:void 0,style:void 0,weight:null},formatter:function(e){if(t.isNullOrUndef(e))return null;var r,a,o,n=e;if(t.isObject(e))if(t.isNullOrUndef(e.label))if(t.isNullOrUndef(e.r))for(n="",o=0,a=(r=Object.keys(e)).length;o<a;++o)n+=(0!==o?", ":"")+r[o]+": "+e[r[o]];else n=e.r;else n=e.label;return""+n},labels:void 0,listeners:{},offset:4,opacity:1,padding:{top:4,right:4,bottom:4,left:4},rotation:0,textAlign:"start",textStrokeColor:void 0,textStrokeWidth:0,textShadowBlur:0,textShadowColor:void 0},beforeInit:function(t){t.$datalabels={_actives:[]}},beforeUpdate:function(t){var e=t.$datalabels;e._listened=!1,e._listeners={},e._datasets=[],e._labels=[]},afterDatasetUpdate:function(e,r,a){var o,n,i,l,s,u,d,c,h=r.index,f=e.$datalabels,x=f._datasets[h]=[],y=e.isDatasetVisible(h),v=e.data.datasets[h],b=function(e,r){var a,o,n,i=e.datalabels,l=[];return!1===i?null:(!0===i&&(i={}),r=t.merge({},[r,i]),o=r.labels||{},n=Object.keys(o),delete r.labels,n.length?n.forEach((function(e){o[e]&&l.push(t.merge({},[r,o[e],{_key:e}]))})):l.push(r),a=l.reduce((function(e,r){return t.each(r.listeners||{},(function(t,a){e[a]=e[a]||{},e[a][r._key||P]=t})),delete r.listeners,e}),{}),{labels:l,listeners:a})}(v,a),p=r.meta.data||[],g=e.ctx;for(g.save(),o=0,i=p.length;o<i;++o)if((d=p[o]).$datalabels=[],y&&d&&e.getDataVisibility(o)&&!d.skip)for(n=0,l=b.labels.length;n<l;++n)u=(s=b.labels[n])._key,(c=new _(s,g,d,o)).$groups={_set:h,_key:u||P},c.$context={active:!1,chart:e,dataIndex:o,dataset:v,datasetIndex:h},c.update(c.$context),d.$datalabels.push(c),x.push(c);g.restore(),t.merge(f._listeners,b.listeners,{merger:function(t,e,a){e[t]=e[t]||{},e[t][r.index]=a[t],f._listened=!0}})},afterUpdate:function(t){t.$datalabels._labels=C.prepare(t.$datalabels._datasets)},afterDatasetsDraw:function(t){C.draw(t,t.$datalabels._labels)},beforeEvent:function(t,e){if(t.$datalabels._listened){var r=e.event;switch(r.type){case"mousemove":case"mouseout":I(t,r);break;case"click":!function(t,e){var r=t.$datalabels,a=r._listeners.click,o=a&&C.lookup(r._labels,e);o&&S(t,a,o,e)}(t,r)}}},afterEvent:function(t){var e,r,a,o,n,l,s,u=t.$datalabels,d=u._actives,c=u._actives=t.getActiveElements(),h=i(d,c);for(e=0,r=h.length;e<r;++e)if((n=h[e])[1])for(a=0,o=(s=n[0].element.$datalabels||[]).length;a<o;++a)(l=s[a]).$context.active=1===n[1],l.update(l.$context);(u._dirty||h.length)&&(C.update(u._labels),t.render()),delete u._dirty}}}));
|
|
27
27
|
|
|
28
|
-
class DprLoadingHelper {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
l.classList.add('show');
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
let loadingAnimClass = '.dpr-loading-anim';
|
|
36
|
-
if (wrapperClass) loadingAnimClass = `.${wrapperClass} ${loadingAnimClass}`;
|
|
37
|
-
document.querySelectorAll(loadingAnimClass).forEach((l) => {
|
|
38
|
-
l.classList.add('show');
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
hideLoadingAnimation() {
|
|
43
|
-
document.querySelectorAll('.dpr-loading-panel').forEach((l) => {
|
|
44
|
-
l.classList.remove('show');
|
|
45
|
-
});
|
|
46
|
-
document.querySelectorAll('.dpr-loading-anim').forEach((l) => {
|
|
47
|
-
l.classList.remove('show');
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
class DprClientClass {
|
|
53
|
-
|
|
54
|
-
constructor(element, loadingHelper) {
|
|
55
|
-
this.element = element;
|
|
56
|
-
this.loadingHelper = loadingHelper;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
static getModuleName() {
|
|
60
|
-
throw new Error("Module name not set")
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
getElement() {
|
|
64
|
-
return this.element
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
initialise() {
|
|
68
|
-
throw new Error("Initialisation not configured")
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
class CardGroup extends DprClientClass {
|
|
73
|
-
static getModuleName() {
|
|
74
|
-
return 'card-group'
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
initialise() {
|
|
79
|
-
const cards = this.getElement().querySelectorAll('[data-click-navigate-to]');
|
|
80
|
-
const wrapperClass = 'card-loading';
|
|
81
|
-
|
|
82
|
-
cards.forEach((card) => {
|
|
83
|
-
card.addEventListener('click', () => {
|
|
84
|
-
card.classList.add(wrapperClass);
|
|
85
|
-
this.loadingHelper.showLoadingAnimation(wrapperClass);
|
|
86
|
-
|
|
87
|
-
cards.forEach((c) => {
|
|
88
|
-
if (!c.classList.contains('card-loading')) {
|
|
89
|
-
const disabledClass = 'card-disabled';
|
|
90
|
-
c.classList.add(disabledClass);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
window.location.href = card.dataset.clickNavigateTo;
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/* eslint-disable class-methods-use-this */
|
|
100
|
-
|
|
101
|
-
class DprCatalogueSearch extends DprClientClass {
|
|
102
|
-
static getModuleName() {
|
|
103
|
-
return 'dpr-catalogue-search'
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
initialise() {
|
|
107
|
-
this.searchBox = this.getElement().querySelector('.dpr-search-box');
|
|
108
|
-
this.shwoUnauthorisedCheckbox = this.getElement().querySelector('#show-unauthorised');
|
|
109
|
-
|
|
110
|
-
if (this.searchBox) {
|
|
111
|
-
this.initSeachBoxEvents();
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
if (this.shwoUnauthorisedCheckbox) {
|
|
115
|
-
this.initShowUnauthorisedEvents();
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
this.initInputFromQueryParams();
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
initSeachBoxEvents() {
|
|
122
|
-
this.searchBox.addEventListener('keyup', (e) => {
|
|
123
|
-
this.updateTableRows(e.target.value);
|
|
124
|
-
|
|
125
|
-
// Update Query Params
|
|
126
|
-
const queryParams = new URLSearchParams(window.location.search);
|
|
127
|
-
queryParams.set(this.searchBox.id, e.target.value);
|
|
128
|
-
window.history.replaceState(null, null, `?${queryParams.toString()}`);
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
initShowUnauthorisedEvents() {
|
|
133
|
-
this.shwoUnauthorisedCheckbox.addEventListener('change', (e) => {
|
|
134
|
-
const queryParams = new URLSearchParams(window.location.search);
|
|
135
|
-
if (e.target.checked) {
|
|
136
|
-
queryParams.set(e.target.id, e.target.value);
|
|
137
|
-
} else {
|
|
138
|
-
queryParams.delete(e.target.id, e.target.value);
|
|
139
|
-
}
|
|
140
|
-
window.history.replaceState(null, null, `?${queryParams.toString()}`);
|
|
141
|
-
|
|
142
|
-
this.updateTableRows(this.searchBox.value);
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
this.updateTableRows(this.searchBox.value);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
updateTableRows(searchValue) {
|
|
149
|
-
const table = this.getElement().querySelector('table').querySelector('tbody');
|
|
150
|
-
|
|
151
|
-
const rows = Array.from(table.rows);
|
|
152
|
-
rows.forEach((row) => row.classList.add('search-option-hide'));
|
|
153
|
-
|
|
154
|
-
this.updateSearchListing(rows, searchValue);
|
|
155
|
-
this.toggleUnauthorisedRows(rows);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
toggleUnauthorisedRows(rows) {
|
|
159
|
-
const queryParams = new URLSearchParams(window.location.search);
|
|
160
|
-
const value = queryParams.get('show-unauthorised');
|
|
161
|
-
|
|
162
|
-
rows
|
|
163
|
-
.filter((row) => {
|
|
164
|
-
return Array.from(row.cells).find((cell) => {
|
|
165
|
-
return cell.innerHTML.includes('dpr-unauthorised-report')
|
|
166
|
-
})
|
|
167
|
-
})
|
|
168
|
-
.forEach((row) => {
|
|
169
|
-
if (value) {
|
|
170
|
-
row.classList.remove('search-option-hide');
|
|
171
|
-
} else if (!row.classList.contains('search-option-hide')) row.classList.add('search-option-hide');
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
updateSearchListing(rows, value) {
|
|
176
|
-
rows
|
|
177
|
-
.filter((row) => {
|
|
178
|
-
return (
|
|
179
|
-
!value ||
|
|
180
|
-
value.length === 0 ||
|
|
181
|
-
Array.from(row.cells).find((cell) => {
|
|
182
|
-
const searchValue = value.toLowerCase();
|
|
183
|
-
return cell.innerText.toLowerCase().includes(searchValue.toLowerCase())
|
|
184
|
-
})
|
|
185
|
-
)
|
|
186
|
-
})
|
|
187
|
-
.forEach((row) => {
|
|
188
|
-
row.classList.remove('search-option-hide');
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// eslint-disable-next-line
|
|
193
|
-
initInputFromQueryParams () {
|
|
194
|
-
const urlParams = new URLSearchParams(window.location.search);
|
|
195
|
-
|
|
196
|
-
urlParams.forEach((value, key) => {
|
|
197
|
-
const element = document.getElementById(key);
|
|
198
|
-
|
|
199
|
-
if (element && element.classList.contains('dpr-search-box')) {
|
|
200
|
-
element.value = value;
|
|
201
|
-
this.updateTableRows(element.value);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
if (element && element.id === 'show-unauthorised') {
|
|
205
|
-
element.setAttribute('checked', '');
|
|
206
|
-
}
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/* eslint-disable class-methods-use-this */
|
|
212
|
-
|
|
213
|
-
class BookmarkToggle extends DprClientClass {
|
|
214
|
-
static getModuleName() {
|
|
215
|
-
return 'bookmark-toggle'
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
initialise() {
|
|
219
|
-
this.initToggles();
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
initToggles() {
|
|
223
|
-
const element = this.getElement();
|
|
224
|
-
element.querySelectorAll('.bookmark-input[type=checkbox]').forEach((bookmarkToggle) => {
|
|
225
|
-
const csrfToken = bookmarkToggle.getAttribute('data-csrf-token');
|
|
226
|
-
const reportId = bookmarkToggle.getAttribute('data-report-id');
|
|
227
|
-
const id = bookmarkToggle.getAttribute('data-id');
|
|
228
|
-
const reportType = bookmarkToggle.getAttribute('data-report-type');
|
|
229
|
-
|
|
230
|
-
this.bookmarkWrapper = bookmarkToggle.parentNode;
|
|
231
|
-
this.bookmarkColumn = this.bookmarkWrapper.parentNode;
|
|
232
|
-
this.bookmarkLabel = this.bookmarkWrapper.querySelector('.dpr-bookmark-label--component');
|
|
233
|
-
|
|
234
|
-
bookmarkToggle.addEventListener('change', async () => {
|
|
235
|
-
if (bookmarkToggle.checked) {
|
|
236
|
-
await this.addBookmark(bookmarkToggle, id, reportId, reportType, csrfToken);
|
|
237
|
-
} else {
|
|
238
|
-
await this.removeBookmark(bookmarkToggle, id, reportId, reportType, csrfToken);
|
|
239
|
-
}
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
this.bookmarkColumn.addEventListener('keyup', async (e) => {
|
|
243
|
-
if (e.key === 'Enter') {
|
|
244
|
-
await this.handleBookmarkChange(bookmarkToggle, id, reportId, reportType, csrfToken);
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
});
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
async addBookmark(bookmarkToggle, id, reportId, reportType, csrfToken) {
|
|
251
|
-
bookmarkToggle.setAttribute('checked', '');
|
|
252
|
-
this.bookmarkWrapper.setAttribute('tooltip', 'Remove bookmark');
|
|
253
|
-
if (this.bookmarkLabel) this.bookmarkLabel.innerText = 'Bookmarked';
|
|
254
|
-
await this.toggleBookmark('add', id, reportId, reportType, csrfToken);
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
async removeBookmark(bookmarkToggle, id, reportId, reportType, csrfToken) {
|
|
258
|
-
bookmarkToggle.removeAttribute('checked');
|
|
259
|
-
this.bookmarkWrapper.setAttribute('tooltip', 'Add bookmark');
|
|
260
|
-
if (this.bookmarkLabel) this.bookmarkLabel.innerText = 'Bookmark removed';
|
|
261
|
-
await this.toggleBookmark('remove', id, reportId, reportType, csrfToken);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
async handleBookmarkChange(bookmarkToggle, id, reportId, reportType, csrfToken) {
|
|
265
|
-
if (bookmarkToggle.checked) {
|
|
266
|
-
bookmarkToggle.removeAttribute('checked');
|
|
267
|
-
this.bookmarkWrapper.setAttribute('tooltip', 'Add bookmark');
|
|
268
|
-
if (this.bookmarkLabel) this.bookmarkLabel.innerText = 'Bookmark removed';
|
|
269
|
-
await this.toggleBookmark('remove', id, reportId, reportType, csrfToken);
|
|
270
|
-
} else {
|
|
271
|
-
bookmarkToggle.setAttribute('checked', '');
|
|
272
|
-
this.bookmarkWrapper.setAttribute('tooltip', 'Bookmarked');
|
|
273
|
-
if (this.bookmarkLabel) this.bookmarkLabel.innerText = 'Bookmarked';
|
|
274
|
-
await this.toggleBookmark('add', id, reportId, reportType, csrfToken);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
async toggleBookmark(type, id, reportId, reportType, csrfToken) {
|
|
279
|
-
const endpoint = type === 'add' ? '/dpr/addBookmark/' : '/dpr/removeBookmark/';
|
|
280
|
-
await fetch(endpoint, {
|
|
281
|
-
method: 'post',
|
|
282
|
-
headers: {
|
|
283
|
-
Accept: 'application/json',
|
|
284
|
-
'Content-Type': 'application/json',
|
|
285
|
-
'CSRF-Token': csrfToken,
|
|
286
|
-
},
|
|
287
|
-
body: JSON.stringify({
|
|
288
|
-
id,
|
|
289
|
-
reportId,
|
|
290
|
-
reportType,
|
|
291
|
-
}),
|
|
292
|
-
})
|
|
293
|
-
.then(() => {
|
|
294
|
-
if (!window.location.href.includes('/report')) {
|
|
295
|
-
window.location.reload();
|
|
296
|
-
}
|
|
297
|
-
})
|
|
298
|
-
.catch((error) => console.error('Error:', error));
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
class ShowMore extends DprClientClass {
|
|
303
|
-
static getModuleName() {
|
|
304
|
-
return 'show-more'
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
initialise() {
|
|
308
|
-
this.initShowMore();
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
initShowMore() {
|
|
312
|
-
const element = this.getElement();
|
|
313
|
-
const textContainer = element.querySelector('.dpr-show-more-content');
|
|
314
|
-
const button = element.querySelector('.dpr-show-hide-button');
|
|
315
|
-
const textContent = element.getAttribute('data-content');
|
|
316
|
-
const length = +element.getAttribute('data-length') || 200;
|
|
317
|
-
const shortString = textContent.replaceAll(/<[^>]+>/g, '').substring(0, length);
|
|
318
|
-
|
|
319
|
-
if (textContent.length > length) {
|
|
320
|
-
textContainer.innerHTML = `${shortString}... `;
|
|
321
|
-
} else {
|
|
322
|
-
textContainer.innerHTML = `${textContent}`;
|
|
323
|
-
button.style.display = 'none';
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
button.addEventListener('click', (event) => {
|
|
327
|
-
event.preventDefault();
|
|
328
|
-
if (button.innerHTML === 'show more') {
|
|
329
|
-
textContainer.innerHTML = `${textContent} `;
|
|
330
|
-
button.innerHTML = 'show less';
|
|
331
|
-
} else if (button.innerHTML === 'show less') {
|
|
332
|
-
textContainer.innerHTML = `${shortString}... `;
|
|
333
|
-
button.innerHTML = 'show more';
|
|
334
|
-
}
|
|
335
|
-
});
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
/* global dayjs */
|
|
340
|
-
|
|
341
|
-
class DprQueryParamClass extends DprClientClass {
|
|
342
|
-
/**
|
|
343
|
-
* initialises the selected values from the query params
|
|
344
|
-
*
|
|
345
|
-
* @memberof AsyncFilters
|
|
346
|
-
*/
|
|
347
|
-
initInputsFromQueryParams() {
|
|
348
|
-
this.queryParams = new URLSearchParams(window.location.search);
|
|
349
|
-
this.queryParams.forEach((value, key) => {
|
|
350
|
-
const inputs = document.getElementsByName(key);
|
|
351
|
-
if (inputs.length) {
|
|
352
|
-
const input = inputs[0];
|
|
353
|
-
const { type } = input;
|
|
354
|
-
if (type === 'radio' || type === 'checkbox') {
|
|
355
|
-
this.setMultiSelectValue(inputs, value);
|
|
356
|
-
} else if (input.classList.contains('moj-js-datepicker-input')) {
|
|
357
|
-
const formatted = dayjs(value, 'YYYY-MM-DD').format('DD/MM/YYYY');
|
|
358
|
-
input.value = formatted !== 'Invalid Date' ? formatted : '';
|
|
359
|
-
} else {
|
|
360
|
-
input.value = value;
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
});
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
/**
|
|
367
|
-
* Initialises the input event listeners
|
|
368
|
-
*
|
|
369
|
-
* @memberof AsyncFilters
|
|
370
|
-
*/
|
|
371
|
-
initInputEvents(elements) {
|
|
372
|
-
Array.from(elements).forEach((input) => {
|
|
373
|
-
input.addEventListener('change', () => {
|
|
374
|
-
this.setQueryParamFromInput(input, true, false);
|
|
375
|
-
});
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
/**
|
|
380
|
-
* Initialises the query params from default inputs
|
|
381
|
-
*
|
|
382
|
-
* @param {*} elements
|
|
383
|
-
* @memberof DprQueryParamClass
|
|
384
|
-
*/
|
|
385
|
-
initQueryParamsFromInputs(elements) {
|
|
386
|
-
Array.from(elements).forEach((input) => {
|
|
387
|
-
if (input.type !== 'hidden') this.setQueryParamFromInput(input, false, true);
|
|
388
|
-
});
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
/**
|
|
392
|
-
* Sets a single query param from an single input
|
|
393
|
-
*
|
|
394
|
-
* @param {*} input
|
|
395
|
-
* @param {*} toggleCheckbox
|
|
396
|
-
* @memberof DprQueryParamClass
|
|
397
|
-
*/
|
|
398
|
-
setQueryParamFromInput(input, toggleCheckbox = false, init = false) {
|
|
399
|
-
const { type } = input;
|
|
400
|
-
if (type === 'checkbox' || type === 'radio') {
|
|
401
|
-
this.setMultiSelectQueryParam(input, toggleCheckbox, init);
|
|
402
|
-
} else {
|
|
403
|
-
const { name } = input;
|
|
404
|
-
let { value } = input;
|
|
405
|
-
const { staticOptionNameValue } = input;
|
|
406
|
-
const isDateInput = input.classList.contains('moj-js-datepicker-input');
|
|
407
|
-
if (isDateInput) {
|
|
408
|
-
const formatted = dayjs(value, 'D/M/YYYY').format('YYYY-MM-DD');
|
|
409
|
-
value = formatted !== 'Invalid Date' ? formatted : '';
|
|
410
|
-
}
|
|
411
|
-
const valueToUpdate = !isDateInput && staticOptionNameValue ? staticOptionNameValue : value;
|
|
412
|
-
if (name) this.updateQueryParam(name, valueToUpdate);
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* Sets the query params for checkboxes
|
|
418
|
-
*
|
|
419
|
-
* @param {*} input
|
|
420
|
-
* @param {*} toggle - adds the delete step on toggle
|
|
421
|
-
* @memberof DprQueryParamClass
|
|
422
|
-
*/
|
|
423
|
-
setMultiSelectQueryParam(input, toggle, init) {
|
|
424
|
-
this.queryParams = new URLSearchParams(window.location.search);
|
|
425
|
-
const { name, value, checked, type } = input;
|
|
426
|
-
if (checked && !this.queryParams.has(name, value)) {
|
|
427
|
-
let updateType;
|
|
428
|
-
if (type === 'checkbox') {
|
|
429
|
-
updateType = 'append';
|
|
430
|
-
if (!init && name !== 'columns') this.updateQueryParam('preventDefault', true);
|
|
431
|
-
}
|
|
432
|
-
this.updateQueryParam(name, value, updateType);
|
|
433
|
-
} else if (!checked && this.queryParams.has(name, value) && toggle) {
|
|
434
|
-
if (type === 'checkbox') {
|
|
435
|
-
if (!init && name !== 'columns') this.updateQueryParam('preventDefault', true);
|
|
436
|
-
}
|
|
437
|
-
this.updateQueryParam(name, value, 'delete');
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
/**
|
|
442
|
-
* Updates the query string and updates the URL
|
|
443
|
-
*
|
|
444
|
-
* @param {*} queryParams
|
|
445
|
-
* @param {*} name
|
|
446
|
-
* @param {*} value
|
|
447
|
-
* @memberof DprQueryParamClass
|
|
448
|
-
*/
|
|
449
|
-
updateQueryParam(name, value, type) {
|
|
450
|
-
this.queryParams = new URLSearchParams(window.location.search);
|
|
451
|
-
if (!value && name.length) {
|
|
452
|
-
this.queryParams.delete(name);
|
|
453
|
-
} else {
|
|
454
|
-
switch (type) {
|
|
455
|
-
case 'append':
|
|
456
|
-
this.queryParams.append(name, value);
|
|
457
|
-
break
|
|
458
|
-
case 'delete':
|
|
459
|
-
this.queryParams.delete(name, value);
|
|
460
|
-
break
|
|
461
|
-
default:
|
|
462
|
-
this.queryParams.set(name, value);
|
|
463
|
-
break
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
window.history.replaceState(null, null, `?${this.queryParams.toString()}`);
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
/**
|
|
471
|
-
* Clears the query params
|
|
472
|
-
*
|
|
473
|
-
* @memberof DprQueryParamClass
|
|
474
|
-
*/
|
|
475
|
-
clearQueryParams(type) {
|
|
476
|
-
this.queryParams = new URLSearchParams(window.location.search);
|
|
477
|
-
const params = Array.from(this.queryParams);
|
|
478
|
-
|
|
479
|
-
params.forEach((p) => {
|
|
480
|
-
if (type && p[0].includes(type)) {
|
|
481
|
-
this.queryParams.delete(p[0], p[1]);
|
|
482
|
-
}
|
|
483
|
-
if (type === 'filters') {
|
|
484
|
-
this.queryParams.delete('preventDefault');
|
|
485
|
-
}
|
|
486
|
-
});
|
|
487
|
-
window.history.replaceState(null, null, `?${this.queryParams.toString()}`);
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
/**
|
|
491
|
-
* Given a form element, will extract the formdata
|
|
492
|
-
* as an array of objects and filter out empty values.
|
|
493
|
-
*
|
|
494
|
-
* @param {*} form
|
|
495
|
-
* @return {*}
|
|
496
|
-
* @memberof AsyncFilters
|
|
497
|
-
*/
|
|
498
|
-
getFormDataAsObject(form, prefix) {
|
|
499
|
-
const formData = new FormData(form);
|
|
500
|
-
const array = Array.from(formData.entries())
|
|
501
|
-
.filter((entry) => {
|
|
502
|
-
return entry[1] !== ''
|
|
503
|
-
})
|
|
504
|
-
.map((entry) => {
|
|
505
|
-
return { [`${prefix}${entry[0]}`]: entry[1] }
|
|
506
|
-
});
|
|
507
|
-
|
|
508
|
-
return Object.assign({}, ...[...array])
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
/**
|
|
512
|
-
* Sets the value of a radio button
|
|
513
|
-
*
|
|
514
|
-
* @param {*} inputs
|
|
515
|
-
* @param {*} value
|
|
516
|
-
* @memberof AsyncFilters
|
|
517
|
-
*/
|
|
518
|
-
setMultiSelectValue(inputs, value) {
|
|
519
|
-
const input = Array.from(inputs).find((i) => i.getAttribute('value') === value);
|
|
520
|
-
if (input) input.checked = true;
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
/**
|
|
524
|
-
* Sets the value of the checkboxes
|
|
525
|
-
*
|
|
526
|
-
* @param {*} inputs
|
|
527
|
-
* @param {*} value
|
|
528
|
-
* @memberof DprQueryParamClass
|
|
529
|
-
*/
|
|
530
|
-
setCheckBoxValues(inputs, value) {
|
|
531
|
-
const input = Array.from(inputs).find((i) => i.getAttribute('value') === value);
|
|
532
|
-
if (input) input.checked = true;
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
removeNoFilterValues() {
|
|
536
|
-
this.queryParams = new URLSearchParams(window.location.search);
|
|
537
|
-
const params = Array.from(this.queryParams);
|
|
538
|
-
params.forEach((p) => {
|
|
539
|
-
if (p[1].includes('no-filter')) this.queryParams.delete(p[0], p[1]);
|
|
540
|
-
});
|
|
541
|
-
window.history.replaceState(null, null, `?${this.queryParams.toString()}`);
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
/* eslint-disable class-methods-use-this */
|
|
546
|
-
|
|
547
|
-
class DprFormValidationClass extends DprQueryParamClass {
|
|
548
|
-
initFormValidation(formFields) {
|
|
549
|
-
formFields.forEach((field) => {
|
|
550
|
-
const formGroup = field.closest('div.govuk-form-group');
|
|
551
|
-
if (formGroup) {
|
|
552
|
-
const errorMessageEl = formGroup.querySelector('p.govuk-error-message');
|
|
553
|
-
if (errorMessageEl) {
|
|
554
|
-
formGroup.classList.remove('govuk-form-group--error');
|
|
555
|
-
errorMessageEl.classList.add('govuk-error-message--hidden');
|
|
556
|
-
field.classList.remove('govuk-input--error');
|
|
557
|
-
field.classList.remove('govuk-textarea--error');
|
|
558
|
-
field.classList.remove('govuk-select--error');
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
});
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
validateForm() {
|
|
565
|
-
this.errorMessages = [];
|
|
566
|
-
let prevfieldName = '';
|
|
567
|
-
this.formFields.forEach((field) => {
|
|
568
|
-
const currentFieldName = field.getAttribute('name');
|
|
569
|
-
if (currentFieldName !== prevfieldName && field.tagName !== 'BUTTON') {
|
|
570
|
-
const formGroupEl = field.closest('div.govuk-form-group');
|
|
571
|
-
|
|
572
|
-
if (formGroupEl) {
|
|
573
|
-
const errorMessageEl = formGroupEl.querySelector('p.govuk-error-message');
|
|
574
|
-
if (!this.fieldIsValid(field)) {
|
|
575
|
-
this.showFieldError(field, formGroupEl, errorMessageEl);
|
|
576
|
-
} else if (errorMessageEl && formGroupEl) {
|
|
577
|
-
this.hideFieldError(field, formGroupEl, errorMessageEl);
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
prevfieldName = field.getAttribute('name');
|
|
582
|
-
});
|
|
583
|
-
|
|
584
|
-
if (this.errorMessages.length) {
|
|
585
|
-
this.buildErrorSummary();
|
|
586
|
-
this.errorSummary.classList.remove('query-error-summary--hidden');
|
|
587
|
-
} else {
|
|
588
|
-
this.errorSummary.classList.add('query-error-summary--hidden');
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
fieldIsValid(field) {
|
|
593
|
-
const { type } = field;
|
|
594
|
-
switch (type) {
|
|
595
|
-
case 'checkbox':
|
|
596
|
-
return this.validateCheckbox(field)
|
|
597
|
-
default:
|
|
598
|
-
return field.checkValidity()
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
validateCheckbox(field) {
|
|
603
|
-
const checkboxWrapper = field.closest('div.govuk-checkboxes');
|
|
604
|
-
if (checkboxWrapper.hasAttribute('required')) {
|
|
605
|
-
const checkboxes = checkboxWrapper.querySelectorAll('input[type="checkbox"]');
|
|
606
|
-
return Array.from(checkboxes).some((x) => x.checked)
|
|
607
|
-
}
|
|
608
|
-
return true
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
showFieldError(field, formGroupEl, errorMessageEl) {
|
|
612
|
-
formGroupEl.classList.add('govuk-form-group--error');
|
|
613
|
-
const message = this.setValidationMessage(field.validity, field, errorMessageEl);
|
|
614
|
-
|
|
615
|
-
// eslint-disable-next-line no-param-reassign
|
|
616
|
-
errorMessageEl.innerHTML = `<span class="govuk-visually-hidden">Error:</span>${message}`;
|
|
617
|
-
errorMessageEl.classList.remove('govuk-error-message--hidden');
|
|
618
|
-
field.classList.add('govuk-input--error');
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
hideFieldError(field, formGroupEl, errorMessageEl) {
|
|
622
|
-
formGroupEl.classList.remove('govuk-form-group--error');
|
|
623
|
-
errorMessageEl.classList.add('govuk-error-message--hidden');
|
|
624
|
-
field.classList.remove('govuk-input--error');
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
buildErrorSummary() {
|
|
628
|
-
const errorSummaryBody = this.errorSummary.querySelector('div.govuk-error-summary__body');
|
|
629
|
-
let messages = '';
|
|
630
|
-
this.errorMessages.forEach((m) => {
|
|
631
|
-
messages += `<li><a href="${m.href}">${m.text}</a></li>`;
|
|
632
|
-
});
|
|
633
|
-
const errorMessages = `<ul class="govuk-list govuk-error-summary__list">${messages}</ul>`;
|
|
634
|
-
errorSummaryBody.innerHTML = errorMessages;
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
getDisplayName(field) {
|
|
638
|
-
const type = field.getAttribute('type');
|
|
639
|
-
switch (type) {
|
|
640
|
-
case 'text':
|
|
641
|
-
return field.getAttribute('display-name')
|
|
642
|
-
case 'radio':
|
|
643
|
-
return field.closest('div.govuk-radios').getAttribute('display-name')
|
|
644
|
-
case 'checkbox':
|
|
645
|
-
return field.closest('div.govuk-checkboxes').getAttribute('display-name')
|
|
646
|
-
default:
|
|
647
|
-
return field.getAttribute('display-name')
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
setValidationMessage(validityState, field, errorMessageEl) {
|
|
652
|
-
const existingErrorMessage = errorMessageEl.lastChild.nodeValue.replace(/(\r\n|\n|\r)/gm, '').trim();
|
|
653
|
-
const inputId = field.getAttribute('id');
|
|
654
|
-
const displayName = this.getDisplayName(field);
|
|
655
|
-
let message;
|
|
656
|
-
|
|
657
|
-
if (validityState.valueMissing || field.type === 'checkbox') {
|
|
658
|
-
message = existingErrorMessage.length ? existingErrorMessage : `${displayName} is required`;
|
|
659
|
-
this.errorMessages.push({
|
|
660
|
-
text: message,
|
|
661
|
-
href: `#${inputId}`,
|
|
662
|
-
});
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
if (validityState.patternMismatch) {
|
|
666
|
-
const pattern = field.getAttribute('pattern-hint') || field.getAttribute('pattern');
|
|
667
|
-
message = existingErrorMessage.length
|
|
668
|
-
? existingErrorMessage
|
|
669
|
-
: `The value for ${displayName} must be in the correct pattern: ${pattern}`;
|
|
670
|
-
this.errorMessages.push({
|
|
671
|
-
text: message,
|
|
672
|
-
href: `#${inputId}`,
|
|
673
|
-
});
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
return message
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
|
|
680
|
-
class AsyncFilters extends DprFormValidationClass {
|
|
681
|
-
static getModuleName() {
|
|
682
|
-
return 'download-feedback-form'
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
initialise() {
|
|
686
|
-
this.errorMessages = [];
|
|
687
|
-
this.mainForm = document.getElementById('download-feedback-form');
|
|
688
|
-
this.mainForm.noValidate = true;
|
|
689
|
-
this.formFields = Array.from(this.mainForm.elements);
|
|
690
|
-
|
|
691
|
-
this.errorSummary = document.getElementById('download-feedback-form-summary');
|
|
692
|
-
this.submitButton = document.getElementById('download-feedback-form-submit');
|
|
693
|
-
this.success = document.getElementById('download-feedback-form-success');
|
|
694
|
-
|
|
695
|
-
this.initSubmitButton();
|
|
696
|
-
this.initFormValidation(this.formFields);
|
|
697
|
-
this.mainForm.classList.remove('download-feedback-form--hidden');
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
initSubmitButton() {
|
|
701
|
-
this.submitButton.addEventListener('click', (e) => {
|
|
702
|
-
e.preventDefault();
|
|
703
|
-
this.validateForm();
|
|
704
|
-
|
|
705
|
-
if (this.mainForm.checkValidity()) {
|
|
706
|
-
this.mainForm.requestSubmit();
|
|
707
|
-
}
|
|
708
|
-
});
|
|
709
|
-
}
|
|
710
|
-
}
|
|
711
|
-
|
|
712
|
-
class Pagination extends DprQueryParamClass {
|
|
713
|
-
static getModuleName() {
|
|
714
|
-
return 'pagination'
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
initialise() {
|
|
718
|
-
this.pageSizeSelect = document.getElementById('page-size-select');
|
|
719
|
-
|
|
720
|
-
this.initInputsFromQueryParams();
|
|
721
|
-
this.initSelectEvent();
|
|
722
|
-
}
|
|
723
|
-
|
|
724
|
-
initSelectEvent() {
|
|
725
|
-
this.pageSizeSelect.addEventListener('change', () => {
|
|
726
|
-
this.queryParams = new URLSearchParams(window.location.search);
|
|
727
|
-
const { name, value } = this.pageSizeSelect;
|
|
728
|
-
this.queryParams.set(name, value);
|
|
729
|
-
this.queryParams.set('selectedPage', '1');
|
|
730
|
-
window.history.replaceState(null, null, `?${this.queryParams.toString()}`);
|
|
731
|
-
window.location.reload();
|
|
732
|
-
});
|
|
733
|
-
}
|
|
734
|
-
}
|
|
735
|
-
|
|
736
|
-
class IconButtonList extends DprClientClass {
|
|
737
|
-
static getModuleName() {
|
|
738
|
-
return 'report-actions'
|
|
739
|
-
}
|
|
740
|
-
|
|
741
|
-
initialise() {
|
|
742
|
-
this.refreshButton = document.getElementById('dpr-button-refresh');
|
|
743
|
-
this.printButton = document.getElementById('dpr-button-printable');
|
|
744
|
-
this.shareButton = document.getElementById('dpr-button-sharable');
|
|
745
|
-
this.downloadButton = document.getElementById('dpr-button-downloadable');
|
|
746
|
-
this.copyButton = document.getElementById('dpr-button-copy');
|
|
747
|
-
|
|
748
|
-
this.initRefreshEvent();
|
|
749
|
-
this.initPrintButtonEvent();
|
|
750
|
-
this.initShareButtonEvent();
|
|
751
|
-
this.initCopyButtonEvent();
|
|
752
|
-
}
|
|
753
|
-
|
|
754
|
-
initPrintButtonEvent() {
|
|
755
|
-
if (this.printButton) {
|
|
756
|
-
const disabled = this.printButton.getAttribute('data-disabled');
|
|
757
|
-
this.printButton.addEventListener('click', () => {
|
|
758
|
-
if (disabled !== 'true') {
|
|
759
|
-
window.print();
|
|
760
|
-
}
|
|
761
|
-
});
|
|
762
|
-
|
|
763
|
-
this.printButton.addEventListener('keyup', (e) => {
|
|
764
|
-
if (e.key === 'Enter') {
|
|
765
|
-
if (disabled !== 'true') {
|
|
766
|
-
window.print();
|
|
767
|
-
}
|
|
768
|
-
}
|
|
769
|
-
});
|
|
770
|
-
}
|
|
771
|
-
}
|
|
772
|
-
|
|
773
|
-
initShareButtonEvent() {
|
|
774
|
-
if (this.shareButton) {
|
|
775
|
-
const href = this.shareButton.getAttribute('data-href');
|
|
776
|
-
this.shareButton.addEventListener('click', () => {
|
|
777
|
-
window.location = href;
|
|
778
|
-
});
|
|
779
|
-
|
|
780
|
-
this.shareButton.addEventListener('keyup', (e) => {
|
|
781
|
-
if (e.key === 'Enter') {
|
|
782
|
-
window.location = href;
|
|
783
|
-
}
|
|
784
|
-
});
|
|
785
|
-
}
|
|
786
|
-
}
|
|
787
|
-
|
|
788
|
-
initCopyButtonEvent() {
|
|
789
|
-
if (this.copyButton) {
|
|
790
|
-
const href = this.copyButton.getAttribute('data-href');
|
|
791
|
-
this.copyButton.addEventListener('click', () => {
|
|
792
|
-
navigator.clipboard.writeText(href);
|
|
793
|
-
});
|
|
794
|
-
|
|
795
|
-
this.copyButton.addEventListener('keyup', (e) => {
|
|
796
|
-
if (e.key === 'Enter') {
|
|
797
|
-
navigator.clipboard.writeText(href);
|
|
798
|
-
}
|
|
799
|
-
});
|
|
800
|
-
}
|
|
801
|
-
}
|
|
802
|
-
|
|
803
|
-
initRefreshEvent() {
|
|
804
|
-
if (this.refreshButton) {
|
|
805
|
-
const href = this.refreshButton.getAttribute('data-href');
|
|
806
|
-
this.refreshButton.addEventListener('click', () => {
|
|
807
|
-
window.location = href;
|
|
808
|
-
});
|
|
809
|
-
|
|
810
|
-
this.refreshButton.addEventListener('keyup', (e) => {
|
|
811
|
-
if (e.key === 'Enter') {
|
|
812
|
-
window.location = href;
|
|
813
|
-
}
|
|
814
|
-
});
|
|
815
|
-
}
|
|
816
|
-
}
|
|
817
|
-
}
|
|
818
|
-
|
|
819
|
-
class DataTable extends DprClientClass {
|
|
820
|
-
static getModuleName() {
|
|
821
|
-
return 'data-table'
|
|
822
|
-
}
|
|
823
|
-
|
|
824
|
-
initialise() {
|
|
825
|
-
this.tableContainer = document.getElementById('dpr-table-wrapper');
|
|
826
|
-
this.table = document.getElementById('dpr-data-table');
|
|
827
|
-
this.overflowGradient = document.getElementById('dpr-overflow-gradient');
|
|
828
|
-
this.createTableHeaderAndFooter();
|
|
829
|
-
this.initTableScrollListener();
|
|
830
|
-
}
|
|
831
|
-
|
|
832
|
-
initTableScrollListener() {
|
|
833
|
-
this.checkOffsetWidths();
|
|
834
|
-
|
|
835
|
-
window.addEventListener('resize', () => {
|
|
836
|
-
this.checkOffsetWidths();
|
|
837
|
-
});
|
|
838
|
-
|
|
839
|
-
this.tableContainer.addEventListener('scroll', (event) => {
|
|
840
|
-
const endOfScroll = this.table.offsetWidth;
|
|
841
|
-
const currentScroll = event.target.offsetWidth + event.target.scrollLeft;
|
|
842
|
-
if (endOfScroll === currentScroll) {
|
|
843
|
-
this.overflowGradient.style.display = 'none';
|
|
844
|
-
} else {
|
|
845
|
-
this.overflowGradient.style.display = 'block';
|
|
846
|
-
}
|
|
847
|
-
});
|
|
848
|
-
}
|
|
849
|
-
|
|
850
|
-
checkOffsetWidths() {
|
|
851
|
-
if (this.tableContainer.offsetWidth >= this.table.offsetWidth) {
|
|
852
|
-
this.overflowGradient.style.display = 'none';
|
|
853
|
-
} else {
|
|
854
|
-
this.overflowGradient.style.display = 'block';
|
|
855
|
-
}
|
|
856
|
-
}
|
|
857
|
-
|
|
858
|
-
createTableHeaderAndFooter() {
|
|
859
|
-
if (this.table) {
|
|
860
|
-
const classification = this.table.getAttribute('data-classification');
|
|
861
|
-
const headLength = Number(this.table.getAttribute('data-col-length'));
|
|
862
|
-
const classificationContent = `<b>${classification}</b>`;
|
|
863
|
-
|
|
864
|
-
// Headers
|
|
865
|
-
const header = this.table.createTHead();
|
|
866
|
-
|
|
867
|
-
const classificationHeaderRow = header.insertRow(0);
|
|
868
|
-
const classificationHeaderCell = classificationHeaderRow.insertCell(0);
|
|
869
|
-
classificationHeaderCell.outerHTML = `<th class="govuk-table__header govuk-table__cell--content print-header-footer" colspan=${headLength}>${classificationContent}</th>`;
|
|
870
|
-
|
|
871
|
-
// Footers
|
|
872
|
-
const footer = this.table.createTFoot();
|
|
873
|
-
|
|
874
|
-
const classificationFooterRow = footer.insertRow(0);
|
|
875
|
-
const classificationFooterCell = classificationFooterRow.insertCell(0);
|
|
876
|
-
classificationFooterCell.outerHTML = `<td class="govuk-table__cell govuk-table__cell--content print-header-footer table-row--no-border" colspan=${headLength}>${classificationContent}</td>`;
|
|
877
|
-
}
|
|
878
|
-
}
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
class Columns extends DprQueryParamClass {
|
|
882
|
-
static getModuleName() {
|
|
883
|
-
return 'columns'
|
|
884
|
-
}
|
|
885
|
-
|
|
886
|
-
initialise() {
|
|
887
|
-
this.form = this.getElement();
|
|
888
|
-
this.submitButton = this.getElement().querySelector('.dpr-apply-columns-button');
|
|
889
|
-
this.resetButton = this.getElement().querySelector('.dpr-reset-columns-button');
|
|
890
|
-
|
|
891
|
-
this.initInputsFromQueryParams();
|
|
892
|
-
this.initQueryParamsFromInputs(this.form.elements);
|
|
893
|
-
this.initInputEvents(this.form.elements);
|
|
894
|
-
|
|
895
|
-
this.initSubmitButton();
|
|
896
|
-
this.initResetButton();
|
|
897
|
-
}
|
|
898
|
-
|
|
899
|
-
initSubmitButton() {
|
|
900
|
-
this.submitButton.addEventListener('click', (e) => {
|
|
901
|
-
e.preventDefault();
|
|
902
|
-
this.loadingHelper.showLoadingAnimation();
|
|
903
|
-
window.location.reload();
|
|
904
|
-
});
|
|
905
|
-
}
|
|
906
|
-
|
|
907
|
-
initResetButton() {
|
|
908
|
-
this.resetButton.addEventListener('click', (e) => {
|
|
909
|
-
e.preventDefault();
|
|
910
|
-
this.loadingHelper.showLoadingAnimation();
|
|
911
|
-
this.clearQueryParams('columns');
|
|
912
|
-
window.location.reload();
|
|
913
|
-
});
|
|
914
|
-
}
|
|
915
|
-
}
|
|
916
|
-
|
|
917
|
-
class DownloadMessage extends DprClientClass {
|
|
918
|
-
static getModuleName() {
|
|
919
|
-
return 'download-message'
|
|
920
|
-
}
|
|
921
|
-
|
|
922
|
-
initialise() {
|
|
923
|
-
this.downloadMessage = this.getElement();
|
|
924
|
-
if (window.location.href.indexOf('download-disabled') > -1) {
|
|
925
|
-
this.downloadMessage.classList.remove('dpr-download-message--hidden');
|
|
926
|
-
}
|
|
927
|
-
}
|
|
928
|
-
}
|
|
929
|
-
|
|
930
|
-
/* eslint-disable class-methods-use-this */
|
|
931
|
-
|
|
932
|
-
class DprFiltersFormClass extends DprFormValidationClass {
|
|
933
|
-
initFiltersForm({ formId, submitButtonId, resetButtonId, removeSelectedButtonClass }) {
|
|
934
|
-
this.errorMessages = [];
|
|
935
|
-
|
|
936
|
-
// Main form
|
|
937
|
-
this.mainForm = document.getElementById(formId);
|
|
938
|
-
this.mainForm.noValidate = true;
|
|
939
|
-
this.formFields = Array.from(this.mainForm.elements);
|
|
940
|
-
this.errorSummary = document.getElementById('query-error-summary');
|
|
941
|
-
|
|
942
|
-
// Buttons
|
|
943
|
-
this.submitButton = document.getElementById(submitButtonId);
|
|
944
|
-
this.resetButton = document.getElementById(resetButtonId);
|
|
945
|
-
this.selectedFiltersButtons = document.querySelectorAll(`.${removeSelectedButtonClass}`);
|
|
946
|
-
|
|
947
|
-
this.initValues();
|
|
948
|
-
this.initSubmitButton();
|
|
949
|
-
this.initResetButton();
|
|
950
|
-
this.initFormData();
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
initValues() {
|
|
954
|
-
this.initInputsFromQueryParams();
|
|
955
|
-
this.initQueryParamsFromInputs(this.mainForm.elements);
|
|
956
|
-
this.initInputEvents(this.mainForm.elements);
|
|
957
|
-
}
|
|
958
|
-
|
|
959
|
-
initFormData() {
|
|
960
|
-
this.initFormValidation(this.formFields);
|
|
961
|
-
this.mainForm.classList.remove('async-filters-form--hidden');
|
|
962
|
-
}
|
|
963
|
-
|
|
964
|
-
initSubmitButton() {
|
|
965
|
-
this.submitButton.addEventListener('click', (e) => {
|
|
966
|
-
e.preventDefault();
|
|
967
|
-
this.initFormData();
|
|
968
|
-
this.validateForm();
|
|
969
|
-
|
|
970
|
-
if (this.mainForm.checkValidity()) {
|
|
971
|
-
this.submitAction();
|
|
972
|
-
}
|
|
973
|
-
});
|
|
974
|
-
}
|
|
975
|
-
|
|
976
|
-
initResetButton() {
|
|
977
|
-
if (this.resetButton) {
|
|
978
|
-
this.defaultQuery = this.resetButton.getAttribute('defaultQuery');
|
|
979
|
-
this.resetButton.addEventListener('click', (e) => {
|
|
980
|
-
e.preventDefault();
|
|
981
|
-
this.clearQueryParams('filters');
|
|
982
|
-
this.resetAction();
|
|
983
|
-
});
|
|
984
|
-
}
|
|
985
|
-
}
|
|
986
|
-
|
|
987
|
-
resetAction() {
|
|
988
|
-
if (this.defaultQuery) {
|
|
989
|
-
const filters = this.defaultQuery.substring(1);
|
|
990
|
-
const href = `${window.location.href}&${filters}`;
|
|
991
|
-
window.location.href = href;
|
|
992
|
-
} else {
|
|
993
|
-
window.location.reload();
|
|
994
|
-
}
|
|
995
|
-
}
|
|
996
|
-
|
|
997
|
-
submitAction() {
|
|
998
|
-
window.location.reload();
|
|
999
|
-
}
|
|
1000
|
-
|
|
1001
|
-
initSelectedFiltersButtons() {
|
|
1002
|
-
if (this.selectedFiltersButtons) {
|
|
1003
|
-
this.selectedFiltersButtons.forEach((button) => {
|
|
1004
|
-
button.addEventListener('click', (e) => {
|
|
1005
|
-
e.preventDefault();
|
|
1006
|
-
const keys = JSON.parse(e.target.getAttribute('data-query-param-key'));
|
|
1007
|
-
const values = JSON.parse(e.target.getAttribute('data-query-param-value'));
|
|
1008
|
-
let constraints = e.target.getAttribute('data-query-constraint-values');
|
|
1009
|
-
constraints = constraints ? JSON.parse(e.target.getAttribute('data-query-constraint-values')) : undefined;
|
|
1010
|
-
|
|
1011
|
-
keys.forEach((key) => {
|
|
1012
|
-
values.forEach((value) => {
|
|
1013
|
-
this.updateQueryParam(key, value, 'delete');
|
|
1014
|
-
});
|
|
1015
|
-
if (constraints) {
|
|
1016
|
-
const constraint = constraints.find((con) => con.key === key);
|
|
1017
|
-
if (constraint) {
|
|
1018
|
-
this.updateQueryParam(key, constraint.value);
|
|
1019
|
-
}
|
|
1020
|
-
}
|
|
1021
|
-
});
|
|
1022
|
-
|
|
1023
|
-
this.updateQueryParam('preventDefault', true);
|
|
1024
|
-
window.location.reload();
|
|
1025
|
-
});
|
|
1026
|
-
});
|
|
1027
|
-
}
|
|
1028
|
-
}
|
|
1029
|
-
}
|
|
1030
|
-
|
|
1031
|
-
// import DprFormValidationClass from '../../DprFormValidationClass.mjs'
|
|
1032
|
-
|
|
1033
|
-
class InteractiveFilters extends DprFiltersFormClass {
|
|
1034
|
-
static getModuleName() {
|
|
1035
|
-
return 'interactive-filters'
|
|
1036
|
-
}
|
|
1037
|
-
|
|
1038
|
-
initialise() {
|
|
1039
|
-
this.initFiltersForm({
|
|
1040
|
-
formId: 'interactive-filters-form',
|
|
1041
|
-
submitButtonId: 'interactive-apply-filters-button',
|
|
1042
|
-
resetButtonId: 'interactive-reset-filters-button',
|
|
1043
|
-
removeSelectedButtonClass: 'interactive-remove-filter-button',
|
|
1044
|
-
});
|
|
1045
|
-
|
|
1046
|
-
this.initSelectedFiltersButtons();
|
|
1047
|
-
}
|
|
1048
|
-
}
|
|
1049
|
-
|
|
1050
|
-
class DprPollingStatusClass extends DprClientClass {
|
|
1051
|
-
getPollingFrquency() {
|
|
1052
|
-
return '2000' // 2 seconds
|
|
1053
|
-
}
|
|
1054
|
-
|
|
1055
|
-
getPollingStatuses() {
|
|
1056
|
-
return ['SUBMITTED', 'STARTED', 'PICKED']
|
|
1057
|
-
}
|
|
1058
|
-
|
|
1059
|
-
getEndStatuses() {
|
|
1060
|
-
return ['FINISHED', 'FAILED', 'EXPIRED', 'ABORTED']
|
|
1061
|
-
}
|
|
1062
|
-
|
|
1063
|
-
getExpiredCheckStatuses() {
|
|
1064
|
-
return ['FAILED', 'EXPIRED', 'ABORTED']
|
|
1065
|
-
}
|
|
1066
|
-
|
|
1067
|
-
async getRequestStatus(metaData, csrfToken) {
|
|
1068
|
-
return this.getStatus('/dpr/getStatus/', metaData, csrfToken)
|
|
1069
|
-
}
|
|
1070
|
-
|
|
1071
|
-
async getExpiredStatus(endpoint, metaData, csrfToken) {
|
|
1072
|
-
return this.getStatus(endpoint, metaData, csrfToken)
|
|
1073
|
-
}
|
|
1074
|
-
|
|
1075
|
-
shouldPollStatus(data) {
|
|
1076
|
-
return JSON.parse(data).some((item) => {
|
|
1077
|
-
return !this.END_STATUSES.includes(item.status)
|
|
1078
|
-
})
|
|
1079
|
-
}
|
|
1080
|
-
|
|
1081
|
-
shouldPollExpired(data) {
|
|
1082
|
-
return JSON.parse(data).some((item) => {
|
|
1083
|
-
return !this.EXPIRED_END_STATUSES.includes(item.status)
|
|
1084
|
-
})
|
|
1085
|
-
}
|
|
1086
|
-
|
|
1087
|
-
async getStatus(endpoint, body, csrfToken) {
|
|
1088
|
-
let response;
|
|
1089
|
-
await fetch(endpoint, {
|
|
1090
|
-
method: 'post',
|
|
1091
|
-
headers: {
|
|
1092
|
-
Accept: 'application/json',
|
|
1093
|
-
'Content-Type': 'application/json',
|
|
1094
|
-
'CSRF-Token': csrfToken,
|
|
1095
|
-
},
|
|
1096
|
-
body: JSON.stringify({
|
|
1097
|
-
...body,
|
|
1098
|
-
}),
|
|
1099
|
-
})
|
|
1100
|
-
.then((res) => res.json())
|
|
1101
|
-
.then((res) => {
|
|
1102
|
-
response = res;
|
|
1103
|
-
})
|
|
1104
|
-
.catch((error) => console.error('Error:', error));
|
|
1105
|
-
|
|
1106
|
-
return response
|
|
1107
|
-
}
|
|
1108
|
-
}
|
|
1109
|
-
|
|
1110
|
-
/* eslint-disable class-methods-use-this */
|
|
1111
|
-
|
|
1112
|
-
class DprAsyncPolling extends DprPollingStatusClass {
|
|
1113
|
-
static getModuleName() {
|
|
1114
|
-
return 'async-polling-content'
|
|
1115
|
-
}
|
|
1116
|
-
|
|
1117
|
-
initialise() {
|
|
1118
|
-
this.POLLING_STATUSES = this.getPollingStatuses();
|
|
1119
|
-
this.POLLING_FREQUENCY = this.getPollingFrquency();
|
|
1120
|
-
|
|
1121
|
-
this.statusSection = document.getElementById('async-request-polling-status');
|
|
1122
|
-
this.retryRequestButton = document.getElementById('retry-async-request');
|
|
1123
|
-
this.cancelRequestButton = document.getElementById('cancel-async-request');
|
|
1124
|
-
this.viewReportButton = document.getElementById('view-async-report-button');
|
|
1125
|
-
|
|
1126
|
-
this.requestData = this.statusSection.getAttribute('data-request-data');
|
|
1127
|
-
this.currentStatus = this.statusSection.getAttribute('data-current-status');
|
|
1128
|
-
this.csrfToken = this.statusSection.getAttribute('data-csrf-token');
|
|
1129
|
-
|
|
1130
|
-
this.initCancelRequestButton();
|
|
1131
|
-
this.initPollingInterval();
|
|
1132
|
-
}
|
|
1133
|
-
|
|
1134
|
-
async initPollingInterval() {
|
|
1135
|
-
if (this.POLLING_STATUSES.includes(this.currentStatus)) {
|
|
1136
|
-
this.pollingInterval = setInterval(async () => {
|
|
1137
|
-
await this.pollStatus();
|
|
1138
|
-
}, this.POLLING_FREQUENCY);
|
|
1139
|
-
}
|
|
1140
|
-
}
|
|
1141
|
-
|
|
1142
|
-
async pollStatus() {
|
|
1143
|
-
if (this.requestData) {
|
|
1144
|
-
const meta = JSON.parse(this.requestData);
|
|
1145
|
-
const response = await this.getRequestStatus(meta, this.csrfToken);
|
|
1146
|
-
|
|
1147
|
-
// Reload if new status is an end state
|
|
1148
|
-
if (this.currentStatus !== response.status) {
|
|
1149
|
-
clearInterval(this.pollingInterval);
|
|
1150
|
-
window.location.reload();
|
|
1151
|
-
}
|
|
1152
|
-
}
|
|
1153
|
-
}
|
|
1154
|
-
|
|
1155
|
-
initCancelRequestButton() {
|
|
1156
|
-
if (this.cancelRequestButton) {
|
|
1157
|
-
const executionId = this.cancelRequestButton.getAttribute('data-execution-id');
|
|
1158
|
-
const reportId = this.cancelRequestButton.getAttribute('data-report-id');
|
|
1159
|
-
const id = this.cancelRequestButton.getAttribute('data-id');
|
|
1160
|
-
const type = this.cancelRequestButton.getAttribute('data-type');
|
|
1161
|
-
const csrfToken = this.cancelRequestButton.getAttribute('data-csrf-token');
|
|
1162
|
-
|
|
1163
|
-
this.cancelRequestButton.addEventListener('click', async () => {
|
|
1164
|
-
await fetch('/dpr/cancelRequest/', {
|
|
1165
|
-
method: 'post',
|
|
1166
|
-
headers: {
|
|
1167
|
-
Accept: 'application/json',
|
|
1168
|
-
'Content-Type': 'application/json',
|
|
1169
|
-
'CSRF-Token': csrfToken,
|
|
1170
|
-
},
|
|
1171
|
-
body: JSON.stringify({
|
|
1172
|
-
executionId,
|
|
1173
|
-
reportId,
|
|
1174
|
-
id,
|
|
1175
|
-
type,
|
|
1176
|
-
}),
|
|
1177
|
-
})
|
|
1178
|
-
.then(() => {
|
|
1179
|
-
window.location.reload();
|
|
1180
|
-
})
|
|
1181
|
-
.catch((error) => console.error('Error:', error));
|
|
1182
|
-
});
|
|
1183
|
-
}
|
|
1184
|
-
}
|
|
1185
|
-
}
|
|
1186
|
-
|
|
1187
|
-
class AsyncFilters$1 extends DprFiltersFormClass {
|
|
1188
|
-
static getModuleName() {
|
|
1189
|
-
return 'async-filters'
|
|
1190
|
-
}
|
|
1191
|
-
|
|
1192
|
-
initialise() {
|
|
1193
|
-
this.initFiltersForm({
|
|
1194
|
-
formId: 'async-filters-form',
|
|
1195
|
-
submitButtonId: 'async-request-report-button',
|
|
1196
|
-
resetButtonId: 'async-request-reset-filters-button',
|
|
1197
|
-
});
|
|
1198
|
-
}
|
|
1199
|
-
|
|
1200
|
-
initFormData() {
|
|
1201
|
-
const { origin, pathname, search } = window.location;
|
|
1202
|
-
document.getElementById('async-filters-form-pathname').value = pathname;
|
|
1203
|
-
document.getElementById('async-filters-form-origin').value = origin;
|
|
1204
|
-
document.getElementById('async-filters-form-search').value = search;
|
|
1205
|
-
|
|
1206
|
-
const params = new URLSearchParams(search);
|
|
1207
|
-
const paramsString = params.size > 0 ? `?${params.toString()}` : '';
|
|
1208
|
-
document.getElementById('async-filters-form-href').value = `${origin}${pathname}${paramsString}`;
|
|
1209
|
-
this.initFormValidation(this.formFields);
|
|
1210
|
-
this.mainForm.classList.remove('async-filters-form--hidden');
|
|
1211
|
-
}
|
|
1212
|
-
|
|
1213
|
-
submitAction() {
|
|
1214
|
-
this.mainForm.requestSubmit();
|
|
1215
|
-
}
|
|
1216
|
-
}
|
|
1217
|
-
|
|
1218
|
-
/* eslint-disable class-methods-use-this */
|
|
1219
|
-
|
|
1220
|
-
class DprSyncLoading extends DprClientClass {
|
|
1221
|
-
static getModuleName() {
|
|
1222
|
-
return 'sync-loading'
|
|
1223
|
-
}
|
|
1224
|
-
|
|
1225
|
-
initialise() {
|
|
1226
|
-
this.element = this.getElement();
|
|
1227
|
-
this.form = this.element.querySelector('#dpr-sync-loading-form');
|
|
1228
|
-
|
|
1229
|
-
this.load();
|
|
1230
|
-
}
|
|
1231
|
-
|
|
1232
|
-
async load() {
|
|
1233
|
-
this.form.submit();
|
|
1234
|
-
}
|
|
1235
|
-
}
|
|
1236
|
-
|
|
1237
|
-
/* global dayjs */
|
|
1238
|
-
|
|
1239
|
-
class DateInput extends DprClientClass {
|
|
1240
|
-
static getModuleName() {
|
|
1241
|
-
return 'date-input'
|
|
1242
|
-
}
|
|
1243
|
-
|
|
1244
|
-
initialise() {
|
|
1245
|
-
const element = this.getElement();
|
|
1246
|
-
this.dateInput = element.querySelector(`input.moj-js-datepicker-input`);
|
|
1247
|
-
this.setToValueTriggers = document.querySelectorAll(`[data-set-min-max-trigger='true']`);
|
|
1248
|
-
|
|
1249
|
-
this.required = this.getElement().getAttribute('data-required');
|
|
1250
|
-
this.displayName = this.getElement().getAttribute('data-display-name');
|
|
1251
|
-
this.pattern = this.getElement().getAttribute('data-pattern');
|
|
1252
|
-
this.patternHint = this.getElement().getAttribute('data-pattern-hint');
|
|
1253
|
-
this.min = this.getElement().getAttribute('data-min');
|
|
1254
|
-
this.max = this.getElement().getAttribute('data-max');
|
|
1255
|
-
|
|
1256
|
-
this.setValidationOnInputEl();
|
|
1257
|
-
this.setMinMaxEventListener();
|
|
1258
|
-
this.setToMinMax();
|
|
1259
|
-
this.setToValue();
|
|
1260
|
-
}
|
|
1261
|
-
|
|
1262
|
-
setValidationOnInputEl() {
|
|
1263
|
-
if (this.required && this.required === 'true') {
|
|
1264
|
-
this.dateInput.setAttribute('required', true);
|
|
1265
|
-
}
|
|
1266
|
-
if (this.min) this.dateInput.setAttribute('min', this.min);
|
|
1267
|
-
if (this.max) this.dateInput.setAttribute('max', this.max);
|
|
1268
|
-
|
|
1269
|
-
this.dateInput.setAttribute('display-name', this.displayName);
|
|
1270
|
-
this.dateInput.setAttribute('pattern', this.pattern);
|
|
1271
|
-
this.dateInput.setAttribute('pattern-hint', this.patternHint);
|
|
1272
|
-
}
|
|
1273
|
-
|
|
1274
|
-
setMinMaxEventListener() {
|
|
1275
|
-
this.dateInput.addEventListener('blur', () => {
|
|
1276
|
-
this.setToMinMax();
|
|
1277
|
-
});
|
|
1278
|
-
}
|
|
1279
|
-
|
|
1280
|
-
setToMinMax() {
|
|
1281
|
-
if (this.dateInput.value) {
|
|
1282
|
-
const dateValue = new Date(this.dateInput.value);
|
|
1283
|
-
|
|
1284
|
-
if (this.min) {
|
|
1285
|
-
const minDate = new Date(this.min);
|
|
1286
|
-
if (dateValue < minDate) {
|
|
1287
|
-
this.dateInput.value = dayjs(this.min).format('DD/MM/YYYY');
|
|
1288
|
-
}
|
|
1289
|
-
}
|
|
1290
|
-
|
|
1291
|
-
if (this.max) {
|
|
1292
|
-
const maxDate = new Date(this.max);
|
|
1293
|
-
if (dateValue > maxDate) {
|
|
1294
|
-
this.dateInput.value = dayjs(this.max).format('DD/MM/YYYY');
|
|
1295
|
-
}
|
|
1296
|
-
}
|
|
1297
|
-
}
|
|
1298
|
-
|
|
1299
|
-
const changeEvent = new Event('change');
|
|
1300
|
-
this.dateInput.dispatchEvent(changeEvent);
|
|
1301
|
-
}
|
|
1302
|
-
|
|
1303
|
-
setToValue() {
|
|
1304
|
-
this.setToValueTriggers.forEach((set) => {
|
|
1305
|
-
set.addEventListener('click', (e) => {
|
|
1306
|
-
e.preventDefault();
|
|
1307
|
-
const value = e.target.getAttribute('data-set-min-max-value');
|
|
1308
|
-
const inputId = e.target.getAttribute('data-set-to-input');
|
|
1309
|
-
const input = document.getElementById(inputId);
|
|
1310
|
-
|
|
1311
|
-
input.value = value;
|
|
1312
|
-
const changeEvent = new Event('change');
|
|
1313
|
-
input.dispatchEvent(changeEvent);
|
|
1314
|
-
});
|
|
1315
|
-
});
|
|
1316
|
-
}
|
|
1317
|
-
}
|
|
1318
|
-
|
|
1319
|
-
/* eslint-disable class-methods-use-this */
|
|
1320
|
-
|
|
1321
|
-
class DateRangeInput extends DprClientClass {
|
|
1322
|
-
static getModuleName() {
|
|
1323
|
-
return 'date-range-input'
|
|
1324
|
-
}
|
|
1325
|
-
|
|
1326
|
-
initialise() {
|
|
1327
|
-
this.dateRangeInputs = document.getElementById('dpr-date-range');
|
|
1328
|
-
this.filtersAccordion = document.getElementById('dpr-interactive-filters-details');
|
|
1329
|
-
this.fieldName = this.dateRangeInputs.getAttribute('data-field-name');
|
|
1330
|
-
|
|
1331
|
-
this.startInputID = `filters.${this.fieldName}.start`;
|
|
1332
|
-
this.endInputID = `filters.${this.fieldName}.end`;
|
|
1333
|
-
this.durationInputID = `filters.${this.fieldName}.relative-duration`;
|
|
1334
|
-
|
|
1335
|
-
this.relativeRangeRadioButtons = document.querySelectorAll(`input[name='${this.durationInputID}']`);
|
|
1336
|
-
this.startInput = document.querySelector(`input[name='${this.startInputID}']`);
|
|
1337
|
-
this.endInput = document.querySelector(`input[name='${this.endInputID}']`);
|
|
1338
|
-
|
|
1339
|
-
this.startRequired = this.startInput.required;
|
|
1340
|
-
this.endRequired = this.endInput.required;
|
|
1341
|
-
|
|
1342
|
-
this.datePickerTab = document.getElementById('tab_date-picker');
|
|
1343
|
-
this.relativeDurationTab = document.getElementById('tab_relative-range');
|
|
1344
|
-
this.durationValue = undefined;
|
|
1345
|
-
|
|
1346
|
-
if (this.datePickerTab && this.relativeDurationTab) {
|
|
1347
|
-
this.initDatePickerTabClick();
|
|
1348
|
-
this.initRelativeDurationTabClick();
|
|
1349
|
-
this.initTabs();
|
|
1350
|
-
this.initDurationRadionButtonClick();
|
|
1351
|
-
}
|
|
1352
|
-
}
|
|
1353
|
-
|
|
1354
|
-
initTabs() {
|
|
1355
|
-
this.queryParams = new URLSearchParams(window.location.search);
|
|
1356
|
-
if (this.queryParams.has(this.durationInputID)) {
|
|
1357
|
-
this.relativeRangeRadioButtons.forEach((durationRadioButton) => {
|
|
1358
|
-
this.updateCheckedDuration(durationRadioButton);
|
|
1359
|
-
});
|
|
1360
|
-
}
|
|
1361
|
-
}
|
|
1362
|
-
|
|
1363
|
-
initDatePickerTabClick() {
|
|
1364
|
-
this.datePickerTab.addEventListener('click', () => {
|
|
1365
|
-
let value;
|
|
1366
|
-
this.queryParams = new URLSearchParams(window.location.search);
|
|
1367
|
-
if (this.queryParams.has(this.durationInputID)) {
|
|
1368
|
-
value = this.queryParams.get(this.durationInputID);
|
|
1369
|
-
this.removeSearchParam(this.durationInputID);
|
|
1370
|
-
}
|
|
1371
|
-
this.updateInputs(value);
|
|
1372
|
-
window.location.hash = 'date-picker';
|
|
1373
|
-
});
|
|
1374
|
-
}
|
|
1375
|
-
|
|
1376
|
-
initRelativeDurationTabClick() {
|
|
1377
|
-
this.relativeDurationTab.addEventListener('click', () => {
|
|
1378
|
-
this.relativeRangeRadioButtons.forEach((durationRadioButton) => {
|
|
1379
|
-
this.updateCheckedDuration(durationRadioButton);
|
|
1380
|
-
});
|
|
1381
|
-
window.location.hash = 'relative-range';
|
|
1382
|
-
});
|
|
1383
|
-
}
|
|
1384
|
-
|
|
1385
|
-
initDurationRadionButtonClick () {
|
|
1386
|
-
this.relativeRangeRadioButtons.forEach((durationRadioButton) => {
|
|
1387
|
-
durationRadioButton.addEventListener('click', (e) => {
|
|
1388
|
-
const durationValue = e.target.value;
|
|
1389
|
-
this.durationValue = durationValue;
|
|
1390
|
-
this.updateInputs(durationValue);
|
|
1391
|
-
this.removeRequiredFromDatePickers();
|
|
1392
|
-
});
|
|
1393
|
-
});
|
|
1394
|
-
}
|
|
1395
|
-
|
|
1396
|
-
removeSearchParam(name, name2) {
|
|
1397
|
-
this.queryParams = new URLSearchParams(window.location.search);
|
|
1398
|
-
this.queryParams.delete(name);
|
|
1399
|
-
if (name2) this.queryParams.delete(name2);
|
|
1400
|
-
|
|
1401
|
-
window.history.replaceState(null, null, `?${this.queryParams.toString()}`);
|
|
1402
|
-
}
|
|
1403
|
-
|
|
1404
|
-
updateCheckedDuration(durationRadioButton) {
|
|
1405
|
-
if (durationRadioButton.checked) {
|
|
1406
|
-
const durationValue = durationRadioButton.value;
|
|
1407
|
-
this.updateInputs(durationValue);
|
|
1408
|
-
const changeEvent = new Event('change');
|
|
1409
|
-
durationRadioButton.dispatchEvent(changeEvent);
|
|
1410
|
-
}
|
|
1411
|
-
}
|
|
1412
|
-
|
|
1413
|
-
removeRequiredFromDatePickers() {
|
|
1414
|
-
this.startInput.removeAttribute('required');
|
|
1415
|
-
this.endInput.removeAttribute('required');
|
|
1416
|
-
this.startInput.value = '';
|
|
1417
|
-
this.endInput.value = '';
|
|
1418
|
-
}
|
|
1419
|
-
|
|
1420
|
-
updateInputs (durationValue) {
|
|
1421
|
-
this.startInput.required = this.startRequired;
|
|
1422
|
-
this.endInput.required = this.endRequired;
|
|
1423
|
-
|
|
1424
|
-
if (durationValue || this.durationValue) {
|
|
1425
|
-
const d = durationValue || this.durationValue;
|
|
1426
|
-
const { startDate, endDate } = this.calculateDateForDatepicker(d);
|
|
1427
|
-
this.startInput.value = startDate;
|
|
1428
|
-
this.endInput.value = endDate;
|
|
1429
|
-
}
|
|
1430
|
-
const changeEvent = new Event('change');
|
|
1431
|
-
this.startInput.dispatchEvent(changeEvent);
|
|
1432
|
-
this.endInput.dispatchEvent(changeEvent);
|
|
1433
|
-
}
|
|
1434
|
-
|
|
1435
|
-
calculateDateForDatepicker(duration) {
|
|
1436
|
-
let startDate;
|
|
1437
|
-
let endDate;
|
|
1438
|
-
|
|
1439
|
-
switch (duration) {
|
|
1440
|
-
case 'yesterday':
|
|
1441
|
-
endDate = dayjs();
|
|
1442
|
-
startDate = endDate.subtract(1, 'day');
|
|
1443
|
-
break
|
|
1444
|
-
case 'tomorrow':
|
|
1445
|
-
startDate = dayjs();
|
|
1446
|
-
endDate = startDate.add(1, 'day');
|
|
1447
|
-
break
|
|
1448
|
-
case 'last-week':
|
|
1449
|
-
endDate = dayjs();
|
|
1450
|
-
startDate = endDate.subtract(1, 'week');
|
|
1451
|
-
break
|
|
1452
|
-
case 'next-week':
|
|
1453
|
-
startDate = dayjs();
|
|
1454
|
-
endDate = startDate.add(1, 'week');
|
|
1455
|
-
break
|
|
1456
|
-
case 'last-month':
|
|
1457
|
-
endDate = dayjs();
|
|
1458
|
-
startDate = endDate.subtract(1, 'month');
|
|
1459
|
-
break
|
|
1460
|
-
case 'next-month':
|
|
1461
|
-
startDate = dayjs();
|
|
1462
|
-
endDate = startDate.add(1, 'month');
|
|
1463
|
-
break
|
|
1464
|
-
default:
|
|
1465
|
-
break
|
|
1466
|
-
}
|
|
1467
|
-
|
|
1468
|
-
return {
|
|
1469
|
-
startDate: startDate.format('DD/MM/YYYY').toString(),
|
|
1470
|
-
endDate: endDate.format('DD/MM/YYYY').toString(),
|
|
1471
|
-
}
|
|
1472
|
-
}
|
|
1473
|
-
}
|
|
1474
|
-
|
|
1475
|
-
/* eslint-disable class-methods-use-this */
|
|
1476
|
-
|
|
1477
|
-
class Autocomplete extends DprClientClass {
|
|
1478
|
-
static getModuleName() {
|
|
1479
|
-
return 'autocomplete-text-input'
|
|
1480
|
-
}
|
|
1481
|
-
|
|
1482
|
-
constructor(element) {
|
|
1483
|
-
super(element);
|
|
1484
|
-
|
|
1485
|
-
const listId = this.getTextInput().getAttribute('aria-owns');
|
|
1486
|
-
this.listItemsSelector = `#${listId} li`;
|
|
1487
|
-
this.listParentSelector = `#${listId} ul`;
|
|
1488
|
-
}
|
|
1489
|
-
|
|
1490
|
-
initialise() {
|
|
1491
|
-
const textInput = this.getTextInput();
|
|
1492
|
-
textInput.addEventListener('keyup', (event) => {
|
|
1493
|
-
this.onTextInput(event, textInput);
|
|
1494
|
-
});
|
|
1495
|
-
|
|
1496
|
-
this.getElement()
|
|
1497
|
-
.querySelectorAll('.autocomplete-text-input-list-button')
|
|
1498
|
-
.forEach((button) => {
|
|
1499
|
-
button.addEventListener('click', (event) => {
|
|
1500
|
-
this.onOptionClick(event, textInput, this.getElement());
|
|
1501
|
-
});
|
|
1502
|
-
});
|
|
1503
|
-
}
|
|
1504
|
-
|
|
1505
|
-
getTextInput() {
|
|
1506
|
-
return this.getElement().querySelector('.autocomplete-text-input-box')
|
|
1507
|
-
}
|
|
1508
|
-
|
|
1509
|
-
onTextInput(event, textInput) {
|
|
1510
|
-
const minLength = Number(textInput.dataset.minimumLength);
|
|
1511
|
-
const { resourceEndpoint } = textInput.dataset;
|
|
1512
|
-
const searchValue = event.target.value.toLowerCase();
|
|
1513
|
-
|
|
1514
|
-
if (resourceEndpoint) {
|
|
1515
|
-
if (searchValue.length >= minLength) {
|
|
1516
|
-
this.addItem(this.clearListAndRecreateTemplate(), '<i>Searching...</i>');
|
|
1517
|
-
this.populateOptionsDynamically(resourceEndpoint, searchValue, textInput, () =>
|
|
1518
|
-
this.clearListAndRecreateTemplate(),
|
|
1519
|
-
);
|
|
1520
|
-
} else {
|
|
1521
|
-
this.clearListAndRecreateTemplate();
|
|
1522
|
-
}
|
|
1523
|
-
} else {
|
|
1524
|
-
this.getElement()
|
|
1525
|
-
.querySelectorAll(this.listItemsSelector)
|
|
1526
|
-
.forEach((item) => {
|
|
1527
|
-
if (searchValue.length >= minLength &&
|
|
1528
|
-
this.isMatchingStaticOptionNameOrDisplayPrefix(this.getInputListButton(item), searchValue, item)) {
|
|
1529
|
-
item.classList.remove('autocomplete-text-input-item-hide');
|
|
1530
|
-
} else {
|
|
1531
|
-
item.classList.add('autocomplete-text-input-item-hide');
|
|
1532
|
-
}
|
|
1533
|
-
});
|
|
1534
|
-
}
|
|
1535
|
-
|
|
1536
|
-
if (searchValue.length === 0) {
|
|
1537
|
-
const changeEvent = new Event('change');
|
|
1538
|
-
textInput.dispatchEvent(changeEvent);
|
|
1539
|
-
}
|
|
1540
|
-
}
|
|
1541
|
-
|
|
1542
|
-
getInputListButton(item) {
|
|
1543
|
-
return item.querySelector('.autocomplete-text-input-list-button')
|
|
1544
|
-
}
|
|
1545
|
-
|
|
1546
|
-
isMatchingStaticOptionNameOrDisplayPrefix(inputListButton, searchValue, item) {
|
|
1547
|
-
return this.isStaticOptionsNamePrefix(inputListButton.dataset.staticOptionNameValue, searchValue)
|
|
1548
|
-
|| item.innerText.trim().toLowerCase().startsWith(searchValue)
|
|
1549
|
-
}
|
|
1550
|
-
|
|
1551
|
-
isStaticOptionsNamePrefix(staticOptionNameValue, searchValue) {
|
|
1552
|
-
return staticOptionNameValue && staticOptionNameValue.trim().toLowerCase().startsWith(searchValue)
|
|
1553
|
-
}
|
|
1554
|
-
|
|
1555
|
-
async populateOptionsDynamically(resourceEndpoint, searchValue, textInput, templateProvider) {
|
|
1556
|
-
try {
|
|
1557
|
-
const response = await fetch(resourceEndpoint.replace('{prefix}', encodeURI(searchValue)));
|
|
1558
|
-
const results = await response.json();
|
|
1559
|
-
|
|
1560
|
-
if (searchValue === textInput.value.toLowerCase()) {
|
|
1561
|
-
const template = templateProvider();
|
|
1562
|
-
|
|
1563
|
-
results.forEach((r) => {
|
|
1564
|
-
this.addItem(template, r, (event) => {
|
|
1565
|
-
this.onOptionClick(event, textInput, this.getElement());
|
|
1566
|
-
});
|
|
1567
|
-
});
|
|
1568
|
-
}
|
|
1569
|
-
} catch (error) {
|
|
1570
|
-
this.addItem(templateProvider(), `Failed to retrieve results: ${error}`);
|
|
1571
|
-
}
|
|
1572
|
-
}
|
|
1573
|
-
|
|
1574
|
-
onOptionClick(event, textInput, topLevelElement) {
|
|
1575
|
-
event.preventDefault();
|
|
1576
|
-
// eslint-disable-next-line no-param-reassign
|
|
1577
|
-
textInput.value = event.target.innerText.trim();
|
|
1578
|
-
textInput.staticOptionNameValue = event.target.dataset.staticOptionNameValue;
|
|
1579
|
-
textInput.focus();
|
|
1580
|
-
const changeEvent = new Event('change');
|
|
1581
|
-
textInput.dispatchEvent(changeEvent);
|
|
1582
|
-
|
|
1583
|
-
topLevelElement.querySelectorAll('li').forEach((item) => {
|
|
1584
|
-
item.classList.add('autocomplete-text-input-item-hide');
|
|
1585
|
-
});
|
|
1586
|
-
}
|
|
1587
|
-
|
|
1588
|
-
addItem(template, content, clickEvent) {
|
|
1589
|
-
const item = template.cloneNode(true);
|
|
1590
|
-
item.querySelector('button').innerHTML = content;
|
|
1591
|
-
item.classList.remove('autocomplete-text-input-item-hide');
|
|
1592
|
-
this.getElement().querySelector(this.listParentSelector).appendChild(item);
|
|
1593
|
-
|
|
1594
|
-
if (clickEvent) {
|
|
1595
|
-
item.addEventListener('click', (event) => {
|
|
1596
|
-
clickEvent(event);
|
|
1597
|
-
});
|
|
1598
|
-
}
|
|
1599
|
-
}
|
|
1600
|
-
|
|
1601
|
-
clearListAndRecreateTemplate() {
|
|
1602
|
-
const template = this.getElement().querySelector(this.listItemsSelector).cloneNode(true);
|
|
1603
|
-
template.classList.add('autocomplete-text-input-item-hide');
|
|
1604
|
-
this.getElement()
|
|
1605
|
-
.querySelectorAll(this.listItemsSelector)
|
|
1606
|
-
.forEach((e) => e.remove());
|
|
1607
|
-
this.getElement().querySelector(this.listParentSelector).append(template);
|
|
1608
|
-
return template
|
|
1609
|
-
}
|
|
1610
|
-
}
|
|
1611
|
-
|
|
1612
|
-
/* eslint-disable class-methods-use-this */
|
|
1613
|
-
|
|
1614
|
-
class GranularDateRangeInput extends DprClientClass {
|
|
1615
|
-
static getModuleName() {
|
|
1616
|
-
return 'granular-date-range-input'
|
|
1617
|
-
}
|
|
1618
|
-
|
|
1619
|
-
initialise() {
|
|
1620
|
-
this.filter = this.getElement();
|
|
1621
|
-
this.fieldName = this.filter.getAttribute('data-field-name');
|
|
1622
|
-
const idPrefix = `filters.${this.fieldName}`;
|
|
1623
|
-
|
|
1624
|
-
this.quickFiltersInput = this.filter.querySelector(`select[name='${idPrefix}.quick-filter']`);
|
|
1625
|
-
this.granularityInput = this.filter.querySelector(`select[name='${idPrefix}.granularity']`);
|
|
1626
|
-
this.startInput = this.filter.querySelector(`input[name='${idPrefix}.start']`);
|
|
1627
|
-
this.endInput = this.filter.querySelector(`input[name='${idPrefix}.end']`);
|
|
1628
|
-
|
|
1629
|
-
this.initStartEndInputChangetEvent();
|
|
1630
|
-
this.initGranularityChangeEvent();
|
|
1631
|
-
this.initQuickFilterChangeEvent();
|
|
1632
|
-
}
|
|
1633
|
-
|
|
1634
|
-
initGranularityChangeEvent() {
|
|
1635
|
-
this.granularityInput.addEventListener('change', (e) => {
|
|
1636
|
-
this.resetQuickFilters();
|
|
1637
|
-
});
|
|
1638
|
-
}
|
|
1639
|
-
|
|
1640
|
-
initQuickFilterChangeEvent() {
|
|
1641
|
-
this.quickFiltersInput.addEventListener('change', (e) => {
|
|
1642
|
-
this.updateStartEndValues(e.target.value);
|
|
1643
|
-
});
|
|
1644
|
-
}
|
|
1645
|
-
|
|
1646
|
-
initStartEndInputChangetEvent() {
|
|
1647
|
-
this.startInput.addEventListener('change', (e) => {
|
|
1648
|
-
this.resetQuickFilters();
|
|
1649
|
-
});
|
|
1650
|
-
this.endInput.addEventListener('change', (e) => {
|
|
1651
|
-
this.resetQuickFilters();
|
|
1652
|
-
});
|
|
1653
|
-
}
|
|
1654
|
-
|
|
1655
|
-
setGranularityValue(value) {
|
|
1656
|
-
this.granularityInput.value = value;
|
|
1657
|
-
}
|
|
1658
|
-
|
|
1659
|
-
setStartValue(value) {
|
|
1660
|
-
this.startInput.value = value;
|
|
1661
|
-
}
|
|
1662
|
-
|
|
1663
|
-
setEndValue(value) {
|
|
1664
|
-
this.endInput.value = value;
|
|
1665
|
-
}
|
|
1666
|
-
|
|
1667
|
-
resetQuickFilters() {
|
|
1668
|
-
this.quickFiltersInput.value = 'none';
|
|
1669
|
-
const queryParams = new URLSearchParams(window.location.search);
|
|
1670
|
-
queryParams.set(this.quickFiltersInput.id, 'none');
|
|
1671
|
-
window.history.replaceState(null, null, `?${queryParams.toString()}`);
|
|
1672
|
-
}
|
|
1673
|
-
|
|
1674
|
-
updateStartEndValues(quickFilterValue) {
|
|
1675
|
-
let startDate;
|
|
1676
|
-
let endDate;
|
|
1677
|
-
let granularity;
|
|
1678
|
-
|
|
1679
|
-
switch (quickFilterValue) {
|
|
1680
|
-
case 'today':
|
|
1681
|
-
endDate = dayjs();
|
|
1682
|
-
startDate = dayjs();
|
|
1683
|
-
granularity = 'daily';
|
|
1684
|
-
break
|
|
1685
|
-
case 'yesterday':
|
|
1686
|
-
endDate = dayjs().subtract(1, 'day');
|
|
1687
|
-
startDate = dayjs().subtract(1, 'day');
|
|
1688
|
-
granularity = 'daily';
|
|
1689
|
-
break
|
|
1690
|
-
case 'last-seven-days':
|
|
1691
|
-
endDate = dayjs();
|
|
1692
|
-
startDate = endDate.subtract(7, 'day').add(1, 'day');
|
|
1693
|
-
granularity = 'daily';
|
|
1694
|
-
break
|
|
1695
|
-
case 'last-thirty-days':
|
|
1696
|
-
endDate = dayjs();
|
|
1697
|
-
startDate = endDate.subtract(30, 'day').add(1, 'day');
|
|
1698
|
-
granularity = 'daily';
|
|
1699
|
-
break
|
|
1700
|
-
case 'last-month':
|
|
1701
|
-
endDate = dayjs();
|
|
1702
|
-
startDate = endDate.subtract(1, 'month').add(1, 'day');
|
|
1703
|
-
granularity = 'monthly';
|
|
1704
|
-
break
|
|
1705
|
-
case 'last-full-month':
|
|
1706
|
-
endDate = dayjs().subtract(1, 'month').endOf('month');
|
|
1707
|
-
startDate = endDate.startOf('month');
|
|
1708
|
-
granularity = 'monthly';
|
|
1709
|
-
break
|
|
1710
|
-
case 'last-ninety-days':
|
|
1711
|
-
endDate = dayjs();
|
|
1712
|
-
startDate = endDate.subtract(90, 'day').add(1, 'day');
|
|
1713
|
-
granularity = 'daily';
|
|
1714
|
-
break
|
|
1715
|
-
case 'last-three-months':
|
|
1716
|
-
endDate = dayjs();
|
|
1717
|
-
startDate = endDate.subtract(3, 'month').add(1, 'day');
|
|
1718
|
-
granularity = 'monthly';
|
|
1719
|
-
break
|
|
1720
|
-
case 'last-full-three-months':
|
|
1721
|
-
endDate = dayjs().subtract(1, 'month').endOf('month');
|
|
1722
|
-
startDate = endDate.subtract(2, 'month').startOf('month');
|
|
1723
|
-
granularity = 'monthly';
|
|
1724
|
-
break
|
|
1725
|
-
case 'last-six-months':
|
|
1726
|
-
endDate = dayjs();
|
|
1727
|
-
startDate = endDate.subtract(6, 'month').add(1, 'day');
|
|
1728
|
-
granularity = 'monthly';
|
|
1729
|
-
break
|
|
1730
|
-
case 'last-full-six-months':
|
|
1731
|
-
endDate = dayjs().subtract(1, 'month').endOf('month');
|
|
1732
|
-
startDate = endDate.subtract(6, 'month').startOf('month');
|
|
1733
|
-
granularity = 'monthly';
|
|
1734
|
-
break
|
|
1735
|
-
case 'last-year':
|
|
1736
|
-
endDate = dayjs();
|
|
1737
|
-
startDate = endDate.subtract(1, 'year').add(1, 'day');
|
|
1738
|
-
granularity = 'annually';
|
|
1739
|
-
break
|
|
1740
|
-
case 'last-full-year':
|
|
1741
|
-
endDate = dayjs().subtract(1, 'year').endOf('year');
|
|
1742
|
-
startDate = endDate.startOf('year');
|
|
1743
|
-
granularity = 'annually';
|
|
1744
|
-
break
|
|
1745
|
-
case 'tomorrow':
|
|
1746
|
-
endDate = dayjs().add(1, 'day');
|
|
1747
|
-
startDate = dayjs().add(1, 'day');
|
|
1748
|
-
granularity = 'daily';
|
|
1749
|
-
break
|
|
1750
|
-
case 'next-seven-days':
|
|
1751
|
-
startDate = dayjs();
|
|
1752
|
-
endDate = dayjs().add(7, 'day').subtract(1, 'day');
|
|
1753
|
-
granularity = 'daily';
|
|
1754
|
-
break
|
|
1755
|
-
case 'next-thirty-days':
|
|
1756
|
-
startDate = dayjs();
|
|
1757
|
-
endDate = dayjs().add(30, 'day').subtract(1, 'day');
|
|
1758
|
-
granularity = 'daily';
|
|
1759
|
-
break
|
|
1760
|
-
case 'next-month':
|
|
1761
|
-
startDate = dayjs();
|
|
1762
|
-
endDate = dayjs().add(1, 'month').subtract(1, 'day');
|
|
1763
|
-
granularity = 'monthly';
|
|
1764
|
-
break
|
|
1765
|
-
case 'next-full-month':
|
|
1766
|
-
startDate = dayjs().add(1, 'month').startOf('month');
|
|
1767
|
-
endDate = startDate.endOf('month');
|
|
1768
|
-
granularity = 'monthly';
|
|
1769
|
-
break
|
|
1770
|
-
case 'next-ninety-days':
|
|
1771
|
-
startDate = dayjs();
|
|
1772
|
-
endDate = dayjs().add(90, 'day').subtract(1, 'day');
|
|
1773
|
-
granularity = 'daily';
|
|
1774
|
-
break
|
|
1775
|
-
case 'next-three-months':
|
|
1776
|
-
startDate = dayjs();
|
|
1777
|
-
endDate = dayjs().add(3, 'month').subtract(1, 'day');
|
|
1778
|
-
granularity = 'monthly';
|
|
1779
|
-
break
|
|
1780
|
-
case 'next-full-three-months':
|
|
1781
|
-
startDate = dayjs().add(1, 'month').startOf('month');
|
|
1782
|
-
endDate = startDate.add(2, 'month').endOf('month');
|
|
1783
|
-
granularity = 'monthly';
|
|
1784
|
-
break
|
|
1785
|
-
case 'next-year':
|
|
1786
|
-
startDate = dayjs();
|
|
1787
|
-
endDate = dayjs().add(1, 'year').subtract(1, 'day');
|
|
1788
|
-
granularity = 'annually';
|
|
1789
|
-
break
|
|
1790
|
-
case 'next-full-year':
|
|
1791
|
-
startDate = dayjs().add(1, 'year').startOf('year');
|
|
1792
|
-
endDate = startDate.endOf('year');
|
|
1793
|
-
granularity = 'annually';
|
|
1794
|
-
break
|
|
1795
|
-
default:
|
|
1796
|
-
break
|
|
1797
|
-
}
|
|
1798
|
-
|
|
1799
|
-
this.setStartValue(startDate.format('DD/MM/YYYY').toString());
|
|
1800
|
-
this.setEndValue(endDate.format('DD/MM/YYYY').toString());
|
|
1801
|
-
this.setGranularityValue(granularity);
|
|
1802
|
-
|
|
1803
|
-
const queryParams = new URLSearchParams(window.location.search);
|
|
1804
|
-
queryParams.set(this.granularityInput.id, granularity);
|
|
1805
|
-
queryParams.set(this.startInput.id, startDate.format('YYYY/MM/DD').toString());
|
|
1806
|
-
queryParams.set(this.endInput.id, endDate.format('YYYY/MM/DD').toString());
|
|
1807
|
-
window.history.replaceState(null, null, `?${queryParams.toString()}`);
|
|
1808
|
-
}
|
|
1809
|
-
}
|
|
1810
|
-
|
|
1811
|
-
/* eslint-disable class-methods-use-this */
|
|
1812
|
-
|
|
1813
|
-
class DprAsyncRequestList extends DprPollingStatusClass {
|
|
1814
|
-
static getModuleName() {
|
|
1815
|
-
return 'async-request-list'
|
|
1816
|
-
}
|
|
1817
|
-
|
|
1818
|
-
initialise() {
|
|
1819
|
-
this.END_STATUSES = this.getEndStatuses();
|
|
1820
|
-
this.EXPIRED_END_STATUSES = this.getExpiredCheckStatuses();
|
|
1821
|
-
this.POLLING_FREQUENCY = this.getPollingFrquency();
|
|
1822
|
-
|
|
1823
|
-
this.requestList = document.getElementById('dpr-async-request-component');
|
|
1824
|
-
this.requestData = this.requestList.getAttribute('data-request-data');
|
|
1825
|
-
this.csrfToken = this.requestList.getAttribute('data-csrf-token');
|
|
1826
|
-
this.removeActions = document.querySelectorAll('.dpr-remove-requested-report-button');
|
|
1827
|
-
|
|
1828
|
-
this.initItemActions();
|
|
1829
|
-
this.initPollingIntervals();
|
|
1830
|
-
}
|
|
1831
|
-
|
|
1832
|
-
async initPollingIntervals() {
|
|
1833
|
-
await this.checkIfExpired();
|
|
1834
|
-
|
|
1835
|
-
if (this.requestData) {
|
|
1836
|
-
if (this.shouldPollExpired(this.requestData)) {
|
|
1837
|
-
this.expiredInterval = setInterval(async () => {
|
|
1838
|
-
await this.checkIfExpired();
|
|
1839
|
-
}, '60000'); // 1 minute
|
|
1840
|
-
}
|
|
1841
|
-
|
|
1842
|
-
if (this.shouldPollStatus(this.requestData)) {
|
|
1843
|
-
this.pollingInterval = setInterval(async () => {
|
|
1844
|
-
await this.pollStatus();
|
|
1845
|
-
}, this.POLLING_FREQUENCY);
|
|
1846
|
-
}
|
|
1847
|
-
}
|
|
1848
|
-
}
|
|
1849
|
-
|
|
1850
|
-
async checkIfExpired() {
|
|
1851
|
-
await Promise.all(
|
|
1852
|
-
JSON.parse(this.requestData).map(async (metaData) => {
|
|
1853
|
-
if (!this.EXPIRED_END_STATUSES.includes(metaData.status)) {
|
|
1854
|
-
const response = await this.getExpiredStatus('/dpr/getRequestedExpiredStatus/', metaData, this.csrfToken);
|
|
1855
|
-
|
|
1856
|
-
if (response && response.isExpired) {
|
|
1857
|
-
clearInterval(this.expiredInterval);
|
|
1858
|
-
window.location.reload();
|
|
1859
|
-
}
|
|
1860
|
-
}
|
|
1861
|
-
}),
|
|
1862
|
-
);
|
|
1863
|
-
}
|
|
1864
|
-
|
|
1865
|
-
async pollStatus() {
|
|
1866
|
-
await Promise.all(
|
|
1867
|
-
JSON.parse(this.requestData).map(async (metaData) => {
|
|
1868
|
-
// Don't poll if current state is an end state
|
|
1869
|
-
if (!this.END_STATUSES.includes(metaData.status)) {
|
|
1870
|
-
const response = await this.getRequestStatus(metaData, this.csrfToken);
|
|
1871
|
-
|
|
1872
|
-
// Reload if new status is an end state
|
|
1873
|
-
if (this.END_STATUSES.includes(response.status)) {
|
|
1874
|
-
clearInterval(this.pollingInterval);
|
|
1875
|
-
window.location.reload();
|
|
1876
|
-
}
|
|
1877
|
-
}
|
|
1878
|
-
}),
|
|
1879
|
-
);
|
|
1880
|
-
}
|
|
1881
|
-
|
|
1882
|
-
initItemActions() {
|
|
1883
|
-
this.removeActions.forEach((button) => {
|
|
1884
|
-
const id = button.getAttribute('data-execution-id');
|
|
1885
|
-
button.addEventListener('click', async (e) => {
|
|
1886
|
-
e.preventDefault();
|
|
1887
|
-
await this.removeItemFromList(id);
|
|
1888
|
-
});
|
|
1889
|
-
});
|
|
1890
|
-
}
|
|
1891
|
-
|
|
1892
|
-
async removeItemFromList(executionId) {
|
|
1893
|
-
let response;
|
|
1894
|
-
await fetch('/dpr/removeRequestedItem/', {
|
|
1895
|
-
method: 'post',
|
|
1896
|
-
headers: {
|
|
1897
|
-
Accept: 'application/json',
|
|
1898
|
-
'Content-Type': 'application/json',
|
|
1899
|
-
'CSRF-Token': this.csrfToken,
|
|
1900
|
-
},
|
|
1901
|
-
body: JSON.stringify({
|
|
1902
|
-
executionId,
|
|
1903
|
-
}),
|
|
1904
|
-
})
|
|
1905
|
-
.then(() => {
|
|
1906
|
-
window.location.reload();
|
|
1907
|
-
})
|
|
1908
|
-
.catch((error) => console.error('Error:', error));
|
|
1909
|
-
|
|
1910
|
-
return response
|
|
1911
|
-
}
|
|
1912
|
-
}
|
|
1913
|
-
|
|
1914
|
-
/* eslint-disable class-methods-use-this */
|
|
1915
|
-
|
|
1916
|
-
class DprRecentlyViewedList extends DprPollingStatusClass {
|
|
1917
|
-
static getModuleName() {
|
|
1918
|
-
return 'recently-viewed-list'
|
|
1919
|
-
}
|
|
1920
|
-
|
|
1921
|
-
initialise() {
|
|
1922
|
-
this.EXPIRED_END_STATUSES = this.getExpiredCheckStatuses();
|
|
1923
|
-
this.POLLING_FREQUENCY = '60000'; // 1 min
|
|
1924
|
-
|
|
1925
|
-
this.viewedList = document.getElementById('dpr-recently-viewed-component');
|
|
1926
|
-
this.viewedReportData = this.viewedList.getAttribute('data-request-data');
|
|
1927
|
-
this.csrfToken = this.viewedList.getAttribute('data-csrf-token');
|
|
1928
|
-
this.removeActions = document.querySelectorAll('.dpr-remove-viewed-report-button');
|
|
1929
|
-
|
|
1930
|
-
this.initItemActions();
|
|
1931
|
-
this.initPollingIntervals();
|
|
1932
|
-
}
|
|
1933
|
-
|
|
1934
|
-
async initPollingIntervals() {
|
|
1935
|
-
await this.checkIsExpired();
|
|
1936
|
-
|
|
1937
|
-
if (this.viewedReportData && this.shouldPollExpired(this.viewedReportData)) {
|
|
1938
|
-
this.expiredViewedInterval = setInterval(async () => {
|
|
1939
|
-
await this.checkIsExpired();
|
|
1940
|
-
}, this.POLLING_FREQUENCY);
|
|
1941
|
-
}
|
|
1942
|
-
}
|
|
1943
|
-
|
|
1944
|
-
async checkIsExpired() {
|
|
1945
|
-
await Promise.all(
|
|
1946
|
-
JSON.parse(this.viewedReportData).map(async (metaData) => {
|
|
1947
|
-
if (metaData.status !== 'EXPIRED') {
|
|
1948
|
-
const response = await this.getExpiredStatus('/dpr/getExpiredStatus/', metaData, this.csrfToken);
|
|
1949
|
-
if (response && response.isExpired) {
|
|
1950
|
-
window.location.reload();
|
|
1951
|
-
clearInterval(this.expiredViewedInterval);
|
|
1952
|
-
}
|
|
1953
|
-
}
|
|
1954
|
-
}),
|
|
1955
|
-
);
|
|
1956
|
-
}
|
|
1957
|
-
|
|
1958
|
-
initItemActions() {
|
|
1959
|
-
this.removeActions.forEach((button) => {
|
|
1960
|
-
const id = button.getAttribute('data-execution-id');
|
|
1961
|
-
button.addEventListener('click', async (e) => {
|
|
1962
|
-
e.preventDefault();
|
|
1963
|
-
await this.removeItemFromList(id);
|
|
1964
|
-
});
|
|
1965
|
-
});
|
|
1966
|
-
}
|
|
1967
|
-
|
|
1968
|
-
async removeItemFromList(executionId) {
|
|
1969
|
-
let response;
|
|
1970
|
-
await fetch('/dpr/removeViewedItem/', {
|
|
1971
|
-
method: 'post',
|
|
1972
|
-
headers: {
|
|
1973
|
-
Accept: 'application/json',
|
|
1974
|
-
'Content-Type': 'application/json',
|
|
1975
|
-
'CSRF-Token': this.csrfToken,
|
|
1976
|
-
},
|
|
1977
|
-
body: JSON.stringify({
|
|
1978
|
-
executionId,
|
|
1979
|
-
}),
|
|
1980
|
-
})
|
|
1981
|
-
.then(() => {
|
|
1982
|
-
window.location.reload();
|
|
1983
|
-
})
|
|
1984
|
-
.catch((error) => console.error('Error:', error));
|
|
1985
|
-
|
|
1986
|
-
return response
|
|
1987
|
-
}
|
|
1988
|
-
}
|
|
1989
|
-
|
|
1990
|
-
/* eslint-disable class-methods-use-this */
|
|
1991
|
-
|
|
1992
|
-
class ChartVisualisation extends DprClientClass {
|
|
1993
|
-
setupCanvas() {
|
|
1994
|
-
this.chartContext = this.getElement().querySelector('canvas');
|
|
1995
|
-
|
|
1996
|
-
// data
|
|
1997
|
-
this.id = this.chartContext.getAttribute('id');
|
|
1998
|
-
this.chartParams = JSON.parse(this.getElement().getAttribute('data-dpr-chart-data'));
|
|
1999
|
-
this.type = this.getElement().getAttribute('data-dpr-chart-type');
|
|
2000
|
-
this.setValueSuffix();
|
|
2001
|
-
|
|
2002
|
-
// elements
|
|
2003
|
-
this.legend = this.getElement().querySelector(`#js-legend-${this.id}`);
|
|
2004
|
-
|
|
2005
|
-
// ChartCard elements
|
|
2006
|
-
this.tooltipDetailsEl = document.getElementById(`dpr-${this.id}-tooltip-details`);
|
|
2007
|
-
this.headlineValuesEl = document.getElementById(`dpr-${this.id}-headline-values`);
|
|
2008
|
-
this.labelElement = document.getElementById(`dpr-${this.id}-label`);
|
|
2009
|
-
this.valueElement = document.getElementById(`dpr-${this.id}-value`);
|
|
2010
|
-
this.legendElement = document.getElementById(`dpr-${this.id}-legend`);
|
|
2011
|
-
this.legendElement = document.getElementById(`dpr-${this.id}-legend`);
|
|
2012
|
-
|
|
2013
|
-
// Time series
|
|
2014
|
-
this.timeseries = this.getElement().getAttribute('data-dpr-chart-timeseries');
|
|
2015
|
-
if (this.timeseries || this.type === 'line') {
|
|
2016
|
-
this.daterangeInputs = document.querySelectorAll('.dpr-granular-date-range');
|
|
2017
|
-
if (this.daterangeInputs && this.daterangeInputs.length) {
|
|
2018
|
-
this.daterangeInputs.forEach((input) => {
|
|
2019
|
-
this.partialStart = input.getAttribute('data-partial-start') === 'true';
|
|
2020
|
-
this.partialEnd = input.getAttribute('data-partial-end') === 'true';
|
|
2021
|
-
});
|
|
2022
|
-
} else {
|
|
2023
|
-
this.partialStart = false;
|
|
2024
|
-
this.partialEnd = false;
|
|
2025
|
-
}
|
|
2026
|
-
}
|
|
2027
|
-
|
|
2028
|
-
// flags
|
|
2029
|
-
this.singleDataset = this.chartParams.datasets.length === 1;
|
|
2030
|
-
}
|
|
2031
|
-
|
|
2032
|
-
initChart() {
|
|
2033
|
-
Chart.defaults.font.family = 'GDS Transport';
|
|
2034
|
-
Chart.register(ChartDataLabels);
|
|
2035
|
-
Chart.defaults.font.size = 12;
|
|
2036
|
-
|
|
2037
|
-
this.chart = new Chart(this.chartContext, this.chartData);
|
|
2038
|
-
this.initChartEvents();
|
|
2039
|
-
}
|
|
2040
|
-
|
|
2041
|
-
// Accessible colours from the MoJ Pattern Library
|
|
2042
|
-
getColourPallette() {
|
|
2043
|
-
return [
|
|
2044
|
-
{
|
|
2045
|
-
name: 'blue',
|
|
2046
|
-
hex: '#5694ca',
|
|
2047
|
-
},
|
|
2048
|
-
{
|
|
2049
|
-
name: 'purple',
|
|
2050
|
-
hex: '#912b88',
|
|
2051
|
-
},
|
|
2052
|
-
{
|
|
2053
|
-
name: 'green',
|
|
2054
|
-
hex: '#00703c',
|
|
2055
|
-
},
|
|
2056
|
-
{
|
|
2057
|
-
name: 'dark_blue',
|
|
2058
|
-
hex: '#003078',
|
|
2059
|
-
},
|
|
2060
|
-
{
|
|
2061
|
-
name: 'orange',
|
|
2062
|
-
hex: '#f47738',
|
|
2063
|
-
},
|
|
2064
|
-
{
|
|
2065
|
-
name: 'orange',
|
|
2066
|
-
hex: '#28a197',
|
|
2067
|
-
},
|
|
2068
|
-
]
|
|
2069
|
-
}
|
|
2070
|
-
|
|
2071
|
-
mapHexColourToName(hex, ctx) {
|
|
2072
|
-
const pallette = ctx.getColourPallette();
|
|
2073
|
-
const colour = pallette.find((p) => {
|
|
2074
|
-
return p.hex === hex
|
|
2075
|
-
});
|
|
2076
|
-
return colour ? colour.name : ''
|
|
2077
|
-
}
|
|
2078
|
-
|
|
2079
|
-
createDatasets(datasets, styling) {
|
|
2080
|
-
return datasets.map((d, i) => {
|
|
2081
|
-
const { label, data } = d;
|
|
2082
|
-
const s = styling[i % 6] ? styling[i % 6] : styling[0];
|
|
2083
|
-
return {
|
|
2084
|
-
label,
|
|
2085
|
-
data,
|
|
2086
|
-
...s,
|
|
2087
|
-
}
|
|
2088
|
-
})
|
|
2089
|
-
}
|
|
2090
|
-
|
|
2091
|
-
generateChartData(settings) {
|
|
2092
|
-
const { datasets, labels } = this.chartParams;
|
|
2093
|
-
const { options, styling, datalabels, plugins, pluginsOptions, toolTipOptions, hoverEvent } = settings;
|
|
2094
|
-
return {
|
|
2095
|
-
type: this.type,
|
|
2096
|
-
data: {
|
|
2097
|
-
labels,
|
|
2098
|
-
datasets: this.createDatasets(datasets, styling),
|
|
2099
|
-
},
|
|
2100
|
-
options: {
|
|
2101
|
-
responsive: true,
|
|
2102
|
-
maintainAspectRatio: false,
|
|
2103
|
-
animation: {
|
|
2104
|
-
duration: 0,
|
|
2105
|
-
},
|
|
2106
|
-
hover: {
|
|
2107
|
-
animationDuration: 0,
|
|
2108
|
-
},
|
|
2109
|
-
...(options && options),
|
|
2110
|
-
...(hoverEvent && hoverEvent),
|
|
2111
|
-
plugins: {
|
|
2112
|
-
legend: {
|
|
2113
|
-
position: 'bottom',
|
|
2114
|
-
},
|
|
2115
|
-
...(pluginsOptions && pluginsOptions),
|
|
2116
|
-
...(datalabels && { datalabels }),
|
|
2117
|
-
tooltip: {
|
|
2118
|
-
...this.setToolTip(),
|
|
2119
|
-
...(toolTipOptions && toolTipOptions),
|
|
2120
|
-
},
|
|
2121
|
-
},
|
|
2122
|
-
},
|
|
2123
|
-
plugins: plugins && plugins.length ? [...plugins] : [],
|
|
2124
|
-
}
|
|
2125
|
-
}
|
|
2126
|
-
|
|
2127
|
-
setToolTip() {
|
|
2128
|
-
return {
|
|
2129
|
-
backgroundColor: '#FFF',
|
|
2130
|
-
bodyColor: '#000',
|
|
2131
|
-
titleFont: {
|
|
2132
|
-
size: 16,
|
|
2133
|
-
},
|
|
2134
|
-
bodyFont: {
|
|
2135
|
-
size: 16,
|
|
2136
|
-
},
|
|
2137
|
-
titleColor: '#000',
|
|
2138
|
-
displayColors: false,
|
|
2139
|
-
borderWidth: 1,
|
|
2140
|
-
borderColor: '#b1b4b6',
|
|
2141
|
-
cornerRadius: 0,
|
|
2142
|
-
padding: 20,
|
|
2143
|
-
footerFont: {
|
|
2144
|
-
weight: 'bold',
|
|
2145
|
-
},
|
|
2146
|
-
animation: {
|
|
2147
|
-
duration: 0,
|
|
2148
|
-
},
|
|
2149
|
-
}
|
|
2150
|
-
}
|
|
2151
|
-
|
|
2152
|
-
setHoverValue({ label, value, legend, ctx }) {
|
|
2153
|
-
if (ctx.tooltipDetailsEl) {
|
|
2154
|
-
ctx.tooltipDetailsEl.style.display = 'block';
|
|
2155
|
-
ctx.labelElement.innerHTML = ctx.singleDataset ? `${label}` : `${legend}: ${label}`;
|
|
2156
|
-
ctx.valueElement.innerHTML = `${value}`;
|
|
2157
|
-
}
|
|
2158
|
-
if (ctx.headlineValuesEl) {
|
|
2159
|
-
ctx.headlineValuesEl.style.display = 'none';
|
|
2160
|
-
}
|
|
2161
|
-
if (!legend) {
|
|
2162
|
-
ctx.legendElement.style.display = 'none';
|
|
2163
|
-
}
|
|
2164
|
-
}
|
|
2165
|
-
|
|
2166
|
-
setValueSuffix() {
|
|
2167
|
-
this.unit = this.getElement().getAttribute('data-dpr-chart-unit');
|
|
2168
|
-
this.suffix = this.unit === 'percentage' ? '%' : '';
|
|
2169
|
-
}
|
|
2170
|
-
|
|
2171
|
-
isPercentage() {
|
|
2172
|
-
return this.unit === 'percentage'
|
|
2173
|
-
}
|
|
2174
|
-
|
|
2175
|
-
initChartEvents() {
|
|
2176
|
-
this.chart.canvas.addEventListener('mouseout', (e) => {
|
|
2177
|
-
if (this.tooltipDetailsEl) this.tooltipDetailsEl.style.display = 'none';
|
|
2178
|
-
if (this.headlineValuesEl) this.headlineValuesEl.style.display = 'block';
|
|
2179
|
-
});
|
|
2180
|
-
}
|
|
2181
|
-
}
|
|
2182
|
-
|
|
2183
|
-
/* eslint-disable no-underscore-dangle */
|
|
2184
|
-
|
|
2185
|
-
class BarChartVisualisation extends ChartVisualisation {
|
|
2186
|
-
static getModuleName() {
|
|
2187
|
-
return 'bar-chart'
|
|
2188
|
-
}
|
|
2189
|
-
|
|
2190
|
-
initialise() {
|
|
2191
|
-
this.setupCanvas();
|
|
2192
|
-
this.settings = this.initSettings();
|
|
2193
|
-
this.chartData = this.generateChartData(this.settings);
|
|
2194
|
-
this.initChart(this.chartData);
|
|
2195
|
-
}
|
|
2196
|
-
|
|
2197
|
-
initSettings() {
|
|
2198
|
-
return {
|
|
2199
|
-
options: this.setOptions(),
|
|
2200
|
-
toolTipOptions: this.setToolTipOptions(),
|
|
2201
|
-
datalabels: this.setDataLabels(),
|
|
2202
|
-
styling: this.setDatasetStyling(),
|
|
2203
|
-
}
|
|
2204
|
-
}
|
|
2205
|
-
|
|
2206
|
-
setDatasetStyling() {
|
|
2207
|
-
const pallette = this.getColourPallette();
|
|
2208
|
-
return pallette.map((colour) => {
|
|
2209
|
-
return {
|
|
2210
|
-
borderColor: colour.hex,
|
|
2211
|
-
...this.setBackgroundColour(colour.hex),
|
|
2212
|
-
datalabels: {
|
|
2213
|
-
align: 'center',
|
|
2214
|
-
anchor: 'center',
|
|
2215
|
-
},
|
|
2216
|
-
}
|
|
2217
|
-
})
|
|
2218
|
-
}
|
|
2219
|
-
|
|
2220
|
-
setBackgroundColour(colour) {
|
|
2221
|
-
const lastIndex = this.chartParams.labels.length - 1;
|
|
2222
|
-
const backgroundColors = [];
|
|
2223
|
-
const borderWidths = [];
|
|
2224
|
-
const borderColors = [];
|
|
2225
|
-
|
|
2226
|
-
this.chartParams.labels.forEach((label, i) => {
|
|
2227
|
-
if ((this.partialEnd && i === lastIndex) || (this.partialStart && i === 0)) {
|
|
2228
|
-
backgroundColors.push(colour);
|
|
2229
|
-
borderWidths.push(3);
|
|
2230
|
-
borderColors.push('#b1b4b6');
|
|
2231
|
-
} else {
|
|
2232
|
-
backgroundColors.push(colour);
|
|
2233
|
-
borderWidths.push(0);
|
|
2234
|
-
borderColors.push(colour);
|
|
2235
|
-
}
|
|
2236
|
-
});
|
|
2237
|
-
|
|
2238
|
-
return {
|
|
2239
|
-
backgroundColor: backgroundColors,
|
|
2240
|
-
borderWidth: borderWidths,
|
|
2241
|
-
borderColor: borderColors,
|
|
2242
|
-
}
|
|
2243
|
-
}
|
|
2244
|
-
|
|
2245
|
-
setToolTipOptions() {
|
|
2246
|
-
const ctx = this;
|
|
2247
|
-
return {
|
|
2248
|
-
callbacks: {
|
|
2249
|
-
title(context) {
|
|
2250
|
-
const { label, dataset } = context[0];
|
|
2251
|
-
const { label: establishmentId } = dataset;
|
|
2252
|
-
const title = ctx.singleDataset ? `${label}` : `${establishmentId}: ${label}`;
|
|
2253
|
-
return title
|
|
2254
|
-
},
|
|
2255
|
-
label(context) {
|
|
2256
|
-
const { label } = context;
|
|
2257
|
-
const { data, label: legend } = context.dataset;
|
|
2258
|
-
const value = `${data[context.dataIndex]}${ctx.suffix}`;
|
|
2259
|
-
ctx.setHoverValue({ label, value, legend, ctx });
|
|
2260
|
-
return value
|
|
2261
|
-
},
|
|
2262
|
-
},
|
|
2263
|
-
}
|
|
2264
|
-
}
|
|
2265
|
-
|
|
2266
|
-
setOptions() {
|
|
2267
|
-
const { indexAxis, stacked } = this.chartParams;
|
|
2268
|
-
return {
|
|
2269
|
-
indexAxis: indexAxis || 'x',
|
|
2270
|
-
...(stacked && {
|
|
2271
|
-
scales: {
|
|
2272
|
-
x: {
|
|
2273
|
-
stacked: true,
|
|
2274
|
-
},
|
|
2275
|
-
y: {
|
|
2276
|
-
stacked: true,
|
|
2277
|
-
},
|
|
2278
|
-
},
|
|
2279
|
-
}),
|
|
2280
|
-
}
|
|
2281
|
-
}
|
|
2282
|
-
|
|
2283
|
-
setDataLabels() {
|
|
2284
|
-
return {
|
|
2285
|
-
color: '#FFF',
|
|
2286
|
-
display: () => {
|
|
2287
|
-
return !this.timeseries
|
|
2288
|
-
},
|
|
2289
|
-
formatter: (value) => {
|
|
2290
|
-
return `${value}${this.suffix}`
|
|
2291
|
-
},
|
|
2292
|
-
labels: {
|
|
2293
|
-
title: {
|
|
2294
|
-
font: {
|
|
2295
|
-
weight: 'bold',
|
|
2296
|
-
size: 16,
|
|
2297
|
-
color: '#FFF',
|
|
2298
|
-
},
|
|
2299
|
-
},
|
|
2300
|
-
},
|
|
2301
|
-
}
|
|
2302
|
-
}
|
|
2303
|
-
}
|
|
2304
|
-
|
|
2305
|
-
/* eslint-disable class-methods-use-this */
|
|
2306
|
-
|
|
2307
|
-
class DoughnutChartVisualisation extends ChartVisualisation {
|
|
2308
|
-
static getModuleName() {
|
|
2309
|
-
return 'doughnut-chart'
|
|
2310
|
-
}
|
|
2311
|
-
|
|
2312
|
-
initialise() {
|
|
2313
|
-
this.setupCanvas();
|
|
2314
|
-
this.settings = this.initSettings();
|
|
2315
|
-
this.chartData = this.generateChartData(this.settings);
|
|
2316
|
-
this.initChart(this.chartData);
|
|
2317
|
-
}
|
|
2318
|
-
|
|
2319
|
-
initSettings() {
|
|
2320
|
-
return {
|
|
2321
|
-
options: this.setOptions(),
|
|
2322
|
-
styling: this.setDatasetStyling(),
|
|
2323
|
-
datalabels: this.setDataLabels(),
|
|
2324
|
-
pluginsOptions: this.setPluginsOptions(),
|
|
2325
|
-
toolTipOptions: this.setToolTipOptions(),
|
|
2326
|
-
plugins: this.setPlugins(),
|
|
2327
|
-
}
|
|
2328
|
-
}
|
|
2329
|
-
|
|
2330
|
-
setDatasetStyling() {
|
|
2331
|
-
const pallette = this.getColourPallette();
|
|
2332
|
-
const backgroundColor = pallette.map((p) => p.hex);
|
|
2333
|
-
return [
|
|
2334
|
-
{
|
|
2335
|
-
backgroundColor: [...backgroundColor, ...backgroundColor],
|
|
2336
|
-
hoverOffset: 4,
|
|
2337
|
-
datalabels: {
|
|
2338
|
-
anchor: 'center',
|
|
2339
|
-
borderWidth: 0,
|
|
2340
|
-
},
|
|
2341
|
-
},
|
|
2342
|
-
]
|
|
2343
|
-
}
|
|
2344
|
-
|
|
2345
|
-
setOptions() {
|
|
2346
|
-
const cutoutValue = this.chartParams.datasets.length === 1 ? '50%' : '20%';
|
|
2347
|
-
return {
|
|
2348
|
-
cutout: cutoutValue,
|
|
2349
|
-
}
|
|
2350
|
-
}
|
|
2351
|
-
|
|
2352
|
-
setPluginsOptions() {
|
|
2353
|
-
return {
|
|
2354
|
-
legend: {
|
|
2355
|
-
display: true,
|
|
2356
|
-
position: 'bottom',
|
|
2357
|
-
},
|
|
2358
|
-
}
|
|
2359
|
-
}
|
|
2360
|
-
|
|
2361
|
-
setPlugins() {
|
|
2362
|
-
const plugins = [];
|
|
2363
|
-
if (this.chartParams.datasets.length === 1 && !this.isPercentage) {
|
|
2364
|
-
plugins.push(this.setCentralText());
|
|
2365
|
-
}
|
|
2366
|
-
return plugins
|
|
2367
|
-
}
|
|
2368
|
-
|
|
2369
|
-
setCentralText() {
|
|
2370
|
-
return {
|
|
2371
|
-
// Put the total in the center of the donut
|
|
2372
|
-
id: 'text',
|
|
2373
|
-
beforeDraw(chart) {
|
|
2374
|
-
const { width } = chart;
|
|
2375
|
-
const { height } = chart;
|
|
2376
|
-
const { ctx } = chart;
|
|
2377
|
-
|
|
2378
|
-
ctx.textBaseline = 'middle';
|
|
2379
|
-
let fontSize = 2.5;
|
|
2380
|
-
ctx.font = `100 ${fontSize}em GDS Transport`;
|
|
2381
|
-
ctx.fillStyle = ' #505a5f';
|
|
2382
|
-
|
|
2383
|
-
// Accumulated total
|
|
2384
|
-
const total = chart.data.datasets[0].data.reduce((a, c) => a + c, 0);
|
|
2385
|
-
const text = total;
|
|
2386
|
-
const textX = Math.round((width - ctx.measureText(text).width) / 2);
|
|
2387
|
-
const textY = height / 2;
|
|
2388
|
-
|
|
2389
|
-
ctx.fillText(text, textX, textY);
|
|
2390
|
-
ctx.save();
|
|
2391
|
-
|
|
2392
|
-
ctx.textBaseline = 'middle';
|
|
2393
|
-
fontSize = 1;
|
|
2394
|
-
ctx.font = `100 ${fontSize}em GDS Transport`;
|
|
2395
|
-
ctx.fillStyle = ' #505a5f';
|
|
2396
|
-
|
|
2397
|
-
// Chart title
|
|
2398
|
-
const title = 'Total';
|
|
2399
|
-
const titleX = Math.round((width - ctx.measureText(title).width) / 2);
|
|
2400
|
-
const titleY = textY + 30;
|
|
2401
|
-
|
|
2402
|
-
ctx.fillText(title, titleX, titleY);
|
|
2403
|
-
ctx.save();
|
|
2404
|
-
},
|
|
2405
|
-
}
|
|
2406
|
-
}
|
|
2407
|
-
|
|
2408
|
-
setLegend() {
|
|
2409
|
-
const classContext = this;
|
|
2410
|
-
const { legend, suffix } = this;
|
|
2411
|
-
return {
|
|
2412
|
-
id: 'legend',
|
|
2413
|
-
beforeInit(chart) {
|
|
2414
|
-
const ul = document.createElement('ul');
|
|
2415
|
-
const { labels } = chart.data;
|
|
2416
|
-
const { backgroundColor, data } = chart.data.datasets[0];
|
|
2417
|
-
|
|
2418
|
-
labels.forEach((label, i) => {
|
|
2419
|
-
const colourIndex = i % backgroundColor.length;
|
|
2420
|
-
const colour = backgroundColor[colourIndex];
|
|
2421
|
-
const colourName = classContext.mapHexColourToName(colour, classContext);
|
|
2422
|
-
const value = chart.data.datasets.length === 1 ? `${data[i]}${suffix}` : '';
|
|
2423
|
-
|
|
2424
|
-
ul.innerHTML += `
|
|
2425
|
-
<li aria-label="${label} ${value}">
|
|
2426
|
-
<span class="chart-colour__${colourName}">${value}</span>
|
|
2427
|
-
${label}
|
|
28
|
+
var X=Object.defineProperty,K=Object.defineProperties;var Z=Object.getOwnPropertyDescriptors;var J=Object.getOwnPropertySymbols;var tt=Object.prototype.hasOwnProperty,et=Object.prototype.propertyIsEnumerable;var z=(o,t,e)=>t in o?X(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,m=(o,t)=>{for(var e in t||(t={}))tt.call(t,e)&&z(o,e,t[e]);if(J)for(var e of J(t))et.call(t,e)&&z(o,e,t[e]);return o},k=(o,t)=>K(o,Z(t));var l=(o,t,e)=>new Promise((s,a)=>{var i=d=>{try{n(e.next(d))}catch(c){a(c)}},r=d=>{try{n(e.throw(d))}catch(c){a(c)}},n=d=>d.done?s(d.value):Promise.resolve(d.value).then(i,r);n((e=e.apply(o,t)).next())});var w=class{showLoadingAnimation(t){document.querySelectorAll(".dpr-loading-panel").forEach(a=>{a.classList.add("show")});let s=".dpr-loading-anim";t&&(s=`.${t} ${s}`),document.querySelectorAll(s).forEach(a=>{a.classList.add("show")})}hideLoadingAnimation(){document.querySelectorAll(".dpr-loading-panel").forEach(t=>{t.classList.remove("show")}),document.querySelectorAll(".dpr-loading-anim").forEach(t=>{t.classList.remove("show")})}};var u=class{constructor(t,e){this.element=t,this.loadingHelper=e}static getModuleName(){throw new Error("Module name not set")}getElement(){return this.element}initialise(){throw new Error("Initialisation not configured")}};var S=class extends u{static getModuleName(){return"card-group"}initialise(){let t=this.getElement().querySelectorAll("[data-click-navigate-to]"),e="card-loading";t.forEach(s=>{s.addEventListener("click",()=>{s.classList.add(e),this.loadingHelper.showLoadingAnimation(e),t.forEach(a=>{a.classList.contains("card-loading")||a.classList.add("card-disabled")}),window.location.href=s.dataset.clickNavigateTo})})}};var x=class extends u{static getModuleName(){return"dpr-catalogue-search"}initialise(){this.searchBox=this.getElement().querySelector(".dpr-search-box"),this.shwoUnauthorisedCheckbox=this.getElement().querySelector("#show-unauthorised"),this.searchBox&&this.initSeachBoxEvents(),this.shwoUnauthorisedCheckbox&&this.initShowUnauthorisedEvents(),this.initInputFromQueryParams()}initSeachBoxEvents(){this.searchBox.addEventListener("keyup",t=>{this.updateTableRows(t.target.value);let e=new URLSearchParams(window.location.search);e.set(this.searchBox.id,t.target.value),window.history.replaceState(null,null,`?${e.toString()}`)})}initShowUnauthorisedEvents(){this.shwoUnauthorisedCheckbox.addEventListener("change",t=>{let e=new URLSearchParams(window.location.search);t.target.checked?e.set(t.target.id,t.target.value):e.delete(t.target.id,t.target.value),window.history.replaceState(null,null,`?${e.toString()}`),this.updateTableRows(this.searchBox.value)}),this.updateTableRows(this.searchBox.value)}updateTableRows(t){let e=this.getElement().querySelector("table").querySelector("tbody"),s=Array.from(e.rows);s.forEach(a=>a.classList.add("search-option-hide")),this.updateSearchListing(s,t),this.toggleUnauthorisedRows(s)}toggleUnauthorisedRows(t){let s=new URLSearchParams(window.location.search).get("show-unauthorised");t.filter(a=>Array.from(a.cells).find(i=>i.innerHTML.includes("dpr-unauthorised-report"))).forEach(a=>{s?a.classList.remove("search-option-hide"):a.classList.contains("search-option-hide")||a.classList.add("search-option-hide")})}updateSearchListing(t,e){t.filter(s=>!e||e.length===0||Array.from(s.cells).find(a=>{let i=e.toLowerCase();return a.innerText.toLowerCase().includes(i.toLowerCase())})).forEach(s=>{s.classList.remove("search-option-hide")})}initInputFromQueryParams(){new URLSearchParams(window.location.search).forEach((e,s)=>{let a=document.getElementById(s);a&&a.classList.contains("dpr-search-box")&&(a.value=e,this.updateTableRows(a.value)),a&&a.id==="show-unauthorised"&&a.setAttribute("checked","")})}};var I=class extends u{static getModuleName(){return"bookmark-toggle"}initialise(){this.initToggles()}initToggles(){this.getElement().querySelectorAll(".bookmark-input[type=checkbox]").forEach(e=>{let s=e.getAttribute("data-csrf-token"),a=e.getAttribute("data-report-id"),i=e.getAttribute("data-id"),r=e.getAttribute("data-report-type");this.bookmarkWrapper=e.parentNode,this.bookmarkColumn=this.bookmarkWrapper.parentNode,this.bookmarkLabel=this.bookmarkWrapper.querySelector(".dpr-bookmark-label--component"),e.addEventListener("change",()=>l(this,null,function*(){e.checked?yield this.addBookmark(e,i,a,r,s):yield this.removeBookmark(e,i,a,r,s)})),this.bookmarkColumn.addEventListener("keyup",n=>l(this,null,function*(){n.key==="Enter"&&(yield this.handleBookmarkChange(e,i,a,r,s))}))})}addBookmark(t,e,s,a,i){return l(this,null,function*(){t.setAttribute("checked",""),this.bookmarkWrapper.setAttribute("tooltip","Remove bookmark"),this.bookmarkLabel&&(this.bookmarkLabel.innerText="Bookmarked"),yield this.toggleBookmark("add",e,s,a,i)})}removeBookmark(t,e,s,a,i){return l(this,null,function*(){t.removeAttribute("checked"),this.bookmarkWrapper.setAttribute("tooltip","Add bookmark"),this.bookmarkLabel&&(this.bookmarkLabel.innerText="Bookmark removed"),yield this.toggleBookmark("remove",e,s,a,i)})}handleBookmarkChange(t,e,s,a,i){return l(this,null,function*(){t.checked?(t.removeAttribute("checked"),this.bookmarkWrapper.setAttribute("tooltip","Add bookmark"),this.bookmarkLabel&&(this.bookmarkLabel.innerText="Bookmark removed"),yield this.toggleBookmark("remove",e,s,a,i)):(t.setAttribute("checked",""),this.bookmarkWrapper.setAttribute("tooltip","Bookmarked"),this.bookmarkLabel&&(this.bookmarkLabel.innerText="Bookmarked"),yield this.toggleBookmark("add",e,s,a,i))})}toggleBookmark(t,e,s,a,i){return l(this,null,function*(){yield fetch(t==="add"?"/dpr/addBookmark/":"/dpr/removeBookmark/",{method:"post",headers:{Accept:"application/json","Content-Type":"application/json","CSRF-Token":i},body:JSON.stringify({id:e,reportId:s,reportType:a})}).then(()=>{window.location.href.includes("/report")||window.location.reload()}).catch(n=>console.error("Error:",n))})}};var D=class extends u{static getModuleName(){return"show-more"}initialise(){this.initShowMore()}initShowMore(){let t=this.getElement(),e=t.querySelector(".dpr-show-more-content"),s=t.querySelector(".dpr-show-hide-button"),a=t.getAttribute("data-content"),i=+t.getAttribute("data-length")||200,r=a.replaceAll(/<[^>]+>/g,"").substring(0,i);a.length>i?e.innerHTML=`${r}... `:(e.innerHTML=`${a}`,s.style.display="none"),s.addEventListener("click",n=>{n.preventDefault(),s.innerHTML==="show more"?(e.innerHTML=`${a} `,s.innerHTML="show less"):s.innerHTML==="show less"&&(e.innerHTML=`${r}... `,s.innerHTML="show more")})}};var p=class extends u{initInputsFromQueryParams(){this.queryParams=new URLSearchParams(window.location.search),this.queryParams.forEach((t,e)=>{let s=document.getElementsByName(e);if(s.length){let a=s[0],{type:i}=a;if(i==="radio"||i==="checkbox")this.setMultiSelectValue(s,t);else if(a.classList.contains("moj-js-datepicker-input")){let r=dayjs(t,"YYYY-MM-DD").format("DD/MM/YYYY");a.value=r!=="Invalid Date"?r:""}else a.value=t}})}initInputEvents(t){Array.from(t).forEach(e=>{e.addEventListener("change",()=>{this.setQueryParamFromInput(e,!0,!1)})})}initQueryParamsFromInputs(t){Array.from(t).forEach(e=>{e.type!=="hidden"&&this.setQueryParamFromInput(e,!1,!0)})}setQueryParamFromInput(t,e=!1,s=!1){let{type:a}=t;if(a==="checkbox"||a==="radio")this.setMultiSelectQueryParam(t,e,s);else{let{name:i}=t,{value:r}=t,{staticOptionNameValue:n}=t,d=t.classList.contains("moj-js-datepicker-input");if(d){let h=dayjs(r,"D/M/YYYY").format("YYYY-MM-DD");r=h!=="Invalid Date"?h:""}let c=!d&&n?n:r;i&&this.updateQueryParam(i,c)}}setMultiSelectQueryParam(t,e,s){this.queryParams=new URLSearchParams(window.location.search);let{name:a,value:i,checked:r,type:n}=t;if(r&&!this.queryParams.has(a,i)){let d;n==="checkbox"&&(d="append",!s&&a!=="columns"&&this.updateQueryParam("preventDefault",!0)),this.updateQueryParam(a,i,d)}else!r&&this.queryParams.has(a,i)&&e&&(n==="checkbox"&&!s&&a!=="columns"&&this.updateQueryParam("preventDefault",!0),this.updateQueryParam(a,i,"delete"))}updateQueryParam(t,e,s){if(this.queryParams=new URLSearchParams(window.location.search),!e&&t.length)this.queryParams.delete(t);else switch(s){case"append":this.queryParams.append(t,e);break;case"delete":this.queryParams.delete(t,e);break;default:this.queryParams.set(t,e);break}window.history.replaceState(null,null,`?${this.queryParams.toString()}`)}clearQueryParams(t){this.queryParams=new URLSearchParams(window.location.search),Array.from(this.queryParams).forEach(s=>{t&&s[0].includes(t)&&this.queryParams.delete(s[0],s[1]),t==="filters"&&this.queryParams.delete("preventDefault")}),window.history.replaceState(null,null,`?${this.queryParams.toString()}`)}getFormDataAsObject(t,e){let s=new FormData(t),a=Array.from(s.entries()).filter(i=>i[1]!=="").map(i=>({[`${e}${i[0]}`]:i[1]}));return Object.assign({},...a)}setMultiSelectValue(t,e){let s=Array.from(t).find(a=>a.getAttribute("value")===e);s&&(s.checked=!0)}setCheckBoxValues(t,e){let s=Array.from(t).find(a=>a.getAttribute("value")===e);s&&(s.checked=!0)}removeNoFilterValues(){this.queryParams=new URLSearchParams(window.location.search),Array.from(this.queryParams).forEach(e=>{e[1].includes("no-filter")&&this.queryParams.delete(e[0],e[1])}),window.history.replaceState(null,null,`?${this.queryParams.toString()}`)}};var y=class extends p{initFormValidation(t){t.forEach(e=>{let s=e.closest("div.govuk-form-group");if(s){let a=s.querySelector("p.govuk-error-message");a&&(s.classList.remove("govuk-form-group--error"),a.classList.add("govuk-error-message--hidden"),e.classList.remove("govuk-input--error"),e.classList.remove("govuk-textarea--error"),e.classList.remove("govuk-select--error"))}})}validateForm(){this.errorMessages=[];let t="";this.formFields.forEach(e=>{if(e.getAttribute("name")!==t&&e.tagName!=="BUTTON"){let a=e.closest("div.govuk-form-group");if(a){let i=a.querySelector("p.govuk-error-message");this.fieldIsValid(e)?i&&a&&this.hideFieldError(e,a,i):this.showFieldError(e,a,i)}}t=e.getAttribute("name")}),this.errorMessages.length?(this.buildErrorSummary(),this.errorSummary.classList.remove("query-error-summary--hidden")):this.errorSummary.classList.add("query-error-summary--hidden")}fieldIsValid(t){let{type:e}=t;switch(e){case"checkbox":return this.validateCheckbox(t);default:return t.checkValidity()}}validateCheckbox(t){let e=t.closest("div.govuk-checkboxes");if(e.hasAttribute("required")){let s=e.querySelectorAll('input[type="checkbox"]');return Array.from(s).some(a=>a.checked)}return!0}showFieldError(t,e,s){e.classList.add("govuk-form-group--error");let a=this.setValidationMessage(t.validity,t,s);s.innerHTML=`<span class="govuk-visually-hidden">Error:</span>${a}`,s.classList.remove("govuk-error-message--hidden"),t.classList.add("govuk-input--error")}hideFieldError(t,e,s){e.classList.remove("govuk-form-group--error"),s.classList.add("govuk-error-message--hidden"),t.classList.remove("govuk-input--error")}buildErrorSummary(){let t=this.errorSummary.querySelector("div.govuk-error-summary__body"),e="";this.errorMessages.forEach(a=>{e+=`<li><a href="${a.href}">${a.text}</a></li>`});let s=`<ul class="govuk-list govuk-error-summary__list">${e}</ul>`;t.innerHTML=s}getDisplayName(t){switch(t.getAttribute("type")){case"text":return t.getAttribute("display-name");case"radio":return t.closest("div.govuk-radios").getAttribute("display-name");case"checkbox":return t.closest("div.govuk-checkboxes").getAttribute("display-name");default:return t.getAttribute("display-name")}}setValidationMessage(t,e,s){let a=s.lastChild.nodeValue.replace(/(\r\n|\n|\r)/gm,"").trim(),i=e.getAttribute("id"),r=this.getDisplayName(e),n;if((t.valueMissing||e.type==="checkbox")&&(n=a.length?a:`${r} is required`,this.errorMessages.push({text:n,href:`#${i}`})),t.patternMismatch){let d=e.getAttribute("pattern-hint")||e.getAttribute("pattern");n=a.length?a:`The value for ${r} must be in the correct pattern: ${d}`,this.errorMessages.push({text:n,href:`#${i}`})}return n}};var L=class extends y{static getModuleName(){return"download-feedback-form"}initialise(){this.errorMessages=[],this.mainForm=document.getElementById("download-feedback-form"),this.mainForm.noValidate=!0,this.formFields=Array.from(this.mainForm.elements),this.errorSummary=document.getElementById("download-feedback-form-summary"),this.submitButton=document.getElementById("download-feedback-form-submit"),this.success=document.getElementById("download-feedback-form-success"),this.initSubmitButton(),this.initFormValidation(this.formFields),this.mainForm.classList.remove("download-feedback-form--hidden")}initSubmitButton(){this.submitButton.addEventListener("click",t=>{t.preventDefault(),this.validateForm(),this.mainForm.checkValidity()&&this.mainForm.requestSubmit()})}};var P=class extends p{static getModuleName(){return"pagination"}initialise(){this.pageSizeSelect=document.getElementById("page-size-select"),this.initInputsFromQueryParams(),this.initSelectEvent()}initSelectEvent(){this.pageSizeSelect.addEventListener("change",()=>{this.queryParams=new URLSearchParams(window.location.search);let{name:t,value:e}=this.pageSizeSelect;this.queryParams.set(t,e),this.queryParams.set("selectedPage","1"),window.history.replaceState(null,null,`?${this.queryParams.toString()}`),window.location.reload()})}};var A=class extends u{static getModuleName(){return"report-actions"}initialise(){this.refreshButton=document.getElementById("dpr-button-refresh"),this.printButton=document.getElementById("dpr-button-printable"),this.shareButton=document.getElementById("dpr-button-sharable"),this.downloadButton=document.getElementById("dpr-button-downloadable"),this.copyButton=document.getElementById("dpr-button-copy"),this.initRefreshEvent(),this.initPrintButtonEvent(),this.initShareButtonEvent(),this.initCopyButtonEvent()}initPrintButtonEvent(){if(this.printButton){let t=this.printButton.getAttribute("data-disabled");this.printButton.addEventListener("click",()=>{t!=="true"&&window.print()}),this.printButton.addEventListener("keyup",e=>{e.key==="Enter"&&t!=="true"&&window.print()})}}initShareButtonEvent(){if(this.shareButton){let t=this.shareButton.getAttribute("data-href");this.shareButton.addEventListener("click",()=>{window.location=t}),this.shareButton.addEventListener("keyup",e=>{e.key==="Enter"&&(window.location=t)})}}initCopyButtonEvent(){if(this.copyButton){let t=this.copyButton.getAttribute("data-href");this.copyButton.addEventListener("click",()=>{navigator.clipboard.writeText(t)}),this.copyButton.addEventListener("keyup",e=>{e.key==="Enter"&&navigator.clipboard.writeText(t)})}}initRefreshEvent(){if(this.refreshButton){let t=this.refreshButton.getAttribute("data-href");this.refreshButton.addEventListener("click",()=>{window.location=t}),this.refreshButton.addEventListener("keyup",e=>{e.key==="Enter"&&(window.location=t)})}}};var C=class extends u{static getModuleName(){return"data-table"}initialise(){this.tableContainer=document.getElementById("dpr-table-wrapper"),this.table=document.getElementById("dpr-data-table"),this.overflowGradient=document.getElementById("dpr-overflow-gradient"),this.createTableHeaderAndFooter(),this.initTableScrollListener()}initTableScrollListener(){this.checkOffsetWidths(),window.addEventListener("resize",()=>{this.checkOffsetWidths()}),this.tableContainer.addEventListener("scroll",t=>{let e=this.table.offsetWidth,s=t.target.offsetWidth+t.target.scrollLeft;e===s?this.overflowGradient.style.display="none":this.overflowGradient.style.display="block"})}checkOffsetWidths(){this.tableContainer.offsetWidth>=this.table.offsetWidth?this.overflowGradient.style.display="none":this.overflowGradient.style.display="block"}createTableHeaderAndFooter(){if(this.table){let t=this.table.getAttribute("data-classification"),e=Number(this.table.getAttribute("data-col-length")),s=`<b>${t}</b>`,r=this.table.createTHead().insertRow(0).insertCell(0);r.outerHTML=`<th class="govuk-table__header govuk-table__cell--content print-header-footer" colspan=${e}>${s}</th>`;let c=this.table.createTFoot().insertRow(0).insertCell(0);c.outerHTML=`<td class="govuk-table__cell govuk-table__cell--content print-header-footer table-row--no-border" colspan=${e}>${s}</td>`}}};var q=class extends p{static getModuleName(){return"columns"}initialise(){this.form=this.getElement(),this.submitButton=this.getElement().querySelector(".dpr-apply-columns-button"),this.resetButton=this.getElement().querySelector(".dpr-reset-columns-button"),this.initInputsFromQueryParams(),this.initQueryParamsFromInputs(this.form.elements),this.initInputEvents(this.form.elements),this.initSubmitButton(),this.initResetButton()}initSubmitButton(){this.submitButton.addEventListener("click",t=>{t.preventDefault(),this.loadingHelper.showLoadingAnimation(),window.location.reload()})}initResetButton(){this.resetButton.addEventListener("click",t=>{t.preventDefault(),this.loadingHelper.showLoadingAnimation(),this.clearQueryParams("columns"),window.location.reload()})}};var B=class extends u{static getModuleName(){return"download-message"}initialise(){this.downloadMessage=this.getElement(),window.location.href.indexOf("download-disabled")>-1&&this.downloadMessage.classList.remove("dpr-download-message--hidden")}};var b=class extends y{initFiltersForm({formId:t,submitButtonId:e,resetButtonId:s,removeSelectedButtonClass:a}){this.errorMessages=[],this.mainForm=document.getElementById(t),this.mainForm.noValidate=!0,this.formFields=Array.from(this.mainForm.elements),this.errorSummary=document.getElementById("query-error-summary"),this.submitButton=document.getElementById(e),this.resetButton=document.getElementById(s),this.selectedFiltersButtons=document.querySelectorAll(`.${a}`),this.initValues(),this.initSubmitButton(),this.initResetButton(),this.initFormData()}initValues(){this.initInputsFromQueryParams(),this.initQueryParamsFromInputs(this.mainForm.elements),this.initInputEvents(this.mainForm.elements)}initFormData(){this.initFormValidation(this.formFields),this.mainForm.classList.remove("async-filters-form--hidden")}initSubmitButton(){this.submitButton.addEventListener("click",t=>{t.preventDefault(),this.initFormData(),this.validateForm(),this.mainForm.checkValidity()&&this.submitAction()})}initResetButton(){this.resetButton&&(this.defaultQuery=this.resetButton.getAttribute("defaultQuery"),this.resetButton.addEventListener("click",t=>{t.preventDefault(),this.clearQueryParams("filters"),this.resetAction()}))}resetAction(){if(this.defaultQuery){let t=this.defaultQuery.substring(1),e=`${window.location.href}&${t}`;window.location.href=e}else window.location.reload()}submitAction(){window.location.reload()}initSelectedFiltersButtons(){this.selectedFiltersButtons&&this.selectedFiltersButtons.forEach(t=>{t.addEventListener("click",e=>{e.preventDefault();let s=JSON.parse(e.target.getAttribute("data-query-param-key")),a=JSON.parse(e.target.getAttribute("data-query-param-value")),i=e.target.getAttribute("data-query-constraint-values");i=i?JSON.parse(e.target.getAttribute("data-query-constraint-values")):void 0,s.forEach(r=>{if(a.forEach(n=>{this.updateQueryParam(r,n,"delete")}),i){let n=i.find(d=>d.key===r);n&&this.updateQueryParam(r,n.value)}}),this.updateQueryParam("preventDefault",!0),window.location.reload()})})}};var T=class extends b{static getModuleName(){return"interactive-filters"}initialise(){this.initFiltersForm({formId:"interactive-filters-form",submitButtonId:"interactive-apply-filters-button",resetButtonId:"interactive-reset-filters-button",removeSelectedButtonClass:"interactive-remove-filter-button"}),this.initSelectedFiltersButtons()}};var g=class extends u{getPollingFrquency(){return"2000"}getPollingStatuses(){return["SUBMITTED","STARTED","PICKED"]}getEndStatuses(){return["FINISHED","FAILED","EXPIRED","ABORTED"]}getExpiredCheckStatuses(){return["FAILED","EXPIRED","ABORTED"]}getRequestStatus(t,e){return l(this,null,function*(){return this.getStatus("/dpr/getStatus/",t,e)})}getExpiredStatus(t,e,s){return l(this,null,function*(){return this.getStatus(t,e,s)})}shouldPollStatus(t){return JSON.parse(t).some(e=>!this.END_STATUSES.includes(e.status))}shouldPollExpired(t){return JSON.parse(t).some(e=>!this.EXPIRED_END_STATUSES.includes(e.status))}getStatus(t,e,s){return l(this,null,function*(){let a;return yield fetch(t,{method:"post",headers:{Accept:"application/json","Content-Type":"application/json","CSRF-Token":s},body:JSON.stringify(m({},e))}).then(i=>i.json()).then(i=>{a=i}).catch(i=>console.error("Error:",i)),a})}};var F=class extends g{static getModuleName(){return"async-polling-content"}initialise(){this.POLLING_STATUSES=this.getPollingStatuses(),this.POLLING_FREQUENCY=this.getPollingFrquency(),this.statusSection=document.getElementById("async-request-polling-status"),this.retryRequestButton=document.getElementById("retry-async-request"),this.cancelRequestButton=document.getElementById("cancel-async-request"),this.viewReportButton=document.getElementById("view-async-report-button"),this.requestData=this.statusSection.getAttribute("data-request-data"),this.currentStatus=this.statusSection.getAttribute("data-current-status"),this.csrfToken=this.statusSection.getAttribute("data-csrf-token"),this.initCancelRequestButton(),this.initPollingInterval()}initPollingInterval(){return l(this,null,function*(){this.POLLING_STATUSES.includes(this.currentStatus)&&(this.pollingInterval=setInterval(()=>l(this,null,function*(){yield this.pollStatus()}),this.POLLING_FREQUENCY))})}pollStatus(){return l(this,null,function*(){if(this.requestData){let t=JSON.parse(this.requestData),e=yield this.getRequestStatus(t,this.csrfToken);this.currentStatus!==e.status&&(clearInterval(this.pollingInterval),window.location.reload())}})}initCancelRequestButton(){if(this.cancelRequestButton){let t=this.cancelRequestButton.getAttribute("data-execution-id"),e=this.cancelRequestButton.getAttribute("data-report-id"),s=this.cancelRequestButton.getAttribute("data-id"),a=this.cancelRequestButton.getAttribute("data-type"),i=this.cancelRequestButton.getAttribute("data-csrf-token");this.cancelRequestButton.addEventListener("click",()=>l(this,null,function*(){yield fetch("/dpr/cancelRequest/",{method:"post",headers:{Accept:"application/json","Content-Type":"application/json","CSRF-Token":i},body:JSON.stringify({executionId:t,reportId:e,id:s,type:a})}).then(()=>{window.location.reload()}).catch(r=>console.error("Error:",r))}))}}};var R=class extends b{static getModuleName(){return"async-filters"}initialise(){this.initFiltersForm({formId:"async-filters-form",submitButtonId:"async-request-report-button",resetButtonId:"async-request-reset-filters-button"})}initFormData(){let{origin:t,pathname:e,search:s}=window.location;document.getElementById("async-filters-form-pathname").value=e,document.getElementById("async-filters-form-origin").value=t,document.getElementById("async-filters-form-search").value=s;let a=new URLSearchParams(s),i=a.size>0?`?${a.toString()}`:"";document.getElementById("async-filters-form-href").value=`${t}${e}${i}`,this.initFormValidation(this.formFields),this.mainForm.classList.remove("async-filters-form--hidden")}submitAction(){this.mainForm.requestSubmit()}};var M=class extends u{static getModuleName(){return"sync-loading"}initialise(){this.element=this.getElement(),this.form=this.element.querySelector("#dpr-sync-loading-form"),this.load()}load(){return l(this,null,function*(){this.form.submit()})}};var $=class extends u{static getModuleName(){return"date-input"}initialise(){let t=this.getElement();this.dateInput=t.querySelector("input.moj-js-datepicker-input"),this.setToValueTriggers=document.querySelectorAll("[data-set-min-max-trigger='true']"),this.required=this.getElement().getAttribute("data-required"),this.displayName=this.getElement().getAttribute("data-display-name"),this.pattern=this.getElement().getAttribute("data-pattern"),this.patternHint=this.getElement().getAttribute("data-pattern-hint"),this.min=this.getElement().getAttribute("data-min"),this.max=this.getElement().getAttribute("data-max"),this.setValidationOnInputEl(),this.setMinMaxEventListener(),this.setToMinMax(),this.setToValue()}setValidationOnInputEl(){this.required&&this.required==="true"&&this.dateInput.setAttribute("required",!0),this.min&&this.dateInput.setAttribute("min",this.min),this.max&&this.dateInput.setAttribute("max",this.max),this.dateInput.setAttribute("display-name",this.displayName),this.dateInput.setAttribute("pattern",this.pattern),this.dateInput.setAttribute("pattern-hint",this.patternHint)}setMinMaxEventListener(){this.dateInput.addEventListener("blur",()=>{this.setToMinMax()})}setToMinMax(){if(this.dateInput.value){let e=new Date(this.dateInput.value);if(this.min){let s=new Date(this.min);e<s&&(this.dateInput.value=dayjs(this.min).format("DD/MM/YYYY"))}if(this.max){let s=new Date(this.max);e>s&&(this.dateInput.value=dayjs(this.max).format("DD/MM/YYYY"))}}let t=new Event("change");this.dateInput.dispatchEvent(t)}setToValue(){this.setToValueTriggers.forEach(t=>{t.addEventListener("click",e=>{e.preventDefault();let s=e.target.getAttribute("data-set-min-max-value"),a=e.target.getAttribute("data-set-to-input"),i=document.getElementById(a);i.value=s;let r=new Event("change");i.dispatchEvent(r)})})}};var N=class extends u{static getModuleName(){return"date-range-input"}initialise(){this.dateRangeInputs=document.getElementById("dpr-date-range"),this.filtersAccordion=document.getElementById("dpr-interactive-filters-details"),this.fieldName=this.dateRangeInputs.getAttribute("data-field-name"),this.startInputID=`filters.${this.fieldName}.start`,this.endInputID=`filters.${this.fieldName}.end`,this.durationInputID=`filters.${this.fieldName}.relative-duration`,this.relativeRangeRadioButtons=document.querySelectorAll(`input[name='${this.durationInputID}']`),this.startInput=document.querySelector(`input[name='${this.startInputID}']`),this.endInput=document.querySelector(`input[name='${this.endInputID}']`),this.startRequired=this.startInput.required,this.endRequired=this.endInput.required,this.datePickerTab=document.getElementById("tab_date-picker"),this.relativeDurationTab=document.getElementById("tab_relative-range"),this.durationValue=void 0,this.datePickerTab&&this.relativeDurationTab&&(this.initDatePickerTabClick(),this.initRelativeDurationTabClick(),this.initTabs(),this.initDurationRadionButtonClick())}initTabs(){this.queryParams=new URLSearchParams(window.location.search),this.queryParams.has(this.durationInputID)&&this.relativeRangeRadioButtons.forEach(t=>{this.updateCheckedDuration(t)})}initDatePickerTabClick(){this.datePickerTab.addEventListener("click",()=>{let t;this.queryParams=new URLSearchParams(window.location.search),this.queryParams.has(this.durationInputID)&&(t=this.queryParams.get(this.durationInputID),this.removeSearchParam(this.durationInputID)),this.updateInputs(t),window.location.hash="date-picker"})}initRelativeDurationTabClick(){this.relativeDurationTab.addEventListener("click",()=>{this.relativeRangeRadioButtons.forEach(t=>{this.updateCheckedDuration(t)}),window.location.hash="relative-range"})}initDurationRadionButtonClick(){this.relativeRangeRadioButtons.forEach(t=>{t.addEventListener("click",e=>{let s=e.target.value;this.durationValue=s,this.updateInputs(s),this.removeRequiredFromDatePickers()})})}removeSearchParam(t,e){this.queryParams=new URLSearchParams(window.location.search),this.queryParams.delete(t),e&&this.queryParams.delete(e),window.history.replaceState(null,null,`?${this.queryParams.toString()}`)}updateCheckedDuration(t){if(t.checked){let e=t.value;this.updateInputs(e);let s=new Event("change");t.dispatchEvent(s)}}removeRequiredFromDatePickers(){this.startInput.removeAttribute("required"),this.endInput.removeAttribute("required"),this.startInput.value="",this.endInput.value=""}updateInputs(t){if(this.startInput.required=this.startRequired,this.endInput.required=this.endRequired,t||this.durationValue){let s=t||this.durationValue,{startDate:a,endDate:i}=this.calculateDateForDatepicker(s);this.startInput.value=a,this.endInput.value=i}let e=new Event("change");this.startInput.dispatchEvent(e),this.endInput.dispatchEvent(e)}calculateDateForDatepicker(t){let e,s;switch(t){case"yesterday":s=dayjs(),e=s.subtract(1,"day");break;case"tomorrow":e=dayjs(),s=e.add(1,"day");break;case"last-week":s=dayjs(),e=s.subtract(1,"week");break;case"next-week":e=dayjs(),s=e.add(1,"week");break;case"last-month":s=dayjs(),e=s.subtract(1,"month");break;case"next-month":e=dayjs(),s=e.add(1,"month");break;default:break}return{startDate:e.format("DD/MM/YYYY").toString(),endDate:s.format("DD/MM/YYYY").toString()}}};var O=class extends u{static getModuleName(){return"autocomplete-text-input"}constructor(t){super(t);let e=this.getTextInput().getAttribute("aria-owns");this.listItemsSelector=`#${e} li`,this.listParentSelector=`#${e} ul`}initialise(){let t=this.getTextInput();t.addEventListener("keyup",e=>{this.onTextInput(e,t)}),this.getElement().querySelectorAll(".autocomplete-text-input-list-button").forEach(e=>{e.addEventListener("click",s=>{this.onOptionClick(s,t,this.getElement())})})}getTextInput(){return this.getElement().querySelector(".autocomplete-text-input-box")}onTextInput(t,e){let s=Number(e.dataset.minimumLength),{resourceEndpoint:a}=e.dataset,i=t.target.value.toLowerCase();if(a?i.length>=s?(this.addItem(this.clearListAndRecreateTemplate(),"<i>Searching...</i>"),this.populateOptionsDynamically(a,i,e,()=>this.clearListAndRecreateTemplate())):this.clearListAndRecreateTemplate():this.getElement().querySelectorAll(this.listItemsSelector).forEach(r=>{i.length>=s&&this.isMatchingStaticOptionNameOrDisplayPrefix(this.getInputListButton(r),i,r)?r.classList.remove("autocomplete-text-input-item-hide"):r.classList.add("autocomplete-text-input-item-hide")}),i.length===0){let r=new Event("change");e.dispatchEvent(r)}}getInputListButton(t){return t.querySelector(".autocomplete-text-input-list-button")}isMatchingStaticOptionNameOrDisplayPrefix(t,e,s){return this.isStaticOptionsNamePrefix(t.dataset.staticOptionNameValue,e)||s.innerText.trim().toLowerCase().startsWith(e)}isStaticOptionsNamePrefix(t,e){return t&&t.trim().toLowerCase().startsWith(e)}populateOptionsDynamically(t,e,s,a){return l(this,null,function*(){try{let r=yield(yield fetch(t.replace("{prefix}",encodeURI(e)))).json();if(e===s.value.toLowerCase()){let n=a();r.forEach(d=>{this.addItem(n,d,c=>{this.onOptionClick(c,s,this.getElement())})})}}catch(i){this.addItem(a(),`Failed to retrieve results: ${i}`)}})}onOptionClick(t,e,s){t.preventDefault(),e.value=t.target.innerText.trim(),e.staticOptionNameValue=t.target.dataset.staticOptionNameValue,e.focus();let a=new Event("change");e.dispatchEvent(a),s.querySelectorAll("li").forEach(i=>{i.classList.add("autocomplete-text-input-item-hide")})}addItem(t,e,s){let a=t.cloneNode(!0);a.querySelector("button").innerHTML=e,a.classList.remove("autocomplete-text-input-item-hide"),this.getElement().querySelector(this.listParentSelector).appendChild(a),s&&a.addEventListener("click",i=>{s(i)})}clearListAndRecreateTemplate(){let t=this.getElement().querySelector(this.listItemsSelector).cloneNode(!0);return t.classList.add("autocomplete-text-input-item-hide"),this.getElement().querySelectorAll(this.listItemsSelector).forEach(e=>e.remove()),this.getElement().querySelector(this.listParentSelector).append(t),t}};var j=class extends u{static getModuleName(){return"granular-date-range-input"}initialise(){this.filter=this.getElement(),this.fieldName=this.filter.getAttribute("data-field-name");let t=`filters.${this.fieldName}`;this.quickFiltersInput=this.filter.querySelector(`select[name='${t}.quick-filter']`),this.granularityInput=this.filter.querySelector(`select[name='${t}.granularity']`),this.startInput=this.filter.querySelector(`input[name='${t}.start']`),this.endInput=this.filter.querySelector(`input[name='${t}.end']`),this.initStartEndInputChangetEvent(),this.initGranularityChangeEvent(),this.initQuickFilterChangeEvent()}initGranularityChangeEvent(){this.granularityInput.addEventListener("change",t=>{this.resetQuickFilters()})}initQuickFilterChangeEvent(){this.quickFiltersInput.addEventListener("change",t=>{this.updateStartEndValues(t.target.value)})}initStartEndInputChangetEvent(){this.startInput.addEventListener("change",t=>{this.resetQuickFilters()}),this.endInput.addEventListener("change",t=>{this.resetQuickFilters()})}setGranularityValue(t){this.granularityInput.value=t}setStartValue(t){this.startInput.value=t}setEndValue(t){this.endInput.value=t}resetQuickFilters(){this.quickFiltersInput.value="none";let t=new URLSearchParams(window.location.search);t.set(this.quickFiltersInput.id,"none"),window.history.replaceState(null,null,`?${t.toString()}`)}updateStartEndValues(t){let e,s,a;switch(t){case"today":s=dayjs(),e=dayjs(),a="daily";break;case"yesterday":s=dayjs().subtract(1,"day"),e=dayjs().subtract(1,"day"),a="daily";break;case"last-seven-days":s=dayjs(),e=s.subtract(7,"day").add(1,"day"),a="daily";break;case"last-thirty-days":s=dayjs(),e=s.subtract(30,"day").add(1,"day"),a="daily";break;case"last-month":s=dayjs(),e=s.subtract(1,"month").add(1,"day"),a="monthly";break;case"last-full-month":s=dayjs().subtract(1,"month").endOf("month"),e=s.startOf("month"),a="monthly";break;case"last-ninety-days":s=dayjs(),e=s.subtract(90,"day").add(1,"day"),a="daily";break;case"last-three-months":s=dayjs(),e=s.subtract(3,"month").add(1,"day"),a="monthly";break;case"last-full-three-months":s=dayjs().subtract(1,"month").endOf("month"),e=s.subtract(2,"month").startOf("month"),a="monthly";break;case"last-six-months":s=dayjs(),e=s.subtract(6,"month").add(1,"day"),a="monthly";break;case"last-full-six-months":s=dayjs().subtract(1,"month").endOf("month"),e=s.subtract(6,"month").startOf("month"),a="monthly";break;case"last-year":s=dayjs(),e=s.subtract(1,"year").add(1,"day"),a="annually";break;case"last-full-year":s=dayjs().subtract(1,"year").endOf("year"),e=s.startOf("year"),a="annually";break;case"tomorrow":s=dayjs().add(1,"day"),e=dayjs().add(1,"day"),a="daily";break;case"next-seven-days":e=dayjs(),s=dayjs().add(7,"day").subtract(1,"day"),a="daily";break;case"next-thirty-days":e=dayjs(),s=dayjs().add(30,"day").subtract(1,"day"),a="daily";break;case"next-month":e=dayjs(),s=dayjs().add(1,"month").subtract(1,"day"),a="monthly";break;case"next-full-month":e=dayjs().add(1,"month").startOf("month"),s=e.endOf("month"),a="monthly";break;case"next-ninety-days":e=dayjs(),s=dayjs().add(90,"day").subtract(1,"day"),a="daily";break;case"next-three-months":e=dayjs(),s=dayjs().add(3,"month").subtract(1,"day"),a="monthly";break;case"next-full-three-months":e=dayjs().add(1,"month").startOf("month"),s=e.add(2,"month").endOf("month"),a="monthly";break;case"next-year":e=dayjs(),s=dayjs().add(1,"year").subtract(1,"day"),a="annually";break;case"next-full-year":e=dayjs().add(1,"year").startOf("year"),s=e.endOf("year"),a="annually";break;default:break}this.setStartValue(e.format("DD/MM/YYYY").toString()),this.setEndValue(s.format("DD/MM/YYYY").toString()),this.setGranularityValue(a);let i=new URLSearchParams(window.location.search);i.set(this.granularityInput.id,a),i.set(this.startInput.id,e.format("YYYY/MM/DD").toString()),i.set(this.endInput.id,s.format("YYYY/MM/DD").toString()),window.history.replaceState(null,null,`?${i.toString()}`)}};var V=class extends g{static getModuleName(){return"async-request-list"}initialise(){this.END_STATUSES=this.getEndStatuses(),this.EXPIRED_END_STATUSES=this.getExpiredCheckStatuses(),this.POLLING_FREQUENCY=this.getPollingFrquency(),this.requestList=document.getElementById("dpr-async-request-component"),this.requestData=this.requestList.getAttribute("data-request-data"),this.csrfToken=this.requestList.getAttribute("data-csrf-token"),this.removeActions=document.querySelectorAll(".dpr-remove-requested-report-button"),this.initItemActions(),this.initPollingIntervals()}initPollingIntervals(){return l(this,null,function*(){yield this.checkIfExpired(),this.requestData&&(this.shouldPollExpired(this.requestData)&&(this.expiredInterval=setInterval(()=>l(this,null,function*(){yield this.checkIfExpired()}),"60000")),this.shouldPollStatus(this.requestData)&&(this.pollingInterval=setInterval(()=>l(this,null,function*(){yield this.pollStatus()}),this.POLLING_FREQUENCY)))})}checkIfExpired(){return l(this,null,function*(){yield Promise.all(JSON.parse(this.requestData).map(t=>l(this,null,function*(){if(!this.EXPIRED_END_STATUSES.includes(t.status)){let e=yield this.getExpiredStatus("/dpr/getRequestedExpiredStatus/",t,this.csrfToken);e&&e.isExpired&&(clearInterval(this.expiredInterval),window.location.reload())}})))})}pollStatus(){return l(this,null,function*(){yield Promise.all(JSON.parse(this.requestData).map(t=>l(this,null,function*(){if(!this.END_STATUSES.includes(t.status)){let e=yield this.getRequestStatus(t,this.csrfToken);this.END_STATUSES.includes(e.status)&&(clearInterval(this.pollingInterval),window.location.reload())}})))})}initItemActions(){this.removeActions.forEach(t=>{let e=t.getAttribute("data-execution-id");t.addEventListener("click",s=>l(this,null,function*(){s.preventDefault(),yield this.removeItemFromList(e)}))})}removeItemFromList(t){return l(this,null,function*(){let e;return yield fetch("/dpr/removeRequestedItem/",{method:"post",headers:{Accept:"application/json","Content-Type":"application/json","CSRF-Token":this.csrfToken},body:JSON.stringify({executionId:t})}).then(()=>{window.location.reload()}).catch(s=>console.error("Error:",s)),e})}};var Y=class extends g{static getModuleName(){return"recently-viewed-list"}initialise(){this.EXPIRED_END_STATUSES=this.getExpiredCheckStatuses(),this.POLLING_FREQUENCY="60000",this.viewedList=document.getElementById("dpr-recently-viewed-component"),this.viewedReportData=this.viewedList.getAttribute("data-request-data"),this.csrfToken=this.viewedList.getAttribute("data-csrf-token"),this.removeActions=document.querySelectorAll(".dpr-remove-viewed-report-button"),this.initItemActions(),this.initPollingIntervals()}initPollingIntervals(){return l(this,null,function*(){yield this.checkIsExpired(),this.viewedReportData&&this.shouldPollExpired(this.viewedReportData)&&(this.expiredViewedInterval=setInterval(()=>l(this,null,function*(){yield this.checkIsExpired()}),this.POLLING_FREQUENCY))})}checkIsExpired(){return l(this,null,function*(){yield Promise.all(JSON.parse(this.viewedReportData).map(t=>l(this,null,function*(){if(t.status!=="EXPIRED"){let e=yield this.getExpiredStatus("/dpr/getExpiredStatus/",t,this.csrfToken);e&&e.isExpired&&(window.location.reload(),clearInterval(this.expiredViewedInterval))}})))})}initItemActions(){this.removeActions.forEach(t=>{let e=t.getAttribute("data-execution-id");t.addEventListener("click",s=>l(this,null,function*(){s.preventDefault(),yield this.removeItemFromList(e)}))})}removeItemFromList(t){return l(this,null,function*(){let e;return yield fetch("/dpr/removeViewedItem/",{method:"post",headers:{Accept:"application/json","Content-Type":"application/json","CSRF-Token":this.csrfToken},body:JSON.stringify({executionId:t})}).then(()=>{window.location.reload()}).catch(s=>console.error("Error:",s)),e})}};var f=class extends u{setupCanvas(){this.chartContext=this.getElement().querySelector("canvas"),this.id=this.chartContext.getAttribute("id"),this.chartParams=JSON.parse(this.getElement().getAttribute("data-dpr-chart-data")),this.type=this.getElement().getAttribute("data-dpr-chart-type"),this.setValueSuffix(),this.legend=this.getElement().querySelector(`#js-legend-${this.id}`),this.tooltipDetailsEl=document.getElementById(`dpr-${this.id}-tooltip-details`),this.headlineValuesEl=document.getElementById(`dpr-${this.id}-headline-values`),this.labelElement=document.getElementById(`dpr-${this.id}-label`),this.valueElement=document.getElementById(`dpr-${this.id}-value`),this.legendElement=document.getElementById(`dpr-${this.id}-legend`),this.legendElement=document.getElementById(`dpr-${this.id}-legend`),this.timeseries=this.getElement().getAttribute("data-dpr-chart-timeseries"),(this.timeseries||this.type==="line")&&(this.daterangeInputs=document.querySelectorAll(".dpr-granular-date-range"),this.daterangeInputs&&this.daterangeInputs.length?this.daterangeInputs.forEach(t=>{this.partialStart=t.getAttribute("data-partial-start")==="true",this.partialEnd=t.getAttribute("data-partial-end")==="true"}):(this.partialStart=!1,this.partialEnd=!1)),this.singleDataset=this.chartParams.datasets.length===1}initChart(){Chart.defaults.font.family="GDS Transport",Chart.register(ChartDataLabels),Chart.defaults.font.size=12,this.chart=new Chart(this.chartContext,this.chartData),this.initChartEvents()}getColourPallette(){return[{name:"blue",hex:"#5694ca"},{name:"purple",hex:"#912b88"},{name:"green",hex:"#00703c"},{name:"dark_blue",hex:"#003078"},{name:"orange",hex:"#f47738"},{name:"orange",hex:"#28a197"}]}mapHexColourToName(t,e){let a=e.getColourPallette().find(i=>i.hex===t);return a?a.name:""}createDatasets(t,e){return t.map((s,a)=>{let{label:i,data:r}=s,n=e[a%6]?e[a%6]:e[0];return m({label:i,data:r},n)})}generateChartData(t){let{datasets:e,labels:s}=this.chartParams,{options:a,styling:i,datalabels:r,plugins:n,pluginsOptions:d,toolTipOptions:c,hoverEvent:h}=t;return{type:this.type,data:{labels:s,datasets:this.createDatasets(e,i)},options:k(m(m({responsive:!0,maintainAspectRatio:!1,animation:{duration:0},hover:{animationDuration:0}},a&&a),h&&h),{plugins:k(m(m({legend:{position:"bottom"}},d&&d),r&&{datalabels:r}),{tooltip:m(m({},this.setToolTip()),c&&c)})}),plugins:n&&n.length?[...n]:[]}}setToolTip(){return{backgroundColor:"#FFF",bodyColor:"#000",titleFont:{size:16},bodyFont:{size:16},titleColor:"#000",displayColors:!1,borderWidth:1,borderColor:"#b1b4b6",cornerRadius:0,padding:20,footerFont:{weight:"bold"},animation:{duration:0}}}setHoverValue({label:t,value:e,legend:s,ctx:a}){a.tooltipDetailsEl&&(a.tooltipDetailsEl.style.display="block",a.labelElement.innerHTML=a.singleDataset?`${t}`:`${s}: ${t}`,a.valueElement.innerHTML=`${e}`),a.headlineValuesEl&&(a.headlineValuesEl.style.display="none"),s||(a.legendElement.style.display="none")}setValueSuffix(){this.unit=this.getElement().getAttribute("data-dpr-chart-unit"),this.suffix=this.unit==="percentage"?"%":""}isPercentage(){return this.unit==="percentage"}initChartEvents(){this.chart.canvas.addEventListener("mouseout",t=>{this.tooltipDetailsEl&&(this.tooltipDetailsEl.style.display="none"),this.headlineValuesEl&&(this.headlineValuesEl.style.display="block")})}};var _=class extends f{static getModuleName(){return"bar-chart"}initialise(){this.setupCanvas(),this.settings=this.initSettings(),this.chartData=this.generateChartData(this.settings),this.initChart(this.chartData)}initSettings(){return{options:this.setOptions(),toolTipOptions:this.setToolTipOptions(),datalabels:this.setDataLabels(),styling:this.setDatasetStyling()}}setDatasetStyling(){return this.getColourPallette().map(e=>k(m({borderColor:e.hex},this.setBackgroundColour(e.hex)),{datalabels:{align:"center",anchor:"center"}}))}setBackgroundColour(t){let e=this.chartParams.labels.length-1,s=[],a=[],i=[];return this.chartParams.labels.forEach((r,n)=>{this.partialEnd&&n===e||this.partialStart&&n===0?(s.push(t),a.push(3),i.push("#b1b4b6")):(s.push(t),a.push(0),i.push(t))}),{backgroundColor:s,borderWidth:a,borderColor:i}}setToolTipOptions(){let t=this;return{callbacks:{title(e){let{label:s,dataset:a}=e[0],{label:i}=a;return t.singleDataset?`${s}`:`${i}: ${s}`},label(e){let{label:s}=e,{data:a,label:i}=e.dataset,r=`${a[e.dataIndex]}${t.suffix}`;return t.setHoverValue({label:s,value:r,legend:i,ctx:t}),r}}}}setOptions(){let{indexAxis:t,stacked:e}=this.chartParams;return m({indexAxis:t||"x"},e&&{scales:{x:{stacked:!0},y:{stacked:!0}}})}setDataLabels(){return{color:"#FFF",display:()=>!this.timeseries,formatter:t=>`${t}${this.suffix}`,labels:{title:{font:{weight:"bold",size:16,color:"#FFF"}}}}}};var Q=class extends f{static getModuleName(){return"doughnut-chart"}initialise(){this.setupCanvas(),this.settings=this.initSettings(),this.chartData=this.generateChartData(this.settings),this.initChart(this.chartData)}initSettings(){return{options:this.setOptions(),styling:this.setDatasetStyling(),datalabels:this.setDataLabels(),pluginsOptions:this.setPluginsOptions(),toolTipOptions:this.setToolTipOptions(),plugins:this.setPlugins()}}setDatasetStyling(){let e=this.getColourPallette().map(s=>s.hex);return[{backgroundColor:[...e,...e],hoverOffset:4,datalabels:{anchor:"center",borderWidth:0}}]}setOptions(){return{cutout:this.chartParams.datasets.length===1?"50%":"20%"}}setPluginsOptions(){return{legend:{display:!0,position:"bottom"}}}setPlugins(){let t=[];return this.chartParams.datasets.length===1&&!this.isPercentage&&t.push(this.setCentralText()),t}setCentralText(){return{id:"text",beforeDraw(t){let{width:e}=t,{height:s}=t,{ctx:a}=t;a.textBaseline="middle";let i=2.5;a.font=`100 ${i}em GDS Transport`,a.fillStyle=" #505a5f";let n=t.data.datasets[0].data.reduce((W,G)=>W+G,0),d=Math.round((e-a.measureText(n).width)/2),c=s/2;a.fillText(n,d,c),a.save(),a.textBaseline="middle",i=1,a.font=`100 ${i}em GDS Transport`,a.fillStyle=" #505a5f";let h="Total",v=Math.round((e-a.measureText(h).width)/2),E=c+30;a.fillText(h,v,E),a.save()}}}setLegend(){let t=this,{legend:e,suffix:s}=this;return{id:"legend",beforeInit(a){let i=document.createElement("ul"),{labels:r}=a.data,{backgroundColor:n,data:d}=a.data.datasets[0];return r.forEach((c,h)=>{let v=h%n.length,E=n[v],W=t.mapHexColourToName(E,t),G=a.data.datasets.length===1?`${d[h]}${s}`:"";i.innerHTML+=`
|
|
29
|
+
<li aria-label="${c} ${G}">
|
|
30
|
+
<span class="chart-colour__${W}">${G}</span>
|
|
31
|
+
${c}
|
|
2428
32
|
</li>
|
|
2429
|
-
`;
|
|
2430
|
-
|
|
2431
|
-
legend.appendChild(ul);
|
|
2432
|
-
return legend.appendChild(ul)
|
|
2433
|
-
},
|
|
2434
|
-
}
|
|
2435
|
-
}
|
|
2436
|
-
|
|
2437
|
-
setToolTipOptions() {
|
|
2438
|
-
const ctx = this;
|
|
2439
|
-
return {
|
|
2440
|
-
callbacks: {
|
|
2441
|
-
title(context) {
|
|
2442
|
-
const { label, dataset } = context[0];
|
|
2443
|
-
const { label: establishmentId } = dataset;
|
|
2444
|
-
const title = ctx.singleDataset ? `${label}` : `${establishmentId}: ${label}`;
|
|
2445
|
-
return title
|
|
2446
|
-
},
|
|
2447
|
-
label(context) {
|
|
2448
|
-
const { label, parsed: value, dataset } = context;
|
|
2449
|
-
const { label: legend } = dataset;
|
|
2450
|
-
const dataArr = dataset.data;
|
|
2451
|
-
|
|
2452
|
-
let toolipValue = `${value}${ctx.suffix}`;
|
|
2453
|
-
|
|
2454
|
-
if (!ctx.isPercentage) {
|
|
2455
|
-
const val = dataArr.reduce((sum, d) => sum + Number(d), 0);
|
|
2456
|
-
const percentage = `${((value * 100) / val).toFixed(2)}%`;
|
|
2457
|
-
toolipValue = ctx.singleDataset
|
|
2458
|
-
? `${toolipValue} (${percentage})`
|
|
2459
|
-
: `${legend}: ${toolipValue} (${percentage})`;
|
|
2460
|
-
ctx.setHoverValue({ label, value: toolipValue, legend, ctx });
|
|
2461
|
-
} else {
|
|
2462
|
-
toolipValue = `${toolipValue}`;
|
|
2463
|
-
ctx.setHoverValue({ label, value: toolipValue, legend, ctx });
|
|
2464
|
-
}
|
|
2465
|
-
|
|
2466
|
-
return toolipValue
|
|
2467
|
-
},
|
|
2468
|
-
},
|
|
2469
|
-
}
|
|
2470
|
-
}
|
|
2471
|
-
|
|
2472
|
-
setDataLabels() {
|
|
2473
|
-
const ctx = this;
|
|
2474
|
-
return {
|
|
2475
|
-
textAlign: 'center',
|
|
2476
|
-
color: '#FFF',
|
|
2477
|
-
display: (context) => {
|
|
2478
|
-
const { dataset, dataIndex } = context;
|
|
2479
|
-
const value = dataset.data[dataIndex];
|
|
2480
|
-
const total = dataset.data.reduce((a, c) => a + c, 0);
|
|
2481
|
-
const percentage = (value / total) * 100;
|
|
2482
|
-
return percentage > 4
|
|
2483
|
-
},
|
|
2484
|
-
formatter: (value, context) => {
|
|
2485
|
-
const { dataset } = context;
|
|
2486
|
-
const label = ctx.singleDataset
|
|
2487
|
-
? `${value}${this.suffix}`
|
|
2488
|
-
: `${value}${this.suffix}
|
|
2489
|
-
${dataset.label}`;
|
|
2490
|
-
|
|
2491
|
-
return label
|
|
2492
|
-
},
|
|
2493
|
-
labels: {
|
|
2494
|
-
title: {
|
|
2495
|
-
font: {
|
|
2496
|
-
weight: 'bold',
|
|
2497
|
-
size: 16,
|
|
2498
|
-
color: '#FFF',
|
|
2499
|
-
},
|
|
2500
|
-
},
|
|
2501
|
-
},
|
|
2502
|
-
}
|
|
2503
|
-
}
|
|
2504
|
-
}
|
|
2505
|
-
|
|
2506
|
-
/* eslint-disable class-methods-use-this */
|
|
2507
|
-
|
|
2508
|
-
class LineChartVisualisation extends ChartVisualisation {
|
|
2509
|
-
static getModuleName() {
|
|
2510
|
-
return 'line-chart'
|
|
2511
|
-
}
|
|
2512
|
-
|
|
2513
|
-
initialise() {
|
|
2514
|
-
this.setupCanvas();
|
|
2515
|
-
this.settings = this.initSettings();
|
|
2516
|
-
this.chartData = this.generateChartData(this.settings);
|
|
2517
|
-
this.lastIndex = this.chartData.data.labels.length - 1;
|
|
2518
|
-
this.initChart(this.chartData);
|
|
2519
|
-
}
|
|
2520
|
-
|
|
2521
|
-
initSettings() {
|
|
2522
|
-
return {
|
|
2523
|
-
options: this.setOptions(),
|
|
2524
|
-
toolTipOptions: this.setToolTipOptions(),
|
|
2525
|
-
styling: this.setDatasetStyling(),
|
|
2526
|
-
}
|
|
2527
|
-
}
|
|
2528
|
-
|
|
2529
|
-
setPartialStyle(ctx) {
|
|
2530
|
-
let style;
|
|
2531
|
-
if ((this.partialEnd && ctx.p1DataIndex === this.lastIndex) || (this.partialStart && ctx.p1DataIndex === 1)) {
|
|
2532
|
-
style = [6, 6];
|
|
2533
|
-
}
|
|
2534
|
-
return style
|
|
2535
|
-
}
|
|
2536
|
-
|
|
2537
|
-
setDatasetStyling() {
|
|
2538
|
-
const pallette = this.getColourPallette();
|
|
2539
|
-
return pallette.map((colour) => {
|
|
2540
|
-
return {
|
|
2541
|
-
borderColor: colour.hex,
|
|
2542
|
-
backgroundColor: colour.hex,
|
|
2543
|
-
pointStyle: 'circle',
|
|
2544
|
-
pointRadius: 4,
|
|
2545
|
-
pointHoverRadius: 10,
|
|
2546
|
-
pointHitRadius: 20,
|
|
2547
|
-
datalabels: {
|
|
2548
|
-
display: false,
|
|
2549
|
-
},
|
|
2550
|
-
segment: {
|
|
2551
|
-
borderDash: (ctx) => this.setPartialStyle(ctx),
|
|
2552
|
-
},
|
|
2553
|
-
}
|
|
2554
|
-
})
|
|
2555
|
-
}
|
|
2556
|
-
|
|
2557
|
-
setToolTipOptions() {
|
|
2558
|
-
const ctx = this;
|
|
2559
|
-
return {
|
|
2560
|
-
callbacks: {
|
|
2561
|
-
title(context) {
|
|
2562
|
-
const { label, dataset } = context[0];
|
|
2563
|
-
const { label: establishmentId } = dataset;
|
|
2564
|
-
const title = ctx.singleDataset ? `${label}` : `${establishmentId}: ${label}`;
|
|
2565
|
-
return title
|
|
2566
|
-
},
|
|
2567
|
-
label(context) {
|
|
2568
|
-
const { label } = context;
|
|
2569
|
-
const { data, label: legend } = context.dataset;
|
|
2570
|
-
const value = data[context.dataIndex];
|
|
2571
|
-
ctx.setHoverValue({ label, value, legend, ctx });
|
|
2572
|
-
return value
|
|
2573
|
-
},
|
|
2574
|
-
},
|
|
2575
|
-
}
|
|
2576
|
-
}
|
|
2577
|
-
|
|
2578
|
-
setOptions() {
|
|
2579
|
-
return {
|
|
2580
|
-
scales: {
|
|
2581
|
-
y: {
|
|
2582
|
-
min: 0,
|
|
2583
|
-
ticks: {
|
|
2584
|
-
fontSize: 12,
|
|
2585
|
-
},
|
|
2586
|
-
},
|
|
2587
|
-
x: {
|
|
2588
|
-
ticks: {
|
|
2589
|
-
fontSize: 12,
|
|
2590
|
-
},
|
|
2591
|
-
},
|
|
2592
|
-
},
|
|
2593
|
-
}
|
|
2594
|
-
}
|
|
2595
|
-
}
|
|
2596
|
-
|
|
2597
|
-
class Pagination$1 extends DprClientClass {
|
|
2598
|
-
static getModuleName() {
|
|
2599
|
-
return 'scorecard'
|
|
2600
|
-
}
|
|
2601
|
-
|
|
2602
|
-
initialise() {
|
|
2603
|
-
this.scorecard = this.getElement();
|
|
2604
|
-
this.value = this.scorecard.querySelector('.dpr-scorecard__value');
|
|
2605
|
-
this.ragStatus = this.scorecard.querySelector('.dpr-scorecard__value-description');
|
|
2606
|
-
this.initHover();
|
|
2607
|
-
}
|
|
2608
|
-
|
|
2609
|
-
initHover() {
|
|
2610
|
-
this.value.addEventListener('mouseover', async () => {
|
|
2611
|
-
this.ragStatus.classList.add('dpr-scorecard__value-description--active');
|
|
2612
|
-
});
|
|
2613
|
-
this.value.addEventListener('mouseout', async () => {
|
|
2614
|
-
this.ragStatus.classList.remove('dpr-scorecard__value-description--active');
|
|
2615
|
-
});
|
|
2616
|
-
}
|
|
2617
|
-
}
|
|
2618
|
-
|
|
2619
|
-
/* eslint-disable no-new */
|
|
2620
|
-
|
|
2621
|
-
/**
|
|
2622
|
-
* Initialise all components
|
|
2623
|
-
*
|
|
2624
|
-
* Use the `data-dpr-module` attributes to find, instantiate and initialise all the
|
|
2625
|
-
* components provided as part of DPR Frontend.
|
|
2626
|
-
*
|
|
2627
|
-
*/
|
|
2628
|
-
function initAll() {
|
|
2629
|
-
const loadingHelper = new DprLoadingHelper();
|
|
2630
|
-
|
|
2631
|
-
const components = [
|
|
2632
|
-
Autocomplete,
|
|
2633
|
-
CardGroup,
|
|
2634
|
-
Columns,
|
|
2635
|
-
AsyncFilters$1,
|
|
2636
|
-
InteractiveFilters,
|
|
2637
|
-
Pagination,
|
|
2638
|
-
DataTable,
|
|
2639
|
-
DprAsyncPolling,
|
|
2640
|
-
DprCatalogueSearch,
|
|
2641
|
-
BookmarkToggle,
|
|
2642
|
-
DateInput,
|
|
2643
|
-
DprAsyncRequestList,
|
|
2644
|
-
DprRecentlyViewedList,
|
|
2645
|
-
DateRangeInput,
|
|
2646
|
-
ShowMore,
|
|
2647
|
-
BarChartVisualisation,
|
|
2648
|
-
DoughnutChartVisualisation,
|
|
2649
|
-
LineChartVisualisation,
|
|
2650
|
-
AsyncFilters,
|
|
2651
|
-
Pagination$1,
|
|
2652
|
-
IconButtonList,
|
|
2653
|
-
DownloadMessage,
|
|
2654
|
-
DprSyncLoading,
|
|
2655
|
-
GranularDateRangeInput,
|
|
2656
|
-
];
|
|
2657
|
-
|
|
2658
|
-
const customParseFormat = window.dayjs_plugin_customParseFormat;
|
|
2659
|
-
dayjs.extend(customParseFormat);
|
|
2660
|
-
|
|
2661
|
-
components.forEach((Component) => {
|
|
2662
|
-
const $elements = document.querySelectorAll(`[data-dpr-module="${Component.getModuleName()}"]`);
|
|
2663
|
-
$elements.forEach(async ($element) => {
|
|
2664
|
-
try {
|
|
2665
|
-
new Component($element, loadingHelper).initialise();
|
|
2666
|
-
} catch (error) {
|
|
2667
|
-
console.log(error);
|
|
2668
|
-
}
|
|
2669
|
-
});
|
|
2670
|
-
});
|
|
2671
|
-
}
|
|
2672
|
-
|
|
2673
|
-
export { initAll };
|
|
33
|
+
`}),e.appendChild(i),e.appendChild(i)}}}setToolTipOptions(){let t=this;return{callbacks:{title(e){let{label:s,dataset:a}=e[0],{label:i}=a;return t.singleDataset?`${s}`:`${i}: ${s}`},label(e){let{label:s,parsed:a,dataset:i}=e,{label:r}=i,n=i.data,d=`${a}${t.suffix}`;if(t.isPercentage)d=`${d}`,t.setHoverValue({label:s,value:d,legend:r,ctx:t});else{let c=n.reduce((v,E)=>v+Number(E),0),h=`${(a*100/c).toFixed(2)}%`;d=t.singleDataset?`${d} (${h})`:`${r}: ${d} (${h})`,t.setHoverValue({label:s,value:d,legend:r,ctx:t})}return d}}}}setDataLabels(){let t=this;return{textAlign:"center",color:"#FFF",display:e=>{let{dataset:s,dataIndex:a}=e,i=s.data[a],r=s.data.reduce((d,c)=>d+c,0);return i/r*100>4},formatter:(e,s)=>{let{dataset:a}=s;return t.singleDataset?`${e}${this.suffix}`:`${e}${this.suffix}
|
|
34
|
+
${a.label}`},labels:{title:{font:{weight:"bold",size:16,color:"#FFF"}}}}}};var U=class extends f{static getModuleName(){return"line-chart"}initialise(){this.setupCanvas(),this.settings=this.initSettings(),this.chartData=this.generateChartData(this.settings),this.lastIndex=this.chartData.data.labels.length-1,this.initChart(this.chartData)}initSettings(){return{options:this.setOptions(),toolTipOptions:this.setToolTipOptions(),styling:this.setDatasetStyling()}}setPartialStyle(t){let e;return(this.partialEnd&&t.p1DataIndex===this.lastIndex||this.partialStart&&t.p1DataIndex===1)&&(e=[6,6]),e}setDatasetStyling(){return this.getColourPallette().map(e=>({borderColor:e.hex,backgroundColor:e.hex,pointStyle:"circle",pointRadius:4,pointHoverRadius:10,pointHitRadius:20,datalabels:{display:!1},segment:{borderDash:s=>this.setPartialStyle(s)}}))}setToolTipOptions(){let t=this;return{callbacks:{title(e){let{label:s,dataset:a}=e[0],{label:i}=a;return t.singleDataset?`${s}`:`${i}: ${s}`},label(e){let{label:s}=e,{data:a,label:i}=e.dataset,r=a[e.dataIndex];return t.setHoverValue({label:s,value:r,legend:i,ctx:t}),r}}}}setOptions(){return{scales:{y:{min:0,ticks:{fontSize:12}},x:{ticks:{fontSize:12}}}}}};var H=class extends u{static getModuleName(){return"scorecard"}initialise(){this.scorecard=this.getElement(),this.value=this.scorecard.querySelector(".dpr-scorecard__value"),this.ragStatus=this.scorecard.querySelector(".dpr-scorecard__value-description"),this.initHover()}initHover(){this.value.addEventListener("mouseover",()=>l(this,null,function*(){this.ragStatus.classList.add("dpr-scorecard__value-description--active")})),this.value.addEventListener("mouseout",()=>l(this,null,function*(){this.ragStatus.classList.remove("dpr-scorecard__value-description--active")}))}};function Qe(){let o=new w,t=[O,S,q,R,T,P,C,F,x,I,$,V,Y,N,D,_,Q,U,L,H,A,B,M,j],e=window.dayjs_plugin_customParseFormat;dayjs.extend(e),t.forEach(s=>{document.querySelectorAll(`[data-dpr-module="${s.getModuleName()}"]`).forEach(i=>l(null,null,function*(){try{new s(i,o).initialise()}catch(r){console.log(r)}}))})}export{Qe as initAll};
|