Update Font Awesome to v6.6.x, adjust some icon references.

This commit is contained in:
fusionate 2024-08-09 18:14:52 -06:00
parent 10bd1b9f9f
commit 4b23913555
No known key found for this signature in database
2622 changed files with 321441 additions and 70166 deletions

View File

@ -215,7 +215,7 @@
echo " <div class='heading'><b>" . $text['header-call_forward'] . "</b></div>\n";
echo " <div class='actions'>\n";
if ($num_rows > 10) {
echo button::create(['type' => 'button', 'label' => $text['button-view_all'], 'icon' => 'project-diagram', 'collapse' => false, 'link' => PROJECT_PATH . '/app/call_forward/call_forward.php']);
echo button::create(['type' => 'button', 'label' => $text['button-view_all'], 'icon' => 'diagram-project', 'collapse' => false, 'link' => PROJECT_PATH . '/app/call_forward/call_forward.php']);
}
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";

View File

@ -2330,7 +2330,7 @@ if (permission_exists('contact_relation_view')) {
}
echo " <div class='button no-link' style='float: left; margin-top: 1px; margin-left: 8px;'>\n";
echo " <a href='contact_edit.php?id=".escape($row['relation_contact_uuid'])."' target='_blank'>\n";
echo " <span class='fas fa-user-friends' style='color: ".$body_text_color."; float: left; margin-top: 7px; margin-left: 3px;'></span>\n";
echo " <span class='fas fa-user-group' style='color: ".$body_text_color."; float: left; margin-top: 7px; margin-left: 3px;'></span>\n";
echo " </a>\n";
echo " </div>\n";
echo " </div>\n";

View File

