tests/dicom/pages/anonymiser.js

var dwv = dwv || {};
dwv.test = dwv.test || {};

// rules file
var _rulesFile = null;
// dicom file
var _dicomFile = null;
// DICOM elements
var _dicomElements = null;

/**
 * Handle DICOM file load
 *
 * @param {object} event The onload event.
 */
function onLoadDICOMFile(event) {
  // parse DICOM
  var parser = new dwv.dicom.DicomParser();
  parser.parse(event.target.result);
  // store elements
  _dicomElements = parser.getRawDicomElements();
  // activate generate button
  var element = document.getElementById('generate');
  element.className = 'button button-active';
}

/**
 * Generate DICOM data
 */
dwv.test.generate = function () {
  // check validity
  if (!isValidRules()) {
    return;
  }
  // create writer with textarea rules
  var writer = new dwv.dicom.DicomWriter();
  writer.rules = JSON.parse(document.getElementById('rules').value);
  var dicomBuffer = null;
  try {
    dicomBuffer = writer.getBuffer(_dicomElements);
  } catch (error) {
    console.error(error);
    alert(error.message);
  }
  // view as Blob to allow download
  var blob = new Blob([dicomBuffer], {type: 'application/dicom'});
  // update generate button
  var element = document.getElementById('generate');
  element.href = URL.createObjectURL(blob);
  element.download = 'anonym-' + _dicomFile.name;
};

/**
 * Save the rules as a JSON file.
 */
dwv.test.saveRules = function () {
  // check validity
  if (!isValidRules()) {
    return;
  }
  // get text from the textarea
  var text = document.getElementById('rules').value;
  // view as Blob to allow download
  var blob = new Blob([text], {type: 'text/plain'});
  // update save button
  var element = document.getElementById('save');
  element.download = (_rulesFile === null ? 'rules.json' : _rulesFile.name);
  element.href = URL.createObjectURL(blob);
};

/**
 * Is the JSON valid?
 *
 * @returns {boolean} True if the input JSON is valid.
 */
function isValidRules() {
  try {
    JSON.parse(document.getElementById('rules').value);
  } catch (error) {
    alert('The JSON is not valid, please check it with JSONLint.');
    return false;
  }
  return true;
}

/**
 * open JSONLint to check the rules
 */
dwv.test.launchJSONLint = function () {
  var text = document.getElementById('rules').value;
  var link = 'http://jsonlint.com/?json=' + encodeURIComponent(text);
  window.open(link);
};

/**
 * handle input DICOM file
 *
 * @param {object} event The input field event.
 */
dwv.test.onInputDICOMFile = function (event) {
  if (event.target.files.length === 0) {
    return;
  }
  _dicomFile = event.target.files[0];
  var reader = new FileReader();
  reader.onload = onLoadDICOMFile;
  reader.readAsArrayBuffer(_dicomFile);
};

/**
 *  handle input rules file
 *
 * @param {object} event The input field event.
 */
dwv.test.onInputRulesFile = function (event) {
  if (event.target.files.length === 0) {
    return;
  }
  _rulesFile = event.target.files[0];
  var reader = new FileReader();
  reader.onload = function (event) {
    document.getElementById('rules').value = event.target.result;
  };
  reader.readAsText(_rulesFile);
};