【富文本编辑器实战】02 编写编辑器配置文件

编写编辑器配置文件

目录

  • 编写编辑器配置文件
    • 前言
    • 项目结构分析
    • 项目配置
      • 菜单项配置
      • 语言配置
      • 总体配置
    • 总结

前言

本篇文章主要内容是项目的配置文件的编写与讲解,包括菜单项配置、语言配置、总体配置。

项目结构分析

下图是编辑器的总体结构:

在这里插入图片描述

编辑器大致可以分为两个部分,菜单栏(图中的 1)和下面的编辑器(图中的 4)。其中菜单栏的内容较多,每个菜单项都包含了图标,说明文字(图中的 2)。部分菜单项还包含了下拉框(图中的 3)。所以就可以大致分析出需要对菜单栏进行配置操作,而编辑区基本可以不用管,同时,为了更加规范和多语言适配,我们可以将说明文字的配置单独取出来,形成语言配置文件,就可以配置出任何你想要的语言。

项目配置

项目的配置主要有三个:菜单项配置,语言配置,总体配置。

在上一篇教程中,我们已经使用 vue-cli 搭建好了项目的总体框架。我们的项目是实现一个富文本编辑器,我们需要为这个编辑器做一些参数上的配置。从现在开始,包括后面的编码部分,都是在 src/ 目录下进行。

首先,在 src/ 目录下新建一个 config 目录,用于存放编辑器配置文件。然后在 config 目录下,新建三个文件:index.jslang.jsmenu.js

在这里插入图片描述

接下来详细介绍这三个配置文件的内容和作用。

菜单项配置

menu.js是菜单的配置文件,不过不是指菜单栏,而是指每一项菜单项。每一个菜单项的配置内容包括这项的类名:className,图标:icon,它的行为:action,是否存在下拉菜单:dropList,以及是否展示状态:showStatus。这样做的原因是可以尽量只配置单项的基础属性。

showStatus 的作用是,点击了这个选项之后,该选项是否展示为 active 状态,下面两张图是例子:

在这里插入图片描述

在这里插入图片描述

第一张图中,我选中了文字,并对文字进行了加粗操作,这时加粗菜单项变为 active 的状态。而第二张图中,我选择了让文字进行居中对齐,点击了框中的菜单项,该项并未有展示为 active 的状态。所以 showStatus 的目的就是配置菜单项执行操作后,是否展示为 active 的状态。

className 的作用是配置每个菜单项的 class 名字,这样做的目的是为了让命名更加语义化

在这里插入图片描述

icon 的目的就比较单纯了,即每个菜单项所看到的图标,这里采用的是 fontawesome 的图标,至于如何使用,后续会做讲解。

action 是指点击这个菜单项之后会产生的动作,比如前面的加粗操作,点击加粗菜单后,所选的文字就会执行加粗操作,点击居中菜单,文字就执行居中操作。

最后还有一个 dropList 配置属性,即上图中标号为 3 的部分,某些菜单可以有下拉框属性,如果点击这个菜单项,它不会执行任何操作,而是弹出下拉框,然后继续操作。这个属性和 action 作用相反,可以说是互为对立,即有 action 属性的,就没有下拉框,如果有下拉框,代表不会执行 action 属性,也不具备 action 属性,可以不用配置。

整个 menu.js 的代码如下:

let menu = {// 查看源码source: {className: "syl-menu-source",icon: "fa fa-code",action: "viewSource",showStatus: true,},// 字体名称fontName: {className: "syl-menu-fontName",icon: "fa fa-font",dropList: true,},// 字号大小fontSize: {className: "syl-menu-fontSize",icon: "fa fa-header",dropList: true,},// 文字加粗bold: {className: "syl-menu-bold",icon: "fa fa-bold",action: "bold",showStatus: true,},// 下划线underLine: {className: "syl-menu-underline",icon: "fa fa-underline",action: "underline",showStatus: true,},// 删除线strikeThrough: {className: "syl-menu-strike",icon: "fa fa-strikethrough",action: "strikeThrough",showStatus: true,},// 颜色color: {className: "syl-menu-color",icon: "fa fa-paint-brush",dropList: true,},// 文字左对齐justifyLeft: {className: "syl-menu-align-left",icon: "fa fa-align-left",action: "justifyLeft",},// 文字居中对齐justifyCenter: {className: "syl-menu-align-center",icon: "fa fa-align-center",action: "justifyCenter",},// 文字右对齐justifyRight: {className: "syl-menu-align-center",icon: "fa fa-align-right",action: "justifyRight",},// 插入有序列表insertOrderedList: {className: "syl-menu-ol",icon: "fa fa-list-ol",action: "insertOrderedList",},// 插入无序列表insertUnorderedList: {className: "syl-menu-ul",icon: "fa fa-list-ul",action: "insertUnorderedList",},// 添加超链接link: {className: "syl-menu-link",icon: "fa fa-link",dropList: true,},// 取消超链接unlink: {className: "syl-menu-unlink",icon: "fa fa-unlink",action: "unlink",},// 插入图片picture: {className: "syl-menu-picture",icon: "fa fa-picture-o",dropList: true,},// 插入表格table: {className: "syl-menu-table",icon: "fa fa-table",dropList: true,},// 取消格式removeFormat: {className: "syl-menu-remove-format",icon: "fa fa-eraser",action: "removeFormat",},// 重做redo: {className: "syl-menu-redo",icon: "fa fa-repeat",action: "redo",},// 撤销undo: {className: "syl-menu-undo",icon: "fa fa-undo",action: "undo",},
};
// 导出配置
export default {getMenu() {return menu;},
};

