User:BZPN/Script2.js
From Test Wiki
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
mw.loader.using(['oojs-ui', 'mediawiki.util']).done(function () {
// Dodanie przycisku do paska narzędzi
var archiveButton = mw.util.addPortletLink(
'p-tb', // Umieszczenie w menu bocznym
'#', // Link (placeholder, ponieważ kliknięcie będzie obsługiwane przez JavaScript)
'Archiwizuj dyskusję', // Nazwa przycisku
'pt-archive', // ID elementu
'Archiwizuj wybrane wątki na stronach dyskusji', // Opis
null,
'#pt-adminlinks' // Umieszczenie przed istniejącym linkiem
);
// Definicja klasy okna dialogowego
function ArchiveDialog(config) {
ArchiveDialog.super.call(this, config);
}
OO.inheritClass(ArchiveDialog, OO.ui.ProcessDialog);
ArchiveDialog.static.name = 'archiveDialog';
ArchiveDialog.static.title = 'Archiwizacja dyskusji';
ArchiveDialog.static.actions = [
{ action: 'save', label: 'Archiwizuj', flags: ['primary', 'progressive'] },
{ action: 'cancel', label: 'Anuluj', flags: 'safe' }
];
ArchiveDialog.prototype.initialize = function () {
ArchiveDialog.super.prototype.initialize.apply(this, arguments);
// Tworzenie elementów interfejsu
this.content = new OO.ui.PanelLayout({ padded: true, expanded: false });
this.progressBar = new OO.ui.ProgressBarWidget();
this.threadsField = new OO.ui.FieldsetLayout({ label: 'Wybierz wątki do archiwizacji' });
this.archiveField = new OO.ui.FieldsetLayout({ label: 'Wybierz archiwum docelowe' });
this.content.$element.append(this.progressBar.$element, this.threadsField.$element, this.archiveField.$element);
this.$body.append(this.content.$element);
};
ArchiveDialog.prototype.getActionProcess = function (action) {
var dialog = this;
if (action === 'save') {
return new OO.ui.Process(function () {
dialog.archiveSelected();
dialog.close({ action: action });
});
}
return ArchiveDialog.super.prototype.getActionProcess.call(this, action);
};
ArchiveDialog.prototype.getBodyHeight = function () {
return this.content.$element.outerHeight(true);
};
ArchiveDialog.prototype.archiveSelected = function () {
// Implementacja archiwizacji wybranych wątków
var selectedThreads = this.threadsField.items
.filter(function (item) { return item.fieldWidget.isSelected(); })
.map(function (item) { return item.fieldWidget.getValue(); });
var selectedArchive = this.archiveField.items
.find(function (item) { return item.fieldWidget.isSelected(); })
.fieldWidget.getValue();
// Tutaj można dodać logikę do przenoszenia wybranych wątków do wybranego archiwum
console.log('Archiwizowane wątki:', selectedThreads);
console.log('Docelowe archiwum:', selectedArchive);
};
// Dodanie menedżera okien i obsługa kliknięcia przycisku
var windowManager = new OO.ui.WindowManager();
$('body').append(windowManager.$element);
windowManager.addWindows([new ArchiveDialog({ size: 'large' })]);
$(archiveButton).click(function (e) {
e.preventDefault();
windowManager.openWindow('archiveDialog');
});
});