Benutzer:Lustiger seth/unsigned.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
 /* ******** unsigned.js ******** */
 // 
 // Usage:
 // * see http://de.wikipedia.org/wiki/user_talk:lustiger_seth/unsigned.js#Benutzung
 // Just put the following line
 // mw.loader.load('//de.wikipedia.org/w/index.php?title=user:lustiger_seth/unsigned.js&action=raw&ctype=text/javascript&smaxage=2678400');
 // without the beginning "// " to your [[Special:MyPage/common.js]] (or [[m:Special:MyPage/global.js]])
 //
 // Description:
 // * MARK SEMI-AUTOMATICALLY UNSIGNED COMMENTS ON TALK PAGES
 // 
 // Authors:
 // * based on [[user:Olliminatore/unsigned.js]] (old and buggy version 1.3) which was based on [[:en:User:Invitatious/unsigned2.js]].
 // * updated/changed by [[user:lustiger_seth|seth]]
 //
 // New features in this version (compared to [[user:Olliminatore/unsigned.js]]):
 // * You can now choose any signature (it doesn't need to be one of the last 10 any longer). Used signatures will be marked. Some bugfixes, see history (here and monobook.js) and talk page.
 // * compatible with vector and monobook
 // 
 //<pre><nowiki>
 // Dual-licensed under the terms of the GFDL v1.2 or the GPL v2.

 if(mw.config.get('wgNamespaceNumber')>0&&
 (mw.config.get('wgAction')==='edit'
 ||mw.config.get('wgAction')==='submit')){
 varssubst=(typeofssubst=='undefined'||ssubst)?'subst:':'';
 varmax_history_entries=
 (typeofmax_history_entries!='number'
 ||max_history_entries>36
 ||max_history_entries<1)?36:max_history_entries;
 vardisplay_used=(display_used!=0&&display_used!=1)?1:display_used;
 varmax_nofe=500;// number of fetched edits

 functionget_last_sunday_of_month(year,month){
 varlast_sunday=-1;
 vard=newDate(year,month,22);
 for(varday=1;month==d.getUTCMonth();++day){
 if(d.getDay()==0)last_sunday=22-1+day;
 d=newDate(Date.UTC(year,month,22,0,0,0)+day*24*60*60*1000);
 }
 returnlast_sunday;
 }

 // is_daylight_saving_time
 functionis_dst(year,month,day,hours){
 varto_check=Date.UTC(year,month,day,hours,0,0);
 // 2 = march
 varbegin_dst=Date.UTC(year,2,get_last_sunday_of_month(year,2),1,0,0);
 // 9 = october
 varend_dst=Date.UTC(year,9,get_last_sunday_of_month(year,9),1,0,0);
 return(begin_dst<=to_check&&to_check<end_dst);
 }

 functionis_elem_of_arr(elem,arr){
 for(vari=0;i<arr.length;++i){
 if(arr[i]==elem)
 return1;
 }
 return0;
 }

 functionget_all_sig_dates_from_textarea(){
 varsigs=newArray();
 if(document.editform){
 vartxtarea=document.editform.wpTextbox1.value;
 // localizable strings start
 if(mw.config.get('wgContentLanguage')=='de')
 sigs=txtarea.match(/\d?\d[:.]\d\d, \d?\d\. (?:jan|feb|mär|apr|mai|jun|jul|aug|sep|okt|nov|dez)\.? 2\d{3}(?: \(CES?T\))?|2\d{3}-\d\d-\d\d[T ]?\d\d:\d\d(?:Z|[-+]\d\d:\d\d)?/gi);
 else
 sigs=txtarea.match(/\d?\d[:.]\d\d, \d?\d (?:january|february|march|april|may|june|july|august|september|october|november|december) 2\d{3}(?: \(UTC\))?|2\d{3}-\d\d-\d\d[T ]?\d\d:\d\d(?:Z|[-+]\d\d:\d\d)?/gi);
 // localizable strings end
 }
 return(sigs==null)?newArray():sigs;
 }

 functionsig2ms(sigs){
 varsigs_ms=newArray();
 varmonths=newObject();
 varre_normal;
 // localizable strings start
 if(mw.config.get('wgContentLanguage')=='de'){
 months["jan"]=1;
 months["feb"]=2;
 months["mär"]=3;
 months["apr"]=4;
 months["mai"]=5;
 months["jun"]=6;
 months["jul"]=7;
 months["aug"]=8;
 months["sep"]=9;
 months["okt"]=10;
 months["nov"]=11;
 months["dez"]=12;
 re_normal=/(\d?\d)[:.](\d\d), (\d?\d)\. (jan|feb|mär|apr|mai|jun|jul|aug|sep|okt|nov|dez)\.? (2\d{3})((?: \((?:UTC|CES?T)\))?)/i;
 }else{
 months["january"]=1;
 months["february"]=2;
 months["march"]=3;
 months["april"]=4;
 months["may"]=5;
 months["june"]=6;
 months["july"]=7;
 months["august"]=8;
 months["september"]=9;
 months["october"]=10;
 months["november"]=11;
 months["december"]=12;
 re_normal=/(\d?\d)[:.](\d\d), (\d?\d) (january|february|march|april|may|june|july|august|september|october|november|december) (2\d{3})((?: \(UTC\))?)/i;
 }
 // localizable strings end
 varre_iso=/(2\d{3})-(\d\d)-(\d\d)[T ]?(\d\d):(\d\d)((?:Z|[-+]\d\d:\d\d)?)/;
 varyear,month,day,h,min,date_obj,offset;
 for(vari=0;i<sigs.length;++i){
 if(re_normal.exec(sigs[i])){
 h=RegExp.1ドル;
 min=RegExp.2ドル;
 day=RegExp.3ドル;
 month=RegExp.4ドル;
 month=months[month.toLowerCase()];
 year=RegExp.5ドル;
 offset=RegExp.6ドル;
 offset=(offset==' (CEST)')?2:
 ((offset==' (CET)')?1:
 ((offset==' (UTC)')?0:
 '?'));
 }elseif(re_iso.exec(sigs[i])){
 year=RegExp.1ドル;
 month=RegExp.2ドル;
 day=RegExp.3ドル;
 h=RegExp.4ドル;
 min=RegExp.5ドル;
 offset=RegExp.6ドル;
 offset=(offset=='Z')?0:
 ((offset=='')?'?':
 ((offset.substr(0,1)=='-')?-1:1
 )*((1*offset.substr(1,2))+(offset.substr(4,2)/60)));
 }
 date_obj=newDate(year,month-1,day,h,min,0);
 if(offset=='?'){
 sigs_ms.push(date_obj.getTime()-1*60*60*1000);
 sigs_ms.push(date_obj.getTime()-2*60*60*1000);
 }else
 sigs_ms.push(date_obj.getTime()-offset*60*60*1000);
 }
 returnsigs_ms;
 }

 functiontimestamp2ms(t){
 varyear=t.substring(0,4);
 varmonth=t.substring(4,6);
 varday=(t.substring(6,8)-0);
 varhours=parseInt(t.substring(8,10),10);
 varmin=parseInt(t.substring(10,12),10);
 ms=newDate(year,month-1,day,hours,min,0).getTime();
 returnms;
 }

 functionaddSigWikiCode(){
 // from rev 28011729 of 
 // [[:en:Wikipedia:WikiProject_User_scripts/Scripts/Get_tidy_title]]
 functionaswcGet_tidy_title(){// get the URL version of the page title
 vareditlk=
 document.getElementById('ca-edit').getElementsByTagName('a')[0].href;
 // cut everything up to "title=" from the start and everything past 
 // "&action=edit" from the end
 editlk=editlk.substring(
 editlk.indexOf('title=')+6,
 editlk.lastIndexOf('&action=edit')
 );
 returneditlk;// the result from this function might be needed unescape()ed
 };
 // localizable strings start
 varlsMonth_names=["January ","February ","March ","April ","May ",
 "June ","July ","August ","September ","October ","November ",
 "December "],
 lsConflict="Edit conflict.",
 lsDialog1="Please select an edit below or type '>' for older edits:\n\n",
 lsDialog2="Unsigned edit number:",
 lsInvalid1="Please enter a valid number or cancel this operation.",
 lsNoRev="No revisions found. Does the page exist?",
 lsNoXMLHTTP="Couldn't get XMLHTTP!",
 lsMinor="m ";
 if(mw.config.get('wgContentLanguage')=='de'){
 lsMonth_names=["Jan. ","Feb. ","Mär. ","Apr. ","Mai ","Jun. ","Jul. ",
 "Aug. ","Sep. ","Okt. ","Nov. ","Dez. "];
 }
 if(mw.config.get('wgUserLanguage')=='de'){
 lsConflict="Edit-Konflikt.",
 lsDialog1="Bitte wähle einen Edit oder tippe '>' für ältere Edits:\n\n",
 lsDialog2="Unsigned Edit-Nummer:",
 lsInvalid1="Bitte eine gültige Zahl eintragen oder diese Operation abbrechen.",
 lsNoRev="Keine Veränderung gefunden. Besteht die Seite?",
 lsMinor="K ";
 }
 // localizable strings end

 // try to use native XMLHTTP
 varxmlhttp=window.XMLHttpRequest?newXMLHttpRequest():false;
 if(!xmlhttp&&window.ActiveXObject){// ActiveX XMLHTTP
 xmlhttp=newActiveXObject("Msxml2.XMLHTTP");
 if(!xmlhttp)
 xmlhttp=newActiveXObject("Microsoft.XMLHTTP");
 }

 if(!xmlhttp)
 returnalert(lsNoXMLHTTP);// No XMLHTTP
 // get timestamp, user, summary of last x edits
 xmlhttp.open("GET",mw.config.get('wgScriptPath')+
 "/api.php?format=xml&action=query&prop=revisions&rvlimit="+max_nofe+
 "&rvcomments&titles="+aswcGet_tidy_title());
 varhistory_offset=0;
 xmlhttp.onreadystatechange=function(){
 if(xmlhttp.readyState!=4)
 return;
 if(!xmlhttp)
 returnalert("Error: "+lsNoXMLHTTP+"\n"+xmlhttp.status+": "+
 xmlhttp.statusText);// no XMLHTTP
 varxmldoc=xmlhttp.responseXML;
 // IE workaround suggested by [[User:Olliminatore]]
 // !FIXME: IE6 can't read XML???
 if(!xmldoc.documentElement&&window.ActiveXObject){
 document.body.style.backgroundColor="#CCCCFF";// debugging aid
 xmldoc=newActiveXObject("Microsoft.XMLDOM");
 xmldoc.async=false;
 xmldoc.loadXML(xmlhttp.responseText);
 }
 // get the revisions
 varrevisions=xmldoc.documentElement.getElementsByTagName("rev");
 if(revisions.length<1)
 returnalert(lsNoRev);// no revisions
 // get rid of non-numeric characters in timestamp
 vart=revisions[0].getAttribute("timestamp").replace(/[^0-9]/g,"");
 // detect an edit conflict
 if(t!=document.editform.wpEdittime.value)
 returnalert(lsConflict);
 vardialog_text;
 varedit_data=[];
 varminor;
 varis_used;
 varnos2n;// mapping of number of signatures -> number of all entries
 varsigdates=sig2ms(get_all_sig_dates_from_textarea());
 varupdate_dialog_text=1;
 while(true){
 if(update_dialog_text){
 update_dialog_text=0;
 dialog_text=lsDialog1;
 nos2n=[];
 // extract edit data and build dialog text
 for(varn=history_offset;n<revisions.length;++n){
 minor=(revisions[n].getAttribute("minor")!=null)?lsMinor:"";
 edit_data[n]={
 timestamp:revisions[n].getAttribute("timestamp").replace(/[^0-9]/g,""),
 user:revisions[n].getAttribute("user"),
 comment:revisions[n].getAttribute("comment")
 };
 is_used=
 (is_elem_of_arr(timestamp2ms(edit_data[n].timestamp),sigdates))?
 '(used) ':'';
 if(is_used==''||display_used==1){
 nos2n.push(n);
 dialog_text+=("["+
 (nos2n.length-1).toString(max_history_entries).toUpperCase()+
 "] "+
 edit_data[n].timestamp.replace(
 /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/g,
 "1ドル-2ドル-3ドル 4ドル:5ドル:6ドル"
 )+
 " "+is_used+edit_data[n].user+": "+minor+
 ((edit_data[n].comment==null)?"–":
 edit_data[n].comment)
 ).substring(0,80)+"\n";
 }
 if(nos2n.length==max_history_entries)
 break;
 }
 }
 varunsigned_edit_choice=null;
 if(edit_data.length==1)
 unsigned_edit_choice=0;// no choice
 else// if(is_gecko) // for Mozilla, def in wikibits.js
 unsigned_edit_choice=prompt(dialog_text+"\n"+lsDialog2,"0");
 //else{ // for IE or other
 //	alert(dialog_text);
 //	var unsigned_edit_choice = prompt(lsDialog2, "0");
 //}
 if(unsigned_edit_choice==null){
 return;// Cancel button
 }elseif(unsigned_edit_choice=='>'){
 history_offset=Math.min(revisions.length-1,nos2n[nos2n.length-1]);
 update_dialog_text=1;
 continue;
 }elseif(unsigned_edit_choice=='<'){
 // actually that's not correct, but it should be sufficient
 history_offset=Math.max(0,history_offset-max_history_entries);
 update_dialog_text=1;
 continue;
 }elseif(isNaN(unsigned_edit_choice=
 parseInt(unsigned_edit_choice,max_history_entries))){
 returnalert(lsInvalid1);// non-numeric input
 }else{
 varunsigned_edit=edit_data[nos2n[unsigned_edit_choice]];
 }
 t=unsigned_edit.timestamp;// So the full name doesn't have to be used

 varyear=t.substring(0,4);
 varmonth=t.substring(4,6);
 varday=(t.substring(6,8)-0);
 varhours=parseInt(t.substring(8,10),10);
 vartzcode='UTC';// the data returned by app.php is UTC
 // localizable strings start
 if(mw.config.get('wgContentLanguage')=='de'){
 // add timezone offset
 // daylight saving time (true, false)
 vartime_offset=(is_dst(year,month-1,day,hours))?2:1;
 // localizable strings end
 tzcode=(time_offset==2)?'CEST':'CET';
 // get UTC time in msec
 nd=newDate(year,month-1,day,hours).getTime();
 // create new Date object for different
 // using timezone offset
 nd=newDate(nd+3600000*time_offset);
 year=nd.getFullYear();
 month=1+nd.getMonth();
 day=nd.getDate();
 hours=nd.getHours();
 day=''+day+'.';
 }
 if(hours<10)
 hours='0'+hours;
 // format and insert the tag
 // see https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/jQuery.plugin.textSelection-method-encapsulateSelection
 $('#wpTextbox1').textSelection('encapsulateSelection',{pre:"{{"+ssubst+"unsigned|"+unsigned_edit.user+"|"+hours+":"+
 t.substring(10,12)+", "+day+" "+lsMonth_names[month-1]+
 year+" ("+tzcode+")|ALT=nicht}}"});
 return;
 }
 };
 xmlhttp.send(null);
 };

 jQuery(
 function(){
 mw.loader.using(["jquery.textSelection","mediawiki.util"],
 function(){
 varunsigned_title='Unsigned';
 varunsigned_tooltip='add a missing signature';
 if(mw.config.get('wgUserLanguage')=='de'){
 unsigned_title='Unsigniert';
 unsigned_tooltip='Trage eine fehlende Signatur nach.';
 }
 if(!mw.config.get('wgIsArticle')){
 mw.util.addPortletLink(
 'p-cactions',
 "javascript:addSigWikiCode();",
 /* localizable strings start */
 unsigned_title,
 "ca-unsigned",
 unsigned_tooltip,""
 /* localizable strings end */
 );
 }
 }
 );
 }
 );
 }
 //</nowiki></pre>
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Benutzer:Lustiger_seth/unsigned.js&oldid=252863604"