tests_dicom_pages_synthetic-data.js
// Do not warn if these variables were not defined before.
/* global dwv */
// namespace
// eslint-disable-next-line no-var
var test = test || {};
// call setup on DOM loaded
document.addEventListener('DOMContentLoaded', onDOMContentLoaded);
/**
* Setup.
*/
function onDOMContentLoaded() {
// create lists
getFileConfigsHtmlList('synthetic-data');
}
/**
* Create an object url from (JSON) tags.
*
* @param {object} config The data configuration.
* @returns {string} The object URL.
*/
function getObjectUrlFromTags(config) {
// add private tags to dict if present
let useUnVrForPrivateSq = false;
if (typeof config.privateDictionary !== 'undefined') {
const keys = Object.keys(config.privateDictionary);
for (let i = 0; i < keys.length; ++i) {
const group = keys[i];
const tags = config.privateDictionary[group];
dwv.addTagsToDictionary(group, tags);
}
if (typeof config.useUnVrForPrivateSq !== 'undefined') {
useUnVrForPrivateSq = config.useUnVrForPrivateSq;
}
}
// convert JSON to DICOM element object
const dicomElements = dwv.getElementsFromJSONTags(config.tags);
// pixels
if (config.tags.Modality !== 'KO') {
if (config.tags.Modality === 'SEG') {
// simple binary
dicomElements['7FE00010'] =
test.generatePixelDataFromJSONTags(config.tags, 'binary');
} else {
// default to grad square
dicomElements['7FE00010'] =
test.generatePixelDataFromJSONTags(config.tags);
}
}
// create DICOM buffer
const writer = new dwv.DicomWriter();
writer.setUseUnVrForPrivateSq(useUnVrForPrivateSq);
const dicomBuffer = writer.getBuffer(dicomElements);
// blob and then url
const blob = new Blob([dicomBuffer], {type: 'application/dicom'});
return URL.createObjectURL(blob);
}
/**
* Create list from configs.
*
* @param {Array} configs An array of data cofiguration.
* @returns {object} The html list element.
*/
function getConfigsHtmlList(configs) {
const ul = document.createElement('ul');
for (let i = 0; i < configs.length; ++i) {
// download link
const link = document.createElement('a');
try {
link.href = getObjectUrlFromTags(configs[i]);
} catch (error) {
console.log('data:', configs[i].name);
console.error(error);
}
const fileName = 'dwv-generated-' + configs[i].name + '.dcm';
link.download = fileName;
link.appendChild(document.createTextNode(fileName));
// list element
const li = document.createElement('li');
li.append(link);
li.appendChild(document.createTextNode(': ' + configs[i].description));
// append to list
ul.append(li);
}
return ul;
}
/**
* Get the list of configs and display them with a download link.
*
* @param {string} fileName The input file name.
*/
function getFileConfigsHtmlList(fileName) {
const url = '/tests/dicom/' + fileName + '.json';
const request = new XMLHttpRequest();
request.open('GET', url, true);
request.onerror = function (event) {
console.error(event);
};
request.onload = function (/*event*/) {
const configs = JSON.parse(this.responseText);
const dataGroups = [
{
name: 'Synthetic data Implicit VR Little Endian',
short: 'sile',
syntax: '1.2.840.10008.1.2'
},
{
name: 'Synthetic data Explicit VR Little Endian',
short: 'sele',
syntax: '1.2.840.10008.1.2.1'
},
{
name: 'Synthetic data Explicit VR Big Endian',
short: 'sebe',
syntax: '1.2.840.10008.1.2.2'
}
];
for (const dataGroup of dataGroups) {
const content = document.getElementById('content');
const title = document.createElement('h2');
title.appendChild(document.createTextNode(dataGroup.name));
content.append(title);
for (const config of configs) {
// name in json is 'test-##', replace test
// with the short string of the group
config.name = dataGroup.short +
config.name.substring(config.name.length - 3);
// set transfer syntax
config.tags.TransferSyntaxUID = dataGroup.syntax;
}
content.append(getConfigsHtmlList(configs));
}
};
request.send(null);
}