Wikimedia Commons upload page: near Categories input - set previous clickable categories

Useful to see previous categories that you used

当前为 2024-08-17 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Wikimedia Commons upload page: near Categories input - set previous clickable categories
  3. // @namespace http://greasyfork.org/
  4. // @version 1.1
  5. // @author Vitaly Zdanevich
  6. // @match https://commons.wikimedia.org/wiki/Special:UploadWizard
  7. // @match https://commons.wikimedia.org/w/index.php?title=Special:UploadWizard*
  8. // @supportURL https://gitlab.com/vitaly-zdanevich-userscripts/commonsUploadSetPrevCategories
  9. // @description Useful to see previous categories that you used
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. // TODO publish to Commons userscript (userscript of another type)
  14.  
  15. (function() {
  16. const parent = document.getElementById('upload-wizard')
  17. const config = { attributes: true, childList: false, subtree: true }
  18. const observer = new MutationObserver(_ => {
  19.  
  20. if (!setPreviousCategories.isStarted && document.querySelector('.oo-ui-draggableGroupElement') && !document.querySelector('#prevCats'))
  21. setPreviousCategories()
  22. })
  23.  
  24. function setPreviousCategories() {
  25. setPreviousCategories.isStarted = true
  26.  
  27. // https://www.mediawiki.org/wiki/API:Usercontribs
  28. fetch(`https://commons.wikimedia.org/w/api.php?action=query&list=usercontribs&uclimit=1&ucuser=${mw.user.getName()}&format=json`)
  29. .then(resp => resp.json())
  30. .then(j => {
  31. const filename = j['query']['usercontribs'][0]['title']
  32. // https://www.mediawiki.org/w/api.php?action=help&modules=query:categories
  33. fetch(`https://commons.wikimedia.org/w/api.php?action=query&format=json&prop=categories&meta=&titles=${filename}&formatversion=2&clshow=!hidden`)
  34. .then(resp => resp.json())
  35. .then(j => {
  36. const cats = j['query']['pages'][0]['categories']
  37. .reduce(reducer, [])
  38. const div = document.createElement('div')
  39. div.id = 'prevCats'
  40. const a = document.createElement('a')
  41. a.innerText = 'Previous:\n'
  42. a.href = '//commons.wikimedia.org/wiki/' + filename
  43. document.querySelector('.oo-ui-draggableGroupElement').append(a, ...cats)
  44. })
  45. })
  46. }
  47.  
  48. observer.observe(parent, config)
  49.  
  50. })()
  51.  
  52. function reducer(acc, cur) {
  53. const a = document.createElement('a')
  54. a.innerText = cur['title'].replace('Category:', '')
  55. a.href = '//commons.wikimedia.org/wiki/' + cur['title']
  56. a.style = 'display: block'
  57. acc.push(a)
  58. return acc
  59. }