function loadFile(evt, onComplete) { var file = evt.target.files[0]; Papa.parse(file, { header: true, delimiter: '\t', quoteChar: String.fromCharCode(0), escapeChar: String.fromCharCode(0), comments: "#", skipEmptyLines: true, dynamicTyping: true, complete: function(results) { onComplete(results, file) } }); } var displayRows=30 var startIndex=0; var endIndex=displayRows; var urls = null; function setupInterface(data, file) { function updatePreview(nRow) { if (urls == null) return; let img_url = urls.data[data.data[nRow]['url_id']]['url'] console.log(img_url); $("#preview").attr("src", img_url); $("#preview-link").attr("href", img_url); } function gotoLocation(evt) { if (urls != null) { let nRow = parseInt($(evt.target).text()); updatePreview(nRow) } else { let url_mapping_html = `


Please upload a url mapping file or `; $("#tableregion").html(url_mapping_html); $("#btn-region").empty(); $("#region-right").empty(); $('#goback').on('click', function(evt) { setupInterface(data, file); } ); $('#url-mapping-tsv-file').change( function(evt) { loadFile(evt, function(results, url_mapping_file) { urls = results; setupInterface(data, file); }); } ); } } let editingTd; function updateTable() { editingTd = null; let editable_html = ` `; $('#table-body').empty(); $.each(data.data, function(nRow, el) { if (nRow < startIndex) return; if (nRow >= endIndex) return; var row = $(""); row.append($(' ')); $.each(el, function(column, content) { if (column == 'url_id') return row.append( $(editable_html). text(content). data('tableInfo', { 'nRow': nRow, 'column': column }) ); }); $("#table tbody").append(row); }); $("#table td:contains('B-PER')").addClass('ner_per'); $("#table td:contains('I-PER')").addClass('ner_per'); $("#table td:contains('B-LOC')").addClass('ner_loc'); $("#table td:contains('I-LOC')").addClass('ner_loc'); $("#table td:contains('B-ORG')").addClass('ner_org'); $("#table td:contains('I-ORG')").addClass('ner_org'); $("#table td:contains('B-TODO')").addClass('ner_todo'); $("#table td:contains('I-TODO')").addClass('ner_todo'); $(".offset").on('click', gotoLocation); updatePreview(startIndex) if ($("#docpos").val() != startIndex) { $("#docpos").val(data.data.length - startIndex); } } let slider_pos = data.data.length - startIndex; let slider_min = displayRows; let slider_max = data.data.length; let range_html = ` `; $("#region-right").html(range_html) $("#docpos").change( function(evt) { if (startIndex == data.data.length - this.value) return; startIndex = data.data.length - this.value; endIndex = startIndex + displayRows; console.log(startIndex); updateTable(); }); $('#docpos').slider(); let table_html = `
LOCATION POSITION TOKEN NE-TAG NE-EMB


`; let save_html = `` $("#tableregion").html(table_html) $("#btn-region").html(save_html) $("#file-region").html('

' + file.name + '

'); function saveFile(evt) { let csv = Papa.unparse(data, { header: true, delimiter: '\t', comments: "#", quoteChar: String.fromCharCode(0), escapeChar: String.fromCharCode(0), skipEmptyLines: true, dynamicTyping: true }); openSaveFileDialog (csv, file.name, null) } function openSaveFileDialog (data, filename, mimetype) { if (!data) return; var blob = data.constructor !== Blob ? new Blob([data], {type: mimetype || 'application/octet-stream'}) : data ; if (navigator.msSaveBlob) { navigator.msSaveBlob(blob, filename); return; } var lnk = document.createElement('a'), url = window.URL, objectURL; if (mimetype) { lnk.type = mimetype; } lnk.download = filename || 'untitled'; lnk.href = objectURL = url.createObjectURL(blob); lnk.dispatchEvent(new MouseEvent('click')); setTimeout(url.revokeObjectURL.bind(url, objectURL)); } $('.saveButton').on('click', saveFile) function finishTdEdit(td, isOk) { if (isOk) { let newValue = $('#edit-area').val(); $(td).html(newValue); let tableInfo = $(td).data('tableInfo'); data.data[tableInfo.nRow][tableInfo.column] = newValue; } else { $(td).html(editingTd.data); } editingTd = null; } function makeTdEditable(td) { editingTd = { elem: td, data: td.innerHTML }; let textArea = document.createElement('textarea'); textArea.style.width = td.clientWidth + 'px'; textArea.style.height = td.clientHeight + 'px'; textArea.id = 'edit-area'; $(textArea).val($(td).html()); $(td).html(''); $(td).append(textArea); textArea.focus(); let edit_html = `
` td.insertAdjacentHTML("beforeEnd", edit_html); $('#edit-ok').on('click', function(evt) { finishTdEdit(editingTd.elem, true); }); $('#edit-cancel').on('click', function(evt) { finishTdEdit(editingTd.elem, false); }); } $('#table').on('click', function(event) { let target = event.target.closest('.editable'); if (editingTd) { if (target == editingTd.elem) return; finishTdEdit(editingTd.elem, true); } if (!$.contains($('#table')[0], target)) return makeTdEditable(target); }); updateTable(); $('#tableregion')[0].addEventListener("wheel", function(event) { if (event.deltaY < 0) { if (startIndex <= 0) return; startIndex -= 1; endIndex -= 1; } else { if (endIndex >= data.data.length) return; startIndex += 1; endIndex += 1; } updateTable(); }); $('#back').on('click', function(evt) { if (startIndex >= displayRows) { startIndex -= displayRows; endIndex -= displayRows; } else { startIndex = 0; endIndex = displayRows; } updateTable(); } ); $('#next').on('click', function(evt) { if (endIndex + displayRows < data.data.length) { endIndex += displayRows; startIndex = endIndex - displayRows; } else { endIndex = data.data.length; startIndex = endIndex - displayRows; } updateTable(); } ); } $(document).ready( function() { $('#tsv-file').change( function(evt) { loadFile ( evt, function(results, file) { setupInterface(results, file); }) } ); } );