mirror of
https://github.com/ascribe/onion.git
synced 2024-12-22 09:23:13 +01:00
Merge pull request #99 from ascribe/AD-1396-log-404-page-views-when-previous-view-was-within-the-app
AD-1396 Log 404 page views when previous view was within the app
This commit is contained in:
commit
2c5b029e08
57
js/components/app_base.js
Normal file
57
js/components/app_base.js
Normal file
@ -0,0 +1,57 @@
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import classNames from 'classnames';
|
||||
import { History } from 'react-router';
|
||||
|
||||
import GlobalNotification from './global_notification';
|
||||
|
||||
import AppConstants from '../constants/application_constants';
|
||||
|
||||
|
||||
export default function AppBase(App) {
|
||||
return React.createClass({
|
||||
displayName: 'AppBase',
|
||||
|
||||
propTypes: {
|
||||
children: React.PropTypes.element.isRequired,
|
||||
history: React.PropTypes.object.isRequired,
|
||||
location: React.PropTypes.object.isRequired,
|
||||
routes: React.PropTypes.arrayOf(React.PropTypes.object).isRequired
|
||||
},
|
||||
|
||||
mixins: [History],
|
||||
|
||||
componentDidMount() {
|
||||
this.history.locationQueue.push(this.props.location);
|
||||
},
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
const { locationQueue } = this.history;
|
||||
locationQueue.unshift(nextProps.location);
|
||||
|
||||
// Limit the number of locations to keep in memory to avoid too much memory usage
|
||||
if (locationQueue.length > AppConstants.locationThreshold) {
|
||||
locationQueue.length = AppConstants.locationThreshold;
|
||||
}
|
||||
},
|
||||
|
||||
render() {
|
||||
const { routes } = this.props;
|
||||
|
||||
// The second element of the routes prop given to us by react-router is always the
|
||||
// active second-level component object (ie. after App).
|
||||
const activeRoute = routes[1];
|
||||
|
||||
return (
|
||||
<div>
|
||||
<App
|
||||
{...this.props}
|
||||
activeRoute={activeRoute} />
|
||||
<GlobalNotification />
|
||||
<div id="modal" className="container" />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
};
|
@ -2,36 +2,32 @@
|
||||
|
||||
import React from 'react';
|
||||
|
||||
import Header from '../components/header';
|
||||
import Footer from '../components/footer';
|
||||
import GlobalNotification from './global_notification';
|
||||
import AppBase from './app_base';
|
||||
import Footer from './footer';
|
||||
import Header from './header';
|
||||
|
||||
|
||||
let AscribeApp = React.createClass({
|
||||
propTypes: {
|
||||
children: React.PropTypes.oneOfType([
|
||||
React.PropTypes.arrayOf(React.PropTypes.element),
|
||||
React.PropTypes.element
|
||||
]),
|
||||
routes: React.PropTypes.arrayOf(React.PropTypes.object)
|
||||
activeRoute: React.PropTypes.object.isRequired,
|
||||
children: React.PropTypes.element.isRequired,
|
||||
routes: React.PropTypes.arrayOf(React.PropTypes.object).isRequired
|
||||
},
|
||||
|
||||
render() {
|
||||
let { children, routes } = this.props;
|
||||
const { activeRoute, children, routes } = this.props;
|
||||
|
||||
return (
|
||||
<div className="container ascribe-default-app">
|
||||
<div className="ascribe-default-app">
|
||||
<Header routes={routes} />
|
||||
{/* Routes are injected here */}
|
||||
<div className="ascribe-body">
|
||||
<div className="container ascribe-body">
|
||||
{/* Routes are injected here */}
|
||||
{children}
|
||||
</div>
|
||||
<Footer />
|
||||
<GlobalNotification />
|
||||
<div id="modal" className="container"></div>
|
||||
<Footer activeRoute={activeRoute} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
export default AscribeApp;
|
||||
export default AppBase(AscribeApp);
|
||||
|
@ -14,7 +14,7 @@ import AppConstants from '../../../constants/application_constants';
|
||||
import { AclInformationText } from '../../../constants/acl_information_text';
|
||||
|
||||
|
||||
export default function ({ action, displayName, title, tooltip }) {
|
||||
export default function AclButton({ action, displayName, title, tooltip }) {
|
||||
if (AppConstants.aclList.indexOf(action) < 0) {
|
||||
console.warn('Your specified aclName did not match a an acl class.');
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import { History } from 'react-router';
|
||||
|
||||
import { getLangText } from '../utils/lang_utils';
|
||||
|
||||
@ -10,12 +11,25 @@ let ErrorNotFoundPage = React.createClass({
|
||||
message: React.PropTypes.string
|
||||
},
|
||||
|
||||
mixins: [History],
|
||||
|
||||
getDefaultProps() {
|
||||
return {
|
||||
message: getLangText("Oops, the page you are looking for doesn't exist.")
|
||||
};
|
||||
},
|
||||
|
||||
componentDidMount() {
|
||||
// The previous page, if any, is the second item in the locationQueue
|
||||
const { locationQueue: [ , previousPage ] } = this.history;
|
||||
|
||||
if (previousPage) {
|
||||
console.logGlobal('Page not found', {
|
||||
previousPath: previousPage.pathname
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="row">
|
||||
|
@ -5,8 +5,12 @@ import React from 'react';
|
||||
import { getLangText } from '../utils/lang_utils';
|
||||
|
||||
let Footer = React.createClass({
|
||||
propTypes: {
|
||||
activeRoute: React.PropTypes.object.isRequired
|
||||
},
|
||||
|
||||
render() {
|
||||
return (
|
||||
return !this.props.activeRoute.hideFooter ? (
|
||||
<div className="ascribe-footer hidden-print">
|
||||
<p className="ascribe-sub-sub-statement">
|
||||
<br />
|
||||
@ -24,7 +28,7 @@ let Footer = React.createClass({
|
||||
<a href="https://www.linkedin.com/company/4816284?trk=vsrp_companies_res_name&trkInfo=VSRPsearchId%3A122827941425632318075%2CVSRPtargetId%3A4816284%2CVSRPcmpt%3Aprimary" className="social social-linked-in" target="_blank"></a>
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
) : null;
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -1,28 +1,29 @@
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import GlobalNotification from '../../../global_notification';
|
||||
|
||||
import Hero from './components/pr_hero';
|
||||
import Header from '../../../header';
|
||||
import classNames from 'classnames';
|
||||
|
||||
import EventActions from '../../../../actions/event_actions';
|
||||
|
||||
import UserStore from '../../../../stores/user_store';
|
||||
import UserActions from '../../../../actions/user_actions';
|
||||
|
||||
import Hero from './components/pr_hero';
|
||||
|
||||
import AppBase from '../../../app_base';
|
||||
import Footer from '../../../footer';
|
||||
import Header from '../../../header';
|
||||
|
||||
import { getSubdomain } from '../../../../utils/general_utils';
|
||||
import { getCookie } from '../../../../utils/fetch_api_utils';
|
||||
|
||||
|
||||
let PRApp = React.createClass({
|
||||
propTypes: {
|
||||
children: React.PropTypes.oneOfType([
|
||||
React.PropTypes.arrayOf(React.PropTypes.element),
|
||||
React.PropTypes.element
|
||||
]),
|
||||
history: React.PropTypes.object,
|
||||
routes: React.PropTypes.arrayOf(React.PropTypes.object)
|
||||
activeRoute: React.PropTypes.object.isRequired,
|
||||
children: React.PropTypes.element.isRequired,
|
||||
history: React.PropTypes.object.isRequired,
|
||||
routes: React.PropTypes.arrayOf(React.PropTypes.object).isRequired
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
@ -55,36 +56,37 @@ let PRApp = React.createClass({
|
||||
this.setState(state);
|
||||
},
|
||||
|
||||
|
||||
render() {
|
||||
const { history, children, routes } = this.props;
|
||||
const { activeRoute, children, history, routes } = this.props;
|
||||
const { currentUser } = this.state;
|
||||
const subdomain = getSubdomain();
|
||||
const path = activeRoute && activeRoute.path;
|
||||
|
||||
let style = {};
|
||||
let subdomain = getSubdomain();
|
||||
let header;
|
||||
|
||||
|
||||
if (currentUser && currentUser.email && history.isActive(`/pieces/${getCookie(currentUser.email)}`)) {
|
||||
header = <Hero currentUser={currentUser} />;
|
||||
header = (<Hero currentUser={currentUser} />);
|
||||
style = { paddingTop: '0 !important' };
|
||||
} else if(currentUser && (currentUser.is_admin || currentUser.is_jury || currentUser.is_judge)) {
|
||||
header = <Header routes={routes} />;
|
||||
} else if (currentUser && (currentUser.is_admin || currentUser.is_jury || currentUser.is_judge)) {
|
||||
header = (<Header routes={routes} />);
|
||||
} else {
|
||||
style = { paddingTop: '0 !important' };
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div
|
||||
style={style}
|
||||
className={classNames('ascribe-prize-app', `route--${(path ? path.split('/')[0] : 'landing')}`)}>
|
||||
{header}
|
||||
<div
|
||||
style={style}
|
||||
className={'container ascribe-prize-app client--' + subdomain}>
|
||||
<div className="container ascribe-body">
|
||||
{/* Routes are injected here */}
|
||||
{children}
|
||||
<GlobalNotification />
|
||||
<div id="modal" className="container"></div>
|
||||
</div>
|
||||
<Footer activeRoute={activeRoute} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
export default PRApp;
|
||||
export default AppBase(PRApp);
|
||||
|
@ -31,74 +31,116 @@ import { AuthPrizeRoleRedirect } from './portfolioreview/components/pr_routes/pr
|
||||
const ROUTES = {
|
||||
sluice: (
|
||||
<Route path='/' component={SPApp}>
|
||||
<IndexRoute component={SPLanding} />
|
||||
<IndexRoute
|
||||
component={SPLanding}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='login'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SPLoginContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SPLoginContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='logout'
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)}/>
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='signup'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SPSignupContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SPSignupContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='password_reset'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SPSettingsContainer)}/>
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SPSettingsContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='register_piece'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SPRegisterPiece)}
|
||||
headerTitle='+ NEW WORK'/>
|
||||
headerTitle='+ NEW WORK'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='collection'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SPPieceList)}
|
||||
headerTitle='COLLECTION'/>
|
||||
<Route path='pieces/:pieceId' component={SluicePieceContainer} />
|
||||
<Route path='editions/:editionId' component={EditionContainer} />
|
||||
<Route path='coa_verify' component={CoaVerifyContainer} />
|
||||
<Route path='*' component={ErrorNotFoundPage} />
|
||||
headerTitle='COLLECTION'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='pieces/:pieceId'
|
||||
component={SluicePieceContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='editions/:editionId'
|
||||
component={EditionContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='coa_verify'
|
||||
component={CoaVerifyContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='*'
|
||||
component={ErrorNotFoundPage}
|
||||
hideFooter />
|
||||
</Route>
|
||||
),
|
||||
portfolioreview: (
|
||||
<Route path='/' component={PRApp}>
|
||||
<IndexRoute component={ProxyHandler(AuthPrizeRoleRedirect({ to: '/collection', when: ['is_admin', 'is_judge', 'is_jury'] }))(PRLanding)} />
|
||||
<IndexRoute
|
||||
component={ProxyHandler(AuthPrizeRoleRedirect({ to: '/collection', when: ['is_admin', 'is_judge', 'is_jury'] }))(PRLanding)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='register_piece'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(PRRegisterPiece)}/>
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(PRRegisterPiece)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='collection'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SPPieceList)}
|
||||
headerTitle='SUBMISSIONS'/>
|
||||
headerTitle='SUBMISSIONS'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='login'
|
||||
component={ProxyHandler(
|
||||
AuthPrizeRoleRedirect({ to: '/collection', when: ['is_admin', 'is_judge', 'is_jury'] }),
|
||||
AuthRedirect({to: '/register_piece', when: 'loggedIn'})
|
||||
)(SPLoginContainer)} />
|
||||
)(SPLoginContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='logout'
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='signup'
|
||||
component={ProxyHandler(
|
||||
AuthPrizeRoleRedirect({ to: '/collection', when: ['is_admin', 'is_judge', 'is_jury'] }),
|
||||
AuthRedirect({to: '/register_piece', when: 'loggedIn'})
|
||||
)(SPSignupContainer)} />
|
||||
)(SPSignupContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='password_reset'
|
||||
component={ProxyHandler(
|
||||
AuthPrizeRoleRedirect({ to: '/collection', when: ['is_admin', 'is_judge', 'is_jury'] }),
|
||||
AuthRedirect({to: '/register_piece', when: 'loggedIn'})
|
||||
)(PasswordResetContainer)} />
|
||||
)(PasswordResetContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SPSettingsContainer)}/>
|
||||
<Route path='pieces/:pieceId' component={SPPieceContainer} />
|
||||
<Route path='editions/:editionId' component={EditionContainer} />
|
||||
<Route path='coa_verify' component={CoaVerifyContainer} />
|
||||
<Route path='*' component={ErrorNotFoundPage} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SPSettingsContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='pieces/:pieceId'
|
||||
component={SPPieceContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='editions/:editionId'
|
||||
component={EditionContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='coa_verify'
|
||||
component={CoaVerifyContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='*'
|
||||
component={ErrorNotFoundPage}
|
||||
hideFooter />
|
||||
</Route>
|
||||
)
|
||||
};
|
||||
|
@ -1,50 +1,49 @@
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import classNames from 'classnames';
|
||||
|
||||
import Hero from './components/prize_hero';
|
||||
import Header from '../../../header';
|
||||
|
||||
import AppBase from '../../../app_base';
|
||||
import Footer from '../../../footer';
|
||||
import GlobalNotification from '../../../global_notification';
|
||||
import Header from '../../../header';
|
||||
|
||||
import { getSubdomain } from '../../../../utils/general_utils';
|
||||
|
||||
|
||||
let PrizeApp = React.createClass({
|
||||
propTypes: {
|
||||
children: React.PropTypes.oneOfType([
|
||||
React.PropTypes.arrayOf(React.PropTypes.element),
|
||||
React.PropTypes.element
|
||||
]),
|
||||
history: React.PropTypes.object,
|
||||
routes: React.PropTypes.arrayOf(React.PropTypes.object)
|
||||
activeRoute: React.PropTypes.object.isRequired,
|
||||
children: React.PropTypes.element.isRequired,
|
||||
history: React.PropTypes.object.isRequired,
|
||||
routes: React.PropTypes.arrayOf(React.PropTypes.object).isRequired
|
||||
},
|
||||
|
||||
render() {
|
||||
const { history, routes } = this.props;
|
||||
const { activeRoute, children, history, routes } = this.props;
|
||||
const subdomain = getSubdomain();
|
||||
const path = activeRoute && activeRoute.path;
|
||||
|
||||
let header = null;
|
||||
let subdomain = getSubdomain();
|
||||
|
||||
// The second element of routes is always the active component object, where we can
|
||||
// extract the path.
|
||||
let path = routes[1] ? routes[1].path : null;
|
||||
|
||||
// if the path of the current activeRoute is not defined, then this is the IndexRoute
|
||||
if (!path || history.isActive('/login') || history.isActive('/signup')) {
|
||||
header = <Hero />;
|
||||
header = (<Hero />);
|
||||
} else {
|
||||
header = <Header routes={routes}/>;
|
||||
header = (<Header routes={routes} />);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={'container ascribe-prize-app client--' + subdomain}>
|
||||
<div className={classNames('ascribe-prize-app', `route--${(path ? path.split('/')[0] : 'landing')}`)}>
|
||||
{header}
|
||||
{this.props.children}
|
||||
<GlobalNotification />
|
||||
<div id="modal" className="container"></div>
|
||||
<Footer />
|
||||
<div className="container ascribe-body">
|
||||
{/* Routes are injected here */}
|
||||
{children}
|
||||
</div>
|
||||
<Footer activeRoute={activeRoute} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
export default PrizeApp;
|
||||
export default AppBase(PrizeApp);
|
||||
|
@ -36,7 +36,7 @@ let Vivi23Landing = React.createClass({
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="container ascribe-form-wrapper vivi23-landing">
|
||||
<div className="ascribe-form-wrapper vivi23-landing">
|
||||
<div className="row">
|
||||
<div className="col-xs-12">
|
||||
<div className="row vivi23-landing--header">
|
||||
|
@ -57,7 +57,7 @@ let CylandLanding = React.createClass({
|
||||
setDocumentTitle('CYLAND MediaArtLab');
|
||||
|
||||
return (
|
||||
<div className="container ascribe-form-wrapper cyland-landing">
|
||||
<div className="ascribe-form-wrapper cyland-landing">
|
||||
<div className="row">
|
||||
<div className="col-xs-12">
|
||||
<div className="row" style={{border: '1px solid #CCC', padding: '2em'}}>
|
||||
|
@ -1,57 +1,51 @@
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import Header from '../../header';
|
||||
import Footer from '../../footer';
|
||||
|
||||
import GlobalNotification from '../../global_notification';
|
||||
|
||||
import classNames from 'classnames';
|
||||
|
||||
import AppBase from '../../app_base';
|
||||
import Footer from '../../footer';
|
||||
import Header from '../../header';
|
||||
|
||||
import { getSubdomain } from '../../../utils/general_utils';
|
||||
|
||||
|
||||
let WalletApp = React.createClass({
|
||||
propTypes: {
|
||||
children: React.PropTypes.oneOfType([
|
||||
React.PropTypes.arrayOf(React.PropTypes.element),
|
||||
React.PropTypes.element
|
||||
]),
|
||||
history: React.PropTypes.object,
|
||||
routes: React.PropTypes.arrayOf(React.PropTypes.object)
|
||||
activeRoute: React.PropTypes.object.isRequired,
|
||||
children: React.PropTypes.element.isRequired,
|
||||
history: React.PropTypes.object.isRequired,
|
||||
routes: React.PropTypes.arrayOf(React.PropTypes.object).isRequired
|
||||
},
|
||||
|
||||
render() {
|
||||
const { activeRoute, children, history, routes } = this.props;
|
||||
const subdomain = getSubdomain();
|
||||
const path = activeRoute && activeRoute.path;
|
||||
|
||||
let header = null;
|
||||
let subdomain = getSubdomain();
|
||||
const { history, routes, children } = this.props;
|
||||
|
||||
// The second element of routes is always the active component object, where we can
|
||||
// extract the path.
|
||||
let path = routes[1] ? routes[1].path : null;
|
||||
|
||||
// if the path of the current activeRoute is not defined, then this is the IndexRoute
|
||||
if ((!path || history.isActive('/login') || history.isActive('/signup') || history.isActive('/contract_notifications'))
|
||||
&& (['cyland', 'ikonotv', 'lumenus', '23vivi']).indexOf(subdomain) > -1) {
|
||||
header = (<div className="hero"/>);
|
||||
if ((!path || history.isActive('/login') || history.isActive('/signup') ||
|
||||
history.isActive('/contract_notifications')) &&
|
||||
(['cyland', 'ikonotv', 'lumenus', '23vivi']).includes(subdomain)) {
|
||||
header = (<div className="hero" />);
|
||||
} else {
|
||||
header = <Header routes={routes} />;
|
||||
header = (<Header routes={routes} />);
|
||||
}
|
||||
|
||||
// In react-router 1.0, Routes have no 'name' property anymore. To keep functionality however,
|
||||
// we split the path by the first occurring slash and take the first splitter.
|
||||
return (
|
||||
<div className={classNames('ascribe-wallet-app', 'route--' + (path ? path.split('/')[0] : 'landing'))}>
|
||||
<div className='container'>
|
||||
{header}
|
||||
<div className={classNames('ascribe-wallet-app', `route--${(path ? path.split('/')[0] : 'landing')}`)}>
|
||||
{header}
|
||||
<div className="container ascribe-body">
|
||||
{/* Routes are injected here */}
|
||||
{children}
|
||||
<GlobalNotification />
|
||||
<div id="modal" className="container"></div>
|
||||
<Footer />
|
||||
</div>
|
||||
<Footer activeRoute={activeRoute} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
export default WalletApp;
|
||||
export default AppBase(WalletApp);
|
||||
|
@ -48,193 +48,302 @@ import WalletApp from './wallet_app';
|
||||
let ROUTES = {
|
||||
'cyland': (
|
||||
<Route path='/' component={WalletApp}>
|
||||
<IndexRoute component={CylandLanding} />
|
||||
<IndexRoute
|
||||
component={CylandLanding}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='login'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LoginContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LoginContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='logout'
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='signup'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SignupContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SignupContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='password_reset'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SettingsContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SettingsContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='contract_settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(ContractSettings)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(ContractSettings)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='register_piece'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(CylandRegisterPiece)}
|
||||
headerTitle='+ NEW WORK'
|
||||
aclName='acl_wallet_submit' />
|
||||
aclName='acl_wallet_submit'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='collection'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(CylandPieceList)}
|
||||
headerTitle='COLLECTION'
|
||||
disableOn='noPieces' />
|
||||
<Route path='editions/:editionId' component={EditionContainer} />
|
||||
<Route path='coa_verify' component={CoaVerifyContainer} />
|
||||
<Route path='pieces/:pieceId' component={CylandPieceContainer} />
|
||||
<Route path='*' component={ErrorNotFoundPage} />
|
||||
disableOn='noPieces'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='editions/:editionId'
|
||||
component={EditionContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='coa_verify'
|
||||
component={CoaVerifyContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='pieces/:pieceId'
|
||||
component={CylandPieceContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='*'
|
||||
component={ErrorNotFoundPage}
|
||||
hideFooter />
|
||||
</Route>
|
||||
),
|
||||
'cc': (
|
||||
<Route path='/' component={WalletApp}>
|
||||
<Route
|
||||
path='login'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LoginContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LoginContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='logout'
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='signup'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SignupContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SignupContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='password_reset'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SettingsContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SettingsContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='contract_settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(ContractSettings)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(ContractSettings)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='register_piece'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(CCRegisterPiece)}
|
||||
headerTitle='+ NEW WORK' />
|
||||
headerTitle='+ NEW WORK'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='collection'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(PieceList)}
|
||||
headerTitle='COLLECTION'
|
||||
disableOn='noPieces' />
|
||||
<Route path='pieces/:pieceId' component={PieceContainer} />
|
||||
<Route path='editions/:editionId' component={EditionContainer} />
|
||||
<Route path='coa_verify' component={CoaVerifyContainer} />
|
||||
<Route path='*' component={ErrorNotFoundPage} />
|
||||
disableOn='noPieces'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='pieces/:pieceId'
|
||||
component={PieceContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='editions/:editionId'
|
||||
component={EditionContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='coa_verify'
|
||||
component={CoaVerifyContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='*'
|
||||
component={ErrorNotFoundPage}
|
||||
hideFooter />
|
||||
</Route>
|
||||
),
|
||||
'ikonotv': (
|
||||
<Route path='/' component={WalletApp}>
|
||||
<IndexRoute component={IkonotvLanding} />
|
||||
<IndexRoute
|
||||
component={IkonotvLanding}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='login'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LoginContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LoginContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='logout'
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='signup'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SignupContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SignupContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='password_reset'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SettingsContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SettingsContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='contract_settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(ContractSettings)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(ContractSettings)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='request_loan'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SendContractAgreementForm)}
|
||||
headerTitle='SEND NEW CONTRACT'
|
||||
aclName='acl_create_contractagreement' />
|
||||
aclName='acl_create_contractagreement'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='register_piece'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(IkonotvRegisterPiece)}
|
||||
headerTitle='+ NEW WORK'
|
||||
aclName='acl_wallet_submit' />
|
||||
aclName='acl_wallet_submit'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='collection'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(IkonotvPieceList)}
|
||||
headerTitle='COLLECTION'
|
||||
disableOn='noPieces' />
|
||||
disableOn='noPieces'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='contract_notifications'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(IkonotvContractNotifications)} />
|
||||
<Route path='pieces/:pieceId' component={IkonotvPieceContainer} />
|
||||
<Route path='editions/:editionId' component={EditionContainer} />
|
||||
<Route path='coa_verify' component={CoaVerifyContainer} />
|
||||
<Route path='*' component={ErrorNotFoundPage} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(IkonotvContractNotifications)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='pieces/:pieceId'
|
||||
component={IkonotvPieceContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='editions/:editionId'
|
||||
component={EditionContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='coa_verify'
|
||||
component={CoaVerifyContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='*'
|
||||
component={ErrorNotFoundPage}
|
||||
hideFooter />
|
||||
</Route>
|
||||
),
|
||||
'lumenus': (
|
||||
<Route path='/' component={WalletApp}>
|
||||
<IndexRoute component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LumenusLanding)} />
|
||||
<IndexRoute
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LumenusLanding)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='login'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LoginContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LoginContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='logout'
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='signup'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SignupContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SignupContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='password_reset'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SettingsContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SettingsContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='contract_settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(ContractSettings)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(ContractSettings)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='register_piece'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(MarketRegisterPiece)}
|
||||
headerTitle='+ NEW WORK'
|
||||
aclName='acl_wallet_submit' />
|
||||
aclName='acl_wallet_submit'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='collection'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(MarketPieceList)}
|
||||
headerTitle='COLLECTION'
|
||||
disableOn='noPieces' />
|
||||
<Route path='pieces/:pieceId' component={MarketPieceContainer} />
|
||||
<Route path='editions/:editionId' component={MarketEditionContainer} />
|
||||
<Route path='coa_verify' component={CoaVerifyContainer} />
|
||||
<Route path='*' component={ErrorNotFoundPage} />
|
||||
disableOn='noPieces'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='pieces/:pieceId'
|
||||
component={MarketPieceContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='editions/:editionId'
|
||||
component={MarketEditionContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='coa_verify'
|
||||
component={CoaVerifyContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='*'
|
||||
component={ErrorNotFoundPage}
|
||||
hideFooter />
|
||||
</Route>
|
||||
),
|
||||
'23vivi': (
|
||||
<Route path='/' component={WalletApp}>
|
||||
<IndexRoute component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(Vivi23Landing)} />
|
||||
<IndexRoute component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(Vivi23Landing)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='login'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LoginContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LoginContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='logout'
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/', when: 'loggedOut'}))(LogoutContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='signup'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SignupContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(SignupContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='password_reset'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SettingsContainer)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SettingsContainer)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='contract_settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(ContractSettings)} />
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(ContractSettings)}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='register_piece'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(MarketRegisterPiece)}
|
||||
headerTitle='+ NEW WORK'
|
||||
aclName='acl_wallet_submit' />
|
||||
aclName='acl_wallet_submit'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='collection'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(Vivi23PieceList)}
|
||||
headerTitle='COLLECTION'
|
||||
disableOn='noPieces' />
|
||||
<Route path='pieces/:pieceId' component={MarketPieceContainer} />
|
||||
<Route path='editions/:editionId' component={MarketEditionContainer} />
|
||||
<Route path='coa_verify' component={CoaVerifyContainer} />
|
||||
<Route path='*' component={ErrorNotFoundPage} />
|
||||
disableOn='noPieces'
|
||||
hideFooter />
|
||||
<Route
|
||||
path='pieces/:pieceId'
|
||||
component={MarketPieceContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='editions/:editionId'
|
||||
component={MarketEditionContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='coa_verify'
|
||||
component={CoaVerifyContainer}
|
||||
hideFooter />
|
||||
<Route
|
||||
path='*'
|
||||
component={ErrorNotFoundPage}
|
||||
hideFooter />
|
||||
</Route>
|
||||
)
|
||||
};
|
||||
|
@ -73,6 +73,8 @@ const constants = {
|
||||
'IVARO', 'SIAE', 'JASPAR-SPDA', 'AKKA/LAA', 'LATGA-A', 'SOMAAP', 'ARTEGESTION', 'CARIER', 'BONO', 'APSAV',
|
||||
'SPA', 'GESTOR', 'VISaRTA', 'RAO', 'LITA', 'DALRO', 'VeGaP', 'BUS', 'ProLitteris', 'AGADU', 'AUTORARTE', 'BUBEDRA', 'BBDA', 'BCDA', 'BURIDA', 'ADAVIS', 'BSDA'],
|
||||
|
||||
'locationThreshold': 10,
|
||||
|
||||
'searchThreshold': 500,
|
||||
|
||||
'supportedThumbnailFileFormats': [
|
||||
|
@ -7,8 +7,12 @@ import AppConstants from './constants/application_constants';
|
||||
|
||||
|
||||
// Remove the trailing slash if present
|
||||
let baseUrl = AppConstants.baseUrl.replace(/\/$/, '');
|
||||
const baseUrl = AppConstants.baseUrl.replace(/\/$/, '');
|
||||
|
||||
export default useBasename(useQueries(createBrowserHistory))({
|
||||
const history = useBasename(useQueries(createBrowserHistory))({
|
||||
basename: baseUrl
|
||||
});
|
||||
|
||||
history.locationQueue = [];
|
||||
|
||||
export default history;
|
||||
|
10
js/routes.js
10
js/routes.js
@ -6,7 +6,7 @@ import { Route } from 'react-router';
|
||||
import getPrizeRoutes from './components/whitelabel/prize/prize_routes';
|
||||
import getWalletRoutes from './components/whitelabel/wallet/wallet_routes';
|
||||
|
||||
import App from './components/ascribe_app';
|
||||
import AscribeApp from './components/ascribe_app';
|
||||
|
||||
import PieceList from './components/piece_list';
|
||||
import PieceContainer from './components/ascribe_detail/piece_container';
|
||||
@ -29,14 +29,14 @@ import { ProxyHandler, AuthRedirect } from './components/ascribe_routes/proxy_ha
|
||||
|
||||
|
||||
const COMMON_ROUTES = (
|
||||
<Route path='/' component={App}>
|
||||
<Route path='/' component={AscribeApp}>
|
||||
<Route
|
||||
path='login'
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(LoginContainer)} />
|
||||
<Route
|
||||
path='register_piece'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(RegisterPiece)}
|
||||
headerTitle='+ NEW WORK'/>
|
||||
headerTitle='+ NEW WORK' />
|
||||
<Route
|
||||
path='collection'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(PieceList)}
|
||||
@ -55,10 +55,10 @@ const COMMON_ROUTES = (
|
||||
component={ProxyHandler(AuthRedirect({to: '/collection', when: 'loggedIn'}))(PasswordResetContainer)} />
|
||||
<Route
|
||||
path='settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SettingsContainer)}/>
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(SettingsContainer)} />
|
||||
<Route
|
||||
path='contract_settings'
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(ContractSettings)}/>
|
||||
component={ProxyHandler(AuthRedirect({to: '/login', when: 'loggedOut'}))(ContractSettings)} />
|
||||
<Route path='coa_verify' component={CoaVerifyContainer} />
|
||||
<Route path='*' component={ErrorNotFoundPage} />
|
||||
</Route>
|
||||
|
@ -13,8 +13,10 @@
|
||||
"build": "gulp build --production",
|
||||
"start": "node server.js",
|
||||
"test": "npm run sauce-test",
|
||||
|
||||
"sauce-test": "mocha ./test/integration/tests/",
|
||||
"tunnel": "node ./test/integration/tunnel.js",
|
||||
|
||||
"vi-clean": "rm -rf ./gemini-report",
|
||||
"vi-phantom": "phantomjs --webdriver=4444",
|
||||
"vi-update": "gemini update -c ./test/gemini/.gemini.yml",
|
||||
|
62
phantomjs/launch_app_and_login.js
Normal file
62
phantomjs/launch_app_and_login.js
Normal file
@ -0,0 +1,62 @@
|
||||
'use strict';
|
||||
|
||||
var liveEnv = 'https://www.ascribe.io/app/login';
|
||||
// Note that if you are trying to access staging, you will need to use
|
||||
// the --ignore-ssl-errors=true flag on phantomjs
|
||||
var stagingEnv = 'https://www.ascribe.ninja/app/login';
|
||||
var localEnv = 'http://localhost.com:3000/login';
|
||||
|
||||
var page = require('webpage').create();
|
||||
page.open(localEnv, function(status) {
|
||||
var attemptedToLogIn;
|
||||
var loginCheckInterval;
|
||||
|
||||
console.log('Status: ' + status);
|
||||
|
||||
if (status === 'success') {
|
||||
console.log('Attempting to log in...');
|
||||
|
||||
attemptedToLogIn = page.evaluate(function () {
|
||||
try {
|
||||
var inputForm = document.querySelector('.ascribe-login-wrapper');
|
||||
var email = inputForm.querySelector('input[type=email]');
|
||||
var password = inputForm.querySelector('input[type=password]');
|
||||
var submitBtn = inputForm.querySelector('button[type=submit]');
|
||||
|
||||
email.value = 'dimi@mailinator.com';
|
||||
password.value = '0000000000';
|
||||
submitBtn.click();
|
||||
|
||||
return true;
|
||||
} catch (ex) {
|
||||
console.log('Error while trying to find login elements, not logging in.');
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if (attemptedToLogIn) {
|
||||
loginCheckInterval = setInterval(function () {
|
||||
var loggedIn = page.evaluate(function () {
|
||||
// When they log in, they are taken to the collections page.
|
||||
// When the piece list is loaded, the accordion list is either available or
|
||||
// shows a placeholder, so let's check for these elements to determine
|
||||
// when login is finished
|
||||
return !!(document.querySelector('.ascribe-accordion-list:not(.ascribe-loading-position)') ||
|
||||
document.querySelector('.ascribe-accordion-list-placeholder'));
|
||||
});
|
||||
|
||||
if (loggedIn) {
|
||||
clearInterval(loginCheckInterval);
|
||||
console.log('Successfully logged in.');
|
||||
}
|
||||
}, 1000);
|
||||
} else {
|
||||
console.log('Something happened while trying to log in, aborting...');
|
||||
phantom.exit();
|
||||
}
|
||||
|
||||
} else {
|
||||
console.log('Failed to load page, exiing...');
|
||||
phantom.exit();
|
||||
}
|
||||
});
|
@ -1,9 +1,10 @@
|
||||
@import 'simple_prize/simple_prize_variables';
|
||||
@import 'simple_prize/simple_prize_custom_style';
|
||||
@import 'sluice/sluice_custom_style';
|
||||
@import 'portfolioreview/portfolioreview_custom_style';
|
||||
|
||||
.ascribe-prize-app {
|
||||
border-radius: 0;
|
||||
min-height: 100vh;
|
||||
padding-top: 70px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
@ -2,7 +2,6 @@ $pr--nav-fg-prim-color: black;
|
||||
$pr--button-color: $pr--nav-fg-prim-color;
|
||||
|
||||
.client--portfolioreview {
|
||||
|
||||
.btn-wide,
|
||||
.btn-default {
|
||||
background-color: $pr--button-color;
|
||||
|
@ -1,7 +1,3 @@
|
||||
$sluice--nav-bg-color: #fcfcfc;
|
||||
$sluice--nav-fg-prim-color: #1E1E1E;
|
||||
$sluice--button-color: $sluice--nav-fg-prim-color;
|
||||
|
||||
.wp {
|
||||
height: 100%;
|
||||
max-width: 90%;
|
||||
@ -37,10 +33,10 @@ $sluice--button-color: $sluice--nav-fg-prim-color;
|
||||
|
||||
|
||||
.rating-container {
|
||||
color: lighten($sluice--nav-fg-prim-color, 80%) !important;
|
||||
color: lighten($simple-prize--nav-fg-prim-color, 80%) !important;
|
||||
.rating-stars {
|
||||
width: 25px;
|
||||
color: $sluice--nav-fg-prim-color !important;
|
||||
color: $simple-prize--nav-fg-prim-color !important;
|
||||
}
|
||||
}
|
||||
|
||||
@ -72,186 +68,3 @@ $sluice--button-color: $sluice--nav-fg-prim-color;
|
||||
padding: 0.7em;
|
||||
|
||||
}
|
||||
|
||||
.client--sluice {
|
||||
.navbar-default {
|
||||
background-color: $sluice--nav-bg-color;
|
||||
box-shadow: none;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.navbar-nav > li > a,
|
||||
.navbar-nav > li > .active a {
|
||||
color: $sluice--nav-fg-prim-color;
|
||||
background-color: $sluice--nav-bg-color;
|
||||
}
|
||||
.navbar-nav > li > a:hover {
|
||||
color: lighten($sluice--nav-fg-prim-color, 40%);
|
||||
}
|
||||
.navbar-nav > .active a,
|
||||
.navbar-nav > .active a:hover,
|
||||
.navbar-nav > .active a:focus {
|
||||
color: $sluice--nav-fg-prim-color;
|
||||
border-bottom-color: $sluice--nav-fg-prim-color;
|
||||
background-color: $sluice--nav-bg-color;
|
||||
}
|
||||
.dropdown-menu > li > a:hover,
|
||||
.dropdown-menu > li > a:focus {
|
||||
color: lighten($sluice--nav-fg-prim-color, 40%);
|
||||
background-color: $sluice--nav-bg-color;
|
||||
}
|
||||
.navbar-nav > .open > a,
|
||||
.navbar-nav > .open > a:hover,
|
||||
.navbar-nav > .open > a:focus,
|
||||
.dropdown-menu > .active > a,
|
||||
.dropdown-menu > .active > a:hover,
|
||||
.dropdown-menu > .active > a:focus {
|
||||
color: lighten($sluice--nav-fg-prim-color, 40%);
|
||||
background-color: $sluice--nav-bg-color;
|
||||
}
|
||||
.dropdown-menu {
|
||||
background-color: $sluice--nav-bg-color;
|
||||
}
|
||||
|
||||
.dropdown-menu > li > a {
|
||||
color: $sluice--nav-fg-prim-color;
|
||||
}
|
||||
|
||||
.navbar-toggle .icon-bar {
|
||||
background-color: $sluice--nav-fg-prim-color;
|
||||
}
|
||||
|
||||
.navbar-toggle:hover,
|
||||
.navbar-toggle:focus {
|
||||
background-color: $sluice--nav-bg-color;
|
||||
}
|
||||
}
|
||||
|
||||
.client--sluice .ascribe-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.client--sluice .icon-ascribe-search{
|
||||
color: $sluice--button-color;
|
||||
}
|
||||
|
||||
.client--sluice .ascribe-piece-list-toolbar .btn-ascribe-add{
|
||||
display: none;
|
||||
}
|
||||
|
||||
// disabled buttons
|
||||
.client--sluice {
|
||||
.btn-default.disabled,
|
||||
.btn-default.disabled:hover,
|
||||
.btn-default.disabled:focus,
|
||||
.btn-default.disabled.focus,
|
||||
.btn-default.disabled:active,
|
||||
.btn-default.disabled.active,
|
||||
.btn-default[disabled],
|
||||
.btn-default[disabled]:hover,
|
||||
.btn-default[disabled]:focus,
|
||||
.btn-default[disabled].focus,
|
||||
.btn-default[disabled]:active,
|
||||
.btn-default[disabled].active,
|
||||
fieldset[disabled] .btn-default,
|
||||
fieldset[disabled] .btn-default:hover,
|
||||
fieldset[disabled] .btn-default:focus,
|
||||
fieldset[disabled] .btn-default.focus,
|
||||
fieldset[disabled] .btn-default:active,
|
||||
fieldset[disabled] .btn-default.active {
|
||||
background-color: darken($sluice--button-color, 20%);
|
||||
border-color: darken($sluice--button-color, 20%);
|
||||
}
|
||||
}
|
||||
|
||||
// buttons!
|
||||
// thought of the day:
|
||||
// "every great atrocity is the result of people just following orders"
|
||||
.client--sluice {
|
||||
.ascribe-piece-list-toolbar-filter-widget button {
|
||||
color: $sluice--button-color !important;
|
||||
background-color: transparent !important;
|
||||
border-color: transparent !important;
|
||||
|
||||
&:hover,
|
||||
&:active {
|
||||
background-color: $sluice--button-color !important;
|
||||
border-color: $sluice--button-color !important;
|
||||
color: white !important;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-wide,
|
||||
.btn-default {
|
||||
background-color: $sluice--button-color;
|
||||
border-color: $sluice--button-color;
|
||||
|
||||
&:hover,
|
||||
&:active,
|
||||
&:focus,
|
||||
&:active:hover,
|
||||
&:active:focus,
|
||||
&:active.focus,
|
||||
&.active:hover,
|
||||
&.active:focus,
|
||||
&.active.focus {
|
||||
background-color: lighten($sluice--button-color, 20%);
|
||||
border-color: lighten($sluice--button-color, 20%);
|
||||
}
|
||||
}
|
||||
|
||||
.open > .btn-default.dropdown-toggle:hover,
|
||||
.open > .btn-default.dropdown-toggle:focus,
|
||||
.open > .btn-default.dropdown-toggle.focus,
|
||||
.open > .btn-default.dropdown-toggle.dropdown-toggle {
|
||||
background-color: darken($sluice--button-color, 20%);
|
||||
border-color: darken($sluice--button-color, 20%);
|
||||
}
|
||||
|
||||
.pager li > a, .pager li > span {
|
||||
background-color: $sluice--button-color;
|
||||
border-color: $sluice--button-color;
|
||||
}
|
||||
|
||||
.pager li.disabled > a,
|
||||
.pager li.disabled > span {
|
||||
background-color: $sluice--button-color !important;
|
||||
border-color: $sluice--button-color;
|
||||
}
|
||||
}
|
||||
|
||||
// spinner!
|
||||
.client--sluice {
|
||||
.btn-spinner {
|
||||
color: $sluice--button-color;
|
||||
}
|
||||
.spinner-circle {
|
||||
border-color: $sluice--button-color;
|
||||
}
|
||||
.spinner-inner {
|
||||
color: $sluice--button-color;
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
// intercom stuff
|
||||
.client--sluice {
|
||||
#intercom-container .intercom-launcher-button {
|
||||
background-color: $sluice--button-color !important;;
|
||||
border-color: $sluice--button-color !important;;
|
||||
}
|
||||
}
|
||||
|
||||
// notifications
|
||||
.client--sluice .ascribe-global-notification-success {
|
||||
background-color: lighten($sluice--button-color, 50%);
|
||||
}
|
||||
|
||||
// progress bar
|
||||
.client--sluice .ascribe-progress-bar > .progress-bar {
|
||||
background-color: $sluice--button-color;
|
||||
}
|
||||
|
||||
.client--sluice .acl-information-dropdown-list .title {
|
||||
color: $sluice--button-color;
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
$simple-prize--nav-bg-color: #fcfcfc;
|
||||
$simple-prize--nav-fg-prim-color: #1E1E1E;
|
||||
$simple-prize--button-color: $simple-prize--nav-fg-prim-color;
|
182
sass/whitelabel/prize/sluice/sluice_custom_style.scss
Normal file
182
sass/whitelabel/prize/sluice/sluice_custom_style.scss
Normal file
@ -0,0 +1,182 @@
|
||||
.client--sluice {
|
||||
.navbar-default {
|
||||
background-color: $simple-prize--nav-bg-color;
|
||||
box-shadow: none;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.navbar-nav > li > a,
|
||||
.navbar-nav > li > .active a {
|
||||
color: $simple-prize--nav-fg-prim-color;
|
||||
background-color: $simple-prize--nav-bg-color;
|
||||
}
|
||||
.navbar-nav > li > a:hover {
|
||||
color: lighten($simple-prize--nav-fg-prim-color, 40%);
|
||||
}
|
||||
.navbar-nav > .active a,
|
||||
.navbar-nav > .active a:hover,
|
||||
.navbar-nav > .active a:focus {
|
||||
color: $simple-prize--nav-fg-prim-color;
|
||||
border-bottom-color: $simple-prize--nav-fg-prim-color;
|
||||
background-color: $simple-prize--nav-bg-color;
|
||||
}
|
||||
.dropdown-menu > li > a:hover,
|
||||
.dropdown-menu > li > a:focus {
|
||||
color: lighten($simple-prize--nav-fg-prim-color, 40%);
|
||||
background-color: $simple-prize--nav-bg-color;
|
||||
}
|
||||
.navbar-nav > .open > a,
|
||||
.navbar-nav > .open > a:hover,
|
||||
.navbar-nav > .open > a:focus,
|
||||
.dropdown-menu > .active > a,
|
||||
.dropdown-menu > .active > a:hover,
|
||||
.dropdown-menu > .active > a:focus {
|
||||
color: lighten($simple-prize--nav-fg-prim-color, 40%);
|
||||
background-color: $simple-prize--nav-bg-color;
|
||||
}
|
||||
.dropdown-menu {
|
||||
background-color: $simple-prize--nav-bg-color;
|
||||
}
|
||||
|
||||
.dropdown-menu > li > a {
|
||||
color: $simple-prize--nav-fg-prim-color;
|
||||
}
|
||||
|
||||
.navbar-toggle .icon-bar {
|
||||
background-color: $simple-prize--nav-fg-prim-color;
|
||||
}
|
||||
|
||||
.navbar-toggle:hover,
|
||||
.navbar-toggle:focus {
|
||||
background-color: $simple-prize--nav-bg-color;
|
||||
}
|
||||
}
|
||||
|
||||
.client--sluice .ascribe-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.client--sluice .icon-ascribe-search{
|
||||
color: $simple-prize--button-color;
|
||||
}
|
||||
|
||||
.client--sluice .ascribe-piece-list-toolbar .btn-ascribe-add{
|
||||
display: none;
|
||||
}
|
||||
|
||||
// disabled buttons
|
||||
.client--sluice {
|
||||
.btn-default.disabled,
|
||||
.btn-default.disabled:hover,
|
||||
.btn-default.disabled:focus,
|
||||
.btn-default.disabled.focus,
|
||||
.btn-default.disabled:active,
|
||||
.btn-default.disabled.active,
|
||||
.btn-default[disabled],
|
||||
.btn-default[disabled]:hover,
|
||||
.btn-default[disabled]:focus,
|
||||
.btn-default[disabled].focus,
|
||||
.btn-default[disabled]:active,
|
||||
.btn-default[disabled].active,
|
||||
fieldset[disabled] .btn-default,
|
||||
fieldset[disabled] .btn-default:hover,
|
||||
fieldset[disabled] .btn-default:focus,
|
||||
fieldset[disabled] .btn-default.focus,
|
||||
fieldset[disabled] .btn-default:active,
|
||||
fieldset[disabled] .btn-default.active {
|
||||
background-color: darken($simple-prize--button-color, 20%);
|
||||
border-color: darken($simple-prize--button-color, 20%);
|
||||
}
|
||||
}
|
||||
|
||||
// buttons!
|
||||
// thought of the day:
|
||||
// "every great atrocity is the result of people just following orders"
|
||||
.client--sluice {
|
||||
.ascribe-piece-list-toolbar-filter-widget button {
|
||||
color: $simple-prize--button-color !important;
|
||||
background-color: transparent !important;
|
||||
border-color: transparent !important;
|
||||
|
||||
&:hover,
|
||||
&:active {
|
||||
background-color: $simple-prize--button-color !important;
|
||||
border-color: $simple-prize--button-color !important;
|
||||
color: white !important;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-wide,
|
||||
.btn-default {
|
||||
background-color: $simple-prize--button-color;
|
||||
border-color: $simple-prize--button-color;
|
||||
|
||||
&:hover,
|
||||
&:active,
|
||||
&:focus,
|
||||
&:active:hover,
|
||||
&:active:focus,
|
||||
&:active.focus,
|
||||
&.active:hover,
|
||||
&.active:focus,
|
||||
&.active.focus {
|
||||
background-color: lighten($simple-prize--button-color, 20%);
|
||||
border-color: lighten($simple-prize--button-color, 20%);
|
||||
}
|
||||
}
|
||||
|
||||
.open > .btn-default.dropdown-toggle:hover,
|
||||
.open > .btn-default.dropdown-toggle:focus,
|
||||
.open > .btn-default.dropdown-toggle.focus,
|
||||
.open > .btn-default.dropdown-toggle.dropdown-toggle {
|
||||
background-color: darken($simple-prize--button-color, 20%);
|
||||
border-color: darken($simple-prize--button-color, 20%);
|
||||
}
|
||||
|
||||
.pager li > a, .pager li > span {
|
||||
background-color: $simple-prize--button-color;
|
||||
border-color: $simple-prize--button-color;
|
||||
}
|
||||
|
||||
.pager li.disabled > a,
|
||||
.pager li.disabled > span {
|
||||
background-color: $simple-prize--button-color !important;
|
||||
border-color: $simple-prize--button-color;
|
||||
}
|
||||
}
|
||||
|
||||
// spinner!
|
||||
.client--sluice {
|
||||
.btn-spinner {
|
||||
color: $simple-prize--button-color;
|
||||
}
|
||||
.spinner-circle {
|
||||
border-color: $simple-prize--button-color;
|
||||
}
|
||||
.spinner-inner {
|
||||
color: $simple-prize--button-color;
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
// intercom stuff
|
||||
.client--sluice {
|
||||
#intercom-container .intercom-launcher-button {
|
||||
background-color: $simple-prize--button-color !important;;
|
||||
border-color: $simple-prize--button-color !important;;
|
||||
}
|
||||
}
|
||||
|
||||
// notifications
|
||||
.client--sluice .ascribe-global-notification-success {
|
||||
background-color: lighten($simple-prize--button-color, 50%);
|
||||
}
|
||||
|
||||
// progress bar
|
||||
.client--sluice .ascribe-progress-bar > .progress-bar {
|
||||
background-color: $simple-prize--button-color;
|
||||
}
|
||||
|
||||
.client--sluice .acl-information-dropdown-list .title {
|
||||
color: $simple-prize--button-color;
|
||||
}
|
@ -13,6 +13,7 @@ $vivi23--highlight-color: #de2600;
|
||||
/** Landing page **/
|
||||
.route--landing {
|
||||
display: table;
|
||||
min-height: 100vh;
|
||||
|
||||
> .container {
|
||||
display: table-cell;
|
||||
@ -20,8 +21,13 @@ $vivi23--highlight-color: #de2600;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.hero {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.vivi23-landing {
|
||||
font-weight: normal;
|
||||
padding: 0 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@ -247,10 +253,6 @@ $vivi23--highlight-color: #de2600;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ascribe-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ascribe-accordion-list-table-toggle:hover {
|
||||
color: $vivi23--fg-color;
|
||||
}
|
||||
|
@ -55,16 +55,11 @@ $cc--button-color: $cc--nav-fg-prim-color;
|
||||
}
|
||||
}
|
||||
|
||||
.client--cc .ascribe-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.client--cc .icon-ascribe-search{
|
||||
.client--cc .icon-ascribe-search {
|
||||
color: $cc--button-color;
|
||||
}
|
||||
|
||||
.client--cc .ascribe-piece-list-toolbar .btn-ascribe-add{
|
||||
.client--cc .ascribe-piece-list-toolbar .btn-ascribe-add {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
@ -56,10 +56,6 @@ $cyland--button-sec-color: #515151;
|
||||
}
|
||||
}
|
||||
|
||||
.client--cyland .ascribe-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.client--cyland .icon-ascribe-search {
|
||||
color: $cyland--button-color;
|
||||
}
|
||||
@ -171,6 +167,7 @@ $cyland--button-sec-color: #515151;
|
||||
.client--cyland {
|
||||
.route--landing {
|
||||
display: table;
|
||||
min-height: 100vh;
|
||||
|
||||
> .container {
|
||||
display: table-cell;
|
||||
@ -178,8 +175,13 @@ $cyland--button-sec-color: #515151;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.hero {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.cyland-landing {
|
||||
font-weight: normal;
|
||||
padding: 0 15px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
@ -108,8 +108,23 @@ $ikono--font: 'Helvetica Neue', 'Helvetica', sans-serif !important;
|
||||
}
|
||||
|
||||
|
||||
.client--ikonotv {
|
||||
.route--landing,
|
||||
.route--login,
|
||||
.route--signup {
|
||||
background-color: $ikono--landing-bg-color;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.route--login,
|
||||
.route--signup {
|
||||
.ascribe-form-bordered {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.client--ikonotv .route--landing {
|
||||
background-color: $ikono--landing-bg-color;
|
||||
animation: color-loop 20s;
|
||||
-o-animation: color-loop 20s infinite;
|
||||
-ms-animation: color-loop 20s infinite;
|
||||
@ -121,11 +136,8 @@ $ikono--font: 'Helvetica Neue', 'Helvetica', sans-serif !important;
|
||||
padding: 5em 1em;
|
||||
}
|
||||
|
||||
|
||||
.client--ikonotv .route--login,
|
||||
.client--ikonotv .route--signup {
|
||||
background-color: $ikono--landing-bg-color;
|
||||
|
||||
.btn-wide {
|
||||
display: block;
|
||||
margin: 50px auto 0;
|
||||
@ -209,27 +221,11 @@ $ikono--font: 'Helvetica Neue', 'Helvetica', sans-serif !important;
|
||||
}
|
||||
|
||||
|
||||
.client--ikonotv {
|
||||
.route--login,
|
||||
.route--signup {
|
||||
.ascribe-form-bordered {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.client--ikonotv .ascribe-login-wrapper {
|
||||
}
|
||||
|
||||
.client--ikonotv .ascribe-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.client--ikonotv .icon-ascribe-search{
|
||||
.client--ikonotv .icon-ascribe-search {
|
||||
color: $ikono--button-color;
|
||||
}
|
||||
|
||||
.client--ikonotv .ascribe-piece-list-toolbar .btn-ascribe-add{
|
||||
.client--ikonotv .ascribe-piece-list-toolbar .btn-ascribe-add {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,6 @@
|
||||
|
||||
.ascribe-wallet-app {
|
||||
border-radius: 0;
|
||||
min-height: 100vh;
|
||||
padding-top: 70px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user