×
Create a new article
Write your page title here:
We currently have 30 articles on Ghost Machine Wiki. Type your article name above or create one of the articles listed here!



    Ghost Machine Wiki

    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.
    function doMassEdit() {
        document.getElementById("wpMassEditSubmit").disabled = true;
        var articles = document.getElementById("wpMassEditPages").value.split("\n");
        if(articles.length == 0) return;
        var newtext = document.getElementById("wpMassEditText1").value;
        var text2 = document.getElementById("wpMassEditText2").value;
        var wpMassEditType = document.getElementById("wpMassEditType").value, wpMassEditSummary = document.getElementById("wpMassEditSummary").value, edited = 0, failed = new Array(), error = new Array();
        var wpMassEditMinor = document.getElementById("wpMassEditMinor").checked;
        for(i=0;i<articles.length;i++) {
            var article = articles[i];
            if(article.length > 0) {
                var req = new XMLHttpRequest();
                req.open("GET", wgScriptPath + "/api.php?format=json&action=query&prop=info&intoken=edit&titles=" + encodeURIComponent(article), false);
                req.send(null);
                var response = eval("(" + req.responseText + ")").query.pages;
                for(var index in response) {
                    var info = response[index];
                    var edittoken = info.edittoken;
    				var postdata = "format=json"
                                 + "&action=edit&watchlist=nochange"
                                 + "&title=" + encodeURIComponent(article)
                                 + "&summary=" + encodeURIComponent(wpMassEditSummary)
                                 + "&token=" + encodeURIComponent(edittoken);
                    if(wpMassEditMinor)
                    	postdata += "&minor=1";
                    else
                    	postdata += "&notminor=1";
    				if(wpMassEditType == "prepend"){
    					postdata += "&prependtext=" + encodeURIComponent(newtext + "\n"); 
    				}
    				else if(wpMassEditType == "append"){
    					postdata += "&appendtext=" + encodeURIComponent("\n" + newtext);
    				}
    				else if(wpMassEditType == "replacepage"){
    					postdata += "&text=" + encodeURIComponent(newtext);
    				}
    				else if(wpMassEditType == "replacetext" || wpMassEditType == "replacetextg" || wpMassEditType == "bothpend"){
    					var pagetext = gettext(article);
    					if(wpMassEditType == "replacetextg"){
    						newtext = newtext.replace(/([.*+?|(){}\[\]\\])/g, "\\$1");
    						pagetext = pagetext.replace(new RegExp(newtext, "g"), text2);
    					}
    					else if(wpMassEditType == "replacetext"){
    						pagetext = pagetext.replace(newtext, text2);
    					}
    					else
    						pagetext = newtext + pagetext + text2;
    					postdata += "&text=" + encodeURIComponent(pagetext);
    				}
                    var req = new XMLHttpRequest();
                    req.open("POST", wgScriptPath + "/api.php", false);
                    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                    req.setRequestHeader("Content-length", postdata.length);
                    req.send(postdata);
                    if(eval("(" + req.responseText + ")").edit ) { //If edited, update the count and the button.
                        edited++;
                        document.getElementById("wpMassEditSubmit").value = "(" + edited + ")";
                    } else { //If not edited, add the title to the "failed" array and a description of the error to the "error" array.
                        failed.push(article);
                        error.push(eval("(" + req.responseText + ")").error.info);
                    }
                }
            }
            if(!articles[i+1]) {
                document.getElementById("wpMassEditSubmit").value = "Done (" + edited + ")";
                if(failed.length > 0) {
                    var linkedList = "";
                    for(x=0; x<failed.length; x++) {
                        linkedList += "<li><a href=\"" + wgScript + "?title=" + encodeURIComponent(failed[x]) + "\">" + failed[x] + "</a>: " + error[x] + "</li>"; //Links the titles in the "failed" array
                    }
                    document.getElementById("wpMassEditFailedContainer").innerHTML += '<br /><b>Failed edits:</b><ul>' + linkedList + '</ul>';
                }
                
            }
        }
    }
    
    function gettext(title){
    	var req = new XMLHttpRequest();
    	req.open("GET", wgScriptPath + "/api.php?action=query&prop=revisions&rvprop=content&format=json&indexpageids=1&titles="+encodeURIComponent(title), false);
    	req.send(null);
    	var response = eval('(' + req.responseText + ')');
    	pageid = response['query']['pageids'][0];
    	if (pageid == "-1") {
    		delete req;
    		return '';
    	}
    	var pagetext = response['query']['pages'][pageid]['revisions'][0]['*'];
    	return pagetext;
    } 
    function masseditform() {
        var bodyContent = (skin == "cologneblue" ? "article" : "bodyContent");
        document.getElementsByTagName("h1")[0].textContent = "Mass edit";
        document.title = "Mass edit";
        document.getElementById(bodyContent).innerHTML = '<form id="wpMassEdit" name="wpMassEdit">'
            + '<div id="wpMassEditFailedContainer"></div>'
            + '<br /><br />'
                + 'Pages to edit (one on each line):<br />'
                    + '<textarea tabindex="1" name="wpMassEditPages" id="wpMassEditPages" rows="10" cols="80"></textarea>'
                + 'Text 1 (see below):<br />'
                    + '<textarea tabindex="2" name="wpMassEditText1" id="wpMassEditText1" rows="10" cols="80"></textarea>'
                + 'Text 2 (see below):<br />'
                    + '<textarea tabindex="3" name="wpMassEditText2" id="wpMassEditText2" rows="10" cols="80"></textarea>'
                + '<br /><br /><table style="background-color:transparent">'
                    + '<tr><td>Edit type:</td>'
                        + '<td><select id="wpMassEditType">'
                            + '<option value="prepend">Prepend text 1</option>'
                            + '<option value="append">Append text 1</option>'
                            + '<option value="bothpend">Prepend text 1 and append text 2</option>'
                            + '<option value="replacetext">Replace first instance of text 1 with text 2</option>'
                            + '<option value="replacetextg">Replace all instances of text 1 with text 2</option>'
                            + '<option value="replacepage">Replace page with text 1</option>'
                        + '</select></td></tr>'
                + '<tr><td>Edit summary:</td>'
                    + '<td><input type="text" id="wpMassEditSummary" name="wpMassEditSummary" maxlength="255" /></td></tr>'
                + '<tr><td>Mark edit as minor:</td>'
                    + '<td><input type="checkbox" id="wpMassEditMinor" name="wpMassEditMinor"/></td></tr>'
                    + '<tr><td><input type="button" id="wpMassEditSubmit" name="wpMassEditSubmit" value="Edit" onclick="doMassEdit()" /></td>'
            + '</form>';
    }
     
    var massedit_whitelist = ["Sven Manguard", "DeltaQuad.alt", "T. Canens"];
    if(mw.config.get("wgNamespaceNumber") == -1 && (mw.config.get("wgPageName") == "Special:Massedit" || mw.config.get("wgPageName") == "Special:MassEdit") && 
    (/sysop/.test(mw.config.get("wgUserGroups")) || massedit_whitelist.indexOf(mw.config.get("wgUserName")) != -1 )) $(masseditform);
    
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.