Difference between revisions of "MediaWiki:Common.js"

m
m (Blanked the page)
Tag: Blanking
Line 1: Line 1:
/* globals $, mw, uix */
 
(function() {
 
    "use strict";
 
  
    var namespace = window.namespace = mw.config.get('wgCanonicalNamespace');
 
    var action = window.action = mw.config.values.wgAction;
 
 
    /* Add a class to allow per-theme styling of the wiki. */
 
    var theme;
 
    if (typeof uix === 'undefined') {
 
        theme = $("dt:contains('Style')").next().find('a').text();
 
    } else {
 
        theme = uix.user.themeName;
 
    }
 
    $('#mw-content-text').addClass('w' + theme.replace(/\s/g, ''));
 
 
    /* Add a class to allow per-namespace styling of the wiki. */
 
    $('#mw-content-text').addClass('wNamespace' + namespace);
 
 
    /* Fix TOC anchor scrolling (Xenforo breaks it otherwise).  */
 
    $('.toclevel-1, .toclevel-2, .toclevel-3, .toclevel-4, .toclevel-5').on('click', function(e) {
 
        e.preventDefault();
 
 
        var $target = $(document.location.hash.replace(/[–-]/,'E2.80.93').replace(',','2C'));
 
 
        $('html, body').stop()
 
            .animate({
 
                'scrollTop': $target.offset().top - 100
 
            }, 500, 'swing', function() {
 
                window.location.hash = target;
 
            });
 
    });
 
 
    /* Create a common namespace for stratics wiki js */
 
    (function() {
 
mw.loader.using( 'mw.Api' ).then( function () {
 
        var temp = {
 
            data: {},
 
            f: {
 
                atlas: {
 
                    ui: {}
 
                },
 
                util: {
 
                    /* Get the current time. */
 
                    getTime: function() {
 
                        var j;
 
                        var now = new Date(),
 
                            time = [now.getHours(), now.getMinutes(), now.getSeconds()],
 
                            suffix = time[0] < 12 ? "AM" : "PM";
 
                        for (j = 1; 3 > j; j++) {
 
                            time[j] = ('0' + time[j]).slice(-2);
 
                        }
 
                        return [time.join(":"), ' ', suffix].join('');
 
                    },
 
                    makehtml: function(type, obj, text) {
 
                        var str = "<" + type,
 
                            key;
 
                        for (key in obj) {
 
                            if (obj.hasOwnProperty(key)) {
 
                                str += ' ' + key + '="' + obj[key] + '"';
 
                            }
 
                        }
 
                        return str + ('input' === type ? '' : '>') + ("input" === type ? '/>' + (undefined === text ? '' : text) :
 
                            (undefined === text ? '' : text) + '</' + type + '>');
 
                    },
 
                    reloadPage: function() {
 
                        location.reload();
 
                    }
 
                },
 
                wiki: {
 
                    api: new mw.Api(),
 
                    /* Retrieves the wiki markup for a page; defaults to the current page. */
 
                    getMarkup: function(page) {
 
                        var getPage = function(callback, page) {
 
                            $.get('https://www.stratics.com/w/api.php?action=query&prop=revisions&rvprop=content&format=json&formatversion=2&titles=' + page, function(data) {
 
                                callback.apply(data);
 
                            });
 
                        };
 
                        getPage(function() {
 
                        /* Allow scripts to be cached. */
 
                            $.ajaxSetup({
 
                                cache: false
 
                            });
 
                            stratics.wiki.markup = this.query.pages[0].revisions[0].content;
 
                            $('body').trigger('markupArrived');
 
                        }, page || mw.config.get("wgPageName"));
 
                    },
 
                    /* Submits a markup edit to the server */
 
                    submitMarkup: function(summary, content) {
 
                        stratics.f.wiki.api.postWithToken("edit", {
 
                            action: "edit",
 
                            title: mw.config.get("wgPageName"),
 
                            summary: summary,
 
                            text: content
 
                        }).done(function(result, jqXHR) {
 
                            mw.log("Saved successfully");
 
                            $('body').trigger('submitMarkupSuccess');
 
                        }).fail(function(code, result) {
 
                            if (code === "http") {
 
                                mw.log("HTTP error: " + result.textStatus); // result.xhr contains the jqXHR object
 
                            } else if (code === "ok-but-empty") {
 
                                mw.log("Got an empty response from the server");
 
                            } else {
 
                                mw.log("API error: " + code);
 
                            }
 
                            $('body').trigger('submitMarkupFailure');
 
                        });
 
                    }
 
                }
 
            },
 
            keycodes: {
 
                27: 'ESC',
 
                33: 'NE',
 
                34: 'SE',
 
                35: 'SW',
 
                36: 'NW',
 
                37: 'W',
 
                38: 'N',
 
                39: 'E',
 
                40: 'S'
 
            },
 
            wiki: {
 
                markup: '',
 
                openEdits: []
 
            }
 
        };
 
      window.stratics = $.extend(true, (undefined === window.stratics) ? {} : window.stratics, temp); // Avoid clobbering any existing window.stratics object.
 
});
 
    })(window);
 
 
    /* Tests if an element is visible on the screen. */
 
    $.fn.isOnScreen = function() {
 
        var element = this.get(0);
 
        var bounds = element.getBoundingClientRect();
 
        return bounds.top < window.innerHeight && bounds.bottom > 0;
 
    };
 
 
    /* Returns the scale transform value for an element. */
 
    $.fn.getScale = function() {
 
        var vals = this.css('transform');
 
        return (vals == 'none') ? 1 : vals.split('(')[1].split(')')[0].split(',')[0];
 
    };
 
 
    /* Returns an array of the 4 inset values for an element. */
 
    $.fn.getInsets = function() {
 
        var vals = this.css('clip-path');
 
        if (vals == 'none') {
 
            vals = this.css('-webkit-clip-path');
 
        }
 
        return vals.split('(')[1].split(')')[0].split(/px\s?/);
 
    };
 
 
    /* Sort the options within a select alphabetically */
 
    $.fn.sortOptions = function() {
 
        var optionList = this.find('option')
 
            .sort(function(a, b) {
 
                return (a.text > b.text ? 1 : (a.text < b.text ? -1 : 0));
 
            });
 
        return this.empty()
 
            .append(optionList);
 
    };
 
 
    $.fn.extend({
 
        /* Allow changing tip text */
 
        changeTip: function (newText) {
 
            return this.each(function() {
 
                var $e = $(this).find('.tooltipstered');
 
                $e.data($e.data('tooltipster-ns')[0]).Content[0].innerText = newText;
 
            });
 
        },
 
        /* Allow retrieving tip text */
 
        getTip: function (newText) {
 
            return this.data(this.data('tooltipster-ns')[0]).Content[0].innerText;
 
        },
 
 
        /* Add visibility equivalents to show/hide/toggle */
 
        vis: function() {
 
            return this.each(function() {
 
                $(this).css("visibility", "visible");
 
            });
 
        },
 
        invis: function() {
 
            return this.each(function() {
 
                $(this).css("visibility", "hidden");
 
            });
 
        },
 
        toggleVis: function() {
 
            return this.each(function() {
 
                $(this).css("visibility", function(b, a) {
 
                    return "visible" == a ? "hidden" : "visible";
 
                });
 
            });
 
        }
 
    });
 
 
    /* HTML construction helper function */
 
    var makehtml = window.makehtml = function(type, o, text) {
 
        var i = '<' + type;
 
        for (var key in o) {
 
            if (o.hasOwnProperty(key)) {
 
                i += ' ' + key + '="' + o[key] + '"';
 
            }
 
        }
 
        i += (type === 'input') ? '' : '>';
 
        i += (type === 'input') ? '/>' + (text || '') : (text || '') + '</' + type + '>';
 
        return i;
 
    };
 
 
    /* Add jQuery UI css */
 
    var addjQueryCSS = function() {
 
        $('head').append(makehtml('link', {
 
            rel: 'stylesheet',
 
            type: 'text/css',
 
            href: 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/ui-darkness/jquery-ui.min.css'
 
        }));
 
 
        /* Workaround for jQuery UI/Xenforo/Mediawiki css conflict */
 
        $('head').append(makehtml('style', {}, 'body .ui-dialog .ui-widget-header,body .ui-button {background:#333!important}'));
 
 
        /* Add jQuery UI styling for input[type=number] */
 
        $('head').append(makehtml('style', {}, 'input[type=number] {font-size: 13px;font-family: \'Open Sans\',Arial,sans-serif;color: rgb(207, 207, 207);background-color: #101010;padding: 5px 10px;margin-bottom: 2px;border: 1px solid #383838;-webkit-border-radius: 2px;-moz-border-radius: 2px;-khtml-border-radius: 2px;border-radius: 2px;outline: 0;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;-ms-box-sizing: border-box;box-sizing: border-box;min-height: 30}'));
 
    };
 
 
    /* Start: collapsible navboxes */
 
 
    $('.navbox-inner:gt(0)').each(function () {
 
        $(this)[$(this).hasClass('expanded') ? 'removeClass' : 'addClass']('mw-collapsed');
 
    });
 
mw.loader.using( 'jquery.makeCollapsible' ).then( function () {
 
    $('.navbox-inner').makeCollapsible();
 
});
 
 
    /* End: collapsible navboxes */
 
 
    /* Start Item Editor */
 
 
    if (action === 'edit' && (namespace === 'UO' || namespace === 'User')) {
 
 
        addjQueryCSS();
 
 
        /* Load properties JSON */
 
        $.getScript('/w/index.php?title=MediaWiki:PropertyBuilder.js&action=raw&ctype=text/javascript&1.0.1').complete(function() {
 
 
            /* Load jQuery UI */
 
            mw.loader.using(['jquery.ui.button', 'jquery.ui.tabs', 'jquery.ui.dialog'], function() {
 
 
                /* Load Editor */
 
                $.getScript('/w/index.php?title=MediaWiki:PropertyEditor.js&action=raw&ctype=text/javascript&1.0.0', function() {
 
                    loadEditor();
 
                });
 
            });
 
        });
 
    }
 
 
    /* End Item Editor  */
 
 
    /* Start Atlas Tools */
 
 
    if (/^UO\:Atlas/.test(mw.config.values.wgPageName) && namespace === 'UO' && $('.map-holder').length > 0) { /* Only run on UO Atlas pages which have a map present. */
 
 
        addjQueryCSS();
 
 
        /* Load jQuery UI */
 
        mw.loader.using(['jquery.ui.button', 'jquery.ui.tabs', 'jquery.ui.dialog'], function() {
 
 
            /* Load Editor */
 
            $.getScript('/w/index.php?title=MediaWiki:AtlasTools.js&action=raw&ctype=text/javascript');
 
        });
 
    }
 
 
    /* End Atlas Tools */
 
 
    /* Start Hunter's Guide scripts */
 
 
    if ($('a[title="Category:UO:Mobile"]').length > 0) {
 
 
        /* Block clicks to the edit tab as early as possible. */
 
        $('a[accesskey="e"]').click(function(e) {
 
            e.preventDefault();
 
            $('body').data('editClicked', true);
 
            return false;
 
        });
 
 
        /* Allow scripts to be cached. */
 
        $.ajaxSetup({
 
            cache: true
 
        });
 
 
        addjQueryCSS();
 
 
        /* Load jQuery UI */
 
        mw.loader.using(['jquery.ui.button', 'jquery.ui.tabs', 'jquery.ui.dialog', 'jquery.ui.selectable'], function() {
 
 
            /* Load jQuery UI selectmenu */
 
            $.getScript('https://cdn.rawgit.com/jquery/jquery-ui/master/ui/widgets/selectmenu.js').complete(function() {
 
 
                /* Load Localization */
 
                $.getScript('/w/index.php?title=MediaWiki:Localization.js&action=raw&ctype=text/javascript&1.0.5').complete(function() {
 
 
                    /* Load Mob Editor */
 
                    $.getScript('/w/index.php?title=MediaWiki:Mob%20Editor.js&action=raw&ctype=text/javascript&1.1.6');
 
 
                    /* Load Animal Lore Editor */
 
                    $.getScript('/w/index.php?title=MediaWiki:AnimalLoreTool.js&action=raw&ctype=text/javascript&1.2.23');
 
 
                });
 
            });
 
 
            /* Load OrgChart generator script */
 
            $.getScript('/w/index.php?title=MediaWiki:Orgchart.js&action=raw&ctype=text/javascript&1.0.0').complete(function() {
 
 
                /* Load Mob taxonomy data */
 
                $.getScript('/w/index.php?title=MediaWiki:MobData.js&action=raw&ctype=text/javascript&1.0.8').complete(function() {
 
 
                    /* Load Taxonomy chart builder */
 
                    $.getScript('/w/index.php?title=MediaWiki:MobTaxonomy.js&action=raw&ctype=text/javascript&1.0.1').complete(function() {
 
 
                    });
 
                });
 
            });
 
        });
 
    }
 
 
    /* Add quick links to the Hunter's Guide main page. */
 
    if (/\?title=UO:Hunter%27s_Guide/.test(location.search)) {
 
        $.getScript('/w/index.php?title=MediaWiki:AddQuickLinks.js&action=raw&ctype=text/javascript&1.0.0');
 
    }
 
 
  /* End Hunter's Guide scripts */
 
 
    /* Start crafter table script */
 
 
    if ($('table.crafteditems').length > 0) {
 
        /* Load StupidTable plugin */
 
        $.getScript('/w/index.php?title=MediaWiki:Stupidtable.min.js&action=raw&ctype=text/javascript&1.0.0').complete(function() {
 
 
            // This next works around the fact that mediawiki doesn't build proper HTML for tables.
 
            $('.crafteditems:not(.nosort)').each(function () {
 
                var th, trs, $this = $(this);
 
                th = $this.find('tr:first').detach();
 
                trs = $this.find('tr').detach();
 
                $this.empty();
 
                $this.append('<thead></thead><tbody></tbody>');
 
                $this.find('thead').append(th);
 
                $this.find('tbody').append(trs);
 
            });
 
 
            // Init stupidtable
 
            $('table.crafteditems').stupidtable();
 
            setTimeout(function(){
 
                $('.craftablecategory').click();
 
            }, 1);
 
 
        });
 
    }
 
 
  /* End crafter table scripts */
 
 
    /* Allow combining DPL results that need to be broken into multiple queries (ie, mobiles). */
 
    $('.mergetablefrom').find('th').parent().remove();
 
    $('.mergetableto').append($('.mergetablefrom').find('tr').detach());
 
    $('.mergetablefrom').remove();
 
 
}());
 

Revision as of 11:14, 28 December 2019