diff --git a/js/components/ascribe_accordion_list/accordion_list_item_piece.js b/js/components/ascribe_accordion_list/accordion_list_item_piece.js index b7e621b8..d0b16c9f 100644 --- a/js/components/ascribe_accordion_list/accordion_list_item_piece.js +++ b/js/components/ascribe_accordion_list/accordion_list_item_piece.js @@ -26,13 +26,24 @@ let AccordionListItemPiece = React.createClass({ mixins: [Router.Navigation], - getLinkData(){ - return { - to: 'piece', - params: { - pieceId: this.props.piece.id - } - }; + getLinkData() { + + if(this.props.piece && this.props.piece.first_edition) { + return { + to: 'edition', + params: { + editionId: this.props.piece.first_edition.bitcoin_id + } + }; + } else { + return { + to: 'piece', + params: { + pieceId: this.props.piece.id + } + }; + } + }, render() { diff --git a/js/components/ascribe_detail/piece_container.js b/js/components/ascribe_detail/piece_container.js index fe1a6c8a..22986b53 100644 --- a/js/components/ascribe_detail/piece_container.js +++ b/js/components/ascribe_detail/piece_container.js @@ -76,7 +76,27 @@ let PieceContainer = React.createClass({ }, onChange(state) { - this.setState(state); + /* + + ATTENTION: + THIS IS JUST A TEMPORARY USABILITY FIX THAT ESSENTIALLY REMOVES THE LOAN BUTTON + FROM THE PIECE DETAIL PAGE SO THAT USERS DO NOT CONFUSE A PIECE WITH AN EDITION. + + IT SHOULD BE REMOVED AND REPLACED WITH A BETTER SOLUTION ASAP! + + */ + if(state && state.piece && state.piece.acl && typeof state.piece.acl.acl_loan !== 'undefined') { + + let pieceState = mergeOptions({}, state.piece); + pieceState.acl.acl_loan = false; + + this.setState({ + piece: pieceState + }); + + } else { + this.setState(state); + } }, loadPiece() { diff --git a/js/components/ascribe_forms/form.js b/js/components/ascribe_forms/form.js index 54d4f197..d0117251 100644 --- a/js/components/ascribe_forms/form.js +++ b/js/components/ascribe_forms/form.js @@ -39,13 +39,16 @@ let Form = React.createClass({ // You can use the form for inline requests, like the submit click on a button. // For the form to then not display the error on top, you need to enable this option. // It will make use of the GlobalNotification - isInline: React.PropTypes.bool + isInline: React.PropTypes.bool, + + autoComplete: React.PropTypes.string }, getDefaultProps() { return { method: 'post', - buttonSubmitText: 'SAVE' + buttonSubmitText: 'SAVE', + autoComplete: 'off' }; }, @@ -217,6 +220,25 @@ let Form = React.createClass({ }); }, + /** + * All webkit-based browsers are ignoring the attribute autoComplete="off", + * as stated here: http://stackoverflow.com/questions/15738259/disabling-chrome-autofill/15917221#15917221 + * So what we actually have to do is depended on whether or not this.props.autoComplete is set to "on" or "off" + * insert two fake hidden inputs that mock password and username so that chrome/safari is filling those + */ + getFakeAutocompletableInputs() { + if(this.props.autoComplete === 'off') { + return ( + + + + + ); + } else { + return null; + } + }, + render() { let className = 'ascribe-form'; @@ -229,7 +251,8 @@ let Form = React.createClass({ role="form" className={className} onSubmit={this.submit} - autoComplete="on"> + autoComplete={this.props.autoComplete}> + {this.getFakeAutocompletableInputs()} {this.getErrors()} {this.renderChildren()} {this.getButtons()} diff --git a/js/components/ascribe_forms/form_login.js b/js/components/ascribe_forms/form_login.js index a3fd4d33..86a20119 100644 --- a/js/components/ascribe_forms/form_login.js +++ b/js/components/ascribe_forms/form_login.js @@ -101,6 +101,7 @@ let LoginForm = React.createClass({ ref="loginForm" url={ApiUrls.users_login} handleSuccess={this.handleSuccess} + autoComplete="on" buttons={