Wiktionary Language Prefs

A script for re-ordering the languages on Wiktionary.

目前为 2023-05-22 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Wiktionary Language Prefs
  3. // @description A script for re-ordering the languages on Wiktionary.
  4. // @version 1.0
  5. // @namespace https://www.mandog.com/
  6. // @match https://*.wiktionary.org/wiki/*
  7. // @license GNU GPLv3
  8. // @supportURL syntaxenjoyer@tutanota.com
  9. // ==/UserScript==
  10.  
  11. const d = document;
  12.  
  13. // your language preferences here
  14. const langPrefs = []
  15.  
  16. const par = d.getElementsByClassName(
  17. 'mw-parser-output');
  18.  
  19. const x = Array.from(par[0].getElementsByTagName('h2'));
  20.  
  21. const wikiLangs = x.filter(i => x.indexOf(i) > 0);
  22.  
  23. const langNames = Array.from(wikiLangs, (i) => {
  24. let id = i.getElementsByClassName(
  25. 'mw-headline')[0].id;
  26. if (id.includes('_')) {
  27. let newId = id.replaceAll('_', ' ');
  28. return newId;
  29. }
  30. else {
  31. return id;
  32. }
  33. });
  34.  
  35. const newOrder = {};
  36.  
  37. const frag = new DocumentFragment();
  38.  
  39. for (let i = 0; i <= (wikiLangs.length - 1); i++) {
  40. if (langPrefs.includes(langNames[i])) {
  41. let key = langNames[i];
  42. let r = d.createRange();
  43. r.setStartBefore(wikiLangs[i]);
  44. wikiLangs[i+ 1] && wikiLangs.length > 2 ?
  45. r.setEndBefore(wikiLangs[i + 1]) :
  46. r.setEndAfter(par[0].lastElementChild);
  47. let val = r.extractContents();
  48. newOrder[key] = val;
  49. }
  50. }
  51.  
  52. langPrefs.forEach(i => {
  53. if (langNames.includes(i)) {
  54. frag.append(newOrder[i]);
  55. }
  56. });
  57.  
  58. const toc = d.getElementById('toc');
  59.  
  60. toc.parentElement == par[0] ? toc.after(frag) : d.getElementById('mf-section-0').after(frag);
  61.  
  62. const contents = d.getElementsByClassName('toclevel-1');
  63.  
  64. const contentsOrder = {};
  65.  
  66. const contentsFrag = new DocumentFragment();
  67.  
  68. const contentsLangNames = Array.from(contents, (i) =>
  69. i.firstElementChild.getElementsByClassName(
  70. 'toctext')[0].innerText);
  71.  
  72. for (let i = contents.length - 1; i>=0; i--) {
  73. let langEntry = contentsLangNames[i];
  74. if (langPrefs.includes(langEntry)) {
  75. let key = langEntry;
  76. let r = d.createRange();
  77. r.setStartBefore(contents[i]);
  78. contents[i + 1] ?
  79. r.setEndBefore(contents[i + 1]) :
  80. r.setEndAfter(contents[i].lastElementChild);
  81. let val = r.extractContents();
  82. contentsOrder[key] = val;
  83. }
  84. }
  85.  
  86. langPrefs.forEach(i => {
  87. if (contentsLangNames.includes(i)) {
  88. contentsFrag.append(contentsOrder[i]);
  89. }
  90. });
  91.  
  92. contents[0].parentNode.insertBefore(
  93. contentsFrag, contents[0].parentNode.firstElementChild);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址