diff --git a/src/AnnotationCreation.js b/src/AnnotationCreation.js index d8c807626c7c8a63d9337e7dfab0e8e9458813b4..4eb7e76798cbf62c26fab98aa2c19940231c6e87 100644 --- a/src/AnnotationCreation.js +++ b/src/AnnotationCreation.js @@ -29,7 +29,7 @@ import DialogContentText from '@material-ui/core/DialogContentText'; import DialogActions from '@material-ui/core/DialogActions'; import TextField from '@material-ui/core/TextField'; import Checkbox from '@material-ui/core/Checkbox'; -import FormControlLabel from "@material-ui/core/FormControlLabel"; +import FormControlLabel from '@material-ui/core/FormControlLabel'; import ClickAwayListener from '@material-ui/core/ClickAwayListener'; import { SketchPicker } from 'react-color'; import { v4 as uuid } from 'uuid'; @@ -61,7 +61,7 @@ class AnnotationCreation extends Component { annoState.image = body.image; } }); - } else if (props.annotation.body.type === 'TextualBody') { + } else if (props.annotation.body.type === 'TextualBody') { annoState.textBody = props.annotation.body.value; } else if (props.annotation.body.type === 'imgBody') { annoState.textBody = props.annotation.body.value; @@ -83,35 +83,35 @@ class AnnotationCreation extends Component { this.state = { activeTool: 'cursor', - textBody: '', closedMode: 'closed', colorPopoverOpen: false, currentColorType: false, fillColor: null, + imgConstrain: false, lineWeightPopoverOpen: false, popoverAnchorEl: null, popoverLineWeightAnchorEl: null, strokeColor: '#00BFFF', strokeWidth: 1, svg: null, + textBody: '', xywh: null, - imgConstrain: false, - imgWidth: { - value: '', - srcValue: '', + imgHeight: { lastSubmittedValue: '', + srcValue: '', validity: 0, - }, - imgHeight: { value: '', - srcValue: '', + }, + imgWidth: { lastSubmittedValue: '', + srcValue: '', validity: 0, + value: '', }, imgUrl: { - value: '', lastSubmittedValue: '', validity: 0, + value: '', }, openAddImgDialog: false, ...annoState, @@ -206,12 +206,12 @@ class AnnotationCreation extends Component { let open = true; const { imgUrl, imgHeight, imgWidth } = this.state; - const expression = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)?/gi; + const expression = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/; const regex = new RegExp(expression); const urlValidity = imgUrl.value.match(regex) ? 1 : 2; const widthValidity = imgWidth.value > 0 ? 1 : 2; const heightValidity = imgHeight.value > 0 ? 1 : 2; - if (urlValidity == 1 && widthValidity == 1 && heightValidity == 1) { + if (urlValidity === 1 && widthValidity === 1 && heightValidity === 1) { open = false; } @@ -220,19 +220,19 @@ class AnnotationCreation extends Component { ...imgUrl, value: imgUrl.value, validity: urlValidity, - lastSubmittedValue: urlValidity == 1 ? imgUrl.value : imgUrl.lastSubmittedValue, + lastSubmittedValue: urlValidity === 1 ? imgUrl.value : imgUrl.lastSubmittedValue, }, imgHeight: { ...imgHeight, value: imgHeight.value, validity: heightValidity, - lastSubmittedValue: heightValidity == 1 ? imgHeight.value : imgHeight.lastSubmittedValue, + lastSubmittedValue: heightValidity === 1 ? imgHeight.value : imgHeight.lastSubmittedValue, }, imgWidth: { ...imgWidth, value: imgWidth.value, validity: widthValidity, - lastSubmittedValue: widthValidity == 1 ? imgWidth.value : imgWidth.lastSubmittedValue, + lastSubmittedValue: widthValidity === 1 ? imgWidth.value : imgWidth.lastSubmittedValue, }, openAddImgDialog: open, }); @@ -286,6 +286,7 @@ class AnnotationCreation extends Component { this.setState({ imgUrl: { ...imgUrl, + validity: 1, value: url, }, imgHeight: { @@ -300,7 +301,13 @@ class AnnotationCreation extends Component { }, }); } catch (e) { - console.error('Error! Dimensions could not be retrieved from image.'); + this.setState({ + imgUrl: { + ...imgUrl, + validity: 2, + value : url, + }, + }); } } @@ -579,35 +586,37 @@ class AnnotationCreation extends Component { </ToggleButton> </Grid> <Dialog open={openAddImgDialog} fullWidth minWidth="20%" onClose={() => this.handleImgDialogChange(false)} aria-labelledby="form-dialog-title"> - <DialogTitle id="form-dialog-title">Insert/Edit Image</DialogTitle> + <DialogTitle id="form-dialog-title"> + <Typography variant="h2">Insert image</Typography> + </DialogTitle> <DialogContent> - <DialogContentText> - Source - </DialogContentText> + <DialogTitle id="form-dialog-subtitle-1" style={{paddingLeft: 0}}> + <Typography variant="MuiTypography-h3">Image source</Typography> + </DialogTitle> <TextField value={imgUrl.value} onChange={e => this.setImgUrl(e.target.value)} onBlur={e => this.getImgDimensions(e.target.value)} error={imgUrl.validity == 2} - helperText={imgUrl.validity == 2 ? "Url Invalid" : ""} + helperText={imgUrl.validity === 2 ? "Invalid URL" : ""} margin="dense" id="source" - label="Image Url" + label="Image URL" type="url" fullWidth /> </DialogContent> <DialogContent> - <DialogContentText> - Dimensions - </DialogContentText> + <DialogTitle id="form-dialog-subtitle-2" style={{paddingLeft: 0}}> + <Typography variant="MuiTypography-h3">Image dimensions</Typography> + </DialogTitle> <TextField value={imgWidth.value} style = {{width: 100, marginRight: 10}} onChange={e => this.setImgWidth(e.target.value)} onBlur={(e) => this.isConstrained(e)} error={imgWidth.validity == 2} - helperText={imgWidth.validity == 2 ? "Invalid Width" : ""} + helperText={imgWidth.validity === 2 ? "Invalid width" : ""} margin="dense" id="width" label="Width" @@ -619,8 +628,8 @@ class AnnotationCreation extends Component { style = {{width: 100, marginLeft: 10 }} onChange={e => this.setImgHeight(e.target.value)} onBlur={(e) => this.isConstrained(e)} - error={imgHeight.validity == 2} - helperText={imgHeight.validity == 2 ? "Negative or invalid height." : ""} + error={imgHeight.validity === 2} + helperText={imgHeight.validity === 2 ? "Invalid height" : ""} margin="dense" id="height" label="Height" @@ -633,19 +642,15 @@ class AnnotationCreation extends Component { checked={imgConstrain} onChange={(e) => this.handleConstrainCheck(e)} inputProps={{ 'aria-label': 'primary checkbox' }} - style = {{ marginLeft: 10 }} + style = {{ marginLeft: 30 }} /> } - label="Constrain Proportions" + label="Constrain proportions" /> </DialogContent> <DialogActions> - <Button onClick={() => this.handleImgDialogChange(false)} color="primary"> - Cancel - </Button> - <Button onClick={this.handleImgDialogSubmit} color="primary"> - Add - </Button> + <Button onClick={() => this.handleImgDialogChange(false)}>Cancel</Button> + <Button variant="contained" onClick={this.handleImgDialogSubmit} color="primary">Add</Button> </DialogActions> </Dialog> <Grid item xs={12}>