butiran-✗

ta-bu-ta read-block 2

· 3 mins read · edit

result

26c15.html

<div id="container"><div>

<script src="26b39.js"></script>
<script src="26b41.js"></script>
<script src="26b43.js"></script>
<script src="26b10.js"></script>
<script src="26b12.js"></script>
<script src="26b14.js"></script>
<script src="26b15.js"></script>

<script>
// Define global variables
let dataset1, dataset2;

// Instantiate containers, output textarea, and buttons
const cnt = getContainer("container");
const inTxa = createTextarea("text-input");
const outTxa = createTextarea("text-output");
const btnDiv = createDiv("button-container");
const cvBtn = createButton("cv-button", "Clear datasets");
const ciBtn = createButton("ci-button", "Clear input");
const coBtn = createButton("co-button", "Clear output");
const deBtn = createButton("de-button", "Default");
const r1Btn = createButton("r1-button", "Dataset 1");
const r2Btn = createButton("r2-button", "Dataset 2");

// Append textarea to container
cnt.append(inTxa);
cnt.append(btnDiv);
cnt.append(outTxa);
btnDiv.append(cvBtn);
btnDiv.append(ciBtn);
btnDiv.append(coBtn);
btnDiv.append(deBtn);
btnDiv.append(r1Btn);
btnDiv.append(r2Btn);

// Change elements flex value
changeElementsFlex(
  ["text-input", "2.5"],
  ["button-container", "3"] , 
  ["text-output", "2.5"],
);

// Change ui height
cnt.style.height = "21em";
inTxa.style.height = "100%";
outTxa.style.height = "100%";

// Bind consolex output to textarea and set EOL character
consolex.setOutput(outTxa);
consolex.setEOL("");

// Set onclick event to each button
cvBtn.addEventListener("click", () => {
  dataset1 = null;
  dataset2 = null;
});
ciBtn.addEventListener("click", () => {
  clearTextarea("text-input");
});
coBtn.addEventListener("click", () => {
  clearTextarea("text-output");
});
deBtn.addEventListener("click", () => {
  inTxa.value = "";
  inTxa.value += "# dataset 1"; 
  inTxa.value += "\n" + "X;Y";
  inTxa.value += "\n" + "1;1";
  inTxa.value += "\n" + "2;4";
  inTxa.value += "\n" + "3;9";
  inTxa.value += "\n" + "4;16";
  inTxa.value += "\n" + "5;25";
  inTxa.value += "\n";

  inTxa.value += "\n# dataset 2"; 
  inTxa.value += "\n" + "X;Y;Z";
  inTxa.value += "\n" + "1;2;5";
  inTxa.value += "\n" + "2;4;10";
  inTxa.value += "\n" + "3;6;15";
  inTxa.value += "\n" + "4;8;20";
  inTxa.value += "\n" + "5;10;25";
  inTxa.value += "\n";
});
r1Btn.addEventListener("click", () => {
  let key, block;
  
  key = "# dataset 1";
  block = readBlockFromTextarea("text-input", key);
  dataset = convertBlockToDataset(block, ";");
  
  outTxa.value += JSON.stringify(dataset) + "\n";
});
r2Btn.addEventListener("click", () => {
  let key, block;
  
  key = "# dataset 2";
  block = readBlockFromTextarea("text-input", key);
  dataset = convertBlockToDataset(block, ";");
  
  outTxa.value += JSON.stringify(dataset) + "\n";
});
</script>

26c15.js

/**
 * 26c15.js
 * Helper functions for butiran-x/26c15 note.
 *
 * Author: Sparisoma Viridi (https://github.com/dudung)
 * Created: 2026-03-03
 *
 * Exports:
 * - convertBlokToDataSet(block)
 */


/**
 * Converts a text block (where the first line contains column labels)
 * into a dataset represented as a JavaScript object.
 *
 * The resulting object has the form:
 * {
 *   "columnName1": [values],
 *   "columnName2": [values],
 *   ...
 * }
 *
 * @param {string} block - Multiline text where the first line contains column labels
 *   and each subsequent line contains delimited values.
 * @param {string} delim - The delimiter used to separate values in each line.
 * @returns {{ [key: string]: Array<string | number> }} An object mapping column names to arrays of values.
 *
 * @example
 * const dataset = convertBlockToDataSet(block, ",");
 */
function convertBlockToDataset(block, delim) {
  const dataset = {};
  
  const lines = block.split("\n");
  const header = lines[0].split(delim);
  
  const nrow = lines.length;
  const ncol = header.length;

  for(h of header) {
    dataset[h] = [];
  }
  
  for(let i = 1; i < nrow; i++) {
    let cols = lines[i].split(delim);
    for(let j = 0; j < ncol; j++) {
      dataset[header[j]].push(cols[j]);
    }
  }
  
  return dataset;
}


// marker: 26c15.js
(() => {
  console.log("[marker] 26c15.js loaded");
})();