forked from CringeStudios/gamja
Avoid String.prototype.replaceAll
Not well supported in web browsers, except Firefox.
This commit is contained in:
parent
73f14f38fa
commit
deb8d4c01e
22
lib/irc.js
22
lib/irc.js
@ -20,7 +20,7 @@ export const ERR_SASLALREADY = "907";
|
|||||||
|
|
||||||
export const STD_CHANNEL_TYPES = "#&+!";
|
export const STD_CHANNEL_TYPES = "#&+!";
|
||||||
|
|
||||||
var tagsEscape = {
|
const tagEscapeMap = {
|
||||||
";": "\\:",
|
";": "\\:",
|
||||||
" ": "\\s",
|
" ": "\\s",
|
||||||
"\\": "\\\\",
|
"\\": "\\\\",
|
||||||
@ -28,6 +28,16 @@ var tagsEscape = {
|
|||||||
"\n": "\\n",
|
"\n": "\\n",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const tagUnescapeMap = Object.fromEntries(Object.entries(tagEscapeMap).map(([from, to]) => [to, from]));
|
||||||
|
|
||||||
|
function escapeTag(s) {
|
||||||
|
return s.replace(/[; \\\r\n]/, (ch) => tagEscapeMap[ch]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function unescapeTag(s) {
|
||||||
|
return s.replace(/\\[:s\\rn]/, (seq) => tagUnescapeMap[seq]);
|
||||||
|
}
|
||||||
|
|
||||||
function parseTags(s) {
|
function parseTags(s) {
|
||||||
var tags = {};
|
var tags = {};
|
||||||
s.split(";").forEach(function(s) {
|
s.split(";").forEach(function(s) {
|
||||||
@ -39,10 +49,7 @@ function parseTags(s) {
|
|||||||
throw new Error("expected an equal sign in tag");
|
throw new Error("expected an equal sign in tag");
|
||||||
}
|
}
|
||||||
var k = parts[0];
|
var k = parts[0];
|
||||||
var v = parts[1];
|
var v = unescapeTag(parts[1]);
|
||||||
for (var ch in tagsEscape) {
|
|
||||||
v = v.replaceAll(tagsEscape[ch], ch);
|
|
||||||
}
|
|
||||||
if (v.endsWith("\\")) {
|
if (v.endsWith("\\")) {
|
||||||
v = v.slice(0, v.length - 1)
|
v = v.slice(0, v.length - 1)
|
||||||
}
|
}
|
||||||
@ -54,10 +61,7 @@ function parseTags(s) {
|
|||||||
function formatTags(tags) {
|
function formatTags(tags) {
|
||||||
var l = [];
|
var l = [];
|
||||||
for (var k in tags) {
|
for (var k in tags) {
|
||||||
var v = tags[k];
|
var v = escapeTag(tags[k]);
|
||||||
for (var ch in tagsEscape) {
|
|
||||||
v = v.replaceAll(ch, tagsEscape[ch]);
|
|
||||||
}
|
|
||||||
l.push(k + "=" + v);
|
l.push(k + "=" + v);
|
||||||
}
|
}
|
||||||
return l.join(";");
|
return l.join(";");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user