diff --git a/app/assets/javascripts/discourse-common/lib/attribute-hook.js.es6 b/app/assets/javascripts/discourse-common/lib/attribute-hook.js.es6
deleted file mode 100644
index 33aecc6646a..00000000000
--- a/app/assets/javascripts/discourse-common/lib/attribute-hook.js.es6
+++ /dev/null
@@ -1,42 +0,0 @@
-// FROM: https://github.com/Matt-Esch/virtual-dom
-// License: MIT
-
-function AttributeHook(namespace, value) {
- if (!(this instanceof AttributeHook)) {
- return new AttributeHook(namespace, value);
- }
-
- this.namespace = namespace;
- this.value = value;
-}
-
-AttributeHook.prototype.hook = function(node, prop, prev) {
- if (
- prev &&
- prev.type === "AttributeHook" &&
- prev.value === this.value &&
- prev.namespace === this.namespace
- ) {
- return;
- }
-
- node.setAttributeNS(this.namespace, prop, this.value);
-};
-
-AttributeHook.prototype.unhook = function(node, prop, next) {
- if (
- next &&
- next.type === "AttributeHook" &&
- next.namespace === this.namespace
- ) {
- return;
- }
-
- var colonPosition = prop.indexOf(":");
- var localName = colonPosition > -1 ? prop.substr(colonPosition + 1) : prop;
- node.removeAttributeNS(this.namespace, localName);
-};
-
-AttributeHook.prototype.type = "AttributeHook";
-
-export default AttributeHook;
diff --git a/app/assets/javascripts/discourse-common/lib/icon-library.js.es6 b/app/assets/javascripts/discourse-common/lib/icon-library.js.es6
index bbf9d67eb89..2ad408cac33 100644
--- a/app/assets/javascripts/discourse-common/lib/icon-library.js.es6
+++ b/app/assets/javascripts/discourse-common/lib/icon-library.js.es6
@@ -1,202 +1,37 @@
import { h } from "virtual-dom";
-import attributeHook from "discourse-common/lib/attribute-hook";
-import deprecated from "discourse-common/lib/deprecated";
-
-const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
let _renderers = [];
const REPLACEMENTS = {
"d-tracking": "circle",
"d-muted": "times-circle",
- "d-regular": "far-circle",
+ "d-regular": "circle-o",
"d-watching": "exclamation-circle",
- "d-watching-first": "far-dot-circle",
+ "d-watching-first": "dot-circle-o",
"d-drop-expanded": "caret-down",
"d-drop-collapsed": "caret-right",
- "d-unliked": "far-heart",
+ "d-unliked": "heart-o",
"d-liked": "heart",
"notification.mentioned": "at",
"notification.group_mentioned": "at",
"notification.quoted": "quote-right",
"notification.replied": "reply",
"notification.posted": "reply",
- "notification.edited": "pencil-alt",
+ "notification.edited": "pencil",
"notification.liked": "heart",
"notification.liked_2": "heart",
"notification.liked_many": "heart",
- "notification.private_message": "far-envelope",
- "notification.invited_to_private_message": "far-envelope",
- "notification.invited_to_topic": "hand-point-right",
+ "notification.private_message": "envelope-o",
+ "notification.invited_to_private_message": "envelope-o",
+ "notification.invited_to_topic": "hand-o-right",
"notification.invitee_accepted": "user",
"notification.moved_post": "sign-out",
"notification.linked": "link",
"notification.granted_badge": "certificate",
- "notification.topic_reminder": "hand-point-right",
- "notification.watching_first_post": "far-dot-circle",
+ "notification.topic_reminder": "hand-o-right",
+ "notification.watching_first_post": "dot-circle-o",
"notification.group_message_summary": "group"
};
-const fa4Replacements = {
- "area-chart": "chart-area",
- "bar-chart": "far-chart-bar",
- "bar-chart-o": "far-chart-bar",
- "chain-broken": "unlink",
- "circle-thin": "far-circle",
- "code-fork": "code-branch",
- "commenting-o": "far-comment-dots",
- "credit-card": "far-credit-card",
- "drivers-license": "id-card",
- "drivers-license-o": "far-id-card",
- "external-link": "external-link-alt",
- "external-link-square": "external-link-square-alt",
- "eye-slash": "far-eye-slash",
- "facebook-square": "fab-facebook-square",
- "file-sound-o": "far-file-audio",
- "file-text": "file-alt",
- "file-text-o": "far-file-alt",
- "files-o": "far-copy",
- "floppy-o": "far-save",
- "github-alt": "fab-github-alt",
- "github-square": "fab-github-square",
- "hacker-news": "fab-hacker-news",
- "hand-grab-o": "far-hand-rock",
- "hand-o-right": "hand-point-right",
- "id-badge": "far-id-badge",
- "internet-explorer": "fab-internet-explorer",
- "line-chart": "chart-line",
- "linkedin-square": "fab-linkedin",
- "list-alt": "far-list-alt",
- "mail-forward": "share",
- "mail-reply": "reply",
- "mail-reply-all": "reply-all",
- "map-marker": "map-marker-alt",
- "mobile-phone": "mobile-alt",
- "object-group": "far-object-group",
- "object-ungroup": "far-object-ungroup",
- "pencil-square": "pen-square",
- "pencil-square-o": "far-edit",
- "picture-o": "far-image",
- "pie-chart": "chart-pie",
- "rotate-left": "undo",
- "rotate-right": "redo",
- "send-o": "far-paper-plane",
- "sign-in": "sign-in-alt",
- "sign-out": "sign-out-alt",
- "soccer-ball-o": "far-futbol",
- "sort-alpha-asc": "sort-alpha-down",
- "sort-alpha-desc": "sort-alpha-up",
- "sort-amount-asc": "sort-amount-down",
- "sort-amount-desc": "sort-amount-up",
- "sort-asc": "sort-up",
- "sort-desc": "sort-down",
- "sort-numeric-asc": "sort-numeric-down",
- "sort-numeric-desc": "sort-numeric-up",
- "star-half-empty": "far-star-half",
- "star-half-full": "far-star-half",
- "thumb-tack": "thumbtack",
- "thumbs-o-down": "far-thumbs-down",
- "thumbs-o-up": "far-thumbs-up",
- "times-rectangle": "window-close",
- "times-rectangle-o": "far-window-close",
- "toggle-down": "far-caret-square-down",
- "toggle-left": "far-caret-square-left",
- "toggle-right": "far-caret-square-right",
- "toggle-up": "far-caret-square-up",
- "trash-o": "far-trash-alt",
- "twitter-square": "fab-twitter-square",
- "vcard-o": "far-address-card",
- "video-camera": "video",
- "vimeo-square": "fab-vimeo-square",
- "wheelchair-alt": "fab-accessible-icon",
- "window-maximize": "far-window-maximize",
- "window-restore": "far-window-restore",
- "youtube-play": "fab-youtube",
- "youtube-square": "fab-youtube-square",
- apple: "fab-apple",
- bank: "university",
- cab: "taxi",
- calendar: "calendar-alt",
- chain: "link",
- clipboard: "far-clipboard",
- clone: "far-clone",
- close: "times",
- cny: "yen-sign",
- commenting: "far-comment-dots",
- compass: "far-compass",
- copyright: "far-copyright",
- cutlery: "utensils",
- dashboard: "tachometer-alt",
- deafness: "deaf",
- dedent: "outdent",
- diamond: "far-gem",
- discord: "fab-discord",
- dollar: "dollar-sign",
- exchange: "exchange-alt",
- eye: "far-eye",
- eyedropper: "eye-dropper",
- facebook: "fab-facebook-f",
- feed: "rss",
- flash: "bolt",
- gbp: "pound-sign",
- gear: "cog",
- gears: "cogs",
- github: "fab-github",
- glass: "glass-martini",
- glass: "glass-martini",
- google: "fab-google",
- group: "users",
- header: "heading",
- hotel: "bed",
- ils: "shekel-sign",
- image: "far-image",
- inr: "rupee-sign",
- instagram: "fab-instagram",
- institution: "university",
- intersex: "transgender",
- jpy: "yen-sign",
- legal: "gavel",
- linkedin: "fab-linkedin-in",
- linode: "fab-linode",
- linux: "fab-linux",
- meetup: "fab-meetup",
- mobile: "mobile-alt",
- navicon: "bars",
- paste: "far-clipboard",
- pencil: "pencil-alt",
- photo: "far-image",
- refresh: "sync",
- registered: "far-registered",
- remove: "times",
- remove: "times",
- reorder: "bars",
- repeat: "redo",
- rmb: "yen-sign",
- rouble: "ruble-sign",
- ruble: "ruble-sign",
- rupee: "rupee-sign",
- s15: "bath",
- scissors: "cut",
- send: "paper-plane",
- shekel: "shekel-sign",
- shield: "shield-alt",
- signing: "sign-language",
- support: "far-life-ring",
- tablet: "tablet-alt",
- tachometer: "tachometer-alt",
- television: "tv",
- ticket: "ticket-alt",
- trash: "trash-alt",
- twitter: "fab-twitter",
- unsorted: "sort",
- vcard: "address-card",
- vimeo: "fab-vimeo-v",
- warning: "exclamation-triangle",
- whatsapp: "fab-whatsapp",
- windows: "fab-windows",
- yahoo: "fab-yahoo",
- youtube: "fab-youtube"
-};
-
export function replaceIcon(source, destination) {
REPLACEMENTS[source] = destination;
}
@@ -224,13 +59,6 @@ export function iconNode(id, params) {
return renderIcon("node", id, params);
}
-export function convertIconClass(icon) {
- return icon
- .replace("far fa-", "far-")
- .replace("fab fa-", "fab-")
- .replace("fa-", "");
-}
-
// TODO: Improve how helpers are registered for vdom compliation
if (typeof Discourse !== "undefined") {
Discourse.__widget_helpers.iconNode = iconNode;
@@ -240,114 +68,58 @@ export function registerIconRenderer(renderer) {
_renderers.unshift(renderer);
}
-function iconClasses(icon, params) {
- // "notification." is invalid syntax for classes, use replacement instead
- const dClass =
- icon.replacementId && icon.id.indexOf("notification.") > -1
- ? icon.replacementId
- : icon.id;
+// Support for font awesome icons
+function faClasses(icon, params) {
+ let classNames = `fa fa-${icon.replacementId || icon.id} d-icon d-icon-${
+ icon.id
+ }`;
- let classNames = `fa d-icon d-icon-${dClass} svg-icon`;
-
- if (params && params["class"]) {
- classNames += " " + params["class"];
+ if (params) {
+ if (params.modifier) {
+ classNames += " fa-" + params.modifier;
+ }
+ if (params["class"]) {
+ classNames += " " + params["class"];
+ }
}
-
return classNames;
}
-function warnIfMissing(id) {
- if (
- typeof Discourse !== "undefined" &&
- Discourse.Environment === "development" &&
- Discourse.SvgIconList &&
- Discourse.SvgIconList.indexOf(id) === -1
- ) {
- console.warn(`The icon "${id}" is missing from the SVG subset.`);
- }
-}
-
-function warnIfDeprecated(oldId, newId) {
- if (
- typeof Discourse !== "undefined" &&
- Discourse.Environment === "development" &&
- !Ember.testing
- ) {
- deprecated(`Icon "${oldId}" is now "${newId}".`);
- }
-}
-
-function handleIconId(icon) {
- let id = icon.replacementId || icon.id || "";
-
- if (fa4Replacements.hasOwnProperty(id)) {
- warnIfDeprecated(id, fa4Replacements[id]);
- id = fa4Replacements[id];
- } else if (id.substr(id.length - 2) === "-o") {
- let newId = "far-" + id.replace("-o", "");
- warnIfDeprecated(id, newId);
- id = newId;
- }
-
- // TODO: clean up "thumbtack unpinned" at source instead of here
- id = id.replace(" unpinned", "");
-
- warnIfMissing(id);
- return id;
-}
-
// default resolver is font awesome
registerIconRenderer({
name: "font-awesome",
string(icon, params) {
- const id = handleIconId(icon);
- let html = ``;
+ html += `>${tagName}>`;
if (params.label) {
html += `${params.label}`;
}
- if (params.title) {
- html = `${html}`;
- }
return html;
},
node(icon, params) {
- const id = handleIconId(icon);
- const classes = iconClasses(icon, params) + " svg-node";
+ let tagName = params.tagName || "i";
- const svg = h(
- "svg",
- {
- attributes: { class: classes, "aria-hidden": true },
- namespace: SVG_NAMESPACE
- },
- [
- h("use", {
- "xlink:href": attributeHook("http://www.w3.org/1999/xlink", `#${id}`),
- namespace: SVG_NAMESPACE
- })
- ]
- );
+ const properties = {
+ className: faClasses(icon, params),
+ attributes: { "aria-hidden": true }
+ };
if (params.title) {
- return h(
- "span",
- {
- title: params.title,
- attributes: { class: "svg-icon-title" }
- },
- [svg]
- );
+ properties.attributes.title = params.title;
+ }
+ if (params.label) {
+ return h(tagName, properties, h("span.sr-only", I18n.t(params.label)));
} else {
- return svg;
+ return h(tagName, properties);
}
}
});
diff --git a/app/assets/javascripts/discourse/components/categories-boxes-topic.js.es6 b/app/assets/javascripts/discourse/components/categories-boxes-topic.js.es6
index c061cb55e95..f39c5c6c899 100644
--- a/app/assets/javascripts/discourse/components/categories-boxes-topic.js.es6
+++ b/app/assets/javascripts/discourse/components/categories-boxes-topic.js.es6
@@ -2,15 +2,19 @@ import computed from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
tagName: "li",
+ classNameBindings: ["topicStatusIcon"],
@computed("topic.pinned", "topic.closed", "topic.archived")
topicStatusIcon(pinned, closed, archived) {
if (pinned) {
- return "thumbtack";
+ return "topic-pinned";
}
- if (closed || archived) {
- return "lock";
+ if (closed) {
+ return "topic-closed";
}
- return "far-file-alt";
+ if (archived) {
+ return "topic-archived";
+ }
+ return "topic-open";
}
});
diff --git a/app/assets/javascripts/discourse/components/group-flair-inputs.js.es6 b/app/assets/javascripts/discourse/components/group-flair-inputs.js.es6
index 322dffcf213..00036734dee 100644
--- a/app/assets/javascripts/discourse/components/group-flair-inputs.js.es6
+++ b/app/assets/javascripts/discourse/components/group-flair-inputs.js.es6
@@ -1,6 +1,5 @@
import computed from "ember-addons/ember-computed-decorators";
import { escapeExpression } from "discourse/lib/utilities";
-import { convertIconClass } from "discourse-common/lib/icon-library";
export default Ember.Component.extend({
classNames: ["group-flair-inputs"],
@@ -15,11 +14,6 @@ export default Ember.Component.extend({
return flairURL && flairURL.substr(0, 3) === "fa-";
},
- @computed("model.flair_url", "flairPreviewIcon")
- flairPreviewIconUrl(flairURL, flairPreviewIcon) {
- return flairPreviewIcon ? convertIconClass(flairURL) : "";
- },
-
@computed("model.flair_url", "flairPreviewIcon")
flairPreviewImage(flairURL, flairPreviewIcon) {
return flairURL && !flairPreviewIcon;
diff --git a/app/assets/javascripts/discourse/components/topic-status.js.es6 b/app/assets/javascripts/discourse/components/topic-status.js.es6
index 2ab678f9d21..834b26dfe19 100644
--- a/app/assets/javascripts/discourse/components/topic-status.js.es6
+++ b/app/assets/javascripts/discourse/components/topic-status.js.es6
@@ -17,7 +17,7 @@ export default Ember.Component.extend(
click(e) {
// only pin unpin for now
- if (this.get("canAct") && $(e.target).hasClass("d-icon-thumbtack")) {
+ if (this.get("canAct") && $(e.target).hasClass("d-icon-thumb-tack")) {
const topic = this.get("topic");
topic.get("pinned") ? topic.clearPin() : topic.rePin();
}
@@ -58,10 +58,10 @@ export default Ember.Component.extend(
renderIconIf("topic.archived", "lock", "archived");
}
- renderIconIf("topic.pinned", "thumbtack", "pinned", this.get("canAct"));
+ renderIconIf("topic.pinned", "thumb-tack", "pinned", this.get("canAct"));
renderIconIf(
"topic.unpinned",
- "thumbtack",
+ "thumb-tack",
"unpinned",
this.get("canAct")
);
diff --git a/app/assets/javascripts/discourse/controllers/composer.js.es6 b/app/assets/javascripts/discourse/controllers/composer.js.es6
index 7beec81dc30..25927a467f3 100644
--- a/app/assets/javascripts/discourse/controllers/composer.js.es6
+++ b/app/assets/javascripts/discourse/controllers/composer.js.es6
@@ -186,6 +186,15 @@ export default Ember.Controller.extend({
);
},
+ @computed("model.whisper", "model.unlistTopic")
+ whisperOrUnlistTopicText(whisper, unlistTopic) {
+ if (whisper) {
+ return I18n.t("composer.whisper");
+ } else if (unlistTopic) {
+ return I18n.t("composer.unlist");
+ }
+ },
+
@computed
isStaffUser() {
const currentUser = this.currentUser;
diff --git a/app/assets/javascripts/discourse/controllers/full-page-search.js.es6 b/app/assets/javascripts/discourse/controllers/full-page-search.js.es6
index 0e1984ff49a..1988ae91bac 100644
--- a/app/assets/javascripts/discourse/controllers/full-page-search.js.es6
+++ b/app/assets/javascripts/discourse/controllers/full-page-search.js.es6
@@ -196,7 +196,7 @@ export default Ember.Controller.extend({
@computed("expanded")
searchAdvancedIcon(expanded) {
- return iconHTML(expanded ? "caret-down" : "caret-right");
+ return iconHTML(expanded ? "caret-down fa-fw" : "caret-right fa-fw");
},
@computed("page")
diff --git a/app/assets/javascripts/discourse/controllers/invite.js.es6 b/app/assets/javascripts/discourse/controllers/invite.js.es6
index b9f05daed37..1b750a18659 100644
--- a/app/assets/javascripts/discourse/controllers/invite.js.es6
+++ b/app/assets/javascripts/discourse/controllers/invite.js.es6
@@ -206,7 +206,7 @@ export default Ember.Controller.extend(ModalFunctionality, {
this.set("inviteIcon", "envelope");
return I18n.t("topic.invite_reply.to_topic_email");
} else {
- this.set("inviteIcon", "hand-point-right");
+ this.set("inviteIcon", "hand-o-right");
return I18n.t("topic.invite_reply.to_topic_username");
}
}
diff --git a/app/assets/javascripts/discourse/helpers/icon-or-image.js.es6 b/app/assets/javascripts/discourse/helpers/icon-or-image.js.es6
index 8e48171eee7..e93068deea9 100644
--- a/app/assets/javascripts/discourse/helpers/icon-or-image.js.es6
+++ b/app/assets/javascripts/discourse/helpers/icon-or-image.js.es6
@@ -1,15 +1,14 @@
import { htmlHelper } from "discourse-common/lib/helpers";
-import { iconHTML, convertIconClass } from "discourse-common/lib/icon-library";
+import { iconHTML } from "discourse-common/lib/icon-library";
export default htmlHelper(function({ icon, image }) {
if (!Ember.isEmpty(image)) {
return `
`;
}
- if (Ember.isEmpty(icon) || icon.indexOf("fa-") < 0) {
+ if (Ember.isEmpty(icon) || icon.indexOf("fa-") !== 0) {
return "";
}
- icon = convertIconClass(icon);
- return iconHTML(icon);
+ return iconHTML(icon.replace("fa-", ""));
});
diff --git a/app/assets/javascripts/discourse/initializers/svg-sprite-fontawesome.js.es6 b/app/assets/javascripts/discourse/initializers/svg-sprite-fontawesome.js.es6
deleted file mode 100644
index 7a5924423c9..00000000000
--- a/app/assets/javascripts/discourse/initializers/svg-sprite-fontawesome.js.es6
+++ /dev/null
@@ -1,11 +0,0 @@
-import svgSpriteLoader from "discourse/lib/svg-sprite-loader";
-
-export default {
- name: "svg-sprite-fontawesome",
-
- initialize() {
- if (Discourse && Discourse.SvgSpritePath) {
- svgSpriteLoader.load(Discourse.SvgSpritePath, "fontawesome");
- }
- }
-};
diff --git a/app/assets/javascripts/discourse/lib/lightbox.js.es6 b/app/assets/javascripts/discourse/lib/lightbox.js.es6
index 6b0014e2401..48d3c66bdb9 100644
--- a/app/assets/javascripts/discourse/lib/lightbox.js.es6
+++ b/app/assets/javascripts/discourse/lib/lightbox.js.es6
@@ -1,6 +1,5 @@
import loadScript from "discourse/lib/load-script";
import { escapeExpression } from "discourse/lib/utilities";
-import { renderIcon } from "discourse-common/lib/icon-library";
export default function($elem) {
if (!$elem) {
@@ -58,7 +57,6 @@ export default function($elem) {
'' +
- renderIcon("string", "download") +
I18n.t("lightbox.download") +
""
);
diff --git a/app/assets/javascripts/discourse/lib/render-topic-featured-link.js.es6 b/app/assets/javascripts/discourse/lib/render-topic-featured-link.js.es6
index 7fa722a28d8..c1c7f5411fa 100644
--- a/app/assets/javascripts/discourse/lib/render-topic-featured-link.js.es6
+++ b/app/assets/javascripts/discourse/lib/render-topic-featured-link.js.es6
@@ -1,5 +1,4 @@
import { h } from "virtual-dom";
-import { renderIcon } from "discourse-common/lib/icon-library";
const _decorators = [];
@@ -36,13 +35,12 @@ export default function renderTopicFeaturedLink(topic) {
if (meta) {
return `${renderIcon("string", "external-link-alt")} ${
- meta.domain
- }`;
+ }" href="${meta.href}">${meta.domain}`;
} else {
return "";
}
}
+
export function topicFeaturedLinkNode(topic) {
const meta = extractLinkMeta(topic);
if (meta) {
@@ -51,7 +49,7 @@ export function topicFeaturedLinkNode(topic) {
{
attributes: { href: meta.href, rel: meta.rel, target: meta.target }
},
- [renderIcon("node", "external-link-alt"), meta.domain]
+ meta.domain
);
}
}
diff --git a/app/assets/javascripts/discourse/lib/svg-sprite-loader.js.es6 b/app/assets/javascripts/discourse/lib/svg-sprite-loader.js.es6
deleted file mode 100644
index b2794d6743a..00000000000
--- a/app/assets/javascripts/discourse/lib/svg-sprite-loader.js.es6
+++ /dev/null
@@ -1,18 +0,0 @@
-import { ajax } from "discourse/lib/ajax";
-
-export default {
- name: "svg-sprite-loader",
- load(spritePath, spriteName) {
- const c = "svg-sprites";
- const $cEl = `#${c}`;
- const $spriteEl = `${$cEl} .${spriteName}`;
-
- if ($($cEl).length === 0) $("body").append(`
`);
- if ($($spriteEl).length === 0)
- $($cEl).append(`
`);
-
- ajax(spritePath, { type: "GET", dataType: "text" }).then(data => {
- $($spriteEl).html(data);
- });
- }
-};
diff --git a/app/assets/javascripts/discourse/models/composer.js.es6 b/app/assets/javascripts/discourse/models/composer.js.es6
index 56503d534fd..aae9a31055f 100644
--- a/app/assets/javascripts/discourse/models/composer.js.es6
+++ b/app/assets/javascripts/discourse/models/composer.js.es6
@@ -382,11 +382,8 @@ const Composer = RestModel.extend({
return this.get("titleLength") <= this.siteSettings.max_topic_title_length;
}.property("minimumTitleLength", "titleLength", "post.static_doc"),
- @computed("action", "whisper")
- saveIcon(action, whisper) {
- if (whisper) {
- return "eye-slash";
- }
+ @computed("action")
+ saveIcon(action) {
return SAVE_ICONS[action];
},
diff --git a/app/assets/javascripts/discourse/models/login-method.js.es6 b/app/assets/javascripts/discourse/models/login-method.js.es6
index 0365a276585..aba619ee94b 100644
--- a/app/assets/javascripts/discourse/models/login-method.js.es6
+++ b/app/assets/javascripts/discourse/models/login-method.js.es6
@@ -93,11 +93,6 @@ export function findAll(siteSettings, capabilities, isMobileDevice) {
methods.forEach(m => m.set("full_screen_login", true));
}
- // exclude FA icon for Google, uses custom SVG
- methods.forEach(m =>
- m.set("hasRegularIcon", m.get("name") === "google_oauth2" ? false : true)
- );
-
return methods;
}
diff --git a/app/assets/javascripts/discourse/raw-views/topic-status.js.es6 b/app/assets/javascripts/discourse/raw-views/topic-status.js.es6
index 3c3b7f2b709..b93dca7b27d 100644
--- a/app/assets/javascripts/discourse/raw-views/topic-status.js.es6
+++ b/app/assets/javascripts/discourse/raw-views/topic-status.js.es6
@@ -45,11 +45,11 @@ export default Ember.Object.extend({
}
if (topic.get("pinned")) {
- results.push({ icon: "thumbtack", key: "pinned" });
+ results.push({ icon: "thumb-tack", key: "pinned" });
}
if (topic.get("unpinned")) {
- results.push({ icon: "thumbtack", key: "unpinned" });
+ results.push({ icon: "thumb-tack unpinned", key: "unpinned" });
}
if (topic.get("invisible")) {
@@ -74,6 +74,7 @@ export default Ember.Object.extend({
if (results.length === 0 && defaultIcon) {
this.set("showDefault", defaultIcon);
}
+
return results;
}
});
diff --git a/app/assets/javascripts/discourse/templates/components/categories-boxes-topic.hbs b/app/assets/javascripts/discourse/templates/components/categories-boxes-topic.hbs
index 95ebe51a0d3..5251070169e 100644
--- a/app/assets/javascripts/discourse/templates/components/categories-boxes-topic.hbs
+++ b/app/assets/javascripts/discourse/templates/components/categories-boxes-topic.hbs
@@ -1,5 +1,3 @@
-{{d-icon topicStatusIcon}}
-
{{text-overflow class="overflow" text=topic.fancyTitle}}
diff --git a/app/assets/javascripts/discourse/templates/components/color-picker.hbs b/app/assets/javascripts/discourse/templates/components/color-picker.hbs
index 65f280ab758..5842bf91512 100644
--- a/app/assets/javascripts/discourse/templates/components/color-picker.hbs
+++ b/app/assets/javascripts/discourse/templates/components/color-picker.hbs
@@ -1,5 +1 @@
-{{#each colors as |c|}}
- {{#color-picker-choice color=c usedColors=usedColors selectColor="selectColor"}}
- {{d-icon 'check'}}
- {{/color-picker-choice}}
-{{/each}}
+{{#each colors as |c|}}{{color-picker-choice color=c usedColors=usedColors selectColor="selectColor"}}{{/each}}
diff --git a/app/assets/javascripts/discourse/templates/components/group-flair-inputs.hbs b/app/assets/javascripts/discourse/templates/components/group-flair-inputs.hbs
index fdc25357187..ad0530ba8e7 100644
--- a/app/assets/javascripts/discourse/templates/components/group-flair-inputs.hbs
+++ b/app/assets/javascripts/discourse/templates/components/group-flair-inputs.hbs
@@ -39,7 +39,7 @@
{{else}}
- {{d-icon flairPreviewIconUrl}}
+
{{/if}}
diff --git a/app/assets/javascripts/discourse/templates/components/login-buttons.hbs b/app/assets/javascripts/discourse/templates/components/login-buttons.hbs
index cc950944ec3..5289a927df0 100644
--- a/app/assets/javascripts/discourse/templates/components/login-buttons.hbs
+++ b/app/assets/javascripts/discourse/templates/components/login-buttons.hbs
@@ -1,12 +1,5 @@
{{#each buttons as |b|}}
-
+
{{/each}}
{{#if showLoginWithEmailLink}}
@@ -14,6 +7,6 @@
action="emailLogin"
label="email_login.button_label"
disabled=processingEmailLink
- icon="far-envelope"
+ icon="envelope-o"
class="login-with-email-button"}}
{{/if}}
diff --git a/app/assets/javascripts/discourse/templates/composer.hbs b/app/assets/javascripts/discourse/templates/composer.hbs
index af718bedb6a..d60ed2e804d 100644
--- a/app/assets/javascripts/discourse/templates/composer.hbs
+++ b/app/assets/javascripts/discourse/templates/composer.hbs
@@ -19,11 +19,8 @@
{{composer-action-title model=model canWhisper=canWhisper tabindex=8}}
{{#unless site.mobileView}}
- {{#if model.whisper}}
-
{{d-icon 'eye-slash'}}
- {{/if}}
- {{#if model.unlistTopic}}
-
({{i18n 'composer.unlist'}})
+ {{#if whisperOrUnlistTopicText}}
+
({{whisperOrUnlistTopicText}})
{{/if}}
{{#if model.noBump}}
{{d-icon "anchor"}}
diff --git a/app/assets/javascripts/discourse/templates/topic-status.raw.hbs b/app/assets/javascripts/discourse/templates/topic-status.raw.hbs
index 9dd8ee5a9bc..c8b1c3a6f38 100644
--- a/app/assets/javascripts/discourse/templates/topic-status.raw.hbs
+++ b/app/assets/javascripts/discourse/templates/topic-status.raw.hbs
@@ -5,7 +5,7 @@
{{~#if status.href ~}}
{{~else ~}}
-<{{status.openTag}} title='{{status.title}}' class='topic-status'>{{d-icon status.icon class=status.key}}{{status.closeTag}}>
+<{{status.openTag}} title='{{status.title}}' class='topic-status'>{{d-icon status.icon}}{{status.closeTag}}>
{{~/if ~}}
{{~/each}}
{{~#if view.showDefault~}}{{d-icon view.showDefault}}{{~/if ~}}
diff --git a/app/assets/javascripts/discourse/widgets/avatar-flair.js.es6 b/app/assets/javascripts/discourse/widgets/avatar-flair.js.es6
index 559adb9c599..f2e26106765 100644
--- a/app/assets/javascripts/discourse/widgets/avatar-flair.js.es6
+++ b/app/assets/javascripts/discourse/widgets/avatar-flair.js.es6
@@ -1,5 +1,5 @@
import { createWidget } from "discourse/widgets/widget";
-import { iconNode, convertIconClass } from "discourse-common/lib/icon-library";
+import { h } from "virtual-dom";
createWidget("avatar-flair", {
tagName: "div.avatar-flair",
@@ -7,7 +7,7 @@ createWidget("avatar-flair", {
isIcon(attrs) {
return (
attrs.primary_group_flair_url &&
- attrs.primary_group_flair_url.includes("fa-")
+ attrs.primary_group_flair_url.substr(0, 3) === "fa-"
);
},
@@ -52,8 +52,20 @@ createWidget("avatar-flair", {
html(attrs) {
if (this.isIcon(attrs)) {
- const icon = convertIconClass(attrs.primary_group_flair_url);
- return [iconNode(icon)];
+ return [
+ h("i", {
+ className: "fa " + attrs.primary_group_flair_url,
+ attributes: {
+ style: attrs.primary_group_flair_color
+ ? "color: #" +
+ Handlebars.Utils.escapeExpression(
+ attrs.primary_group_flair_color
+ ) +
+ "; "
+ : ""
+ }
+ })
+ ];
} else {
return [];
}
diff --git a/app/assets/javascripts/discourse/widgets/post-small-action.js.es6 b/app/assets/javascripts/discourse/widgets/post-small-action.js.es6
index aa40582ea70..8ec91f8e49b 100644
--- a/app/assets/javascripts/discourse/widgets/post-small-action.js.es6
+++ b/app/assets/javascripts/discourse/widgets/post-small-action.js.es6
@@ -37,12 +37,12 @@ const icons = {
"autoclosed.disabled": "unlock-alt",
"archived.enabled": "folder",
"archived.disabled": "folder-open",
- "pinned.enabled": "thumbtack",
- "pinned.disabled": "thumbtack unpinned",
- "pinned_globally.enabled": "thumbtack",
- "pinned_globally.disabled": "thumbtack unpinned",
- "banner.enabled": "thumbtack",
- "banner.disabled": "thumbtack unpinned",
+ "pinned.enabled": "thumb-tack",
+ "pinned.disabled": "thumb-tack unpinned",
+ "pinned_globally.enabled": "thumb-tack",
+ "pinned_globally.disabled": "thumb-tack unpinned",
+ "banner.enabled": "thumb-tack",
+ "banner.disabled": "thumb-tack unpinned",
"visible.enabled": "eye",
"visible.disabled": "eye-slash",
split_topic: "sign-out",
@@ -53,7 +53,7 @@ const icons = {
removed_group: "minus-circle",
public_topic: "comment",
private_topic: "envelope",
- autobumped: "hand-point-right"
+ autobumped: "hand-o-right"
};
export function addPostSmallActionIcon(key, icon) {
diff --git a/app/assets/javascripts/discourse/widgets/time-gap.js.es6 b/app/assets/javascripts/discourse/widgets/time-gap.js.es6
index aaede013c3e..4fee6557dd6 100644
--- a/app/assets/javascripts/discourse/widgets/time-gap.js.es6
+++ b/app/assets/javascripts/discourse/widgets/time-gap.js.es6
@@ -1,5 +1,6 @@
import { createWidget } from "discourse/widgets/widget";
import { h } from "virtual-dom";
+import { iconNode } from "discourse-common/lib/icon-library";
function description(attrs) {
const daysSince = attrs.daysSince;
@@ -20,7 +21,7 @@ export default createWidget("time-gap", {
html(attrs) {
return [
- h("div.topic-avatar", ""),
+ h("div.topic-avatar", iconNode("fw")),
h("div.small-action-desc.timegap", description(attrs))
];
}
diff --git a/app/assets/javascripts/discourse/widgets/topic-admin-menu.js.es6 b/app/assets/javascripts/discourse/widgets/topic-admin-menu.js.es6
index b029650af9f..783b4f09ef5 100644
--- a/app/assets/javascripts/discourse/widgets/topic-admin-menu.js.es6
+++ b/app/assets/javascripts/discourse/widgets/topic-admin-menu.js.es6
@@ -196,7 +196,7 @@ export default createWidget("topic-admin-menu", {
className: "topic-admin-pin",
buttonClass: "btn-default",
action: "showFeatureTopic",
- icon: "thumbtack",
+ icon: "thumb-tack",
label: featured ? "actions.unpin" : "actions.pin"
});
}
diff --git a/app/assets/javascripts/discourse/widgets/topic-status.js.es6 b/app/assets/javascripts/discourse/widgets/topic-status.js.es6
index ff03d826573..e7c116a91fc 100644
--- a/app/assets/javascripts/discourse/widgets/topic-status.js.es6
+++ b/app/assets/javascripts/discourse/widgets/topic-status.js.es6
@@ -37,8 +37,8 @@ export default createWidget("topic-status", {
renderIconIf("archived", "lock", "archived");
}
- renderIconIf("pinned", "thumbtack", "pinned");
- renderIconIf("unpinned", "thumbtack", "unpinned");
+ renderIconIf("pinned", "thumb-tack", "pinned");
+ renderIconIf("unpinned", "thumb-tack", "unpinned");
renderIconIf("invisible", "eye-slash", "invisible");
return result;
diff --git a/app/assets/javascripts/preload-application-data.js.no-module.es6 b/app/assets/javascripts/preload-application-data.js.no-module.es6
index d5cee7edfc6..7291d919502 100644
--- a/app/assets/javascripts/preload-application-data.js.no-module.es6
+++ b/app/assets/javascripts/preload-application-data.js.no-module.es6
@@ -34,11 +34,6 @@
}
Discourse.HighlightJSPath = setupData.highlightJsPath;
- Discourse.SvgSpritePath = setupData.svgSpritePath;
-
- if (Discourse.Environment === "development") {
- Discourse.SvgIconList = setupData.svgIconList;
- }
if (setupData.s3BaseUrl) {
Discourse.S3CDN = setupData.s3Cdn;
diff --git a/app/assets/javascripts/select-kit/components/mini-tag-chooser.js.es6 b/app/assets/javascripts/select-kit/components/mini-tag-chooser.js.es6
index 6a12338eee9..07825a3bca0 100644
--- a/app/assets/javascripts/select-kit/components/mini-tag-chooser.js.es6
+++ b/app/assets/javascripts/select-kit/components/mini-tag-chooser.js.es6
@@ -3,7 +3,6 @@ import TagsMixin from "select-kit/mixins/tags";
import { default as computed } from "ember-addons/ember-computed-decorators";
import renderTag from "discourse/lib/render-tag";
import { escapeExpression } from "discourse/lib/utilities";
-import { iconHTML } from "discourse-common/lib/icon-library";
const { get, isEmpty, run, makeArray } = Ember;
export default ComboBox.extend(TagsMixin, {
@@ -68,7 +67,7 @@ export default ComboBox.extend(TagsMixin, {
@computed("hasReachedMaximum")
caretIcon(hasReachedMaximum) {
- return hasReachedMaximum ? null : "plus";
+ return hasReachedMaximum ? null : "plus fa-fw";
},
@computed("tags")
@@ -126,7 +125,7 @@ export default ComboBox.extend(TagsMixin, {
`;
});
diff --git a/app/assets/javascripts/select-kit/components/pinned-options.js.es6 b/app/assets/javascripts/select-kit/components/pinned-options.js.es6
index d32ab062d39..01cdb52c228 100644
--- a/app/assets/javascripts/select-kit/components/pinned-options.js.es6
+++ b/app/assets/javascripts/select-kit/components/pinned-options.js.es6
@@ -20,7 +20,7 @@ export default DropdownSelectBoxComponent.extend({
content.label = `${title}${iconHTML("caret-down")}`.htmlSafe();
content.title = title;
content.name = state;
- content.icon = `thumbtack${state === "unpinned" ? " unpinned" : ""}`;
+ content.icon = `thumb-tack${state === "unpinned" ? " unpinned" : ""}`;
return content;
},
@@ -33,12 +33,12 @@ export default DropdownSelectBoxComponent.extend({
id: "pinned",
name: I18n.t("topic_statuses.pinned" + globally + ".title"),
description: I18n.t("topic_statuses.pinned" + globally + ".help"),
- icon: "thumbtack"
+ icon: "thumb-tack"
},
{
id: "unpinned",
name: I18n.t("topic_statuses.unpinned.title"),
- icon: "thumbtack unpinned",
+ icon: "thumb-tack unpinned",
description: I18n.t("topic_statuses.unpinned.help")
}
]);
diff --git a/app/assets/javascripts/select-kit/templates/components/category-drop/category-drop-header.hbs b/app/assets/javascripts/select-kit/templates/components/category-drop/category-drop-header.hbs
index 7928a3b94b9..7e3ea1baf4f 100644
--- a/app/assets/javascripts/select-kit/templates/components/category-drop/category-drop-header.hbs
+++ b/app/assets/javascripts/select-kit/templates/components/category-drop/category-drop-header.hbs
@@ -2,4 +2,4 @@
{{{label}}}
-{{d-icon caretIcon class="caret-icon"}}
+{{d-icon caretIcon class="caret-icon fa-fw"}}
diff --git a/app/assets/javascripts/select-kit/templates/components/combo-box/combo-box-header.hbs b/app/assets/javascripts/select-kit/templates/components/combo-box/combo-box-header.hbs
index a090a66aaa3..c9fc965ee83 100644
--- a/app/assets/javascripts/select-kit/templates/components/combo-box/combo-box-header.hbs
+++ b/app/assets/javascripts/select-kit/templates/components/combo-box/combo-box-header.hbs
@@ -14,4 +14,4 @@
{{/if}}
-{{d-icon caretIcon class="caret-icon"}}
+{{d-icon caretIcon class="caret-icon fa-fw"}}
diff --git a/app/assets/javascripts/select-kit/templates/components/future-date-input-selector/future-date-input-selector-header.hbs b/app/assets/javascripts/select-kit/templates/components/future-date-input-selector/future-date-input-selector-header.hbs
index 8a630455bda..a5c5cbd6a36 100644
--- a/app/assets/javascripts/select-kit/templates/components/future-date-input-selector/future-date-input-selector-header.hbs
+++ b/app/assets/javascripts/select-kit/templates/components/future-date-input-selector/future-date-input-selector-header.hbs
@@ -24,4 +24,4 @@
{{/if}}
-{{d-icon caretIcon class="caret-icon"}}
+{{d-icon caretIcon class="caret-icon fa-fw"}}
diff --git a/app/assets/javascripts/select-kit/templates/components/multi-select/selected-category.hbs b/app/assets/javascripts/select-kit/templates/components/multi-select/selected-category.hbs
index 1eb83f00509..09b5adfa859 100644
--- a/app/assets/javascripts/select-kit/templates/components/multi-select/selected-category.hbs
+++ b/app/assets/javascripts/select-kit/templates/components/multi-select/selected-category.hbs
@@ -1,4 +1,3 @@
{{badge}}
- {{d-icon 'times'}}
diff --git a/app/assets/javascripts/select-kit/templates/components/multi-select/selected-name.hbs b/app/assets/javascripts/select-kit/templates/components/multi-select/selected-name.hbs
index b39d272a045..141ae2748f6 100644
--- a/app/assets/javascripts/select-kit/templates/components/multi-select/selected-name.hbs
+++ b/app/assets/javascripts/select-kit/templates/components/multi-select/selected-name.hbs
@@ -8,7 +8,6 @@
{{{label}}}
{{/if}}
- {{d-icon 'times'}}
{{#if footerContent}}{{/if}}
diff --git a/app/assets/javascripts/select-kit/templates/components/tag-drop/tag-drop-header.hbs b/app/assets/javascripts/select-kit/templates/components/tag-drop/tag-drop-header.hbs
index 41e15b8653e..440988e3efe 100644
--- a/app/assets/javascripts/select-kit/templates/components/tag-drop/tag-drop-header.hbs
+++ b/app/assets/javascripts/select-kit/templates/components/tag-drop/tag-drop-header.hbs
@@ -6,4 +6,4 @@
{{/if}}
-{{d-icon caretIcon class="caret-icon"}}
+{{d-icon caretIcon class="caret-icon fa-fw"}}
diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss
index 4d4fa835821..d1c9e353363 100644
--- a/app/assets/stylesheets/common.scss
+++ b/app/assets/stylesheets/common.scss
@@ -1,4 +1,5 @@
@import "vendor/normalize";
+@import "vendor/font_awesome/font-awesome";
@import "vendor/pikaday";
@import "common/foundation/helpers";
@import "common/foundation/base";
diff --git a/app/assets/stylesheets/common/admin/admin_report.scss b/app/assets/stylesheets/common/admin/admin_report.scss
index 031363bad0f..603c421eb44 100644
--- a/app/assets/stylesheets/common/admin/admin_report.scss
+++ b/app/assets/stylesheets/common/admin/admin_report.scss
@@ -61,7 +61,7 @@
&.no-change {
color: $primary-medium;
- .d-icon {
+ i {
display: none;
}
}
@@ -96,9 +96,9 @@
.d-icon {
color: currentColor;
+ margin-bottom: 0.25em;
font-size: $font-up-5;
display: block;
- margin: 0.25em auto;
}
&.no-data,
diff --git a/app/assets/stylesheets/common/admin/admin_report_counters.scss b/app/assets/stylesheets/common/admin/admin_report_counters.scss
index a2e1c7c9bc5..c9a8ef9df48 100644
--- a/app/assets/stylesheets/common/admin/admin_report_counters.scss
+++ b/app/assets/stylesheets/common/admin/admin_report_counters.scss
@@ -47,7 +47,7 @@
text-align: center;
}
- .d-icon {
+ i {
margin: 0;
}
}
@@ -65,13 +65,13 @@
&.high-trending-up,
&.trending-up {
- .d-icon {
+ i {
color: $success;
}
}
&.high-trending-down,
&.trending-down {
- .d-icon {
+ i {
color: $danger;
}
}
diff --git a/app/assets/stylesheets/common/admin/dashboard_previous.scss b/app/assets/stylesheets/common/admin/dashboard_previous.scss
index a040f1c5954..b610e064a64 100644
--- a/app/assets/stylesheets/common/admin/dashboard_previous.scss
+++ b/app/assets/stylesheets/common/admin/dashboard_previous.scss
@@ -154,37 +154,37 @@
td.value {
font-weight: bold;
text-align: center;
- .d-icon {
+ i {
display: none;
}
&.high-trending-up,
&.trending-up {
- .up {
+ i.up {
color: $success;
display: inline;
}
}
&.high-trending-down,
&.trending-down {
- .down {
+ i.down {
color: $danger;
display: inline;
}
}
&.no-change {
- .down {
+ i.down {
display: inline;
visibility: hidden;
}
}
}
tr.reverse-colors {
- td.value.high-trending-down .down,
- td.value.trending-down .down {
+ td.value.high-trending-down i.down,
+ td.value.trending-down i.down {
color: $success;
}
- td.value.high-trending-up .up,
- td.value.trending-up .up {
+ td.value.high-trending-up i.up,
+ td.value.trending-up i.up {
color: $danger;
}
}
diff --git a/app/assets/stylesheets/common/admin/staff_logs.scss b/app/assets/stylesheets/common/admin/staff_logs.scss
index cfe23babf20..d20eef94dbb 100644
--- a/app/assets/stylesheets/common/admin/staff_logs.scss
+++ b/app/assets/stylesheets/common/admin/staff_logs.scss
@@ -201,7 +201,7 @@
.label {
font-weight: bold;
}
- .d-icon {
+ i {
margin-left: 6px;
}
}
diff --git a/app/assets/stylesheets/common/base/_topic-list.scss b/app/assets/stylesheets/common/base/_topic-list.scss
index e29caaaae42..97411db14a5 100644
--- a/app/assets/stylesheets/common/base/_topic-list.scss
+++ b/app/assets/stylesheets/common/base/_topic-list.scss
@@ -251,8 +251,8 @@ ol.category-breadcrumb {
}
}
-.d-icon-thumbtack.unpinned {
- @include fa-rotate(180deg, 1);
+.d-icon-thumb-tack.unpinned {
+ @include fa-icon-rotate(180deg, 1);
color: $primary;
/* because it is rotated, right becomes left! */
padding-left: 3px;
diff --git a/app/assets/stylesheets/common/base/category-list.scss b/app/assets/stylesheets/common/base/category-list.scss
index 0e130634b00..8a6a3954526 100644
--- a/app/assets/stylesheets/common/base/category-list.scss
+++ b/app/assets/stylesheets/common/base/category-list.scss
@@ -175,18 +175,26 @@
margin: 0;
}
li {
- padding: 4px 0;
- display: flex;
+ padding: 0;
+ margin-left: 1.5em;
.overflow {
max-height: 3em;
overflow: hidden;
text-overflow: ellipsis;
}
-
- .d-icon {
- margin-right: 6px;
- margin-top: 2px;
- }
+ }
+ li:before {
+ content: "\f0f6";
+ font-family: "FontAwesome";
+ float: left;
+ margin-left: -1.5em;
+ }
+ li.topic-pinned:before {
+ content: "\f08d";
+ }
+ li.topic-closed:before,
+ li.topic-archived:before {
+ content: "\f023";
}
}
}
diff --git a/app/assets/stylesheets/common/base/colorpicker.scss b/app/assets/stylesheets/common/base/colorpicker.scss
index 271d48ccb76..788111d5743 100644
--- a/app/assets/stylesheets/common/base/colorpicker.scss
+++ b/app/assets/stylesheets/common/base/colorpicker.scss
@@ -33,14 +33,18 @@
height: 1.2em;
padding: 0;
flex: 0 0 auto;
- color: white;
- svg {
- display: none;
- }
- &.used-color svg {
- display: inline-flex;
- opacity: 0.8;
- max-width: 70%;
+ &.used-color:before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-family: fontawesome;
+ content: "\f00c";
+ height: 100%;
+ width: calc(1.25em - 2px);
+ color: rgba($secondary, 0.75);
}
}
}
diff --git a/app/assets/stylesheets/common/base/compose.scss b/app/assets/stylesheets/common/base/compose.scss
index f1c7f8b9445..020db3d5fd3 100644
--- a/app/assets/stylesheets/common/base/compose.scss
+++ b/app/assets/stylesheets/common/base/compose.scss
@@ -36,7 +36,7 @@
border-color: $secondary;
border-right-color: transparent;
}
- .d-icon {
+ i {
color: $secondary;
}
}
@@ -94,17 +94,13 @@
margin: 5px 0 10px 0;
display: flex;
align-items: center;
- .d-icon {
+ i {
color: $primary-high;
}
.reply-details {
max-width: calc(100% - 60px);
flex: 1 1 auto;
white-space: nowrap;
-
- .d-icon {
- opacity: 0.8;
- }
}
.composer-action-title {
display: inline-flex;
diff --git a/app/assets/stylesheets/common/base/emoji.scss b/app/assets/stylesheets/common/base/emoji.scss
index 8d8cd19f7f4..7a3b46a5de4 100644
--- a/app/assets/stylesheets/common/base/emoji.scss
+++ b/app/assets/stylesheets/common/base/emoji.scss
@@ -143,18 +143,18 @@ img.emoji {
background: #7c533e;
}
-.emoji-picker .diversity-picker .diversity-scale.selected .d-icon {
+.emoji-picker .diversity-picker .diversity-scale.selected i {
display: block;
}
-.emoji-picker .diversity-picker .d-icon {
+.emoji-picker .diversity-picker i {
display: none;
}
.emoji-picker .diversity-picker .d-icon {
color: #fff;
font-size: $font-0;
- filter: drop-shadow(0.5px 1.5px 0 rgba(0, 0, 0, 0.3));
+ text-shadow: 0.5px 1.5px 0 rgba(0, 0, 0, 0.3);
}
.emoji-picker button.emoji {
@@ -182,6 +182,10 @@ img.emoji {
background-color: lighten($tertiary, 40%);
}
+.wmd-emoji-button:before {
+ content: "\f118";
+}
+
.emoji-picker-modal.fadeIn {
z-index: z("modal", "overlay");
position: fixed;
diff --git a/app/assets/stylesheets/common/base/group.scss b/app/assets/stylesheets/common/base/group.scss
index 20b6cf58520..653989b1ae6 100644
--- a/app/assets/stylesheets/common/base/group.scss
+++ b/app/assets/stylesheets/common/base/group.scss
@@ -57,7 +57,7 @@
background-size: $size;
height: $size;
- .d-icon {
+ i {
font-size: $size !important;
}
}
@@ -86,7 +86,7 @@ table.group-manage-logs {
.group-manage-logs-expand-details {
cursor: pointer;
- .d-icon {
+ i {
color: blend-primary-secondary(50%);
}
}
@@ -117,7 +117,7 @@ table.group-members {
}
th.sortable {
- .d-icon {
+ i {
margin-left: 5px;
}
diff --git a/app/assets/stylesheets/common/base/groups.scss b/app/assets/stylesheets/common/base/groups.scss
index ee58f29424e..8b050b1488a 100644
--- a/app/assets/stylesheets/common/base/groups.scss
+++ b/app/assets/stylesheets/common/base/groups.scss
@@ -49,7 +49,7 @@
}
td.group-user-status {
- .d-icon {
+ i {
color: $primary;
}
}
@@ -103,7 +103,7 @@
background-size: $size;
height: $size;
- .d-icon {
+ i {
font-size: $size !important;
}
}
diff --git a/app/assets/stylesheets/common/base/lightbox.scss b/app/assets/stylesheets/common/base/lightbox.scss
index 4f96f0592d7..06c32b1636c 100644
--- a/app/assets/stylesheets/common/base/lightbox.scss
+++ b/app/assets/stylesheets/common/base/lightbox.scss
@@ -36,14 +36,9 @@
white-space: nowrap;
text-overflow: ellipsis;
&:before {
- // ideally, the SVG used here should be in HTML and reference the SVG sprite
- content: svg-uri(
- ''
- );
+ font-family: "FontAwesome";
+ content: "\F03E";
margin-right: 5px;
- display: inline-block;
- vertical-align: middle;
- opacity: 0.8;
}
}
@@ -56,14 +51,11 @@
.expand {
position: absolute;
- bottom: 2px;
+ bottom: 4px;
right: 7px;
&:before {
- // ideally, the SVG used here should be in HTML and reference the SVG sprite
- content: svg-uri(
- ''
- );
- opacity: 0.8;
+ font-family: "FontAwesome";
+ content: "\F065";
}
}
}
diff --git a/app/assets/stylesheets/common/base/magnific-popup.scss b/app/assets/stylesheets/common/base/magnific-popup.scss
index 76ef9a84466..17395ed1003 100644
--- a/app/assets/stylesheets/common/base/magnific-popup.scss
+++ b/app/assets/stylesheets/common/base/magnific-popup.scss
@@ -499,7 +499,9 @@ button {
padding-right: 36px; // leave some space for counter at right side
// add the download icon
- a.image-source-link .d-icon {
+ a.image-source-link:before {
+ content: "\f019";
+ font-family: FontAwesome;
padding-right: 5px;
}
}
diff --git a/app/assets/stylesheets/common/base/menu-panel.scss b/app/assets/stylesheets/common/base/menu-panel.scss
index 5ac03f7445a..43c719778ad 100644
--- a/app/assets/stylesheets/common/base/menu-panel.scss
+++ b/app/assets/stylesheets/common/base/menu-panel.scss
@@ -153,7 +153,7 @@
// This is until other languages remove the HTML from within
// notifications. It can then be removed
- div .fa {
+ div i.fa {
display: none;
}
@@ -181,14 +181,17 @@
}
li:not(.show-all) {
padding: 0.25em 0.5em;
- .d-icon {
+ i {
float: left;
margin-right: 5px;
padding-top: 2px;
}
}
.is-warning {
- .d-icon-far-envelope {
+ .d-icon-envelope-o {
+ &:before {
+ content: "\f0e0";
+ }
color: $danger;
}
}
diff --git a/app/assets/stylesheets/common/base/onebox.scss b/app/assets/stylesheets/common/base/onebox.scss
index 09f20ee5c81..548b23cc84a 100644
--- a/app/assets/stylesheets/common/base/onebox.scss
+++ b/app/assets/stylesheets/common/base/onebox.scss
@@ -251,15 +251,14 @@ aside.onebox {
.instagram-video-icon {
&:before {
- opacity: 0.8;
- // ideally, the SVG used here should be in HTML and reference the SVG sprite
- content: svg-uri(
- ''
- );
+ font-family: FontAwesome;
+ font-size: $font-up-5;
+ content: "\f144";
}
bottom: 10px;
right: 10px;
position: absolute;
+ color: white;
}
.instagram-image {
diff --git a/app/assets/stylesheets/common/base/tagging.scss b/app/assets/stylesheets/common/base/tagging.scss
index 839dc3c3572..5c82fdbd59f 100644
--- a/app/assets/stylesheets/common/base/tagging.scss
+++ b/app/assets/stylesheets/common/base/tagging.scss
@@ -127,7 +127,7 @@ $tag-color: $primary-medium;
display: inline-block;
font-size: $font-down-1;
}
- .discourse-tags + .topic-featured-link {
+ .topic-featured-link {
margin-left: 8px;
}
}
@@ -169,14 +169,12 @@ $tag-color: $primary-medium;
.discourse-tag.bullet {
margin-right: 0.25em;
&:before {
- background: $primary-low-mid;
+ content: "\f04d";
+ font-family: FontAwesome;
+ color: $primary-low-mid;
margin-right: 5px;
+ font-size: $font-down-2;
position: relative;
- width: 8px;
- height: 8px;
- display: inline-block;
- vertical-align: middle;
- content: "";
}
}
diff --git a/app/assets/stylesheets/common/base/topic-admin-menu.scss b/app/assets/stylesheets/common/base/topic-admin-menu.scss
index 57b81ce1eb9..c8cf624aff2 100644
--- a/app/assets/stylesheets/common/base/topic-admin-menu.scss
+++ b/app/assets/stylesheets/common/base/topic-admin-menu.scss
@@ -28,6 +28,9 @@
button {
width: 100%;
margin-bottom: 5px;
+ i {
+ width: 14px;
+ }
}
}
diff --git a/app/assets/stylesheets/common/base/topic-post.scss b/app/assets/stylesheets/common/base/topic-post.scss
index a7385927c8e..2fb3e97c130 100644
--- a/app/assets/stylesheets/common/base/topic-post.scss
+++ b/app/assets/stylesheets/common/base/topic-post.scss
@@ -28,19 +28,14 @@
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
- vertical-align: middle;
a {
- vertical-align: middle;
color: dark-light-choose($primary-high, $secondary-low);
}
}
.fa {
font-size: $font-down-1;
- color: dark-light-choose($primary-medium, $secondary-medium);
- }
- .svg-icon-title {
margin-left: 3px;
- margin-right: 0px;
+ color: dark-light-choose($primary-medium, $secondary-medium);
}
.new_user a,
.user-title,
@@ -635,7 +630,7 @@ blockquote > *:last-child {
padding: 0.7em 0;
border-top: none;
margin-right: 11px;
- .d-icon {
+ i {
font-size: 2em;
width: 45px;
text-align: center;
@@ -747,7 +742,7 @@ a.mention-group {
overflow: hidden;
}
- > .fa {
+ > i.fa {
color: dark-light-choose($primary-medium, $secondary-medium);
margin-right: 6px;
font-size: $font-0;
@@ -840,6 +835,11 @@ a.mention-group {
display: none;
}
}
+ .names {
+ span {
+ display: block;
+ }
+ }
.user-title {
float: left;
clear: left;
diff --git a/app/assets/stylesheets/common/base/topic.scss b/app/assets/stylesheets/common/base/topic.scss
index 8b96b80a96b..9d3a10b8bd9 100644
--- a/app/assets/stylesheets/common/base/topic.scss
+++ b/app/assets/stylesheets/common/base/topic.scss
@@ -97,7 +97,7 @@ a.badge-category {
a.badge-category {
margin-top: 5px;
}
- a.edit-topic .d-icon {
+ a.edit-topic i {
font-size: 0.8em;
}
.edit-topic-title {
@@ -232,21 +232,21 @@ a.badge-category {
margin-left: 0.5em;
flex: 0 0 auto;
}
- .d-icon {
+ i {
font-size: $font-down-2;
margin: 0 0.5em 0 0;
}
}
}
a.reply-new {
- .d-icon {
+ i {
background: $secondary;
border-radius: 20px;
transition: all linear 0.15s;
}
&:hover {
color: $tertiary;
- .d-icon {
+ i {
background: $tertiary-low;
}
}
@@ -258,7 +258,11 @@ a.topic-featured-link {
text-transform: lowercase;
color: dark-light-choose($primary-medium, $secondary-medium);
font-size: 0.875rem;
- .d-icon {
- margin-right: 3px;
+ &::before {
+ position: relative;
+ top: 0.1em;
+ padding-right: 3px;
+ font-family: FontAwesome;
+ content: "\f08e";
}
}
diff --git a/app/assets/stylesheets/common/base/user.scss b/app/assets/stylesheets/common/base/user.scss
index c02c904f667..787e0246395 100644
--- a/app/assets/stylesheets/common/base/user.scss
+++ b/app/assets/stylesheets/common/base/user.scss
@@ -89,7 +89,7 @@
h1 {
font-size: $font-up-5;
font-weight: normal;
- .d-icon {
+ i {
font-size: 0.8em;
}
}
diff --git a/app/assets/stylesheets/common/components/buttons.scss b/app/assets/stylesheets/common/components/buttons.scss
index 7a56588cf8c..aa439bccbe6 100644
--- a/app/assets/stylesheets/common/components/buttons.scss
+++ b/app/assets/stylesheets/common/components/buttons.scss
@@ -158,6 +158,7 @@
}
&:before {
margin-right: 9px;
+ font-family: FontAwesome;
font-size: $font-0;
}
&.google,
@@ -165,28 +166,62 @@
background: $google;
color: #333;
border: 1px solid $primary-low;
- // non-FA SVG icon for Google in login-buttons.hbs
- .d-icon {
- opacity: 0.9;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ &:before {
+ content: "";
+ display: inline-block;
+ width: 15px;
+ height: 15px;
+ // Background image url needs to be encoded for IE11
+ background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cpath%20id%3D%22a%22%20d%3D%22M44.5%2020H24v8.5h11.8C34.7%2033.9%2030.1%2037%2024%2037c-7.2%200-13-5.8-13-13s5.8-13%2013-13c3.1%200%205.9%201.1%208.1%202.9l6.4-6.4C34.6%204.1%2029.6%202%2024%202%2011.8%202%202%2011.8%202%2024s9.8%2022%2022%2022c11%200%2021-8%2021-22%200-1.3-.2-2.7-.5-4z%22%2F%3E%3C%2Fdefs%3E%3CclipPath%20id%3D%22b%22%3E%3Cuse%20xlink%3Ahref%3D%22%23a%22%20overflow%3D%22visible%22%2F%3E%3C%2FclipPath%3E%3Cpath%20clip-path%3D%22url(%23b)%22%20fill%3D%22%23FBBC05%22%20d%3D%22M0%2037V11l17%2013z%22%2F%3E%3Cpath%20clip-path%3D%22url(%23b)%22%20fill%3D%22%23EA4335%22%20d%3D%22M0%2011l17%2013%207-6.1L48%2014V0H0z%22%2F%3E%3Cpath%20clip-path%3D%22url(%23b)%22%20fill%3D%22%2334A853%22%20d%3D%22M0%2037l30-23%207.9%201L48%200v48H0z%22%2F%3E%3Cpath%20clip-path%3D%22url(%23b)%22%20fill%3D%22%234285F4%22%20d%3D%22M48%2048L17%2024l-4-3%2035-10z%22%2F%3E%3C%2Fsvg%3E");
+ background-repeat: no-repeat;
+ background-size: cover;
+ }
+ }
+ .mobile-view & {
+ // Special case because we're using SVG here
+ &.google,
+ &.google_oauth2 {
+ &:before {
+ width: 17px;
+ height: 17px;
+ }
}
}
&.instagram {
background: $instagram;
+ &:before {
+ content: $fa-var-instagram;
+ }
}
&.facebook {
background: $facebook;
+ &:before {
+ content: $fa-var-facebook;
+ }
}
&.cas {
background: $cas;
}
&.twitter {
background: $twitter;
+ &:before {
+ content: $fa-var-twitter;
+ }
}
&.yahoo {
background: $yahoo;
+ &:before {
+ content: $fa-var-yahoo;
+ }
}
&.github {
background: $github;
+ &:before {
+ content: $fa-var-github;
+ }
}
}
diff --git a/app/assets/stylesheets/common/components/svg.scss b/app/assets/stylesheets/common/components/svg.scss
deleted file mode 100644
index 590d4e35ca2..00000000000
--- a/app/assets/stylesheets/common/components/svg.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-.svg-icon,
-.svg-icon-title {
- height: 1em;
- width: 1em;
- line-height: 1;
- display: inline-flex;
- position: relative;
- vertical-align: -0.125em;
- fill: currentColor;
- flex-shrink: 0; // Prevent the icon from shrinking if it's in a flexbox
- overflow: visible;
-
- &.d-icon-lock {
- height: 0.9em;
- width: 0.9em;
- }
-}
diff --git a/app/assets/stylesheets/common/components/user-stream-item.scss b/app/assets/stylesheets/common/components/user-stream-item.scss
index 39d7884d588..54c2f126a89 100644
--- a/app/assets/stylesheets/common/components/user-stream-item.scss
+++ b/app/assets/stylesheets/common/components/user-stream-item.scss
@@ -48,7 +48,7 @@
clear: right;
}
- .delete-info .d-icon {
+ .delete-info i {
font-size: $font-0;
}
diff --git a/app/assets/stylesheets/common/foundation/mixins.scss b/app/assets/stylesheets/common/foundation/mixins.scss
index a4fa84fcd68..44654bde653 100644
--- a/app/assets/stylesheets/common/foundation/mixins.scss
+++ b/app/assets/stylesheets/common/foundation/mixins.scss
@@ -86,60 +86,3 @@ $breakpoints: (
-moz-appearance: none;
appearance: none;
}
-
-@mixin fa-rotate($degrees, $rotation) {
- -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
- -webkit-transform: rotate($degrees);
- -ms-transform: rotate($degrees);
- transform: rotate($degrees);
-}
-
-/// Helper function to easily use an SVG inline in CSS
-/// without encoding it to base64, saving bytes.
-/// It also helps with browser support, especially for IE11.
-///
-/// @author Jakob Eriksen
-/// @link http://codepen.io/jakob-e/pen/doMoML
-/// @param {String} $svg - SVG image to encode
-/// @return {String} - Encoded SVG data uri
-@function svg-uri($svg) {
- $encoded: "";
- $slice: 2000;
- $index: 0;
- $loops: ceil(str-length($svg) / $slice);
-
- @for $i from 1 through $loops {
- $chunk: str-slice($svg, $index, $index + $slice - 1);
- $chunk: str-replace($chunk, '"', "'");
- $chunk: str-replace($chunk, "<", "%3C");
- $chunk: str-replace($chunk, ">", "%3E");
- $chunk: str-replace($chunk, "&", "%26");
- $chunk: str-replace($chunk, "#", "%23");
- $encoded: #{$encoded}#{$chunk};
- $index: $index + $slice;
- }
-
- @return url("data:image/svg+xml;charset=utf8,#{$encoded}");
-}
-
-/// Replace `$search` with `$replace` in `$string`
-/// @author Hugo Giraudel
-/// @link http://sassmeister.com/gist/1b4f2da5527830088e4d
-/// @param {String} $string - Initial string
-/// @param {String} $search - Substring to replace
-/// @param {String} $replace ('') - New value
-/// @return {String} - Updated string
-@function str-replace($string, $search, $replace: "") {
- $index: str-index($string, $search);
-
- @if $index {
- @return str-slice($string, 1, $index - 1) + $replace +
- str-replace(
- str-slice($string, $index + str-length($search)),
- $search,
- $replace
- );
- }
-
- @return $string;
-}
diff --git a/app/assets/stylesheets/common/printer-friendly.scss b/app/assets/stylesheets/common/printer-friendly.scss
index b60f1dc7d93..7a656553088 100644
--- a/app/assets/stylesheets/common/printer-friendly.scss
+++ b/app/assets/stylesheets/common/printer-friendly.scss
@@ -71,6 +71,9 @@
.gap {
width: auto;
}
+ .gutter {
+ padding: 0;
+ }
/* restyle div#topic-title */
#topic-title {
margin: 0;
diff --git a/app/assets/stylesheets/common/select-kit/mini-tag-chooser.scss b/app/assets/stylesheets/common/select-kit/mini-tag-chooser.scss
index 39db4c20eb0..339ec4bb152 100644
--- a/app/assets/stylesheets/common/select-kit/mini-tag-chooser.scss
+++ b/app/assets/stylesheets/common/select-kit/mini-tag-chooser.scss
@@ -79,13 +79,16 @@
box-shadow: 0 0 2px $danger, 0 1px 0 rgba(0, 0, 0, 0.05);
}
- .d-icon {
+ &:after {
+ content: "\f00d";
color: $primary-low-mid;
- vertical-align: middle;
+ font-family: "FontAwesome";
}
- &:hover .d-icon {
- color: $danger;
+ &:hover {
+ &:after {
+ color: $danger;
+ }
}
}
}
diff --git a/app/assets/stylesheets/common/select-kit/multi-select.scss b/app/assets/stylesheets/common/select-kit/multi-select.scss
index 58cfdef4bcd..10f0aeb5807 100644
--- a/app/assets/stylesheets/common/select-kit/multi-select.scss
+++ b/app/assets/stylesheets/common/select-kit/multi-select.scss
@@ -125,20 +125,25 @@
}
.selected-category {
- .body {
- display: flex;
- align-items: center;
- }
.badge-wrapper {
&.bullet {
margin-right: 2.5px;
}
+ margin: auto 2.5px;
padding: 2px 4px;
line-height: $line-height-medium;
display: flex;
flex: 1;
align-items: center;
+
+ &:after {
+ content: "\f00d";
+ color: $primary-low-mid;
+ font-family: "FontAwesome";
+ font-size: $font-down-2;
+ margin-left: 5px;
+ }
}
}
@@ -154,12 +159,19 @@
padding: 4px;
}
- .d-icon {
- color: $primary-low-mid;
- vertical-align: middle;
- }
- &:hover .d-icon {
- color: $danger;
+ .name {
+ &:after {
+ content: "\f00d";
+ color: $primary-low-mid;
+ font-family: "FontAwesome";
+ font-size: $font-down-2;
+ }
+
+ &:hover {
+ &:after {
+ color: $danger;
+ }
+ }
}
&.is-highlighted {
diff --git a/app/assets/stylesheets/common/topic-entrance.scss b/app/assets/stylesheets/common/topic-entrance.scss
index 63765d15948..4310fd2f040 100644
--- a/app/assets/stylesheets/common/topic-entrance.scss
+++ b/app/assets/stylesheets/common/topic-entrance.scss
@@ -13,9 +13,10 @@
width: 100%;
margin-bottom: 5px;
- .d-icon {
+ i {
display: block;
- margin: 2px auto;
+ margin-top: 2px;
+ margin-bottom: 2px;
transform: rotate(90deg);
}
}
diff --git a/app/assets/stylesheets/common/topic-timeline.scss b/app/assets/stylesheets/common/topic-timeline.scss
index d9b8628b5ee..253b89e2b98 100644
--- a/app/assets/stylesheets/common/topic-timeline.scss
+++ b/app/assets/stylesheets/common/topic-timeline.scss
@@ -119,7 +119,7 @@
.timeline-last-read {
right: 0;
margin-left: 0;
- .progress {
+ i.progress {
display: none;
}
}
@@ -194,7 +194,6 @@
.timeline-footer-controls {
margin-top: 1.5em;
transition: opacity 0.2s ease-in;
- display: flex;
button {
margin-right: 0.5em;
@@ -263,7 +262,8 @@
.timeline-last-read {
position: absolute;
margin-left: -0.35em;
- .progress {
+
+ i.progress {
font-size: 0.8em;
color: $tertiary;
margin-right: 1em;
@@ -281,6 +281,9 @@
display: inline-block;
color: dark-light-choose($primary-medium, $secondary-medium);
margin-top: 0.5em;
+ i {
+ margin-left: 0.15em;
+ }
}
}
}
diff --git a/app/assets/stylesheets/desktop/discourse.scss b/app/assets/stylesheets/desktop/discourse.scss
index aefaee51ff7..df19506ad8e 100644
--- a/app/assets/stylesheets/desktop/discourse.scss
+++ b/app/assets/stylesheets/desktop/discourse.scss
@@ -26,7 +26,7 @@ header {
margin: 0;
line-height: $line-height-small;
- .d-icon {
+ i {
font-size: $font-down-1;
}
}
diff --git a/app/assets/stylesheets/desktop/topic-list.scss b/app/assets/stylesheets/desktop/topic-list.scss
index 5f0f2c0a10d..4be9edfc3f7 100644
--- a/app/assets/stylesheets/desktop/topic-list.scss
+++ b/app/assets/stylesheets/desktop/topic-list.scss
@@ -33,10 +33,10 @@
// --------------------------------------------------
.topic-list-icons {
- .d-icon-thumbtack {
+ .d-icon-thumb-tack {
color: dark-light-choose($primary-medium, $secondary-medium);
}
- .d-icon-thumbtack.unpinned {
+ .d-icon-thumb-tack.unpinned {
color: dark-light-choose($primary-medium, $secondary-medium);
}
a.title {
@@ -242,7 +242,7 @@ button.dismiss-read {
span {
display: none;
}
- .d-icon {
+ i {
margin-right: 0;
}
}
diff --git a/app/assets/stylesheets/desktop/topic-post.scss b/app/assets/stylesheets/desktop/topic-post.scss
index 4cfb9a6b6ea..c2b7cae95b0 100644
--- a/app/assets/stylesheets/desktop/topic-post.scss
+++ b/app/assets/stylesheets/desktop/topic-post.scss
@@ -6,7 +6,7 @@
margin-left: 0;
}
-h1 .topic-statuses .topic-status .d-icon {
+h1 .topic-statuses .topic-status i {
font-size: 0.857em;
vertical-align: middle;
}
@@ -88,7 +88,7 @@ nav.post-controls {
.like-count {
font-size: $font-up-1;
margin-left: 0;
- .d-icon {
+ i.d-icon {
padding-left: 10px;
color: dark-light-choose($primary-low-mid, $secondary-high);
}
@@ -145,7 +145,7 @@ nav.post-controls {
color: $primary;
}
}
- .d-icon {
+ i {
margin-left: 5px;
font-size: $font-down-1;
}
@@ -155,7 +155,7 @@ nav.post-controls {
color: dark-light-choose($primary-high, $secondary-low);
margin-left: 10px;
}
- .create .d-icon {
+ .create i {
margin-right: 5px;
}
button {
@@ -369,7 +369,7 @@ nav.post-controls {
line-height: $line-height-large;
}
.number,
- .d-icon {
+ i {
color: dark-light-choose($primary-high, $secondary-low);
font-size: $font-up-2;
line-height: $line-height-medium;
@@ -461,7 +461,7 @@ nav.post-controls {
#suggested-topics .topic-statuses .topic-status {
padding: 0;
- .d-icon {
+ i {
font-size: 1em;
}
}
@@ -515,7 +515,7 @@ video {
animation: fadein 0.7s;
}
.topic-statuses {
- .d-icon {
+ i {
color: $header_primary;
}
.d-icon-envelope {
@@ -806,7 +806,7 @@ $topic-avatar-width: 45px;
font-size: $font-up-4;
color: $primary;
margin-bottom: 5px;
- .d-icon {
+ i {
margin-right: 7px;
}
}
@@ -815,11 +815,24 @@ $topic-avatar-width: 45px;
a.attachment:before {
display: inline-block;
margin-right: 4px;
- // ideally, the SVG used here should be in HTML and reference the SVG sprite
- content: svg-uri(
- ''
- );
- vertical-align: middle;
+ font-family: "FontAwesome";
+ content: "\f019";
+}
+
+.private_message .gutter,
+.deleted-topic .gutter,
+.read_restricted .gutter {
+ position: relative;
+}
+
+.deleted-topic .gutter:before {
+ display: block;
+ position: absolute;
+ left: 767px;
+ color: rgba($primary-low, 0.8);
+ font: 6.429em/1 FontAwesome;
+ content: "\f014";
+ z-index: z("base");
}
.topic-meta-data {
@@ -886,6 +899,9 @@ span.highlighted {
/* Tablet (portrait) ----------- */
@media all and (max-width: 775px) {
+ .gutter {
+ display: none;
+ }
.topic-avatar {
width: 45px;
}
diff --git a/app/assets/stylesheets/desktop/topic.scss b/app/assets/stylesheets/desktop/topic.scss
index d7a7ce8981e..cfcdbc1714d 100644
--- a/app/assets/stylesheets/desktop/topic.scss
+++ b/app/assets/stylesheets/desktop/topic.scss
@@ -102,7 +102,7 @@
button.full {
width: 100%;
margin-bottom: 5px;
- .d-icon {
+ i {
display: block;
margin-top: 2px;
margin-bottom: 2px;
diff --git a/app/assets/stylesheets/desktop/user-card.scss b/app/assets/stylesheets/desktop/user-card.scss
index 54893e04e10..4000b275c43 100644
--- a/app/assets/stylesheets/desktop/user-card.scss
+++ b/app/assets/stylesheets/desktop/user-card.scss
@@ -81,7 +81,7 @@ $user_card_background: $secondary;
a {
color: $user_card_primary;
}
- .d-icon {
+ i {
font-size: $font-down-1;
color: $user_card_primary;
}
@@ -185,7 +185,7 @@ $user_card_background: $secondary;
max-width: 90%;
overflow: hidden;
align-items: baseline;
- .d-icon {
+ i {
margin-right: 0.25em;
}
}
@@ -224,7 +224,7 @@ $user_card_background: $secondary;
background-position: center;
background-size: $size;
color: $primary;
- .d-icon {
+ i {
margin: auto;
font-size: $size / 1.5 !important;
}
diff --git a/app/assets/stylesheets/mobile/compose.scss b/app/assets/stylesheets/mobile/compose.scss
index 14c5e8ede2e..450d568e403 100644
--- a/app/assets/stylesheets/mobile/compose.scss
+++ b/app/assets/stylesheets/mobile/compose.scss
@@ -172,8 +172,4 @@
.add-warning {
margin: 0 0 5px 5px;
}
-
- .whisper {
- margin-right: 5px;
- }
}
diff --git a/app/assets/stylesheets/mobile/discourse.scss b/app/assets/stylesheets/mobile/discourse.scss
index cbfb4f62777..e211ebc25b7 100644
--- a/app/assets/stylesheets/mobile/discourse.scss
+++ b/app/assets/stylesheets/mobile/discourse.scss
@@ -48,7 +48,7 @@ blockquote {
display: inline-block;
.topic-status {
- .d-icon {
+ i {
color: $secondary-high;
}
}
diff --git a/app/assets/stylesheets/mobile/header.scss b/app/assets/stylesheets/mobile/header.scss
index 5147d2c6570..e4d2abb9040 100644
--- a/app/assets/stylesheets/mobile/header.scss
+++ b/app/assets/stylesheets/mobile/header.scss
@@ -54,6 +54,6 @@
display: none;
}
-.search-link .topic-statuses .topic-status .d-icon {
+.search-link .topic-statuses .topic-status i {
font-size: $font-0;
}
diff --git a/app/assets/stylesheets/mobile/topic-list.scss b/app/assets/stylesheets/mobile/topic-list.scss
index 319c94324b0..ba1c8962169 100644
--- a/app/assets/stylesheets/mobile/topic-list.scss
+++ b/app/assets/stylesheets/mobile/topic-list.scss
@@ -67,7 +67,7 @@
flex-wrap: wrap;
width: 100%;
.edit-category {
- .d-icon {
+ i {
margin: 0;
}
@media screen and (max-width: 374px) {
@@ -162,7 +162,7 @@
font-size: $font-0;
line-height: $line-height-small;
padding: 0.15em 0.4em 0.2em 0.4em;
- .d-icon {
+ i {
color: $secondary;
}
@@ -276,7 +276,7 @@ tr.category-topic-link {
display: inline-block;
font-size: $font-up-2;
margin: 0 0 0 10px;
- .d-icon {
+ i {
margin-right: 5px;
}
a[href] {
diff --git a/app/assets/stylesheets/mobile/topic-post.scss b/app/assets/stylesheets/mobile/topic-post.scss
index e5126d27fd6..9f3414436fc 100644
--- a/app/assets/stylesheets/mobile/topic-post.scss
+++ b/app/assets/stylesheets/mobile/topic-post.scss
@@ -52,7 +52,7 @@ span.badge-posts {
max-width: unset;
margin-right: 0;
padding: 8px 9px 8px 8px;
- .d-icon {
+ i {
padding-left: 8px;
}
}
@@ -189,7 +189,7 @@ a.reply-to-tab {
line-height: $line-height-medium;
}
.number,
- .d-icon {
+ i {
color: dark-light-choose($primary-high, $secondary-low);
font-size: $font-up-1;
}
@@ -402,6 +402,10 @@ blockquote {
padding: 0.25em 0;
}
+.gutter {
+ display: none;
+}
+
.posts-wrapper {
position: relative;
}
diff --git a/app/assets/stylesheets/mobile/topic.scss b/app/assets/stylesheets/mobile/topic.scss
index 1a3c493c885..d9870cce6cc 100644
--- a/app/assets/stylesheets/mobile/topic.scss
+++ b/app/assets/stylesheets/mobile/topic.scss
@@ -78,7 +78,7 @@
button.full {
width: 100%;
margin-bottom: 5px;
- .d-icon {
+ i {
display: block;
margin-top: 2px;
margin-bottom: 2px;
diff --git a/app/assets/stylesheets/vendor/font_awesome/_animated.scss b/app/assets/stylesheets/vendor/font_awesome/_animated.scss
new file mode 100644
index 00000000000..8a020dbfff7
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_animated.scss
@@ -0,0 +1,34 @@
+// Spinning Icons
+// --------------------------
+
+.#{$fa-css-prefix}-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+
+.#{$fa-css-prefix}-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
diff --git a/app/assets/stylesheets/vendor/font_awesome/_bordered-pulled.scss b/app/assets/stylesheets/vendor/font_awesome/_bordered-pulled.scss
new file mode 100644
index 00000000000..d4b85a02f24
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_bordered-pulled.scss
@@ -0,0 +1,25 @@
+// Bordered & Pulled
+// -------------------------
+
+.#{$fa-css-prefix}-border {
+ padding: .2em .25em .15em;
+ border: solid .08em $fa-border-color;
+ border-radius: .1em;
+}
+
+.#{$fa-css-prefix}-pull-left { float: left; }
+.#{$fa-css-prefix}-pull-right { float: right; }
+
+.#{$fa-css-prefix} {
+ &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
+ &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
+}
+
+/* Deprecated as of 4.4.0 */
+.pull-right { float: right; }
+.pull-left { float: left; }
+
+.#{$fa-css-prefix} {
+ &.pull-left { margin-right: .3em; }
+ &.pull-right { margin-left: .3em; }
+}
diff --git a/app/assets/stylesheets/vendor/font_awesome/_core.scss b/app/assets/stylesheets/vendor/font_awesome/_core.scss
new file mode 100644
index 00000000000..7425ef85fc8
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_core.scss
@@ -0,0 +1,12 @@
+// Base Class Definition
+// -------------------------
+
+.#{$fa-css-prefix} {
+ display: inline-block;
+ font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
+ font-size: inherit; // can't have font-size inherit on line above, so need to override
+ text-rendering: auto; // optimizelegibility throws things off #1094
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+
+}
diff --git a/app/assets/stylesheets/vendor/font_awesome/_fixed-width.scss b/app/assets/stylesheets/vendor/font_awesome/_fixed-width.scss
new file mode 100644
index 00000000000..b221c98133a
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_fixed-width.scss
@@ -0,0 +1,6 @@
+// Fixed Width Icons
+// -------------------------
+.#{$fa-css-prefix}-fw {
+ width: (18em / 14);
+ text-align: center;
+}
diff --git a/app/assets/stylesheets/vendor/font_awesome/_icons.scss b/app/assets/stylesheets/vendor/font_awesome/_icons.scss
new file mode 100644
index 00000000000..e63e702c4d9
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_icons.scss
@@ -0,0 +1,789 @@
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+
+.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }
+.#{$fa-css-prefix}-music:before { content: $fa-var-music; }
+.#{$fa-css-prefix}-search:before { content: $fa-var-search; }
+.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }
+.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }
+.#{$fa-css-prefix}-star:before { content: $fa-var-star; }
+.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }
+.#{$fa-css-prefix}-user:before { content: $fa-var-user; }
+.#{$fa-css-prefix}-film:before { content: $fa-var-film; }
+.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }
+.#{$fa-css-prefix}-th:before { content: $fa-var-th; }
+.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }
+.#{$fa-css-prefix}-check:before { content: $fa-var-check; }
+.#{$fa-css-prefix}-remove:before,
+.#{$fa-css-prefix}-close:before,
+.#{$fa-css-prefix}-times:before { content: $fa-var-times; }
+.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }
+.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }
+.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }
+.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }
+.#{$fa-css-prefix}-gear:before,
+.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }
+.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }
+.#{$fa-css-prefix}-home:before { content: $fa-var-home; }
+.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }
+.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }
+.#{$fa-css-prefix}-road:before { content: $fa-var-road; }
+.#{$fa-css-prefix}-download:before { content: $fa-var-download; }
+.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }
+.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }
+.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }
+.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }
+.#{$fa-css-prefix}-rotate-right:before,
+.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }
+.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }
+.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }
+.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }
+.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }
+.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }
+.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }
+.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }
+.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }
+.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }
+.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }
+.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }
+.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }
+.#{$fa-css-prefix}-book:before { content: $fa-var-book; }
+.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }
+.#{$fa-css-prefix}-print:before { content: $fa-var-print; }
+.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }
+.#{$fa-css-prefix}-font:before { content: $fa-var-font; }
+.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }
+.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }
+.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }
+.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }
+.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }
+.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }
+.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }
+.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }
+.#{$fa-css-prefix}-list:before { content: $fa-var-list; }
+.#{$fa-css-prefix}-dedent:before,
+.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }
+.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }
+.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }
+.#{$fa-css-prefix}-photo:before,
+.#{$fa-css-prefix}-image:before,
+.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }
+.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }
+.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }
+.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }
+.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }
+.#{$fa-css-prefix}-edit:before,
+.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }
+.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }
+.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }
+.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }
+.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }
+.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }
+.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }
+.#{$fa-css-prefix}-play:before { content: $fa-var-play; }
+.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }
+.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }
+.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }
+.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }
+.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }
+.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }
+.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }
+.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }
+.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }
+.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }
+.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }
+.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }
+.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }
+.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }
+.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }
+.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }
+.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }
+.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }
+.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }
+.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }
+.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }
+.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }
+.#{$fa-css-prefix}-mail-forward:before,
+.#{$fa-css-prefix}-share:before { content: $fa-var-share; }
+.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }
+.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }
+.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }
+.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }
+.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }
+.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }
+.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }
+.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }
+.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }
+.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }
+.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }
+.#{$fa-css-prefix}-warning:before,
+.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }
+.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }
+.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }
+.#{$fa-css-prefix}-random:before { content: $fa-var-random; }
+.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }
+.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }
+.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }
+.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }
+.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }
+.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }
+.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }
+.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }
+.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }
+.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }
+.#{$fa-css-prefix}-bar-chart-o:before,
+.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }
+.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }
+.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }
+.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }
+.#{$fa-css-prefix}-key:before { content: $fa-var-key; }
+.#{$fa-css-prefix}-gears:before,
+.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }
+.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }
+.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }
+.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }
+.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }
+.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }
+.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }
+.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }
+.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }
+.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }
+.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }
+.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }
+.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }
+.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }
+.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }
+.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }
+.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }
+.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }
+.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }
+.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }
+.#{$fa-css-prefix}-facebook-f:before,
+.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }
+.#{$fa-css-prefix}-github:before { content: $fa-var-github; }
+.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }
+.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }
+.#{$fa-css-prefix}-feed:before,
+.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }
+.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }
+.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }
+.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }
+.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }
+.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }
+.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }
+.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }
+.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }
+.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }
+.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }
+.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }
+.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }
+.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }
+.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }
+.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }
+.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }
+.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }
+.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }
+.#{$fa-css-prefix}-group:before,
+.#{$fa-css-prefix}-users:before { content: $fa-var-users; }
+.#{$fa-css-prefix}-chain:before,
+.#{$fa-css-prefix}-link:before { content: $fa-var-link; }
+.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }
+.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }
+.#{$fa-css-prefix}-cut:before,
+.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }
+.#{$fa-css-prefix}-copy:before,
+.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }
+.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }
+.#{$fa-css-prefix}-save:before,
+.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }
+.#{$fa-css-prefix}-square:before { content: $fa-var-square; }
+.#{$fa-css-prefix}-navicon:before,
+.#{$fa-css-prefix}-reorder:before,
+.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }
+.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }
+.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }
+.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }
+.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }
+.#{$fa-css-prefix}-table:before { content: $fa-var-table; }
+.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }
+.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }
+.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }
+.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }
+.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }
+.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }
+.#{$fa-css-prefix}-money:before { content: $fa-var-money; }
+.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }
+.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }
+.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }
+.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }
+.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }
+.#{$fa-css-prefix}-unsorted:before,
+.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }
+.#{$fa-css-prefix}-sort-down:before,
+.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }
+.#{$fa-css-prefix}-sort-up:before,
+.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }
+.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }
+.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }
+.#{$fa-css-prefix}-rotate-left:before,
+.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }
+.#{$fa-css-prefix}-legal:before,
+.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }
+.#{$fa-css-prefix}-dashboard:before,
+.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }
+.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }
+.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }
+.#{$fa-css-prefix}-flash:before,
+.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }
+.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }
+.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }
+.#{$fa-css-prefix}-paste:before,
+.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }
+.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }
+.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }
+.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }
+.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }
+.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }
+.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }
+.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }
+.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }
+.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }
+.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }
+.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }
+.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }
+.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }
+.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }
+.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }
+.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }
+.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }
+.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }
+.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }
+.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }
+.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }
+.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }
+.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }
+.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }
+.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }
+.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }
+.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }
+.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }
+.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }
+.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }
+.#{$fa-css-prefix}-mobile-phone:before,
+.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }
+.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }
+.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }
+.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }
+.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }
+.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }
+.#{$fa-css-prefix}-mail-reply:before,
+.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }
+.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }
+.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }
+.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }
+.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }
+.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }
+.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }
+.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }
+.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }
+.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }
+.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }
+.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }
+.#{$fa-css-prefix}-code:before { content: $fa-var-code; }
+.#{$fa-css-prefix}-mail-reply-all:before,
+.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }
+.#{$fa-css-prefix}-star-half-empty:before,
+.#{$fa-css-prefix}-star-half-full:before,
+.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }
+.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }
+.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }
+.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }
+.#{$fa-css-prefix}-unlink:before,
+.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }
+.#{$fa-css-prefix}-question:before { content: $fa-var-question; }
+.#{$fa-css-prefix}-info:before { content: $fa-var-info; }
+.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }
+.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }
+.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }
+.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }
+.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }
+.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }
+.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }
+.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }
+.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }
+.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }
+.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }
+.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }
+.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }
+.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }
+.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }
+.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }
+.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }
+.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }
+.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }
+.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }
+.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }
+.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }
+.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }
+.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }
+.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }
+.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }
+.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }
+.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }
+.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }
+.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }
+.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }
+.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }
+.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }
+.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }
+.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }
+.#{$fa-css-prefix}-toggle-down:before,
+.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }
+.#{$fa-css-prefix}-toggle-up:before,
+.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }
+.#{$fa-css-prefix}-toggle-right:before,
+.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }
+.#{$fa-css-prefix}-euro:before,
+.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }
+.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }
+.#{$fa-css-prefix}-dollar:before,
+.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }
+.#{$fa-css-prefix}-rupee:before,
+.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }
+.#{$fa-css-prefix}-cny:before,
+.#{$fa-css-prefix}-rmb:before,
+.#{$fa-css-prefix}-yen:before,
+.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }
+.#{$fa-css-prefix}-ruble:before,
+.#{$fa-css-prefix}-rouble:before,
+.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }
+.#{$fa-css-prefix}-won:before,
+.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }
+.#{$fa-css-prefix}-bitcoin:before,
+.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }
+.#{$fa-css-prefix}-file:before { content: $fa-var-file; }
+.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }
+.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }
+.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }
+.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }
+.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }
+.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }
+.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }
+.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }
+.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }
+.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }
+.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }
+.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }
+.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }
+.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }
+.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }
+.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }
+.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }
+.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }
+.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }
+.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }
+.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }
+.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }
+.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }
+.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }
+.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }
+.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }
+.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }
+.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }
+.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }
+.#{$fa-css-prefix}-android:before { content: $fa-var-android; }
+.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }
+.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }
+.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }
+.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }
+.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }
+.#{$fa-css-prefix}-female:before { content: $fa-var-female; }
+.#{$fa-css-prefix}-male:before { content: $fa-var-male; }
+.#{$fa-css-prefix}-gittip:before,
+.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }
+.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }
+.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }
+.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }
+.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }
+.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }
+.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }
+.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }
+.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }
+.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }
+.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }
+.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }
+.#{$fa-css-prefix}-toggle-left:before,
+.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }
+.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }
+.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }
+.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }
+.#{$fa-css-prefix}-turkish-lira:before,
+.#{$fa-css-prefix}-try:before { content: $fa-var-try; }
+.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }
+.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }
+.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }
+.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }
+.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }
+.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }
+.#{$fa-css-prefix}-institution:before,
+.#{$fa-css-prefix}-bank:before,
+.#{$fa-css-prefix}-university:before { content: $fa-var-university; }
+.#{$fa-css-prefix}-mortar-board:before,
+.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }
+.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }
+.#{$fa-css-prefix}-google:before { content: $fa-var-google; }
+.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }
+.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }
+.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }
+.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }
+.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }
+.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }
+.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }
+.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }
+.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }
+.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }
+.#{$fa-css-prefix}-language:before { content: $fa-var-language; }
+.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }
+.#{$fa-css-prefix}-building:before { content: $fa-var-building; }
+.#{$fa-css-prefix}-child:before { content: $fa-var-child; }
+.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }
+.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }
+.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }
+.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }
+.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }
+.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }
+.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }
+.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }
+.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }
+.#{$fa-css-prefix}-automobile:before,
+.#{$fa-css-prefix}-car:before { content: $fa-var-car; }
+.#{$fa-css-prefix}-cab:before,
+.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }
+.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }
+.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }
+.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }
+.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }
+.#{$fa-css-prefix}-database:before { content: $fa-var-database; }
+.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }
+.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }
+.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }
+.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }
+.#{$fa-css-prefix}-file-photo-o:before,
+.#{$fa-css-prefix}-file-picture-o:before,
+.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }
+.#{$fa-css-prefix}-file-zip-o:before,
+.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }
+.#{$fa-css-prefix}-file-sound-o:before,
+.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }
+.#{$fa-css-prefix}-file-movie-o:before,
+.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }
+.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }
+.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }
+.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }
+.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }
+.#{$fa-css-prefix}-life-bouy:before,
+.#{$fa-css-prefix}-life-buoy:before,
+.#{$fa-css-prefix}-life-saver:before,
+.#{$fa-css-prefix}-support:before,
+.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }
+.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }
+.#{$fa-css-prefix}-ra:before,
+.#{$fa-css-prefix}-resistance:before,
+.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }
+.#{$fa-css-prefix}-ge:before,
+.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }
+.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }
+.#{$fa-css-prefix}-git:before { content: $fa-var-git; }
+.#{$fa-css-prefix}-y-combinator-square:before,
+.#{$fa-css-prefix}-yc-square:before,
+.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }
+.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }
+.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }
+.#{$fa-css-prefix}-wechat:before,
+.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }
+.#{$fa-css-prefix}-send:before,
+.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }
+.#{$fa-css-prefix}-send-o:before,
+.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }
+.#{$fa-css-prefix}-history:before { content: $fa-var-history; }
+.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }
+.#{$fa-css-prefix}-header:before { content: $fa-var-header; }
+.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }
+.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }
+.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }
+.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }
+.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }
+.#{$fa-css-prefix}-soccer-ball-o:before,
+.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }
+.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }
+.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }
+.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }
+.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }
+.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }
+.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }
+.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }
+.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }
+.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }
+.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }
+.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }
+.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }
+.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }
+.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }
+.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }
+.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }
+.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }
+.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }
+.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }
+.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }
+.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }
+.#{$fa-css-prefix}-at:before { content: $fa-var-at; }
+.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }
+.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }
+.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }
+.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }
+.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }
+.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }
+.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }
+.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }
+.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }
+.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }
+.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }
+.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }
+.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }
+.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }
+.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }
+.#{$fa-css-prefix}-shekel:before,
+.#{$fa-css-prefix}-sheqel:before,
+.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }
+.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }
+.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }
+.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }
+.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }
+.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }
+.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }
+.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }
+.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }
+.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }
+.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }
+.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }
+.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }
+.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }
+.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }
+.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }
+.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }
+.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }
+.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }
+.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }
+.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }
+.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }
+.#{$fa-css-prefix}-intersex:before,
+.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }
+.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }
+.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }
+.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }
+.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }
+.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }
+.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }
+.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }
+.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }
+.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }
+.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }
+.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }
+.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }
+.#{$fa-css-prefix}-server:before { content: $fa-var-server; }
+.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }
+.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }
+.#{$fa-css-prefix}-hotel:before,
+.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }
+.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }
+.#{$fa-css-prefix}-train:before { content: $fa-var-train; }
+.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }
+.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }
+.#{$fa-css-prefix}-yc:before,
+.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }
+.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }
+.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }
+.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }
+.#{$fa-css-prefix}-battery-4:before,
+.#{$fa-css-prefix}-battery:before,
+.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }
+.#{$fa-css-prefix}-battery-3:before,
+.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }
+.#{$fa-css-prefix}-battery-2:before,
+.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }
+.#{$fa-css-prefix}-battery-1:before,
+.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }
+.#{$fa-css-prefix}-battery-0:before,
+.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }
+.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }
+.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }
+.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }
+.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }
+.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }
+.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }
+.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }
+.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }
+.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }
+.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }
+.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }
+.#{$fa-css-prefix}-hourglass-1:before,
+.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }
+.#{$fa-css-prefix}-hourglass-2:before,
+.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }
+.#{$fa-css-prefix}-hourglass-3:before,
+.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }
+.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }
+.#{$fa-css-prefix}-hand-grab-o:before,
+.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }
+.#{$fa-css-prefix}-hand-stop-o:before,
+.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }
+.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }
+.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }
+.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }
+.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }
+.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }
+.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }
+.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }
+.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }
+.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }
+.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }
+.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }
+.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }
+.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }
+.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }
+.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }
+.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }
+.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }
+.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }
+.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }
+.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }
+.#{$fa-css-prefix}-tv:before,
+.#{$fa-css-prefix}-television:before { content: $fa-var-television; }
+.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }
+.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }
+.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }
+.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }
+.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }
+.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }
+.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }
+.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }
+.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }
+.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }
+.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }
+.#{$fa-css-prefix}-map:before { content: $fa-var-map; }
+.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }
+.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }
+.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }
+.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }
+.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }
+.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }
+.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }
+.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }
+.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }
+.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }
+.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }
+.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }
+.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }
+.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }
+.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }
+.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }
+.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }
+.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }
+.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }
+.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }
+.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }
+.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }
+.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }
+.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }
+.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }
+.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }
+.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }
+.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }
+.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }
+.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }
+.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }
+.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }
+.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }
+.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }
+.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }
+.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }
+.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }
+.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }
+.#{$fa-css-prefix}-asl-interpreting:before,
+.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }
+.#{$fa-css-prefix}-deafness:before,
+.#{$fa-css-prefix}-hard-of-hearing:before,
+.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }
+.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }
+.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }
+.#{$fa-css-prefix}-signing:before,
+.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }
+.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }
+.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }
+.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }
+.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }
+.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }
+.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }
+.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }
+.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }
+.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }
+.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }
+.#{$fa-css-prefix}-google-plus-circle:before,
+.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }
+.#{$fa-css-prefix}-fa:before,
+.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }
+.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; }
+.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; }
+.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; }
+.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; }
+.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; }
+.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; }
+.#{$fa-css-prefix}-vcard:before,
+.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; }
+.#{$fa-css-prefix}-vcard-o:before,
+.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; }
+.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; }
+.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; }
+.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; }
+.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; }
+.#{$fa-css-prefix}-drivers-license:before,
+.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; }
+.#{$fa-css-prefix}-drivers-license-o:before,
+.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; }
+.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; }
+.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; }
+.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; }
+.#{$fa-css-prefix}-thermometer-4:before,
+.#{$fa-css-prefix}-thermometer:before,
+.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; }
+.#{$fa-css-prefix}-thermometer-3:before,
+.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; }
+.#{$fa-css-prefix}-thermometer-2:before,
+.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; }
+.#{$fa-css-prefix}-thermometer-1:before,
+.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; }
+.#{$fa-css-prefix}-thermometer-0:before,
+.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; }
+.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; }
+.#{$fa-css-prefix}-bathtub:before,
+.#{$fa-css-prefix}-s15:before,
+.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; }
+.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; }
+.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; }
+.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; }
+.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; }
+.#{$fa-css-prefix}-times-rectangle:before,
+.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; }
+.#{$fa-css-prefix}-times-rectangle-o:before,
+.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; }
+.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; }
+.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; }
+.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; }
+.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; }
+.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; }
+.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; }
+.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; }
+.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; }
+.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; }
+.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; }
+.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; }
diff --git a/app/assets/stylesheets/vendor/font_awesome/_larger.scss b/app/assets/stylesheets/vendor/font_awesome/_larger.scss
new file mode 100644
index 00000000000..41e9a8184aa
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_larger.scss
@@ -0,0 +1,13 @@
+// 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: -15%;
+}
+.#{$fa-css-prefix}-2x { font-size: 2em; }
+.#{$fa-css-prefix}-3x { font-size: 3em; }
+.#{$fa-css-prefix}-4x { font-size: 4em; }
+.#{$fa-css-prefix}-5x { font-size: 5em; }
diff --git a/app/assets/stylesheets/vendor/font_awesome/_list.scss b/app/assets/stylesheets/vendor/font_awesome/_list.scss
new file mode 100644
index 00000000000..7d1e4d54d6c
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_list.scss
@@ -0,0 +1,19 @@
+// List Icons
+// -------------------------
+
+.#{$fa-css-prefix}-ul {
+ padding-left: 0;
+ margin-left: $fa-li-width;
+ list-style-type: none;
+ > li { position: relative; }
+}
+.#{$fa-css-prefix}-li {
+ position: absolute;
+ left: -$fa-li-width;
+ width: $fa-li-width;
+ top: (2em / 14);
+ text-align: center;
+ &.#{$fa-css-prefix}-lg {
+ left: -$fa-li-width + (4em / 14);
+ }
+}
diff --git a/app/assets/stylesheets/vendor/font_awesome/_mixins.scss b/app/assets/stylesheets/vendor/font_awesome/_mixins.scss
new file mode 100644
index 00000000000..c3bbd5745d3
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_mixins.scss
@@ -0,0 +1,60 @@
+// Mixins
+// --------------------------
+
+@mixin fa-icon() {
+ display: inline-block;
+ font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
+ font-size: inherit; // can't have font-size inherit on line above, so need to override
+ text-rendering: auto; // optimizelegibility throws things off #1094
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+
+}
+
+@mixin fa-icon-rotate($degrees, $rotation) {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
+ -webkit-transform: rotate($degrees);
+ -ms-transform: rotate($degrees);
+ transform: rotate($degrees);
+}
+
+@mixin fa-icon-flip($horiz, $vert, $rotation) {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
+ -webkit-transform: scale($horiz, $vert);
+ -ms-transform: scale($horiz, $vert);
+ 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 {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0,0,0,0);
+ border: 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 {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+ }
+}
diff --git a/app/assets/stylesheets/vendor/font_awesome/_path.scss b/app/assets/stylesheets/vendor/font_awesome/_path.scss
new file mode 100644
index 00000000000..bb457c23a8e
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_path.scss
@@ -0,0 +1,15 @@
+/* FONT PATH
+ * -------------------------- */
+
+@font-face {
+ font-family: 'FontAwesome';
+ src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
+ src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
+ url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
+ url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
+ url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
+ url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
+// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
+ font-weight: normal;
+ font-style: normal;
+}
diff --git a/app/assets/stylesheets/vendor/font_awesome/_rotated-flipped.scss b/app/assets/stylesheets/vendor/font_awesome/_rotated-flipped.scss
new file mode 100644
index 00000000000..a3558fd09ca
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_rotated-flipped.scss
@@ -0,0 +1,20 @@
+// Rotated & Flipped 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); }
+
+// Hook for IE8-9
+// -------------------------
+
+:root .#{$fa-css-prefix}-rotate-90,
+:root .#{$fa-css-prefix}-rotate-180,
+:root .#{$fa-css-prefix}-rotate-270,
+:root .#{$fa-css-prefix}-flip-horizontal,
+:root .#{$fa-css-prefix}-flip-vertical {
+ filter: none;
+}
diff --git a/app/assets/stylesheets/vendor/font_awesome/_screen-reader.scss b/app/assets/stylesheets/vendor/font_awesome/_screen-reader.scss
new file mode 100644
index 00000000000..637426f0da6
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_screen-reader.scss
@@ -0,0 +1,5 @@
+// Screen Readers
+// -------------------------
+
+.sr-only { @include sr-only(); }
+.sr-only-focusable { @include sr-only-focusable(); }
diff --git a/app/assets/stylesheets/vendor/font_awesome/_stacked.scss b/app/assets/stylesheets/vendor/font_awesome/_stacked.scss
new file mode 100644
index 00000000000..aef7403660c
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_stacked.scss
@@ -0,0 +1,20 @@
+// Stacked Icons
+// -------------------------
+
+.#{$fa-css-prefix}-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+.#{$fa-css-prefix}-stack-1x { line-height: inherit; }
+.#{$fa-css-prefix}-stack-2x { font-size: 2em; }
+.#{$fa-css-prefix}-inverse { color: $fa-inverse; }
diff --git a/app/assets/stylesheets/vendor/font_awesome/_variables.scss b/app/assets/stylesheets/vendor/font_awesome/_variables.scss
new file mode 100644
index 00000000000..498fc4a087c
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/_variables.scss
@@ -0,0 +1,800 @@
+// Variables
+// --------------------------
+
+$fa-font-path: "../fonts" !default;
+$fa-font-size-base: 14px !default;
+$fa-line-height-base: 1 !default;
+//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly
+$fa-css-prefix: fa !default;
+$fa-version: "4.7.0" !default;
+$fa-border-color: #eee !default;
+$fa-inverse: #fff !default;
+$fa-li-width: (30em / 14) !default;
+
+$fa-var-500px: "\f26e";
+$fa-var-address-book: "\f2b9";
+$fa-var-address-book-o: "\f2ba";
+$fa-var-address-card: "\f2bb";
+$fa-var-address-card-o: "\f2bc";
+$fa-var-adjust: "\f042";
+$fa-var-adn: "\f170";
+$fa-var-align-center: "\f037";
+$fa-var-align-justify: "\f039";
+$fa-var-align-left: "\f036";
+$fa-var-align-right: "\f038";
+$fa-var-amazon: "\f270";
+$fa-var-ambulance: "\f0f9";
+$fa-var-american-sign-language-interpreting: "\f2a3";
+$fa-var-anchor: "\f13d";
+$fa-var-android: "\f17b";
+$fa-var-angellist: "\f209";
+$fa-var-angle-double-down: "\f103";
+$fa-var-angle-double-left: "\f100";
+$fa-var-angle-double-right: "\f101";
+$fa-var-angle-double-up: "\f102";
+$fa-var-angle-down: "\f107";
+$fa-var-angle-left: "\f104";
+$fa-var-angle-right: "\f105";
+$fa-var-angle-up: "\f106";
+$fa-var-apple: "\f179";
+$fa-var-archive: "\f187";
+$fa-var-area-chart: "\f1fe";
+$fa-var-arrow-circle-down: "\f0ab";
+$fa-var-arrow-circle-left: "\f0a8";
+$fa-var-arrow-circle-o-down: "\f01a";
+$fa-var-arrow-circle-o-left: "\f190";
+$fa-var-arrow-circle-o-right: "\f18e";
+$fa-var-arrow-circle-o-up: "\f01b";
+$fa-var-arrow-circle-right: "\f0a9";
+$fa-var-arrow-circle-up: "\f0aa";
+$fa-var-arrow-down: "\f063";
+$fa-var-arrow-left: "\f060";
+$fa-var-arrow-right: "\f061";
+$fa-var-arrow-up: "\f062";
+$fa-var-arrows: "\f047";
+$fa-var-arrows-alt: "\f0b2";
+$fa-var-arrows-h: "\f07e";
+$fa-var-arrows-v: "\f07d";
+$fa-var-asl-interpreting: "\f2a3";
+$fa-var-assistive-listening-systems: "\f2a2";
+$fa-var-asterisk: "\f069";
+$fa-var-at: "\f1fa";
+$fa-var-audio-description: "\f29e";
+$fa-var-automobile: "\f1b9";
+$fa-var-backward: "\f04a";
+$fa-var-balance-scale: "\f24e";
+$fa-var-ban: "\f05e";
+$fa-var-bandcamp: "\f2d5";
+$fa-var-bank: "\f19c";
+$fa-var-bar-chart: "\f080";
+$fa-var-bar-chart-o: "\f080";
+$fa-var-barcode: "\f02a";
+$fa-var-bars: "\f0c9";
+$fa-var-bath: "\f2cd";
+$fa-var-bathtub: "\f2cd";
+$fa-var-battery: "\f240";
+$fa-var-battery-0: "\f244";
+$fa-var-battery-1: "\f243";
+$fa-var-battery-2: "\f242";
+$fa-var-battery-3: "\f241";
+$fa-var-battery-4: "\f240";
+$fa-var-battery-empty: "\f244";
+$fa-var-battery-full: "\f240";
+$fa-var-battery-half: "\f242";
+$fa-var-battery-quarter: "\f243";
+$fa-var-battery-three-quarters: "\f241";
+$fa-var-bed: "\f236";
+$fa-var-beer: "\f0fc";
+$fa-var-behance: "\f1b4";
+$fa-var-behance-square: "\f1b5";
+$fa-var-bell: "\f0f3";
+$fa-var-bell-o: "\f0a2";
+$fa-var-bell-slash: "\f1f6";
+$fa-var-bell-slash-o: "\f1f7";
+$fa-var-bicycle: "\f206";
+$fa-var-binoculars: "\f1e5";
+$fa-var-birthday-cake: "\f1fd";
+$fa-var-bitbucket: "\f171";
+$fa-var-bitbucket-square: "\f172";
+$fa-var-bitcoin: "\f15a";
+$fa-var-black-tie: "\f27e";
+$fa-var-blind: "\f29d";
+$fa-var-bluetooth: "\f293";
+$fa-var-bluetooth-b: "\f294";
+$fa-var-bold: "\f032";
+$fa-var-bolt: "\f0e7";
+$fa-var-bomb: "\f1e2";
+$fa-var-book: "\f02d";
+$fa-var-bookmark: "\f02e";
+$fa-var-bookmark-o: "\f097";
+$fa-var-braille: "\f2a1";
+$fa-var-briefcase: "\f0b1";
+$fa-var-btc: "\f15a";
+$fa-var-bug: "\f188";
+$fa-var-building: "\f1ad";
+$fa-var-building-o: "\f0f7";
+$fa-var-bullhorn: "\f0a1";
+$fa-var-bullseye: "\f140";
+$fa-var-bus: "\f207";
+$fa-var-buysellads: "\f20d";
+$fa-var-cab: "\f1ba";
+$fa-var-calculator: "\f1ec";
+$fa-var-calendar: "\f073";
+$fa-var-calendar-check-o: "\f274";
+$fa-var-calendar-minus-o: "\f272";
+$fa-var-calendar-o: "\f133";
+$fa-var-calendar-plus-o: "\f271";
+$fa-var-calendar-times-o: "\f273";
+$fa-var-camera: "\f030";
+$fa-var-camera-retro: "\f083";
+$fa-var-car: "\f1b9";
+$fa-var-caret-down: "\f0d7";
+$fa-var-caret-left: "\f0d9";
+$fa-var-caret-right: "\f0da";
+$fa-var-caret-square-o-down: "\f150";
+$fa-var-caret-square-o-left: "\f191";
+$fa-var-caret-square-o-right: "\f152";
+$fa-var-caret-square-o-up: "\f151";
+$fa-var-caret-up: "\f0d8";
+$fa-var-cart-arrow-down: "\f218";
+$fa-var-cart-plus: "\f217";
+$fa-var-cc: "\f20a";
+$fa-var-cc-amex: "\f1f3";
+$fa-var-cc-diners-club: "\f24c";
+$fa-var-cc-discover: "\f1f2";
+$fa-var-cc-jcb: "\f24b";
+$fa-var-cc-mastercard: "\f1f1";
+$fa-var-cc-paypal: "\f1f4";
+$fa-var-cc-stripe: "\f1f5";
+$fa-var-cc-visa: "\f1f0";
+$fa-var-certificate: "\f0a3";
+$fa-var-chain: "\f0c1";
+$fa-var-chain-broken: "\f127";
+$fa-var-check: "\f00c";
+$fa-var-check-circle: "\f058";
+$fa-var-check-circle-o: "\f05d";
+$fa-var-check-square: "\f14a";
+$fa-var-check-square-o: "\f046";
+$fa-var-chevron-circle-down: "\f13a";
+$fa-var-chevron-circle-left: "\f137";
+$fa-var-chevron-circle-right: "\f138";
+$fa-var-chevron-circle-up: "\f139";
+$fa-var-chevron-down: "\f078";
+$fa-var-chevron-left: "\f053";
+$fa-var-chevron-right: "\f054";
+$fa-var-chevron-up: "\f077";
+$fa-var-child: "\f1ae";
+$fa-var-chrome: "\f268";
+$fa-var-circle: "\f111";
+$fa-var-circle-o: "\f10c";
+$fa-var-circle-o-notch: "\f1ce";
+$fa-var-circle-thin: "\f1db";
+$fa-var-clipboard: "\f0ea";
+$fa-var-clock-o: "\f017";
+$fa-var-clone: "\f24d";
+$fa-var-close: "\f00d";
+$fa-var-cloud: "\f0c2";
+$fa-var-cloud-download: "\f0ed";
+$fa-var-cloud-upload: "\f0ee";
+$fa-var-cny: "\f157";
+$fa-var-code: "\f121";
+$fa-var-code-fork: "\f126";
+$fa-var-codepen: "\f1cb";
+$fa-var-codiepie: "\f284";
+$fa-var-coffee: "\f0f4";
+$fa-var-cog: "\f013";
+$fa-var-cogs: "\f085";
+$fa-var-columns: "\f0db";
+$fa-var-comment: "\f075";
+$fa-var-comment-o: "\f0e5";
+$fa-var-commenting: "\f27a";
+$fa-var-commenting-o: "\f27b";
+$fa-var-comments: "\f086";
+$fa-var-comments-o: "\f0e6";
+$fa-var-compass: "\f14e";
+$fa-var-compress: "\f066";
+$fa-var-connectdevelop: "\f20e";
+$fa-var-contao: "\f26d";
+$fa-var-copy: "\f0c5";
+$fa-var-copyright: "\f1f9";
+$fa-var-creative-commons: "\f25e";
+$fa-var-credit-card: "\f09d";
+$fa-var-credit-card-alt: "\f283";
+$fa-var-crop: "\f125";
+$fa-var-crosshairs: "\f05b";
+$fa-var-css3: "\f13c";
+$fa-var-cube: "\f1b2";
+$fa-var-cubes: "\f1b3";
+$fa-var-cut: "\f0c4";
+$fa-var-cutlery: "\f0f5";
+$fa-var-dashboard: "\f0e4";
+$fa-var-dashcube: "\f210";
+$fa-var-database: "\f1c0";
+$fa-var-deaf: "\f2a4";
+$fa-var-deafness: "\f2a4";
+$fa-var-dedent: "\f03b";
+$fa-var-delicious: "\f1a5";
+$fa-var-desktop: "\f108";
+$fa-var-deviantart: "\f1bd";
+$fa-var-diamond: "\f219";
+$fa-var-digg: "\f1a6";
+$fa-var-dollar: "\f155";
+$fa-var-dot-circle-o: "\f192";
+$fa-var-download: "\f019";
+$fa-var-dribbble: "\f17d";
+$fa-var-drivers-license: "\f2c2";
+$fa-var-drivers-license-o: "\f2c3";
+$fa-var-dropbox: "\f16b";
+$fa-var-drupal: "\f1a9";
+$fa-var-edge: "\f282";
+$fa-var-edit: "\f044";
+$fa-var-eercast: "\f2da";
+$fa-var-eject: "\f052";
+$fa-var-ellipsis-h: "\f141";
+$fa-var-ellipsis-v: "\f142";
+$fa-var-empire: "\f1d1";
+$fa-var-envelope: "\f0e0";
+$fa-var-envelope-o: "\f003";
+$fa-var-envelope-open: "\f2b6";
+$fa-var-envelope-open-o: "\f2b7";
+$fa-var-envelope-square: "\f199";
+$fa-var-envira: "\f299";
+$fa-var-eraser: "\f12d";
+$fa-var-etsy: "\f2d7";
+$fa-var-eur: "\f153";
+$fa-var-euro: "\f153";
+$fa-var-exchange: "\f0ec";
+$fa-var-exclamation: "\f12a";
+$fa-var-exclamation-circle: "\f06a";
+$fa-var-exclamation-triangle: "\f071";
+$fa-var-expand: "\f065";
+$fa-var-expeditedssl: "\f23e";
+$fa-var-external-link: "\f08e";
+$fa-var-external-link-square: "\f14c";
+$fa-var-eye: "\f06e";
+$fa-var-eye-slash: "\f070";
+$fa-var-eyedropper: "\f1fb";
+$fa-var-fa: "\f2b4";
+$fa-var-facebook: "\f09a";
+$fa-var-facebook-f: "\f09a";
+$fa-var-facebook-official: "\f230";
+$fa-var-facebook-square: "\f082";
+$fa-var-fast-backward: "\f049";
+$fa-var-fast-forward: "\f050";
+$fa-var-fax: "\f1ac";
+$fa-var-feed: "\f09e";
+$fa-var-female: "\f182";
+$fa-var-fighter-jet: "\f0fb";
+$fa-var-file: "\f15b";
+$fa-var-file-archive-o: "\f1c6";
+$fa-var-file-audio-o: "\f1c7";
+$fa-var-file-code-o: "\f1c9";
+$fa-var-file-excel-o: "\f1c3";
+$fa-var-file-image-o: "\f1c5";
+$fa-var-file-movie-o: "\f1c8";
+$fa-var-file-o: "\f016";
+$fa-var-file-pdf-o: "\f1c1";
+$fa-var-file-photo-o: "\f1c5";
+$fa-var-file-picture-o: "\f1c5";
+$fa-var-file-powerpoint-o: "\f1c4";
+$fa-var-file-sound-o: "\f1c7";
+$fa-var-file-text: "\f15c";
+$fa-var-file-text-o: "\f0f6";
+$fa-var-file-video-o: "\f1c8";
+$fa-var-file-word-o: "\f1c2";
+$fa-var-file-zip-o: "\f1c6";
+$fa-var-files-o: "\f0c5";
+$fa-var-film: "\f008";
+$fa-var-filter: "\f0b0";
+$fa-var-fire: "\f06d";
+$fa-var-fire-extinguisher: "\f134";
+$fa-var-firefox: "\f269";
+$fa-var-first-order: "\f2b0";
+$fa-var-flag: "\f024";
+$fa-var-flag-checkered: "\f11e";
+$fa-var-flag-o: "\f11d";
+$fa-var-flash: "\f0e7";
+$fa-var-flask: "\f0c3";
+$fa-var-flickr: "\f16e";
+$fa-var-floppy-o: "\f0c7";
+$fa-var-folder: "\f07b";
+$fa-var-folder-o: "\f114";
+$fa-var-folder-open: "\f07c";
+$fa-var-folder-open-o: "\f115";
+$fa-var-font: "\f031";
+$fa-var-font-awesome: "\f2b4";
+$fa-var-fonticons: "\f280";
+$fa-var-fort-awesome: "\f286";
+$fa-var-forumbee: "\f211";
+$fa-var-forward: "\f04e";
+$fa-var-foursquare: "\f180";
+$fa-var-free-code-camp: "\f2c5";
+$fa-var-frown-o: "\f119";
+$fa-var-futbol-o: "\f1e3";
+$fa-var-gamepad: "\f11b";
+$fa-var-gavel: "\f0e3";
+$fa-var-gbp: "\f154";
+$fa-var-ge: "\f1d1";
+$fa-var-gear: "\f013";
+$fa-var-gears: "\f085";
+$fa-var-genderless: "\f22d";
+$fa-var-get-pocket: "\f265";
+$fa-var-gg: "\f260";
+$fa-var-gg-circle: "\f261";
+$fa-var-gift: "\f06b";
+$fa-var-git: "\f1d3";
+$fa-var-git-square: "\f1d2";
+$fa-var-github: "\f09b";
+$fa-var-github-alt: "\f113";
+$fa-var-github-square: "\f092";
+$fa-var-gitlab: "\f296";
+$fa-var-gittip: "\f184";
+$fa-var-glass: "\f000";
+$fa-var-glide: "\f2a5";
+$fa-var-glide-g: "\f2a6";
+$fa-var-globe: "\f0ac";
+$fa-var-google: "\f1a0";
+$fa-var-google-plus: "\f0d5";
+$fa-var-google-plus-circle: "\f2b3";
+$fa-var-google-plus-official: "\f2b3";
+$fa-var-google-plus-square: "\f0d4";
+$fa-var-google-wallet: "\f1ee";
+$fa-var-graduation-cap: "\f19d";
+$fa-var-gratipay: "\f184";
+$fa-var-grav: "\f2d6";
+$fa-var-group: "\f0c0";
+$fa-var-h-square: "\f0fd";
+$fa-var-hacker-news: "\f1d4";
+$fa-var-hand-grab-o: "\f255";
+$fa-var-hand-lizard-o: "\f258";
+$fa-var-hand-o-down: "\f0a7";
+$fa-var-hand-o-left: "\f0a5";
+$fa-var-hand-o-right: "\f0a4";
+$fa-var-hand-o-up: "\f0a6";
+$fa-var-hand-paper-o: "\f256";
+$fa-var-hand-peace-o: "\f25b";
+$fa-var-hand-pointer-o: "\f25a";
+$fa-var-hand-rock-o: "\f255";
+$fa-var-hand-scissors-o: "\f257";
+$fa-var-hand-spock-o: "\f259";
+$fa-var-hand-stop-o: "\f256";
+$fa-var-handshake-o: "\f2b5";
+$fa-var-hard-of-hearing: "\f2a4";
+$fa-var-hashtag: "\f292";
+$fa-var-hdd-o: "\f0a0";
+$fa-var-header: "\f1dc";
+$fa-var-headphones: "\f025";
+$fa-var-heart: "\f004";
+$fa-var-heart-o: "\f08a";
+$fa-var-heartbeat: "\f21e";
+$fa-var-history: "\f1da";
+$fa-var-home: "\f015";
+$fa-var-hospital-o: "\f0f8";
+$fa-var-hotel: "\f236";
+$fa-var-hourglass: "\f254";
+$fa-var-hourglass-1: "\f251";
+$fa-var-hourglass-2: "\f252";
+$fa-var-hourglass-3: "\f253";
+$fa-var-hourglass-end: "\f253";
+$fa-var-hourglass-half: "\f252";
+$fa-var-hourglass-o: "\f250";
+$fa-var-hourglass-start: "\f251";
+$fa-var-houzz: "\f27c";
+$fa-var-html5: "\f13b";
+$fa-var-i-cursor: "\f246";
+$fa-var-id-badge: "\f2c1";
+$fa-var-id-card: "\f2c2";
+$fa-var-id-card-o: "\f2c3";
+$fa-var-ils: "\f20b";
+$fa-var-image: "\f03e";
+$fa-var-imdb: "\f2d8";
+$fa-var-inbox: "\f01c";
+$fa-var-indent: "\f03c";
+$fa-var-industry: "\f275";
+$fa-var-info: "\f129";
+$fa-var-info-circle: "\f05a";
+$fa-var-inr: "\f156";
+$fa-var-instagram: "\f16d";
+$fa-var-institution: "\f19c";
+$fa-var-internet-explorer: "\f26b";
+$fa-var-intersex: "\f224";
+$fa-var-ioxhost: "\f208";
+$fa-var-italic: "\f033";
+$fa-var-joomla: "\f1aa";
+$fa-var-jpy: "\f157";
+$fa-var-jsfiddle: "\f1cc";
+$fa-var-key: "\f084";
+$fa-var-keyboard-o: "\f11c";
+$fa-var-krw: "\f159";
+$fa-var-language: "\f1ab";
+$fa-var-laptop: "\f109";
+$fa-var-lastfm: "\f202";
+$fa-var-lastfm-square: "\f203";
+$fa-var-leaf: "\f06c";
+$fa-var-leanpub: "\f212";
+$fa-var-legal: "\f0e3";
+$fa-var-lemon-o: "\f094";
+$fa-var-level-down: "\f149";
+$fa-var-level-up: "\f148";
+$fa-var-life-bouy: "\f1cd";
+$fa-var-life-buoy: "\f1cd";
+$fa-var-life-ring: "\f1cd";
+$fa-var-life-saver: "\f1cd";
+$fa-var-lightbulb-o: "\f0eb";
+$fa-var-line-chart: "\f201";
+$fa-var-link: "\f0c1";
+$fa-var-linkedin: "\f0e1";
+$fa-var-linkedin-square: "\f08c";
+$fa-var-linode: "\f2b8";
+$fa-var-linux: "\f17c";
+$fa-var-list: "\f03a";
+$fa-var-list-alt: "\f022";
+$fa-var-list-ol: "\f0cb";
+$fa-var-list-ul: "\f0ca";
+$fa-var-location-arrow: "\f124";
+$fa-var-lock: "\f023";
+$fa-var-long-arrow-down: "\f175";
+$fa-var-long-arrow-left: "\f177";
+$fa-var-long-arrow-right: "\f178";
+$fa-var-long-arrow-up: "\f176";
+$fa-var-low-vision: "\f2a8";
+$fa-var-magic: "\f0d0";
+$fa-var-magnet: "\f076";
+$fa-var-mail-forward: "\f064";
+$fa-var-mail-reply: "\f112";
+$fa-var-mail-reply-all: "\f122";
+$fa-var-male: "\f183";
+$fa-var-map: "\f279";
+$fa-var-map-marker: "\f041";
+$fa-var-map-o: "\f278";
+$fa-var-map-pin: "\f276";
+$fa-var-map-signs: "\f277";
+$fa-var-mars: "\f222";
+$fa-var-mars-double: "\f227";
+$fa-var-mars-stroke: "\f229";
+$fa-var-mars-stroke-h: "\f22b";
+$fa-var-mars-stroke-v: "\f22a";
+$fa-var-maxcdn: "\f136";
+$fa-var-meanpath: "\f20c";
+$fa-var-medium: "\f23a";
+$fa-var-medkit: "\f0fa";
+$fa-var-meetup: "\f2e0";
+$fa-var-meh-o: "\f11a";
+$fa-var-mercury: "\f223";
+$fa-var-microchip: "\f2db";
+$fa-var-microphone: "\f130";
+$fa-var-microphone-slash: "\f131";
+$fa-var-minus: "\f068";
+$fa-var-minus-circle: "\f056";
+$fa-var-minus-square: "\f146";
+$fa-var-minus-square-o: "\f147";
+$fa-var-mixcloud: "\f289";
+$fa-var-mobile: "\f10b";
+$fa-var-mobile-phone: "\f10b";
+$fa-var-modx: "\f285";
+$fa-var-money: "\f0d6";
+$fa-var-moon-o: "\f186";
+$fa-var-mortar-board: "\f19d";
+$fa-var-motorcycle: "\f21c";
+$fa-var-mouse-pointer: "\f245";
+$fa-var-music: "\f001";
+$fa-var-navicon: "\f0c9";
+$fa-var-neuter: "\f22c";
+$fa-var-newspaper-o: "\f1ea";
+$fa-var-object-group: "\f247";
+$fa-var-object-ungroup: "\f248";
+$fa-var-odnoklassniki: "\f263";
+$fa-var-odnoklassniki-square: "\f264";
+$fa-var-opencart: "\f23d";
+$fa-var-openid: "\f19b";
+$fa-var-opera: "\f26a";
+$fa-var-optin-monster: "\f23c";
+$fa-var-outdent: "\f03b";
+$fa-var-pagelines: "\f18c";
+$fa-var-paint-brush: "\f1fc";
+$fa-var-paper-plane: "\f1d8";
+$fa-var-paper-plane-o: "\f1d9";
+$fa-var-paperclip: "\f0c6";
+$fa-var-paragraph: "\f1dd";
+$fa-var-paste: "\f0ea";
+$fa-var-pause: "\f04c";
+$fa-var-pause-circle: "\f28b";
+$fa-var-pause-circle-o: "\f28c";
+$fa-var-paw: "\f1b0";
+$fa-var-paypal: "\f1ed";
+$fa-var-pencil: "\f040";
+$fa-var-pencil-square: "\f14b";
+$fa-var-pencil-square-o: "\f044";
+$fa-var-percent: "\f295";
+$fa-var-phone: "\f095";
+$fa-var-phone-square: "\f098";
+$fa-var-photo: "\f03e";
+$fa-var-picture-o: "\f03e";
+$fa-var-pie-chart: "\f200";
+$fa-var-pied-piper: "\f2ae";
+$fa-var-pied-piper-alt: "\f1a8";
+$fa-var-pied-piper-pp: "\f1a7";
+$fa-var-pinterest: "\f0d2";
+$fa-var-pinterest-p: "\f231";
+$fa-var-pinterest-square: "\f0d3";
+$fa-var-plane: "\f072";
+$fa-var-play: "\f04b";
+$fa-var-play-circle: "\f144";
+$fa-var-play-circle-o: "\f01d";
+$fa-var-plug: "\f1e6";
+$fa-var-plus: "\f067";
+$fa-var-plus-circle: "\f055";
+$fa-var-plus-square: "\f0fe";
+$fa-var-plus-square-o: "\f196";
+$fa-var-podcast: "\f2ce";
+$fa-var-power-off: "\f011";
+$fa-var-print: "\f02f";
+$fa-var-product-hunt: "\f288";
+$fa-var-puzzle-piece: "\f12e";
+$fa-var-qq: "\f1d6";
+$fa-var-qrcode: "\f029";
+$fa-var-question: "\f128";
+$fa-var-question-circle: "\f059";
+$fa-var-question-circle-o: "\f29c";
+$fa-var-quora: "\f2c4";
+$fa-var-quote-left: "\f10d";
+$fa-var-quote-right: "\f10e";
+$fa-var-ra: "\f1d0";
+$fa-var-random: "\f074";
+$fa-var-ravelry: "\f2d9";
+$fa-var-rebel: "\f1d0";
+$fa-var-recycle: "\f1b8";
+$fa-var-reddit: "\f1a1";
+$fa-var-reddit-alien: "\f281";
+$fa-var-reddit-square: "\f1a2";
+$fa-var-refresh: "\f021";
+$fa-var-registered: "\f25d";
+$fa-var-remove: "\f00d";
+$fa-var-renren: "\f18b";
+$fa-var-reorder: "\f0c9";
+$fa-var-repeat: "\f01e";
+$fa-var-reply: "\f112";
+$fa-var-reply-all: "\f122";
+$fa-var-resistance: "\f1d0";
+$fa-var-retweet: "\f079";
+$fa-var-rmb: "\f157";
+$fa-var-road: "\f018";
+$fa-var-rocket: "\f135";
+$fa-var-rotate-left: "\f0e2";
+$fa-var-rotate-right: "\f01e";
+$fa-var-rouble: "\f158";
+$fa-var-rss: "\f09e";
+$fa-var-rss-square: "\f143";
+$fa-var-rub: "\f158";
+$fa-var-ruble: "\f158";
+$fa-var-rupee: "\f156";
+$fa-var-s15: "\f2cd";
+$fa-var-safari: "\f267";
+$fa-var-save: "\f0c7";
+$fa-var-scissors: "\f0c4";
+$fa-var-scribd: "\f28a";
+$fa-var-search: "\f002";
+$fa-var-search-minus: "\f010";
+$fa-var-search-plus: "\f00e";
+$fa-var-sellsy: "\f213";
+$fa-var-send: "\f1d8";
+$fa-var-send-o: "\f1d9";
+$fa-var-server: "\f233";
+$fa-var-share: "\f064";
+$fa-var-share-alt: "\f1e0";
+$fa-var-share-alt-square: "\f1e1";
+$fa-var-share-square: "\f14d";
+$fa-var-share-square-o: "\f045";
+$fa-var-shekel: "\f20b";
+$fa-var-sheqel: "\f20b";
+$fa-var-shield: "\f132";
+$fa-var-ship: "\f21a";
+$fa-var-shirtsinbulk: "\f214";
+$fa-var-shopping-bag: "\f290";
+$fa-var-shopping-basket: "\f291";
+$fa-var-shopping-cart: "\f07a";
+$fa-var-shower: "\f2cc";
+$fa-var-sign-in: "\f090";
+$fa-var-sign-language: "\f2a7";
+$fa-var-sign-out: "\f08b";
+$fa-var-signal: "\f012";
+$fa-var-signing: "\f2a7";
+$fa-var-simplybuilt: "\f215";
+$fa-var-sitemap: "\f0e8";
+$fa-var-skyatlas: "\f216";
+$fa-var-skype: "\f17e";
+$fa-var-slack: "\f198";
+$fa-var-sliders: "\f1de";
+$fa-var-slideshare: "\f1e7";
+$fa-var-smile-o: "\f118";
+$fa-var-snapchat: "\f2ab";
+$fa-var-snapchat-ghost: "\f2ac";
+$fa-var-snapchat-square: "\f2ad";
+$fa-var-snowflake-o: "\f2dc";
+$fa-var-soccer-ball-o: "\f1e3";
+$fa-var-sort: "\f0dc";
+$fa-var-sort-alpha-asc: "\f15d";
+$fa-var-sort-alpha-desc: "\f15e";
+$fa-var-sort-amount-asc: "\f160";
+$fa-var-sort-amount-desc: "\f161";
+$fa-var-sort-asc: "\f0de";
+$fa-var-sort-desc: "\f0dd";
+$fa-var-sort-down: "\f0dd";
+$fa-var-sort-numeric-asc: "\f162";
+$fa-var-sort-numeric-desc: "\f163";
+$fa-var-sort-up: "\f0de";
+$fa-var-soundcloud: "\f1be";
+$fa-var-space-shuttle: "\f197";
+$fa-var-spinner: "\f110";
+$fa-var-spoon: "\f1b1";
+$fa-var-spotify: "\f1bc";
+$fa-var-square: "\f0c8";
+$fa-var-square-o: "\f096";
+$fa-var-stack-exchange: "\f18d";
+$fa-var-stack-overflow: "\f16c";
+$fa-var-star: "\f005";
+$fa-var-star-half: "\f089";
+$fa-var-star-half-empty: "\f123";
+$fa-var-star-half-full: "\f123";
+$fa-var-star-half-o: "\f123";
+$fa-var-star-o: "\f006";
+$fa-var-steam: "\f1b6";
+$fa-var-steam-square: "\f1b7";
+$fa-var-step-backward: "\f048";
+$fa-var-step-forward: "\f051";
+$fa-var-stethoscope: "\f0f1";
+$fa-var-sticky-note: "\f249";
+$fa-var-sticky-note-o: "\f24a";
+$fa-var-stop: "\f04d";
+$fa-var-stop-circle: "\f28d";
+$fa-var-stop-circle-o: "\f28e";
+$fa-var-street-view: "\f21d";
+$fa-var-strikethrough: "\f0cc";
+$fa-var-stumbleupon: "\f1a4";
+$fa-var-stumbleupon-circle: "\f1a3";
+$fa-var-subscript: "\f12c";
+$fa-var-subway: "\f239";
+$fa-var-suitcase: "\f0f2";
+$fa-var-sun-o: "\f185";
+$fa-var-superpowers: "\f2dd";
+$fa-var-superscript: "\f12b";
+$fa-var-support: "\f1cd";
+$fa-var-table: "\f0ce";
+$fa-var-tablet: "\f10a";
+$fa-var-tachometer: "\f0e4";
+$fa-var-tag: "\f02b";
+$fa-var-tags: "\f02c";
+$fa-var-tasks: "\f0ae";
+$fa-var-taxi: "\f1ba";
+$fa-var-telegram: "\f2c6";
+$fa-var-television: "\f26c";
+$fa-var-tencent-weibo: "\f1d5";
+$fa-var-terminal: "\f120";
+$fa-var-text-height: "\f034";
+$fa-var-text-width: "\f035";
+$fa-var-th: "\f00a";
+$fa-var-th-large: "\f009";
+$fa-var-th-list: "\f00b";
+$fa-var-themeisle: "\f2b2";
+$fa-var-thermometer: "\f2c7";
+$fa-var-thermometer-0: "\f2cb";
+$fa-var-thermometer-1: "\f2ca";
+$fa-var-thermometer-2: "\f2c9";
+$fa-var-thermometer-3: "\f2c8";
+$fa-var-thermometer-4: "\f2c7";
+$fa-var-thermometer-empty: "\f2cb";
+$fa-var-thermometer-full: "\f2c7";
+$fa-var-thermometer-half: "\f2c9";
+$fa-var-thermometer-quarter: "\f2ca";
+$fa-var-thermometer-three-quarters: "\f2c8";
+$fa-var-thumb-tack: "\f08d";
+$fa-var-thumbs-down: "\f165";
+$fa-var-thumbs-o-down: "\f088";
+$fa-var-thumbs-o-up: "\f087";
+$fa-var-thumbs-up: "\f164";
+$fa-var-ticket: "\f145";
+$fa-var-times: "\f00d";
+$fa-var-times-circle: "\f057";
+$fa-var-times-circle-o: "\f05c";
+$fa-var-times-rectangle: "\f2d3";
+$fa-var-times-rectangle-o: "\f2d4";
+$fa-var-tint: "\f043";
+$fa-var-toggle-down: "\f150";
+$fa-var-toggle-left: "\f191";
+$fa-var-toggle-off: "\f204";
+$fa-var-toggle-on: "\f205";
+$fa-var-toggle-right: "\f152";
+$fa-var-toggle-up: "\f151";
+$fa-var-trademark: "\f25c";
+$fa-var-train: "\f238";
+$fa-var-transgender: "\f224";
+$fa-var-transgender-alt: "\f225";
+$fa-var-trash: "\f1f8";
+$fa-var-trash-o: "\f014";
+$fa-var-tree: "\f1bb";
+$fa-var-trello: "\f181";
+$fa-var-tripadvisor: "\f262";
+$fa-var-trophy: "\f091";
+$fa-var-truck: "\f0d1";
+$fa-var-try: "\f195";
+$fa-var-tty: "\f1e4";
+$fa-var-tumblr: "\f173";
+$fa-var-tumblr-square: "\f174";
+$fa-var-turkish-lira: "\f195";
+$fa-var-tv: "\f26c";
+$fa-var-twitch: "\f1e8";
+$fa-var-twitter: "\f099";
+$fa-var-twitter-square: "\f081";
+$fa-var-umbrella: "\f0e9";
+$fa-var-underline: "\f0cd";
+$fa-var-undo: "\f0e2";
+$fa-var-universal-access: "\f29a";
+$fa-var-university: "\f19c";
+$fa-var-unlink: "\f127";
+$fa-var-unlock: "\f09c";
+$fa-var-unlock-alt: "\f13e";
+$fa-var-unsorted: "\f0dc";
+$fa-var-upload: "\f093";
+$fa-var-usb: "\f287";
+$fa-var-usd: "\f155";
+$fa-var-user: "\f007";
+$fa-var-user-circle: "\f2bd";
+$fa-var-user-circle-o: "\f2be";
+$fa-var-user-md: "\f0f0";
+$fa-var-user-o: "\f2c0";
+$fa-var-user-plus: "\f234";
+$fa-var-user-secret: "\f21b";
+$fa-var-user-times: "\f235";
+$fa-var-users: "\f0c0";
+$fa-var-vcard: "\f2bb";
+$fa-var-vcard-o: "\f2bc";
+$fa-var-venus: "\f221";
+$fa-var-venus-double: "\f226";
+$fa-var-venus-mars: "\f228";
+$fa-var-viacoin: "\f237";
+$fa-var-viadeo: "\f2a9";
+$fa-var-viadeo-square: "\f2aa";
+$fa-var-video-camera: "\f03d";
+$fa-var-vimeo: "\f27d";
+$fa-var-vimeo-square: "\f194";
+$fa-var-vine: "\f1ca";
+$fa-var-vk: "\f189";
+$fa-var-volume-control-phone: "\f2a0";
+$fa-var-volume-down: "\f027";
+$fa-var-volume-off: "\f026";
+$fa-var-volume-up: "\f028";
+$fa-var-warning: "\f071";
+$fa-var-wechat: "\f1d7";
+$fa-var-weibo: "\f18a";
+$fa-var-weixin: "\f1d7";
+$fa-var-whatsapp: "\f232";
+$fa-var-wheelchair: "\f193";
+$fa-var-wheelchair-alt: "\f29b";
+$fa-var-wifi: "\f1eb";
+$fa-var-wikipedia-w: "\f266";
+$fa-var-window-close: "\f2d3";
+$fa-var-window-close-o: "\f2d4";
+$fa-var-window-maximize: "\f2d0";
+$fa-var-window-minimize: "\f2d1";
+$fa-var-window-restore: "\f2d2";
+$fa-var-windows: "\f17a";
+$fa-var-won: "\f159";
+$fa-var-wordpress: "\f19a";
+$fa-var-wpbeginner: "\f297";
+$fa-var-wpexplorer: "\f2de";
+$fa-var-wpforms: "\f298";
+$fa-var-wrench: "\f0ad";
+$fa-var-xing: "\f168";
+$fa-var-xing-square: "\f169";
+$fa-var-y-combinator: "\f23b";
+$fa-var-y-combinator-square: "\f1d4";
+$fa-var-yahoo: "\f19e";
+$fa-var-yc: "\f23b";
+$fa-var-yc-square: "\f1d4";
+$fa-var-yelp: "\f1e9";
+$fa-var-yen: "\f157";
+$fa-var-yoast: "\f2b1";
+$fa-var-youtube: "\f167";
+$fa-var-youtube-play: "\f16a";
+$fa-var-youtube-square: "\f166";
+
diff --git a/app/assets/stylesheets/vendor/font_awesome/font-awesome.scss b/app/assets/stylesheets/vendor/font_awesome/font-awesome.scss
new file mode 100644
index 00000000000..abab424ee54
--- /dev/null
+++ b/app/assets/stylesheets/vendor/font_awesome/font-awesome.scss
@@ -0,0 +1,18 @@
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+
+@import "variables";
+@import "mixins";
+// @import "path";
+@import "core";
+@import "larger";
+@import "fixed-width";
+@import "list";
+@import "bordered-pulled";
+@import "animated";
+@import "rotated-flipped";
+@import "stacked";
+@import "icons";
+@import "screen-reader";
diff --git a/app/assets/stylesheets/wizard.scss b/app/assets/stylesheets/wizard.scss
index 528111389c4..678fa956862 100644
--- a/app/assets/stylesheets/wizard.scss
+++ b/app/assets/stylesheets/wizard.scss
@@ -1,9 +1,9 @@
@import "vendor/normalize";
+@import "vendor/font_awesome/font-awesome";
@import "vendor/sweetalert";
@import "common/foundation/colors";
@import "common/foundation/variables";
@import "common/select-kit/*";
-@import "common/components/svg";
body.wizard {
background-color: #fff;
diff --git a/app/controllers/svg_sprite_controller.rb b/app/controllers/svg_sprite_controller.rb
deleted file mode 100644
index 6d4000d794b..00000000000
--- a/app/controllers/svg_sprite_controller.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-class SvgSpriteController < ApplicationController
- skip_before_action :preload_json, :redirect_to_login_if_required, :check_xhr, :verify_authenticity_token, only: [:show]
-
- def show
-
- no_cookies
-
- RailsMultisite::ConnectionManagement.with_hostname(params[:hostname]) do
-
- if SvgSprite.version != params[:version]
- return redirect_to path(SvgSprite.path)
- end
-
- svg_sprite = SvgSprite.bundle
-
- response.headers["Last-Modified"] = 10.years.ago.httpdate
- response.headers["Content-Length"] = svg_sprite.bytesize.to_s
- immutable_for 1.year
-
- render plain: svg_sprite, disposition: nil, content_type: 'image/svg+xml'
- end
- end
-end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index df0409f2bb2..5a6998c6e3f 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -423,13 +423,8 @@ module ApplicationHelper
asset_version: Discourse.assets_digest,
disable_custom_css: loading_admin?,
highlight_js_path: HighlightJs.path,
- svg_sprite_path: SvgSprite.path,
}
- if Rails.env.development?
- setup_data[:svg_icon_list] = SvgSprite.all_icons
- end
-
if guardian.can_enable_safe_mode? && params["safe_mode"]
setup_data[:safe_mode] = normalized_safe_mode
end
diff --git a/app/models/group.rb b/app/models/group.rb
index 19b7a82eef2..5c8d1376e3e 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -49,7 +49,7 @@ class Group < ActiveRecord::Base
validate :automatic_membership_email_domains_format_validator
validate :incoming_email_validator
validate :can_allow_membership_requests, if: :allow_membership_requests
- validates :flair_url, url: true, if: Proc.new { |g| g.flair_url && g.flair_url.exclude?('fa-') }
+ validates :flair_url, url: true, if: Proc.new { |g| g.flair_url && g.flair_url[0, 3] != 'fa-' }
validate :validate_grant_trust_level, if: :will_save_change_to_grant_trust_level?
AUTO_GROUPS = {
diff --git a/app/views/common/_special_font_face.html.erb b/app/views/common/_special_font_face.html.erb
new file mode 100644
index 00000000000..50fc5d96a87
--- /dev/null
+++ b/app/views/common/_special_font_face.html.erb
@@ -0,0 +1,21 @@
+<%#
+ The fonts are loaded outside of the stylesheet so that we can dynamically change the path.
+ This is to get around CDN caching on the Origin:
+
+ https://forums.aws.amazon.com/thread.jspa?threadID=114646
+
+ Also added a cache breaker there in case we have breaking config changes
+ &1 was added last when the nginx sample config changed
+%>
+
+<% font_domain = "#{Discourse.base_url_no_prefix}&2".html_safe %>
+<% woff2_url = "#{asset_path("fontawesome-webfont.woff2")}?#{font_domain}&v=4.7.0".html_safe %>
+
+
+
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index 0e8d8b70e97..459c778d059 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -48,6 +48,7 @@
<%- end %>
<%= render partial: "common/discourse_stylesheet" %>
+ <%= render partial: "common/special_font_face" %>
<%= yield :head %>
diff --git a/app/views/layouts/finish_installation.html.erb b/app/views/layouts/finish_installation.html.erb
index 91df8077989..8fc25c08eb9 100644
--- a/app/views/layouts/finish_installation.html.erb
+++ b/app/views/layouts/finish_installation.html.erb
@@ -1,6 +1,7 @@
<%= discourse_stylesheet_link_tag 'wizard', theme_ids: nil %>
+ <%= render partial: "common/special_font_face" %>
<%= preload_script 'ember_jquery' %>
<%= preload_script 'wizard-vendor' %>
<%= render partial: "layouts/head" %>
diff --git a/app/views/layouts/no_ember.html.erb b/app/views/layouts/no_ember.html.erb
index 29f0f52a6db..8b68e33910f 100644
--- a/app/views/layouts/no_ember.html.erb
+++ b/app/views/layouts/no_ember.html.erb
@@ -5,6 +5,7 @@
<%= content_for?(:title) ? yield(:title) : SiteSetting.title %>
<%= render partial: "layouts/head" %>
+ <%= render partial: "common/special_font_face" %>
<%= render partial: "common/discourse_stylesheet" %>
<%= discourse_csrf_tags %>
diff --git a/app/views/wizard/index.html.erb b/app/views/wizard/index.html.erb
index 9ccc5e3b15a..ea5809bada5 100644
--- a/app/views/wizard/index.html.erb
+++ b/app/views/wizard/index.html.erb
@@ -5,6 +5,7 @@
<%= preload_script "locales/#{I18n.locale}" %>
<%= preload_script 'wizard-vendor' %>
<%= preload_script 'wizard-application' %>
+ <%= render partial: "common/special_font_face" %>
<%= csrf_meta_tags %>
@@ -15,12 +16,5 @@
<%= preload_script 'wizard-start' %>
-
-
-
- <%= raw SvgSprite.bundle %>
-
-
-
diff --git a/config/application.rb b/config/application.rb
index f46d132e1f7..4a64cead119 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -56,9 +56,8 @@ module Discourse
require_dependency 'lib/es6_module_transpiler/rails'
require_dependency 'lib/js_locale_helper'
- # tiny files needed by site settings
+ # tiny file needed by site settings
require_dependency 'lib/highlight_js/highlight_js'
- require_dependency 'lib/svg_sprite/svg_sprite'
# mocha hates us, active_support/testing/mochaing.rb line 2 is requiring the wrong
# require, patched in source, on upgrade remove this
diff --git a/config/initializers/006-mini_profiler.rb b/config/initializers/006-mini_profiler.rb
index 4af6edb08fc..737e3bbb0dc 100644
--- a/config/initializers/006-mini_profiler.rb
+++ b/config/initializers/006-mini_profiler.rb
@@ -32,7 +32,6 @@ if defined?(Rack::MiniProfiler)
/\/letter_avatar\//,
/\/letter_avatar_proxy\//,
/\/highlight-js\//,
- /\/svg-sprite\//,
/qunit/,
/srv\/status/,
/commits-widget/,
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index 59012a6fa03..e3d2da193c8 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -1744,7 +1744,7 @@ en:
share_anonymized_statistics: "Share anonymized usage statistics."
auto_handle_queued_age: "Automatically handle records that are waiting to be reviewed after this many days. Flags will be ignored. Queued posts and users will be rejected. Set to 0 to disable this feature."
- svg_icon_subset: "Add additional FontAwesome 5 icons that you would like to include in your assets. Use prefix 'far-' for regular icons and 'fab-' for brand icons. "
+
max_prints_per_hour_per_user: "Maximum number of /print page impressions (set to 0 to disable)"
full_name_required: "Full name is a required field of a user's profile."
diff --git a/config/routes.rb b/config/routes.rb
index 0994c0eccc1..d3cebd11eed 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -291,7 +291,6 @@ Discourse::Application.routes.draw do
post "preview" => "badges#preview"
end
end
-
end # admin namespace
get "email_preferences" => "email#preferences_redirect", :as => "email_preferences_redirect"
@@ -447,8 +446,6 @@ Discourse::Application.routes.draw do
# in most production settings this is bypassed
get "letter_avatar_proxy/:version/letter/:letter/:color/:size.png" => "user_avatars#show_proxy_letter"
- get "svg-sprite/:hostname/:version.svg" => "svg_sprite#show", format: false, constraints: { hostname: /[\w\.-]+/, version: /\h{40}/ }
-
get "highlight-js/:hostname/:version.js" => "highlight_js#show", format: false, constraints: { hostname: /[\w\.-]+/ }
get "stylesheets/:name.css.map" => "stylesheets#show_source_map", constraints: { name: /[-a-z0-9_]+/ }
diff --git a/config/site_settings.yml b/config/site_settings.yml
index e12d9813a06..3c5e32d4610 100644
--- a/config/site_settings.yml
+++ b/config/site_settings.yml
@@ -1680,12 +1680,6 @@ uncategorized:
default: 60
min: 0
- svg_icon_subset:
- default: ''
- type: 'list'
- list_type: 'compact'
- client: true
-
user_preferences:
default_email_digest_frequency:
enum: 'DigestEmailSiteSetting'
diff --git a/lib/discourse_plugin_registry.rb b/lib/discourse_plugin_registry.rb
index 0a641625b5d..88197b0abd7 100644
--- a/lib/discourse_plugin_registry.rb
+++ b/lib/discourse_plugin_registry.rb
@@ -15,7 +15,6 @@ class DiscoursePluginRegistry
attr_writer :handlebars
attr_writer :serialized_current_user_fields
attr_writer :seed_data
- attr_writer :svg_icons
attr_writer :locales
attr_accessor :custom_html
@@ -60,10 +59,6 @@ class DiscoursePluginRegistry
@sass_variables ||= Set.new
end
- def svg_icons
- @svg_icons ||= []
- end
-
def handlebars
@handlebars ||= Set.new
end
@@ -110,10 +105,6 @@ class DiscoursePluginRegistry
self.service_workers << filename
end
- def self.register_svg_icon(icon)
- self.svg_icons << icon
- end
-
def register_css(filename)
self.class.stylesheets << filename
end
diff --git a/lib/plugin/instance.rb b/lib/plugin/instance.rb
index 37593438846..ac575b1c72b 100644
--- a/lib/plugin/instance.rb
+++ b/lib/plugin/instance.rb
@@ -357,10 +357,6 @@ class Plugin::Instance
javascripts << js
end
- def register_svg_icon(icon)
- DiscoursePluginRegistry.register_svg_icon(SvgSprite.process(icon))
- end
-
# @option opts [String] :name
# @option opts [String] :nativeName
# @option opts [String] :fallbackLocale
diff --git a/lib/svg_sprite/svg_sprite.rb b/lib/svg_sprite/svg_sprite.rb
deleted file mode 100644
index 9038b626987..00000000000
--- a/lib/svg_sprite/svg_sprite.rb
+++ /dev/null
@@ -1,232 +0,0 @@
-# frozen_string_literal: true
-
-module SvgSprite
- SVG_ICONS ||= Set.new([
- "anchor",
- "angle-double-down",
- "angle-double-up",
- "angle-down",
- "angle-up",
- "archive",
- "arrow-up",
- "at",
- "backward",
- "ban",
- "bars",
- "bed",
- "bold",
- "book",
- "bookmark",
- "briefcase",
- "calendar-alt",
- "caret-down",
- "caret-left",
- "caret-right",
- "caret-up",
- "certificate",
- "chart-bar",
- "chart-pie",
- "check",
- "chevron-down",
- "chevron-right",
- "chevron-up",
- "circle",
- "code",
- "cog",
- "columns",
- "comment",
- "copy",
- "crosshairs",
- "cube",
- "desktop",
- "download",
- "ellipsis-h",
- "ellipsis-v",
- "envelope",
- "envelope-square",
- "exclamation-circle",
- "exclamation-triangle",
- "external-link-alt",
- "expand",
- "fab-apple",
- "fab-facebook-f",
- "fab-facebook-square",
- "fab-github",
- "fab-instagram",
- "fab-twitter",
- "fab-twitter-square",
- "fab-yahoo",
- "far-bell",
- "far-bell-slash",
- "far-calendar-plus",
- "far-circle",
- "far-clipboard",
- "far-clock",
- "far-comment",
- "far-dot-circle",
- "far-edit",
- "far-envelope",
- "far-eye",
- "far-eye-slash",
- "far-file-alt",
- "far-frown",
- "far-heart",
- "far-image",
- "far-list-alt",
- "far-smile",
- "far-square",
- "far-sun",
- "far-thumbs-down",
- "far-thumbs-up",
- "far-trash-alt",
- "fast-backward",
- "fast-forward",
- "file",
- "file-alt",
- "flag",
- "folder",
- "folder-open",
- "forward",
- "gavel",
- "globe",
- "globe-americas",
- "hand-point-right",
- "heading",
- "heart",
- "info-circle",
- "italic",
- "key",
- "link",
- "list",
- "list-ol",
- "list-ul",
- "lock",
- "magic",
- "microphone-slash",
- "minus",
- "mobile-alt",
- "paint-brush",
- "pencil-alt",
- "plug",
- "plus",
- "plus-circle",
- "plus-square",
- "power-off",
- "question",
- "question-circle",
- "quote-left",
- "quote-right",
- "reply",
- "search",
- "share",
- "shield-alt",
- "signal",
- "sign-out-alt",
- "step-backward",
- "step-forward",
- "sync",
- "table",
- "tasks",
- "thumbtack",
- "times",
- "times-circle",
- "trash-alt",
- "undo",
- "unlock",
- "upload",
- "user",
- "user-plus",
- "users",
- "wrench"
- ])
-
- FA_ICON_MAP = { 'far fa-' => 'far-', 'fab fa-' => 'fab-', 'fa-' => '' }
-
- def self.all_icons
- icons = SVG_ICONS.dup
- icons.merge(SiteSetting.svg_icon_subset.split('|'))
- icons.merge(plugin_icons).merge(badge_icons).merge(group_icons).merge(theme_icons)
- end
-
- def self.bundle
- require 'nokogiri'
-
- icons = all_icons
-
- @svg_subset = """
-
- '
- end
-
- def self.version
- icon_subset = all_icons.sort.join('|')
- (@svg_subset_cache ||= {})[icon_subset] ||=
- Digest::SHA1.hexdigest(icon_subset)
- end
-
- def self.path
- "/svg-sprite/#{Discourse.current_hostname}/#{version}.svg"
- end
-
- def self.plugin_icons
- DiscoursePluginRegistry.svg_icons.each { |icon| process(icon) }
- end
-
- def self.badge_icons
- Badge.all.pluck(:icon).uniq.each { |icon| process(icon) }
- end
-
- def self.group_icons
- Group.where("flair_url LIKE '%fa-%'").pluck(:flair_url).uniq.each { |icon| process(icon) }
- end
-
- def self.theme_icons
- theme_icon_settings = []
-
- Theme.all.each do |theme|
- theme&.included_settings&.each do |name, value|
- if name.to_s.include? "_icon"
- theme_icon_settings |= [value]
- end
- end
- end
-
- theme_icon_settings.each { |i| process(i) }
- end
-
- def self.process(icon_name)
- FA_ICON_MAP.each { |k, v| icon_name.sub!(k, v) }
- icon_name
- end
-end
diff --git a/lib/tasks/svg_icons.rake b/lib/tasks/svg_icons.rake
deleted file mode 100644
index 9ce0b48a8aa..00000000000
--- a/lib/tasks/svg_icons.rake
+++ /dev/null
@@ -1,38 +0,0 @@
-def vendor_svgs
- "#{Rails.root}/vendor/assets/svg-icons"
-end
-
-def library_src
- "#{Rails.root}/node_modules"
-end
-
-task 'svgicons:update' do
-
- yarn = system("yarn install")
- abort('Unable to run "yarn install"') unless yarn
-
- dependencies = [
- {
- source: '@fortawesome/fontawesome-free/sprites',
- destination: 'fontawesome',
- }
- ]
-
- start = Time.now
-
- dependencies.each do |f|
- src = "#{library_src}/#{f[:source]}"
-
- unless f[:destination]
- filename = f[:source].split("/").last
- else
- filename = f[:destination]
- end
-
- dest = "#{vendor_svgs}/#{filename}"
-
- FileUtils.cp_r(src, dest)
- end
-
- STDERR.puts "Completed copying dependencies: #{(Time.now - start).round(2)} secs"
-end
diff --git a/package.json b/package.json
index 571f6008495..ae98ed4f9dc 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,6 @@
"author": "Discourse",
"license": "MIT",
"dependencies": {
- "@fortawesome/fontawesome-free": "^5.4.1",
"ace-builds": "1.4.1",
"bootbox": "3.2.0",
"chart.js": "2.7.2",
@@ -16,9 +15,9 @@
"jquery": "3.3.1",
"jquery-color": "1.0.0",
"jquery-resize": "https://github.com/cowboy/jquery-resize/",
- "jquery-tags-input": "1.3.5",
"jquery.autoellipsis": "https://github.com/pvdspek/jquery.autoellipsis",
"jquery.cookie": "1.4.1",
+ "jquery-tags-input": "1.3.5",
"magnific-popup": "1.1.0",
"markdown-it": "8.4.1",
"mousetrap": "https://github.com/discourse/mousetrap#firefox-alt-key",
diff --git a/plugins/discourse-local-dates/assets/javascripts/discourse-local-dates.js b/plugins/discourse-local-dates/assets/javascripts/discourse-local-dates.js
index 5eead97840a..aad239019cf 100644
--- a/plugins/discourse-local-dates/assets/javascripts/discourse-local-dates.js
+++ b/plugins/discourse-local-dates/assets/javascripts/discourse-local-dates.js
@@ -89,7 +89,7 @@
}
var html = "";
- html += "";
+ html += "";
html += "";
html += "";
diff --git a/plugins/discourse-local-dates/assets/stylesheets/common/discourse-local-dates.scss b/plugins/discourse-local-dates/assets/stylesheets/common/discourse-local-dates.scss
index b68eb5712d6..79549c7b81f 100644
--- a/plugins/discourse-local-dates/assets/stylesheets/common/discourse-local-dates.scss
+++ b/plugins/discourse-local-dates/assets/stylesheets/common/discourse-local-dates.scss
@@ -7,7 +7,7 @@
cursor: pointer;
border-bottom: 1px dashed $primary-medium;
- .d-icon {
+ .d-icon-globe {
margin-right: 0.25em;
color: $primary;
}
diff --git a/plugins/poll/assets/javascripts/discourse/templates/modal/poll-ui-builder.hbs b/plugins/poll/assets/javascripts/discourse/templates/modal/poll-ui-builder.hbs
index 223e72e88c7..04eb9a61ea3 100644
--- a/plugins/poll/assets/javascripts/discourse/templates/modal/poll-ui-builder.hbs
+++ b/plugins/poll/assets/javascripts/discourse/templates/modal/poll-ui-builder.hbs
@@ -73,5 +73,5 @@
{{/d-modal-body}}
diff --git a/plugins/poll/assets/javascripts/initializers/add-poll-ui-builder.js.es6 b/plugins/poll/assets/javascripts/initializers/add-poll-ui-builder.js.es6
index 6aeb6ee3e0a..a9e80394e4c 100644
--- a/plugins/poll/assets/javascripts/initializers/add-poll-ui-builder.js.es6
+++ b/plugins/poll/assets/javascripts/initializers/add-poll-ui-builder.js.es6
@@ -32,7 +32,7 @@ function initializePollUIBuilder(api) {
api.addToolbarPopupMenuOptionsCallback(function() {
return {
action: "showPollBuilder",
- icon: "chart-bar",
+ icon: "bar-chart-o",
label: "poll.ui_builder.title",
condition: "canBuildPoll"
};
diff --git a/plugins/poll/assets/javascripts/widgets/discourse-poll.js.es6 b/plugins/poll/assets/javascripts/widgets/discourse-poll.js.es6
index 39a5f307140..2925a22d985 100644
--- a/plugins/poll/assets/javascripts/widgets/discourse-poll.js.es6
+++ b/plugins/poll/assets/javascripts/widgets/discourse-poll.js.es6
@@ -39,9 +39,9 @@ createWidget("discourse-poll-option", {
const chosen = vote.indexOf(option.id) !== -1;
if (attrs.isMultiple) {
- result.push(iconNode(chosen ? "far-check-square" : "far-square"));
+ result.push(iconNode(chosen ? "check-square-o" : "square-o"));
} else {
- result.push(iconNode(chosen ? "far-dot-circle" : "far-circle"));
+ result.push(iconNode(chosen ? "dot-circle-o" : "circle-o"));
}
result.push(" ");
result.push(optionHtml(option));
diff --git a/plugins/poll/assets/stylesheets/desktop/poll.scss b/plugins/poll/assets/stylesheets/desktop/poll.scss
index 42e2a3ac6f2..e6ac930025a 100644
--- a/plugins/poll/assets/stylesheets/desktop/poll.scss
+++ b/plugins/poll/assets/stylesheets/desktop/poll.scss
@@ -47,20 +47,16 @@ div.poll {
.poll {
li[data-poll-option-id]:before {
+ font-family: FontAwesome;
+ content: "\f10c";
+ margin-right: 0.25em;
position: relative;
vertical-align: baseline;
- border: 2px solid $primary;
- border-radius: 50%;
- display: inline-block;
- margin-right: 0.5em;
- width: 12px;
- height: 12px;
- content: "";
}
&[data-poll-type="multiple"] {
li[data-poll-option-id]:before {
- border-radius: 3px;
+ content: "\f096";
}
}
}
diff --git a/plugins/poll/plugin.rb b/plugins/poll/plugin.rb
index 5ef4465134f..21b586f98b2 100644
--- a/plugins/poll/plugin.rb
+++ b/plugins/poll/plugin.rb
@@ -9,8 +9,6 @@ register_asset "stylesheets/common/poll-ui-builder.scss"
register_asset "stylesheets/desktop/poll.scss", :desktop
register_asset "stylesheets/mobile/poll.scss", :mobile
-register_svg_icon "far fa-check-square"
-
enabled_site_setting :poll_enabled
hide_plugin if self.respond_to?(:hide_plugin)
diff --git a/plugins/poll/test/javascripts/widgets/discourse-poll-option-test.js.es6 b/plugins/poll/test/javascripts/widgets/discourse-poll-option-test.js.es6
index 739452c8913..751607e3730 100644
--- a/plugins/poll/test/javascripts/widgets/discourse-poll-option-test.js.es6
+++ b/plugins/poll/test/javascripts/widgets/discourse-poll-option-test.js.es6
@@ -14,7 +14,7 @@ widgetTest("single, not selected", {
},
test(assert) {
- assert.ok(find("li .d-icon-far-circle:eq(0)").length === 1);
+ assert.ok(find("li .d-icon-circle-o:eq(0)").length === 1);
}
});
@@ -27,7 +27,7 @@ widgetTest("single, selected", {
},
test(assert) {
- assert.ok(find("li .d-icon-far-dot-circle:eq(0)").length === 1);
+ assert.ok(find("li .d-icon-dot-circle-o:eq(0)").length === 1);
}
});
@@ -43,7 +43,7 @@ widgetTest("multi, not selected", {
},
test(assert) {
- assert.ok(find("li .d-icon-far-square:eq(0)").length === 1);
+ assert.ok(find("li .d-icon-square-o:eq(0)").length === 1);
}
});
@@ -59,6 +59,6 @@ widgetTest("multi, selected", {
},
test(assert) {
- assert.ok(find("li .d-icon-far-check-square:eq(0)").length === 1);
+ assert.ok(find("li .d-icon-check-square-o:eq(0)").length === 1);
}
});
diff --git a/spec/components/svg_sprite/svg_sprite_spec.rb b/spec/components/svg_sprite/svg_sprite_spec.rb
deleted file mode 100644
index 0a6eebaf453..00000000000
--- a/spec/components/svg_sprite/svg_sprite_spec.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-require 'rails_helper'
-
-describe SvgSprite do
- it 'can generate a bundle' do
- bundle = SvgSprite.bundle
- expect(bundle).to match(/heart/)
- expect(bundle).to match(/angle-double-down/)
- end
-
- it 'can get a consistent version string' do
- version1 = SvgSprite.version
- version2 = SvgSprite.version
-
- expect(version1).to eq(version2)
- end
-
- it 'includes Font Awesome 4.7 icons from badges' do
- Fabricate(:badge, name: 'Custom Icon Badge', icon: 'fa-gamepad')
- expect(SvgSprite.bundle).to match(/gamepad/)
- end
-
- it 'includes Font Awesome 5 icons from badges' do
- Fabricate(:badge, name: 'Custom Icon Badge', icon: 'far fa-building')
- expect(SvgSprite.bundle).to match(/building/)
- end
-
- it 'includes icons defined in themes' do
- theme = Fabricate(:theme)
- theme.set_field(target: :settings, name: :yaml, value: "custom_icon: gas-pump")
- theme.save!
- expect(SvgSprite.bundle).to match(/gas-pump/)
-
- setting = theme.settings.find { |s| s.name == :custom_icon }
- setting.value = 'gamepad'
- expect(SvgSprite.bundle).to match(/gamepad/)
-
- setting = theme.settings.find { |s| s.name == :custom_icon }
- setting.value = 'fab fa-bandcamp'
- expect(SvgSprite.bundle).to match(/fab-bandcamp/)
-
- end
-
- it 'includes icons from SiteSettings' do
- SiteSetting.svg_icon_subset = 'blender|drafting-compass|fab-bandcamp'
- bundle = SvgSprite.bundle
- expect(bundle).to match(/blender/)
- expect(bundle).to match(/drafting-compass/)
- expect(bundle).to match(/fab-bandcamp/)
- expect(bundle).not_to match(/dragon/)
- end
-
- it 'includes icons from plugins' do
- DiscoursePluginRegistry.register_svg_icon('blender')
- DiscoursePluginRegistry.register_svg_icon('fab fa-bandcamp')
- bundle = SvgSprite.bundle
- expect(bundle).to match(/blender/)
- expect(bundle).to match(/fab-bandcamp/)
- end
-
- it "includes Font Awesome 4.7 icons as group flair" do
- group = Fabricate(:group, flair_url: "fa-air-freshener")
- expect(SvgSprite.bundle).to match(/air-freshener/)
- end
-
- it "includes Font Awesome 5 icons as group flair" do
- group = Fabricate(:group, flair_url: "far fa-building")
- expect(SvgSprite.bundle).to match(/building/)
- end
-end
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb
index 07b6d8e5ddb..a0bdc24ac80 100644
--- a/spec/models/group_spec.rb
+++ b/spec/models/group_spec.rb
@@ -820,22 +820,4 @@ describe Group do
end
end
end
-
- it "allows Font Awesome 4.7 syntax as group avatar flair" do
- group = Fabricate(:group)
- group.flair_url = "fa-air-freshener"
- group.save
-
- group = Group.find(group.id)
- expect(group.flair_url).to eq("fa-air-freshener")
- end
-
- it "allows Font Awesome 5 syntax as group avatar flair" do
- group = Fabricate(:group)
- group.flair_url = "fab fa-bandcamp"
- group.save
-
- group = Group.find(group.id)
- expect(group.flair_url).to eq("fab fa-bandcamp")
- end
end
diff --git a/test/javascripts/acceptance/composer-actions-test.js.es6 b/test/javascripts/acceptance/composer-actions-test.js.es6
index af745854480..6c84b8778d8 100644
--- a/test/javascripts/acceptance/composer-actions-test.js.es6
+++ b/test/javascripts/acceptance/composer-actions-test.js.es6
@@ -88,7 +88,11 @@ QUnit.test("replying to post - toggle_whisper", async assert => {
await composerActions.expand();
await composerActions.selectRowByValue("toggle_whisper");
- assert.ok(find(".composer-fields .whisper .d-icon-eye-slash").length === 1);
+ assert.ok(
+ find(".composer-fields .whisper")
+ .text()
+ .indexOf(I18n.t("composer.whisper")) > 0
+ );
});
QUnit.test("replying to post - reply_as_new_topic", async assert => {
diff --git a/test/javascripts/acceptance/composer-test.js.es6 b/test/javascripts/acceptance/composer-test.js.es6
index c1fa34b3471..34e7ae5f339 100644
--- a/test/javascripts/acceptance/composer-test.js.es6
+++ b/test/javascripts/acceptance/composer-test.js.es6
@@ -375,7 +375,9 @@ QUnit.test("Composer can toggle whispers", async assert => {
);
assert.ok(
- find(".composer-fields .whisper .d-icon-eye-slash").length === 1,
+ find(".composer-fields .whisper")
+ .text()
+ .indexOf(I18n.t("composer.whisper")) > 0,
"it sets the post type to whisper"
);
@@ -385,7 +387,9 @@ QUnit.test("Composer can toggle whispers", async assert => {
);
assert.ok(
- find(".composer-fields .whisper .d-icon-eye-slash").length === 0,
+ find(".composer-fields .whisper")
+ .text()
+ .indexOf(I18n.t("composer.whisper")) <= 0,
"it removes the whisper mode"
);
});
@@ -402,7 +406,9 @@ QUnit.test(
);
assert.ok(
- find(".composer-fields .whisper .d-icon-eye-slash").length === 1,
+ find(".composer-fields .whisper")
+ .text()
+ .indexOf(I18n.t("composer.whisper")) > 0,
"it sets the post type to whisper"
);
@@ -411,7 +417,9 @@ QUnit.test(
await click("#create-topic");
assert.ok(
- find(".composer-fields .whisper .d-icon-eye-slash").length === 0,
+ find(".composer-fields .whisper")
+ .text()
+ .indexOf(I18n.t("composer.whisper")) === -1,
"it should reset the state of the composer's model"
);
diff --git a/test/javascripts/acceptance/group-index-test.js.es6 b/test/javascripts/acceptance/group-index-test.js.es6
index 1cc9025c2b6..1ad8fee5620 100644
--- a/test/javascripts/acceptance/group-index-test.js.es6
+++ b/test/javascripts/acceptance/group-index-test.js.es6
@@ -6,7 +6,7 @@ QUnit.test("Viewing Members as anon user", async assert => {
await visit("/groups/discourse");
assert.ok(
- count(".avatar-flair .d-icon-adjust") === 1,
+ count(".avatar-flair .fa-adjust") === 1,
"it displays the group's avatar flair"
);
assert.ok(count(".group-members tr") > 0, "it lists group members");
diff --git a/test/javascripts/admin/components/themes-list-item-test.js.es6 b/test/javascripts/admin/components/themes-list-item-test.js.es6
index 55a50d3f69e..c08f1805b5c 100644
--- a/test/javascripts/admin/components/themes-list-item-test.js.es6
+++ b/test/javascripts/admin/components/themes-list-item-test.js.es6
@@ -11,7 +11,7 @@ componentTest("default theme", {
test(assert) {
assert.expect(1);
- assert.equal(this.$(".d-icon-check").length, 1, "shows default theme icon");
+ assert.equal(this.$(".fa-check").length, 1, "shows default theme icon");
}
});
@@ -26,15 +26,11 @@ componentTest("pending updates", {
test(assert) {
assert.expect(1);
- assert.equal(
- this.$(".d-icon-refresh").length,
- 1,
- "shows pending update icon"
- );
+ assert.equal(this.$(".fa-refresh").length, 1, "shows pending update icon");
}
});
-componentTest("broken theme", {
+componentTest("borken theme", {
template: "{{themes-list-item theme=theme}}",
beforeEach() {
this.set(
@@ -49,7 +45,7 @@ componentTest("broken theme", {
test(assert) {
assert.expect(1);
assert.equal(
- this.$(".d-icon-exclamation-circle").length,
+ this.$(".fa-exclamation-circle").length,
1,
"shows broken theme icon"
);
diff --git a/test/javascripts/components/d-icon-test.js.es6 b/test/javascripts/components/d-icon-test.js.es6
index 902447f5f86..bcaca7f7533 100644
--- a/test/javascripts/components/d-icon-test.js.es6
+++ b/test/javascripts/components/d-icon-test.js.es6
@@ -9,10 +9,7 @@ componentTest("default", {
const html = this.$()
.html()
.trim();
- assert.equal(
- html,
- ''
- );
+ assert.equal(html, '');
}
});
@@ -25,7 +22,7 @@ componentTest("with replacement", {
.trim();
assert.equal(
html,
- ''
+ ''
);
}
});
diff --git a/test/javascripts/widgets/avatar-flair-test.js.es6 b/test/javascripts/widgets/avatar-flair-test.js.es6
deleted file mode 100644
index 9902efc0959..00000000000
--- a/test/javascripts/widgets/avatar-flair-test.js.es6
+++ /dev/null
@@ -1,36 +0,0 @@
-import { moduleForWidget, widgetTest } from "helpers/widget-test";
-
-moduleForWidget("avatar-flair");
-
-widgetTest("avatar flair with an icon", {
- template: '{{mount-widget widget="avatar-flair" args=args}}',
- beforeEach() {
- this.set("args", {
- primary_group_flair_url: "fa-bars",
- primary_group_flair_bg_color: "CC0000",
- primary_group_flair_color: "FFFFFF"
- });
- },
- test(assert) {
- assert.ok(this.$(".avatar-flair").length, "it has the tag");
- assert.ok(this.$("svg.d-icon-bars").length, "it has the svg icon");
- assert.equal(
- this.$(".avatar-flair").attr("style"),
- "background-color: #CC0000; color: #FFFFFF; ",
- "it has styles"
- );
- }
-});
-
-widgetTest("avatar flair with an image", {
- template: '{{mount-widget widget="avatar-flair" args=args}}',
- beforeEach() {
- this.set("args", {
- primary_group_flair_url: "/images/avatar.png"
- });
- },
- test(assert) {
- assert.ok(this.$(".avatar-flair").length, "it has the tag");
- assert.ok(this.$("svg").length === 0, "it does not have an svg icon");
- }
-});
diff --git a/test/javascripts/widgets/widget-test.js.es6 b/test/javascripts/widgets/widget-test.js.es6
index c3c8ccbbc1e..0b5eba78ea0 100644
--- a/test/javascripts/widgets/widget-test.js.es6
+++ b/test/javascripts/widgets/widget-test.js.es6
@@ -217,7 +217,7 @@ widgetTest("handlebars d-icon", {
},
test(assert) {
- assert.equal(this.$(".d-icon-arrow-down").length, 1);
+ assert.equal(this.$("i.fa.fa-arrow-down").length, 1);
}
});
diff --git a/vendor/assets/svg-icons/fontawesome/brands.svg b/vendor/assets/svg-icons/fontawesome/brands.svg
deleted file mode 100644
index 075c7be3ec6..00000000000
--- a/vendor/assets/svg-icons/fontawesome/brands.svg
+++ /dev/null
@@ -1,1559 +0,0 @@
-
-
-
diff --git a/vendor/assets/svg-icons/fontawesome/regular.svg b/vendor/assets/svg-icons/fontawesome/regular.svg
deleted file mode 100644
index ea1ab9faeb3..00000000000
--- a/vendor/assets/svg-icons/fontawesome/regular.svg
+++ /dev/null
@@ -1,615 +0,0 @@
-
-
-
diff --git a/vendor/assets/svg-icons/fontawesome/solid.svg b/vendor/assets/svg-icons/fontawesome/solid.svg
deleted file mode 100644
index 39c24644e7d..00000000000
--- a/vendor/assets/svg-icons/fontawesome/solid.svg
+++ /dev/null
@@ -1,3411 +0,0 @@
-
-
-
diff --git a/yarn.lock b/yarn.lock
index c20f002dd5b..3a107446ed4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -87,11 +87,6 @@
lodash "^4.2.0"
to-fast-properties "^2.0.0"
-"@fortawesome/fontawesome-free@^5.4.1":
- version "5.4.1"
- resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.4.1.tgz#6194786c1a705ab84253e06429834466670e3c3f"
- integrity sha512-ZcxfUmLFl4RLG71cPeZcTXRa6rt3xLnMmomAb7aYKRzUmlRRj7E8EVqSwYSXBiV2x6XpSQmGOQmNQx6HSeSwVQ==
-
"@sinonjs/commons@^1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.0.2.tgz#3e0ac737781627b8844257fadc3d803997d0526e"