User:Spazure/monobook.js
From Wikipedia, the free encyclopedia
If a message on your talk page led you here, please be wary of who left it. The code below could contain malicious content capable of compromising your account; if your account appears to be compromised, it will be blocked. If you are unsure whether the code is safe, you can ask at the appropriate village pump.
Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.
importScript('Wikipedia:WikiProject User scripts/Scripts/Force edit summary alternative'); // CHECK THAT I'VE REMEMBERED TO SIGN TALK PAGES AND IF SURE DO IT AUTOMATIC: // *** aut. signing / (automatische Unterschrift) *** [[User:Olliminatore/signing.js]] // created 23.04.2006 by [[User:Olliminatore]] // updated 23.04.2006 by [[:en:User:Ilmari Karonen]] // current version 1.56 13.03.2007 // Interwiki <noinclude>[[de:User:Olliminatore/signing.js]]</noinclude> //<pre><nowiki> String.prototype.trim = function(){return this.replace(/^\s*|\s*$/g,"")}; if (typeof usersignature == 'undefined') usersignature = ' --\~\~\~\~\n'; if (typeof regpages == 'undefined') { // list of all none talk pages var regpages = [ ':Village pump', ':Articles for deletion', ':Requests for ', ':Reference desk', ':Deletion review', ':Templates for deletion', '.*noticeboard.*', ':checkuser', ':arbitration', ':feedback', ':page protection', 'mediation)', ':Bot requests', ':Help desk', ':Editor review', ':Adminship survey', ':Cleanup', ':Miscellany for deletion', ':New contributors\' help page', ':Media copyright questions' ]; } // regarded pages type encoded if (wgCanonicalNamespace.match(/talk$/i)) var regpages = ""; for (p in regpages) if (wgPageName.indexOf(regpages[p]) != -1){regpages=false; break} if (!regpages) addOnloadHook(function(){ if (!(window.editform = document.forms['editform'])) return; // Add a new checkbox to the Wiki editOptions. sigBox = document.createElement("input"); sigBox.setAttribute('type','checkbox'); sigBox.setAttribute('name','wpSigning'); sigBox.setAttribute('id','wpSigning'); sigBox.setAttribute('checked','checked'); sigBox.defaultChecked=true; neuB = document.createElement("label"); neuB.appendChild(sigBox); neuB.appendChild(document.createTextNode("Sign")); neuB.setAttribute('for','wpSigning'); neuB.setAttribute('title','Sign this edit automatic.'); function setSigBox() { // switch enable box if (editform.wpMinoredit.checked) sigBox.setAttribute('disabled','disabled'); else sigBox.removeAttribute('disabled'); }; var txtarea=editform.elements['wpTextbox1']; var txtOld=txtarea.value.trim(); // txtOld_l=txtOld.length var txtOldEnd=txtOld.slice(-24); var sig = /~{3}/g; if (!tNode){ //editform.insertBefore(neuB, editform.elements['wpWatchthis']); // maybe FIXME: raised an NS_DOM_ERR! var tNode = editform.elements['wpMinoredit'].parentNode; // DOM workaround!? tNode.divs = tNode.getElementsByTagName("DIV"); tNode.divs = tNode.divs.item(tNode.divs.length-1); // last div tNode.insertBefore(neuB, tNode.divs); setSigBox(); } function doSign(event){ if(editform.onsubmit==''){ // only once! removeEvent(editform.wpSave,"click",doSign); removeEvent(editform.wpPreview,"click",doSign); } if(editform.onsubmit=='') removeEvent(editform.wpSave,"click",doSign); // only once! if(editform.wpMinoredit.checked || !sigBox.checked) return; txtarea.focus(); var cOld = txtOld.match(/<nowiki>.*?~{3}.*?<\/nowiki>/g); // exception for nowiki if (cOld) cOld = cOld.length; cNew = txtarea.value.match(sig); if (cNew) cNew = cNew.length; if (cNew > cOld){ // if there are a sign, check for true var cNew2 = txtarea.value.match(/\{\{subst\:unsig.*?~{3}\}\}/); // exception for Template:unsigned cNew -= (cNew2)?cNew2.length:0; } if(cNew <= cOld){ // if nothing then search a set position txt=txtarea.value.trim(); txtEnd=txt.slice(-24); if(txtOldEnd!=txtEnd) return txtarea.value = txt + usersignature; // aut. underwrite else { // post between pos = getCaretPos(txtarea); pos = txt.indexOf('\n', pos); // go to the post-end txtEnds = txt.substr(pos,24).replace(/(^\s*)/,""); // after txtpEnds = txt.slice(pos-18,pos); // before oldp = txtOld.indexOf(txtEnds); if(oldp!=-1 && oldp < pos - 3 && txtOld.indexOf(txtpEnds+RegExp.$1+txtEnds)==-1) // if some added return txtarea.value = txt.slice(0,pos).trim() + usersignature + txt.slice(pos+1); } // FIXME: then the edit-end is not found!? } else if(!sig.test(txtOld) || cOld < cNew) return; if (event) event=(window.Event)? event.target: event.srcElement; if (event.name == 'wpPreview') return; // not for preview return editform.onsubmit=new Function("editform.onsubmit='';" +"return confirm('No signing was found. Continue anyway?')"); //warn if saving without signature }; addEvent(editform.wpSave,"click", doSign); addEvent(editform.wpPreview,"click", doSign); addEvent(editform.wpMinoredit,"click", setSigBox); }); function getCaretPos(txtObj){ if (txtObj.setSelectionRange) return txtObj.selectionStart; // NS like else if(!document.selection) return 0; // not IE like var c="\001", pos=0; var range=document.selection.createRange(); var txt=range.text, dul=range.duplicate(); dul.moveToElementText(txtObj); range.text=txt+c; pos=(dul.text.indexOf(c)); range.moveStart('character',-1); range.text=""; return pos; }; /* add/removeEvent Original idea by John Resig Tweaked by Scott Andrew LePera, Dean Edwards and Peter-Paul Koch Fixed for IE by Tino Zijdel (crisp) @date 2005-10 */ function addEvent(obj,type,fn){if(obj.addEventListener){obj.addEventListener(type,fn,false)}else if(obj.attachEvent){var eProp=type+fn;obj["e"+eProp]=fn;obj[eProp]=function(){obj["e"+eProp](window.event)};obj.attachEvent("on"+type,obj[eProp])}else{obj['on'+type]=fn}}; function removeEvent(obj,type,fn){if(obj.removeEventListener){obj.removeEventListener(type,fn,false)}else if(obj.detachEvent){var eProp=type+fn;obj.detachEvent("on"+type,obj[eProp]);obj['e'+eProp]=null;obj[eProp]=null}else{obj['on'+type]=null}}; // *** end *** </nowiki></pre> /* Watchlist notifier ([[User:Ais523/watchlistnotifier.js]]); displays a message every time a watched page changes. */ //<pre><nowiki> var wmwpajax; // From [[WP:US]] mainpage (wpajax renamed to wmwpajax) wmwpajax={ download:function(bundle) { // mandatory: bundle.url // optional: bundle.onSuccess (xmlhttprequest, bundle) // optional: bundle.onFailure (xmlhttprequest, bundle) // optional: bundle.otherStuff OK too, passed to onSuccess and onFailure var x = window.XMLHttpRequest ? new XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false; if (x) { x.onreadystatechange=function() { x.readyState==4 && wmwpajax.downloadComplete(x,bundle); }; x.open("GET",bundle.url,true); x.send(null); } return x; }, downloadComplete:function(x,bundle) { x.status==200 && ( bundle.onSuccess && bundle.onSuccess(x,bundle) || true ) || ( bundle.onFailure && bundle.onFailure(x,bundle) || alert(x.statusText+': '+bundle.url)); } }; // Example: // function dlComplete(xmlreq, data) { // alert(data.message + xmlreq.responseText); // } // wmwpajax.download({url:'http://en.wikipedia.org/w/index.php?title=Thresher&action=raw', // onSuccess: dlComplete, message: "Here's what we got:\n\n" }); // End of [[WP:US]] quote function wmWatchEditFound(xmlreq, data) { var watchrev, watchsum, watchrevold, watchpage, junk; watchrev=xmlreq.responseText.split('timestamp="')[1].split('"')[0]; if(wgPageName == "Special:Watchlist") document.cookie="ais523wmwatchrev="+watchrev+".; path=/"; else { watchsum=xmlreq.responseText.split('comment="')[1].split('"')[0]; watchpage=xmlreq.responseText.split('title="')[1].split('"')[0]; try { watchrevold=document.cookie.split('ais523wmwatchrev=')[1].split('.')[0]; } catch(junk) {watchrevold=0;} watchsum=watchsum.split('<').join('<').split('>').join('>'); watchpage=watchpage.split('<').join('<').split('>').join('>'); if(watchrev!=watchrevold) document.getElementById('contentSub').innerHTML+= "<div class='watchlistnotify'>\""+watchpage+'" changed: "'+watchsum+'".</div>'; } } addOnloadHook(function() { /* Find the top item in the watchlist, and its edit summary. We only need one item, so set the limit to 1 to ease the load on the server. */ //if(location.href.indexOf("/wiki/")!=-1) wmwpajax.download({url:'http://en.wikipedia.org/w/api.php?action=query&list=watchlist&wllimit=1&'+ 'wldir=older&format=xml&wlprop=comment|timestamp|title', onSuccess: wmWatchEditFound}); }); // </nowiki></pre> // [[Category:Wikipedia scripts]] // Adding google addOnloadHook(function () { if (wgCanonicalNamespace == "Special") return; // no links for special pages var title = wgTitle; if (wgCanonicalNamespace != "") title = title.replace(/^.*\//, ""); // subpage name only var query = encodeURIComponent('"'+title+'" -Wikipedia' ); addPortletLink('p-tb', 'http://www.google.com/search?ie=utf-8&oe=utf-8&q='+query, 'Google search', 't-googlesearch', 'Search Google for "'+title+'"', 'G'); addPortletLink('p-tb', 'http://search.yahoo.com/search?ei=UTF-8&p='+query, 'Yahoo! search', 't-yahoosearch', 'Search Yahoo! for "'+title+'"', 'Y'); }); // // removed for testing // importScript('User:VoA/monobook.js'); //[[Category:Wikipedians who use RC script]] // TWINKLE importScript('User:AzaToth/morebits.js'); importScript('User:AzaToth/twinklediff.js'); importScript('User:AzaToth/twinklearv.js'); importScript('User:AzaToth/twinklewarn.js'); importScript('User:AzaToth/twinklefluff.js'); TwinkleConfig = { revertMaxRevisions : 50, userTalkPageMode : 'tab', showSharedIPNotice : true, openTalkPage : [ 'agf', 'norm', 'vand' ], openTalkPageOnAutoRevert : false, openAOLAnonTalkPage : false, summaryAd : " using [[WP:TWINKLE|TW]]", deletionSummaryAd : " using [[WP:TWINKLE|TW]]", protectionSummaryAd : " using [[WP:TWINKLE|TW]]", watchSpeedyPages : [ 'g3', 'g5', 'g10', 'g11', 'g12' ], watchProdPages : true, openUserTalkPageOnSpeedyDelete : [ 'g1', 'g2', 'g10', 'g11', 'g12', 'a1', 'a7', 'i3', 'i4', 'i5', 'i6', 'i7', 'u3', 't1' ], watchRevertedPages : [ 'agf', 'norm', 'vand', 'torev' ], markRevertedPagesAsMinor : [ 'agf', 'norm', 'vand', 'torev' ], deleteTalkPageOnDelete : false, watchWarnings : true, markAIVReportAsMinor : false, markSpeedyPagesAsMinor : true, offerReasonOnNormalRevert : true, orphanBacklinksOnSpeedyDelete : {orphan:true, exclude:['g6']} };