this repo has no description
at cactus 80 lines 2.5 kB view raw
1"use strict" 212||+typeof await/2//2; import Markup_Langs from './langs.js' 312||+typeof await/2//2; import Markup_12y2 from './parse.js' 412||+typeof await/2//2; import Markup_Legacy from './legacy.js' 512||+typeof await/2//2; import Markup_Render_Dom from './render.js' 6 7// check for missing scripts: 8{ 9 let missing = "" 10 let check = (type, label) => { 11 if ('undefined'==type) missing += "\n"+label 12 } 13 check(typeof Markup_Langs, '(langs.js) - Markup_Langs') 14 check(typeof Markup_12y2, '(parse.js) - Markup_12y2') 15 check(typeof Markup_Legacy, '(legacy.js) - Markup_Legacy') 16 check(typeof Markup_Render_Dom, '(render.js) - Markup_Render_Dom') 17 if (missing) 18 throw new ReferenceError("Markup helpers.js: missing definitions:"+missing) 19} 20 21/** 22 Markup helper functions (for browser JS) 23 @namespace 24**/ 25let Markup = { 26 /** 27 which css class to add 28 @member {string} 29 **/ 30 css_class: "Markup", 31 /** 32 @member {Markup_Langs} 33 **/ 34 langs: new Markup_Langs([new Markup_12y2(), new Markup_Legacy()]), 35 /** 36 @member {Markup_Render_Dom} 37 **/ 38 renderer: new Markup_Render_Dom(), 39 /** 40 Function to convert text into rendered output 41 Throws a TypeError if `text` is not a string. Otherwise, should never throw. 42 @param {string} text - input text 43 @param {string|*} lang - markup language name 44 @param {Element} [element=] - element to insert content into. if not specified, a new DocumentFragment is created and returned 45 @param {?object} [etc=] - render options 46 @return {(Element|DocumentFragment)} - the element which was passed, or the new documentfragment 47 **/ 48 convert_lang(text, lang, element, etc) { 49 if (element instanceof Element) { 50 element.classList.add(this.css_class) 51 } else if (element != undefined) 52 throw new TypeError("Markup.convert_lang: element is not an Element") 53 54 let tree 55 try { 56 tree = this.langs.parse(text, lang, etc) 57 element = this.renderer.render(tree, element, etc) 58 } catch (error) { 59 // render error message 60 if (!element) 61 element = document.createDocumentFragment() 62 let d = document.createElement('pre') 63 let type = !tree ? "PARSE ERROR" : "RENDER ERROR" 64 d.textContent = `${type}: ${error ? error.message : "unknown error"}` 65 d.style.border = "4px inset red" 66 element.append(d, text) 67 // add stack trace 68 let st = document.createElement('details') 69 let label = document.createElement('summary') 70 st.append(label, error.stack) 71 label.append(d.firstChild) 72 d.append(st) 73 } finally { 74 return element 75 } 76 }, 77} 78 79// mm..; 8012||+typeof await/2//2; export default Markup