import { type Editor } from "./main"; import { introduction } from "./documentation/introduction"; import { oscilloscope } from "./documentation/oscilloscope"; import { synchronisation } from "./documentation/synchronisation"; import { samples } from "./documentation/samples"; import { chaining } from "./documentation/chaining"; import { software_interface } from "./documentation/interface"; import { interaction } from "./documentation/interaction"; import { time } from "./documentation/time"; import { linear_time } from "./documentation/linear_time"; import { cyclical_time } from "./documentation/cyclical_time"; import { long_forms } from "./documentation/long_forms"; import { midi } from "./documentation/midi"; import { code } from "./documentation/code"; import { about } from "./documentation/about"; import { sound } from "./documentation/engine"; import { shortcuts } from "./documentation/keyboard"; import { mouse } from "./documentation/mouse"; import { patterns } from "./documentation/patterns"; import { functions } from "./documentation/functions"; import { variables } from "./documentation/variables"; import { probabilities } from "./documentation/probabilities"; import { lfos } from "./documentation/lfos"; import { ziffers } from "./documentation/ziffers"; import { reference } from "./documentation/reference"; import { synths } from "./documentation/synths"; import { bonus } from "./documentation/bonus"; // Setting up the Markdown converter with syntax highlighting import showdown from "showdown"; import showdownHighlight from "showdown-highlight"; import { createDocumentationStyle } from "./DomElements"; showdown.setFlavor("github"); export const key_shortcut = (shortcut: string): string => { return `${shortcut}`; }; export const makeExampleFactory = (application: Editor): Function => { const make_example = ( description: string, code: string, open: boolean = false ) => { const codeId = `codeExample${application.exampleCounter++}`; // Store the code snippet in the data structure application.api.codeExamples[codeId] = code; return `
${description} \`\`\`javascript ${code} \`\`\`
`; }; return make_example; }; export const documentation_factory = (application: Editor) => { // Initialize a data structure to store code examples by their unique IDs application.api.codeExamples = {}; return { introduction: introduction(application), interface: software_interface(application), interaction: interaction(application), code: code(application), time: time(application), linear: linear_time(application), cyclic: cyclical_time(application), longform: long_forms(application), sound: sound(application), samples: samples(application), synths: synths(application), chaining: chaining(application), patterns: patterns(application), ziffers: ziffers(application), midi: midi(application), lfos: lfos(application), variables: variables(application), probabilities: probabilities(application), functions: functions(application), reference: reference(), shortcuts: shortcuts(application), mouse: mouse(application), oscilloscope: oscilloscope(application), synchronisation: synchronisation(application), bonus: bonus(application), about: about(), }; }; export const showDocumentation = (app: Editor) => { if (document.getElementById("app")?.classList.contains("hidden")) { document.getElementById("app")?.classList.remove("hidden"); document.getElementById("documentation")?.classList.add("hidden"); app.exampleIsPlaying = false; } else { document.getElementById("app")?.classList.add("hidden"); document.getElementById("documentation")?.classList.remove("hidden"); // Load and convert Markdown content from the documentation file let style = createDocumentationStyle(app); let bindings = Object.keys(style).map((key) => ({ type: "output", regex: new RegExp(`<${key}([^>]*)>`, "g"), //@ts-ignore replace: (match, p1) => `<${key} class="${style[key]}" ${p1}>`, })); updateDocumentationContent(app, bindings); } }; export const hideDocumentation = () => { if (document.getElementById("app")?.classList.contains("hidden")) { document.getElementById("app")?.classList.remove("hidden"); document.getElementById("documentation")?.classList.add("hidden"); } }; export const updateDocumentationContent = (app: Editor, bindings: any) => { const converter = new showdown.Converter({ emoji: true, moreStyling: true, backslashEscapesHTMLTags: true, extensions: [showdownHighlight({ auto_detection: true }), ...bindings], }); const converted_markdown = converter.makeHtml( app.docs[app.currentDocumentationPane] ); document.getElementById("documentation-content")!.innerHTML = converted_markdown; };