User:Quarl/shortcuts.js

// User:Quarl/shortcuts.js - shortcut utilities

//

// Defines the Shortcuts class. //  Input is an associative array like this: // /*  s = Shortcuts({                    'x1'   : 'str 1',                    'x2 '  : 'str 2', // the space after x2 prevents msg from displaying this entry                    'x3,x4': 'str 34' // x3 and x4 are aliases; msg only displays x3                });

function Shortcuts(input) { if (!(this instanceof Shortcuts)) return new Shortcuts(input);

this.shortcuts = {}; for (k in input) { var keys = k.toUpperCase.split(','); this.shortcuts[keys[0]] = input[k]; for (var i=1; i < keys.length; ++i) { this.shortcuts[keys[i]] = input[k] + ' '; }   } }

Shortcuts.prototype.msg = function { var msg = 'Shortcuts available:\n'; for (var key in this.shortcuts) { if (this.shortcuts[key].match(/ $/)) continue; msg += key + ': ' + this.shortcuts[key] + '\n'; }   return msg; }

Shortcuts.prototype.subst = function(word) { return trimspaces(this.shortcuts[word.toUpperCase]) || word; }

Shortcuts.prototype.substP = function(word) { return Boolean(this.shortcuts[word.toUpperCase]); }

// replace the first word (doesn't require uppercase) Shortcuts.prototype.substFirstWord = function(msg) { if (!msg) return msg; if (msg.match(/^([a-zA-Z]+)(.*)$/)) { return this.subst(RegExp.$1) + RegExp.$2; }   return msg; }

// replace all UPPERCASE words Shortcuts.prototype.substUppercaseWords = function(msg) { if (!msg) return msg; var ret = ''; var m;   while (msg && (m = msg.match(/^(.*?)\b([A-Z]+)\b(.*)$/)) ) { ret += m[1] + this.subst(m[2]); msg = m[3]; }

ret += msg; return ret; }

// replace all words (ignoring case) Shortcuts.prototype.substWords = function(msg) { if (!msg) return msg; var ret = ''; var m;   while (msg && (m = msg.match(/^(.*?)\b([A-Za-z]+)\b(.*)$/)) ) { ret += m[1] + this.subst(m[2]); msg = m[3]; }

ret += msg; return ret; }

//