Merge branch 'forge' of https://bdgit.educoder.net/Hjqreturn/educoder into forge
commit
608cd3a91f
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* @Description: 填空
|
||||||
|
* @Author: tangjiang
|
||||||
|
* @Github:
|
||||||
|
* @Date: 2020-01-06 09:02:29
|
||||||
|
* @LastEditors : tangjiang
|
||||||
|
* @LastEditTime : 2020-02-05 10:44:01
|
||||||
|
*/
|
||||||
|
import Quill from 'quill';
|
||||||
|
let Inline = Quill.import('blots/inline');
|
||||||
|
// const BlockEmbed = Quill.import('blots/embed');
|
||||||
|
class FillBlot extends Inline {
|
||||||
|
static create (value) {
|
||||||
|
const node = super.cerate(value);
|
||||||
|
// node.classList.add('icon icon-bianji2');
|
||||||
|
// node.setAttribute('data-fill', 'fill');
|
||||||
|
console.log('编辑器值===》》》》》', value);
|
||||||
|
node.setAttribute('data_index', value.data_index);
|
||||||
|
node.nodeValue = value.text;
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
static value (node) {
|
||||||
|
return {
|
||||||
|
// dataSet: node.getAttribute('data-fill'),
|
||||||
|
data_index: node.getAttribute('data_index')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FillBlot.blotName = "fill";
|
||||||
|
FillBlot.tagName = "span";
|
||||||
|
|
||||||
|
export default FillBlot;
|
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* @Description: 重写图片
|
||||||
|
* @Author: tangjiang
|
||||||
|
* @Github:
|
||||||
|
* @Date: 2019-12-16 15:50:45
|
||||||
|
* @LastEditors : tangjiang
|
||||||
|
* @LastEditTime : 2019-12-31 13:59:02
|
||||||
|
*/
|
||||||
|
import Quill from "quill";
|
||||||
|
|
||||||
|
const BlockEmbed = Quill.import('blots/block/embed');
|
||||||
|
|
||||||
|
export default class ImageBlot extends BlockEmbed {
|
||||||
|
|
||||||
|
static create(value) {
|
||||||
|
|
||||||
|
const node = super.create();
|
||||||
|
node.setAttribute('alt', value.alt);
|
||||||
|
node.setAttribute('src', value.url);
|
||||||
|
// console.log('~~~~~~~~~~~', node, value);
|
||||||
|
node.addEventListener('click', function () {
|
||||||
|
value.onclick(value.url);
|
||||||
|
}, false);
|
||||||
|
if (value.width) {
|
||||||
|
node.setAttribute('width', value.width);
|
||||||
|
}
|
||||||
|
if (value.height) {
|
||||||
|
node.setAttribute('height', value.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value.id) {
|
||||||
|
node.setAttribute('id', value.id);
|
||||||
|
}
|
||||||
|
// 宽度和高度都不存在时,
|
||||||
|
if (!value.width && !value.height) {
|
||||||
|
// node.setAttribute('display', 'block');
|
||||||
|
node.setAttribute('width', '100%');
|
||||||
|
}
|
||||||
|
|
||||||
|
// node.setAttribute('style', { cursor: 'pointer' });
|
||||||
|
|
||||||
|
// if (node.onclick) {
|
||||||
|
// console.log('image 有图片点击事件======》》》》》》');
|
||||||
|
// // node.setAttribute('onclick', node.onCLick);
|
||||||
|
// }
|
||||||
|
// 给图片添加点击事件
|
||||||
|
// node.onclick = () => {
|
||||||
|
// value.onClick && value.onClick(value.url);
|
||||||
|
// }
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取节点值
|
||||||
|
static value (node) {
|
||||||
|
|
||||||
|
return {
|
||||||
|
alt: node.getAttribute('alt'),
|
||||||
|
url: node.getAttribute('src'),
|
||||||
|
onclick: node.onclick,
|
||||||
|
width: node.width,
|
||||||
|
height: node.height,
|
||||||
|
display: node.getAttribute('display'),
|
||||||
|
id: node.id,
|
||||||
|
// style: node.style
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageBlot.blotName = 'image';
|
||||||
|
ImageBlot.tagName = 'img';
|
@ -0,0 +1,47 @@
|
|||||||
|
function deepEqual (prev, current) {
|
||||||
|
if (prev === current) { // 基本类型比较,值,类型都相同 或者同为 null or undefined
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((!prev && current)
|
||||||
|
|| (prev && !current)
|
||||||
|
|| (!prev && !current)
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Array.isArray(prev)) {
|
||||||
|
if (!Array.isArray(current)) return false;
|
||||||
|
if (prev.length !== current.length) return false;
|
||||||
|
|
||||||
|
for (let i = 0; i < prev.length; i++) {
|
||||||
|
if (!deepEqual(current[i], prev[i])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof current === 'object') {
|
||||||
|
if (typeof prev !== 'object') return false;
|
||||||
|
const prevKeys = Object.keys(prev);
|
||||||
|
const curKeys = Object.keys(current);
|
||||||
|
|
||||||
|
if (prevKeys.length !== curKeys.length) return false;
|
||||||
|
|
||||||
|
prevKeys.sort();
|
||||||
|
curKeys.sort();
|
||||||
|
|
||||||
|
for (let i = 0; i < prevKeys.length; i++) {
|
||||||
|
if (prevKeys[i] !== curKeys[i]) return false;
|
||||||
|
const key = prevKeys[i];
|
||||||
|
if (!deepEqual(prev[key], current[key])) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default deepEqual;
|
@ -0,0 +1,132 @@
|
|||||||
|
.quill_editor_for_react_area{
|
||||||
|
// background: #fff;
|
||||||
|
// margin: 0 15px;
|
||||||
|
.ql-editing{
|
||||||
|
left: 0 !important;
|
||||||
|
}
|
||||||
|
.ql-editor{
|
||||||
|
img{
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="12px"]::before,
|
||||||
|
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="12px"]::before {
|
||||||
|
content: '12px';
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="14px"]::before,
|
||||||
|
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="14px"]::before {
|
||||||
|
content: '14px';
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="16px"]::before,
|
||||||
|
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="16px"]::before {
|
||||||
|
content: '16px';
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="18px"]::before,
|
||||||
|
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="18px"]::before {
|
||||||
|
content: '18px';
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="20px"]::before,
|
||||||
|
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="20px"]::before {
|
||||||
|
content: '20px';
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
//默认的样式
|
||||||
|
.ql-snow .ql-picker.ql-size .ql-picker-label::before,
|
||||||
|
.ql-snow .ql-picker.ql-size .ql-picker-item::before {
|
||||||
|
content: '14px';
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=SimSun]::before,
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=SimSun]::before {
|
||||||
|
content: "宋体";
|
||||||
|
font-family: "SimSun";
|
||||||
|
}
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=SimHei]::before,
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=SimHei]::before {
|
||||||
|
content: "黑体";
|
||||||
|
font-family: "SimHei";
|
||||||
|
}
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Microsoft-YaHei]::before,
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Microsoft-YaHei]::before {
|
||||||
|
content: "微软雅黑";
|
||||||
|
font-family: "Microsoft YaHei";
|
||||||
|
}
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=KaiTi]::before,
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=KaiTi]::before {
|
||||||
|
content: "楷体";
|
||||||
|
font-family: "KaiTi";
|
||||||
|
}
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=FangSong]::before,
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=FangSong]::before {
|
||||||
|
content: "仿宋";
|
||||||
|
font-family: "FangSong";
|
||||||
|
}
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Arial]::before,
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Arial]::before {
|
||||||
|
content: "Arial";
|
||||||
|
font-family: "Arial";
|
||||||
|
}
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Times-New-Roman]::before,
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Times-New-Roman]::before {
|
||||||
|
content: "Times New Roman";
|
||||||
|
font-family: "Times New Roman";
|
||||||
|
}
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=sans-serif]::before,
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=sans-serif]::before {
|
||||||
|
content: "sans-serif";
|
||||||
|
font-family: "sans-serif";
|
||||||
|
}
|
||||||
|
|
||||||
|
.ql-font-SimSun {
|
||||||
|
font-family: "SimSun";
|
||||||
|
}
|
||||||
|
.ql-font-SimHei {
|
||||||
|
font-family: "SimHei";
|
||||||
|
}
|
||||||
|
.ql-font-Microsoft-YaHei {
|
||||||
|
font-family: "Microsoft YaHei";
|
||||||
|
}
|
||||||
|
.ql-font-KaiTi {
|
||||||
|
font-family: "KaiTi";
|
||||||
|
}
|
||||||
|
.ql-font-FangSong {
|
||||||
|
font-family: "FangSong";
|
||||||
|
}
|
||||||
|
.ql-font-Arial {
|
||||||
|
font-family: "Arial";
|
||||||
|
}
|
||||||
|
.ql-font-Times-New-Roman {
|
||||||
|
font-family: "Times New Roman";
|
||||||
|
}
|
||||||
|
.ql-font-sans-serif {
|
||||||
|
font-family: "sans-serif";
|
||||||
|
}
|
||||||
|
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-label::before,
|
||||||
|
.ql-snow .ql-picker.ql-font .ql-picker-item::before {
|
||||||
|
content: "微软雅黑";
|
||||||
|
font-family: "Microsoft YaHei";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 填空图标
|
||||||
|
.ql-snow .ql-fill{
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
color: #05101A;
|
||||||
|
// font-size: 18px;
|
||||||
|
vertical-align: top;
|
||||||
|
&::before{
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: -1px;
|
||||||
|
content: '\e709';
|
||||||
|
font-family: 'iconfont';
|
||||||
|
margin-left: -7px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue