<urban-bucket-form>
|
|
<div class="form">
|
|
<form method="POST">
|
|
|
|
<input type="hidden" name="_token" value={ state.csrfToken } if={ state.csrfToken } />
|
|
|
|
<!-- name -->
|
|
<div class="field is-horizontal">
|
|
<div class="field-label is-normal">
|
|
<label class="label required" for="name">
|
|
name
|
|
</label>
|
|
</div>
|
|
<div class="field-body">
|
|
<div class="field">
|
|
<p class="control">
|
|
<input id="name" class={ getClasses('name', 'input') } type="text" name="name" value={ props.name } onkeyup={ (event) => { state.validator.handle(event, 'name') }} />
|
|
<field-error errors={ state.validator.errors('name') } ></field-error>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- description -->
|
|
<div class="field is-horizontal">
|
|
<div class="field-label is-normal">
|
|
<label class="label" for="description">
|
|
description
|
|
</label>
|
|
</div>
|
|
<div class="field-body">
|
|
<div class="field">
|
|
<p class="control">
|
|
<textarea id="description" class={ getClasses('description', 'textarea') } name="description" value={ props.description } onkeyup={ (event) => { state.validator.handle(event, 'description') }}></textarea>
|
|
<field-error errors={ state.validator.errors('description') } ></field-error>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- path -->
|
|
<div class="field is-horizontal">
|
|
<div class="field-label is-normal">
|
|
<label class="label" for="name">
|
|
path
|
|
</label>
|
|
</div>
|
|
<div class="field-body">
|
|
<div class="field">
|
|
<p class="control">
|
|
<input id="path" class={ getClasses('path', 'input') } type="text" name="path" value={ props.path } onkeyup={ (event) => { state.validator.handle(event, 'path') }} />
|
|
<field-error errors={ state.validator.errors('path') } ></field-error>
|
|
<span class="help">
|
|
path for storage files, if empty default path will be used
|
|
</span>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- is public -->
|
|
<div class="field is-horizontal">
|
|
<div class="field-label is-normal">
|
|
<label class="label" for="public">
|
|
public
|
|
</label>
|
|
</div>
|
|
<div class="field-body">
|
|
<div class="field">
|
|
<input id="public" type="checkbox" name="public" value="1" checked={ props.public }>
|
|
<span class="help">
|
|
everyone can see bucket, files and download them
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- submit -->
|
|
<div class="field">
|
|
<div class="control">
|
|
<button class="button is-primary" type="submit" disabled={ state.validator.errors().length > 0 }>
|
|
Create
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
</form>
|
|
</div>
|
|
<script>
|
|
|
|
import Validator from '@tentakelfabrik/tiny-validator/src/validator'
|
|
import FieldError from '../field-error.riot'
|
|
|
|
riot.register('field-error', FieldError)
|
|
|
|
/**
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
|
|
export default {
|
|
|
|
/**
|
|
*
|
|
* @param {[type]} props [description]
|
|
* @param {[type]} state [description]
|
|
*
|
|
*/
|
|
onBeforeMount(props, state) {
|
|
state.validator = new Validator({
|
|
name: {
|
|
presence: true,
|
|
length: {
|
|
maximum: 255
|
|
}
|
|
},
|
|
description: {
|
|
length: {
|
|
maximum: 255
|
|
}
|
|
}
|
|
}, this)
|
|
|
|
//
|
|
const meta = document.querySelector("meta[name='csrf-token']")
|
|
|
|
if (meta) {
|
|
state.csrfToken = meta.getAttribute("content")
|
|
}
|
|
},
|
|
|
|
/**
|
|
*
|
|
*
|
|
* @param {[type]} key
|
|
* @param {[type]} defaultClass
|
|
* @return {[type]}
|
|
*
|
|
*/
|
|
getClasses(key, defaultClass) {
|
|
const classes = [
|
|
defaultClass
|
|
]
|
|
|
|
const errors = this.state.validator.errors(key)
|
|
|
|
if (errors && errors.length > 0) {
|
|
classes.push('is-danger')
|
|
}
|
|
|
|
return classes.join(' ')
|
|
}
|
|
}
|
|
|
|
</script>
|
|
</urban-bucket-form>
|