/
chatformatting.user.js
123 lines (106 loc) · 4.33 KB
/
chatformatting.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// ==UserScript==
// @name Chat Formatting
// @namespace http://tampermonkey.net/
// @version 0.2
// @description Had hotkeys like Ctrl-b, Ctrl-i, and things to chat.
// @author The Flamin' Taco
// @include *://chat.meta.stackoverflow.com/rooms/*
// @include *://chat.meta.stackexchange.com/rooms/*
// @include *://chat.stackexchange.com/rooms/*
// @include *://chat.stackoverflow.com/rooms/*
// @include *://chat.askubuntu.com/rooms/*
// @include *://chat.serverfault.com/rooms/*
// @run-at document-end
// @grant none
// @updateURL https://github.com/TehFlaminTaco/TacosUserscripts/raw/master/chatformatting.user.js
// ==/UserScript==
(function() {
'use strict';
// Your code here...
function toggle_formatting(event, tar, str){
if(event.key!=tar)
return;
event.preventDefault();
var inp = document.getElementById('input');
var start = inp.selectionStart;
var end = inp.selectionEnd;
if(start == end){
if(inp.value.substr(start, str.length) == str){
inp.selectionStart = start + str.length;
inp.selectionEnd = end + str.length;
return;
}
inp.value = inp.value.substring(0, start) + str + inp.value.substring(start) + (inp.value.substr(-str.length)!=str ? str : "");
inp.selectionStart = start + str.length;
inp.selectionEnd = end + str.length;
return;
}
var first_chunk = inp.value.substring(0,start);
var middle = inp.value.substring(start,end);
var end_chunk = inp.value.substring(end);
var mid_left = middle.substr(0,str.length);
var mid_right = middle.substr(-str.length);
if(mid_left == str && mid_right == str){
middle = middle.substr(str.length, middle.length - (str.length * 2));
inp.value = first_chunk + middle + end_chunk;
inp.selectionStart = first_chunk.length;
inp.selectionEnd = first_chunk.length + middle.length;
return;
}
middle = str + middle + str;
inp.value = first_chunk + middle + end_chunk;
inp.selectionStart = first_chunk.length;
inp.selectionEnd = first_chunk.length + middle.length;
}
function add_bracket(event, left, right){
var inp = document.getElementById('input');
var start = inp.selectionStart;
var end = inp.selectionEnd;
if(event.key==right && start==end){
if(inp.value.substr(start, right.length) == right){
event.preventDefault();
inp.selectionStart = start + right.length;
inp.selectionEnd = end + right.length;
}
if(right != left)
return;
}
if(event.key!=left)
return;
if(start == end){
event.preventDefault();
if(inp.value.substr(start, left.length) == left){
inp.selectionStart = start + left.length;
inp.selectionEnd = end + left.length;
}else{
inp.value = inp.value.substring(0, start) + left + (start==inp.value.length || inp.value.substr(-right.length)!=right ? right : "") + inp.value.substring(start);
inp.selectionStart = start + left.length;
inp.selectionEnd = start + left.length;
}
return;
}
event.preventDefault();
var first_chunk = inp.value.substring(0,start);
var middle = inp.value.substring(start,end);
var end_chunk = inp.value.substring(end);
middle = left + middle + right;
inp.value = first_chunk + middle + end_chunk;
inp.selectionStart = first_chunk.length;
inp.selectionEnd = first_chunk.length + middle.length;
}
$("#input").keydown(function(event){
if(event.ctrlKey){
toggle_formatting(event, 'b', '**');
toggle_formatting(event, 'i', '_');
toggle_formatting(event, '`', '`');
toggle_formatting(event, 'l', '$');
toggle_formatting(event, 'L', '$$');
}else{
add_bracket(event, '(', ')');
add_bracket(event, '{', '}');
add_bracket(event, '[', ']');
add_bracket(event, '<', '>');
add_bracket(event, '"', '"');
}
});
})();