Jump to content

User:Quarl/shortcuts.js

From Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// [[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>