From 205cbe2fbb3e29eb5930b307250b90a3d09a433d Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Sat, 26 May 2018 17:13:53 +0200 Subject: Several improvements on multi-user chat --- .../sprinkles/core/assets/SiteAssets/js/chat.js | 149 +- .../core/assets/SiteAssets/js/fontawesome.js | 1912 +++++++++++++++++++- .../sprinkles/core/templates/pages/index.html.twig | 44 +- 3 files changed, 2001 insertions(+), 104 deletions(-) (limited to 'main/app/sprinkles') diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js index 4e766df..76565cf 100644 --- a/main/app/sprinkles/core/assets/SiteAssets/js/chat.js +++ b/main/app/sprinkles/core/assets/SiteAssets/js/chat.js @@ -91,57 +91,14 @@ function InitializeChatServer() { }); } - if (!ServerMessage) { // NO SERVER MESSAGE -> SENT BY USER - // DECRYPT MESSAGE - options = { - message: openpgp.message.readArmored("-----BEGIN PGP MESSAGE-----\r\nVersion: OpenPGP.js v3.0.9\r\nComment: https://openpgpjs.org\r\n\r\n" + Message + "\r\n\-----END PGP MESSAGE-----\r\n"), // FORMAT MESSAGE - publicKeys: openpgp.key.readArmored(PublicKey[Username]).keys, // FOR VERIFICATION - privateKeys: [privKeyObj] - }; - openpgp.decrypt(options).then(function (plaintext) { - plaintext ? console.log("%c[ENCRYPTION LOGGER] Decrypting succeeded!", "font-family: monospace; white-space: pre; display: inline-block; border-radius: 10px; padding: 2px; color: #20c20e; background-color: black;") : console.log("%c[ENCRYPTION LOGGER] Decrypting failed!", "font-family: monospace; white-space: pre; display: inline-block; border-radius: 10px; padding: 2px; color: red; background-color: black;"); - DecryptedMessage = plaintext.data; - if (WasHimself) { // -> MESSAGE WAS FROM HIMSELF -> Don't write to chat, as its done directly (on enter function at the bottom, for performance) - console.log("%c[CHATSOCKET LOGGER] Message sending succeeded!", "color: darkorange"); - } else if (!WasHimself) { // -> MESSAGE WAS FROM OTHER USER -> decrypt - console.log("%c[CHATSOCKET LOGGER] You received a message!", "color: darkorange"); - NotifySound.play(); - Push.create(Fullname, { // CREATE NOTIFICATION - body: DecryptedMessage, - icon: Avatar, - timeout: 5000, - onClick: function () { - window.focus(); - this.close(); - } - }); - if (!LastMessage.hasClass("MessageReceived")) { // CHECK IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> IF NOT, CREATE NEW 'ALONE' MESSAGE - CurrentChatMessagesWindow.append("
" + DecryptedMessage + "
"); - } else if (LastMessage.hasClass("MessageReceived")) { // IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> CREATE WITH CORRESPONDING CLASSES FOR DESIGN - CurrentChatMessagesWindow.append("
" + DecryptedMessage + "
"); - if (LastMessage.hasClass("AloneMessage")) { - LastMessage.removeClass("AloneMessage"); - LastMessage.addClass("TopMessage"); - } else if (LastMessage.hasClass("BottomMessage")) { - LastMessage.removeClass("BottomMessage"); - LastMessage.addClass("MiddleMessage"); - } - } - } - }); - - // CONVERT LINKS TO LINKS - $('.ChatMessage').linkify({ - target: "_blank" - }); - } else { // SERVER MESSAGE + if (ServerMessage) { // SERVER MESSAGE if (ServerMessageType === "GroupJoin") { // TYPE: USER JOINED A GROUP if (WasHimself) { // HIMSELF JOINED A GROUP -> NOTIFY CurrentChatMessagesWindow.empty(); // -> EMPTY MESSAGES ON NEW GROUP JOIN CurrentChatMessagesWindow.append("
" + GroupName + "

"); ReplaceServerMessage("YouGroupJoin"); // FOR TRANSLATION console.log("%c[CHATSOCKET LOGGER] You joined the group " + GroupName + "!", "color: darkorange"); - } else if (!WasHimself) { // OTHER USER JOINED A GROUP -> NOTIFY + } else { // OTHER USER JOINED A GROUP -> NOTIFY CurrentChatMessagesWindow.append("
" + Username + "

"); ReplaceServerMessage("UserGroupJoin"); // FOR TRANSLATION console.log("%c[CHATSOCKET LOGGER] " + Username + " joined the group!", "color: darkorange"); @@ -158,10 +115,10 @@ function InitializeChatServer() { CurrentChatMessagesWindow.append("
" + TypingIndicatorAnimationElement + "
"); console.log("%c[CHAT TYPING LOGGER] " + Username + " started typing!", "color: gray"); } - } else if (!State) { // IF 'SOMEBODY' STOPPED TYPING + } else { // IF 'SOMEBODY' STOPPED TYPING if (WasHimself) { // IDENTIFY 'SOMEBODY' -> WAS HIMSELF -> NOT THAT IMPORTANT (USER KNOWS WHEN HE STOPS TYPING?) console.log("%c[CHAT TYPING LOGGER] You stopped typing!", "color: gray"); - } else if (!WasHimself) { // IDENTIFY 'SOMEBODY' -> WAS OTHER USER -> REMOVE TYPING ANIMATION + } else { // IDENTIFY 'SOMEBODY' -> WAS OTHER USER -> REMOVE TYPING ANIMATION //TypingIndicatorMessage.fadeOut("fast"); TypingIndicatorMessage.remove(); console.log("%c[CHAT TYPING LOGGER] " + Username + " stopped typing!", "color: gray"); @@ -170,7 +127,7 @@ function InitializeChatServer() { } else if (ServerMessageType === "Verify") { // TYPE: SERVER CHECKED ACCESS -- MOSTLY HANDLED IN BACKEND if (Granted) { console.log("%c[CHATSOCKET LOGGER] Chat access granted!", "color: green"); - } else if (!Granted) { + } else { triggerErrorPopup("ChatNotAllowed"); console.log("%c[CHATSOCKET LOGGER] Chat access denied!", "color: red"); } @@ -181,13 +138,59 @@ function InitializeChatServer() { ChatMessages.hide(); $(".SelectedReceiver > *").addClass("animated slideInRight"); $(".ChatTab .headerWrap .header .HeaderCaption").text(ReceiversUsername); + $(".ChatTab .headerWrap .LeftButtonHeader").html(""); // REPLACE MENU BUTTON WITH BACK BUTTON SelectedReceiver.prepend("
"); SelectedReceiver.show(); - $(".SelectedReceiver #ChatMessages[data-username=" + ReceiversUsername + "]").show(); - } else if (!Success) { + CurrentChatMessagesWindow.show(); + } else { console.log("%c[CHATSOCKET LOGGER] Setting receiver failed!", "color: red"); } } + } else { // NO SERVER MESSAGE -> SENT BY USER + // DECRYPT MESSAGE + options = { + message: openpgp.message.readArmored("-----BEGIN PGP MESSAGE-----\r\nVersion: OpenPGP.js v3.0.9\r\nComment: https://openpgpjs.org\r\n\r\n" + Message + "\r\n\-----END PGP MESSAGE-----\r\n"), // FORMAT MESSAGE + publicKeys: openpgp.key.readArmored(PublicKey[Username]).keys, // FOR VERIFICATION + privateKeys: [privKeyObj] + }; + openpgp.decrypt(options).then(function (plaintext) { + plaintext ? console.log("%c[ENCRYPTION LOGGER] Decrypting succeeded!", "font-family: monospace; white-space: pre; display: inline-block; border-radius: 10px; padding: 2px; color: #20c20e; background-color: black;") : console.log("%c[ENCRYPTION LOGGER] Decrypting failed!", "font-family: monospace; white-space: pre; display: inline-block; border-radius: 10px; padding: 2px; color: red; background-color: black;"); + DecryptedMessage = plaintext.data; + if (WasHimself) { // -> MESSAGE WAS FROM HIMSELF -> Don't write to chat, as its done directly (on enter function at the bottom, for performance) + console.log("%c[CHATSOCKET LOGGER] Message sending succeeded!", "color: darkorange"); + } else { // -> MESSAGE WAS FROM OTHER USER -> decrypt + console.log("%c[CHATSOCKET LOGGER] You received a message!", "color: darkorange"); + NotifySound.play(); + Push.create(Fullname, { // CREATE NOTIFICATION + body: DecryptedMessage, + icon: Avatar, + timeout: 5000, + onClick: function () { + window.focus(); + this.close(); + } + }); + if (LastMessage.hasClass("MessageReceived")) { + if (LastMessage.hasClass("MessageReceived")) { // IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> CREATE WITH CORRESPONDING CLASSES FOR DESIGN + CurrentChatMessagesWindow.append("
" + DecryptedMessage + "
"); + if (LastMessage.hasClass("AloneMessage")) { + LastMessage.removeClass("AloneMessage"); + LastMessage.addClass("TopMessage"); + } else if (LastMessage.hasClass("BottomMessage")) { + LastMessage.removeClass("BottomMessage"); + LastMessage.addClass("MiddleMessage"); + } + } + } else { // CHECK IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> IF NOT, CREATE NEW 'ALONE' MESSAGE + CurrentChatMessagesWindow.append("
" + DecryptedMessage + "
"); + } + } + }); + + // CONVERT LINKS TO LINKS + $('.ChatMessage').linkify({ + target: "_blank" + }); } // SCROLL TO BOTTOM ON NEW MESSAGE OF ANY KIND if ((CurrentChatMessagesWindow.scrollTop() + CurrentChatMessagesWindow.innerHeight() < CurrentChatMessagesWindow[0].scrollHeight)) { @@ -230,27 +233,6 @@ function InitializeChatServer() { ChatSocket.send(JSON.stringify({ClientMessageType: "TypingState", State: state})); } - $(window).unload(function () { - sendStopTyping(); // USER STOPS TYPING ON PAGE CLOSE ETC - }); - - // SUBSCRIBE TO CHAT - SubscribeTextInput.keyup(function (e) { - if (ChatSocket.readyState === 1) { - if (e.keyCode === 13 && SubscribeTextInput.val().length > 0) { - subscribe(SubscribeTextInput.val()); - } - } else { - NotConnectedAnymore(); - } - }); - - function subscribe(channel) { - //ChatSocket.send(JSON.stringify({ClientMessageType: "Subscribe", Channel: channel})); - SubscribeTextInput.hide(); - ChatTextInput.show(); - } - // SEND MESSAGE FROM INPUT FIELD ChatTextInput.keyup(function (e) { if (ChatSocket.readyState === 1) { @@ -315,11 +297,6 @@ function InitializeChatServer() { } }); - function NotConnectedAnymore() { - console.log("%c[CHATSOCKET LOGGER] Not connected to Websocket anymore! Trying to connect again...", "color: red"); - InitializeChatServer(); - } - // SET RECEIVER $(document).on("click", ".ReceiverSelector", function () { ReceiversUsername = $(this).attr("data-username"); @@ -330,7 +307,25 @@ function InitializeChatServer() { ReceiversUsername: ReceiversUsername })); }); + + // SEVERAL THINGS WHICH DON'T MATCH ANY OTHER SECTION + function NotConnectedAnymore() { + console.log("%c[CHATSOCKET LOGGER] Not connected to Websocket anymore! Trying to connect again...", "color: red"); + InitializeChatServer(); + } + + // BACK BUTTON + $(document).on("click", "#BackToChatSelectorButton", function () { + $(".SelectReceiver > *").addClass("animated slideInLeft"); + $(".ChatTab .headerWrap .LeftButtonHeader").html(""); // REPLACE BACK BUTTON WITH MENU BUTTON + SelectedReceiver.hide(); + SelectReceiver.show(); + }); + + $(window).unload(function () { + sendStopTyping(); // USER STOPS TYPING ON PAGE UNLOAD + }); }; } -InitializeChatServer(); \ No newline at end of file +InitializeChatServer(); // EVERYTHING IN ONE FUNCTION FOR SIMPLICITY (GLOBAL FUNCTIONS ETC) \ No newline at end of file diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/fontawesome.js b/main/app/sprinkles/core/assets/SiteAssets/js/fontawesome.js index bff7ed3..5b40070 100644 --- a/main/app/sprinkles/core/assets/SiteAssets/js/fontawesome.js +++ b/main/app/sprinkles/core/assets/SiteAssets/js/fontawesome.js @@ -2,4 +2,1914 @@ * Font Awesome Free 5.0.10 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ -!function(){"use strict";var c={};try{"undefined"!=typeof window&&(c=window)}catch(c){}var l=(c.navigator||{}).userAgent,h=void 0===l?"":l,v=c,z=(~h.indexOf("MSIE")||h.indexOf("Trident/"),"___FONT_AWESOME___"),e=function(){try{return!0}catch(c){return!1}}(),a=[1,2,3,4,5,6,7,8,9,10],m=a.concat([11,12,13,14,15,16,17,18,19,20]);["xs","sm","lg","fw","ul","li","border","pull-left","pull-right","spin","pulse","rotate-90","rotate-180","rotate-270","flip-horizontal","flip-vertical","stack","stack-1x","stack-2x","inverse","layers","layers-text","layers-counter"].concat(a.map(function(c){return c+"x"})).concat(m.map(function(c){return"w-"+c}));var s=v||{};s[z]||(s[z]={}),s[z].styles||(s[z].styles={}),s[z].hooks||(s[z].hooks={}),s[z].shims||(s[z].shims=[]);var t=s[z],f=Object.assign||function(c){for(var l=1;l>>0;h--;)l[h]=c[h];return l}function X(c){return c.classList?D(c.classList):(c.getAttribute("class")||"").split(" ").filter(function(c){return c})}function Y(c,l){var h,v=l.split("-"),z=v[0],e=v.slice(1).join("-");return z!==c||""===e||(h=e,~d.indexOf(h))?null:e}function U(c){return(""+c).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function K(h){return Object.keys(h||{}).reduce(function(c,l){return c+(l+": ")+h[l]+";"},"")}function G(c){return c.size!==I.size||c.x!==I.x||c.y!==I.y||c.rotate!==I.rotate||c.flipX||c.flipY}function J(c){var l=c.transform,h=c.containerWidth,v=c.iconWidth;return{outer:{transform:"translate("+h/2+" 256)"},inner:{transform:"translate("+32*l.x+", "+32*l.y+") "+" "+("scale("+l.size/16*(l.flipX?-1:1)+", "+l.size/16*(l.flipY?-1:1)+") ")+" "+("rotate("+l.rotate+" 0 0)")},path:{transform:"translate("+v/2*-1+" -256)"}}}var Q={x:0,y:0,width:"100%",height:"100%"},Z=function(c){var l=c.children,h=c.attributes,v=c.main,z=c.mask,e=c.transform,a=v.width,m=v.icon,s=z.width,t=z.icon,f=J({transform:e,containerWidth:s,iconWidth:a}),r={tag:"rect",attributes:k({},Q,{fill:"white"})},M={tag:"g",attributes:k({},f.inner),children:[{tag:"path",attributes:k({},m.attributes,f.path,{fill:"black"})}]},i={tag:"g",attributes:k({},f.outer),children:[M]},n="mask-"+B(),H="clip-"+B(),V={tag:"defs",children:[{tag:"clipPath",attributes:{id:H},children:[t]},{tag:"mask",attributes:k({},Q,{id:n,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[r,i]}]};return l.push(V,{tag:"rect",attributes:k({fill:"currentColor","clip-path":"url(#"+H+")",mask:"url(#"+n+")"},Q)}),{children:l,attributes:h}},$=function(c){var l=c.children,h=c.attributes,v=c.main,z=c.transform,e=K(c.styles);if(0"+a.map(uc).join("")+""}var dc=function(){};function pc(c){return"string"==typeof(c.getAttribute?c.getAttribute(g):null)}var bc={replace:function(c){var l=c[0],h=c[1].map(function(c){return uc(c)}).join("\n");if(l.parentNode&&l.outerHTML)l.outerHTML=h+(O.keepOriginalSource&&"svg"!==l.tagName.toLowerCase()?"\x3c!-- "+l.outerHTML+" --\x3e":"");else if(l.parentNode){var v=document.createElement("span");l.parentNode.replaceChild(v,l),v.outerHTML=h}},nest:function(c){var l=c[0],h=c[1];if(~X(l).indexOf(O.replacementClass))return bc.replace(c);var v=new RegExp(O.familyPrefix+"-.*");delete h[0].attributes.style;var z=h[0].attributes.class.split(" ").reduce(function(c,l){return l===O.replacementClass||l.match(v)?c.toSvg.push(l):c.toNode.push(l),c},{toNode:[],toSvg:[]});h[0].attributes.class=z.toSvg.join(" ");var e=h.map(function(c){return uc(c)}).join("\n");l.setAttribute("class",z.toNode.join(" ")),l.setAttribute(g,""),l.innerHTML=e}};function gc(h,c){var v="function"==typeof c?c:dc;0===h.length?v():(m.requestAnimationFrame||function(c){return c()})(function(){var c=!0===O.autoReplaceSvg?bc.replace:bc[O.autoReplaceSvg]||bc.replace,l=sc.begin("mutate");h.map(c),l(),v()})}var yc=!1;var wc=null;var kc=function(c){var l=c.getAttribute("style"),h=[];return l&&(h=l.split(";").reduce(function(c,l){var h=l.split(":"),v=h[0],z=h.slice(1);return v&&0li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1em}.svg-inline--fa.fa-stack-2x{height:2em;width:2em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}";if("fa"!==l||h!==c){var z=new RegExp("\\.fa\\-","g"),e=new RegExp("\\."+c,"g");v=v.replace(z,"."+l+"-").replace(e,"."+h)}return v};var Qc=function(){function c(){y(this,c),this.definitions={}}return w(c,[{key:"add",value:function(){for(var l=this,c=arguments.length,h=Array(c),v=0;v>> 0; h--;) l[h] = c[h]; + return l + } + + function X(c) { + return c.classList ? D(c.classList) : (c.getAttribute("class") || "").split(" ").filter(function (c) { + return c + }) + } + + function Y(c, l) { + let h; + const v = l.split("-"), z = v[0], e = v.slice(1).join("-"); + return z !== c || "" === e || (h = e, ~d.indexOf(h)) ? null : e + } + + function U(c) { + return ("" + c).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(//g, ">") + } + + function K(h) { + return Object.keys(h || {}).reduce(function (c, l) { + return c + (l + ": ") + h[l] + ";" + }, "") + } + + function G(c) { + return c.size !== I.size || c.x !== I.x || c.y !== I.y || c.rotate !== I.rotate || c.flipX || c.flipY + } + + function J(c) { + const l = c.transform, h = c.containerWidth, v = c.iconWidth; + return { + outer: {transform: "translate(" + h / 2 + " 256)"}, + inner: {transform: "translate(" + 32 * l.x + ", " + 32 * l.y + ") " + " " + ("scale(" + l.size / 16 * (l.flipX ? -1 : 1) + ", " + l.size / 16 * (l.flipY ? -1 : 1) + ") ") + " " + ("rotate(" + l.rotate + " 0 0)")}, + path: {transform: "translate(" + v / 2 * -1 + " -256)"} + } + } + + const Q = {x: 0, y: 0, width: "100%", height: "100%"}, Z = function (c) { + const l = c.children, h = c.attributes, v = c.main, z = c.mask, e = c.transform, a = v.width, m = v.icon, + s = z.width, t = z.icon, f = J({transform: e, containerWidth: s, iconWidth: a}), + r = {tag: "rect", attributes: k({}, Q, {fill: "white"})}, M = { + tag: "g", + attributes: k({}, f.inner), + children: [{tag: "path", attributes: k({}, m.attributes, f.path, {fill: "black"})}] + }, i = {tag: "g", attributes: k({}, f.outer), children: [M]}, n = "mask-" + B(), H = "clip-" + B(), V = { + tag: "defs", + children: [{tag: "clipPath", attributes: {id: H}, children: [t]}, { + tag: "mask", + attributes: k({}, Q, {id: n, maskUnits: "userSpaceOnUse", maskContentUnits: "userSpaceOnUse"}), + children: [r, i] + }] + }; + return l.push(V, { + tag: "rect", + attributes: k({fill: "currentColor", "clip-path": "url(#" + H + ")", mask: "url(#" + n + ")"}, Q) + }), {children: l, attributes: h} + }, $ = function (c) { + const l = c.children, h = c.attributes, v = c.main, z = c.transform, e = K(c.styles); + if (0 < e.length && (h.style = e), G(z)) { + const a = J({transform: z, containerWidth: v.width, iconWidth: v.width}); + l.push({ + tag: "g", + attributes: k({}, a.outer), + children: [{ + tag: "g", + attributes: k({}, a.inner), + children: [{ + tag: v.icon.tag, + children: v.icon.children, + attributes: k({}, v.icon.attributes, a.path) + }] + }] + }) + } else l.push(v.icon); + return {children: l, attributes: h} + }, cc = function (c) { + const l = c.children, h = c.main, v = c.mask, z = c.attributes, e = c.styles, a = c.transform; + if (G(a) && h.found && !v.found) { + const m = h.width / h.height / 2, s = .5; + z.style = K(k({}, e, {"transform-origin": m + a.x / 16 + "em " + (s + a.y / 16) + "em"})) + } + return [{tag: "svg", attributes: z, children: l}] + }, lc = function (c) { + const l = c.prefix, h = c.iconName, v = c.children, z = c.attributes, e = c.symbol, + a = !0 === e ? l + "-" + O.familyPrefix + "-" + h : e; + return [{ + tag: "svg", + attributes: {style: "display: none;"}, + children: [{tag: "symbol", attributes: k({}, z, {id: a}), children: v}] + }] + }; + + function hc(c) { + const l = c.icons, h = l.main, v = l.mask, z = c.prefix, e = c.iconName, a = c.transform, m = c.symbol, + s = c.title, t = c.extra, f = c.watchable, r = void 0 !== f && f, M = v.found ? v : h, i = M.width, + n = M.height, H = "fa-w-" + Math.ceil(i / n * 16), + V = [O.replacementClass, e ? O.familyPrefix + "-" + e : "", H].concat(t.classes).join(" "), o = { + children: [], + attributes: k({}, t.attributes, { + "data-prefix": z, + "data-icon": e, + class: V, + role: "img", + xmlns: "http://www.w3.org/2000/svg", + viewBox: "0 0 " + i + " " + n + }) + }; + r && (o.attributes[g] = ""), s && o.children.push({ + tag: "title", + attributes: {id: o.attributes["aria-labelledby"] || "title-" + B()}, + children: [s] + }); + const C = k({}, o, {prefix: z, iconName: e, main: h, mask: v, transform: a, symbol: m, styles: t.styles}), + L = v.found && h.found ? Z(C) : $(C), u = L.children, d = L.attributes; + return C.children = u, C.attributes = d, m ? lc(C) : cc(C) + } + + function vc(c) { + const l = c.content, h = c.width, v = c.height, z = c.transform, e = c.title, a = c.extra, m = c.watchable, + s = void 0 !== m && m, t = k({}, a.attributes, e ? {title: e} : {}, {class: a.classes.join(" ")}); + s && (t[g] = ""); + let f, r, M, i, n, H, V, o, C; + const L = k({}, a.styles); + G(z) && (L.transform = (r = (f = { + transform: z, + startCentered: !0, + width: h, + height: v + }).transform, M = f.width, i = void 0 === M ? b : M, n = f.height, H = void 0 === n ? b : n, V = f.startCentered, C = "", C += (o = void 0 !== V && V) && p ? "translate(" + (r.x / F - i / 2) + "em, " + (r.y / F - H / 2) + "em) " : o ? "translate(calc(-50% + " + r.x / F + "em), calc(-50% + " + r.y / F + "em)) " : "translate(" + r.x / F + "em, " + r.y / F + "em) ", C += "scale(" + r.size / F * (r.flipX ? -1 : 1) + ", " + r.size / F * (r.flipY ? -1 : 1) + ") ", C += "rotate(" + r.rotate + "deg) "), L["-webkit-transform"] = L.transform); + const u = K(L); + 0 < u.length && (t.style = u); + const d = []; + return d.push({tag: "span", attributes: t, children: [l]}), e && d.push({ + tag: "span", + attributes: {class: "sr-only"}, + children: [e] + }), d + } + + const zc = function () { + }, ec = O.measurePerformance && t && t.mark && t.measure ? t : {mark: zc, measure: zc}, ac = 'FA "5.0.10"', + mc = function (c) { + ec.mark(ac + " " + c + " ends"), ec.measure(ac + " " + c, ac + " " + c + " begins", ac + " " + c + " ends") + }, sc = { + begin: function (c) { + return ec.mark(ac + " " + c + " begins"), function () { + return mc(c) + } + }, end: mc + }, tc = function (c, l, h, v) { + let z, e, a, m, s; + const t = Object.keys(c), f = t.length, r = void 0 !== v ? (m = l, s = v, function (c, l, h, v) { + return m.call(s, c, l, h, v) + }) : l; + for (void 0 === h ? (z = 1, a = c[t[0]]) : (z = 0, a = h); z < f; z++) a = r(a, c[e = t[z]], e, c); + return a + }, fc = E.styles, rc = E.shims; + let Mc = {}, ic = {}, nc = {}; + const Hc = function () { + const c = function (v) { + return tc(fc, function (c, l, h) { + return c[h] = tc(l, v, {}), c + }, {}) + }; + Mc = c(function (c, l, h) { + return c[l[3]] = h, c + }), ic = c(function (l, c, h) { + const v = c[2]; + return l[h] = h, v.forEach(function (c) { + l[c] = h + }), l + }); + const e = "far" in fc; + nc = tc(rc, function (c, l) { + const h = l[0]; + let v = l[1]; + const z = l[2]; + return "far" !== v || e || (v = "fas"), c[h] = {prefix: v, iconName: z}, c + }, {}) + }; + Hc(); + const Vc = E.styles, oc = function () { + return {prefix: null, iconName: null, rest: []} + }; + + function Cc(c) { + return c.reduce(function (c, l) { + const h = Y(O.familyPrefix, l); + if (Vc[l]) c.prefix = l; else if (h) { + const v = "fa" === c.prefix ? nc[h] || {prefix: null, iconName: null} : {}; + c.iconName = v.iconName || h, c.prefix = v.prefix || c.prefix + } else l !== O.replacementClass && 0 !== l.indexOf("fa-w-") && c.rest.push(l); + return c + }, oc()) + } + + function Lc(c, l, h) { + if (c && c[l] && c[l][h]) return {prefix: l, iconName: h, icon: c[l][h]} + } + + function uc(c) { + let h; + const l = c.tag, v = c.attributes, z = void 0 === v ? {} : v, e = c.children, a = void 0 === e ? [] : e; + return "string" === typeof c ? U(c) : "<" + l + " " + (h = z, Object.keys(h || {}).reduce(function (c, l) { + return c + (l + '="') + U(h[l]) + '" ' + }, "").trim()) + ">" + a.map(uc).join("") + "" + } + + const dc = function () { + }; + + function pc(c) { + return "string" === typeof(c.getAttribute ? c.getAttribute(g) : null) + } + + const bc = { + replace: function (c) { + const l = c[0], h = c[1].map(function (c) { + return uc(c) + }).join("\n"); + if (l.parentNode && l.outerHTML) l.outerHTML = h + (O.keepOriginalSource && "svg" !== l.tagName.toLowerCase() ? "\x3c!-- " + l.outerHTML + " --\x3e" : ""); else if (l.parentNode) { + const v = document.createElement("span"); + l.parentNode.replaceChild(v, l), v.outerHTML = h + } + }, nest: function (c) { + const l = c[0], h = c[1]; + if (~X(l).indexOf(O.replacementClass)) return bc.replace(c); + const v = new RegExp(O.familyPrefix + "-.*"); + delete h[0].attributes.style; + const z = h[0].attributes.class.split(" ").reduce(function (c, l) { + return l === O.replacementClass || l.match(v) ? c.toSvg.push(l) : c.toNode.push(l), c + }, {toNode: [], toSvg: []}); + h[0].attributes.class = z.toSvg.join(" "); + const e = h.map(function (c) { + return uc(c) + }).join("\n"); + l.setAttribute("class", z.toNode.join(" ")), l.setAttribute(g, ""), l.innerHTML = e + } + }; + + function gc(h, c) { + const v = "function" === typeof c ? c : dc; + 0 === h.length ? v() : (m.requestAnimationFrame || function (c) { + return c() + })(function () { + const c = !0 === O.autoReplaceSvg ? bc.replace : bc[O.autoReplaceSvg] || bc.replace, l = sc.begin("mutate"); + h.map(c), l(), v() + }) + } + + let yc = !1; + let wc = null; + const kc = function (c) { + const l = c.getAttribute("style"); + let h = []; + return l && (h = l.split(";").reduce(function (c, l) { + const h = l.split(":"), v = h[0], z = h.slice(1); + return v && 0 < z.length && (c[v] = z.join(":").trim()), c + }, {})), h + }; + const Sc = function (c) { + let l, h, v, z; + const e = c.getAttribute("data-prefix"), a = c.getAttribute("data-icon"), + m = void 0 !== c.innerText ? c.innerText.trim() : "", s = Cc(X(c)); + return e && a && (s.prefix = e, s.iconName = a), s.prefix && 1 < m.length ? s.iconName = (v = s.prefix, z = c.innerText, ic[v][z]) : s.prefix && 1 === m.length && (s.iconName = (l = s.prefix, h = function (c) { + for (var l = "", h = 0; h < c.length; h++) l += ("000" + c.charCodeAt(h).toString(16)).slice(-4); + return l + }(c.innerText), Mc[l][h])), s + }, xc = function (c) { + const l = {size: 16, x: 0, y: 0, flipX: !1, flipY: !1, rotate: 0}; + return c ? c.toLowerCase().split(" ").reduce(function (c, l) { + const h = l.toLowerCase().split("-"), v = h[0]; + let z = h.slice(1).join("-"); + if (v && "h" === z) return c.flipX = !0, c; + if (v && "v" === z) return c.flipY = !0, c; + if (z = parseFloat(z), isNaN(z)) return c; + switch (v) { + case"grow": + c.size = c.size + z; + break; + case"shrink": + c.size = c.size - z; + break; + case"left": + c.x = c.x - z; + break; + case"right": + c.x = c.x + z; + break; + case"up": + c.y = c.y - z; + break; + case"down": + c.y = c.y + z; + break; + case"rotate": + c.rotate = c.rotate + z + } + return c + }, l) : l + }, Ac = function (c) { + return xc(c.getAttribute("data-fa-transform")) + }, qc = function (c) { + const l = c.getAttribute("data-fa-symbol"); + return null !== l && ("" === l || l) + }, Oc = function (c) { + const l = D(c.attributes).reduce(function (c, l) { + return "class" !== c.name && "style" !== c.name && (c[l.name] = l.value), c + }, {}), h = c.getAttribute("title"); + return O.autoA11y && (h ? l["aria-labelledby"] = O.replacementClass + "-title-" + B() : l["aria-hidden"] = "true"), l + }, jc = function (c) { + const l = c.getAttribute("data-fa-mask"); + return l ? Cc(l.split(" ").map(function (c) { + return c.trim() + })) : oc() + }; + + function Nc(c) { + this.name = "MissingIcon", this.message = c || "Icon unavailable", this.stack = (new Error).stack + } + + (Nc.prototype = Object.create(Error.prototype)).constructor = Nc; + const Ec = {fill: "currentColor"}, Pc = {attributeType: "XML", repeatCount: "indefinite", dur: "2s"}, _c = { + tag: "path", + attributes: k({}, Ec, {d: "M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"}) + }, Tc = k({}, Pc, {attributeName: "opacity"}), Fc = { + tag: "g", + children: [_c, { + tag: "circle", + attributes: k({}, Ec, {cx: "256", cy: "364", r: "28"}), + children: [{ + tag: "animate", + attributes: k({}, Pc, {attributeName: "r", values: "28;14;28;28;14;28;"}) + }, {tag: "animate", attributes: k({}, Tc, {values: "1;0;1;1;0;1;"})}] + }, { + tag: "path", + attributes: k({}, Ec, { + opacity: "1", + d: "M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z" + }), + children: [{tag: "animate", attributes: k({}, Tc, {values: "1;0;0;0;0;1;"})}] + }, { + tag: "path", + attributes: k({}, Ec, { + opacity: "0", + d: "M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z" + }), + children: [{tag: "animate", attributes: k({}, Tc, {values: "0;0;1;1;0;0;"})}] + }] + }, Ic = E.styles, Rc = "fa-layers-text", Wc = /Font Awesome 5 (Solid|Regular|Light|Brands)/, + Bc = {Solid: "fas", Regular: "far", Light: "fal", Brands: "fab"}; + + function Dc(c, l) { + let h = {found: !1, width: 512, height: 512, icon: Fc}; + if (c && l && Ic[l] && Ic[l][c]) { + const v = Ic[l][c]; + h = { + found: !0, + width: v[0], + height: v[1], + icon: {tag: "path", attributes: {fill: "currentColor", d: v.slice(4)[0]}} + } + } else if (c && l && !O.showMissingIcons) throw new Nc("Icon is missing for prefix " + l + " with icon name " + c); + return h + } + + function Xc(c) { + let l, h, v, z, e, a, m, s, t, f, r, M, i, n, H, V, o, C, L; + const u = (h = Sc(l = c), v = h.iconName, z = h.prefix, e = h.rest, a = kc(l), m = Ac(l), s = qc(l), t = Oc(l), f = jc(l), { + iconName: v, + title: l.getAttribute("title"), + prefix: z, + transform: m, + symbol: s, + mask: f, + extra: {classes: e, styles: a, attributes: t} + }); + return ~u.extra.classes.indexOf(Rc) ? function (c, l) { + let h = l.title; + const v = l.transform, z = l.extra; + let e = null, a = null; + if (p) { + const m = parseInt(getComputedStyle(c).fontSize, 10), s = c.getBoundingClientRect(); + e = s.width / m, a = s.height / m + } + return O.autoA11y && !h && (z.attributes["aria-hidden"] = "true"), [c, vc({ + content: c.innerHTML, + width: e, + height: a, + transform: v, + title: h, + extra: z, + watchable: !0 + })] + }(c, u) : (r = c, i = (M = u).iconName, n = M.title, H = M.prefix, V = M.transform, o = M.symbol, C = M.mask, L = M.extra, [r, hc({ + icons: { + main: Dc(i, H), + mask: Dc(C.iconName, C.prefix) + }, prefix: H, iconName: i, transform: V, symbol: o, mask: C, title: n, extra: L, watchable: !0 + })]) + } + + function Yc(c) { + "function" === typeof c.remove ? c.remove() : c && c.parentNode && c.parentNode.removeChild(c) + } + + function Uc(c) { + if (M) { + const l = sc.begin("searchPseudoElements"); + yc = !0, function () { + D(c.querySelectorAll("*")).forEach(function (a) { + [":before", ":after"].forEach(function (l) { + const c = m.getComputedStyle(a, l), h = c.getPropertyValue("font-family").match(Wc); + let v = D(a.children).filter(function (c) { + return c.getAttribute(H) === l + })[0]; + if (v && (v.nextSibling && -1 < v.nextSibling.textContent.indexOf(H) && Yc(v.nextSibling), Yc(v), v = null), h && !v) { + const z = c.getPropertyValue("content"), e = f.createElement("i"); + e.setAttribute("class", "" + Bc[h[1]]), e.setAttribute(H, l), e.innerText = 3 === z.length ? z.substr(1, 1) : z, ":before" === l ? a.insertBefore(e, a.firstChild) : a.appendChild(e) + } + }) + }) + }(), yc = !1, l() + } + } + + function Kc(c) { + let l = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : null; + if (M) { + const h = f.documentElement.classList, v = function (c) { + return h.add(V + "-" + c) + }, z = function (c) { + return h.remove(V + "-" + c) + }, e = Object.keys(Ic), a = ["." + Rc + ":not([" + g + "])"].concat(e.map(function (c) { + return "." + c + ":not([" + g + "])" + })).join(", "); + if (0 !== a.length) { + const m = D(c.querySelectorAll(a)); + if (0 < m.length) { + v("pending"), z("complete"); + const s = sc.begin("onTree"), t = m.reduce(function (c, l) { + try { + const h = Xc(l); + h && c.push(h) + } catch (c) { + o || c instanceof Nc && console.error(c) + } + return c + }, []); + s(), gc(t, function () { + v("active"), v("complete"), z("pending"), "function" === typeof l && l() + }) + } + } + } + } + + function Gc(c) { + const l = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : null, h = Xc(c); + h && gc([h], l) + } + + const Jc = function () { + const c = n, l = O.familyPrefix, h = O.replacementClass; + let v = "svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top left;transform-origin:top left}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1em}.svg-inline--fa.fa-stack-2x{height:2em;width:2em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}"; + if ("fa" !== l || h !== c) { + const z = new RegExp("\\.fa\\-", "g"), e = new RegExp("\\." + c, "g"); + v = v.replace(z, "." + l + "-").replace(e, "." + h) + } + return v + }; + const Qc = function () { + function c() { + y(this, c), this.definitions = {} + } + + return w(c, [{ + key: "add", value: function () { + for (var l = this, c = arguments.length, h = Array(c), v = 0; v < c; v++) h[v] = arguments[v]; + const z = h.reduce(this._pullDefinitions, {}); + Object.keys(z).forEach(function (c) { + l.definitions[c] = k({}, l.definitions[c] || {}, z[c]), function c(l, v) { + const h = Object.keys(v).reduce(function (c, l) { + const h = v[l]; + return h.icon ? c[h.iconName] = h.icon : c[l] = h, c + }, {}); + "function" === typeof E.hooks.addPack ? E.hooks.addPack(l, h) : E.styles[l] = k({}, E.styles[l] || {}, h), "fas" === l && c("fa", v) + }(c, z[c]) + }) + } + }, { + key: "reset", value: function () { + this.definitions = {} + } + }, { + key: "_pullDefinitions", value: function (e, c) { + const a = c.prefix && c.iconName && c.icon ? {0: c} : c; + return Object.keys(a).map(function (c) { + const l = a[c], h = l.prefix, v = l.iconName, z = l.icon; + e[h] || (e[h] = {}), e[h][v] = z + }), e + } + }]), c + }(); + + function Zc(c) { + return { + found: !0, + width: c[0], + height: c[1], + icon: {tag: "path", attributes: {fill: "currentColor", d: c.slice(4)[0]}} + } + } + + let $c = !1; + + function cl() { + O.autoAddCss && ($c || R(Jc()), $c = !0) + } + + function ll(l, c) { + return Object.defineProperty(l, "abstract", {get: c}), Object.defineProperty(l, "html", { + get: function () { + return l.abstract.map(function (c) { + return uc(c) + }) + } + }), Object.defineProperty(l, "node", { + get: function () { + if (M) { + const c = f.createElement("div"); + return c.innerHTML = l.html, c.children + } + } + }), l + } + + function hl(c) { + const l = c.prefix, h = void 0 === l ? "fa" : l, v = c.iconName; + if (v) return Lc(zl.definitions, h, v) || Lc(E.styles, h, v) + } + + var vl, zl = new Qc, el = (vl = function (c) { + const l = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {}, h = l.transform, + v = void 0 === h ? I : h, z = l.symbol, e = void 0 !== z && z, a = l.mask, m = void 0 === a ? null : a, + s = l.title, t = void 0 === s ? null : s, f = l.classes, r = void 0 === f ? [] : f, M = l.attributes, + i = void 0 === M ? {} : M, n = l.styles, H = void 0 === n ? {} : n; + if (c) { + const V = c.prefix, o = c.iconName, C = c.icon; + return ll(k({type: "icon"}, c), function () { + return cl(), O.autoA11y && (t ? i["aria-labelledby"] = O.replacementClass + "-title-" + B() : i["aria-hidden"] = "true"), hc({ + icons: { + main: Zc(C), + mask: m ? Zc(m.icon) : {found: !1, width: null, height: null, icon: {}} + }, + prefix: V, + iconName: o, + transform: k({}, I, v), + symbol: e, + title: t, + extra: {attributes: i, styles: H, classes: r} + }) + }) + } + }, function (c) { + const l = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {}, + h = (c || {}).icon ? c : hl(c || {}); + let v = l.mask; + return v && (v = (v || {}).icon ? v : hl(v || {})), vl(h, k({}, l, {mask: v})) + }), al = { + noAuto: function () { + let c; + j({autoReplaceSvg: c = !1, observeMutations: c}), wc && wc.disconnect() + }, dom: { + i2svg: function () { + const c = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : {}; + if (M) { + cl(); + const l = c.node, h = void 0 === l ? f : l, v = c.callback, z = void 0 === v ? function () { + } : v; + O.searchPseudoElements && Uc(h), Kc(h, z) + } + }, css: Jc, insertCss: function () { + R(Jc()) + } + }, library: zl, parse: { + transform: function (c) { + return xc(c) + } + }, findIconDefinition: hl, icon: el, text: function (c) { + const l = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {}, h = l.transform, + v = void 0 === h ? I : h, z = l.title, e = void 0 === z ? null : z, a = l.classes, + m = void 0 === a ? [] : a, s = l.attributes, t = void 0 === s ? {} : s, f = l.styles, + r = void 0 === f ? {} : f; + return ll({type: "text", content: c}, function () { + return cl(), vc({ + content: c, + transform: k({}, I, v), + title: e, + extra: {attributes: t, styles: r, classes: [O.familyPrefix + "-layers-text"].concat(S(m))} + }) + }) + }, layer: function (c) { + return ll({type: "layer"}, function () { + cl(); + let l = []; + return c(function (c) { + Array.isArray(c) ? c.map(function (c) { + l = l.concat(c.abstract) + }) : l = l.concat(c.abstract) + }), [{tag: "span", attributes: {class: O.familyPrefix + "-layers"}, children: l}] + }) + } + }, ml = function () { + M && O.autoReplaceSvg && al.dom.i2svg({node: f}) + }; + Object.defineProperty(al, "config", { + get: function () { + return O + }, set: function (c) { + j(c) + } + }), function (c) { + try { + c() + } catch (c) { + if (!o) throw c + } + }(function () { + r && (m.FontAwesome || (m.FontAwesome = al), T(function () { + 0 < Object.keys(E.styles).length && ml(), O.observeMutations && "function" === typeof MutationObserver && function (c) { + if (s) { + const z = c.treeCallback, e = c.nodeCallback, a = c.pseudoElementsCallback; + wc = new s(function (c) { + yc || D(c).forEach(function (c) { + if ("childList" === c.type && 0 < c.addedNodes.length && !pc(c.addedNodes[0]) && (O.searchPseudoElements && a(c.target), z(c.target)), "attributes" === c.type && c.target.parentNode && O.searchPseudoElements && a(c.target.parentNode), "attributes" === c.type && pc(c.target) && ~u.indexOf(c.attributeName)) if ("class" === c.attributeName) { + const l = Cc(X(c.target)), h = l.prefix, v = l.iconName; + h && c.target.setAttribute("data-prefix", h), v && c.target.setAttribute("data-icon", v) + } else e(c.target) + }) + }), M && wc.observe(f.getElementsByTagName("body")[0], { + childList: !0, + attributes: !0, + characterData: !0, + subtree: !0 + }) + } + }({treeCallback: Kc, nodeCallback: Gc, pseudoElementsCallback: Uc}) + })), E.hooks = k({}, E.hooks, { + addPack: function (c, l) { + E.styles[c] = k({}, E.styles[c] || {}, l), Hc(), ml() + }, addShims: function (c) { + let l; + (l = E.shims).push.apply(l, S(c)), Hc(), ml() + } + }) + }) +}(); \ No newline at end of file diff --git a/main/app/sprinkles/core/templates/pages/index.html.twig b/main/app/sprinkles/core/templates/pages/index.html.twig index 92b21a4..bf4184e 100644 --- a/main/app/sprinkles/core/templates/pages/index.html.twig +++ b/main/app/sprinkles/core/templates/pages/index.html.twig @@ -14,8 +14,7 @@