MediaWiki:Gadget-friendlywelcome1.js
Not: Sayfayı kaydettikten sonra değişiklikleri görebilmek için tarayıcınızın önbelleğinizi temizlemeniz gerekir. Google Chrome, Firefox, Microsoft Edge ve Safari: ⇧ Shift tuşuna basılı tutun ve Yeniden Yükle araç çubuğu düğmesine tıklayın. Ayrıntılar ve diğer tarayıcılara yönelik yönergeler için Vikipedi:Önbelleğinizi atlayın sayfasını inceleyin.
//<nowiki>
(function($){
/*
****************************************
*** friendlywelcome.js: Welcome module / Hoş geldin modülü
****************************************
* Mode of invocation: Tab ("Wel"), or from links on diff pages
* Active on: Existing user talk pages, diff pages
* Config directives in: FriendlyConfig
*/
Twinkle.welcome = function friendlywelcome() {
if( Morebits.queryString.exists( 'friendlywelcome' ) ) {
if( Morebits.queryString.get( 'friendlywelcome' ) === 'auto' ) {
Twinkle.welcome.auto();
} else {
Twinkle.welcome.semiauto();
}
} else {
Twinkle.welcome.normal();
}
};
Twinkle.welcome.auto = function() {
if( Morebits.queryString.get( 'action' ) !== 'edit' ) {
// userpage not empty, aborting auto-welcome
return;
}
Twinkle.welcome.welcomeUser();
};
Twinkle.welcome.semiauto = function() {
Twinkle.welcome.callback( mw.config.get( 'wgTitle' ).split( '/' )[0].replace( /\"/, "\\\"") );
};
Twinkle.welcome.normal = function() {
if( Morebits.queryString.exists( 'diff' ) ) {
// check whether the contributors' talk pages exist yet
var $oList = $("#mw-diff-otitle2").find("span.mw-usertoollinks a.new:contains(talk)").first();
var $nList = $("#mw-diff-ntitle2").find("span.mw-usertoollinks a.new:contains(talk)").first();
if( $oList.length > 0 || $nList.length > 0 ) {
var spanTag = function( color, content ) {
var span = document.createElement( 'span' );
span.style.color = color;
span.appendChild( document.createTextNode( content ) );
return span;
};
var welcomeNode = document.createElement('strong');
var welcomeLink = document.createElement('a');
welcomeLink.appendChild( spanTag( 'Black', '[' ) );
welcomeLink.appendChild( spanTag( 'Goldenrod', 'welcome' ) );
welcomeLink.appendChild( spanTag( 'Black', ']' ) );
welcomeNode.appendChild(welcomeLink);
if( $oList.length > 0 ) {
var oHref = $oList.attr("href");
var oWelcomeNode = welcomeNode.cloneNode( true );
oWelcomeNode.firstChild.setAttribute( 'href', oHref + '&' + Morebits.queryString.create( {
'friendlywelcome': Twinkle.getFriendlyPref('quickWelcomeMode') === 'auto' ? 'auto': 'norm',
'vanarticle': Morebits.pageNameNorm
} ) );
$oList[0].parentNode.parentNode.appendChild( document.createTextNode( ' ' ) );
$oList[0].parentNode.parentNode.appendChild( oWelcomeNode );
}
if( $nList.length > 0 ) {
var nHref = $nList.attr("href");
var nWelcomeNode = welcomeNode.cloneNode( true );
nWelcomeNode.firstChild.setAttribute( 'href', nHref + '&' + Morebits.queryString.create( {
'friendlywelcome': Twinkle.getFriendlyPref('quickWelcomeMode') === 'auto' ? 'auto': 'norm',
'vanarticle': Morebits.pageNameNorm
} ) );
$nList[0].parentNode.parentNode.appendChild( document.createTextNode( ' ' ) );
$nList[0].parentNode.parentNode.appendChild( nWelcomeNode );
}
}
}
if( mw.config.get( 'wgNamespaceNumber' ) === 3 ) {
var username = mw.config.get( 'wgTitle' ).split( '/' )[0].replace( /\"/, "\\\""); // only first part before any slashes
Twinkle.addPortletLink( function(){ Twinkle.welcome.callback(username); }, "Hoş geldin", "friendly-welcome", "Kullanıcıya bir hoş geldin mesajı gönder" );
}
};
Twinkle.welcome.welcomeUser = function welcomeUser() {
Morebits.status.init( document.getElementById('mw-content-text') );
$( '#catlinks' ).remove();
var params = {
value: Twinkle.getFriendlyPref('quickWelcomeTemplate'),
article: Morebits.queryString.exists( 'vanarticle' ) ? Morebits.queryString.get( 'vanarticle' ) : '',
mode: 'auto'
};
Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
Morebits.wiki.actionCompleted.notice = "Karşılama tamamlandı. Birkaç saniye içinde mesaj sayfası yeniden yüklenecek";
var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), "Kullanıcı mesaj sayfası değişikliği");
wikipedia_page.setFollowRedirect(true);
wikipedia_page.setCallbackParameters(params);
wikipedia_page.load(Twinkle.welcome.callbacks.main);
};
Twinkle.welcome.callback = function friendlywelcomeCallback( uid ) {
if( uid === mw.config.get('wgUserName') && !confirm( 'Cidden kendine karşılama mesajı mı göndermek istiyorsun?' ) ){
return;
}
var Window = new Morebits.simpleWindow( 600, 420 );
Window.setTitle( "Hoş geldin / Davet" );
Window.setScriptName( "Twinkle" );
Window.addFooterLink( "Geri bildirim", "Vikipedi tartışma:Twinkle" );
var form = new Morebits.quickForm( Twinkle.welcome.callback.evaluate );
form.append({
type: 'select',
name: 'type',
label: 'Mesaj türü: ',
event: Twinkle.welcome.populateWelcomeList,
list: [
{ type: 'option', value: 'standard', label: 'Standart karşılama şablonları', selected: !Morebits.isIPAddress(mw.config.get('wgTitle')) },
{ type: 'option', value: 'anonymous', label: 'Anonim kullanıcıları karşılama şablonları', selected: Morebits.isIPAddress(mw.config.get('wgTitle')) },
{ type: 'option', value: 'wikiProject', label: 'Vikiproje şablonları'},
{ type: 'option', value: 'nonEnglish', label: 'Türkçe olmayan karşılama şablonları'}
]
});
form.append( {
type: 'div',
id: 'welcomeWorkArea',
className: 'morebits-scrollbox'
} );
form.append( {
type: 'input',
name: 'article',
label: '* Bağlantılı madde (şablon tarafından destekleniyorsa):',
value:( Morebits.queryString.exists( 'vanarticle' ) ? Morebits.queryString.get( 'vanarticle' ) : '' ),
tooltip: 'Şablon destekliyorsa; bir madde, hoş geldiniz şablonuna eklenebilir. Bağlanılacak madde yoksa boş bırakabilirsiniz.'
} );
var previewlink = document.createElement( 'a' );
$(previewlink).click(function(){
Twinkle.welcome.callbacks.preview(result); // |result| is defined below
});
previewlink.style.cursor = "pointer";
previewlink.textContent = 'Önizleme';
form.append( { type: 'div', name: 'welcomepreview', label: [ previewlink ] } );
form.append( { type: 'submit' } );
var result = form.render();
Window.setContent( result );
Window.display();
// initialize the welcome list
var evt = document.createEvent( "Event" );
evt.initEvent( 'change', true, true );
result.type.dispatchEvent( evt );
};
Twinkle.welcome.populateWelcomeList = function(e) {
var type = e.target.value;
var container = new Morebits.quickForm.element({ type: "fragment" });
if ((type === "standard" || type === "anonymous") && Twinkle.getFriendlyPref("customWelcomeList").length) {
container.append({ type: 'header', label: 'Özel karşılama şablonları' });
container.append({
type: 'radio',
name: 'template',
list: Twinkle.getFriendlyPref("customWelcomeList"),
event: Twinkle.welcome.selectTemplate
});
}
var appendTemplates = function(list) {
container.append({
type: 'radio',
name: 'template',
list: list.map(function(obj) {
var properties = Twinkle.welcome.templates[obj];
var result = (properties ? {
value: obj,
label: "{{" + obj + "}}: " + properties.description + (properties.linkedArticle ? "\u00A0*" : ""), // U+00A0 NO-BREAK SPACE
tooltip: properties.tooltip // may be undefined
} : {
value: obj,
label: "{{" + obj + "}}"
});
return result;
}),
event: Twinkle.welcome.selectTemplate
});
};
switch (type) {
case "standard":
container.append({ type: 'header', label: 'Genel karşılama şablonları' });
appendTemplates([
"hg1",
"hg2",
"hg3",
"hg4",
"hoş geldin-yapıcı",
"hoş geldin-kısa",
"hoş geldin-video",
"hoş geldin-kişisel",
"hoş geldin-gecikmiş"
]);
container.append({ type: 'header', label: 'Sorunlu kullanıcı karşılama şablonları' });
appendTemplates([
"hoş geldin-politika",
"hoş geldin-ilk madde",
"hoş geldin-deneme",
"hoş geldin-vandal",
"hoş geldin-reklam",
"hoş geldin-kaynaksız",
"hoş geldin-sil"
]);
break;
case "anonymous":
container.append({ type: 'header', label: 'Genel anonim karşılama şablonları' });
appendTemplates([
"hoş geldin-anon",
"hoş geldin-anon-deneme",
"hoş geldin-anon-yararsız",
"hoş geldin-anon-yapıcı",
"hoş geldin-anon-sil"
]);
break;
case "wikiProject":
container.append({ type: 'header', label: 'Vikiprojeli karşılama şablonları' });
appendTemplates([
"hoş geldin-Vikiproje Havacılık",
"hoş geldin-Vikiproje Psikoloji",
"hoş geldin-Vikiproje Tarih"
]);
break;
case "nonEnglish":
container.append({ type: 'header', label: 'Türkçe olmayan karşılama şablonları' });
appendTemplates([
"hoş geldin-en"
]);
break;
default:
container.append({ type: 'div', label: 'Twinkle.welcome.populateWelcomeList: bir şeyler yanlış gitti' });
break;
}
var rendered = container.render();
$(e.target.form).find("div#welcomeWorkArea").empty().append(rendered);
var firstRadio = e.target.form.template[0];
firstRadio.checked = true;
Twinkle.welcome.selectTemplate({ target: firstRadio });
};
Twinkle.welcome.selectTemplate = function(e) {
var properties = Twinkle.welcome.templates[e.target.values];
e.target.form.article.disabled = (properties ? !properties.linkedArticle : false);
};
// A list of welcome templates and their properties and syntax
// The four fields that are available are "description", "linkedArticle", "syntax", and "tooltip".
// The three magic words that can be used in the "syntax" field are:
// - $USERNAME$ - replaced by the welcomer's username, depending on user's preferences
// - $ARTICLE$ - replaced by an article name, if "linkedArticle" is true
// - $HEADER$ - adds a level 2 header (most templates already include this)
Twinkle.welcome.templates = {
// GENERAL WELCOMES
"hoş geldin 1": {
description: "sade karşılama şablonu",
linkedArticle: false,
syntax: "{{yk:hg1}}"
},
"hoş geldin 2": {
description: "kutulu ve önerili karşılama şablonu",
linkedArticle: false,
syntax: "{{yk:hg2}}"
},
"hoş geldin 3": {
description: "renkli tablolu karşılama şablonu",
linkedArticle: false,
syntax: "{{yk:hg3}}"
},
"hoş geldin 4": {
description: "ayrıntılı karşılama şablonu",
linkedArticle: false,
syntax: "{{yk:hg4}}"
},
"hoş geldin-yapıcı": {
description: "vandalizmle savaşan veya yapıcı katkıları olan kullanıcılar",
linkedArticle: true,
syntax: "{{subst:hoş geldin-yapıcı|art=$ARTICLE$}}"
},
"hoş geldin-kısa": {
description: "daha kısa karşılama şablonu",
linkedArticle: false,
syntax: "{{subst:hoş geldin-kısa}}"
},
"hoş geldin-video": {
description: "beş temel taş hakkında bilgi veren bir video ile karşılama",
linkedArticle: false,
syntax: "{{subst:hoş geldin-video}}"
},
"hoş geldin-kişisel": {
description: "bir tabak kurabiye dahil olmak üzere daha kişisel bir karşılama",
linkedArticle: false,
syntax: "{{subst:hoş geldin-kişisel|$USERNAME$}}"
},
"hoş geldin-gecikmiş": {
description: "daha önemli katkıları olan kullanıcılara karşılama mesajı",
linkedArticle: false,
syntax: "{{subst:hoş geldin-gecikmiş|$USERNAME$}}"
},
// PROBLEM USER WELCOMES
"hoş geldin-politika": {
description: "politikalar, telif hakkı ve vandalizm hakkında bilgi veren karşılama mesajı",
linkedArticle: false,
syntax: "{{subst:hoş geldin-politika}}"
},
"hoş geldin-ilk madde": {
description: "ilk maddesi sayfa standartlarına uymayan biri için karşılama mesajı",
linkedArticle: true,
syntax: "{{yk:hoş geldin-ilk madde|$ARTICLE$}}"
},
"hoş geldin-deneme": {
description: "ilk değişiklikleri deneme amaçlı görünen biri için karşılama mesajı",
linkedArticle: false,
syntax: "{{subst:hoş geldin-deneme}}"
},
"hoş geldin-vandal": {
description: "ilk değişiklikleri vandalizm gibi görünen biri için karşılama mesajı",
linkedArticle: false,
syntax: "{{subst:hoş geldin-vandal}}"
},
"hoş geldin-reklam": {
description: "ilk değişiklikleri reklam gibi görülen biri için karşılama mesajı",
linkedArticle: true,
syntax: "{{subst:hoş geldin-reklam|$ARTICLE$}}"
},
"hoş geldin-kaynaksız": {
description: "ilk değişiklikleri kaynaksız biri için karşılama mesajı",
linkedArticle: true,
syntax: "{{subst:hoş geldin-kaynaksız|$ARTICLE$}}"
},
"hoş geldin-sil": {
description: "ilk değişiklikleri maddelerden bilgi çıkarmak olan biri için karşılama mesajı",
linkedArticle: true,
syntax: "{{subst:hoş geldin-sil|$ARTICLE$}}"
},
// ANONYMOUS USER WELCOMES
"hoş geldin-anon": {
description: "anonim kullanıcılar için, hesap oluşturmayı teşvik eder",
linkedArticle: false,
syntax: "{{kopyala:Anonim hoş geldin}}"
},
"hoş geldin-anon-deneme": {
description: "deneme değişiklikleri yapmış anonim kullanıcılar için",
linkedArticle: true,
syntax: "{{subst:hoş geldin-anon-deneme|$ARTICLE$|$USERNAME$}}"
},
"hoş geldin-anon-yararsız": {
description: "yararsız değişiklikler yapmış anonim kullanıcılar için",
linkedArticle: true,
syntax: "{{subst:hoş geldin-anon-yararsız|$ARTICLE$|$USERNAME$}}"
},
"hoş geldin-anon-yapıcı": {
description: "vandalizmle savaşan veya yapıcı katkıları olan anonim kullanıcılar",
linkedArticle: true,
syntax: "{{subst:hoş geldin-anon-yapıcı|art=$ARTICLE$}}"
},
"hoş geldin-anon-sil": {
description: "sayfalardan nedensizce içerik kaldıran anonim kullanıcılar",
linkedArticle: true,
syntax: "{{subst:hoş geldin-anon-sil|$ARTICLE$|$USERNAME$}}"
},
// WIKIPROJECT-SPECIFIC WELCOMES
"hoş geldin-Vikiproje Havacılık": {
description: "havacılık odaklı katkı yapanları karşılama şablonu",
linkedArticle: false,
syntax: "{{yk:Hoş geldin-Vikiproje Havacılık}}"
},
"hoş geldin-Vikiproje Psikoloji": {
description: "psikoloji odaklı katkı yapanları karşılama şablonu",
linkedArticle: false,
syntax: "{{yk:Hoş geldin-Vikiproje Psikoloji}}"
},
"hoş geldin-Vikiproje Tarih": {
description: "tarih odaklı katkı yapanları karşılama şablonu",
linkedArticle: false,
syntax: "{{yk:Hoş geldin-Vikiproje Tarih}}"
},
"VikiProje Tıp-Davet": {
description: "Vikiproje Tıp davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Tıp-Davet}}"
},
"VikiProje Veteriner Tıp-Davet": {
description: "Vikiproje Veteriner Tıp davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Veteriner Tıp-Davet}}"
},
"Vikiproje Havacılık Davet": {
description: "Vikiproje Havacılık davet şablonu",
linkedArticle: false,
syntax: "{{yk:Vikiproje Havacılık Davet}}"
},
"Vikiproje Afrika Davet": {
description: "Vikiproje Afrika davet şablonu",
linkedArticle: false,
syntax: "{{yk:Vikiproje Afrika Davet}}"
},
"VikiProje Ankara/Davet": {
description: "Vikiproje Ankara davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Ankara/Davet}}<br> ~~~~"
},
"VikiProje Balkanlar/Davet": {
description: "Vikiproje Balkanlar davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Balkanlar/Davet}}"
},
"VikiProje İzmir/Davet": {
description: "Vikiproje İzmir davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje İzmir/Davet}}<br> ~~~~"
},
"VikiProje Eurovision/Davet": {
description: "Vikiproje Eurovision davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Eurovision/Davet}}"
},
"VikiProje İnternet/Davet": {
description: "Vikiproje İnternet davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje İnternet/Davet}}<br> ~~~~"
},
"VikiProje LGBT/Davet": {
description: "Vikiproje LGBT davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje LGBT/Davet}}<br> ~~~~"
},
"VikiProje Orta Doğu/Davet": {
description: "Vikiproje Orta Doğu davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Orta Doğu/Davet}}<br> ~~~~"
},
"VikiProje Otomobil/Davet": {
description: "Vikiproje Otomobil davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Otomobil/Davet}}"
},
"VikiProje Sanat/Davet": {
description: "Vikiproje Sanat davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Sanat/Davet}}<br> ~~~~"
},
"Vikiproje Sinema/Davet": {
description: "Vikiproje Sinema davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Sinema/Davet}}"
},
"VikiProje Sovyetler Birliği-Davet": {
description: "Vikiproje Sovyetler Birliği davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Sovyetler Birliği-Davet}}<br> ~~~~"
},
"VikiProje Tarih/Davet": {
description: "Vikiproje Tarih davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Tarih/Davet}}<br> ~~~~"
},
"VikiProje Tenis/Davet": {
description: "Vikiproje Tenis davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Tenis/Davet}}"
},
"VikiProje Tiyatro/Davet": {
description: "Vikiproje Tarih davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje Tiyatro/Davet}}<br> ~~~~"
},
"VikiProje TV dizileri/Davet": {
description: "Vikiproje TV dizileri davet şablonu",
linkedArticle: false,
syntax: "{{yk:VikiProje TV dizileri/Davet}}<br> ~~~~"
},
"Vikiproje Video oyunları-Davet": {
description: "Vikiproje Video oyunları davet şablonu",
linkedArticle: false,
syntax: "{{yk:Vikiproje Video oyunları-Davet}}<br> ~~~~"
},
// SOCIAL-GROUPS
"Telegram-davet": {
description: "Telegram grubuna davet şablonu",
linkedArticle: false,
syntax: "{{yk:Telegram-davet}}"
},
// "Google-davet": {
// description: "BU ŞABLON HENÜZ AÇILMAMIŞTIR, BOŞ ŞABLON GÖNDERECEKSİNİZ!", //Google sohbet grubuna davet şablonu
// linkedArticle: false,
// syntax: "{{ }}"
// },
// NON-ENGLISH WELCOMES
"hoş geldin-en": {
description: "anadili İngilizce olanlar için karşılama şablonu",
linkedArticle: false,
syntax: "{{kopyala:İngilizcehoşgeldin}}"
}
};
Twinkle.welcome.getTemplateWikitext = function(template, article) {
var properties = Twinkle.welcome.templates[template];
if (properties) {
return properties.syntax.
replace("$USERNAME$", Twinkle.getFriendlyPref("insertUsername") ? mw.config.get("wgUserName") : "").
replace("$ARTICLE$", article ? article : "").
replace(/\$HEADER\$\s*/, "== Hoş geldiniz ==\n\n").
replace("$EXTRA$", ""); // EXTRA is not implemented yet
} else {
return "{{subst:" + template + (article ? ("|art=" + article) : "") + "}}" +
(Twinkle.getFriendlyPref("customWelcomeSignature") ? " ~~~~" : "");
}
};
Twinkle.welcome.callbacks = {
preview: function(form) {
var previewDialog = new Morebits.simpleWindow(750, 400);
previewDialog.setTitle("Karşılama şablon önizmlemesi");
previewDialog.setScriptName("Hoş geldiniz aracı");
previewDialog.setModality(true);
var previewdiv = document.createElement("div");
previewdiv.style.marginLeft = previewdiv.style.marginRight = "0.5em";
previewdiv.style.fontSize = "small";
previewDialog.setContent(previewdiv);
var previewer = new Morebits.wiki.preview(previewdiv);
previewer.beginRender(Twinkle.welcome.getTemplateWikitext(form.getChecked("template"), form.article.value));
var submit = document.createElement("input");
submit.setAttribute("type", "submit");
submit.setAttribute("value", "Kapat");
previewDialog.addContent(submit);
previewDialog.display();
$(submit).click(function(e) {
previewDialog.close();
});
},
main: function( pageobj ) {
var params = pageobj.getCallbackParameters();
var text = pageobj.getPageText();
// abort if mode is auto and form is not empty
if( pageobj.exists() && params.mode === 'auto' ) {
Morebits.status.info( 'Uyarı', 'Kullanıcı mesaj sayfası boş değil; otomatik hoş geldin es geçiliyor' );
Morebits.wiki.actionCompleted.event();
return;
}
var welcomeText = Twinkle.welcome.getTemplateWikitext(params.value, params.article);
if( Twinkle.getFriendlyPref('topWelcomes') ) {
text = welcomeText + '\n\n' + text;
} else {
text += "\n" + welcomeText;
}
var summaryText = "Vikipedi\'ye hoş geldiniz!";
pageobj.setPageText(text);
pageobj.setEditSummary(summaryText + Twinkle.getPref('summaryAd'));
pageobj.setWatchlist(Twinkle.getFriendlyPref('watchWelcomes'));
pageobj.setCreateOption('recreate');
pageobj.save();
}
};
Twinkle.welcome.callback.evaluate = function friendlywelcomeCallbackEvaluate(e) {
var form = e.target;
var params = {
value: form.getChecked("template"),
article: form.article.value,
mode: 'manual'
};
Morebits.simpleWindow.setButtonsEnabled( false );
Morebits.status.init( form );
Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
Morebits.wiki.actionCompleted.notice = "Karşılama tamamlandı, sayfa birkaç saniye içinde yeniden yüklenecek...";
var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), "Kullanıcı mesaj sayfası değişikliği");
wikipedia_page.setFollowRedirect(true);
wikipedia_page.setCallbackParameters(params);
wikipedia_page.load(Twinkle.welcome.callbacks.main);
};
})(jQuery);
//</nowiki>