Zum Inhalt springen

Benutzer:Lustiger seth/list2table.js

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 14. Februar 2022 um 00:37 Uhr durch Lustiger seth (Diskussion | Beiträge) (debugging). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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&amp;action=edit&amp;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)&amp;redirect=no&amp;action=edit&amp;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&nbsp;', '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&amp;type=revision&amp;target=Wikipedia%3ABearbeitungsfilter%2Flatest_topics&amp;ids=214754025" title="Spezial:Versionslöschung">change visibility</a>)
  </span>
2: <a href="/w/index.php?title=Wikipedia:Bearbeitungsfilter/latest_topics&amp;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&amp;diff=prev&amp;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&amp;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&amp;action=rollback&amp;from=CamelBot&amp;token=6d6ba1c385b308088b023f270e16c4b261179015%2B%5C" title="&quot;Rollback&quot; 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.&nbsp;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&amp;curid=6977098&amp;diff=214751110&amp;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&amp;curid=6977098&amp;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">&nbsp;(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&amp;action=rollback&amp;from=lustiger+seth&amp;token=8289ba551cefad4d515acaa6e95dea13611770d3%2B%5C" title="&quot;Rollback&quot; 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);
				}
			});
		}
	});
});