Guest User

Untitled

a guest
Feb 19th, 2019
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 87.76 KB | None | 0 0
  1. // ==UserScript==
  2. // @name SE FlirtReply V.2 Dark Version
  3. // @namespace
  4. // @version SE 3.0
  5. // @description Productivity fixes for chattcentralen
  6. // @author
  7. // @match https://chattcentralen.se/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11.  
  12. (function() {
  13. 'use strict';
  14. loadConfig();
  15. console.log(config);
  16. document.title = "✉ Chattcentralen - " + window.location.pathname.substr(1);
  17. switch(window.location.pathname) {
  18. case '/':
  19. console.log("Main page: inserting username and password");
  20. if(config.username)
  21. document.getElementsByClassName('username')[0].value = config.username;
  22. if(config.password)
  23. document.getElementsByClassName('password')[0].value = config.password;
  24. document.getElementsByClassName('ui-button')[1].focus();
  25. if(config.autoLogin && document.getElementsByClassName("messages")[0].textContent.indexOf("Please enter") > -1) {
  26. console.log("Autologin");
  27. document.getElementsByClassName('ui-button')[1].click();
  28. }
  29. break;
  30. case '/messages':
  31. shimFunctions();
  32. case '/announcements':
  33. case '/statistics':
  34. if(config.showCounters) {
  35. createCounters();
  36. getStats();
  37. }
  38. registerHotkeys();
  39. createSettingsButton();
  40. if(config.goToMessagesFirst && document.referrer == window.location.origin+'/')
  41. window.location = window.location.origin+'/messages';
  42. break;
  43. }
  44. })();
  45.  
  46. function loadConfig() {
  47. console.log("Loading config");
  48. var defaults = {
  49. hotkeys: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''],
  50. username: '',
  51. password: '',
  52. autoLogin: false,
  53. showCounters: true,
  54. goToMessagesFirst: false,
  55. highlightMessagesNotes: true,
  56. searchAndOpen: false,
  57. notificationSound: true,
  58. hideProfilePics: false,
  59. autoReply: false
  60. };
  61.  
  62. var local = JSON.parse(localStorage.getItem('config'));
  63. if(local === null)
  64. local = defaults;
  65. for (let i in defaults)
  66. if (!local.hasOwnProperty(i))
  67. local[i] = defaults[i];
  68. for (let i in local)
  69. if (!defaults.hasOwnProperty(i))
  70. delete local[i];
  71. console.log("\tConfig loaded");
  72.  
  73. Notification.requestPermission().then(function(result) {
  74. local.showNotifications = result === "granted";
  75. });
  76. config = local;
  77. }
  78.  
  79.  
  80.  
  81.  
  82. function focusMessageBox() {
  83. window.scroll(0, 0);
  84. document.getElementsByClassName('conversation-message-text')[0].focus();
  85. }
  86.  
  87. function getTargetName() {
  88. return document.getElementsByClassName('target-name')[0].textContent.slice(1);
  89. }
  90. function getUsername() {
  91. return document.getElementsByClassName("user")[0].textContent.match(/\w+/)[0];
  92. }
  93.  
  94. function notifyOperator() {
  95. if(document.hidden) {
  96. if(notifyOperator.notificationSound === undefined) {
  97. notifyOperator.notificationSound = new Audio("https://youtu.be/llcQu-XB6oE?t=10");
  98. }
  99. console.log("Sending notification");
  100. let oldTitle = document.title;
  101. let newTitle = "✉ New message!";
  102. let notification = new Notification("Chattcentralen", {body: "New message received!"});
  103. if(config.notificationSound) {
  104. notifyOperator.notificationSound.play();
  105. }
  106. setTimeout(() => {
  107. notification.close.bind(notification);
  108. }, 5000);
  109. var n = 0;
  110. function blinkTitle() {
  111. document.title = n%2 ? newTitle : oldTitle;
  112. n++;
  113. if(document.hidden)
  114. window.setTimeout(blinkTitle, 500);
  115. else
  116. document.title = oldTitle;
  117. }
  118. blinkTitle();
  119. window.focus();
  120. }
  121. }
  122.  
  123. function highlightMessagesNotes(element) {
  124. console.log("Highlighting messages and notes");
  125. let username = document.getElementsByClassName('target-name')[0].textContent.match(/\w+/)[0];
  126. for (let e of document.getElementsByClassName("from-to")) {
  127. if(e.textContent.indexOf(username) > -1) {
  128. e.parentElement.parentElement.style.background = highlightColor;
  129. }
  130. }
  131. let target = getTargetName();
  132.  
  133. }
  134.  
  135. (function(){
  136. let allowCopyAndPaste = function(e){
  137. e.stopImmediatePropagation();
  138. return true;
  139. };
  140.  
  141. document.addEventListener('copy', allowCopyAndPaste, true);
  142. document.addEventListener('paste', allowCopyAndPaste, true);
  143. document.addEventListener('contextmenu', allowCopyAndPaste, true);
  144. document.addEventListener('keydown', allowCopyAndPaste, true);
  145. })();
  146.  
  147.  
  148. /**
  149. * jQuery.autotype -
  150. */
  151. (function($){
  152.  
  153. // code type constants
  154. var CHARACTER = 1,
  155. NON_CHARACTER = 2,
  156. MODIFIER_BEGIN = 3,
  157. MODIFIER_END = 4,
  158. isNullOrEmpty = function(val) { return val === null || val.length === 0; },
  159. isUpper = function(char) { return char.toUpperCase() === char; },
  160. isLower = function(char) { return char.toLowerCase() === char; },
  161. areDifferentlyCased = function(char1,char2) {
  162. return (isUpper(char1) && isLower(char2)) ||
  163. (isLower(char1) && isUpper(char2));
  164. },
  165. convertCase = function(char) {
  166. return isUpper(char) ? char.toLowerCase() : char.toUpperCase();
  167. },
  168. parseCodes = function(value, codeMap) {
  169. // buffer to hold a collection of key/char code pairs corresponding to input string value
  170. var codes = [],
  171. // buffer to hold the name of a control key as it's being parsed
  172. definingControlKey = false,
  173. // hold a collection of currently pushed modifier keys
  174. activeModifiers = {
  175. alt: false,
  176. meta: false,
  177. shift: false,
  178. ctrl: false
  179. },
  180. explicitModifiers = $.extend({}, activeModifiers),
  181. // buffer to hold construction of current control key
  182. currentControlKey = '',
  183. previousChar = '',
  184. pushCode = function(opts) {
  185. codes.push($.extend({}, opts, activeModifiers));
  186. },
  187. pushModifierBeginCode = function(modifierName) {
  188. activeModifiers[modifierName] = true;
  189. pushCode({
  190. keyCode: codeMap[modifierName],
  191. charCode: 0,
  192. char: '',
  193. type: MODIFIER_BEGIN
  194. });
  195. },
  196. pushModifierEndCode = function(modifierName) {
  197. activeModifiers[modifierName] = false;
  198. pushCode({
  199. keyCode: codeMap[modifierName],
  200. charCode: 0,
  201. char: '',
  202. type: MODIFIER_END
  203. });
  204. };
  205.  
  206. for(var i=0;i<value.length;i++) {
  207. // if the character is about to define a control key
  208. if(!definingControlKey &&
  209. i <= value.length - 5 &&
  210. value.charAt(i) === '{' &&
  211. value.charAt(i+1) === '{')
  212. {
  213. // skip the next "{"
  214. i++;
  215.  
  216. definingControlKey = true;
  217. }
  218. // if the character is about to end definition of control key
  219. else if (definingControlKey &&
  220. i <= value.length - 2 &&
  221. value.charAt(i) === '}' &&
  222. value.charAt(i+1) === '}')
  223. {
  224. // skip the next "}"
  225. i++;
  226.  
  227. // check if this key is a modifier-opener (is a ctrl,alt,del,shift)
  228. if(activeModifiers[currentControlKey] !== undefined)
  229. {
  230. explicitModifiers[currentControlKey] = true;
  231. pushModifierBeginCode(currentControlKey);
  232. }
  233. // check if this key is a modifier-closer (is a /ctrl,/alt,/del,.shift)
  234. else if(activeModifiers[currentControlKey.substring(1)] !== undefined)
  235. {
  236. explicitModifiers[currentControlKey] = false;
  237. pushModifierEndCode(currentControlKey.substring(1));
  238. }
  239. // otherwise is some other kind of non-modifier control key
  240. else
  241. {
  242. pushCode({
  243. keyCode: codeMap[currentControlKey],
  244. charCode: 0,
  245. char: '',
  246. type: NON_CHARACTER,
  247. controlKeyName: currentControlKey
  248. });
  249. }
  250.  
  251. definingControlKey = false;
  252. currentControlKey = '';
  253. }
  254. // currently defining control key
  255. else if (definingControlKey)
  256. {
  257. currentControlKey += value.charAt(i);
  258. }
  259. // otherwise is just a text character
  260. else
  261. {
  262. var character = value.charAt(i);
  263.  
  264. // check for any implicitly changing of cases, and register presses/releases
  265. // of the shift key in accord with them.
  266. if(
  267. (!isNullOrEmpty(previousChar) && areDifferentlyCased(previousChar, character)) ||
  268. (isNullOrEmpty(previousChar) && isUpper(character))
  269. )
  270. {
  271. if(isUpper(character) && !activeModifiers.shift) {
  272. pushModifierBeginCode("shift");
  273. } else if (isLower(character) && activeModifiers.shift && !explicitModifiers.shift){
  274. pushModifierEndCode("shift");
  275. }
  276. }
  277.  
  278. // modify the current character if there are active modifiers
  279. if((activeModifiers.shift && isLower(character)) ||
  280. (!activeModifiers.shift && isUpper(character))) {
  281. // shift converts case
  282. character = convertCase(character);
  283. }
  284.  
  285. var code = {
  286. // if can't identify a keycode, just fudge with the char code.
  287. // nope, this isn't ideal by any means.
  288. keyCode: codeMap[character] || character.charCodeAt(0),
  289. charCode: character.charCodeAt(0),
  290. char: character,
  291. type: CHARACTER
  292. };
  293.  
  294. // modify the current character if there are active modifiers
  295. if(activeModifiers.alt ||
  296. activeModifiers.ctrl ||
  297. activeModifiers.meta) {
  298. // alt, ctrl, meta make it so nothing is typed
  299. code.char = '';
  300. }
  301. pushCode(code);
  302. if(code.char !== '') { previousChar = code.char; }
  303. }
  304. }
  305. return codes;
  306. },
  307. triggerCodeOnField = function(code, field) {
  308. // build up base content that every event should contain
  309. // with information about whether certain chord keys are
  310. // simulated as being pressed
  311. var evnt = {
  312. altKey: code.alt,
  313. metaKey: code.meta,
  314. shiftKey: code.shift,
  315. ctrlKey: code.ctrl
  316. };
  317.  
  318. // build out 3 event instances for all the steps of a key entry
  319. var keyDownEvent = $.extend($.Event(), evnt, {type:'keydown', keyCode: code.keyCode, charCode: 0, which: code.keyCode});
  320. var keyPressEvent = $.extend($.Event(), evnt, {type:'keypress', keyCode: 0, charCode: code.charCode, which: code.charCode || code.keyCode});
  321. var keyUpEvent = $.extend($.Event(), evnt, {type:'keyup', keyCode: code.keyCode, charCode: 0, which: code.keyCode});
  322.  
  323. // go ahead and trigger the first 2 (down and press)
  324. // a keyup of a modifier shouldn't also re-trigger a keydown
  325. if(code.type !== MODIFIER_END) {
  326. field.trigger(keyDownEvent);
  327. }
  328.  
  329. // modifier keys don't have a keypress event, only down or up
  330. if(code.type !== MODIFIER_BEGIN && code.type !== MODIFIER_END) {
  331. field.trigger(keyPressEvent);
  332. }
  333.  
  334. // only actually add the new character to the input if the keydown or keypress events
  335. // weren't cancelled by any consuming event handlers
  336. if(!keyDownEvent.isPropagationStopped() &&
  337. !keyPressEvent.isPropagationStopped()) {
  338. if(code.type === NON_CHARACTER) {
  339. switch(code.controlKeyName) {
  340. case 'enter':
  341. field.val(field.val() + "\n");
  342. break;
  343. case 'back':
  344. field.val(field.val().substring(0,field.val().length-1));
  345. break;
  346. }
  347. } else {
  348. field.val(field.val() + code.char);
  349. }
  350. }
  351.  
  352. // then also trigger the 3rd event (up)
  353. // a keydown of a modifier shouldn't also trigger a keyup until coded
  354. if(code.type !== MODIFIER_BEGIN) {
  355. field.trigger(keyUpEvent);
  356. }
  357. },
  358. triggerCodesOnField = function(codes, field, delay, global) {
  359. if(delay > 0) {
  360. codes = codes.reverse();
  361. var keyInterval = global.setInterval(function(){
  362. var code = codes.pop();
  363. triggerCodeOnField(code, field);
  364. if(codes.length === 0) {
  365. global.clearInterval(keyInterval);
  366. field.trigger('autotyped');
  367. }
  368. }, delay);
  369. } else {
  370. $.each(codes,function(){
  371. triggerCodeOnField(this, field);
  372. });
  373. field.trigger('autotyped');
  374. }
  375. };
  376.  
  377. $.fn.autotype = function(value, options) {
  378. if(value === undefined || value === null) { throw("Value is required by jQuery.autotype plugin"); }
  379. var settings = $.extend({}, $.fn.autotype.defaults, options);
  380.  
  381. // 1st Pass
  382. // step through the input string and convert it into
  383. // a logical sequence of steps, key, and charcodes to apply to the inputs
  384. var codes = parseCodes(value, settings.keyCodes[settings.keyBoard]);
  385.  
  386. // 2nd Pass
  387. // Run the translated codes against each input through a realistic
  388. // and cancelable series of key down/press/up events
  389. return this.each(function(){ triggerCodesOnField(codes, $(this), settings.delay, settings.global); });
  390. };
  391.  
  392. $.fn.autotype.defaults = {
  393. version: '0.5.0',
  394. keyBoard: 'enUs',
  395. delay: 0,
  396. global: window,
  397. keyCodes: {
  398. enUs: { 'back':8,'ins':45,'del':46,'enter':13,'shift':16,'ctrl':17,'meta':224,
  399. 'alt':18,'pause':19,'caps':20,'esc':27,'pgup':33,'pgdn':34,
  400. 'end':35,'home':36,'left':37,'up':38,'right':39,'down':40,
  401. 'printscr':44,'num0':96,'num1':97,'num2':98,'num3':99,'num4':100,
  402. 'num5':101,'num6':102,'num7':103,'num8':104,'num9':105,
  403. 'multiply':106,'add':107,'subtract':109,'decimal':110,
  404. 'divide':111,'f1':112,'f2':113,'f3':114,'f4':115,'f5':116,
  405. 'f6':117,'f7':118,'f8':119,'f9':120,'f10':121,'f11':122,
  406. 'f12':123,'numlock':144,'scrolllock':145,' ':9,' ':32,
  407. 'tab':9,'space':32,'0':48,'1':49,'2':50,'3':51,'4':52,
  408. '5':53,'6':54,'7':55,'8':56,'9':57,')':48,'!':49,'@':50,
  409. '#':51,'$':52,'%':53,'^':54,'&':55,'*':56,'(':57,';':186,
  410. '=':187,',':188,'-':189,'.':190,'/':191,'[':219,'\\':220,
  411. ']':221,"'":222,':':186,'+':187,'<':188,'_':189,'>':190,
  412. '?':191,'{':219,'|':220,'}':221,'"':222,'a':65,'b':66,'c':67,
  413. 'd':68,'e':69,'f':70,'g':71,'h':72,'i':73,'j':74,'k':75,
  414. 'l':76,'m':77,'n':78,'o':79,'p':80,'q':81,'r':82,'s':83,
  415. 't':84,'u':85,'v':86,'w':87,'x':88,'y':89,'z':90,'A':65,
  416. 'B':66,'C':67,'D':68,'E':69,'F':70,'G':71,'H':72,'I':73,
  417. 'J':74,'K':75,'L':76,'M':77,'N':78,'O':79,'P':80,'Q':81,
  418. 'R':82,'S':83,'T':84,'U':85,'V':86,'W':87,'X':88,'Y':89,'Z':90, 'Å':197, 'Ä':196, 'Ö':214}
  419. }
  420. };
  421.  
  422. })(jQuery);
  423.  
  424. //Function to focus end of text
  425. (function($){
  426. $.fn.focusTextToEnd = function(){
  427. this.focus();
  428. var $thisVal = this.val();
  429. this.val('').val($thisVal);
  430. return this;
  431. }
  432. }(jQuery));
  433. //Copy text between textareas
  434. $(".counters-column6").on("input", function(e){
  435. var length = $(".counters-column6").val().length;
  436. if (length > 4) {
  437. //Transfering text
  438. var Text = $(".counters-column6").val();
  439. $(".conversation-message-text").autotype(Text);
  440. //Delete Text in first field
  441. $(".counters-column6").val('');
  442. //Focus main TextField
  443. window.scroll(0, 0);
  444. $(".conversation-message-text").focusTextToEnd();
  445. }
  446. });
  447.  
  448.  
  449.  
  450.  
  451. window.afterConversationLoaded = function() {
  452. console.log("Loaded conversation");
  453. getStats();
  454. notifyOperator();
  455.  
  456. console.log("Registering emoji click refocusing");
  457. for(let e of document.getElementsByClassName('emoji-insert')) {
  458. e.addEventListener('click', focusMessageBox);
  459. }
  460.  
  461. console.log("Registering automatic photo adding");
  462. for(let e of document.getElementById('AddMediaDialog').getElementsByClassName("mediaAddContainer")) {
  463. e.addEventListener('click', () => {
  464. e.getElementsByTagName("img")[0].click();
  465. e.getElementsByTagName("input")[0].click();
  466. $('#btnAddMedia').button('enable')[0].click();
  467. focusMessageBox();
  468. });
  469. }
  470.  
  471. $(".counters-column6").css("visibility","visible");
  472.  
  473. var picL = document.getElementsByClassName('player-photo-src');
  474. var picR = document.getElementsByClassName('target-photo-src');
  475. if (config.hideProfilePics) {
  476. $(picL).css("visibility","hidden");
  477. $(picR).css("visibility","hidden");
  478. $('.td2').css("display","none");
  479. };
  480.  
  481. let highlightColor = "rgb(255, 211, 20)";
  482. var target = document.getElementById('conversation-content');
  483. if(config.highlightMessagesNotes) {
  484. console.log("Highlighting own messages");
  485. for(let e of document.getElementById("conversation-messages").getElementsByClassName('from-to')) {
  486. let parentParent = e.parentElement.parentElement;
  487. if(e.textContent.slice(1).indexOf(getTargetName()) > -1) {
  488. parentParent.style.background = "rgb(145, 145, 145)";
  489.  
  490. }else{
  491.  
  492. parentParent.style.background = "rgb(107, 107, 107)";
  493. }
  494.  
  495. }
  496.  
  497. console.log("Highlighting target notes");
  498. let ending = getTargetName().toUpperCase();
  499. for(let e of document.getElementsByClassName('player-last-notes')[0].children) {
  500. if(e.children[2].textContent.toUpperCase().replace(/[\ \)]*$/,"").indexOf(ending) > -1) {
  501. e.style.background = highlightColor;
  502. }
  503. }
  504. }
  505.  
  506.  
  507. let targetNotesContent = document.getElementsByClassName('target-note-content')[0];
  508. document.addEventListener('selectionchange', (e) => {
  509. let anchor = document.getSelection().anchorNode;
  510. if(anchor && anchor.nodeType === Node.TEXT_NODE) {
  511. anchor = anchor.parentElement;
  512. }
  513. if(anchor.classList.contains('message-text')) {
  514. targetNotesContent.value = window.getSelection().toString();
  515. }
  516. });
  517.  
  518.  
  519.  
  520. var checkbox = document.getElementById('check-box')
  521.  
  522. if (config.autoReply) {
  523. var start1 = ['Hej', 'Hallå', 'Hejsan', 'Oj men hej', 'Tjenare', 'Hej hej', 'Kul att du tittade in', 'Fint att se dig', 'Underbart att du hittade mig', 'Ser man på', 'Vad intressant', 'Vilken tur att du fann mig', 'Förvånad är jag', 'Kul att du är är', 'Jag är nyfiken på dig', 'Vem kan du vara då', 'Jag längtar redan', 'Du fann mig', 'Du gillar mig', 'Kul att se dig'];
  524. var start2 = ['vem söker du', 'vad söker du', 'har man tagit en vinstlott', 'jag är hoppfull', 'jag har då tur', 'som jag väntat', 'otroligt vad fint', 'som jag känner mig glad', 'vad glad jag känner mig', 'vad förväntansfull jag känner mig', 'har många fantasier', 'vill uppleva alla fantasier med dig', 'har mycket att uppleva med dig', 'har en del jag vill dela med mig till dig',
  525. 'längtar efter en man', 'längtar efter dig', 'känner att du kan vara min man', 'känns bra redan för min del', 'kan det vara du som är min man', 'jag har en bra känsla om dig'];
  526. var start3 = ['jag är sugen på dig', 'jag söker en man som dig', 'det känns som du är min man', 'min magkänsla är bra', 'kan inte tro det men du är vad jag söker', 'känns som att du är den jag söker', 'hoppas att du är den jag söker', 'kan ju vara så att du är den jag söker', 'jag är så sugen på rätt man', 'jag har väntat så länge', 'rätt man får mig på fall direkt', 'rätt person har jag väntat länge på',
  527. 'för söker rätt man och det kan vara du', 'hoppas det kan bli du och jag', 'vill vara med dig', 'drömt om rätt man för mig', 'känslan jag får av dig är så rätt', 'kan endast tänka mig att allt blir bra med dig'];
  528. var start4 = ['tror nu att mitt sökande är över?', 'kan det vara så att jag funnit min man?', 'jag hoppas nu att du är min man?', 'har jag turen att du är den jag söker?', 'är chansen så att du är mannen för mig?', 'det kan mycket väl vara att du är min man?', 'är du den jag har väntat på?', 'känns som att du är den rätta!', 'det skulle sitta fint om mitt sökande är över!', 'tror du att vi skulle funka?',
  529. 'är du sugen på att se om jag är den rätta?', 'skulle du vilja se om jag är rätt kvinna för dig?', 'kanske du känner som jag?', 'chansen är ju att vi är rätt för varandra.', 'mitt sökande kanske är över nu?',
  530. 'jag vill tro att du är rätt för mig.', 'vem vet du kanske är den rätta för mig?', 'min känsla säger att du är rätt man', 'magkänslan säger även du är rätt man för mig.', 'jag vill tro att jag slipper söka vidare.', 'jag saknar en fin man som dig.', 'vi kan väl nog fungera kanske?', 'ska vi se om vi passar så bra som jag tror?', 'känner du inte som jag att det är vi som gäller?', 'måste ju vara så att vi är ämnade att se vidare på detta?',
  531. 'kan vi kanske vara gjorda för varandra?', 'jag mår bra av tanken på oss tillsammans.', 'tanken på oss ihop gör mig glad.', 'vad känner du? Jag gillar tanken på oss!',
  532. 'kan vi lära känna varandra lite kanske?', 'vill du som jag få en start på detta?', 'vi kan väl ändå se vad vi kan göra ihop?', 'nog ska vi kunna göra varandra glada?', 'känns som att jag har väntat på just dig!', 'nu är min dag som gjord för du fann mig.', 'nu får jag fina tankar om dig.', 'mina tankar dom går nu åt oss ihop.', 'nog känner du lite hopp om att det kan bli vi?', 'känner du inte att du vill mer med mig?'];
  533. var startWhole1 = Math.floor(Math.random() * start1.length);
  534. var startWhole2 = Math.floor(Math.random() * start2.length);
  535. var startWhole3 = Math.floor(Math.random() * start3.length);
  536. var startWhole4 = Math.floor(Math.random() * start4.length);
  537. var midd1 = ['Jag vet inte vad du tycker', 'Jag vet inte om dig', 'Jag hoppas att du känner som mig', 'Vi kanske inte känner likadant', 'Kan tänkas att vi inte känner likadant', 'Kan bara hoppas att vi känner samma', 'Jag vill tro vi tänker likadant', 'Har mina funderingar', 'Funderade på om vi är lika sugna', 'Vet inte vad du tänker', 'Har inte en aning vad du tänker', 'Har ingen aning hur', 'Finns en chans att vi tänker lika', 'Hoppas att vi känner likadant',
  538. 'Jag tror att vi kan komma långt', 'Jag vill tro vi vill samma sak', 'Nog kan det vara så att vi vill samma sak', 'Det finns mycket vi kan göra', 'Jag kan komma på mycket vi kan göra', 'Det kan bli super bra detta', 'Vet inte vad du tycker', 'Måste ju bara gå att ordna något', 'Vill verkligen tro att vi kommer fungera', 'Jag har en del tankar om dig redan', 'Känslorna inom mig växer redan', 'Jag kan känna hur mycket jag vill ha dig redan', 'Detta kan nog bara bli bra',
  539. 'Vet inte vad vi kommer att göra i slutändan', 'Vill gärna tro att vi kommer att komma fint överens', 'Vad känner du om detta? Det kan bli bra', 'Kommer väl att bli bra eller hur? Så underbart', 'Jag vill tro att du är en respektabel man', 'Känns perfekt', 'Känns underbart', 'Hur fint känns inte detta', 'Tänk allt vi kan göra', 'Jag vill få dig att må bra', 'Ska nog kunna få dig att må bra', 'Det känns som att du kommer att må bra med mig', 'Nog ska jag få dig att trivas',
  540. 'Det finns väl många sätt vi kan trivas ihop på', 'Kanske vi kan trivas ihop', 'Nu ska vi väl inte tvivla på detta iallafall', 'Jag tvivlar inte på oss ihop', 'Jag har inga tvivel', 'Jag vill veta mer om dig', 'Jag vill se om vi funkar', 'Det finns så mycket vi kan lära om varandra', 'Vad vi kan ha kul ihop', 'Så trevligt vi kan komma ha', 'Känner för att tillbringa tid med dig'];
  541. var midd2 = ['då måste vi ju få kontakt med varandra.', 'vi ska väl då först få kontakt.', 'nog ska vi väl få kontakt nu då?', 'ska vi inte ta en start här då?', 'vi får ju börja med våran kontakt då?', 'då hoppas jag att du svarar mig.', 'jag vill tro att du kommer svara mig då?', 'kommer du att vilja svara mig då?', 'nog ska vi kanske börja här nu?', 'hur gör vi nu då? Kommer du svara mig?', 'svara mig så tar vi det till nästa steg.', 'va inte rädd för att svara mig så kör vi.', 'jag tror vi måste komma igång nu då!',
  542. 'känner du inte att vi borde komma igång nu?', 'känner du inte att vi måste komma igång nu?', 'har väl störst chans om du svarar mig?', 'tycker du borde svara mig så kör vi.', 'om du svarar så är vi ett steg längre.', 'om du svarar mig så har vi första steget avklarat.', 'första steget vi måste ta är ju att svara varandra.', 'svara skulle vara första steget för dig om du vill ha mig.', 'om du vill ha mig så ser jag fram emot ditt svar.', 'kommer jag se ett svar från dig snart?', 'får jag ett svar då kanske?',
  543. 'nästa gång jag loggar in kanske jag har ett svar då?', 'får man höra från dig då så kör vi?', 'du kan väl svara mig och via ditt intresse?', 'om du är seriös me detta så hör av dig?', 'tror du att du kan höra av dig fina du?', 'jag vill ge detta en chans så vad tror du?', 'vill detta med dig men svara så tar vi det därifrån?', 'kan du tänka dig att svara mig så vi kan se hur vi gör?', 'ge mig en chans och svara så tar vi det därifrån!', 'väntar på dig och hoppas inte i förgäves?', 'nu kör vi på detta så hör av dig snarast fina du.'];
  544. var middWhole1 = Math.floor(Math.random() * midd1.length);
  545. var middWhole2 = Math.floor(Math.random() * midd2.length);
  546. var middkåt1 = ['Jag är så jäkla kåt och sugen på dig', 'Jag vill ha en hård fin kuk', 'Dagdrömmer om en hård kuk', 'Känner för att ta en stenhård kuk', 'Min våta grotta vill ha något hårt och fint', 'Fittan riktigt suger efter en kuk', 'Det finns inget jag hellre vill ha än kuk just nu', 'Vi måste bara fixa detta för jag trånar efter en fin kuk', 'En man som vill ge mig sin kuk är allt jag vill ha', 'Fantiserar om en kuk som vill ta mig överallt', 'Kuk är vad jag ser framför mig när jag tänker på dig', 'Snälla du ge mig din kuk och tunga',
  547. 'Ge mig din tunga för min fitta är så redo', 'Kan nästan känna smaken av din kuk i mig redan', 'Mina hål kräver din kuk och tunga min kära', 'Ge mig dina fingrar min g punkt är så sugen', 'Har du fått se en fontän? Jag vill ge dig en över ansiktet', 'Fingrar mig i detta nu och tänker mig din kuk i min mun', 'Smeker min fitta nu och känner hur jag vill ha en kuk i fittan', 'Gillar du alla hål kanske och vill ta mig hårt', 'Gud vad jag vill känna en hand hårt smiskande mot min rumpa', 'En kuk i rumpan skulle sitta fint nu kan jag säga',
  548. 'Vad jag vill känna ett par kulor i min mun medans jag smeker skaftet', 'Jag känner att vi kan knulla vilt och länge', 'Vill du som jag knulla länge med långa förspel', 'Har du den kuk som jag åtrår', 'Hoppas att du vill slicka min fitta länge', 'Har en buttplugg i min rumpa just nu', 'Vad gillar du en fin rumpa och en våt fitta', 'Gud vad jag är våt för jag kör en stor dildo i min fitta', 'Vill du leka med mina hål och ta hand om mig', 'Hoppas att du sitter hård och kåt på mig nu', 'Jag vill suga din kuk ner i halsen', 'Tar gärna din sats i munnen innan vi knullar',
  549. 'Kan du komma flera gånger under en kväll så jag blir välfylld', 'Vill känna din sats rinna ut ur mitt hål sakta och kladdigt', 'är du lika kåt och sugen på knulla som jag', 'Känner så för att runka och suga en kuk just nu', 'Det finns mycket jag vill men allt jag kan tänka på är kuk', 'Din kuk är allt som jag kan tänka på just nu', 'Jag vill bli tagen till nya höjder av orgasmer', 'Är du den som kommer ta mig djupt och fint med din kuk', 'Finns ingen som vill knulla lika mycket som jag', 'Längtar efter din kuk så mycket', 'Din kuk i min fitta är allt jag vill',
  550. 'Min grotta så våt och din kuk hård som stålrör passar väl fint', 'Väntar på din kuk', 'Jag hoppas att du vill ha min våta fitta över ditt ansikte', 'Kör din kuk i botten av min fitta', 'Vill känna din kuk bottna i mina hål', 'Suga dig till roten det är min fantasi', 'Suget efter njuta med dig är så starkt', 'Vill ju bara få suga av dig så enormt mycket', 'Känna din hud mot min under hett sex', 'Knulla vilt längtar jag efter', 'Söker din kuk min kåta man', 'Vill ju knulla dig kära du', 'Behöver din kuk i mina hål', 'Inbillar mig att jag känner dig smeka mig över min kropp', 'En fin kuk i mina hål skulle sitta fint nu ska du tro',
  551. 'Skulle vilja knulla nu verkligen', 'En stilig fin ståtlig påle i min mun hade varit fint', 'Suga din kuk är allt jag tänker på', 'Vill ha din fina kuk i mitt trånga hål', 'Känna din kuk i min hand nu skulle vara underbart', 'Varför har man inte din kuk här nu? Jag vill ta på dig', 'Kan inte sluta tänka på din hårda kuk', 'Gud vad jag vill känna din nakna kropp mot min', 'Jag är våt för jag drömde så exotiskt om dig', 'Våt fitta och sug efter en sak', 'Om man är så kåt som jag är det klart jag återkommer till dig', 'Behöver dig för min fina härliga våta grotta', 'Gud vad kåt jag är på dig', 'Drömde att du knullade mig så fint', ' Fantiserade om hur du tog mig i köket',
  552. 'Fantasier är allt jag har just nu om dig och mig i vilt sex', 'Jag hoppas jag kommer känna din kuk i mig', 'Så många kukar det finns men det är din jag åtrår', 'Inte kåt? Jag vill smaka din kuk', 'Varför känner jag inte din kuk? Så våt och redo', 'Pulsen går på högvarv med tanke på dig naken ihop med mig', 'Smeker mig nu till tanken på din hårda kuk', 'Så super kåt på dig och kräver din kuk i ett par timmar', 'Fittan pirrar så fint och vill ha din tunga', 'Din tunga gör mig kåt', 'Tanken på din tunga och fingrar gör något med mig', 'Dina fingrar får mig att tända till', 'Kanske galet men gud vad kåt jag är', 'Hur får du mig så kåt? Bara tanken på dig gör mig nervöst kåt',
  553. 'Är du kåt? Jag känner mig bara så enormt kåt', 'Runka tror jag du gör nu och det gör mig kåt', 'Hur mycket kuk kan man ta på en dag? Tanken på att testa för mig kåt', 'Kuk en hel dag? Det är din så klart jag skulle föredra för det', 'Skulle det inte vara fint med ett hett knull', 'Jag kan inte sluta fantisera om dig'];
  554. var middkåt2 = ['vill rida dig och studsa på kuken om och om igen!', 'vill ta emot i alla ställningar!', 'känna hur du smeker mig över hela kroppen och kysser mig.', 'kyss mig i nacken och ta mig bakifrån.', 'olika ställningar det är underbart eller hur?', 'prova i alla rum och på alla möbler.', 'om du fyller mig så suger jag upp dig efteråt igen och rider dig sen.', 'bind mina fötter och ta mig till orgasmer så är jag din.', 'ta mig doggy och smiska mig röd!', 'kan du och jag kanske knulla offentligt?', 'jag kommer berätta mina vildaste fantasier.', 'kanske jag kan få dig att uppleva alla dina fantasier.',
  555. 'vill du uppleva alla dina fantasier?', 'om du har någon fetisch är jag på!', 'kör dildon i mitt hål medans du knullar mig.', 'vill testa på alla sexlekar man kan tänka sig.', 'finns det något man inte kan göra?', 'endast våran fantasi sätter gränserna.', 'låta mig få ta dig djupt i alla vinklar gör mig så kåt.', 'kan inte tänka mig annat än din kuk i mina hål hårt stötande och din pung slår mot mig.', 'hur många ställningar vill du knulla i?', 'har du några favoriter inom sex?', 'kan tänka mig vara din sexslav.', 'vill tänka mig vara din undergivna kvinna och tillfredsställa dig.',
  556. 'finns det något du inte vill göra inom sex?', 'jag kan inte tänka mig att det finns något jag inte vill göra.', 'kan tänka mig knulla hela nätter eller dagar.', 'vill knulla minst 3 gånger per kväll.', 'söker du massa sex är jag din lilla nymfoman.', 'är lika kåt som dig kan jag lova och sugen!', 'här har du en kvinna som inte kan tröttna på sex.', 'mig kommer du inte få slut på jag är en duracell kanin i sängen!', 'kan det vara så att du orkar med mig?', 'sex det kommer jag inte få nog av.', 'din kuk kommer jag inte kunna tröttna på så du kan ta mig så länge du vill.', 'hur mycket vill du knulla mig? Är outröttlig.',
  557. 'suger dig i bilen och på stranden och vart du vill.', 'sätt ögonbindel på mig och bind mig sen utnyttja mig!', 'hur mycket vill du se av min kropp?', 'knulla mig så hårt att jag skriker ditt namn.', 'jag skriker väldigt högt vid orgasm så va beredd hehe.', 'du söker väl ändå efter mycket fitta och sexlekar?', 'dina fantasier är garanterat inte för perversa för mig.', 'har du en kuk och blåa kulor så är jag rätt kvinna för dig!', 'Känna hur du kör din kuk så djupt och skönt.', 'hur du pullar mig hårt på min g punkt till fontäner.', 'din tunga jobbar hårt mot min klitta och får min kropp att skaka.', 'knulla min fitta så hårt och djupt bakifrån.', 'känna din pung slå mot mig när du stöter hårt och djupt.',
  558. 'ta mig gärna i köket över bordet och smiska min rumpa.', 'suger din kuk långt ner i halsen.', 'kör din kuk var du vill jag vill överallt!', 'en kuk som din passar mina hål så fint.', 'du får fylla mig vart du än vill bara det är minst 2 gånger!', 'känna dig fylla min mun med din sats ger mig nästan orgasm bara av tanken.', 'ge mig allt du har bara du inte håller tillbaka.', 'ta min fina fitta hur du vill bara du tar mig tills ingen orkar längre.', 'det finns bara ett tempo och det är 100% av allt du har.', 'får gärna binda mig och ge mig orgasmer tills jag skakar av vällust.', 'vill se hur många gånger man orkar knulla på en dag.', 'jag har fått 4 orgasmer på en kväll och hur många kan du ge mig?', 'knulla mig i rumpan känner jag för att prova.',
  559. 'har en dildo i min rumpa i detta nu!', 'jag har dildo i båda mina hål i skrivande stund!', 'smeker min fitta för dig i detta nu och hoppas du är sugen?', 'behöver jag vänta länge på en hård kuk? Jag smeker mig nu!', 'ett hårt knulla i min våta fitta och tajta rumpa är vad jag behöver.', 'varför är min fitta inte fylld ännu kära du?', 'kör mig hårt med min feta dildo med tanke på att det är din kuk som knullar mig.', 'kuk som kuk säger dom men jag vill bara känna din köra mig till orgasm.', 'suga kuk tills jag får satsen i munnen och sen fortsätta suga dig efteråt innan du kör min fitta.', 'vill få suga dig till det inte finns mer kvar i din pung!'];
  560. var middkåtWhole1 = Math.floor(Math.random() * middkåt1.length);
  561. var middkåtWhole2 = Math.floor(Math.random() * middkåt2.length);
  562. var end1 = ['Låter detta inte bra fina du?', ' ', 'Vad tycker du om detta min kära?', 'Kan det vara så att du är med på detta?', 'Känner du som jag och vill detta?', 'Kan det vara så att du är med mig nu?', 'Vill du köra på detta nu?', 'Vad säger du om att köra på detta?', 'Vad säger du min kära?', 'Är du sugen på detta nu då?', 'Finns det någon chans att du är sugen?', 'Hoppas att du är lika sugen som jag?', 'Väntar på dig nu om du vill?', 'Säg att du vill ha mig fina du?', 'Kan det inte vara så att du är sugen nu eller?', 'Jag hoppas verkligen att jag hör från dig?', 'Kommer kolla efter ditt svar var timme!', 'Ger mig inte att få ett svar från dig! Så återkom?',
  563. 'Återkommer du till mig kanske nu eller?', 'Om du inte svarar mig så är du inte intresserad?', ' ', 'Hur länge kommer jag behöva vänta?', 'Ser fram emot ditt svar?', 'Du kan väl bara höra av dig?', 'Får man se fram emot ett trevligt svar?', 'Kommer det att bli något mellan oss tror du?', 'Va inte rädd för att svara mig!', 'Va inte för blyg nu okej?', 'Inte ska du vara nervös för att svara mig okej?', 'Jag ser ju helst att du inte är ignorerar mig iallafall?', 'Vi bor nära varandra så låt inte detta gå till spillo!', 'Hoppas att du inte kommer förlora denna chansen?', 'Ge mig en chans du kommer inte ångra dig.', 'Gör mig inte besviken kära du?',
  564. 'Längtar så efter ditt svar!', 'Som jag ser fram emot dig nu och gör du det med?', 'Svårt att tänka på annat nu så hör av dig?', 'Vill vara med dig så mycket!', 'Ditt svar kommer nog göra överlycklig!', 'Då hörs vi snart nu då?', 'Ger dig lite tid men längtar efter ditt meddelande!', 'Ett litet meddelande är väl inte för mycket begärt?', 'Svarar du mig så är vi ju nästan där!', 'Kommer ingenstans utan ett svar?', 'Hur långt vill du att vi ska gå? Ge mig ett litet svar?', 'Allt börjar med ett litet svar ju?', 'Se till att få iväg ditt svar så kör vi?', 'Få iväg ditt svar så väntar jag!', 'Jag ser fram emot dig så hörs vi snart?', 'Tror du inte att jag duger?',
  565. 'Glöm inte svara mig nu fina du.', 'Du och jag kan väl bli något fint?', 'Nog ska vi se om vi trivs?', 'Hoppas att du är lite sugen på mig nu?', 'Vill du inte vara med mig?', 'Vi kan väl lära känna varandra bättre?', 'Vi säger så för tillfälligt?', 'Ge mig en chans så blir du inte besviken!', 'Jag har stora förhoppningar om dig!', 'Måste säga detta känns bra fina du.'];
  566. var end2 = ['Pussar', 'Puss puss', 'Kramar', 'Kram', 'Puss och kram', ' ', 'Massor av pussar', 'Pussar i massor', 'Puss vart du vill ha dom.', 'Puss och smek'];
  567. var endWhole1 = Math.floor(Math.random() * end1.length);
  568. var endWhole2 = Math.floor(Math.random() * end2.length);
  569.  
  570. var Fras1 = start1[startWhole1] + ' och ' + start2[startWhole2] + ' för ' + start3[startWhole3] + ' och ' + start4[startWhole4] + ' ' + midd1[middWhole1] + ' men ' + midd2[middWhole2] + ' ' + end1[endWhole1] + ' ' + end2[endWhole2];
  571. var Fras2 = start1[startWhole1] + ' och ' + start2[startWhole2] + ' för ' + start3[startWhole3] + ' och ' + start4[startWhole4] + ' ' + middkåt1[middkåtWhole1] + ' och ' + middkåt2[middkåtWhole2] + ' ' + end1[endWhole1] + ' ' + end2[endWhole2];
  572. var Fras3 = middkåt1[middkåtWhole1] + ' och ' + middkåt2[middkåtWhole2] + ' ' + end1[endWhole1] + ' ' + end2[endWhole2];
  573. var Fras4 = start1[startWhole1] + ' och ' + start2[startWhole2] + ' för ' + start3[startWhole3] + ' och ' + start4[startWhole4];
  574. var Fras5 = start1[startWhole1] + ' och ' + start2[startWhole2] + ' för ' + start3[startWhole3] + ' och ' + start4[startWhole4] + ' ' + middkåt1[middkåtWhole1] + ' och ' + middkåt2[middkåtWhole2];
  575. var Fras6 = midd1[middWhole1] + ' men ' + midd2[middWhole2] + ' ' + end1[endWhole1] + ' ' + end2[endWhole2];
  576.  
  577. var randFras = [Fras1, Fras2, Fras3, Fras4, Fras5, Fras6];
  578. var randFrasMath = Math.floor(Math.random() * randFras.length);
  579. var FrasResult = randFras[randFrasMath];
  580.  
  581.  
  582. $('.counters-column6').val(FrasResult);
  583. var Text = $(".counters-column6").val();
  584. $(".counters-column6").val('');
  585. $(".conversation-message-text").autotype(Text);
  586.  
  587. setTimeout(function() {
  588. $('.message-submit-button').trigger("click");
  589. window.location.reload(true);
  590. }, 8000);
  591.  
  592.  
  593. }
  594.  
  595. }
  596.  
  597. function shimFunctions() {
  598. /*
  599. if(config.showCounters) {
  600. console.log("Adding statistics counters");
  601. loadConversation = (function() {
  602. var cached_loadConversation = loadConversation;
  603. return function() {
  604. var result = cached_loadConversation.apply(this, arguments);
  605. afterConversationLoaded();
  606. return result;
  607. };
  608. })();
  609. }
  610. /*/
  611. console.log("Adding statistics counters????");
  612. if(config.showCounters) {
  613. console.log("Adding statistics counters");
  614. loadConversation = new Function(
  615. "id",
  616. "doPreload",
  617. "review",
  618. "fromClaimNext",
  619. "claimNextType",
  620. loadConversation.toString()
  621. .replace("userIdleTime = 0;", "userIdleTime = 0;\n\t\tafterConversationLoaded();")
  622. .replace(/^function[^{]+{/i,"")
  623. .replace(/}[^}]*$/i, "")
  624. );
  625. }
  626. //*/
  627.  
  628. }
  629.  
  630. function registerHotkeys() {
  631. console.log("Registering hotkeys");
  632. var helperFunctions = new Map();
  633. var helpFunctions = new Map();
  634.  
  635. helperFunctions.set(config.hotkeys[0], //
  636. () => {
  637.  
  638. var convId = $('#conversation-content .message-last-in-id').val(),
  639. messId = 'table-msg-row table-msg-row-' + (convId),
  640. messageTable = document.getElementsByClassName(messId),
  641. f = document.getElementById("conversation-messages").getElementsByClassName('message-text');
  642.  
  643. for(let e of f) {
  644. let parentParent = f.parentElement.parentElement;
  645. if(parentParent.textContent.slice(1).indexOf(getTargetName()) > -1) {
  646. let e = document.getElementsByClassName('conversation-attachment')[0];
  647. if(e !== undefined) {
  648. e.click();
  649.  
  650. };
  651.  
  652. // Adds :containsNC - non case-sensitive :contains
  653. $.extend($.expr[":"], {
  654. "containsNC": function(elem, i, match, array) {
  655. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  656. }
  657. });
  658. // Input Type About Attachment
  659. var text = prompt('Target note:', );
  660. // Insert text to note
  661. $('.target-note-content.area').val(text);
  662. // Select note category
  663. var category = 'Bild';
  664. // Categories
  665. $('select.target-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  666. // Save note
  667. $('.target-save-note').trigger('click')
  668. //Focus TextField
  669. window.scroll(0, 0);
  670. $( ".conversation-message-text" ).focus();
  671.  
  672. } else{
  673. $( ".conversation-message-text" ).focus();
  674.  
  675. }
  676. }
  677.  
  678.  
  679. });
  680. helperFunctions.set(config.hotkeys[1], //
  681. () => {
  682.  
  683.  
  684.  
  685. let e = document.getElementsByClassName('conversation-attachment')[0];
  686. if(e !== undefined) {
  687. e.click();
  688. }
  689.  
  690.  
  691. });
  692. helperFunctions.set(config.hotkeys[2], focusMessageBox); // Go to message box
  693. helperFunctions.set(config.hotkeys[3], // Focus Custom TextField(Column6)
  694. () => {
  695. //Focus TextField
  696. $( ".counters-column6" ).focusTextToEnd();
  697. });
  698. helperFunctions.set(config.hotkeys[4], // Add image
  699. () => {
  700. $('.conversation-show-more').trigger('click');
  701. });
  702. helperFunctions.set(config.hotkeys[5], // Remove image
  703. () => {
  704. let e = document.getElementsByClassName('message-delmedia-button')[0];
  705. if(e !== undefined) {
  706. e.click();
  707. }
  708. });
  709. helperFunctions.set(config.hotkeys[6], // Go to Messages
  710. () => {
  711. $('button[rel="messages"]').click();
  712. });
  713. helperFunctions.set(config.hotkeys[7], // Go to Stopped Messages
  714. () => {
  715. $('button[rel="stopped"]').click();
  716. });
  717. helperFunctions.set(config.hotkeys[8], // Go to Unread Messages
  718. () => {
  719. $('button[rel="unread"]').click();
  720. });
  721. helperFunctions.set(config.hotkeys[9], // Generate Hobbies and save to Notes
  722. () => {
  723. // Adds :containsNC - non case-sensitive :contains
  724. $.extend($.expr[":"], {
  725. "containsNC": function(elem, i, match, array) {
  726. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  727. }
  728. });
  729.  
  730. var interests = [' astrologi' ,'bakning' ,'basta' ,'bilar' ,'bio' ,'brädspel' ,'båtar' ,'böcker' ,'campa' ,'cykla' ,'dansa' ,'datorer' ,'dekorera' ,'djur' ,'film' ,'fiska' ,'flyga' ,'fotboll' ,'fotografera' ,'friluftsliv' ,'friskvård' ,'gymnastik' ,'hund' ,'husdjur' ,'hälsa' ,'jogga' ,'katt' ,'klättring' ,'konserter' ,'konst' ,'litteratur' ,'matlagning' ,'meditera' ,'motorcyklar' ,'museum' ,'musik' ,'måla' ,'natur' ,'opera' ,'politik' ,'promenera' ,'pyssla' ,'religion' ,'renovera' ,'resa' ,'rida' ,'segla' ,'simma' ,'skidor' ,'skådespel' ,'social media' ,'spela kort' ,'tatueringar' ,'teater' ,'teckna' ,'teknik' ,'trädgård' ,'träna' ,'tv' ,'umgås' ,'uteliv' ,'vandra' ,'vinprovning' ,'vintersport' ,'äta ute'];
  731.  
  732. var n = ~~(Math.random() * 4) + 2;
  733.  
  734. var rand = [];
  735. do {
  736. rand[rand.length] = interests.splice(Math.floor(Math.random() * interests.length), 1)[0];
  737. } while (rand.length < n);
  738.  
  739. var hoBB = rand;
  740.  
  741. // Extract target name
  742. var targetName = $('.target-name').text();
  743. // Trim period from target name
  744. var targetNamee = targetName.substr(1);
  745. // Insert text to note
  746. $('.player-note-content.area').val(hoBB);
  747. var f = $('.player-note-content.area').val();
  748. var e = $('.player-note-content.area');
  749. $(e).val( f + ' (' + targetNamee + ')');
  750. // Select note category
  751. var category = 'Hobby';
  752.  
  753. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  754. // Save note
  755. $('.player-save-note').trigger('click')
  756.  
  757. //Autotype text to Message
  758. $('.conversation-message-text').autotype(f);
  759. });
  760. helperFunctions.set(config.hotkeys[10], // Generera Sexintressen + spara i Notes
  761. () => {
  762. // Adds :containsNC - non case-sensitive :contains
  763. $.extend($.expr[":"], {
  764. "containsNC": function(elem, i, match, array) {
  765. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  766. }
  767. });
  768.  
  769. var interests = [' analt' ,' bakifrån' ,' bli bunden' ,' att binda' ,' använda buttplug' ,' använda dildo' ,' dominans' ,' kyssar' ,' långa förspel' ,' missionären' ,' ögonbindel' ,' offentliga platser' ,' onani' ,' hårdare smisk' ,' att rida' ,' rollspel' ,' sexiga underkläder' ,' sexleksaker' ,' skeda' ,' att suga' ,' att svälja' ,' teasing' ,' vaniljsex'];
  770.  
  771. var n = ~~(Math.random() * 4) + 2;
  772.  
  773. var rand = [];
  774. do {
  775. rand[rand.length] = interests.splice(Math.floor(Math.random() * interests.length), 1)[0];
  776. } while (rand.length < n);
  777.  
  778. var sex = rand;
  779.  
  780. // Extract target name
  781. var targetName = $('.target-name').text();
  782. // Trim period from target name
  783. var targetNamee = targetName.substr(1);
  784. // Insert text to note
  785. $('.player-note-content.area').val(sex);
  786. var f = $('.player-note-content.area').val();
  787. var e = $('.player-note-content.area');
  788. $(e).val( f + ' (' + targetNamee + ')');
  789.  
  790. // Select note category
  791. var category = 'Sexuella preferenser';
  792.  
  793. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  794. // Save note
  795. $('.player-save-note').trigger('click')
  796.  
  797. //Autotype text to Message
  798. $('.conversation-message-text').autotype(f);
  799. });
  800. helperFunctions.set(config.hotkeys[11], // Player Jobb+Spara i Notes
  801. () => {
  802. // Adds :containsNC - non case-sensitive :contains
  803. $.extend($.expr[":"], {
  804. "containsNC": function(elem, i, match, array) {
  805. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  806. }
  807. });
  808.  
  809. //Extract Player Proffesion//
  810. var playerjob = $('.profession').text().toLowerCase();
  811. // Extract target name
  812. var targetName = $('.target-name').text();
  813. // Trim period from target name
  814. var targetNamee = targetName.substr(1);
  815. // Insert text to note
  816. $('.player-note-content.area').val(playerjob + ' (' + targetNamee + ')');
  817. // Select note category
  818. var category = 'jobb/utbildning';
  819. // Categories
  820. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  821. // Save note
  822. $('.player-save-note').trigger('click')
  823.  
  824. //paste proffesion//
  825.  
  826. $('.conversation-message-text').autotype(playerjob);
  827. });
  828. helperFunctions.set(config.hotkeys[12], // Retrieve Player Name and Save to Notes
  829. () => {
  830. // Adds :containsNC - non case-sensitive :contains
  831. $.extend($.expr[":"], {
  832. "containsNC": function(elem, i, match, array) {
  833. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  834. }
  835. });
  836.  
  837. var playername = $('.real_name').text();
  838. // Extract target name
  839. var targetName = $('.target-name').text();
  840. // Trim period from target name
  841. var targetNamee = targetName.substr(1);
  842. // Insert text to note
  843. $('.player-note-content.area').val(playername + ' (' + targetNamee + ')');
  844. // Select note category
  845. var category = 'namn';
  846. // Categories
  847. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  848. // Save note
  849. $('.player-save-note').trigger('click')
  850.  
  851. //Autotype text to Message
  852. $('.conversation-message-text').autotype(playername);
  853. });
  854.  
  855. helperFunctions.set(config.hotkeys[13], // Target Notes+Autoval av Kategori
  856. () => {
  857. // Adds :containsNC - non case-sensitive :contains
  858. $.extend($.expr[":"], {
  859. "containsNC": function(elem, i, match, array) {
  860. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  861. }
  862. });
  863.  
  864. // Extract selected text
  865. var note = window.getSelection().toString();
  866. // Modify and verify selected text
  867. var text = prompt('Target note:', note);
  868. // Insert text to note
  869. $('.target-note-content.area').val(text);
  870. // Select note category
  871. var category;
  872. if (text.match(/bild|selfie|kuk|gif/i)) {
  873. var category = 'Bilder';
  874. } else if (text.match(/singel|barn|son|söner|döttrar|dotter|fru|särbo|sambo|gift|skild|änk/i)) {
  875. var category = 'Familj/Relationer';
  876. } else if (text.match(/jobb|arbetar|plugg|stude|pension|kör buss|kör lastbil|kör taxi|på järnvägen|chef|kock|vakt|pilot|polis|bagare|förare|frisör|jurist|läkare|lärare|ledare|målare|montör|rektor|advokat|konsult|optiker|pedagog|säljare|väktare|arbetare|arkitekt|brandman|chaufför|designer|fotograf|ingenjör|operatör|snickare|arbetslös|assistent|bartender|maskinist|sköterska|veterinär|elektriker|journalist|hantverkare|programmerare|projektledare|mekaniker|driver eget|företag|firma|måleri|snickeri|verkstad/i)) {
  877. var category = 'Jobb/Utbildning';
  878. } else if (text.match(/hund|katt|husdjur|spela|träna|astrologi|basta|bakning|bilar|bio|film|brädspel|båtar|böcker|litteratur|campa|cykla|dansa|datorer|dekorera|djur|fiska|flyga|fotboll|fotografera|friluftsliv|gymnastik|hälsa|friskvård|jogga|klättring|konserter|konst|museum|matlagning|meditera|motorcyklar|musik|måla|natur|nyheter|politik|opera|promenera|pyssla|religion|renovera|resa|rida|resa|segla|simma|skidor|skådespel|social media|tatueringar|teater|teckna|teknik|trädgård|träna|tv|umgås|uteliv|vandra|vinprovning|vintersport|äta ute/i)) {
  879. var category = 'Hobby';
  880. } else if (text.match(/bor i|Karlskrona|Karlshamn|Borås|Borlänge/i)) {
  881. var category = 'Stad';
  882. } else if (text.match(/heter|Abbe|Abdullah|Abraham|Adam|Adel|Adis|Agris|Agua|Alaga|Albert|Albin|Alek|Alex|Alexander|Alf|Alfred|Ali|Allan|Amir|Anders|Andreas|André|Andy|Ante|Anton|Ants|Ari|Aristides|Arne|Arto|Arvid|Axel|Azar|Behzad|Bengt/i)) {
  883. var category = 'Namn';
  884. } else if (text.match(/Bengt-Åke|Benny|Bernt|Bernt-Olov|Bernth|Bert|Bertil|Birger|Birgir|Bjarne|Björn|Bo|Bogdan|Boris|Bosse|Bror|Börge|Börje|Calle|Calmer|Carl|Carsten|Chaban|Charlie|Chris|Christer|Christian|Christoffer|Christophe|Christopher/i)) {
  885. var category = 'Namn';
  886. } else if (text.match(/Claes|Classe|Claudiu|Conny|Costas|Dan|Dane|Daniel|Danne|David|Davide|Davor|Deivys|Demir|Dennis|Derek|Dick|Edi|Edvard|Edvin|Ego|Eije|Einar|Eki|Elias|Emanuel|Emil|Emir|Eric|Erik|Erland|Evert|Ewen|Farid|Filip|Folke|Francesco/i)) {
  887. var category = 'Namn';
  888. } else if (text.match(/Franjo|Frank|Freddie|Fredrik|Friedhelm|Frode|Fugus|Gabriel|Georg|Gerald|Gerd|Gerra|Gert|Gert-Owe|Getahun|Gunnar|Gustaf|Gustav|Göran|Görgen|Görgen|Gösta|Göte|Habib|Hans|Hans Börge|Harald|Harri|Harry|Hasse|Helmut|Henke|Henrik|Henry|Hossein|Hugo|Håkan|Ihsan|Inge|Ingemar|Ingmar/i)) {
  889. var category = 'Namn';
  890. } else if (text.match(/Ingvar|Isaac|Isac|Isak|Ismail|Ivar|Jack|Jakob|Jan|Janne|Jean|Jens|Jerry|Jesper|Jhonatan|Jimmy|Joakim|Joar|Jocke|Joel|Johan|Johannes|John|Johnny|Jon|Jonas|Jonathan|Jonny|Juan|Julius|Jyrki|Jörgen|Kai|Kaj|Kalle|Kari|Karl|Karl Gustav|Karl-Erik|Karl-Olov|Karol|Ken|Kenneth|Kenny|Kent|Kenta/i)) {
  891. var category = 'Namn';
  892. } else if (text.match(/Kenth|Kieren|Kim|Kjell|Kjelle|Klas|Knut|Krister|Kristian|Kristoffer|Kurt|Kurt-Lennart|Kutte|Kåge|Lars|Lars Olov|Larsa|Larte|Larui|Lasse|Leif|Lellas|Lennart|Leo|Leon|Linus|Lucky|Ludvig|Magnus|Manne|Manuel|Marco|Marcus|Marek|Marian|Mario|Mark|Marko|Markus|Martin|Mathias|Mats|Matsvo|Matte|Matti|Mattias|Max|Melker|Michael|Michel|Micke|Mika|Mikael|Mikael|Mille|Miron|Misa|Mohamed|Mohammed/i)) {
  893. var category = 'Namn';
  894. } else if (text.match(/Morgan|Musa|Mustapha|Måns|Mårten|Nicke|Nicklas|Nicky|Niclas|Niklas|Nille|Nils|Nisse|Nurko|Ola|Oliver|Olle|Olof|Olov|Oscar|Oskar|Ove|Owe|Parsia|Pasi|Patric|Patrick|Patrik|Paul|Pavel|Peder|Pelle|Peo|Per|Per-Olof|Peter|Pether|Petter|Philip|Pierre|Pontus|Poul|Putte|Pär|Rafael|Rafeo|Ragnar|Raimo|Rasmus|Riccardo|Richard|Rickard|Rikard|Rimtaf|Risto|Robban|Robert|Robin|Roffe|Roger|Roland|Rolf|Rolle|Romii|Ronnie|Ronny|Ruben|Rune|Sabah|Sajad|Saladin|Sam|Samuel|Sebastian|Seed|Serko|Sigge|Silvo|Simon|Stefan|Steffen|Sten|Sten-Åke|Stig|Stig-Evert|Sture|Sune|Sven|Sven Erik|Sven Ingvar|Sven Åke|Sven-Erik|Sven-Gunnar|Sven-Åke|Sören|Tage|Taha|Tapio|Ted|Thomas|Thorbjörn|Tobbe|Tobias|Tobias|Tom|Tomas|Tommy|Tony|Torbjörn|Tord|Tore|Torgny|Torsten|Uffe|Ulf|Ulrik|Uno|Urban|Valentin|Victor|Viktor|Vilhelm|Waldemar|Wiktor|Wilhelm|William|Wojtek|Yngve|Yousef|Zdislav|Åke|Öyvind/i)) {
  895. var category = 'Namn';
  896. } else if (text.match(/anal|bakifrån|bunden|buttplug|dildo|dominans|kyssar|förspel|missionär|mystik|offentlig|onan|piska|rollspel|underkläder|sexleksaker|strap-on|suga|svälja|teasing|trekant|kondom|vaniljsex|wet/i)) {
  897. var category = 'Sexuella preferenser';
  898. } else if (text.match(/bil|mc|motorcykel/i)) {
  899. var category = 'Transportmedel';
  900. } else if (text.match(/mejl|mail|telef|skype|kik|fb|facebook/i)) {
  901. var category = 'Mejl och telefon';
  902. } else if (text.match(/sjuk/i)) {
  903. var category = 'Hälsa';
  904. } else var category = prompt('Select category:');
  905. // Categories
  906. $('select.target-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  907. // Save note
  908. $('.target-save-note').trigger('click')
  909. //Focus TextField
  910. window.scroll(0, 0);
  911. $( ".conversation-message-text" ).focus();
  912. });
  913. helperFunctions.set(config.hotkeys[14], // Save to Target Aktuellt
  914. () => {
  915. // Adds :containsNC - non case-sensitive :contains
  916. $.extend($.expr[":"], {
  917. "containsNC": function(elem, i, match, array) {
  918. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  919. }
  920. });
  921.  
  922. // Extract selected text
  923. var note = window.getSelection().toString();
  924. // Insert text to note
  925. $('.target-note-content.area').val(note);
  926. // Select note category
  927. var category = 'aktuella saker';
  928. // Categories
  929. $('select.target-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  930. // Save note
  931. $('.target-save-note').trigger('click')
  932. //Focus TextField
  933. window.scroll(0, 0);
  934. $( ".conversation-message-text" ).focus();
  935. });
  936. helperFunctions.set(config.hotkeys[15], // Save To Player Auto Category
  937. () => {
  938. // Adds :containsNC - non case-sensitive :contains
  939. $.extend($.expr[":"], {
  940. "containsNC": function(elem, i, match, array) {
  941. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  942. }
  943. });
  944. //Function to focus end of text
  945. (function($){
  946. $.fn.focusTextToEnd = function(){
  947. this.focus();
  948. var $thisVal = this.val();
  949. this.val('').val($thisVal);
  950. return this;
  951. }
  952. }(jQuery));
  953. // Extract selected text
  954. var note = window.getSelection().toString();
  955. // Modify and verify selected text
  956. var text = prompt('Player note:', note);
  957. // Extract target name
  958. var targetName = $('.target-name').text();
  959. // Trim period from target name
  960. var targetNamee = targetName.substr(1);
  961. // Insert text to note
  962. $('.player-note-content.area').val(text + ' (' + targetNamee + ')');
  963. // Select note category
  964. var category;
  965. if (text.match(/bild|selfie|kuk|gif/i)) {
  966. var category = 'Bilder';
  967. } else if (text.match(/singel|barn|son|söner|döttrar|dotter|fru|särbo|sambo|gift|skild|änk/i)) {
  968. var category = 'Familj/Relationer';
  969. } else if (text.match(/jobb|arbetar|plugg|stude|pension|kör buss|kör lastbil|kör taxi|på järnvägen|chef|kock|vakt|pilot|polis|bagare|förare|frisör|jurist|läkare|lärare|ledare|målare|montör|rektor|advokat|konsult|optiker|pedagog|säljare|väktare|arbetare|arkitekt|brandman|chaufför|designer|fotograf|ingenjör|operatör|snickare|arbetslös|assistent|bartender|maskinist|sköterska|veterinär|elektriker|journalist|hantverkare|programmerare|projektledare|mekaniker|driver eget|företag|firma|måleri|snickeri|verkstad/i)) {
  970. var category = 'Jobb/Utbildning';
  971. } else if (text.match(/hund|katt|husdjur|spela|träna|astrologi|basta|bakning|bilar|bio|film|brädspel|båtar|böcker|litteratur|campa|cykla|dansa|datorer|dekorera|djur|fiska|flyga|fotboll|fotografera|friluftsliv|gymnastik|hälsa|friskvård|jogga|klättring|konserter|konst|museum|matlagning|meditera|motorcyklar|musik|måla|natur|nyheter|politik|opera|promenera|pyssla|religion|renovera|resa|rida|resa|segla|simma|skidor|skådespel|social media|tatueringar|teater|teckna|teknik|trädgård|träna|tv|umgås|uteliv|vandra|vinprovning|vintersport|äta ute/i)) {
  972. var category = 'Hobby';
  973. } else if (text.match(/bor i|Karlskrona|Karlshamn|Borås|Borlänge/i)) {
  974. var category = 'Stad';
  975. } else if (text.match(/heter/i)) {
  976. var category = 'Namn';
  977. } else if (text.match(/anal|bakifrån|bunden|buttplug|dildo|dominans|kyssar|förspel|missionär|mystik|offentlig|onan|piska|rollspel|underkläder|sexleksaker|strap-on|suga|svälja|teasing|trekant|kondom|vaniljsex|wet/i)) {
  978. var category = 'Sexuella preferenser';
  979. } else if (text.match(/bil|mc|motorcykel/i)) {
  980. var category = 'Transportmedel';
  981. } else if (text.match(/mejl|mail|telef|skype|kik|fb|facebook/i)) {
  982. var category = 'Mejl och telefon';
  983. } else if (text.match(/sjuk/i)) {
  984. var category = 'Hälsa';
  985. } else var category = prompt('Select category:');
  986. // Categories
  987. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  988. // Save note
  989. $('.player-save-note').trigger('click')
  990. //Focus TextField
  991. window.scroll(0, 0);
  992. $('.conversation-message-text').focusTextToEnd();
  993. });
  994. helperFunctions.set(config.hotkeys[16], // Player Save to Stad
  995. () => {
  996. // Adds :containsNC - non case-sensitive :contains
  997. $.extend($.expr[":"], {
  998. "containsNC": function(elem, i, match, array) {
  999. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  1000. }
  1001. });
  1002. //Function to focus end of text
  1003. (function($){
  1004. $.fn.focusTextToEnd = function(){
  1005. this.focus();
  1006. var $thisVal = this.val();
  1007. this.val('').val($thisVal);
  1008. return this;
  1009. }
  1010. }(jQuery));
  1011. // Extract selected text
  1012. var note = window.getSelection().toString();
  1013. // Extract target name
  1014. var targetName = $('.target-name').text();
  1015. // Trim period from target name
  1016. var targetNamee = targetName.substr(1);
  1017. // Insert text to note
  1018. $('.player-note-content.area').val(note + ' (' + targetNamee + ')');
  1019. // Select note category
  1020. var category = 'stad';
  1021. // Categories
  1022. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  1023. // Save note
  1024. $('.player-save-note').trigger('click')
  1025. //Focus TextField
  1026. window.scroll(0, 0);
  1027. $('.conversation-message-text').focusTextToEnd();
  1028.  
  1029. });
  1030. helperFunctions.set(config.hotkeys[17], // Player Save to Aktuellt
  1031. () => {
  1032. // Adds :containsNC - non case-sensitive :contains
  1033. $.extend($.expr[":"], {
  1034. "containsNC": function(elem, i, match, array) {
  1035. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  1036. }
  1037. });
  1038. //Function to focus end of text
  1039. (function($){
  1040. $.fn.focusTextToEnd = function(){
  1041. this.focus();
  1042. var $thisVal = this.val();
  1043. this.val('').val($thisVal);
  1044. return this;
  1045. }
  1046. }(jQuery));
  1047. // Extract selected text
  1048. var note = window.getSelection().toString();
  1049. // Extract target name
  1050. var targetName = $('.target-name').text();
  1051. // Trim period from target name
  1052. var targetNamee = targetName.substr(1);
  1053. // Insert text to note
  1054. $('.player-note-content.area').val(note + ' (' + targetNamee + ')');
  1055. // Select note category
  1056. var category = 'Aktuella saker';
  1057. // Categories
  1058. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  1059. // Save note
  1060. $('.player-save-note').trigger('click')
  1061. //Focus TextField
  1062. window.scroll(0, 0);
  1063. $('.conversation-message-text').focusTextToEnd();
  1064. });
  1065. helperFunctions.set(config.hotkeys[18], // Target Notes No Prompt
  1066. () => {
  1067. // Adds :containsNC - non case-sensitive :contains
  1068. $.extend($.expr[":"], {
  1069. "containsNC": function(elem, i, match, array) {
  1070. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  1071. }
  1072. });
  1073.  
  1074.  
  1075. // Extract selected text
  1076. var text = window.getSelection().toString();
  1077. // Insert text to note
  1078. $('.target-note-content.area').val(text);
  1079. // Select note category
  1080. var category;
  1081. if (text.match(/bild|selfie|kuk|gif/i)) {
  1082. var category = 'Bilder';
  1083. } else if (text.match(/singel|barn|son|söner|döttrar|dotter|fru|särbo|sambo|gift|skild|änk/i)) {
  1084. var category = 'Familj/Relationer';
  1085. } else if (text.match(/jobb|arbetar|plugg|stude|pension|kör buss|kör lastbil|kör taxi|på järnvägen|chef|kock|vakt|pilot|polis|bagare|förare|frisör|jurist|läkare|lärare|ledare|målare|montör|rektor|advokat|konsult|optiker|pedagog|säljare|väktare|arbetare|arkitekt|brandman|chaufför|designer|fotograf|ingenjör|operatör|snickare|arbetslös|assistent|bartender|maskinist|sköterska|veterinär|elektriker|journalist|hantverkare|programmerare|projektledare|mekaniker|driver eget|företag|firma|måleri|snickeri|verkstad/i)) {
  1086. var category = 'Jobb/Utbildning';
  1087. } else if (text.match(/hund|katt|husdjur|spela|träna|astrologi|basta|bakning|bilar|bio|film|brädspel|båtar|böcker|litteratur|campa|cykla|dansa|datorer|dekorera|djur|fiska|flyga|fotboll|fotografera|friluftsliv|gymnastik|hälsa|friskvård|jogga|klättring|konserter|konst|museum|matlagning|meditera|motorcyklar|musik|måla|natur|nyheter|politik|opera|promenera|pyssla|religion|renovera|resa|rida|resa|segla|simma|skidor|skådespel|social media|tatueringar|teater|teckna|teknik|trädgård|träna|tv|umgås|uteliv|vandra|vinprovning|vintersport|äta ute/i)) {
  1088. var category = 'Hobby';
  1089. } else if (text.match(/bor i|Karlskrona|Karlshamn|Borås|Borlänge/i)) {
  1090. var category = 'Stad';
  1091. } else if (text.match(/heter|Abbe|Abdullah|Abraham|Adam|Adel|Adis|Agris|Agua|Alaga|Albert|Albin|Alek|Alex|Alexander|Alf|Alfred|Ali|Allan|Amir|Anders|Andreas|André|Andy|Ante|Anton|Ants|Ari|Aristides|Arne|Arto|Arvid|Axel|Azar|Behzad|Bengt/i)) {
  1092. var category = 'Namn';
  1093. } else if (text.match(/Bengt-Åke|Benny|Bernt|Bernt-Olov|Bernth|Bert|Bertil|Birger|Birgir|Bjarne|Björn|Bo|Bogdan|Boris|Bosse|Bror|Börge|Börje|Calle|Calmer|Carl|Carsten|Chaban|Charlie|Chris|Christer|Christian|Christoffer|Christophe|Christopher/i)) {
  1094. var category = 'Namn';
  1095. } else if (text.match(/Claes|Classe|Claudiu|Conny|Costas|Dan|Dane|Daniel|Danne|David|Davide|Davor|Deivys|Demir|Dennis|Derek|Dick|Edi|Edvard|Edvin|Ego|Eije|Einar|Eki|Elias|Emanuel|Emil|Emir|Eric|Erik|Erland|Evert|Ewen|Farid|Filip|Folke|Francesco/i)) {
  1096. var category = 'Namn';
  1097. } else if (text.match(/Franjo|Frank|Freddie|Fredrik|Friedhelm|Frode|Fugus|Gabriel|Georg|Gerald|Gerd|Gerra|Gert|Gert-Owe|Getahun|Gunnar|Gustaf|Gustav|Göran|Görgen|Görgen|Gösta|Göte|Habib|Hans|Hans Börge|Harald|Harri|Harry|Hasse|Helmut|Henke|Henrik|Henry|Hossein|Hugo|Håkan|Ihsan|Inge|Ingemar|Ingmar/i)) {
  1098. var category = 'Namn';
  1099. } else if (text.match(/Ingvar|Isaac|Isac|Isak|Ismail|Ivar|Jack|Jakob|Jan|Janne|Jean|Jens|Jerry|Jesper|Jhonatan|Jimmy|Joakim|Joar|Jocke|Joel|Johan|Johannes|John|Johnny|Jon|Jonas|Jonathan|Jonny|Juan|Julius|Jyrki|Jörgen|Kai|Kaj|Kalle|Kari|Karl|Karl Gustav|Karl-Erik|Karl-Olov|Karol|Ken|Kenneth|Kenny|Kent|Kenta/i)) {
  1100. var category = 'Namn';
  1101. } else if (text.match(/Kenth|Kieren|Kim|Kjell|Kjelle|Klas|Knut|Krister|Kristian|Kristoffer|Kurt|Kurt-Lennart|Kutte|Kåge|Lars|Lars Olov|Larsa|Larte|Larui|Lasse|Leif|Lellas|Lennart|Leo|Leon|Linus|Lucky|Ludvig|Magnus|Manne|Manuel|Marco|Marcus|Marek|Marian|Mario|Mark|Marko|Markus|Martin|Mathias|Mats|Matsvo|Matte|Matti|Mattias|Max|Melker|Michael|Michel|Micke|Mika|Mikael|Mikael|Mille|Miron|Misa|Mohamed|Mohammed/i)) {
  1102. var category = 'Namn';
  1103. } else if (text.match(/Morgan|Musa|Mustapha|Måns|Mårten|Nicke|Nicklas|Nicky|Niclas|Niklas|Nille|Nils|Nisse|Nurko|Ola|Oliver|Olle|Olof|Olov|Oscar|Oskar|Ove|Owe|Parsia|Pasi|Patric|Patrick|Patrik|Paul|Pavel|Peder|Pelle|Peo|Per|Per-Olof|Peter|Pether|Petter|Philip|Pierre|Pontus|Poul|Putte|Pär|Rafael|Rafeo|Ragnar|Raimo|Rasmus|Riccardo|Richard|Rickard|Rikard|Rimtaf|Risto|Robban|Robert|Robin|Roffe|Roger|Roland|Rolf|Rolle|Romii|Ronnie|Ronny|Ruben|Rune|Sabah|Sajad|Saladin|Sam|Samuel|Sebastian|Seed|Serko|Sigge|Silvo|Simon|Stefan|Steffen|Sten|Sten-Åke|Stig|Stig-Evert|Sture|Sune|Sven|Sven Erik|Sven Ingvar|Sven Åke|Sven-Erik|Sven-Gunnar|Sven-Åke|Sören|Tage|Taha|Tapio|Ted|Thomas|Thorbjörn|Tobbe|Tobias|Tobias|Tom|Tomas|Tommy|Tony|Torbjörn|Tord|Tore|Torgny|Torsten|Uffe|Ulf|Ulrik|Uno|Urban|Valentin|Victor|Viktor|Vilhelm|Waldemar|Wiktor|Wilhelm|William|Wojtek|Yngve|Yousef|Zdislav|Åke|Öyvind/i)) {
  1104. var category = 'Namn';
  1105. } else if (text.match(/anal|bakifrån|bunden|buttplug|dildo|dominans|kyssar|förspel|missionär|mystik|offentlig|onan|piska|rollspel|underkläder|sexleksaker|strap-on|suga|svälja|teasing|trekant|kondom|vaniljsex|wet/i)) {
  1106. var category = 'Sexuella preferenser';
  1107. } else if (text.match(/bil|mc|motorcykel/i)) {
  1108. var category = 'Transportmedel';
  1109. } else if (text.match(/mejl|mail|telef|skype|kik|fb|facebook/i)) {
  1110. var category = 'Mejl och telefon';
  1111. } else if (text.match(/sjuk/i)) {
  1112. var category = 'Hälsa';
  1113. } else var category = prompt('Select category:');
  1114. // Categories
  1115. $('select.target-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  1116. // Save note
  1117. $('.target-save-note').trigger('click')
  1118. //Focus TextField
  1119. window.scroll(0, 0);
  1120. $( ".conversation-message-text" ).focus();
  1121. });
  1122. helperFunctions.set(config.hotkeys[19], // Focus TextField Column6
  1123. () => {
  1124. //Focus TextField
  1125. $( ".counters-column6" ).focusTextToEnd();
  1126. });
  1127.  
  1128. //Key Event Listensers for Hotkeys
  1129.  
  1130. document.addEventListener('keyup', (e) =>{ // Send Mssg and Lap Time on hit Enter Key
  1131. if (e.which == 13) {
  1132. var isFocused = $(".conversation-message-text").is(":focus"),
  1133. len = $('.conversation-message-text').val().length;
  1134.  
  1135. if (len >= 75 && isFocused) {
  1136. $('#counters-column5').trigger("click");
  1137. $('.message-submit-button').trigger("click");
  1138.  
  1139. }
  1140. }
  1141. });
  1142.  
  1143.  
  1144. document.addEventListener('keyup', (e) => { // Adds Alt Key event listeners for the hotkeys
  1145. if(e.altKey && isOkHotkey(e.code)) {
  1146. e.preventDefault();
  1147. e.stopPropagation();
  1148. let f = helperFunctions.get(e.code);
  1149. if(f !== undefined) f();
  1150. }
  1151. });
  1152.  
  1153. document.addEventListener('keyup', (e) => { // Adds Ctrl Key event listeners for the hotkeys
  1154. if(e.ctrlKey && isOkHotkey(e.code)) {
  1155. e.preventDefault();
  1156. e.stopPropagation();
  1157. let r = helpFunctions.get(e.code);
  1158. if(r !== undefined) r();
  1159. }
  1160. });
  1161.  
  1162.  
  1163. console.log("\tHotkeys registered");
  1164. }
  1165.  
  1166. function isOkHotkey(code) {
  1167. return code.startsWith("Key") || code.startsWith("Digit") || code.startsWith("Numpad") || code.startsWith("Arrow") || code.startsWith("F") || code.startsWith("R");
  1168. }
  1169.  
  1170. function createSettingsButton() {
  1171. function addSetting(value, name) {
  1172. var id_name = (name + 'Setting').replace(/[^A-Za-z_]/g,'');
  1173. var label = document.createElement('label');
  1174. label.innerHTML = name + ": ";
  1175. label.setAttribute('for', id_name);
  1176. label.style.gridColumn = '1';
  1177. var element = document.createElement('input');
  1178. if(typeof value == 'boolean') {
  1179. element.type = 'checkbox';
  1180. element.checked = value;
  1181. } else {
  1182. element.type = 'text';
  1183. element.value = value !== undefined ? value : "";
  1184. }
  1185. element.id = id_name;
  1186. element.name = id_name;
  1187. element.style.gridColumn = '2';
  1188. settingsDialog.appendChild(label);
  1189. settingsDialog.appendChild(element);
  1190. return element;
  1191. }
  1192.  
  1193. function setHotkey(n, e) {
  1194. if(isOkHotkey(e.code) || ['Backspace', 'Delete'].includes(e.code)) {
  1195. e.preventDefault();
  1196. e.stopPropagation();
  1197. var code = (['Backspace', 'Delete'].includes(e.code)) ? "" : e.code;
  1198. e.target.value = code;
  1199. config.hotkeys[n] = code;
  1200. }
  1201. }
  1202.  
  1203. console.log("Creating settings button");
  1204.  
  1205. var menu = $('#topmenu1')[0];
  1206. var settingsDialog = document.createElement('div');
  1207. settingsDialog.id = 'SettingsDialog';
  1208. settingsDialog.style.display = 'none';
  1209. settingsDialog.style.alignItems = 'center';
  1210.  
  1211. addSetting(config.autoReply, 'AutoReply')
  1212. .addEventListener('change', (e) => {config.autoReply = e.target.checked;});
  1213. addSetting(config.username, 'Username') .addEventListener('change', (e) => {config.username = e.target.value;});
  1214. addSetting(config.password, 'Password') .addEventListener('change', (e) => {config.password = e.target.value;});
  1215. addSetting(config.autoLogin, 'Autologin') .addEventListener('change', (e) => {config.autoLogin = e.target.checked;});
  1216. addSetting(config.showCounters, 'Show counters') .addEventListener('change', (e) => {config.showCounters = e.target.checked;});
  1217. addSetting(config.goToMessagesFirst, 'Go to Messages after login')
  1218. .addEventListener('change', (e) => {config.goToMessagesFirst = e.target.checked;});
  1219. addSetting(config.highlightMessagesNotes, 'Highlights messages and notes')
  1220. .addEventListener('change', (e) => {config.highlightMessagesNotes = e.target.checked;});
  1221. addSetting(config.searchAndOpen, 'AutoSearch Attachment')
  1222. .addEventListener('change', (e) => {config.searchAndOpen = e.target.checked;});
  1223. addSetting(config.notificationSound, 'Play sound on new message')
  1224. .addEventListener('change', (e) => {config.notificationSound = e.target.checked;});
  1225. addSetting(config.hideProfilePics, 'Hide Profile Pics')
  1226. .addEventListener('change', (e) => {config.hideProfilePics = e.target.checked;});
  1227. settingsDialog.appendChild(document.createElement('span'));
  1228. settingsDialog.appendChild(document.createElement('br'));
  1229. settingsDialog.appendChild(document.createElement('span')); settingsDialog.lastChild.innerHTML = 'Functions Starting With ALT Key';
  1230. settingsDialog.appendChild(document.createElement('span'));
  1231. settingsDialog.appendChild(document.createElement('br'));
  1232. addSetting(config.hotkeys[ 0], '??') .addEventListener('keyup', (e) => {setHotkey( 0, e);});
  1233. addSetting(config.hotkeys[ 1], '??') .addEventListener('keyup', (e) => {setHotkey( 1, e);});
  1234. addSetting(config.hotkeys[ 2], 'Go to message box') .addEventListener('keyup', (e) => {setHotkey( 2, e);});
  1235. addSetting(config.hotkeys[ 3], 'Focus Textarea').addEventListener('keyup', (e) => {setHotkey( 3, e);});
  1236. addSetting(config.hotkeys[ 4], '??') .addEventListener('keyup', (e) => {setHotkey( 4, e);});
  1237. addSetting(config.hotkeys[ 5], '??') .addEventListener('keyup', (e) => {setHotkey( 5, e);});
  1238. addSetting(config.hotkeys[ 6], 'Go to Messages') .addEventListener('keyup', (e) => {setHotkey( 6, e);});
  1239. addSetting(config.hotkeys[ 7], 'Go to Stopped Messages') .addEventListener('keyup', (e) => {setHotkey( 7, e);});
  1240. addSetting(config.hotkeys[8], 'Go to Unread Messages') .addEventListener('keyup', (e) => {setHotkey(8, e);});
  1241. addSetting(config.hotkeys[9], 'Generate Hobbies') .addEventListener('keyup', (e) => {setHotkey(9, e);});
  1242. addSetting(config.hotkeys[10], 'SexIntressen') .addEventListener('keyup', (e) => {setHotkey(10, e);});
  1243. addSetting(config.hotkeys[11], 'Player Jobb') .addEventListener('keyup', (e) => {setHotkey(11, e);});
  1244. addSetting(config.hotkeys[12], 'Player Namn') .addEventListener('keyup', (e) => {setHotkey(12, e);});
  1245. addSetting(config.hotkeys[13], 'Target AutoNotes') .addEventListener('keyup', (e) => {setHotkey(13, e);});
  1246. addSetting(config.hotkeys[14], 'Target Aktuellt') .addEventListener('keyup', (e) => {setHotkey(14, e);});
  1247. addSetting(config.hotkeys[15], 'Player AutoNotes') .addEventListener('keyup', (e) => {setHotkey(15, e);});
  1248. addSetting(config.hotkeys[16], 'Player Stad') .addEventListener('keyup', (e) => {setHotkey(16, e);});
  1249. addSetting(config.hotkeys[17], 'Player Aktuellt') .addEventListener('keyup', (e) => {setHotkey(17, e);});
  1250. addSetting(config.hotkeys[18], 'Target Notes Utan Prompt') .addEventListener('keyup', (e) => {setHotkey(18, e);});
  1251. addSetting(config.hotkeys[19], '??') .addEventListener('keyup', (e) => {setHotkey(19, e);});
  1252.  
  1253. var settingsButton = menu.children[5].cloneNode();
  1254. settingsButton.id = 'SettingsButton';
  1255. settingsButton.setAttribute('rel', 'settings');
  1256. settingsButton.addEventListener('click', () => {
  1257. $('#SettingsDialog').dialog({
  1258. title: "Settings",
  1259. resizable: false,
  1260. modal: true,
  1261. position: 'top',
  1262. width: '400',
  1263. open: () => {
  1264. $('#SettingsDialog')[0].style.display = 'grid';
  1265. },
  1266. buttons: [
  1267. {
  1268. text: "Save",
  1269. click: () => {
  1270. console.log("Storing config");
  1271. localStorage.setItem('config', JSON.stringify(config));
  1272. console.log("\tConfig stored:");
  1273. console.log(localStorage.getItem('config'));
  1274. loadConfig();
  1275. //window.location.reload();
  1276. }
  1277. }
  1278. ]
  1279. });
  1280. });
  1281. $('button[rel="documents/manual.pdf"]')[0].insertAdjacentElement('afterend', settingsButton);
  1282. $('button[rel="documents/manual.pdf"]')[0].insertAdjacentText('afterend', '\n');
  1283. $('#SettingsButton').button();
  1284. settingsButton.children[0].innerHTML = 'Settings';
  1285. document.getElementById('informDialog').insertAdjacentElement('afterend', settingsDialog);
  1286.  
  1287. console.log("\tSettings button created");
  1288.  
  1289. }
  1290.  
  1291. function createCounters() {
  1292. console.log("Creating counter elements");
  1293. var menu = document.getElementById('topmenu1');
  1294. menu.style.position = 'relative';
  1295.  
  1296. var counters = document.createElement('div');
  1297. counters.id = 'counters-container';
  1298. counters.style.position = 'absolute';
  1299. counters.style.left = '39%';
  1300. counters.style.top = '10px';
  1301. counters.style.display = 'block';
  1302.  
  1303.  
  1304. var column1 = document.createElement('div');
  1305. column1.id = 'counters-column1';
  1306. column1.style.display = 'inline-block';
  1307. column1.style.marginLeft = '1em';
  1308. column1.style.verticalAlign = 'top';
  1309. column1.appendChild(document.createElement('span')); column1.lastChild.innerHTML = 'Sent: ';
  1310. column1.appendChild(document.createElement('span'));
  1311. column1.appendChild(document.createElement('br'));
  1312. column1.appendChild(document.createElement('span')); column1.lastChild.innerHTML = 'Earned: €';
  1313. column1.appendChild(document.createElement('span'));
  1314. column1.appendChild(document.createElement('br'));
  1315.  
  1316.  
  1317. var column2 = document.createElement('div');
  1318. column2.id = 'counters-column2';
  1319. column2.style.display = 'inline-block';
  1320. column2.style.marginLeft = '2em';
  1321. column2.style.verticalAlign = 'top';
  1322. column2.appendChild(document.createElement('span')); column2.lastChild.innerHTML = 'This week: ';
  1323. column2.appendChild(document.createElement('span'));
  1324. column2.appendChild(document.createElement('br'));
  1325. column2.appendChild(document.createElement('span')); column2.lastChild.innerHTML = 'Earned: €';
  1326. column2.appendChild(document.createElement('span'));
  1327. column2.appendChild(document.createElement('br'));
  1328. column2.appendChild(document.createElement('span')); column2.lastChild.innerHTML = 'Rate: €';
  1329. column2.appendChild(document.createElement('span'));
  1330. column2.appendChild(document.createElement('br'));
  1331.  
  1332. var column4 = document.createElement('div');
  1333. column4.id = 'counters-column4';
  1334. column4.style.display = 'inline-block';
  1335. column4.style.marginLeft = '3em';
  1336. column4.style.verticalAlign = 'top';
  1337. column4.appendChild(document.createElement('span')); column4.lastChild.innerHTML = 'Time: ';
  1338. column4.appendChild(document.createElement('span'));
  1339. column4.appendChild(document.createElement('br'));
  1340. column4.appendChild(document.createElement('span')); column4.lastChild.innerHTML = 'Last Msg: ';
  1341. column4.appendChild(document.createElement('span'));
  1342.  
  1343. var column5 = document.createElement('div');
  1344. column5.id = 'counters-column5';
  1345. column5.style.display = 'none';
  1346. column5.style.marginLeft = '3em';
  1347. column5.style.verticalAlign = 'top';
  1348. column5.appendChild(document.createElement('button')); column5.lastChild.innerHTML = 'Clear';
  1349.  
  1350.  
  1351.  
  1352. counters.appendChild(column1);
  1353. counters.appendChild(column2);
  1354. counters.appendChild(column4);
  1355. counters.appendChild(column5);
  1356. menu.insertBefore(counters, menu.lastElementChild);
  1357.  
  1358. var menuu = document.getElementById('main');
  1359. menuu.style.position = 'relative';
  1360.  
  1361. var counterss = document.createElement('div');
  1362. counterss.id = 'counters-container2';
  1363. counterss.style.position = 'absolute';
  1364. counterss.style.left = '20.8vw';
  1365. counterss.style.width = '56.6vw';
  1366. counterss.style.display = 'block';
  1367.  
  1368.  
  1369. var column6 = document.createElement('textarea');
  1370. column6.tabIndex = '2';
  1371. column6.className = 'counters-column6';
  1372. column6.placeholder = 'Click And Paste Your Text Here!';
  1373. column6.style.position = 'relative';
  1374. column6.style.width = 'inherit';
  1375. column6.rows = '2';
  1376. column6.style.marginTop = '10px';
  1377. column6.style.borderRadius = '6px';
  1378. column6.style.background = '#636363';
  1379. column6.style.outline = 'none';
  1380. column6.style.border = 'none';
  1381. column6.style.visibility = 'hidden';
  1382. column6.style.placeholder = '#003da0';
  1383.  
  1384.  
  1385. counterss.appendChild(column6);
  1386. menuu.insertBefore(counterss, menuu.firstElementChild);
  1387.  
  1388.  
  1389. var styleNode = document.createElement("style");
  1390. document.body.appendChild(styleNode);
  1391.  
  1392. //CSS Code//CSS Code//
  1393.  
  1394. //Body
  1395. styleNode.innerHTML = "html { background-color: #636363 !important; }\n";
  1396. styleNode.innerHTML += "body { background-color: #636363 !important; font-family: merriweather, serif !important; outline: none !important; }\n";
  1397. styleNode.innerHTML += "::-webkit-scrollbar { display: none !important; }\n";
  1398.  
  1399. //Lay out Top
  1400. styleNode.innerHTML += ".layout-top { position: fixed !important; z-index: 1 !important; }\n";
  1401. styleNode.innerHTML += "#topmenu1 { background-color: #636363 !important; font-family: merriweather, serif !important; border-style: none !important; }\n";
  1402. styleNode.innerHTML += "#topmenu2 { display: none !important; }\n";
  1403. styleNode.innerHTML += "#counters-container { font-size: 14px; font-weight: bold !important; }\n";
  1404.  
  1405. //Midd Section//
  1406.  
  1407. //Upper Textfield
  1408. styleNode.innerHTML +=
  1409. "::placeholder { text-align: center !important; color: #012359 !important; font-size: 15px !important; font-weight: bold !important; }\n";
  1410. styleNode.innerHTML +=
  1411. "textarea.counters-column6 { top: 100px; font-size: 13px !important; font-weight: bold !important; position: fixed !important; z-index: 5; tab-index: 1 !important; }\n";
  1412.  
  1413. //Upper Textfield On Focus
  1414. styleNode.innerHTML +=
  1415. "textarea.counters-column6:focus { border: 1px solid rgba(81, 203, 238, 1) !important; box-shadow: 0 0 7px rgba(81, 203, 238, 1) !important; background: #919191 !important; }\n";
  1416.  
  1417. //Information On Top of Lower Textfield Hidden Objects
  1418. styleNode.innerHTML += "div.from-to { visibility: hidden !important; }\n";
  1419. styleNode.innerHTML += "div.subject{ display: none !important; }\n";
  1420. styleNode.innerHTML += ".message-subject { display: none !important; }\n";
  1421.  
  1422. //Information On Top of Lower Textfield Non Hidden Objects
  1423. styleNode.innerHTML +=
  1424. ".from-to.start-date { visibility: visible !important; position: absolute !important; left: 35% !important; background: #919191 !important; font-weight: bold !important; font-size: 17px !important; font-family: erriweather, serif !important; border-radius: 7px !important; }\n";
  1425. styleNode.innerHTML += ".green { font-size: 11px !important; font-family: merriweather, serif !important; position: relative !important; margin-right: 5px !important; }\n";
  1426.  
  1427. //Lower Texfield Area
  1428. styleNode.innerHTML += ".conversation-fill { position: fixed !important; margin-left: 5px !important; margin-top: 43px !important; z-index: 0 }\n";
  1429. styleNode.innerHTML += ".message.read { !important; padding: 0 5px !important; font-weight: bold !important; }\n";
  1430. styleNode.innerHTML += "textarea.conversation-message-text, ul.emoji-preset, .message-submit-button, .message-addmedia-button, .message-delmedia-button { top: 36px !important; position: relative !important; }\n";
  1431. styleNode.innerHTML +=
  1432. "textarea.conversation-message-text { width: 56.7vw !important; background-color: #636363 !important; outline: none !important; border-radius: 6px !important; font-size: 15px !important; font-family: merriweather, serif !important; font-weight: bold !important; }\n";
  1433.  
  1434. //Lower Texfield Area On Focus
  1435. styleNode.innerHTML +=
  1436. "textarea.conversation-message-text:focus { border: 1px solid rgba(81, 203, 238, 1) !important; box-shadow: 0 0 7px rgba(81, 203, 238, 1) !important; background: #919191 !important; }\n";
  1437.  
  1438. //Objects Under Lower Textfield Area
  1439. styleNode.innerHTML += ".specialdatepicker, #future, .message-send-direct, .message-text span { display: none !important; }\n";
  1440. styleNode.innerHTML += " span.ui-button-text, span.emoji.emoji-sizer { display: block !important; }\n";
  1441.  
  1442. //Incoming Messages Area
  1443. styleNode.innerHTML += "#conversation-messages { top: 25px !important; height: 400px !important; margin-left: 3px !important; font-weight: bold !important; position: relative !important; overflow-y: auto; }\n";
  1444. styleNode.innerHTML += ".tr .td3 .message-text {!important; font-size: 16px !important; font-weight: bold !important; font-family: robot !important; }\n";
  1445. styleNode.innerHTML += ".tr .td3 .from-to { visibility: visible !important; }\n";
  1446. styleNode.innerHTML += ".label { }\n";
  1447. styleNode.innerHTML += "#showmore { position: relative !important; top: 45px !important; background: #919191 !important; }\n";
  1448. //Side Sections//
  1449. //Hidden Objects
  1450. styleNode.innerHTML += "div.bar-title { display: none !important; }\n";
  1451.  
  1452. //Profiles and Notes
  1453. styleNode.innerHTML += ".conversation-left, .conversation-right { background: #636363 !important; font-size: 13px !important; font-family: merriweather, serif !important; }\n";
  1454. styleNode.innerHTML += ".block-content, .player-note, .ui-draggable, .ui-widget-content, .ui-widget-header { background: #919191 !important; }\n";
  1455. styleNode.innerHTML += ".player-last-notes { font-size: 13px !important; }\n";
  1456. styleNode.innerHTML += ".note-cnt { border-left: 0px !important; border-top: 1px !important; font-size: 11px !important; font-weight: bold !important; border-color: #000000 padding: 2px !important; }\n";
  1457. styleNode.innerHTML += ".note_title { border-bottom: 1px solid #000000 !important; font-size: 12px !important; font-weight: bold !important; background: #919191 !important; }\n";
  1458. styleNode.innerHTML += "textarea.target-note-content, textarea.player-note-content, .player-note-content.input, .target-note-content.input { outline: none !important; background-color: #919191 !important; border-radius: 6px !important; }\n";
  1459. styleNode.innerHTML += "select.target-note-categories, select.player-note-categories { outline: none !important; background-color: #919191 !important; border-radius: 6px !important; margin-top: 5px !important; }\n";
  1460.  
  1461. //Textarea Notes On Focus
  1462. styleNode.innerHTML +=
  1463. "textarea.target-note-content:focus, textarea.player-note-content:focus, .player-note-content.input:focus, .target-note-content.input:focus { border: 1px solid rgba(81, 203, 238, 1) !important; box-shadow: 0 0 7px rgba(81, 203, 238, 1) !important; background: #919191 !important; border-radius: 6px !important; outline: none !important;}\n";
  1464.  
  1465. //Buttons//
  1466. styleNode.innerHTML += "button { background-color: #636363 !important; border: none !important; }\n";
  1467. styleNode.innerHTML += " .ui-state-default { font-weight: bold !important; background: none !important; color: #000000 !important; border: none !important; font-family: merriweather, serif !important; }\n";
  1468. styleNode.innerHTML += "button.navigation span { font-size: 15px !important; letter-spacing: 5px !important; }\n";
  1469. //Buttons Hover//
  1470. styleNode.innerHTML += "button.navigation span:hover { border: 1px solid rgba(81, 203, 238, 1) !important; box-shadow: 0 0 7px rgba(81, 203, 238, 1) !important; background: #919191 !important; border-radius: 6px !important; }\n";
  1471. styleNode.innerHTML +=
  1472. " select.target-note-categories:hover, select.player-note-categories:hover, button:hover { border: 1px solid rgba(81, 203, 238, 1) !important; box-shadow: 0 0 7px rgba(81, 203, 238, 1) !important; background: #919191 !important; border-radius: 6px !important; }\n";
  1473.  
  1474. //Hidden Buttons//
  1475. styleNode.innerHTML += "button[rel='documents/manual.pdf'], button[rel='Announcements'] { display: none !important; }\n";
  1476.  
  1477. //Loading Screen
  1478. styleNode.innerHTML += ".message-message { background-color: #636363 !important; }\n";
  1479. styleNode.innerHTML += ".title { visibility: hidden !important; }\n";
  1480.  
  1481. console.log("\tCounter elements created");
  1482. }
  1483.  
  1484.  
  1485. function calcRate(messages) {
  1486. if(messages >= 1976)
  1487. return 0.19;
  1488. if(messages >= 1576)
  1489. return 0.16;
  1490. if(messages >= 776)
  1491. return 0.14;
  1492. return 0.12;
  1493. }
  1494.  
  1495. function calcEarned(rate, normal, bonus, other) {
  1496. return rate * (normal + bonus) +
  1497. 0.02 * bonus +
  1498. 0.12 * other;
  1499. }
  1500.  
  1501.  
  1502. function getStats() {
  1503. function updateCounters(stats) {
  1504. function statsForDate(date) {
  1505. var normal = parseInt(date.replied_messages_normal) | 0;
  1506. var peakHour = parseInt(date.replied_messages_peakhour) | 0;
  1507. var weekend = parseInt(date.replied_messages_saturday) +
  1508. parseInt(date.replied_messages_sunday) +
  1509. parseInt(date.replied_messages_specialtrigger) | 0;
  1510. var other = parseInt(date.replied_favorites) +
  1511. parseInt(date.replied_flirts) +
  1512. parseInt(date.replied_matches) +
  1513. parseInt(date.replied_proposals) +
  1514. parseInt(date.replied_stopped) | 0;
  1515. return [normal, peakHour + weekend, other];
  1516. }
  1517. console.log("Updating counters");
  1518. var date = new Date().toLocaleString('sv-SE', {
  1519. year: 'numeric',
  1520. month: '2-digit',
  1521. day: '2-digit'
  1522. });
  1523. var sentNormal, sentBonus, other, normalWeek=0, bonusWeek=0, otherWeek=0, rate,
  1524. column1 = document.getElementById('counters-column1'),
  1525. column2 = document.getElementById('counters-column2'),
  1526. column4 = document.getElementById('counters-column4'),
  1527. column5 = document.getElementById('counters-column5');
  1528. column1.children[1].innerHTML = '0';
  1529. column1.children[4].innerHTML = '0';
  1530. for(const s of stats) {
  1531. [sentNormal, sentBonus, other] = statsForDate(s);
  1532. normalWeek += sentNormal;
  1533. bonusWeek += sentBonus;
  1534. otherWeek += other;
  1535. if(s.date == date) {
  1536. rate = calcRate(normalWeek + bonusWeek);
  1537. column1.children[1].innerHTML = other;
  1538. column1.children[4].innerHTML = (rate * (sentNormal + sentBonus + other)).toFixed(2);
  1539. console.log("\tCounters for today updated");
  1540. break;
  1541. }
  1542. }
  1543. column2.children[1].innerHTML = otherWeek;
  1544. column2.children[4].innerHTML = calcEarned(rate, normalWeek, bonusWeek, otherWeek).toFixed(2);
  1545. column2.children[7].innerHTML = rate;
  1546.  
  1547. console.log("\tCounters updated");
  1548. }
  1549. console.log("Getting statistics");
  1550. $.ajax({
  1551. url: '/ajax/stats/action/getStats',
  1552. dataType: 'json',
  1553. type: 'POST',
  1554. data: {
  1555. year: new Date().getFullYear(),
  1556. weekno: $.datepicker.iso8601Week(new Date()),
  1557. pagination: {
  1558. current: 1,
  1559. drawPagination: false,
  1560. perPage: 20,
  1561. total: 1
  1562. },
  1563. type: 'mine'
  1564. },
  1565. success: function (response) {
  1566. console.log("getStats AJAX call success");
  1567. updateCounters(response.data.result);
  1568. },
  1569. complete: function () {}
  1570. });
  1571. console.log("\tStatistics gotten");
  1572. }
  1573.  
  1574.  
  1575.  
  1576. var h1 = document.getElementById('counters-column4'),
  1577. start = document.getElementById('counters-column5'),
  1578. h2 = document.getElementById('counters-column4'),
  1579. seconds = 0, minutes = 0, hours = 0,
  1580. t;
  1581.  
  1582. function add() {
  1583. seconds++;
  1584. if (seconds >= 60) {
  1585. seconds = 0;
  1586. minutes++;
  1587. if (minutes >= 60) {
  1588. minutes = 0;
  1589. hours++;
  1590. }
  1591. }
  1592.  
  1593. h1.children[1].textContent = (minutes ? (minutes > 9 ? minutes : "0" + minutes) : "00") + ":" + (seconds > 9 ? seconds : "0" + seconds);
  1594.  
  1595. timer();
  1596. }
  1597. function timer() {
  1598. t = setTimeout(add, 1000);
  1599. }
  1600. timer();
  1601.  
  1602.  
  1603. /* Start button */
  1604. start.onclick = function() {
  1605.  
  1606. h2.children[4].textContent = leftPad(minutes) + ":" + leftPad(seconds);
  1607. h1.children[1].innerHTML = "00:00";
  1608. seconds = 0; minutes = 0; hours = 0;
  1609. return false;
  1610. }
  1611. return true;
  1612.  
  1613.  
  1614.  
  1615.  
  1616.  
  1617. function leftPad(value) {
  1618. return value < 10 ? ('0' + value) : value;
  1619. }
Add Comment
Please, Sign In to add comment