Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: export to html render abnormal #468

Merged
merged 2 commits into from
Dec 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,19 +78,19 @@ Markdown 文档自动即时渲染为微信图文,让你不再为微信文章
示例代码:

```js
const { file, util, okCb, errCb } = CUSTOM_ARG;
const param = new FormData();
param.append(`file`, file);
const { file, util, okCb, errCb } = CUSTOM_ARG
const param = new FormData()
param.append(`file`, file)
util.axios
.post(`http://127.0.0.1:9000/upload`, param, {
headers: { "Content-Type": `multipart/form-data` },
headers: { 'Content-Type': `multipart/form-data` },
})
.then((res) => {
okCb(res.url);
okCb(res.url)
})
.catch((err) => {
errCb(err);
});
errCb(err)
})

// 提供的可用参数:
// CUSTOM_ARG = {
Expand Down
2 changes: 1 addition & 1 deletion src/stores/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ export const useStore = defineStore(`store`, () => {

// 导出编辑器内容为 HTML,并且下载到本地
const exportEditorContent2HTML = () => {
exportHTML()
exportHTML(primaryColor.value)
document.querySelector(`#output`)!.innerHTML = output.value
}

Expand Down
22 changes: 18 additions & 4 deletions src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -180,10 +180,16 @@ export function downloadMD(doc: string) {
/**
* 导出 HTML 生成内容
*/
export function exportHTML() {
export function exportHTML(primaryColor: string) {
const element = document.querySelector(`#output`)!

setStyles(element)

const htmlStr = element.innerHTML
.replaceAll(`var(--el-text-color-regular)`, `#3f3f3f`)
.replaceAll(`var(--blockquote-background)`, `#f7f7f7`)
.replaceAll(`var(--md-primary-color)`, primaryColor)
.replaceAll(/--md-primary-color:.+?;/g, ``)

const downLink = document.createElement(`a`)

Expand All @@ -205,13 +211,21 @@ export function exportHTML() {
* @param {排除的属性} excludes 如果某些属性对结果有不良影响,可以使用这个参数来排除
* @returns 行内样式拼接结果
*/
function getElementStyles(element: Element, excludes = [`width`, `height`]) {
function getElementStyles(element: Element, excludes = [`width`, `height`, `inlineSize`, `webkitLogicalWidth`, `webkitLogicalHeight`]) {
const styles = getComputedStyle(element, null)
return Object.entries(styles)
.filter(
([key]) => styles.getPropertyValue(key) && !excludes.includes(key),
([key]) => {
// 将驼峰转换为短横线格式
const kebabKey = key.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)
return styles.getPropertyValue(kebabKey) && !excludes.includes(key)
},
)
.map(([key, value]) => `${key}:${value};`)
.map(([key, value]) => {
// 将驼峰转换为短横线格式
const kebabKey = key.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)
return `${kebabKey}:${value};`
})
.join(``)
}

Expand Down
Loading