blob: a3588f1993b8e40b224f110da81d750a5a728c1f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
import { h, Component } from 'preact'
import client from '../../../client.js'
import FileUploadButton from './FileUploadButton.jsx'
import TaskContentLink from '../../../containers/taskContentLink.js'
import TaskStyleLink from '../../../containers/taskStyleLink.js'
export default class Folder extends Component {
constructor(props) {
super()
this.state = {
files: props.folder.files || [],
}
this.addFiles = this.addFiles.bind(this)
if (! props.folder.files) {
client.file.index({ folder_id: props.folder.id }).then( files => this.setState({ files }) )
}
this.audio = document.createElement('audio')
}
addFiles(newFiles) {
if (! newFiles) return
const files = this.state.files.concat(newFiles).sort( (a,b) => { return b.id - a.id } )
this.setState({ files })
}
handleClick(file) {
if (file.type === 'audio') {
this.audio.setAttribute('src', mp3path(file))
this.audio.play()
document.body.style.backgroundImage = 'url(' + pngpath(file) + ')'
}
}
render() {
const files = (this.state.files).map(toFilenamePair).sort(sortByFilename).map(fromPair).map( (file, i) => {
if (! file) return
return (
<div key={i}>
<span class='name' onClick={() => this.handleClick(file)}>{file.name}</span>
<span class='mime'>{file.mime}</span>
<span class='actions'>
<TaskContentLink file={file}> content </TaskContentLink>
<TaskStyleLink file={file}> style </TaskStyleLink>
</span>
</div>
)
})
return (
<div class='window'>
<div class='heading'>
<b>{this.props.folder.name}</b>
<div class='buttons'>
<FileUploadButton folder={this.props.folder} addFiles={this.addFiles} />
<button onClick={this.props.onClose}>×</button>
</div>
</div>
<div class='list'>
{files}
</div>
</div>
)
}
}
function toFilenamePair (file) { return [file.name.toLowerCase(), file] }
function sortByFilename (a,b) { return a[0] < b[0] ? -1 : a[0] == b[0] ? 0 : 1 }
function fromPair (pair) { return pair[1] }
function filepath (file) {
return '/data/' + file.folder_id + '/' + encodeURIComponent(file.name)
}
function mp3path (file) {
if (file.mime !== 'audio/mp3') {
return filepath(file) + '.mp3'
}
return filepath(file)
}
function pngpath (file) {
return filepath(file) + '.png'
}
|