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;