User:TheOneFootTallBrickWall/common.js

// ChatPlugins var ChatPlugins = { release: { version: 1.1, branch: "Stable" },   models: { feature: function(id, name, access, script) { this.enabled = false; this.id = id; this.name = name; this.access = access; this.script = script; },       alert: function(text) { newInlineAlert = new models.InlineAlert; newInlineAlert.attributes.text = text; mainRoom.model.chats.add(newInlineAlert); },       command: function(command, script) { this.command = command; this.script = script; }   },    features: {}, settings: { release: { version: 1.0, branch: "Stable" },       icons: { staffIcon: "http://img1.wikia.nocookie.net/__cb20140626173406/gamedezyner/images/6/60/StaffIcon.png", modIcon: "http://img1.wikia.nocookie.net/__cb20140626173343/gamedezyner/images/8/89/ModIcon.png" },       sounds: { pingSound: "http://images.wikia.com/gamedezyner/images/7/7e/PingSound.ogg" },       features: { pings: false }   },    save: function { ChatPlugins.settings.features.pings = ChatPlugins.features.pings.enabled; api.functions.editPage("User:" + wgUserName + "/ChatPlugins.js", JSON.stringify(ChatPlugins.settings)); },   load: function { new ChatPlugins.models.alert("Welcome to Chat Plugins 1.0!"); pagecontents = api.functions.getPageContents("User:" + wgUserName + "/ChatPlugins.js"); if (pagecontents == "error") { new ChatPlugins.models.alert("There seems to be something wrong with your settings file, or it doesn't exist yet. Default settings have been saved."); ChatPlugins.save; } else { ChatPlugins.settings = JSON.parse(pagecontents); ChatPlugins.features.pings.enabled = ChatPlugins.settings.features.pings; ChatPlugins.features.pings.words = ChatPlugins.settings.pings; }       pagecontents = api.functions.getPageContents("MediaWiki:ChatPluginsSettings.js"); if (pagecontents != "error") { wikicustom = JSON.parse(pagecontents); if (typeof(wikicustom.settings) != "object") { new ChatPlugins.models.alert("This wiki has a custom settings page, but it is broken."); } else { ChatPlugins.settings.icons = wikicustom.settings.icons; //Load Wiki-specific icons ChatPlugins.settings.sounds = wikicustom.settings.sounds; //Load Wiki-specific sounds new ChatPlugins.models.alert("This wiki has custom settings and they have been applied."); }       }    } }; // Call API function callAPI(data, method, callback) { data.format = 'json'; $.ajax({       data: data,        dataType: 'json',        url: wgScriptPath + '/api.php',        type: method,        success: function(response) {            if (response.error)                showError('API error: ' + response.error.info);            else                callback(response);        },        error: function(xhr, error) {            showError('AJAX error: ' + error);        }    }); } //Inline-mod tools function scrollToBottom { var chat = document.getElementById('Chat_' + mainRoom.roomId); chat.scrollTop = chat.scrollHeight; } $("head").append('.Chat .username:after {content: "";} .Chat .message {display: block;} '); ChatPlugins.features.modIcons = new ChatPlugins.models.feature(null, "Mod Icons", 0, function(chat) {   var time = new Date;	var hours = time.getHours;	var minutes = time.getMinutes;	var seconds = time.getSeconds;	if ( hours  < 10) hours = '0' + hours;	if (minutes < 10) minutes = "0" + minutes;	if (seconds < 10) seconds = "0" + seconds;    mainRoom.viewDiscussion.chatUL.children.last.children(".message").attr('msg-source', chat.attributes.text);    mainRoom.viewDiscussion.chatUL.children.last.children(".message").attr('msg-time', hours + ':' + minutes + ':' + seconds);    var icon = '';    for (var i in mainRoom.model.users.models) {        if (mainRoom.model.users.models[i].attributes.name == chat.attributes.name) {            if (mainRoom.model.users.models[i].attributes.isStaff) {                icon = ' '; } else if (mainRoom.model.users.models[i].attributes.isModerator) { icon = ' '; }           break; }   }    mainRoom.viewDiscussion.chatUL.children.last.children(".username").html(mainRoom.viewDiscussion.chatUL.children.last.children(".username").html + icon); if (wgUserGroups.indexOf("chatmoderator") >= 0 || wgUserGroups.indexOf("sysop") >= 0) { mainRoom.viewDiscussion.chatUL.children.last.children('.username').hover(           function {                var thistarget = this;                var username = $(thistarget).parent.attr("data-user");                if (username != wgUserName) {                    $(thistarget).append(' - \ Kick \ - Block \ - Log ');                   $(thistarget).children.children('.inline-kick').click(function { mainRoom.kick({                           name: username                        }); });                   $(thistarget).children.children('.inline-block').click(function(e) { var usr = $(this).attr('data-usr'), token = mw.user.tokens.get('editToken'); // Show the block modal $.showCustomModal('Ajax Block: ' + usr, 'Expiry: Other  Reason: Other    Prevent account creation  Prevent from posting on message wall  <label for="autoBlock">Block all IPs from this user (AutoBlock) <input id="overrideBlock" type="checkbox"> <label for="overrideBlock">Override any blocks already in effect ', {                            id: 'ajaxBlockModal',                            callback: function {                                // Auto checks checkboxes (customizable)                                 $('#accountCreation').attr('checked', true); $('#disableWall').attr('checked', true); $('#autoBlock').attr('checked', true); $('#overrideBlock').attr('checked', true); var $expirySelect = $('#AjaxBlockExpirySelect'); var $reasonSelect = $('#AjaxBlockReasonSelect'); // Adds the common times and reasons (customizable) $.each(obj.expiryTimes, function(key, value) {                                   $expirySelect                                        .append($('  ') .attr('value', key) .text(value));                               }); $.each(obj.blockReasons, function(key, value) {                                   $reasonSelect                                        .append($('  ') .attr('value', key) .text(value));                               }); },                           buttons: [{ // Block button id: 'ajaxBlockBlock', defaultButton: true, message: 'Block this user', handler: function { var blockDuration = ($('#AjaxBlockExpirySelect').val == 'other') ? $('#AjaxBlockCustomExpiry').val.toLowerCase : $('#AjaxBlockExpirySelect').val.toLowerCase; var blockReason = ($('#AjaxBlockReasonSelect').val == 'other') ? $('#AjaxBlockCustomReason').val : $('#AjaxBlockReasonSelect').val + (($('#AjaxBlockCustomReason').val.trim !== ) ? ':' + $('#AjaxBlockCustomReason').val : ); // Creates the base block object var config = { action: 'block', user: usr, expiry: blockDuration, reason: blockReason, bot: true, token: token };                                   if ($('#accountCreation').is(':checked')) config.nocreate = 1; if ($('#autoBlock').is(':checked')) config.autoblock = 1; if (!$('#disableWall').is(':checked')) config.allowusertalk = 1; if ($('#overrideBlock').is(':checked')) config.reblock = 1; callAPI(config, 'POST', function(d) { // Does the actual blocking                                       if (!d.error) {                                            mainRoom.viewDiscussion.chatUL.append('<li class="inline-alert">' + usr + ' has been blocked successfully. (<span class="undo-AjaxBlock" style="color:#3cd7fa; cursor: pointer;" data-usr="' + usr + '">undo )</li>');                                           mainRoom.kick({ name: usr });                                           $('.undo-AjaxBlock').last.click(function(e) { callAPI({ // Does the actual unblocking                                                   action: 'unblock',                                                    user: $(this).attr('data-usr'),                                                    reason: 'undo',                                                    token: token                                                }, 'POST', function {                                                    mainRoom.viewDiscussion.chatUL.append('<li class="inline-alert">' + usr + ' has been unblocked successfully.</li>');                                                }); });                                       } else {                                            mainRoom.viewDiscussion.chatUL.append('<li class="inline-alert">Block for ' + usr + ' failed: ' + d.error.code + '</li>');                                        }                                    }); $('#ajaxBlockModal').closeModal; // Close the modal }                           }, { // Cancel button id: 'ajaxBlockCancel', defaultButton: true, message: 'Cancel', handler: function { $('#ajaxBlockModal').closeModal; }                           }]                        });                    });                }            },            function { $(this).children('.inlinemod').remove; }       );        mainRoom.viewDiscussion.chatUL.children.last.children('.message').hover( function { thistarget = this; username = $(thistarget).parent.attr("data-user"); timestamp = $(thistarget).attr('msg-time'); message = $(thistarget).attr('msg-source'); $(thistarget).append('<span class="inline-quote" style="color: #3cd7fa !important;cursor:pointer;"> Quote '); $(thistarget).children('.inline-quote').click(function(e) {                   if ( e.shiftKey ) {                        $('.message textarea').val($('.message textarea').val + '[' + timestamp + '] ' + username + ": " + message.replace(/^\/me/, "* " + username) + '\n');                    } else {                        $('.message textarea').val('[' + timestamp + '] ' + username + ": " + message.replace(/^\/me/, "* " + username) + '\n');                        scrollToBottom;                    }                    $(".message textarea").focus;                }); },           function { $(this).children('.inline-quote').remove; }       );    } }); //Bind function to chat updates setTimeout(function {   mainRoom.model.chats.bind('afteradd', ChatPlugins.features.modIcons.script, mainRoom.viewDiscussion); }, 15000);

