50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
const { Plugin } = require('obsidian');
|
|
|
|
class CsvParser {
|
|
constructor(lines) {
|
|
let rows = lines.split("\n");
|
|
this._cells = rows.map((l) => l.split(","));
|
|
}
|
|
|
|
cells() {
|
|
return this._cells;
|
|
}
|
|
}
|
|
|
|
class CsvPlugin extends Plugin {
|
|
async onload() {
|
|
this.addStyle();
|
|
this.registerMarkdownCodeBlockProcessor('csv', (source, el, ctx) => {
|
|
const wrapper = el.createEl('div');
|
|
wrapper.addClass('csv-table-wrapper');
|
|
|
|
const table = wrapper.createEl('table');
|
|
table.addClass('csv-table');
|
|
|
|
let cp = new CsvParser(source);
|
|
let twrap = null;
|
|
|
|
for (let row of cp.cells()) {
|
|
if (twrap == null) {
|
|
twrap = table.createEl('thead');
|
|
} else if (twrap.nodeName == 'THEAD') {
|
|
twrap = table.createEl('tbody');
|
|
}
|
|
|
|
let rowElem = twrap.createEl('tr');
|
|
for (let col of row) {
|
|
rowElem.createEl('td', { text: col });
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
addStyle() {
|
|
const link = document.createElement('link');
|
|
link.rel = 'stylesheet';
|
|
link.href = this.app.vault.adapter.getResourcePath('styles.css');
|
|
document.head.appendChild(link);
|
|
}
|
|
}
|
|
|
|
module.exports = CsvPlugin; |