User:BZPN/PNHelper.js: Difference between revisions

From Test Wiki
Content deleted Content added
BZPN (talk | contribs)
No edit summary
Tag: Reverted
BZPN (talk | contribs)
Restored revision 53161 by BZPN (Restorer)
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');


// Dodanie przycisku do paska narzędzi
// Klasa okna modalnego
$('#p-tb ul').append($button);
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() {
var dialog = new OO.ui.ProcessDialog({
size: 'large',
// Pole tytułu zadania
title: 'Dodaj nowe zadanie'
this.titleInput = new OO.ui.TextInputWidget({
placeholder: 'Wprowadź tytuł zadania'
});
});


// Tworzenie pól formularza
// Pole opisu zadania
var titleInput = new OO.ui.TextInputWidget({
this.descriptionInput = new OO.ui.MultilineTextInputWidget({
placeholder: 'Wpisz tytuł zadania'
placeholder: 'Szczegółowy opis zadania',
rows: 5
});
});


// Przycisk dodawania linków
var descriptionInput = new OO.ui.MultilineTextInputWidget({
placeholder: 'Wpisz opis zadania',
this.addLinkButton = new OO.ui.ButtonWidget({
rows: 10,
label: 'Dodaj linki do tekstu',
autosize: true
icon: 'link'
});
});


// Przyciski edycji tekstu
// Przycisk stylowania tekstu
var boldButton = new OO.ui.ButtonWidget({
this.styleTextButton = new OO.ui.ButtonWidget({
icon: 'bold',
label: 'Style tekstu',
title: 'Pogrubienie'
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'
});
});


var editButtons = new OO.ui.ButtonGroupWidget({
// 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
]
})
]
});
});


// Funkcje edycji tekstu
// Dodanie layoutu do panelu
function wrapSelection(before, after) {
this.$body.append(contentLayout.$element);
};
var textarea = descriptionInput.$input[0];

var start = textarea.selectionStart;
TaskDialog.prototype.getActionProcess = function(action) {
var end = textarea.selectionEnd;
var selectedText = textarea.value.substring(start, end);
if (action === 'save') {
var replacement = before + selectedText + after;
return new OO.ui.Process(function() {
// Logika zapisu zadania
textarea.value = textarea.value.substring(0, start) + replacement + textarea.value.substring(end);
descriptionInput.setValue(textarea.value);
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("''", "''"); });
underlineButton.on('click', function() { wrapSelection("<u>", "</u>"); });
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
dialog.$body.append(
// Logika stylowania tekstu
alert('Funkcja stylowania tekstu w trakcie implementacji');
new OO.ui.FieldsetLayout({
items: [
});
};
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
);


// Przyciski akcji
// Stworzenie instancji dialogu
dialog.actions = [
var taskDialog = new TaskDialog({
size: 'large'
{ action: 'cancel', label: 'Anuluj', flags: ['safe', 'close'] },
});
{ action: 'submit', label: 'Zapisz', flags: ['primary', 'progressive'] }
];


// Obsługa akcji
// 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);
};


// Otwieranie okna dialogowego
// Funkcja otwierania modala
function openTaskModal() {
var windowManager = new OO.ui.WindowManager();
$('body').append(windowManager.$element);
taskModal.openWindow(taskDialog);
windowManager.addWindows([dialog]);
windowManager.openWindow(dialog);
}
}


// Dodanie obsługi kliknięcia przycisku
// Dodanie przycisku do paska narzędzi
$button.on('click', function (e) {
function addTaskButton() {
e.preventDefault();
var $toolbar = $('#p-tb .vector-menu-content-list');
createDialog();
});
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>