Public
Edited
Oct 5, 2023
Importers
Insert cell
Insert cell
treePitakaII
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
stratify = d3
.stratify()
.id(function (d) {
return d.name;
})
.parentId(function (d) {
return d.parent;
})(treePitaka(1, 1, 1, 1))
Insert cell
stratifySNAN = d3
.stratify()
.id(function (d) {
return d.name;
})
.parentId(function (d) {
return d.parent;
})(treePitaka(0, 0, 1, 1))
Insert cell
stratifyMNDN = d3
.stratify()
.id(function (d) {
return d.name;
})
.parentId(function (d) {
return d.parent;
})(treePitaka(1, 1, 0, 0))
Insert cell
treePitaka = (xDN = 1, xMN = 1, xSN = 1, xAN = 1) => {
const tree = [
{ name: "Sutta Pitaka", parent: null } // comment out sections below to remove them from tree
];
// DN
if (xDN == 1) tree.push({ name: "Dīgha Nikāya", parent: "Sutta Pitaka" });

// MN
if (xMN == 1) tree.push({ name: "Majjhima Nikāya", parent: "Sutta Pitaka" });
if (xMN == 1) tree.push({ name: "Mūlapaṇṇāsa", parent: "Majjhima Nikāya" });
if (xMN == 1)
tree.push({ name: "Majjhimapaṇṇāsa", parent: "Majjhima Nikāya" });
if (xMN == 1) tree.push({ name: "Uparipaṇṇāsa", parent: "Majjhima Nikāya" });

// SN
if (xSN == 1) tree.push({ name: "Saṃyutta Nikāya", parent: "Sutta Pitaka" });
if (xSN == 1) tree.push({ name: "Sagāthā Vagga", parent: "Saṃyutta Nikāya" });
if (xSN == 1) tree.push({ name: "Nidāna Vagga", parent: "Saṃyutta Nikāya" });
if (xSN == 1) tree.push({ name: "Khandha Vagga", parent: "Saṃyutta Nikāya" });
if (xSN == 1)
tree.push({ name: "Saḷāyatana Vagga@", parent: "Saṃyutta Nikāya" });
if (xSN == 1) tree.push({ name: "Mahā Vagga@", parent: "Saṃyutta Nikāya" });

// AN
if (xAN == 1) tree.push({ name: "Aṅguttara Nikāya", parent: "Sutta Pitaka" });

let vaggaPushOld = {};
let vaggaPush2 = {};
let divPushOld = {};
let divAPushOld = {};
let divPush = {};
let divAPush = {};
let vaggaNum = 0;
let mn = 1;
let sn = 1;
let snDiv = "";

suttas.forEach((sutta) => {
let test = 0;
if (sutta.acronym.includes("DN")) test = xDN; // use this to disable/enable some of the nikaya
if (sutta.acronym.includes("MN")) test = xMN;
if (sutta.acronym.includes("SN")) test = xSN;
if (sutta.acronym.includes("AN")) test = xAN;
if (test == 0) return;

const suttaVagga = vaggas.find(
(vagga) =>
vagga.subdivision_uid == sutta.subdivision_uid &&
vagga.number == sutta.vagga_number
);

// their is a lot of stuff in suttas

if (suttaVagga !== undefined) {
const subDiv = sutta.uid.split("."); // first num . second num
const subDivName = subDivs.find((div) => div.uid == subDiv[0]); // divs of samyutta and Angutta
const suttaPush = {
uid: sutta.uid,
mainDiv: subDiv[0] ? subDiv[0] : "", // usefull to test ?
mainDivName: subDivName
? subDivName.name // for SN & AN
: sutta.acronym
.split(" ")[0]
.replace("DN", "Dīgha Nikāya")
.replace("MN", "Majjhima Nikāya"),
subDiv: subDiv[1] ? subDiv[1] : "",
acronym: sutta.acronym.replace("–", "-"), // i looked for an hour for that mistake in the data...
name: sutta.name + " Sutta",
parent: suttaVagga.name
};

tree.push(suttaPush);

// for vagga

if (suttaPush.mainDivName == "Majjhima Nikāya") {
if (mn <= 50) {
suttaPush.mainDivName = "Mūlapaṇṇāsa";
} else if (mn <= 100) {
suttaPush.mainDivName = "Majjhimapaṇṇāsa";
} else if (mn <= 152) {
suttaPush.mainDivName = "Uparipaṇṇāsa";
}
mn++;
}

// for acronym of vaggas (SN ans AN)
let acroVagga = suttaPush.acronym.split("/")[0];
// acroVagga = acroVagga.split("-")[0];

const vaggaPush = {
name: suttaVagga.name,
parent: suttaPush.mainDivName
};

// bellow is very complicated but it works. there is a lot of exeptions that you need to take in account when creating the vagga from the sutta. Not easy...

let lastSubDiv = tree[tree.length - 2].subDiv;

if (JSON.stringify(vaggaPush) !== JSON.stringify(vaggaPushOld)) {
const vaggaPushCopy = JSON.parse(JSON.stringify(vaggaPush));
vaggaPushCopy["acronym"] = acroVagga;
if (
suttaPush.acronym.includes("SN") ||
suttaPush.acronym.includes("AN")
) {
let ac = vaggaPush2.acronym;
// if (ac) ac = ac.split("-")[0]);
if (lastSubDiv) {
lastSubDiv.includes("-")
? (lastSubDiv = lastSubDiv.split("-")[1])
: (lastSubDiv = lastSubDiv.split("-")[0]);
}
lastSubDiv
? (vaggaPush2.acronym = ac.split("-")[0] + "-" + lastSubDiv)
: (vaggaPush2.acronym = ac);
if (vaggaPush2.name) tree.push(vaggaPush2);
// tree.push(vaggaPushCopy);
vaggaPush2 = JSON.parse(JSON.stringify(vaggaPushCopy));
} else tree.push(vaggaPush);
}

// if (suttaPush.parent != tree[tree.length - 1].parent)
// tree.push({ test: 123 });

vaggaPushOld = vaggaPush;

// for div of SN

if (suttaPush.mainDivName.includes("Saṃyutta")) {
sn = suttaPush.acronym.split(" ")[1].split(".")[0];
if (sn <= 11) {
snDiv = "Sagāthā Vagga";
} else if (sn <= 21) {
snDiv = "Nidāna Vagga";
} else if (sn <= 34) {
snDiv = "Khandha Vagga";
} else if (sn <= 44) {
snDiv = "Saḷāyatana Vagga@"; // duplicate @ is removed at display
} else {
snDiv = "Mahā Vagga@"; // duplicate @ is removed at display
}
divPush = {
name: suttaPush.mainDivName,
parent: snDiv,
acronym:
suttaPush.acronym.split(" ")[0] +
" " +
suttaPush.acronym.split(" ")[1].split(".")[0]
};
sn++;
}

if (JSON.stringify(divPush) !== JSON.stringify(divPushOld)) {
tree.push(divPush);
}

divPushOld = divPush;

// for div of AN

if (suttaPush.mainDivName.includes("Nipāta"))
divAPush = {
name: suttaPush.mainDivName,
parent: "Aṅguttara Nikāya",
acronym:
suttaPush.acronym.split(" ")[0] +
" " +
suttaPush.acronym.split(" ")[1].split(".")[0]
};

if (JSON.stringify(divAPush) !== JSON.stringify(divAPushOld)) {
tree.push(divAPush);
}

divAPushOld = divAPush;

// final push

// tree.push(suttaPush);
}
});

// remove sn and an sutta, keep just vagga, too many of them

const treeX = [];
tree.forEach((d) => {
if (d.uid) {
if (!d.uid.includes("sn") && !d.uid.includes("an")) {
treeX.push(d);
}
} else {
treeX.push(d);
}
});

// const treeX = tree; // comment top section to have all suttas

// avoid duplicate names

let alreadySeen = [];
let duplicate = [];
treeX.forEach((d) =>
alreadySeen[d.name] ? (d.name = d.name + " ") : (alreadySeen[d.name] = true)
);
console.log(treeX);
return treeX;
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
str = "258"
Insert cell
str.split("-")
Insert cell
dn = suttas.filter((d) => d.acronym.includes("DN"))
Insert cell
mn = suttas.filter((d) => d.acronym.includes("MN"))
Insert cell
sn = suttas.filter((d) => d.acronym.includes("SN"))
Insert cell
an = suttas.filter((d) => d.uid.includes("an"))
Insert cell
knExtFiltered = knExt.filter(
(d) => d.extension != "" && knExt.indexOf(d) < 2750
) // abhidhamma start at 1750
Insert cell
kn = suttas.filter(
(d) =>
!d.acronym.includes("DN") &&
!d.acronym.includes("MN") &&
!d.acronym.includes("SN") &&
!d.acronym.includes("AN")
)
Insert cell
viewof table2 = Inputs.table(knExt, {})
Insert cell
console.log(knExt)
Insert cell
knExt = kn.map((d) => {
if (d == undefined) return;
let letters = d.uid.split(/\d/)[0];
let numbers = d.uid.slice(letters.length);
let extension = uid_expansions.find((el) => el.uid == letters);
let extName = extension ? extension.name : "";
let vaggaFind = vaggas.find(
(el) =>
el.subdivision_uid == d.subdivision_uid && el.number == d.vagga_number
);
let vaggaName = vaggaFind ? vaggaFind.name : "";
return {
uid: d.uid,
letters: letters,
numbers: numbers,
extension: extName,
name: d.name,
vaggaNum: d.vagga_number,
vaggaName: vaggaName,
numInVagga: d.number_in_vagga,
acronym: d.acronym
};
})
Insert cell
Insert cell
Insert cell
viewof table = Inputs.table(vaggas, {})
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more