diff --git a/main.ts b/main.ts index 28cbf55..33e82e5 100644 --- a/main.ts +++ b/main.ts @@ -1,11 +1,11 @@ -import { App, Editor, MarkdownView, Plugin } from 'obsidian'; +import { Plugin } from 'obsidian'; import * as venn from "@upsetjs/venn.js"; import * as d3 from "d3"; import * as yaml from "js-yaml"; import $ from "jquery"; import { Color } from '@bluefirex/color-ts'; -export default class MyPlugin extends Plugin { +export default class InterweavePlugin extends Plugin { makeString(): string { let outString: string = ''; @@ -16,12 +16,39 @@ export default class MyPlugin extends Plugin { return outString; } + getSetsById(id: string, sets: string): SVGElement[] { + return $("."+id).find("g") + .toArray() + .filter((element) => $(element).attr("data-venn-sets") == sets) + } + + processAppearance(diagram: any, id: string) { + for( let i = 0; i < diagram.length; i++ ) { + const d_element = diagram[i]; + d_element.color = d_element.color == undefined ? "#FF0000" : d_element.color; + d_element.opacity = d_element.opacity == undefined ? 0.4 : d_element.opacity; + const sets: string = d_element.sets.join("_"); + this.initTimeout(id, sets, d_element); + } + } + + initTimeout(id: string, sets: string, d_element: any) { + window.setTimeout(() => { + this.getSetsById(id, sets).forEach((element: any) => $(element).find("path").css({"fill-opacity": d_element.opacity, "fill": d_element.color})); + let clr = Color.fromString(d_element.color); + try { + if( clr == null ) throw new Error('Null color'); + this.getSetsById(id, sets) + .forEach((element: any) => $(element).find("text").css("fill", clr.isDark() ? "#FFFFFF" : "#000000")); + } catch(e) { + this.getSetsById(id, sets) + .forEach((element: any) => $(element).find("text").css("fill", "#FFFFFF")); + } + }, 80); + } async onload() { - // When registering intervals, this function will automatically clear the interval when the plugin is disabled. - this.registerInterval(window.setInterval(() => console.log('setInterval'), 5 * 60 * 1000)); - - this.registerMarkdownCodeBlockProcessor("interweave", (source, el, ctx) => { + this.registerMarkdownCodeBlockProcessor("interweave", (source, el) => { try { let diagram: any = yaml.load(source, { json: true }); const id = "interweave-"+this.makeString(); @@ -29,33 +56,7 @@ export default class MyPlugin extends Plugin { di.addClass(id); var chart = venn.VennDiagram(); d3.select(di).datum(diagram).call(chart); - for( let i = 0; i < diagram.length; i++ ) { - const d_element = diagram[i]; - d_element.color = d_element.color == undefined ? "#FF0000" : d_element.color; - d_element.opacity = d_element.opacity == undefined ? 0.4 : d_element.opacity; - const sets: string = d_element.sets.join("_"); - window.setTimeout(function() { - $("."+id).find("g") - .toArray() - .filter((element) => $(element).attr("data-venn-sets") == sets) - .forEach((element) => $(element).find("path").css({"fill-opacity": d_element.opacity, "fill": d_element.color})); - let clr = Color.fromString(d_element.color); - try { - if( clr == null ) { - throw new Error('Null color'); - } - $("."+id).find("g") - .toArray() - .filter((element) => $(element).attr("data-venn-sets") == sets) - .forEach((element) => $(element).find("text").css("fill", clr.isDark() ? "#FFFFFF" : "#000000")); - } catch(e) { - $("."+id).find("g") - .toArray() - .filter((element) => $(element).attr("data-venn-sets") == sets) - .forEach((element) => $(element).find("text").css("fill", "#FFFFFF")); - } - }, 80); - } + this.processAppearance(diagram, id); } catch(e) { let di = el.createEl("pre"); di.setText("Error parsing Interweave diagram.\nIt's syntax should look like this:\n- sets:\n - A\n size: 16\n color: \"#FF0000\"\n opacity: 0.3");