User:BZPN/PNHelper.js: Difference between revisions
From Test Wiki
Content deleted Content added
No edit summary Tag: Reverted |
Tag: Undo |
||
| (6 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
mw.loader.using(['mediawiki.api', 'oojs-ui'], function() { |
|||
// <nowiki> |
|||
function createTaskModal() { |
|||
mw.loader.using(['oojs-ui-core', 'oojs-ui-windows', 'oojs-ui-widgets'], function () { |
|||
// Główne okno modalne |
|||
mw.hook('wikipage.content').add(function ($content) { |
|||
var taskModal = new OO.ui.WindowManager(); |
|||
// Tworzenie przycisku |
|||
$('body').append(taskModal.$element); |
|||
var $button = $('<li id="t-custom-task"><a href="#"></a></li>'); |
|||
$button.find('a').text('Dodaj zadanie'); |
|||
// |
// Klasa okna modalnego |
||
var TaskDialog = function() { |
|||
TaskDialog.super.apply(this, arguments); |
|||
}; |
|||
OO.inheritClass(TaskDialog, OO.ui.ProcessDialog); |
|||
TaskDialog.static.name = 'taskDialog'; |
|||
TaskDialog.static.title = 'Dodaj zadanie'; |
|||
TaskDialog.static.actions = [ |
|||
{ |
|||
action: 'save', |
|||
label: 'Zapisz', |
|||
flags: ['primary', 'progressive'] |
|||
}, |
|||
{ |
|||
action: 'cancel', |
|||
label: 'Anuluj', |
|||
flags: ['safe', 'close'] |
|||
} |
|||
]; |
|||
TaskDialog.prototype.initialize = function() { |
|||
// Funkcja tworząca okno dialogowe |
|||
TaskDialog.super.prototype.initialize.apply(this, arguments); |
|||
function createDialog() { |
|||
// Pole tytułu zadania |
|||
this.titleInput = new OO.ui.TextInputWidget({ |
|||
placeholder: 'Wprowadź tytuł zadania' |
|||
}); |
}); |
||
// |
// Pole opisu zadania |
||
this.descriptionInput = new OO.ui.MultilineTextInputWidget({ |
|||
placeholder: ' |
placeholder: 'Szczegółowy opis zadania', |
||
rows: 5 |
|||
}); |
}); |
||
// Przycisk dodawania linków |
|||
var descriptionInput = new OO.ui.MultilineTextInputWidget({ |
|||
this.addLinkButton = new OO.ui.ButtonWidget({ |
|||
label: 'Dodaj linki do tekstu', |
|||
icon: 'link' |
|||
}); |
}); |
||
// |
// Przycisk stylowania tekstu |
||
this.styleTextButton = new OO.ui.ButtonWidget({ |
|||
label: 'Style tekstu', |
|||
icon: 'formatting' |
|||
}); |
|||
var italicButton = new OO.ui.ButtonWidget({ |
|||
icon: 'italic', |
|||
title: 'Kursywa' |
|||
}); |
|||
var underlineButton = new OO.ui.ButtonWidget({ |
|||
icon: 'underline', |
|||
title: 'Podkreślenie' |
|||
}); |
|||
var strikethroughButton = new OO.ui.ButtonWidget({ |
|||
icon: 'strikethrough', |
|||
title: 'Przekreślenie' |
|||
}); |
|||
var subscriptButton = new OO.ui.ButtonWidget({ |
|||
icon: 'subscript', |
|||
title: 'Indeks dolny' |
|||
}); |
|||
var superscriptButton = new OO.ui.ButtonWidget({ |
|||
icon: 'superscript', |
|||
title: 'Indeks górny' |
|||
}); |
|||
var linkButton = new OO.ui.ButtonWidget({ |
|||
icon: 'link', |
|||
title: 'Wstaw link' |
|||
}); |
}); |
||
// Układ pionowy elementów |
|||
var contentLayout = new OO.ui.VerticalLayout({ |
|||
items: [boldButton, italicButton, underlineButton, strikethroughButton, subscriptButton, superscriptButton, linkButton] |
|||
items: [ |
|||
this.titleInput, |
|||
this.descriptionInput, |
|||
new OO.ui.HorizontalLayout({ |
|||
items: [ |
|||
this.addLinkButton, |
|||
this.styleTextButton |
|||
] |
|||
}) |
|||
] |
|||
}); |
}); |
||
// |
// Dodanie layoutu do panelu |
||
this.$body.append(contentLayout.$element); |
|||
}; |
|||
var textarea = descriptionInput.$input[0]; |
|||
var start = textarea.selectionStart; |
|||
TaskDialog.prototype.getActionProcess = function(action) { |
|||
var end = textarea.selectionEnd; |
|||
if (action === 'save') { |
|||
return new OO.ui.Process(function() { |
|||
// Logika zapisu zadania |
|||
textarea.value = textarea.value.substring(0, start) + replacement + textarea.value.substring(end); |
|||
console.log('Tytuł:', this.titleInput.getValue()); |
|||
console.log('Opis:', this.descriptionInput.getValue()); |
|||
this.close(); |
|||
}, this); |
|||
} |
} |
||
if (action === 'cancel') { |
|||
return new OO.ui.Process(function() { |
|||
this.close(); |
|||
}, this); |
|||
} |
|||
return TaskDialog.super.prototype.getActionProcess.call(this, action); |
|||
}; |
|||
// Dodanie obsługi zdarzeń dla przycisków specjalnych |
|||
boldButton.on('click', function() { wrapSelection("'''", "'''"); }); |
|||
TaskDialog.prototype.onDialogReady = function() { |
|||
italicButton.on('click', function() { wrapSelection("''", "''"); }); |
|||
this.addLinkButton.on('click', function() { |
|||
// Logika dodawania linków |
|||
strikethroughButton.on('click', function() { wrapSelection("<s>", "</s>"); }); |
|||
alert('Funkcja dodawania linków w trakcie implementacji'); |
|||
subscriptButton.on('click', function() { wrapSelection("<sub>", "</sub>"); }); |
|||
superscriptButton.on('click', function() { wrapSelection("<sup>", "</sup>"); }); |
|||
linkButton.on('click', function() { |
|||
var selectedText = descriptionInput.$input[0].value.substring( |
|||
descriptionInput.$input[0].selectionStart, |
|||
descriptionInput.$input[0].selectionEnd |
|||
); |
|||
if (selectedText) { |
|||
wrapSelection("[[", "]]"); |
|||
} else { |
|||
alert('Zaznacz tekst, aby dodać link.'); |
|||
} |
|||
}); |
}); |
||
this.styleTextButton.on('click', function() { |
|||
// Konfiguracja okna dialogowego |
|||
// Logika stylowania tekstu |
|||
alert('Funkcja stylowania tekstu w trakcie implementacji'); |
|||
new OO.ui.FieldsetLayout({ |
|||
}); |
|||
}; |
|||
new OO.ui.FieldLayout(titleInput, { |
|||
label: 'Tytuł zadania', |
|||
align: 'top' |
|||
}), |
|||
new OO.ui.FieldLayout(editButtons, { |
|||
label: 'Edycja tekstu', |
|||
align: 'top' |
|||
}), |
|||
new OO.ui.FieldLayout(descriptionInput, { |
|||
label: 'Opis zadania', |
|||
align: 'top' |
|||
}) |
|||
] |
|||
}).$element |
|||
); |
|||
// Stworzenie instancji dialogu |
|||
var taskDialog = new TaskDialog({ |
|||
size: 'large' |
|||
{ action: 'cancel', label: 'Anuluj', flags: ['safe', 'close'] }, |
|||
}); |
|||
{ action: 'submit', label: 'Zapisz', flags: ['primary', 'progressive'] } |
|||
]; |
|||
// Dodanie dialogu do menedżera okien |
|||
taskModal.addWindows([taskDialog]); |
|||
dialog.getActionProcess = function (action) { |
|||
if (action === 'submit') { |
|||
return new OO.ui.Process(function () { |
|||
console.log('Zapisano zadanie:', titleInput.getValue(), descriptionInput.getValue()); |
|||
dialog.close(); |
|||
}); |
|||
} |
|||
return dialog.parent.getActionProcess.call(this, action); |
|||
}; |
|||
// Funkcja otwierania modala |
|||
function openTaskModal() { |
|||
var windowManager = new OO.ui.WindowManager(); |
|||
taskModal.openWindow(taskDialog); |
|||
windowManager.addWindows([dialog]); |
|||
windowManager.openWindow(dialog); |
|||
} |
} |
||
// Dodanie |
// Dodanie przycisku do paska narzędzi |
||
function addTaskButton() { |
|||
var $toolbar = $('#p-tb .vector-menu-content-list'); |
|||
var $taskButton = $('<li>') |
|||
.append( |
|||
}); |
|||
$('<a>') |
|||
.text('Dodaj zadanie') |
|||
.on('click', openTaskModal) |
|||
); |
|||
$toolbar.append($taskButton); |
|||
} |
|||
// Inicjalizacja po załadowaniu strony |
|||
$(document).ready(addTaskButton); |
|||
} |
|||
// Wywołanie funkcji inicjalizującej |
|||
createTaskModal(); |
|||
}); |
}); |
||
// </nowiki> |
|||