/* PrivateChatList responsive design */ // The actual thing that calculates the height and crap var calcRail = function { var nodes = [].slice.call(document.querySelectorAll('#Rail > *:not(#WikiChatList)')); var height = 0; nodes.forEach(function(el) {      height = height + (el.scrollHeight - 1);    }); document.getElementById('WikiChatList').style.height = (document.getElementById('Rail').offsetHeight - height - 70) + 'px'; }; // Bind function to window resize $(window).resize(calcRail); // select the target node var targets = [].slice.call(document.querySelectorAll('#PrivateChatList, #WikiChatList')); // create an observer instance var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type == 'attributes' && mutation.attributeName == 'style') return; calcRail; }); }); // configuration of the observer: var config = { attributes: true, childList: true, characterData: true, subtree: true }; // pass in the target node, as well as the observer options targets.forEach(function(target) {   observer.observe(target, config); }); // execute all that observer stuff when the window loads $(function {   mw.util.addCSS('#PrivateChatList {max-height: 40vh !important; overflow-y: auto;} #WikiChatList {overflow-y: auto;} #Rail {overflow: hidden !important;}');        calcRail;        var interval = setInterval(calcRail, 200);        // clear the interval after the window is fully loaded        setTimeout(function { clearInterval(interval); }, 15000); });