Advertisement
Farbjodr

Tab autocomplete v0.2.1

Feb 16th, 2015
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         Tab autocomplete
  3. // @version      0.2.1
  4. // @description  irc-like feature, improved and better looking version, shift+tab adds @
  5. // @author       Ravana
  6. // @match        https://plug.dj/*
  7. // @require http://code.jquery.com/jquery-latest.js
  8. // ==/UserScript==
  9.  
  10. var knownNames = [];
  11. var savedNames = [];
  12. var msgStart = "";
  13. var msgEnd = "";
  14. var message = "";
  15.  
  16. $.extend($.expr[":"], {
  17.     "starts-with": function(elem, i, data, set) {
  18.         var text = $.trim($(elem).text()),
  19.             term = data[3];
  20.         return text.indexOf(term) === 0;
  21.     },
  22.  
  23.     "ends-with": function(elem, i, data, set) {
  24.         var text = $.trim($(elem).text()),
  25.             term = data[3];
  26.         return text.lastIndexOf(term) === text.length - term.length;
  27.     }
  28. });
  29.  
  30. setTimeout(function() {
  31.     $.each(API.getUsers(), function(index, value) {
  32.         if (knownNames.indexOf(value["username"]) == -1) knownNames.push(value["username"]);
  33.     });
  34.     knownNames.sort();
  35.     API.on(API.USER_JOIN, userJoin);
  36.  
  37.     function userJoin(data) {
  38.         if (knownNames.indexOf(data.username) == -1) knownNames.push(data.username);
  39.         knownNames.sort();
  40.     }
  41.     API.on(API.USER_LEAVE, userLeave);
  42.  
  43.     function userLeave(data) {
  44.         knownNames.splice(knownNames.indexOf(data.username), 1);
  45.     }
  46.  
  47.     $("#chat-input-field").keydown(function(e) {
  48.         if (e.keyCode == 13 || e.keyCode==8 || e.keyCode==32 || e.keyCode==27) {
  49.             savedNames = [];
  50.             msgStart = "";
  51.             message = "";
  52.             $(".cm:starts-with(Matched: ):not(:last)").remove();
  53.         }
  54.         if (e.keyCode == 27) {
  55.             knownNames = [];
  56.             $.each(API.getUsers(), function(index, value) {
  57.                if (knownNames.indexOf(value["username"]) == -1) knownNames.push(value["username"]);
  58.             });
  59.             knownNames.sort();
  60.             $(".cm:starts-with(Matched: )").remove();
  61.         }
  62.         if (e.keyCode == 9) {
  63.             e.preventDefault();
  64.             if(e.shiftKey) {
  65.                 message = $("#chat-input-field").val();
  66.                 $("#chat-input-field").val(message+"@");
  67.             } else {
  68.                 if(savedNames.length<1){
  69.                     message = $("#chat-input-field").val();
  70.                     message = message.split(" ");
  71.                     msgEnd = message.pop();
  72.                     message = message.join(" ");
  73.                     for(var i = 0; i < knownNames.length;i++){
  74.                         if(knownNames[i].toLowerCase().indexOf(msgEnd.toLowerCase())==0)savedNames.push(knownNames[i]);
  75.                     }
  76.                     if(savedNames.length==0){
  77.                         return;
  78.                     }
  79.                     if(message){$("#chat-input-field").val(message+" "+savedNames[0]);}else{$("#chat-input-field").val(savedNames[0]);}
  80.                     if(savedNames.length==1){
  81.                         return;
  82.                     }
  83.                     if(msgEnd)API.chatLog("Matched: " + savedNames.join("/"));
  84.                     $(".cm:starts-with(Matched: ):not(:last)").remove();
  85.                 } else {
  86.                     //console.log("saved > 1");
  87.                     var q = savedNames.shift();
  88.                     savedNames.push(q);
  89.                     if(message){$("#chat-input-field").val(message+" "+savedNames[0]);}else{$("#chat-input-field").val(savedNames[0]);}
  90.                 }
  91.             }
  92.         }
  93.     });
  94. },10000);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement