Community Central
Community Central

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
// __NOWYSIWYG__ <syntaxhighlight lang="javascript">
/*jshint -W065 */
/* ########################################################################## */
/* ###                       User:Iynque/global.js                        ### */
/* ########################################################################## */
/* Any JavaScript here will be loaded for me only on every Wikia wiki page. */
 
 
/* ########################################################################## */
/* Settings */
/* ########################################################################## */

/* --- START UTC Clock Settings --- */
// See http://dev.wikia.com/wiki/DisplayClock for info
// "21 Oct 18:24 UTC"
window.DisplayClockJS = '%d %b %H:%2M UTC';
/* --- END UTC Clock Settings --- */

/* --- START AjaxRC Settings --- */
// See http://dev.wikia.com/wiki/AjaxRC for info
// Apply Ajax refresh to these pages
window.ajaxPages = ["Special:RecentChanges","Special:Log","Special:Contributions"];
//Refresh rate in milliseconds (60000 = 60 seconds); default 60000
window.ajaxRefresh = 15000;
/* --- END AjaxRC Settings --- */

/* --- START LastEdited Settings --- */
// See http://dev.wikia.com/wiki/LastEdited for info
window.lastEdited = {
    avatar: true, //Display editor's user avatar? boolean:<true|false>
    size: false, //Display current page size in bytes? boolean:<true|false>
    diff: true, //Show diff modal? boolean:<true|false>
    comment: true, //Display given edit summary? boolean:<true|false>
    time: 'timeago', //Time format. <timestamp|timeago>
    lang: 'en', //Any valid language code
    namespaces: {
        include: [],//List of namespaces to include
        exclude: []//List of namespace ids to exclude
    },
    pages: []//List of pages to exclude
};
/* --- END LastEdited Settings --- */

/* --- START Sine Settings --- */
Sine = {
    sine: '~~~',
    spacer: ''
};
/* --- END Sine Settings --- */

/* --- START Sine Custom Code --- */
/** 
 * Sine (this version has been modified)
 * documentation at: http://dev.wikia.com/wiki/Sine
 * © Peter Coester, 2012
*/
 