以上就是我们全部的菜单功能项。className 的值可以随意设置,icon 的值代表图标的样式,你也可以在 fontawesome 网站上去找其他图标替换, action 的值不能随意修改,否则不能执行相关操作,action 的值还有很多,与浏览器的支持相关,后面会提到更多的 action 操作。

语言配置

即在前面图中标出的第二部分,当鼠标在菜单项悬停一会儿,就会出现说明性文字,这是利用了标签的 title 属性,当我们不清楚这个菜单项是什么功能时,可以将鼠标放到菜单上,下方就会出现该菜单项的功能说明。这里使用的是中文文字,如果我们想要将文字改为英文,如果不使用配置文件,挨个去标签中修改,那将是巨大的工作量,所以需要一个语言配置文件,这个文件中,你想要如何翻译都可以,如果想要修改,直接改配置文件就可以。以下是语言配置文件的配置详情:

lang.js配置文件代码:

export default {source: {title: "源码",// 可继续添加其他语言 title: 'sourceCode',下同},fontName: {title: "字体",},fontSize: {title: "字号",},bold: {title: "加粗",},underLine: {title: "下划线",},strikeThrough: {title: "删除线",},color: {title: "颜色",},justifyLeft: {title: "左对齐",},justifyCenter: {title: "居中",},justifyRight: {title: "右对齐",},insertOrderedList: {title: "有序列表",},insertUnorderedList: {title: "无序列表",},link: {title: "链接",},unlink: {title: "取消链接",},picture: {title: "图片",},table: {title: "表格",},removeFormat: {title: "清除格式",},redo: {title: "重做",},undo: {title: "撤销",},
};

这里的每一项,都和之前的 menu.js 中的菜单项保持一致,每项菜单都可添加多种语言,可以很方便地使用和修改。

总体配置

index.js ,这个配置文件可以看作是整个编辑器的总体配置。主要包括对各个菜单项的可见性配置,控制菜单栏可以显示哪些菜单;对部分下拉框数据的配置,比如字体,字号,和数据的颜色;对编辑区设定预设文字。以下为配置示例:

let config = {// 控制哪些菜单项可以展示(这里全部展示)viewMenu: ["source","fontName","fontSize","bold","underLine","strikeThrough","color","justifyLeft","justifyCenter","justifyRight","insertOrderedList","insertUnorderedList","link","unlink","picture","table","removeFormat","redo","undo",],// 配置字体名fontName: ["微软雅黑","宋体","arial black","times new roman","Courier New",],// 配置字号fontSize: ["h1", "h2", "h3", "h4", "h5", "h6"],// 配置颜色colors: ["#000000","#424242","#636363","#9C9C94","#CEC6CE","#EFEFEF","#F7F7F7","#FFFFFF","#FF0000","#FF9C00","#FFFF00","#00FF00","#00FFFF","#0000FF","#9C00FF","#FF00FF","#F7C6CE","#FFE7CE","#FFEFC6","#D6EFD6","#CEDEE7","#CEE7F7","#D6D6E7","#E7D6DE","#E79C9C","#FFC69C","#FFE79C","#B5D6A5","#A5C6CE","#9CC6EF","#B5A5D6","#D6A5BD","#E76363","#F7AD6B","#FFD663","#94BD7B","#73A5AD","#6BADDE","#8C7BC6","#C67BA5","#CE0000","#E79439","#EFC631","#6BA54A","#4A7B8C","#3984C6","#634AA5","#A54A7B","#9C0000","#B56308","#BD9400","#397B21","#104A5A","#085294","#311873","#731842","#630000","#7B3900","#846300","#295218","#083139","#003163","#21104A","#4A1031",],// 配置编辑区预设内容container: {content: "<p><br></p>",},
};// 导出配置
export default {// 获取某项配置getConfig(name) {return config[name] ? config[name] : config;},// 设置全部配置项setConfig(data) {if (data) {config = data;}},
};

总结

到这里,我们就完成了对编辑器的相关属性和参数的配置了。在下一篇文章中,我们将开始 Vuex 的配置编写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/416563.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang面试题大全

go基础类 1、与其他语言相比&#xff0c;使用 Go 有什么好处&#xff1f; 与其他作为学术实验开始的语言不同&#xff0c; Go 代码的设计是务实的。每个功能和语法决策都旨在让程序员的生活更轻松。Golang 针对并发进行了优化&#xff0c;并且在规模上运行良好。由于单一的标…

【分布式技术】ELK大型日志收集分析系统

目录 步骤一&#xff1a;完成JAVA环境部署 步骤二&#xff1a;部署ES节点&#xff08;三台主机&#xff09; 步骤三&#xff1a;内核参数修改 步骤四&#xff1a;web端查看验证 步骤五&#xff1a;yum安装nginx 步骤六&#xff1a;完成logstash部署 步骤七&#xff1a;部…

虚拟机下载docker

一&#xff0c;Docker简介 百科说&#xff1a;Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化&#xff0c;容器是完全使用沙箱机制&#xff…

[ PyQt入门教程 ] Qt Designer工具的使用

Qt Designer是PyQt程序UI界面的实现工具&#xff0c;使用Qt Designer可以拖拽、点击完成GUI界面设计&#xff0c;并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具开发界面的使用方法。 主要内容 1、Qt Designer程序主界…

专业130+总分380+哈尔滨工程大学810信号与系统考研经验水声电子信息与通信

今年专业课810信号与系统130&#xff0c;总分380顺利考上哈尔滨工程大学&#xff0c;一年的努力终于换来最后的录取&#xff0c;期中复习有得有失&#xff0c;以下总结一下自己的复习经历&#xff0c;希望对大家有帮助&#xff0c;天道酬勤&#xff0c;加油&#xff01;专业课&…

【Linux】03 GCC编译器的使用

一、编译过程 在使用gcc编译程序时&#xff0c;编译过程可以简要划分为4个阶段&#xff1a; 预处理、编译、汇编、链接 1.1 预处理&#xff08;preprocessing&#xff09; 这个阶段主要处理源文件中的#indef、#include和#define预处理命令&#xff1b; 这里主要是把一些include…

Docker(三)使用 Docker 镜像:从仓库获取镜像;管理本地主机上的镜像;介绍镜像实现的基本原理

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 使用 Docker 镜像 在之前的介绍中&#xff0c;我们知道镜像是 Docker 的三大组件之一。 Docker 运行容器前需要本地存在对应的镜像&#x…

蓝桥杯备战 每日一题 (2)

今天的题目是回忆迷宫 这个题目我们来熟悉一下 弗洛伊德算法 的代码模板 弗洛伊德算法用来处理最短路径问题 弗洛伊德算法&#xff08;Floyd’s algorithm&#xff09;用于解决图中所有节点对之间的最短路径问题。算法的基本思路是通过逐步迭代更新节点对之间的最短路径长度&a…

linux C语言socket函数recv

recv 函数是在 Linux C 语言网络编程中用于从已连接的套接字接收数据的函数。它通常与 TCP 连接一起使用&#xff0c;但也可以用于 UDP&#xff08;尽管对于 UDP&#xff0c;更常使用 recvfrom&#xff0c;因为它还可以接收发送方的地址信息&#xff09;。 函数原型 recv 函数…

手机与电脑更改IP地址怎么使用代理IP?

在现代互联网时代&#xff0c;代理IP已成为许多人日常生活和工作中不可或缺的一部分。通过代理IP&#xff0c;用户可以隐藏自己的真实IP地址&#xff0c;并获得更好的网络体验。本文将详细介绍如何在手机和电脑上更改IP地址并使用代理IP。 一、手机使用代理IP 1. 打开手机设置&…

00-Rust前言

问&#xff1a;为什么要近期想学习Rust? 答&#xff1a; Rust出来也是有一段时间了&#xff0c;从Microsoft吵着要重构他们的C"祖传代码"开始&#xff0c;Rust就披着“高效&#xff0c;安全”的头衔。而自己决定要学习Rust&#xff0c;是因为近期发现&#xff1a;与…

【GAMES101】Lecture 08 图形管线(实时渲染管线)与纹理映射

目录 图形管线 纹理映射 图形管线 给我一个三维模型&#xff0c;给我一个光照条件&#xff0c;我就能够得出渲染的结果&#xff0c;这些东西合起来就是Graphics Pipeline&#xff0c;图形管线&#xff0c;闫神愿称之为实时渲染管线&#xff0c;那下面这个流程图就是这个渲染…