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')}