@ -480,7 +480,7 @@
if (permission_exists('contact_relation_view')) {
echo " <div class='box contact-details'>\n";
echo " <div class='grid contact-details'>\n";
echo " <div class='box' title=\"".$text['header-contact_relations']."\"><b class='fas fa-project-diagram fa-fw fa-lg'></b></div>\n";
echo " <div class='box' title=\"".$text['header-contact_relations']."\"><b class='fas fa-diagram-project fa-fw fa-lg'></b></div>\n";
echo " <div class='box'>\n";
require "contact_relations_view.php";
echo " </div>\n";

View File

@ -4,7 +4,7 @@
$array['dashboard'][$x]['dashboard_uuid'] = 'a294b771-a125-4d36-b51a-973540346fad';
$array['dashboard'][$x]['dashboard_name'] = 'Destinations';
$array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-sign-in-alt';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-solid fa-right-to-bracket';
$array['dashboard'][$x]['dashboard_url'] = '/app/destinations/destinations.php';
$array['dashboard'][$x]['dashboard_target'] = 'self';
$array['dashboard'][$x]['dashboard_width'] = '';

View File

@ -27,7 +27,7 @@
$apps[$x]['menu'][$y]['uuid'] = "b94e8bd9-9eb5-e427-9c26-ff7a6c21552a";
$apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-exchange-alt";
$apps[$x]['menu'][$y]['icon'] = "fa-solid fa-right-left";
$apps[$x]['menu'][$y]['path'] = "";
$apps[$x]['menu'][$y]['order'] = "15";
$apps[$x]['menu'][$y]['groups'][] = "admin";

File diff suppressed because it is too large Load Diff

View File

@ -1124,7 +1124,7 @@
unset($button_margin);
}
if (permission_exists('follow_me') || permission_exists('call_forward') || permission_exists('do_not_disturb')) {
echo button::create(['type'=>'button','label'=>$text['button-call_forward'],'icon'=>'project-diagram','style'=>($button_margin ?? ''),'link'=>'../call_forward/call_forward_edit.php?id='.urlencode($extension_uuid)]);
echo button::create(['type'=>'button','label'=>$text['button-call_forward'],'icon'=>'diagram-project','style'=>($button_margin ?? ''),'link'=>'../call_forward/call_forward_edit.php?id='.urlencode($extension_uuid)]);
unset($button_margin);
}
if (permission_exists('extension_setting_view')) {

View File

@ -4,7 +4,7 @@
$array['dashboard'][$x]['dashboard_uuid'] = '3af7af65-7861-4d05-a0bc-36d704458fa0';
$array['dashboard'][$x]['dashboard_name'] = 'IVR Menus';
$array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-project-diagram';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-solid fa-diagram-project';
$array['dashboard'][$x]['dashboard_url'] = '/app/ivr_menus/ivr_menus.php';
$array['dashboard'][$x]['dashboard_target'] = 'self';
$array['dashboard'][$x]['dashboard_width'] = '';
@ -39,4 +39,4 @@ $array['dashboard'][$x]['dashboard_groups'][$y]['dashboard_uuid'] = '3af7af65-78
$array['dashboard'][$x]['dashboard_groups'][$y]['group_name'] = 'admin';
$y++;
?>
?>

View File

@ -119,6 +119,16 @@ if ($domains_processed == 1) {
$p->delete('dashboard_add', 'temp');
$p->delete('dashboard_group_add', 'temp');
//update dashboard icons to be prefixed with v6.x font awesome style class name (e.g. 'fa-solid ')
$queries[] = "update v_dashboard set dashboard_icon = concat('fa-solid ', dashboard_icon) where dashboard_icon is not null and dashboard_icon not like 'fa-solid fa-%' and dashboard_icon not like 'fa-regular fa-%' and dashboard_icon not like 'fa-brands fa-%' ";
//execute array of queries
foreach ($queries as $sql) {
$database = new database;
$database->execute($sql);
}
unset($queries, $sql);
}
?>
?>

View File

@ -558,36 +558,61 @@
echo " <tr class='type_icon' ".($dashboard_path != 'core/dashboard/resources/dashboard/icon.php' ? "style='display: none;'" : null).">";
echo " <td class='vncell'>".$text['label-icon']."</td>";
echo " <td class='vtable' style='vertical-align: bottom;'>";
if (file_exists($_SERVER["PROJECT_ROOT"].'/resources/fontawesome/fas_icons.php')) {
include 'resources/fontawesome/fas_icons.php';
if (is_array($font_awesome_solid_icons) && @sizeof($font_awesome_solid_icons) != 0) {
// rebuild and sort array
foreach ($font_awesome_solid_icons as $i => $icon_class) {
$icon_label = str_replace('fa-', '', $icon_class);
if (file_exists($_SERVER["PROJECT_ROOT"].'/resources/fontawesome/fa_icons.php')) {
include $_SERVER["PROJECT_ROOT"].'/resources/fontawesome/fa_icons.php';
if (!empty($font_awesome_icons) && is_array($font_awesome_icons)) {
//initialize variables
$previous_icon_classes = $previous_icon_name = $previous_icon_style = '';
//rebuild array, parse and format label
foreach ($font_awesome_icons as $i => $icon_classes) {
//split classes
$icon_class = explode(' ', $icon_classes);
$icon_style = $icon_class[0];
$icon_name = $icon_class[1];
//determine label
$icon_label = str_replace('fa-', '', $icon_name);
$icon_label = str_replace('-', ' ', $icon_label);
$icon_label = ucwords($icon_label);
$icons[$icon_class] = $icon_label;
//update previous
if (
!empty($previous_icon_name) &&
!empty($previous_icon_style) &&
$icon_name == $previous_icon_name &&
$icon_style != $previous_icon_style
) {
$icons[$previous_icon_classes] = $icon_label.' - '.ucwords(str_replace('fa-', '', $previous_icon_style));
$append_style = true;
}
else {
$append_style = false;
}
//set current
$icons[$icon_classes] = $icon_label.($append_style ? ' - '.ucwords(str_replace('fa-', '', $icon_style)) : null);
//set previous values
$previous_icon_name = $icon_name;
$previous_icon_style = $icon_style;
$previous_icon_classes = $icon_classes;
}
asort($icons, SORT_STRING);
unset($icon_classes, $icon_class, $icon_style, $icon_name, $previous_icon_classes, $previous_icon_style, $previous_icon_name, $icon_label, $previous_icon_name, $previous_icon_style, $previous_icon_classes);
echo "<table cellpadding='0' cellspacing='0' border='0'>\n";
echo " <tr>\n";
echo " <td>\n";
echo " <select class='formfld' name='dashboard_icon' id='dashboard_icon' onchange=\"$('#icons').slideUp(); $('#grid_icon').fadeIn();\">\n";
echo " <option value=''></option>\n";
foreach ($icons as $icon_class => $icon_label) {
$selected = ($dashboard_icon == $icon_class) ? "selected" : null;
$selected = $dashboard_icon == $icon_class ? "selected" : null;
echo " <option value='".escape($icon_class)."' ".$selected.">".escape($icon_label)."</option>\n";
}
echo " </select>\n";
echo " </td>\n";
echo " <td style='padding: 0 0 0 5px;'>\n";
echo " <button id='grid_icon' type='button' class='btn btn-default list_control_icon' style='font-size: 15px; padding-top: 1px; padding-left: 3px;' onclick=\"$('#icons').fadeIn(); $(this).fadeOut();\"><span class='fas fa-th'></span></button>";
echo " <button id='grid_icon' type='button' class='btn btn-default list_control_icon' style='font-size: 15px; padding-top: 1px; padding-left: 3px;' onclick=\"$('#icons').fadeIn(); $(this).fadeOut();\"><span class='fa-solid fa-th'></span></button>";
echo " </td>\n";
echo " </tr>\n";
echo "</table>\n";
echo "<div id='icons' style='clear: both; display: none; margin-top: 8px; padding-top: 10px; color: #000; max-height: 400px; overflow: auto;'>\n";
foreach ($icons as $icon_class => $icon_label) {
echo "<span class='fas ".escape($icon_class)." fa-fw' style='font-size: 24px; float: left; margin: 0 8px 8px 0; cursor: pointer; opacity: 0.3;' title='".escape($icon_label)."' onclick=\"$('#dashboard_icon').val('".escape($icon_class)."'); $('#icons').slideUp(); $('#grid_icon').fadeIn();\" onmouseover=\"this.style.opacity='1';\" onmouseout=\"this.style.opacity='0.3';\"></span>\n";
echo "<span class='".escape($icon_class)." fa-fw' style='font-size: 24px; float: left; margin: 0 8px 8px 0; cursor: pointer; opacity: 0.3;' title='".escape($icon_label)."' onclick=\"$('#dashboard_icon').val('".escape($icon_class)."'); $('#icons').slideUp(); $('#grid_icon').fadeIn();\" onmouseover=\"this.style.opacity='1';\" onmouseout=\"this.style.opacity='0.3';\"></span>\n";
}
echo "</div>";
}

View File

@ -58,7 +58,7 @@
$apps[$x]['menu'][$y]['uuid'] = "02194288-6d56-6d3e-0b1a-d53a2bc10788";
$apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-home";
$apps[$x]['menu'][$y]['icon'] = "fa-solid fa-house";
$apps[$x]['menu'][$y]['path'] = "";
$apps[$x]['menu'][$y]['order'] = "5";
$apps[$x]['menu'][$y]['groups'][] = "superadmin";
@ -93,7 +93,7 @@
$apps[$x]['menu'][$y]['uuid'] = "bc96d773-ee57-0cdd-c3ac-2d91aba61b55";
$apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-user";
$apps[$x]['menu'][$y]['icon'] = "fa-solid fa-user";
$apps[$x]['menu'][$y]['path'] = "";
$apps[$x]['menu'][$y]['order'] = "10";
$apps[$x]['menu'][$y]['groups'][] = "admin";
@ -124,7 +124,7 @@
$apps[$x]['menu'][$y]['uuid'] = "fd29e39c-c936-f5fc-8e2b-611681b266b5";
$apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-paper-plane";
$apps[$x]['menu'][$y]['icon'] = "fa-solid fa-paper-plane";
$apps[$x]['menu'][$y]['path'] = "";
$apps[$x]['menu'][$y]['order'] = "20";
$apps[$x]['menu'][$y]['groups'][] = "superadmin";
@ -159,7 +159,7 @@
$apps[$x]['menu'][$y]['uuid'] = "0438b504-8613-7887-c420-c837ffb20cb1";
$apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-chart-bar";
$apps[$x]['menu'][$y]['icon'] = "fa-solid fa-chart-column";
$apps[$x]['menu'][$y]['path'] = "";
$apps[$x]['menu'][$y]['order'] = "25";
$apps[$x]['menu'][$y]['groups'][] = "admin";
@ -191,7 +191,7 @@
$apps[$x]['menu'][$y]['uuid'] = "594d99c5-6128-9c88-ca35-4b33392cec0f";
$apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-cog";
$apps[$x]['menu'][$y]['icon'] = "fa-solid fa-gear";
$apps[$x]['menu'][$y]['path'] = "";
$apps[$x]['menu'][$y]['order'] = "30";
$apps[$x]['menu'][$y]['groups'][] = "superadmin";
@ -222,7 +222,7 @@
$apps[$x]['menu'][$y]['uuid'] = "c85bf816-b88d-40fa-8634-11b456928afa";
$apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-sign-in-alt";
$apps[$x]['menu'][$y]['icon'] = "fa-solid fa-right-to-bracket";
$apps[$x]['menu'][$y]['path'] = "/login.php";
$apps[$x]['menu'][$y]['order'] = "99";
$apps[$x]['menu'][$y]['groups'][] = "public";
@ -253,7 +253,7 @@
$apps[$x]['menu'][$y]['uuid'] = "0d29e9f4-0c9b-9d8d-cd2d-454899dc9bc4";
$apps[$x]['menu'][$y]['parent_uuid'] = "02194288-6d56-6d3e-0b1a-d53a2bc10788";
$apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-sign-out-alt";
$apps[$x]['menu'][$y]['icon'] = "fa-solid fa-right-from-bracket";
$apps[$x]['menu'][$y]['path'] = "/logout.php";
$apps[$x]['menu'][$y]['order'] = "";
$apps[$x]['menu'][$y]['groups'][] = "superadmin";
@ -263,4 +263,4 @@
$apps[$x]['menu'][$y]['groups'][] = "fax";
$y++;
?>
?>

View File

@ -433,36 +433,61 @@
echo " <tr>";
echo " <td class='vncell'>".$text['label-icon']."</td>";
echo " <td class='vtable' style='vertical-align: bottom;'>";
if (file_exists($_SERVER["PROJECT_ROOT"].'/resources/fontawesome/fas_icons.php')) {
include 'resources/fontawesome/fas_icons.php';
if (is_array($font_awesome_solid_icons) && @sizeof($font_awesome_solid_icons) != 0) {
// rebuild and sort array
foreach ($font_awesome_solid_icons as $i => $icon_class) {
$icon_label = str_replace('fa-', '', $icon_class);
if (file_exists($_SERVER["PROJECT_ROOT"].'/resources/fontawesome/fa_icons.php')) {
include $_SERVER["PROJECT_ROOT"].'/resources/fontawesome/fa_icons.php';
if (!empty($font_awesome_icons) && is_array($font_awesome_icons)) {
//initialize variables
$previous_icon_classes = $previous_icon_name = $previous_icon_style = '';
//rebuild array, parse and format label
foreach ($font_awesome_icons as $i => $icon_classes) {
//split classes
$icon_class = explode(' ', $icon_classes);
$icon_style = $icon_class[0];
$icon_name = $icon_class[1];
//determine label
$icon_label = str_replace('fa-', '', $icon_name);
$icon_label = str_replace('-', ' ', $icon_label);
$icon_label = ucwords($icon_label);
$icons[$icon_class] = $icon_label;
//update previous
if (
!empty($previous_icon_name) &&
!empty($previous_icon_style) &&
$icon_name == $previous_icon_name &&
$icon_style != $previous_icon_style
) {
$icons[$previous_icon_classes] = $icon_label.' - '.ucwords(str_replace('fa-', '', $previous_icon_style));
$append_style = true;
}
else {
$append_style = false;
}
//set current
$icons[$icon_classes] = $icon_label.($append_style ? ' - '.ucwords(str_replace('fa-', '', $icon_style)) : null);
//set previous values
$previous_icon_name = $icon_name;
$previous_icon_style = $icon_style;
$previous_icon_classes = $icon_classes;
}
asort($icons, SORT_STRING);
unset($icon_classes, $icon_class, $icon_style, $icon_name, $previous_icon_classes, $previous_icon_style, $previous_icon_name, $icon_label, $previous_icon_name, $previous_icon_style, $previous_icon_classes);
echo "<table cellpadding='0' cellspacing='0' border='0'>\n";
echo " <tr>\n";
echo " <td>\n";
echo " <select class='formfld' name='menu_item_icon' id='menu_item_icon' onchange=\"$('#icons').slideUp(); $('#grid_icon').fadeIn();\">\n";
echo " <option value=''></option>\n";
foreach ($icons as $icon_class => $icon_label) {
$selected = ($menu_item_icon == $icon_class) ? "selected" : null;
$selected = $menu_item_icon == $icon_class ? "selected" : null;
echo " <option value='".escape($icon_class)."' ".$selected.">".escape($icon_label)."</option>\n";
}
echo " </select>\n";
echo " </td>\n";
echo " <td style='padding: 0 0 0 5px;'>\n";
echo " <button id='grid_icon' type='button' class='btn btn-default list_control_icon' style='font-size: 15px; padding-top: 1px; padding-left: 3px;' onclick=\"$('#icons').fadeIn(); $(this).fadeOut();\"><span class='fas fa-th'></span></button>";
echo " <button id='grid_icon' type='button' class='btn btn-default list_control_icon' style='font-size: 15px; padding-top: 1px; padding-left: 3px;' onclick=\"$('#icons').fadeIn(); $(this).fadeOut();\"><span class='fa-solid fa-th'></span></button>";
echo " </td>\n";
echo " </tr>\n";
echo "</table>\n";
echo "<div id='icons' style='clear: both; display: none; margin-top: 8px; padding-top: 10px; color: #000; max-height: 400px; overflow: auto;'>\n";
foreach ($icons as $icon_class => $icon_label) {
echo "<span class='fas ".escape($icon_class)." fa-fw' style='font-size: 24px; float: left; margin: 0 8px 8px 0; cursor: pointer; opacity: 0.3;' title='".escape($icon_label)."' onclick=\"$('#menu_item_icon').val('".escape($icon_class)."'); $('#icons').slideUp(); $('#grid_icon').fadeIn();\" onmouseover=\"this.style.opacity='1';\" onmouseout=\"this.style.opacity='0.3';\"></span>\n";
echo "<span class='".escape($icon_class)." fa-fw' style='font-size: 24px; float: left; margin: 0 8px 8px 0; cursor: pointer; opacity: 0.3;' title='".escape($icon_label)."' onclick=\"$('#menu_item_icon').val('".escape($icon_class)."'); $('#icons').slideUp(); $('#grid_icon').fadeIn();\" onmouseover=\"this.style.opacity='1';\" onmouseout=\"this.style.opacity='0.3';\"></span>\n";
}
echo "</div>";
}

View File

@ -4,7 +4,7 @@
$array['dashboard'][$x]['dashboard_uuid'] = '57fd7761-6ffb-4a11-bdf0-4ce632f50c3c';
$array['dashboard'][$x]['dashboard_name'] = 'Users';
$array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-user-friends';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-solid fa-user-group';
$array['dashboard'][$x]['dashboard_url'] = '/core/users/users.php';
$array['dashboard'][$x]['dashboard_target'] = 'self';
$array['dashboard'][$x]['dashboard_width'] = '';
@ -43,7 +43,7 @@ $x++;
$array['dashboard'][$x]['dashboard_uuid'] = '8aa9bb66-7a62-4a90-b52e-68bd4ccf325f';
$array['dashboard'][$x]['dashboard_name'] = 'Account Settings';
$array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-user-cog';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-solid fa-user-gear';
$array['dashboard'][$x]['dashboard_url'] = '/core/users/user_edit.php?id=user';
$array['dashboard'][$x]['dashboard_target'] = 'self';
$array['dashboard'][$x]['dashboard_width'] = '';
@ -78,7 +78,7 @@ $x++;
$array['dashboard'][$x]['dashboard_uuid'] = 'b04ad600-9acc-45e5-a89a-d7a59a6fcb4c';
$array['dashboard'][$x]['dashboard_name'] = 'Logout';
$array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-sign-out-alt';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-solid fa-right-from-bracket';
$array['dashboard'][$x]['dashboard_url'] = '/logout.php';
$array['dashboard'][$x]['dashboard_target'] = 'self';
$array['dashboard'][$x]['dashboard_width'] = '';
@ -112,4 +112,4 @@ $array['dashboard'][$x]['dashboard_groups'][$y]['dashboard_group_uuid'] = '3cf3a
$array['dashboard'][$x]['dashboard_groups'][$y]['dashboard_uuid'] = 'b04ad600-9acc-45e5-a89a-d7a59a6fcb4c';
$array['dashboard'][$x]['dashboard_groups'][$y]['group_name'] = 'user';
?>
?>

View File

@ -84,8 +84,8 @@ if (!class_exists('button')) {
$button_icons == 'auto' ||
!$array['label']
)) {
$icon_class = is_array($array['icon']) ? $array['icon']['text'] : 'fas fa-'.$array['icon'];
$button .= "<span class='".$icon_class." fa-fw'></span>";
$icon_class = is_array($array['icon']) ? $array['icon']['text'] : $array['icon'];
$button .= "<span class='".(substr($icon_class, 0, 3) != 'fa-' ? 'fa-solid fa-' : null).$icon_class." fa-fw'></span>";
}
//label
if (!empty($array['label']) && (
@ -167,7 +167,7 @@ if (!class_exists('button')) {
type 'button' (default) | 'submit' | 'link'
label button text
icon name without vendor prefix (e.g. 'user' instead of 'fa-user')
icon name with full vendor style and prefix (e.g. 'fa-solid fa-user' instead of 'fa-user' or 'user')
value submitted value (if type is also set to 'submit')
target '_blank' | '_self' (default) | etc
onclick javascript
@ -237,4 +237,4 @@ if (!class_exists('button')) {
*/
?>
?>

View File

@ -0,0 +1,241 @@
<?php
/*
* FusionPBX
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is FusionPBX
*
* The Initial Developer of the Original Code is
* Mark J Crane <markjcrane@fusionpbx.com>
* Portions created by the Initial Developer are Copyright (C) 2008-2024
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Mark J Crane <markjcrane@fusionpbx.com>
* Tim Fry <tim@fusionpbx.com>
*/
/**
* Container object for creating command line options when creating a service
* @author Tim Fry <tim@fusionpbx.com>
*/
class cli_option {
private $short_option;
private $long_option;
private $description;
private $short_description;
private $long_description;
private $functions;
/**
* Constructs an empty cli_option
*/
public function __construct() {
$this->short_option = '';
$this->long_option = '';
$this->description = '';
$this->short_description = '';
$this->long_description = '';
$this->functions = [];
}
/**
* A factory method to create a new cli_option
* @param type $options
* @return cli_option
*/
public static function new(...$options): cli_option {
$obj = new cli_option();
//automatically assign properties to the object that were passed in key/value pairs
self::parse_options($obj, $options);
//return the cli_option with all properties filled in that were passed
return $obj;
}
// used to parse object values when created
private static function parse_options($obj, $options) {
foreach ($options as $key => $value) {
if (is_array($value)) {
self::parse_options($obj, $value);
}
//call the method with the name of $key and pass it $value
if (method_exists($obj, $key)) {
$obj->{$key}($value);
} elseif (property_exists($obj, $key)) {
$obj->{$key} = $value;
}
}
}
/**
* Sets or returns the short option value
* @param string|null $short_option
* @return $this
*/
public function short_option(?string $short_option = null) {
if (!empty($short_option)) {
$this->short_option = $short_option;
return $this;
}
return $this->short_option;
}
/**
* Sets or returns the long option value
* @param string|null $long_option
* @return $this
*/
public function long_option(?string $long_option = null) {
if (!empty($long_option)) {
$this->long_option = $long_option;
return $this;
}
return $this->long_option;
}
/**
* Set the general description
* @param string|null $description
* @return $this
*/
public function description(?string $description = null) {
if (!empty($description)) {
$this->description = $description;
return $this;
}
return $this->description;
}
/**
* Sets or returns the short_description. If short_description is empty then the short_option is used as a default.
* @param string|null $short_description When parameter is null, it returns the currently set value. When not null the short description is set to the passed value.
* @return $this
*/
public function short_description(?string $short_description = null) {
if (!empty($short_description)) {
$this->short_description = $short_description;
return $this;
}
if (empty($this->short_description)) {
if (str_ends_with($this->short_option, ':')) {
$short = rtrim($this->short_option, ':');
$short_description = "-$short <value>";
} else {
$short_description = '-' . $this->short_option;
}
} else {
$short_description = $this->short_description;
}
return $short_description;
}
/**
* Sets or returns the long_description. If long_description is empty then the long_option is used as a default.
* @param string|null $long_description When parameter is null, it returns the currently set value. When not null the long description is set to the passed value.
* @return $this
*/
public function long_description(?string $long_description = null) {
if ($long_description !== null) {
$this->long_description = $long_description;
return $this;
}
if (empty($this->long_description)) {
if (str_ends_with($this->long_option, ':')) {
$long = rtrim($this->long_option, ':');
$long_description = "--$long <value>";
} else {
$long_description = '--' . $this->long_option;
}
} else {
$long_description = $this->long_description;
}
return $long_description;
}
/**
* Adds an array of callback functions replacing the existing callback functions
* @param array|null $functions
* @return $this
*/
public function functions(?array $functions = null) {
if ($functions !== null) {
$this->functions = $functions;
return $this;
}
return $this->functions;
}
/**
* Appends the callback function to the array of existing callback functions
* @param string|null $function When function param is set, the callback function will be appended to the list of functions. When called without a param, the array will be returned of current callbacks.
* @return $this|array Returns the array of callbacks if no parameters passed or this object when appending a callback
*/
public function callback(?string $function = null) {
if ($function !== null) {
$this->functions += [$function];
return $this;
}
return $this->functions;
}
/**
* Appends the callback function to the array of existing callback functions
* @param string|null $function
* @return $this
*/
public function function_append(?string $function = null) {
if ($function !== null) {
$this->functions += [$function];
return $this;
}
return $this->functions;
}
/**
* Returns the array structure required for service
* @return array
*/
public function to_array(): array {
$arr['short_option'] = $this->short_option();
$arr['long_option'] = $this->long_option();
$arr['description'] = $this->description();
$arr['short_description'] = $this->short_description();
$arr['long_description'] = $this->long_description();
$arr['functions'] = $this->functions();
return $arr;
}
}
/* Examples
$cli_option = cli_option::new([
'short_option'=>'m',
'long_option' =>'my-option',
'description' =>'Create an option that uses -m or --my-option command-line parameter'
]);
$cli_option = cli_option::new()
->short_option('m')
->long_option('my-option')
->description('Create an option that uses -m or --my-option command-line parameter');
echo $cli_option->description();
$cli_parsing_array = $cli_option->to_array();
print_r($cli_parsing_array);
//*/

View File

@ -975,7 +975,7 @@ if (!class_exists('menu')) {
$html .= " </div>\n";
$html .= " <button type='button' class='navbar-toggler' data-toggle='collapse' data-target='#main_navbar' aria-expanded='false' aria-controls='main_navbar' aria-label='Toggle Menu'>\n";
$html .= " <span class='fas fa-bars'></span>\n";
$html .= " <span class='fa-solid fa-bars'></span>\n";
$html .= " </button>\n";
$html .= " <div class='collapse navbar-collapse' id='main_navbar'>\n";
@ -994,8 +994,8 @@ if (!class_exists('menu')) {
$mod_a_2 = (!empty($menu_parent['menu_item_link']) && !$submenu) ? $menu_parent['menu_item_link'] : '#';
$mod_a_3 = ($menu_parent['menu_item_category'] == 'external') ? "target='_blank' " : null;
if (isset($_SESSION['theme']['menu_main_icons']['boolean']) && $_SESSION['theme']['menu_main_icons']['boolean'] == 'true') {
if (!empty($menu_parent['menu_item_icon']) && substr_count($menu_parent['menu_item_icon'], 'fa-') > 0) {
$menu_main_icon = "<span class='fas ".$menu_parent['menu_item_icon']."' title=\"".escape($menu_parent['menu_language_title'])."\"></span>";
if (!empty($menu_parent['menu_item_icon']) && substr($menu_parent['menu_item_icon'], 0, 3) == 'fa-') { // font awesome icon
$menu_main_icon = "<span class='".escape($menu_parent['menu_item_icon'])."' title=\"".escape($menu_parent['menu_language_title'])."\"></span>";
}
else {
$menu_main_icon = null;
@ -1027,14 +1027,14 @@ if (!class_exists('menu')) {
$mod_a_3 = ($menu_sub['menu_item_category'] == 'external') ? "target='_blank' " : null;
$menu_sub_icon = null;
if ($_SESSION['theme']['menu_sub_icons']['boolean'] != 'false') {
if (!empty($menu_sub['menu_item_icon']) && substr_count($menu_sub['menu_item_icon'], 'fa-') > 0) {
$menu_sub_icon = "<span class='fas ".escape($menu_sub['menu_item_icon'])."'></span>";
if (!empty($menu_sub['menu_item_icon']) && substr($menu_sub['menu_item_icon'], 0, 3) == 'fa-') { // font awesome icon
$menu_sub_icon = "<span class='".escape($menu_sub['menu_item_icon'])."'></span>";
}
else {
$menu_sub_icon = null;
}
}
$html .= " <li class='nav-item'><a class='nav-link' href='".$mod_a_2."' ".$mod_a_3.">".($_SESSION['theme']['menu_sub_icons']['boolean'] != 'false' ? "<span class='fas fa-bar d-inline-block d-sm-none float-left' style='margin: 4px 10px 0 25px;'></span>" : null).escape($menu_sub['menu_language_title']).$menu_sub_icon."</a></li>\n";
$html .= " <li class='nav-item'><a class='nav-link' href='".$mod_a_2."' ".$mod_a_3.">".($_SESSION['theme']['menu_sub_icons']['boolean'] != 'false' ? "<span class='fa-solid fa-minus d-inline-block d-sm-none float-left' style='margin: 4px 10px 0 25px;'></span>" : null).escape($menu_sub['menu_language_title']).$menu_sub_icon."</a></li>\n";
if ($columns > 1 && $column_current == 1 && ($index_sub+1) > (ceil(@sizeof($menu_parent['menu_items'])/2)-1)) {
$html .= " </ul>\n";
$html .= " </div>\n";
@ -1060,20 +1060,20 @@ if (!class_exists('menu')) {
//current user
if (isset($_SESSION['theme']['user_visible']['text']) && $_SESSION['theme']['user_visible']['text'] == 'true') {
$html .= " <li class='nav-item'>\n";
$html .= " <a class='header_user' href='".PROJECT_PATH."/core/users/user_edit.php?id=user' title=\"".$this->text['theme-label-user']."\"><i class='fas fa-".(!empty($_SESSION['theme']['body_header_icon_user']['text']) ? $_SESSION['theme']['body_header_icon_user']['text'] : 'user-circle')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".$_SESSION['username']."</a>";
$html .= " <a class='header_user' href='".PROJECT_PATH."/core/users/user_edit.php?id=user' title=\"".$this->text['theme-label-user']."\"><i class='".(!empty($_SESSION['theme']['body_header_icon_user']['text']) ? $_SESSION['theme']['body_header_icon_user']['text'] : 'fa-solid fa-user-circle')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".escape($_SESSION['username'])."</a>";
$html .= " </li>\n";
}
//domain name/selector
if (!empty($_SESSION['username']) && permission_exists('domain_select') && count($_SESSION['domains']) > 1 && $_SESSION['theme']['domain_visible']['text'] == 'true') {
$html .= " <li class='nav-item'>\n";
$html .= " <a class='header_domain' href='#' id='header_domain_selector_domain' title='".$this->text['theme-label-open_selector']."'><i class='fas fa-".(!empty($_SESSION['theme']['body_header_icon_domain']['text']) ? $_SESSION['theme']['body_header_icon_domain']['text'] : 'globe-americas')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".escape($_SESSION['domain_name'])."</a>";
$html .= " <a class='header_domain' href='#' id='header_domain_selector_domain' title='".$this->text['theme-label-open_selector']."'><i class='".(!empty($_SESSION['theme']['body_header_icon_domain']['text']) ? $_SESSION['theme']['body_header_icon_domain']['text'] : 'fa-solid fa-earth-americas')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".escape($_SESSION['domain_name'])."</a>";
$html .= " </li>\n";
}
//logout icon
if (!empty($_SESSION['username']) && isset($_SESSION['theme']['logout_icon_visible']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") {
$username_full = $_SESSION['username'].((count($_SESSION['domains']) > 1) ? "@".$_SESSION["user_context"] : null);
$html .= " <li class='nav-item'>\n";
$html .= " <a class='logout_icon' href='#' title=\"".$this->text['theme-label-logout']."\" onclick=\"modal_open('modal-logout','btn_logout');\"><span class='fas fa-sign-out-alt'></span></a>";
$html .= " <a class='logout_icon' href='#' title=\"".$this->text['theme-label-logout']."\" onclick=\"modal_open('modal-logout','btn_logout');\"><span class='fa-solid fa-right-from-bracket'></span></a>";
$html .= " </li>\n";
unset($username_full);
}
@ -1085,7 +1085,7 @@ if (!class_exists('menu')) {
//modal for logout icon (above)
if (!empty($_SESSION['username']) && isset($_SESSION['theme']['logout_icon_visible']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") {
$html .= modal::create(['id'=>'modal-logout','type'=>'general','message'=>$this->text['theme-confirm-logout'],'actions'=>button::create(['type'=>'button','label'=>$this->text['theme-label-logout'],'icon'=>'sign-out-alt','id'=>'btn_logout','style'=>'float: right; margin-left: 15px;','collapse'=>'never','link'=>PROJECT_PATH.'/logout.php','onclick'=>"modal_close();"])]);
$html .= modal::create(['id'=>'modal-logout','type'=>'general','message'=>$this->text['theme-confirm-logout'],'actions'=>button::create(['type'=>'button','label'=>$this->text['theme-label-logout'],'icon'=>'fa-solid fa-right-from-bracket','id'=>'btn_logout','style'=>'float: right; margin-left: 15px;','collapse'=>'never','link'=>PROJECT_PATH.'/logout.php','onclick'=>"modal_close();"])]);
}
return $html;
@ -1102,15 +1102,15 @@ if (!class_exists('menu')) {
$html .= " <div id='menu_side_control_container'>\n";
$html .= " <div class='menu_side_control_state' style='float: right; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? 'display: none' : null)."'>\n";
if ($_SESSION['theme']['menu_brand_type']['text'] != 'none') {
$html .= " <a class='menu_side_item_main menu_side_contract' onclick='menu_side_contract();' style='padding: 8px 15px !important; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "display: none;" : null)."'><i class='fas fa-bars fa-fw'></i></a>\n";
$html .= " <a class='menu_side_item_main menu_side_contract' onclick='menu_side_contract();' style='padding: 8px 15px !important; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "display: none;" : null)."'><i class='fa-solid fa-bars fa-fw'></i></a>\n";
}
if ($_SESSION['theme']['menu_side_pin']['boolean'] == 'true') {
$html .= " <a class='menu_side_item_main' id='menu_side_state_set_expanded' onclick=\"menu_side_state_set('expanded');\" oncontextmenu=\"menu_side_state_set('delete'); return false;\" style='padding: 8px 14px 8px 16px !important; ".($_SESSION['theme']['menu_side_state']['text'] == 'expanded' ? 'display: none' : null)."' title=\"".$this->text['theme-label-pin_menu']."\"><i class='fas fa-toggle-off fa-sm fa-fw'></i></a>\n";
$html .= " <a class='menu_side_item_main' id='menu_side_state_set_contracted' onclick=\"menu_side_state_set('contracted');\" oncontextmenu=\"menu_side_state_set('delete'); return false;\" style='padding: 8px 14px 8px 16px !important; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? 'display: none' : null)."' title=\"".$this->text['theme-label-unpin_menu']."\"><i class='fas fa-toggle-on fa-sm fa-fw'></i></a>\n";
$html .= " <a class='menu_side_item_main' id='menu_side_state_set_expanded' onclick=\"menu_side_state_set('expanded');\" oncontextmenu=\"menu_side_state_set('delete'); return false;\" style='padding: 8px 14px 8px 16px !important; ".($_SESSION['theme']['menu_side_state']['text'] == 'expanded' ? 'display: none' : null)."' title=\"".$this->text['theme-label-pin_menu']."\"><i class='fa-solid fa-toggle-off fa-sm fa-fw'></i></a>\n";
$html .= " <a class='menu_side_item_main' id='menu_side_state_set_contracted' onclick=\"menu_side_state_set('contracted');\" oncontextmenu=\"menu_side_state_set('delete'); return false;\" style='padding: 8px 14px 8px 16px !important; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? 'display: none' : null)."' title=\"".$this->text['theme-label-unpin_menu']."\"><i class='fa-solid fa-toggle-on fa-sm fa-fw'></i></a>\n";
}
$html .= " </div>\n";
if ($_SESSION['theme']['menu_brand_type']['text'] == 'none') {
$html .= " <a class='menu_side_item_main menu_side_contract' onclick='menu_side_contract();' style='".($_SESSION['theme']['menu_side_pin']['boolean'] == 'true' ? "max-width: calc(100% - 50px);" : null)." ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "display: none;" : null)."' title=\"".$this->text['theme-label-contract_menu']."\"><i class='fas fa-bars fa-fw' style='z-index: 99800; padding-left: 1px;'></i></a>";
$html .= " <a class='menu_side_item_main menu_side_contract' onclick='menu_side_contract();' style='".($_SESSION['theme']['menu_side_pin']['boolean'] == 'true' ? "max-width: calc(100% - 50px);" : null)." ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "display: none;" : null)."' title=\"".$this->text['theme-label-contract_menu']."\"><i class='fa-solid fa-bars fa-fw' style='z-index: 99800; padding-left: 1px;'></i></a>";
}
$menu_brand_text = !empty($_SESSION['theme']['menu_brand_text']['text']) ? escape($_SESSION['theme']['menu_brand_text']['text']) : "FusionPBX";
if ($_SESSION['theme']['menu_brand_type']['text'] == 'text') {
@ -1125,7 +1125,7 @@ if (!class_exists('menu')) {
$html .= "</a>\n";
}
// else {
// $html .= " <a class='menu_side_item_main menu_side_expand' ".($_SESSION['theme']['menu_side_state']['text'] == 'expanded' ? "style='display: none';" : null)." onclick='menu_side_expand();' title=\"".$this->text['theme-label-expand_menu']."\"><i class='fas fa-bars fa-fw' style='z-index: 99800; padding-left: 1px;'></i></a>";
// $html .= " <a class='menu_side_item_main menu_side_expand' ".($_SESSION['theme']['menu_side_state']['text'] == 'expanded' ? "style='display: none';" : null)." onclick='menu_side_expand();' title=\"".$this->text['theme-label-expand_menu']."\"><i class='fa-solid fa-bars fa-fw' style='z-index: 99800; padding-left: 1px;'></i></a>";
// }
$html .= " </div>\n";
//main menu items
@ -1134,10 +1134,10 @@ if (!class_exists('menu')) {
$menu_target = ($menu_item_main['menu_item_category'] == 'external') ? '_blank' : '';
$html .= " <a class='menu_side_item_main' ".(!empty($menu_item_main['menu_item_link']) ? "href='".$menu_item_main['menu_item_link']."' target='".$menu_target."'" : "onclick=\"menu_side_expand(); menu_side_item_toggle('".$menu_item_main['menu_item_uuid']."');\"")." title=\"".$menu_item_main['menu_language_title']."\">";
if (is_array($menu_item_main['menu_items']) && sizeof($menu_item_main['menu_items']) != 0 && $_SESSION['theme']['menu_side_item_main_sub_icons']['boolean'] == 'true') {
$html .= " <div class='menu_side_item_main_sub_icons' style='float: right; margin-right: -1px; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "display: none;" : null)."'><i id='sub_arrow_".$menu_item_main['menu_item_uuid']."' class='sub_arrows fas fa-".(!empty($_SESSION['theme']['menu_side_item_main_sub_icon_expand']['text']) ? $_SESSION['theme']['menu_side_item_main_sub_icon_expand']['text'] : 'chevron-down')." fa-xs'></i></div>\n";
$html .= " <div class='menu_side_item_main_sub_icons' style='float: right; margin-right: -1px; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "display: none;" : null)."'><i id='sub_arrow_".$menu_item_main['menu_item_uuid']."' class='sub_arrows ".(!empty($_SESSION['theme']['menu_side_item_main_sub_icon_expand']['text']) ? $_SESSION['theme']['menu_side_item_main_sub_icon_expand']['text'] : 'fa-solid fa-chevron-down')." fa-xs'></i></div>\n";
}
if (!empty($menu_item_main['menu_item_icon'])) {
$html .= "<i class='menu_side_item_icon fas ".$menu_item_main['menu_item_icon']." fa-fw' style='z-index: 99800; margin-right: 8px;'></i>";
if (!empty($menu_item_main['menu_item_icon']) && substr($menu_item_main['menu_item_icon'], 0, 3) == 'fa-') { // font awesome icon
$html .= "<i class='menu_side_item_icon ".$menu_item_main['menu_item_icon']." fa-fw' style='z-index: 99800; margin-right: 8px;'></i>";
}
$html .= "<span class='menu_side_item_title' ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "style='display: none;'" : null).">".$menu_item_main['menu_language_title']."</span>";
$html .= "</a>\n";
@ -1178,24 +1178,24 @@ if (!class_exists('menu')) {
$html .= "<div class='float-right' style='white-space: nowrap;'>";
//current user
$html .= "<span style='display: inline-block; padding-right: 20px; font-size: 90%;'>\n";
$html .= " <a href='".PROJECT_PATH."/core/users/user_edit.php?id=user' title=\"".$this->text['theme-label-user']."\"><i class='fas fa-".($_SESSION['theme']['body_header_icon_user']['text'] != '' ? $_SESSION['theme']['body_header_icon_user']['text'] : 'user-circle')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".$_SESSION['username']."</a>";
$html .= " <a href='".PROJECT_PATH."/core/users/user_edit.php?id=user' title=\"".$this->text['theme-label-user']."\"><i class='".(!empty($_SESSION['theme']['body_header_icon_user']['text']) ? $_SESSION['theme']['body_header_icon_user']['text'] : 'fa-solid fa-user-circle')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".$_SESSION['username']."</a>";
$html .= "</span>\n";
//domain name/selector (sm+)
if (!empty($_SESSION['username']) && permission_exists('domain_select') && count($_SESSION['domains']) > 1 && $_SESSION['theme']['domain_visible']['text'] == 'true') {
$html .= "<span style='display: inline-block; padding-right: 10px; font-size: 90%;'>\n";
$html .= " <a href='#' id='header_domain_selector_domain' title='".$this->text['theme-label-open_selector']."'><i class='fas fa-".($_SESSION['theme']['body_header_icon_domain']['text'] != '' ? $_SESSION['theme']['body_header_icon_domain']['text'] : 'globe-americas')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".escape($_SESSION['domain_name'])."</a>";
$html .= " <a href='#' id='header_domain_selector_domain' title='".$this->text['theme-label-open_selector']."'><i class='".(!empty($_SESSION['theme']['body_header_icon_domain']['text']) ? $_SESSION['theme']['body_header_icon_domain']['text'] : 'fa-solid fa-earth-americas')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".escape($_SESSION['domain_name'])."</a>";
$html .= "</span>\n";
}
//logout icon
if (!empty($_SESSION['username']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") {
$html .= "<a id='header_logout_icon' href='#' title=\"".$this->text['theme-label-logout']."\" onclick=\"modal_open('modal-logout','btn_logout');\"><span class='fas fa-sign-out-alt'></span></a>";
$html .= "<a id='header_logout_icon' href='#' title=\"".$this->text['theme-label-logout']."\" onclick=\"modal_open('modal-logout','btn_logout');\"><span class='fa-solid fa-right-from-bracket'></span></a>";
}
$html .= "</div>";
$html .= " </div>\n";
//modal for logout icon (above)
if (!empty($_SESSION['username']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") {
$html .= modal::create(['id'=>'modal-logout','type'=>'general','message'=>$this->text['theme-confirm-logout'],'actions'=>button::create(['type'=>'button','label'=>$this->text['theme-label-logout'],'icon'=>'sign-out-alt','id'=>'btn_logout','style'=>'float: right; margin-left: 15px;','collapse'=>'never','link'=>PROJECT_PATH.'/logout.php','onclick'=>"modal_close();"])]);
$html .= modal::create(['id'=>'modal-logout','type'=>'general','message'=>$this->text['theme-confirm-logout'],'actions'=>button::create(['type'=>'button','label'=>$this->text['theme-label-logout'],'icon'=>'fa-solid fa-right-from-bracket','id'=>'btn_logout','style'=>'float: right; margin-left: 15px;','collapse'=>'never','link'=>PROJECT_PATH.'/logout.php','onclick'=>"modal_close();"])]);
}
return $html;
@ -1206,4 +1206,4 @@ if (!class_exists('menu')) {
}
}
?>
?>

View File

@ -1,23 +1,151 @@
Fonticons, Inc. (https://fontawesome.com)
--------------------------------------------------------------------------------
Font Awesome Free License
-------------------------
Font Awesome Free is free, open source, and GPL friendly. You can use it for
commercial projects, open source projects, or really almost whatever you want.
Full Font Awesome Free license: https://fontawesome.com/license/free.
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
packaged as SVG and JS file types.
--------------------------------------------------------------------------------
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
The Font Awesome Free download is licensed under a Creative Commons
Attribution 4.0 International License and applies to all icons packaged
as SVG and JS file types.
--------------------------------------------------------------------------------
# Fonts: SIL OFL 1.1 License
# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
In the Font Awesome Free download, the SIL OFL license applies to all icons
packaged as web and desktop font files.
Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com)
with Reserved Font Name: "Font Awesome".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE
Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting — in part or in whole — any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
--------------------------------------------------------------------------------
# Code: MIT License (https://opensource.org/licenses/MIT)
In the Font Awesome Free download, the MIT license applies to all non-font and
non-icon files.
Copyright 2024 Fonticons, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in the
Software without restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so, subject to the
following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
# Attribution
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
Awesome Free files already contain embedded comments with sufficient
attribution, so you shouldn't need to do anything additional when using these
@ -27,7 +155,10 @@ We've kept attribution comments terse, so we ask that you do not actively work
to remove them from files, especially code. They're a great way for folks to
learn about Font Awesome.
--------------------------------------------------------------------------------
# Brand Icons
All brand icons are trademarks of their respective owners. The use of these
trademarks does not indicate endorsement of the trademark holder by Font
Awesome, nor vice versa. **Please do not use brand logos for any purpose except

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,15 +1,19 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Free';
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; }
@font-face {
font-family: 'Font Awesome 5 Free';
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 400;
font-display: auto;
src: url("../webfonts/fa-regular-400.eot");
src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); }
font-display: block;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
.far {
font-family: 'Font Awesome 5 Free';
.far,
.fa-regular {
font-weight: 400; }

View File

@ -1,5 +1,6 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:"Font Awesome 5 Free";font-weight:400}
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}

View File

@ -1,16 +1,19 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Free';
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
@font-face {
font-family: 'Font Awesome 5 Free';
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 900;
font-display: auto;
src: url("../webfonts/fa-solid-900.eot");
src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); }
font-display: block;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
.fa,
.fas {
font-family: 'Font Awesome 5 Free';
.fas,
.fa-solid {
font-weight: 900; }

View File

@ -1,5 +1,6 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900}
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}

View File

@ -1,70 +1,53 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
svg:not(:root).svg-inline--fa {
overflow: visible; }
:root, :host {
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free';
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free';
--fa-font-light: normal 300 1em/1 'Font Awesome 6 Pro';
--fa-font-thin: normal 100 1em/1 'Font Awesome 6 Pro';
--fa-font-duotone: normal 900 1em/1 'Font Awesome 6 Duotone';
--fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands';
--fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-regular: normal 400 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-light: normal 300 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-thin: normal 100 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-duotone-solid: normal 900 1em/1 'Font Awesome 6 Sharp Duotone'; }
svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
overflow: visible;
box-sizing: content-box; }
.svg-inline--fa {
display: inline-block;
font-size: inherit;
display: var(--fa-display, inline-block);
height: 1em;
overflow: visible;
vertical-align: -.125em; }
.svg-inline--fa.fa-2xs {
vertical-align: 0.1em; }
.svg-inline--fa.fa-xs {
vertical-align: 0em; }
.svg-inline--fa.fa-sm {
vertical-align: -0.07143em; }
.svg-inline--fa.fa-lg {
vertical-align: -.225em; }
.svg-inline--fa.fa-w-1 {
width: 0.0625em; }
.svg-inline--fa.fa-w-2 {
width: 0.125em; }
.svg-inline--fa.fa-w-3 {
width: 0.1875em; }
.svg-inline--fa.fa-w-4 {
width: 0.25em; }
.svg-inline--fa.fa-w-5 {
width: 0.3125em; }
.svg-inline--fa.fa-w-6 {
width: 0.375em; }
.svg-inline--fa.fa-w-7 {
width: 0.4375em; }
.svg-inline--fa.fa-w-8 {
width: 0.5em; }
.svg-inline--fa.fa-w-9 {
width: 0.5625em; }
.svg-inline--fa.fa-w-10 {
width: 0.625em; }
.svg-inline--fa.fa-w-11 {
width: 0.6875em; }
.svg-inline--fa.fa-w-12 {
width: 0.75em; }
.svg-inline--fa.fa-w-13 {
width: 0.8125em; }
.svg-inline--fa.fa-w-14 {
width: 0.875em; }
.svg-inline--fa.fa-w-15 {
width: 0.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; }
vertical-align: -0.2em; }
.svg-inline--fa.fa-xl {
vertical-align: -0.25em; }
.svg-inline--fa.fa-2xl {
vertical-align: -0.3125em; }
.svg-inline--fa.fa-pull-left {
margin-right: .3em;
margin-right: var(--fa-pull-margin, 0.3em);
width: auto; }
.svg-inline--fa.fa-pull-right {
margin-left: .3em;
margin-left: var(--fa-pull-margin, 0.3em);
width: auto; }
.svg-inline--fa.fa-border {
height: 1.5em; }
.svg-inline--fa.fa-li {
width: 2em; }
width: var(--fa-li-width, 2em);
top: 0.25em; }
.svg-inline--fa.fa-fw {
width: 1.25em; }
width: var(--fa-fw-width, 1.25em); }
.fa-layers svg.svg-inline--fa {
bottom: 0;
@ -74,6 +57,11 @@ svg:not(:root).svg-inline--fa {
right: 0;
top: 0; }
.fa-layers-text, .fa-layers-counter {
display: inline-block;
position: absolute;
text-align: center; }
.fa-layers {
display: inline-block;
height: 1em;
@ -82,88 +70,57 @@ svg:not(:root).svg-inline--fa {
vertical-align: -.125em;
width: 1em; }
.fa-layers svg.svg-inline--fa {
-webkit-transform-origin: center center;
transform-origin: center center; }
.fa-layers-text, .fa-layers-counter {
display: inline-block;
position: absolute;
text-align: center; }
transform-origin: center 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; }
transform: translate(-50%, -50%);
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;
background-color: var(--fa-counter-background-color, #ff253a);
border-radius: var(--fa-counter-border-radius, 1em);
box-sizing: border-box;
color: var(--fa-inverse, #fff);
line-height: var(--fa-counter-line-height, 1);
max-width: var(--fa-counter-max-width, 5em);
min-width: var(--fa-counter-min-width, 1.5em);
overflow: hidden;
padding: .25em;
right: 0;
padding: var(--fa-counter-padding, 0.25em 0.5em);
right: var(--fa-right, 0);
text-overflow: ellipsis;
top: 0;
-webkit-transform: scale(0.25);
transform: scale(0.25);
-webkit-transform-origin: top right;
transform-origin: top right; }
top: var(--fa-top, 0);
transform: scale(var(--fa-counter-scale, 0.25));
transform-origin: top right; }
.fa-layers-bottom-right {
bottom: 0;
right: 0;
bottom: var(--fa-bottom, 0);
right: var(--fa-right, 0);
top: auto;
-webkit-transform: scale(0.25);
transform: scale(0.25);
-webkit-transform-origin: bottom right;
transform-origin: bottom right; }
transform: scale(var(--fa-layers-scale, 0.25));
transform-origin: bottom right; }
.fa-layers-bottom-left {
bottom: 0;
left: 0;
bottom: var(--fa-bottom, 0);
left: var(--fa-left, 0);
right: auto;
top: auto;
-webkit-transform: scale(0.25);
transform: scale(0.25);
-webkit-transform-origin: bottom left;
transform-origin: bottom left; }
transform: scale(var(--fa-layers-scale, 0.25));
transform-origin: bottom left; }
.fa-layers-top-right {
right: 0;
top: 0;
-webkit-transform: scale(0.25);
transform: scale(0.25);
-webkit-transform-origin: top right;
transform-origin: top right; }
top: var(--fa-top, 0);
right: var(--fa-right, 0);
transform: scale(var(--fa-layers-scale, 0.25));
transform-origin: top right; }
.fa-layers-top-left {
left: 0;
left: var(--fa-left, 0);
right: auto;
top: 0;
-webkit-transform: scale(0.25);
transform: scale(0.25);
-webkit-transform-origin: top left;
transform-origin: top left; }
.fa-lg {
font-size: 1.33333em;
line-height: 0.75em;
vertical-align: -.0667em; }
.fa-xs {
font-size: .75em; }
.fa-sm {
font-size: .875em; }
top: var(--fa-top, 0);
transform: scale(var(--fa-layers-scale, 0.25));
transform-origin: top left; }
.fa-1x {
font-size: 1em; }
@ -195,114 +152,241 @@ svg:not(:root).svg-inline--fa {
.fa-10x {
font-size: 10em; }
.fa-2xs {
font-size: 0.625em;
line-height: 0.1em;
vertical-align: 0.225em; }
.fa-xs {
font-size: 0.75em;
line-height: 0.08333em;
vertical-align: 0.125em; }
.fa-sm {
font-size: 0.875em;
line-height: 0.07143em;
vertical-align: 0.05357em; }
.fa-lg {
font-size: 1.25em;
line-height: 0.05em;
vertical-align: -0.075em; }
.fa-xl {
font-size: 1.5em;
line-height: 0.04167em;
vertical-align: -0.125em; }
.fa-2xl {
font-size: 2em;
line-height: 0.03125em;
vertical-align: -0.1875em; }
.fa-fw {
text-align: center;
width: 1.25em; }
.fa-ul {
list-style-type: none;
margin-left: 2.5em;
margin-left: var(--fa-li-margin, 2.5em);
padding-left: 0; }
.fa-ul > li {
position: relative; }
.fa-li {
left: -2em;
left: calc(-1 * var(--fa-li-width, 2em));
position: absolute;
text-align: center;
width: 2em;
width: var(--fa-li-width, 2em);
line-height: inherit; }
.fa-border {
border: solid 0.08em #eee;
border-radius: .1em;
padding: .2em .25em .15em; }
border-color: var(--fa-border-color, #eee);
border-radius: var(--fa-border-radius, 0.1em);
border-style: var(--fa-border-style, solid);
border-width: var(--fa-border-width, 0.08em);
padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
.fa-pull-left {
float: left; }
float: left;
margin-right: var(--fa-pull-margin, 0.3em); }
.fa-pull-right {
float: right; }
float: right;
margin-left: var(--fa-pull-margin, 0.3em); }
.fa.fa-pull-left,
.fas.fa-pull-left,
.far.fa-pull-left,
.fal.fa-pull-left,
.fab.fa-pull-left {
margin-right: .3em; }
.fa-beat {
animation-name: fa-beat;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
.fa.fa-pull-right,
.fas.fa-pull-right,
.far.fa-pull-right,
.fal.fa-pull-right,
.fab.fa-pull-right {
margin-left: .3em; }
.fa-bounce {
animation-name: fa-bounce;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
.fa-fade {
animation-name: fa-fade;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
.fa-beat-fade {
animation-name: fa-beat-fade;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
.fa-flip {
animation-name: fa-flip;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
.fa-shake {
animation-name: fa-shake;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, linear); }
.fa-spin {
-webkit-animation: fa-spin 2s infinite linear;
animation: fa-spin 2s infinite linear; }
animation-name: fa-spin;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 2s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, linear); }
.fa-pulse {
-webkit-animation: fa-spin 1s infinite steps(8);
animation: fa-spin 1s infinite steps(8); }
.fa-spin-reverse {
--fa-animation-direction: reverse; }
@-webkit-keyframes fa-spin {
.fa-pulse,
.fa-spin-pulse {
animation-name: fa-spin;
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, steps(8)); }
@media (prefers-reduced-motion: reduce) {
.fa-beat,
.fa-bounce,
.fa-fade,
.fa-beat-fade,
.fa-flip,
.fa-pulse,
.fa-shake,
.fa-spin,
.fa-spin-pulse {
animation-delay: -1ms;
animation-duration: 1ms;
animation-iteration-count: 1;
transition-delay: 0s;
transition-duration: 0s; } }
@keyframes fa-beat {
0%, 90% {
transform: scale(1); }
45% {
transform: scale(var(--fa-beat-scale, 1.25)); } }
@keyframes fa-bounce {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
transform: scale(1, 1) translateY(0); }
10% {
transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
30% {
transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
50% {
transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
57% {
transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
64% {
transform: scale(1, 1) translateY(0); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
transform: scale(1, 1) translateY(0); } }
@keyframes fa-fade {
50% {
opacity: var(--fa-fade-opacity, 0.4); } }
@keyframes fa-beat-fade {
0%, 100% {
opacity: var(--fa-beat-fade-opacity, 0.4);
transform: scale(1); }
50% {
opacity: 1;
transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
@keyframes fa-flip {
50% {
transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
@keyframes fa-shake {
0% {
transform: rotate(-15deg); }
4% {
transform: rotate(15deg); }
8%, 24% {
transform: rotate(-18deg); }
12%, 28% {
transform: rotate(18deg); }
16% {
transform: rotate(-22deg); }
20% {
transform: rotate(22deg); }
32% {
transform: rotate(-12deg); }
36% {
transform: rotate(12deg); }
40%, 100% {
transform: rotate(0deg); } }
@keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
transform: rotate(360deg); } }
.fa-rotate-90 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
-webkit-transform: rotate(90deg);
transform: rotate(90deg); }
transform: rotate(90deg); }
.fa-rotate-180 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
-webkit-transform: rotate(180deg);
transform: rotate(180deg); }
transform: rotate(180deg); }
.fa-rotate-270 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
-webkit-transform: rotate(270deg);
transform: rotate(270deg); }
transform: rotate(270deg); }
.fa-flip-horizontal {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
-webkit-transform: scale(-1, 1);
transform: scale(-1, 1); }
transform: scale(-1, 1); }
.fa-flip-vertical {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
-webkit-transform: scale(1, -1);
transform: scale(1, -1); }
transform: scale(1, -1); }
.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
-webkit-transform: scale(-1, -1);
transform: scale(-1, -1); }
.fa-flip-both,
.fa-flip-horizontal.fa-flip-vertical {
transform: scale(-1, -1); }
:root .fa-rotate-90,
:root .fa-rotate-180,
:root .fa-rotate-270,
:root .fa-flip-horizontal,
:root .fa-flip-vertical,
:root .fa-flip-both {
-webkit-filter: none;
filter: none; }
.fa-rotate-by {
transform: rotate(var(--fa-rotate-angle, 0)); }
.fa-stack {
display: inline-block;
vertical-align: middle;
height: 2em;
position: relative;
width: 2.5em; }
@ -314,7 +398,8 @@ svg:not(:root).svg-inline--fa {
margin: auto;
position: absolute;
right: 0;
top: 0; }
top: 0;
z-index: var(--fa-stack-z-index, auto); }
.svg-inline--fa.fa-stack-1x {
height: 1em;
@ -325,47 +410,50 @@ svg:not(:root).svg-inline--fa {
width: 2.5em; }
.fa-inverse {
color: #fff; }
color: var(--fa-inverse, #fff); }
.sr-only {
border: 0;
clip: rect(0, 0, 0, 0);
.sr-only,
.fa-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px; }
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0; }
.sr-only-focusable:active, .sr-only-focusable:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
width: auto; }
.sr-only-focusable:not(:focus),
.fa-sr-only-focusable:not(:focus) {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0; }
.svg-inline--fa .fa-primary {
fill: var(--fa-primary-color, currentColor);
opacity: 1;
opacity: var(--fa-primary-opacity, 1); }
.svg-inline--fa .fa-secondary {
fill: var(--fa-secondary-color, currentColor);
opacity: 0.4;
opacity: var(--fa-secondary-opacity, 0.4); }
.svg-inline--fa.fa-swap-opacity .fa-primary {
opacity: 0.4;
opacity: var(--fa-secondary-opacity, 0.4); }
.svg-inline--fa.fa-swap-opacity .fa-secondary {
opacity: 1;
opacity: var(--fa-primary-opacity, 1); }
.svg-inline--fa mask .fa-primary,
.svg-inline--fa mask .fa-secondary {
fill: black; }
.fad.fa-inverse {
color: #fff; }
.fad.fa-inverse,
.fa-duotone.fa-inverse {
color: var(--fa-inverse, #fff); }

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,26 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype");
unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype");
unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; }

View File

@ -0,0 +1,6 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,22 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face {
font-family: 'Font Awesome 5 Brands';
font-display: block;
font-weight: 400;
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
@font-face {
font-family: 'Font Awesome 5 Free';
font-display: block;
font-weight: 900;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
@font-face {
font-family: 'Font Awesome 5 Free';
font-display: block;
font-weight: 400;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }

View File

@ -0,0 +1,6 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}

View File

@ -0,0 +1,48 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2024
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes files
require_once dirname(__DIR__, 2) . "/resources/require.php";
//load icons
$font_awesome_icons = [];
if (file_exists($_SERVER["PROJECT_ROOT"].'/resources/fontawesome/metadata/icons.json')) {
$icons_json = file_get_contents($_SERVER["PROJECT_ROOT"].'/resources/fontawesome/metadata/icons.json');
if (!empty($icons_json)) {
$icons_array = json_decode($icons_json, true);
if (!empty($icons_array) && is_array($icons_array)) {
foreach ($icons_array as $icon_name => $properties) {
if (!empty($properties['free']) && is_array($properties['free'])) {
foreach ($properties['free'] as $icon_style) {
$font_awesome_icons[] = 'fa-'.$icon_style.' fa-'.$icon_name;
}
}
}
}
}
}
//view_array($font_awesome_icons, 0);

View File

@ -1,961 +0,0 @@
<?php
$fas[] = 'fa-ad';
$fas[] = 'fa-address-book';
$fas[] = 'fa-address-card';
$fas[] = 'fa-adjust';
$fas[] = 'fa-air-freshener';
$fas[] = 'fa-align-center';
$fas[] = 'fa-align-justify';
$fas[] = 'fa-align-left';
$fas[] = 'fa-align-right';
$fas[] = 'fa-allergies';
$fas[] = 'fa-ambulance';
$fas[] = 'fa-american-sign-language-interpreting';
$fas[] = 'fa-anchor';
$fas[] = 'fa-angle-double-down';
$fas[] = 'fa-angle-double-left';
$fas[] = 'fa-angle-double-right';
$fas[] = 'fa-angle-double-up';
$fas[] = 'fa-angle-down';
$fas[] = 'fa-angle-left';
$fas[] = 'fa-angle-right';
$fas[] = 'fa-angle-up';
$fas[] = 'fa-angry';
$fas[] = 'fa-ankh';
$fas[] = 'fa-apple-alt';
$fas[] = 'fa-archive';
$fas[] = 'fa-archway';
$fas[] = 'fa-arrow-alt-circle-down';
$fas[] = 'fa-arrow-alt-circle-left';
$fas[] = 'fa-arrow-alt-circle-right';
$fas[] = 'fa-arrow-alt-circle-up';
$fas[] = 'fa-arrow-circle-down';
$fas[] = 'fa-arrow-circle-left';
$fas[] = 'fa-arrow-circle-right';
$fas[] = 'fa-arrow-circle-up';
$fas[] = 'fa-arrow-down';
$fas[] = 'fa-arrow-left';
$fas[] = 'fa-arrow-right';
$fas[] = 'fa-arrow-up';
$fas[] = 'fa-arrows-alt';
$fas[] = 'fa-arrows-alt-h';
$fas[] = 'fa-arrows-alt-v';
$fas[] = 'fa-assistive-listening-systems';
$fas[] = 'fa-asterisk';
$fas[] = 'fa-at';
$fas[] = 'fa-atlas';
$fas[] = 'fa-atom';
$fas[] = 'fa-audio-description';
$fas[] = 'fa-award';
$fas[] = 'fa-baby';
$fas[] = 'fa-baby-carriage';
$fas[] = 'fa-backspace';
$fas[] = 'fa-backward';
$fas[] = 'fa-bacon';
$fas[] = 'fa-balance-scale';
$fas[] = 'fa-balance-scale-left';
$fas[] = 'fa-balance-scale-right';
$fas[] = 'fa-ban';
$fas[] = 'fa-band-aid';
$fas[] = 'fa-barcode';
$fas[] = 'fa-bars';
$fas[] = 'fa-baseball-ball';
$fas[] = 'fa-basketball-ball';
$fas[] = 'fa-bath';
$fas[] = 'fa-battery-empty';
$fas[] = 'fa-battery-full';
$fas[] = 'fa-battery-half';
$fas[] = 'fa-battery-quarter';
$fas[] = 'fa-battery-three-quarters';
$fas[] = 'fa-bed';
$fas[] = 'fa-beer';
$fas[] = 'fa-bell';
$fas[] = 'fa-bell-slash';
$fas[] = 'fa-bezier-curve';
$fas[] = 'fa-bible';
$fas[] = 'fa-bicycle';
$fas[] = 'fa-biking';
$fas[] = 'fa-binoculars';
$fas[] = 'fa-biohazard';
$fas[] = 'fa-birthday-cake';
$fas[] = 'fa-blender';
$fas[] = 'fa-blender-phone';
$fas[] = 'fa-blind';
$fas[] = 'fa-blog';
$fas[] = 'fa-bold';
$fas[] = 'fa-bolt';
$fas[] = 'fa-bomb';
$fas[] = 'fa-bone';
$fas[] = 'fa-bong';
$fas[] = 'fa-book';
$fas[] = 'fa-book-dead';
$fas[] = 'fa-book-medical';
$fas[] = 'fa-book-open';
$fas[] = 'fa-book-reader';
$fas[] = 'fa-bookmark';
$fas[] = 'fa-border-all';
$fas[] = 'fa-border-none';
$fas[] = 'fa-border-style';
$fas[] = 'fa-bowling-ball';
$fas[] = 'fa-box';
$fas[] = 'fa-box-open';
$fas[] = 'fa-boxes';
$fas[] = 'fa-braille';
$fas[] = 'fa-brain';
$fas[] = 'fa-bread-slice';
$fas[] = 'fa-briefcase';
$fas[] = 'fa-briefcase-medical';
$fas[] = 'fa-broadcast-tower';
$fas[] = 'fa-broom';
$fas[] = 'fa-brush';
$fas[] = 'fa-bug';
$fas[] = 'fa-building';
$fas[] = 'fa-bullhorn';
$fas[] = 'fa-bullseye';
$fas[] = 'fa-burn';
$fas[] = 'fa-bus';
$fas[] = 'fa-bus-alt';
$fas[] = 'fa-business-time';
$fas[] = 'fa-calculator';
$fas[] = 'fa-calendar';
$fas[] = 'fa-calendar-alt';
$fas[] = 'fa-calendar-check';
$fas[] = 'fa-calendar-day';
$fas[] = 'fa-calendar-minus';
$fas[] = 'fa-calendar-plus';
$fas[] = 'fa-calendar-times';
$fas[] = 'fa-calendar-week';
$fas[] = 'fa-camera';
$fas[] = 'fa-camera-retro';
$fas[] = 'fa-campground';
$fas[] = 'fa-candy-cane';
$fas[] = 'fa-cannabis';
$fas[] = 'fa-capsules';
$fas[] = 'fa-car';
$fas[] = 'fa-car-alt';
$fas[] = 'fa-car-battery';
$fas[] = 'fa-car-crash';
$fas[] = 'fa-car-side';
$fas[] = 'fa-caret-down';
$fas[] = 'fa-caret-left';
$fas[] = 'fa-caret-right';
$fas[] = 'fa-caret-square-down';
$fas[] = 'fa-caret-square-left';
$fas[] = 'fa-caret-square-right';
$fas[] = 'fa-caret-square-up';
$fas[] = 'fa-caret-up';
$fas[] = 'fa-carrot';
$fas[] = 'fa-cart-arrow-down';
$fas[] = 'fa-cart-plus';
$fas[] = 'fa-cash-register';
$fas[] = 'fa-cat';
$fas[] = 'fa-certificate';
$fas[] = 'fa-chair';
$fas[] = 'fa-chalkboard';
$fas[] = 'fa-chalkboard-teacher';
$fas[] = 'fa-charging-station';
$fas[] = 'fa-chart-area';
$fas[] = 'fa-chart-bar';
$fas[] = 'fa-chart-line';
$fas[] = 'fa-chart-pie';
$fas[] = 'fa-check';
$fas[] = 'fa-check-circle';
$fas[] = 'fa-check-double';
$fas[] = 'fa-check-square';
$fas[] = 'fa-cheese';
$fas[] = 'fa-chess';
$fas[] = 'fa-chess-bishop';
$fas[] = 'fa-chess-board';
$fas[] = 'fa-chess-king';
$fas[] = 'fa-chess-knight';
$fas[] = 'fa-chess-pawn';
$fas[] = 'fa-chess-queen';
$fas[] = 'fa-chess-rook';
$fas[] = 'fa-chevron-circle-down';
$fas[] = 'fa-chevron-circle-left';
$fas[] = 'fa-chevron-circle-right';
$fas[] = 'fa-chevron-circle-up';
$fas[] = 'fa-chevron-down';
$fas[] = 'fa-chevron-left';
$fas[] = 'fa-chevron-right';
$fas[] = 'fa-chevron-up';
$fas[] = 'fa-child';
$fas[] = 'fa-church';
$fas[] = 'fa-circle';
$fas[] = 'fa-circle-notch';
$fas[] = 'fa-city';
$fas[] = 'fa-clinic-medical';
$fas[] = 'fa-clipboard';
$fas[] = 'fa-clipboard-check';
$fas[] = 'fa-clipboard-list';
$fas[] = 'fa-clock';
$fas[] = 'fa-clone';
$fas[] = 'fa-closed-captioning';
$fas[] = 'fa-cloud';
$fas[] = 'fa-cloud-download-alt';
$fas[] = 'fa-cloud-meatball';
$fas[] = 'fa-cloud-moon';
$fas[] = 'fa-cloud-moon-rain';
$fas[] = 'fa-cloud-rain';
$fas[] = 'fa-cloud-showers-heavy';
$fas[] = 'fa-cloud-sun';
$fas[] = 'fa-cloud-sun-rain';
$fas[] = 'fa-cloud-upload-alt';
$fas[] = 'fa-cocktail';
$fas[] = 'fa-code';
$fas[] = 'fa-code-branch';
$fas[] = 'fa-coffee';
$fas[] = 'fa-cog';
$fas[] = 'fa-cogs';
$fas[] = 'fa-coins';
$fas[] = 'fa-columns';
$fas[] = 'fa-comment';
$fas[] = 'fa-comment-alt';
$fas[] = 'fa-comment-dollar';
$fas[] = 'fa-comment-dots';
$fas[] = 'fa-comment-medical';
$fas[] = 'fa-comment-slash';
$fas[] = 'fa-comments';
$fas[] = 'fa-comments-dollar';
$fas[] = 'fa-compact-disc';
$fas[] = 'fa-compass';
$fas[] = 'fa-compress';
$fas[] = 'fa-compress-arrows-alt';
$fas[] = 'fa-concierge-bell';
$fas[] = 'fa-cookie';
$fas[] = 'fa-cookie-bite';
$fas[] = 'fa-copy';
$fas[] = 'fa-copyright';
$fas[] = 'fa-couch';
$fas[] = 'fa-credit-card';
$fas[] = 'fa-crop';
$fas[] = 'fa-crop-alt';
$fas[] = 'fa-cross';
$fas[] = 'fa-crosshairs';
$fas[] = 'fa-crow';
$fas[] = 'fa-crown';
$fas[] = 'fa-crutch';
$fas[] = 'fa-cube';
$fas[] = 'fa-cubes';
$fas[] = 'fa-cut';
$fas[] = 'fa-database';
$fas[] = 'fa-deaf';
$fas[] = 'fa-democrat';
$fas[] = 'fa-desktop';
$fas[] = 'fa-dharmachakra';
$fas[] = 'fa-diagnoses';
$fas[] = 'fa-dice';
$fas[] = 'fa-dice-d20';
$fas[] = 'fa-dice-d6';
$fas[] = 'fa-dice-five';
$fas[] = 'fa-dice-four';
$fas[] = 'fa-dice-one';
$fas[] = 'fa-dice-six';
$fas[] = 'fa-dice-three';
$fas[] = 'fa-dice-two';
$fas[] = 'fa-digital-tachograph';
$fas[] = 'fa-directions';
$fas[] = 'fa-divide';
$fas[] = 'fa-dizzy';
$fas[] = 'fa-dna';
$fas[] = 'fa-dog';
$fas[] = 'fa-dollar-sign';
$fas[] = 'fa-dolly';
$fas[] = 'fa-dolly-flatbed';
$fas[] = 'fa-donate';
$fas[] = 'fa-door-closed';
$fas[] = 'fa-door-open';
$fas[] = 'fa-dot-circle';
$fas[] = 'fa-dove';
$fas[] = 'fa-download';
$fas[] = 'fa-drafting-compass';
$fas[] = 'fa-dragon';
$fas[] = 'fa-draw-polygon';
$fas[] = 'fa-drum';
$fas[] = 'fa-drum-steelpan';
$fas[] = 'fa-drumstick-bite';
$fas[] = 'fa-dumbbell';
$fas[] = 'fa-dumpster';
$fas[] = 'fa-dumpster-fire';
$fas[] = 'fa-dungeon';
$fas[] = 'fa-edit';
$fas[] = 'fa-egg';
$fas[] = 'fa-eject';
$fas[] = 'fa-ellipsis-h';
$fas[] = 'fa-ellipsis-v';
$fas[] = 'fa-envelope';
$fas[] = 'fa-envelope-open';
$fas[] = 'fa-envelope-open-text';
$fas[] = 'fa-envelope-square';
$fas[] = 'fa-equals';
$fas[] = 'fa-eraser';
$fas[] = 'fa-ethernet';
$fas[] = 'fa-euro-sign';
$fas[] = 'fa-exchange-alt';
$fas[] = 'fa-exclamation';
$fas[] = 'fa-exclamation-circle';
$fas[] = 'fa-exclamation-triangle';
$fas[] = 'fa-expand';
$fas[] = 'fa-expand-arrows-alt';
$fas[] = 'fa-external-link-alt';
$fas[] = 'fa-external-link-square-alt';
$fas[] = 'fa-eye';
$fas[] = 'fa-eye-dropper';
$fas[] = 'fa-eye-slash';
$fas[] = 'fa-fan';
$fas[] = 'fa-fast-backward';
$fas[] = 'fa-fast-forward';
$fas[] = 'fa-fax';
$fas[] = 'fa-feather';
$fas[] = 'fa-feather-alt';
$fas[] = 'fa-female';
$fas[] = 'fa-fighter-jet';
$fas[] = 'fa-file';
$fas[] = 'fa-file-alt';
$fas[] = 'fa-file-archive';
$fas[] = 'fa-file-audio';
$fas[] = 'fa-file-code';
$fas[] = 'fa-file-contract';
$fas[] = 'fa-file-csv';
$fas[] = 'fa-file-download';
$fas[] = 'fa-file-excel';
$fas[] = 'fa-file-export';
$fas[] = 'fa-file-image';
$fas[] = 'fa-file-import';
$fas[] = 'fa-file-invoice';
$fas[] = 'fa-file-invoice-dollar';
$fas[] = 'fa-file-medical';
$fas[] = 'fa-file-medical-alt';
$fas[] = 'fa-file-pdf';
$fas[] = 'fa-file-powerpoint';
$fas[] = 'fa-file-prescription';
$fas[] = 'fa-file-signature';
$fas[] = 'fa-file-upload';
$fas[] = 'fa-file-video';
$fas[] = 'fa-file-word';
$fas[] = 'fa-fill';
$fas[] = 'fa-fill-drip';
$fas[] = 'fa-film';
$fas[] = 'fa-filter';
$fas[] = 'fa-fingerprint';
$fas[] = 'fa-fire';
$fas[] = 'fa-fire-alt';
$fas[] = 'fa-fire-extinguisher';
$fas[] = 'fa-first-aid';
$fas[] = 'fa-fish';
$fas[] = 'fa-fist-raised';
$fas[] = 'fa-flag';
$fas[] = 'fa-flag-checkered';
$fas[] = 'fa-flag-usa';
$fas[] = 'fa-flask';
$fas[] = 'fa-flushed';
$fas[] = 'fa-folder';
$fas[] = 'fa-folder-minus';
$fas[] = 'fa-folder-open';
$fas[] = 'fa-folder-plus';
$fas[] = 'fa-font';
$fas[] = 'fa-font-awesome-logo-full';
$fas[] = 'fa-football-ball';
$fas[] = 'fa-forward';
$fas[] = 'fa-frog';
$fas[] = 'fa-frown';
$fas[] = 'fa-frown-open';
$fas[] = 'fa-funnel-dollar';
$fas[] = 'fa-futbol';
$fas[] = 'fa-gamepad';
$fas[] = 'fa-gas-pump';
$fas[] = 'fa-gavel';
$fas[] = 'fa-gem';
$fas[] = 'fa-genderless';
$fas[] = 'fa-ghost';
$fas[] = 'fa-gift';
$fas[] = 'fa-gifts';
$fas[] = 'fa-glass-cheers';
$fas[] = 'fa-glass-martini';
$fas[] = 'fa-glass-martini-alt';
$fas[] = 'fa-glass-whiskey';
$fas[] = 'fa-glasses';
$fas[] = 'fa-globe';
$fas[] = 'fa-globe-africa';
$fas[] = 'fa-globe-americas';
$fas[] = 'fa-globe-asia';
$fas[] = 'fa-globe-europe';
$fas[] = 'fa-golf-ball';
$fas[] = 'fa-gopuram';
$fas[] = 'fa-graduation-cap';
$fas[] = 'fa-greater-than';
$fas[] = 'fa-greater-than-equal';
$fas[] = 'fa-grimace';
$fas[] = 'fa-grin';
$fas[] = 'fa-grin-alt';
$fas[] = 'fa-grin-beam';
$fas[] = 'fa-grin-beam-sweat';
$fas[] = 'fa-grin-hearts';
$fas[] = 'fa-grin-squint';
$fas[] = 'fa-grin-squint-tears';
$fas[] = 'fa-grin-stars';
$fas[] = 'fa-grin-tears';
$fas[] = 'fa-grin-tongue';
$fas[] = 'fa-grin-tongue-squint';
$fas[] = 'fa-grin-tongue-wink';
$fas[] = 'fa-grin-wink';
$fas[] = 'fa-grip-horizontal';
$fas[] = 'fa-grip-lines';
$fas[] = 'fa-grip-lines-vertical';
$fas[] = 'fa-grip-vertical';
$fas[] = 'fa-guitar';
$fas[] = 'fa-h-square';
$fas[] = 'fa-hamburger';
$fas[] = 'fa-hammer';
$fas[] = 'fa-hamsa';
$fas[] = 'fa-hand-holding';
$fas[] = 'fa-hand-holding-heart';
$fas[] = 'fa-hand-holding-usd';
$fas[] = 'fa-hand-lizard';
$fas[] = 'fa-hand-middle-finger';
$fas[] = 'fa-hand-paper';
$fas[] = 'fa-hand-peace';
$fas[] = 'fa-hand-point-down';
$fas[] = 'fa-hand-point-left';
$fas[] = 'fa-hand-point-right';
$fas[] = 'fa-hand-point-up';
$fas[] = 'fa-hand-pointer';
$fas[] = 'fa-hand-rock';
$fas[] = 'fa-hand-scissors';
$fas[] = 'fa-hand-spock';
$fas[] = 'fa-hands';
$fas[] = 'fa-hands-helping';
$fas[] = 'fa-handshake';
$fas[] = 'fa-hanukiah';
$fas[] = 'fa-hard-hat';
$fas[] = 'fa-hashtag';
$fas[] = 'fa-hat-wizard';
$fas[] = 'fa-haykal';
$fas[] = 'fa-hdd';
$fas[] = 'fa-heading';
$fas[] = 'fa-headphones';
$fas[] = 'fa-headphones-alt';
$fas[] = 'fa-headset';
$fas[] = 'fa-heart';
$fas[] = 'fa-heart-broken';
$fas[] = 'fa-heartbeat';
$fas[] = 'fa-helicopter';
$fas[] = 'fa-highlighter';
$fas[] = 'fa-hiking';
$fas[] = 'fa-hippo';
$fas[] = 'fa-history';
$fas[] = 'fa-hockey-puck';
$fas[] = 'fa-holly-berry';
$fas[] = 'fa-home';
$fas[] = 'fa-horse';
$fas[] = 'fa-horse-head';
$fas[] = 'fa-hospital';
$fas[] = 'fa-hospital-alt';
$fas[] = 'fa-hospital-symbol';
$fas[] = 'fa-hot-tub';
$fas[] = 'fa-hotdog';
$fas[] = 'fa-hotel';
$fas[] = 'fa-hourglass';
$fas[] = 'fa-hourglass-end';
$fas[] = 'fa-hourglass-half';
$fas[] = 'fa-hourglass-start';
$fas[] = 'fa-house-damage';
$fas[] = 'fa-hryvnia';
$fas[] = 'fa-i-cursor';
$fas[] = 'fa-ice-cream';
$fas[] = 'fa-icicles';
$fas[] = 'fa-icons';
$fas[] = 'fa-id-badge';
$fas[] = 'fa-id-card';
$fas[] = 'fa-id-card-alt';
$fas[] = 'fa-igloo';
$fas[] = 'fa-image';
$fas[] = 'fa-images';
$fas[] = 'fa-inbox';
$fas[] = 'fa-indent';
$fas[] = 'fa-industry';
$fas[] = 'fa-infinity';
$fas[] = 'fa-info';
$fas[] = 'fa-info-circle';
$fas[] = 'fa-italic';
$fas[] = 'fa-jedi';
$fas[] = 'fa-joint';
$fas[] = 'fa-journal-whills';
$fas[] = 'fa-kaaba';
$fas[] = 'fa-key';
$fas[] = 'fa-keyboard';
$fas[] = 'fa-khanda';
$fas[] = 'fa-kiss';
$fas[] = 'fa-kiss-beam';
$fas[] = 'fa-kiss-wink-heart';
$fas[] = 'fa-kiwi-bird';
$fas[] = 'fa-landmark';
$fas[] = 'fa-language';
$fas[] = 'fa-laptop';
$fas[] = 'fa-laptop-code';
$fas[] = 'fa-laptop-medical';
$fas[] = 'fa-laugh';
$fas[] = 'fa-laugh-beam';
$fas[] = 'fa-laugh-squint';
$fas[] = 'fa-laugh-wink';
$fas[] = 'fa-layer-group';
$fas[] = 'fa-leaf';
$fas[] = 'fa-lemon';
$fas[] = 'fa-less-than';
$fas[] = 'fa-less-than-equal';
$fas[] = 'fa-level-down-alt';
$fas[] = 'fa-level-up-alt';
$fas[] = 'fa-life-ring';
$fas[] = 'fa-lightbulb';
$fas[] = 'fa-link';
$fas[] = 'fa-lira-sign';
$fas[] = 'fa-list';
$fas[] = 'fa-list-alt';
$fas[] = 'fa-list-ol';
$fas[] = 'fa-list-ul';
$fas[] = 'fa-location-arrow';
$fas[] = 'fa-lock';
$fas[] = 'fa-lock-open';
$fas[] = 'fa-long-arrow-alt-down';
$fas[] = 'fa-long-arrow-alt-left';
$fas[] = 'fa-long-arrow-alt-right';
$fas[] = 'fa-long-arrow-alt-up';
$fas[] = 'fa-low-vision';
$fas[] = 'fa-luggage-cart';
$fas[] = 'fa-magic';
$fas[] = 'fa-magnet';
$fas[] = 'fa-mail-bulk';
$fas[] = 'fa-male';
$fas[] = 'fa-map';
$fas[] = 'fa-map-marked';
$fas[] = 'fa-map-marked-alt';
$fas[] = 'fa-map-marker';
$fas[] = 'fa-map-marker-alt';
$fas[] = 'fa-map-pin';
$fas[] = 'fa-map-signs';
$fas[] = 'fa-marker';
$fas[] = 'fa-mars';
$fas[] = 'fa-mars-double';
$fas[] = 'fa-mars-stroke';
$fas[] = 'fa-mars-stroke-h';
$fas[] = 'fa-mars-stroke-v';
$fas[] = 'fa-mask';
$fas[] = 'fa-medal';
$fas[] = 'fa-medkit';
$fas[] = 'fa-meh';
$fas[] = 'fa-meh-blank';
$fas[] = 'fa-meh-rolling-eyes';
$fas[] = 'fa-memory';
$fas[] = 'fa-menorah';
$fas[] = 'fa-mercury';
$fas[] = 'fa-meteor';
$fas[] = 'fa-microchip';
$fas[] = 'fa-microphone';
$fas[] = 'fa-microphone-alt';
$fas[] = 'fa-microphone-alt-slash';
$fas[] = 'fa-microphone-slash';
$fas[] = 'fa-microscope';
$fas[] = 'fa-minus';
$fas[] = 'fa-minus-circle';
$fas[] = 'fa-minus-square';
$fas[] = 'fa-mitten';
$fas[] = 'fa-mobile';
$fas[] = 'fa-mobile-alt';
$fas[] = 'fa-money-bill';
$fas[] = 'fa-money-bill-alt';
$fas[] = 'fa-money-bill-wave';
$fas[] = 'fa-money-bill-wave-alt';
$fas[] = 'fa-money-check';
$fas[] = 'fa-money-check-alt';
$fas[] = 'fa-monument';
$fas[] = 'fa-moon';
$fas[] = 'fa-mortar-pestle';
$fas[] = 'fa-mosque';
$fas[] = 'fa-motorcycle';
$fas[] = 'fa-mountain';
$fas[] = 'fa-mouse-pointer';
$fas[] = 'fa-mug-hot';
$fas[] = 'fa-music';
$fas[] = 'fa-network-wired';
$fas[] = 'fa-neuter';
$fas[] = 'fa-newspaper';
$fas[] = 'fa-not-equal';
$fas[] = 'fa-notes-medical';
$fas[] = 'fa-object-group';
$fas[] = 'fa-object-ungroup';
$fas[] = 'fa-oil-can';
$fas[] = 'fa-om';
$fas[] = 'fa-otter';
$fas[] = 'fa-outdent';
$fas[] = 'fa-pager';
$fas[] = 'fa-paint-brush';
$fas[] = 'fa-paint-roller';
$fas[] = 'fa-palette';
$fas[] = 'fa-pallet';
$fas[] = 'fa-paper-plane';
$fas[] = 'fa-paperclip';
$fas[] = 'fa-parachute-box';
$fas[] = 'fa-paragraph';
$fas[] = 'fa-parking';
$fas[] = 'fa-passport';
$fas[] = 'fa-pastafarianism';
$fas[] = 'fa-paste';
$fas[] = 'fa-pause';
$fas[] = 'fa-pause-circle';
$fas[] = 'fa-paw';
$fas[] = 'fa-peace';
$fas[] = 'fa-pen';
$fas[] = 'fa-pen-alt';
$fas[] = 'fa-pen-fancy';
$fas[] = 'fa-pen-nib';
$fas[] = 'fa-pen-square';
$fas[] = 'fa-pencil-alt';
$fas[] = 'fa-pencil-ruler';
$fas[] = 'fa-people-carry';
$fas[] = 'fa-pepper-hot';
$fas[] = 'fa-percent';
$fas[] = 'fa-percentage';
$fas[] = 'fa-person-booth';
$fas[] = 'fa-phone';
$fas[] = 'fa-phone-alt';
$fas[] = 'fa-phone-slash';
$fas[] = 'fa-phone-square';
$fas[] = 'fa-phone-square-alt';
$fas[] = 'fa-phone-volume';
$fas[] = 'fa-photo-video';
$fas[] = 'fa-piggy-bank';
$fas[] = 'fa-pills';
$fas[] = 'fa-pizza-slice';
$fas[] = 'fa-place-of-worship';
$fas[] = 'fa-plane';
$fas[] = 'fa-plane-arrival';
$fas[] = 'fa-plane-departure';
$fas[] = 'fa-play';
$fas[] = 'fa-play-circle';
$fas[] = 'fa-plug';
$fas[] = 'fa-plus';
$fas[] = 'fa-plus-circle';
$fas[] = 'fa-plus-square';
$fas[] = 'fa-podcast';
$fas[] = 'fa-poll';
$fas[] = 'fa-poll-h';
$fas[] = 'fa-poo';
$fas[] = 'fa-poo-storm';
$fas[] = 'fa-poop';
$fas[] = 'fa-portrait';
$fas[] = 'fa-pound-sign';
$fas[] = 'fa-power-off';
$fas[] = 'fa-pray';
$fas[] = 'fa-praying-hands';
$fas[] = 'fa-prescription';
$fas[] = 'fa-prescription-bottle';
$fas[] = 'fa-prescription-bottle-alt';
$fas[] = 'fa-print';
$fas[] = 'fa-procedures';
$fas[] = 'fa-project-diagram';
$fas[] = 'fa-puzzle-piece';
$fas[] = 'fa-qrcode';
$fas[] = 'fa-question';
$fas[] = 'fa-question-circle';
$fas[] = 'fa-quidditch';
$fas[] = 'fa-quote-left';
$fas[] = 'fa-quote-right';
$fas[] = 'fa-quran';
$fas[] = 'fa-radiation';
$fas[] = 'fa-radiation-alt';
$fas[] = 'fa-rainbow';
$fas[] = 'fa-random';
$fas[] = 'fa-receipt';
$fas[] = 'fa-recycle';
$fas[] = 'fa-redo';
$fas[] = 'fa-redo-alt';
$fas[] = 'fa-registered';
$fas[] = 'fa-remove-format';
$fas[] = 'fa-reply';
$fas[] = 'fa-reply-all';
$fas[] = 'fa-republican';
$fas[] = 'fa-restroom';
$fas[] = 'fa-retweet';
$fas[] = 'fa-ribbon';
$fas[] = 'fa-ring';
$fas[] = 'fa-road';
$fas[] = 'fa-robot';
$fas[] = 'fa-rocket';
$fas[] = 'fa-route';
$fas[] = 'fa-rss';
$fas[] = 'fa-rss-square';
$fas[] = 'fa-ruble-sign';
$fas[] = 'fa-ruler';
$fas[] = 'fa-ruler-combined';
$fas[] = 'fa-ruler-horizontal';
$fas[] = 'fa-ruler-vertical';
$fas[] = 'fa-running';
$fas[] = 'fa-rupee-sign';
$fas[] = 'fa-sad-cry';
$fas[] = 'fa-sad-tear';
$fas[] = 'fa-satellite';
$fas[] = 'fa-satellite-dish';
$fas[] = 'fa-save';
$fas[] = 'fa-school';
$fas[] = 'fa-screwdriver';
$fas[] = 'fa-scroll';
$fas[] = 'fa-sd-card';
$fas[] = 'fa-search';
$fas[] = 'fa-search-dollar';
$fas[] = 'fa-search-location';
$fas[] = 'fa-search-minus';
$fas[] = 'fa-search-plus';
$fas[] = 'fa-seedling';
$fas[] = 'fa-server';
$fas[] = 'fa-shapes';
$fas[] = 'fa-share';
$fas[] = 'fa-share-alt';
$fas[] = 'fa-share-alt-square';
$fas[] = 'fa-share-square';
$fas[] = 'fa-shekel-sign';
$fas[] = 'fa-shield-alt';
$fas[] = 'fa-ship';
$fas[] = 'fa-shipping-fast';
$fas[] = 'fa-shoe-prints';
$fas[] = 'fa-shopping-bag';
$fas[] = 'fa-shopping-basket';
$fas[] = 'fa-shopping-cart';
$fas[] = 'fa-shower';
$fas[] = 'fa-shuttle-van';
$fas[] = 'fa-sign';
$fas[] = 'fa-sign-in-alt';
$fas[] = 'fa-sign-language';
$fas[] = 'fa-sign-out-alt';
$fas[] = 'fa-signal';
$fas[] = 'fa-signature';
$fas[] = 'fa-sim-card';
$fas[] = 'fa-sitemap';
$fas[] = 'fa-skating';
$fas[] = 'fa-skiing';
$fas[] = 'fa-skiing-nordic';
$fas[] = 'fa-skull';
$fas[] = 'fa-skull-crossbones';
$fas[] = 'fa-slash';
$fas[] = 'fa-sleigh';
$fas[] = 'fa-sliders-h';
$fas[] = 'fa-smile';
$fas[] = 'fa-smile-beam';
$fas[] = 'fa-smile-wink';
$fas[] = 'fa-smog';
$fas[] = 'fa-smoking';
$fas[] = 'fa-smoking-ban';
$fas[] = 'fa-sms';
$fas[] = 'fa-snowboarding';
$fas[] = 'fa-snowflake';
$fas[] = 'fa-snowman';
$fas[] = 'fa-snowplow';
$fas[] = 'fa-socks';
$fas[] = 'fa-solar-panel';
$fas[] = 'fa-sort';
$fas[] = 'fa-sort-alpha-down';
$fas[] = 'fa-sort-alpha-down-alt';
$fas[] = 'fa-sort-alpha-up';
$fas[] = 'fa-sort-alpha-up-alt';
$fas[] = 'fa-sort-amount-down';
$fas[] = 'fa-sort-amount-down-alt';
$fas[] = 'fa-sort-amount-up';
$fas[] = 'fa-sort-amount-up-alt';
$fas[] = 'fa-sort-down';
$fas[] = 'fa-sort-numeric-down';
$fas[] = 'fa-sort-numeric-down-alt';
$fas[] = 'fa-sort-numeric-up';
$fas[] = 'fa-sort-numeric-up-alt';
$fas[] = 'fa-sort-up';
$fas[] = 'fa-spa';
$fas[] = 'fa-space-shuttle';
$fas[] = 'fa-spell-check';
$fas[] = 'fa-spider';
$fas[] = 'fa-spinner';
$fas[] = 'fa-splotch';
$fas[] = 'fa-spray-can';
$fas[] = 'fa-square';
$fas[] = 'fa-square-full';
$fas[] = 'fa-square-root-alt';
$fas[] = 'fa-stamp';
$fas[] = 'fa-star';
$fas[] = 'fa-star-and-crescent';
$fas[] = 'fa-star-half';
$fas[] = 'fa-star-half-alt';
$fas[] = 'fa-star-of-david';
$fas[] = 'fa-star-of-life';
$fas[] = 'fa-step-backward';
$fas[] = 'fa-step-forward';
$fas[] = 'fa-stethoscope';
$fas[] = 'fa-sticky-note';
$fas[] = 'fa-stop';
$fas[] = 'fa-stop-circle';
$fas[] = 'fa-stopwatch';
$fas[] = 'fa-store';
$fas[] = 'fa-store-alt';
$fas[] = 'fa-stream';
$fas[] = 'fa-street-view';
$fas[] = 'fa-strikethrough';
$fas[] = 'fa-stroopwafel';
$fas[] = 'fa-subscript';
$fas[] = 'fa-subway';
$fas[] = 'fa-suitcase';
$fas[] = 'fa-suitcase-rolling';
$fas[] = 'fa-sun';
$fas[] = 'fa-superscript';
$fas[] = 'fa-surprise';
$fas[] = 'fa-swatchbook';
$fas[] = 'fa-swimmer';
$fas[] = 'fa-swimming-pool';
$fas[] = 'fa-synagogue';
$fas[] = 'fa-sync';
$fas[] = 'fa-sync-alt';
$fas[] = 'fa-syringe';
$fas[] = 'fa-table';
$fas[] = 'fa-table-tennis';
$fas[] = 'fa-tablet';
$fas[] = 'fa-tablet-alt';
$fas[] = 'fa-tablets';
$fas[] = 'fa-tachometer-alt';
$fas[] = 'fa-tag';
$fas[] = 'fa-tags';
$fas[] = 'fa-tape';
$fas[] = 'fa-tasks';
$fas[] = 'fa-taxi';
$fas[] = 'fa-teeth';
$fas[] = 'fa-teeth-open';
$fas[] = 'fa-temperature-high';
$fas[] = 'fa-temperature-low';
$fas[] = 'fa-tenge';
$fas[] = 'fa-terminal';
$fas[] = 'fa-text-height';
$fas[] = 'fa-text-width';
$fas[] = 'fa-th';
$fas[] = 'fa-th-large';
$fas[] = 'fa-th-list';
$fas[] = 'fa-theater-masks';
$fas[] = 'fa-thermometer';
$fas[] = 'fa-thermometer-empty';
$fas[] = 'fa-thermometer-full';
$fas[] = 'fa-thermometer-half';
$fas[] = 'fa-thermometer-quarter';
$fas[] = 'fa-thermometer-three-quarters';
$fas[] = 'fa-thumbs-down';
$fas[] = 'fa-thumbs-up';
$fas[] = 'fa-thumbtack';
$fas[] = 'fa-ticket-alt';
$fas[] = 'fa-times';
$fas[] = 'fa-times-circle';
$fas[] = 'fa-tint';
$fas[] = 'fa-tint-slash';
$fas[] = 'fa-tired';
$fas[] = 'fa-toggle-off';
$fas[] = 'fa-toggle-on';
$fas[] = 'fa-toilet';
$fas[] = 'fa-toilet-paper';
$fas[] = 'fa-toolbox';
$fas[] = 'fa-tools';
$fas[] = 'fa-tooth';
$fas[] = 'fa-torah';
$fas[] = 'fa-torii-gate';
$fas[] = 'fa-tractor';
$fas[] = 'fa-trademark';
$fas[] = 'fa-traffic-light';
$fas[] = 'fa-train';
$fas[] = 'fa-tram';
$fas[] = 'fa-transgender';
$fas[] = 'fa-transgender-alt';
$fas[] = 'fa-trash';
$fas[] = 'fa-trash-alt';
$fas[] = 'fa-trash-restore';
$fas[] = 'fa-trash-restore-alt';
$fas[] = 'fa-tree';
$fas[] = 'fa-trophy';
$fas[] = 'fa-truck';
$fas[] = 'fa-truck-loading';
$fas[] = 'fa-truck-monster';
$fas[] = 'fa-truck-moving';
$fas[] = 'fa-truck-pickup';
$fas[] = 'fa-tshirt';
$fas[] = 'fa-tty';
$fas[] = 'fa-tv';
$fas[] = 'fa-umbrella';
$fas[] = 'fa-umbrella-beach';
$fas[] = 'fa-underline';
$fas[] = 'fa-undo';
$fas[] = 'fa-undo-alt';
$fas[] = 'fa-universal-access';
$fas[] = 'fa-university';
$fas[] = 'fa-unlink';
$fas[] = 'fa-unlock';
$fas[] = 'fa-unlock-alt';
$fas[] = 'fa-upload';
$fas[] = 'fa-user';
$fas[] = 'fa-user-alt';
$fas[] = 'fa-user-alt-slash';
$fas[] = 'fa-user-astronaut';
$fas[] = 'fa-user-check';
$fas[] = 'fa-user-circle';
$fas[] = 'fa-user-clock';
$fas[] = 'fa-user-cog';
$fas[] = 'fa-user-edit';
$fas[] = 'fa-user-friends';
$fas[] = 'fa-user-graduate';
$fas[] = 'fa-user-injured';
$fas[] = 'fa-user-lock';
$fas[] = 'fa-user-md';
$fas[] = 'fa-user-minus';
$fas[] = 'fa-user-ninja';
$fas[] = 'fa-user-nurse';
$fas[] = 'fa-user-plus';
$fas[] = 'fa-user-secret';
$fas[] = 'fa-user-shield';
$fas[] = 'fa-user-slash';
$fas[] = 'fa-user-tag';
$fas[] = 'fa-user-tie';
$fas[] = 'fa-user-times';
$fas[] = 'fa-users';
$fas[] = 'fa-users-cog';
$fas[] = 'fa-utensil-spoon';
$fas[] = 'fa-utensils';
$fas[] = 'fa-vector-square';
$fas[] = 'fa-venus';
$fas[] = 'fa-venus-double';
$fas[] = 'fa-venus-mars';
$fas[] = 'fa-vial';
$fas[] = 'fa-vials';
$fas[] = 'fa-video';
$fas[] = 'fa-video-slash';
$fas[] = 'fa-vihara';
$fas[] = 'fa-voicemail';
$fas[] = 'fa-volleyball-ball';
$fas[] = 'fa-volume-down';
$fas[] = 'fa-volume-mute';
$fas[] = 'fa-volume-off';
$fas[] = 'fa-volume-up';
$fas[] = 'fa-vote-yea';
$fas[] = 'fa-vr-cardboard';
$fas[] = 'fa-walking';
$fas[] = 'fa-wallet';
$fas[] = 'fa-warehouse';
$fas[] = 'fa-water';
$fas[] = 'fa-wave-square';
$fas[] = 'fa-weight';
$fas[] = 'fa-weight-hanging';
$fas[] = 'fa-wheelchair';
$fas[] = 'fa-wifi';
$fas[] = 'fa-wind';
$fas[] = 'fa-window-close';
$fas[] = 'fa-window-maximize';
$fas[] = 'fa-window-minimize';
$fas[] = 'fa-window-restore';
$fas[] = 'fa-wine-bottle';
$fas[] = 'fa-wine-glass';
$fas[] = 'fa-wine-glass-alt';
$fas[] = 'fa-won-sign';
$fas[] = 'fa-wrench';
$fas[] = 'fa-x-ray';
$fas[] = 'fa-yen-sign';
$fas[] = 'fa-yin-yang';
$font_awesome_solid_icons = $fas;
unset($fas);
?>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,6 @@ header('Content-type: text/javascript; charset: UTF-8');
header('Cache-Control: must-revalidate');
header('Expires: '.gmdate('D, d M Y H:i:s',time()+3600).' GMT');
include_once 'solid.min.js';
include_once 'all.min.js';
?>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,90 +1,40 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global['fontawesome-free-conflict-detection'] = {})));
}(this, (function (exports) { 'use strict';
typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
typeof define === 'function' && define.amd ? define(factory) :
(factory());
}(this, (function () { 'use strict';
function _typeof(obj) {
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof = function (obj) {
return typeof obj;
};
} else {
_typeof = function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}
return _typeof(obj);
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function (key) {
_defineProperty(target, key, source[key]);
});
}
return target;
}
var _WINDOW = {};
var _DOCUMENT = {};
let _WINDOW = {};
let _DOCUMENT = {};
try {
if (typeof window !== 'undefined') _WINDOW = window;
if (typeof document !== 'undefined') _DOCUMENT = document;
} catch (e) {}
var _ref = _WINDOW.navigator || {},
_ref$userAgent = _ref.userAgent,
userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;
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/');
var WINDOW = _WINDOW;
var DOCUMENT = _DOCUMENT;
var IS_BROWSER = !!WINDOW.document;
var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';
var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
const functions = [];
var functions = [];
var listener = function listener() {
const listener = function () {
DOCUMENT.removeEventListener('DOMContentLoaded', listener);
loaded = 1;
functions.map(function (fn) {
return fn();
});
functions.map(fn => fn());
};
var loaded = false;
let loaded = false;
if (IS_DOM) {
loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);
@ -97,25 +47,27 @@
}
function report (_ref) {
var nodesTested = _ref.nodesTested,
nodesFound = _ref.nodesFound;
var timedOutTests = {};
let {
nodesTested,
nodesFound
} = _ref;
const timedOutTests = {};
for (var key in nodesFound) {
for (let key in nodesFound) {
if (!(nodesTested.conflict[key] || nodesTested.noConflict[key])) {
timedOutTests[key] = nodesFound[key];
}
}
var conflictsCount = Object.keys(nodesTested.conflict).length;
const conflictsCount = Object.keys(nodesTested.conflict).length;
if (conflictsCount > 0) {
console.info("%cConflict".concat(conflictsCount > 1 ? 's' : '', " found:"), 'color: darkred; font-size: large');
var data = {};
const data = {};
for (var _key in nodesTested.conflict) {
var item = nodesTested.conflict[_key];
data[_key] = {
for (let key in nodesTested.conflict) {
const item = nodesTested.conflict[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)'
@ -125,40 +77,40 @@
console.table(data);
}
var noConflictsCount = Object.keys(nodesTested.noConflict).length;
const noConflictsCount = Object.keys(nodesTested.noConflict).length;
if (noConflictsCount > 0) {
console.info("%cNo conflict".concat(noConflictsCount > 1 ? 's' : '', " found with ").concat(noConflictsCount == 1 ? 'this' : 'these', ":"), 'color: green; font-size: large');
var _data = {};
console.info("%cNo conflict".concat(noConflictsCount > 1 ? 's' : '', " found with ").concat(noConflictsCount === 1 ? 'this' : 'these', ":"), 'color: green; font-size: large');
const data = {};
for (var _key2 in nodesTested.noConflict) {
var _item = nodesTested.noConflict[_key2];
_data[_key2] = {
'tagName': _item.tagName,
'src/href': _item.src || _item.href || 'n/a',
'innerText excerpt': _item.innerText && _item.innerText !== '' ? _item.innerText.slice(0, 200) + '...' : '(empty)'
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)'
};
}
console.table(_data);
console.table(data);
}
var timeOutCount = Object.keys(timedOutTests).length;
const timeOutCount = Object.keys(timedOutTests).length;
if (timeOutCount > 0) {
console.info("%cLeftovers--we timed out before collecting test results for ".concat(timeOutCount == 1 ? 'this' : 'these', ":"), 'color: blue; font-size: large');
var _data2 = {};
console.info("%cLeftovers--we timed out before collecting test results for ".concat(timeOutCount === 1 ? 'this' : 'these', ":"), 'color: blue; font-size: large');
const data = {};
for (var _key3 in timedOutTests) {
var _item2 = timedOutTests[_key3];
_data2[_key3] = {
'tagName': _item2.tagName,
'src/href': _item2.src || _item2.href || 'n/a',
'innerText excerpt': _item2.innerText && _item2.innerText !== '' ? _item2.innerText.slice(0, 200) + '...' : '(empty)'
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)'
};
}
console.table(_data2);
console.table(data);
}
}
@ -551,7 +503,7 @@
*
* @param {string} string Input string
* @param {string} [key] HMAC key
* @param {boolean} raw Raw oytput switch
* @param {boolean} [raw] Raw output switch
* @returns {string} MD5 output
*/
@ -581,7 +533,7 @@
});
function md5ForNode(node) {
if (null === node || 'object' !== _typeof(node)) return undefined;
if (null === node || 'object' !== typeof node) return undefined;
if (node.src) {
return md5(node.src);
@ -595,30 +547,31 @@
}
}
var diagScriptId = 'fa-kits-diag';
var nodeUnderTestId = 'fa-kits-node-under-test';
var md5Attr = 'data-md5';
var detectionIgnoreAttr = 'data-fa-detection-ignore';
var timeoutAttr = 'data-fa-detection-timeout';
var resultsCollectionMaxWaitAttr = 'data-fa-detection-results-collection-max-wait';
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 => {
e.preventDefault();
e.stopPropagation();
};
function pollUntil(_ref) {
var _ref$fn = _ref.fn,
fn = _ref$fn === void 0 ? function () {
return true;
} : _ref$fn,
_ref$initialDuration = _ref.initialDuration,
initialDuration = _ref$initialDuration === void 0 ? 1 : _ref$initialDuration,
_ref$maxDuration = _ref.maxDuration,
maxDuration = _ref$maxDuration === void 0 ? WINDOW.FontAwesomeDetection.timeout : _ref$maxDuration,
_ref$showProgress = _ref.showProgress,
showProgress = _ref$showProgress === void 0 ? false : _ref$showProgress,
progressIndicator = _ref.progressIndicator;
let {
fn = () => true,
initialDuration = 1,
maxDuration = WINDOW.FontAwesomeDetection.timeout,
showProgress = false,
progressIndicator
} = _ref;
return new Promise(function (resolve, reject) {
// eslint-disable-line compat/compat
function poll(duration, cumulativeDuration) {
setTimeout(function () {
var result = fn();
const result = fn();
if (showProgress) {
console.info(progressIndicator);
@ -628,8 +581,8 @@
// eslint-disable-line no-extra-boolean-cast
resolve(result);
} else {
var nextDuration = 250;
var nextCumulativeDuration = nextDuration + cumulativeDuration;
const nextDuration = 250;
const nextCumulativeDuration = nextDuration + cumulativeDuration;
if (nextCumulativeDuration <= maxDuration) {
poll(nextDuration, nextCumulativeDuration);
@ -645,10 +598,8 @@
}
function detectWebfontConflicts() {
var linkTags = Array.from(DOCUMENT.getElementsByTagName('link')).filter(function (t) {
return !t.hasAttribute(detectionIgnoreAttr);
});
var styleTags = Array.from(DOCUMENT.getElementsByTagName('style')).filter(function (t) {
const linkTags = Array.from(DOCUMENT.getElementsByTagName('link')).filter(t => !t.hasAttribute(detectionIgnoreAttr));
const styleTags = Array.from(DOCUMENT.getElementsByTagName('style')).filter(t => {
if (t.hasAttribute(detectionIgnoreAttr)) {
return false;
} // If the browser has loaded the FA5 CSS, let's not test that <style> element.
@ -664,15 +615,15 @@
});
function runDiag(scriptOrLinkTag, md5) {
var diagFrame = DOCUMENT.createElement('iframe'); // Using "visibility: hidden; position: absolute" instead of "display: none;" because
const diagFrame = DOCUMENT.createElement('iframe'); // Using "visibility: hidden; position: absolute" instead of "display: none;" because
// 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;');
var testIconId = 'fa-test-icon-' + md5;
var iTag = DOCUMENT.createElement('i');
const testIconId = 'fa-test-icon-' + md5;
const iTag = DOCUMENT.createElement('i');
iTag.setAttribute('class', 'fa fa-coffee');
iTag.setAttribute('id', testIconId);
var diagScript = DOCUMENT.createElement('script');
const diagScript = DOCUMENT.createElement('script');
diagScript.setAttribute('id', diagScriptId); // WARNING: this function will be toString()'d and assigned to innerText of the diag script
// 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
@ -681,31 +632,31 @@
// will probably cause it to choke. Chrome will show an error like this:
// Uncaught SyntaxError: Unexpected end of input
var diagScriptFun = function diagScriptFun(nodeUnderTestId, testIconId, md5, parentOrigin) {
const diagScriptFun = (nodeUnderTestId, testIconId, md5, parentOrigin) => {
parent.FontAwesomeDetection.__pollUntil({
fn: function fn() {
var iEl = document.getElementById(testIconId);
var computedStyle = window.getComputedStyle(iEl);
var fontFamily = computedStyle.getPropertyValue('font-family');
fn: () => {
const iEl = document.getElementById(testIconId);
const computedStyle = window.getComputedStyle(iEl);
const fontFamily = computedStyle.getPropertyValue('font-family');
if (!!fontFamily.match(/FontAwesome/) || !!fontFamily.match(/Font Awesome 5/)) {
if (!!fontFamily.match(/FontAwesome/) || !!fontFamily.match(/Font Awesome [56]/)) {
return true;
} else {
return false;
}
}
}).then(function () {
var node = document.getElementById(nodeUnderTestId);
}).then(() => {
const node = document.getElementById(nodeUnderTestId);
parent.postMessage({
type: 'fontawesome-conflict',
technology: 'webfont',
href: node.href,
innerText: node.innerText,
tagName: node.tagName,
md5: md5
md5
}, parentOrigin);
}).catch(function (e) {
var node = document.getElementById(nodeUnderTestId);
const node = document.getElementById(nodeUnderTestId);
if (e === 'timeout') {
parent.postMessage({
@ -714,7 +665,7 @@
href: node.src,
innerText: node.innerText,
tagName: node.tagName,
md5: md5
md5
}, parentOrigin);
} else {
console.error(e);
@ -722,40 +673,39 @@
});
};
var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
const parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
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);
};
domready(function () {
return DOCUMENT.body.appendChild(diagFrame);
});
domready(() => DOCUMENT.body.appendChild(diagFrame));
}
var cssByMD5 = {};
const cssByMD5 = {};
for (var i = 0; i < linkTags.length; i++) {
var linkUnderTest = DOCUMENT.createElement('link');
for (let i = 0; i < linkTags.length; i++) {
const linkUnderTest = DOCUMENT.createElement('link');
linkUnderTest.setAttribute('id', nodeUnderTestId);
linkUnderTest.setAttribute('href', linkTags[i].href);
linkUnderTest.setAttribute('rel', linkTags[i].rel);
var md5ForLink = md5ForNode(linkTags[i]);
const md5ForLink = md5ForNode(linkTags[i]);
linkUnderTest.setAttribute(md5Attr, md5ForLink);
cssByMD5[md5ForLink] = linkTags[i];
runDiag(linkUnderTest, md5ForLink);
}
for (var _i = 0; _i < styleTags.length; _i++) {
for (let i = 0; i < styleTags.length; i++) {
var styleUnderTest = DOCUMENT.createElement('style');
styleUnderTest.setAttribute('id', nodeUnderTestId);
var md5ForStyle = md5ForNode(styleTags[_i]);
const md5ForStyle = md5ForNode(styleTags[i]);
styleUnderTest.setAttribute(md5Attr, md5ForStyle);
styleUnderTest.innerText = styleTags[_i].innerText;
cssByMD5[md5ForStyle] = styleTags[_i];
styleUnderTest.innerText = styleTags[i].innerText;
cssByMD5[md5ForStyle] = styleTags[i];
runDiag(styleUnderTest, md5ForStyle);
}
@ -763,17 +713,15 @@
}
function detectSvgConflicts(currentScript) {
var scripts = Array.from(DOCUMENT.scripts).filter(function (t) {
return !t.hasAttribute(detectionIgnoreAttr) && t !== currentScript;
});
var scriptsByMD5 = {};
const scripts = Array.from(DOCUMENT.scripts).filter(t => !t.hasAttribute(detectionIgnoreAttr) && t !== currentScript);
const scriptsByMD5 = {};
var _loop = function _loop(scriptIdx) {
var diagFrame = DOCUMENT.createElement('iframe');
for (let scriptIdx = 0; scriptIdx < scripts.length; scriptIdx++) {
const diagFrame = DOCUMENT.createElement('iframe');
diagFrame.setAttribute('style', 'display:none;');
var scriptUnderTest = DOCUMENT.createElement('script');
const scriptUnderTest = DOCUMENT.createElement('script');
scriptUnderTest.setAttribute('id', nodeUnderTestId);
var md5ForScript = md5ForNode(scripts[scriptIdx]);
const md5ForScript = md5ForNode(scripts[scriptIdx]);
scriptUnderTest.setAttribute(md5Attr, md5ForScript);
scriptsByMD5[md5ForScript] = scripts[scriptIdx];
@ -786,24 +734,24 @@
}
scriptUnderTest.async = true;
var diagScript = DOCUMENT.createElement('script');
const diagScript = DOCUMENT.createElement('script');
diagScript.setAttribute('id', diagScriptId);
var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
const parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
var diagScriptFun = function diagScriptFun(nodeUnderTestId, md5, parentOrigin) {
const diagScriptFun = (nodeUnderTestId, md5, parentOrigin) => {
parent.FontAwesomeDetection.__pollUntil({
fn: function fn() {
return !!window.FontAwesomeConfig;
fn: () => {
return !!window.FontAwesomeConfig || !!window.FontAwesomeKitConfig;
}
}).then(function () {
var scriptNode = document.getElementById(nodeUnderTestId);
const scriptNode = document.getElementById(nodeUnderTestId);
parent.postMessage({
type: 'fontawesome-conflict',
technology: 'js',
src: scriptNode.src,
innerText: scriptNode.innerText,
tagName: scriptNode.tagName,
md5: md5
md5
}, parentOrigin);
}).catch(function (e) {
var scriptNode = document.getElementById(nodeUnderTestId);
@ -814,7 +762,7 @@
src: scriptNode.src,
innerText: scriptNode.innerText,
tagName: scriptNode.tagName,
md5: md5
md5
}, parentOrigin);
} else {
console.error(e);
@ -825,25 +773,22 @@
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);
};
domready(function () {
return DOCUMENT.body.appendChild(diagFrame);
});
};
for (var scriptIdx = 0; scriptIdx < scripts.length; scriptIdx++) {
_loop(scriptIdx);
domready(() => DOCUMENT.body.appendChild(diagFrame));
}
return scriptsByMD5;
}
function setDoneResults(_ref2) {
var nodesTested = _ref2.nodesTested,
nodesFound = _ref2.nodesFound;
let {
nodesTested,
nodesFound
} = _ref2;
WINDOW.FontAwesomeDetection = WINDOW.FontAwesomeDetection || {};
WINDOW.FontAwesomeDetection.nodesTested = nodesTested;
WINDOW.FontAwesomeDetection.nodesFound = nodesFound;
@ -851,8 +796,8 @@
}
function conflictDetection() {
var report$$1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
var nodesTested = {
let report$$1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : () => {};
const nodesTested = {
conflict: {},
noConflict: {}
};
@ -869,19 +814,19 @@
}
};
var scriptsToTest = detectSvgConflicts(DOCUMENT.currentScript);
var cssToTest = detectWebfontConflicts();
var nodesFound = _objectSpread({}, scriptsToTest, cssToTest);
var testCount = Object.keys(scriptsToTest).length + Object.keys(cssToTest).length; // The resultsCollectionMaxWait allows for the time between when the tests running under
const scriptsToTest = detectSvgConflicts(DOCUMENT.currentScript);
const cssToTest = detectWebfontConflicts();
const nodesFound = { ...scriptsToTest,
...cssToTest
};
const testCount = Object.keys(scriptsToTest).length + Object.keys(cssToTest).length; // The resultsCollectionMaxWait allows for the time between when the tests running under
// 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.
var masterTimeout = WINDOW.FontAwesomeDetection.timeout + WINDOW.FontAwesomeDetection.resultsCollectionMaxWait;
const masterTimeout = WINDOW.FontAwesomeDetection.timeout + WINDOW.FontAwesomeDetection.resultsCollectionMaxWait;
console.group('Font Awesome Detector');
if (testCount === 0) {
@ -898,41 +843,41 @@
maxDuration: masterTimeout,
showProgress: true,
progressIndicator: 'waiting...',
fn: function fn() {
fn: () => {
return Object.keys(nodesTested.conflict).length + Object.keys(nodesTested.noConflict).length >= testCount;
}
}).then(function () {
}).then(() => {
console.info('DONE!');
setDoneResults({
nodesTested: nodesTested,
nodesFound: nodesFound
nodesTested,
nodesFound
});
report$$1({
nodesTested: nodesTested,
nodesFound: nodesFound
nodesTested,
nodesFound
});
console.groupEnd();
}).catch(function (e) {
}).catch(e => {
if (e === 'timeout') {
console.info('TIME OUT! We waited until we got tired. Here\'s what we found:');
setDoneResults({
nodesTested: nodesTested,
nodesFound: nodesFound
nodesTested,
nodesFound
});
report$$1({
nodesTested: nodesTested,
nodesFound: nodesFound
nodesTested,
nodesFound
});
} else {
console.info('Whoops! We hit an error:', e);
console.info('Here\'s what we\'d found up until that error:');
setDoneResults({
nodesTested: nodesTested,
nodesFound: nodesFound
nodesTested,
nodesFound
});
report$$1({
nodesTested: nodesTested,
nodesFound: nodesFound
nodesTested,
nodesFound
});
}
@ -941,36 +886,230 @@
}
} // Allow clients to access, and in some cases, override some properties
var initialConfig = WINDOW.FontAwesomeDetection || {}; // These can be overridden
const initialConfig = WINDOW.FontAwesomeDetection || {}; // These can be overridden
var _default = {
report: report,
const _default = {
report,
timeout: +(DOCUMENT.currentScript.getAttribute(timeoutAttr) || "2000"),
resultsCollectionMaxWait: +(DOCUMENT.currentScript.getAttribute(resultsCollectionMaxWaitAttr) || "5000")
};
var _config = _objectSpread({}, _default, initialConfig, {
const _config = { ..._default,
...initialConfig,
// These cannot be overridden
__pollUntil: pollUntil,
md5ForNode: md5ForNode,
md5ForNode,
detectionDone: false,
nodesTested: null,
nodesFound: null
});
};
WINDOW.FontAwesomeDetection = _config;
var PRODUCTION = function () {
var a = "classic",
r = "sharp",
o = "sharp-duotone";
var et$1 = {
classic: {
900: "fas",
400: "far",
normal: "far",
300: "fal",
100: "fat"
},
sharp: {
900: "fass",
400: "fasr",
300: "fasl",
100: "fast"
},
"sharp-duotone": {
900: "fasds"
}
};
var bt = {
kit: {
fak: "kit",
"fa-kit": "kit"
},
"kit-duotone": {
fakd: "kit-duotone",
"fa-kit-duotone": "kit-duotone"
}
};
var lo = {
classic: {
"fa-brands": "fab",
"fa-duotone": "fad",
"fa-light": "fal",
"fa-regular": "far",
"fa-solid": "fas",
"fa-thin": "fat"
},
sharp: {
"fa-solid": "fass",
"fa-regular": "fasr",
"fa-light": "fasl",
"fa-thin": "fast"
},
"sharp-duotone": {
"fa-solid": "fasds"
}
},
no = {
classic: {
fab: "fa-brands",
fad: "fa-duotone",
fal: "fa-light",
far: "fa-regular",
fas: "fa-solid",
fat: "fa-thin"
},
sharp: {
fass: "fa-solid",
fasr: "fa-regular",
fasl: "fa-light",
fast: "fa-thin"
},
"sharp-duotone": {
fasds: "fa-solid"
}
},
fo = {
classic: {
solid: "fas",
regular: "far",
light: "fal",
thin: "fat",
duotone: "fad",
brands: "fab"
},
sharp: {
solid: "fass",
regular: "fasr",
light: "fasl",
thin: "fast"
},
"sharp-duotone": {
solid: "fasds"
}
},
ho = {
classic: {
fa: "solid",
fas: "solid",
"fa-solid": "solid",
far: "regular",
"fa-regular": "regular",
fal: "light",
"fa-light": "light",
fat: "thin",
"fa-thin": "thin",
fad: "duotone",
"fa-duotone": "duotone",
fab: "brands",
"fa-brands": "brands"
},
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"
}
};
var Io = {
kit: {
"fa-kit": "fak"
},
"kit-duotone": {
"fa-kit-duotone": "fakd"
}
},
Fo = {
kit: {
fak: "fa-kit"
},
"kit-duotone": {
fakd: "fa-kit-duotone"
}
},
So = {
kit: {
kit: "fak"
},
"kit-duotone": {
"kit-duotone": "fakd"
}
};
const PRODUCTION = (() => {
try {
return process.env.NODE_ENV === 'production';
} catch (e) {
} catch (e$$1) {
return false;
}
}();
})();
function familyProxy(obj) {
// Defaults to the classic family if family is not available
return new Proxy(obj, {
get(target, prop) {
return prop in target ? target[prop] : target[a];
}
});
}
const _PREFIX_TO_STYLE = { ...ho
};
_PREFIX_TO_STYLE[a] = { ...ho[a],
...bt['kit'],
...bt['kit-duotone']
};
const PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);
const _STYLE_TO_PREFIX = { ...fo
};
_STYLE_TO_PREFIX[a] = { ..._STYLE_TO_PREFIX[a],
...So['kit'],
...So['kit-duotone']
};
const STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);
const _PREFIX_TO_LONG_STYLE = { ...no
};
_PREFIX_TO_LONG_STYLE[a] = { ..._PREFIX_TO_LONG_STYLE[a],
...Fo['kit']
};
const PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);
const _LONG_STYLE_TO_PREFIX = { ...lo
};
_LONG_STYLE_TO_PREFIX[a] = { ..._LONG_STYLE_TO_PREFIX[a],
...Io['kit']
};
const LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);
const _FONT_WEIGHT_TO_PREFIX = { ...et$1
};
const FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);
const prefixes = new Set();
Object.keys(STYLE_TO_PREFIX[a]).map(prefixes.add.bind(prefixes));
Object.keys(STYLE_TO_PREFIX[r]).map(prefixes.add.bind(prefixes));
Object.keys(STYLE_TO_PREFIX[o]).map(prefixes.add.bind(prefixes));
function bunker(fn) {
try {
fn();
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
fn(...args);
} catch (e) {
if (!PRODUCTION) {
throw e;
@ -978,14 +1117,10 @@
}
}
bunker(function () {
bunker(() => {
if (IS_BROWSER && IS_DOM) {
conflictDetection(window.FontAwesomeDetection.report);
}
});
exports.conflictDetection = conflictDetection;
Object.defineProperty(exports, '__esModule', { value: true });
})));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,19 +1,152 @@
// Animated Icons
// animating icons
// --------------------------
.@{fa-css-prefix}-beat {
animation-name: ~'@{fa-css-prefix}-beat';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, ease-in-out)';
}
.@{fa-css-prefix}-bounce {
animation-name: ~'@{fa-css-prefix}-bounce';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(0.280, 0.840, 0.420, 1))';
}
.@{fa-css-prefix}-fade {
animation-name: ~'@{fa-css-prefix}-fade';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1))';
}
.@{fa-css-prefix}-beat-fade {
animation-name: ~'@{fa-css-prefix}-beat-fade';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1))';
}
.@{fa-css-prefix}-flip {
animation-name: ~'@{fa-css-prefix}-flip';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, ease-in-out)';
}
.@{fa-css-prefix}-shake {
animation-name: ~'@{fa-css-prefix}-shake';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, linear)';
}
.@{fa-css-prefix}-spin {
animation: fa-spin 2s infinite linear;
animation-name: ~'@{fa-css-prefix}-spin';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 2s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, linear)';
}
.@{fa-css-prefix}-pulse {
animation: fa-spin 1s infinite steps(8);
.@{fa-css-prefix}-spin-reverse {
--@{fa-css-prefix}-animation-direction: reverse;
}
@keyframes fa-spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
.@{fa-css-prefix}-pulse,
.@{fa-css-prefix}-spin-pulse {
animation-name: ~'@{fa-css-prefix}-spin';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, steps(8));';
}
// if agent or operating system prefers reduced motion, disable animations
// see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/
// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion
@media (prefers-reduced-motion: reduce) {
.@{fa-css-prefix}-beat,
.@{fa-css-prefix}-bounce,
.@{fa-css-prefix}-fade,
.@{fa-css-prefix}-beat-fade,
.@{fa-css-prefix}-flip,
.@{fa-css-prefix}-pulse,
.@{fa-css-prefix}-shake,
.@{fa-css-prefix}-spin,
.@{fa-css-prefix}-spin-pulse {
animation-delay: -1ms;
animation-duration: 1ms;
animation-iteration-count: 1;
transition-delay: 0s;
transition-duration: 0s;
}
}
@keyframes ~'@{fa-css-prefix}-beat' {
0%, 90% { transform: scale(1); }
45% { transform: ~'scale(var(--@{fa-css-prefix}-beat-scale, 1.25))'; }
}
@keyframes ~'@{fa-css-prefix}-bounce' {
0% { transform: scale(1,1) translateY(0); }
10% { transform: ~'scale(var(--@{fa-css-prefix}-bounce-start-scale-x, 1.1),var(--@{fa-css-prefix}-bounce-start-scale-y, 0.9))' translateY(0); }
30% { transform: ~'scale(var(--@{fa-css-prefix}-bounce-jump-scale-x, 0.9),var(--@{fa-css-prefix}-bounce-jump-scale-y, 1.1))' ~'translateY(var(--@{fa-css-prefix}-bounce-height, -0.5em))'; }
50% { transform: ~'scale(var(--@{fa-css-prefix}-bounce-land-scale-x, 1.05),var(--@{fa-css-prefix}-bounce-land-scale-y, 0.95))' translateY(0); }
57% { transform: ~'scale(1,1) translateY(var(--@{fa-css-prefix}-bounce-rebound, -0.125em))'; }
64% { transform: scale(1,1) translateY(0); }
100% { transform: scale(1,1) translateY(0); }
}
@keyframes ~'@{fa-css-prefix}-fade' {
50% { opacity: ~'var(--@{fa-css-prefix}-fade-opacity, 0.4)'; }
}
@keyframes ~'@{fa-css-prefix}-beat-fade' {
0%, 100% {
opacity: ~'var(--@{fa-css-prefix}-beat-fade-opacity, 0.4)';
transform: scale(1);
}
50% {
opacity: 1;
transform: ~'scale(var(--@{fa-css-prefix}-beat-fade-scale, 1.125))';
}
}
@keyframes ~'@{fa-css-prefix}-flip' {
50% {
transform: ~'rotate3d(var(--@{fa-css-prefix}-flip-x, 0), var(--@{fa-css-prefix}-flip-y, 1), var(--@{fa-css-prefix}-flip-z, 0), var(--@{fa-css-prefix}-flip-angle, -180deg))';
}
}
@keyframes ~'@{fa-css-prefix}-shake' {
0% { transform: rotate(-15deg); }
4% { transform: rotate(15deg); }
8%, 24% { transform: rotate(-18deg); }
12%, 28% { transform: rotate(18deg); }
16% { transform: rotate(-22deg); }
20% { transform: rotate(22deg); }
32% { transform: rotate(-12deg); }
36% { transform: rotate(12deg); }
40%, 100% { transform: rotate(0deg); }
}
@keyframes ~'@{fa-css-prefix}-spin' {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}

View File

@ -1,16 +1,20 @@
// Bordered & Pulled
// bordered + pulled icons
// -------------------------
.@{fa-css-prefix}-border {
border-radius: .1em;
border: solid .08em @fa-border-color;
padding: .2em .25em .15em;
border-color: ~'var(--@{fa-css-prefix}-border-color, @{fa-border-color})';
border-radius: ~'var(--@{fa-css-prefix}-border-radius, @{fa-border-radius})';
border-style: ~'var(--@{fa-css-prefix}-border-style, @{fa-border-style})';
border-width: ~'var(--@{fa-css-prefix}-border-width, @{fa-border-width})';
padding: ~'var(--@{fa-css-prefix}-border-padding, @{fa-border-padding})';
}
.@{fa-css-prefix}-pull-left { float: left; }
.@{fa-css-prefix}-pull-right { float: right; }
.@{fa-css-prefix}, .fas, .far, .fal, .fab {
&.@{fa-css-prefix}-pull-left { margin-right: .3em; }
&.@{fa-css-prefix}-pull-right { margin-left: .3em; }
.@{fa-css-prefix}-pull-left {
float: left;
margin-right: ~'var(--@{fa-css-prefix}-pull-margin, @{fa-pull-margin})';
}
.@{fa-css-prefix}-pull-right {
float: right;
margin-left: ~'var(--@{fa-css-prefix}-pull-margin, @{fa-pull-margin})';
}

View File

@ -1,12 +1,36 @@
// Base Class Definition
// base icon class definition
// -------------------------
.@{fa-css-prefix}, .fas, .far, .fal, .fad, .fab {
.@{fa-css-prefix} {
font-family: ~"var(--@{fa-css-prefix}-style-family, '@{fa-style-family}')";
font-weight: ~'var(--@{fa-css-prefix}-style, @{fa-style})';
}
.@{fa-css-prefix}-solid,
.@{fa-css-prefix}-regular,
.@{fa-css-prefix}-brands,
.fas,
.far,
.fab,
.@{fa-css-prefix} {
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
display: inline-block;
display: ~'var(--@{fa-css-prefix}-display, @{fa-display})';
font-style: normal;
font-variant: normal;
text-rendering: auto;
line-height: 1;
}
.fas,
.@{fa-css-prefix}-classic,
.@{fa-css-prefix}-solid,
.far,
.@{fa-css-prefix}-regular {
font-family: 'Font Awesome 6 Free';
}
.fab,
.@{fa-css-prefix}-brands {
font-family: 'Font Awesome 6 Brands';
}

View File

@ -1,6 +1,7 @@
// Fixed Width Icons
// fixed-width icons
// -------------------------
.@{fa-css-prefix}-fw {
text-align: center;
width: (20em / 16);
width: @fa-fw-width;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +0,0 @@
// Icon Sizes
// -------------------------
.larger(@factor) when (@factor > 0) {
.larger((@factor - 1));
.@{fa-css-prefix}-@{factor}x {
font-size: (@factor * 1em);
}
}
/* makes the font 33% larger relative to the icon container */
.@{fa-css-prefix}-lg {
font-size: (4em / 3);
line-height: (3em / 4);
vertical-align: -.0667em;
}
.@{fa-css-prefix}-xs {
font-size: .75em;
}
.@{fa-css-prefix}-sm {
font-size: .875em;
}
.larger(10);

View File

@ -1,18 +1,18 @@
// List Icons
// icons in a list
// -------------------------
.@{fa-css-prefix}-ul {
list-style-type: none;
margin-left: (@fa-li-width * 5/4);
margin-left: ~'var(--@{fa-css-prefix}-li-margin, @{fa-li-margin})';
padding-left: 0;
> li { position: relative; }
}
.@{fa-css-prefix}-li {
left: -@fa-li-width;
left: calc(~'var(--@{fa-css-prefix}-li-width, @{fa-li-width})' * -1);
position: absolute;
text-align: center;
width: @fa-li-width;
width: ~'var(--@{fa-css-prefix}-li-width, @{fa-li-width})';
line-height: inherit;
}

View File

@ -1,6 +1,7 @@
// Mixins
// mixins
// --------------------------
// base rendering for an icon
.fa-icon() {
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
@ -11,46 +12,67 @@
line-height: 1;
}
.fa-icon-rotate(@degrees, @rotation) {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})";
transform: rotate(@degrees);
// sets relative font-sizing and alignment (in _sizing)
.fa-size(@font-size) {
font-size: (@font-size / @fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base
line-height: (1 / @font-size) * 1em; // sets the line-height of the icon back to that of it's parent
vertical-align: ((6 / @font-size) - (3 / 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender
}
.fa-icon-flip(@horiz, @vert, @rotation) {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)";
transform: scale(@horiz, @vert);
}
// Only display content to screen readers. A la Bootstrap 4.
//
// See: http://a11yproject.com/posts/how-to-hide-content/
.sr-only() {
border: 0;
clip: rect(0,0,0,0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
// only display content to screen readers
// see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
// see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
.fa-sr-only() {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
// Use in conjunction with .sr-only to only display content when it's focused.
//
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
//
// Credit: HTML5 Boilerplate
.sr-only-focusable() {
&:active,
&:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
width: auto;
// use in conjunction with .sr-only to only display content when it's focused
.fa-sr-only-focusable() {
&:not(:focus) {
.fa-sr-only();
}
}
// sets a specific icon family to use alongside style + icon mixins
.fa-family-classic() {
font-family: 'Font Awesome 6 Free';
}
// convenience mixins for declaring pseudo-elements by CSS variable,
// including all style-specific font properties, and both the ::before
// and ::after elements in the duotone case.
.fa-icon-solid(@fa-var) {
.fa-icon;
.fa-solid;
&::before {
content: @fa-var;
}
}
.fa-icon-regular(@fa-var) {
.fa-icon;
.fa-regular;
&::before {
content: @fa-var;
}
}
.fa-icon-brands(@fa-var) {
.fa-icon;
.fa-brands;
&::before {
content: @fa-var;
}
}

View File

@ -1,24 +1,31 @@
// Rotated & Flipped Icons
// rotating + flipping icons
// -------------------------
.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
.@{fa-css-prefix}-flip-both, .@{fa-css-prefix}-flip-horizontal.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(-1, -1, 2); }
// Hook for IE8-9
// -------------------------
:root {
.@{fa-css-prefix}-rotate-90,
.@{fa-css-prefix}-rotate-180,
.@{fa-css-prefix}-rotate-270,
.@{fa-css-prefix}-flip-horizontal,
.@{fa-css-prefix}-flip-vertical,
.@{fa-css-prefix}-flip-both {
filter: none;
}
.@{fa-css-prefix}-rotate-90 {
transform: rotate(90deg);
}
.@{fa-css-prefix}-rotate-180 {
transform: rotate(180deg);
}
.@{fa-css-prefix}-rotate-270 {
transform: rotate(270deg);
}
.@{fa-css-prefix}-flip-horizontal {
transform: scale(-1, 1);
}
.@{fa-css-prefix}-flip-vertical {
transform: scale(1, -1);
}
.@{fa-css-prefix}-flip-both,
.@{fa-css-prefix}-flip-horizontal.@{fa-css-prefix}-flip-vertical {
transform: scale(-1, -1);
}
.@{fa-css-prefix}-rotate-by {
transform: rotate(~'var(--@{fa-css-prefix}-rotate-angle, 0)');
}

View File

@ -1,5 +1,14 @@
// Screen Readers
// screen-reader utilities
// -------------------------
.sr-only { .sr-only(); }
.sr-only-focusable { .sr-only-focusable(); }
// only display content to screen readers
.sr-only,
.@{fa-css-prefix}-sr-only {
.fa-sr-only();
}
// use in conjunction with .sr-only to only display content when it's focused
.sr-only-focusable,
.@{fa-css-prefix}-sr-only-focusable {
.fa-sr-only-focusable();
}

File diff suppressed because it is too large Load Diff

19
resources/fontawesome/less/_sizing.less vendored Normal file
View File

@ -0,0 +1,19 @@
// sizing icons
// -------------------------
// literal magnification scale
.sizes-literal(@factor) when (@factor > 0) {
.sizes-literal((@factor - 1));
.@{fa-css-prefix}-@{factor}x {
font-size: (@factor * 1em);
}
}
.sizes-literal(10);
// step-based scale (with alignment)
each(.fa-sizes(), {
.@{fa-css-prefix}-@{key} {
.fa-size(@value);
}
});

View File

@ -1,4 +1,4 @@
// Stacked Icons
// stacking icons
// -------------------------
.@{fa-css-prefix}-stack {
@ -6,8 +6,8 @@
height: 2em;
line-height: 2em;
position: relative;
vertical-align: middle;
width: 2em;
vertical-align: @fa-stack-vertical-align;
width: @fa-stack-width;
}
.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
@ -15,8 +15,17 @@
position: absolute;
text-align: center;
width: 100%;
z-index: ~'var(--@{fa-css-prefix}-stack-z-index, @{fa-stack-z-index})';
}
.@{fa-css-prefix}-stack-1x { line-height: inherit; }
.@{fa-css-prefix}-stack-2x { font-size: 2em; }
.@{fa-css-prefix}-inverse { color: @fa-inverse; }
.@{fa-css-prefix}-stack-1x {
line-height: inherit;
}
.@{fa-css-prefix}-stack-2x {
font-size: 2em;
}
.@{fa-css-prefix}-inverse {
color: ~'var(--@{fa-css-prefix}-inverse, @{fa-inverse})';
}

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,29 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@import "_variables.less";
@font-face {
font-family: 'Font Awesome 5 Brands';
font-style: normal;
font-weight: normal;
font-display: @fa-font-display;
src: url('@{fa-font-path}/fa-brands-400.eot');
src: url('@{fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'),
url('@{fa-font-path}/fa-brands-400.woff2') format('woff2'),
url('@{fa-font-path}/fa-brands-400.woff') format('woff'),
url('@{fa-font-path}/fa-brands-400.ttf') format('truetype'),
url('@{fa-font-path}/fa-brands-400.svg#fontawesome') format('svg');
:root, :host {
--@{fa-css-prefix}-style-family-brands: 'Font Awesome 6 Brands';
--@{fa-css-prefix}-font-brands: normal 400 1em/1 'Font Awesome 6 Brands';
}
.fab {
font-family: 'Font Awesome 5 Brands';
@font-face {
font-family: 'Font Awesome 6 Brands';
font-style: normal;
font-weight: 400;
font-display: @fa-font-display;
src: url('@{fa-font-path}/fa-brands-400.woff2') format('woff2'),
url('@{fa-font-path}/fa-brands-400.ttf') format('truetype');
}
.fab,
.@{fa-css-prefix}-brands {
font-weight: 400;
}
each(.fa-brand-icons(), {
.@{fa-css-prefix}-@{key}:before { content: @value; }
});

View File

@ -1,11 +1,15 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
// Font Awesome core compile (Web Fonts-based)
// -------------------------
@import "_variables.less";
@import "_mixins.less";
@import "_core.less";
@import "_larger.less";
@import "_sizing.less";
@import "_fixed-width.less";
@import "_list.less";
@import "_bordered-pulled.less";

View File

@ -1,23 +1,25 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@import "_variables.less";
:root, :host {
--@{fa-css-prefix}-style-family-classic: '@{fa-style-family}';
--@{fa-css-prefix}-font-regular: normal 400 1em/1 '@{fa-style-family}';
}
@font-face {
font-family: 'Font Awesome 5 Free';
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 400;
font-display: @fa-font-display;
src: url('@{fa-font-path}/fa-regular-400.eot');
src: url('@{fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'),
url('@{fa-font-path}/fa-regular-400.woff2') format('woff2'),
url('@{fa-font-path}/fa-regular-400.woff') format('woff'),
url('@{fa-font-path}/fa-regular-400.ttf') format('truetype'),
url('@{fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
src: url('@{fa-font-path}/fa-regular-400.woff2') format('woff2'),
url('@{fa-font-path}/fa-regular-400.ttf') format('truetype');
}
.far {
font-family: 'Font Awesome 5 Free';
.far,
.@{fa-css-prefix}-regular {
font-weight: 400;
}

View File

@ -1,24 +1,25 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@import "_variables.less";
:root, :host {
--@{fa-css-prefix}-style-family-classic: '@{fa-style-family}';
--@{fa-css-prefix}-font-solid: normal 900 1em/1 '@{fa-style-family}';
}
@font-face {
font-family: 'Font Awesome 5 Free';
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 900;
font-display: @fa-font-display;
src: url('@{fa-font-path}/fa-solid-900.eot');
src: url('@{fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'),
url('@{fa-font-path}/fa-solid-900.woff2') format('woff2'),
url('@{fa-font-path}/fa-solid-900.woff') format('woff'),
url('@{fa-font-path}/fa-solid-900.ttf') format('truetype'),
url('@{fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
src: url('@{fa-font-path}/fa-solid-900.woff2') format('woff2'),
url('@{fa-font-path}/fa-solid-900.ttf') format('truetype');
}
.fa,
.fas {
font-family: 'Font Awesome 5 Free';
.fas,
.@{fa-css-prefix}-solid {
font-weight: 900;
}

View File

@ -1,6 +1,10 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
// V4 shims compile (Web Fonts-based)
// -------------------------
@import '_variables.less';
@import '_shims.less';

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,294 +1,646 @@
area-chart:
name: chart-area
arrow-circle-o-down:
name: arrow-alt-circle-down
prefix: far
name: circle-down
arrow-circle-o-left:
name: arrow-alt-circle-left
prefix: far
name: circle-left
arrow-circle-o-right:
name: arrow-alt-circle-right
prefix: far
name: circle-right
arrow-circle-o-up:
name: arrow-alt-circle-up
prefix: far
name: circle-up
arrows:
name: arrows-alt
name: up-down-left-right
arrows-alt:
name: expand-arrows-alt
name: maximize
arrows-h:
name: arrows-alt-h
name: left-right
arrows-v:
name: arrows-alt-v
name: up-down
asl-interpreting:
name: hands-asl-interpreting
automobile:
name: car
bank:
name: building-columns
bar-chart:
name: chart-bar
prefix: far
bitbucket-square:
name: bitbucket
name: chart-column
bar-chart-o:
name: chart-column
bathtub:
name: bath
battery:
name: battery-full
battery-0:
name: battery-empty
battery-1:
name: battery-quarter
battery-2:
name: battery-half
battery-3:
name: battery-three-quarters
battery-4:
name: battery-full
behance-square:
prefix: fab
name: square-behance
bitbucket-square:
prefix: fab
name: bitbucket
bitcoin:
prefix: fab
name: btc
cab:
name: taxi
calendar:
name: calendar-alt
calendar-o:
name: calendar
name: calendar-days
calendar-times-o:
prefix: far
name: calendar-xmark
caret-square-o-down:
name: caret-square-down
prefix: far
name: square-caret-down
caret-square-o-left:
name: caret-square-left
prefix: far
name: square-caret-left
caret-square-o-right:
name: caret-square-right
prefix: far
name: square-caret-right
caret-square-o-up:
name: caret-square-up
prefix: far
name: square-caret-up
cc:
name: closed-captioning
prefix: far
name: closed-captioning
chain:
name: link
chain-broken:
name: unlink
name: link-slash
check-circle-o:
prefix: far
name: circle-check
check-square-o:
prefix: far
name: square-check
circle-o-notch:
name: circle-notch
circle-thin:
prefix: far
name: circle
prefix: far
clipboard:
prefix: far
name: paste
clone:
prefix: far
close:
name: xmark
cloud-download:
name: cloud-download-alt
name: cloud-arrow-down
cloud-upload:
name: cloud-upload-alt
name: cloud-arrow-up
cny:
name: yen-sign
code-fork:
name: code-branch
comment-alt:
name: comment-dots
prefix: far
commenting:
name: comment-dots
commenting-o:
prefix: far
name: comment-dots
compass:
prefix: far
compress:
name: down-left-and-up-right-to-center
copyright:
prefix: far
creative-commons:
prefix: fab
credit-card:
prefix: far
credit-card-alt:
name: credit-card
cut:
name: scissors
cutlery:
name: utensils
dashboard:
name: gauge-high
deafness:
name: ear-deaf
dedent:
name: outdent
diamond:
name: gem
prefix: far
name: gem
dollar:
name: dollar-sign
dot-circle-o:
prefix: far
name: circle-dot
drivers-license:
name: id-card
drivers-license-o:
prefix: far
name: id-card
edit:
prefix: far
name: pen-to-square
eercast:
name: sellcast
prefix: fab
name: sellcast
eur:
name: euro-sign
euro:
name: euro-sign
exchange:
name: exchange-alt
name: right-left
expand:
name: up-right-and-down-left-from-center
external-link:
name: external-link-alt
name: up-right-from-square
external-link-square:
name: external-link-square-alt
name: square-up-right
eye:
prefix: far
eye-dropper:
name: eye-dropper
prefix: far
eye-slash:
prefix: far
eyedropper:
name: eye-dropper
fa:
prefix: fab
name: font-awesome
facebook:
prefix: fab
name: facebook-f
facebook-f:
prefix: fab
name: facebook-f
facebook-official:
prefix: fab
name: facebook
facebook-square:
prefix: fab
name: square-facebook
feed:
name: rss
file-archive-o:
prefix: far
name: file-zipper
file-movie-o:
prefix: far
name: file-video
file-photo-o:
prefix: far
name: file-image
file-picture-o:
prefix: far
name: file-image
file-sound-o:
prefix: far
name: file-audio
file-text:
name: file-alt
name: file-lines
file-text-o:
prefix: far
name: file-lines
file-zip-o:
prefix: far
name: file-zipper
files-o:
prefix: far
name: copy
prefix: far
flash:
name: bolt
floppy-o:
name: save
prefix: far
name: floppy-disk
frown-o:
prefix: far
name: face-frown
gbp:
name: pound-sign
name: sterling-sign
ge:
prefix: fab
name: empire
gear:
name: gear
gears:
name: gears
git-square:
prefix: fab
name: square-git
github-square:
prefix: fab
name: square-github
gittip:
prefix: fab
name: gratipay
glass:
name: glass-martini
name: martini-glass-empty
globe:
name: earth-americas
google-plus:
prefix: fab
name: google-plus-g
prefix: fab
google-plus-circle:
name: google-plus
prefix: fab
name: google-plus
google-plus-official:
name: google-plus
prefix: fab
name: google-plus
google-plus-square:
prefix: fab
name: square-google-plus
group:
name: users
hand-grab-o:
prefix: far
name: hand-back-fist
hand-o-down:
prefix: far
name: hand-point-down
prefix: far
hand-o-left:
prefix: far
name: hand-point-left
prefix: far
hand-o-right:
prefix: far
name: hand-point-right
prefix: far
hand-o-up:
name: hand-point-up
prefix: far
name: hand-point-up
hand-paper-o:
prefix: far
name: hand
hand-rock-o:
prefix: far
name: hand-back-fist
hand-stop-o:
prefix: far
name: hand
hard-of-hearing:
name: ear-deaf
hdd-o:
prefix: far
name: hard-drive
header:
name: heading
home:
name: house
hotel:
name: bed
hourglass-1:
name: hourglass-start
hourglass-2:
name: hourglass-half
hourglass-3:
name: hourglass-end
hourglass-o:
name: hourglass
id-badge:
prefix: far
ils:
name: shekel-sign
image:
prefix: far
name: image
inr:
name: rupee-sign
name: indian-rupee-sign
institution:
name: building-columns
intersex:
name: transgender
name: mars-and-venus
jpy:
name: yen-sign
krw:
name: won-sign
lastfm-square:
prefix: fab
name: square-lastfm
legal:
name: gavel
level-down:
name: level-down-alt
name: turn-down
level-up:
name: level-up-alt
life-ring:
prefix: far
name: turn-up
life-bouy:
name: life-ring
life-buoy:
name: life-ring
life-saver:
name: life-ring
line-chart:
name: chart-line
linkedin:
prefix: fab
name: linkedin-in
prefix: fab
linkedin-square:
name: linkedin
prefix: fab
name: linkedin
list-alt:
prefix: far
name: rectangle-list
long-arrow-down:
name: long-arrow-alt-down
name: down-long
long-arrow-left:
name: long-arrow-alt-left
name: left-long
long-arrow-right:
name: long-arrow-alt-right
name: right-long
long-arrow-up:
name: long-arrow-alt-up
name: up-long
magic:
name: wand-magic-sparkles
mail-forward:
name: share
mail-reply:
name: reply
mail-reply-all:
name: reply-all
map-marker:
name: map-marker-alt
meanpath:
name: font-awesome
prefix: fab
mobile:
name: mobile-alt
money:
name: money-bill-alt
name: location-dot
meh-o:
prefix: far
name: face-meh
minus-square-o:
prefix: far
name: square-minus
mobile:
name: mobile-screen-button
mobile-phone:
name: mobile-screen-button
money:
name: money-bill-1
mortar-board:
name: graduation-cap
navicon:
name: bars
object-group:
prefix: far
object-ungroup:
prefix: far
paste:
odnoklassniki-square:
prefix: fab
name: square-odnoklassniki
pause-circle-o:
prefix: far
pencil:
name: pencil-alt
name: circle-pause
pencil-square:
name: pen-square
name: square-pen
pencil-square-o:
name: edit
prefix: far
picture:
name: pen-to-square
photo:
prefix: far
name: image
picture-o:
prefix: far
name: image
pie-chart:
name: chart-pie
pinterest-square:
prefix: fab
name: square-pinterest
play-circle-o:
prefix: far
name: circle-play
plus-square-o:
prefix: far
name: square-plus
question-circle-o:
prefix: far
name: circle-question
ra:
prefix: fab
name: rebel
reddit-square:
prefix: fab
name: square-reddit
refresh:
name: sync
name: arrows-rotate
registered:
prefix: far
remove:
name: xmark
reorder:
name: bars
repeat:
name: redo
name: arrow-rotate-right
resistance:
prefix: fab
name: rebel
rmb:
name: yen-sign
rotate-left:
name: arrow-rotate-left
rotate-right:
name: arrow-rotate-right
rouble:
name: ruble-sign
rub:
name: ruble-sign
scissors:
name: cut
shield:
name: shield-alt
ruble:
name: ruble-sign
rupee:
name: indian-rupee-sign
s15:
name: bath
save:
prefix: far
name: floppy-disk
send:
name: paper-plane
send-o:
prefix: far
name: paper-plane
share-square-o:
name: share-from-square
shekel:
name: shekel-sign
sheqel:
name: shekel-sign
sign-in:
name: sign-in-alt
name: right-to-bracket
sign-out:
name: sign-out-alt
sliders:
name: sliders-h
name: right-from-bracket
signing:
name: hands
smile-o:
prefix: far
name: face-smile
snapchat-ghost:
prefix: fab
name: snapchat
snapchat-square:
prefix: fab
name: square-snapchat
soccer-ball-o:
prefix: far
name: futbol
sort-alpha-asc:
name: sort-alpha-down
name: arrow-down-a-z
sort-alpha-desc:
name: sort-alpha-down-alt
name: arrow-down-z-a
sort-amount-asc:
name: sort-amount-down
name: arrow-down-short-wide
sort-amount-desc:
name: sort-amount-down-alt
name: arrow-down-wide-short
sort-asc:
name: sort-up
sort-desc:
name: sort-down
sort-numeric-asc:
name: sort-numeric-down
name: arrow-down-1-9
sort-numeric-desc:
name: sort-numeric-down-alt
spoon:
name: utensil-spoon
name: arrow-down-9-1
star-half-empty:
name: star-half
prefix: far
name: star-half-stroke
star-half-full:
name: star-half
prefix: far
name: star-half-stroke
star-half-o:
prefix: far
name: star-half-stroke
steam-square:
prefix: fab
name: square-steam
sticky-note-o:
prefix: far
name: note-sticky
stop-circle-o:
prefix: far
name: circle-stop
support:
name: life-ring
prefix: far
tablet:
name: tablet-alt
name: tablet-screen-button
tachometer:
name: tachometer-alt
name: gauge-high
tasks:
name: bars-progress
television:
name: tv
thermometer:
name: temperature-full
thermometer-0:
name: temperature-empty
thermometer-1:
name: temperature-quarter
thermometer-2:
name: temperature-half
thermometer-3:
name: temperature-three-quarters
thermometer-4:
name: temperature-full
thumb-tack:
name: thumbtack
thumbs-o-down:
prefix: far
name: thumbs-down
prefix: far
thumbs-o-up:
prefix: far
name: thumbs-up
times-circle-o:
prefix: far
ticket:
name: ticket-alt
name: circle-xmark
times-rectangle:
name: rectangle-xmark
times-rectangle-o:
prefix: far
name: rectangle-xmark
toggle-down:
prefix: far
name: square-caret-down
toggle-left:
prefix: far
name: square-caret-left
toggle-right:
prefix: far
name: square-caret-right
toggle-up:
prefix: far
name: square-caret-up
transgender:
name: mars-and-venus
transgender-alt:
name: transgender
trash:
name: trash-alt
name: trash-can
trash-o:
name: trash-alt
prefix: far
name: trash-can
try:
name: lira-sign
name: turkish-lira-sign
tumblr-square:
prefix: fab
name: square-tumblr
turkish-lira:
name: turkish-lira-sign
twitter-square:
prefix: fab
name: square-twitter
unlink:
name: link-slash
unlock-alt:
name: unlock
unsorted:
name: sort
usd:
name: dollar-sign
user-circle-o:
prefix: far
name: circle-user
vcard:
name: address-card
vcard-o:
prefix: far
name: address-card
viadeo-square:
prefix: fab
name: square-viadeo
video-camera:
name: video
vimeo:
name: vimeo-v
prefix: fab
name: vimeo-v
vimeo-square:
prefix: fab
name: square-vimeo
volume-control-phone:
name: phone-volume
wheelchair-alt:
name: accessible-icon
warning:
name: triangle-exclamation
wechat:
prefix: fab
name: weixin
wheelchair-alt:
prefix: fab
name: accessible-icon
window-close-o:
prefix: far
name: rectangle-xmark
window-maximize:
prefix: far
window-restore:
prefix: far
youtube-play:
name: youtube
won:
name: won-sign
xing-square:
prefix: fab
name: square-xing
y-combinator-square:
prefix: fab
name: hacker-news
yc:
prefix: fab
name: y-combinator
yc-square:
prefix: fab
name: hacker-news
yen:
name: yen-sign
youtube-play:
prefix: fab
name: youtube
youtube-square:
prefix: fab
name: square-youtube

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,152 @@
// Animated Icons
// animating icons
// --------------------------
.#{$fa-css-prefix}-beat {
animation-name: #{$fa-css-prefix}-beat;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);
}
.#{$fa-css-prefix}-bounce {
animation-name: #{$fa-css-prefix}-bounce;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(0.280, 0.840, 0.420, 1));
}
.#{$fa-css-prefix}-fade {
animation-name: #{$fa-css-prefix}-fade;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1));
}
.#{$fa-css-prefix}-beat-fade {
animation-name: #{$fa-css-prefix}-beat-fade;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1));
}
.#{$fa-css-prefix}-flip {
animation-name: #{$fa-css-prefix}-flip;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);
}
.#{$fa-css-prefix}-shake {
animation-name: #{$fa-css-prefix}-shake;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);
}
.#{$fa-css-prefix}-spin {
animation: fa-spin 2s infinite linear;
animation-name: #{$fa-css-prefix}-spin;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 2s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);
}
.#{$fa-css-prefix}-pulse {
animation: fa-spin 1s infinite steps(8);
.#{$fa-css-prefix}-spin-reverse {
--#{$fa-css-prefix}-animation-direction: reverse;
}
@keyframes fa-spin {
0% {
transform: rotate(0deg);
}
.#{$fa-css-prefix}-pulse,
.#{$fa-css-prefix}-spin-pulse {
animation-name: #{$fa-css-prefix}-spin;
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, steps(8));
}
100% {
transform: rotate(360deg);
// if agent or operating system prefers reduced motion, disable animations
// see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/
// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion
@media (prefers-reduced-motion: reduce) {
.#{$fa-css-prefix}-beat,
.#{$fa-css-prefix}-bounce,
.#{$fa-css-prefix}-fade,
.#{$fa-css-prefix}-beat-fade,
.#{$fa-css-prefix}-flip,
.#{$fa-css-prefix}-pulse,
.#{$fa-css-prefix}-shake,
.#{$fa-css-prefix}-spin,
.#{$fa-css-prefix}-spin-pulse {
animation-delay: -1ms;
animation-duration: 1ms;
animation-iteration-count: 1;
transition-delay: 0s;
transition-duration: 0s;
}
}
@keyframes #{$fa-css-prefix}-beat {
0%, 90% { transform: scale(1); }
45% { transform: scale(var(--#{$fa-css-prefix}-beat-scale, 1.25)); }
}
@keyframes #{$fa-css-prefix}-bounce {
0% { transform: scale(1,1) translateY(0); }
10% { transform: scale(var(--#{$fa-css-prefix}-bounce-start-scale-x, 1.1),var(--#{$fa-css-prefix}-bounce-start-scale-y, 0.9)) translateY(0); }
30% { transform: scale(var(--#{$fa-css-prefix}-bounce-jump-scale-x, 0.9),var(--#{$fa-css-prefix}-bounce-jump-scale-y, 1.1)) translateY(var(--#{$fa-css-prefix}-bounce-height, -0.5em)); }
50% { transform: scale(var(--#{$fa-css-prefix}-bounce-land-scale-x, 1.05),var(--#{$fa-css-prefix}-bounce-land-scale-y, 0.95)) translateY(0); }
57% { transform: scale(1,1) translateY(var(--#{$fa-css-prefix}-bounce-rebound, -0.125em)); }
64% { transform: scale(1,1) translateY(0); }
100% { transform: scale(1,1) translateY(0); }
}
@keyframes #{$fa-css-prefix}-fade {
50% { opacity: var(--#{$fa-css-prefix}-fade-opacity, 0.4); }
}
@keyframes #{$fa-css-prefix}-beat-fade {
0%, 100% {
opacity: var(--#{$fa-css-prefix}-beat-fade-opacity, 0.4);
transform: scale(1);
}
50% {
opacity: 1;
transform: scale(var(--#{$fa-css-prefix}-beat-fade-scale, 1.125));
}
}
@keyframes #{$fa-css-prefix}-flip {
50% {
transform: rotate3d(var(--#{$fa-css-prefix}-flip-x, 0), var(--#{$fa-css-prefix}-flip-y, 1), var(--#{$fa-css-prefix}-flip-z, 0), var(--#{$fa-css-prefix}-flip-angle, -180deg));
}
}
@keyframes #{$fa-css-prefix}-shake {
0% { transform: rotate(-15deg); }
4% { transform: rotate(15deg); }
8%, 24% { transform: rotate(-18deg); }
12%, 28% { transform: rotate(18deg); }
16% { transform: rotate(-22deg); }
20% { transform: rotate(22deg); }
32% { transform: rotate(-12deg); }
36% { transform: rotate(12deg); }
40%, 100% { transform: rotate(0deg); }
}
@keyframes #{$fa-css-prefix}-spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}

View File

@ -1,20 +1,20 @@
// Bordered & Pulled
// bordered + pulled icons
// -------------------------
.#{$fa-css-prefix}-border {
border: solid .08em $fa-border-color;
border-radius: .1em;
padding: .2em .25em .15em;
border-color: var(--#{$fa-css-prefix}-border-color, #{$fa-border-color});
border-radius: var(--#{$fa-css-prefix}-border-radius, #{$fa-border-radius});
border-style: var(--#{$fa-css-prefix}-border-style, #{$fa-border-style});
border-width: var(--#{$fa-css-prefix}-border-width, #{$fa-border-width});
padding: var(--#{$fa-css-prefix}-border-padding, #{$fa-border-padding});
}
.#{$fa-css-prefix}-pull-left { float: left; }
.#{$fa-css-prefix}-pull-right { float: right; }
.#{$fa-css-prefix},
.fas,
.far,
.fal,
.fab {
&.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
&.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
.#{$fa-css-prefix}-pull-left {
float: left;
margin-right: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin});
}
.#{$fa-css-prefix}-pull-right {
float: right;
margin-left: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin});
}

View File

@ -1,21 +1,43 @@
// Base Class Definition
// base icon class definition
// -------------------------
.#{$fa-css-prefix},
.#{$fa-css-prefix} {
font-family: var(--#{$fa-css-prefix}-style-family, '#{$fa-style-family}');
font-weight: var(--#{$fa-css-prefix}-style, #{$fa-style});
}
.#{$fa-css-prefix}-solid,
.#{$fa-css-prefix}-regular,
.#{$fa-css-prefix}-brands,
.fas,
.far,
.fal,
.fad,
.fab {
.fab,
.#{$fa-css-prefix}-sharp-solid,
.#{$fa-css-prefix}-classic,
.#{$fa-css-prefix} {
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
display: inline-block;
display: var(--#{$fa-css-prefix}-display, #{$fa-display});
font-style: normal;
font-variant: normal;
text-rendering: auto;
line-height: 1;
text-rendering: auto;
}
.fas,
.#{$fa-css-prefix}-classic,
.#{$fa-css-prefix}-solid,
.far,
.#{$fa-css-prefix}-regular {
font-family: 'Font Awesome 6 Free';
}
.fab,
.#{$fa-css-prefix}-brands {
font-family: 'Font Awesome 6 Brands';
}
%fa-icon {
@include fa-icon;
}

View File

@ -1,5 +1,6 @@
// Fixed Width Icons
// fixed-width icons
// -------------------------
.#{$fa-css-prefix}-fw {
text-align: center;
width: $fa-fw-width;

View File

@ -0,0 +1,57 @@
// functions
// --------------------------
// fa-content: convenience function used to set content property
@function fa-content($fa-var) {
@return unquote("\"#{ $fa-var }\"");
}
// fa-divide: Originally obtained from the Bootstrap https://github.com/twbs/bootstrap
//
// Licensed under: The MIT License (MIT)
//
// Copyright (c) 2011-2021 Twitter, Inc.
// Copyright (c) 2011-2021 The Bootstrap Authors
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
@function fa-divide($dividend, $divisor, $precision: 10) {
$sign: if($dividend > 0 and $divisor > 0, 1, -1);
$dividend: abs($dividend);
$divisor: abs($divisor);
$quotient: 0;
$remainder: $dividend;
@if $dividend == 0 {
@return 0;
}
@if $divisor == 0 {
@error "Cannot divide by 0";
}
@if $divisor == 1 {
@return $dividend;
}
@while $remainder >= $divisor {
$quotient: $quotient + 1;
$remainder: $remainder - $divisor;
}
@if $remainder > 0 and $precision > 0 {
$remainder: fa-divide($remainder * 10, $divisor, $precision - 1) * .1;
}
@return ($quotient + $remainder) * $sign;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +0,0 @@
// Icon Sizes
// -------------------------
// makes the font 33% larger relative to the icon container
.#{$fa-css-prefix}-lg {
font-size: (4em / 3);
line-height: (3em / 4);
vertical-align: -.0667em;
}
.#{$fa-css-prefix}-xs {
font-size: .75em;
}
.#{$fa-css-prefix}-sm {
font-size: .875em;
}
@for $i from 1 through 10 {
.#{$fa-css-prefix}-#{$i}x {
font-size: $i * 1em;
}
}

View File

@ -1,18 +1,18 @@
// List Icons
// icons in a list
// -------------------------
.#{$fa-css-prefix}-ul {
list-style-type: none;
margin-left: $fa-li-width * 5/4;
margin-left: var(--#{$fa-css-prefix}-li-margin, #{$fa-li-margin});
padding-left: 0;
> li { position: relative; }
}
.#{$fa-css-prefix}-li {
left: -$fa-li-width;
left: calc(-1 * var(--#{$fa-css-prefix}-li-width, #{$fa-li-width}));
position: absolute;
text-align: center;
width: $fa-li-width;
width: var(--#{$fa-css-prefix}-li-width, #{$fa-li-width});
line-height: inherit;
}

View File

@ -1,6 +1,7 @@
// Mixins
// mixins
// --------------------------
// base rendering for an icon
@mixin fa-icon {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
@ -11,46 +12,61 @@
line-height: 1;
}
@mixin fa-icon-rotate($degrees, $rotation) {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
transform: rotate($degrees);
// sets relative font-sizing and alignment (in _sizing)
@mixin fa-size ($font-size) {
font-size: fa-divide($font-size, $fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base
line-height: fa-divide(1, $font-size) * 1em; // sets the line-height of the icon back to that of it's parent
vertical-align: (fa-divide(6, $font-size) - fa-divide(3, 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender
}
@mixin fa-icon-flip($horiz, $vert, $rotation) {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
transform: scale($horiz, $vert);
}
// Only display content to screen readers. A la Bootstrap 4.
//
// See: http://a11yproject.com/posts/how-to-hide-content/
@mixin sr-only {
border: 0;
clip: rect(0, 0, 0, 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
// only display content to screen readers
// see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
// see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
@mixin fa-sr-only() {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
// Use in conjunction with .sr-only to only display content when it's focused.
//
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
//
// Credit: HTML5 Boilerplate
@mixin sr-only-focusable {
&:active,
&:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
width: auto;
// use in conjunction with .sr-only to only display content when it's focused
@mixin fa-sr-only-focusable() {
&:not(:focus) {
@include fa-sr-only();
}
}
// sets a specific icon family to use alongside style + icon mixins
// convenience mixins for declaring pseudo-elements by CSS variable,
// including all style-specific font properties, and both the ::before
// and ::after elements in the duotone case.
@mixin fa-icon-solid($fa-var) {
@extend %fa-icon;
@extend .fa-solid;
&::before {
content: unquote("\"#{ $fa-var }\"");
}
}
@mixin fa-icon-regular($fa-var) {
@extend %fa-icon;
@extend .fa-regular;
&::before {
content: unquote("\"#{ $fa-var }\"");
}
}
@mixin fa-icon-brands($fa-var) {
@extend %fa-icon;
@extend .fa-brands;
&::before {
content: unquote("\"#{ $fa-var }\"");
}
}

View File

@ -1,24 +1,31 @@
// Rotated & Flipped Icons
// rotating + flipping icons
// -------------------------
.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
.#{$fa-css-prefix}-flip-both, .#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(-1, -1, 2); }
// Hook for IE8-9
// -------------------------
:root {
.#{$fa-css-prefix}-rotate-90,
.#{$fa-css-prefix}-rotate-180,
.#{$fa-css-prefix}-rotate-270,
.#{$fa-css-prefix}-flip-horizontal,
.#{$fa-css-prefix}-flip-vertical,
.#{$fa-css-prefix}-flip-both {
filter: none;
}
.#{$fa-css-prefix}-rotate-90 {
transform: rotate(90deg);
}
.#{$fa-css-prefix}-rotate-180 {
transform: rotate(180deg);
}
.#{$fa-css-prefix}-rotate-270 {
transform: rotate(270deg);
}
.#{$fa-css-prefix}-flip-horizontal {
transform: scale(-1, 1);
}
.#{$fa-css-prefix}-flip-vertical {
transform: scale(1, -1);
}
.#{$fa-css-prefix}-flip-both,
.#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical {
transform: scale(-1, -1);
}
.#{$fa-css-prefix}-rotate-by {
transform: rotate(var(--#{$fa-css-prefix}-rotate-angle, 0));
}

View File

@ -1,5 +1,14 @@
// Screen Readers
// screen-reader utilities
// -------------------------
.sr-only { @include sr-only; }
.sr-only-focusable { @include sr-only-focusable; }
// only display content to screen readers
.sr-only,
.#{$fa-css-prefix}-sr-only {
@include fa-sr-only;
}
// use in conjunction with .sr-only to only display content when it's focused
.sr-only-focusable,
.#{$fa-css-prefix}-sr-only-focusable {
@include fa-sr-only-focusable;
}

File diff suppressed because it is too large Load Diff

16
resources/fontawesome/scss/_sizing.scss vendored Normal file
View File

@ -0,0 +1,16 @@
// sizing icons
// -------------------------
// literal magnification scale
@for $i from 1 through 10 {
.#{$fa-css-prefix}-#{$i}x {
font-size: $i * 1em;
}
}
// step-based scale (with alignment)
@each $size, $value in $fa-sizes {
.#{$fa-css-prefix}-#{$size} {
@include fa-size($value);
}
}

View File

@ -1,4 +1,4 @@
// Stacked Icons
// stacking icons
// -------------------------
.#{$fa-css-prefix}-stack {
@ -6,8 +6,8 @@
height: 2em;
line-height: 2em;
position: relative;
vertical-align: middle;
width: ($fa-fw-width*2);
vertical-align: $fa-stack-vertical-align;
width: $fa-stack-width;
}
.#{$fa-css-prefix}-stack-1x,
@ -16,6 +16,7 @@
position: absolute;
text-align: center;
width: 100%;
z-index: var(--#{$fa-css-prefix}-stack-z-index, #{$fa-stack-z-index});
}
.#{$fa-css-prefix}-stack-1x {
@ -27,5 +28,5 @@
}
.#{$fa-css-prefix}-inverse {
color: $fa-inverse;
color: var(--#{$fa-css-prefix}-inverse, #{$fa-inverse});
}

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,30 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@import 'functions';
@import 'variables';
@font-face {
font-family: 'Font Awesome 5 Brands';
font-style: normal;
font-weight: normal;
font-display: $fa-font-display;
src: url('#{$fa-font-path}/fa-brands-400.eot');
src: url('#{$fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'),
url('#{$fa-font-path}/fa-brands-400.woff') format('woff'),
url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype'),
url('#{$fa-font-path}/fa-brands-400.svg#fontawesome') format('svg');
:root, :host {
--#{$fa-css-prefix}-style-family-brands: 'Font Awesome 6 Brands';
--#{$fa-css-prefix}-font-brands: normal 400 1em/1 'Font Awesome 6 Brands';
}
.fab {
font-family: 'Font Awesome 5 Brands';
@font-face {
font-family: 'Font Awesome 6 Brands';
font-style: normal;
font-weight: 400;
font-display: $fa-font-display;
src: url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'),
url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype');
}
.fab,
.#{$fa-css-prefix}-brands {
font-weight: 400;
}
@each $name, $icon in $fa-brand-icons {
.#{$fa-css-prefix}-#{$name}:before { content: unquote("\"#{ $icon }\""); }
}

View File

@ -1,11 +1,16 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
// Font Awesome core compile (Web Fonts-based)
// -------------------------
@import 'functions';
@import 'variables';
@import 'mixins';
@import 'core';
@import 'larger';
@import 'sizing';
@import 'fixed-width';
@import 'list';
@import 'bordered-pulled';

View File

@ -1,23 +1,27 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@import 'functions';
@import 'variables';
:root, :host {
--#{$fa-css-prefix}-style-family-classic: '#{ $fa-style-family }';
--#{$fa-css-prefix}-font-regular: normal 400 1em/1 '#{ $fa-style-family }';
}
@font-face {
font-family: 'Font Awesome 5 Free';
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 400;
font-display: $fa-font-display;
src: url('#{$fa-font-path}/fa-regular-400.eot');
src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
url('#{$fa-font-path}/fa-regular-400.woff') format('woff'),
url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'),
url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
src: url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype');
}
.far {
font-family: 'Font Awesome 5 Free';
.far,
.#{$fa-css-prefix}-regular {
font-weight: 400;
}

View File

@ -1,24 +1,27 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@import 'functions';
@import 'variables';
:root, :host {
--#{$fa-css-prefix}-style-family-classic: '#{ $fa-style-family }';
--#{$fa-css-prefix}-font-solid: normal 900 1em/1 '#{ $fa-style-family }';
}
@font-face {
font-family: 'Font Awesome 5 Free';
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 900;
font-display: $fa-font-display;
src: url('#{$fa-font-path}/fa-solid-900.eot');
src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
url('#{$fa-font-path}/fa-solid-900.woff') format('woff'),
url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'),
url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
src: url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype');
}
.fa,
.fas {
font-family: 'Font Awesome 5 Free';
.fas,
.#{$fa-css-prefix}-solid {
font-weight: 900;
}

View File

@ -1,6 +1,11 @@
/*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
// V4 shims compile (Web Fonts-based)
// -------------------------
@import 'functions';
@import 'variables';
@import 'shims';

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 431 KiB

After

Width:  |  Height:  |  Size: 496 KiB

Some files were not shown because too many files have changed in this diff Show More