$(function () {
 
    window.Sine = function (my) {
 
        if ('edit' != $.getUrlVar('action')) return {};
 
        if ('undefined' == typeof my.sine)   my.sine   = '~~' + String.fromCharCode(126) + '~';
        if ('undefined' == typeof my.spacer) my.spacer = '--';
        if ('undefined' == typeof my.talkNameSpaces) {
            my.talkNameSpaces = [1,3,5,7,9,11,13,15,110,111,114,116,401,500,501,502,503];
        }
 
        if ('undefined' != typeof my.init) return my;
 
        var doSine = -1 != my.talkNameSpaces.indexOf(parseInt(wgNamespaceNumber));
 
        var placeSine = $('#EditPageRail .wpSummaryFields .checkboxes');
        placeSine.prepend('<label class="Sine"><input type="checkbox" name="Sine" id="Sine"> <span>Sine</span></label>');
        var sineCheckbox = $('#Sine');
 
        sineCheckbox
        .attr('checked', doSine)
 
        var blocks, editor;
 
        my.add = function () {
            if (!sineCheckbox.is(':checked')) return;
            switch (editor.mode) {
                case 'wysiwyg':
                    sineWYSIWYG();
                    break;
                case 'source':
                    sineSource();
                    break;
            }
        };
 
        my.init = function () {
            editor = getEditor();
            if (!editor) {
                window.setTimeout(
                    function () {
                        window.Sine.init();
                    }, 100
                );
                return;
            }
            $('input#wpSave').click(window.Sine.add);
            $('a#publish').click(window.Sine.add);
        };
 
        function getEditor () {
            if ('undefined' != typeof window.editorInstance) {
                return window.editorInstance;
            }
            if ('undefined' != typeof window.WikiaEditor && 'function' == typeof window.WikiaEditor.getInstance) {
                return window.WikiaEditor.getInstance();
            }
            return false;
        }
 
        function sineWYSIWYG () {
            var wysiwyg = editor.getEditbox();
            if (isSined(wysiwyg)) return;
            blocks = wysiwyg.find('> *');
            if (!blocks.length) return;
            var b = blocks.last();
            var inserted = false;
            if (b.is('p,dl')) {
                inserted = insertSine(b);
            }
            if (!inserted) {
                wysiwyg.append(createSine());
            }
        }
 
        function createSine () {
            var s, left, depth, type = getIndentType();
            switch (type) {
                case 'p':
                    left = getIndent('p');
                    s = $('<p>' + basicSine() +  '</p>');
                    if (left) s = s.css({ marginLeft: left });
                break;
                case 'dl':
                    depth = getIndent('dl');
                    s = basicSine();
                    for (var i = 0; i < depth; i++) {
                        s = '<dl><dd>' + s + '</dd></dl>';
                    }
                break;
            }
            return s;
        }
 
        function getIndentType () {
            for (var i = blocks.length - 1; i >= 0 ; i--) {
                var b = $(blocks[i]);
                if (b.is('p'))  return 'p';
                if (b.is('dl')) return 'dl';
            }
            return 'p';
        }
 
        function getIndent (type) {
            var b, left, depth;
            for (var i = blocks.length - 1; i >= 0 ; i--) {
                b = $(blocks[i]);
                if (b.is('p')) {
                    left = b.css('marginLeft');
                    return 'p' == type ? left : parseInt(left) / 20;
                }
                else if (b.is('dl')) {
                    depth = 0;
                    while (b.parents('dl').length) b = b.parents('dl');
                    b.find('dl').each( function(){
                        var d = $(this).parents('dl').length + 1;
                        if (d > depth) depth = d;
                    });
                    return 'dl' == type ? depth : (depth * 20).toString() + 'px';
                }
            }
            return 0;
        }
 
        function basicSine () {
            return my.sine;
        }
 
        function isSined (element) {
            return basicSine() == element.text().trim().substr(-basicSine().length);
        }
 
        function spacedSine () {
            return (my.spacer.length ? ' ' + my.spacer + ' ' : ' ') + basicSine();
        }
 
        function isInline (element) {
            return 'inline' == element.css('display') && !element.is('img[class*="placeholder"]');
        }
 
        function insertSine (block) {
            var b = block;
            if (block.is('dl')) {
                b = block.find('dd:last');
                b = b.parent().children().last();
                if (!b.is('dd,p')) return false;
            }
            var contents = $.makeArray(b.contents());
            if (!contents.length) {
                b.append(basicSine());
                return true;
            }
            var c = $(contents.pop());
            if ('#text' == c[0].nodeName) {
                c.after(spacedSine());
                return true;
            }
            else if (c.is('br')) {
                var s = basicSine();
                if (contents.length) {
                    var prev = $(contents.pop());
                    if ('#text' != prev[0].nodeName && !isInline(prev)) return false;
                    s = spacedSine();
                }
                c.before(s);
                return true;
            }
            else if (isInline(c)) {
                c.after(spacedSine());
                return true;
            }
            return false;
        }
 
        function isList (line) {
            return /^\:*[*#]/.test(line);
        }
 
        function isHeader (line) {
            return /^(={2,6})[^=]+\1$/.test(line);
        }
 
        function isBlock (line) {
            return /(?:----|\}\}|<\/(?:blockquote|div|pre|code|nowiki)>)$/.test(line);
        }
 
        function sineSource () {
            var source = editor.getContent();
            if (!source.trim().length) return;
            var lines = source.split(/\r\n|\r|\n/).reverse();
            var l = lines[0].trim();
            var s = basicSine();
            if (l.length) {
                if (basicSine() == l.substr(-4)) return;
                if (isList(l) || isHeader(l) || isBlock(l)) {
                    s = "\r\n" + emptySine(lines);
                } else {
                    s = spacedSine();
                }
            } else {
                s = emptySine(lines);
                if (!s) return;
            }
            editor.setContent(source + s);
        }
 
        function emptySine (lines) {
           var s = basicSine();
           for (var i = 1; i < Math.min(4, lines.length); i++) {
                var l = lines[i].trim();
                if (!l.length) continue;
                if (basicSine() == l.substr(-4)) return false;
                var m = l.match(/^(\:+)/);
                if (m) s = m[1] + s;
                break;
            }
            return s;
        }
 
        return my;
 
    }('undefined' == typeof window.Sine ? {} : window.Sine);
 
    if ('undefined' != window.Sine && 'function' == typeof window.Sine.init) {
        window.Sine.init();
    }
});
/* --- END Sine Custom Code --- */


/* --- START Standard Edit Summary Settings --- */
//No longer used; disable settings too
// window.dev = window.dev || {};
// window.dev.editSummaries = {
//     select: [
//         'Standard edit summaries',
//         'Refactoring━━━━━━━━━━━━━', [
//             'Cleanup',
//             'Corrected spelling/grammar',
//             'Factual correction',
//             'Formatting',
//             'Source tidying',
//             'Wikifying',
//             'Corrected template usage'
//          ],
//         'Content━━━━━━━━━━━━━━━', [
//             'Updated with new information',
//             'Expanded',
//             'Revised',
//             'Added sources',
//             'Neutral POV',
//             'Replaced duplicate image(s)'
//          ],
//         'Templates━━━━━━━━━━━━━━', [
//             'Added template(s)',
//             'Added {{Delete}}',
//             'Added {{Stub}}',
//             'Added infobox'
//          ],
//         'Categories━━━━━━━━━━━━━━', [
//             'Added category',
//             'Modified category',
//             'Organized categories'
//          ],
//         'Removal/Reversion━━━━━━━━━━', [
//             'Reverted vandalism',
//             'Reverted test edit',
//             'Reverted vanity edit',
//             'Removed fanon',
//             'Removed libel/slander',
//             'Removed © violation'
//          ]
//     ]
// };
/* --- END Standard Edit Summary Settings --- */


/* ########################################################################## */
/* Import Scripts */
/* ########################################################################## */
importArticles({
    type: 'script',
    articles: [
        'u:dev:Wikimarks/code.js', //Wikimarks menu
        'u:dev:DisplayClock/code.js', //Show UTC clock
        'u:dev:RevealAnonIP/usercode.js', //http://dev.wikia.com/wiki/RevealAnonIP
        'u:dev:AjaxRC/code.js', //Special:RecentChanges live update
        'u:dev:LastEdited/code.js', //add who last edited to pages
        'u:dev:NullEditButton/code.js', //adds a "Null Edit" option to page controls
        'u:dev:MediaWiki:AjaxDiff/code.js', //diff without leaving RC
        'u:dev:SignatureCheck/code.js' //check if talk post was signed
        //'u:dev:SkinSwitchButton/code.js', //adds buttons to change skin
            //↳Not used often enogh to justify extra overhead :P
        //'u:dev:Standard_Edit_Summary/code.js', //offer edit summaries
            //↳Hasn't been useful to me
        //'u:dev:MediaWiki:Rollback/code.js', //always show rollback, even if not a rollbacker
            //↳don't like it :P
        //'u:dev:QuickToolsv2/code.js', //adds quick tools to pages
            //↳Not used very often; Wikimarks handles a lot of this anyway
        //'u:kocka:MediaWiki:Emoticons.js', //adds list of emotes to chat
            //↳meh; imported from user's test wiki (too risky IMHO :P)
        //'u:dev:InactiveUsers/code.js', //show inactive users
            //↳doesn't work? meh anyway :P
        //'u:dev:HighlightUsers/code.js', //http://dev.wikia.com/wiki/HighlightUsers
            //↳Wikia is slower when this is used
        //'u:dev:MarkForDeletion/code.js', //Quickly insert 'delete' template
            //↳Not used very often
    //CODE COPIED HERE; DON'T IMPORT ORIGINAL
        //'u:dev:Sine/code.js', //always sign talk page posts
            //↳temporarily disabled while modified code is here (above)
    //UNECESSARY
        //'u:dev:PortableCSSPad/code.js', //Add CSS injector to toolbar
            //↳Not necessary with modern browser debug/developer tools
        //'u:dev:PurgeButton/code.js', //purge button
            //↳Click UTC clock OR use Wikimarks item instead
        //'u:dev:Translator/Translator.js', //Translator button
            //↳doesn't seem to do anything
        //'u:dev:ShowAdsButton/code.js', //Button to toggle ads on and off while logged in
            //↳doesn't seem to do anything
        //'u:dev:SkinSwitchButton/code.js', //Buttons to easily change wiki skin
            //↳can change with WikiMarks
    //OLD; DON'T USE
        //'u:wikimarks:Client.js', //Wikimarks menu; moved to u:dev:Wikimarks/code.js
        //'u:railgunscript:MediaWiki:RailgunClient.min.js', //http://railgunscript.wikia.com/wiki/Railgun_Wiki
    ]
});
/* ####################### END of User:Iynque/global.js ##################### */
console.info("Loaded User:Iynque/global.js version 46.3");
// </syntaxhighlight>