Bruger:Christian75/Scripts/hotkeys.js

Fra Wikipedia, den frie encyklopædi
// This script is from the english wiki by user :en:User:GregU/hotkeys.js
//
// This defines some control-key shortcuts you can use in text fields.
// IE not supported.  See talk page for documentation.
// by Greg Ubben

// Add some control hotkeys for easily entering right-arrows (→) and other
// characters and phrases in the edit summary, edit box, or other text fields.
// hotkeys[] can be defined to augment the defaults. Type Ctrl-? to list all.

function hotkey(e) {
if (e && e.ctrlKey && hotkeys[String.fromCharCode( e.charCode )])
{
var newtxt = hotkeys[String.fromCharCode( e.charCode )];
var before = this.value.slice( 0, this.selectionStart );
var after  = this.value.slice( this.selectionEnd );
var scroll = this.scrollTop;

if (newtxt == "MENU") {         // type Ctrl-? for a list
var menu = "";
for (var key in hotkeys) {
var name  = key.toUpperCase().replace(",", "<").replace(".", ">");
var value = hotkeys[key].replace(/\n/g, "•").slice(0,40);
if (value && value != newtxt)
menu += "\u200E" + name + " \t" + value + "\n";
}
alert( menu );
return false;
}
//  hack to not override Ctrl-F, Ctrl-T, etc. in main text area
//
if (newtxt.search(/\[\[WP:|\bfix/i) >= 0 && this.id == "wpTextbox1") {
return true;
}
if (newtxt.search(/^\[*\w./) >= 0 && this.id != "wpTextbox1") {
if (before.search(/[^\s;,]$/) >= 0)  before += "; ";
if  (after.search(/^[^\s;,]/) >= 0)  newtxt += "; ";
}
this.value = before + newtxt + after;
this.selectionStart = this.selectionEnd = before.length + newtxt.length;
this.scrollTop = scroll;       // don't lose our position
return false;
}
return true;
}

$( function()
{
var defaultCtrl = {
"," : "←",                   // Ctrl <   left arrow
"." : "→",                   // Ctrl >   right arrow
"-" : "–",                   // Ctrl -   dash
"7" : "&" + "nbsp;",         // Ctrl &   non-breaking space
//"r" : "reverted [[WP:VAND|vandalism]]",
//"s" : "[[WP:STYLE]]",
//<nowiki>
//"s" : "{{hurtigslet}}",
//</nowiki>
"/" : "MENU"                 // special function
};
var fields = { wpSummary:0, wpTextbox1:0, wpReason:0, wpUploadDescription:0 };

if (mw.config.get('wgAction') != "view" || mw.config.get('wgCanonicalSpecialPageName'))
{
if (typeof(hotkeys) == 'undefined')  hotkeys = {};
for (var key in defaultCtrl) {
if (hotkeys[key] == null)
hotkeys[key] = defaultCtrl[key];
}
for (var field in fields) {
var f = document.getElementById(field);
if (f)  f.onkeypress = hotkey;
}
}
});