Bib-Tools

 view release on metacpan or  search on metacpan

examples/post.js  view on Meta::CPAN

function GetCellValues(dataTable) {
    // Generate JSON with details of selected documents
    var table = document.getElementById(dataTable);
    if (table == null) return;
    var i = 0; var Obj = [];
    var names = table.rows[0];
    for (var r = 1; r < table.rows.length; r++) {
        if (table.rows[r].id == 'cite') {
          var row = table.rows[r].cells;
          var check = table.rows[r].getElementsByTagName('Input');
          if (check.length>0){
            Obj[i] = {};
            for (var c = 3; c < row.length; c++){        
              var tag = names.cells[c].textContent;
              Obj[i][tag] =row[c].textContent;
            }
            i = i+1;
          }
        }
    }
    var jsonString = JSON.stringify(Obj);
    document.getElementById('out').innerHTML = document.getElementById('out').innerHTML+jsonString;
}

//--------------------------------------
// Code below creates popup for structured input of author details
//--------------------------------------

function initAuth() {
  // attach popups to every author list cell
  SetAuthEvents('doi');
  SetAuthEvents('nodoi');
}

function SetAuthEvents(dataTable) {
  // attach popups to every author list cell
  var table = document.getElementById(dataTable);
  if (table == null) return;
  var rows = table.rows;
  for (var i = 1; i<rows.length; i++) {
    if (rows[i].id == "cite") {
      var col = rows[i].cells[5];
      col.contentEditable=false;
      col.addEventListener("click",HandleAuth,false);
    }
  }
}

function ShowAuth(el) {
  // get author list
  var s = el.textContent;
  var bits = s.split(/ and /);
  var str = '';
  for (var i = 0; i<bits.length; i++) {
     str += bits[i]+"\n";
  }

  // create popup
  var m = document.createElement("div");
  m.id = "auth";
  m.style.cssText="position:absolute; background:#0E73B9; padding:10px; box-shadow:10px 10px 5px #888888; border:1px solid;";
  // textarea with authors, one per line
  m.innerHTML = '<textarea rows="'+(bits.length+2)+'">'+str+'</textarea><br>';
  // save button
  var save = document.createElement("input");
  save.type="button"; save.value="Save"; save.addEventListener("click", HandleAuth, false);
  // cancel button
  var cancel = document.createElement("input");
  cancel.type="button"; cancel.value="Cancel"; cancel.addEventListener("click", HandleAuth, false);
  m.appendChild(save);m.appendChild(cancel);

  // insert it into cell
  el.insertBefore(m,el.firstChild);

  // display it
  m.style.display="block";
}

function CloseAuth(el) {
  var m = el.parentNode;
  var td = m.parentNode;
  if (td == null) return; // to handle multiple clicks due to bubbling
  if (el.value == "Save") {
    // extract author list info
    var auths = m.firstChild.value;
    auths = auths.replace(/\n+/g,' and ');
    auths = auths.replace(/^ and /,'');
    auths = auths.replace(/ and $/,'');
    // delete popup
    td.removeChild(td.firstChild);
    // update table entry
    td.textContent=auths;
  } else {
    // just delete popup
    td.removeChild(td.firstChild);
  }
}

function HandleAuth(e) {
  var el;
  if (!e) {
      el = event.target || event.srcElement;
  } else {
      el = e.target || e.srcElement;
  }
  if (el.tagName == "INPUT") {
    // save or cancel button
    CloseAuth(el);
  } else if (el.tagName == "TD") {
    ShowAuth(el);
  }
}

// add click event listeners to table cells once page has loaded ...
window.addEventListener("load", initAuth, false);



( run in 1.048 second using v1.01-cache-2.11-cpan-364913b4093 )