'+(escaped?code:escape$1(code,!0))+"
\n":""+(escaped?code:escape$1(code,!0))+"
\n"}blockquote(quote){return`\n${quote}\n`}html(html,block){return html}heading(text,level,raw){return`
${text}
\n`}table(header,body){return body&&(body=`${body}`),"${text}
`}br(){return"An error occurred:
"+escape$1(e.message+"",!0)+"";return async?Promise.resolve(msg):msg}if(async)return Promise.reject(e);throw e}}}_exports.Marked=Marked;const markedInstance=new Marked;function marked(src,opt){return markedInstance.parse(src,opt)}marked.options=marked.setOptions=function(options){return markedInstance.setOptions(options),marked.defaults=markedInstance.defaults,changeDefaults(marked.defaults),marked},marked.getDefaults=_getDefaults,marked.defaults=_defaults,marked.use=function(){return markedInstance.use(...arguments),marked.defaults=markedInstance.defaults,changeDefaults(marked.defaults),marked},marked.walkTokens=function(tokens,callback){return markedInstance.walkTokens(tokens,callback)},marked.parseInline=markedInstance.parseInline,marked.Parser=_Parser,marked.parser=_Parser.parse,marked.Renderer=_Renderer,marked.TextRenderer=_TextRenderer,marked.Lexer=_Lexer,marked.lexer=_Lexer.lex,marked.Tokenizer=_Tokenizer,marked.Hooks=_Hooks,marked.parse=marked;const options=marked.options;_exports.options=options;const setOptions=marked.setOptions;_exports.setOptions=setOptions;const use=marked.use;_exports.use=use;const walkTokens=marked.walkTokens;_exports.walkTokens=walkTokens;const parseInline=marked.parseInline;_exports.parseInline=parseInline;const parse=marked;_exports.parse=parse;const parser=_Parser.parse;_exports.parser=parser;const lexer=_Lexer.lex;_exports.lexer=lexer})); - -//# sourceMappingURL=marked.esm.min.js.map \ No newline at end of file diff --git a/amd/build/marked.esm.min.js.map b/amd/build/marked.esm.min.js.map deleted file mode 100644 index a3891a8..0000000 --- a/amd/build/marked.esm.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"marked.esm.min.js","sources":["../src/marked.esm.js"],"sourcesContent":["/**\n * marked v12.0.2 - a markdown parser\n * Copyright (c) 2011-2024, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n/**\n * Gets the original marked default options.\n */\nfunction _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nlet _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape$1(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n }\n else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon')\n return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n let source = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n }\n };\n return obj;\n}\nfunction cleanUrl(href) {\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n }\n catch (e) {\n return null;\n }\n return href;\n}\nconst noopTest = { exec: () => null };\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\')\n escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n }\n else {\n // add space before unescaped |\n return ' |';\n }\n }), cells = row.split(/ \\|/);\n let i = 0;\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n }\n else {\n while (cells.length < count)\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n }\n else if (currChar !== c && invert) {\n suffLen++;\n }\n else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n }\n else if (str[i] === b[0]) {\n level++;\n }\n else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction outputLink(cap, link, raw, lexer) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n const token = {\n type: 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n}\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n })\n .join('\\n');\n}\n/**\n * Tokenizer\n */\nclass _Tokenizer {\n options;\n rules; // set by the lexer\n lexer; // set by the lexer\n constructor(options) {\n this.options = options || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n }\n else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n // precede setext continuation with 4 spaces so it isn't a setext\n let text = cap[0].replace(/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g, '\\n $1');\n text = rtrim(text.replace(/^ *>[ \\t]?/gm, ''), '\\n');\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n const tokens = this.lexer.blockTokens(text);\n this.lexer.state.top = top;\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n // Get next list item\n const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n let raw = '';\n let itemContents = '';\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n }\n else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n let blankLine = false;\n if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n nextLine = rawLine;\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n }\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n // Horizontal rule found\n if (hrRegex.test(src)) {\n break;\n }\n if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLine.slice(indent);\n }\n else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n // paragraph continuation unless last line was a different block level element\n if (line.search(/[^ ]/) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLine.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n }\n else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list.raw += raw;\n }\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = raw.trimEnd();\n (list.items[list.items.length - 1]).text = itemContents.trimEnd();\n list.raw = list.raw.trimEnd();\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n list.loose = hasMultipleLineBreaks;\n }\n }\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!/[:|]/.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(/^\\||\\| *$/g, '').split('|');\n const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : [];\n const item = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: []\n };\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n for (const align of aligns) {\n if (/^ *-+: *$/.test(align)) {\n item.align.push('right');\n }\n else if (/^ *:-+: *$/.test(align)) {\n item.align.push('center');\n }\n else if (/^ *:-+ *$/.test(align)) {\n item.align.push('left');\n }\n else {\n item.align.push(null);\n }\n }\n for (const header of headers) {\n item.header.push({\n text: header,\n tokens: this.lexer.inline(header)\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map(cell => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell)\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^/i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n }\n else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^$/.test(trimmedUrl))) {\n return;\n }\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n }\n else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n }\n else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (/^$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n }\n else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title\n }, cap[0], this.lexer);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n }\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match)\n return;\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u))\n return;\n const nextChar = match[1] || match[2] || '';\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim)\n continue; // skip single * in __abc*abc__\n rLength = [...rDelim].length;\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0)\n continue; // Haven't found enough closing delimiters\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(cap[1]);\n href = 'mailto:' + text;\n }\n else {\n text = escape$1(cap[1]);\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(cap[0]);\n href = 'mailto:' + text;\n }\n else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n }\n else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (this.lexer.state.inRawBlock) {\n text = cap[0];\n }\n else {\n text = escape$1(cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n}\n\n/**\n * Block-Level Grammar\n */\nconst newline = /^(?: *(?:\\n|$))+/;\nconst blockCode = /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, / {4}/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /|$))/;\nconst html = edit('^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|\\\\n*|$)' // (4)\n + '|\\\\n*|$)' // (5)\n + '|?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n/**\n * Normal Block Grammar\n */\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText\n};\n/**\n * GFM Block Grammar\n */\nconst gfmTable = edit('^ *([^\\\\n ].*)\\\\n' // Header\n + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\nconst blockGfm = {\n ...blockNormal,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex()\n};\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nconst blockPedantic = {\n ...blockNormal,\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|
'\n + (escaped ? code : escape$1(code, true))\n + '
\\n';\n }\n return ''\n + (escaped ? code : escape$1(code, true))\n + '
\\n';\n }\n blockquote(quote) {\n return `\\n${quote}\\n`;\n }\n html(html, block) {\n return html;\n }\n heading(text, level, raw) {\n // ignore IDs\n return `
${text}
\\n`;\n }\n table(header, body) {\n if (body)\n body = `${body}`;\n return '${text}
`;\n }\n br() {\n return 'An error occurred:
'\n + escape$1(e.message + '', true)\n + '';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n\nconst markedInstance = new Marked();\nfunction marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function (options) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\n/**\n * Use Extension\n */\nmarked.use = function (...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n/**\n * Run callback for every token\n */\nmarked.walkTokens = function (tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nconst options = marked.options;\nconst setOptions = marked.setOptions;\nconst use = marked.use;\nconst walkTokens = marked.walkTokens;\nconst parseInline = marked.parseInline;\nconst parse = marked;\nconst parser = _Parser.parse;\nconst lexer = _Lexer.lex;\n\nexport { _Hooks as Hooks, _Lexer as Lexer, Marked, _Parser as Parser, _Renderer as Renderer, _TextRenderer as TextRenderer, _Tokenizer as Tokenizer, _defaults as defaults, _getDefaults as getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n//# sourceMappingURL=marked.esm.js.map\n"],"names":["_getDefaults","async","breaks","extensions","gfm","hooks","pedantic","renderer","silent","tokenizer","walkTokens","_defaults","changeDefaults","newDefaults","_exports","defaults","escapeTest","escapeReplace","RegExp","source","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","ch","escape$1","html","encode","test","replace","unescapeTest","unescape","_","n","toLowerCase","charAt","String","fromCharCode","parseInt","substring","caret","edit","regex","opt","obj","name","val","valSource","getRegex","cleanUrl","href","encodeURI","e","noopTest","exec","splitCells","tableRow","count","cells","match","offset","str","escaped","curr","split","i","trim","shift","length","pop","splice","push","rtrim","c","invert","l","suffLen","currChar","slice","outputLink","cap","link","raw","lexer","title","text","state","inLink","token","type","tokens","inlineTokens","_Tokenizer","options","rules","constructor","this","space","src","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","map","node","matchIndentInNode","indentInNode","join","indentCodeCompensation","lang","inline","anyPunctuation","heading","trimmed","depth","hr","blockquote","top","blockTokens","list","bull","isordered","ordered","start","loose","items","itemRegex","itemContents","endsWithBlankLine","endEarly","line","t","repeat","nextLine","indent","trimStart","search","blankLine","nextBulletRegex","Math","min","hrRegex","fencesBeginRegex","headingBeginRegex","rawLine","ischecked","istask","task","checked","trimEnd","spacers","filter","hasMultipleLineBreaks","some","pre","def","tag","table","headers","aligns","rows","item","header","align","row","cell","lheading","paragraph","escape","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","b","indexOf","level","findClosingBracket","linkLen","reflink","links","nolink","emStrong","maskedSrc","prevChar","arguments","undefined","emStrongLDelim","punctuation","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","emStrongRDelimAst","emStrongRDelimUnd","lastIndex","lastCharLength","index","codespan","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","url","prevCapZero","_this$rules$inline$_b","_backpedal","inlineText","Tokenizer","bullet","_paragraph","_blockLabel","_tag","_comment","blockNormal","gfmTable","blockGfm","blockPedantic","_inlineComment","_inlineLabel","inlineNormal","blockSkip","reflinkSearch","inlinePedantic","inlineGfm","inlineBreaks","normal","_Lexer","inlineQueue","Object","create","lex","lexInline","next","lastToken","cutSrc","lastParagraphClipped","leading","tabs","extTokenizer","call","startBlock","startIndex","Infinity","tempSrc","tempStart","forEach","getStartIndex","errMsg","charCodeAt","console","error","Error","keepPrevChar","keys","includes","lastIndexOf","startInline","Lexer","_Renderer","infostring","_match","quote","body","listitem","checkbox","tablerow","content","tablecell","flags","strong","em","cleanHref","out","image","Renderer","_TextRenderer","TextRenderer","_Parser","textRenderer","parse","parseInline","renderers","genericToken","ret","parser","headingToken","codeToken","tableToken","j","k","blockquoteToken","listToken","itemBody","unshift","htmlToken","paragraphToken","textToken","escapeToken","tagToken","linkToken","imageToken","strongToken","emToken","codespanToken","delToken","Parser","_Hooks","static","Set","preprocess","markdown","postprocess","processAllTokens","Hooks","Marked","setOptions","parseMarkdown","use","callback","values","concat","_this$defaults$extens","_this$defaults$extens2","childTokens","flat","_len","args","Array","_key","pack","opts","ext","prevRenderer","_len2","_key2","apply","extLevel","prop","rendererProp","rendererFunc","_len3","_key3","tokenizerProp","tokenizerFunc","prevTokenizer","_len4","_key4","hooksProp","hooksFunc","prevHook","passThroughHooks","has","arg","Promise","resolve","then","_len5","_key5","packWalktokens","origOpt","warn","throwError","onError","prototype","toString","all","catch","message","msg","reject","markedInstance","marked","getDefaults"],"mappings":"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"} \ No newline at end of file diff --git a/amd/src/ai_manager.js b/amd/src/ai_manager.js index d224eba..27ea7c2 100644 --- a/amd/src/ai_manager.js +++ b/amd/src/ai_manager.js @@ -1,5 +1,4 @@ import {makeRequest} from 'local_ai_manager/make_request'; -import {exception as displayException} from 'core/notification'; /** * Get the async answer from the local_ai_manager. @@ -14,7 +13,6 @@ export const askLocalAiManager = async(purpose, prompt, options = []) => { try { result = await makeRequest(purpose, prompt, options); } catch (error) { - console.log(error); result.code = 'aiconnector'; result.result = error.error + " " + error.message; // For devs. diff --git a/amd/src/dialog.js b/amd/src/dialog.js index 1660064..f9fe907 100644 --- a/amd/src/dialog.js +++ b/amd/src/dialog.js @@ -64,7 +64,6 @@ class DialogModal extends Modal { modalConfig.removeOnClose = false; modalConfig.isVerticallyCentered = false; - // returnFocus: target, super.configure(modalConfig); @@ -107,7 +106,6 @@ export const init = async(params) => { templateContext: { title: strNewDialog, badge: badge, - // history: history, // history dynamically added. }, }); @@ -232,12 +230,9 @@ async function showModal() { * Webservice Get all conversations. */ const getConversations = async() => { - console.log("allConversations called"); try { allConversations = await externalServices.getAllConversations(userid, contextid); - console.log(allConversations); } catch (error) { - console.log(allConversations); displayException(error); } }; @@ -247,7 +242,6 @@ const getConversations = async() => { * @param {*} id */ const showConversation = (id = 0) => { - console.log("showConversation called"); // Dissallow changing conversations when question running. if (aiAtWork) { return; @@ -284,7 +278,6 @@ const enterQuestion = async(question) => { } const message = await userAllowed(); if (message !== '') { - console.log("User not allowed"); const notice = await getString('noticenewquestion', 'block_ai_chat'); await displayAlert(notice, message); aiAtWork = false; @@ -363,7 +356,7 @@ const enterQuestion = async(question) => { * Render reply. * @param {string} text */ -const showReply = async (text) => { +const showReply = async(text) => { // Get textblock. let fields = document.querySelectorAll('.ai_chat_modal .awaitanswer .text'); const field = fields[fields.length - 1]; @@ -378,7 +371,6 @@ const showReply = async (text) => { }; const showMessages = () => { - console.log("showMessages called"); conversation.messages.forEach((val) => { showMessage(val.message, val.sender); }); @@ -427,7 +419,6 @@ const showMessage = async(text, sender = '', answer = true) => { * @param {bool} deleted */ const newDialog = async(deleted = false) => { - console.log("newDialog called"); if (aiAtWork) { return; } @@ -449,7 +440,6 @@ const newDialog = async(deleted = false) => { * Delete /hide current dialog. */ const deleteCurrentDialog = () => { - console.log("deleteCurrentDialog called"); deleteCancelPromise( getString('delete', 'block_ai_chat'), getString('deletewarning', 'block_ai_chat'), @@ -475,7 +465,6 @@ const deleteCurrentDialog = () => { * Show conversation history. */ const showHistory = async() => { - console.log("showHistory called"); // Add current convo local representation, if not already there. if (allConversations.find(x => x.id === conversation.id) === undefined) { allConversations.push(conversation); @@ -598,7 +587,6 @@ const saveConversationLocally = (question, reply) => { * @param {*} hideinput */ const clearMessages = (hideinput = false) => { - console.log("clearMessages called"); const output = document.querySelector('.block_ai_chat-output'); output.innerHTML = ''; // For showing history. @@ -727,7 +715,6 @@ const errorHandling = async(requestresult, question, options) => { // And write generic error message in chatbot. requestresult.result = await getString('error', 'block_ai_chat'); - console.log(requestresult); return requestresult; }; @@ -738,11 +725,9 @@ const errorHandling = async(requestresult, question, options) => { */ const checkMessageHistoryLengthLimit = async(messages) => { const length = messages.length; - console.log("checkHistoryLengthLimit called"); if (length > maxHistory) { // Cut history. let shortenedMessages = [messages[0], ...messages.slice(-maxHistory)]; - console.log(shortenedMessages); // Show warning once per session. if (!maxHistoryWarnings.has(conversation.id)) { @@ -800,6 +785,7 @@ const setView = async(mode = '') => { * @returns {message} */ const userAllowed = async() => { + let message; if (tenantConfig.tenantenabled === false) { message = await getString('error_http403disabled', 'local_ai_manager'); return message; diff --git a/amd/src/helper.js b/amd/src/helper.js index ea9cc88..d82e1eb 100644 --- a/amd/src/helper.js +++ b/amd/src/helper.js @@ -47,7 +47,6 @@ export const focustextarea = () => { * Scroll to bottom of modal body. */ export const scrollToBottom = () => { - console.log("scroll to bottom called"); const modalContent = document.querySelector('.ai_chat_modal .modal-body .block_ai_chat-output-wrapper'); modalContent.scrollTop = modalContent.scrollHeight; }; @@ -71,7 +70,7 @@ export const escapeHTML = (str) => { '/': '/', }; - return String(str).replace(/[&<>"'`\/]/g, function(match) { + return String(str).replace(/[&<>"'`/]/g, function(match) { return escapeMap[match]; }); }; diff --git a/classes/external/delete_conversation.php b/classes/external/delete_conversation.php index 594dd8d..3ee147f 100644 --- a/classes/external/delete_conversation.php +++ b/classes/external/delete_conversation.php @@ -47,6 +47,8 @@ public static function execute_parameters(): external_function_parameters { * Execute the service. * * @param int $contextid + * @param int $userid + * @param int $conversationid * @return array * @throws invalid_parameter_exception * @throws dml_exception diff --git a/classes/local/hook_callbacks.php b/classes/local/hook_callbacks.php index fd1e0dd..25c0130 100644 --- a/classes/local/hook_callbacks.php +++ b/classes/local/hook_callbacks.php @@ -85,7 +85,9 @@ public static function handle_after_form_submission(\core_course\hook\after_form /** * Check if block instance is present and set addaichat form setting. * - * @param after_form_submission $hook + * @param after_form_definition_after_data $hook + * @return void + * @throws \dml_exception */ public static function handle_after_form_definition_after_data(\core_course\hook\after_form_definition_after_data $hook): void { // Get form data. diff --git a/classes/output/renderer.php b/classes/output/renderer.php index 3e8e768..33eda6d 100644 --- a/classes/output/renderer.php +++ b/classes/output/renderer.php @@ -33,6 +33,7 @@ class renderer extends plugin_renderer_base { /** * Defer to template. * + * @param block_ai_chat $block * @return string html for the page */ public function render_ai_chat_content(\block_ai_chat $block): string { diff --git a/styles.css b/styles.css index dd90c58..0504a0b 100644 --- a/styles.css +++ b/styles.css @@ -1,3 +1,4 @@ +/* stylelint-disable */ #ai_chat_button { visibility: visible; position: fixed; @@ -256,6 +257,11 @@ display: none; } +@media (min-width: 497px) { + .ai_chat_modal.onhistorypage .modal-body { + min-width: 497px; + } +} .ai_fake_block { visibility: hidden; height: 0; @@ -277,7 +283,8 @@ body.block_ai_chat_chatwindow, body.block_ai_chat_dockright { overflow: initial; } -body.block_ai_chat_chatwindow .modal-backdrop.show, body.block_ai_chat_chatwindow .ai_chat_modal, +body.block_ai_chat_chatwindow .modal-backdrop.show, +body.block_ai_chat_chatwindow .ai_chat_modal, body.block_ai_chat_dockright .modal-backdrop.show, body.block_ai_chat_dockright .ai_chat_modal { width: 0; @@ -330,11 +337,6 @@ body.block_ai_chat_openfull .block_floatingbutton-floatingicons { display: none; } } -@media (min-width: 497px) { - .ai_chat_modal.onhistorypage .modal-body { - min-width: 497px; - } -} body.block_ai_chat_replacehelp #page-footer [data-region=footer-container-popover] .btn-footer-popover[data-action=footer-popover] { display: none; } diff --git a/styles.scss b/styles.scss index affaf93..fcb4dc0 100644 --- a/styles.scss +++ b/styles.scss @@ -1,3 +1,4 @@ +/* stylelint-disable */ #ai_chat_button { visibility: visible; position: fixed; @@ -269,7 +270,13 @@ } } } - +@media (min-width: 497px) { + .ai_chat_modal.onhistorypage { + .modal-body { + min-width: 497px; + } + } +} .ai_fake_block { visibility: hidden; @@ -292,7 +299,8 @@ body.block_ai_chat_chatwindow { body.block_ai_chat_chatwindow, body.block_ai_chat_dockright { overflow: initial; - .modal-backdrop.show, .ai_chat_modal { + .modal-backdrop.show, + .ai_chat_modal { width: 0; height: 0; } @@ -349,13 +357,7 @@ body.block_ai_chat_openfull { display: none; } } -@media (min-width: 497px) { - .ai_chat_modal.onhistorypage { - .modal-body { - min-width: 497px; - } - } -} + body.block_ai_chat_replacehelp { // Replace question mark popover on the bottom right corner with ai_chat. diff --git a/templates/dialog_modal.mustache b/templates/dialog_modal.mustache index 4cc00a6..cc7b5b9 100644 --- a/templates/dialog_modal.mustache +++ b/templates/dialog_modal.mustache @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with Moodle. If not, see