{"version":3,"names":["upndown","htmlparser","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"],"sources":["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"],"mappings":"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"}