-
Notifications
You must be signed in to change notification settings - Fork 31
/
demo.html
97 lines (94 loc) · 3.63 KB
/
demo.html
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<!DOCTYPE html>
<html>
<head>
<title>Knockout File Bindings Demo</title>
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="knockout-file-bindings.css">
<style type="text/css">
.container {
max-width: 750px;
padding: 15px;
}
</style>
</head>
<body>
<div class="container">
<h1>
<a target="_blank" href="https://github.com/adrotec/knockout-file-bindings">knockout-file-bindings</a>
</h1>
<div class="well" data-bind="fileDrag: fileData">
<div class="form-group row">
<div class="col-md-6">
<img style="height: 125px;" class="img-rounded thumb" data-bind="attr: { src: fileData().dataURL }, visible: fileData().dataURL">
<div data-bind="ifnot: fileData().dataURL">
<label class="drag-label">Drag file here</label>
</div>
</div>
<div class="col-md-6">
<input type="file" data-bind="fileInput: fileData, customFileInput: {
buttonClass: 'btn btn-success',
fileNameClass: 'disabled form-control',
onClear: onClear,
onInvalidFileDrop: onInvalidFileDrop
}" accept="image/*">
</div>
</div>
</div>
<h3>Multiple File Uploads</h3>
<div class="well" data-bind="fileDrag: multiFileData">
<div class="form-group row">
<div class="col-md-6">
<!-- ko foreach: {data: multiFileData().dataURLArray, as: 'dataURL'} -->
<img style="height: 100px; margin: 5px;" class="img-rounded thumb" data-bind="attr: { src: dataURL }, visible: dataURL">
<!-- /ko -->
<div data-bind="ifnot: fileData().dataURL">
<label class="drag-label">Drag files here</label>
</div>
</div>
<div class="col-md-6">
<input type="file" multiple data-bind="fileInput: multiFileData, customFileInput: {
buttonClass: 'btn btn-success',
fileNameClass: 'disabled form-control',
onClear: onClear,
onInvalidFileDrop: onInvalidFileDrop
}" accept="image/*">
</div>
</div>
</div>
<button class="btn btn-default" data-bind="click: debug">Debug</button>
</div>
<script src='http://cdnjs.cloudflare.com/ajax/libs/knockout/3.1.0/knockout-min.js'></script><script src='knockout-file-bindings.js'></script>
<script>
var viewModel = {};
viewModel.fileData = ko.observable({
dataURL: ko.observable(),
// can add "fileTypes" observable here, and it will override the "accept" attribute on the file input
// fileTypes: ko.observable('.xlsx,image/png,audio/*')
});
viewModel.multiFileData = ko.observable({ dataURLArray: ko.observableArray() });
viewModel.onClear = function (fileData) {
if (confirm('Are you sure?')) {
fileData.clear && fileData.clear();
}
};
viewModel.debug = function () {
window.viewModel = viewModel;
console.log(ko.toJSON(viewModel));
console.log(viewModel.multiFileData())
console.log(viewModel.multiFileData().dataURLArray());
console.log(viewModel.multiFileData().fileArray());
debugger;
};
viewModel.onInvalidFileDrop = function(failedFiles) {
var fileNames = [];
for (var i = 0; i < failedFiles.length; i++) {
fileNames.push(failedFiles[i].name);
}
var message = 'Invalid file type: ' + fileNames.join(', ');
alert(message)
console.error(message);
};
ko.applyBindings(viewModel);
</script>
</body>
</html>