×
Create a new article
Write your page title here:
We currently have 3,602 articles on DC Multiverse Wiki. Type your article name above or create one of the articles listed here!



    DC Multiverse Wiki

    User:Universal Omega/cosmos.js

    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.
    $('#profile-top').append($('.profile-actions'));
    $('#firstHeading').html($('#firstHeading').html().replace('User:', ''));
    $('.profile-actions').html($('.profile-actions').html().replace(' | ', '').replace(' | ', '').replace(' | ', '').replace(' | ', ''));
    
    
    window.FastDeleteNoConfirm = true;
    if(wgPageName == "Project_New_America_(Earth-2:_Post-Crisis)"){
    window.history.replaceState(null,null, "/wiki/Project:_New_America_(Earth-2:_Post-Crisis)");
    }
    if(wgPageName == "DC_Multiverse_Wiki:New_America_(Earth-2:_Post-Crisis)"){
    window.location.replace("/wiki/Project_New_America_(Earth-2:_Post-Crisis)");
    }
    window.setInterval(function(){
        $('li[title="Project New America (Earth-2: Post-Crisis)"]').attr("title", "Project: New America (Earth-2: Post-Crisis)");
    $('li[title="Project: New America (Earth-2: Post-Crisis)"] a.wds-global-navigation__dropdown-link').html('<a class="wds-global-navigation__dropdown-link" style="color:black;">Project: New America (Earth-2: Post-Crisis)</a>');
    },0);
    $(function() {
    	var actions = mw.config.get("wgWikiaPageActions"),
    		oldbtn = $(".UserProfileActionButton"),
    		masthead = $(".user-identity-box-edit");
    
    	function getAction(id) {
    		return actions.filter(function(action){return action.id === "page:"+id})[0]
    	}
    
    	function renderSVGs(wds) {
    		wds.render(".user-identity-box-edit .wds-button-group")
    	}
    
    	if(mw.config.get("wgNamespaceNumber") == 2 && oldbtn.length && masthead.length) {
    		importArticle({type: "style", article: "u:dev:MediaWiki:ModernProfile/EditButton.css"})
    
    		oldbtn.remove();
    
    		if(actions) {
    			var newbtn, drop, dropbtns = [];
    
    			var a_edit = getAction("Edit")
    			if(a_edit) {
    				newbtn = $("<a>").attr({
    					"class": "wds-button wds-is-secondary wds-is-squished",
    					"id": "ca-edit",
    					"href": a_edit.href
    				}).append(
    					$("<span>").attr({
    						"class": "dev-wds-icon",
    						"id": "dev-wds-icons-pencil-small"
    					}),
    					$("<span>").text(a_edit.caption)
    				)
    			}
    
    			["History", "Move", "Protect", "Delete"].forEach(function(id){
    				var a = getAction(id);
    				if(a) dropbtns.push($("<li>").append($("<a>").attr("href", a.href).text(a.caption)))
    			})
    
    			if(dropbtns.length) {
    				var dropcontent = $("<ul>").attr("class", "wds-list wds-is-linked")
    				drop = $("<div>").attr("class", "wds-dropdown").append(
    					$("<div>")
    					.attr("class", "wds-button wds-is-secondary wds-is-squished wds-dropdown__toggle")
    					.append(
    						$("<span>").attr({
    							"class": "dev-wds-icon",
    							"id": "dev-wds-icons-dropdown-tiny"
    						})
    					),
    					$("<div>")
    					.attr("class", "wds-dropdown__content wds-is-not-scrollable wds-is-right-aligned")
    					.append(dropcontent)
    				);
    				dropbtns.forEach(function(e){dropcontent.append(e)})
    			}
    
    			masthead.html(
    				$("<div>")
    				.attr("class", "wds-button-group")
    				.css({"float": "right"})
    				.append(newbtn, drop)
    			)
    
    			if(!window.dev || !window.dev.wds) {
    				mw.hook("dev.wds").add(renderSVGs);
    				importArticle({type: "script", articles: "u:dev:WDSIcons/code.js"})
    			} else renderSVGs(window.dev.wds)
    		}
    	}
    });
    
    /**
     * @name        MultiUpload
     * @author      Gguigui1, KhangND, Universal Omega
     * @desc        Allows selecting multiple files directly from the dialog box and upload them
     * <nowiki>
     */
     //License preview added by Universal Omega
    wgAjaxLicensePreview=true;
    window.MultiUploadLoaded = undefined;
    function getLicensePreview(num) {
        window.licenseSelectorCheck = function () {
            var selector = document.getElementById("license" + num);
            var selection = selector.options[selector.selectedIndex].value;
            if (selector.selectedIndex > 0) {
                if (selection == "") {
                    // Option disabled, but browser is broken and doesn't respect this
                    selector.selectedIndex = 0;
                }
            }
            var wgUploadLicenseObj = {
    
            'responseCache': {
                '': ''
            },
    
            'fetchPreview': function (license) {
                if (!mw.config.get('wgAjaxLicensePreview'))
                    return;
                for (cached in this.responseCache) {
                    if (cached == license) {
                        this.showPreview(this.responseCache[license]);
                        return;
                    }
                }
                $('#license' + num).injectSpinner('license' + num);
    
                var title = document.getElementById('imagename' + num).value;
                if (!title)
                    title = 'File:Sample.jpg';
    
                var url = mw.util.wikiScript('api')
                     + '?action=parse&text={{' + encodeURIComponent(license) + '}}'
                     + '&title=' + encodeURIComponent(title)
                     + '&prop=text&pst&format=json';
    
                var req = sajax_init_object();
                req.onreadystatechange = function () {
                    if (req.readyState == 4 && req.status == 200) {
                        wgUploadLicenseObj.processResult(eval('(' + req.responseText + ')'), license);
                    }
                };
                req.open('GET', url, true);
                req.send('');
    
            },
    
            'processResult': function (result, license) {
                $.removeSpinner('license' + num);
                this.responseCache[license] = result['parse']['text']['*'];
                this.showPreview(this.responseCache[license]);
            },
    
            'showPreview': function (preview) {
                var previewPanel = document.getElementById('mw-license-preview' + num);
                if (previewPanel.innerHTML != preview)
                    previewPanel.innerHTML = preview;
            }
    
        };
            // We might show a preview
            wgUploadLicenseObj.fetchPreview(selection);
        };
        var wpLicense = document.getElementById('license' + num);
    
        if (mw.config.get('wgAjaxLicensePreview') && wpLicense) {
            // License selector check
            wpLicense.onchange = licenseSelectorCheck;
    
            // License selector table row
            var wpLicenseRow = wpLicense.parentNode.parentNode;
            var wpLicenseTbody = wpLicenseRow.parentNode;
    
            var row = document.createElement('tr');
            var td = document.createElement('td');
            row.appendChild(td);
            td = document.createElement('td');
            td.id = 'mw-license-preview' + num;
            row.appendChild(td);
    
            wpLicenseTbody.insertBefore(row, wpLicenseRow.nextSibling);
        }
    
        
    }
    mw.loader.using([
        'mediawiki',
        'mediawiki.user',
        'mediawiki.api',
        'jquery.client',
        'jquery.spinner',
        'ext.wikia.LinkSuggest'
    ], function() {
        var groups  = mw.config.get('wgUserGroups').join(),
            config = mw.config.get([
                'wgCanonicalSpecialPageName',
                'wgNamespaceNumber',
                'wgTitle',
                'wgUserLanguage',
                'wgUserName'
            ]);
    
        // load protections
        if(window.MultiUploadLoaded
        || config.wgUserName === null
        || !/autoconfirmed/.test(groups)) {
            return;
        } window.MultiUploadLoaded = true;
    
        var storage = 'MultiUploadLicenses';
        var content = $('#mw-content-text');
        var allowTypes = $.map( mw.config.get("wgFileExtensions"), function(file_extensions) {
     return('.' + file_extensions)
    });
        var style = {
            block: {
                display: 'inline-block',
                margin: '0 8px'
            },
            textarea: {
                width: '100%',
                height: 150,
                boxSizing: 'border-box',
                resize: 'none'
            }
        };
    
        function loadMWMessagesIfMissing(messages) {
            var deferred = $.Deferred(),
                missingMessages = messages.filter(function (message) { return !mw.messages.exists(message); });
            if (!missingMessages.length) {
                deferred.resolve();
            } else {
                $.get(mw.util.wikiScript('api'), {
                    format: 'json',
                    action: 'query',
                    meta: 'allmessages',
                    ammessages: missingMessages.join('|'),
                    amlang: config.wgUserLanguage
                }).then(function (data) {
                    if ($.isArray(data.query.allmessages)) {
                        $.each(data.query.allmessages, function (_, message) {
                            if (message.missing !== '') {
                                mw.messages.set(message.name, message['*']);
                            }
                        });
                    }
                    deferred.resolve();
                }, function () {
                    // Silently swallow failures; we don't want error reporting to stall just because we failed to fetch some messages.
                    deferred.resolve();
                });
            }
            return deferred;
        }
    
        var MultiUpload = {
            input: $(),  // available on init
            editor: $(), // available on init
            button: $(), // available on init
            fileCount: 0,// available on create
            preload: function(i18n) {
                $.extend(this, window.MultiUploadoption || {});
                this.i18n = i18n;
    
                // prepends a link in My Tools menu
                $('<li>', {
                    'class': 'custom',
                    prependTo: '#my-tools-menu',
                    append: $('<a>', {
                        href: mw.util.getUrl('Special:MultiUpload'),
                        text: this.i18n.msg('title').plain()
                    })
                });
    
                // creates Special page
                if(
                    (config.wgNamespaceNumber === -1 && config.wgTitle === 'MultiUpload') ||
                    (config.wgCanonicalSpecialPageName === 'Blankpage' && /MultiUpload/.test($.getUrlVar('blankspecial')))
                ) {
                    $('.page-header__title').text(this.i18n.msg('title').plain());
                    $('title').text(this.i18n.msg('title').plain());
                    this.init();
                    content.after(
                        $('<div>', {
                            id: 'mu-footer',
                            css: {
                                textAlign: 'center',
                                fontSize: 10,
                                borderTop: '1px solid',
                                marginTop: 10
                            },
                            text: this.i18n.msg('poweredby').plain() + ' ',
                            append: $('<a>', {
                                href: '//dev.fandom.com/wiki/MultiUpload',
                                text: 'MultiUpload'
                            })
                        })
                    );
                }
            },
            init: function() {
                content.empty().append([
                    $('<input>', {
                        id: 'fileinput',
                        type: 'file',
                        multiple: true,
                        accept: allowTypes.join(),
                    }),
                    $('<div>', {
                        id: 'editor',
                        css: { display: 'none' },
                    }),
                    $('<button>', {
                        id: 'go',
                        text: this.i18n.msg('update').plain(),
                        click: $.proxy(this.getLicenses, this)
                    })
                ]);
                this.input = $('#fileinput');
                this.editor = $('#editor');
                this.button = $('#go');
            },
            notify: function(message, type) {
                new BannerNotification(message, type, null).show();
            },
            getLicenses: function() {
                var data = localStorage.getItem(storage);
                if(data !== null) {
                    this.create(data);
                  var limit = this.max < this.fileCount ? this.max : this.fileCount;
            for (i = 1; i <= limit; i++) {
                       getLicensePreview(i);
                  }
          return;
                    
                }
    
                $.get(mw.util.wikiScript('api'), {
                    action: 'query',
                    meta: 'allmessages',
                    ammessages: 'Licenses',
                    format: 'json'
                }).success(
                    $.proxy(this.create, this)
                ).error($.proxy(function(data) {
                    this.notify(this.i18n.msg('errorapi').plain() + ' : ' + data.error.info, 'error');
                }), this);
            },
            create: function(data) {
                // conditions
                var formatError = false;
                this.fileCount = this.input[0].files.length;
    
                $(this.input[0].files).each(function(i, file) {
                    if(!new RegExp(allowTypes.join('|\\'), 'i').test(file.name)) {
                        formatError = true;
                        return;
                    }
                });
                if (formatError) {
                    this.notify(this.i18n.msg('fileformat').plain(), 'warn');
                    return;
                }
                if (!this.input[0].files) {
                    this.notify(this.i18n.msg('browsersupport').plain(), 'notify');
                    return;
                }
                if (this.fileCount === 0) {
                    this.notify(this.i18n.msg('nofile').plain(), 'warn');
                    return;
                }
                if(!this.max
                ||  this.max < 0
                ||  this.max > 101
                || typeof this.max !== 'number') {
                    if (/staff|helper|util|bot-global/.test(groups)) {
                        this.max = 200;
                    } else if (/bureaucrat|bot/.test(groups)) {
                        this.max = 70;
                    } else if (/sysop/.test(groups)) {
                        this.max = 50;
                    } else if (/rollback/.test(groups)) {
                        this.max = 30;
                    } else {
                        this.max = 20;
                    }
                }
                if (!this.max) {
                    this.notify(this.i18n.msg('problem').plain(), 'error');
                    return;
                }
    
                // creates form
                data = typeof data === 'object'
                    ? data.query.allmessages[0]['*'].trim()
                    : data;
                localStorage.setItem(storage, data); // retrieves licenses 1 time only
                var licenses = data.split('\n');
                var limit = this.max < this.fileCount ? this.max : this.fileCount;
                for (i = 1; i <= limit; i++) {
                    $('<fieldset>', {
                        id: 'field' + i,
                        appendTo: this.editor,
                        append: [
                            $('<legend>', {
                                text: this.i18n.msg('imagename').plain() + ' ' + i
                            }),
                            $('<div>', {
                                css: style.block,
                                text: this.i18n.msg('filename').plain(),
                                append: $('<input>', {
                                    type: 'text',
                                    id: 'imagename' + i,
                                    'class': 'imagename',
                                    val: this.input[0].files[i - 1].name
                                })
                            }),
                            $('<div>', {
                                css: style.block,
                                text: this.i18n.msg('licensetext').plain(),
                                append: $('<select>', {
                                    id: 'license' + i,
                                    'class': 'license',
                                    append: $('<option>', {
                                        val: 'none',
                                        text: this.i18n.msg('nolicence').plain()
                                    })
                                })
                            }),
    
                            $('<div>', {
                                id: 'progress' + i,
                                css: style.block
                            }),
                        ]
                                        
                    });
                      
                }
                for (i = 0; i < licenses.length; i++) {
                    if (licenses[i].indexOf('**') === 0) {
                        var name = licenses[i].split('|')[0].replace('**', '').trim(),
                            text = licenses[i].split('|')[1];
                        $('<option>', {
                            val: name,
                            text: text,
                            selected: name == this.defaultlicense,
                            appendTo: $('.license').find('optgroup:last-child')
                        });
                    } else {
                        $('<optgroup>', {
                            label: licenses[i].replace('*', '').trim(),
                            appendTo: $('.license')
                        });
                    }
                }
                $('<div>', {
                    appendTo: this.editor,
                    text: this.i18n.msg('filedescription').plain()
                }),
                $('<textarea>', {
                    appendTo: this.editor,
                    id: 'UploadDescription',
                    css: style.textarea,
                }).linksuggest();
            $('.license option[value="none"').attr("disabled", "true");
                $('<button>', {
                    'class': 'secondary',
                    id: 'reset',
                    css: style.block,
                    text: this.i18n.msg('reset').plain(),
                    click: $.proxy(this.init, this),
                    appendTo: content
                }),
                $('<input>', {
                    type: 'checkbox',
                    id: 'ignorewarnings',
                    name: 'ignorewarnings',
                    appendTo: content
                }),
                $('<label>', {
                    'for': 'ignorewarnings',
                    text: this.i18n.msg('ignorewarnings').plain(),
                    appendTo: content
                });
                jQuery(function ($) {
            'use strict';
            
                if(window.defaultMultiUploadDescription){
                    if ($('#UploadDescription').val()) {
                return;
            } 
                var params = {
    	action: 'parse',
    	page: window.defaultMultiUploadDescription,
    	format: 'json',
        prop: 'wikitext'
    };
    var api = new mw.Api();
    
    api.get(params).done(function(data) {
    	$('#UploadDescription').val(data.parse.wikitext['*']);
    });
    }
            $('.license option[value="none"').attr("disabled", "true");
                });
    
                license = $('#license' + i).find('option:selected').val(),
    
                this.input.attr('disabled', true);
                this.editor.show();
                this.button
                    .unbind('click')
                    .click($.proxy(this.upload, this))
                    .text(this.i18n.msg('uploadfiles').plain());
            },
            upload: function() {
                content.find('*').attr('disabled', true);
                $('#reset').removeAttr('disabled');
                
                var obj = this;
                
                var loop = function (i) {
                    if (i <= obj.fileCount) {
                        var file = obj.input[0].files[i - 1],
                            filename = $('#imagename' + i).val() || file.name,
                            license = $('#license' + i).find('option:selected').val(),
                            text = $('#UploadDescription').val();
                    if(license == "none" && window.requireMultiUploadLicensing === true){
                        alert('Licensing must be complete.');
                        $('*').removeAttr('disabled');
                        return;
                    }
                    
    if(license !== "none") text = '== Summary ==\n' + text + '\n\n== Licensing ==\n{{' + license + '}}\n';
                        obj.uploadFile(file, filename, text, i).always(function(){
                            loop(i+1);
                        });
                    }
                };
                loop(1);
            },
            uploadFile: function(fileToUpload, fileName, text, index) {
                // https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects
                formdata = new FormData(); 
                formdata.append('action', 'upload');
                formdata.append('format', 'json');
                formdata.append('filename', fileName);
                formdata.append('token', mw.user.tokens.get('editToken'));
                formdata.append('file', fileToUpload);
                formdata.append('text', text);
                formdata.append(
                    $('#ignorewarnings').prop('checked') ? 'ignorewarnings' : '', ''
                );
    
                // https://stackoverflow.com/a/8244082
                return $.ajax({
                    url: mw.util.wikiScript('api'),
                    contentType: false,
                    processData: false,
                    type: 'POST',
                    data: formdata,
                    dataType: 'json',
                    xhr: function() { // https://stackoverflow.com/a/27030092
                        myXhr = $.ajaxSettings.xhr();
                        myXhr.upload.addEventListener('progress', function(e) {
                            MultiUpload.progress(index, e);
                        });
                        return myXhr;
                    },
                    success: $.proxy(function(data) {
                        this.success(index, data);
                    }, this),
                    error: $.proxy(function(_, __, error) {
                        this.notify(error, 'error');
                    }, this)
                });
            },
            progress: function(index, e) {
                var progress = e.loaded / e.total * 100;
                $('#progress' + index).text(progress.toFixed(0) + '%');
            },
            success: function(index, data) {
                // Error
                if (data.error) {
                    var errorInfo, errorDetails;
    
                    function displayError() {                
                        $('#progress' + index).html([
                            $('<strong/>').text(errorInfo),
                            (errorDetails === undefined) ? null : $('<br/>'),
                            (errorDetails === undefined) ? null : $('<div/>').text(errorDetails)
                        ]);
                    }
    
                    // Excluding variants of `unknownerror`, we're going to ignore `error.info` since it mightn't be localized.
                    // See <https://github.com/Wikia/app/blob/release-886.001/includes/upload/UploadBase.php> for special cases.
                    if (data.error.code.startsWith('unknownerror')) {
                        errorInfo = data.error.info;
                        displayError();
                    } else {
                        var messages = [data.error.code];
                        if (data.error.code === 'verification-error') {
                            messages.push(data.error.details[0]);
                        }
                        loadMWMessagesIfMissing(messages).then(function () {
                            errorInfo = mw.msg(data.error.code);
                            if (data.error.code === 'verification-error') {
                                errorDetails = mw.msg.apply(null, data.error.details);
                            } else if (data.error.code === 'hookaborted') {
                                errorDetails = data.error.error;  // TODO: Determine whether it's safe to assume this'll always be properly escaped HTML.
                            }
                            displayError();
                        });
                    }
                    return;
                }
    
                // Success
                if(data.upload.result === 'Success') {
                    $('#progress' + index).text(this.i18n.msg('success').plain());
                    return;
                }
    
                // Warnings
                var msg;
                if(data.upload.warnings.hasOwnProperty('was-deleted')) {
                    msg = this.i18n.msg('deleted').plain();
                } else if(data.upload.warnings.hasOwnProperty('duplicate')) {
                    msg = this.i18n.msg('duplicate').plain();
                } else if(data.upload.warnings.hasOwnProperty('exists')) {
                    msg = this.i18n.msg('exist').plain();
                } else {
                    msg = this.i18n.msg('success').plain();
                }
    
                $('#progress' + index).text(msg);
            }
        };
    
        mw.hook('dev.i18n').add(function(i18n) {
            i18n.loadMessages('MultiUpload').then(
                $.proxy(MultiUpload.preload, MultiUpload)
            );
        });
        importArticle({
            type: 'script',
            article: 'u:dev:MediaWiki:I18n-js/code.js'
        });
      });
    
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.

    Recent changes

  • IC228 • 5 days ago
  • IC228 • 5 days ago
  • IC228 • 6 days ago
  • IC228 • 6 days ago
  • Welcome to the DC Multiverse Wiki


    Cookies help us deliver our services. By using our services, you agree to our use of cookies.