member.csv to DynamoDB
by Dominic Myers
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/4.1.4/papaparse.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-fileinput/4.3.8/css/fileinput.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-fileinput/4.3.8/js/fileinput.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.3/toastr.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.3/toastr.min.js"></script>
<div class="container">
<form>
<div class="form-group">
<label class="control-label">Select File</label>
<input id="input" type="file" class="file" data-show-preview="false">
</div>
</form>
<pre id="output" style="display:none;"></pre>
</div>
CSS
pre {
outline: 1px solid #ccc;
padding: 5px;
margin: 5px;
}
.string {
color: green;
}
.number {
color: darkorange;
}
.boolean {
color: blue;
}
.null {
color: magenta;
}
.key {
color: red;
}
JavaScript
let syntaxHighlight = (json) => json
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, (match) => {
var cls = 'number';
if (/^"/.test(match)) {
if (/:$/.test(match)) {
cls = 'key';
} else {
cls = 'string';
}
} else if (/true|false/.test(match)) {
cls = 'boolean';
} else if (/null/.test(match)) {
cls = 'null';
}
return '<span class="' + cls + '">' + match + '</span>';
});
$("form").on("click", ".fileinput-upload", (e) => {
e.preventDefault();
if (window.File && window.FileReader && window.FileList && window.Blob) {
var files = document.getElementById("input").files;
if (files[0].type === "application/vnd.ms-excel") {
data = [];
Papa.parse(files[0], {
"download": true,
"header": true,
"dynamicTyping": true,
"complete": results => {
let data = [];
let Status = ["Unpaid", "Paid", "Subscriber"];
results.data.forEach((element) => {
let index = data.findIndex(e => e.Date === element.date);
if (index === -1) {
if (element.username === "Others") {
let Attendance = [];
for (let i = 0; i < element.name; i++) {
Attendance.push({
"Name": "Unknown",
"User": "Unknown",
"Status": Status[1]
});
}
data.push({
...