diff --git a/gulpfile.js b/gulpfile.js index d786c29f..25af23bf 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -184,8 +184,8 @@ function bundle(watch) { .on('error', notify.onError('Error: <%= error.message %>')) .pipe(gulpif(!argv.production, sourcemaps.write())) // writes .map file .on('error', notify.onError('Error: <%= error.message %>')) - //.pipe(gulpif(argv.production, uglify())) - //.on('error', notify.onError('Error: <%= error.message %>')) + .pipe(gulpif(argv.production, uglify())) + .on('error', notify.onError('Error: <%= error.message %>')) .pipe(gulp.dest('./build/js')) .on('error', notify.onError('Error: <%= error.message %>')) .pipe(browserSync.stream()) diff --git a/js/components/ascribe_forms/form.js b/js/components/ascribe_forms/form.js index 7e0d6b42..e051928d 100644 --- a/js/components/ascribe_forms/form.js +++ b/js/components/ascribe_forms/form.js @@ -59,6 +59,7 @@ let Form = React.createClass({ for (let ref in this.refs){ data[this.refs[ref].props.name] = this.refs[ref].state.value; } + console.log(data); if ('getFormData' in this.props){ data = mergeOptionsWithDuplicates(data, this.props.getFormData()); } diff --git a/js/components/ascribe_forms/property_collapsible.js b/js/components/ascribe_forms/property_collapsible.js index d2cd0f95..ba6c0a1e 100644 --- a/js/components/ascribe_forms/property_collapsible.js +++ b/js/components/ascribe_forms/property_collapsible.js @@ -1,6 +1,7 @@ 'use strict'; import React from 'react'; +import ReactAddons from 'react/addons'; import CollapsibleMixin from 'react-bootstrap/lib/CollapsibleMixin'; import OverlayTrigger from 'react-bootstrap/lib/OverlayTrigger'; @@ -39,15 +40,17 @@ let PropertyCollapsile = React.createClass({ }); }, + handleChange(event) { + this.setState({value: event.target.value}); + }, + renderChildren() { if(this.state.show) { - return (
- {this.props.children} -
); - } else { - return null; + return ReactAddons.Children.map(this.props.children, (child) => { + return ReactAddons.addons.cloneWithProps(child, { + onChange: this.handleChange + }); + }); } }, @@ -75,13 +78,18 @@ let PropertyCollapsile = React.createClass({ onClick={this.handleFocus} onFocus={this.handleFocus}> {/* PLEASE LEAVE THE SPACE BETWEEN LABEL and this.props.label */} {this.props.checkboxLabel} - {this.renderChildren()} +
+ {this.renderChildren()} +
); } diff --git a/js/components/ascribe_uploader/react_s3_fine_uploader.js b/js/components/ascribe_uploader/react_s3_fine_uploader.js index e206271a..b9ef09fc 100644 --- a/js/components/ascribe_uploader/react_s3_fine_uploader.js +++ b/js/components/ascribe_uploader/react_s3_fine_uploader.js @@ -2,11 +2,6 @@ import React from 'react/addons'; -import promise from 'es6-promise'; -promise.polyfill(); - -import fetch from 'isomorphic-fetch'; - import { getCookie } from '../../utils/fetch_api_utils'; import { getLangText } from '../../utils/lang_utils'; @@ -96,7 +91,8 @@ var ReactS3FineUploader = React.createClass({ setIsUploadReady: React.PropTypes.func, isReadyForFormSubmission: React.PropTypes.func, areAssetsDownloadable: React.PropTypes.bool, - areAssetsEditable: React.PropTypes.bool + areAssetsEditable: React.PropTypes.bool, + defaultErrorMessage: React.PropTypes.string }, getDefaultProps() { @@ -141,7 +137,8 @@ var ReactS3FineUploader = React.createClass({ } return name; }, - multiple: false + multiple: false, + defaultErrorMessage: 'Unexpected error. Please contact us if this happens repeatedly.' }; }, @@ -188,56 +185,87 @@ var ReactS3FineUploader = React.createClass({ multiple: this.props.multiple, retry: this.props.retry, callbacks: { - onSubmit: this.onSubmit, onComplete: this.onComplete, onCancel: this.onCancel, - onDelete: this.onDelete, onProgress: this.onProgress, - onRetry: this.onRetry, - onAutoRetry: this.onAutoRetry, - onManualRetry: this.onManualRetry, onDeleteComplete: this.onDeleteComplete, - onSessionRequestComplete: this.onSessionRequestComplete + onSessionRequestComplete: this.onSessionRequestComplete, + onError: this.onError } }; }, requestKey(fileId) { + let defer = new fineUploader.Promise(); let filename = this.state.uploader.getName(fileId); - return new Promise((resolve, reject) => { - fetch(this.props.keyRoutine.url, { - method: 'post', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'X-CSRFToken': getCookie('csrftoken') - }, - credentials: 'include', - body: JSON.stringify({ - 'filename': filename, - 'file_class': this.props.keyRoutine.fileClass, - 'piece_id': this.props.keyRoutine.pieceId - }) + + window.fetch(this.props.keyRoutine.url, { + method: 'post', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'X-CSRFToken': getCookie('csrftoken') + }, + credentials: 'include', + body: JSON.stringify({ + 'filename': filename, + 'file_class': this.props.keyRoutine.fileClass, + 'piece_id': this.props.keyRoutine.pieceId }) - .then((res) => { - return res.json(); - }) - .then((res) =>{ - resolve(res.key); - }) - .catch((err) => { - console.error(err); - reject(err); - }); + }) + .then((res) => { + return res.json(); + }) + .then((res) =>{ + defer.success(res.key); + }) + .catch((err) => { + defer.failure(err); }); + + return defer; + }, + + createBlob(file) { + let defer = new fineUploader.Promise(); + window.fetch(this.props.createBlobRoutine.url, { + method: 'post', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'X-CSRFToken': getCookie('csrftoken') + }, + credentials: 'include', + body: JSON.stringify({ + 'filename': file.name, + 'key': file.key, + 'piece_id': this.props.createBlobRoutine.pieceId + }) + }) + .then((res) => { + return res.json(); + }) + .then((res) =>{ + if(res.otherdata) { + file.s3Url = res.otherdata.url_safe; + file.s3UrlSafe = res.otherdata.url_safe; + } else if(res.digitalwork) { + file.s3Url = res.digitalwork.url_safe; + file.s3UrlSafe = res.digitalwork.url_safe; + } else { + throw new Error('Could not find a url to download.'); + } + defer.success(res.key); + }) + .catch((err) => { + defer.failure(err); + console.error(err); + }); + return defer; }, /* FineUploader specific callback function handlers */ - onSubmit() { - console.log('submit'); - }, - onComplete(id) { let files = this.state.filesToUpload; files[id].status = 'upload successful'; @@ -272,57 +300,9 @@ var ReactS3FineUploader = React.createClass({ } }, - createBlob(file) { - let defer = new fineUploader.Promise(); - fetch(this.props.createBlobRoutine.url, { - method: 'post', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'X-CSRFToken': getCookie('csrftoken') - }, - credentials: 'include', - body: JSON.stringify({ - 'filename': file.name, - 'key': file.key, - 'piece_id': this.props.createBlobRoutine.pieceId - }) - }) - .then((res) => { - return res.json(); - }) - .then((res) =>{ - if(res.otherdata) { - file.s3Url = res.otherdata.url_safe; - file.s3UrlSafe = res.otherdata.url_safe; - } else if(res.digitalwork) { - file.s3Url = res.digitalwork.url_safe; - file.s3UrlSafe = res.digitalwork.url_safe; - } else { - throw new Error('Could not find a url to download.'); - } - defer.success(res.key); - }) - .catch((err) => { - console.error(err); - }); - return defer; - }, - - onRetry() { - console.log('retry'); - }, - - onAutoRetry() { - console.log('autoretry'); - }, - - onManualRetry() { - console.log('manualretry'); - }, - - onDelete() { - console.log('delete'); + onError() { + let notification = new GlobalNotificationModel(this.props.defaultErrorMessage, 'danger', 5000); + GlobalNotificationActions.appendGlobalNotification(notification); }, onCancel(id) { diff --git a/js/components/register_piece.js b/js/components/register_piece.js index d581f951..16687eb4 100644 --- a/js/components/register_piece.js +++ b/js/components/register_piece.js @@ -139,6 +139,7 @@ let RegisterPiece = React.createClass( { if (this.props.canSpecifyEditions) { return ( {getLangText('Editions')}