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');
    });
});