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

Useful to see previous categories that you used

当前为 2024-06-11 提交的版本,查看 最新版本

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