You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
3.9 KiB
155 lines
3.9 KiB
//miniprogram/account/pages/test/test.js
|
|
//我我我等等是顶顶顶
|
|
Page({
|
|
|
|
/**
|
|
* 页面的初始数据
|
|
*/
|
|
data: {
|
|
code: `.we-editor{
|
|
font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;
|
|
overflow: scroll;
|
|
white-space: pre;
|
|
cursor: text;
|
|
height: 100vh;
|
|
position: relative;
|
|
}
|
|
.ta{
|
|
width: auto;
|
|
background: #002B36;
|
|
color: #93A1A1;
|
|
font: 14px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;
|
|
white-space: pre;
|
|
padding: 12px;
|
|
}
|
|
.we-cursor{
|
|
height: 14px;
|
|
min-height: 14px;
|
|
width: 1px;
|
|
position: absolute;
|
|
font-size: 10px;
|
|
color: white;
|
|
background: white;
|
|
}
|
|
|
|
.theme-dark{
|
|
background-color: #002B36;
|
|
color: #93A1A1;
|
|
}
|
|
.we-line{
|
|
position: absolute;
|
|
}
|
|
.we-word{
|
|
|
|
}
|
|
.theme-dark .we-comment{
|
|
font-style: italic;
|
|
color: #657B83;
|
|
}
|
|
.theme-dark .we-keyword{
|
|
color: #859900;
|
|
}
|
|
.theme-dark .we-number{
|
|
color: #D33682;
|
|
}
|
|
.theme-dark .we-string{
|
|
color: #2AA198;
|
|
}
|
|
.we-chinese{
|
|
width: 13.1953px;
|
|
display: inline-block;
|
|
}`,
|
|
lines: [[]],
|
|
wordWidth: 6.59765,
|
|
cursor: {
|
|
row: 0,
|
|
col: 0,
|
|
cursor: 0,
|
|
value: ""
|
|
}
|
|
},
|
|
lines: [""],
|
|
indent: 0,
|
|
cursor: 0,
|
|
getColByValue(value, cursor) {
|
|
console.log(value, cursor);
|
|
return value.slice(0, cursor).length * 2 - value.slice(0, cursor).replace(/[\u4e00-\u9fa5]/g, "").length;
|
|
},
|
|
|
|
getCursor(value, col) {
|
|
var cursor = col;
|
|
var newCol = this.getColByValue(value, cursor);
|
|
while (newCol != col) {
|
|
cursor = cursor - 1;
|
|
newCol = this.getColByValue(value, cursor);
|
|
}
|
|
return cursor;
|
|
},
|
|
parseLine(value) {
|
|
var line = [];
|
|
for (var word of value.split(/([\u4e00-\u9fa5]+)/)) {
|
|
var match = word.match(/[\u4e00-\u9fa5]+/)
|
|
;
|
|
if (match) {
|
|
for (var i of word)
|
|
line.push({ class: "we-chinese", value: i });
|
|
} else {
|
|
line.push({ class: "", value: word });
|
|
}
|
|
}
|
|
return line;
|
|
},
|
|
onInput(e) {
|
|
console.log(e);
|
|
let { keyCodevalue, cursor, value } = e.detail;
|
|
console.log(e.detail)
|
|
var row = this.data.cursor.row;
|
|
if (value.length == 0 && this.data.cursor.row != 0) {
|
|
var { lines } = this.data;
|
|
lines.splice(row, 1);
|
|
var newValue = this.lines[row - 1];
|
|
this.setData({ lines, "cursor.row": row - 1, "cursor.col": this.getColByValue(newValue), "cursor.value": "" + newValue });
|
|
this.lines.splice(row, 1);
|
|
return;
|
|
}
|
|
|
|
this.setData({ "cursor.col": this.getColByValue(value, cursor) });
|
|
var line = this.parseLine(value);
|
|
this.setData({ ['lines[' + this.data.cursor.row + "]"]: line });
|
|
this.lines[row] = value;
|
|
var indentMatch = value.match(/(^ *)/)
|
|
if (indentMatch)
|
|
this.indent = indentMatch[1].length
|
|
else
|
|
this.indent = 0;
|
|
this.cursor = cursor;
|
|
//return "";
|
|
},
|
|
onTapEditor({ detail: { x, y } }) {
|
|
//console.log(e);
|
|
var row = Math.min(Math.round(y / 14), this.data.lines.length - 1);
|
|
var value = this.lines[row];
|
|
var col = Math.min(Math.round(x / this.data.wordWidth), this.getColByValue(value));
|
|
this.cursor = this.getCursor(value, col);
|
|
this.setData({ "cursor.row": row, "cursor.col": col, "cursor.focus": 1, "cursor.cursor": this.cursor, "cursor.value": value });
|
|
},
|
|
onInputConfirm(e) {
|
|
//console.log(e);
|
|
var row = this.data.cursor.row;
|
|
var value = this.lines[row];
|
|
var rightValue = " ".repeat(this.indent) + value.slice(this.cursor);
|
|
var leftValue = value.slice(0, this.cursor);
|
|
var { lines } = this.data;
|
|
lines.splice(row + 1, 0, this.parseLine(rightValue));
|
|
lines[row] = this.parseLine(leftValue);
|
|
this.setData({ lines, "cursor.value": rightValue });
|
|
this.lines.splice(row + 1, 0, rightValue);
|
|
this.lines[row] = leftValue;
|
|
this.setData({ "cursor.cursor": this.indent, "cursor.focus": 2, "cursor.row": row + 1, "cursor.col": this.indent });
|
|
},
|
|
onLoad: function (options) {
|
|
|
|
}
|
|
|
|
|
|
}) |