diff --git a/CHANGELOG.md b/CHANGELOG.md index f77c8679d..578fcb338 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,19 +8,24 @@ Web UI version numbers should always match the corresponding version of LBRY App ## [Unreleased] ### Added + * Added an Invites area inside of the Wallet. This allows users to invite others and shows the status of all past invites (including all invite data from the past year). * Added a forward button and improved history behavior. Back/forward disable when unusable. - * Added a new component, `FormFieldPrice` which is now used in Publish and Settings. + * Added new summary components for rewards and invites to the Wallet landing page. + * Added past history of rewards to the rewards page. * Added wallet backup guide reference. + * Added a new widget for setting prices (`FormFieldPrice`), used in Publish and Settings. ### Changed * Updated to daemon [0.15](https://github.com/lbryio/lbry/releases). Most relevant changes for app are improved announcing of content and a fix for the daemon getting stuck running. * Continued to refine first-run process, process for new users, and introducing people to LBRY and LBRY credits. - * Changed the default price settings. + * Changed Wallet landing page to summarize status of other areas. Refactored wallet and transaction logic. + * Added icons to missing page, improved icon and title logic. + * Changed the default price settings for priced publishes. * When an "Open" button is clicked on a show page, if the file fails to open, the app will try to open the file's folder. + * Updated several packages and fixed warnings in build process (all but the [fsevents warning](https://github.com/yarnpkg/yarn/issues/3738), which is a rather dramatic debate) * Some form field refactoring as we take baby steps towards form sanity. * Replaced confusing placeholder text from email input. * Refactored modal and settings logic. - * Updated several packages and fixed warnings in build process (all but the [fsevents warning](https://github.com/yarnpkg/yarn/issues/3738), which is a rather dramatic debate) ### Fixed * Tiles will no longer be blurry on hover (Windows only bug) diff --git a/ui/dist/font/FontAwesome.otf b/ui/dist/font/FontAwesome.otf index f7936cc1e..401ec0f36 100644 Binary files a/ui/dist/font/FontAwesome.otf and b/ui/dist/font/FontAwesome.otf differ diff --git a/ui/dist/font/fontawesome-webfont.eot b/ui/dist/font/fontawesome-webfont.eot index 33b2bb800..e9f60ca95 100644 Binary files a/ui/dist/font/fontawesome-webfont.eot and b/ui/dist/font/fontawesome-webfont.eot differ diff --git a/ui/dist/font/fontawesome-webfont.svg b/ui/dist/font/fontawesome-webfont.svg index 1ee89d436..855c845e5 100644 --- a/ui/dist/font/fontawesome-webfont.svg +++ b/ui/dist/font/fontawesome-webfont.svg @@ -1,565 +1,2671 @@ - - + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui/dist/font/fontawesome-webfont.ttf b/ui/dist/font/fontawesome-webfont.ttf index ed9372f8e..35acda2fa 100644 Binary files a/ui/dist/font/fontawesome-webfont.ttf and b/ui/dist/font/fontawesome-webfont.ttf differ diff --git a/ui/dist/font/fontawesome-webfont.woff b/ui/dist/font/fontawesome-webfont.woff index 8b280b98f..400014a4b 100644 Binary files a/ui/dist/font/fontawesome-webfont.woff and b/ui/dist/font/fontawesome-webfont.woff differ diff --git a/ui/dist/font/fontawesome-webfont.woff2 b/ui/dist/font/fontawesome-webfont.woff2 index 3311d5851..4d13fc604 100644 Binary files a/ui/dist/font/fontawesome-webfont.woff2 and b/ui/dist/font/fontawesome-webfont.woff2 differ diff --git a/ui/js/actions/user.js b/ui/js/actions/user.js index e649bed88..f2bc934dc 100644 --- a/ui/js/actions/user.js +++ b/ui/js/actions/user.js @@ -20,6 +20,7 @@ export function doAuthenticate() { data: { user }, }); dispatch(doRewardList()); + dispatch(doFetchInviteStatus()); }) .catch(error => { dispatch(doOpenModal(modals.AUTHENTICATION_FAILURE)); diff --git a/ui/js/component/common.js b/ui/js/component/common.js index 16ac2497e..d92669262 100644 --- a/ui/js/component/common.js +++ b/ui/js/component/common.js @@ -69,15 +69,18 @@ export class CreditAmount extends React.PureComponent { label: React.PropTypes.bool, showFree: React.PropTypes.bool, showFullPrice: React.PropTypes.bool, + showPlus: React.PropTypes.bool, look: React.PropTypes.oneOf(["indicator", "plain"]), }; static defaultProps = { precision: 2, label: true, + showFree: false, look: "indicator", showFree: false, showFullPrice: false, + showPlus: false, }; render() { @@ -98,13 +101,18 @@ export class CreditAmount extends React.PureComponent { let amountText; if (this.props.showFree && parseFloat(this.props.amount) === 0) { amountText = __("free"); - } else if (this.props.label) { - amountText = - formattedAmount + - " " + - (parseFloat(amount) == 1 ? __("credit") : __("credits")); } else { - amountText = formattedAmount; + if (this.props.label) { + amountText = + formattedAmount + + " " + + (parseFloat(amount) == 1 ? __("credit") : __("credits")); + } else { + amountText = formattedAmount; + } + if (this.props.showPlus && amount > 0) { + amountText = "+" + amountText; + } } return ( diff --git a/ui/js/component/inviteSummary/index.js b/ui/js/component/inviteSummary/index.js new file mode 100644 index 000000000..d93c0880f --- /dev/null +++ b/ui/js/component/inviteSummary/index.js @@ -0,0 +1,14 @@ +import React from "react"; +import { connect } from "react-redux"; +import { + selectUserInvitesRemaining, + selectUserInviteNewIsPending, +} from "selectors/user"; +import InviteSummary from "./view"; + +const select = state => ({ + invitesRemaining: selectUserInvitesRemaining(state), + isPending: selectUserInviteNewIsPending(state), +}); + +export default connect(select)(InviteSummary); diff --git a/ui/js/component/inviteSummary/view.jsx b/ui/js/component/inviteSummary/view.jsx new file mode 100644 index 000000000..dceddf148 --- /dev/null +++ b/ui/js/component/inviteSummary/view.jsx @@ -0,0 +1,36 @@ +import React from "react"; +import Link from "component/link"; +import { CreditAmount, BusyMessage } from "component/common"; + +const InviteSummary = props => { + const { isPending, invitesRemaining } = props; + + console.log(invitesRemaining); + return ( +
+
+

