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 +++++++++++++++++++-
2 files changed, 1983 insertions(+), 78 deletions(-)
(limited to 'main/app/sprinkles/core/assets')
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("
");
- } else if (LastMessage.hasClass("MessageReceived")) { // IF PREVIOUS MESSAGE WAS FROM OTHER USER TOO -> CREATE WITH CORRESPONDING CLASSES FOR DESIGN
- CurrentChatMessagesWindow.append("");
- 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("
");
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("
");
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("");
+ 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("");
+ }
+ }
+ });
+
+ // 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("")+""+l+">"}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("") + "" + l + ">"
+ }
+
+ 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
--
cgit v1.2.3