mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-10-04 19:05:37 +08:00
Include plate templates metadata to the protocol import/export [SCI-8354] (#5348)
This commit is contained in:
parent
5eacd41ca5
commit
2b82b6a74e
3 changed files with 83 additions and 60 deletions
|
@ -1,76 +1,69 @@
|
||||||
|
/* eslint-disable no-unused-vars */
|
||||||
|
|
||||||
function hex2a(hexx) {
|
function hex2a(hexx) {
|
||||||
var hex = hexx.toString(); // Force conversion
|
const hexString = hexx.toString(); // Force conversion
|
||||||
var str = "";
|
let asciiString = '';
|
||||||
for (var i = 0; i < hex.length; i += 2) {
|
for (let i = 0; i < hexString.length; i += 2) {
|
||||||
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
|
asciiString += String.fromCharCode(parseInt(hexString.substr(i, 2), 16));
|
||||||
}
|
}
|
||||||
return str;
|
return asciiString;
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateElnTable(id, content) {
|
function getMetadataCellValue(jsonData, row, col) {
|
||||||
/*********************************************/
|
if (jsonData == null) return '';
|
||||||
/* INNER FUNCTIONS */
|
|
||||||
/*********************************************/
|
|
||||||
function colName(n) {
|
|
||||||
var ordA = "A".charCodeAt(0);
|
|
||||||
var ordZ = "Z".charCodeAt(0);
|
|
||||||
var len = ordZ - ordA + 1;
|
|
||||||
|
|
||||||
var s = "";
|
const key = `${row}:${col}`;
|
||||||
while(n >= 0) {
|
for (let i = 0; i < jsonData.length; i += 1) {
|
||||||
s = String.fromCharCode(n % len + ordA) + s;
|
const item = jsonData[i];
|
||||||
|
const itemKey = `${item.row}:${item.col}`;
|
||||||
|
if (itemKey === key) {
|
||||||
|
return item.className;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateElnTable(content, tableMetadata) {
|
||||||
|
function colName(n) {
|
||||||
|
const asciiA = 'A'.charCodeAt(0);
|
||||||
|
const asciiZ = 'Z'.charCodeAt(0);
|
||||||
|
const len = (asciiZ - asciiA) + 1;
|
||||||
|
let name = '';
|
||||||
|
while (n >= 0) {
|
||||||
|
name = String.fromCharCode((n % len) + asciiA) + name;
|
||||||
n = Math.floor(n / len) - 1;
|
n = Math.floor(n / len) - 1;
|
||||||
}
|
}
|
||||||
return s;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************/
|
const decodedContent = hex2a(content);
|
||||||
/* ACTUAL FUNCTION CODE */
|
const isPlateTemplate = tableMetadata.plateTemplate === 'true';
|
||||||
/*********************************************/
|
const tableData = JSON.parse(decodedContent);
|
||||||
var txt = hex2a(content);
|
const numRows = tableData.data.length + 1;
|
||||||
var jstr = JSON.parse(txt);
|
const numCols = tableData.data[0].length + 1;
|
||||||
|
|
||||||
var rows = jstr.data.length + 1;
|
let tableRows = '';
|
||||||
var cols = jstr.data[0].length + 1;
|
|
||||||
|
|
||||||
var str = rows + "|" + cols;
|
for (let i = 0; i < numRows; i += 1) {
|
||||||
|
let tableCells = '';
|
||||||
|
|
||||||
var html_s = "<table class='table table-bordered eln-table'><tbody>";
|
for (let j = 0; j < numCols; j += 1) {
|
||||||
var html_e = "</tbody></table>";
|
let cellData = '';
|
||||||
|
let cellClass = getMetadataCellValue(tableMetadata.cells, i - 1, j - 1);
|
||||||
|
|
||||||
var tr = "";
|
if (i > 0 && j > 0 && tableData.data[i - 1][j - 1] !== null) {
|
||||||
for (var i = 0; i < rows; i++) {
|
cellData = tableData.data[i - 1][j - 1];
|
||||||
var tr_s = "<tr>";
|
} else if (i === 0 && j !== 0) {
|
||||||
var th = "";
|
cellData = isPlateTemplate ? j.toString() : colName(j - 1);
|
||||||
var d = "";
|
} else if (j === 0 && i !== 0) {
|
||||||
var d_str = "";
|
cellData = isPlateTemplate ? colName(i - 1) : i.toString();
|
||||||
for (var j = 0; j < cols; j++) {
|
|
||||||
if ((i > 0) && (j > 0)) {
|
|
||||||
if (jstr.data[i - 1][j - 1] !== null) {
|
|
||||||
d = jstr.data[i - 1][j - 1];
|
|
||||||
d_str = "<td>" + d;
|
|
||||||
} else {
|
|
||||||
d = "";
|
|
||||||
d_str = "<td>" + d;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ((i == 0) && (j == 0)) {
|
|
||||||
d = "";
|
|
||||||
d_str = "<td>" + d;
|
|
||||||
} else if (i == 0) {
|
|
||||||
d = colName(j - 1);
|
|
||||||
d_str = "<td>" + d;
|
|
||||||
} else {
|
|
||||||
d = i.toString();
|
|
||||||
d_str = "<td style='width: 60px;'>" + d;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
th = th + d_str + "</td>";
|
tableCells = `${tableCells}<td ${cellClass ? `class="${cellClass}"` : ''}>${cellData}</td>`;
|
||||||
}
|
}
|
||||||
var tr_e = "</tr>";
|
|
||||||
tr = tr + tr_s + th + tr_e;
|
tableRows = `${tableRows}<tr>${tableCells}</tr>`;
|
||||||
}
|
}
|
||||||
var html = html_s + tr + html_e;
|
|
||||||
return $.parseHTML(html);
|
return $.parseHTML(`<table class="table table-bordered eln-table"><tbody>${tableRows}</tbody></table>`);
|
||||||
}
|
}
|
||||||
|
|
|
@ -260,13 +260,14 @@ function importProtocolFromFile(
|
||||||
var tableId = $(tableNode).attr('id');
|
var tableId = $(tableNode).attr('id');
|
||||||
var tableName = $(tableNode).children('name').text();
|
var tableName = $(tableNode).children('name').text();
|
||||||
var tableContent = $(tableNode).children('contents').text();
|
var tableContent = $(tableNode).children('contents').text();
|
||||||
|
var tableMetadata = JSON.parse($(tableNode).children('metadata').text()) || {};
|
||||||
|
|
||||||
// Generate table element
|
// Generate table element
|
||||||
var tableEl = newPreviewElement(
|
var tableEl = newPreviewElement(
|
||||||
'table',
|
'table',
|
||||||
{ name: tableName }
|
{ name: tableName }
|
||||||
);
|
);
|
||||||
var elnTableEl = generateElnTable(tableId, tableContent);
|
var elnTableEl = generateElnTable(tableContent, tableMetadata);
|
||||||
tableEl.append(elnTableEl);
|
tableEl.append(elnTableEl);
|
||||||
|
|
||||||
// Now, append table element to step
|
// Now, append table element to step
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
// scss-lint:disable SelectorDepth
|
||||||
|
// scss-lint:disable NestingDepth
|
||||||
|
|
||||||
@import "constants";
|
@import "constants";
|
||||||
@import "mixins";
|
@import "mixins";
|
||||||
@import "main_navigation";
|
@import "main_navigation";
|
||||||
|
@ -863,8 +866,34 @@ ul.content-activities {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
.eln-table {
|
.eln-table {
|
||||||
text-align: center;
|
|
||||||
height: 21px;
|
height: 21px;
|
||||||
|
|
||||||
|
tr:first-child {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
&.htCenter,
|
||||||
|
&:first-child {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.htRight {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.htJustify {
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.htMiddle {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.htBottom {
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.badge-preview {
|
.badge-preview {
|
||||||
|
|
Loading…
Add table
Reference in a new issue