Guest User

Untitled

a guest
Feb 19th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 85.39 KB | None | 0 0
  1. // ==UserScript==
  2. // @name SE Stopped Auto Reply 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', 'Men hej', 'Hej hej', 'Min kära', 'Kära du', 'Min fina man', 'Underbara du', 'Min finaste', 'Käraste' ];
  524. var start2 = [ 'jag saknar dig!', 'jag har tänkt på dig.', 'mina tankar har snurrat kring dig.', 'mina tankar har ägnat sig åt dig.', 'jag har saknat dig.', 'känslorna bubblar för dig!', 'känslorna dom har inte svalnat.', 'jag hoppas du är kvar?', 'jag behöver dig!', 'du har varit i mina tankar.', 'jag har väntat på dig.', 'det kan gå men jag finns kvar. Är du?', 'jag åtrår dig men var är du?', 'jag vill vara i din famn.', 'det kan gå. Drömde om dig!', 'drömmarna spelat ett spratt med mig.', 'du har intagit mitt hjärta.', 'jag har väntat och väntat på dig.', 'jag hoppas på att vi inte är färdiga med varandra?', 'tiden kan gå men var är du?'];
  525. var startWhole1 = Math.floor(Math.random() * start1.length);
  526. var startWhole2 = Math.floor(Math.random() * start2.length);
  527. var midd1 = ['Jag känner bara att du och jag borde ha mer', 'Inte ska vi väl låta det vara så tyst mellan oss? Vi borde väl tänka på oss', 'Vi måste tänka mer på oss tycker jag', 'När hade du tänkt att höra av dig då', 'Det finns inget jag hellre vill än höra från dig', 'Kanske jag missförstod men jag ville ju höra från dig', 'Blev det så galet eller för jag vill ju ha dig', 'Vad är det vi väntar på? Varför tystnaden egentligen', 'Jag vet inte men jag gillar inte att det blev så tyst', 'Det borde inte finnas denna tystnad', 'Varför försvann du nu egentligen? Jag vill ju mer', 'Jag hoppas att vi kommer att få mer kontakt',
  528. 'Jag väntar på din kontakt men kommer ju inte', 'Har jag väntat på dig i förgäves eller? Jag tänker på dig', 'Inte kommer det väl fortsätta såhär? Behöver dig', 'Längtar efter att få höra från dig igen', 'Hoppas du inte glömt mig', 'Hoppas att jag får höra från dig', 'Kommer du kontakta mig igen eller? Jag börjar undra', 'Hoppas jag för inget om att du finns kvar hos mig? Behöver dig', 'Man börjar undra om du är kvar', 'Känns inte som du tänker på mig längre. Men du jag gör det', 'Det finns väl en chans att du är kvar', 'Är du kvar eller för jag klarar det inte längre', 'Jag behöver dig tillbaka nu för detta är för tyst',
  529. 'Saknar du inte mig eller? Jag börjar ju undra', 'Tänker du på mig? Kan du gissa att jag gör', 'Finns inget hellre jag vill idag än höra från dig', 'Du har säkeert tänkt var dag på att höra av dig men fått något problem? Jag vet inte vad jag ska tänka', 'Tycker du inte det är trist? Denna tystnaden tär på mig', 'Visst är du kvar? Jag kan inte tro annat', 'Finns det en chans att du är kvar? Jag tänker på dig väldigt mycket', 'Borde vi inte hålla bättre kontakt', 'Ska vi verkligen hålla det så tyst här? Jag mår inte bra av det', 'Ledsen om något blivit fel mellan oss men jag har menat väl', 'Något fel? Har jag gjort något? Du finns i mitt hjärta',
  530. 'Inte gick vi så illa? Det är för tyst', 'Hoppas att du mår bra', 'Något jag kan göra? Känner det är så dött mellan oss', 'Jag kände jag måste höra av mig', 'Antar jag får höra av mig till dig', 'Då du inte skickar får jag väl börja', 'Hoppas du blir glad att jag hör av mig', 'Tänker mycket på dig och hör av mig nu', 'Skänkt mig en tanke? Skriver ihopp om att höra från dig', 'Ser du detta? Hör gärna av dig då', 'Tänka sig att du inte hört av dig', 'Vad har hänt dig egentligen? Lite orolig'];
  531. var midd2 = ['tro inte för en sekund att jag glömt dig.', 'har inte släppt dig ännu jag tänker på dig.', 'har nog aldrig tänkt så mycket på någon förr.', 'vad kan vi göra för att bättra detta?', 'hur hade du tänkt att vi gör nu då?', 'det känns inte som att vi är sugna längre?', 'jag vill inget hellre än att få höra från dig.', 'kommer du höra av dig till mig?', 'nog ska vi väl göra något åt detta nu!', 'mitt hjärta tillhör bara dig förstår du det?', 'jag har tro på dig och mig som ett par.', 'visst ska vi väl inte förbli såhär tysta?', 'känns lite väl tyst nu och det gör ont i mig att vara borta från dig.', 'jag trodde att du verkligen skulle höra av dig igen vid detta laget.',
  532. 'jag trodde du skulle hört av dig redan.', 'hur hade du tänkt dig handera oss nu?', 'har förhoppningar om att du svarar mig.', 'tänkte du kan väl inte verkligen ha glömt mig?', 'känner du att du är intresserad av mig ännu?', 'finns inte en chans att jag glömmer dig.', 'kommer inte för en sekund glömma bort dig fina du.', 'inte kommer vi väl sluta såhär?', 'du har väl inte gett upp mig nu?', 'vi har så mycket att se fram emot.', 'det finns så mycket vi har att avnjuta i framtiden.', 'visst vill du inte förlora mig?', 'kan inte tro på att vi skulle tappa varandra nu?', 'vi har allt att se fram emot!', 'inte kommer du väl ignorera dina känslor?', 'ignorera inte mina känslor nu.',
  533. 'jag känner mig inte så åtråvärd just nu men det är väl fel?', 'inte har jag något att oroa mig för hoppas jag?', 'kan inte sluta tänka om du lämnat mig?', 'behöver dig i mitt liv och vardag!','kan inte vara utan dig längre om dagen utan måste få höra från dig lite min fina!', 'kommer du inte höra av dig någon dag?', 'behöver dig mer än någonsin kära du.', 'känner lite att jag inte kan vara utan dig.', 'ska vi inte få fart på detta igen tycker du?', 'du vill kanske inte köra på här men är det inte lite för tyst ändå?', 'jag vet vad du vill men nog ska vi inte tappa bort varandra såhär?', 'glöm mig inte nu jag ville bara påminna dig.', 'hoppas att du mår bra verkligen för jag tänker så på dig.',
  534. 'gud vad jag hoppas att inget hänt dig för betyder mycket för mig.', 'du betyder bara så enormt mycket för mig.'];
  535. var middWhole1 = Math.floor(Math.random() * midd1.length);
  536. var middWhole2 = Math.floor(Math.random() * midd2.length);
  537. 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',
  538. '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',
  539. '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',
  540. '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',
  541. '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',
  542. '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',
  543. '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',
  544. 'Ä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'];
  545. var middkåt2 = ['vill rida dig och hoppa 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.',
  546. '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.',
  547. '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.',
  548. '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 fatasier ä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.',
  549. '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.',
  550. '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!'];
  551. var middkåtWhole1 = Math.floor(Math.random() * middkåt1.length);
  552. var middkåtWhole2 = Math.floor(Math.random() * middkåt2.length);
  553. var end1 = ['Hoppas allt är bra och att du hör av dig.', 'Jag lever på hoppet om att du hör av dig.', 'Kanske du svarar eller inte men jag finns här för dig!', 'Ser fram emot att få höra från dig igen.', 'Jag tänker på dig hoppas du visar att du gör det med.', 'Ge mig gärna ett snabbt litet svar?', 'Kom gärna tillbaka med något jag är orolig.', 'Väldigt orolig då man inte hört från dig så ge mig något?', 'Ser fram emot ditt svar.', 'Skulle göra min dag om du hörde av dig!', 'Ta gärna ett par minuter för att svara mig.', 'Hoppas verkligen att du inte glömt mig?', 'Låter detta inte bra fina du?', 'Vad tycker du om detta min kära?', 'Kommer kolla efter ditt svar var timme!', 'Ger mig inte att få ett svar från dig! Så återkom?', 'Hur länge kommer jag behöva vänta?',
  554. '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?', '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?',
  555. 'Tror du inte att jag duger?', 'Glöm inte svara mig nu fina du.', 'Du och jag kan väl bli något fint?'];
  556. 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'];
  557. var endWhole1 = Math.floor(Math.random() * end1.length);
  558. var endWhole2 = Math.floor(Math.random() * end2.length);
  559.  
  560. var Fras1 = start1[startWhole1] + ' som ' + start2[startWhole2] + ' ' + midd1[middWhole1] + ' och ' + midd2[middWhole2] + ' ' + end1[endWhole1] + ' ' + end2[endWhole2];
  561. var Fras2 = start1[startWhole1] + ' som ' + start2[startWhole2] + ' ' + middkåt1[middkåtWhole1] + ' och ' + middkåt2[middkåtWhole2] + ' ' + end1[endWhole1] + ' ' + end2[endWhole2];
  562. var Fras3 = middkåt1[middkåtWhole1] + ' och ' + middkåt2[middkåtWhole2] + ' ' + end1[endWhole1] + ' ' + end2[endWhole2];
  563. var Fras4 = start1[startWhole1] + ' som ' + start2[startWhole2] + ' ' + end1[endWhole1] + ' ' + end2[endWhole2];
  564. var Fras5 = start1[startWhole1] + ' som ' + start2[startWhole2] + ' ' + middkåt1[middkåtWhole1] + ' och ' + middkåt2[middkåtWhole2];
  565. var Fras6 = midd1[middWhole1] + ' och ' + midd2[middWhole2] + ' ' + end1[endWhole1] + ' ' + end2[endWhole2];
  566.  
  567. var randFras = [Fras1, Fras2, Fras3, Fras4, Fras5, Fras6];
  568. var randFrasMath = Math.floor(Math.random() * randFras.length);
  569. var FrasResult = randFras[randFrasMath];
  570.  
  571.  
  572. $('.counters-column6').val(FrasResult);
  573. var Text = $(".counters-column6").val();
  574. $(".counters-column6").val('');
  575. $(".conversation-message-text").autotype(Text);
  576.  
  577. setTimeout(function() {
  578. $('.message-submit-button').trigger("click");
  579. window.location.reload(true);
  580. }, 8000);
  581.  
  582.  
  583. }
  584.  
  585. }
  586.  
  587. function shimFunctions() {
  588. /*
  589. if(config.showCounters) {
  590. console.log("Adding statistics counters");
  591. loadConversation = (function() {
  592. var cached_loadConversation = loadConversation;
  593. return function() {
  594. var result = cached_loadConversation.apply(this, arguments);
  595. afterConversationLoaded();
  596. return result;
  597. };
  598. })();
  599. }
  600. /*/
  601. console.log("Adding statistics counters????");
  602. if(config.showCounters) {
  603. console.log("Adding statistics counters");
  604. loadConversation = new Function(
  605. "id",
  606. "doPreload",
  607. "review",
  608. "fromClaimNext",
  609. "claimNextType",
  610. loadConversation.toString()
  611. .replace("userIdleTime = 0;", "userIdleTime = 0;\n\t\tafterConversationLoaded();")
  612. .replace(/^function[^{]+{/i,"")
  613. .replace(/}[^}]*$/i, "")
  614. );
  615. }
  616. //*/
  617.  
  618. }
  619.  
  620. function registerHotkeys() {
  621. console.log("Registering hotkeys");
  622. var helperFunctions = new Map();
  623. var helpFunctions = new Map();
  624.  
  625. helperFunctions.set(config.hotkeys[0], //
  626. () => {
  627.  
  628. var convId = $('#conversation-content .message-last-in-id').val(),
  629. messId = 'table-msg-row table-msg-row-' + (convId),
  630. messageTable = document.getElementsByClassName(messId),
  631. f = document.getElementById("conversation-messages").getElementsByClassName('message-text');
  632.  
  633. for(let e of f) {
  634. let parentParent = f.parentElement.parentElement;
  635. if(parentParent.textContent.slice(1).indexOf(getTargetName()) > -1) {
  636. let e = document.getElementsByClassName('conversation-attachment')[0];
  637. if(e !== undefined) {
  638. e.click();
  639.  
  640. };
  641.  
  642. // Adds :containsNC - non case-sensitive :contains
  643. $.extend($.expr[":"], {
  644. "containsNC": function(elem, i, match, array) {
  645. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  646. }
  647. });
  648. // Input Type About Attachment
  649. var text = prompt('Target note:', );
  650. // Insert text to note
  651. $('.target-note-content.area').val(text);
  652. // Select note category
  653. var category = 'Bild';
  654. // Categories
  655. $('select.target-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  656. // Save note
  657. $('.target-save-note').trigger('click')
  658. //Focus TextField
  659. window.scroll(0, 0);
  660. $( ".conversation-message-text" ).focus();
  661.  
  662. } else{
  663. $( ".conversation-message-text" ).focus();
  664.  
  665. }
  666. }
  667.  
  668.  
  669. });
  670. helperFunctions.set(config.hotkeys[1], //
  671. () => {
  672.  
  673.  
  674.  
  675. let e = document.getElementsByClassName('conversation-attachment')[0];
  676. if(e !== undefined) {
  677. e.click();
  678. }
  679.  
  680.  
  681. });
  682. helperFunctions.set(config.hotkeys[2], focusMessageBox); // Go to message box
  683. helperFunctions.set(config.hotkeys[3], // Focus Custom TextField(Column6)
  684. () => {
  685. //Focus TextField
  686. $( ".counters-column6" ).focusTextToEnd();
  687. });
  688. helperFunctions.set(config.hotkeys[4], // Add image
  689. () => {
  690. $('.conversation-show-more').trigger('click');
  691. });
  692. helperFunctions.set(config.hotkeys[5], // Remove image
  693. () => {
  694. let e = document.getElementsByClassName('message-delmedia-button')[0];
  695. if(e !== undefined) {
  696. e.click();
  697. }
  698. });
  699. helperFunctions.set(config.hotkeys[6], // Go to Messages
  700. () => {
  701. $('button[rel="messages"]').click();
  702. });
  703. helperFunctions.set(config.hotkeys[7], // Go to Stopped Messages
  704. () => {
  705. $('button[rel="stopped"]').click();
  706. });
  707. helperFunctions.set(config.hotkeys[8], // Go to Unread Messages
  708. () => {
  709. $('button[rel="unread"]').click();
  710. });
  711. helperFunctions.set(config.hotkeys[9], // Generate Hobbies and save to Notes
  712. () => {
  713. // Adds :containsNC - non case-sensitive :contains
  714. $.extend($.expr[":"], {
  715. "containsNC": function(elem, i, match, array) {
  716. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  717. }
  718. });
  719.  
  720. 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'];
  721.  
  722. var n = ~~(Math.random() * 4) + 2;
  723.  
  724. var rand = [];
  725. do {
  726. rand[rand.length] = interests.splice(Math.floor(Math.random() * interests.length), 1)[0];
  727. } while (rand.length < n);
  728.  
  729. var hoBB = rand;
  730.  
  731. // Extract target name
  732. var targetName = $('.target-name').text();
  733. // Trim period from target name
  734. var targetNamee = targetName.substr(1);
  735. // Insert text to note
  736. $('.player-note-content.area').val(hoBB);
  737. var f = $('.player-note-content.area').val();
  738. var e = $('.player-note-content.area');
  739. $(e).val( f + ' (' + targetNamee + ')');
  740. // Select note category
  741. var category = 'Hobby';
  742.  
  743. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  744. // Save note
  745. $('.player-save-note').trigger('click')
  746.  
  747. //Autotype text to Message
  748. $('.conversation-message-text').autotype(f);
  749. });
  750. helperFunctions.set(config.hotkeys[10], // Generera Sexintressen + spara i Notes
  751. () => {
  752. // Adds :containsNC - non case-sensitive :contains
  753. $.extend($.expr[":"], {
  754. "containsNC": function(elem, i, match, array) {
  755. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  756. }
  757. });
  758.  
  759. 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'];
  760.  
  761. var n = ~~(Math.random() * 4) + 2;
  762.  
  763. var rand = [];
  764. do {
  765. rand[rand.length] = interests.splice(Math.floor(Math.random() * interests.length), 1)[0];
  766. } while (rand.length < n);
  767.  
  768. var sex = rand;
  769.  
  770. // Extract target name
  771. var targetName = $('.target-name').text();
  772. // Trim period from target name
  773. var targetNamee = targetName.substr(1);
  774. // Insert text to note
  775. $('.player-note-content.area').val(sex);
  776. var f = $('.player-note-content.area').val();
  777. var e = $('.player-note-content.area');
  778. $(e).val( f + ' (' + targetNamee + ')');
  779.  
  780. // Select note category
  781. var category = 'Sexuella preferenser';
  782.  
  783. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  784. // Save note
  785. $('.player-save-note').trigger('click')
  786.  
  787. //Autotype text to Message
  788. $('.conversation-message-text').autotype(f);
  789. });
  790. helperFunctions.set(config.hotkeys[11], // Player Jobb+Spara i Notes
  791. () => {
  792. // Adds :containsNC - non case-sensitive :contains
  793. $.extend($.expr[":"], {
  794. "containsNC": function(elem, i, match, array) {
  795. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  796. }
  797. });
  798.  
  799. //Extract Player Proffesion//
  800. var playerjob = $('.profession').text().toLowerCase();
  801. // Extract target name
  802. var targetName = $('.target-name').text();
  803. // Trim period from target name
  804. var targetNamee = targetName.substr(1);
  805. // Insert text to note
  806. $('.player-note-content.area').val(playerjob + ' (' + targetNamee + ')');
  807. // Select note category
  808. var category = 'jobb/utbildning';
  809. // Categories
  810. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  811. // Save note
  812. $('.player-save-note').trigger('click')
  813.  
  814. //paste proffesion//
  815.  
  816. $('.conversation-message-text').autotype(playerjob);
  817. });
  818. helperFunctions.set(config.hotkeys[12], // Retrieve Player Name and Save to Notes
  819. () => {
  820. // Adds :containsNC - non case-sensitive :contains
  821. $.extend($.expr[":"], {
  822. "containsNC": function(elem, i, match, array) {
  823. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  824. }
  825. });
  826.  
  827. var playername = $('.real_name').text();
  828. // Extract target name
  829. var targetName = $('.target-name').text();
  830. // Trim period from target name
  831. var targetNamee = targetName.substr(1);
  832. // Insert text to note
  833. $('.player-note-content.area').val(playername + ' (' + targetNamee + ')');
  834. // Select note category
  835. var category = 'namn';
  836. // Categories
  837. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  838. // Save note
  839. $('.player-save-note').trigger('click')
  840.  
  841. //Autotype text to Message
  842. $('.conversation-message-text').autotype(playername);
  843. });
  844.  
  845. helperFunctions.set(config.hotkeys[13], // Target Notes+Autoval av Kategori
  846. () => {
  847. // Adds :containsNC - non case-sensitive :contains
  848. $.extend($.expr[":"], {
  849. "containsNC": function(elem, i, match, array) {
  850. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  851. }
  852. });
  853.  
  854. // Extract selected text
  855. var note = window.getSelection().toString();
  856. // Modify and verify selected text
  857. var text = prompt('Target note:', note);
  858. // Insert text to note
  859. $('.target-note-content.area').val(text);
  860. // Select note category
  861. var category;
  862. if (text.match(/bild|selfie|kuk|gif/i)) {
  863. var category = 'Bilder';
  864. } else if (text.match(/singel|barn|son|söner|döttrar|dotter|fru|särbo|sambo|gift|skild|änk/i)) {
  865. var category = 'Familj/Relationer';
  866. } 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)) {
  867. var category = 'Jobb/Utbildning';
  868. } 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)) {
  869. var category = 'Hobby';
  870. } else if (text.match(/bor i|Karlskrona|Karlshamn|Borås|Borlänge/i)) {
  871. var category = 'Stad';
  872. } 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)) {
  873. var category = 'Namn';
  874. } 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)) {
  875. var category = 'Namn';
  876. } 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)) {
  877. var category = 'Namn';
  878. } 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)) {
  879. var category = 'Namn';
  880. } 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)) {
  881. var category = 'Namn';
  882. } 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)) {
  883. var category = 'Namn';
  884. } 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)) {
  885. var category = 'Namn';
  886. } 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)) {
  887. var category = 'Sexuella preferenser';
  888. } else if (text.match(/bil|mc|motorcykel/i)) {
  889. var category = 'Transportmedel';
  890. } else if (text.match(/mejl|mail|telef|skype|kik|fb|facebook/i)) {
  891. var category = 'Mejl och telefon';
  892. } else if (text.match(/sjuk/i)) {
  893. var category = 'Hälsa';
  894. } else var category = prompt('Select category:');
  895. // Categories
  896. $('select.target-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  897. // Save note
  898. $('.target-save-note').trigger('click')
  899. //Focus TextField
  900. window.scroll(0, 0);
  901. $( ".conversation-message-text" ).focus();
  902. });
  903. helperFunctions.set(config.hotkeys[14], // Save to Target Aktuellt
  904. () => {
  905. // Adds :containsNC - non case-sensitive :contains
  906. $.extend($.expr[":"], {
  907. "containsNC": function(elem, i, match, array) {
  908. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  909. }
  910. });
  911.  
  912. // Extract selected text
  913. var note = window.getSelection().toString();
  914. // Insert text to note
  915. $('.target-note-content.area').val(note);
  916. // Select note category
  917. var category = 'aktuella saker';
  918. // Categories
  919. $('select.target-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  920. // Save note
  921. $('.target-save-note').trigger('click')
  922. //Focus TextField
  923. window.scroll(0, 0);
  924. $( ".conversation-message-text" ).focus();
  925. });
  926. helperFunctions.set(config.hotkeys[15], // Save To Player Auto Category
  927. () => {
  928. // Adds :containsNC - non case-sensitive :contains
  929. $.extend($.expr[":"], {
  930. "containsNC": function(elem, i, match, array) {
  931. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  932. }
  933. });
  934. //Function to focus end of text
  935. (function($){
  936. $.fn.focusTextToEnd = function(){
  937. this.focus();
  938. var $thisVal = this.val();
  939. this.val('').val($thisVal);
  940. return this;
  941. }
  942. }(jQuery));
  943. // Extract selected text
  944. var note = window.getSelection().toString();
  945. // Modify and verify selected text
  946. var text = prompt('Player note:', note);
  947. // Extract target name
  948. var targetName = $('.target-name').text();
  949. // Trim period from target name
  950. var targetNamee = targetName.substr(1);
  951. // Insert text to note
  952. $('.player-note-content.area').val(text + ' (' + targetNamee + ')');
  953. // Select note category
  954. var category;
  955. if (text.match(/bild|selfie|kuk|gif/i)) {
  956. var category = 'Bilder';
  957. } else if (text.match(/singel|barn|son|söner|döttrar|dotter|fru|särbo|sambo|gift|skild|änk/i)) {
  958. var category = 'Familj/Relationer';
  959. } 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)) {
  960. var category = 'Jobb/Utbildning';
  961. } 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)) {
  962. var category = 'Hobby';
  963. } else if (text.match(/bor i|Karlskrona|Karlshamn|Borås|Borlänge/i)) {
  964. var category = 'Stad';
  965. } else if (text.match(/heter/i)) {
  966. var category = 'Namn';
  967. } 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)) {
  968. var category = 'Sexuella preferenser';
  969. } else if (text.match(/bil|mc|motorcykel/i)) {
  970. var category = 'Transportmedel';
  971. } else if (text.match(/mejl|mail|telef|skype|kik|fb|facebook/i)) {
  972. var category = 'Mejl och telefon';
  973. } else if (text.match(/sjuk/i)) {
  974. var category = 'Hälsa';
  975. } else var category = prompt('Select category:');
  976. // Categories
  977. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  978. // Save note
  979. $('.player-save-note').trigger('click')
  980. //Focus TextField
  981. window.scroll(0, 0);
  982. $('.conversation-message-text').focusTextToEnd();
  983. });
  984. helperFunctions.set(config.hotkeys[16], // Player Save to Stad
  985. () => {
  986. // Adds :containsNC - non case-sensitive :contains
  987. $.extend($.expr[":"], {
  988. "containsNC": function(elem, i, match, array) {
  989. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  990. }
  991. });
  992. //Function to focus end of text
  993. (function($){
  994. $.fn.focusTextToEnd = function(){
  995. this.focus();
  996. var $thisVal = this.val();
  997. this.val('').val($thisVal);
  998. return this;
  999. }
  1000. }(jQuery));
  1001. // Extract selected text
  1002. var note = window.getSelection().toString();
  1003. // Extract target name
  1004. var targetName = $('.target-name').text();
  1005. // Trim period from target name
  1006. var targetNamee = targetName.substr(1);
  1007. // Insert text to note
  1008. $('.player-note-content.area').val(note + ' (' + targetNamee + ')');
  1009. // Select note category
  1010. var category = 'stad';
  1011. // Categories
  1012. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  1013. // Save note
  1014. $('.player-save-note').trigger('click')
  1015. //Focus TextField
  1016. window.scroll(0, 0);
  1017. $('.conversation-message-text').focusTextToEnd();
  1018.  
  1019. });
  1020. helperFunctions.set(config.hotkeys[17], // Player Save to Aktuellt
  1021. () => {
  1022. // Adds :containsNC - non case-sensitive :contains
  1023. $.extend($.expr[":"], {
  1024. "containsNC": function(elem, i, match, array) {
  1025. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  1026. }
  1027. });
  1028. //Function to focus end of text
  1029. (function($){
  1030. $.fn.focusTextToEnd = function(){
  1031. this.focus();
  1032. var $thisVal = this.val();
  1033. this.val('').val($thisVal);
  1034. return this;
  1035. }
  1036. }(jQuery));
  1037. // Extract selected text
  1038. var note = window.getSelection().toString();
  1039. // Extract target name
  1040. var targetName = $('.target-name').text();
  1041. // Trim period from target name
  1042. var targetNamee = targetName.substr(1);
  1043. // Insert text to note
  1044. $('.player-note-content.area').val(note + ' (' + targetNamee + ')');
  1045. // Select note category
  1046. var category = 'Aktuella saker';
  1047. // Categories
  1048. $('select.player-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  1049. // Save note
  1050. $('.player-save-note').trigger('click')
  1051. //Focus TextField
  1052. window.scroll(0, 0);
  1053. $('.conversation-message-text').focusTextToEnd();
  1054. });
  1055. helperFunctions.set(config.hotkeys[18], // Target Notes No Prompt
  1056. () => {
  1057. // Adds :containsNC - non case-sensitive :contains
  1058. $.extend($.expr[":"], {
  1059. "containsNC": function(elem, i, match, array) {
  1060. return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  1061. }
  1062. });
  1063.  
  1064.  
  1065. // Extract selected text
  1066. var text = window.getSelection().toString();
  1067. // Insert text to note
  1068. $('.target-note-content.area').val(text);
  1069. // Select note category
  1070. var category;
  1071. if (text.match(/bild|selfie|kuk|gif/i)) {
  1072. var category = 'Bilder';
  1073. } else if (text.match(/singel|barn|son|söner|döttrar|dotter|fru|särbo|sambo|gift|skild|änk/i)) {
  1074. var category = 'Familj/Relationer';
  1075. } 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)) {
  1076. var category = 'Jobb/Utbildning';
  1077. } 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)) {
  1078. var category = 'Hobby';
  1079. } else if (text.match(/bor i|Karlskrona|Karlshamn|Borås|Borlänge/i)) {
  1080. var category = 'Stad';
  1081. } 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)) {
  1082. var category = 'Namn';
  1083. } 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)) {
  1084. var category = 'Namn';
  1085. } 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)) {
  1086. var category = 'Namn';
  1087. } 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)) {
  1088. var category = 'Namn';
  1089. } 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)) {
  1090. var category = 'Namn';
  1091. } 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)) {
  1092. var category = 'Namn';
  1093. } 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)) {
  1094. var category = 'Namn';
  1095. } 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)) {
  1096. var category = 'Sexuella preferenser';
  1097. } else if (text.match(/bil|mc|motorcykel/i)) {
  1098. var category = 'Transportmedel';
  1099. } else if (text.match(/mejl|mail|telef|skype|kik|fb|facebook/i)) {
  1100. var category = 'Mejl och telefon';
  1101. } else if (text.match(/sjuk/i)) {
  1102. var category = 'Hälsa';
  1103. } else var category = prompt('Select category:');
  1104. // Categories
  1105. $('select.target-note-categories option:containsNC("' + category + '")').attr('selected', 'selected');
  1106. // Save note
  1107. $('.target-save-note').trigger('click')
  1108. //Focus TextField
  1109. window.scroll(0, 0);
  1110. $( ".conversation-message-text" ).focus();
  1111. });
  1112. helperFunctions.set(config.hotkeys[19], // Focus TextField Column6
  1113. () => {
  1114. //Focus TextField
  1115. $( ".counters-column6" ).focusTextToEnd();
  1116. });
  1117.  
  1118. //Key Event Listensers for Hotkeys
  1119.  
  1120. document.addEventListener('keyup', (e) =>{ // Send Mssg and Lap Time on hit Enter Key
  1121. if (e.which == 13) {
  1122. var isFocused = $(".conversation-message-text").is(":focus"),
  1123. len = $('.conversation-message-text').val().length;
  1124.  
  1125. if (len >= 75 && isFocused) {
  1126. $('#counters-column5').trigger("click");
  1127. $('.message-submit-button').trigger("click");
  1128.  
  1129. }
  1130. }
  1131. });
  1132.  
  1133.  
  1134. document.addEventListener('keyup', (e) => { // Adds Alt Key event listeners for the hotkeys
  1135. if(e.altKey && isOkHotkey(e.code)) {
  1136. e.preventDefault();
  1137. e.stopPropagation();
  1138. let f = helperFunctions.get(e.code);
  1139. if(f !== undefined) f();
  1140. }
  1141. });
  1142.  
  1143. document.addEventListener('keyup', (e) => { // Adds Ctrl Key event listeners for the hotkeys
  1144. if(e.ctrlKey && isOkHotkey(e.code)) {
  1145. e.preventDefault();
  1146. e.stopPropagation();
  1147. let r = helpFunctions.get(e.code);
  1148. if(r !== undefined) r();
  1149. }
  1150. });
  1151.  
  1152.  
  1153. console.log("\tHotkeys registered");
  1154. }
  1155.  
  1156. function isOkHotkey(code) {
  1157. return code.startsWith("Key") || code.startsWith("Digit") || code.startsWith("Numpad") || code.startsWith("Arrow") || code.startsWith("F") || code.startsWith("R");
  1158. }
  1159.  
  1160. function createSettingsButton() {
  1161. function addSetting(value, name) {
  1162. var id_name = (name + 'Setting').replace(/[^A-Za-z_]/g,'');
  1163. var label = document.createElement('label');
  1164. label.innerHTML = name + ": ";
  1165. label.setAttribute('for', id_name);
  1166. label.style.gridColumn = '1';
  1167. var element = document.createElement('input');
  1168. if(typeof value == 'boolean') {
  1169. element.type = 'checkbox';
  1170. element.checked = value;
  1171. } else {
  1172. element.type = 'text';
  1173. element.value = value !== undefined ? value : "";
  1174. }
  1175. element.id = id_name;
  1176. element.name = id_name;
  1177. element.style.gridColumn = '2';
  1178. settingsDialog.appendChild(label);
  1179. settingsDialog.appendChild(element);
  1180. return element;
  1181. }
  1182.  
  1183. function setHotkey(n, e) {
  1184. if(isOkHotkey(e.code) || ['Backspace', 'Delete'].includes(e.code)) {
  1185. e.preventDefault();
  1186. e.stopPropagation();
  1187. var code = (['Backspace', 'Delete'].includes(e.code)) ? "" : e.code;
  1188. e.target.value = code;
  1189. config.hotkeys[n] = code;
  1190. }
  1191. }
  1192.  
  1193. console.log("Creating settings button");
  1194.  
  1195. var menu = $('#topmenu1')[0];
  1196. var settingsDialog = document.createElement('div');
  1197. settingsDialog.id = 'SettingsDialog';
  1198. settingsDialog.style.display = 'none';
  1199. settingsDialog.style.alignItems = 'center';
  1200.  
  1201. addSetting(config.autoReply, 'AutoReply')
  1202. .addEventListener('change', (e) => {config.autoReply = e.target.checked;});
  1203. addSetting(config.username, 'Username') .addEventListener('change', (e) => {config.username = e.target.value;});
  1204. addSetting(config.password, 'Password') .addEventListener('change', (e) => {config.password = e.target.value;});
  1205. addSetting(config.autoLogin, 'Autologin') .addEventListener('change', (e) => {config.autoLogin = e.target.checked;});
  1206. addSetting(config.showCounters, 'Show counters') .addEventListener('change', (e) => {config.showCounters = e.target.checked;});
  1207. addSetting(config.goToMessagesFirst, 'Go to Messages after login')
  1208. .addEventListener('change', (e) => {config.goToMessagesFirst = e.target.checked;});
  1209. addSetting(config.highlightMessagesNotes, 'Highlights messages and notes')
  1210. .addEventListener('change', (e) => {config.highlightMessagesNotes = e.target.checked;});
  1211. addSetting(config.searchAndOpen, 'AutoSearch Attachment')
  1212. .addEventListener('change', (e) => {config.searchAndOpen = e.target.checked;});
  1213. addSetting(config.notificationSound, 'Play sound on new message')
  1214. .addEventListener('change', (e) => {config.notificationSound = e.target.checked;});
  1215. addSetting(config.hideProfilePics, 'Hide Profile Pics')
  1216. .addEventListener('change', (e) => {config.hideProfilePics = e.target.checked;});
  1217. settingsDialog.appendChild(document.createElement('span'));
  1218. settingsDialog.appendChild(document.createElement('br'));
  1219. settingsDialog.appendChild(document.createElement('span')); settingsDialog.lastChild.innerHTML = 'Functions Starting With ALT Key';
  1220. settingsDialog.appendChild(document.createElement('span'));
  1221. settingsDialog.appendChild(document.createElement('br'));
  1222. addSetting(config.hotkeys[ 0], '??') .addEventListener('keyup', (e) => {setHotkey( 0, e);});
  1223. addSetting(config.hotkeys[ 1], '??') .addEventListener('keyup', (e) => {setHotkey( 1, e);});
  1224. addSetting(config.hotkeys[ 2], 'Go to message box') .addEventListener('keyup', (e) => {setHotkey( 2, e);});
  1225. addSetting(config.hotkeys[ 3], 'Focus Textarea').addEventListener('keyup', (e) => {setHotkey( 3, e);});
  1226. addSetting(config.hotkeys[ 4], '??') .addEventListener('keyup', (e) => {setHotkey( 4, e);});
  1227. addSetting(config.hotkeys[ 5], '??') .addEventListener('keyup', (e) => {setHotkey( 5, e);});
  1228. addSetting(config.hotkeys[ 6], 'Go to Messages') .addEventListener('keyup', (e) => {setHotkey( 6, e);});
  1229. addSetting(config.hotkeys[ 7], 'Go to Stopped Messages') .addEventListener('keyup', (e) => {setHotkey( 7, e);});
  1230. addSetting(config.hotkeys[8], 'Go to Unread Messages') .addEventListener('keyup', (e) => {setHotkey(8, e);});
  1231. addSetting(config.hotkeys[9], 'Generate Hobbies') .addEventListener('keyup', (e) => {setHotkey(9, e);});
  1232. addSetting(config.hotkeys[10], 'SexIntressen') .addEventListener('keyup', (e) => {setHotkey(10, e);});
  1233. addSetting(config.hotkeys[11], 'Player Jobb') .addEventListener('keyup', (e) => {setHotkey(11, e);});
  1234. addSetting(config.hotkeys[12], 'Player Namn') .addEventListener('keyup', (e) => {setHotkey(12, e);});
  1235. addSetting(config.hotkeys[13], 'Target AutoNotes') .addEventListener('keyup', (e) => {setHotkey(13, e);});
  1236. addSetting(config.hotkeys[14], 'Target Aktuellt') .addEventListener('keyup', (e) => {setHotkey(14, e);});
  1237. addSetting(config.hotkeys[15], 'Player AutoNotes') .addEventListener('keyup', (e) => {setHotkey(15, e);});
  1238. addSetting(config.hotkeys[16], 'Player Stad') .addEventListener('keyup', (e) => {setHotkey(16, e);});
  1239. addSetting(config.hotkeys[17], 'Player Aktuellt') .addEventListener('keyup', (e) => {setHotkey(17, e);});
  1240. addSetting(config.hotkeys[18], 'Target Notes Utan Prompt') .addEventListener('keyup', (e) => {setHotkey(18, e);});
  1241. addSetting(config.hotkeys[19], '??') .addEventListener('keyup', (e) => {setHotkey(19, e);});
  1242.  
  1243. var settingsButton = menu.children[5].cloneNode();
  1244. settingsButton.id = 'SettingsButton';
  1245. settingsButton.setAttribute('rel', 'settings');
  1246. settingsButton.addEventListener('click', () => {
  1247. $('#SettingsDialog').dialog({
  1248. title: "Settings",
  1249. resizable: false,
  1250. modal: true,
  1251. position: 'top',
  1252. width: '400',
  1253. open: () => {
  1254. $('#SettingsDialog')[0].style.display = 'grid';
  1255. },
  1256. buttons: [
  1257. {
  1258. text: "Save",
  1259. click: () => {
  1260. console.log("Storing config");
  1261. localStorage.setItem('config', JSON.stringify(config));
  1262. console.log("\tConfig stored:");
  1263. console.log(localStorage.getItem('config'));
  1264. loadConfig();
  1265. //window.location.reload();
  1266. }
  1267. }
  1268. ]
  1269. });
  1270. });
  1271. $('button[rel="documents/manual.pdf"]')[0].insertAdjacentElement('afterend', settingsButton);
  1272. $('button[rel="documents/manual.pdf"]')[0].insertAdjacentText('afterend', '\n');
  1273. $('#SettingsButton').button();
  1274. settingsButton.children[0].innerHTML = 'Settings';
  1275. document.getElementById('informDialog').insertAdjacentElement('afterend', settingsDialog);
  1276.  
  1277. console.log("\tSettings button created");
  1278.  
  1279. }
  1280.  
  1281. function createCounters() {
  1282. console.log("Creating counter elements");
  1283. var menu = document.getElementById('topmenu1');
  1284. menu.style.position = 'relative';
  1285.  
  1286. var counters = document.createElement('div');
  1287. counters.id = 'counters-container';
  1288. counters.style.position = 'absolute';
  1289. counters.style.left = '39%';
  1290. counters.style.top = '10px';
  1291. counters.style.display = 'block';
  1292.  
  1293.  
  1294. var column1 = document.createElement('div');
  1295. column1.id = 'counters-column1';
  1296. column1.style.display = 'inline-block';
  1297. column1.style.marginLeft = '1em';
  1298. column1.style.verticalAlign = 'top';
  1299. column1.appendChild(document.createElement('span')); column1.lastChild.innerHTML = 'Sent: ';
  1300. column1.appendChild(document.createElement('span'));
  1301. column1.appendChild(document.createElement('br'));
  1302. column1.appendChild(document.createElement('span')); column1.lastChild.innerHTML = 'Earned: €';
  1303. column1.appendChild(document.createElement('span'));
  1304. column1.appendChild(document.createElement('br'));
  1305.  
  1306.  
  1307. var column2 = document.createElement('div');
  1308. column2.id = 'counters-column2';
  1309. column2.style.display = 'inline-block';
  1310. column2.style.marginLeft = '2em';
  1311. column2.style.verticalAlign = 'top';
  1312. column2.appendChild(document.createElement('span')); column2.lastChild.innerHTML = 'This week: ';
  1313. column2.appendChild(document.createElement('span'));
  1314. column2.appendChild(document.createElement('br'));
  1315. column2.appendChild(document.createElement('span')); column2.lastChild.innerHTML = 'Earned: €';
  1316. column2.appendChild(document.createElement('span'));
  1317. column2.appendChild(document.createElement('br'));
  1318. column2.appendChild(document.createElement('span')); column2.lastChild.innerHTML = 'Rate: €';
  1319. column2.appendChild(document.createElement('span'));
  1320. column2.appendChild(document.createElement('br'));
  1321.  
  1322. var column4 = document.createElement('div');
  1323. column4.id = 'counters-column4';
  1324. column4.style.display = 'inline-block';
  1325. column4.style.marginLeft = '3em';
  1326. column4.style.verticalAlign = 'top';
  1327. column4.appendChild(document.createElement('span')); column4.lastChild.innerHTML = 'Time: ';
  1328. column4.appendChild(document.createElement('span'));
  1329. column4.appendChild(document.createElement('br'));
  1330. column4.appendChild(document.createElement('span')); column4.lastChild.innerHTML = 'Last Msg: ';
  1331. column4.appendChild(document.createElement('span'));
  1332.  
  1333. var column5 = document.createElement('div');
  1334. column5.id = 'counters-column5';
  1335. column5.style.display = 'none';
  1336. column5.style.marginLeft = '3em';
  1337. column5.style.verticalAlign = 'top';
  1338. column5.appendChild(document.createElement('button')); column5.lastChild.innerHTML = 'Clear';
  1339.  
  1340.  
  1341.  
  1342. counters.appendChild(column1);
  1343. counters.appendChild(column2);
  1344. counters.appendChild(column4);
  1345. counters.appendChild(column5);
  1346. menu.insertBefore(counters, menu.lastElementChild);
  1347.  
  1348. var menuu = document.getElementById('main');
  1349. menuu.style.position = 'relative';
  1350.  
  1351. var counterss = document.createElement('div');
  1352. counterss.id = 'counters-container2';
  1353. counterss.style.position = 'absolute';
  1354. counterss.style.left = '20.8vw';
  1355. counterss.style.width = '56.6vw';
  1356. counterss.style.display = 'block';
  1357.  
  1358.  
  1359. var column6 = document.createElement('textarea');
  1360. column6.tabIndex = '2';
  1361. column6.className = 'counters-column6';
  1362. column6.placeholder = 'Click And Paste Your Text Here!';
  1363. column6.style.position = 'relative';
  1364. column6.style.width = 'inherit';
  1365. column6.rows = '2';
  1366. column6.style.marginTop = '10px';
  1367. column6.style.borderRadius = '6px';
  1368. column6.style.background = '#636363';
  1369. column6.style.outline = 'none';
  1370. column6.style.border = 'none';
  1371. column6.style.visibility = 'hidden';
  1372. column6.style.placeholder = '#003da0';
  1373.  
  1374.  
  1375. counterss.appendChild(column6);
  1376. menuu.insertBefore(counterss, menuu.firstElementChild);
  1377.  
  1378.  
  1379. var styleNode = document.createElement("style");
  1380. document.body.appendChild(styleNode);
  1381.  
  1382. //CSS Code//CSS Code//
  1383.  
  1384. //Body
  1385. styleNode.innerHTML = "html { background-color: #636363 !important; }\n";
  1386. styleNode.innerHTML += "body { background-color: #636363 !important; font-family: merriweather, serif !important; outline: none !important; }\n";
  1387. styleNode.innerHTML += "::-webkit-scrollbar { display: none !important; }\n";
  1388.  
  1389. //Lay out Top
  1390. styleNode.innerHTML += ".layout-top { position: fixed !important; z-index: 1 !important; }\n";
  1391. styleNode.innerHTML += "#topmenu1 { background-color: #636363 !important; font-family: merriweather, serif !important; border-style: none !important; }\n";
  1392. styleNode.innerHTML += "#topmenu2 { display: none !important; }\n";
  1393. styleNode.innerHTML += "#counters-container { font-size: 14px; font-weight: bold !important; }\n";
  1394.  
  1395. //Midd Section//
  1396.  
  1397. //Upper Textfield
  1398. styleNode.innerHTML +=
  1399. "::placeholder { text-align: center !important; color: #012359 !important; font-size: 15px !important; font-weight: bold !important; }\n";
  1400. styleNode.innerHTML +=
  1401. "textarea.counters-column6 { top: 100px; font-size: 13px !important; font-weight: bold !important; position: fixed !important; z-index: 5; tab-index: 1 !important; }\n";
  1402.  
  1403. //Upper Textfield On Focus
  1404. styleNode.innerHTML +=
  1405. "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";
  1406.  
  1407. //Information On Top of Lower Textfield Hidden Objects
  1408. styleNode.innerHTML += "div.from-to { visibility: hidden !important; }\n";
  1409. styleNode.innerHTML += "div.subject{ display: none !important; }\n";
  1410. styleNode.innerHTML += ".message-subject { display: none !important; }\n";
  1411.  
  1412. //Information On Top of Lower Textfield Non Hidden Objects
  1413. styleNode.innerHTML +=
  1414. ".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";
  1415. styleNode.innerHTML += ".green { font-size: 11px !important; font-family: merriweather, serif !important; position: relative !important; margin-right: 5px !important; }\n";
  1416.  
  1417. //Lower Texfield Area
  1418. styleNode.innerHTML += ".conversation-fill { position: fixed !important; margin-left: 5px !important; margin-top: 43px !important; z-index: 0 }\n";
  1419. styleNode.innerHTML += ".message.read { !important; padding: 0 5px !important; font-weight: bold !important; }\n";
  1420. 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";
  1421. styleNode.innerHTML +=
  1422. "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";
  1423.  
  1424. //Lower Texfield Area On Focus
  1425. styleNode.innerHTML +=
  1426. "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";
  1427.  
  1428. //Objects Under Lower Textfield Area
  1429. styleNode.innerHTML += ".specialdatepicker, #future, .message-send-direct, .message-text span { display: none !important; }\n";
  1430. styleNode.innerHTML += " span.ui-button-text, span.emoji.emoji-sizer { display: block !important; }\n";
  1431.  
  1432. //Incoming Messages Area
  1433. 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";
  1434. styleNode.innerHTML += ".tr .td3 .message-text {!important; font-size: 16px !important; font-weight: bold !important; font-family: robot !important; }\n";
  1435. styleNode.innerHTML += ".tr .td3 .from-to { visibility: visible !important; }\n";
  1436. styleNode.innerHTML += ".label { }\n";
  1437. styleNode.innerHTML += "#showmore { position: relative !important; top: 45px !important; background: #919191 !important; }\n";
  1438. //Side Sections//
  1439. //Hidden Objects
  1440. styleNode.innerHTML += "div.bar-title { display: none !important; }\n";
  1441.  
  1442. //Profiles and Notes
  1443. styleNode.innerHTML += ".conversation-left, .conversation-right { background: #636363 !important; font-size: 13px !important; font-family: merriweather, serif !important; }\n";
  1444. styleNode.innerHTML += ".block-content, .player-note, .ui-draggable, .ui-widget-content, .ui-widget-header { background: #919191 !important; }\n";
  1445. styleNode.innerHTML += ".player-last-notes { font-size: 13px !important; }\n";
  1446. 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";
  1447. styleNode.innerHTML += ".note_title { border-bottom: 1px solid #000000 !important; font-size: 12px !important; font-weight: bold !important; background: #919191 !important; }\n";
  1448. 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";
  1449. 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";
  1450.  
  1451. //Textarea Notes On Focus
  1452. styleNode.innerHTML +=
  1453. "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";
  1454.  
  1455. //Buttons//
  1456. styleNode.innerHTML += "button { background-color: #636363 !important; border: none !important; }\n";
  1457. styleNode.innerHTML += " .ui-state-default { font-weight: bold !important; background: none !important; color: #000000 !important; border: none !important; font-family: merriweather, serif !important; }\n";
  1458. styleNode.innerHTML += "button.navigation span { font-size: 15px !important; letter-spacing: 5px !important; }\n";
  1459. //Buttons Hover//
  1460. 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";
  1461. styleNode.innerHTML +=
  1462. " 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";
  1463.  
  1464. //Hidden Buttons//
  1465. styleNode.innerHTML += "button[rel='documents/manual.pdf'], button[rel='Announcements'] { display: none !important; }\n";
  1466.  
  1467. //Loading Screen
  1468. styleNode.innerHTML += ".message-message { background-color: #636363 !important; }\n";
  1469. styleNode.innerHTML += ".title { visibility: hidden !important; }\n";
  1470.  
  1471. console.log("\tCounter elements created");
  1472. }
  1473.  
  1474.  
  1475. function calcRate(messages) {
  1476. if(messages >= 1976)
  1477. return 0.19;
  1478. if(messages >= 1576)
  1479. return 0.16;
  1480. if(messages >= 776)
  1481. return 0.14;
  1482. return 0.12;
  1483. }
  1484.  
  1485. function calcEarned(rate, normal, bonus, other) {
  1486. return rate * (normal + bonus) +
  1487. 0.02 * bonus +
  1488. 0.12 * other;
  1489. }
  1490.  
  1491.  
  1492. function getStats() {
  1493. function updateCounters(stats) {
  1494. function statsForDate(date) {
  1495. var normal = parseInt(date.replied_messages_normal) | 0;
  1496. var peakHour = parseInt(date.replied_messages_peakhour) | 0;
  1497. var weekend = parseInt(date.replied_messages_saturday) +
  1498. parseInt(date.replied_messages_sunday) +
  1499. parseInt(date.replied_messages_specialtrigger) | 0;
  1500. var other = parseInt(date.replied_favorites) +
  1501. parseInt(date.replied_flirts) +
  1502. parseInt(date.replied_matches) +
  1503. parseInt(date.replied_proposals) +
  1504. parseInt(date.replied_stopped) | 0;
  1505. return [normal, peakHour + weekend, other];
  1506. }
  1507. console.log("Updating counters");
  1508. var date = new Date().toLocaleString('sv-SE', {
  1509. year: 'numeric',
  1510. month: '2-digit',
  1511. day: '2-digit'
  1512. });
  1513. var sentNormal, sentBonus, other, normalWeek=0, bonusWeek=0, otherWeek=0, rate,
  1514. column1 = document.getElementById('counters-column1'),
  1515. column2 = document.getElementById('counters-column2'),
  1516. column4 = document.getElementById('counters-column4'),
  1517. column5 = document.getElementById('counters-column5');
  1518. column1.children[1].innerHTML = '0';
  1519. column1.children[4].innerHTML = '0';
  1520. for(const s of stats) {
  1521. [sentNormal, sentBonus, other] = statsForDate(s);
  1522. normalWeek += sentNormal;
  1523. bonusWeek += sentBonus;
  1524. otherWeek += other;
  1525. if(s.date == date) {
  1526. rate = calcRate(normalWeek + bonusWeek);
  1527. column1.children[1].innerHTML = other;
  1528. column1.children[4].innerHTML = (rate * (sentNormal + sentBonus + other)).toFixed(2);
  1529. console.log("\tCounters for today updated");
  1530. break;
  1531. }
  1532. }
  1533. column2.children[1].innerHTML = otherWeek;
  1534. column2.children[4].innerHTML = calcEarned(rate, normalWeek, bonusWeek, otherWeek).toFixed(2);
  1535. column2.children[7].innerHTML = rate;
  1536.  
  1537. console.log("\tCounters updated");
  1538. }
  1539. console.log("Getting statistics");
  1540. $.ajax({
  1541. url: '/ajax/stats/action/getStats',
  1542. dataType: 'json',
  1543. type: 'POST',
  1544. data: {
  1545. year: new Date().getFullYear(),
  1546. weekno: $.datepicker.iso8601Week(new Date()),
  1547. pagination: {
  1548. current: 1,
  1549. drawPagination: false,
  1550. perPage: 20,
  1551. total: 1
  1552. },
  1553. type: 'mine'
  1554. },
  1555. success: function (response) {
  1556. console.log("getStats AJAX call success");
  1557. updateCounters(response.data.result);
  1558. },
  1559. complete: function () {}
  1560. });
  1561. console.log("\tStatistics gotten");
  1562. }
  1563.  
  1564.  
  1565.  
  1566. var h1 = document.getElementById('counters-column4'),
  1567. start = document.getElementById('counters-column5'),
  1568. h2 = document.getElementById('counters-column4'),
  1569. seconds = 0, minutes = 0, hours = 0,
  1570. t;
  1571.  
  1572. function add() {
  1573. seconds++;
  1574. if (seconds >= 60) {
  1575. seconds = 0;
  1576. minutes++;
  1577. if (minutes >= 60) {
  1578. minutes = 0;
  1579. hours++;
  1580. }
  1581. }
  1582.  
  1583. h1.children[1].textContent = (minutes ? (minutes > 9 ? minutes : "0" + minutes) : "00") + ":" + (seconds > 9 ? seconds : "0" + seconds);
  1584.  
  1585. timer();
  1586. }
  1587. function timer() {
  1588. t = setTimeout(add, 1000);
  1589. }
  1590. timer();
  1591.  
  1592.  
  1593. /* Start button */
  1594. start.onclick = function() {
  1595.  
  1596. h2.children[4].textContent = leftPad(minutes) + ":" + leftPad(seconds);
  1597. h1.children[1].innerHTML = "00:00";
  1598. seconds = 0; minutes = 0; hours = 0;
  1599. return false;
  1600. }
  1601. return true;
  1602.  
  1603.  
  1604.  
  1605.  
  1606.  
  1607. function leftPad(value) {
  1608. return value < 10 ? ('0' + value) : value;
  1609. }
Add Comment
Please, Sign In to add comment