User:Quarl/shortcuts.js

This article will address the topic of User:Quarl/shortcuts.js, which is of great relevance today. User:Quarl/shortcuts.js has captured the attention of many due to its impact on various aspects of society, culture and the world in general. Over the years, there has been growing interest and debate surrounding User:Quarl/shortcuts.js, leading to further study and research on this topic. This article will analyze different perspectives, data and opinions in order to provide a broad and complete overview of 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] = input;
        for (var i=1; i < keys.length; ++i) {
            this.shortcuts] = input + ' ';
        }
    }
}

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

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

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

// replace the first word (doesn't require uppercase)
Shortcuts.prototype.substFirstWord = function(msg) {
    if (!msg) return msg;
    if (msg.match(/^(+)(.*)$/)) {
        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(+)\b(.*)$/)) ) {
        ret += m + this.subst(m);
        msg = m;
    }

    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(+)\b(.*)$/)) ) {
        ret += m + this.subst(m);
        msg = m;
    }

    ret += msg;
    return ret;
}

// </nowiki></pre>