discourse/app/assets/javascripts/discourse-common/addon/lib/icon-library.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

951 lines
31 KiB
JavaScript
Raw Normal View History

import { h } from "virtual-dom";
import { isDevelopment } from "discourse-common/config/environment";
import attributeHook from "discourse-common/lib/attribute-hook";
import deprecated from "discourse-common/lib/deprecated";
import escape from "discourse-common/lib/escape";
import I18n from "discourse-i18n";
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
export const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
let _renderers = [];
let warnMissingIcons = true;
2020-08-18 04:33:57 +08:00
let _iconList;
export const REPLACEMENTS = {
"d-tracking": "bell",
"d-muted": "discourse-bell-slash",
"d-regular": "far-bell",
"d-watching": "discourse-bell-exclamation",
"d-watching-first": "discourse-bell-one",
"d-drop-expanded": "caret-down",
"d-drop-collapsed": "caret-right",
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
"d-unliked": "far-heart",
"d-liked": "heart",
"d-post-share": "link",
"d-topic-share": "link",
"notification.mentioned": "at",
"notification.group_mentioned": "users",
"notification.quoted": "quote-right",
"notification.replied": "reply",
"notification.posted": "discourse-bell-exclamation",
"notification.watching_category_or_tag": "discourse-bell-exclamation",
"notification.edited": "pencil",
FEATURE: Send notifications for time-based and At Desktop bookmark reminders (#9071) * This PR implements the scheduling and notification system for bookmark reminders. Every 5 minutes a schedule runs to check any reminders that need to be sent before now, limited to **300** reminders at a time. Any leftover reminders will be sent in the next run. This is to avoid having to deal with fickle sidekiq and reminders in the far-flung future, which would necessitate having a background job anyway to clean up any missing `enqueue_at` reminders. * If a reminder is sent its `reminder_at` time is cleared and the `reminder_last_sent_at` time is filled in. Notifications are only user-level notifications for now. * All JavaScript and frontend code related to displaying the bookmark reminder notification is contained here. The reminder functionality is now re-enabled in the bookmark modal as well. * This PR also implements the "Remind me next time I am at my desktop" bookmark reminder functionality. When the user is on a mobile device they are able to select this option. When they choose this option we set a key in Redis saying they have a pending at desktop reminder. The next time they change devices we check if the new device is desktop, and if it is we send reminders using a DistributedMutex. There is also a job to ensure consistency of these reminders in Redis (in case Redis drops the ball) and the at desktop reminders expire after 20 days. * Also in this PR is a fix to delete all Bookmarks for a user via `UserDestroyer`
2020-03-12 08:16:00 +08:00
"notification.bookmark_reminder": "discourse-bookmark-clock",
"notification.liked": "heart",
"notification.liked_2": "heart",
"notification.liked_many": "heart",
"notification.liked_consolidated": "heart",
"notification.private_message": "envelope",
"notification.invited_to_private_message": "envelope",
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
"notification.invited_to_topic": "hand-point-right",
"notification.invitee_accepted": "user",
"notification.moved_post": "right-from-bracket",
"notification.linked": "link",
"notification.linked_consolidated": "link",
"notification.granted_badge": "certificate",
"notification.topic_reminder": "far-clock",
"notification.watching_first_post": "discourse-bell-one",
"notification.group_message_summary": "users",
"notification.post_approved": "check",
"notification.membership_request_accepted": "user-plus",
"notification.membership_request_consolidated": "users",
"notification.reaction": "bell",
"notification.votes_released": "plus",
"notification.chat_quoted": "quote-right",
2024-03-22 06:20:02 +08:00
"user_menu.replies": "reply",
"user_menu.drafts": "pencil",
2024-03-22 06:20:02 +08:00
"sidebar.all_categories": "list",
};
2017-09-16 01:54:47 +08:00
export function replaceIcon(source, destination) {
source = handleDeprecatedIcon(source);
destination = handleDeprecatedIcon(destination);
2017-09-16 01:54:47 +08:00
REPLACEMENTS[source] = destination;
}
export function disableMissingIconWarning() {
warnMissingIcons = false;
}
export function enableMissingIconWarning() {
warnMissingIcons = false;
}
export function renderIcon(renderType, id, params) {
params ||= {};
for (const renderer of _renderers) {
const rendererForType = renderer[renderType];
if (!rendererForType) {
continue;
}
const icon = { id, replacementId: REPLACEMENTS[id] };
const result = rendererForType(icon, params);
if (result) {
return result;
}
}
}
export function iconHTML(id, params) {
return renderIcon("string", id, params);
}
export function iconNode(id, params) {
return renderIcon("node", id, params);
}
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
export function convertIconClass(icon) {
return icon
.replace("far fa-", "far-")
.replace("fab fa-", "fab-")
.replace("fas fa-", "")
.replace("fa-", "")
.trim();
}
export function registerIconRenderer(renderer) {
_renderers.unshift(renderer);
}
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
function iconClasses(icon, params) {
// "notification." is invalid syntax for classes, use replacement instead
const dClass =
icon.replacementId && icon.id.includes("notification.")
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
? icon.replacementId
: icon.id;
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
let classNames = `fa d-icon d-icon-${dClass} svg-icon`;
if (params && params["class"]) {
classNames += " " + params["class"];
}
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
return classNames;
}
2020-08-18 04:33:57 +08:00
export function setIconList(iconList) {
_iconList = iconList;
}
export function isExistingIconId(id) {
return _iconList?.includes(id);
}
function handleDeprecatedIcon(id) {
let newId = id;
newId = convertIconClass(newId); // Remap from FA4
newId = remapFromFA5(newId);
if (newId !== id) {
deprecated(
`The icon name "${id}" has been updated to "${newId}". Please use the new name in your code. Old names will be removed in Q2 2025.`,
{
id: "discourse.fontawesome-6-upgrade",
}
);
}
return newId;
}
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
function warnIfMissing(id) {
if (warnMissingIcons && isDevelopment() && !isExistingIconId(id)) {
2020-08-18 04:33:57 +08:00
console.warn(`The icon "${id}" is missing from the SVG subset.`); // eslint-disable-line no-console
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
}
}
function handleIconId(icon) {
let id = icon.replacementId || icon.id || "";
// TODO: clean up "thumbtack unpinned" at source instead of here
id = id.replace(" unpinned", "");
id = handleDeprecatedIcon(id); // Automatically remap deprecated icon names
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
warnIfMissing(id);
return id;
}
// default resolver is font awesome
registerIconRenderer({
name: "font-awesome",
string(icon, params) {
const id = escape(handleIconId(icon));
let html = `<svg class='${escape(iconClasses(icon, params))} svg-string'`;
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
if (params.label) {
html += " aria-hidden='true'";
} else if (params["aria-label"]) {
html += ` aria-hidden='false' aria-label='${escape(
params["aria-label"]
)}'`;
}
2021-11-25 12:22:43 +08:00
html += ` xmlns="${SVG_NAMESPACE}"><use href="#${id}" /></svg>`;
if (params.label) {
html += `<span class='sr-only'>${escape(params.label)}</span>`;
}
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
if (params.title) {
html = `<span class="svg-icon-title" title='${escape(
I18n.t(params.title)
)}'>${html}</span>`;
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
}
if (params.translatedtitle) {
deprecated(`use 'translatedTitle' option instead of 'translatedtitle'`, {
since: "2.9.0.beta6",
dropFrom: "2.10.0.beta1",
id: "discourse.icon-renderer-translatedtitle",
});
params.translatedTitle = params.translatedtitle;
}
if (params.translatedTitle) {
html = `<span class="svg-icon-title" title='${escape(
params.translatedTitle
)}'>${html}</span>`;
}
return html;
},
node(icon, params) {
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
const id = handleIconId(icon);
const classes = iconClasses(icon, params) + " svg-node";
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
const svg = h(
"svg",
{
attributes: { class: classes, "aria-hidden": true },
namespace: SVG_NAMESPACE,
},
[
h("use", {
2021-11-25 12:22:43 +08:00
href: attributeHook("http://www.w3.org/1999/xlink", `#${escape(id)}`),
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
namespace: SVG_NAMESPACE,
}),
]
);
if (params.title) {
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
return h(
"span",
{
title: params.title,
attributes: { class: "svg-icon-title" },
},
[svg]
);
} else {
Upgrade to FontAwesome 5 (take two) (#6673) * Add missing icons to set * Revert FA5 revert This reverts commit 42572ff * use new SVG syntax in locales * Noscript page changes (remove login button, center "powered by" footer text) * Cast wider net for SVG icons in settings - include any _icon setting for SVG registry (offers better support for plugin settings) - let themes store multiple pipe-delimited icons in a setting - also replaces broken onebox image icon with SVG reference in cooked post processor * interpolate icons in locales * Fix composer whisper icon alignment * Add support for stacked icons * SECURITY: enforce hostname to match discourse hostname This ensures that the hostname rails uses for various helpers always matches the Discourse hostname * load SVG sprite with pre-initializers * FIX: enable caching on SVG sprites * PERF: use JSONP for SVG sprites so they are served from CDN This avoids needing to deal with CORS for loading of the SVG Note, added the svg- prefix to the filename so we can quickly tell in dev tools what the file is * Add missing SVG sprite JSONP script to CSP * Upgrade to FA 5.5.0 * Add support for all FA4.7 icons - adds complete frontend and backend for renamed FA4.7 icons - improves performance of SvgSprite.bundle and SvgSprite.all_icons * Fix group avatar flair preview - adds an endpoint at /svg-sprites/search/:keyword - adds frontend ajax call that pulls icon in avatar flair preview even when it is not in subset * Remove FA 4.7 font files
2018-11-27 05:49:57 +08:00
return svg;
}
},
});
function remapFromFA5(id) {
let lookupId = id;
let prefix;
if (id.startsWith("far-")) {
prefix = "far";
lookupId = id.replace("far-", "");
} else if (id.startsWith("fab-")) {
prefix = "fab";
lookupId = id.replace("fab-", "");
}
if (FA5_REMAPS.hasOwnProperty(lookupId)) {
let newId = FA5_REMAPS[lookupId];
if (prefix) {
newId = `${prefix}-${newId}`;
}
return newId;
}
return id;
}
// We don't want to carry this list forever, so let's remove it a little after the 3.4 stable release ~Q2 2025
const FA5_REMAPS = {
adjust: "circle-half-stroke",
"air-freshener": "spray-can-sparkles",
"alien-monster": "alien-8bit",
allergies: "hand-dots",
ambulance: "truck-medical",
"american-sign-language-interpreting": "hands-asl-interpreting",
analytics: "chart-mixed",
"angle-double-down": "angles-down",
"angle-double-left": "angles-left",
"angle-double-right": "angles-right",
"angle-double-up": "angles-up",
angry: "face-angry",
"apple-alt": "apple-whole",
"apple-crate": "crate-apple",
archive: "box-archive",
"arrow-alt-circle-down": "circle-down",
"arrow-alt-circle-left": "circle-left",
"arrow-alt-circle-right": "circle-right",
"arrow-alt-circle-up": "circle-up",
"arrow-alt-down": "down",
"arrow-alt-from-bottom": "up-from-line",
"arrow-alt-from-left": "right-from-line",
"arrow-alt-from-right": "left-from-line",
"arrow-alt-from-top": "down-from-line",
"arrow-alt-left": "left",
"arrow-alt-right": "right",
"arrow-alt-square-down": "square-down",
"arrow-alt-square-left": "square-left",
"arrow-alt-square-right": "square-right",
"arrow-alt-square-up": "square-up",
"arrow-alt-to-bottom": "down-to-line",
"arrow-alt-to-left": "left-to-line",
"arrow-alt-to-right": "right-to-line",
"arrow-alt-to-top": "up-to-line",
"arrow-alt-up": "up",
"arrow-circle-down": "circle-arrow-down",
"arrow-circle-left": "circle-arrow-left",
"arrow-circle-right": "circle-arrow-right",
"arrow-circle-up": "circle-arrow-up",
"arrow-from-bottom": "arrow-up-from-line",
"arrow-from-left": "arrow-right-from-line",
"arrow-from-right": "arrow-left-from-line",
"arrow-from-top": "arrow-down-from-line",
"arrow-square-down": "square-arrow-down",
"arrow-square-left": "square-arrow-left",
"arrow-square-right": "square-arrow-right",
"arrow-square-up": "square-arrow-up",
"arrow-to-bottom": "arrow-down-to-line",
"arrow-to-left": "arrow-left-to-line",
"arrow-to-right": "arrow-right-to-line",
"arrow-to-top": "arrow-up-to-line",
arrows: "arrows-up-down-left-right",
"arrows-alt": "up-down-left-right",
"arrows-alt-h": "left-right",
"arrows-alt-v": "up-down",
"arrows-h": "arrows-left-right",
"arrows-v": "arrows-up-down",
"assistive-listening-systems": "ear-listen",
atlas: "book-atlas",
"atom-alt": "atom-simple",
backspace: "delete-left",
"balance-scale": "scale-balanced",
"balance-scale-left": "scale-unbalanced",
"balance-scale-right": "scale-unbalanced-flip",
"band-aid": "bandage",
"barcode-alt": "rectangle-barcode",
"baseball-ball": "baseball",
"basketball-ball": "basketball",
"bed-alt": "bed-front",
beer: "beer-mug-empty",
betamax: "cassette-betamax",
bible: "book-bible",
biking: "person-biking",
"biking-mountain": "person-biking-mountain",
"birthday-cake": "cake-candles",
blind: "person-walking-with-cane",
"book-alt": "book-blank",
"book-dead": "book-skull",
"book-reader": "book-open-reader",
"book-spells": "book-sparkles",
"border-style": "border-top-left",
"border-style-alt": "border-bottom-right",
"box-alt": "box-taped",
"box-fragile": "square-fragile",
"box-full": "box-open-full",
"box-up": "square-this-way-up",
"box-usd": "box-dollar",
boxes: "boxes-stacked",
"boxes-alt": "boxes-stacked",
brackets: "brackets-square",
"broadcast-tower": "tower-broadcast",
burn: "fire-flame-simple",
"bus-alt": "bus-simple",
"calculator-alt": "calculator-simple",
"calendar-alt": "calendar-days",
"calendar-edit": "calendar-pen",
"calendar-times": "calendar-xmark",
"camera-alt": "camera",
"camera-home": "camera-security",
"car-alt": "car-rear",
"car-crash": "car-burst",
"car-mechanic": "car-wrench",
"caravan-alt": "caravan-simple",
"caret-circle-down": "circle-caret-down",
"caret-circle-left": "circle-caret-left",
"caret-circle-right": "circle-caret-right",
"caret-circle-up": "circle-caret-up",
"caret-square-down": "square-caret-down",
"caret-square-left": "square-caret-left",
"caret-square-right": "square-caret-right",
"caret-square-up": "square-caret-up",
cctv: "camera-cctv",
"chalkboard-teacher": "chalkboard-user",
"chart-pie-alt": "chart-pie-simple",
"check-circle": "circle-check",
"check-square": "square-check",
cheeseburger: "burger-cheese",
"chess-bishop-alt": "chess-bishop-piece",
"chess-clock-alt": "chess-clock-flip",
"chess-king-alt": "chess-king-piece",
"chess-knight-alt": "chess-knight-piece",
"chess-pawn-alt": "chess-pawn-piece",
"chess-queen-alt": "chess-queen-piece",
"chess-rook-alt": "chess-rook-piece",
"chevron-circle-down": "circle-chevron-down",
"chevron-circle-left": "circle-chevron-left",
"chevron-circle-right": "circle-chevron-right",
"chevron-circle-up": "circle-chevron-up",
"chevron-double-down": "chevrons-down",
"chevron-double-left": "chevrons-left",
"chevron-double-right": "chevrons-right",
"chevron-double-up": "chevrons-up",
"chevron-square-down": "square-chevron-down",
"chevron-square-left": "square-chevron-left",
"chevron-square-right": "square-chevron-right",
"chevron-square-up": "square-chevron-up",
"clinic-medical": "house-chimney-medical",
"cloud-download": "cloud-arrow-down",
"cloud-download-alt": "cloud-arrow-down",
"cloud-upload": "cloud-arrow-up",
"cloud-upload-alt": "cloud-arrow-up",
cocktail: "martini-glass-citrus",
coffee: "mug-saucer",
"coffee-togo": "cup-togo",
cog: "gear",
cogs: "gears",
columns: "table-columns",
"comment-alt": "message",
"comment-alt-check": "message-check",
"comment-alt-dollar": "message-dollar",
"comment-alt-dots": "message-dots",
"comment-alt-edit": "message-pen",
"comment-alt-exclamation": "message-exclamation",
"comment-alt-lines": "message-lines",
"comment-alt-medical": "message-medical",
"comment-alt-minus": "message-minus",
"comment-alt-music": "message-music",
"comment-alt-plus": "message-plus",
"comment-alt-slash": "message-slash",
"comment-alt-smile": "message-smile",
"comment-alt-times": "message-xmark",
"comment-edit": "comment-pen",
"comment-times": "comment-xmark",
"comments-alt": "messages",
"comments-alt-dollar": "messages-dollar",
"compress-alt": "down-left-and-up-right-to-center",
"compress-arrows-alt": "minimize",
"concierge-bell": "bell-concierge",
construction: "triangle-person-digging",
"conveyor-belt-alt": "conveyor-belt-boxes",
"cowbell-more": "cowbell-circle-plus",
cricket: "cricket-bat-ball",
"crop-alt": "crop-simple",
curling: "curling-stone",
cut: "scissors",
deaf: "ear-deaf",
debug: "ban-bug",
"desktop-alt": "desktop",
dewpoint: "droplet-degree",
diagnoses: "person-dots-from-line",
digging: "person-digging",
"digital-tachograph": "tachograph-digital",
directions: "diamond-turn-right",
dizzy: "face-dizzy",
"dolly-flatbed": "cart-flatbed",
"dolly-flatbed-alt": "cart-flatbed-boxes",
"dolly-flatbed-empty": "cart-flatbed-empty",
donate: "circle-dollar-to-slot",
"dot-circle": "circle-dot",
"drafting-compass": "compass-drafting",
"drone-alt": "drone-front",
"dryer-alt": "dryer-heat",
"eclipse-alt": "moon-over-sun",
edit: "pen-to-square",
"ellipsis-h": "ellipsis",
"ellipsis-h-alt": "ellipsis-stroke",
"ellipsis-v": "ellipsis-vertical",
"ellipsis-v-alt": "ellipsis-stroke-vertical",
"envelope-square": "square-envelope",
exchange: "arrow-right-arrow-left",
"exchange-alt": "right-left",
"exclamation-circle": "circle-exclamation",
"exclamation-square": "square-exclamation",
"exclamation-triangle": "triangle-exclamation",
"expand-alt": "up-right-and-down-left-from-center",
"expand-arrows": "arrows-maximize",
"expand-arrows-alt": "maximize",
"external-link": "arrow-up-right-from-square",
"external-link-alt": "up-right-from-square",
"external-link-square": "square-arrow-up-right",
"external-link-square-alt": "square-up-right",
eyedropper: "eye-dropper",
"fast-backward": "backward-fast",
"fast-forward": "forward-fast",
"feather-alt": "feather-pointed",
female: "person-dress",
"field-hockey": "field-hockey-stick-ball",
"fighter-jet": "jet-fighter",
"file-alt": "file-lines",
"file-archive": "file-zipper",
"file-chart-line": "file-chart-column",
"file-download": "file-arrow-down",
"file-edit": "file-pen",
"file-medical-alt": "file-waveform",
"file-search": "file-magnifying-glass",
"file-times": "file-xmark",
"file-upload": "file-arrow-up",
"film-alt": "film-simple",
"fire-alt": "fire-flame-curved",
"first-aid": "kit-medical",
"fist-raised": "hand-fist",
"flag-alt": "flag-swallowtail",
flame: "fire-flame",
"flask-poison": "flask-round-poison",
"flask-potion": "flask-round-potion",
flushed: "face-flushed",
fog: "cloud-fog",
"folder-download": "folder-arrow-down",
"folder-times": "folder-xmark",
"folder-upload": "folder-arrow-up",
"font-awesome-alt": "square-font-awesome-stroke",
"font-awesome-flag": "font-awesome",
"font-awesome-logo-full": "font-awesome",
"football-ball": "football",
fragile: "wine-glass-crack",
"frosty-head": "snowman-head",
frown: "face-frown",
"frown-open": "face-frown-open",
"funnel-dollar": "filter-circle-dollar",
"game-board-alt": "game-board-simple",
"gamepad-alt": "gamepad-modern",
"glass-champagne": "champagne-glass",
"glass-cheers": "champagne-glasses",
"glass-martini": "martini-glass-empty",
"glass-martini-alt": "martini-glass",
"glass-whiskey": "whiskey-glass",
"glass-whiskey-rocks": "whiskey-glass-ice",
"glasses-alt": "glasses-round",
"globe-africa": "earth-africa",
"globe-americas": "earth-americas",
"globe-asia": "earth-asia",
"globe-europe": "earth-europe",
"golf-ball": "golf-ball-tee",
grimace: "face-grimace",
grin: "face-grin",
"grin-alt": "face-grin-wide",
"grin-beam": "face-grin-beam",
"grin-beam-sweat": "face-grin-beam-sweat",
"grin-hearts": "face-grin-hearts",
"grin-squint": "face-grin-squint",
"grin-squint-tears": "face-grin-squint-tears",
"grin-stars": "face-grin-stars",
"grin-tears": "face-grin-tears",
"grin-tongue": "face-grin-tongue",
"grin-tongue-squint": "face-grin-tongue-squint",
"grin-tongue-wink": "face-grin-tongue-wink",
"grin-wink": "face-grin-wink",
"grip-horizontal": "grip",
"h-square": "square-h",
hamburger: "burger",
"hand-holding-usd": "hand-holding-dollar",
"hand-holding-water": "hand-holding-droplet",
"hand-paper": "hand",
"hand-receiving": "hands-holding-diamond",
"hand-rock": "hand-back-fist",
"hands-heart": "hands-holding-heart",
"hands-helping": "handshake-angle",
"hands-usd": "hands-holding-dollar",
"hands-wash": "hands-bubbles",
"handshake-alt": "handshake-simple",
"handshake-alt-slash": "handshake-simple-slash",
"hard-hat": "helmet-safety",
hdd: "hard-drive",
"head-vr": "head-side-goggles",
"headphones-alt": "headphones-simple",
"heart-broken": "heart-crack",
"heart-circle": "circle-heart",
"heart-rate": "wave-pulse",
"heart-square": "square-heart",
heartbeat: "heart-pulse",
hiking: "person-hiking",
history: "clock-rotate-left",
home: "house",
"home-alt": "house",
"home-heart": "house-heart",
"home-lg": "house-chimney",
"home-lg-alt": "house",
"hospital-alt": "hospital",
"hospital-symbol": "circle-h",
"hot-tub": "hot-tub-person",
"hourglass-half": "hourglass",
"house-damage": "house-chimney-crack",
"house-leave": "house-person-leave",
"house-return": "house-person-return",
hryvnia: "hryvnia-sign",
humidity: "droplet-percent",
"icons-alt": "symbols",
"id-card-alt": "id-card-clip",
"industry-alt": "industry-windows",
"info-circle": "circle-info",
"info-square": "square-info",
innosoft: "42-group",
inventory: "shelves",
"journal-whills": "book-journal-whills",
kiss: "face-kiss",
"kiss-beam": "face-kiss-beam",
"kiss-wink-heart": "face-kiss-wink-heart",
"landmark-alt": "landmark-dome",
"laptop-house": "house-laptop",
laugh: "face-laugh",
"laugh-beam": "face-laugh-beam",
"laugh-squint": "face-laugh-squint",
"laugh-wink": "face-laugh-wink",
"level-down": "arrow-turn-down",
"level-down-alt": "turn-down",
"level-up": "arrow-turn-up",
"level-up-alt": "turn-up",
"list-alt": "rectangle-list",
location: "location-crosshairs",
"location-circle": "circle-location-arrow",
"location-slash": "location-crosshairs-slash",
"lock-alt": "lock-keyhole",
"lock-open-alt": "lock-keyhole-open",
"long-arrow-alt-down": "down-long",
"long-arrow-alt-left": "left-long",
"long-arrow-alt-right": "right-long",
"long-arrow-alt-up": "up-long",
"long-arrow-down": "arrow-down-long",
"long-arrow-left": "arrow-left-long",
"long-arrow-right": "arrow-right-long",
"long-arrow-up": "arrow-up-long",
"low-vision": "eye-low-vision",
luchador: "luchador-mask",
"luggage-cart": "cart-flatbed-suitcase",
magic: "wand-magic",
"mail-bulk": "envelopes-bulk",
male: "person",
"map-marked": "map-location",
"map-marked-alt": "map-location-dot",
"map-marker": "location-pin",
"map-marker-alt": "location-dot",
"map-marker-alt-slash": "location-dot-slash",
"map-marker-check": "location-check",
"map-marker-edit": "location-pen",
"map-marker-exclamation": "location-exclamation",
"map-marker-minus": "location-minus",
"map-marker-plus": "location-plus",
"map-marker-question": "location-question",
"map-marker-slash": "location-pin-slash",
"map-marker-smile": "location-smile",
"map-marker-times": "location-xmark",
"map-signs": "signs-post",
"mars-stroke-h": "mars-stroke-right",
"mars-stroke-v": "mars-stroke-up",
"medium-m": "medium",
medkit: "suitcase-medical",
meh: "face-meh",
"meh-blank": "face-meh-blank",
"meh-rolling-eyes": "face-rolling-eyes",
"microphone-alt": "microphone-lines",
"microphone-alt-slash": "microphone-lines-slash",
"mind-share": "brain-arrow-curved-right",
"minus-circle": "circle-minus",
"minus-hexagon": "hexagon-minus",
"minus-octagon": "octagon-minus",
"minus-square": "square-minus",
"mobile-alt": "mobile-screen-button",
"mobile-android": "mobile",
"mobile-android-alt": "mobile-screen",
"money-bill-alt": "money-bill-1",
"money-bill-wave-alt": "money-bill-1-wave",
"money-check-alt": "money-check-dollar",
"money-check-edit": "money-check-pen",
"money-check-edit-alt": "money-check-dollar-pen",
"monitor-heart-rate": "monitor-waveform",
mouse: "computer-mouse",
"mouse-alt": "computer-mouse-scrollwheel",
"mouse-pointer": "arrow-pointer",
"music-alt": "music-note",
"music-alt-slash": "music-note-slash",
"oil-temp": "oil-temperature",
"page-break": "file-dashed-line",
"paint-brush": "paintbrush",
"paint-brush-alt": "paintbrush-fine",
"paint-brush-fine": "paintbrush-fine",
"pallet-alt": "pallet-boxes",
"paragraph-rtl": "paragraph-left",
parking: "square-parking",
"parking-circle": "circle-parking",
"parking-circle-slash": "ban-parking",
"parking-slash": "square-parking-slash",
pastafarianism: "spaghetti-monster-flying",
"pause-circle": "circle-pause",
"paw-alt": "paw-simple",
"pen-alt": "pen-clip",
"pen-square": "square-pen",
"pencil-alt": "pencil",
"pencil-paintbrush": "pen-paintbrush",
"pencil-ruler": "pen-ruler",
pennant: "flag-pennant",
"people-arrows": "people-arrows-left-right",
"people-carry": "people-carry-box",
percentage: "percent",
"person-carry": "person-carry-box",
"phone-alt": "phone-flip",
"phone-laptop": "laptop-mobile",
"phone-square": "square-phone",
"phone-square-alt": "square-phone-flip",
"photo-video": "photo-film",
"plane-alt": "plane-engines",
"play-circle": "circle-play",
"plus-circle": "circle-plus",
"plus-hexagon": "hexagon-plus",
"plus-octagon": "octagon-plus",
"plus-square": "square-plus",
poll: "square-poll-vertical",
"poll-h": "square-poll-horizontal",
"portal-enter": "person-to-portal",
"portal-exit": "person-from-portal",
portrait: "image-portrait",
"pound-sign": "sterling-sign",
pray: "person-praying",
"praying-hands": "hands-praying",
"prescription-bottle-alt": "prescription-bottle-medical",
presentation: "presentation-screen",
"print-search": "print-magnifying-glass",
procedures: "bed-pulse",
"project-diagram": "diagram-project",
"question-circle": "circle-question",
"question-square": "square-question",
quran: "book-quran",
"rabbit-fast": "rabbit-running",
"radiation-alt": "circle-radiation",
"radio-alt": "radio-tuner",
random: "shuffle",
"rectangle-landscape": "rectangle",
"rectangle-portrait": "rectangle-vertical",
redo: "arrow-rotate-right",
"redo-alt": "rotate-right",
"remove-format": "text-slash",
"repeat-1-alt": "arrows-repeat-1",
"repeat-alt": "arrows-repeat",
"retweet-alt": "arrows-retweet",
"rss-square": "square-rss",
running: "person-running",
"sad-cry": "face-sad-cry",
"sad-tear": "face-sad-tear",
save: "floppy-disk",
"sax-hot": "saxophone-fire",
"scalpel-path": "scalpel-line-dashed",
"scanner-image": "scanner",
search: "magnifying-glass",
"search-dollar": "magnifying-glass-dollar",
"search-location": "magnifying-glass-location",
"search-minus": "magnifying-glass-minus",
"search-plus": "magnifying-glass-plus",
"sensor-alert": "sensor-triangle-exclamation",
"sensor-smoke": "sensor-cloud",
"share-alt": "share-nodes",
"share-alt-square": "square-share-nodes",
"share-square": "share-from-square",
"shield-alt": "shield-halved",
"shipping-fast": "truck-fast",
"shipping-timed": "truck-clock",
"shopping-bag": "bag-shopping",
"shopping-basket": "basket-shopping",
"shopping-cart": "cart-shopping",
"shuttle-van": "van-shuttle",
sign: "sign-hanging",
"sign-in": "arrow-right-to-bracket",
"sign-in-alt": "right-to-bracket",
"sign-language": "hands",
"sign-out": "arrow-right-from-bracket",
"sign-out-alt": "right-from-bracket",
"signal-1": "signal-weak",
"signal-2": "signal-fair",
"signal-3": "signal-good",
"signal-4": "signal-strong",
"signal-alt": "signal-bars",
"signal-alt-1": "signal-bars-weak",
"signal-alt-2": "signal-bars-fair",
"signal-alt-3": "signal-bars-good",
"signal-alt-slash": "signal-bars-slash",
skating: "person-skating",
"ski-jump": "person-ski-jumping",
"ski-lift": "person-ski-lift",
skiing: "person-skiing",
"skiing-nordic": "person-skiing-nordic",
"slack-hash": "slack",
sledding: "person-sledding",
"sliders-h": "sliders",
"sliders-h-square": "square-sliders",
"sliders-v": "sliders-up",
"sliders-v-square": "square-sliders-vertical",
smile: "face-smile",
"smile-beam": "face-smile-beam",
"smile-plus": "face-smile-plus",
"smile-wink": "face-smile-wink",
"smoking-ban": "ban-smoking",
sms: "comment-sms",
"snapchat-ghost": "snapchat",
snowboarding: "person-snowboarding",
snowmobile: "person-snowmobiling",
"sort-alpha-down": "arrow-down-a-z",
"sort-alpha-down-alt": "arrow-down-z-a",
"sort-alpha-up": "arrow-up-a-z",
"sort-alpha-up-alt": "arrow-up-z-a",
"sort-alt": "arrow-down-arrow-up",
"sort-amount-down": "arrow-down-wide-short",
"sort-amount-down-alt": "arrow-down-short-wide",
"sort-amount-up": "arrow-up-wide-short",
"sort-amount-up-alt": "arrow-up-short-wide",
"sort-circle": "circle-sort",
"sort-circle-down": "circle-sort-down",
"sort-circle-up": "circle-sort-up",
"sort-numeric-down": "arrow-down-1-9",
"sort-numeric-down-alt": "arrow-down-9-1",
"sort-numeric-up": "arrow-up-1-9",
"sort-numeric-up-alt": "arrow-up-9-1",
"sort-shapes-down": "arrow-down-triangle-square",
"sort-shapes-down-alt": "arrow-down-square-triangle",
"sort-shapes-up": "arrow-up-triangle-square",
"sort-shapes-up-alt": "arrow-up-square-triangle",
"sort-size-down": "arrow-down-big-small",
"sort-size-down-alt": "arrow-down-small-big",
"sort-size-up": "arrow-up-big-small",
"sort-size-up-alt": "arrow-up-small-big",
soup: "bowl-hot",
"space-shuttle": "shuttle-space",
"space-station-moon-alt": "space-station-moon-construction",
"square-root-alt": "square-root-variable",
"star-half-alt": "star-half-stroke",
"starfighter-alt": "starfighter-twin-ion-engine",
"step-backward": "backward-step",
"step-forward": "forward-step",
"sticky-note": "note-sticky",
"stop-circle": "circle-stop",
"store-alt": "shop",
"store-alt-slash": "shop-slash",
stream: "bars-staggered",
subway: "train-subway",
surprise: "face-surprise",
swimmer: "person-swimming",
"swimming-pool": "water-ladder",
sync: "arrows-rotate",
"sync-alt": "rotate",
"table-tennis": "table-tennis-paddle-ball",
"tablet-alt": "tablet-screen-button",
"tablet-android": "tablet",
"tablet-android-alt": "tablet-screen",
tachometer: "gauge-simple",
"tachometer-alt": "gauge",
"tachometer-alt-average": "gauge-med",
"tachometer-alt-fast": "gauge",
"tachometer-alt-fastest": "gauge-max",
"tachometer-alt-slow": "gauge-low",
"tachometer-alt-slowest": "gauge-min",
"tachometer-average": "gauge-simple-med",
"tachometer-fast": "gauge-simple",
"tachometer-fastest": "gauge-simple-max",
"tachometer-slow": "gauge-simple-low",
"tachometer-slowest": "gauge-simple-min",
tanakh: "book-tanakh",
tasks: "list-check",
"tasks-alt": "bars-progress",
"telegram-plane": "telegram",
"temperature-down": "temperature-arrow-down",
"temperature-frigid": "temperature-snow",
"temperature-hot": "temperature-sun",
"temperature-up": "temperature-arrow-up",
tenge: "tenge-sign",
th: "table-cells",
"th-large": "table-cells-large",
"th-list": "table-list",
"theater-masks": "masks-theater",
"thermometer-empty": "temperature-empty",
"thermometer-full": "temperature-full",
"thermometer-half": "temperature-half",
"thermometer-quarter": "temperature-quarter",
"thermometer-three-quarters": "temperature-three-quarters",
"thumb-tack": "thumbtack",
thunderstorm: "cloud-bolt",
"thunderstorm-moon": "cloud-bolt-moon",
"thunderstorm-sun": "cloud-bolt-sun",
"ticket-alt": "ticket-simple",
times: "xmark",
"times-circle": "circle-xmark",
"times-hexagon": "hexagon-xmark",
"times-octagon": "octagon-xmark",
"times-square": "square-xmark",
tint: "droplet",
"tint-slash": "droplet-slash",
tired: "face-tired",
"toilet-paper-alt": "toilet-paper-blank",
"tombstone-alt": "tombstone-blank",
tools: "screwdriver-wrench",
torah: "scroll-torah",
tram: "train-tram",
"transgender-alt": "transgender",
"trash-alt": "trash-can",
"trash-restore": "trash-arrow-up",
"trash-restore-alt": "trash-can-arrow-up",
"trash-undo-alt": "trash-can-undo",
"tree-alt": "tree-deciduous",
"triangle-music": "triangle-instrument",
"trophy-alt": "trophy-star",
"truck-couch": "truck-ramp-couch",
"truck-loading": "truck-ramp-box",
tshirt: "shirt",
"tv-alt": "tv",
undo: "arrow-rotate-left",
"undo-alt": "rotate-left",
university: "building-columns",
unlink: "link-slash",
"unlock-alt": "unlock-keyhole",
"usd-circle": "circle-dollar",
"usd-square": "square-dollar",
"user-alt": "user-large",
"user-alt-slash": "user-large-slash",
"user-chart": "chart-user",
"user-circle": "circle-user",
"user-cog": "user-gear",
"user-edit": "user-pen",
"user-friends": "user-group",
"user-hard-hat": "user-helmet-safety",
"user-md": "user-doctor",
"user-md-chat": "user-doctor-message",
"user-times": "user-xmark",
"users-class": "screen-users",
"users-cog": "users-gear",
"users-crown": "user-group-crown",
"utensil-fork": "fork",
"utensil-knife": "knife",
"utensil-spoon": "spoon",
"utensils-alt": "fork-knife",
vhs: "cassette-vhs",
"volleyball-ball": "volleyball",
"volume-down": "volume-low",
"volume-mute": "volume-xmark",
"volume-up": "volume-high",
"vote-nay": "xmark-to-slot",
"vote-yea": "check-to-slot",
walking: "person-walking",
"warehouse-alt": "warehouse-full",
washer: "washing-machine",
"water-lower": "water-arrow-down",
"water-rise": "water-arrow-up",
"waveform-path": "waveform-lines",
webcam: "camera-web",
"webcam-slash": "camera-web-slash",
weight: "weight-scale",
"wifi-1": "wifi-weak",
"wifi-2": "wifi-fair",
"window-alt": "window-flip",
"window-close": "rectangle-xmark",
"wine-glass-alt": "wine-glass-empty",
};