Advertisement
VF-

eHázi - Tag emlékeztető

VF-
Feb 19th, 2023
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 7.47 KB | Source Code | 0 0
  1. // ==UserScript==
  2. // @name        eHázi - Tag emlékeztető
  3. // @namespace   VF@eHazi
  4. // @description Segít megjegyezni az emlékezetes viselkedésű tagokat
  5. // @match       https://ehazi.hu/*
  6. // @version     0.0
  7. // @grant       GM.listValues
  8. // @grant       GM.getValue
  9. // @grant       GM.setValue
  10. // @grant       GM.deleteValue
  11. // @grant       GM.registerMenuCommand
  12. // ==/UserScript==
  13.  
  14. let stilus = document.createElement('style')
  15. stilus.textContent = `
  16. *[data-emlekezteto]::after {
  17.   content: "\\f094";
  18.   color: darkorange;
  19.   font-family: FontAwesome;
  20.   background-image: radial-gradient(yellow, transparent .5em);
  21. }
  22. `
  23. document.head.appendChild(stilus)
  24.  
  25.  
  26. let emlekeztetoTerkep = []
  27. GM.listValues().then(ertek => {
  28.   emlekeztetoTerkep = new Map(ertek.map(egy => [egy]))
  29.  
  30.   let tagLista = document.querySelectorAll('*[onclick*="openModalShowProfileSimple"]')
  31.   for (let tag of tagLista) {
  32.     let talalat = tag.getAttribute('onclick').match(/\d+/)
  33.     if (talalat && emlekeztetoTerkep.has(talalat[0])) {
  34.       let vaskos = tag.querySelector('strong')
  35.       ;(vaskos ?? tag).dataset.emlekezteto = true
  36.       ;(vaskos ?? tag).title = '⏳'
  37.       GM.getValue(talalat[0]).then(ertek => {
  38.         emlekeztetoTerkep.set(talalat[0], ertek)
  39.         ;(vaskos ?? tag).title = ertek.slice(25)
  40.       })
  41.     }
  42.   }
  43.  
  44.   let szkript = document.createElement('script')
  45.   szkript.textContent = `let emlekeztetoLista = ${ JSON.stringify(Array.from(emlekeztetoTerkep.keys())) }`
  46.   document.head.appendChild(szkript)
  47.   document.head.removeChild(szkript)
  48. })
  49.  
  50.  
  51. let parbeszed = document.getElementById('w3-show-profile-div')
  52.  
  53. let ful = document.createElement('li')
  54.  
  55. let link = document.createElement('a')
  56. link.href = '#'
  57. link.textContent = 'Emlékeztető'
  58. link.id = 'us-emlekezteto'
  59. link.className = '__show_profile_link'
  60.  
  61. let szam = document.createElement('span')
  62. szam.id = '__profile_emlekezteto_count'
  63. szam.className = 'w3-badge w3-right w3-small w3-green'
  64.  
  65. link.appendChild(szam)
  66.  
  67. ful.appendChild(link)
  68.  
  69. parbeszed.querySelector('ul.w3-navbar').appendChild(ful)
  70.  
  71. let tartalom = document.createElement('div')
  72. tartalom.id = '__show_profile_div_emlekezteto'
  73. tartalom.className = '__show_profile_div'
  74. tartalom.style.display = 'none'
  75.  
  76. let urlap = document.createElement('form')
  77. urlap.id = 'emlekeztetoForm'
  78. urlap.className = 'w3-container w3-card-4'
  79.  
  80. tartalom.appendChild(urlap)
  81.  
  82. let div = document.createElement('div')
  83. div.className = 'w3-section'
  84.  
  85. urlap.appendChild(div)
  86.  
  87. let kelt = document.createElement('span')
  88. kelt.className = 'w3-right'
  89.  
  90. div.appendChild(kelt)
  91.  
  92. let cimke = document.createElement('label')
  93. cimke.htmlFor = 'us-emlekezteto-szoveg'
  94. cimke.textContent = 'Emlékeztető'
  95.  
  96. div.appendChild(cimke)
  97.  
  98. let szoveg = document.createElement('textarea')
  99. szoveg.id = 'us-emlekezteto-szoveg'
  100. szoveg.className = 'w3-input w3-border w3-margin-bottom'
  101. szoveg.style.minHeight = '80px'
  102.  
  103. div.appendChild(szoveg)
  104.  
  105. let gomb = document.createElement('button')
  106. gomb.type = 'button'
  107. gomb.className = 'w3-btn w3-theme-d2 w3-padding'
  108. gomb.style.width = '128px'
  109. gomb.textContent = 'Mentés'
  110. gomb.addEventListener('click', emlekeztetoMentes)
  111.  
  112. div.appendChild(gomb)
  113.  
  114. parbeszed.querySelector('ul.w3-navbar').parentNode.insertBefore(tartalom, parbeszed.querySelector('div.__show_profile_div'))
  115.  
  116. let megfigyelo = new MutationObserver(parbeszedLathatosag)
  117. megfigyelo.observe(parbeszed, {attributes: true, attributeFilter: ['style']})
  118.  
  119. GM.registerMenuCommand('eHázi - Tag emlékeztető - Teljes lista', teljesLista, "h");
  120.  
  121.  
  122. function parbeszedLathatosag(mutationList, observer)
  123. {
  124.   if (parbeszed.style.display != 'block')
  125.     return
  126.  
  127.   szoveg.value = '⏳'
  128.   kelt.textContent = null
  129.   szam.textContent = null
  130.  
  131.   let azonosito = document.getElementById('__show_profile_id')  
  132.   if (! azonosito)
  133.     return alert('HIBA: nem találom a tag azonosítóját!')
  134.  
  135.   if (emlekeztetoTerkep.has(azonosito.textContent)) {
  136.     let ertek = emlekeztetoTerkep.get(azonosito.textContent)
  137.     if (ertek) {
  138.       szoveg.value = ertek.slice(25)
  139.       kelt.textContent = ertek.slice(0, 24)
  140.     } else {
  141.       GM.getValue(azonosito.textContent).then(ertek => {
  142.         emlekeztetoTerkep.set(azonosito.textContent, ertek)
  143.         szoveg.value = ertek.slice(25)
  144.         kelt.textContent = ertek.slice(0, 24)
  145.       })
  146.     }
  147.     szam.textContent = 1
  148.   } else {
  149.     szoveg.value = null
  150.   }
  151. }
  152.  
  153. function emlekeztetoMentes()
  154. {
  155.   let azonosito = document.getElementById('__show_profile_id')
  156.   if (! azonosito)
  157.     return alert('HIBA: nem találom a tag azonosítóját!')
  158.  
  159.   let emlekezteto = szoveg.value.trim()
  160.   if (emlekezteto) {
  161.     let most = new Date().toISOString()
  162.     GM.setValue(azonosito.textContent, most + ' ' + emlekezteto)
  163.     szam.textContent = 1
  164.     emlekeztetoTerkep.set(azonosito.textContent, most + ' ' + emlekezteto)
  165.   } else {
  166.     GM.deleteValue(azonosito.textContent)
  167.     szam.textContent = null
  168.     kelt.textContent = null
  169.     emlekeztetoTerkep.delete(azonosito.textContent)
  170.   }
  171.  
  172.   let tagLista = document.querySelectorAll('*[onclick*="openModalShowProfileSimple"]')
  173.   for (let tag of tagLista) {
  174.     let talalat = tag.getAttribute('onclick').match(/\d+/)
  175.     if (talalat && talalat[0] == azonosito.textContent) {
  176.       let vaskos = tag.querySelector('strong')
  177.       if (emlekezteto) {
  178.         ;(vaskos ?? tag).dataset.emlekezteto = true
  179.         ;(vaskos ?? tag).title = emlekezteto
  180.       } else {
  181.         delete (vaskos ?? tag).dataset.emlekezteto
  182.         ;(vaskos ?? tag).title = null
  183.       }
  184.     }
  185.   }
  186.  
  187.   let szkript = document.createElement('script')
  188.   szkript.textContent = `emlekeztetoLista = ${ JSON.stringify(Array.from(emlekeztetoTerkep.keys())) }`
  189.   document.head.appendChild(szkript)
  190.   document.head.removeChild(szkript)
  191. }
  192.  
  193. function teljesLista()
  194. {
  195.   let tablazat = []
  196.   let osszesen = emlekeztetoTerkep.size, folyamatban = 0
  197.   for (let emlekezteto of emlekeztetoTerkep.entries()) {
  198.     osszesen--
  199.     if (emlekezteto[1]) {
  200.       tablazat.push({'Azonosító': emlekezteto[0], 'Dátum': emlekezteto[1].slice(0, 24), 'Emlékeztető': emlekezteto[1].slice(25)})
  201.     } else {
  202.       folyamatban++
  203.       GM.getValue(emlekezteto[0]).then(ertek => {
  204.         emlekeztetoTerkep.set(emlekezteto[0], ertek)
  205.         tablazat.push({'Azonosító': emlekezteto[0], 'Dátum': ertek.slice(0, 24), 'Emlékeztető': ertek.slice(25)})
  206.         if (! osszesen && ! --folyamatban)
  207.           console.table(tablazat)
  208.       })
  209.     }
  210.   }
  211. }
  212.  
  213. let szkript = document.createElement('script')
  214. szkript.textContent = `
  215. document.getElementById('us-emlekezteto').addEventListener('click', esemeny => { esemeny.preventDefault(); openShowProfileTab(esemeny, 'emlekezteto') })
  216.  
  217. function emlekeztetoJeloles(elem)
  218. {
  219.   let tarto = document.getElementById(elem)
  220.   if (! tarto)
  221.     return
  222.  
  223.   let tagLista = tarto.querySelectorAll('*[onclick*="openModalShowProfileSimple"]')
  224.   for (let tag of tagLista) {
  225.     let talalat = tag.getAttribute('onclick').match(/\\d+/)
  226.     if (talalat && emlekeztetoLista.includes(talalat[0])) {
  227.       let vaskos = tag.querySelector('strong')
  228.       ;(vaskos ?? tag).dataset.emlekezteto = true
  229.     }
  230.   }
  231. }
  232.  
  233. $(document).ajaxSuccess((event, jqXHR, ajaxOptions, data) => {
  234.   if (ajaxOptions.type == 'GET' && ajaxOptions.url.startsWith('?page='))
  235.     emlekeztetoJeloles('__question_page')
  236.   if (ajaxOptions.type == 'POST' && ajaxOptions.url == 'https://ehazi.hu/toplist/ajax/sidebar')
  237.     emlekeztetoJeloles('sidebarToplistUl')
  238. })
  239. `
  240. document.head.appendChild(szkript)
  241.  
Tags: userscript
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement