2022-02-08 04:16:51 +08:00
/ * !
2024-11-19 05:38:46 +08:00
* Font Awesome Free 6.7 . 0 by @ fontawesome - https : //fontawesome.com
2022-02-08 04:16:51 +08:00
* License - https : //fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
2024-04-03 02:54:47 +08:00
* Copyright 2024 Fonticons , Inc .
2022-02-08 04:16:51 +08:00
* /
( function ( global , factory ) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory ( ) :
typeof define === 'function' && define . amd ? define ( factory ) :
( factory ( ) ) ;
} ( this , ( function ( ) { 'use strict' ;
2024-11-19 05:38:46 +08:00
function _defineProperty ( e , r , t ) {
return ( r = _toPropertyKey ( r ) ) in e ? Object . defineProperty ( e , r , {
value : t ,
enumerable : ! 0 ,
configurable : ! 0 ,
writable : ! 0
} ) : e [ r ] = t , e ;
}
function ownKeys ( e , r ) {
var t = Object . keys ( e ) ;
if ( Object . getOwnPropertySymbols ) {
var o = Object . getOwnPropertySymbols ( e ) ;
r && ( o = o . filter ( function ( r ) {
return Object . getOwnPropertyDescriptor ( e , r ) . enumerable ;
} ) ) , t . push . apply ( t , o ) ;
}
return t ;
}
function _objectSpread2 ( e ) {
for ( var r = 1 ; r < arguments . length ; r ++ ) {
var t = null != arguments [ r ] ? arguments [ r ] : { } ;
r % 2 ? ownKeys ( Object ( t ) , ! 0 ) . forEach ( function ( r ) {
_defineProperty ( e , r , t [ r ] ) ;
} ) : Object . getOwnPropertyDescriptors ? Object . defineProperties ( e , Object . getOwnPropertyDescriptors ( t ) ) : ownKeys ( Object ( t ) ) . forEach ( function ( r ) {
Object . defineProperty ( e , r , Object . getOwnPropertyDescriptor ( t , r ) ) ;
} ) ;
}
return e ;
}
function _toPrimitive ( t , r ) {
if ( "object" != typeof t || ! t ) return t ;
var e = t [ Symbol . toPrimitive ] ;
if ( void 0 !== e ) {
var i = e . call ( t , r || "default" ) ;
if ( "object" != typeof i ) return i ;
throw new TypeError ( "@@toPrimitive must return a primitive value." ) ;
}
return ( "string" === r ? String : Number ) ( t ) ;
}
function _toPropertyKey ( t ) {
var i = _toPrimitive ( t , "string" ) ;
return "symbol" == typeof i ? i : i + "" ;
}
2024-07-17 01:13:31 +08:00
let _WINDOW = { } ;
let _DOCUMENT = { } ;
2022-02-08 04:16:51 +08:00
try {
if ( typeof window !== 'undefined' ) _WINDOW = window ;
if ( typeof document !== 'undefined' ) _DOCUMENT = document ;
} catch ( e ) { }
2024-07-17 01:13:31 +08:00
const {
userAgent = ''
} = _WINDOW . navigator || { } ;
const WINDOW = _WINDOW ;
const DOCUMENT = _DOCUMENT ;
const IS _BROWSER = ! ! WINDOW . document ;
const IS _DOM = ! ! DOCUMENT . documentElement && ! ! DOCUMENT . head && typeof DOCUMENT . addEventListener === 'function' && typeof DOCUMENT . createElement === 'function' ;
const IS _IE = ~ userAgent . indexOf ( 'MSIE' ) || ~ userAgent . indexOf ( 'Trident/' ) ;
2022-02-08 04:16:51 +08:00
2024-07-17 01:13:31 +08:00
const functions = [ ] ;
const listener = function ( ) {
2022-02-08 04:16:51 +08:00
DOCUMENT . removeEventListener ( 'DOMContentLoaded' , listener ) ;
loaded = 1 ;
2024-07-17 01:13:31 +08:00
functions . map ( fn => fn ( ) ) ;
2022-02-08 04:16:51 +08:00
} ;
2024-07-17 01:13:31 +08:00
let loaded = false ;
2022-02-08 04:16:51 +08:00
if ( IS _DOM ) {
loaded = ( DOCUMENT . documentElement . doScroll ? /^loaded|^c/ : /^loaded|^i|^c/ ) . test ( DOCUMENT . readyState ) ;
if ( ! loaded ) DOCUMENT . addEventListener ( 'DOMContentLoaded' , listener ) ;
}
function domready ( fn ) {
if ( ! IS _DOM ) return ;
loaded ? setTimeout ( fn , 0 ) : functions . push ( fn ) ;
}
function report ( _ref ) {
2024-07-17 01:13:31 +08:00
let {
nodesTested ,
nodesFound
} = _ref ;
const timedOutTests = { } ;
for ( let key in nodesFound ) {
2022-02-08 04:16:51 +08:00
if ( ! ( nodesTested . conflict [ key ] || nodesTested . noConflict [ key ] ) ) {
timedOutTests [ key ] = nodesFound [ key ] ;
}
}
2024-07-17 01:13:31 +08:00
const conflictsCount = Object . keys ( nodesTested . conflict ) . length ;
2022-02-08 04:16:51 +08:00
if ( conflictsCount > 0 ) {
console . info ( "%cConflict" . concat ( conflictsCount > 1 ? 's' : '' , " found:" ) , 'color: darkred; font-size: large' ) ;
2024-07-17 01:13:31 +08:00
const data = { } ;
for ( let key in nodesTested . conflict ) {
const item = nodesTested . conflict [ key ] ;
data [ key ] = {
2022-02-08 04:16:51 +08:00
'tagName' : item . tagName ,
'src/href' : item . src || item . href || 'n/a' ,
'innerText excerpt' : item . innerText && item . innerText !== '' ? item . innerText . slice ( 0 , 200 ) + '...' : '(empty)'
} ;
}
console . table ( data ) ;
}
2024-07-17 01:13:31 +08:00
const noConflictsCount = Object . keys ( nodesTested . noConflict ) . length ;
2022-02-08 04:16:51 +08:00
if ( noConflictsCount > 0 ) {
console . info ( "%cNo conflict" . concat ( noConflictsCount > 1 ? 's' : '' , " found with " ) . concat ( noConflictsCount === 1 ? 'this' : 'these' , ":" ) , 'color: green; font-size: large' ) ;
2024-07-17 01:13:31 +08:00
const data = { } ;
for ( let key in nodesTested . noConflict ) {
const item = nodesTested . noConflict [ key ] ;
data [ key ] = {
'tagName' : item . tagName ,
'src/href' : item . src || item . href || 'n/a' ,
'innerText excerpt' : item . innerText && item . innerText !== '' ? item . innerText . slice ( 0 , 200 ) + '...' : '(empty)'
2022-02-08 04:16:51 +08:00
} ;
}
2024-07-17 01:13:31 +08:00
console . table ( data ) ;
2022-02-08 04:16:51 +08:00
}
2024-07-17 01:13:31 +08:00
const timeOutCount = Object . keys ( timedOutTests ) . length ;
2022-02-08 04:16:51 +08:00
if ( timeOutCount > 0 ) {
console . info ( "%cLeftovers--we timed out before collecting test results for " . concat ( timeOutCount === 1 ? 'this' : 'these' , ":" ) , 'color: blue; font-size: large' ) ;
2024-07-17 01:13:31 +08:00
const data = { } ;
for ( let key in timedOutTests ) {
const item = timedOutTests [ key ] ;
data [ key ] = {
'tagName' : item . tagName ,
'src/href' : item . src || item . href || 'n/a' ,
'innerText excerpt' : item . innerText && item . innerText !== '' ? item . innerText . slice ( 0 , 200 ) + '...' : '(empty)'
2022-02-08 04:16:51 +08:00
} ;
}
2024-07-17 01:13:31 +08:00
console . table ( data ) ;
2022-02-08 04:16:51 +08:00
}
}
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : { } ;
function createCommonjsModule ( fn , module ) {
return module = { exports : { } } , fn ( module , module . exports ) , module . exports ;
}
var md5 = createCommonjsModule ( function ( module ) {
( function ( $ ) {
2024-11-19 05:38:46 +08:00
2022-02-08 04:16:51 +08:00
/ * *
* Add integers , wrapping at 2 ^ 32.
* This uses 16 - bit operations internally to work around bugs in interpreters .
*
* @ param { number } x First integer
* @ param { number } y Second integer
* @ returns { number } Sum
* /
function safeAdd ( x , y ) {
var lsw = ( x & 0xffff ) + ( y & 0xffff ) ;
var msw = ( x >> 16 ) + ( y >> 16 ) + ( lsw >> 16 ) ;
return msw << 16 | lsw & 0xffff ;
}
2024-11-19 05:38:46 +08:00
2022-02-08 04:16:51 +08:00
/ * *
* Bitwise rotate a 32 - bit number to the left .
*
* @ param { number } num 32 - bit number
* @ param { number } cnt Rotation count
* @ returns { number } Rotated number
* /
function bitRotateLeft ( num , cnt ) {
return num << cnt | num >>> 32 - cnt ;
}
2024-11-19 05:38:46 +08:00
2022-02-08 04:16:51 +08:00
/ * *
* Basic operation the algorithm uses .
*
* @ param { number } q q
* @ param { number } a a
* @ param { number } b b
* @ param { number } x x
* @ param { number } s s
* @ param { number } t t
* @ returns { number } Result
* /
function md5cmn ( q , a , b , x , s , t ) {
return safeAdd ( bitRotateLeft ( safeAdd ( safeAdd ( a , q ) , safeAdd ( x , t ) ) , s ) , b ) ;
}
/ * *
* Basic operation the algorithm uses .
*
* @ param { number } a a
* @ param { number } b b
* @ param { number } c c
* @ param { number } d d
* @ param { number } x x
* @ param { number } s s
* @ param { number } t t
* @ returns { number } Result
* /
function md5ff ( a , b , c , d , x , s , t ) {
return md5cmn ( b & c | ~ b & d , a , b , x , s , t ) ;
}
/ * *
* Basic operation the algorithm uses .
*
* @ param { number } a a
* @ param { number } b b
* @ param { number } c c
* @ param { number } d d
* @ param { number } x x
* @ param { number } s s
* @ param { number } t t
* @ returns { number } Result
* /
function md5gg ( a , b , c , d , x , s , t ) {
return md5cmn ( b & d | c & ~ d , a , b , x , s , t ) ;
}
/ * *
* Basic operation the algorithm uses .
*
* @ param { number } a a
* @ param { number } b b
* @ param { number } c c
* @ param { number } d d
* @ param { number } x x
* @ param { number } s s
* @ param { number } t t
* @ returns { number } Result
* /
function md5hh ( a , b , c , d , x , s , t ) {
return md5cmn ( b ^ c ^ d , a , b , x , s , t ) ;
}
/ * *
* Basic operation the algorithm uses .
*
* @ param { number } a a
* @ param { number } b b
* @ param { number } c c
* @ param { number } d d
* @ param { number } x x
* @ param { number } s s
* @ param { number } t t
* @ returns { number } Result
* /
function md5ii ( a , b , c , d , x , s , t ) {
return md5cmn ( c ^ ( b | ~ d ) , a , b , x , s , t ) ;
}
2024-11-19 05:38:46 +08:00
2022-02-08 04:16:51 +08:00
/ * *
* Calculate the MD5 of an array of little - endian words , and a bit length .
*
* @ param { Array } x Array of little - endian words
* @ param { number } len Bit length
* @ returns { Array < number > } MD5 Array
* /
function binlMD5 ( x , len ) {
/* append padding */
x [ len >> 5 ] |= 0x80 << len % 32 ;
x [ ( len + 64 >>> 9 << 4 ) + 14 ] = len ;
var i ;
var olda ;
var oldb ;
var oldc ;
var oldd ;
var a = 1732584193 ;
var b = - 271733879 ;
var c = - 1732584194 ;
var d = 271733878 ;
for ( i = 0 ; i < x . length ; i += 16 ) {
olda = a ;
oldb = b ;
oldc = c ;
oldd = d ;
a = md5ff ( a , b , c , d , x [ i ] , 7 , - 680876936 ) ;
d = md5ff ( d , a , b , c , x [ i + 1 ] , 12 , - 389564586 ) ;
c = md5ff ( c , d , a , b , x [ i + 2 ] , 17 , 606105819 ) ;
b = md5ff ( b , c , d , a , x [ i + 3 ] , 22 , - 1044525330 ) ;
a = md5ff ( a , b , c , d , x [ i + 4 ] , 7 , - 176418897 ) ;
d = md5ff ( d , a , b , c , x [ i + 5 ] , 12 , 1200080426 ) ;
c = md5ff ( c , d , a , b , x [ i + 6 ] , 17 , - 1473231341 ) ;
b = md5ff ( b , c , d , a , x [ i + 7 ] , 22 , - 45705983 ) ;
a = md5ff ( a , b , c , d , x [ i + 8 ] , 7 , 1770035416 ) ;
d = md5ff ( d , a , b , c , x [ i + 9 ] , 12 , - 1958414417 ) ;
c = md5ff ( c , d , a , b , x [ i + 10 ] , 17 , - 42063 ) ;
b = md5ff ( b , c , d , a , x [ i + 11 ] , 22 , - 1990404162 ) ;
a = md5ff ( a , b , c , d , x [ i + 12 ] , 7 , 1804603682 ) ;
d = md5ff ( d , a , b , c , x [ i + 13 ] , 12 , - 40341101 ) ;
c = md5ff ( c , d , a , b , x [ i + 14 ] , 17 , - 1502002290 ) ;
b = md5ff ( b , c , d , a , x [ i + 15 ] , 22 , 1236535329 ) ;
a = md5gg ( a , b , c , d , x [ i + 1 ] , 5 , - 165796510 ) ;
d = md5gg ( d , a , b , c , x [ i + 6 ] , 9 , - 1069501632 ) ;
c = md5gg ( c , d , a , b , x [ i + 11 ] , 14 , 643717713 ) ;
b = md5gg ( b , c , d , a , x [ i ] , 20 , - 373897302 ) ;
a = md5gg ( a , b , c , d , x [ i + 5 ] , 5 , - 701558691 ) ;
d = md5gg ( d , a , b , c , x [ i + 10 ] , 9 , 38016083 ) ;
c = md5gg ( c , d , a , b , x [ i + 15 ] , 14 , - 660478335 ) ;
b = md5gg ( b , c , d , a , x [ i + 4 ] , 20 , - 405537848 ) ;
a = md5gg ( a , b , c , d , x [ i + 9 ] , 5 , 568446438 ) ;
d = md5gg ( d , a , b , c , x [ i + 14 ] , 9 , - 1019803690 ) ;
c = md5gg ( c , d , a , b , x [ i + 3 ] , 14 , - 187363961 ) ;
b = md5gg ( b , c , d , a , x [ i + 8 ] , 20 , 1163531501 ) ;
a = md5gg ( a , b , c , d , x [ i + 13 ] , 5 , - 1444681467 ) ;
d = md5gg ( d , a , b , c , x [ i + 2 ] , 9 , - 51403784 ) ;
c = md5gg ( c , d , a , b , x [ i + 7 ] , 14 , 1735328473 ) ;
b = md5gg ( b , c , d , a , x [ i + 12 ] , 20 , - 1926607734 ) ;
a = md5hh ( a , b , c , d , x [ i + 5 ] , 4 , - 378558 ) ;
d = md5hh ( d , a , b , c , x [ i + 8 ] , 11 , - 2022574463 ) ;
c = md5hh ( c , d , a , b , x [ i + 11 ] , 16 , 1839030562 ) ;
b = md5hh ( b , c , d , a , x [ i + 14 ] , 23 , - 35309556 ) ;
a = md5hh ( a , b , c , d , x [ i + 1 ] , 4 , - 1530992060 ) ;
d = md5hh ( d , a , b , c , x [ i + 4 ] , 11 , 1272893353 ) ;
c = md5hh ( c , d , a , b , x [ i + 7 ] , 16 , - 155497632 ) ;
b = md5hh ( b , c , d , a , x [ i + 10 ] , 23 , - 1094730640 ) ;
a = md5hh ( a , b , c , d , x [ i + 13 ] , 4 , 681279174 ) ;
d = md5hh ( d , a , b , c , x [ i ] , 11 , - 358537222 ) ;
c = md5hh ( c , d , a , b , x [ i + 3 ] , 16 , - 722521979 ) ;
b = md5hh ( b , c , d , a , x [ i + 6 ] , 23 , 76029189 ) ;
a = md5hh ( a , b , c , d , x [ i + 9 ] , 4 , - 640364487 ) ;
d = md5hh ( d , a , b , c , x [ i + 12 ] , 11 , - 421815835 ) ;
c = md5hh ( c , d , a , b , x [ i + 15 ] , 16 , 530742520 ) ;
b = md5hh ( b , c , d , a , x [ i + 2 ] , 23 , - 995338651 ) ;
a = md5ii ( a , b , c , d , x [ i ] , 6 , - 198630844 ) ;
d = md5ii ( d , a , b , c , x [ i + 7 ] , 10 , 1126891415 ) ;
c = md5ii ( c , d , a , b , x [ i + 14 ] , 15 , - 1416354905 ) ;
b = md5ii ( b , c , d , a , x [ i + 5 ] , 21 , - 57434055 ) ;
a = md5ii ( a , b , c , d , x [ i + 12 ] , 6 , 1700485571 ) ;
d = md5ii ( d , a , b , c , x [ i + 3 ] , 10 , - 1894986606 ) ;
c = md5ii ( c , d , a , b , x [ i + 10 ] , 15 , - 1051523 ) ;
b = md5ii ( b , c , d , a , x [ i + 1 ] , 21 , - 2054922799 ) ;
a = md5ii ( a , b , c , d , x [ i + 8 ] , 6 , 1873313359 ) ;
d = md5ii ( d , a , b , c , x [ i + 15 ] , 10 , - 30611744 ) ;
c = md5ii ( c , d , a , b , x [ i + 6 ] , 15 , - 1560198380 ) ;
b = md5ii ( b , c , d , a , x [ i + 13 ] , 21 , 1309151649 ) ;
a = md5ii ( a , b , c , d , x [ i + 4 ] , 6 , - 145523070 ) ;
d = md5ii ( d , a , b , c , x [ i + 11 ] , 10 , - 1120210379 ) ;
c = md5ii ( c , d , a , b , x [ i + 2 ] , 15 , 718787259 ) ;
b = md5ii ( b , c , d , a , x [ i + 9 ] , 21 , - 343485551 ) ;
a = safeAdd ( a , olda ) ;
b = safeAdd ( b , oldb ) ;
c = safeAdd ( c , oldc ) ;
d = safeAdd ( d , oldd ) ;
}
return [ a , b , c , d ] ;
}
2024-11-19 05:38:46 +08:00
2022-02-08 04:16:51 +08:00
/ * *
* Convert an array of little - endian words to a string
*
* @ param { Array < number > } input MD5 Array
* @ returns { string } MD5 string
* /
function binl2rstr ( input ) {
var i ;
var output = '' ;
var length32 = input . length * 32 ;
for ( i = 0 ; i < length32 ; i += 8 ) {
output += String . fromCharCode ( input [ i >> 5 ] >>> i % 32 & 0xff ) ;
}
return output ;
}
2024-11-19 05:38:46 +08:00
2022-02-08 04:16:51 +08:00
/ * *
* Convert a raw string to an array of little - endian words
* Characters > 255 have their high - byte silently ignored .
*
* @ param { string } input Raw input string
* @ returns { Array < number > } Array of little - endian words
* /
function rstr2binl ( input ) {
var i ;
var output = [ ] ;
output [ ( input . length >> 2 ) - 1 ] = undefined ;
for ( i = 0 ; i < output . length ; i += 1 ) {
output [ i ] = 0 ;
}
var length8 = input . length * 8 ;
for ( i = 0 ; i < length8 ; i += 8 ) {
output [ i >> 5 ] |= ( input . charCodeAt ( i / 8 ) & 0xff ) << i % 32 ;
}
return output ;
}
2024-11-19 05:38:46 +08:00
2022-02-08 04:16:51 +08:00
/ * *
* Calculate the MD5 of a raw string
*
* @ param { string } s Input string
* @ returns { string } Raw MD5 string
* /
function rstrMD5 ( s ) {
return binl2rstr ( binlMD5 ( rstr2binl ( s ) , s . length * 8 ) ) ;
}
2024-11-19 05:38:46 +08:00
2022-02-08 04:16:51 +08:00
/ * *
* Calculates the HMAC - MD5 of a key and some data ( raw strings )
*
* @ param { string } key HMAC key
* @ param { string } data Raw input string
* @ returns { string } Raw MD5 string
* /
function rstrHMACMD5 ( key , data ) {
var i ;
var bkey = rstr2binl ( key ) ;
var ipad = [ ] ;
var opad = [ ] ;
var hash ;
ipad [ 15 ] = opad [ 15 ] = undefined ;
if ( bkey . length > 16 ) {
bkey = binlMD5 ( bkey , key . length * 8 ) ;
}
for ( i = 0 ; i < 16 ; i += 1 ) {
ipad [ i ] = bkey [ i ] ^ 0x36363636 ;
opad [ i ] = bkey [ i ] ^ 0x5c5c5c5c ;
}
hash = binlMD5 ( ipad . concat ( rstr2binl ( data ) ) , 512 + data . length * 8 ) ;
return binl2rstr ( binlMD5 ( opad . concat ( hash ) , 512 + 128 ) ) ;
}
2024-11-19 05:38:46 +08:00
2022-02-08 04:16:51 +08:00
/ * *
* Convert a raw string to a hex string
*
* @ param { string } input Raw input string
* @ returns { string } Hex encoded string
* /
function rstr2hex ( input ) {
var hexTab = '0123456789abcdef' ;
var output = '' ;
var x ;
var i ;
for ( i = 0 ; i < input . length ; i += 1 ) {
x = input . charCodeAt ( i ) ;
output += hexTab . charAt ( x >>> 4 & 0x0f ) + hexTab . charAt ( x & 0x0f ) ;
}
return output ;
}
2024-11-19 05:38:46 +08:00
2022-02-08 04:16:51 +08:00
/ * *
* Encode a string as UTF - 8
*
* @ param { string } input Input string
* @ returns { string } UTF8 string
* /
function str2rstrUTF8 ( input ) {
return unescape ( encodeURIComponent ( input ) ) ;
}
2024-11-19 05:38:46 +08:00
2022-02-08 04:16:51 +08:00
/ * *
* Encodes input string as raw MD5 string
*
* @ param { string } s Input string
* @ returns { string } Raw MD5 string
* /
function rawMD5 ( s ) {
return rstrMD5 ( str2rstrUTF8 ( s ) ) ;
}
/ * *
* Encodes input string as Hex encoded string
*
* @ param { string } s Input string
* @ returns { string } Hex encoded string
* /
function hexMD5 ( s ) {
return rstr2hex ( rawMD5 ( s ) ) ;
}
/ * *
* Calculates the raw HMAC - MD5 for the given key and data
*
* @ param { string } k HMAC key
* @ param { string } d Input string
* @ returns { string } Raw MD5 string
* /
function rawHMACMD5 ( k , d ) {
return rstrHMACMD5 ( str2rstrUTF8 ( k ) , str2rstrUTF8 ( d ) ) ;
}
/ * *
* Calculates the Hex encoded HMAC - MD5 for the given key and data
*
* @ param { string } k HMAC key
* @ param { string } d Input string
* @ returns { string } Raw MD5 string
* /
function hexHMACMD5 ( k , d ) {
return rstr2hex ( rawHMACMD5 ( k , d ) ) ;
}
2024-11-19 05:38:46 +08:00
2022-02-08 04:16:51 +08:00
/ * *
* Calculates MD5 value for a given string .
* If a key is provided , calculates the HMAC - MD5 value .
* Returns a Hex encoded string unless the raw argument is given .
*
* @ param { string } string Input string
* @ param { string } [ key ] HMAC key
* @ param { boolean } [ raw ] Raw output switch
* @ returns { string } MD5 output
* /
function md5 ( string , key , raw ) {
if ( ! key ) {
if ( ! raw ) {
return hexMD5 ( string ) ;
}
return rawMD5 ( string ) ;
}
if ( ! raw ) {
return hexHMACMD5 ( key , string ) ;
}
return rawHMACMD5 ( key , string ) ;
}
if ( module . exports ) {
module . exports = md5 ;
} else {
$ . md5 = md5 ;
}
} ) ( commonjsGlobal ) ;
} ) ;
function md5ForNode ( node ) {
2024-07-17 01:13:31 +08:00
if ( null === node || 'object' !== typeof node ) return undefined ;
2022-02-08 04:16:51 +08:00
if ( node . src ) {
return md5 ( node . src ) ;
} else if ( node . href ) {
return md5 ( node . href ) ;
} else if ( node . innerText && '' !== node . innerText ) {
// eslint-disable-line yoda
return md5 ( node . innerText ) ;
} else {
return undefined ;
}
}
2024-07-17 01:13:31 +08:00
const diagScriptId = 'fa-kits-diag' ;
const nodeUnderTestId = 'fa-kits-node-under-test' ;
const md5Attr = 'data-md5' ;
const detectionIgnoreAttr = 'data-fa-detection-ignore' ;
const timeoutAttr = 'data-fa-detection-timeout' ;
const resultsCollectionMaxWaitAttr = 'data-fa-detection-results-collection-max-wait' ;
const silenceErrors = e => {
2022-02-08 04:16:51 +08:00
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
} ;
function pollUntil ( _ref ) {
2024-07-17 01:13:31 +08:00
let {
fn = ( ) => true ,
initialDuration = 1 ,
maxDuration = WINDOW . FontAwesomeDetection . timeout ,
showProgress = false ,
progressIndicator
} = _ref ;
2022-02-08 04:16:51 +08:00
return new Promise ( function ( resolve , reject ) {
// eslint-disable-line compat/compat
function poll ( duration , cumulativeDuration ) {
setTimeout ( function ( ) {
2024-07-17 01:13:31 +08:00
const result = fn ( ) ;
2022-02-08 04:16:51 +08:00
if ( showProgress ) {
console . info ( progressIndicator ) ;
}
if ( ! ! result ) {
// eslint-disable-line no-extra-boolean-cast
resolve ( result ) ;
} else {
2024-07-17 01:13:31 +08:00
const nextDuration = 250 ;
const nextCumulativeDuration = nextDuration + cumulativeDuration ;
2022-02-08 04:16:51 +08:00
if ( nextCumulativeDuration <= maxDuration ) {
poll ( nextDuration , nextCumulativeDuration ) ;
} else {
reject ( 'timeout' ) ; // eslint-disable-line prefer-promise-reject-errors
}
}
} , duration ) ;
}
poll ( initialDuration , 0 ) ;
} ) ;
}
function detectWebfontConflicts ( ) {
2024-07-17 01:13:31 +08:00
const linkTags = Array . from ( DOCUMENT . getElementsByTagName ( 'link' ) ) . filter ( t => ! t . hasAttribute ( detectionIgnoreAttr ) ) ;
const styleTags = Array . from ( DOCUMENT . getElementsByTagName ( 'style' ) ) . filter ( t => {
2022-02-08 04:16:51 +08:00
if ( t . hasAttribute ( detectionIgnoreAttr ) ) {
return false ;
2024-11-19 05:38:46 +08:00
}
// If the browser has loaded the FA5 CSS, let's not test that <style> element.
2022-02-08 04:16:51 +08:00
// Its enough that we'll be testing for traces of the corresponding JS being loaded, and testing
// this <style> would only produce a false negative anyway.
if ( WINDOW . FontAwesomeConfig && t . innerText . match ( new RegExp ( "svg:not\\(:root\\)\\." . concat ( WINDOW . FontAwesomeConfig . replacementClass ) ) ) ) {
return false ;
}
return true ;
} ) ;
function runDiag ( scriptOrLinkTag , md5 ) {
2024-11-19 05:38:46 +08:00
const diagFrame = DOCUMENT . createElement ( 'iframe' ) ;
// Using "visibility: hidden; position: absolute" instead of "display: none;" because
2022-02-08 04:16:51 +08:00
// Firefox will not return the expected results for getComputedStyle if our iframe has display: none.
diagFrame . setAttribute ( 'style' , 'visibility: hidden; position: absolute; height: 0; width: 0;' ) ;
2024-07-17 01:13:31 +08:00
const testIconId = 'fa-test-icon-' + md5 ;
const iTag = DOCUMENT . createElement ( 'i' ) ;
2022-02-08 04:16:51 +08:00
iTag . setAttribute ( 'class' , 'fa fa-coffee' ) ;
iTag . setAttribute ( 'id' , testIconId ) ;
2024-07-17 01:13:31 +08:00
const diagScript = DOCUMENT . createElement ( 'script' ) ;
2024-11-19 05:38:46 +08:00
diagScript . setAttribute ( 'id' , diagScriptId ) ;
// WARNING: this function will be toString()'d and assigned to innerText of the diag script
2022-02-08 04:16:51 +08:00
// element that we'll be putting into a diagnostic iframe.
// That means that this code won't compile until after the outer script has run and injected
// this code into the iframe. There are some compile time errors that might occur there.
// For example, using single line (double-slash) comments like this one inside that function
// will probably cause it to choke. Chrome will show an error like this:
// Uncaught SyntaxError: Unexpected end of input
2024-07-17 01:13:31 +08:00
const diagScriptFun = ( nodeUnderTestId , testIconId , md5 , parentOrigin ) => {
2022-02-08 04:16:51 +08:00
parent . FontAwesomeDetection . _ _pollUntil ( {
2024-07-17 01:13:31 +08:00
fn : ( ) => {
const iEl = document . getElementById ( testIconId ) ;
const computedStyle = window . getComputedStyle ( iEl ) ;
const fontFamily = computedStyle . getPropertyValue ( 'font-family' ) ;
2022-02-08 04:16:51 +08:00
if ( ! ! fontFamily . match ( /FontAwesome/ ) || ! ! fontFamily . match ( /Font Awesome [56]/ ) ) {
return true ;
} else {
return false ;
}
}
2024-07-17 01:13:31 +08:00
} ) . then ( ( ) => {
const node = document . getElementById ( nodeUnderTestId ) ;
2022-02-08 04:16:51 +08:00
parent . postMessage ( {
type : 'fontawesome-conflict' ,
technology : 'webfont' ,
href : node . href ,
innerText : node . innerText ,
tagName : node . tagName ,
2024-07-17 01:13:31 +08:00
md5
2022-02-08 04:16:51 +08:00
} , parentOrigin ) ;
} ) . catch ( function ( e ) {
2024-07-17 01:13:31 +08:00
const node = document . getElementById ( nodeUnderTestId ) ;
2022-02-08 04:16:51 +08:00
if ( e === 'timeout' ) {
parent . postMessage ( {
type : 'no-conflict' ,
technology : 'webfont' ,
href : node . src ,
innerText : node . innerText ,
tagName : node . tagName ,
2024-07-17 01:13:31 +08:00
md5
2022-02-08 04:16:51 +08:00
} , parentOrigin ) ;
} else {
console . error ( e ) ;
}
} ) ;
} ;
2024-07-17 01:13:31 +08:00
const parentOrigin = WINDOW . location . origin === 'file://' ? '*' : WINDOW . location . origin ;
2022-02-08 04:16:51 +08:00
diagScript . innerText = "(" . concat ( diagScriptFun . toString ( ) , ")('" ) . concat ( nodeUnderTestId , "', '" ) . concat ( testIconId || 'foo' , "', '" ) . concat ( md5 , "', '" ) . concat ( parentOrigin , "');" ) ;
diagFrame . onload = function ( ) {
diagFrame . contentWindow . addEventListener ( 'error' , silenceErrors , true ) ;
diagFrame . contentDocument . head . appendChild ( diagScript ) ;
diagFrame . contentDocument . head . appendChild ( scriptOrLinkTag ) ;
diagFrame . contentDocument . body . appendChild ( iTag ) ;
} ;
2024-07-17 01:13:31 +08:00
domready ( ( ) => DOCUMENT . body . appendChild ( diagFrame ) ) ;
2022-02-08 04:16:51 +08:00
}
2024-07-17 01:13:31 +08:00
const cssByMD5 = { } ;
for ( let i = 0 ; i < linkTags . length ; i ++ ) {
const linkUnderTest = DOCUMENT . createElement ( 'link' ) ;
2022-02-08 04:16:51 +08:00
linkUnderTest . setAttribute ( 'id' , nodeUnderTestId ) ;
linkUnderTest . setAttribute ( 'href' , linkTags [ i ] . href ) ;
linkUnderTest . setAttribute ( 'rel' , linkTags [ i ] . rel ) ;
2024-07-17 01:13:31 +08:00
const md5ForLink = md5ForNode ( linkTags [ i ] ) ;
2022-02-08 04:16:51 +08:00
linkUnderTest . setAttribute ( md5Attr , md5ForLink ) ;
cssByMD5 [ md5ForLink ] = linkTags [ i ] ;
runDiag ( linkUnderTest , md5ForLink ) ;
}
2024-07-17 01:13:31 +08:00
for ( let i = 0 ; i < styleTags . length ; i ++ ) {
2022-02-08 04:16:51 +08:00
var styleUnderTest = DOCUMENT . createElement ( 'style' ) ;
styleUnderTest . setAttribute ( 'id' , nodeUnderTestId ) ;
2024-07-17 01:13:31 +08:00
const md5ForStyle = md5ForNode ( styleTags [ i ] ) ;
2022-02-08 04:16:51 +08:00
styleUnderTest . setAttribute ( md5Attr , md5ForStyle ) ;
2024-07-17 01:13:31 +08:00
styleUnderTest . innerText = styleTags [ i ] . innerText ;
cssByMD5 [ md5ForStyle ] = styleTags [ i ] ;
2022-02-08 04:16:51 +08:00
runDiag ( styleUnderTest , md5ForStyle ) ;
}
return cssByMD5 ;
}
function detectSvgConflicts ( currentScript ) {
2024-07-17 01:13:31 +08:00
const scripts = Array . from ( DOCUMENT . scripts ) . filter ( t => ! t . hasAttribute ( detectionIgnoreAttr ) && t !== currentScript ) ;
const scriptsByMD5 = { } ;
for ( let scriptIdx = 0 ; scriptIdx < scripts . length ; scriptIdx ++ ) {
const diagFrame = DOCUMENT . createElement ( 'iframe' ) ;
2022-02-08 04:16:51 +08:00
diagFrame . setAttribute ( 'style' , 'display:none;' ) ;
2024-07-17 01:13:31 +08:00
const scriptUnderTest = DOCUMENT . createElement ( 'script' ) ;
2022-02-08 04:16:51 +08:00
scriptUnderTest . setAttribute ( 'id' , nodeUnderTestId ) ;
2024-07-17 01:13:31 +08:00
const md5ForScript = md5ForNode ( scripts [ scriptIdx ] ) ;
2022-02-08 04:16:51 +08:00
scriptUnderTest . setAttribute ( md5Attr , md5ForScript ) ;
scriptsByMD5 [ md5ForScript ] = scripts [ scriptIdx ] ;
if ( scripts [ scriptIdx ] . src !== '' ) {
scriptUnderTest . src = scripts [ scriptIdx ] . src ;
}
if ( scripts [ scriptIdx ] . innerText !== '' ) {
scriptUnderTest . innerText = scripts [ scriptIdx ] . innerText ;
}
scriptUnderTest . async = true ;
2024-07-17 01:13:31 +08:00
const diagScript = DOCUMENT . createElement ( 'script' ) ;
2022-02-08 04:16:51 +08:00
diagScript . setAttribute ( 'id' , diagScriptId ) ;
2024-07-17 01:13:31 +08:00
const parentOrigin = WINDOW . location . origin === 'file://' ? '*' : WINDOW . location . origin ;
const diagScriptFun = ( nodeUnderTestId , md5 , parentOrigin ) => {
2022-02-08 04:16:51 +08:00
parent . FontAwesomeDetection . _ _pollUntil ( {
2024-07-17 01:13:31 +08:00
fn : ( ) => {
2022-02-08 04:16:51 +08:00
return ! ! window . FontAwesomeConfig || ! ! window . FontAwesomeKitConfig ;
}
} ) . then ( function ( ) {
2024-07-17 01:13:31 +08:00
const scriptNode = document . getElementById ( nodeUnderTestId ) ;
2022-02-08 04:16:51 +08:00
parent . postMessage ( {
type : 'fontawesome-conflict' ,
technology : 'js' ,
src : scriptNode . src ,
innerText : scriptNode . innerText ,
tagName : scriptNode . tagName ,
2024-07-17 01:13:31 +08:00
md5
2022-02-08 04:16:51 +08:00
} , parentOrigin ) ;
} ) . catch ( function ( e ) {
var scriptNode = document . getElementById ( nodeUnderTestId ) ;
if ( e === 'timeout' ) {
parent . postMessage ( {
type : 'no-conflict' ,
src : scriptNode . src ,
innerText : scriptNode . innerText ,
tagName : scriptNode . tagName ,
2024-07-17 01:13:31 +08:00
md5
2022-02-08 04:16:51 +08:00
} , parentOrigin ) ;
} else {
console . error ( e ) ;
}
} ) ;
} ;
diagScript . innerText = "(" . concat ( diagScriptFun . toString ( ) , ")('" ) . concat ( nodeUnderTestId , "', '" ) . concat ( md5ForScript , "', '" ) . concat ( parentOrigin , "');" ) ;
diagFrame . onload = function ( ) {
diagFrame . contentWindow . addEventListener ( 'error' , silenceErrors , true ) ;
diagFrame . contentDocument . head . appendChild ( diagScript ) ;
diagFrame . contentDocument . head . appendChild ( scriptUnderTest ) ;
} ;
2024-07-17 01:13:31 +08:00
domready ( ( ) => DOCUMENT . body . appendChild ( diagFrame ) ) ;
2022-02-08 04:16:51 +08:00
}
return scriptsByMD5 ;
}
function setDoneResults ( _ref2 ) {
2024-07-17 01:13:31 +08:00
let {
nodesTested ,
nodesFound
} = _ref2 ;
2022-02-08 04:16:51 +08:00
WINDOW . FontAwesomeDetection = WINDOW . FontAwesomeDetection || { } ;
WINDOW . FontAwesomeDetection . nodesTested = nodesTested ;
WINDOW . FontAwesomeDetection . nodesFound = nodesFound ;
WINDOW . FontAwesomeDetection . detectionDone = true ;
}
function conflictDetection ( ) {
2024-07-17 01:13:31 +08:00
let report$$1 = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : ( ) => { } ;
const nodesTested = {
2022-02-08 04:16:51 +08:00
conflict : { } ,
noConflict : { }
} ;
WINDOW . onmessage = function ( e ) {
if ( WINDOW . location . origin === 'file://' || e . origin === WINDOW . location . origin ) {
if ( e && e . data ) {
if ( e . data . type === 'fontawesome-conflict' ) {
nodesTested . conflict [ e . data . md5 ] = e . data ;
} else if ( e . data . type === 'no-conflict' ) {
nodesTested . noConflict [ e . data . md5 ] = e . data ;
}
}
}
} ;
2024-07-17 01:13:31 +08:00
const scriptsToTest = detectSvgConflicts ( DOCUMENT . currentScript ) ;
const cssToTest = detectWebfontConflicts ( ) ;
2024-11-19 05:38:46 +08:00
const nodesFound = _objectSpread2 ( _objectSpread2 ( { } , scriptsToTest ) , cssToTest ) ;
const testCount = Object . keys ( scriptsToTest ) . length + Object . keys ( cssToTest ) . length ;
// The resultsCollectionMaxWait allows for the time between when the tests running under
2022-02-08 04:16:51 +08:00
// child iframes call postMessage with their results, and when the parent window
// receives and handles those events with window.onmessage.
// Making it configurable allows us to test the scenario where this timeout is exceeded.
// Naming it something very different from "timeout" is to help avoid the potential ambiguity between
// these two timeout-related settings.
2024-07-17 01:13:31 +08:00
const masterTimeout = WINDOW . FontAwesomeDetection . timeout + WINDOW . FontAwesomeDetection . resultsCollectionMaxWait ;
2022-02-08 04:16:51 +08:00
console . group ( 'Font Awesome Detector' ) ;
if ( testCount === 0 ) {
console . info ( '%cAll Good!' , 'color: green; font-size: large' ) ;
console . info ( 'We didn\'t find anything that needs testing for conflicts. Ergo, no conflicts.' ) ;
} else {
console . info ( "Testing " . concat ( testCount , " possible conflicts." ) ) ;
console . info ( "We'll wait about " . concat ( Math . round ( WINDOW . FontAwesomeDetection . timeout / 10 ) / 100 , " seconds while testing these and\n" ) + "then up to another " . concat ( Math . round ( WINDOW . FontAwesomeDetection . resultsCollectionMaxWait / 10 ) / 100 , " to allow the browser time\n" ) + "to accumulate the results. But we'll probably be outta here way before then.\n\n" ) ;
console . info ( "You can adjust those durations by assigning values to these attributes on the <script> element that loads this detection:" ) ;
console . info ( "\t%c" . concat ( timeoutAttr , "%c: milliseconds to wait for each test before deciding whether it's a conflict." ) , 'font-weight: bold;' , 'font-size: normal;' ) ;
console . info ( "\t%c" . concat ( resultsCollectionMaxWaitAttr , "%c: milliseconds to wait for the browser to accumulate test results before giving up." ) , 'font-weight: bold;' , 'font-size: normal;' ) ;
pollUntil ( {
// Give this overall timer a little extra cushion
maxDuration : masterTimeout ,
showProgress : true ,
progressIndicator : 'waiting...' ,
2024-07-17 01:13:31 +08:00
fn : ( ) => {
2022-02-08 04:16:51 +08:00
return Object . keys ( nodesTested . conflict ) . length + Object . keys ( nodesTested . noConflict ) . length >= testCount ;
}
2024-07-17 01:13:31 +08:00
} ) . then ( ( ) => {
2022-02-08 04:16:51 +08:00
console . info ( 'DONE!' ) ;
setDoneResults ( {
2024-07-17 01:13:31 +08:00
nodesTested ,
nodesFound
2022-02-08 04:16:51 +08:00
} ) ;
report$$1 ( {
2024-07-17 01:13:31 +08:00
nodesTested ,
nodesFound
2022-02-08 04:16:51 +08:00
} ) ;
console . groupEnd ( ) ;
2024-07-17 01:13:31 +08:00
} ) . catch ( e => {
2022-02-08 04:16:51 +08:00
if ( e === 'timeout' ) {
console . info ( 'TIME OUT! We waited until we got tired. Here\'s what we found:' ) ;
setDoneResults ( {
2024-07-17 01:13:31 +08:00
nodesTested ,
nodesFound
2022-02-08 04:16:51 +08:00
} ) ;
report$$1 ( {
2024-07-17 01:13:31 +08:00
nodesTested ,
nodesFound
2022-02-08 04:16:51 +08:00
} ) ;
} else {
console . info ( 'Whoops! We hit an error:' , e ) ;
console . info ( 'Here\'s what we\'d found up until that error:' ) ;
setDoneResults ( {
2024-07-17 01:13:31 +08:00
nodesTested ,
nodesFound
2022-02-08 04:16:51 +08:00
} ) ;
report$$1 ( {
2024-07-17 01:13:31 +08:00
nodesTested ,
nodesFound
2022-02-08 04:16:51 +08:00
} ) ;
}
console . groupEnd ( ) ;
} ) ;
}
2024-11-19 05:38:46 +08:00
}
2022-02-08 04:16:51 +08:00
2024-11-19 05:38:46 +08:00
// Allow clients to access, and in some cases, override some properties
const initialConfig = WINDOW . FontAwesomeDetection || { } ;
2022-02-08 04:16:51 +08:00
2024-11-19 05:38:46 +08:00
// These can be overridden
2024-07-17 01:13:31 +08:00
const _default = {
report ,
2022-02-08 04:16:51 +08:00
timeout : + ( DOCUMENT . currentScript . getAttribute ( timeoutAttr ) || "2000" ) ,
resultsCollectionMaxWait : + ( DOCUMENT . currentScript . getAttribute ( resultsCollectionMaxWaitAttr ) || "5000" )
} ;
2024-11-19 05:38:46 +08:00
const _config = _objectSpread2 ( _objectSpread2 ( _objectSpread2 ( { } , _default ) , initialConfig ) , { } , {
2022-02-08 04:16:51 +08:00
// These cannot be overridden
_ _pollUntil : pollUntil ,
2024-07-17 01:13:31 +08:00
md5ForNode ,
2022-02-08 04:16:51 +08:00
detectionDone : false ,
nodesTested : null ,
nodesFound : null
2024-11-19 05:38:46 +08:00
} ) ;
2022-02-08 04:16:51 +08:00
WINDOW . FontAwesomeDetection = _config ;
2024-11-19 05:38:46 +08:00
var S = {
classic : {
fa : "solid" ,
fas : "solid" ,
"fa-solid" : "solid" ,
far : "regular" ,
"fa-regular" : "regular" ,
fal : "light" ,
"fa-light" : "light" ,
fat : "thin" ,
"fa-thin" : "thin" ,
fab : "brands" ,
"fa-brands" : "brands"
} ,
duotone : {
fa : "solid" ,
fad : "solid" ,
"fa-solid" : "solid" ,
"fa-duotone" : "solid" ,
fadr : "regular" ,
"fa-regular" : "regular" ,
fadl : "light" ,
"fa-light" : "light" ,
fadt : "thin" ,
"fa-thin" : "thin"
} ,
sharp : {
fa : "solid" ,
fass : "solid" ,
"fa-solid" : "solid" ,
fasr : "regular" ,
"fa-regular" : "regular" ,
fasl : "light" ,
"fa-light" : "light" ,
fast : "thin" ,
"fa-thin" : "thin"
} ,
"sharp-duotone" : {
fa : "solid" ,
fasds : "solid" ,
"fa-solid" : "solid" ,
fasdr : "regular" ,
"fa-regular" : "regular" ,
fasdl : "light" ,
"fa-light" : "light" ,
fasdt : "thin" ,
"fa-thin" : "thin"
}
} ;
var s = "classic" ;
var G = {
classic : {
900 : "fas" ,
400 : "far" ,
normal : "far" ,
300 : "fal" ,
100 : "fat"
} ,
duotone : {
900 : "fad" ,
400 : "fadr" ,
300 : "fadl" ,
100 : "fadt"
} ,
sharp : {
900 : "fass" ,
400 : "fasr" ,
300 : "fasl" ,
100 : "fast"
} ,
"sharp-duotone" : {
900 : "fasds" ,
400 : "fasdr" ,
300 : "fasdl" ,
100 : "fasdt"
}
} ;
var xt = {
classic : {
solid : "fas" ,
regular : "far" ,
light : "fal" ,
thin : "fat" ,
brands : "fab"
} ,
duotone : {
solid : "fad" ,
regular : "fadr" ,
light : "fadl" ,
thin : "fadt"
} ,
sharp : {
solid : "fass" ,
regular : "fasr" ,
light : "fasl" ,
thin : "fast"
} ,
"sharp-duotone" : {
solid : "fasds" ,
regular : "fasdr" ,
light : "fasdl" ,
thin : "fasdt"
}
} ;
var St = {
kit : {
fak : "kit" ,
"fa-kit" : "kit"
} ,
"kit-duotone" : {
fakd : "kit-duotone" ,
"fa-kit-duotone" : "kit-duotone"
}
} ;
var Ct = {
2024-07-17 01:13:31 +08:00
kit : {
"fa-kit" : "fak"
} ,
"kit-duotone" : {
"fa-kit-duotone" : "fakd"
}
} ;
2024-11-19 05:38:46 +08:00
var Wt = {
kit : {
fak : "fa-kit"
} ,
"kit-duotone" : {
fakd : "fa-kit-duotone"
}
} ;
var Et = {
kit : {
kit : "fak"
} ,
"kit-duotone" : {
"kit-duotone" : "fakd"
}
} ;
var po = {
classic : {
"fa-brands" : "fab" ,
"fa-duotone" : "fad" ,
"fa-light" : "fal" ,
"fa-regular" : "far" ,
"fa-solid" : "fas" ,
"fa-thin" : "fat"
} ,
duotone : {
"fa-regular" : "fadr" ,
"fa-light" : "fadl" ,
"fa-thin" : "fadt"
} ,
sharp : {
"fa-solid" : "fass" ,
"fa-regular" : "fasr" ,
"fa-light" : "fasl" ,
"fa-thin" : "fast"
} ,
"sharp-duotone" : {
"fa-solid" : "fasds" ,
"fa-regular" : "fasdr" ,
"fa-light" : "fasdl" ,
"fa-thin" : "fasdt"
}
} ,
co = {
classic : {
fab : "fa-brands" ,
fad : "fa-duotone" ,
fal : "fa-light" ,
far : "fa-regular" ,
fas : "fa-solid" ,
fat : "fa-thin"
} ,
duotone : {
fadr : "fa-regular" ,
fadl : "fa-light" ,
fadt : "fa-thin"
} ,
sharp : {
fass : "fa-solid" ,
fasr : "fa-regular" ,
fasl : "fa-light" ,
fast : "fa-thin"
} ,
"sharp-duotone" : {
fasds : "fa-solid" ,
fasdr : "fa-regular" ,
fasdl : "fa-light" ,
fasdt : "fa-thin"
}
} ;
2024-07-17 01:13:31 +08:00
const PRODUCTION = ( ( ) => {
2022-02-08 04:16:51 +08:00
try {
return process . env . NODE _ENV === 'production' ;
2024-07-17 01:13:31 +08:00
} catch ( e$$1 ) {
2022-02-08 04:16:51 +08:00
return false ;
}
2024-07-17 01:13:31 +08:00
} ) ( ) ;
2022-09-01 05:02:43 +08:00
function familyProxy ( obj ) {
// Defaults to the classic family if family is not available
return new Proxy ( obj , {
2024-07-17 01:13:31 +08:00
get ( target , prop ) {
2024-11-19 05:38:46 +08:00
return prop in target ? target [ prop ] : target [ s ] ;
2022-09-01 05:02:43 +08:00
}
} ) ;
}
2024-11-19 05:38:46 +08:00
const _PREFIX _TO _STYLE = _objectSpread2 ( { } , S ) ;
// We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, "classic" family does not have any
// duotone styles. But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding
// {'fa-duotone': 'duotone'}
_PREFIX _TO _STYLE [ s ] = _objectSpread2 ( _objectSpread2 ( _objectSpread2 ( _objectSpread2 ( { } , {
'fa-duotone' : 'duotone'
} ) , S [ s ] ) , St [ 'kit' ] ) , St [ 'kit-duotone' ] ) ;
2024-07-17 01:13:31 +08:00
const PREFIX _TO _STYLE = familyProxy ( _PREFIX _TO _STYLE ) ;
2024-11-19 05:38:46 +08:00
const _STYLE _TO _PREFIX = _objectSpread2 ( { } , xt ) ;
// We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, "classic" family does not have any
// duotone styles. But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}
_STYLE _TO _PREFIX [ s ] = _objectSpread2 ( _objectSpread2 ( _objectSpread2 ( _objectSpread2 ( { } , {
duotone : 'fad'
} ) , _STYLE _TO _PREFIX [ s ] ) , Et [ 'kit' ] ) , Et [ 'kit-duotone' ] ) ;
2024-07-17 01:13:31 +08:00
const STYLE _TO _PREFIX = familyProxy ( _STYLE _TO _PREFIX ) ;
2024-11-19 05:38:46 +08:00
const _PREFIX _TO _LONG _STYLE = _objectSpread2 ( { } , co ) ;
_PREFIX _TO _LONG _STYLE [ s ] = _objectSpread2 ( _objectSpread2 ( { } , _PREFIX _TO _LONG _STYLE [ s ] ) , Wt [ 'kit' ] ) ;
2024-07-17 01:13:31 +08:00
const PREFIX _TO _LONG _STYLE = familyProxy ( _PREFIX _TO _LONG _STYLE ) ;
2024-11-19 05:38:46 +08:00
const _LONG _STYLE _TO _PREFIX = _objectSpread2 ( { } , po ) ;
_LONG _STYLE _TO _PREFIX [ s ] = _objectSpread2 ( _objectSpread2 ( { } , _LONG _STYLE _TO _PREFIX [ s ] ) , Ct [ 'kit' ] ) ;
2024-07-17 01:13:31 +08:00
const LONG _STYLE _TO _PREFIX = familyProxy ( _LONG _STYLE _TO _PREFIX ) ;
2024-11-19 05:38:46 +08:00
const _FONT _WEIGHT _TO _PREFIX = _objectSpread2 ( { } , G ) ;
2024-07-17 01:13:31 +08:00
const FONT _WEIGHT _TO _PREFIX = familyProxy ( _FONT _WEIGHT _TO _PREFIX ) ;
2022-02-08 04:16:51 +08:00
function bunker ( fn ) {
try {
for ( var _len = arguments . length , args = new Array ( _len > 1 ? _len - 1 : 0 ) , _key = 1 ; _key < _len ; _key ++ ) {
args [ _key - 1 ] = arguments [ _key ] ;
}
2024-07-17 01:13:31 +08:00
fn ( ... args ) ;
2022-02-08 04:16:51 +08:00
} catch ( e ) {
if ( ! PRODUCTION ) {
throw e ;
}
}
}
2024-07-17 01:13:31 +08:00
bunker ( ( ) => {
2022-02-08 04:16:51 +08:00
if ( IS _BROWSER && IS _DOM ) {
conflictDetection ( window . FontAwesomeDetection . report ) ;
}
} ) ;
} ) ) ) ;