public
Created

Non-break-space userscript for StackExchange

  • Download Gist
nonbreakspaces.user.js
JavaScript
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
// ==UserScript==
// @name NonBreakSpaces+
// @namespace benjol
// @description Make Ctrl-space add a non-break-space in textareas
// @include http://french.stackexchange.com/questions/*
// @include http://meta.french.stackexchange.com/questions/*
// @include http://chat.stackexchange.com/rooms/1098/*
// ==/UserScript==
function inject(f) {
var script = document.createElement("script");
script.type = "text/javascript";
script.textContent = "(" + f.toString() + ")()";
document.body.appendChild(script);
};
 
//Note that if you copy in Firefox, you'll get the impression that the nbsp isn't there, but it is!
// (https://bugzilla.mozilla.org/show_bug.cgi?id=359303)
inject(function () {
var nbsp = String.fromCharCode(160),
left = "«" + nbsp, //171
right = nbsp + "»", //187
next = left;
 
function insert(field, val) {
if(field.selectionStart || field.selectionStart == '0') {
var cursorAfter = field.selectionStart + val.length;
var first = field.value.slice(0, field.selectionStart);
var second = field.value.slice(field.selectionEnd);
field.value = first + val + second;
field.setSelectionRange(cursorAfter, cursorAfter);
}
else //won't work in IE, sorry!
field.value += val;
}
 
$(document).keypress(function(event) {
var field = event.target;
 
if(event.ctrlKey && event.charCode == 32) {
insert(field, nbsp);
event.preventDefault();
} else if (event.charCode == 34) {
insert(field, next);
next = (next == left) ? right : left;
event.preventDefault();
};
});
});

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.