Advertisement
Guest User

wykop emoji

a guest
Aug 8th, 2021
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.18 KB | None | 0 0
  1. // ==UserScript==
  2. // @name Wykop-ext emoji
  3. // @namespace https://github.com/rpbyo
  4. // @version 1.0.3
  5. // @description More emojis.
  6. // @author rpbyo (github)
  7. // @match *://www.wykop.pl/mikroblog/*
  8. // @match *://www.wykop.pl/tag/*
  9. // @match *://www.wykop.pl/wpis/*
  10. // @match *://www.wykop.pl/link/*
  11. // @match *://www.wykop.pl/wiadomosc-prywatna/*
  12. // @match *://www.wykop.pl/moj/*
  13. // @grant none
  14. // @license n/a
  15. // ==/UserScript==
  16.  
  17. (function() {
  18. "use strict";
  19.  
  20. //Default emojis.
  21. const listEmoticons = [
  22. "( ͡° ʖ̯ ͡°)",
  23. "( ͡º ͜ʖ͡º)",
  24. "( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°)",
  25. "(⌐ ͡■ ͜ʖ ͡■)",
  26. "(╥﹏╥)",
  27. "(╯︵╰,)",
  28. "(ʘ‿ʘ)",
  29. "(。◕‿‿◕。)",
  30. "ᕙ(⇀‸↼‶)ᕗ",
  31. "ᕦ(òóˇ)ᕤ",
  32. "(✌ ゚ ∀ ゚)☞",
  33. "ʕ•ᴥ•ʔ",
  34. "ᶘᵒᴥᵒᶅ",
  35. "(⌒(oo)⌒)",
  36. "ᄽὁȍ ̪ őὀᄿ",
  37. "( ͡€ ͜ʖ ͡€)",
  38. "( ͡° ͜ʖ ͡°)",
  39. "( ͡° ͜ʖ ͡°)ノ⌐■-■",
  40. "(⌐ ͡■ ͜ʖ ͡■)",
  41. "¯\\\\\\_(ツ)\\_/¯",
  42. "(ꖘ⏏ꖘ)",
  43. "(╯°□°)╯︵ ┻━┻",
  44. "( ͡~ ͜ʖ ͡°)",
  45. "( ಠ_ಠ)",
  46. "(・へ・)",
  47. "(ง✿﹏✿)ง",
  48. "(づ•﹏•)づ",
  49. "乁(♥ ʖ̯♥)ㄏ",
  50. "|૦ઁ෴૦ઁ|",
  51. "乁(⫑ᴥ⫒)ㄏ",
  52. "(ꖘ‸ꖘ)",
  53. "ᕙ(✿ ͟ʖ✿)ᕗ",
  54. "(งⱺ ͟ل͜ⱺ)ง",
  55. "( ̄෴ ̄)",
  56. "ヽ( ͠°෴ °)ノ",
  57. "└[⚆ᴥ⚆]┘",
  58. "ヽ(☼ᨓ☼)ノ",
  59. "XD",
  60. "(ⴲ﹏ⴲ)/",
  61. "(ಠ‸ಠ)",
  62. "(ง ͠° ͟ل͜ ͡°)ง",
  63. "_(:3」∠)",
  64. "(-‸ლ)",
  65. "( ͡° ͜ʖ ͡° )つ──☆*:・゚",
  66. "(╭☞σ ͜ʖσ)╭☞",
  67. "xD",
  68. "xd",
  69. "XDDDDD",
  70. "(ᵔᴥᵔ)",
  71. "٩(◕‿◕)۶",
  72. "(✯◡✯)",
  73. "(◕‿◕)",
  74. "(*≧ω≦*)",
  75. "(☆▽☆)",
  76. "(⌒‿⌒)",
  77. "\(≧▽≦)/",
  78. "ヽ(o^▽^o)ノ",
  79. "☆ ~('▽^人)",
  80. "(*°▽°*)",
  81. "٩(。•́‿•̀。)۶",
  82. "(✧ω✧)",
  83. "ヽ(*⌒▽⌒*)ノ",
  84. "(´。• ᵕ •。`)",
  85. "( ´ ▽ ` )",
  86. "( ̄▽ ̄)",
  87. "╰(*´︶`*)╯",
  88. "ヽ(>∀<☆)ノ",
  89. "o(≧▽≦)o",
  90. "(☆ω☆)",
  91. "(っ˘ω˘ς )",
  92. "\( ̄▽ ̄)/",
  93. "(*¯︶¯*)",
  94. "\(^▽^)/",
  95. "(~˘▽˘)~",
  96. "(o˘◡˘o)",
  97. "(★ω★)/",
  98. "/(^ヮ^)/",
  99. "(〃^▽^〃)",
  100. "(╯✧▽✧)╯",
  101. "o(>ω<)o",
  102. "o( ❛ᴗ❛ )o",
  103. "。゚(TヮT)゚。",
  104. "( ‾́ ◡ ‾́ )",
  105. "(ノ´ヮ`)ノ*: ・゚",
  106. "(b ᵔ▽ᵔ)b",
  107. "(๑˃ᴗ˂)ﻭ",
  108. "(๑˘︶˘๑)",
  109. "( ˙꒳​˙ )",
  110. "(*꒦ິ꒳꒦ີ)",
  111. "°˖✧◝(⁰▿⁰)◜✧˖°",
  112. "(#><)",
  113. "(;⌣̀_⌣́)",
  114. "☆o(><;)○",
  115. "( ̄  ̄|||)",
  116. "(; ̄Д ̄)",
  117. "( ̄□ ̄」)",
  118. "(# ̄0 ̄)",
  119. "(´・ᴗ・ ` )",
  120. "(ノ_<。)",
  121. "(-_-)",
  122. "(´-ω-`)",
  123. ".・゚゚・(/ω\)・゚゚・.",
  124. "(μ_μ)",
  125. "(ノД`)",
  126. "(-ω-、)",
  127. "。゜゜(´O`) ゜゜。",
  128. "o(TヘTo)",
  129. "( ; ω ; )",
  130. "(。╯︵╰。)",
  131. "。・゚゚*(>д<)*゚゚・。",
  132. "⁽⁽◝( • ω • )◜⁾⁾",
  133. "(个_个)",
  134. "。・゚(゚><゚)゚・。",
  135. "( ╥ω╥ )",
  136. "(╯_╰)",
  137. "(╥_╥)",
  138. ".。・゚゚・(>_<)・゚゚・。.",
  139. "(/ˍ・、)",
  140. "(ノ_<、)",
  141. "(╥﹏╥)",
  142. "。゚(。ノωヽ。)゚。",
  143. "(つω`。)",
  144. "(。T ω T。)",
  145. "(ノω・、)",
  146. "・゚・(。>ω<。)・゚・",
  147. "(T_T)",
  148. "(>_<)",
  149. "(っ˘̩╭╮˘̩)っ",
  150. "。゚・ (>﹏<) ・゚。",
  151. "o(〒﹏〒)o",
  152. "(。•́︿•̀。)",
  153. "(ಥ﹏ಥ)",
  154. "( ` ω ´ )",
  155. "ヽ( `д´*)ノ",
  156. "(・`ω´・)",
  157. "~(>_<~)",
  158. "☆⌒(> _ <)",
  159. "☆⌒(>。<)",
  160. "(☆_@)",
  161. "(×_×)",
  162. "(x_x)",
  163. "(×_×)⌒☆",
  164. "(x_x)⌒☆",
  165. "(×﹏×)",
  166. "ʕっ•ᴥ•ʔっ",
  167. "(+_+)",
  168. "ʕノ•ᴥ•ʔノ ︵ ┻━┻",
  169. "(`ー´)",
  170. "ヽ(`⌒´メ)ノ",
  171. "ʕ·͡ᴥ·ʔ",
  172. "( `ε´ )",
  173. "⊂(◉‿◉)つ",
  174. "ヾ(`ヘ´)ノ゙",
  175. "ヽ(‵﹏´)ノ",
  176. "(メ` ロ ´)",
  177. "(•_•)",
  178. "( •_•)>⌐■-■",
  179. "(⌐■_■)",
  180. "Σ(▼□▼メ)",
  181. "(°ㅂ°╬)",
  182. "ԅ(≖‿≖ԅ)",
  183. "( ╥﹏╥) ノシ",
  184. "(ღ˘⌣˘ღ)",
  185. "(ง ͠° ͟ʖ ͡°)ง",
  186. "(* ^ ω ^)",
  187. "ᕙ(`▽´)ᕗ",
  188. "ʕᵔᴥᵔʔ",
  189. "(˵ ͡° ͜ʖ ͡°˵)",
  190. "\٩(๑`^´๑)۶/",
  191. "(´• ω •`)",
  192. "┬──┬ ノ(ò_óノ)",
  193. "(ㆆ _ ㆆ)",
  194. "(っ˘ڡ˘ς)",
  195. "٩(ఠ益ఠ)۶",
  196. "(ノಥ益ಥ)ノ",
  197. "(^=◕ᴥ◕=^)",
  198. "( =ω= )",
  199. "(^˵◕ω◕˵^)",
  200. "(^◔ᴥ◔^)",
  201. "(^◕ᴥ◕^)",
  202. "ヽ(∀° )人( °∀)ノ",
  203. "∠( ᐛ 」∠)_",
  204. "⁽⁽◝( • ω • )◜⁾⁾",
  205. "ヘ( ̄ω ̄ヘ)",
  206. "(〜 ̄▽ ̄)〜",
  207. "〜( ̄▽ ̄〜)",
  208. "σ( •̀ ω •́ σ)",
  209. "ლ(́◉◞౪◟◉‵ლ",
  210. "( =ω=)",
  211. "(;・ω・)",
  212. "┬┴┬┴┤( ͡° ͜ʖ├┬┴┬┴",
  213. "|・ω・)",
  214. "|・ω・)ノ",
  215. "┬┴┬┴┤・ω・)ノ",
  216. "(¬‿¬ )",
  217. "(•ิ_•ิ)?",
  218. ">_<",
  219. "(„ಡωಡ„)",
  220. "(*^.^*)",
  221. "(´ ε ` )♡",
  222. "♡( ◡‿◡ )",
  223. "( ◡‿◡ )",
  224. "(´♡‿♡`)",
  225. "⊂(・ω・*⊂)",
  226. "(っಠ‿ಠ)っ",
  227. "(≖ ͜ʖ≖)",
  228. "(∩ᄑ_ᄑ)⊃━☆゚:・゚",
  229. "(ฺ◣д◢)ฺ",
  230. "(∩ᄑ_ᄑ)⊃",
  231. "(/ ̄ー ̄)/",
  232. "(∩` ロ ´)⊃",
  233. "(=^・ω・^=)",
  234. "(=^・ェ・^=)",
  235. "₍₍ (ง ˙ω˙)ว ⁾⁾",
  236. "ʕ*ノᴥノʔ",
  237. "(= ; ェ ; =)",
  238. "(=`ω´=)",
  239. "(=^‥^=)",
  240. "( =ノωヽ=)",
  241. "(=⌒‿‿⌒=)",
  242. "(=^ ◡ ^=)",
  243. "(=^-ω-^=)",
  244. "ヾ(=`ω´=)ノ”",
  245. "_(ˇωˇ」∠)",
  246. "_(°ω°」 ∠)"
  247. ];
  248.  
  249. //Number emojis per page (default 45).
  250. const emojiPerPage = 45,
  251. //Number of columns per page (default 5).
  252. columnPerPage = 5,
  253. //Css for menu.
  254. getHead = document.head,
  255. emojiStyle = document.createElement("style");
  256. emojiStyle.setAttribute("type", "text/css");
  257. emojiStyle.innerHTML = `.dropdown-emoji{border:none !important;box-shadow:none !important;width:auto;}
  258. ul.menu-emoji{display:block;text-align:center;user-select:none;}
  259. ul.menu-emoji li{width: 35px;display:inline-block;text-align:center;font-size:1.3em;border-bottom:none;padding:7px 0px;}
  260. ul.menu-emoji{background-color:#FFF;}
  261. ul.menu-emoji li:hover{background-color:#F1F4F5;}
  262. .night ul.menu-emoji{background-color:#2C2C2C;}
  263. .night ul.menu-emoji li:hover{background-color:#777777;}
  264. `;
  265. getHead.append(emojiStyle);
  266.  
  267. //Create first page after hovering the mouse.
  268. document.addEventListener(
  269. "mouseover",
  270. function(event) {
  271. const element = event.target;
  272. if (
  273. element.classList.contains("dropdown-show") &&
  274. element.classList.contains("auto") &&
  275. element.closest(".button.ddC")
  276. ) {
  277. if (
  278. element.closest("fieldset.row.buttons.dnone") &&
  279. !element.nextElementSibling.classList.contains("dropdown-emoji")
  280. ) {
  281. showNewContent(element.closest(".button.ddC"), 1);
  282. }
  283. } else if (
  284. element.classList.contains("fa-caret-down") &&
  285. element.closest(".button.ddC")
  286. ) {
  287. if (
  288. element.closest("fieldset.row.buttons.dnone") &&
  289. !element.closest(".button.ddC").querySelector(".dropdown-emoji")
  290. ) {
  291. showNewContent(element.closest(".button.ddC"), 1);
  292. }
  293. }
  294. },
  295. false
  296. );
  297. //Menu pagination; Display page after click.
  298. document.addEventListener(
  299. "click",
  300. function(event) {
  301. const element = event.target;
  302. if (element.classList.contains("li-page-emoji")) {
  303. const findBtn = element.closest("div.button.ddC");
  304. showNewContent(findBtn, Number(element.dataset.pagenumber));
  305. }
  306. },
  307. false
  308. );
  309. //Add emoji to textarea.
  310. document.addEventListener(
  311. "click",
  312. function(event) {
  313. const element = event.target;
  314. if (element.classList.contains("newlenny")) {
  315. //Get closest textarea.
  316. const findTextarea = element.closest("form").querySelector("textarea"),
  317. startTxt = findTextarea.selectionStart,
  318. endTxt = findTextarea.selectionEnd,
  319. scrollTxt = findTextarea.scrollTop,
  320. emoji = element.dataset.emoji;
  321. findTextarea.value =
  322. findTextarea.value.substring(0, startTxt) +
  323. emoji +
  324. findTextarea.value.substring(endTxt, findTextarea.value.length);
  325. findTextarea.focus();
  326. findTextarea.selectionStart = startTxt + emoji.length;
  327. findTextarea.selectionEnd = startTxt + emoji.length;
  328. findTextarea.scrollTop = scrollTxt;
  329. }
  330. },
  331. false
  332. );
  333. //Create new tbody/menu/options(later)/add emoji.
  334. function showNewContent(place, pagenumber) {
  335. //Find closest element with .dropdown class; add new class.
  336. const findDropdown = place.querySelector("div.dropdown");
  337. if (!findDropdown.classList.contains("dropdown-emoji")) {
  338. findDropdown.classList.add("dropdown-emoji");
  339. }
  340. //If menu doesn't exist, create.
  341. if (!findDropdown.querySelector("ul.menu-emoji")) {
  342. const newUl = document.createElement("ul");
  343. newUl.classList.add("menu-emoji");
  344. findDropdown.prepend(newUl);
  345. //Create li.
  346. const newLi = (function() {
  347. let newLiList = "";
  348. for (
  349. let i = 1;
  350. i <= Math.ceil(listEmoticons.length / emojiPerPage);
  351. i++
  352. ) {
  353. newLiList += `<li class="li-page-emoji" data-pagenumber="${i}">${i}</li>`;
  354. }
  355. return newLiList;
  356. })();
  357. newUl.innerHTML = newLi;
  358. }
  359. //Menu style.
  360. const findMenuUl = findDropdown.querySelector("ul.menu-emoji"),
  361. findMenuLi = findMenuUl.querySelectorAll("li.li-page-emoji");
  362. //Remove/add background color for clicked li.
  363. Array.from(findMenuLi).forEach(el =>
  364. el.setAttribute("style", "background-color")
  365. );
  366. const colorThisLi = findMenuUl.querySelector(
  367. `[data-pagenumber="${pagenumber}"]`
  368. );
  369. document.querySelector("body").classList.contains("night")
  370. ? colorThisLi.setAttribute("style", "background-color:#777777")
  371. : colorThisLi.setAttribute("style", "background-color:#F1F4F5");
  372. //Find tbody in .dropdown element and remove.
  373. const findTable = findDropdown.querySelector("table");
  374. findTable.querySelector("tbody").remove();
  375. //Create new tbody with class 'pagenumber' and append to table.
  376. const createTbody = document.createElement("tbody");
  377. createTbody.classList.add(`tbody-page-emoji-${pagenumber}`);
  378. findTable.append(createTbody);
  379. const findTbody = findTable.querySelector(
  380. `tbody.tbody-page-emoji-${pagenumber}`
  381. );
  382. let rowToEmoji = 0;
  383. //Add emoji to new tbody.
  384. //Tbody rows.
  385. for (
  386. let p = 0;
  387. p <
  388. Math.ceil(
  389. (pagenumber * emojiPerPage - (pagenumber - 1) * emojiPerPage) /
  390. columnPerPage
  391. );
  392. p++
  393. ) {
  394. const newTr = document.createElement("tr");
  395. newTr.classList.add(`row-emoji-${p}`);
  396. findTbody.append(newTr);
  397. }
  398. //Create Td.
  399. for (
  400. let a = (pagenumber - 1) * emojiPerPage;
  401. a < pagenumber * emojiPerPage;
  402. a++
  403. ) {
  404. if (a % columnPerPage === 0 && a > (pagenumber - 1) * emojiPerPage) {
  405. rowToEmoji++;
  406. }
  407. if (listEmoticons[a] !== undefined) {
  408. const newTd = document.createElement("td"),
  409. newA = document.createElement("a");
  410. newA.classList.add("newlenny");
  411. newA.setAttribute("data-emoji", `${listEmoticons[a]}`);
  412. newA.setAttribute("href", "javascript:void(0)");
  413. newA.innerHTML = `${listEmoticons[a]}`;
  414. newTd.appendChild(newA);
  415. const findTr = findTbody.querySelector(`tr.row-emoji-${rowToEmoji}`);
  416. findTr.appendChild(newTd);
  417. }
  418. }
  419. }
  420. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement