User:Quarl/shortcuts.js

From Wikipedia, the free encyclopedia

Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.

// [[User:Quarl/shortcuts.js]] - shortcut utilities
 
// <pre><nowiki>
 
// 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;
}
 
// </nowiki></pre>