//HastaLaVi2 tarafından yazıldı
//// İlk önce, verilerin bulunduğu js dosyasını yüklemeye zorla, aksi takdirde eklenti düzgün çalışmayabilir
//function loadArrays() {
// // İsteği ve kodu oluştur
// var xhr = new XMLHttpRequest(),
// s = document.createElement('script');
//
// // Menüler.js dosyasına istek gönder
// xhr.open('GET', '/w/index.php?title=MediaWiki:Gadget-YeniMadde-Veri.js&action=raw&ctype=text/javascript', false);
// xhr.send();
//
// // Yükleme için dinle ve yüklemeden sonra kodu kaldır
// s.addEventListener("load", function(e) {
// s.parentElement.removeChild(s);
// });
//
// // Kodu dosyanın içerisine yükle ve en başta yazdır
// s.textContent = xhr.responseText;
// document.head.appendChild(s);
//}
// Ve daha sonra asıl işin yapıldığı kısma geç, formu ait olduğu yere yerleştir
$( document ).ready( function ( $, mw ) {
// Burada yeni madde oluşturucu için asıl tablo tanıtılmakta
var mainTable = "<table class='wikitable' style='background: white; border:1px solid #ccc; width: 100%; margin: 2px 0;'>" +
"\n<td><b>Yeni bir madde oluştur</b>" +
"\n<div id='formNew' style='padding:7px;'>" +
"\n<div class='headingsNew'>Başlıklar <small>(yalnızca kullanmak istediklerinizi seçin)</small>:</div>" +
"\n<div class='buttonNew' style='padding-top: 2px;'><span class='helloToTheMoon'></span></div>" +
"\n</div></td></table>",
trans = "{{Üst||tip=çeviriler}}" + "\n" + "{{Alt}}", // Çeviri tablosu şablonları
// Form araçları buradan sonra tanıtılıyor...
formItems = [];
formItems[1] = new OO.ui.DropdownWidget( { label: 'Dil seçin', menu : { } } );
formItems[2] = new OO.ui.DropdownWidget( { label: 'Söz türü seçin', menu : { } } );
formItems[3] = new OO.ui.CheckboxMultiselectWidget(),
selectedDatas = [];
// Evet, dilleri ve söz türlerini açılır kapanır menüye eklemeye yarayan kısım
function addOptionsToDropdown( dropdown, optionTexts ) {
dropdown.getMenu().addItems( optionTexts.map( function ( optionText ) {
if(optionText.constructor === Array){
return new OO.ui.MenuOptionWidget( { label: optionText[1], data: optionText[0] } );
} else {
return new OO.ui.MenuOptionWidget( { label: optionText } );
}
} ) );
}
// Bu fonksiyon başlıkları seçme listesine eklemeye yarar
function addOptionsToCheckbox( checkbox, optionTexts ) {
checkbox.addItems( optionTexts.map( function ( optionText ) {
return new OO.ui.CheckboxMultioptionWidget( { label: optionText, data: optionTexts.indexOf(optionText) } );
} ) );
}
var langSelected = function(option){
selectedDatas.lang = option.getLabel();
selectedDatas.code = option.getData();
};
var lemmSelected = function(option){
selectedDatas.lemma = option.getLabel();
};
// Dil seçme ve söz türü seçme kutularını forma eklemeye yarayan fonksiyon
function insertLanguagesAndLemmas($insertBefore, formItems) {
var namespace = mw.config.get( 'wgNamespaceNumber' );
formItems[1].$element.css({
'width': '48%',
'z-index': '1000',
});
formItems[2].$element.css({
'width': '48%',
'z-index': '1000',
});
addOptionsToDropdown( formItems[1], languages );
formItems[1].getMenu().on('select', langSelected);
addOptionsToDropdown( formItems[2], lemmas );
formItems[2].getMenu().on('select', lemmSelected);
$insertBefore.before( formItems[1].$element );
$insertBefore.before( formItems[2].$element );
}
// Başlıkların listesini forma eklemeye yarayan fonksiyon
function insertHeadings($insertBefore, formItems) {
addOptionsToCheckbox(formItems[3], headings);
$insertBefore.before( formItems[3].$element );
}
// Bu fonksiyon başlık oluşturmayı kolaylaştırır
function makeTitle(number, title) {
if(number==2){
return "==" + title + "==";
} else if(number==3){
return "===" + title + "===";
} else if(number==4){
return "====" + title + "====";
} else if(number==5){
return "=====" + title + "=====";
}
}
// Söz türünden önce bulunan hangi başlıkların işaretli olduğunu kontrol eder ve onları düzgün sıralarına sokar
function handleBeforeLemma(table) {
var sample = "";
for (i = 0; i < 3; ++i) {
if (table[i]) {
sample = sample + "\n\n" + makeTitle(3, table[i]) + "\n" + (i==1 ? "" : "*");
}
}
return sample;
}
function headword(lang, lemma) {
// Dile özel başlık başı şablonu var mı diye kontrol et, eğer toksa normal başlık başı şablonunu kullan
lemma = lemma.toLowerCase();
return "\n" + "{{başlık başı|" + lang + "|" + lemma + "}}" + "\n" + '#';
// NOT: Burada yardıma ihtiyaç var, "{{tr-ad}}" gibi dillere özel başlık başı şablonlarının var olup olmadığını kontrol etmek gerek
}
function handleAfterLemma(table) {
var sample = "", sayi;
for (i = 3; i < 18; ++i) {
if (i==15||i==16||i==17) {
sayi = 3;
} else {
sayi = 4;
}
if (table[i]) {
sample = sample + "\n\n" + makeTitle(sayi, table[i]) + "\n" + (i==14 ? trans : "");
}
}
return sample;
}
// Bu fonksiyon en son düzenleme kutusuna eklenecek kodu yazdırır
function createResultPageCode(formItems) {
var headTitle = mw.util.getParamValue( 'title' ), // URL'den "title" değerini seçer
headSearch = mw.util.getParamValue( 'search' ), // URL'den "search" değerini seçer
title, resultPage = "", tryThis;
if($('#firstHeading').text() === "Arama sonuçları"){
title = headSearch;
} else {
title = headTitle;
}
// Buna daha sonra başlık başı şablonu oluştururken ihtiyacımız olacak
var editableLemma = selectedDatas.lemma;
// Söz türünden önce ve sonra gelen başlıkları birbirinden ayır, çünkü bunları ayrı bir şekilde yazdıracağız
selectedDatas.headsBefore = [];
selectedDatas.headsAfter = [];
formItems[3].findSelectedItems().map( function(heading) {
// Tablodaki sırası 4'ten küçük olan başlıklar söz türünden sonra gelenler, bunu "Menüler.js" dosyasından kontrol edebilirsiniz
if (heading.getData() < 3) {
selectedDatas.headsBefore[heading.getData()] = heading.getLabel();
} else {
selectedDatas.headsAfter[heading.getData()] = heading.getLabel();
}
});
resultPage = resultPage
+ makeTitle(2, selectedDatas.lang)
+ handleBeforeLemma(selectedDatas.headsBefore)
+ "\n\n" + makeTitle(3, selectedDatas.lemma)
+ headword(selectedDatas.code, editableLemma)
+ handleAfterLemma(selectedDatas.headsAfter);
$(".wikiEditor-ui-text textarea").val(resultPage);
//window.location = 'https://tr.wiktionary.org/w/index.php?title=' + title + '&action=edit&preload=%C5%9Eablon:Yeni%20girdi&preloadparams[]=' + resultPage;
}
// Forma "Oluştur" butonunu ekleyen fonksiyon
function finalButton($insertBefore, formItems) {
var button = new OO.ui.ButtonWidget( {
label: 'Maddeyi oluştur',
} );
button.on( 'click', function () {
createResultPageCode(formItems);
} );
$insertBefore.before( button.$element );
}
// Burası asıl sihrin gerçekleştiği yer
$.when( mw.loader.using( 'oojs-ui-core' ), $.ready ).then( function () {
var namespace = mw.config.get( 'wgNamespaceNumber' );
if (namespace === 0||namespace === -1) {
//loadArrays();
$( '.mw-newarticletext' ).after(mainTable);
$( '.mw-newarticletextanon' ).after(mainTable);
$( '.thisPlaceForIt' ).after(mainTable);
insertLanguagesAndLemmas( $( '.headingsNew' ), formItems);
insertHeadings( $( '.buttonNew' ), formItems);
finalButton( $( '.helloToTheMoon' ), formItems);
}
} );
}( jQuery, mediaWiki ) );