侧边栏壁纸
博主头像
刹那烟雨博主等级

行动起来,活在当下

  • 累计撰写 40 篇文章
  • 累计创建 10 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

超级文本编辑器-脚本

落雨不悔
2023-12-29 / 0 评论 / 0 点赞 / 73 阅读 / 7519 字

可以编写脚本对内容进行处理

类型定义

declare const content: string = '';
declare const func = {
    axios: any,
    message: {
        loading(text: string): void,
        send(text: string, type: 'success' | 'info' | 'warning' | 'error'): void,
    },
    util: {
        array: {
            contains(arr: any[], keyword: any): boolean,
            map, K, A extends keyof T>(arr: T[], attrName: A, merge?: (item1: T, item2: T) => T): Map
        },
        browser: {
            download(data: string | ArrayBuffer | Blob, fileName: string, mineType: string): void,
            downloadByUrl(url: string, fileName?: string): void,
            generateUUID():  string,
            sleep(timestamp: number): Promise,
        }
    }
}

content

编辑器的内容

func

内置方法

axios

使用此方法,需要将脚本设置为异步模式,并且使用await关键字

axios库,可以执行http请求,比如

// GET请求
const rsp = await func.axios.get('https://blog.esion.xyz');
// POST请求,并附带请求体
const rsp = await func.axios.post('https://blog.esion.xyz', {
    a: 'a'
});
// 执行一个请求
const rsp = await func.axios.request({
    url: 'https://blog.esion.xyz',
    method: 'POST',
    data: {a: 'a'},
    params: {a: 'a'},
    headers: {
        'Content-Type': 'application/json'
    }
})

返回的rsp是个axios的响应对象,其中rsp.data是实际的响应体

更多的使用方法请参考:http://www.axios-js.com

message

消息类方法

loading

修改当前loading的内容

在每次执行脚本时,都会有loading加载框

func.message.loading('正在执行脚本')

send

send(text: string, type: 'success' | 'info' | 'warning' | 'error')

发送一个消息,会在插件中上方显示一个消息

func.message.send('成功了', 'success');

util

一些常用的方法

array

数组相关的方法

  • contains

contains(arr: Array, keyword: any): boolean;

判断第一个数组中是否包含第二个元素,返回boolean值

func.util.array.contains(['a', 'b'], 'a');
  • map

将一个数组根据其中一个属性变为map

const arr = [{
    id: 1,
    name: 'a'
}, {
    id: 2,
    name: 'b'
}]
const map = func.util.array.map(arr, 'id');
// a = {id: 1,name: 'a'}
const a = map.get(1);

browser

浏览器的一些方法

  • download

将一段文本进行下载

func.util.browser.download('测试文本', '测试.txt')
  • downloadByUrl

将一个url进行下载

func.util.browser.downloadByUrl('https://blog.esion.xyz', 'index.html')
  • generateUUID

生成一个uuid

const uuid = func.util.browser.generateUUID()
  • sleep

此API需要开启异步,并使用await关键字

对脚本进行休眠

// 休眠一秒钟
await func.util.browser.sleep(1000);

常用脚本示例

行去重

return Array.from(new Set(content.split("\n"))).join("\n");

加序号

return content.split('\n').map((v, i) => `${i+1}. ${v}`).join('\n');

去除多余回车

const lines = content.split("\n");
const items = [];
let item = [];
for (let line of lines){
    line = line.replace('\r', '');
    if (line.trim() === '') {
        items.push(item);
        item = [];
    }else {
        item.push(line);
    }
}
if(item.length >0) {
    items.push(item);
}
return items.map(item => item.join(''))
.filter(e => e.trim() !== '').join('\n\n');
0

评论区