diff --git a/circle.yml b/circle.yml index 128ae3949..2084eb9ca 100644 --- a/circle.yml +++ b/circle.yml @@ -19,7 +19,7 @@ compile: deployment: development: - branch: [dev, 'feature/back-forward-button-project-wizard'] + branch: dev owner: appirio-tech commands: - ./deploy.sh DEV @@ -28,6 +28,11 @@ deployment: owner: appirio-tech commands: - ./deploy.sh TEST01 + test02: + branch: test02 + owner: appirio-tech + commands: + - ./deploy.sh TEST02 qa: branch: qa owner: appirio-tech diff --git a/src/components/ActionCard/ActionCard.jsx b/src/components/ActionCard/ActionCard.jsx index f9bcf8a36..1b5106820 100644 --- a/src/components/ActionCard/ActionCard.jsx +++ b/src/components/ActionCard/ActionCard.jsx @@ -75,7 +75,7 @@ class Header extends React.Component{
 
-
+
{this.props.title}
diff --git a/src/components/ActionCard/ActionCard.scss b/src/components/ActionCard/ActionCard.scss index 166967f6a..14e64fcc2 100644 --- a/src/components/ActionCard/ActionCard.scss +++ b/src/components/ActionCard/ActionCard.scss @@ -124,6 +124,10 @@ &::before { content: " ยท "; } + + a { + color: $tc-gray-70; + } } .card-status { @@ -132,6 +136,10 @@ } } + .topicBody{ + width: calc(100% - 40px); + } + .card-body { @include roboto; font-size: $tc-label-lg; @@ -139,6 +147,7 @@ line-height: $base-unit*5; padding: 10px 0; word-break: break-word; + overflow-x:auto; &.comment-section { margin-bottom: -50px; diff --git a/src/components/Feed/Feed.jsx b/src/components/Feed/Feed.jsx index b2742f455..b51cc2e51 100644 --- a/src/components/Feed/Feed.jsx +++ b/src/components/Feed/Feed.jsx @@ -77,7 +77,7 @@ class Feed extends React.Component {
-
+
{title}
{self && ( diff --git a/src/components/Home/Home.scss b/src/components/Home/Home.scss index f48b1f5e9..bf2d5755d 100644 --- a/src/components/Home/Home.scss +++ b/src/components/Home/Home.scss @@ -70,6 +70,7 @@ padding-bottom: $base-unit*6; } .tc-btn{ + color: #cfe6ff; height:$base-unit*8; width: $base-unit*50; text-align: center; @@ -79,6 +80,14 @@ font-size: $tc-label-lg; display: block; margin-bottom: $base-unit * 4; + &:hover { + color:#ffffff; + background-image: linear-gradient(#3996FF 0%, #127BF3 100%) !important; + } + &:active { + color:#ffffff; + background-image: linear-gradient(#3996FF 0%, #127BF3 100%) !important; + } } } } \ No newline at end of file diff --git a/src/components/LoadingIndicator/LoadingIndicator.scss b/src/components/LoadingIndicator/LoadingIndicator.scss index 41d87fd7e..c34c7ad9c 100644 --- a/src/components/LoadingIndicator/LoadingIndicator.scss +++ b/src/components/LoadingIndicator/LoadingIndicator.scss @@ -1,6 +1,8 @@ .loading-indicator { height: 80%; width: 100%; + min-height: 70px; + min-width: 70px; background: 50% 50% no-repeat; background-size: 70px 70px; } diff --git a/src/components/TopBar/ProjectsToolBar.js b/src/components/TopBar/ProjectsToolBar.js index 19c208fb2..0b96c8c8d 100644 --- a/src/components/TopBar/ProjectsToolBar.js +++ b/src/components/TopBar/ProjectsToolBar.js @@ -1,25 +1,18 @@ require('./ProjectsToolBar.scss') import React, {PropTypes, Component} from 'react' +import { Link } from 'react-router' import { connect } from 'react-redux' import cn from 'classnames' import _ from 'lodash' -import Modal from 'react-modal' import { SearchBar } from 'appirio-tech-react-components' import Filters from './Filters' -import ModalControl from '../ModalControl' -import SVGIconImage from '../SVGIconImage' -import CoderBot from '../CoderBot/CoderBot' -import ProjectWizard from '../../projects/create/components/ProjectWizard' - -import { createProjectWithStatus as createProjectAction } from '../../projects/actions/project' import { projectSuggestions, loadProjects } from '../../projects/actions/loadProjects' import { ROLE_CONNECT_COPILOT, ROLE_CONNECT_MANAGER, - ROLE_ADMINISTRATOR, - PROJECT_STATUS_IN_REVIEW + ROLE_ADMINISTRATOR } from '../../config/constants' @@ -28,18 +21,14 @@ class ProjectsToolBar extends Component { constructor(props) { super(props) this.state = { - isCreateProjectModalVisible : false, errorCreatingProject: false, isFilterVisible: false } this.applyFilters = this.applyFilters.bind(this) this.toggleFilter = this.toggleFilter.bind(this) - this.showCreateProjectDialog = this.showCreateProjectDialog.bind(this) - this.hideCreateProjectDialog = this.hideCreateProjectDialog.bind(this) this.handleTermChange = this.handleTermChange.bind(this) this.handleSearch = this.handleSearch.bind(this) this.handleMyProjectsFilter = this.handleMyProjectsFilter.bind(this) - this.createProject = this.createProject.bind(this) this.onLeave = this.onLeave.bind(this) } @@ -51,7 +40,6 @@ class ProjectsToolBar extends Component { this.setState({ isProjectDirty : false }, () => { - this.hideCreateProjectDialog() this.props.router.push('/projects/' + nextProps.project.id) }) } else { @@ -103,26 +91,6 @@ class ProjectsToolBar extends Component { this.applyFilters({memberOnly: event.target.checked}) } - showCreateProjectDialog() { - this.setState({ - isCreateProjectModalVisible : true - }) - } - - hideCreateProjectDialog() { - let confirm = true - if (this.state.isProjectDirty) { - confirm = window.confirm('You have unsaved changes. Are you sure you want to leave?') - } - if (confirm === true) { - this.setState({ - isProjectDirty: false, - isCreateProjectModalVisible : false, - errorCreatingProject: false - }) - } - } - applyFilters(filter) { const criteria = _.assign({}, this.props.criteria, filter) if (criteria && criteria.keyword) { @@ -155,62 +123,27 @@ class ProjectsToolBar extends Component { this.props.loadProjects(criteria, page) } - createProject(project) { - this.props.createProjectAction(project, PROJECT_STATUS_IN_REVIEW) - } - shouldComponentUpdate(nextProps, nextState) { const { user, criteria, creatingProject, projectCreationError, searchTermTag } = this.props - const { isCreateProjectModalVisible, errorCreatingProject, isFilterVisible } = this.state + const { errorCreatingProject, isFilterVisible } = this.state return nextProps.user.handle !== user.handle || JSON.stringify(nextProps.criteria) !== JSON.stringify(criteria) || nextProps.creatingProject !== creatingProject || nextProps.projectCreationError !== projectCreationError || nextProps.searchTermTag !== searchTermTag - || nextState.isCreateProjectModalVisible !== isCreateProjectModalVisible || nextState.errorCreatingProject !== errorCreatingProject || nextState.isFilterVisible !== isFilterVisible } render() { const { logo, userMenu, userRoles, criteria, isPowerUser } = this.props - const { isCreateProjectModalVisible, errorCreatingProject, isFilterVisible } = this.state + const { isFilterVisible } = this.state const isLoggedIn = userRoles && userRoles.length const noOfFilters = _.keys(criteria).length - 1 // -1 for default sort criteria return (
- - } - label="esc" - onClick={ this.hideCreateProjectDialog } - /> - { !errorCreatingProject && - { - this.setState({ - isProjectDirty: dirty - }) - } - } - /> - } - { errorCreatingProject && } -
{ logo } { @@ -240,7 +173,7 @@ class ProjectsToolBar extends Component { { !!isLoggedIn &&
- + New Project + + New Project
} { userMenu } @@ -289,6 +222,6 @@ const mapStateToProps = ({ projectSearchSuggestions, searchTerm, projectSearch, } } -const actionsToBind = { projectSuggestions, loadProjects, createProjectAction } +const actionsToBind = { projectSuggestions, loadProjects } export default connect(mapStateToProps, actionsToBind)(ProjectsToolBar) \ No newline at end of file diff --git a/src/config/projectWizard/index.js b/src/config/projectWizard/index.js index c2f99f994..b9b0d3845 100644 --- a/src/config/projectWizard/index.js +++ b/src/config/projectWizard/index.js @@ -116,7 +116,7 @@ const products = { details: 'Translate designs to a web (HTML/CSS/JavaScript) or mobile prototype', icon: 'product-dev-prototype', id: 'visual_prototype', - aliases: ['visual-prototype','visual_prototype'], + aliases: ['visual-prototype', 'visual_prototype'], disabled: true }, 'Front-end': { diff --git a/src/projects/create/components/FillProjectDetails.js b/src/projects/create/components/FillProjectDetails.js index 50c8812fb..c472c4ab7 100644 --- a/src/projects/create/components/FillProjectDetails.js +++ b/src/projects/create/components/FillProjectDetails.js @@ -1,10 +1,8 @@ import _ from 'lodash' import React, { PropTypes as PT, Component } from 'react' -import { Link } from 'react-router' import Sticky from 'react-stickynode' import config from '../../../config/projectWizard' -import SVGIconImage from '../../../components/SVGIconImage' import './FillProjectDetails.scss' import ProjectBasicDetailsForm from '../components/ProjectBasicDetailsForm' import ProjectOutline from '../components/ProjectOutline' @@ -34,9 +32,7 @@ class FillProjectDetails extends Component { } render() { - const { project, dirtyProject, processing, submitBtnText, userRoles } = this.props - const isLoggedIn = userRoles && userRoles.length - const logoTargetUrl = isLoggedIn ? '/projects' : '/' + const { project, dirtyProject, processing, submitBtnText } = this.props const product = _.get(project, 'details.products[0]') const projectTypeId = _.get(project, 'type') const subConfig = config[_.findKey(config, {id : projectTypeId})] @@ -49,8 +45,6 @@ class FillProjectDetails extends Component { return (
- { !isLoggedIn && } - { !isLoggedIn && }
diff --git a/src/projects/create/components/IncompleteProjectConfirmation.js b/src/projects/create/components/IncompleteProjectConfirmation.js index def957993..b94fc4c33 100644 --- a/src/projects/create/components/IncompleteProjectConfirmation.js +++ b/src/projects/create/components/IncompleteProjectConfirmation.js @@ -1,15 +1,13 @@ import React, { PropTypes as PT } from 'react' -import { Link } from 'react-router' import SVGIconImage from '../../../components/SVGIconImage' import './IncompleteProjectConfirmation.scss' -function IncompleteProjectConfirmation({ loadIncompleteProject, removeIncompleteProject, userRoles }) { - const isLoggedIn = userRoles && userRoles.length - const logoTargetUrl = isLoggedIn ? '/projects' : '/' +function IncompleteProjectConfirmation({ loadIncompleteProject, removeIncompleteProject }) { + // const isLoggedIn = userRoles && userRoles.length return (
- { !isLoggedIn && } +

Welcome back!

You started a project with us recently.
diff --git a/src/projects/create/components/ProjectOutline.scss b/src/projects/create/components/ProjectOutline.scss index 172aed47b..7f5766f6a 100644 --- a/src/projects/create/components/ProjectOutline.scss +++ b/src/projects/create/components/ProjectOutline.scss @@ -37,6 +37,7 @@ margin-top: $base-unit * 4; margin-bottom: $base-unit * 4; word-break: break-all; + white-space: pre-line; } .project-meta-data { diff --git a/src/projects/create/components/ProjectWizard.jsx b/src/projects/create/components/ProjectWizard.jsx index db5f264c0..4877f328b 100644 --- a/src/projects/create/components/ProjectWizard.jsx +++ b/src/projects/create/components/ProjectWizard.jsx @@ -40,6 +40,7 @@ class ProjectWizard extends Component { this.handleStepChange = this.handleStepChange.bind(this) this.restoreCommonDetails = this.restoreCommonDetails.bind(this) this.handleWizardCancel = this.handleWizardCancel.bind(this) + this.loadProjectAndProductFromURL = this.loadProjectAndProductFromURL.bind(this) } componentDidMount() { @@ -48,33 +49,39 @@ class ProjectWizard extends Component { const incompleteProjectStr = window.localStorage.getItem(LS_INCOMPLETE_PROJECT) if(incompleteProjectStr) { const incompleteProject = JSON.parse(incompleteProjectStr) + const incompleteProduct = _.get(incompleteProject, 'details.products[0]') + let wizardStep = WZ_STEP_INCOMP_PROJ_CONF + let updateQuery = {} + if (incompleteProduct && params && params.product) { + // assumes the params.product to be id of a product because incomplete project is set only + // after user selects a particular product + const product = findProduct(params.product, true) + if (product) { + // load project detais page directly if product of save project and deep link are the same + if (product.id === incompleteProduct) { + wizardStep = WZ_STEP_FILL_PROJ_DETAILS + updateQuery = {$merge : incompleteProject} + } else { + // explicitly ignores the wizardStep returned by the method + // we need to call this method just to get updateQuery updated with correct project type and product + this.loadProjectAndProductFromURL(params, updateQuery) + } + } + } this.setState({ - project: update(this.state.project, {$merge : incompleteProject}), - dirtyProject: update(this.state.dirtyProject, {$merge : incompleteProject}), - wizardStep: WZ_STEP_INCOMP_PROJ_CONF, + project: update(this.state.project, updateQuery), + dirtyProject: update(this.state.dirtyProject, updateQuery), + wizardStep, isProjectDirty: false }, () => { - typeof onStepChange === 'function' && onStepChange(this.state.wizardStep) + typeof onStepChange === 'function' && onStepChange(this.state.wizardStep, this.state.project) }) } else { // if there is no incomplete project in the local storage, load the wizard with appropriate step const updateQuery = {} let wizardStep = WZ_STEP_SELECT_PROJ_TYPE if (params && params.product) { - // first try the path param to be a project category - let projectType = findCategory(params.product, true) - if (projectType) {// if its a category - updateQuery['type'] = { $set : projectType.id } - wizardStep = WZ_STEP_SELECT_PROD_TYPE - } else { - // if it is not a category, it should be a product and we should be able to find a category for it - projectType = findProductCategory(params.product, true) - // finds product object from product alias - const product = findProduct(params.product, true) - updateQuery['type'] = { $set : projectType.id } - updateQuery['details'] = { products : { $set: [product.id] } } - wizardStep = WZ_STEP_FILL_PROJ_DETAILS - } + wizardStep = this.loadProjectAndProductFromURL(params.product, updateQuery) } // retrieve refCode from query param // TODO give warning after truncating @@ -106,22 +113,7 @@ class ProjectWizard extends Component { let wizardStep = type && product ? WZ_STEP_FILL_PROJ_DETAILS : null const updateQuery = {} if (params && params.product) { // if there exists product path param - // first try the path param to be a project category - let projectType = findCategory(params.product, true) - if (projectType) {// if its a category - updateQuery['type'] = { $set : projectType.id } - wizardStep = WZ_STEP_SELECT_PROD_TYPE - } else { - // if it is not a category, it should be a product and we should be able to find a category for it - projectType = findProductCategory(params.product, true) - // finds product object from product alias - const product = findProduct(params.product, true) - if (projectType) {// we can have `incomplete` as params.product - updateQuery['type'] = { $set : projectType.id } - updateQuery['details'] = { products : { $set: [product.id] } } - wizardStep = WZ_STEP_FILL_PROJ_DETAILS - } - } + wizardStep = this.loadProjectAndProductFromURL(params, updateQuery) } else { // if there is not product path param, it should be first step of the wizard updateQuery['type'] = { $set : null } updateQuery['details'] = { products : { $set: [] } } @@ -139,6 +131,39 @@ class ProjectWizard extends Component { } } + /** + * Loads project type and product from the given URL parameter. + * + * @param {object} urlParams URL parameters map + * @param {object} updateQuery query object which would be updated according to parsed project type and product + * + * @return {number} step where wizard should move after parsing the URL param + */ + loadProjectAndProductFromURL(urlParams, updateQuery) { + const productParam = urlParams && urlParams.product + const statusParam = urlParams && urlParams.status + if ('incomplete' === statusParam) { + return WZ_STEP_INCOMP_PROJ_CONF + } + if (!productParam) return + // first try the path param to be a project category + let projectType = findCategory(productParam, true) + if (projectType) {// if its a category + updateQuery['type'] = { $set : projectType.id } + return WZ_STEP_SELECT_PROD_TYPE + } else { + // if it is not a category, it should be a product and we should be able to find a category for it + projectType = findProductCategory(productParam, true) + // finds product object from product alias + const product = findProduct(productParam, true) + if (projectType) {// we can have `incomplete` as params.product + updateQuery['type'] = { $set : projectType.id } + updateQuery['details'] = { products : { $set: [product.id] } } + return WZ_STEP_FILL_PROJ_DETAILS + } + } + } + /** * Loads incomplete project from the local storage and populates the state from that project. * It also moves the wizard to the project details step if there exists an incomplete project. @@ -164,13 +189,25 @@ class ProjectWizard extends Component { */ removeIncompleteProject() { const { onStepChange } = this.props + // remove incomplete project from local storage window.localStorage.removeItem(LS_INCOMPLETE_PROJECT) + const projectType = _.get(this.state.project, 'type') + const product = _.get(this.state.project, 'details.products[0]') + let wizardStep = WZ_STEP_SELECT_PROJ_TYPE + let project = null + if (product) { + project = { type: projectType, details: { products: [product] } } + wizardStep = WZ_STEP_FILL_PROJ_DETAILS + } else if (projectType) { + project = { type: projectType, details: { products: [] } } + wizardStep = WZ_STEP_SELECT_PROD_TYPE + } this.setState({ - project: { details: {} }, - dirtyProject: { details: {} }, - wizardStep: WZ_STEP_SELECT_PROJ_TYPE + project: _.merge({}, project), + dirtyProject: _.merge({}, project), + wizardStep }, () => { - typeof onStepChange === 'function' && onStepChange(this.state.wizardStep) + typeof onStepChange === 'function' && onStepChange(this.state.wizardStep, this.state.project) }) } @@ -348,7 +385,7 @@ class ProjectWizard extends Component { onCancel={this.handleWizardCancel} onStepChange={ this.handleStepChange } step={this.state.wizardStep} - shouldRenderBackButton={ (step) => userRoles && userRoles.length && step > 1 } + shouldRenderBackButton={ (step) => step > 1 } >
- { !isLoggedIn && } - { !isLoggedIn && }

{ projectCategory.name } projects

diff --git a/src/projects/create/components/SelectProjectType.jsx b/src/projects/create/components/SelectProjectType.jsx index 3416ef93f..f4104b8d5 100644 --- a/src/projects/create/components/SelectProjectType.jsx +++ b/src/projects/create/components/SelectProjectType.jsx @@ -1,5 +1,4 @@ import React, { PropTypes as PT } from 'react' -import { Link } from 'react-router' import config from '../../../config/projectWizard' import ProjectTypeCard from './ProjectTypeCard' import SVGIconImage from '../../../components/SVGIconImage' @@ -7,9 +6,6 @@ import { findProductsOfCategory } from '../../../config/projectWizard' import './SelectProjectType.scss' function SelectProjectType(props) { - const { userRoles } = props - const isLoggedIn = userRoles && userRoles.length - const logoTargetUrl = isLoggedIn ? '/projects' : '/' const cards = [] for (const key in config) { const item = config[key] @@ -32,7 +28,7 @@ function SelectProjectType(props) { return (
- { !isLoggedIn && } +

Create a new project

diff --git a/src/projects/create/components/_layout.scss b/src/projects/create/components/_layout.scss index 320b60835..a170190ab 100644 --- a/src/projects/create/components/_layout.scss +++ b/src/projects/create/components/_layout.scss @@ -29,6 +29,7 @@ $minimumPageWidth: 984px; display: flex; justify-content: space-between; margin: 20px 0 0; + height: 43px; button { align-self: flex-start; diff --git a/src/projects/create/containers/CreateContainer.jsx b/src/projects/create/containers/CreateContainer.jsx index 718607789..18cd551c5 100644 --- a/src/projects/create/containers/CreateContainer.jsx +++ b/src/projects/create/containers/CreateContainer.jsx @@ -58,6 +58,7 @@ class CreateConainer extends React.Component { } this.createProject = this.createProject.bind(this) this.onLeave = this.onLeave.bind(this) + this.closeWizard = this.closeWizard.bind(this) } componentWillReceiveProps(nextProps) { @@ -108,9 +109,9 @@ class CreateConainer extends React.Component { // stores the incomplete project in local storage onLeave(e) {// eslint-disable-line no-unused-vars - const { wizardStep } = this.state - if (wizardStep === ProjectWizard.Steps.WZ_STEP_FILL_PROJ_DETAILS) {// Project Details step - console.log('saving incomplete project') + const { wizardStep, isProjectDirty } = this.state + if (wizardStep === ProjectWizard.Steps.WZ_STEP_FILL_PROJ_DETAILS && isProjectDirty) {// Project Details step + console.log('saving incomplete project', this.state.updatedProject) window.localStorage.setItem(LS_INCOMPLETE_PROJECT, JSON.stringify(this.state.updatedProject)) } // commenting alerts for the page unload and route change hooks as discussed @@ -139,12 +140,28 @@ class CreateConainer extends React.Component { }) } + closeWizard() { + const { userRoles } = this.props + const isLoggedIn = userRoles && userRoles.length > 0 + // calls leave handler + this.onLeave() + if (isLoggedIn) { + this.props.router.push('/projects') + } else { + // this.props.router.push('/') + // FIXME ideally we should push on router + window.location = window.location.origin + } + } + render() { return ( { // type of the project let projectType = _.get(updatedProject, 'type', null) @@ -159,7 +176,9 @@ class CreateConainer extends React.Component { // updates the productType variable to use first alias to create SEO friendly URL productType = _.get(product, 'aliases[0]', productType) if (wizardStep === ProjectWizard.Steps.WZ_STEP_INCOMP_PROJ_CONF) { - browserHistory.push(NEW_PROJECT_PATH + '/incomplete') + let productUrl = productType ? ('/' + productType) : '' + productUrl = !productType && projectType ? ('/' + projectType) : productUrl + browserHistory.push(NEW_PROJECT_PATH + productUrl + '/incomplete') } if (wizardStep === ProjectWizard.Steps.WZ_STEP_SELECT_PROJ_TYPE) { browserHistory.push(NEW_PROJECT_PATH + '/' + window.location.search) diff --git a/src/projects/detail/containers/Specification.scss b/src/projects/detail/containers/Specification.scss index e12db078e..0082f2edd 100644 --- a/src/projects/detail/containers/Specification.scss +++ b/src/projects/detail/containers/Specification.scss @@ -85,7 +85,8 @@ $sideBarWidth: 280px; text-transform: none; } - &:-moz-placeholder { + &::-moz-placeholder { + line-height: 45px; color: #888894; opacity: 1; text-transform: none; @@ -849,7 +850,7 @@ $sideBarWidth: 280px; .project-name { word-break: break-all; font-size: 20px; - margin-top: 10px; + /*margin-top: 10px;*/ } } diff --git a/src/routes.jsx b/src/routes.jsx index b12262b26..3d23a7032 100644 --- a/src/routes.jsx +++ b/src/routes.jsx @@ -104,7 +104,7 @@ const renderTopBarWithProjectsToolBar = (props) => window.scrollTo(0, 0)} component={ App } onEnter={ redirectToConnect }> - + diff --git a/src/styles/_fonts.scss b/src/styles/_fonts.scss index aba02dca7..b955b4c88 100644 --- a/src/styles/_fonts.scss +++ b/src/styles/_fonts.scss @@ -1,17 +1,16 @@ // FONT STACK // -------------------------------------------------------------------------------------------- // Use the mixin to include fonts. - @mixin font-family($font-name, $font-weight, $font-style, $font-url, $font-file) { @font-face { - font-family: '#{$font-name}'; - src: url('#{$font-url}#{$font-file}.eot'); - src: url('#{$font-url}#{$font-file}.eot?#iefix') format('embedded-opentype'), - url('#{$font-url}#{$font-file}.woff') format('woff'), - url('#{$font-url}#{$font-file}.ttf') format('truetype'), - url('#{$font-url}.svg##{$font-file}') format('svg'); - font-weight: $font-weight; - font-style: $font-style; + font-family: '#{$font-name}'; + src: url('#{$font-url}#{$font-file}.eot'); + src: url('#{$font-url}#{$font-file}.eot?#iefix') format('embedded-opentype'), + url('#{$font-url}#{$font-file}.woff') format('woff'), + url('#{$font-url}#{$font-file}.ttf') format('truetype'), + url('#{$font-url}#{$font-file}.svg##{$font-name}') format('svg'); + font-weight: $font-weight; + font-style: $font-style; } } @@ -30,20 +29,20 @@ // 900 Black (Heavy) // Roboto -@include font-family('Roboto', 900, normal, '~/src/assets/fonts/roboto/', 'roboto-black'); -@include font-family('Roboto', 900, italic, '~/src/assets/fonts/roboto/', 'roboto-blackitalic'); +@include font-family('Roboto', 900, normal, '../assets/fonts/roboto/', 'roboto-black'); +@include font-family('Roboto', 900, italic, '../assets/fonts/roboto/', 'roboto-blackitalic'); -@include font-family('Roboto', 700, normal, '~/src/assets/fonts/roboto/', 'roboto-bold'); -@include font-family('Roboto', 700, italic, '~/src/assets/fonts/roboto/', 'roboto-bolditalic'); +@include font-family('Roboto', 700, normal, '../assets/fonts/roboto/', 'roboto-bold'); +@include font-family('Roboto', 700, italic, '../assets/fonts/roboto/', 'roboto-bolditalic'); -@include font-family('Roboto', 500, normal, '~/src/assets/fonts/roboto/', 'roboto-medium'); -@include font-family('Roboto', 500, italic, '~/src/assets/fonts/roboto/', 'roboto-mediumitalic'); +@include font-family('Roboto', 500, normal, '../assets/fonts/roboto/', 'roboto-medium'); +@include font-family('Roboto', 500, italic, '../assets/fonts/roboto/', 'roboto-mediumitalic'); -@include font-family('Roboto', 400, normal, '~/src/assets/fonts/roboto/', 'roboto-regular'); -@include font-family('Roboto', 400, italic, '~/src/assets/fonts/roboto/', 'roboto-italic'); +@include font-family('Roboto', 400, normal, '../assets/fonts/roboto/', 'roboto-regular'); +@include font-family('Roboto', 400, italic, '../assets/fonts/roboto/', 'roboto-italic'); -@include font-family('Roboto', 300, normal, '~/src/assets/fonts/roboto/', 'roboto-light'); -@include font-family('Roboto', 300, italic, '~/src/assets/fonts/roboto/', 'roboto-lightitalic'); +@include font-family('Roboto', 300, normal, '../assets/fonts/roboto/', 'roboto-light'); +@include font-family('Roboto', 300, italic, '../assets/fonts/roboto/', 'roboto-lightitalic'); -@include font-family('Roboto', 100, normal, '~/src/assets/fonts/roboto/', 'roboto-thin'); -@include font-family('Roboto', 100, italic, '~/src/assets/fonts/roboto/', 'roboto-thinitalic'); +@include font-family('Roboto', 100, normal, '../assets/fonts/roboto/', 'roboto-thin'); +@include font-family('Roboto', 100, italic, '../assets/fonts/roboto/', 'roboto-thinitalic');