Skip to content
This repository was archived by the owner on Nov 29, 2023. It is now read-only.

Commit d31e181

Browse files
committed
fix the enter key
1 parent 929c72b commit d31e181

File tree

3 files changed

+97
-11
lines changed

3 files changed

+97
-11
lines changed

src/logic/formatting.ts

+95-9
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,100 @@ export function linkify(text: string): string {
1717
return text.replaceAll(/(?:www|https?)[^\s]+/ig, "<a target=\"_blank\" href=\"$&\">$&</a>");
1818
}
1919

20-
export function nearestOverlap(f: number[], formats: number[][]) {
21-
return Math.min(...formats.map(f2 => Math.max(f[0], f2[0])));
20+
interface IRange {
21+
start: number
22+
end: number
23+
traits: string[]
2224
}
2325

24-
// function transformFormats(formats: Format[]): CleanedFormat[] {
25-
// const res: CleanedFormat[] = [];
26-
// for (const f of formats) {
27-
// const nearestOverlap = Math.max(...formats.map(f2 => Math.max(f.start, f2.start)));
28-
// }
29-
// return res;
30-
// }
26+
function sortRange(lhs: IRange, rhs: IRange): number {
27+
return lhs.start - rhs.start;
28+
}
29+
30+
export function merge(ranges: IRange[]): Array<IRange> {
31+
ranges.sort(sortRange);
32+
33+
const s = new Array<IRange>();
34+
35+
s.push(ranges[0]);
36+
37+
for (let i = 1; i < ranges.length; i++) {
38+
const top = s[s.length - 1];
39+
const against = ranges[i];
40+
41+
/*
42+
|---top---|
43+
|---against---|
44+
*/
45+
if (top.end < against.start) {
46+
s.push(against);
47+
/*
48+
|---top---|
49+
|----against----|
50+
*/
51+
}
52+
else if (top.start === against.start && top.end < against.end) {
53+
s.pop();
54+
s.push({
55+
start: top.start,
56+
end: top.end,
57+
traits: top.traits.concat(against.traits),
58+
});
59+
s.push({
60+
start: top.end,
61+
end: against.end,
62+
traits: against.traits,
63+
});
64+
/*
65+
|---top---|
66+
|---against---|
67+
*/
68+
}
69+
else if (top.end < against.end) {
70+
s.pop();
71+
s.push({
72+
start: top.start,
73+
end: against.start,
74+
traits: top.traits,
75+
});
76+
s.push({
77+
start: against.start,
78+
end: top.end,
79+
traits: top.traits.concat(against.traits),
80+
});
81+
s.push({
82+
start: top.end,
83+
end: against.end,
84+
traits: against.traits,
85+
});
86+
/*
87+
|--------top--------|
88+
|---against---|
89+
*/
90+
}
91+
else if (top.start < against.start && top.end > against.end) {
92+
s.pop();
93+
s.push({
94+
start: top.start,
95+
end: against.start,
96+
traits: top.traits,
97+
});
98+
s.push({
99+
start: against.start,
100+
end: against.end,
101+
traits: top.traits.concat(against.traits),
102+
});
103+
s.push({
104+
start: against.end,
105+
end: top.end,
106+
traits: top.traits,
107+
});
108+
}
109+
else {
110+
console.warn(top, against);
111+
throw new Error("unhandled case");
112+
}
113+
}
114+
115+
return s;
116+
}

src/views/chat/Composer/Composer.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ const onKeyDown = async(ev: KeyboardEvent) => {
211211
lastTyping = Date.now();
212212
api.sendTyping(host.value, guild.value, channel.value);
213213
}
214-
if (ev.key !== this.$t("enter") || ev.shiftKey) return;
214+
if (ev.key !== "Enter" || ev.shiftKey) return;
215215
ev.preventDefault();
216216
sendMessage();
217217
};

tests/formatting.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, expect, test } from "vitest";
2-
import { getLinks, linkify, nearestOverlap } from "../src/logic/formatting";
2+
import { getLinks, linkify } from "../src/logic/formatting";
33

44
describe.concurrent("linkification", () => {
55
const cases = [

0 commit comments

Comments
 (0)