NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name IRCCloud Send with Style
// @description Enables font styles in IRCCloud
// @include https://www.irccloud.com/*
// @version 1.0.0
// @grant none
// @license MIT
// ==/UserScript==
(function () {
'use strict';
var fontStyles = {
color: '\u0003',
bold: '\u0002',
reset: '\u000f',
italic: '\u001d',
underline: '\u001f',
strikethrough: '\u001e',
hexcolor: '\u0004',
};
// 核心样式替换
function replaceFontStyles(str) {
return str.replace(/\$B/g, fontStyles.bold)
.replace(/\$R/g, fontStyles.reset)
.replace(/\$I/g, fontStyles.italic)
.replace(/\$U/g, fontStyles.underline)
.replace(/\$X/g, fontStyles.strikethrough)
.replace(/\$C/g, fontStyles.color)
.replace(/\$H/g, fontStyles.hexcolor);
}
// 彩虹效果处理
function rainbow(text, match) {
var colors = ['05', '04', '07', '08', '09', '03', '11', '10', '12', '02', '06', '13', '15', '14'];
var output = '';
var colorIndex = Math.floor(Math.random() * colors.length);
for (var i = 0; i < match.length; i++) {
output += fontStyles.color + colors[colorIndex] + match[i];
colorIndex = (colorIndex + 1) % colors.length;
}
return output + fontStyles.color;
}
function replaceSpecials(str) {
return str.replace(/<RB>(.*?)<\/RB>/gi, (_, p1) => rainbow(_, p1));
}
// 输入框事件绑定
function bindTextarea() {
if (!cb()) return;
var input = $('#bufferInputView' + cb().bid());
if (input.data('sws') === '1') return;
input.on('keydown', function (e) {
if (e.keyCode === 13) { // 回车键
let val = input.val();
val = replaceFontStyles(val);
val = replaceSpecials(val);
input.val(val);
}
}).data('sws', '1');
}
// 初始化
(function init() {
window.SESSION?.bind('init', () => {
window.SESSION.buffers.on('doneSelected', bindTextarea);
bindTextarea();
});
if (!window.SESSION) setTimeout(init, 100);
})();
})();