{__("Invites")}

+
+
+ {isPending && } + {!isPending && +

+ {__n( + "You have %d invite remaining.", + "You have %d invites remaining.", + invitesRemaining + )} +

} +
+
+ 0 ? "primary" : "text"} + navigate="/invite" + label={__("Go To Invites")} + /> +
+
+ ); +}; + +export default InviteSummary; diff --git a/ui/js/component/link/index.js b/ui/js/component/link/index.js index 601927420..f8134f7ff 100644 --- a/ui/js/component/link/index.js +++ b/ui/js/component/link/index.js @@ -1,5 +1,10 @@ import React from "react"; import { connect } from "react-redux"; +import { doNavigate } from "actions/app"; import Link from "./view"; -export default connect(null, null)(Link); +const perform = dispatch => ({ + doNavigate: path => dispatch(doNavigate(path)), +}); + +export default connect(null, perform)(Link); diff --git a/ui/js/component/link/view.jsx b/ui/js/component/link/view.jsx index f385225f3..1980258af 100644 --- a/ui/js/component/link/view.jsx +++ b/ui/js/component/link/view.jsx @@ -5,7 +5,6 @@ const Link = props => { const { href, title, - onClick, style, label, icon, @@ -13,6 +12,8 @@ const Link = props => { button, disabled, children, + navigate, + doNavigate, } = props; const className = @@ -21,6 +22,12 @@ const Link = props => { (button ? " button-block button-" + button + " button-set-item" : "") + (disabled ? " disabled" : ""); + const onClick = props.onClick + ? props.onClick + : () => { + doNavigate(navigate); + }; + let content; if (children) { content = children; diff --git a/ui/js/component/publishForm/view.jsx b/ui/js/component/publishForm/view.jsx index 39bce0d4d..8f6d07ffc 100644 --- a/ui/js/component/publishForm/view.jsx +++ b/ui/js/component/publishForm/view.jsx @@ -318,7 +318,7 @@ class PublishForm extends React.PureComponent { handleFeePrefChange(feeEnabled) { this.setState({ isFee: feeEnabled, - feeAmount: this.state.feeAmount == "" ? "5.00" : this.state.feeAmount, + feeAmount: this.state.feeAmount == "" ? "0.01" : this.state.feeAmount, }); } @@ -786,7 +786,6 @@ class PublishForm extends React.PureComponent { ref="bid" type="number" step="0.01" - min="0" label={__("Deposit")} postfix="LBC" onChange={event => { diff --git a/ui/js/component/rewardSummary/index.js b/ui/js/component/rewardSummary/index.js new file mode 100644 index 000000000..390395472 --- /dev/null +++ b/ui/js/component/rewardSummary/index.js @@ -0,0 +1,11 @@ +import React from "react"; +import { connect } from "react-redux"; +import { doNavigate } from "actions/app"; +import { selectUnclaimedRewardValue } from "selectors/rewards"; +import RewardSummary from "./view"; + +const select = state => ({ + unclaimedRewardAmount: selectUnclaimedRewardValue(state), +}); + +export default connect(select, null)(RewardSummary); diff --git a/ui/js/component/rewardSummary/view.jsx b/ui/js/component/rewardSummary/view.jsx new file mode 100644 index 000000000..eaeb7a0a2 --- /dev/null +++ b/ui/js/component/rewardSummary/view.jsx @@ -0,0 +1,32 @@ +import React from "react"; +import Link from "component/link"; +import { CreditAmount } from "component/common"; + +const RewardSummary = props => { + const { balance, unclaimedRewardAmount } = props; + + return ( +
+
+

{__("Rewards")}

+
+
+ {unclaimedRewardAmount > 0 && +

+ You have{" "} + in + unclaimed rewards. +

} +
+
+ 0 ? "primary" : "text"} + navigate="/rewards" + label={__("Go To Rewards")} + /> +
+
+ ); +}; + +export default RewardSummary; diff --git a/ui/js/component/transactionList/index.js b/ui/js/component/transactionList/index.js index 7e15a67b4..9e2d9ec6b 100644 --- a/ui/js/component/transactionList/index.js +++ b/ui/js/component/transactionList/index.js @@ -1,21 +1,5 @@ import React from "react"; import { connect } from "react-redux"; -import { doFetchTransactions } from "actions/wallet"; -import { - selectBalance, - selectTransactionItems, - selectIsFetchingTransactions, -} from "selectors/wallet"; - import TransactionList from "./view"; -const select = state => ({ - fetchingTransactions: selectIsFetchingTransactions(state), - transactionItems: selectTransactionItems(state), -}); - -const perform = dispatch => ({ - fetchTransactions: () => dispatch(doFetchTransactions()), -}); - -export default connect(select, perform)(TransactionList); +export default connect(null, null)(TransactionList); diff --git a/ui/js/component/transactionList/view.jsx b/ui/js/component/transactionList/view.jsx index cf63900dd..0ad7f4eeb 100644 --- a/ui/js/component/transactionList/view.jsx +++ b/ui/js/component/transactionList/view.jsx @@ -1,69 +1,57 @@ import React from "react"; -import { BusyMessage } from "component/common"; import LinkTransaction from "component/linkTransaction"; +import { CreditAmount } from "component/common"; -class TransactionList extends React.PureComponent { - componentWillMount() { - this.props.fetchTransactions(); - } - - render() { - const { fetchingTransactions, transactionItems } = this.props; - - const rows = []; - if (transactionItems.length > 0) { - transactionItems.forEach(function(item) { - rows.push( - - {(item.amount > 0 ? "+" : "") + item.amount} - - {item.date - ? item.date.toLocaleDateString() - : {__("(Transaction pending)")}} - - - {item.date - ? item.date.toLocaleTimeString() - : {__("(Transaction pending)")}} - - - - - - ); - }); - } +const TransactionList = props => { + const { emptyMessage, transactions } = props; + if (!transactions || !transactions.length) { return ( -
-
-

{__("Transaction History")}

-
-
- {fetchingTransactions && - } - {!fetchingTransactions && rows.length === 0 - ?
{__("You have no transactions.")}
- : ""} - {rows.length > 0 - ? - - - - - - - - - - {rows} - -
{__("Amount")}{__("Date")}{__("Time")}{__("Transaction")}
- : ""} -
-
+
+ {emptyMessage || __("No transactions to list.")} +
); } -} + + return ( + + + + + + + + + + {transactions.map(item => { + return ( + + + + + + ); + })} + +
{__("Date")}{__("Amount")}{__("Transaction")}
+ {item.date + ? item.date.toLocaleDateString() + + " " + + item.date.toLocaleTimeString() + : + {__("(Transaction pending)")} + } + + {" "} + + +
+ ); +}; export default TransactionList; diff --git a/ui/js/component/transactionListRecent/index.js b/ui/js/component/transactionListRecent/index.js new file mode 100644 index 000000000..bea2fdac1 --- /dev/null +++ b/ui/js/component/transactionListRecent/index.js @@ -0,0 +1,23 @@ +import React from "react"; +import { connect } from "react-redux"; +import { doFetchTransactions } from "actions/wallet"; +import { + selectBalance, + selectRecentTransactions, + selectHasTransactions, + selectIsFetchingTransactions, +} from "selectors/wallet"; + +import TransactionListRecent from "./view"; + +const select = state => ({ + fetchingTransactions: selectIsFetchingTransactions(state), + transactions: selectRecentTransactions(state), + hasTransactions: selectHasTransactions(state), +}); + +const perform = dispatch => ({ + fetchTransactions: () => dispatch(doFetchTransactions()), +}); + +export default connect(select, perform)(TransactionListRecent); diff --git a/ui/js/component/transactionListRecent/view.jsx b/ui/js/component/transactionListRecent/view.jsx new file mode 100644 index 000000000..ad23ff363 --- /dev/null +++ b/ui/js/component/transactionListRecent/view.jsx @@ -0,0 +1,41 @@ +import React from "react"; +import { BusyMessage } from "component/common"; +import Link from "component/link"; +import TransactionList from "component/transactionList"; + +class TransactionListRecent extends React.PureComponent { + componentWillMount() { + this.props.fetchTransactions(); + } + + render() { + const { fetchingTransactions, hasTransactions, transactions } = this.props; + console.log(transactions); + return ( +
+
+

{__("Recent Transactions")}

+
+
+ {fetchingTransactions && + } + {!fetchingTransactions && + } +
+ {hasTransactions && +
+ +
} +
+ ); + } +} + +export default TransactionListRecent; diff --git a/ui/js/component/walletBalance/index.js b/ui/js/component/walletBalance/index.js index 51e4ebb06..1121cc463 100644 --- a/ui/js/component/walletBalance/index.js +++ b/ui/js/component/walletBalance/index.js @@ -1,6 +1,5 @@ import React from "react"; import { connect } from "react-redux"; -import { doNavigate } from "actions/app"; import { selectBalance } from "selectors/wallet"; import WalletBalance from "./view"; @@ -8,8 +7,4 @@ const select = state => ({ balance: selectBalance(state), }); -const perform = dispatch => ({ - navigate: path => dispatch(doNavigate(path)), -}); - -export default connect(select, perform)(WalletBalance); +export default connect(select, null)(WalletBalance); diff --git a/ui/js/component/walletBalance/view.jsx b/ui/js/component/walletBalance/view.jsx index 45c6a7c4d..1204b5338 100644 --- a/ui/js/component/walletBalance/view.jsx +++ b/ui/js/component/walletBalance/view.jsx @@ -4,7 +4,14 @@ import { CreditAmount } from "component/common"; const WalletBalance = props => { const { balance, navigate } = props; - + /* +
+ navigate("/backup")} + label={__("Backup Your Wallet")} + /> +
+ */ return (
@@ -14,12 +21,13 @@ const WalletBalance = props => { {balance && }
-
- navigate("/backup")} - label={__("Backup Your Wallet")} - /> -
+ + +
); diff --git a/ui/js/page/transactionHistory/index.js b/ui/js/page/transactionHistory/index.js index 01fdf2a64..12acf47ad 100644 --- a/ui/js/page/transactionHistory/index.js +++ b/ui/js/page/transactionHistory/index.js @@ -1,5 +1,19 @@ import React from "react"; import { connect } from "react-redux"; -import WalletPage from "./view"; +import { doFetchTransactions } from "actions/wallet"; +import { + selectTransactionItems, + selectIsFetchingTransactions, +} from "selectors/wallet"; +import TransactionHistoryPage from "./view"; -export default connect(null, null)(WalletPage); +const select = state => ({ + fetchingTransactions: selectIsFetchingTransactions(state), + transactions: selectTransactionItems(state), +}); + +const perform = dispatch => ({ + fetchTransactions: () => dispatch(doFetchTransactions()), +}); + +export default connect(select, perform)(TransactionHistoryPage); diff --git a/ui/js/page/transactionHistory/view.jsx b/ui/js/page/transactionHistory/view.jsx index 50efd014c..8b9f1a90b 100644 --- a/ui/js/page/transactionHistory/view.jsx +++ b/ui/js/page/transactionHistory/view.jsx @@ -1,14 +1,32 @@ import React from "react"; +import { BusyMessage } from "component/common"; import SubHeader from "component/subHeader"; import TransactionList from "component/transactionList"; -const TransactionHistoryPage = props => { - return ( -
- - -
- ); -}; +class TransactionHistoryPage extends React.PureComponent { + componentWillMount() { + this.props.fetchTransactions(); + } + + render() { + const { fetchingTransactions, transactions } = this.props; + return ( +
+ +
+
+

{__("Transaction History")}

+
+
+ {fetchingTransactions && + } + {!fetchingTransactions && + } +
+
+
+ ); + } +} export default TransactionHistoryPage; diff --git a/ui/js/page/wallet/view.jsx b/ui/js/page/wallet/view.jsx index b434a327a..302a2271e 100644 --- a/ui/js/page/wallet/view.jsx +++ b/ui/js/page/wallet/view.jsx @@ -1,14 +1,18 @@ import React from "react"; import SubHeader from "component/subHeader"; import WalletBalance from "component/walletBalance"; -import TransactionList from "component/transactionList"; +import RewardSummary from "component/rewardSummary"; +import InviteSummary from "component/inviteSummary"; +import TransactionListRecent from "component/transactionListRecent"; const WalletPage = props => { return (
- + + +
); }; diff --git a/ui/js/selectors/app.js b/ui/js/selectors/app.js index 82403a5c8..98a854d26 100644 --- a/ui/js/selectors/app.js +++ b/ui/js/selectors/app.js @@ -39,13 +39,15 @@ export const selectPageTitle = createSelector( case "wallet": return __("Wallet"); case "send": - return __("Send"); + return __("Send Credits"); case "receive": - return __("Receive"); + return __("Receive Credits"); case "backup": - return __("Backup"); + return __("Backup Your Wallet"); case "rewards": return __("Rewards"); + case "invite": + return __("Invites"); case "start": return __("Start"); case "publish": @@ -72,8 +74,12 @@ export const selectPageTitle = createSelector( return __("Publishes"); case "discover": return __("Home"); - default: + case false: + case null: + case "": return ""; + default: + return page[0].toUpperCase() + (page.length > 0 ? page.substr(1) : ""); } } ); @@ -144,11 +150,11 @@ export const selectHeaderLinks = createSelector(selectCurrentPage, page => { case "backup": return { wallet: __("Overview"), + rewards: __("Rewards"), + invite: __("Invites"), history: __("History"), send: __("Send"), receive: __("Receive"), - invite: __("Invites"), - rewards: __("Rewards"), }; case "downloaded": case "published": diff --git a/ui/js/selectors/search.js b/ui/js/selectors/search.js index 1daa1ef79..a241e1cd1 100644 --- a/ui/js/selectors/search.js +++ b/ui/js/selectors/search.js @@ -52,22 +52,27 @@ export const selectWunderBarIcon = createSelector(selectCurrentPage, page => { return "icon-folder"; case "start": return "icon-file"; - case "rewards": - return "icon-bank"; - case "wallet": + case "history": + return "icon-history"; case "send": + return "icon-send"; + case "rewards": + return "icon-rocket"; + case "invite": + return "icon-envelope-open"; case "receive": + case "wallet": case "backup": return "icon-bank"; case "show": return "icon-file"; case "publish": return "icon-upload"; - case "developer": - return "icon-file"; case "developer": return "icon-code"; case "discover": return "icon-home"; + default: + return "icon-file"; } }); diff --git a/ui/js/selectors/wallet.js b/ui/js/selectors/wallet.js index 1027bb6e7..1334a17db 100644 --- a/ui/js/selectors/wallet.js +++ b/ui/js/selectors/wallet.js @@ -35,6 +35,24 @@ export const selectTransactionItems = createSelector( } ); +export const selectRecentTransactions = createSelector( + selectTransactionItems, + transactions => { + let threshold = new Date(); + threshold.setDate(threshold.getDate() - 7); + return transactions.filter(transaction => { + return transaction.date > threshold; + }); + } +); + +export const selectHasTransactions = createSelector( + selectTransactionItems, + transactions => { + return transactions && transactions.length > 0; + } +); + export const selectIsFetchingTransactions = createSelector( _selectState, state => state.fetchingTransactions diff --git a/ui/scss/_icons.scss b/ui/scss/_icons.scss index 441113e39..cb487975b 100644 --- a/ui/scss/_icons.scss +++ b/ui/scss/_icons.scss @@ -2,8 +2,8 @@ @font-face { font-family: 'FontAwesome'; - src: url('../font/fontawesome-webfont.eot?v=4.3.0'); - src: url('../font/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'), url('../font/fontawesome-webfont.woff2?v=4.3.0') format('woff2'), url('../font/fontawesome-webfont.woff?v=4.3.0') format('woff'), url('../font/fontawesome-webfont.ttf?v=4.3.0') format('truetype'), url('../font/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg'); + src: url('../font/fontawesome-webfont.eot?v=4.7.0'); + src: url('../font/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../font/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../font/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../font/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../font/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); font-weight: normal; font-style: normal; }