{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-bp2019/src/external/upndown.js"],"names":["htmlparser","upndown","constructor","decodeEntities","init","olstack","inlineelements","htmlblocklevelelement","tabindent","nbsp","bullet","parse","html","cbk","handler","DomHandler","err","dom","withDomLvl1","withStartIndices","p","Parser","write","end","convert","options","Promise","resolve","Function","md","convertDom","err2","markdown","bind","keepHtml","walkNodes","then","regx","RegExp","trim","replace","catch","nodes","self","topres","toprej","promises","nodekey","push","reject","walkNode","all","results","join","lenode","type","data","isText","text","children","innerMarkdown","wrapNode","method","name","wrap_generic","prevNonBlankText","getPreviousSiblingNonBlankText","isPrevNonBlankTextBlock","isBlock","isInline","isList","allText","node","forEach","ea","hasAncestorOfType","prev","next","parent","isFirstChild","isLastChild","htmlattribs","attrs","Object","keys","attribs","attrnamekey","isHtmlBlockLevelElement","gen_attribs","filter","length","result","map","split","eaClass","wrap_h1","wrap_h2","wrap_h3","wrap_h4","wrap_h5","wrap_h6","wrap_blockquote","wrap_pre","lang","codeNode","find","codeClass","m","match","wrap_code","wrap_ul","wrap_ol","wrap_li","k","n","firstChildNonBlankText","getFirstChildNonBlankText","prevsibling","wrap_p","wrap_input","checked","wrap_label","wrap_br","wrap_hr","wrap_strong","wrap_b","wrap_em","wrap_i","wrap_a","url","getAttrOrFalse","title","wrap_img","alt","src","tagnames","indexOf","tag","go","isFirstChildNonText","getFirstChildNonText","i","attr"],"mappings":"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","file":"upndown.js","sourcesContent":["'use strict';\n\nimport htmlparser from './htmlparser2.js';\n\nexport default class upndown {\n\n    constructor({ decodeEntities = true } = {}) {\n        this.decodeEntities = decodeEntities;\n        this.init()\n    }\n\n    init() {\n        this.olstack = [];\n        this.inlineelements = ['strong', 'b', 'i', 'em', 'u', 'a', 'img', 'code', 'input', 'label'];\n        this.htmlblocklevelelement = ['div', 'iframe', 'script'];\n        this.tabindent = '    ';\n        this.nbsp = '\\u0000';\n        this.bullet = \"* \"\n    }\n\n    parse(html, cbk) {\n        let handler = new htmlparser.DomHandler(function(err, dom) {\n            if(err) { return cbk(err, null); }\n            return cbk(null, dom);\n        }, { withDomLvl1: false, withStartIndices: false });\n\n        let p = new htmlparser.Parser(handler, { decodeEntities: this.decodeEntities });\n        p.write(html);\n        p.end();\n    }\n\n    convert(html, cbk, options) {\n      return new Promise(resolve => {\n        if (!(cbk instanceof Function)) {\n          options = cbk;\n          cbk = function(err, md) { resolve(md || err) }\n        }  \n        this.parse(html, function(err, dom) {\n            if(err) { return cbk(err, null); }\n            return this.convertDom(dom, function(err2, markdown) {\n                if(err2) { return cbk(err2, null); }\n                return cbk(null, markdown);\n            }, options);\n        }.bind(this));      \n      })\n    }\n\n    convertDom(dom, cbk, { keepHtml = false } = {}) {\n        this.walkNodes(dom, { keepHtml })\n            .then(function(markdown) {\n                if(!markdown) { markdown = ''; }\n                  let regx = new RegExp(this.nbsp, 'g');\n                  cbk(null, markdown.trim().replace(regx, ' '));\n            }.bind(this))\n            .catch(function(err) {\n                debugger\n                cbk(err, null);\n            });\n    }\n\n    walkNodes(nodes, options) {\n\n        let self = this;\n\n        return new Promise(function(topres, toprej) {\n            let promises = [];\n            for(let nodekey in nodes) {\n                promises.push(new Promise(function(resolve, reject) { self.walkNode(resolve, reject, options, nodes[nodekey]); }));\n            }\n\n            Promise.all(promises)\n                .then(function(results) { topres(results.join('')); })\n                .catch(function(err) { toprej(err); });\n        }).catch(function(err) { throw err; });\n    }\n\n    walkNode(resolve, reject, options, lenode) {\n      \n        if(lenode && lenode.type == \"comment\") {\n          resolve(\"\\n<!--\" + lenode.data + \"-->\")\n        } else if(this.isText(lenode)) {\n            resolve(this.text(lenode));\n        } else {\n            this.walkNodes(lenode.children, options)\n                .then(function(innerMarkdown) { this.wrapNode(resolve, reject, options, lenode, innerMarkdown); }.bind(this))\n                .catch(function(err) { reject(err); });\n        }\n    }\n\n    wrapNode(resolve, reject, options, lenode, innerMarkdown) {\n        \n        let markdown = '';\n        let method = 'wrap_' + lenode.name;\n\n        if(method in this) {\n            markdown = this[method](lenode, innerMarkdown);\n        } else {\n            if(options.keepHtml) {\n                markdown = this.wrap_generic(lenode, innerMarkdown);\n            } else {\n                markdown = innerMarkdown;\n            }\n        }\n\n        // Collapsing margins between block elements into a single line.\n        // Pre-margins between an inline element and it's next sibling block are handled here also\n        // Block-level elements handle themselves their post-margin\n        // This is so because we're *descending* the dom tree :)\n\n        let prevNonBlankText = this.getPreviousSiblingNonBlankText(lenode);\n        if(prevNonBlankText) {\n            let isPrevNonBlankTextBlock = this.isBlock(prevNonBlankText);\n            if(this.isInline(lenode)) {\n                // current node is inline, previous was block : adding an extra new line\n                if(isPrevNonBlankTextBlock) { markdown = '\\n' + markdown; }\n            } else if(lenode.name !== 'br' && !this.isList(lenode) && this.isBlock(lenode)) {\n                // current node is block, previous was inline or text : adding an extra new line\n                if(!isPrevNonBlankTextBlock) { markdown = '\\n' + markdown; }\n            }\n        }\n\n        resolve(markdown);\n    }\n\n    // handlers\n  \n    allText(node) {\n      let text = node.data || \"\";\n      if (node.children) {\n        node.children.forEach(ea => {\n          text += this.allText(ea)        \n        })\n      }\n      return text\n    }\n\n    text(node) {\n        let text = node.data;\n\n        if(!text) { return ''; }\n\n        if(this.hasAncestorOfType(node, ['code', 'pre'])) { return text; }\n\n        // normalize whitespace\n\n        if(node.prev) {\n            if(this.isInline(node.prev)) {\n                text = text.replace(/^\\n+/, ' ');    // trimming newlines (would be converted to untrimmed spaces otherwise)\n            } else {\n                text = text.replace(/^\\n+/, '');\n            }\n        }\n\n        if(node.next) {\n            if(this.isInline(node.next)) {\n                text = text.replace(/\\n+$/, ' ');    // trimming newlines (would be converted to untrimmed spaces otherwise)\n            } else {\n                text = text.replace(/\\n+$/, '');\n            }\n        }\n\n        text = text\n            .replace('\\n', ' ')         // converting inner newlines to spaces\n            .replace(/\\s+/g, ' ');      // converting sequences of whitespace to single spaces\n\n        if(\n            // if prev node is block, this node is not displayed on the same line, so left-trim\n            (node.prev && this.isBlock(node.prev)) ||\n\n            // if current node is block, this node is not displayed on the same line either, so left-trim\n            (node.parent && this.isBlock(node.parent) && this.isFirstChild(node))\n        ) {\n            text = text.replace(/^\\s*/, '');\n        }\n\n        if(node.parent && this.isBlock(node.parent) && this.isLastChild(node)) {\n            text = text.replace(/\\s*$/, '');\n        }\n\n        return text;\n    }\n\n    wrap_generic(node, markdown) {\n\n        let htmlattribs = '';\n        // if (!node.type == \"comment\") {\n        //   return \"<!-- \" + node.textContent + \" -->\"\n        // }\n\n        let attrs = Object.keys(node.attribs);\n        for(let attrnamekey in attrs) {\n            htmlattribs += \" \" + attrs[attrnamekey] + '=\"' + node.attribs[attrs[attrnamekey]] + '\"';\n        }\n\n        return '<' + node.name + htmlattribs + '>' + markdown.replace(/\\s+/gm, ' ') + '</' + node.name + '>' + (this.isHtmlBlockLevelElement(node.name) ? '\\n' : '');\n        //return markdown;\n    }\n\n    // Block level elements\n\n    gen_attribs(attribs) {\n      var keys = Object.keys(attribs)\n      if (!attribs) return \"\"\n      keys = keys.filter(ea => ea != \"data-source-line\") // #Meta attribute... used by sourcemap\n      \n      if (keys.length == 0) return \"\"\n      var result = keys.map(ea => {\n        if (ea == \"class\") {\n          if (attribs[ea].length == 0) return \"\"\n          return attribs[ea].split(\" \").map(eaClass => \".\"+eaClass).join(\" \")\n        } else {\n          if (attribs[ea] && attribs[ea] !== null && attribs[ea] !== \"null\") {\n            return ea + '=\"' +attribs[ea] +'\"'\n          }\n        }\n      }).filter(ea => ea).join(\" \")\n      if (result == \"\") return \"\"\n      return \"{\" + result + \"}\" \n    }\n  \n    wrap_h1(node, markdown) {\n      return '\\n# ' + markdown + this.gen_attribs(node.attribs) +'\\n'; }\n    wrap_h2(node, markdown) { return '\\n## ' + markdown + this.gen_attribs(node.attribs) + '\\n'; }\n    wrap_h3(node, markdown) { return '\\n### ' + markdown + this.gen_attribs(node.attribs) +'\\n'; }\n    wrap_h4(node, markdown) { return '\\n#### ' + markdown + this.gen_attribs(node.attribs) +'\\n'; }\n    wrap_h5(node, markdown) { return '\\n##### ' + markdown + this.gen_attribs(node.attribs) +'\\n'; }\n    wrap_h6(node, markdown) { return '\\n###### ' + markdown + this.gen_attribs(node.attribs) +'\\n'; }\n\n    wrap_blockquote(node, markdown) { return '\\n' + markdown.trim().replace(/^/gm, '> ') + '\\n'; }\n    wrap_pre(node, markdown) { \n      var lang =\"\"\n      var codeNode =  node.children.find(ea => ea.name == 'code' )\n      var codeClass = codeNode && node.children[0].attribs[\"class\"]\n      if (codeClass) {\n        var m = codeClass.match(/language-([a-zA-Z0-9]+)/)\n        if (m) {\n          codeNode.attribs[\"class\"] = codeNode.attribs[\"class\"].replace(m[0],\"\") // we handle this here\n          lang = m[1] // sorry... that is is so complicated! #Jens\n        }\n      }\n      return '\\n```'+lang + \" \"+ this.gen_attribs((codeNode ? codeNode : node).attribs) +'\\n' + this.allText(node) + '```\\n'; \n    }\n\n    wrap_code(node, markdown) {\n        if(this.hasAncestorOfType(node, ['pre'])) {\n            return markdown;\n        }\n\n        return '`' + markdown.trim() + '`';\n    }\n\n    wrap_ul(node, markdown) { return '\\n' + markdown.trim() + '\\n'; }\n    wrap_ol(node, markdown) { return this.wrap_ul(node, markdown); }\n    wrap_li(node, markdown) {\n\n        let bullet = this.bullet;\n\n        if(node.parent && node.parent.type === 'tag' && node.parent.name === 'ol') {\n            let k = 1;\n            let n = node;\n            while(n.prev) {\n                if(n.prev.type === 'tag' && n.prev.name === 'li') { k++; }\n                n = n.prev;\n            }\n\n            bullet = k + '. ';\n        }\n\n        let firstChildNonBlankText = this.getFirstChildNonBlankText(node);\n        if(firstChildNonBlankText) {\n            if(this.isList(firstChildNonBlankText)) {\n                bullet = this.tabindent;\n            } else if(this.isBlock(firstChildNonBlankText)) {\n                // p in li: add newline before\n                bullet = '\\n' + bullet;\n            } else {\n                let prevsibling = this.getPreviousSiblingNonBlankText(node);\n                if(\n                    prevsibling && prevsibling.type === 'tag' && prevsibling.name === 'li' &&\n                    this.isBlock(this.getFirstChildNonBlankText(prevsibling))\n                ) {\n                    bullet = '\\n' + bullet;\n                }\n            }\n        }\n\n        return bullet + markdown.replace(/^/gm, this.tabindent).trim() + '\\n';\n    }\n\n    wrap_p(node, markdown) { return '\\n' + markdown + '\\n'; }\n\n    wrap_input(node, markdown) { \n      if (node.attribs.type == \"checkbox\" ) {\n        return `[${node.attribs.checked ? \"x\" : \" \"}]`; \n      } else {\n        return \"<\" + node.name + \" \" + Object.keys(node.attribs).map(ea => \n          ea + \"=\"+ '\"' + node.attribs[ea] + '\"').join(\" \") +\">\" + \n          \"</\" + node.name  +\">\"; \n      }\n    }\n\n    wrap_label(node, markdown) { \n      // #TODO should we keep labels? \n      return markdown; \n    }\n  \n    wrap_br(/*node, markdown*/) { return '  \\n'; }\n\n    wrap_hr(/*node, markdown*/) { return '\\n* * *\\n'; }\n\n    // Inline elements\n\n    wrap_strong(node, markdown) { return '**' + markdown + '**'; }\n    wrap_b(node, markdown) { return this.wrap_strong(node, markdown); }\n\n    wrap_em(node, markdown) { return '*' + markdown + '*'; }\n    wrap_i(node, markdown) { return this.wrap_em(node, markdown); }\n\n    wrap_a(node, markdown) {\n\n        let url = this.getAttrOrFalse('href', node);\n        let title = this.getAttrOrFalse('title', node);\n\n        if (!url) {\n            return markdown;\n        } else if (url && url === markdown && (!title || title === '')) {\n            return '<' + url + '>';\n        } else if ((url === markdown || url.replace(/^mailto:/, '') === markdown) && (!title || title === '')) {\n            return '<' + url.replace(/^mailto:/, '') + '>';\n        }\n        if (markdown.match(/^#/)) {\n          return markdown // we don't need the generated URL\n        }\n        return '[' + markdown + '](' + (url ? url : '') + (title ? ' \"' + title + '\"' : '') + ')';\n    }\n\n    wrap_img(node/*, markdown*/) {\n        let alt = this.getAttrOrFalse('alt', node);\n        let src = this.getAttrOrFalse('src', node);\n        let title = this.getAttrOrFalse('title', node);\n        return '![' + (alt ? alt : '') + '](' + (src ? src : '') + (title ? ' \"' + title + '\"' : '') + ')';\n    }\n\n    // helpers\n\n    hasAncestorOfType(node, tagnames) {\n\n        let parent = node.parent;\n        while (parent) {\n            if (tagnames.indexOf(parent.name) > -1) { return true; }\n            parent = parent.parent;\n        }\n\n        return false;\n    }\n\n    isInline(node) {\n        return node && node.type === 'tag' && this.inlineelements.indexOf(node.name) >= 0;\n    }\n\n    isBlock(node) {\n        return node && (node.type === 'tag' || node.type === 'script') && !this.isInline(node);\n    }\n\n    isText(node) {\n        return node && node.type === 'text';\n    }\n\n    isList(node) {\n        return node && node.type === 'tag' && (node.name === 'ul' || node.name === 'ol');\n    }\n\n    isHtmlBlockLevelElement(tag) {\n        return this.htmlblocklevelelement.indexOf(tag) >= 0;\n    }\n\n    getPreviousSiblingNonBlankText(node) {\n\n        let prevsibling = node;\n        let go = true;\n\n        while (go) {\n\n            if (prevsibling) {\n                prevsibling = prevsibling.prev;\n            }\n\n            if (prevsibling && (prevsibling.type !== 'text' || prevsibling.data.trim() !== '')) {\n                return prevsibling;\n            }\n\n            if (!(prevsibling && !this.isFirstChildNonText(prevsibling))) {\n                break;\n            }\n        }\n\n        return null;\n    }\n\n    getFirstChildNonText(node) {\n        let i = 0;\n\n        while (i < node.children.length) {\n            if (node.children[i] && node.children[i].type !== 'text') {\n                return node.children[i];\n            }\n            i++;\n        }\n\n        return null;\n    }\n\n    getFirstChildNonBlankText(node) {\n        let i = 0;\n\n        while (i < node.children.length) {\n            if (node.children[i] && node.children[i].type !== 'text' || node.children[i].data.trim() !== '') {\n                return node.children[i];\n            }\n            i++;\n        }\n\n        return null;\n    }\n\n\n    isFirstChild(node) {\n        return !(!!node && !!node.prev);\n    }\n\n    isFirstChildNonText(node) {\n        return node.parent && (this.getFirstChildNonText(node.parent) === node);\n    }\n\n    isLastChild(node) {\n        return !(node.next);\n    }\n\n    getAttrOrFalse(attr, node) {\n        if(attr in node.attribs) {\n            return node.attribs[attr];\n        }\n\n        return false;\n    }\n}\n"]}