Benutzer:Lustiger seth/list2table.js
Erscheinungsbild
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
/*
task: replace lists with tables in watchlist/contribs and some other logs
tested in firefox only
*/
$(function (){
function get_list_patterns(){
const patterns = {
'plainlinks': {
name: "abuselog",
re: /^([0-9T:-]+):\s*(<a .*?<\/a>)\s*(<span .*?<\/span>) triggered (<a .*?<\/a>), performing the action "([^"]+)" on (<a .*?<\/a>)\.\s*Actions taken: ([^;]+);\s*Filter description: (.*)\s\((<a .*?<\/a>)\)\s*$/,
heading: ['date', 'user', 'user', 'rule', 'did', 'page', 'action', 'description', 'tools'],
format: function(cells, last_row){
cells[3] = cells[3].replace(/>talk</, '>t<').replace(/>block</, '>b<').replace(/>contribs</, '>c<').replace(/>\(\s*/, '>').replace(/>\s*\)\s*</, '><');
cells[4] = cells[4].replace(/>filter /, '>');
[2, 6, 8].forEach(i => {
if(last_row[i] === cells[i]){
cells[i] = '-"-'
}else{
last_row[i] = cells[i];
}
});
cells[9] = cells[9].replace(/>details</, '>d<').replace(/>examine</, '>e<');
}
/*
<li>
1: 2021-08-12T14:07:45:
2: <a href="/wiki/Spezial:Beitr%C3%A4ge/127.0.0.1" class="mw-userlink mw-anonuserlink userlink" title="Spezial:Beiträge/127.0.0.1"><bdi>127.0.0.1</bdi></a>
3: <span class="mw-usertoollinks">(
<a href="/w/index.php?title=Benutzer_Diskussion:127.0.0.1&action=edit&redlink=1" class="new mw-usertoollinks-talk userlink" title="Benutzer Diskussion:127.0.0.1 (Seite nicht vorhanden)">talk</a>
| <a href="/wiki/Spezial:Sperren/127.0.0.1" class="mw-usertoollinks-block" title="Spezial:Sperren/127.0.0.1">block</a>)
</span> triggered
4: <a href="/wiki/Spezial:Missbrauchsfilter/276" title="Spezial:Missbrauchsfilter/276">filter 276</a>,
5: performing the action "edit"
6: on <a href="/w/index.php?title=Referenzpunkt_(Koordinaten)&redirect=no&action=edit&redlink=1" class="new" title="Referenzpunkt (Koordinaten) (Seite nicht vorhanden)">Referenzpunkt (Koordinaten)</a>.
7: Actions taken: Disallow;
8: Filter description: vermutlich kein sinnvoller Artikel
9: (<a href="/wiki/Spezial:Missbrauchsfilter-Logbuch/750813" title="Spezial:Missbrauchsfilter-Logbuch/750813">details</a>
| <a href="/wiki/Spezial:Missbrauchsfilter/examine/log/750813" title="Spezial:Missbrauchsfilter/examine/log/750813">examine</a>)
</li>
*/
},
'mw-contributions-list': {
name: "contribs",
re: /^(<span .*?<\/span>)\s*(<a .*?<\/a>)\s*(<span .*?<\/span>)\s*<span class="mw-changeslist-separator"><\/span>\s*(<strong .*?<\/strong>|<span .*?<\/span>)\s*?\s*<span class="mw-changeslist-separator"><\/span>\s*(<abbr .*?<\/abbr>|)\s*(<a .*?<\/a>)\s*\s*(<span .*?<\/span>)(\s*<span .*?<\/span>|)(\s*<span .*?<\/span>|)\s*$/,
heading: ['vis', 'date', 'diff<br />hist ', 'bytes', 'flag', 'page', 'summary', '?', 'rollback'],
format: function(cells, last_row){
cells[1] = cells[1].replace(/>change visibility</, '>chg<');
cells[3] = cells[3].replace(/>diff</, '>d<').replace(/>hist</, '>h<');
cells[6] = cells[6].replace(/>Benutzer(?:in|):/, '>user:').replace(/>Benutzer(?:in|) Diskussion:/, '>user talk:').replace(/>Wikipedia:/, '>WP:');
cells[9] = cells[9].replace(/>rollback /, '>');
cells[1] = cells[1].replace(/>\(\s*/, '>').replace(/>\s*\)\s*</, '><');
const css_classes = ['.comment--without-parentheses', '.mw-changeslist-links', '.mw-diff-bytes', '.mw-uctop']; // '.mw-tag-markers'
css_classes.forEach(c => {
document.styleSheets[0].addRule(c + '::before','content: "";')
document.styleSheets[0].addRule(c + '::after','content: "";')
});
}
/*
<li data-mw-revid="214754025" class="mw-contributions-current">
1: <span class="mw-revdelundel-link">
(<a href="/w/index.php?title=Spezial:Versionsl%C3%B6schung&type=revision&target=Wikipedia%3ABearbeitungsfilter%2Flatest_topics&ids=214754025" title="Spezial:Versionslöschung">change visibility</a>)
</span>
2: <a href="/w/index.php?title=Wikipedia:Bearbeitungsfilter/latest_topics&oldid=214754025" class="mw-changeslist-date" title="Wikipedia:Bearbeitungsfilter/latest topics">2021-08-14T11:37:42</a>
3: <span class="mw-changeslist-links">
span><a href="/w/index.php?title=Wikipedia:Bearbeitungsfilter/latest_topics&diff=prev&oldid=214754025" class="mw-changeslist-diff" title="Wikipedia:Bearbeitungsfilter/latest topics">diff</a></span>
<span><a href="/w/index.php?title=Wikipedia:Bearbeitungsfilter/latest_topics&action=history" class="mw-changeslist-history" title="Wikipedia:Bearbeitungsfilter/latest topics">hist</a></span>
</span>
<span class="mw-changeslist-separator"></span>
4: <span dir="ltr" class="mw-plusminus-pos mw-diff-bytes" title="9,369 bytes after change">+4</span>
<span class="mw-changeslist-separator"></span>
5: <abbr class="minoredit" title="This is a minor edit">m</abbr>
6: <a href="/wiki/Wikipedia:Bearbeitungsfilter/latest_topics" class="mw-contributions-title" title="Wikipedia:Bearbeitungsfilter/latest topics">Wikipedia:Bearbeitungsfilter/latest topics</a>
7: <span class="comment comment--without-parentheses">Bot: (#276): vermutlich kein sinnvoller Artikel</span>
8opt: <span class="mw-uctop">current</span>
9opt: <span class="mw-rollback-link">
<a href="/w/index.php?title=Wikipedia:Bearbeitungsfilter/latest_topics&action=rollback&from=CamelBot&token=6d6ba1c385b308088b023f270e16c4b261179015%2B%5C" title=""Rollback" reverts the last contributor's edit(s) to this page in one click" data-mw="interface">
rollback more than 10 edits
</a>
</span>
</li>
*/
},
'special': {
name: "watchlist",
re: /(<a .*?<\/a>|\bdiff\b).*?(<a .*?<\/a>).*?(<a .*?<\/a>).*?(<span class="mw-changeslist-date[^"]*">[0-9:]+<\/span>).*?(<strong .*?<\/strong>|<span dir="ltr" class="mw-plusminus-[a-z]+ mw-diff-bytes" .*?<\/span>).*?(<a .*?<\/a>)\s*(<span class="mw-usertoollinks mw-changeslist-links">.*<\/span>)\s*(\s*<span .*<\/span>|\Z)/,
heading: ['diff', 'hist', 'page', 'time', 'bytes', 'user', 'u. links', 'summary', 'tags'],
format: function(cells, last_row){
cells[7] = cells[7].replace(/>talk</, '>t<').replace(/>contribs</, '>c<').replace(/>block</, '>b<');
cells[8] = cells[8].replace(/^\s*/, '').replace(/<span class="mw-rollback-link">.*/, '');
const tags = /(<span class="mw-tag-markers">.*)/.exec(cells[8]);
if(tags){
cells[9] = tags[1];
cells[8] = cells[8].replace(/<span class="mw-tag-markers">.*/, '');
}else{
cells[9] = '';
}
cells[9] = cells[9].replace(/<a .*?>Tags?<\/a>:\s*/, '');
const css_classes = ['.comment--without-parentheses', '.mw-changeslist-links', '.mw-diff-bytes', '.mw-uctop']; // '.mw-tag-markers'
css_classes.forEach(c => {
document.styleSheets[0].addRule(c + '::before','content: "";')
document.styleSheets[0].addRule(c + '::after','content: "";')
});
}
}
/*
<div class="mw-rcfilters-ui-highlights">
<div class="mw-rcfilters-ui-highlights-color-none" data-color="none"></div>
<div class="mw-rcfilters-ui-highlights-color-c1" data-color="c1"></div>
<div class="mw-rcfilters-ui-highlights-color-c2" data-color="c2"></div>
<div class="mw-rcfilters-ui-highlights-color-c3" data-color="c3"></div>
<div class="mw-rcfilters-ui-highlights-color-c4" data-color="c4"></div>
<div class="mw-rcfilters-ui-highlights-color-c5" data-color="c5"></div>
</div>
<span class="mw-changeslist-line-inner" data-target-page="Wikipedia:Fragen zur Wikipedia">
<div class="mw-changeslist-links">
<span>
1: <a href="/w/index.php?title=Wikipedia:Fragen_zur_Wikipedia&curid=6977098&diff=214751110&oldid=214747823" class="mw-changeslist-diff" title="Wikipedia:Fragen zur Wikipedia">diff</a>
</span>
<span>
2: <a href="/w/index.php?title=Wikipedia:Fragen_zur_Wikipedia&curid=6977098&action=history" class="mw-changeslist-history" title="Wikipedia:Fragen zur Wikipedia">hist</a>
</span>
</div>
<span class="mw-changeslist-separator"></span>
<span class="mw-title">
3: <a href="/wiki/Wikipedia:Fragen_zur_Wikipedia" class="mw-changeslist-title" title="Wikipedia:Fragen zur Wikipedia">Wikipedia:Fragen zur Wikipedia</a>
</span>
<span class="mw-changeslist-separator--semicolon"></span>
4: <span class="mw-changeslist-date">09:28:29</span>
<span class="mw-changeslist-separator"></span>
5: <span dir="ltr" class="mw-plusminus-pos mw-diff-bytes" title="72,244 bytes after change">+300</span>
<span class="mw-changeslist-separator"></span>
6: <a href="/wiki/Benutzer:lustiger_seth" class="mw-userlink userlink" title="Benutzer:lustiger_seth">
<bdi>lustiger_seth</bdi>
<span class="adminMark"> (A)</span>
</a>
7: <span class="mw-usertoollinks mw-changeslist-links">
<span>
<a href="/wiki/Benutzer_Diskussion:lustiger_seth" class="mw-usertoollinks-talk userlink" title="Benutzer Diskussion:lustiger_seth">talk</a>
</span>
<span>
<a href="/wiki/Spezial:Beitr%C3%A4ge/lustiger_seth" class="mw-usertoollinks-contribs userlink" title="Spezial:Beiträge/lustiger_seth">contribs</a>
</span>
<span><a href="/wiki/Spezial:Sperren/lustiger_seth" class="mw-usertoollinks-block" title="Spezial:Sperren/lustiger_seth">block</a></span>
</span>
8opt: <span class="comment comment--without-parentheses">
<span dir="auto">
<span class="autocomment">
<a href="/wiki/Wikipedia:Fragen_zur_Wikipedia#Farbe_von_Rotlinks" title="Wikipedia:Fragen zur Wikipedia">→Farbe von Rotlinks</a>
:
</span>
Frage
</span>
</span>
9opt: <span class="mw-tag-markers">
<a href="/wiki/Spezial:Markierungen" title="Spezial:Markierungen">Tag</a>
:
<span class="mw-tag-marker mw-tag-marker-mw-manual-revert">Manual revert</span>
</span>
<span class="mw-rollback-link">
<a href="/w/index.php?title=Wikipedia:Fragen_zur_Wikipedia&action=rollback&from=lustiger+seth&token=8289ba551cefad4d515acaa6e95dea13611770d3%2B%5C" title=""Rollback" reverts the last contributor's edit(s) to this page in one click" data-mw="interface">rollback</a>
</span>
</span>
*/
};
return patterns;
}
const patterns = get_list_patterns();
const classes_of_lists = Object.keys(patterns);
classes_of_lists.forEach(class_name => {
const lists = document.getElementsByClassName(class_name);
if(lists && false){
Array.from(lists).forEach(list => {
if(list && list.children.length > 0 && patterns[class_name].re.test(list.children[0].innerHTML)){
table = '<table class="wikitable"><tr>';
patterns[class_name].heading.forEach(h => {
table += "<th>" + h + "</th>";
});
table += "</tr>";
const last_row = Array(list.children.length);
Array.from(list.children).forEach(li => {
const cells = patterns[class_name].re.exec(li.innerHTML);
table += "<tr>";
if(cells){
patterns[class_name].format(cells, last_row);
for(let i = 1; i < cells.length; ++i){
table += "<td>" + cells[i] + "</td>";
}
}else{
table += '<td colspan="' + patterns[class_name].heading.length + '">' + li.innerHTML + "</td>";
}
table += "</tr>";
});
table += "</table>";
const mySpan = document.createElement("span");
mySpan.innerHTML = table;
list.parentNode.replaceChild(mySpan, list);
}
});
}
});
});