forgeplus-react/src/common/TextUtil.js

169 lines
5.1 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { bytesToSize, getUrl, getUrl2 } from 'educoder'
import showdown from 'showdown'
const $ = window.$
export function isImageExtension(fileName) {
return fileName ? !!(fileName.match(/.(jpg|jpeg|png|gif)$/i)) : false
}
export function markdownToHTML(oldContent, selector) {
try {
window.$('#md_div').html('')
if (selector && oldContent && oldContent.startsWith('<p')) { // 普通html处理
window.$('#' + selector).addClass('renderAsHtml')
window.$('#' + selector).html(oldContent)
} else {
try {
$("#" + selector).html('')
// selector ||
var markdwonParser = window.editormd.markdownToHTML(selector || "md_div", {
markdown: oldContent, // .replace(/▁/g,"▁▁▁"),
emoji: true,
htmlDecode: "style,script,iframe", // you can filter tags decode
taskList: true,
tex: true, // 默认不解析
flowChart: true, // 默认不解析
sequenceDiagram: true // 默认不解析
});
} catch (e) {
console.error(e)
}
// selector = '.' + selector
if (selector) {
return;
}
const content = window.$('#md_div').html()
if (selector) {
window.$(selector).html(content)
}
return content
}
} catch (e) {
}
}
function _doDownload(options) {
$.fileDownload(getUrl() + "/api" + options.url, {
successCallback: options.successCallback,
failCallback: options.failCallback
});
}
export function downloadFile(options) {
if ($.fileDownload) {
_doDownload(options)
} else {
const _url_origin = getUrl2()
$.getScript(
`${_url_origin}/javascripts/download/jquery.fileDownload.min.js`,
(data, textStatus, jqxhr) => {
_doDownload(options)
});
}
}
export function appendFileSizeToUploadFile(item) {
return `${item.title}${uploadNameSizeSeperator}${item.filesize}`
}
export function appendFileSizeToUploadFileAll(fileList) {
console.log('fileList',fileList);
return fileList && fileList.map(item => {
if (item.name.indexOf(uploadNameSizeSeperator) == -1) {
return Object.assign({}, item, { name: `${item.name}${uploadNameSizeSeperator}${bytesToSize(item.size)}` })
}
return item
})
}
export const uploadNameSizeSeperator = '  '
export const sortDirections = ["ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend",
"ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend",
"ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend",
"ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend",]
export function validateLength(str = '', length = 100) {
let len = 0
if (str) {
len = str.length
for (let i = 0; i < len; i++) {
let charCode = str.charCodeAt(i)
if (charCode >= 0xD800 && charCode <= 0xDBFF) {
len--
i++
}
}
}
return len <= length
}
export function mdJSONParse(str) {
let val = "";
try {
return val = JSON.parse(str)
} catch (error) {
if (str) {
return val = str;
} else {
return "";
}
}
}
showdown.extension('prettify', function () {
return [{
type: 'output',
filter: function (source) {
return source.replace(/(<pre[^>]*>)?[\n\s]?<code([^>]*)>/gi, function (match, pre, codeClass) {
if (pre) {
return '<pre class="prettyprint linenums"><code' + codeClass + '>'
} else {
return ' <code class="prettyprint">'
}
})
}
}]
})
const showdownKatex = require('showdown-katex')
const CONVERTER = new showdown.Converter({
tables: true,
simpleLineBreaks: false,
underline: true,
extensions: [
'prettify',
showdownKatex({
throwOnError: false,
displayMode: false,
errorColor: '#1500ff',
}),
]
})
const oldKatexMode = /(?:`?\$\$)([^`\$]+)(?:\$\$`?)/g
export function exportMdtoHtml(md = '') {
if (typeof md === 'string') {
let rs = md.replace(oldKatexMode, (_, p1) => {
return "$$" + p1 + "$$"
})
return CONVERTER.makeHtml(rs)
}
return md + ''
}
function escapeText(text) {
return text.replace(/[&<>"']/g, s => {
const entityMap = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '',
"'": '',
};
return entityMap[s]
})
}