User:BZPN/MassRollback2.js: Difference between revisions
From Test Wiki
Content deleted Content added
No edit summary |
No edit summary |
||
| Line 15: | Line 15: | ||
createUI: function() { |
createUI: function() { |
||
const $container = $(` |
const $container = $(` |
||
<div id=\"mass-rollback-container\" class=\"mw-portlet\" style=\"display:none;\">\n <h3 class=\"mw-headline\" style=\"margin-top:0;\">Mass rollback tool</h3>\n\n <div id=\"stats-section\" class=\"mw-message-box mw-message-box-notice\" style=\"margin-bottom:1em;\">\n <h4 class=\"mw-ui-headline\" style=\"margin:0 0 .5em 0;\">User statistics</h4>\n <p>Edits: <strong id=\"total-edits\">-</strong></p>\n <p>First edit: <span id=\"first-edit\">-</span></p>\n <p>Recent edit: <span id=\"last-edit\">-</span> <button id=\"refresh-stats\" class=\"mw-ui-button mw-ui-progressive\">Refresh</button></p>\n </div>\n\n <div id=\"filters-section\" class=\"mw-portlet-body\" style=\"margin-bottom:1em;\">\n <h4 class=\"mw-ui-headline\">Filter edits</h4>\n <div class=\"mw-input\" style=\"margin-bottom:.5em;\">\n <label class=\"mw-label\" style=\"margin-right:.5em;\">Date from:</label>\n <input type=\"date\" id=\"start-date\" class=\"mw-ui-input\">\n <label class=\"mw-label\" style=\"margin:0 .5em;\">to:</label>\n <input type=\"date\" id=\"end-date\" class=\"mw-ui-input\">\n </div>\n <div class=\"mw-input\" style=\"margin-bottom:.5em;\">\n <label class=\"mw-label\" style=\"margin-right:.5em;\">Namespace:</label>\n <select id=\"namespace-filter\" multiple class=\"mw-ui-input\" style=\"min-width:150px;\">\n <option value=\"all\">All</option>\n <option value=\"0\">Main</option>\n <option value=\"1\">Talk</option>\n <option value=\"2\">User</option>\n <option value=\"3\">User talk</option>\n <option value=\"4\">Project</option>\n <option value=\"5\">Project talk</option>\n <option value=\"6\">File</option>\n <option value=\"7\">File talk</option>\n <option value=\"8\">MediaWiki</option>\n <option value=\"9\">MediaWiki talk</option>\n <option value=\"10\">Template</option>\n <option value=\"11\">Template talk</option>\n <option value=\"12\">Help</option>\n <option value=\"13\">Help talk</option>\n <option value=\"14\">Category</option>\n <option value=\"15\">Category talk</option>\n <option value=\"100\">Portal</option>\n <option value=\"101\">Portal talk</option>\n </select>\n </div>\n <div class=\"mw-input\" style=\"margin-bottom:.5em;\">\n <label class=\"mw-label\" style=\"margin-right:.5em;\">Edit size:</label>\n <select id=\"size-filter\" class=\"mw-ui-input\">\n <option value=\"\">Any</option>\n <option value=\"small\">Small (< 50 bytes)</option>\n <option value=\"medium\">Medium (50-500 bytes)</option>\n <option value=\"large\">Large (> 500 bytes)</option>\n </select>\n </div>\n <div class=\"mw-input\" style=\"margin-bottom:.5em;\">\n <label class=\"mw-label\" style=\"margin-right:.5em;\">Sort order:</label>\n <select id=\"sort-order\" class=\"mw-ui-input\">\n <option value=\"desc\">Latest first</option>\n <option value=\"asc\">Oldest first</option>\n </select>\n </div>\n <div class=\"mw-input\" style=\"margin-bottom:.5em;\">\n <button id=\"clear-filters\" class=\"mw-ui-button\">Clear filters</button>\n <button id=\"show-filtered\" class=\"mw-ui-button mw-ui-progressive\" style=\"margin-left:.5em;\">Show filtered edits</button>\n </div>\n </div>\n\n <div id=\"reason-section\" class=\"mw-portlet-body\" style=\"margin-bottom:1em;\">\n <h4 class=\"mw-ui-headline\">Rollback reason</h4>\n <select id=\"rollback-reason\" class=\"mw-ui-input\">\n <option value=\"\"></option>\n <option value=\"vandalism\">Vandalism</option>\n <option value=\"spam\">Spam</option>\n <option value=\"test\">Test rollback</option>\n <option value=\"teste\">Test edit</option>\n <option value=\"rules-violation\">Violation</option>\n <option value=\"other\">Other</option>\n </select>\n <input type=\"text\" id=\"custom-reason\" placeholder=\"Enter custom reason\" class=\"mw-ui-input\" style=\"display:none; margin-top:.5em; width:100%;\">\n </div>\n\n <div id=\"actions-section\" class=\"mw-portlet-body\" style=\"text-align:center;\">\n <button id=\"rollback-selected\" class=\"mw-ui-button mw-ui-progressive\" style=\"margin-right:.5em;\">Rollback selected</button>\n <button id=\"rollback-all\" class=\"mw-ui-button mw-ui-destructive\">Rollback all</button>\n </div>\n </div>\n\n <div id=\"filtered-edits-container\" class=\"mw-portlet\" style=\"display:none;\">\n <h4 class=\"mw-ui-headline\">Filtered edits</h4>\n <div class=\"mw-input\" style=\"margin-bottom:.5em;\">\n <input type=\"checkbox\" id=\"select-all\"> <label for=\"select-all\">Select all</label>\n </div>\n <table id=\"filtered-edits-table\" class=\"wikitable\" style=\"width:100%;\">\n <thead>\n <tr>\n <th>Revid</th>\n <th>Title</th>\n <th>Timestamp</th>\n <th>Namespace</th>\n <th>Size</th>\n <th>Select</th>\n </tr>\n </thead>\n <tbody>\n <!-- Wstawiane dynamicznie -->\n </tbody>\n </table>\n <div style=\"text-align:center; margin-top:.5em;\">\n <button id=\"rollback-selected-filtered\" class=\"mw-ui-button mw-ui-progressive\">Rollback selected filtered edits</button>\n </div>\n </div>\n `); |
|||
<div id="mass-rollback-container" class="mw-portlet" style="display:none;"> |
|||
<h3 class="mw-headline" style="margin-top:0;">Mass rollback tool</h3> |
|||
<div id="stats-section" class="mw-message-box mw-message-box-notice" style="margin-bottom:1em;"> |
|||
<h4 class="oo-ui-labelElement-label" style="margin:0 0 .5em 0;">User statistics</h4> |
|||
<p>Edits: <strong id="total-edits">-</strong></p> |
|||
<p>First edit: <span id="first-edit">-</span></p> |
|||
<p>Recent edit: <span id="last-edit">-</span> <button id="refresh-stats" class="oo-ui-buttonElement-button oo-ui-buttonElement-framed oo-ui-flaggedElement-progressive">Refresh</button></p> |
|||
</div> |
|||
<div id="filters-section" class="mw-portlet-body" style="margin-bottom:1em;"> |
|||
<h4 class="oo-ui-labelElement-label">Filter edits</h4> |
|||
<div class="mw-input" style="margin-bottom:.5em;"> |
|||
<label class="mw-label" style="margin-right:.5em;">Date from:</label> |
|||
<input type="date" id="start-date" class="oo-ui-inputWidget-input"> |
|||
<label class="mw-label" style="margin:0 .5em;">to:</label> |
|||
<input type="date" id="end-date" class="oo-ui-inputWidget-input"> |
|||
</div> |
|||
<div class="mw-input" style="margin-bottom:.5em;"> |
|||
<label class="mw-label" style="margin-right:.5em;">Namespace:</label> |
|||
<select id="namespace-filter" multiple class="oo-ui-inputWidget-input" style="min-width:150px;"> |
|||
<option value="all">All</option> |
|||
<option value="0">Main</option> |
|||
<option value="1">Talk</option> |
|||
<option value="2">User</option> |
|||
<option value="3">User talk</option> |
|||
<option value="4">Project</option> |
|||
<option value="5">Project talk</option> |
|||
<option value="6">File</option> |
|||
<option value="7">File talk</option> |
|||
<option value="8">MediaWiki</option> |
|||
<option value="9">MediaWiki talk</option> |
|||
<option value="10">Template</option> |
|||
<option value="11">Template talk</option> |
|||
<option value="12">Help</option> |
|||
<option value="13">Help talk</option> |
|||
<option value="14">Category</option> |
|||
<option value="15">Category talk</option> |
|||
<option value="100">Portal</option> |
|||
<option value="101">Portal talk</option> |
|||
</select> |
|||
</div> |
|||
<div class="mw-input" style="margin-bottom:.5em;"> |
|||
<label class="mw-label" style="margin-right:.5em;">Edit size:</label> |
|||
<select id="size-filter" class="oo-ui-inputWidget-input"> |
|||
<option value="">Any</option> |
|||
<option value="small">Small (< 50 bytes)</option> |
|||
<option value="medium">Medium (50-500 bytes)</option> |
|||
<option value="large">Large (> 500 bytes)</option> |
|||
</select> |
|||
</div> |
|||
<div class="mw-input" style="margin-bottom:.5em;"> |
|||
<label class="mw-label" style="margin-right:.5em;">Sort order:</label> |
|||
<select id="sort-order" class="oo-ui-inputWidget-input"> |
|||
<option value="desc">Latest first</option> |
|||
<option value="asc">Oldest first</option> |
|||
</select> |
|||
</div> |
|||
<div class="mw-input" style="margin-bottom:.5em;"> |
|||
<button id="clear-filters" class="oo-ui-buttonElement-button oo-ui-buttonElement-framed">Clear filters</button> |
|||
<button id="show-filtered" class="oo-ui-buttonElement-button oo-ui-buttonElement-framed oo-ui-flaggedElement-progressive" style="margin-left:.5em;">Show filtered edits</button> |
|||
</div> |
|||
</div> |
|||
<div id="reason-section" class="mw-portlet-body" style="margin-bottom:1em;"> |
|||
<h4 class="oo-ui-labelElement-label">Rollback reason</h4> |
|||
<select id="rollback-reason" class="oo-ui-inputWidget-input"> |
|||
<option value=""></option> |
|||
<option value="vandalism">Vandalism</option> |
|||
<option value="spam">Spam</option> |
|||
<option value="test">Test rollback</option> |
|||
<option value="teste">Test edit</option> |
|||
<option value="rules-violation">Violation</option> |
|||
<option value="other">Other</option> |
|||
</select> |
|||
<input type="text" id="custom-reason" placeholder="Enter custom reason" class="oo-ui-inputWidget-input" style="display:none; margin-top:.5em; width:100%;"> |
|||
</div> |
|||
<div id="actions-section" class="mw-portlet-body" style="text-align:center;"> |
|||
<button id="rollback-selected" class="oo-ui-buttonElement-button oo-ui-buttonElement-framed oo-ui-flaggedElement-progressive" style="margin-right:.5em;">Rollback selected</button> |
|||
<button id="rollback-all" class="oo-ui-buttonElement-button oo-ui-buttonElement-framed oo-ui-flaggedElement-destructive">Rollback all</button> |
|||
</div> |
|||
</div> |
|||
<div id="filtered-edits-container" class="mw-portlet" style="display:none;"> |
|||
<h4 class="oo-ui-labelElement-label">Filtered edits</h4> |
|||
<div class="mw-input" style="margin-bottom:.5em;"> |
|||
<input type="checkbox" id="select-all"> <label for="select-all">Select all</label> |
|||
</div> |
|||
<table id="filtered-edits-table" class="wikitable" style="width:100%;"> |
|||
<thead> |
|||
<tr> |
|||
<th>Revid</th> |
|||
<th>Title</th> |
|||
<th>Timestamp</th> |
|||
<th>Namespace</th> |
|||
<th>Size</th> |
|||
<th>Select</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<!-- Wstawiane dynamicznie --> |
|||
</tbody> |
|||
</table> |
|||
<div style="text-align:center; margin-top:.5em;"> |
|||
<button id="rollback-selected-filtered" class="oo-ui-buttonElement-button oo-ui-buttonElement-framed oo-ui-flaggedElement-progressive">Rollback selected filtered edits</button> |
|||
</div> |
|||
</div> |
|||
`); |
|||
const $toggleButton = $(` |
const $toggleButton = $(` |
||
<button id="mass-rollback-toggle" class=" |
<button id=\"mass-rollback-toggle\" class=\"mw-ui-button mw-ui-progressive\" style=\"margin-bottom:.75em;\">\n Show/hide MassRollback\n </button>\n `); |
||
Show/hide MassRollback |
|||
</button> |
|||
`); |
|||
$toggleButton.on('click', function() { |
$toggleButton.on('click', function() { |
||
| Line 492: | Line 381: | ||
}; |
}; |
||
// Ładujemy |
// Ładujemy stabilne moduły MW; bez OOUI, aby uniknąć problemów z loaderem |
||
mw.loader.using([ |
mw.loader.using([ |
||
'mediawiki.api', |
'mediawiki.api', |
||
'mediawiki.util', |
'mediawiki.util', |
||
'mediawiki.notify', |
'mediawiki.notify', |
||
'mediawiki.ui', |
|||
// OOUI – zbiorcze moduły kompatybilne na większości wiki |
|||
' |
'mediawiki.ui.button' |
||
'oojs-ui.styles' |
|||
]).then(function () { |
]).then(function () { |
||
$(function () { |
$(function () { |
||
| Line 505: | Line 393: | ||
}); |
}); |
||
}).catch(function () { |
}).catch(function () { |
||
// Fallback: jeśli OOUI nie jest dostępne, nadal inicjalizuj narzędzie bez stylów OOUI |
|||
$(function () { |
$(function () { |
||
try { MassRollback.init(); } catch (e) { console.error(e); } |
try { MassRollback.init(); } catch (e) { console.error(e); } |
||