User:BZPN/Script2.js: Difference between revisions

From Test Wiki
Jump to navigation Jump to search
Content deleted Content added
Created page with "mw.loader.using(['oojs-ui', 'mediawiki.util']).done(function () { var archiveButton = mw.util.addPortletLink( 'p-tb', '#', 'Archiwizuj dyskusję', 'pt-archive', 'Archiwizuj wybrane wątki na stronach dyskusji' ); $(archiveButton).click(function () { // Create a dialog for archiving var archiveDialog = new OO.ui.ProcessDialog({ title: 'Archiwizacja dyskusji', size: 'large'..."
Tags: Mobile edit Mobile web edit
 
No edit summary
Tags: Mobile edit Mobile web edit
 
Line 1: Line 1:
mw.loader.using(['oojs-ui', 'mediawiki.util']).done(function () {
mw.loader.using(['oojs-ui', 'mediawiki.util']).done(function () {
// Dodanie przycisku do paska narzędzi
var archiveButton = mw.util.addPortletLink(
var archiveButton = mw.util.addPortletLink(
'p-tb',
'p-tb', // Umieszczenie w menu bocznym
'#', // Link (placeholder, ponieważ kliknięcie będzie obsługiwane przez JavaScript)
'#',
'Archiwizuj dyskusję',
'Archiwizuj dyskusję', // Nazwa przycisku
'pt-archive',
'pt-archive', // ID elementu
'Archiwizuj wybrane wątki na stronach dyskusji'
'Archiwizuj wybrane wątki na stronach dyskusji', // Opis
null,
'#pt-adminlinks' // Umieszczenie przed istniejącym linkiem
);
);


// Definicja klasy okna dialogowego
$(archiveButton).click(function () {
function ArchiveDialog(config) {
// Create a dialog for archiving
ArchiveDialog.super.call(this, config);
var archiveDialog = new OO.ui.ProcessDialog({
}
title: 'Archiwizacja dyskusji',
OO.inheritClass(ArchiveDialog, OO.ui.ProcessDialog);
size: 'large'
});


ArchiveDialog.static.name = 'archiveDialog';
var windowManager = new OO.ui.WindowManager();
ArchiveDialog.static.title = 'Archiwizacja dyskusji';
$('body').append(windowManager.$element);
ArchiveDialog.static.actions = [
windowManager.addWindows([archiveDialog]);
{ action: 'save', label: 'Archiwizuj', flags: ['primary', 'progressive'] },
windowManager.openWindow(archiveDialog);
{ action: 'cancel', label: 'Anuluj', flags: 'safe' }
];


ArchiveDialog.prototype.initialize = function () {
var progressBar = new OO.ui.ProgressBarWidget();
ArchiveDialog.super.prototype.initialize.apply(this, arguments);
var progressField = new OO.ui.FieldLayout(progressBar, {
label: 'Wyszukiwanie wątków i archiwów...',
align: 'top'
});


// Tworzenie elementów interfejsu
var threadsField = new OO.ui.FieldsetLayout({
this.content = new OO.ui.PanelLayout({ padded: true, expanded: false });
label: 'Wybierz wątki do archiwizacji'
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);
var archiveField = new OO.ui.FieldsetLayout({
this.$body.append(this.content.$element);
label: 'Wybierz archiwum docelowe'
});
};


ArchiveDialog.prototype.getActionProcess = function (action) {
archiveDialog.$body.append(progressField.$element, threadsField.$element, archiveField.$element);
var dialog = this;

function detectThreads() {
if (action === 'save') {
return new OO.ui.Process(function () {
// Use regex to find sections that match '== Wątek =='
var content = $('#mw-content-text').text();
dialog.archiveSelected();
var threads = content.match(/==\s.*?\s==/g);
dialog.close({ action: action });

if (threads) {
threads.forEach(function (thread) {
var checkbox = new OO.ui.CheckboxInputWidget({ value: thread });
var checkboxField = new OO.ui.FieldLayout(checkbox, { label: thread, align: 'inline' });
threadsField.addItems([checkboxField]);
});
}
}

function findArchives() {
// Use MediaWiki API to search for possible archive pages
var userName = mw.config.get('wgTitle').split(':')[1];
var archiveSearchTitles = [
'Dyskusja wikipedysty:' + userName + '/Archiwum/',
'Archiwum/',
'Dyskusja:',
'Dyskusja ' + userName
];

// Display options for archive selection
archiveSearchTitles.forEach(function (title) {
var radio = new OO.ui.RadioInputWidget({ value: title });
var radioField = new OO.ui.FieldLayout(radio, { label: title + 'X', align: 'inline' });
archiveField.addItems([radioField]);
});
});
}
}
return ArchiveDialog.super.prototype.getActionProcess.call(this, action);
};


ArchiveDialog.prototype.getBodyHeight = function () {
// Initialize by detecting threads and finding archives
return this.content.$element.outerHeight(true);
detectThreads();
findArchives();
};


function archiveSelected() {
ArchiveDialog.prototype.archiveSelected = function () {
// Implementacja archiwizacji wybranych wątków
// Move the selected threads to the chosen archive
var selectedThreads = threadsField.items
var selectedThreads = this.threadsField.items
.filter(function (item) { return item.fieldWidget.isSelected(); })
.filter(function (item) { return item.fieldWidget.isSelected(); })
.map(function (item) { return item.fieldWidget.getValue(); });
.map(function (item) { return item.fieldWidget.getValue(); });


var selectedArchive = archiveField.items
var selectedArchive = this.archiveField.items
.find(function (item) { return item.fieldWidget.isSelected(); })
.find(function (item) { return item.fieldWidget.isSelected(); })
.fieldWidget.getValue();
.fieldWidget.getValue();


// Tutaj można dodać logikę do przenoszenia wybranych wątków do wybranego archiwum
// Perform the cut and paste action
console.log('Archiving:', selectedThreads, 'to', selectedArchive);
console.log('Archiwizowane wątki:', selectedThreads);
console.log('Docelowe archiwum:', selectedArchive);
};


// Dodanie menedżera okien i obsługa kliknięcia przycisku
// TODO: Use MediaWiki API to edit both the discussion and archive pages
var windowManager = new OO.ui.WindowManager();
}
$('body').append(windowManager.$element);
windowManager.addWindows([new ArchiveDialog({ size: 'large' })]);


$(archiveButton).click(function (e) {
// Add an "Archive" button to start the archiving process
e.preventDefault();
var archiveButton = new OO.ui.ButtonWidget({
windowManager.openWindow('archiveDialog');
label: 'Archiwizuj',
flags: ['primary', 'progressive']
});
archiveButton.on('click', archiveSelected);
archiveDialog.$foot.append(archiveButton.$element);
});
});
});
});

Latest revision as of 16:49, 25 October 2024

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