diff --git a/app/assets/fonts/FontAwesome.otf b/app/assets/fonts/FontAwesome.otf deleted file mode 100644 index 401ec0f36e4..00000000000 Binary files a/app/assets/fonts/FontAwesome.otf and /dev/null differ diff --git a/app/assets/fonts/fontawesome-webfont.eot b/app/assets/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca953f..00000000000 Binary files a/app/assets/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/app/assets/fonts/fontawesome-webfont.svg b/app/assets/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845e538..00000000000 --- a/app/assets/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/fonts/fontawesome-webfont.ttf b/app/assets/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2fa11..00000000000 Binary files a/app/assets/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/app/assets/fonts/fontawesome-webfont.woff b/app/assets/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a4b06..00000000000 Binary files a/app/assets/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/app/assets/fonts/fontawesome-webfont.woff2 b/app/assets/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc60404..00000000000 Binary files a/app/assets/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/app/assets/javascripts/admin/templates/email-sent.hbs b/app/assets/javascripts/admin/templates/email-sent.hbs index 9dd7996ff54..a8b2d57fae4 100644 --- a/app/assets/javascripts/admin/templates/email-sent.hbs +++ b/app/assets/javascripts/admin/templates/email-sent.hbs @@ -30,7 +30,7 @@ {{/if}} - {{#if l.bounced}}{{d-icon "repeat" title="admin.email.bounced"}}{{/if}} + {{#if l.bounced}}{{d-icon "redo" title="admin.email.bounced"}}{{/if}} {{l.to_address}} {{l.email_type}} diff --git a/app/assets/javascripts/admin/templates/web-hooks-show-events.hbs b/app/assets/javascripts/admin/templates/web-hooks-show-events.hbs index 0927e646439..a279199e1ad 100644 --- a/app/assets/javascripts/admin/templates/web-hooks-show-events.hbs +++ b/app/assets/javascripts/admin/templates/web-hooks-show-events.hbs @@ -2,9 +2,9 @@ {{#link-to 'adminWebHooks' tagName='button' classNames='btn'}} {{d-icon 'list'}} {{i18n 'admin.web_hooks.events.go_list'}} {{/link-to}} - {{d-button icon="send" label="admin.web_hooks.events.ping" action="ping" disabled=pingDisabled}} + {{d-button icon="paper-plane" label="admin.web_hooks.events.ping" action="ping" disabled=pingDisabled}} {{#link-to 'adminWebHooks.show' model.extras.web_hook_id tagName='button' classNames='btn'}} - {{d-icon 'edit'}} {{i18n 'admin.web_hooks.events.go_details'}} + {{d-icon 'far-edit'}} {{i18n 'admin.web_hooks.events.go_details'}} {{/link-to}} diff --git a/app/assets/javascripts/admin/templates/web-hooks.hbs b/app/assets/javascripts/admin/templates/web-hooks.hbs index a9d30ac4b9f..2e2a76a75eb 100644 --- a/app/assets/javascripts/admin/templates/web-hooks.hbs +++ b/app/assets/javascripts/admin/templates/web-hooks.hbs @@ -24,7 +24,7 @@ {{#link-to 'adminWebHooks.show' webHook}}{{webHook.payload_url}}{{/link-to}} {{webHook.description}} - {{#link-to 'adminWebHooks.show' webHook tagName='button' classNames='btn btn-default no-text'}}{{d-icon 'edit'}}{{/link-to}} + {{#link-to 'adminWebHooks.show' webHook tagName='button' classNames='btn btn-default no-text'}}{{d-icon 'far-edit'}}{{/link-to}} {{d-button class="destroy btn-danger" action='destroy' actionParam=webHook icon="remove"}} diff --git a/app/assets/javascripts/discourse-common/lib/attribute-hook.js.es6 b/app/assets/javascripts/discourse-common/lib/attribute-hook.js.es6 new file mode 100644 index 00000000000..33aecc6646a --- /dev/null +++ b/app/assets/javascripts/discourse-common/lib/attribute-hook.js.es6 @@ -0,0 +1,42 @@ +// 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 2ad408cac33..18256d00272 100644 --- a/app/assets/javascripts/discourse-common/lib/icon-library.js.es6 +++ b/app/assets/javascripts/discourse-common/lib/icon-library.js.es6 @@ -1,37 +1,505 @@ 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": "circle-o", + "d-regular": "far-circle", "d-watching": "exclamation-circle", - "d-watching-first": "dot-circle-o", + "d-watching-first": "far-dot-circle", "d-drop-expanded": "caret-down", "d-drop-collapsed": "caret-right", - "d-unliked": "heart-o", + "d-unliked": "far-heart", "d-liked": "heart", "notification.mentioned": "at", "notification.group_mentioned": "at", "notification.quoted": "quote-right", "notification.replied": "reply", "notification.posted": "reply", - "notification.edited": "pencil", + "notification.edited": "pencil-alt", "notification.liked": "heart", "notification.liked_2": "heart", "notification.liked_many": "heart", - "notification.private_message": "envelope-o", - "notification.invited_to_private_message": "envelope-o", - "notification.invited_to_topic": "hand-o-right", + "notification.private_message": "far-envelope", + "notification.invited_to_private_message": "far-envelope", + "notification.invited_to_topic": "hand-point-right", "notification.invitee_accepted": "user", "notification.moved_post": "sign-out", "notification.linked": "link", "notification.granted_badge": "certificate", - "notification.topic_reminder": "hand-o-right", - "notification.watching_first_post": "dot-circle-o", + "notification.topic_reminder": "hand-point-right", + "notification.watching_first_post": "far-dot-circle", "notification.group_message_summary": "group" }; +// TODO: use lib/svg_sprite/fa4-renames.json here +const fa4Replacements = { + "500px": "fab-500px", + "address-book-o": "far-address-book", + "address-card-o": "far-address-card", + adn: "fab-adn", + amazon: "fab-amazon", + android: "fab-android", + angellist: "fab-angellist", + apple: "fab-apple", + "area-chart": "chart-area", + "arrow-circle-o-down": "far-arrow-alt-circle-down", + "arrow-circle-o-left": "far-arrow-alt-circle-left", + "arrow-circle-o-right": "far-arrow-alt-circle-right", + "arrow-circle-o-up": "far-arrow-alt-circle-up", + arrows: "arrows-alt", + "arrows-alt": "expand-arrows-alt", + "arrows-h": "arrows-alt-h", + "arrows-v": "arrows-alt-v", + "asl-interpreting": "american-sign-language-interpreting", + automobile: "car", + bandcamp: "fab-bandcamp", + bank: "university", + "bar-chart": "far-chart-bar", + "bar-chart-o": "far-chart-bar", + bathtub: "bath", + battery: "battery-full", + "battery-0": "battery-empty", + "battery-1": "battery-quarter", + "battery-2": "battery-half", + "battery-3": "battery-three-quarters", + "battery-4": "battery-full", + behance: "fab-behance", + "behance-square": "fab-behance-square", + "bell-o": "far-bell", + "bell-slash-o": "far-bell-slash", + bitbucket: "fab-bitbucket", + "bitbucket-square": "fab-bitbucket", + bitcoin: "fab-btc", + "black-tie": "fab-black-tie", + bluetooth: "fab-bluetooth", + "bluetooth-b": "fab-bluetooth-b", + "bookmark-o": "far-bookmark", + btc: "fab-btc", + "building-o": "far-building", + buysellads: "fab-buysellads", + cab: "taxi", + calendar: "calendar-alt", + "calendar-check-o": "far-calendar-check", + "calendar-minus-o": "far-calendar-minus", + "calendar-o": "far-calendar", + "calendar-plus-o": "far-calendar-plus", + "calendar-times-o": "far-calendar-times", + "caret-square-o-down": "far-caret-square-down", + "caret-square-o-left": "far-caret-square-left", + "caret-square-o-right": "far-caret-square-right", + "caret-square-o-up": "far-caret-square-up", + cc: "far-closed-captioning", + "cc-amex": "fab-cc-amex", + "cc-diners-club": "fab-cc-diners-club", + "cc-discover": "fab-cc-discover", + "cc-jcb": "fab-cc-jcb", + "cc-mastercard": "fab-cc-mastercard", + "cc-paypal": "fab-cc-paypal", + "cc-stripe": "fab-cc-stripe", + "cc-visa": "fab-cc-visa", + chain: "link", + "chain-broken": "unlink", + "check-circle-o": "far-check-circle", + "check-square-o": "far-check-square", + chrome: "fab-chrome", + "circle-o": "far-circle", + "circle-o-notch": "circle-notch", + "circle-thin": "far-circle", + clipboard: "far-clipboard", + "clock-o": "far-clock", + clone: "far-clone", + close: "times", + "cloud-download": "cloud-download-alt", + "cloud-upload": "cloud-upload-alt", + cny: "yen-sign", + "code-fork": "code-branch", + codepen: "fab-codepen", + codiepie: "fab-codiepie", + "comment-o": "far-comment", + commenting: "far-comment-dots", + "commenting-o": "far-comment-dots", + "comments-o": "far-comments", + compass: "far-compass", + connectdevelop: "fab-connectdevelop", + contao: "fab-contao", + copyright: "far-copyright", + "creative-commons": "fab-creative-commons", + "credit-card": "far-credit-card", + "credit-card-alt": "credit-card", + css3: "fab-css3", + cutlery: "utensils", + dashboard: "tachometer-alt", + dashcube: "fab-dashcube", + deafness: "deaf", + dedent: "outdent", + delicious: "fab-delicious", + deviantart: "fab-deviantart", + diamond: "far-gem", + digg: "fab-digg", + dollar: "dollar-sign", + "dot-circle-o": "far-dot-circle", + dribbble: "fab-dribbble", + "drivers-license": "id-card", + "drivers-license-o": "far-id-card", + dropbox: "fab-dropbox", + drupal: "fab-drupal", + edge: "fab-edge", + eercast: "fab-sellcast", + empire: "fab-empire", + "envelope-o": "far-envelope", + "envelope-open-o": "far-envelope-open", + envira: "fab-envira", + etsy: "fab-etsy", + eur: "euro-sign", + euro: "euro-sign", + exchange: "exchange-alt", + expeditedssl: "fab-expeditedssl", + "external-link": "external-link-alt", + "external-link-square": "external-link-square-alt", + eye: "far-eye", + "eye-slash": "far-eye-slash", + eyedropper: "eye-dropper", + fa: "fab-font-awesome", + facebook: "fab-facebook-f", + "facebook-f": "fab-facebook-f", + "facebook-official": "fab-facebook", + "facebook-square": "fab-facebook-square", + feed: "rss", + "file-archive-o": "far-file-archive", + "file-audio-o": "far-file-audio", + "file-code-o": "far-file-code", + "file-excel-o": "far-file-excel", + "file-image-o": "far-file-image", + "file-movie-o": "far-file-video", + "file-o": "far-file", + "file-pdf-o": "far-file-pdf", + "file-photo-o": "far-file-image", + "file-picture-o": "far-file-image", + "file-powerpoint-o": "far-file-powerpoint", + "file-sound-o": "far-file-audio", + "file-text": "file-alt", + "file-text-o": "far-file-alt", + "file-video-o": "far-file-video", + "file-word-o": "far-file-word", + "file-zip-o": "far-file-archive", + "files-o": "far-copy", + firefox: "fab-firefox", + "first-order": "fab-first-order", + "flag-o": "far-flag", + flash: "bolt", + flickr: "fab-flickr", + "floppy-o": "far-save", + "folder-o": "far-folder", + "folder-open-o": "far-folder-open", + "font-awesome": "fab-font-awesome", + fonticons: "fab-fonticons", + "fort-awesome": "fab-fort-awesome", + forumbee: "fab-forumbee", + foursquare: "fab-foursquare", + "free-code-camp": "fab-free-code-camp", + "frown-o": "far-frown", + "futbol-o": "far-futbol", + gbp: "pound-sign", + ge: "fab-empire", + gear: "cog", + gears: "cogs", + "get-pocket": "fab-get-pocket", + gg: "fab-gg", + "gg-circle": "fab-gg-circle", + git: "fab-git", + "git-square": "fab-git-square", + github: "fab-github", + "github-alt": "fab-github-alt", + "github-square": "fab-github-square", + gitlab: "fab-gitlab", + gittip: "fab-gratipay", + glass: "glass-martini", + glide: "fab-glide", + "glide-g": "fab-glide-g", + google: "fab-google", + "google-plus": "fab-google-plus-g", + "google-plus-circle": "fab-google-plus", + "google-plus-official": "fab-google-plus", + "google-plus-square": "fab-google-plus-square", + "google-wallet": "fab-google-wallet", + gratipay: "fab-gratipay", + grav: "fab-grav", + group: "users", + "hacker-news": "fab-hacker-news", + "hand-grab-o": "far-hand-rock", + "hand-lizard-o": "far-hand-lizard", + "hand-o-down": "far-hand-point-down", + "hand-o-left": "far-hand-point-left", + "hand-o-right": "far-hand-point-right", + "hand-o-up": "far-hand-point-up", + "hand-paper-o": "far-hand-paper", + "hand-peace-o": "far-hand-peace", + "hand-pointer-o": "far-hand-pointer", + "hand-rock-o": "far-hand-rock", + "hand-scissors-o": "far-hand-scissors", + "hand-spock-o": "far-hand-spock", + "hand-stop-o": "far-hand-paper", + "handshake-o": "far-handshake", + "hard-of-hearing": "deaf", + "hdd-o": "far-hdd", + header: "heading", + "heart-o": "far-heart", + "hospital-o": "far-hospital", + hotel: "bed", + "hourglass-1": "hourglass-start", + "hourglass-2": "hourglass-half", + "hourglass-3": "hourglass-end", + "hourglass-o": "far-hourglass", + houzz: "fab-houzz", + html5: "fab-html5", + "id-card-o": "far-id-card", + ils: "shekel-sign", + image: "far-image", + imdb: "fab-imdb", + inr: "rupee-sign", + instagram: "fab-instagram", + institution: "university", + "internet-explorer": "fab-internet-explorer", + intersex: "transgender", + ioxhost: "fab-ioxhost", + joomla: "fab-joomla", + jpy: "yen-sign", + jsfiddle: "fab-jsfiddle", + "keyboard-o": "far-keyboard", + krw: "won-sign", + lastfm: "fab-lastfm", + "lastfm-square": "fab-lastfm-square", + leanpub: "fab-leanpub", + legal: "gavel", + "lemon-o": "far-lemon", + "level-down": "level-down-alt", + "level-up": "level-up-alt", + "life-bouy": "far-life-ring", + "life-buoy": "far-life-ring", + "life-ring": "far-life-ring", + "life-saver": "far-life-ring", + "lightbulb-o": "far-lightbulb", + "line-chart": "chart-line", + linkedin: "fab-linkedin-in", + "linkedin-square": "fab-linkedin", + linode: "fab-linode", + linux: "fab-linux", + "list-alt": "far-list-alt", + "long-arrow-down": "long-arrow-alt-down", + "long-arrow-left": "long-arrow-alt-left", + "long-arrow-right": "long-arrow-alt-right", + "long-arrow-up": "long-arrow-alt-up", + "mail-forward": "share", + "mail-reply": "reply", + "mail-reply-all": "reply-all", + "map-marker": "map-marker-alt", + "map-o": "far-map", + maxcdn: "fab-maxcdn", + meanpath: "fab-font-awesome", + medium: "fab-medium", + meetup: "fab-meetup", + "meh-o": "far-meh", + "minus-square-o": "far-minus-square", + mixcloud: "fab-mixcloud", + mobile: "mobile-alt", + "mobile-phone": "mobile-alt", + modx: "fab-modx", + money: "far-money-bill-alt", + "moon-o": "far-moon", + "mortar-board": "graduation-cap", + navicon: "bars", + "newspaper-o": "far-newspaper", + "object-group": "far-object-group", + "object-ungroup": "far-object-ungroup", + odnoklassniki: "fab-odnoklassniki", + "odnoklassniki-square": "fab-odnoklassniki-square", + opencart: "fab-opencart", + openid: "fab-openid", + opera: "fab-opera", + "optin-monster": "fab-optin-monster", + pagelines: "fab-pagelines", + "paper-plane-o": "far-paper-plane", + paste: "far-clipboard", + "pause-circle-o": "far-pause-circle", + paypal: "fab-paypal", + pencil: "pencil-alt", + "pencil-square": "pen-square", + "pencil-square-o": "far-edit", + photo: "far-image", + "picture-o": "far-image", + "pie-chart": "chart-pie", + "pied-piper": "fab-pied-piper", + "pied-piper-alt": "fab-pied-piper-alt", + "pied-piper-pp": "fab-pied-piper-pp", + pinterest: "fab-pinterest", + "pinterest-p": "fab-pinterest-p", + "pinterest-square": "fab-pinterest-square", + "play-circle-o": "far-play-circle", + "plus-square-o": "far-plus-square", + "product-hunt": "fab-product-hunt", + qq: "fab-qq", + "question-circle-o": "far-question-circle", + quora: "fab-quora", + ra: "fab-rebel", + ravelry: "fab-ravelry", + rebel: "fab-rebel", + reddit: "fab-reddit", + "reddit-alien": "fab-reddit-alien", + "reddit-square": "fab-reddit-square", + refresh: "sync", + registered: "far-registered", + remove: "times", + renren: "fab-renren", + reorder: "bars", + repeat: "redo", + resistance: "fab-rebel", + rmb: "yen-sign", + "rotate-left": "undo", + "rotate-right": "redo", + rouble: "ruble-sign", + rub: "ruble-sign", + ruble: "ruble-sign", + rupee: "rupee-sign", + s15: "bath", + safari: "fab-safari", + scissors: "cut", + scribd: "fab-scribd", + sellsy: "fab-sellsy", + send: "paper-plane", + "send-o": "far-paper-plane", + "share-square-o": "far-share-square", + shekel: "shekel-sign", + sheqel: "shekel-sign", + shield: "shield-alt", + shirtsinbulk: "fab-shirtsinbulk", + "sign-in": "sign-in-alt", + "sign-out": "sign-out-alt", + signing: "sign-language", + simplybuilt: "fab-simplybuilt", + skyatlas: "fab-skyatlas", + skype: "fab-skype", + slack: "fab-slack", + sliders: "sliders-h", + slideshare: "fab-slideshare", + "smile-o": "far-smile", + snapchat: "fab-snapchat", + "snapchat-ghost": "fab-snapchat-ghost", + "snapchat-square": "fab-snapchat-square", + "snowflake-o": "far-snowflake", + "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", + soundcloud: "fab-soundcloud", + spoon: "utensil-spoon", + spotify: "fab-spotify", + "square-o": "far-square", + "stack-exchange": "fab-stack-exchange", + "stack-overflow": "fab-stack-overflow", + "star-half-empty": "far-star-half", + "star-half-full": "far-star-half", + "star-half-o": "far-star-half", + "star-o": "far-star", + steam: "fab-steam", + "steam-square": "fab-steam-square", + "sticky-note-o": "far-sticky-note", + "stop-circle-o": "far-stop-circle", + stumbleupon: "fab-stumbleupon", + "stumbleupon-circle": "fab-stumbleupon-circle", + "sun-o": "far-sun", + superpowers: "fab-superpowers", + support: "far-life-ring", + tablet: "tablet-alt", + tachometer: "tachometer-alt", + telegram: "fab-telegram", + television: "tv", + "tencent-weibo": "fab-tencent-weibo", + themeisle: "fab-themeisle", + thermometer: "thermometer-full", + "thermometer-0": "thermometer-empty", + "thermometer-1": "thermometer-quarter", + "thermometer-2": "thermometer-half", + "thermometer-3": "thermometer-three-quarters", + "thermometer-4": "thermometer-full", + "thumb-tack": "thumbtack", + "thumbs-o-down": "far-thumbs-down", + "thumbs-o-up": "far-thumbs-up", + ticket: "ticket-alt", + "times-circle-o": "far-times-circle", + "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: "trash-alt", + "trash-o": "far-trash-alt", + trello: "fab-trello", + tripadvisor: "fab-tripadvisor", + try: "lira-sign", + tumblr: "fab-tumblr", + "tumblr-square": "fab-tumblr-square", + "turkish-lira": "lira-sign", + twitch: "fab-twitch", + twitter: "fab-twitter", + "twitter-square": "fab-twitter-square", + unsorted: "sort", + usb: "fab-usb", + usd: "dollar-sign", + "user-circle-o": "far-user-circle", + "user-o": "far-user", + vcard: "address-card", + "vcard-o": "far-address-card", + viacoin: "fab-viacoin", + viadeo: "fab-viadeo", + "viadeo-square": "fab-viadeo-square", + "video-camera": "video", + vimeo: "fab-vimeo-v", + "vimeo-square": "fab-vimeo-square", + vine: "fab-vine", + vk: "fab-vk", + "volume-control-phone": "phone-volume", + warning: "exclamation-triangle", + wechat: "fab-weixin", + weibo: "fab-weibo", + weixin: "fab-weixin", + whatsapp: "fab-whatsapp", + "wheelchair-alt": "fab-accessible-icon", + "wikipedia-w": "fab-wikipedia-w", + "window-close-o": "far-window-close", + "window-maximize": "far-window-maximize", + "window-restore": "far-window-restore", + windows: "fab-windows", + won: "won-sign", + wordpress: "fab-wordpress", + wpbeginner: "fab-wpbeginner", + wpexplorer: "fab-wpexplorer", + wpforms: "fab-wpforms", + xing: "fab-xing", + "xing-square": "fab-xing-square", + "y-combinator": "fab-y-combinator", + "y-combinator-square": "fab-hacker-news", + yahoo: "fab-yahoo", + yc: "fab-y-combinator", + "yc-square": "fab-hacker-news", + yelp: "fab-yelp", + yen: "yen-sign", + yoast: "fab-yoast", + youtube: "fab-youtube", + "youtube-play": "fab-youtube", + "youtube-square": "fab-youtube-square" +}; + export function replaceIcon(source, destination) { REPLACEMENTS[source] = destination; } @@ -59,6 +527,15 @@ 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("fas fa-", "") + .replace("fa-", "") + .trim(); +} + // TODO: Improve how helpers are registered for vdom compliation if (typeof Discourse !== "undefined") { Discourse.__widget_helpers.iconNode = iconNode; @@ -68,58 +545,110 @@ export function registerIconRenderer(renderer) { _renderers.unshift(renderer); } -// Support for font awesome icons -function faClasses(icon, params) { - let classNames = `fa fa-${icon.replacementId || icon.id} d-icon d-icon-${ - icon.id - }`; +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; - if (params) { - if (params.modifier) { - classNames += " fa-" + params.modifier; - } - if (params["class"]) { - classNames += " " + params["class"]; - } + let classNames = `fa d-icon d-icon-${dClass} svg-icon`; + + if (params && 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.`); // eslint-disable-line no-console + } +} + +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]; + } + + // 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) { - let tagName = params.tagName || "i"; - let html = `<${tagName} class='${faClasses(icon, params)}'`; - if (params.title) { - html += ` title='${I18n.t(params.title).replace(/'/g, "'")}'`; - } + const id = handleIconId(icon); + let html = ``; + html += ` xmlns="${SVG_NAMESPACE}">`; if (params.label) { html += `${params.label}`; } + if (params.title) { + html = `${html}`; + } return html; }, node(icon, params) { - let tagName = params.tagName || "i"; + const id = handleIconId(icon); + const classes = iconClasses(icon, params) + " svg-node"; - const properties = { - className: faClasses(icon, params), - attributes: { "aria-hidden": true } - }; + 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 + }) + ] + ); if (params.title) { - properties.attributes.title = params.title; - } - if (params.label) { - return h(tagName, properties, h("span.sr-only", I18n.t(params.label))); + return h( + "span", + { + title: params.title, + attributes: { class: "svg-icon-title" } + }, + [svg] + ); } else { - return h(tagName, properties); + return svg; } } }); 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 f39c5c6c899..c061cb55e95 100644 --- a/app/assets/javascripts/discourse/components/categories-boxes-topic.js.es6 +++ b/app/assets/javascripts/discourse/components/categories-boxes-topic.js.es6 @@ -2,19 +2,15 @@ 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 "topic-pinned"; + return "thumbtack"; } - if (closed) { - return "topic-closed"; + if (closed || archived) { + return "lock"; } - if (archived) { - return "topic-archived"; - } - return "topic-open"; + return "far-file-alt"; } }); diff --git a/app/assets/javascripts/discourse/components/composer-editor.js.es6 b/app/assets/javascripts/discourse/components/composer-editor.js.es6 index bfb3a91baba..5195bdb0c73 100644 --- a/app/assets/javascripts/discourse/components/composer-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/composer-editor.js.es6 @@ -22,6 +22,7 @@ import { applyInlineOneboxes } from "pretty-text/inline-oneboxer"; import { ajax } from "discourse/lib/ajax"; import InputValidation from "discourse/models/input-validation"; import { findRawTemplate } from "discourse/lib/raw-templates"; +import { iconHTML } from "discourse-common/lib/icon-library"; import { tinyAvatar, displayErrorForUpload, @@ -212,7 +213,9 @@ export default Ember.Component.extend({ reason = I18n.t("composer.error.post_length", { min: minimumPostLength }); const tl = Discourse.User.currentProp("trust_level"); if (tl === 0 || tl === 1) { - reason += "
" + I18n.t("composer.error.try_like"); + reason += + "
" + + I18n.t("composer.error.try_like", { heart: iconHTML("heart") }); } } 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 00036734dee..f16d48827e1 100644 --- a/app/assets/javascripts/discourse/components/group-flair-inputs.js.es6 +++ b/app/assets/javascripts/discourse/components/group-flair-inputs.js.es6 @@ -1,5 +1,8 @@ import computed from "ember-addons/ember-computed-decorators"; +import { observes } from "ember-addons/ember-computed-decorators"; import { escapeExpression } from "discourse/lib/utilities"; +import { convertIconClass } from "discourse-common/lib/icon-library"; +import { ajax } from "discourse/lib/ajax"; export default Ember.Component.extend({ classNames: ["group-flair-inputs"], @@ -11,7 +14,36 @@ export default Ember.Component.extend({ @computed("model.flair_url") flairPreviewIcon(flairURL) { - return flairURL && flairURL.substr(0, 3) === "fa-"; + return flairURL && /fa(r|b?)-/.test(flairURL); + }, + + @computed("model.flair_url", "flairPreviewIcon") + flairPreviewIconUrl(flairURL, flairPreviewIcon) { + return flairPreviewIcon ? convertIconClass(flairURL) : ""; + }, + + @observes("model.flair_url") + _loadSVGIcon() { + Ember.run.debounce(this, this._loadIcon, 1000); + }, + + _loadIcon() { + const icon = convertIconClass(this.get("model.flair_url")), + c = "#svg-sprites", + h = "ajax-icon-holder", + singleIconEl = `${c} .${h}`; + + if (!icon) return; + + if (!$(`${c} symbol#${icon}`).length) { + ajax(`/svg-sprite/search/${icon}`).then(function(data) { + if ($(singleIconEl).length === 0) $(c).append(`
`); + + $(singleIconEl).html( + `${data}` + ); + }); + } }, @computed("model.flair_url", "flairPreviewIcon") diff --git a/app/assets/javascripts/discourse/components/topic-status.js.es6 b/app/assets/javascripts/discourse/components/topic-status.js.es6 index 834b26dfe19..2ab678f9d21 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-thumb-tack")) { + if (this.get("canAct") && $(e.target).hasClass("d-icon-thumbtack")) { 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", "thumb-tack", "pinned", this.get("canAct")); + renderIconIf("topic.pinned", "thumbtack", "pinned", this.get("canAct")); renderIconIf( "topic.unpinned", - "thumb-tack", + "thumbtack", "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 9734f1285f6..4117b7d39d6 100644 --- a/app/assets/javascripts/discourse/controllers/composer.js.es6 +++ b/app/assets/javascripts/discourse/controllers/composer.js.es6 @@ -186,15 +186,6 @@ 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 1988ae91bac..0e1984ff49a 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 fa-fw" : "caret-right fa-fw"); + return iconHTML(expanded ? "caret-down" : "caret-right"); }, @computed("page") diff --git a/app/assets/javascripts/discourse/controllers/history.js.es6 b/app/assets/javascripts/discourse/controllers/history.js.es6 index 1a38a3daaa6..e6c76c40aa7 100644 --- a/app/assets/javascripts/discourse/controllers/history.js.es6 +++ b/app/assets/javascripts/discourse/controllers/history.js.es6 @@ -4,6 +4,7 @@ import computed from "ember-addons/ember-computed-decorators"; import { propertyGreaterThan, propertyLessThan } from "discourse/lib/computed"; import { on, observes } from "ember-addons/ember-computed-decorators"; import { sanitizeAsync } from "discourse/lib/text"; +import { iconHTML } from "discourse-common/lib/icon-library"; function customTagArray(fieldName) { return function() { @@ -44,6 +45,7 @@ export default Ember.Controller.extend(ModalFunctionality, { "post.revisions.controls.comparing_previous_to_current_out_of_total", { previous, + icon: iconHTML("arrows-alt-h"), current, total } diff --git a/app/assets/javascripts/discourse/controllers/invite.js.es6 b/app/assets/javascripts/discourse/controllers/invite.js.es6 index 1b750a18659..b9f05daed37 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-o-right"); + this.set("inviteIcon", "hand-point-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 e93068deea9..8e48171eee7 100644 --- a/app/assets/javascripts/discourse/helpers/icon-or-image.js.es6 +++ b/app/assets/javascripts/discourse/helpers/icon-or-image.js.es6 @@ -1,14 +1,15 @@ import { htmlHelper } from "discourse-common/lib/helpers"; -import { iconHTML } from "discourse-common/lib/icon-library"; +import { iconHTML, convertIconClass } 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 ""; } - return iconHTML(icon.replace("fa-", "")); + icon = convertIconClass(icon); + return iconHTML(icon); }); diff --git a/app/assets/javascripts/discourse/initializers/sharing-sources.js.es6 b/app/assets/javascripts/discourse/initializers/sharing-sources.js.es6 index 24019e606e8..953aed8cb70 100644 --- a/app/assets/javascripts/discourse/initializers/sharing-sources.js.es6 +++ b/app/assets/javascripts/discourse/initializers/sharing-sources.js.es6 @@ -6,7 +6,7 @@ export default { initialize: function() { Sharing.addSource({ id: "twitter", - icon: "twitter-square", + icon: "fab-twitter-square", generateUrl: function(link, title) { return ( "http://twitter.com/intent/tweet?url=" + @@ -22,7 +22,7 @@ export default { Sharing.addSource({ id: "facebook", - icon: "facebook-square", + icon: "fab-facebook-square", title: I18n.t("share.facebook"), generateUrl: function(link, title) { return ( @@ -37,7 +37,7 @@ export default { Sharing.addSource({ id: "google+", - icon: "google-plus-square", + icon: "fab-google-plus-square", title: I18n.t("share.google+"), generateUrl: function(link) { return "https://plus.google.com/share?url=" + encodeURIComponent(link); diff --git a/app/assets/javascripts/discourse/lib/lightbox.js.es6 b/app/assets/javascripts/discourse/lib/lightbox.js.es6 index 48d3c66bdb9..6b0014e2401 100644 --- a/app/assets/javascripts/discourse/lib/lightbox.js.es6 +++ b/app/assets/javascripts/discourse/lib/lightbox.js.es6 @@ -1,5 +1,6 @@ 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) { @@ -57,6 +58,7 @@ 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 c1c7f5411fa..7fa722a28d8 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,4 +1,5 @@ import { h } from "virtual-dom"; +import { renderIcon } from "discourse-common/lib/icon-library"; const _decorators = []; @@ -35,12 +36,13 @@ export default function renderTopicFeaturedLink(topic) { if (meta) { return `${meta.domain}`; + }" href="${meta.href}">${renderIcon("string", "external-link-alt")} ${ + meta.domain + }`; } else { return ""; } } - export function topicFeaturedLinkNode(topic) { const meta = extractLinkMeta(topic); if (meta) { @@ -49,7 +51,7 @@ export function topicFeaturedLinkNode(topic) { { attributes: { href: meta.href, rel: meta.rel, target: meta.target } }, - meta.domain + [renderIcon("node", "external-link-alt"), 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 new file mode 100644 index 00000000000..74136b934a1 --- /dev/null +++ b/app/assets/javascripts/discourse/lib/svg-sprite-loader.js.es6 @@ -0,0 +1,21 @@ +import loadScript from "discourse/lib/load-script"; + +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(`
`); + + loadScript(spritePath).then(() => { + $($spriteEl).html(window.__svg_sprite); + // we got to clean up here... this is one giant string + delete window.__svg_sprite; + }); + } +}; diff --git a/app/assets/javascripts/discourse/mixins/grant-badge-controller.js.es6 b/app/assets/javascripts/discourse/mixins/grant-badge-controller.js.es6 index 30eac7ce9a6..949b4d5f590 100644 --- a/app/assets/javascripts/discourse/mixins/grant-badge-controller.js.es6 +++ b/app/assets/javascripts/discourse/mixins/grant-badge-controller.js.es6 @@ -1,5 +1,6 @@ import computed from "ember-addons/ember-computed-decorators"; import UserBadge from "discourse/models/user-badge"; +import { convertIconClass } from "discourse-common/lib/icon-library"; export default Ember.Mixin.create({ @computed("allBadges.[]", "userBadges.[]") @@ -17,6 +18,12 @@ export default Ember.Mixin.create({ (!granted[badge.get("id")] || badge.get("multiple_grant")) ); }) + .map(badge => { + if (badge.icon) { + badge.icon = convertIconClass(badge.icon); + } + return badge; + }) .sort((a, b) => a.get("name").localeCompare(b.get("name"))); }, diff --git a/app/assets/javascripts/discourse/models/composer.js.es6 b/app/assets/javascripts/discourse/models/composer.js.es6 index 1e4d822911d..45993627c2f 100644 --- a/app/assets/javascripts/discourse/models/composer.js.es6 +++ b/app/assets/javascripts/discourse/models/composer.js.es6 @@ -382,8 +382,11 @@ const Composer = RestModel.extend({ return this.get("titleLength") <= this.siteSettings.max_topic_title_length; }.property("minimumTitleLength", "titleLength", "post.static_doc"), - @computed("action") - saveIcon(action) { + @computed("action", "whisper") + saveIcon(action, whisper) { + if (whisper) { + return "eye-slash"; + } 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 aba619ee94b..0365a276585 100644 --- a/app/assets/javascripts/discourse/models/login-method.js.es6 +++ b/app/assets/javascripts/discourse/models/login-method.js.es6 @@ -93,6 +93,11 @@ 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/pre-initializers/svg-sprite-fontawesome.js.es6 b/app/assets/javascripts/discourse/pre-initializers/svg-sprite-fontawesome.js.es6 new file mode 100644 index 00000000000..7a5924423c9 --- /dev/null +++ b/app/assets/javascripts/discourse/pre-initializers/svg-sprite-fontawesome.js.es6 @@ -0,0 +1,11 @@ +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/raw-views/topic-status.js.es6 b/app/assets/javascripts/discourse/raw-views/topic-status.js.es6 index b93dca7b27d..6fd967b9177 100644 --- a/app/assets/javascripts/discourse/raw-views/topic-status.js.es6 +++ b/app/assets/javascripts/discourse/raw-views/topic-status.js.es6 @@ -45,15 +45,15 @@ export default Ember.Object.extend({ } if (topic.get("pinned")) { - results.push({ icon: "thumb-tack", key: "pinned" }); + results.push({ icon: "thumbtack", key: "pinned" }); } if (topic.get("unpinned")) { - results.push({ icon: "thumb-tack unpinned", key: "unpinned" }); + results.push({ icon: "thumbtack", key: "unpinned" }); } if (topic.get("invisible")) { - results.push({ icon: "eye-slash", key: "invisible" }); + results.push({ icon: "eye-slash" }); } results.forEach(result => { @@ -74,7 +74,6 @@ 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 5251070169e..95ebe51a0d3 100644 --- a/app/assets/javascripts/discourse/templates/components/categories-boxes-topic.hbs +++ b/app/assets/javascripts/discourse/templates/components/categories-boxes-topic.hbs @@ -1,3 +1,5 @@ +{{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 5842bf91512..65f280ab758 100644 --- a/app/assets/javascripts/discourse/templates/components/color-picker.hbs +++ b/app/assets/javascripts/discourse/templates/components/color-picker.hbs @@ -1 +1,5 @@ -{{#each colors as |c|}}{{color-picker-choice color=c usedColors=usedColors selectColor="selectColor"}}{{/each}} +{{#each colors as |c|}} + {{#color-picker-choice color=c usedColors=usedColors selectColor="selectColor"}} + {{d-icon 'check'}} + {{/color-picker-choice}} +{{/each}} diff --git a/app/assets/javascripts/discourse/templates/components/disabled-icon.hbs b/app/assets/javascripts/discourse/templates/components/disabled-icon.hbs index 100849f3123..0b33962e185 100644 --- a/app/assets/javascripts/discourse/templates/components/disabled-icon.hbs +++ b/app/assets/javascripts/discourse/templates/components/disabled-icon.hbs @@ -1,5 +1,5 @@ -{{d-icon icon modifier="stack-2x"}} +{{d-icon icon class="fa-stack-1x"}} {{#if disabled}} - {{d-icon "ban" modifier="stack-2x"}} + {{d-icon "ban" class="fa-stack-2x"}} {{/if}} 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 ad0530ba8e7..5436915996c 100644 --- a/app/assets/javascripts/discourse/templates/components/group-flair-inputs.hbs +++ b/app/assets/javascripts/discourse/templates/components/group-flair-inputs.hbs @@ -5,6 +5,9 @@ class="input-xxlarge" value=model.flair_url placeholderKey="groups.flair_url_placeholder"}} +
+ {{i18n 'groups.flair_url_description'}} +
@@ -39,7 +42,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 5289a927df0..cc950944ec3 100644 --- a/app/assets/javascripts/discourse/templates/components/login-buttons.hbs +++ b/app/assets/javascripts/discourse/templates/components/login-buttons.hbs @@ -1,5 +1,12 @@ {{#each buttons as |b|}} - + {{/each}} {{#if showLoginWithEmailLink}} @@ -7,6 +14,6 @@ action="emailLogin" label="email_login.button_label" disabled=processingEmailLink - icon="envelope-o" + icon="far-envelope" class="login-with-email-button"}} {{/if}} diff --git a/app/assets/javascripts/discourse/templates/components/notification-consent-banner.hbs b/app/assets/javascripts/discourse/templates/components/notification-consent-banner.hbs index f258abf113e..e93d62a3ba2 100644 --- a/app/assets/javascripts/discourse/templates/components/notification-consent-banner.hbs +++ b/app/assets/javascripts/discourse/templates/components/notification-consent-banner.hbs @@ -1,7 +1,9 @@ {{#if showNotificationPromptBanner}}
diff --git a/app/assets/javascripts/discourse/templates/composer.hbs b/app/assets/javascripts/discourse/templates/composer.hbs index f3e50c7561c..06070407690 100644 --- a/app/assets/javascripts/discourse/templates/composer.hbs +++ b/app/assets/javascripts/discourse/templates/composer.hbs @@ -19,8 +19,11 @@ {{composer-action-title model=model canWhisper=canWhisper tabindex=8}} {{#unless site.mobileView}} - {{#if whisperOrUnlistTopicText}} - ({{whisperOrUnlistTopicText}}) + {{#if model.whisper}} + {{d-icon 'eye-slash'}} + {{/if}} + {{#if model.unlistTopic}} + ({{i18n 'composer.unlist'}}) {{/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 c8b1c3a6f38..9dd8ee5a9bc 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 ~}} {{d-icon status.icon}} {{~else ~}} -<{{status.openTag}} title='{{status.title}}' class='topic-status'>{{d-icon status.icon}} +<{{status.openTag}} title='{{status.title}}' class='topic-status'>{{d-icon status.icon class=status.key}} {{~/if ~}} {{~/each}} {{~#if view.showDefault~}}{{d-icon view.showDefault}}{{~/if ~}} diff --git a/app/assets/javascripts/discourse/templates/user-selector-autocomplete.raw.hbs b/app/assets/javascripts/discourse/templates/user-selector-autocomplete.raw.hbs index 679a2120ac6..22de8631889 100644 --- a/app/assets/javascripts/discourse/templates/user-selector-autocomplete.raw.hbs +++ b/app/assets/javascripts/discourse/templates/user-selector-autocomplete.raw.hbs @@ -14,7 +14,7 @@ {{#each options.emails as |email|}}
  • - + {{d-icon 'envelope'}} {{format-username email.username}}
  • diff --git a/app/assets/javascripts/discourse/templates/user/messages.hbs b/app/assets/javascripts/discourse/templates/user/messages.hbs index 85541a84a27..60318347c36 100644 --- a/app/assets/javascripts/discourse/templates/user/messages.hbs +++ b/app/assets/javascripts/discourse/templates/user/messages.hbs @@ -26,7 +26,7 @@ {{#if group.has_messages}}
  • {{#link-to 'userPrivateMessages.group' group.name}} - {{d-icon "group" class="glyph"}} + {{d-icon "users"}} {{capitalize-string group.name}} {{/link-to}}
  • diff --git a/app/assets/javascripts/discourse/widgets/avatar-flair.js.es6 b/app/assets/javascripts/discourse/widgets/avatar-flair.js.es6 index f2e26106765..559adb9c599 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 { h } from "virtual-dom"; +import { iconNode, convertIconClass } from "discourse-common/lib/icon-library"; 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.substr(0, 3) === "fa-" + attrs.primary_group_flair_url.includes("fa-") ); }, @@ -52,20 +52,8 @@ createWidget("avatar-flair", { html(attrs) { if (this.isIcon(attrs)) { - 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 - ) + - "; " - : "" - } - }) - ]; + const icon = convertIconClass(attrs.primary_group_flair_url); + return [iconNode(icon)]; } 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 8ec91f8e49b..470dffda144 100644 --- a/app/assets/javascripts/discourse/widgets/post-small-action.js.es6 +++ b/app/assets/javascripts/discourse/widgets/post-small-action.js.es6 @@ -37,15 +37,15 @@ const icons = { "autoclosed.disabled": "unlock-alt", "archived.enabled": "folder", "archived.disabled": "folder-open", - "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", + "pinned.enabled": "thumbtack", + "pinned.disabled": "thumbtack unpinned", + "pinned_globally.enabled": "thumbtack", + "pinned_globally.disabled": "thumbtack unpinned", + "banner.enabled": "thumbtack", + "banner.disabled": "thumbtack unpinned", + "visible.enabled": "far-eye", + "visible.disabled": "far-eye-slash", + split_topic: "sign-out-alt", invited_user: "plus-circle", invited_group: "plus-circle", user_left: "minus-circle", @@ -53,7 +53,7 @@ const icons = { removed_group: "minus-circle", public_topic: "comment", private_topic: "envelope", - autobumped: "hand-o-right" + autobumped: "hand-point-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 4fee6557dd6..aaede013c3e 100644 --- a/app/assets/javascripts/discourse/widgets/time-gap.js.es6 +++ b/app/assets/javascripts/discourse/widgets/time-gap.js.es6 @@ -1,6 +1,5 @@ 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; @@ -21,7 +20,7 @@ export default createWidget("time-gap", { html(attrs) { return [ - h("div.topic-avatar", iconNode("fw")), + h("div.topic-avatar", ""), 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 783b4f09ef5..b029650af9f 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: "thumb-tack", + icon: "thumbtack", 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 e7c116a91fc..ff03d826573 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", "thumb-tack", "pinned"); - renderIconIf("unpinned", "thumb-tack", "unpinned"); + renderIconIf("pinned", "thumbtack", "pinned"); + renderIconIf("unpinned", "thumbtack", "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 5f3755050f7..fd22628ae09 100644 --- a/app/assets/javascripts/preload-application-data.js.no-module.es6 +++ b/app/assets/javascripts/preload-application-data.js.no-module.es6 @@ -34,6 +34,11 @@ } 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 07825a3bca0..0b2f9a7e959 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,6 +3,7 @@ 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, { @@ -52,7 +53,7 @@ export default ComboBox.extend(TagsMixin, { "mousedown touchstart", ".selected-tag", event => { - const $button = $(event.target); + const $button = $(event.target).closest(".selected-tag"); this._destroyEvent(event); this.destroyTags(this.computeContentItem($button.attr("data-value"))); } @@ -67,7 +68,7 @@ export default ComboBox.extend(TagsMixin, { @computed("hasReachedMaximum") caretIcon(hasReachedMaximum) { - return hasReachedMaximum ? null : "plus fa-fw"; + return hasReachedMaximum ? null : "plus"; }, @computed("tags") @@ -125,7 +126,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 01cdb52c228..d32ab062d39 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 = `thumb-tack${state === "unpinned" ? " unpinned" : ""}`; + content.icon = `thumbtack${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: "thumb-tack" + icon: "thumbtack" }, { id: "unpinned", name: I18n.t("topic_statuses.unpinned.title"), - icon: "thumb-tack unpinned", + icon: "thumbtack 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 7e3ea1baf4f..7928a3b94b9 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 fa-fw"}} +{{d-icon caretIcon class="caret-icon"}} 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 c9fc965ee83..a090a66aaa3 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 fa-fw"}} +{{d-icon caretIcon class="caret-icon"}} 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 a5c5cbd6a36..8a630455bda 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 fa-fw"}} +{{d-icon caretIcon class="caret-icon"}} 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 09b5adfa859..1eb83f00509 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,3 +1,4 @@
    {{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 141ae2748f6..b39d272a045 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,6 +8,7 @@ {{{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 440988e3efe..41e15b8653e 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 fa-fw"}} +{{d-icon caretIcon class="caret-icon"}} diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index 6c586c878b1..02473d0f8d6 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -1,5 +1,4 @@ @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 603c421eb44..031363bad0f 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; - i { + .d-icon { 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 c9a8ef9df48..a2e1c7c9bc5 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; } - i { + .d-icon { margin: 0; } } @@ -65,13 +65,13 @@ &.high-trending-up, &.trending-up { - i { + .d-icon { color: $success; } } &.high-trending-down, &.trending-down { - i { + .d-icon { color: $danger; } } diff --git a/app/assets/stylesheets/common/admin/dashboard_previous.scss b/app/assets/stylesheets/common/admin/dashboard_previous.scss index b610e064a64..a040f1c5954 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; - i { + .d-icon { display: none; } &.high-trending-up, &.trending-up { - i.up { + .up { color: $success; display: inline; } } &.high-trending-down, &.trending-down { - i.down { + .down { color: $danger; display: inline; } } &.no-change { - i.down { + .down { display: inline; visibility: hidden; } } } tr.reverse-colors { - td.value.high-trending-down i.down, - td.value.trending-down i.down { + td.value.high-trending-down .down, + td.value.trending-down .down { color: $success; } - td.value.high-trending-up i.up, - td.value.trending-up i.up { + td.value.high-trending-up .up, + td.value.trending-up .up { color: $danger; } } diff --git a/app/assets/stylesheets/common/admin/staff_logs.scss b/app/assets/stylesheets/common/admin/staff_logs.scss index d20eef94dbb..cfe23babf20 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; } - i { + .d-icon { margin-left: 6px; } } diff --git a/app/assets/stylesheets/common/base/_topic-list.scss b/app/assets/stylesheets/common/base/_topic-list.scss index 97411db14a5..e29caaaae42 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-thumb-tack.unpinned { - @include fa-icon-rotate(180deg, 1); +.d-icon-thumbtack.unpinned { + @include fa-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 8a6a3954526..0e130634b00 100644 --- a/app/assets/stylesheets/common/base/category-list.scss +++ b/app/assets/stylesheets/common/base/category-list.scss @@ -175,26 +175,18 @@ margin: 0; } li { - padding: 0; - margin-left: 1.5em; + padding: 4px 0; + display: flex; .overflow { max-height: 3em; overflow: hidden; text-overflow: ellipsis; } - } - 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"; + + .d-icon { + margin-right: 6px; + margin-top: 2px; + } } } } diff --git a/app/assets/stylesheets/common/base/colorpicker.scss b/app/assets/stylesheets/common/base/colorpicker.scss index 788111d5743..271d48ccb76 100644 --- a/app/assets/stylesheets/common/base/colorpicker.scss +++ b/app/assets/stylesheets/common/base/colorpicker.scss @@ -33,18 +33,14 @@ height: 1.2em; padding: 0; flex: 0 0 auto; - &.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); + color: white; + svg { + display: none; + } + &.used-color svg { + display: inline-flex; + opacity: 0.8; + max-width: 70%; } } } diff --git a/app/assets/stylesheets/common/base/compose.scss b/app/assets/stylesheets/common/base/compose.scss index eab924449f8..238ad5e7091 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; } - i { + .d-icon { color: $secondary; } } @@ -97,13 +97,19 @@ margin: 5px 0 10px 0; display: flex; align-items: center; - i { + .d-icon { color: $primary-high; } .reply-details { max-width: calc(100% - 175px); flex: 1 1 auto; + display: flex; + align-items: center; 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 7a3b46a5de4..8d8cd19f7f4 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 i { +.emoji-picker .diversity-picker .diversity-scale.selected .d-icon { display: block; } -.emoji-picker .diversity-picker i { +.emoji-picker .diversity-picker .d-icon { display: none; } .emoji-picker .diversity-picker .d-icon { color: #fff; font-size: $font-0; - text-shadow: 0.5px 1.5px 0 rgba(0, 0, 0, 0.3); + filter: drop-shadow(0.5px 1.5px 0 rgba(0, 0, 0, 0.3)); } .emoji-picker button.emoji { @@ -182,10 +182,6 @@ 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 653989b1ae6..20b6cf58520 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; - i { + .d-icon { font-size: $size !important; } } @@ -86,7 +86,7 @@ table.group-manage-logs { .group-manage-logs-expand-details { cursor: pointer; - i { + .d-icon { color: blend-primary-secondary(50%); } } @@ -117,7 +117,7 @@ table.group-members { } th.sortable { - i { + .d-icon { margin-left: 5px; } diff --git a/app/assets/stylesheets/common/base/groups.scss b/app/assets/stylesheets/common/base/groups.scss index c7658fc8f03..ae41e6c4e0c 100644 --- a/app/assets/stylesheets/common/base/groups.scss +++ b/app/assets/stylesheets/common/base/groups.scss @@ -50,7 +50,7 @@ } td.group-user-status { - i { + .d-icon { color: $primary; } } @@ -214,7 +214,7 @@ background-size: $size; height: $size; - i { + .d-icon { font-size: $size !important; } } diff --git a/app/assets/stylesheets/common/base/lightbox.scss b/app/assets/stylesheets/common/base/lightbox.scss index 06c32b1636c..4f96f0592d7 100644 --- a/app/assets/stylesheets/common/base/lightbox.scss +++ b/app/assets/stylesheets/common/base/lightbox.scss @@ -36,9 +36,14 @@ white-space: nowrap; text-overflow: ellipsis; &:before { - font-family: "FontAwesome"; - content: "\F03E"; + // ideally, the SVG used here should be in HTML and reference the SVG sprite + content: svg-uri( + '' + ); margin-right: 5px; + display: inline-block; + vertical-align: middle; + opacity: 0.8; } } @@ -51,11 +56,14 @@ .expand { position: absolute; - bottom: 4px; + bottom: 2px; right: 7px; &:before { - font-family: "FontAwesome"; - content: "\F065"; + // ideally, the SVG used here should be in HTML and reference the SVG sprite + content: svg-uri( + ' ' + ); + opacity: 0.8; } } } diff --git a/app/assets/stylesheets/common/base/magnific-popup.scss b/app/assets/stylesheets/common/base/magnific-popup.scss index 17395ed1003..76ef9a84466 100644 --- a/app/assets/stylesheets/common/base/magnific-popup.scss +++ b/app/assets/stylesheets/common/base/magnific-popup.scss @@ -499,9 +499,7 @@ button { padding-right: 36px; // leave some space for counter at right side // add the download icon - a.image-source-link:before { - content: "\f019"; - font-family: FontAwesome; + a.image-source-link .d-icon { padding-right: 5px; } } diff --git a/app/assets/stylesheets/common/base/menu-panel.scss b/app/assets/stylesheets/common/base/menu-panel.scss index 43c719778ad..5ac03f7445a 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 i.fa { + div .fa { display: none; } @@ -181,17 +181,14 @@ } li:not(.show-all) { padding: 0.25em 0.5em; - i { + .d-icon { float: left; margin-right: 5px; padding-top: 2px; } } .is-warning { - .d-icon-envelope-o { - &:before { - content: "\f0e0"; - } + .d-icon-far-envelope { color: $danger; } } diff --git a/app/assets/stylesheets/common/base/onebox.scss b/app/assets/stylesheets/common/base/onebox.scss index 220b9cdaa8e..31043cc5feb 100644 --- a/app/assets/stylesheets/common/base/onebox.scss +++ b/app/assets/stylesheets/common/base/onebox.scss @@ -251,14 +251,15 @@ aside.onebox { .instagram-video-icon { &:before { - font-family: FontAwesome; - font-size: $font-up-5; - content: "\f144"; + opacity: 0.8; + // ideally, the SVG used here should be in HTML and reference the SVG sprite + content: svg-uri( + '' + ); } 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 0e2e9346967..9f78dc5ae16 100644 --- a/app/assets/stylesheets/common/base/tagging.scss +++ b/app/assets/stylesheets/common/base/tagging.scss @@ -114,7 +114,7 @@ $tag-color: $primary-medium; display: inline-block; font-size: $font-down-1; } - .topic-featured-link { + .discourse-tags + .topic-featured-link { margin-left: 8px; } } @@ -156,12 +156,14 @@ $tag-color: $primary-medium; .discourse-tag.bullet { margin-right: 0.25em; &:before { - content: "\f04d"; - font-family: FontAwesome; - color: $primary-low-mid; + background: $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 c8cf624aff2..57b81ce1eb9 100644 --- a/app/assets/stylesheets/common/base/topic-admin-menu.scss +++ b/app/assets/stylesheets/common/base/topic-admin-menu.scss @@ -28,9 +28,6 @@ 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 65c19659cd8..557d48d8807 100644 --- a/app/assets/stylesheets/common/base/topic-post.scss +++ b/app/assets/stylesheets/common/base/topic-post.scss @@ -28,15 +28,20 @@ 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; - margin-left: 3px; color: dark-light-choose($primary-medium, $secondary-medium); } + .svg-icon-title { + margin-left: 3px; + margin-right: 0px; + } .new_user a, .user-title, .user-title a { @@ -630,7 +635,7 @@ blockquote > *:last-child { padding: 0.7em 0; border-top: none; margin-right: 11px; - i { + .d-icon { font-size: 2em; width: 45px; text-align: center; @@ -740,9 +745,10 @@ a.mention-group { > * { overflow: hidden; + vertical-align: middle; } - > i.fa { + > .d-icon { color: dark-light-choose($primary-medium, $secondary-medium); margin-right: 6px; font-size: $font-0; @@ -835,11 +841,6 @@ 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 a1c19b57442..d5604603982 100644 --- a/app/assets/stylesheets/common/base/topic.scss +++ b/app/assets/stylesheets/common/base/topic.scss @@ -95,7 +95,7 @@ a.badge-category { a.badge-category { margin-top: 5px; } - a.edit-topic i { + a.edit-topic .d-icon { font-size: 0.8em; } .edit-topic-title { @@ -232,21 +232,21 @@ a.badge-category { margin-left: 0.5em; flex: 0 0 auto; } - i { + .d-icon { font-size: $font-down-2; margin: 0 0.5em 0 0; } } } a.reply-new { - i { + .d-icon { background: $secondary; border-radius: 20px; transition: all linear 0.15s; } &:hover { color: $tertiary; - i { + .d-icon { background: $tertiary-low; } } @@ -258,11 +258,7 @@ a.topic-featured-link { text-transform: lowercase; color: dark-light-choose($primary-medium, $secondary-medium); font-size: 0.875rem; - &::before { - position: relative; - top: 0.1em; - padding-right: 3px; - font-family: FontAwesome; - content: "\f08e"; + .d-icon { + margin-right: 3px; } } diff --git a/app/assets/stylesheets/common/base/user.scss b/app/assets/stylesheets/common/base/user.scss index 597076611bc..875b976b967 100644 --- a/app/assets/stylesheets/common/base/user.scss +++ b/app/assets/stylesheets/common/base/user.scss @@ -19,10 +19,6 @@ } .user-main { - .d-icon-heart { - color: $love !important; - } - .about { overflow: hidden; width: 100%; @@ -84,7 +80,7 @@ h1 { font-size: $font-up-5; font-weight: normal; - i { + .d-icon { font-size: 0.8em; } } @@ -698,3 +694,7 @@ } } } + +.user-summary-page .d-icon-heart { + color: $love; +} diff --git a/app/assets/stylesheets/common/components/buttons.scss b/app/assets/stylesheets/common/components/buttons.scss index c4640afd655..f9cf292688a 100644 --- a/app/assets/stylesheets/common/components/buttons.scss +++ b/app/assets/stylesheets/common/components/buttons.scss @@ -159,7 +159,6 @@ } &:before { margin-right: 9px; - font-family: FontAwesome; font-size: $font-0; } &.google, @@ -167,62 +166,28 @@ background: $google; color: #333; border: 1px solid $primary-low; - 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; - } + // non-FA SVG icon for Google in login-buttons.hbs + .d-icon { + opacity: 0.9; } } &.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 new file mode 100644 index 00000000000..40e805dc28b --- /dev/null +++ b/app/assets/stylesheets/common/components/svg.scss @@ -0,0 +1,46 @@ +.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; + } +} + +// Stacked Icons +// Usage: +// +// +// +// +// ------------------------- + +.fa-stack { + position: relative; + width: 1em; + height: 1em; + display: inline-block; + + .fa-stack-1x, + .fa-stack-2x { + left: 0px; + top: 0px; + position: absolute; + } + + .fa-stack-2x { + height: 1.5em; + width: 1.5em; + margin-top: -0.25em; + margin-left: -0.25em; + } +} diff --git a/app/assets/stylesheets/common/components/user-stream-item.scss b/app/assets/stylesheets/common/components/user-stream-item.scss index 54c2f126a89..843da511304 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 i { + .delete-info .d-icon { font-size: $font-0; } @@ -151,5 +151,8 @@ width: 15px; display: inline-block; color: $primary; + &.d-icon-heart { + color: $love; + } } } diff --git a/app/assets/stylesheets/common/foundation/mixins.scss b/app/assets/stylesheets/common/foundation/mixins.scss index 44654bde653..a4fa84fcd68 100644 --- a/app/assets/stylesheets/common/foundation/mixins.scss +++ b/app/assets/stylesheets/common/foundation/mixins.scss @@ -86,3 +86,60 @@ $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 d7d8e6824d3..6efbb961793 100644 --- a/app/assets/stylesheets/common/printer-friendly.scss +++ b/app/assets/stylesheets/common/printer-friendly.scss @@ -78,9 +78,6 @@ .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 339ec4bb152..39db4c20eb0 100644 --- a/app/assets/stylesheets/common/select-kit/mini-tag-chooser.scss +++ b/app/assets/stylesheets/common/select-kit/mini-tag-chooser.scss @@ -79,16 +79,13 @@ box-shadow: 0 0 2px $danger, 0 1px 0 rgba(0, 0, 0, 0.05); } - &:after { - content: "\f00d"; + .d-icon { color: $primary-low-mid; - font-family: "FontAwesome"; + vertical-align: middle; } - &:hover { - &:after { - color: $danger; - } + &:hover .d-icon { + 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 e2a98d760ca..0de88ae66b6 100644 --- a/app/assets/stylesheets/common/select-kit/multi-select.scss +++ b/app/assets/stylesheets/common/select-kit/multi-select.scss @@ -125,25 +125,20 @@ } .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; - } } } @@ -158,19 +153,12 @@ padding: 4px; } - .name { - &:after { - content: "\f00d"; - color: $primary-low-mid; - font-family: "FontAwesome"; - font-size: $font-down-2; - } - - &:hover { - &:after { - color: $danger; - } - } + .d-icon { + color: $primary-low-mid; + vertical-align: middle; + } + &:hover .d-icon { + color: $danger; } &.is-highlighted { diff --git a/app/assets/stylesheets/common/topic-entrance.scss b/app/assets/stylesheets/common/topic-entrance.scss index 4310fd2f040..63765d15948 100644 --- a/app/assets/stylesheets/common/topic-entrance.scss +++ b/app/assets/stylesheets/common/topic-entrance.scss @@ -13,10 +13,9 @@ width: 100%; margin-bottom: 5px; - i { + .d-icon { display: block; - margin-top: 2px; - margin-bottom: 2px; + margin: 2px auto; transform: rotate(90deg); } } diff --git a/app/assets/stylesheets/common/topic-timeline.scss b/app/assets/stylesheets/common/topic-timeline.scss index 253b89e2b98..d9b8628b5ee 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; - i.progress { + .progress { display: none; } } @@ -194,6 +194,7 @@ .timeline-footer-controls { margin-top: 1.5em; transition: opacity 0.2s ease-in; + display: flex; button { margin-right: 0.5em; @@ -262,8 +263,7 @@ .timeline-last-read { position: absolute; margin-left: -0.35em; - - i.progress { + .progress { font-size: 0.8em; color: $tertiary; margin-right: 1em; @@ -281,9 +281,6 @@ 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 1bd3dac3615..35314c0f21d 100644 --- a/app/assets/stylesheets/desktop/discourse.scss +++ b/app/assets/stylesheets/desktop/discourse.scss @@ -22,7 +22,7 @@ body.widget-dragging { margin: 0; line-height: $line-height-small; - i { + .d-icon { font-size: $font-down-1; } } @@ -117,7 +117,8 @@ input { } .input { - &-xxlarge { + &-xxlarge, + &-xxlarge + .control-instructions { width: 530px; } } diff --git a/app/assets/stylesheets/desktop/topic-list.scss b/app/assets/stylesheets/desktop/topic-list.scss index 985d0476b92..5cbda677385 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-thumb-tack { + .d-icon-thumbtack { color: dark-light-choose($primary-medium, $secondary-medium); } - .d-icon-thumb-tack.unpinned { + .d-icon-thumbtack.unpinned { color: dark-light-choose($primary-medium, $secondary-medium); } a.title { @@ -243,7 +243,7 @@ button.dismiss-read { span { display: none; } - i { + .d-icon { margin-right: 0; } } diff --git a/app/assets/stylesheets/desktop/topic-post.scss b/app/assets/stylesheets/desktop/topic-post.scss index b81211e5baf..c258a952f1e 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 i { +h1 .topic-statuses .topic-status .d-icon { font-size: 0.857em; vertical-align: middle; } @@ -80,7 +80,7 @@ nav.post-controls { .like-count { font-size: $font-up-1; margin-left: 0; - i.d-icon { + .d-icon { padding-left: 10px; color: dark-light-choose($primary-low-mid, $secondary-high); } @@ -137,7 +137,7 @@ nav.post-controls { color: $primary; } } - i { + .d-icon { margin-left: 5px; font-size: $font-down-1; } @@ -147,7 +147,7 @@ nav.post-controls { color: dark-light-choose($primary-high, $secondary-low); margin-left: 10px; } - .create i { + .create .d-icon { margin-right: 5px; } button { @@ -361,7 +361,7 @@ nav.post-controls { line-height: $line-height-large; } .number, - i { + .d-icon { color: dark-light-choose($primary-high, $secondary-low); font-size: $font-up-2; line-height: $line-height-medium; @@ -453,7 +453,7 @@ nav.post-controls { .suggested-topics .topic-statuses .topic-status { padding: 0; - i { + .d-icon { font-size: 1em; } } @@ -498,6 +498,64 @@ video { } } +.extra-info-wrapper { + overflow: hidden; + .badge-wrapper, + i, + .topic-link { + -webkit-animation: fadein 0.7s; + animation: fadein 0.7s; + } + .topic-statuses { + .d-icon { + color: $header_primary; + } + .d-icon-envelope { + color: $danger; + } + .d-icon-lock { + padding-top: 0.15em; + } + .unpinned { + color: $header_primary; + } + } + .topic-link { + color: $header_primary; + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .topic-header-extra { + margin: 0 0 0 5px; + } +} + +/* default docked header CSS for all topics, including those without categories */ + +.extra-info { + h1 { + margin: 5px 0 0 0; + font-size: $font-up-3; + line-height: $line-height-large; + width: 100%; + } + .topic-statuses { + margin-top: -2px; + } +} + +/* override docked header CSS for topics with categories */ + +.extra-info.two-rows { + h1 { + line-height: $line-height-medium; + margin: 0; + width: 100%; + } +} + .open > .dropdown-menu { display: block; } @@ -740,7 +798,7 @@ $topic-avatar-width: 45px; font-size: $font-up-4; color: $primary; margin-bottom: 5px; - i { + .d-icon { margin-right: 7px; } } @@ -749,24 +807,11 @@ $topic-avatar-width: 45px; a.attachment:before { display: inline-block; margin-right: 4px; - 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"); + // ideally, the SVG used here should be in HTML and reference the SVG sprite + content: svg-uri( + '' + ); + vertical-align: middle; } .topic-meta-data { @@ -833,9 +878,6 @@ 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 cfcdbc1714d..d7a7ce8981e 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; - i { + .d-icon { 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 4000b275c43..54893e04e10 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; } - i { + .d-icon { 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; - i { + .d-icon { margin-right: 0.25em; } } @@ -224,7 +224,7 @@ $user_card_background: $secondary; background-position: center; background-size: $size; color: $primary; - i { + .d-icon { 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 72496820dc3..da399d86931 100644 --- a/app/assets/stylesheets/mobile/compose.scss +++ b/app/assets/stylesheets/mobile/compose.scss @@ -175,4 +175,8 @@ .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 ce37c2393d2..25816c870fc 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 { - i { + .d-icon { color: $secondary-high; } } diff --git a/app/assets/stylesheets/mobile/header.scss b/app/assets/stylesheets/mobile/header.scss index af8d268cff3..7904889dbcf 100644 --- a/app/assets/stylesheets/mobile/header.scss +++ b/app/assets/stylesheets/mobile/header.scss @@ -70,6 +70,6 @@ display: none; } -.search-link .topic-statuses .topic-status i { +.search-link .topic-statuses .topic-status .d-icon { font-size: $font-0; } diff --git a/app/assets/stylesheets/mobile/topic-list.scss b/app/assets/stylesheets/mobile/topic-list.scss index ba1c8962169..319c94324b0 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 { - i { + .d-icon { 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; - i { + .d-icon { color: $secondary; } @@ -276,7 +276,7 @@ tr.category-topic-link { display: inline-block; font-size: $font-up-2; margin: 0 0 0 10px; - i { + .d-icon { margin-right: 5px; } a[href] { diff --git a/app/assets/stylesheets/mobile/topic-post.scss b/app/assets/stylesheets/mobile/topic-post.scss index 6d65d3be04f..d4b13511aee 100644 --- a/app/assets/stylesheets/mobile/topic-post.scss +++ b/app/assets/stylesheets/mobile/topic-post.scss @@ -47,11 +47,10 @@ span.badge-posts { } &.my-likes { display: flex; - align-items: baseline; max-width: unset; margin-right: 0; padding: 8px 9px 8px 8px; - i { + .d-icon { padding-left: 8px; } } @@ -188,7 +187,7 @@ a.reply-to-tab { line-height: $line-height-medium; } .number, - i { + .d-icon { color: dark-light-choose($primary-high, $secondary-low); font-size: $font-up-1; } @@ -397,10 +396,6 @@ 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 d9870cce6cc..1a3c493c885 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; - i { + .d-icon { 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 deleted file mode 100644 index 8a020dbfff7..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_animated.scss +++ /dev/null @@ -1,34 +0,0 @@ -// 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 deleted file mode 100644 index d4b85a02f24..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_bordered-pulled.scss +++ /dev/null @@ -1,25 +0,0 @@ -// 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 deleted file mode 100644 index 7425ef85fc8..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_core.scss +++ /dev/null @@ -1,12 +0,0 @@ -// 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 deleted file mode 100644 index b221c98133a..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_fixed-width.scss +++ /dev/null @@ -1,6 +0,0 @@ -// 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 deleted file mode 100644 index e63e702c4d9..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_icons.scss +++ /dev/null @@ -1,789 +0,0 @@ -/* 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 deleted file mode 100644 index 41e9a8184aa..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_larger.scss +++ /dev/null @@ -1,13 +0,0 @@ -// Icon Sizes -// ------------------------- - -/* makes the font 33% larger relative to the icon container */ -.#{$fa-css-prefix}-lg { - font-size: (4em / 3); - line-height: (3em / 4); - vertical-align: -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 deleted file mode 100644 index 7d1e4d54d6c..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_list.scss +++ /dev/null @@ -1,19 +0,0 @@ -// 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 deleted file mode 100644 index c3bbd5745d3..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_mixins.scss +++ /dev/null @@ -1,60 +0,0 @@ -// 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 deleted file mode 100644 index bb457c23a8e..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_path.scss +++ /dev/null @@ -1,15 +0,0 @@ -/* 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 deleted file mode 100644 index a3558fd09ca..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_rotated-flipped.scss +++ /dev/null @@ -1,20 +0,0 @@ -// 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 deleted file mode 100644 index 637426f0da6..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_screen-reader.scss +++ /dev/null @@ -1,5 +0,0 @@ -// 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 deleted file mode 100644 index aef7403660c..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_stacked.scss +++ /dev/null @@ -1,20 +0,0 @@ -// 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 deleted file mode 100644 index 498fc4a087c..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/_variables.scss +++ /dev/null @@ -1,800 +0,0 @@ -// 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 deleted file mode 100644 index abab424ee54..00000000000 --- a/app/assets/stylesheets/vendor/font_awesome/font-awesome.scss +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * 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 c510382d841..56d30477987 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 new file mode 100644 index 00000000000..2a8e05958bd --- /dev/null +++ b/app/controllers/svg_sprite_controller.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +class SvgSpriteController < ApplicationController + skip_before_action :preload_json, :redirect_to_login_if_required, :check_xhr, :verify_authenticity_token, only: [:show, :search] + + requires_login except: [: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 = "window.__svg_sprite = #{SvgSprite.bundle.inspect};" + + 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: 'application/javascript' + end + end + + def search + keyword = params.require(:keyword) + data = SvgSprite.search(keyword) + + if data.blank? + render body: nil, status: 404 + else + render plain: data.inspect, disposition: nil, content_type: 'text/plain' + end + end +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 03a0b608633..cd3ed044537 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -434,8 +434,13 @@ 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/badge.rb b/app/models/badge.rb index c7c6c40b307..117f27c5836 100644 --- a/app/models/badge.rb +++ b/app/models/badge.rb @@ -112,6 +112,10 @@ class Badge < ActiveRecord::Base before_create :ensure_not_system + after_commit do + SvgSprite.expire_cache + end + # fields that can not be edited on system badges def self.protected_system_fields [ diff --git a/app/models/group.rb b/app/models/group.rb index 45615dd2bcd..b3e2ce2f506 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -42,6 +42,7 @@ class Group < ActiveRecord::Base def expire_cache ApplicationSerializer.expire_cache_fragment!("group_names") + SvgSprite.expire_cache end validate :name_format_validator @@ -49,7 +50,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[0, 3] != 'fa-' } + validates :flair_url, url: true, if: Proc.new { |g| g.flair_url && g.flair_url.exclude?('fa-') } validate :validate_grant_trust_level, if: :will_save_change_to_grant_trust_level? AUTO_GROUPS = { diff --git a/app/models/theme_setting.rb b/app/models/theme_setting.rb index 4134d4cb10e..b851e7e4bda 100644 --- a/app/models/theme_setting.rb +++ b/app/models/theme_setting.rb @@ -9,6 +9,7 @@ class ThemeSetting < ActiveRecord::Base theme.clear_cached_settings! theme.remove_from_cache! theme.theme_fields.update_all(value_baked: nil) + SvgSprite.expire_cache if self.name.to_s.include?("_icon") end def self.types diff --git a/app/views/application/_header.html.erb b/app/views/application/_header.html.erb index 23c75aa9e7f..bd02995d1ad 100644 --- a/app/views/application/_header.html.erb +++ b/app/views/application/_header.html.erb @@ -12,11 +12,6 @@ <%- end %>
    - <% unless current_user %> -
    - " class='btn btn-primary btn-small login-button'> <%= I18n.t('log_in') %> -
    - <% end %> diff --git a/app/views/common/_special_font_face.html.erb b/app/views/common/_special_font_face.html.erb deleted file mode 100644 index 50fc5d96a87..00000000000 --- a/app/views/common/_special_font_face.html.erb +++ /dev/null @@ -1,21 +0,0 @@ -<%# - 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/finish_installation/index.html.erb b/app/views/finish_installation/index.html.erb index 7428e9a37a4..be8bb524341 100644 --- a/app/views/finish_installation/index.html.erb +++ b/app/views/finish_installation/index.html.erb @@ -10,7 +10,10 @@
    <%= link_to(finish_installation_register_path, class: 'wizard-btn primary') do %> - + + + + <%= t 'finish_installation.register.button' %> <% end %>
    diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 459c778d059..e6502658b32 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -48,7 +48,6 @@ <%- end %> <%= render partial: "common/discourse_stylesheet" %> - <%= render partial: "common/special_font_face" %> <%= yield :head %> @@ -82,7 +81,7 @@ diff --git a/app/views/layouts/finish_installation.html.erb b/app/views/layouts/finish_installation.html.erb index 8fc25c08eb9..91df8077989 100644 --- a/app/views/layouts/finish_installation.html.erb +++ b/app/views/layouts/finish_installation.html.erb @@ -1,7 +1,6 @@ <%= 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 8b68e33910f..29f0f52a6db 100644 --- a/app/views/layouts/no_ember.html.erb +++ b/app/views/layouts/no_ember.html.erb @@ -5,7 +5,6 @@ <%= 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/safe_mode/index.html.erb b/app/views/safe_mode/index.html.erb index 4a9700cf9a4..0405a079462 100644 --- a/app/views/safe_mode/index.html.erb +++ b/app/views/safe_mode/index.html.erb @@ -26,7 +26,10 @@ <%= submit_tag t('safe_mode.enter'), class: 'btn btn-danger' %> <%- if flash[:must_select] %> - <%= t 'safe_mode.must_select' %> + + + + <%= t 'safe_mode.must_select' %> <%- end %>

    diff --git a/app/views/static/show.html.erb b/app/views/static/show.html.erb index 8ee6ca8b413..0f71b30f3fe 100644 --- a/app/views/static/show.html.erb +++ b/app/views/static/show.html.erb @@ -15,7 +15,12 @@ <% if staff? %> -

    <%= t 'edit_this_page' %>

    +

    + + + + <%= t 'edit_this_page' %> +

    <% end %>
    diff --git a/app/views/wizard/index.html.erb b/app/views/wizard/index.html.erb index ea5809bada5..9ccc5e3b15a 100644 --- a/app/views/wizard/index.html.erb +++ b/app/views/wizard/index.html.erb @@ -5,7 +5,6 @@ <%= preload_script "locales/#{I18n.locale}" %> <%= preload_script 'wizard-vendor' %> <%= preload_script 'wizard-application' %> - <%= render partial: "common/special_font_face" %> <%= csrf_meta_tags %> @@ -16,5 +15,12 @@
    <%= preload_script 'wizard-start' %> + + + diff --git a/config/application.rb b/config/application.rb index a4405ec0024..692011edb9a 100644 --- a/config/application.rb +++ b/config/application.rb @@ -246,6 +246,7 @@ module Discourse end require_dependency 'stylesheet/manager' + require_dependency 'svg_sprite/svg_sprite' config.after_initialize do # require common dependencies that are often required by plugins diff --git a/config/initializers/006-mini_profiler.rb b/config/initializers/006-mini_profiler.rb index 737e3bbb0dc..4af6edb08fc 100644 --- a/config/initializers/006-mini_profiler.rb +++ b/config/initializers/006-mini_profiler.rb @@ -32,6 +32,7 @@ if defined?(Rack::MiniProfiler) /\/letter_avatar\//, /\/letter_avatar_proxy\//, /\/highlight-js\//, + /\/svg-sprite\//, /qunit/, /srv\/status/, /commits-widget/, diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 7ec9c4f7800..3b7ec233ddd 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -538,6 +538,7 @@ en: description: "You will never be notified of anything about new topics in this group." flair_url: "Avatar Flair Image" flair_url_placeholder: "(Optional) Image URL or Font Awesome class" + flair_url_description: "Use square images no smaller than 20px by 20px or FontAwesome icons (accepted formats: \"fa-icon\", \"far fa-icon\" or \"fab fa-icon\")." flair_bg_color: "Avatar Flair Background Color" flair_bg_color_placeholder: "(Optional) Hex color value" flair_color: "Avatar Flair Color" @@ -1373,7 +1374,7 @@ en: title_too_long: "Title can't be more than {{max}} characters" post_missing: "Post can't be empty" post_length: "Post must be at least {{min}} characters" - try_like: 'Have you tried the button?' + try_like: "Have you tried the {{heart}} button?" category_missing: "You must choose a category" tags_missing: "You must choose at least {{count}} tags" @@ -2054,7 +2055,6 @@ en: post: quote_reply: "Quote" - edit: " {{link}} {{replyAvatar}} {{username}}" edit_reason: "Reason: " post_number: "post {{number}}" wiki_last_edited_on: "wiki last edited on" @@ -2255,7 +2255,7 @@ en: revert: "Revert to this revision" edit_wiki: "Edit Wiki" edit_post: "Edit Post" - comparing_previous_to_current_out_of_total: "{{previous}} {{current}} / {{total}}" + comparing_previous_to_current_out_of_total: "{{previous}} {{icon}} {{current}} / {{total}}" displays: inline: title: "Show the rendered output with additions and removals inline" diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 48eee92c4ba..46c8d495738 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 501d016f2c4..c83a0eb9f51 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -290,6 +290,7 @@ Discourse::Application.routes.draw do post "preview" => "badges#preview" end end + end # admin namespace get "email_preferences" => "email#preferences_redirect", :as => "email_preferences_redirect" @@ -445,6 +446,9 @@ 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/svg-:version.js" => "svg_sprite#show", format: false, constraints: { hostname: /[\w\.-]+/, version: /\h{40}/ } + get "svg-sprite/search/:keyword" => "svg_sprite#search", format: false, constraints: { keyword: /[-a-z0-9\s\%]+/ } + 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 d12ab1bd839..3639fde011f 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -1732,6 +1732,12 @@ 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/content_security_policy.rb b/lib/content_security_policy.rb index 85000825b39..8e3ae2e31bc 100644 --- a/lib/content_security_policy.rb +++ b/lib/content_security_policy.rb @@ -70,6 +70,7 @@ class ContentSecurityPolicy ['/javascripts/', false, true], ['/plugins/', false, true], ['/theme-javascripts/', false, true], + ['/svg-sprite/', false, true], ] def script_assets(base = base_url, s3_cdn = GlobalSetting.s3_cdn_url, cdn = GlobalSetting.cdn_url) diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb index ac337574d0f..f503149f151 100644 --- a/lib/cooked_post_processor.rb +++ b/lib/cooked_post_processor.rb @@ -109,7 +109,7 @@ class CookedPostProcessor span = create_span_node("url", url) a.add_child(span) - span.add_previous_sibling(create_icon_node("image")) + span.add_previous_sibling(create_icon_node("far-image")) span.add_next_sibling(create_span_node("help", I18n.t("upload.placeholders.too_large", max_size_kb: SiteSetting.max_image_size_kb))) # Only if the image is already linked @@ -137,8 +137,9 @@ class CookedPostProcessor def add_broken_image_placeholder!(img) img.name = "span" - img.set_attribute("class", "broken-image fa fa-chain-broken") + img.set_attribute("class", "broken-image") img.set_attribute("title", I18n.t("post.image_placeholder.broken")) + img << "" img.remove_attribute("src") img.remove_attribute("width") img.remove_attribute("height") @@ -407,7 +408,10 @@ class CookedPostProcessor end def create_icon_node(klass) - create_node("i", "fa fa-fw fa-#{klass}") + icon = create_node("svg", "fa d-icon d-icon-#{klass} svg-icon") + icon.set_attribute("aria-hidden", "true") + icon << "" + end def create_link_node(klass, url, external = false) diff --git a/lib/discourse_plugin_registry.rb b/lib/discourse_plugin_registry.rb index da23d1c3e31..f7db213ee04 100644 --- a/lib/discourse_plugin_registry.rb +++ b/lib/discourse_plugin_registry.rb @@ -15,6 +15,7 @@ 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 @@ -59,6 +60,10 @@ class DiscoursePluginRegistry @sass_variables ||= Set.new end + def svg_icons + @svg_icons ||= [] + end + def handlebars @handlebars ||= Set.new end @@ -105,6 +110,10 @@ 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/onebox/templates/discourse_user_onebox.hbs b/lib/onebox/templates/discourse_user_onebox.hbs index 079e3268ec2..60db7491c11 100644 --- a/lib/onebox/templates/discourse_user_onebox.hbs +++ b/lib/onebox/templates/discourse_user_onebox.hbs @@ -7,11 +7,19 @@ {{name}} {{/name}} {{#location}} - {{{location}}} + + + + + {{{location}}} + {{/location}} {{#website}} - {{{website_name}}} + + + + {{{website_name}}} {{/website}}
    diff --git a/lib/plugin/instance.rb b/lib/plugin/instance.rb index f304dee4ebb..2d076b3737a 100644 --- a/lib/plugin/instance.rb +++ b/lib/plugin/instance.rb @@ -357,6 +357,10 @@ class Plugin::Instance javascripts << js end + def register_svg_icon(icon) + DiscoursePluginRegistry.register_svg_icon(icon) + end + # @option opts [String] :name # @option opts [String] :nativeName # @option opts [String] :fallbackLocale diff --git a/lib/svg_sprite/fa4-renames.json b/lib/svg_sprite/fa4-renames.json new file mode 100644 index 00000000000..741ba85c03c --- /dev/null +++ b/lib/svg_sprite/fa4-renames.json @@ -0,0 +1,462 @@ +{ + "500px": "fab-500px", + "address-book-o": "far-address-book", + "address-card-o": "far-address-card", + "adn": "fab-adn", + "amazon": "fab-amazon", + "android": "fab-android", + "angellist": "fab-angellist", + "apple": "fab-apple", + "area-chart": "chart-area", + "arrow-circle-o-down": "far-arrow-alt-circle-down", + "arrow-circle-o-left": "far-arrow-alt-circle-left", + "arrow-circle-o-right": "far-arrow-alt-circle-right", + "arrow-circle-o-up": "far-arrow-alt-circle-up", + "arrows": "arrows-alt", + "arrows-alt": "expand-arrows-alt", + "arrows-h": "arrows-alt-h", + "arrows-v": "arrows-alt-v", + "asl-interpreting": "american-sign-language-interpreting", + "automobile": "car", + "bandcamp": "fab-bandcamp", + "bank": "university", + "bar-chart": "far-chart-bar", + "bar-chart-o": "far-chart-bar", + "bathtub": "bath", + "battery": "battery-full", + "battery-0": "battery-empty", + "battery-1": "battery-quarter", + "battery-2": "battery-half", + "battery-3": "battery-three-quarters", + "battery-4": "battery-full", + "behance": "fab-behance", + "behance-square": "fab-behance-square", + "bell-o": "far-bell", + "bell-slash-o": "far-bell-slash", + "bitbucket": "fab-bitbucket", + "bitbucket-square": "fab-bitbucket", + "bitcoin": "fab-btc", + "black-tie": "fab-black-tie", + "bluetooth": "fab-bluetooth", + "bluetooth-b": "fab-bluetooth-b", + "bookmark-o": "far-bookmark", + "btc": "fab-btc", + "building-o": "far-building", + "buysellads": "fab-buysellads", + "cab": "taxi", + "calendar": "calendar-alt", + "calendar-check-o": "far-calendar-check", + "calendar-minus-o": "far-calendar-minus", + "calendar-o": "far-calendar", + "calendar-plus-o": "far-calendar-plus", + "calendar-times-o": "far-calendar-times", + "caret-square-o-down": "far-caret-square-down", + "caret-square-o-left": "far-caret-square-left", + "caret-square-o-right": "far-caret-square-right", + "caret-square-o-up": "far-caret-square-up", + "cc": "far-closed-captioning", + "cc-amex": "fab-cc-amex", + "cc-diners-club": "fab-cc-diners-club", + "cc-discover": "fab-cc-discover", + "cc-jcb": "fab-cc-jcb", + "cc-mastercard": "fab-cc-mastercard", + "cc-paypal": "fab-cc-paypal", + "cc-stripe": "fab-cc-stripe", + "cc-visa": "fab-cc-visa", + "chain": "link", + "chain-broken": "unlink", + "check-circle-o": "far-check-circle", + "check-square-o": "far-check-square", + "chrome": "fab-chrome", + "circle-o": "far-circle", + "circle-o-notch": "circle-notch", + "circle-thin": "far-circle", + "clipboard": "far-clipboard", + "clock-o": "far-clock", + "clone": "far-clone", + "close": "times", + "cloud-download": "cloud-download-alt", + "cloud-upload": "cloud-upload-alt", + "cny": "yen-sign", + "code-fork": "code-branch", + "codepen": "fab-codepen", + "codiepie": "fab-codiepie", + "comment-o": "far-comment", + "commenting": "far-comment-dots", + "commenting-o": "far-comment-dots", + "comments-o": "far-comments", + "compass": "far-compass", + "connectdevelop": "fab-connectdevelop", + "contao": "fab-contao", + "copyright": "far-copyright", + "creative-commons": "fab-creative-commons", + "credit-card": "far-credit-card", + "credit-card-alt": "credit-card", + "css3": "fab-css3", + "cutlery": "utensils", + "dashboard": "tachometer-alt", + "dashcube": "fab-dashcube", + "deafness": "deaf", + "dedent": "outdent", + "delicious": "fab-delicious", + "deviantart": "fab-deviantart", + "diamond": "far-gem", + "digg": "fab-digg", + "dollar": "dollar-sign", + "dot-circle-o": "far-dot-circle", + "dribbble": "fab-dribbble", + "drivers-license": "id-card", + "drivers-license-o": "far-id-card", + "dropbox": "fab-dropbox", + "drupal": "fab-drupal", + "edge": "fab-edge", + "eercast": "fab-sellcast", + "empire": "fab-empire", + "envelope-o": "far-envelope", + "envelope-open-o": "far-envelope-open", + "envira": "fab-envira", + "etsy": "fab-etsy", + "eur": "euro-sign", + "euro": "euro-sign", + "exchange": "exchange-alt", + "expeditedssl": "fab-expeditedssl", + "external-link": "external-link-alt", + "external-link-square": "external-link-square-alt", + "eye": "far-eye", + "eye-slash": "far-eye-slash", + "eyedropper": "eye-dropper", + "fa": "fab-font-awesome", + "facebook": "fab-facebook-f", + "facebook-f": "fab-facebook-f", + "facebook-official": "fab-facebook", + "facebook-square": "fab-facebook-square", + "feed": "rss", + "file-archive-o": "far-file-archive", + "file-audio-o": "far-file-audio", + "file-code-o": "far-file-code", + "file-excel-o": "far-file-excel", + "file-image-o": "far-file-image", + "file-movie-o": "far-file-video", + "file-o": "far-file", + "file-pdf-o": "far-file-pdf", + "file-photo-o": "far-file-image", + "file-picture-o": "far-file-image", + "file-powerpoint-o": "far-file-powerpoint", + "file-sound-o": "far-file-audio", + "file-text": "file-alt", + "file-text-o": "far-file-alt", + "file-video-o": "far-file-video", + "file-word-o": "far-file-word", + "file-zip-o": "far-file-archive", + "files-o": "far-copy", + "firefox": "fab-firefox", + "first-order": "fab-first-order", + "flag-o": "far-flag", + "flash": "bolt", + "flickr": "fab-flickr", + "floppy-o": "far-save", + "folder-o": "far-folder", + "folder-open-o": "far-folder-open", + "font-awesome": "fab-font-awesome", + "fonticons": "fab-fonticons", + "fort-awesome": "fab-fort-awesome", + "forumbee": "fab-forumbee", + "foursquare": "fab-foursquare", + "free-code-camp": "fab-free-code-camp", + "frown-o": "far-frown", + "futbol-o": "far-futbol", + "gbp": "pound-sign", + "ge": "fab-empire", + "gear": "cog", + "gears": "cogs", + "get-pocket": "fab-get-pocket", + "gg": "fab-gg", + "gg-circle": "fab-gg-circle", + "git": "fab-git", + "git-square": "fab-git-square", + "github": "fab-github", + "github-alt": "fab-github-alt", + "github-square": "fab-github-square", + "gitlab": "fab-gitlab", + "gittip": "fab-gratipay", + "glass": "glass-martini", + "glide": "fab-glide", + "glide-g": "fab-glide-g", + "google": "fab-google", + "google-plus": "fab-google-plus-g", + "google-plus-circle": "fab-google-plus", + "google-plus-official": "fab-google-plus", + "google-plus-square": "fab-google-plus-square", + "google-wallet": "fab-google-wallet", + "gratipay": "fab-gratipay", + "grav": "fab-grav", + "group": "users", + "hacker-news": "fab-hacker-news", + "hand-grab-o": "far-hand-rock", + "hand-lizard-o": "far-hand-lizard", + "hand-o-down": "far-hand-point-down", + "hand-o-left": "far-hand-point-left", + "hand-o-right": "far-hand-point-right", + "hand-o-up": "far-hand-point-up", + "hand-paper-o": "far-hand-paper", + "hand-peace-o": "far-hand-peace", + "hand-pointer-o": "far-hand-pointer", + "hand-rock-o": "far-hand-rock", + "hand-scissors-o": "far-hand-scissors", + "hand-spock-o": "far-hand-spock", + "hand-stop-o": "far-hand-paper", + "handshake-o": "far-handshake", + "hard-of-hearing": "deaf", + "hdd-o": "far-hdd", + "header": "heading", + "heart-o": "far-heart", + "hospital-o": "far-hospital", + "hotel": "bed", + "hourglass-1": "hourglass-start", + "hourglass-2": "hourglass-half", + "hourglass-3": "hourglass-end", + "hourglass-o": "far-hourglass", + "houzz": "fab-houzz", + "html5": "fab-html5", + "id-card-o": "far-id-card", + "ils": "shekel-sign", + "image": "far-image", + "imdb": "fab-imdb", + "inr": "rupee-sign", + "instagram": "fab-instagram", + "institution": "university", + "internet-explorer": "fab-internet-explorer", + "intersex": "transgender", + "ioxhost": "fab-ioxhost", + "joomla": "fab-joomla", + "jpy": "yen-sign", + "jsfiddle": "fab-jsfiddle", + "keyboard-o": "far-keyboard", + "krw": "won-sign", + "lastfm": "fab-lastfm", + "lastfm-square": "fab-lastfm-square", + "leanpub": "fab-leanpub", + "legal": "gavel", + "lemon-o": "far-lemon", + "level-down": "level-down-alt", + "level-up": "level-up-alt", + "life-bouy": "far-life-ring", + "life-buoy": "far-life-ring", + "life-ring": "far-life-ring", + "life-saver": "far-life-ring", + "lightbulb-o": "far-lightbulb", + "line-chart": "chart-line", + "linkedin": "fab-linkedin-in", + "linkedin-square": "fab-linkedin", + "linode": "fab-linode", + "linux": "fab-linux", + "list-alt": "far-list-alt", + "long-arrow-down": "long-arrow-alt-down", + "long-arrow-left": "long-arrow-alt-left", + "long-arrow-right": "long-arrow-alt-right", + "long-arrow-up": "long-arrow-alt-up", + "mail-forward": "share", + "mail-reply": "reply", + "mail-reply-all": "reply-all", + "map-marker": "map-marker-alt", + "map-o": "far-map", + "maxcdn": "fab-maxcdn", + "meanpath": "fab-font-awesome", + "medium": "fab-medium", + "meetup": "fab-meetup", + "meh-o": "far-meh", + "minus-square-o": "far-minus-square", + "mixcloud": "fab-mixcloud", + "mobile": "mobile-alt", + "mobile-phone": "mobile-alt", + "modx": "fab-modx", + "money": "far-money-bill-alt", + "moon-o": "far-moon", + "mortar-board": "graduation-cap", + "navicon": "bars", + "newspaper-o": "far-newspaper", + "object-group": "far-object-group", + "object-ungroup": "far-object-ungroup", + "odnoklassniki": "fab-odnoklassniki", + "odnoklassniki-square": "fab-odnoklassniki-square", + "opencart": "fab-opencart", + "openid": "fab-openid", + "opera": "fab-opera", + "optin-monster": "fab-optin-monster", + "pagelines": "fab-pagelines", + "paper-plane-o": "far-paper-plane", + "paste": "far-clipboard", + "pause-circle-o": "far-pause-circle", + "paypal": "fab-paypal", + "pencil": "pencil-alt", + "pencil-square": "pen-square", + "pencil-square-o": "far-edit", + "photo": "far-image", + "picture-o": "far-image", + "pie-chart": "chart-pie", + "pied-piper": "fab-pied-piper", + "pied-piper-alt": "fab-pied-piper-alt", + "pied-piper-pp": "fab-pied-piper-pp", + "pinterest": "fab-pinterest", + "pinterest-p": "fab-pinterest-p", + "pinterest-square": "fab-pinterest-square", + "play-circle-o": "far-play-circle", + "plus-square-o": "far-plus-square", + "product-hunt": "fab-product-hunt", + "qq": "fab-qq", + "question-circle-o": "far-question-circle", + "quora": "fab-quora", + "ra": "fab-rebel", + "ravelry": "fab-ravelry", + "rebel": "fab-rebel", + "reddit": "fab-reddit", + "reddit-alien": "fab-reddit-alien", + "reddit-square": "fab-reddit-square", + "refresh": "sync", + "registered": "far-registered", + "remove": "times", + "renren": "fab-renren", + "reorder": "bars", + "repeat": "redo", + "resistance": "fab-rebel", + "rmb": "yen-sign", + "rotate-left": "undo", + "rotate-right": "redo", + "rouble": "ruble-sign", + "rub": "ruble-sign", + "ruble": "ruble-sign", + "rupee": "rupee-sign", + "s15": "bath", + "safari": "fab-safari", + "scissors": "cut", + "scribd": "fab-scribd", + "sellsy": "fab-sellsy", + "send": "paper-plane", + "send-o": "far-paper-plane", + "share-square-o": "far-share-square", + "shekel": "shekel-sign", + "sheqel": "shekel-sign", + "shield": "shield-alt", + "shirtsinbulk": "fab-shirtsinbulk", + "sign-in": "sign-in-alt", + "sign-out": "sign-out-alt", + "signing": "sign-language", + "simplybuilt": "fab-simplybuilt", + "skyatlas": "fab-skyatlas", + "skype": "fab-skype", + "slack": "fab-slack", + "sliders": "sliders-h", + "slideshare": "fab-slideshare", + "smile-o": "far-smile", + "snapchat": "fab-snapchat", + "snapchat-ghost": "fab-snapchat-ghost", + "snapchat-square": "fab-snapchat-square", + "snowflake-o": "far-snowflake", + "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", + "soundcloud": "fab-soundcloud", + "spoon": "utensil-spoon", + "spotify": "fab-spotify", + "square-o": "far-square", + "stack-exchange": "fab-stack-exchange", + "stack-overflow": "fab-stack-overflow", + "star-half-empty": "far-star-half", + "star-half-full": "far-star-half", + "star-half-o": "far-star-half", + "star-o": "far-star", + "steam": "fab-steam", + "steam-square": "fab-steam-square", + "sticky-note-o": "far-sticky-note", + "stop-circle-o": "far-stop-circle", + "stumbleupon": "fab-stumbleupon", + "stumbleupon-circle": "fab-stumbleupon-circle", + "sun-o": "far-sun", + "superpowers": "fab-superpowers", + "support": "far-life-ring", + "tablet": "tablet-alt", + "tachometer": "tachometer-alt", + "telegram": "fab-telegram", + "television": "tv", + "tencent-weibo": "fab-tencent-weibo", + "themeisle": "fab-themeisle", + "thermometer": "thermometer-full", + "thermometer-0": "thermometer-empty", + "thermometer-1": "thermometer-quarter", + "thermometer-2": "thermometer-half", + "thermometer-3": "thermometer-three-quarters", + "thermometer-4": "thermometer-full", + "thumb-tack": "thumbtack", + "thumbs-o-down": "far-thumbs-down", + "thumbs-o-up": "far-thumbs-up", + "ticket": "ticket-alt", + "times-circle-o": "far-times-circle", + "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": "trash-alt", + "trash-o": "far-trash-alt", + "trello": "fab-trello", + "tripadvisor": "fab-tripadvisor", + "try": "lira-sign", + "tumblr": "fab-tumblr", + "tumblr-square": "fab-tumblr-square", + "turkish-lira": "lira-sign", + "twitch": "fab-twitch", + "twitter": "fab-twitter", + "twitter-square": "fab-twitter-square", + "unsorted": "sort", + "usb": "fab-usb", + "usd": "dollar-sign", + "user-circle-o": "far-user-circle", + "user-o": "far-user", + "vcard": "address-card", + "vcard-o": "far-address-card", + "viacoin": "fab-viacoin", + "viadeo": "fab-viadeo", + "viadeo-square": "fab-viadeo-square", + "video-camera": "video", + "vimeo": "fab-vimeo-v", + "vimeo-square": "fab-vimeo-square", + "vine": "fab-vine", + "vk": "fab-vk", + "volume-control-phone": "phone-volume", + "warning": "exclamation-triangle", + "wechat": "fab-weixin", + "weibo": "fab-weibo", + "weixin": "fab-weixin", + "whatsapp": "fab-whatsapp", + "wheelchair-alt": "fab-accessible-icon", + "wikipedia-w": "fab-wikipedia-w", + "window-close-o": "far-window-close", + "window-maximize": "far-window-maximize", + "window-restore": "far-window-restore", + "windows": "fab-windows", + "won": "won-sign", + "wordpress": "fab-wordpress", + "wpbeginner": "fab-wpbeginner", + "wpexplorer": "fab-wpexplorer", + "wpforms": "fab-wpforms", + "xing": "fab-xing", + "xing-square": "fab-xing-square", + "y-combinator": "fab-y-combinator", + "y-combinator-square": "fab-hacker-news", + "yahoo": "fab-yahoo", + "yc": "fab-y-combinator", + "yc-square": "fab-hacker-news", + "yelp": "fab-yelp", + "yen": "yen-sign", + "yoast": "fab-yoast", + "youtube": "fab-youtube", + "youtube-play": "fab-youtube", + "youtube-square": "fab-youtube-square" +} diff --git a/lib/svg_sprite/svg_sprite.rb b/lib/svg_sprite/svg_sprite.rb new file mode 100644 index 00000000000..5c75605d8ab --- /dev/null +++ b/lib/svg_sprite/svg_sprite.rb @@ -0,0 +1,341 @@ +# frozen_string_literal: true + +require_dependency 'distributed_cache' + +module SvgSprite + SVG_ICONS ||= Set.new([ + "adjust", + "anchor", + "angle-double-down", + "angle-double-up", + "angle-down", + "angle-right", + "angle-up", + "archive", + "arrows-alt-h", + "arrow-down", + "arrow-up", + "arrow-left", + "at", + "backward", + "ban", + "bars", + "bed", + "bell-slash", + "bold", + "book", + "bookmark", + "briefcase", + "calendar-alt", + "caret-down", + "caret-left", + "caret-right", + "caret-up", + "certificate", + "chart-bar", + "chart-pie", + "check", + "check-circle", + "check-square", + "chevron-down", + "chevron-right", + "chevron-up", + "circle", + "code", + "cog", + "columns", + "comment", + "compress", + "copy", + "crosshairs", + "cube", + "desktop", + "download", + "ellipsis-h", + "ellipsis-v", + "envelope", + "envelope-square", + "exchange-alt", + "exclamation-circle", + "exclamation-triangle", + "external-link-alt", + "expand", + "fab-apple", + "fab-facebook-f", + "fab-facebook-square", + "fab-github", + "fab-google-plus-square", + "fab-instagram", + "fab-twitter", + "fab-linux", + "fab-twitter-square", + "fab-windows", + "fab-yahoo", + "far-bell", + "far-bell-slash", + "far-calendar-plus", + "far-chart-bar", + "far-check-square", + "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-moon", + "far-smile", + "far-square", + "far-sun", + "far-thumbs-down", + "far-thumbs-up", + "far-trash-alt", + "fast-backward", + "fast-forward", + "file", + "file-alt", + "filter", + "flag", + "folder", + "folder-open", + "forward", + "gavel", + "globe", + "globe-americas", + "hand-point-right", + "heading", + "heart", + "home", + "info-circle", + "italic", + "key", + "link", + "list", + "list-ol", + "list-ul", + "lock", + "map-marker-alt", + "magic", + "microphone-slash", + "minus", + "minus-circle", + "mobile-alt", + "paint-brush", + "paper-plane", + "pencil-alt", + "plug", + "plus", + "plus-circle", + "plus-square", + "power-off", + "question", + "question-circle", + "quote-left", + "quote-right", + "random", + "redo", + "reply", + "rocket", + "search", + "share", + "shield-alt", + "shower", + "signal", + "sign-out-alt", + "step-backward", + "step-forward", + "sync", + "table", + "tag", + "tasks", + "tv", + "thermometer-three-quarters", + "thumbs-down", + "thumbs-up", + "thumbtack", + "times", + "times-circle", + "trash-alt", + "undo", + "unlink", + "unlock", + "unlock-alt", + "upload", + "user", + "user-plus", + "user-secret", + "user-times", + "users", + "wrench" + ]) + + FA_ICON_MAP = { 'far fa-' => 'far-', 'fab fa-' => 'fab-', 'fas fa-' => '', 'fa-' => '' } + + def self.svg_sprite_cache + @svg_sprite_cache ||= DistributedCache.new('svg_sprite') + end + + def self.all_icons + icons = Set.new() + icons + .merge(settings_icons) + .merge(plugin_icons) + .merge(badge_icons) + .merge(group_icons) + .merge(theme_icons) + .delete_if { |i| i.blank? || i.include?("/") } + .map! { |i| process(i.dup) } + .merge(SVG_ICONS) + icons + end + + def self.rebuild_cache + icons = all_icons + svg_sprite_cache['icons'] = icons + svg_sprite_cache['version'] = Digest::SHA1.hexdigest(icons.sort.join('|')) + end + + def self.expire_cache + svg_sprite_cache.clear + end + + def self.version + svg_sprite_cache['version'] || rebuild_cache + end + + def self.bundle + icons = svg_sprite_cache['icons'] || all_icons + + doc = File.open("#{Rails.root}/vendor/assets/svg-icons/fontawesome/solid.svg") { |f| Nokogiri::XML(f) } + fa_license = doc.at('//comment()').text + + svg_subset = """ + +""".dup + + Dir["#{Rails.root}/vendor/assets/svg-icons/fontawesome/*.svg"].each do |fname| + svg_file = Nokogiri::XML(File.open(fname)) do |config| + config.options = Nokogiri::XML::ParseOptions::NOBLANKS + end + + svg_filename = "#{File.basename(fname, ".svg")}" + + svg_file.css('symbol').each do |sym| + icon_id = prepare_symbol(sym, svg_filename) + + if icons.include? icon_id + sym.attributes['id'].value = icon_id + sym.css('title').each { |t| t.remove } + svg_subset << sym.to_xml + end + end + end + + svg_subset << '' + end + + def self.search(searched_icon) + searched_icon = process(searched_icon.dup) + + Dir["#{Rails.root}/vendor/assets/svg-icons/fontawesome/*.svg"].each do |fname| + svg_file = Nokogiri::XML(File.open(fname)) + svg_filename = "#{File.basename(fname, ".svg")}" + + svg_file.css('symbol').each do |sym| + icon_id = prepare_symbol(sym, svg_filename) + + if searched_icon == icon_id + sym.attributes['id'].value = icon_id + sym.css('title').each { |t| t.remove } + return sym.to_xml + end + end + end + + return false + end + + def self.prepare_symbol(symbol, svg_filename) + icon_id = symbol.attr('id') + + case svg_filename + when "regular" + icon_id = icon_id.prepend('far-') + when "brands" + icon_id = icon_id.prepend('fab-') + end + + icon_id + end + + def self.path + "/svg-sprite/#{Discourse.current_hostname}/svg-#{version}.js" + end + + def self.settings_icons + # includes svg_icon_subset and any settings containing _icon (incl. plugin settings) + site_setting_icons = [] + + SiteSetting.settings_hash.select do |key, value| + if key.to_s.include?("_icon") && value.present? + site_setting_icons |= value.split('|') + end + end + + site_setting_icons + end + + DiscourseEvent.on(:site_setting_saved) do |site_setting| + expire_cache if site_setting.name.to_s.include?("_icon") + end + + def self.plugin_icons + DiscoursePluginRegistry.svg_icons + end + + def self.badge_icons + Badge.all.pluck(:icon).uniq + end + + def self.group_icons + Group.where("flair_url LIKE '%fa-%'").pluck(:flair_url).uniq + end + + def self.theme_icons + theme_icon_settings = [] + + # Theme.all includes default values + Theme.all.each do |theme| + settings = theme.cached_settings.each do |key, value| + if key.to_s.include?("_icon") && value.present? + theme_icon_settings |= value.split('|') + end + end + end + + theme_icon_settings + end + + def self.fa4_shim_file + "#{Rails.root}/lib/svg_sprite/fa4-renames.json" + end + + def self.fa4_to_fa5_names + @db ||= File.open(fa4_shim_file, "r:UTF-8") { |f| JSON.parse(f.read); } + end + + def self.process(icon_name) + icon_name = icon_name.strip + FA_ICON_MAP.each { |k, v| icon_name.sub!(k, v) } + fa4_to_fa5_names[icon_name] || icon_name + end +end diff --git a/lib/tasks/svg_icons.rake b/lib/tasks/svg_icons.rake new file mode 100644 index 00000000000..e0c203fc12c --- /dev/null +++ b/lib/tasks/svg_icons.rake @@ -0,0 +1,38 @@ +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 f3103c1e67b..c4252f0109c 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "author": "Discourse", "license": "MIT", "dependencies": { + "@fortawesome/fontawesome-free": "5.5.0", "ace-builds": "1.4.1", "bootbox": "3.2.0", "chart.js": "2.7.2", @@ -15,9 +16,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.no-module.es6 b/plugins/discourse-local-dates/assets/javascripts/discourse-local-dates.js.no-module.es6 index 176a41a489e..c1986dddb78 100644 --- a/plugins/discourse-local-dates/assets/javascripts/discourse-local-dates.js.no-module.es6 +++ b/plugins/discourse-local-dates/assets/javascripts/discourse-local-dates.js.no-module.es6 @@ -55,7 +55,9 @@ const $dateTemplate = ` - + + + `; 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 78303ba9cee..fca3ba2d3d6 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-globe { + .d-icon { 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 891dd5ba9af..b4c913b75c9 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 @@ -82,5 +82,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 a9e80394e4c..6aeb6ee3e0a 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: "bar-chart-o", + icon: "chart-bar", 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 416e830dc80..d84ba4b21af 100644 --- a/plugins/poll/assets/javascripts/widgets/discourse-poll.js.es6 +++ b/plugins/poll/assets/javascripts/widgets/discourse-poll.js.es6 @@ -42,9 +42,9 @@ createWidget("discourse-poll-option", { const chosen = vote.includes(option.id); if (attrs.isMultiple) { - contents.push(iconNode(chosen ? "check-square-o" : "square-o")); + contents.push(iconNode(chosen ? "far-check-square" : "far-square")); } else { - contents.push(iconNode(chosen ? "dot-circle-o" : "circle-o")); + contents.push(iconNode(chosen ? "far-dot-circle" : "far-circle")); } contents.push(" "); diff --git a/plugins/poll/assets/stylesheets/desktop/poll.scss b/plugins/poll/assets/stylesheets/desktop/poll.scss index 7283964d9e5..0c1b15273cb 100644 --- a/plugins/poll/assets/stylesheets/desktop/poll.scss +++ b/plugins/poll/assets/stylesheets/desktop/poll.scss @@ -51,16 +51,20 @@ 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 { - content: "\f096"; + border-radius: 3px; } } } diff --git a/plugins/poll/plugin.rb b/plugins/poll/plugin.rb index 6e6282e9ae1..cb2ef67216b 100644 --- a/plugins/poll/plugin.rb +++ b/plugins/poll/plugin.rb @@ -11,6 +11,8 @@ 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 751607e3730..739452c8913 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-circle-o:eq(0)").length === 1); + assert.ok(find("li .d-icon-far-circle:eq(0)").length === 1); } }); @@ -27,7 +27,7 @@ widgetTest("single, selected", { }, test(assert) { - assert.ok(find("li .d-icon-dot-circle-o:eq(0)").length === 1); + assert.ok(find("li .d-icon-far-dot-circle:eq(0)").length === 1); } }); @@ -43,7 +43,7 @@ widgetTest("multi, not selected", { }, test(assert) { - assert.ok(find("li .d-icon-square-o:eq(0)").length === 1); + assert.ok(find("li .d-icon-far-square:eq(0)").length === 1); } }); @@ -59,6 +59,6 @@ widgetTest("multi, selected", { }, test(assert) { - assert.ok(find("li .d-icon-check-square-o:eq(0)").length === 1); + assert.ok(find("li .d-icon-far-check-square:eq(0)").length === 1); } }); diff --git a/spec/components/svg_sprite/svg_sprite_spec.rb b/spec/components/svg_sprite/svg_sprite_spec.rb new file mode 100644 index 00000000000..76361586577 --- /dev/null +++ b/spec/components/svg_sprite/svg_sprite_spec.rb @@ -0,0 +1,105 @@ +require 'rails_helper' + +describe SvgSprite do + + before do + SvgSprite.rebuild_cache + end + + it 'can generate a bundle' do + bundle = SvgSprite.bundle + expect(bundle).to match(/heart/) + expect(bundle).to match(/angle-double-down/) + end + + it 'can search for a specific FA icon' do + expect(SvgSprite.search("fa-heart")).to match(/heart/) + expect(SvgSprite.search("poo-storm")).to match(/poo-storm/) + expect(SvgSprite.search("this-is-not-an-icon")).to eq(false) + end + + it 'can get a consistent version string' do + version1 = SvgSprite.version + version2 = SvgSprite.version + + expect(version1).to eq(version2) + end + + it 'version string changes' do + version1 = SvgSprite.version + Fabricate(:badge, name: 'Custom Icon Badge', icon: 'fa-gamepad') + version2 = SvgSprite.version + + expect(version1).not_to eq(version2) + end + + it 'strips whitespace when processing icons' do + Fabricate(:badge, name: 'Custom Icon Badge', icon: ' fab fa-facebook-messenger ') + expect(SvgSprite.all_icons).to include("fab-facebook-messenger") + expect(SvgSprite.all_icons).not_to include(" fab-facebook-messenger ") + end + + it 'includes Font Awesome 4.7 icons from badges' do + Fabricate(:badge, name: 'Custom Icon Badge', icon: 'fa-gamepad') + expect(SvgSprite.all_icons).to include("gamepad") + end + + it 'includes Font Awesome 5 icons from badges' do + Fabricate(:badge, name: 'Custom Icon Badge', icon: 'far fa-building') + expect(SvgSprite.all_icons).to include("far-building") + end + + it 'includes icons defined in theme settings' do + theme = Fabricate(:theme) + theme.set_field(target: :settings, name: :yaml, value: "custom_icon: magic") + theme.save! + + # TODO: add test for default settings values + + theme.update_setting(:custom_icon, "gas-pump") + expect(SvgSprite.all_icons).to include("gas-pump") + + theme.update_setting(:custom_icon, "gamepad") + expect(SvgSprite.all_icons).to include("gamepad") + expect(SvgSprite.all_icons).not_to include("gas-pump") + + # FA5 syntax + theme.update_setting(:custom_icon, "fab fa-bandcamp") + expect(SvgSprite.all_icons).to include("fab-bandcamp") + + # Internal Discourse syntax + multiple icons + theme.update_setting(:custom_icon, "fab-android|dragon") + expect(SvgSprite.all_icons).to include("fab-android") + expect(SvgSprite.all_icons).to include("dragon") + end + + it 'includes icons from SiteSettings' do + SiteSetting.svg_icon_subset = "blender|drafting-compass|fab-bandcamp" + + all_icons = SvgSprite.all_icons + expect(all_icons).to include("blender") + expect(all_icons).to include("drafting-compass") + expect(all_icons).to include("fab-bandcamp") + + SiteSetting.svg_icon_subset = nil + expect(SvgSprite.all_icons).not_to include("drafting-compass") + end + + it 'includes icons from plugin registry' do + DiscoursePluginRegistry.register_svg_icon "blender" + DiscoursePluginRegistry.register_svg_icon "fab fa-bandcamp" + + expect(SvgSprite.all_icons).to include("blender") + expect(SvgSprite.all_icons).to include("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/jobs/pull_hotlinked_images_spec.rb b/spec/jobs/pull_hotlinked_images_spec.rb index 12641895c43..fc258ada1eb 100644 --- a/spec/jobs/pull_hotlinked_images_spec.rb +++ b/spec/jobs/pull_hotlinked_images_spec.rb @@ -118,7 +118,7 @@ describe Jobs::PullHotlinkedImages do expect(post.cooked).to match(/

    /) end end diff --git a/spec/lib/content_security_policy_spec.rb b/spec/lib/content_security_policy_spec.rb index af4311fa2dc..41976a31f73 100644 --- a/spec/lib/content_security_policy_spec.rb +++ b/spec/lib/content_security_policy_spec.rb @@ -38,6 +38,7 @@ describe ContentSecurityPolicy do http://test.localhost/javascripts/ http://test.localhost/plugins/ http://test.localhost/theme-javascripts/ + http://test.localhost/svg-sprite/ ]) end diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index 0a89acf5388..37ef6736430 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -825,4 +825,22 @@ 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/spec/requests/svg_sprite_controller_spec.rb b/spec/requests/svg_sprite_controller_spec.rb new file mode 100644 index 00000000000..1004c3b11d3 --- /dev/null +++ b/spec/requests/svg_sprite_controller_spec.rb @@ -0,0 +1,45 @@ +require 'rails_helper' + +describe SvgSpriteController do + + context 'show' do + before do + SvgSprite.rebuild_cache + end + + it "should return bundle when version is current" do + get "/svg-sprite/#{Discourse.current_hostname}/svg-#{SvgSprite.version}.js" + expect(response.status).to eq(200) + end + + it "should redirect to current version" do + random_hash = Digest::SHA1.hexdigest("somerandomstring") + get "/svg-sprite/#{Discourse.current_hostname}/svg-#{random_hash}.js" + + expect(response.status).to eq(302) + expect(response.location).to include(SvgSprite.version) + end + end + + context 'search' do + it "should not work for anons" do + get "/svg-sprite/search/fa-bolt" + expect(response.status).to eq(404) + end + + it "should return symbol for FA icon search" do + user = sign_in(Fabricate(:user)) + + get "/svg-sprite/search/fa-bolt" + expect(response.status).to eq(200) + expect(response.body).to include('bolt') + end + + it "should return 404 when looking for non-existent FA icon" do + user = sign_in(Fabricate(:user)) + + get "/svg-sprite/search/fa-not-a-valid-icon" + expect(response.status).to eq(404) + end + end +end diff --git a/test/javascripts/acceptance/composer-actions-test.js.es6 b/test/javascripts/acceptance/composer-actions-test.js.es6 index 6c84b8778d8..af745854480 100644 --- a/test/javascripts/acceptance/composer-actions-test.js.es6 +++ b/test/javascripts/acceptance/composer-actions-test.js.es6 @@ -88,11 +88,7 @@ QUnit.test("replying to post - toggle_whisper", async assert => { await composerActions.expand(); await composerActions.selectRowByValue("toggle_whisper"); - assert.ok( - find(".composer-fields .whisper") - .text() - .indexOf(I18n.t("composer.whisper")) > 0 - ); + assert.ok(find(".composer-fields .whisper .d-icon-eye-slash").length === 1); }); 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 34e7ae5f339..c1fa34b3471 100644 --- a/test/javascripts/acceptance/composer-test.js.es6 +++ b/test/javascripts/acceptance/composer-test.js.es6 @@ -375,9 +375,7 @@ QUnit.test("Composer can toggle whispers", async assert => { ); assert.ok( - find(".composer-fields .whisper") - .text() - .indexOf(I18n.t("composer.whisper")) > 0, + find(".composer-fields .whisper .d-icon-eye-slash").length === 1, "it sets the post type to whisper" ); @@ -387,9 +385,7 @@ QUnit.test("Composer can toggle whispers", async assert => { ); assert.ok( - find(".composer-fields .whisper") - .text() - .indexOf(I18n.t("composer.whisper")) <= 0, + find(".composer-fields .whisper .d-icon-eye-slash").length === 0, "it removes the whisper mode" ); }); @@ -406,9 +402,7 @@ QUnit.test( ); assert.ok( - find(".composer-fields .whisper") - .text() - .indexOf(I18n.t("composer.whisper")) > 0, + find(".composer-fields .whisper .d-icon-eye-slash").length === 1, "it sets the post type to whisper" ); @@ -417,9 +411,7 @@ QUnit.test( await click("#create-topic"); assert.ok( - find(".composer-fields .whisper") - .text() - .indexOf(I18n.t("composer.whisper")) === -1, + find(".composer-fields .whisper .d-icon-eye-slash").length === 0, "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 1ad8fee5620..1cc9025c2b6 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 .fa-adjust") === 1, + count(".avatar-flair .d-icon-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 4ab80eca33a..6edbcc6cd56 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.$(".fa-check").length, 1, "shows default theme icon"); + assert.equal(this.$(".d-icon-check").length, 1, "shows default theme icon"); } }); @@ -26,11 +26,15 @@ componentTest("pending updates", { test(assert) { assert.expect(1); - assert.equal(this.$(".fa-refresh").length, 1, "shows pending update icon"); + assert.equal( + this.$(".d-icon-refresh").length, + 1, + "shows pending update icon" + ); } }); -componentTest("borken theme", { +componentTest("broken theme", { template: "{{themes-list-item theme=theme}}", beforeEach() { this.set( @@ -45,7 +49,7 @@ componentTest("borken theme", { test(assert) { assert.expect(1); assert.equal( - this.$(".fa-exclamation-circle").length, + this.$(".d-icon-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 bcaca7f7533..902447f5f86 100644 --- a/test/javascripts/components/d-icon-test.js.es6 +++ b/test/javascripts/components/d-icon-test.js.es6 @@ -9,7 +9,10 @@ componentTest("default", { const html = this.$() .html() .trim(); - assert.equal(html, ''); + assert.equal( + html, + '' + ); } }); @@ -22,7 +25,7 @@ componentTest("with replacement", { .trim(); assert.equal( html, - '' + '' ); } }); diff --git a/test/javascripts/lib/icon-library-test.js.es6 b/test/javascripts/lib/icon-library-test.js.es6 new file mode 100644 index 00000000000..02055d2e0ff --- /dev/null +++ b/test/javascripts/lib/icon-library-test.js.es6 @@ -0,0 +1,34 @@ +import { + iconHTML, + iconNode, + convertIconClass +} from "discourse-common/lib/icon-library"; + +QUnit.module("lib:icon-library"); + +QUnit.test("return icon markup", assert => { + assert.ok(iconHTML("bars").indexOf('use xlink:href="#bars"') > -1); + + const nodeIcon = iconNode("bars"); + assert.equal(nodeIcon.tagName, "svg"); + assert.equal( + nodeIcon.properties.attributes.class, + "fa d-icon d-icon-bars svg-icon svg-node" + ); +}); + +QUnit.test("convert icon names", assert => { + const fa47Icon = convertIconClass("fa-clock-o"); + assert.ok(iconHTML(fa47Icon).indexOf("far-clock") > -1, "FA 4.7 syntax"); + + assert.ok( + iconHTML("area-chart").indexOf("chart-area") > -1, + "renamed FA 4.7 icons" + ); + + const fa5Icon = convertIconClass("fab fa-facebook"); + assert.ok(iconHTML(fa5Icon).indexOf("fab-facebook") > -1, "FA 5 syntax"); + + const iconC = convertIconClass(" fab fa-facebook "); + assert.ok(iconHTML(iconC).indexOf(" ") === -1, "trims whitespace"); +}); diff --git a/test/javascripts/widgets/avatar-flair-test.js.es6 b/test/javascripts/widgets/avatar-flair-test.js.es6 new file mode 100644 index 00000000000..9902efc0959 --- /dev/null +++ b/test/javascripts/widgets/avatar-flair-test.js.es6 @@ -0,0 +1,36 @@ +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 0b5eba78ea0..c3c8ccbbc1e 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.$("i.fa.fa-arrow-down").length, 1); + assert.equal(this.$(".d-icon-arrow-down").length, 1); } }); diff --git a/vendor/assets/svg-icons/fontawesome/brands.svg b/vendor/assets/svg-icons/fontawesome/brands.svg new file mode 100644 index 00000000000..ecf73b20ed6 --- /dev/null +++ b/vendor/assets/svg-icons/fontawesome/brands.svg @@ -0,0 +1,1571 @@ + + + + + 500px + + + + Accessible Icon + + + + Accusoft + + + + Acquisitions Incorporated + + + + App.net + + + + Adversal + + + + affiliatetheme + + + + Algolia + + + + Alipay + + + + Amazon + + + + Amazon Pay + + + + Amilia + + + + Android + + + + AngelList + + + + Angry Creative + + + + Angular + + + + App Store + + + + iOS App Store + + + + Apper Systems AB + + + + Apple + + + + Apple Pay + + + + Asymmetrik, Ltd. + + + + Audible + + + + Autoprefixer + + + + avianex + + + + Aviato + + + + Amazon Web Services (AWS) + + + + Bandcamp + + + + Behance + + + + Behance Square + + + + BIMobject + + + + Bitbucket + + + + Bitcoin + + + + Bity + + + + Font Awesome Black Tie + + + + BlackBerry + + + + Blogger + + + + Blogger B + + + + Bluetooth + + + + Bluetooth + + + + BTC + + + + Büromöbel-Experte GmbH & Co. KG. + + + + BuySellAds + + + + Amazon Pay Credit Card + + + + American Express Credit Card + + + + Apple Pay Credit Card + + + + Diner's Club Credit Card + + + + Discover Credit Card + + + + JCB Credit Card + + + + MasterCard Credit Card + + + + Paypal Credit Card + + + + Stripe Credit Card + + + + Visa Credit Card + + + + Centercode + + + + Chrome + + + + cloudscale.ch + + + + Cloudsmith + + + + cloudversify + + + + Codepen + + + + Codie Pie + + + + Connect Develop + + + + Contao + + + + cPanel + + + + Creative Commons + + + + Creative Commons Attribution + + + + Creative Commons Noncommercial + + + + Creative Commons Noncommercial (Euro Sign) + + + + Creative Commons Noncommercial (Yen Sign) + + + + Creative Commons No Derivative Works + + + + Creative Commons Public Domain + + + + Creative Commons Public Domain Alternate + + + + Creative Commons Remix + + + + Creative Commons Share Alike + + + + Creative Commons Sampling + + + + Creative Commons Sampling + + + + + Creative Commons Share + + + + Creative Commons CC0 + + + + Critical Role + + + + CSS 3 Logo + + + + Alternate CSS3 Logo + + + + Cuttlefish + + + + Dungeons & Dragons + + + + D&D Beyond + + + + DashCube + + + + Delicious Logo + + + + deploy.dog + + + + Deskpro + + + + DEV + + + + deviantART + + + + Digg Logo + + + + Digital Ocean + + + + Discord + + + + Discourse + + + + DocHub + + + + Docker + + + + Draft2digital + + + + Dribbble + + + + Dribbble Square + + + + Dropbox + + + + Drupal Logo + + + + Dyalog + + + + Earlybirds + + + + eBay + + + + Edge Browser + + + + Elementor + + + + Ello + + + + Ember + + + + Galactic Empire + + + + Envira Gallery + + + + Erlang + + + + Ethereum + + + + Etsy + + + + ExpeditedSSL + + + + Facebook + + + + Facebook F + + + + Facebook Messenger + + + + Facebook Square + + + + Fantasy Flight-games + + + + Firefox + + + + First Order + + + + Alternate First Order + + + + firstdraft + + + + Flickr + + + + Flipboard + + + + Fly + + + + Font Awesome + + + + Alternate Font Awesome + + + + Font Awesome Flag + + + + Font Awesome Full Logo + + + + Fonticons + + + + Fonticons Fi + + + + Fort Awesome + + + + Alternate Fort Awesome + + + + Forumbee + + + + Foursquare + + + + Free Code Camp + + + + FreeBSD + + + + Fulcrum + + + + Galactic Republic + + + + Galactic Senate + + + + Get Pocket + + + + GG Currency + + + + GG Currency Circle + + + + Git + + + + Git Square + + + + GitHub + + + + Alternate GitHub + + + + GitHub Square + + + + GitKraken + + + + GitLab + + + + Gitter + + + + Glide + + + + Glide G + + + + Gofore + + + + Goodreads + + + + Goodreads G + + + + Google Logo + + + + Google Drive + + + + Google Play + + + + Google Plus + + + + Google Plus G + + + + Google Plus Square + + + + Google Wallet + + + + Gratipay (Gittip) + + + + Grav + + + + Gripfire, Inc. + + + + Grunt + + + + Gulp + + + + Hacker News + + + + Hacker News Square + + + + Hackerrank + + + + Hips + + + + HireAHelper + + + + Hooli + + + + Hornbill + + + + Hotjar + + + + Houzz + + + + HTML 5 Logo + + + + HubSpot + + + + IMDB + + + + Instagram + + + + Internet-explorer + + + + ioxhost + + + + iTunes + + + + Itunes Note + + + + Java + + + + Jedi Order + + + + Jenkis + + + + Joget + + + + Joomla Logo + + + + JavaScript (JS) + + + + JavaScript (JS) Square + + + + jsFiddle + + + + Kaggle + + + + Keybase + + + + KeyCDN + + + + Kickstarter + + + + Kickstarter K + + + + KORVUE + + + + Laravel + + + + last.fm + + + + last.fm Square + + + + Leanpub + + + + Less + + + + Line + + + + LinkedIn + + + + LinkedIn In + + + + Linode + + + + Linux + + + + lyft + + + + Magento + + + + Mailchimp + + + + Mandalorian + + + + Markdown + + + + Mastodon + + + + MaxCDN + + + + MedApps + + + + Medium + + + + Medium M + + + + MRT + + + + Meetup + + + + Megaport + + + + Microsoft + + + + Mix + + + + Mixcloud + + + + Mizuni + + + + MODX + + + + Monero + + + + Napster + + + + Neos + + + + Nimblr + + + + Nintendo Switch + + + + Node.js + + + + Node.js JS + + + + npm + + + + NS8 + + + + Nutritionix + + + + Odnoklassniki + + + + Odnoklassniki Square + + + + Old Republic + + + + OpenCart + + + + OpenID + + + + Opera + + + + Optin Monster + + + + Open Source Initiative + + + + page4 Corporation + + + + Pagelines + + + + Palfed + + + + Patreon + + + + Paypal + + + + Penny Arcade + + + + Periscope + + + + Phabricator + + + + Phoenix Framework + + + + Phoenix Squadron + + + + PHP + + + + Pied Piper Logo + + + + Alternate Pied Piper Logo + + + + Pied Piper-hat + + + + Pied Piper PP Logo (Old) + + + + Pinterest + + + + Pinterest P + + + + Pinterest Square + + + + PlayStation + + + + Product Hunt + + + + Pushed + + + + Python + + + + QQ + + + + QuinScape + + + + Quora + + + + R Project + + + + Ravelry + + + + React + + + + ReactEurope + + + + ReadMe + + + + Rebel Alliance + + + + red river + + + + reddit Logo + + + + reddit Alien + + + + reddit Square + + + + Renren + + + + replyd + + + + Researchgate + + + + Resolving + + + + Rev.io + + + + Rocket.Chat + + + + Rockrms + + + + Safari + + + + Sass + + + + SCHLIX + + + + Scribd + + + + Searchengin + + + + Sellcast + + + + Sellsy + + + + Servicestack + + + + Shirts in Bulk + + + + Shopware + + + + SimplyBuilt + + + + SISTRIX + + + + Sith + + + + skyatlas + + + + Skype + + + + Slack Logo + + + + Slack Hashtag + + + + Slideshare + + + + Snapchat + + + + Snapchat Ghost + + + + Snapchat Square + + + + SoundCloud + + + + Speakap + + + + Spotify + + + + Squarespace + + + + Stack Exchange + + + + Stack Overflow + + + + StayLinked + + + + Steam + + + + Steam Square + + + + Steam Symbol + + + + Sticker Mule + + + + Strava + + + + Stripe + + + + Stripe S + + + + Studio Vinari + + + + StumbleUpon Logo + + + + StumbleUpon Circle + + + + Superpowers + + + + Supple + + + + TeamSpeak + + + + Telegram + + + + Telegram Plane + + + + Tencent Weibo + + + + The Red Yeti + + + + Themeco + + + + ThemeIsle + + + + Think Peaks + + + + Trade Federation + + + + Trello + + + + TripAdvisor + + + + Tumblr + + + + Tumblr Square + + + + Twitch + + + + Twitter + + + + Twitter Square + + + + Typo3 + + + + Uber + + + + UIkit + + + + Uniregistry + + + + Untappd + + + + USB + + + + us-Sunnah Foundation + + + + Vaadin + + + + Viacoin + + + + Video + + + + Video Square + + + + Viber + + + + Vimeo + + + + Vimeo Square + + + + Vimeo + + + + Vine + + + + VK + + + + VNV + + + + Vue.js + + + + Weebly + + + + Weibo + + + + Weixin (WeChat) + + + + What's App + + + + What's App Square + + + + WHMCS + + + + Wikipedia W + + + + Windows + + + + Wix + + + + Wizards of the Coast + + + + Wolf Pack Battalion + + + + WordPress Logo + + + + Wordpress Simple + + + + WPBeginner + + + + WPExplorer + + + + WPForms + + + + wpressr + + + + Xbox + + + + Xing + + + + Xing Square + + + + Y Combinator + + + + Yahoo Logo + + + + Yandex + + + + Yandex International + + + + Yelp + + + + Yoast + + + + YouTube + + + + YouTube Square + + + + Zhihu + + + diff --git a/vendor/assets/svg-icons/fontawesome/regular.svg b/vendor/assets/svg-icons/fontawesome/regular.svg new file mode 100644 index 00000000000..8a77d05c68b --- /dev/null +++ b/vendor/assets/svg-icons/fontawesome/regular.svg @@ -0,0 +1,615 @@ + + + + + Address Book + + + + Address Card + + + + Angry Face + + + + Alternate Arrow Circle Down + + + + Alternate Arrow Circle Left + + + + Alternate Arrow Circle Right + + + + Alternate Arrow Circle Up + + + + bell + + + + Bell Slash + + + + bookmark + + + + Building + + + + Calendar + + + + Alternate Calendar + + + + Calendar Check + + + + Calendar Minus + + + + Calendar Plus + + + + Calendar Times + + + + Caret Square Down + + + + Caret Square Left + + + + Caret Square Right + + + + Caret Square Up + + + + Bar Chart + + + + Check Circle + + + + Check Square + + + + Circle + + + + Clipboard + + + + Clock + + + + Clone + + + + Closed Captioning + + + + comment + + + + Alternate Comment + + + + Comment Dots + + + + comments + + + + Compass + + + + Copy + + + + Copyright + + + + Credit Card + + + + Dizzy Face + + + + Dot Circle + + + + Edit + + + + Envelope + + + + Envelope Open + + + + Eye + + + + Eye Slash + + + + File + + + + Alternate File + + + + Archive File + + + + Audio File + + + + Code File + + + + Excel File + + + + Image File + + + + PDF File + + + + Powerpoint File + + + + Video File + + + + Word File + + + + flag + + + + Flushed Face + + + + Folder + + + + Folder Open + + + + Font Awesome Full Logo + + + + Frowning Face + + + + Frowning Face With Open Mouth + + + + Futbol + + + + Gem + + + + Grimacing Face + + + + Grinning Face + + + + Alternate Grinning Face + + + + Grinning Face With Smiling Eyes + + + + Grinning Face With Sweat + + + + Smiling Face With Heart-Eyes + + + + Grinning Squinting Face + + + + Rolling on the Floor Laughing + + + + Star-Struck + + + + Face With Tears of Joy + + + + Face With Tongue + + + + Squinting Face With Tongue + + + + Winking Face With Tongue + + + + Grinning Winking Face + + + + Lizard (Hand) + + + + Paper (Hand) + + + + Peace (Hand) + + + + Hand Pointing Down + + + + Hand Pointing Left + + + + Hand Pointing Right + + + + Hand Pointing Up + + + + Pointer (Hand) + + + + Rock (Hand) + + + + Scissors (Hand) + + + + Spock (Hand) + + + + Handshake + + + + HDD + + + + Heart + + + + hospital + + + + Hourglass + + + + Identification Badge + + + + Identification Card + + + + Image + + + + Images + + + + Keyboard + + + + Kissing Face + + + + Kissing Face With Smiling Eyes + + + + Face Blowing a Kiss + + + + Grinning Face With Big Eyes + + + + Laugh Face with Beaming Eyes + + + + Laughing Squinting Face + + + + Laughing Winking Face + + + + Lemon + + + + Life Ring + + + + Lightbulb + + + + Alternate List + + + + Map + + + + Neutral Face + + + + Face Without Mouth + + + + Face With Rolling Eyes + + + + Minus Square + + + + Alternate Money Bill + + + + Moon + + + + Newspaper + + + + Object Group + + + + Object Ungroup + + + + Paper Plane + + + + Pause Circle + + + + Play Circle + + + + Plus Square + + + + Question Circle + + + + Registered Trademark + + + + Crying Face + + + + Loudly Crying Face + + + + Save + + + + Share Square + + + + Smiling Face + + + + Beaming Face With Smiling Eyes + + + + Winking Face + + + + Snowflake + + + + Square + + + + Star + + + + star-half + + + + Sticky Note + + + + Stop Circle + + + + Sun + + + + Hushed Face + + + + thumbs-down + + + + thumbs-up + + + + Times Circle + + + + Tired Face + + + + Alternate Trash + + + + User + + + + User Circle + + + + Window Close + + + + Window Maximize + + + + Window Minimize + + + + Window Restore + + + diff --git a/vendor/assets/svg-icons/fontawesome/solid.svg b/vendor/assets/svg-icons/fontawesome/solid.svg new file mode 100644 index 00000000000..4654dee7e14 --- /dev/null +++ b/vendor/assets/svg-icons/fontawesome/solid.svg @@ -0,0 +1,3483 @@ + + + + + + Address Book + + + + Address Card + + + + adjust + + + + Air Freshener + + + + align-center + + + + align-justify + + + + align-left + + + + align-right + + + + Allergies + + + + ambulance + + + + American Sign Language Interpreting + + + + Anchor + + + + Angle Double Down + + + + Angle Double Left + + + + Angle Double Right + + + + Angle Double Up + + + + angle-down + + + + angle-left + + + + angle-right + + + + angle-up + + + + Angry Face + + + + Ankh + + + + Fruit Apple + + + + Archive + + + + Archway + + + + Alternate Arrow Circle Down + + + + Alternate Arrow Circle Left + + + + Alternate Arrow Circle Right + + + + Alternate Arrow Circle Up + + + + Arrow Circle Down + + + + Arrow Circle Left + + + + Arrow Circle Right + + + + Arrow Circle Up + + + + arrow-down + + + + arrow-left + + + + arrow-right + + + + arrow-up + + + + Alternate Arrows + + + + Alternate Arrows Horizontal + + + + Alternate Arrows Vertical + + + + Assistive Listening Systems + + + + asterisk + + + + At + + + + Atlas + + + + Atom + + + + Audio Description + + + + Award + + + + Backspace + + + + backward + + + + Balance Scale + + + + ban + + + + Band-Aid + + + + barcode + + + + Bars + + + + Baseball Ball + + + + Basketball Ball + + + + Bath + + + + Battery Empty + + + + Battery Full + + + + Battery 1/2 Full + + + + Battery 1/4 Full + + + + Battery 3/4 Full + + + + Bed + + + + beer + + + + bell + + + + Bell Slash + + + + Bezier Curve + + + + Bible + + + + Bicycle + + + + Binoculars + + + + Birthday Cake + + + + Blender + + + + Blender Phone + + + + Blind + + + + bold + + + + Lightning Bolt + + + + Bomb + + + + Bone + + + + Bong + + + + book + + + + Book of the Dead + + + + Book Open + + + + Book Reader + + + + bookmark + + + + Bowling Ball + + + + Box + + + + Box Open + + + + Boxes + + + + Braille + + + + Brain + + + + Briefcase + + + + Medical Briefcase + + + + Broadcast Tower + + + + Broom + + + + Brush + + + + Bug + + + + Building + + + + bullhorn + + + + Bullseye + + + + Burn + + + + Bus + + + + Bus Alt + + + + Business Time + + + + Calculator + + + + Calendar + + + + Alternate Calendar + + + + Calendar Check + + + + Calendar Minus + + + + Calendar Plus + + + + Calendar Times + + + + camera + + + + Retro Camera + + + + Campground + + + + Cannabis + + + + Capsules + + + + Car + + + + Alternate Car + + + + Car Battery + + + + Car Crash + + + + Car Side + + + + Caret Down + + + + Caret Left + + + + Caret Right + + + + Caret Square Down + + + + Caret Square Left + + + + Caret Square Right + + + + Caret Square Up + + + + Caret Up + + + + Shopping Cart Arrow Down + + + + Add to Shopping Cart + + + + Cat + + + + certificate + + + + Chair + + + + Chalkboard + + + + Chalkboard Teacher + + + + Charging Station + + + + Area Chart + + + + Bar Chart + + + + Line Chart + + + + Pie Chart + + + + Check + + + + Check Circle + + + + Check Double + + + + Check Square + + + + Chess + + + + Chess Bishop + + + + Chess Board + + + + Chess King + + + + Chess Knight + + + + Chess Pawn + + + + Chess Queen + + + + Chess Rook + + + + Chevron Circle Down + + + + Chevron Circle Left + + + + Chevron Circle Right + + + + Chevron Circle Up + + + + chevron-down + + + + chevron-left + + + + chevron-right + + + + chevron-up + + + + Child + + + + Church + + + + Circle + + + + Circle Notched + + + + City + + + + Clipboard + + + + Clipboard with Check + + + + Clipboard List + + + + Clock + + + + Clone + + + + Closed Captioning + + + + Cloud + + + + Alternate Cloud Download + + + + Cloud with (a chance of) Meatball + + + + Cloud with Moon + + + + Cloud with Moon and Rain + + + + Cloud with Rain + + + + Cloud with Heavy Showers + + + + Cloud with Sun + + + + Cloud with Sun and Rain + + + + Alternate Cloud Upload + + + + Cocktail + + + + Code + + + + Code Branch + + + + Coffee + + + + cog + + + + cogs + + + + Coins + + + + Columns + + + + comment + + + + Alternate Comment + + + + Comment Dollar + + + + Comment Dots + + + + Comment Slash + + + + comments + + + + Comments Dollar + + + + Compact Disc + + + + Compass + + + + Compress + + + + Concierge Bell + + + + Cookie + + + + Cookie Bite + + + + Copy + + + + Copyright + + + + Couch + + + + Credit Card + + + + crop + + + + Alternate Crop + + + + Cross + + + + Crosshairs + + + + Crow + + + + Crown + + + + Cube + + + + Cubes + + + + Cut + + + + Database + + + + Deaf + + + + Democrat + + + + Desktop + + + + Dharmachakra + + + + Diagnoses + + + + Dice + + + + Dice D20 + + + + Dice D6 + + + + Dice Five + + + + Dice Four + + + + Dice One + + + + Dice Six + + + + Dice Three + + + + Dice Two + + + + Digital Tachograph + + + + Directions + + + + Divide + + + + Dizzy Face + + + + DNA + + + + Dog + + + + Dollar Sign + + + + Dolly + + + + Dolly Flatbed + + + + + Door Closed + + + + Door Open + + + + Dot Circle + + + + Dove + + + + Download + + + + Drafting Compass + + + + Dragon + + + + Draw Polygon + + + + Drum + + + + Drum Steelpan + + + + Drumstick with Bite Taken Out + + + + Dumbbell + + + + Dungeon + + + + Edit + + + + eject + + + + Horizontal Ellipsis + + + + Vertical Ellipsis + + + + Envelope + + + + Envelope Open + + + + Envelope Open-text + + + + Envelope Square + + + + Equals + + + + eraser + + + + Euro Sign + + + + Alternate Exchange + + + + exclamation + + + + Exclamation Circle + + + + Exclamation Triangle + + + + Expand + + + + Alternate Expand Arrows + + + + Alternate External Link + + + + Alternate External Link Square + + + + Eye + + + + Eye Dropper + + + + Eye Slash + + + + fast-backward + + + + fast-forward + + + + Fax + + + + Feather + + + + Alternate Feather + + + + Female + + + + fighter-jet + + + + File + + + + Alternate File + + + + Archive File + + + + Audio File + + + + Code File + + + + File Contract + + + + File CSV + + + + File Download + + + + Excel File + + + + File Export + + + + Image File + + + + File Import + + + + File Invoice + + + + File Invoice with US Dollar + + + + Medical File + + + + Alternate Medical File + + + + PDF File + + + + Powerpoint File + + + + File Prescription + + + + File Signature + + + + File Upload + + + + Video File + + + + Word File + + + + Fill + + + + Fill Drip + + + + Film + + + + Filter + + + + Fingerprint + + + + fire + + + + fire-extinguisher + + + + First Aid + + + + Fish + + + + Raised Fist + + + + flag + + + + flag-checkered + + + + United States of America Flag + + + + Flask + + + + Flushed Face + + + + Folder + + + + Folder Minus + + + + Folder Open + + + + Folder Plus + + + + font + + + + Font Awesome Full Logo + + + + Football Ball + + + + forward + + + + Frog + + + + Frowning Face + + + + Frowning Face With Open Mouth + + + + Funnel Dollar + + + + Futbol + + + + Gamepad + + + + Gas Pump + + + + Gavel + + + + Gem + + + + Genderless + + + + Ghost + + + + gift + + + + Martini Glass + + + + Alternate Glass Martini + + + + Glasses + + + + Globe + + + + Globe with Africa shown + + + + Globe with Americas shown + + + + Globe with Asia shown + + + + Golf Ball + + + + Gopuram + + + + Graduation Cap + + + + Greater Than + + + + Greater Than Equal To + + + + Grimacing Face + + + + Grinning Face + + + + Alternate Grinning Face + + + + Grinning Face With Smiling Eyes + + + + Grinning Face With Sweat + + + + Smiling Face With Heart-Eyes + + + + Grinning Squinting Face + + + + Rolling on the Floor Laughing + + + + Star-Struck + + + + Face With Tears of Joy + + + + Face With Tongue + + + + Squinting Face With Tongue + + + + Winking Face With Tongue + + + + Grinning Winking Face + + + + Grip Horizontal + + + + Grip Vertical + + + + H Square + + + + Hammer + + + + Hamsa + + + + Hand Holding + + + + Hand Holding Heart + + + + Hand Holding US Dollar + + + + Lizard (Hand) + + + + Paper (Hand) + + + + Peace (Hand) + + + + Hand Pointing Down + + + + Hand Pointing Left + + + + Hand Pointing Right + + + + Hand Pointing Up + + + + Pointer (Hand) + + + + Rock (Hand) + + + + Scissors (Hand) + + + + Spock (Hand) + + + + Hands + + + + Helping Hands + + + + Handshake + + + + Hanukiah + + + + Hashtag + + + + Wizard's Hat + + + + Haykal + + + + HDD + + + + heading + + + + headphones + + + + Alternate Headphones + + + + Headset + + + + Heart + + + + Heartbeat + + + + Helicopter + + + + Highlighter + + + + Hiking + + + + Hippo + + + + History + + + + Hockey Puck + + + + home + + + + Horse + + + + hospital + + + + Alternate Hospital + + + + Hospital Symbol + + + + Hot Tub + + + + Hotel + + + + Hourglass + + + + Hourglass End + + + + Hourglass Half + + + + Hourglass Start + + + + Damaged House + + + + Hryvnia + + + + I Beam Cursor + + + + Identification Badge + + + + Identification Card + + + + Alternate Identification Card + + + + Image + + + + Images + + + + inbox + + + + Indent + + + + Industry + + + + Infinity + + + + Info + + + + Info Circle + + + + italic + + + + Jedi + + + + Joint + + + + Journal of the Whills + + + + Kaaba + + + + key + + + + Keyboard + + + + Khanda + + + + Kissing Face + + + + Kissing Face With Smiling Eyes + + + + Face Blowing a Kiss + + + + Kiwi Bird + + + + Landmark + + + + Language + + + + Laptop + + + + Laptop Code + + + + Grinning Face With Big Eyes + + + + Laugh Face with Beaming Eyes + + + + Laughing Squinting Face + + + + Laughing Winking Face + + + + Layer Group + + + + leaf + + + + Lemon + + + + Less Than + + + + Less Than Equal To + + + + Alternate Level Down + + + + Alternate Level Up + + + + Life Ring + + + + Lightbulb + + + + Link + + + + Turkish Lira Sign + + + + List + + + + Alternate List + + + + list-ol + + + + list-ul + + + + location-arrow + + + + lock + + + + Lock Open + + + + Alternate Long Arrow Down + + + + Alternate Long Arrow Left + + + + Alternate Long Arrow Right + + + + Alternate Long Arrow Up + + + + Low Vision + + + + Luggage Cart + + + + magic + + + + magnet + + + + Mail Bulk + + + + Male + + + + Map + + + + Map Marked + + + + Alternate Map Marked + + + + map-marker + + + + Alternate Map Marker + + + + Map Pin + + + + Map Signs + + + + Marker + + + + Mars + + + + Mars Double + + + + Mars Stroke + + + + Mars Stroke Horizontal + + + + Mars Stroke Vertical + + + + Mask + + + + Medal + + + + medkit + + + + Neutral Face + + + + Face Without Mouth + + + + Face With Rolling Eyes + + + + Memory + + + + Menorah + + + + Mercury + + + + Meteor + + + + Microchip + + + + microphone + + + + Alternate Microphone + + + + Alternate Microphone Slash + + + + Microphone Slash + + + + Microscope + + + + minus + + + + Minus Circle + + + + Minus Square + + + + Mobile Phone + + + + Alternate Mobile + + + + Money Bill + + + + Alternate Money Bill + + + + Wavy Money Bill + + + + Alternate Wavy Money Bill + + + + Money Check + + + + Alternate Money Check + + + + Monument + + + + Moon + + + + Mortar Pestle + + + + Mosque + + + + Motorcycle + + + + Mountain + + + + Mouse Pointer + + + + Music + + + + Wired Network + + + + Neuter + + + + Newspaper + + + + Not Equal + + + + Medical Notes + + + + Object Group + + + + Object Ungroup + + + + Oil Can + + + + Om + + + + Otter + + + + Outdent + + + + Paint Brush + + + + Paint Roller + + + + Palette + + + + Pallet + + + + Paper Plane + + + + Paperclip + + + + Parachute Box + + + + paragraph + + + + Parking + + + + Passport + + + + Pastafarianism + + + + Paste + + + + pause + + + + Pause Circle + + + + Paw + + + + Peace + + + + Pen + + + + Alternate Pen + + + + Pen Fancy + + + + Pen Nib + + + + Pen Square + + + + Alternate Pencil + + + + Pencil Ruler + + + + People Carry + + + + Percent + + + + Percentage + + + + Person Entering Booth + + + + Phone + + + + Phone Slash + + + + Phone Square + + + + Phone Volume + + + + Piggy Bank + + + + Pills + + + + Place Of Worship + + + + plane + + + + Plane Arrival + + + + Plane Departure + + + + play + + + + Play Circle + + + + Plug + + + + plus + + + + Plus Circle + + + + Plus Square + + + + Podcast + + + + Poll + + + + Poll H + + + + Poo + + + + Poo Storm + + + + Poop + + + + Portrait + + + + Pound Sign + + + + Power Off + + + + Pray + + + + Praying Hands + + + + Prescription + + + + Prescription Bottle + + + + Alternate Prescription Bottle + + + + print + + + + Procedures + + + + Project Diagram + + + + Puzzle Piece + + + + qrcode + + + + Question + + + + Question Circle + + + + Quidditch + + + + quote-left + + + + quote-right + + + + Quran + + + + Rainbow + + + + random + + + + Receipt + + + + Recycle + + + + Redo + + + + Alternate Redo + + + + Registered Trademark + + + + Reply + + + + reply-all + + + + Republican + + + + Retweet + + + + Ribbon + + + + Ring + + + + road + + + + Robot + + + + rocket + + + + Route + + + + rss + + + + RSS Square + + + + Ruble Sign + + + + Ruler + + + + Ruler Combined + + + + Ruler Horizontal + + + + Ruler Vertical + + + + Running + + + + Indian Rupee Sign + + + + Crying Face + + + + Loudly Crying Face + + + + Save + + + + School + + + + Screwdriver + + + + Scroll + + + + Search + + + + Search Dollar + + + + Search Location + + + + Search Minus + + + + Search Plus + + + + Seedling + + + + Server + + + + Shapes + + + + Share + + + + Alternate Share + + + + Alternate Share Square + + + + Share Square + + + + Shekel Sign + + + + Alternate Shield + + + + Ship + + + + Shipping Fast + + + + Shoe Prints + + + + Shopping Bag + + + + Shopping Basket + + + + shopping-cart + + + + Shower + + + + Shuttle Van + + + + Sign + + + + Alternate Sign In + + + + Sign Language + + + + Alternate Sign Out + + + + signal + + + + Signature + + + + Sitemap + + + + Skull + + + + Skull & Crossbones + + + + Slash + + + + Horizontal Sliders + + + + Smiling Face + + + + Beaming Face With Smiling Eyes + + + + Winking Face + + + + Smog + + + + Smoking + + + + Smoking Ban + + + + Snowflake + + + + Socks + + + + Solar Panel + + + + Sort + + + + Sort Alpha Down + + + + Sort Alpha Up + + + + Sort Amount Down + + + + Sort Amount Up + + + + Sort Down (Descending) + + + + Sort Numeric Down + + + + Sort Numeric Up + + + + Sort Up (Ascending) + + + + Spa + + + + Space Shuttle + + + + Spider + + + + Spinner + + + + Splotch + + + + Spray Can + + + + Square + + + + Square Full + + + + Square Root Alternate + + + + Stamp + + + + Star + + + + Star and Crescent + + + + star-half + + + + Alternate Star Half + + + + Star of David + + + + Star of Life + + + + step-backward + + + + step-forward + + + + Stethoscope + + + + Sticky Note + + + + stop + + + + Stop Circle + + + + Stopwatch + + + + Store + + + + Alternate Store + + + + Stream + + + + Street View + + + + Strikethrough + + + + Stroopwafel + + + + subscript + + + + Subway + + + + Suitcase + + + + Suitcase Rolling + + + + Sun + + + + superscript + + + + Hushed Face + + + + Swatchbook + + + + Swimmer + + + + Swimming Pool + + + + Synagogue + + + + Sync + + + + Alternate Sync + + + + Syringe + + + + table + + + + Table Tennis + + + + tablet + + + + Alternate Tablet + + + + Tablets + + + + Alternate Tachometer + + + + tag + + + + tags + + + + Tape + + + + Tasks + + + + Taxi + + + + Teeth + + + + Teeth Open + + + + High Temperature + + + + Low Temperature + + + + Terminal + + + + text-height + + + + text-width + + + + th + + + + th-large + + + + th-list + + + + Theater Masks + + + + Thermometer + + + + Thermometer Empty + + + + Thermometer Full + + + + Thermometer 1/2 Full + + + + Thermometer 1/4 Full + + + + Thermometer 3/4 Full + + + + thumbs-down + + + + thumbs-up + + + + Thumbtack + + + + Alternate Ticket + + + + Times + + + + Times Circle + + + + tint + + + + Tint Slash + + + + Tired Face + + + + Toggle Off + + + + Toggle On + + + + Toilet Paper + + + + Toolbox + + + + Tooth + + + + Torah + + + + Torii Gate + + + + Tractor + + + + Trademark + + + + Traffic Light + + + + Train + + + + Transgender + + + + Alternate Transgender + + + + Trash + + + + Alternate Trash + + + + Tree + + + + trophy + + + + truck + + + + Truck Loading + + + + Truck Monster + + + + Truck Moving + + + + Truck Side + + + + T-Shirt + + + + TTY + + + + Television + + + + Umbrella + + + + Umbrella Beach + + + + Underline + + + + Undo + + + + Alternate Undo + + + + Universal Access + + + + University + + + + unlink + + + + unlock + + + + Alternate Unlock + + + + Upload + + + + User + + + + Alternate User + + + + Alternate User Slash + + + + User Astronaut + + + + User Check + + + + User Circle + + + + User Clock + + + + User Cog + + + + User Edit + + + + User Friends + + + + User Graduate + + + + User Injured + + + + User Lock + + + + user-md + + + + User Minus + + + + User Ninja + + + + User Plus + + + + User Secret + + + + User Shield + + + + User Slash + + + + User Tag + + + + User Tie + + + + Remove User + + + + Users + + + + Users Cog + + + + Utensil Spoon + + + + Utensils + + + + Vector Square + + + + Venus + + + + Venus Double + + + + Venus Mars + + + + Vial + + + + Vials + + + + Video + + + + Video Slash + + + + Vihara + + + + Volleyball Ball + + + + Volume Down + + + + Volume Mute + + + + Volume Off + + + + Volume Up + + + + Vote Yea + + + + Cardboard VR + + + + Walking + + + + Wallet + + + + Warehouse + + + + Water + + + + Weight + + + + Hanging Weight + + + + Wheelchair + + + + WiFi + + + + Wind + + + + Window Close + + + + Window Maximize + + + + Window Minimize + + + + Window Restore + + + + Wine Bottle + + + + Wine Glass + + + + Alternate Wine Glas + + + + Won Sign + + + + Wrench + + + + X-Ray + + + + Yen Sign + + + + Yin Yang + + + diff --git a/yarn.lock b/yarn.lock index a2b66c681d9..e61a50ac2fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -87,10 +87,15 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" +"@fortawesome/fontawesome-free@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.5.0.tgz#0c6c53823d04457ae669cd19567b8a21dbb4fcfd" + integrity sha512-p4lu0jfj5QN013ddArh99r3OXZ/fp9rbovs62LfaO70OMBsAXxtNd0lAq/97fitrscR0fqfd+/a5KNcp6Sh/0A== + "@sinonjs/commons@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.0.2.tgz#3e0ac737781627b8844257fadc3d803997d0526e" - integrity sha512-WR3dlgqJP4QNrLC4iXN/5/2WaLQQ0VijOOkmflqFGVJ6wLEpbSjo7c0ZeGIdtY8Crk7xBBp87sM6+Mkerz7alw== + version "1.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.3.0.tgz#50a2754016b6f30a994ceda6d9a0a8c36adda849" + integrity sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA== dependencies: type-detect "4.0.8" @@ -114,9 +119,9 @@ integrity sha512-ZwTHAlC9akprWDinwEPD4kOuwaYZlyMwVJIANsKNC3QVp0AHB04m7RnB4eqeWfgmxw8MGTzS9uMaw93Z3QcZbw== "@types/core-js@^0.9.41": - version "0.9.43" - resolved "https://registry.yarnpkg.com/@types/core-js/-/core-js-0.9.43.tgz#65d646c5e8c0cd1bdee37065799f9d3d48748253" - integrity sha512-Y11dktBJ5YwKXX8DfHSb9V6shXKSHN5P2URPZLHTRjX3OsO/u8u1kZnSJvsuSH74aTg8f5ZKcpEeCdIJOcBkHg== + version "0.9.46" + resolved "https://registry.yarnpkg.com/@types/core-js/-/core-js-0.9.46.tgz#ea701ee34cbb6dfe6d100f1530319547c93c8d79" + integrity sha512-LooLR6XHes9V+kNYRz1Qm8w3atw9QMn7XeZUmIpUelllF9BdryeUKd/u0Wh5ErcjpWfG39NrToU9MF7ngsTFVw== "@types/mkdirp@^0.3.29": version "0.3.29" @@ -124,9 +129,9 @@ integrity sha1-fyrX7FX5FEgvybHsS7GuYCjUYGY= "@types/node@^9.3.0": - version "9.6.20" - resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.20.tgz#b59a1bd357ae2df7d44d5ac98e9b64eb96ea1fef" - integrity sha512-mIMXUbH2MmJAQQjzFUIRpxa+FtA27IaHMrIgoJ1fyu/EfpVN/UZw3ISMNnwVec4lau8R8SM4pNFXSCZpJFX2Bw== + version "9.6.39" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.39.tgz#111cb4f5591cb6945aad34733b4e40bfd59b58fc" + integrity sha512-c3OkjgNpSMdHan56WhklP0FMOk5ocilKz2Mpa0NOGzu8jw5YERjCf9FG0epYB1+TxScv/oI4uJ204u2mUg7Hcw== "@types/rimraf@^0.0.28": version "0.0.28" @@ -156,14 +161,14 @@ acorn@^3.0.4: integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= acorn@^5.5.0: - version "5.6.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.6.2.tgz#b1da1d7be2ac1b4a327fb9eab851702c5045b4e7" - integrity sha512-zUzo1E5dI2Ey8+82egfnttyMlMZ2y0D8xOCO3PNPPlYXpl8NZvF6Qk9L9BEtJs+43FqEmfBViDqc5d1ckRDguw== + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== agent-base@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.1.2.tgz#80fa6cde440f4dcf9af2617cf246099b5d99f0c8" - integrity sha512-VE6QoEdaugY86BohRtfGmTDabxdU5sCKOkbcPA6PXKJsRzEi/7A3RCTxJal1ft/4qSfPht5/iQLhMh/wzSkkNw== + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== dependencies: es6-promisify "^5.0.0" @@ -197,9 +202,9 @@ amdefine@>=0.0.4: integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= ansi-escapes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" - integrity sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw== ansi-regex@^2.0.0: version "2.1.1" @@ -216,10 +221,10 @@ ansi-styles@^2.2.1: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" - integrity sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug== +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" @@ -245,9 +250,9 @@ are-we-there-yet@~1.1.2: readable-stream "^2.0.6" argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - integrity sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY= + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" @@ -271,28 +276,11 @@ array-from@^2.1.1: resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -363,9 +351,9 @@ bootbox@3.2.0: integrity sha1-AL9kP8nt79muHnxkjGsCLbS+Cu4= brace-expansion@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" - integrity sha1-wHshHHyVLsH479Uad+8NHTmQopI= + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -457,13 +445,13 @@ chalk@^1.1.3: supports-color "^2.0.0" chalk@^2.0.0, chalk@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" - integrity sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q== + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== dependencies: - ansi-styles "^3.1.0" + ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" - supports-color "^4.0.0" + supports-color "^5.3.0" chardet@^0.4.0: version "0.4.2" @@ -493,15 +481,15 @@ chartjs-color@^2.1.0: chartjs-color-string "^0.5.0" color-convert "^0.5.3" -chownr@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - integrity sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE= +chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== chrome-launcher@^0.10: - version "0.10.2" - resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.10.2.tgz#f7d860ddec627b6f01015736b5ae1e33b3d165b1" - integrity sha512-E+kTHlGgtitPPu8Rci0E4XBasirKtTn6DjqFn8tTLp/7xCUzqb6lig9Il+HLkcudzKvT/aLxJbzbyNCe03w1AA== + version "0.10.5" + resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.10.5.tgz#d0aa72c11f1653e6a60dfebea171522447470ef1" + integrity sha512-Gbzg8HlWhyuoVqflhiXwfFXhzNfNWvAkSWv2QR1Yl6mwsMo1oCLAVjp2tIySuS4lrZLEjzVx1fOy584yE76P4g== dependencies: "@types/core-js" "^0.9.41" "@types/mkdirp" "^0.3.29" @@ -580,22 +568,22 @@ color-convert@^0.5.3: integrity sha1-vbbGnOZg+t/+CwAHzER+G59ygr0= color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" - integrity sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ== + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: - color-name "^1.1.1" + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - commander@2.11.x: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" @@ -616,7 +604,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@1.6.2: +concat-stream@1.6.2, concat-stream@^1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -626,15 +614,6 @@ concat-stream@1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" -concat-stream@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - integrity sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc= - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -667,11 +646,11 @@ debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: ms "2.0.0" debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: - ms "2.0.0" + ms "^2.1.1" decamelize@^1.0.0: version "1.2.0" @@ -715,19 +694,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -761,14 +727,14 @@ ensure-posix-path@^1.0.0: integrity sha1-pls+QtC3HPxYXrd0+ZQ8jZuRsMI= entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA= + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== es6-promise@^4.0.3: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" - integrity sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng== + version "4.2.5" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054" + integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg== es6-promisify@^5.0.0: version "5.0.0" @@ -782,7 +748,7 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -eslint-scope@3.7.1, eslint-scope@^3.7.1: +eslint-scope@3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= @@ -790,6 +756,14 @@ eslint-scope@3.7.1, eslint-scope@^3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-scope@^3.7.1: + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" @@ -797,7 +771,7 @@ eslint-visitor-keys@^1.0.0: eslint@^4.19: version "4.19.1" - resolved "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== dependencies: ajv "^5.3.0" @@ -848,24 +822,23 @@ espree@^3.5.4: acorn-jsx "^3.0.0" esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - integrity sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw== + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" - integrity sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo= + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== dependencies: estraverse "^4.0.0" esrecurse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" - integrity sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM= + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== dependencies: estraverse "^4.1.0" - object-assign "^4.0.1" estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" @@ -925,9 +898,9 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: is-extendable "^1.0.1" external-editor@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" - integrity sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== dependencies: chardet "^0.4.0" iconv-lite "^0.4.17" @@ -963,9 +936,9 @@ fake-xml-http-request@^1.6.0: integrity sha512-99XPwwSg89BfzPuv4XCpZxn3EbauMCgAQCxq9MzrvS6DFD73OON6AnUTicL4A0HZtYMBwCZBWVnRqGjZDgQkTg== fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" - integrity sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8= + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= fast-json-stable-stringify@^2.0.0: version "2.0.0" @@ -1031,13 +1004,13 @@ findup-sync@2.0.0: resolve-dir "^1.0.1" flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" - integrity sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE= + version "1.3.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" + integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== dependencies: circular-json "^0.3.1" - del "^2.0.2" graceful-fs "^4.1.2" + rimraf "~2.6.2" write "^0.2.1" for-in@^1.0.2: @@ -1096,10 +1069,10 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== +glob@^7.0.5, glob@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1128,36 +1101,19 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -globals@^11.0.1: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4" - integrity sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ== - -globals@^11.1.0: - version "11.5.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.5.0.tgz#6bc840de6771173b191f13d3a9c94d441ee92642" - integrity sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ== - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" +globals@^11.0.1, globals@^11.1.0: + version "11.9.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" + integrity sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg== graceful-fs@^4.1.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== handlebars@4.0.5: version "4.0.5" - resolved "http://registry.npmjs.org/handlebars/-/handlebars-4.0.5.tgz#92c6ed6bb164110c50d4d8d0fbddc70806c6f8e7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.5.tgz#92c6ed6bb164110c50d4d8d0fbddc70806c6f8e7" integrity sha1-ksbta7FkEQxQ1NjQ+93HCAbG+Oc= dependencies: async "^1.4.0" @@ -1173,11 +1129,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -1238,12 +1189,7 @@ https-proxy-agent@^2.1.0: agent-base "^4.1.0" debug "^3.1.0" -iconv-lite@^0.4.17: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== - -iconv-lite@^0.4.4: +iconv-lite@^0.4.17, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -1258,9 +1204,9 @@ ignore-walk@^3.0.1: minimatch "^3.0.4" ignore@^3.3.3: - version "3.3.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" - integrity sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA== + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== imurmurhash@^0.1.4: version "0.1.4" @@ -1306,9 +1252,9 @@ inquirer@^3.0.6: through "^2.3.6" invariant@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" - integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A= + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" @@ -1406,25 +1352,6 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - integrity sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw= - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -1438,9 +1365,9 @@ is-promise@^2.1.0: integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-resolvable@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4" - integrity sha512-y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" @@ -1524,18 +1451,23 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + js-yaml@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - integrity sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA== + version "3.12.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== dependencies: argparse "^1.0.7" esprima "^4.0.0" jsesc@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" - integrity sha1-5CGiqOINawgZ3yiQj3glJrlt0f4= + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== json-schema-traverse@^0.3.0: version "0.3.1" @@ -1590,11 +1522,12 @@ levn@^0.3.0, levn@~0.3.0: type-check "~0.3.2" lighthouse-logger@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.0.1.tgz#f073d83f7acbc96729bf100a121c8f006991ae61" - integrity sha1-8HPYP3rLyWcpvxAKEhyPAGmRrmE= + version "1.2.0" + resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz#b76d56935e9c137e86a04741f6bb9b2776e886ca" + integrity sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw== dependencies: debug "^2.6.8" + marky "^1.2.0" linkify-it@^2.0.0: version "2.0.3" @@ -1609,9 +1542,9 @@ lodash.get@^4.4.2: integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4= + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== lolex@^2.3.2, lolex@^2.7.5: version "2.7.5" @@ -1624,16 +1557,16 @@ longest@^1.0.1: integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - integrity sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg= + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: - js-tokens "^3.0.0" + js-tokens "^3.0.0 || ^4.0.0" lru-cache@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" - integrity sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew== + version "4.1.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + integrity sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA== dependencies: pseudomap "^1.0.2" yallist "^2.1.2" @@ -1673,6 +1606,11 @@ markdown-it@8.4.1: mdurl "^1.0.1" uc.micro "^1.0.5" +marky@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.1.tgz#a3fcf82ffd357756b8b8affec9fdbf3a30dc1b02" + integrity sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ== + matcher-collection@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-1.0.5.tgz#2ee095438372cb8884f058234138c05c644ec339" @@ -1686,9 +1624,9 @@ mdurl@^1.0.1: integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= merge@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - integrity sha1-dTHjnUlJwoGma4xabgJl6LBYlNo= + version "1.2.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== micromatch@^3.0.4, micromatch@^3.1.4: version "3.1.10" @@ -1715,9 +1653,9 @@ mime@^2.0.3: integrity sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg== mimic-fn@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" - integrity sha1-5md4PZLonb00KBi1IwudYqZyrRg= + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" @@ -1733,26 +1671,26 @@ minimist@0.0.8: minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" - resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= minimist@~0.0.1: version "0.0.10" - resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.2.1, minipass@^2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" - integrity sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w== +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" - integrity sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA== +minizlib@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.1.tgz#6734acc045a46e61d596a43bb9d9cd326e19cc42" + integrity sha512-TrfjCjk4jLhcJyGMYymBH6oTXcWjYbUAXTHDbtnWHjZC25h0cdajHuPE1zxb4DVmu8crfh+HwH/WMuyLG0nHBg== dependencies: minipass "^2.2.1" @@ -1785,15 +1723,20 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= nan@^2.9.2: - version "2.11.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099" - integrity sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw== + version "2.11.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" + integrity sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA== nanomatch@^1.2.9: version "1.2.13" @@ -1818,18 +1761,18 @@ natural-compare@^1.4.0: integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= needle@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.3.tgz#c1b04da378cd634d8befe2de965dc2cfb0fd65ca" - integrity sha512-GPL22d/U9cai87FcCPO6e+MT3vyHS2j+zwotakDc7kE2DtUAqFKMXLJCTtRp+5S75vXIwQPvIxkvlctxf9q4gQ== + version "2.2.4" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== dependencies: debug "^2.1.2" iconv-lite "^0.4.4" sax "^1.2.4" nise@^1.4.5: - version "1.4.5" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.5.tgz#979a97a19c48d627bb53703726ae8d53ce8d4b3e" - integrity sha512-OHRVvdxKgwZELf2DTgsJEIA4MOq8XWvpSUzoOXyxJ2mY0mMENWC66+70AShLR2z05B1dzrzWlUQJmJERlOUpZw== + version "1.4.6" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.6.tgz#76cc3915925056ae6c405dd8ad5d12bde570c19f" + integrity sha512-1GedetLKzmqmgwabuMSqPsT7oumdR77SBpDfNNJhADRIeA3LN/2RVqR4fFqwvzhAqcTef6PPCzQwITE/YQ8S8A== dependencies: "@sinonjs/formatio" "3.0.0" just-extend "^3.0.0" @@ -1879,9 +1822,9 @@ npm-bundled@^1.0.1: integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g== npm-packlist@^1.1.6: - version "1.1.11" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" - integrity sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA== + version "1.1.12" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a" + integrity sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -1996,7 +1939,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -2018,11 +1961,6 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - pikaday@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/pikaday/-/pikaday-1.7.0.tgz#78bf26e709f7c135b674762bbab79d75ac589ab6" @@ -2030,18 +1968,6 @@ pikaday@1.7.0: optionalDependencies: moment "2.x" -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" @@ -2070,20 +1996,15 @@ prettier@1.14.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.3.tgz#90238dd4c0684b7edce5f83b0fb7328e48bd0895" integrity sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg== -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= - process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" - integrity sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8= + version "2.0.1" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.1.tgz#c9242169342b1c29d275889c95734621b1952e31" + integrity sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg== proxy-from-env@^1.0.0: version "1.0.0" @@ -2132,9 +2053,9 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -readable-stream@^2.0.6: +readable-stream@^2.0.6, readable-stream@^2.2.2: version "2.3.6" - resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== dependencies: core-util-is "~1.0.0" @@ -2145,19 +2066,6 @@ readable-stream@^2.0.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^2.2.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" - integrity sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -2244,7 +2152,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.2.8, rimraf@^2.6.1: +rimraf@^2.6.1, rimraf@~2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== @@ -2280,16 +2188,11 @@ rx-lite@*, rx-lite@^4.0.8: resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= -safe-buffer@^5.1.2: +safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -2324,9 +2227,9 @@ sax@^1.2.4: integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== semver@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== set-blocking@~2.0.0: version "2.0.0" @@ -2492,13 +2395,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== - dependencies: - safe-buffer "~5.1.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -2530,14 +2426,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= - dependencies: - has-flag "^2.0.0" - -supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -2557,14 +2446,14 @@ table@4.0.2: string-width "^2.1.1" tar@^4: - version "4.4.6" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" - integrity sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg== + version "4.4.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== dependencies: - chownr "^1.0.1" + chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.3" - minizlib "^1.1.0" + minipass "^2.3.4" + minizlib "^1.1.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" yallist "^3.0.2" @@ -2729,20 +2618,13 @@ watch@~0.18.0: exec-sh "^0.2.0" minimist "^1.2.0" -which@^1.2.14: +which@^1.2.14, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -which@^1.2.9: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - integrity sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg== - dependencies: - isexe "^2.0.0" - wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -2782,16 +2664,7 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@3.3.x: - version "3.3.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.2.tgz#96c1d08b3fefda1d5c1e33700d3bfaa9be2d5608" - integrity sha512-t+WGpsNxhMR4v6EClXS8r8km5ZljKJzyGhJf7goJz9k5Ye3+b5Bvno5rjqPuIBn5mnn5GBb7o8IrIWHxX1qOLQ== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -ws@^3.0.0: +ws@3.3.x, ws@^3.0.0: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== @@ -2812,7 +2685,7 @@ yallist@^3.0.0, yallist@^3.0.2: yargs@~3.10.0: version "3.10.0" - resolved "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= dependencies: camelcase "^1.0.2"