bookmark/src/components/utils.js
CN32479-詹红柱 84f308f94e no message
2021-08-19 11:55:05 +08:00

105 lines
3.2 KiB
JavaScript

import {saveObject, getObject} from '../Api/common.js'
import { ElMessage } from 'element-plus'
function walkBookmarksTree(root) {
const result = []
// 深度优先遍历
const walk = (node, list) => {
const els = node.children
if (els && els.length > 0) {
for (let i = 0; i < els.length; i++) {
const item = els[i]
// p标签或h3标签直接跳过
if (item.tagName === 'P' || item.tagName === 'H3') {
continue
}
// 文件夹不用创建元素
if (item.tagName === 'DL') {
walk(els[i], list)
} else { // DT节点
let child = null
// 判断是否是文件夹
const children = item.children
let isDir = false
for (let j = 0; j < children.length; j++) {
if (children[j].tagName === 'H3' || children[j].tagName === 'DL') {
isDir = true
}
}
// 文件夹
if (isDir) {
child = {
name: item.tagName === 'DT' ? item.querySelector('h3') ? item.querySelector('h3').innerText : '' : '',
folder: true,
children: []
}
walk(els[i], child.children)
} else { // 书签
const _item = item.querySelector('a')
if (_item) {
child = {
name: _item?.innerText,
url: _item?.href
}
}
}
child && list.push(child)
}
}
}
}
walk(root, result)
return result
}
// 导入
export function importBookmark() {
const file = document.getElementById('file')
file.dispatchEvent(new MouseEvent('click'))
const mybookmark = document.getElementById('mybookmark')
document.getElementById('file').addEventListener('change', function () {
var file = document.getElementById('file').files[0]
var reader = new FileReader()
reader.readAsText(file, 'utf-8')
reader.onload = function () {
mybookmark.innerHTML = reader.result
console.log(walkBookmarksTree(mybookmark))
const formDatas = localStorage.getItem('BOOKMARK')
const params = {formDatas: formDatas}
console.log(params)
saveObject('BOOKMARK', params).then(res => {
console.log('导入成功', res)
ElMessage.success('导入成功')
})
// const myData = walkBookmarksTree(mybookmark)
// myData && localStorage.setItem('BOOKMARK', myData)
}
})
}
// 导出数据为JSON下载
export function exportBookmark() {
if (localStorage.getItem('BOOKMARK')) {
var content = localStorage.getItem('BOOKMARK')
var eleLink = document.createElement('a')
eleLink.download = 'kestrel-bookmark.json'
eleLink.style.display = 'none'
// 字符内容转变成blob地址
var blob = new Blob([content])
eleLink.href = URL.createObjectURL(blob)
// 触发点击
document.body.appendChild(eleLink)
eleLink.click()
// 然后移除
document.body.removeChild(eleLink)
} else {
this.$message.warning('暂无可导出数据')
}
}
// 获取远程书签
export const getRemoteList = () => {
getObject('BOOKMARK').then(res => {
console.log('获取书签', res)
})
}