Advertisement
brospresident

vue

Nov 27th, 2019
500
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <template>
  2.   <div class="gui-chat">
  3.     <div class="chatWindow">
  4.       <div class="chatEntries" :style="`opacity: ${hudStatus > 0 ? '1' : '0'}`"></div>
  5.       <div class="chatInputs form-group m-0">
  6.         <input
  7.           placeholder="Write your message and then press enter."
  8.           v-model="chatText"
  9.           id="text"
  10.           type="text"
  11.           class="form-control rounded-0"
  12.           maxlength="200"
  13.           @keyup.esc="closeChat"
  14.           @keyup.up="chatText = lastMessage"
  15.           @keyup.down="lastMessage(false)"
  16.         >
  17.         <div class="currentLength">{{chatText.length + '/200'}}</div>
  18.       </div>
  19.     </div>
  20.   </div>
  21. </template>
  22.  
  23. <script>
  24. export default {
  25.   name: "chat",
  26.   data: function() {
  27.     return {
  28.       search: "",
  29.       timestamp: false,
  30.       entries: [],
  31.       toggle: false,
  32.       lastMessage: '',
  33.       chatText: "",
  34.       spamActive: false
  35.     };
  36.   },
  37.   computed: {
  38.     hudStatus() {
  39.       return this.$store.state.others.hudStatus;
  40.     },
  41.     activeModal() {
  42.       return this.$store.state.others.activeModal;
  43.     }
  44.   },
  45.   watch: {
  46.     entries: function(val) {
  47.       this.updateChat();
  48.     }
  49.   },
  50.   methods: {
  51.     closeChat: function() {
  52.       mp.trigger("disableChatInput");
  53.     },
  54.     updateChat: function() {
  55.       $(".chatEntries").empty();
  56.       this.entries.forEach(entry => {
  57.         $(".chatEntries").append(
  58.           this.timestamp == false ? entry.text : entry.textTime
  59.         );
  60.       });
  61.       $(".chatEntries").scrollTop(9999);
  62.     },
  63.     toggleTimestamp: function(toggle) {
  64.       this.timestamp = toggle;
  65.       this.updateChat();
  66.     },
  67.     push: function(text, color, clasa) {
  68.       text = unescape(text);
  69.       var date = new Date();
  70.       var seconds = date.getSeconds();
  71.       seconds = seconds < 10 ? "0" + seconds : seconds;
  72.       var minutes = date.getMinutes();
  73.       minutes = minutes < 10 ? "0" + minutes : minutes;
  74.       var hour = date.getHours();
  75.       hour = hour < 10 ? "0" + hour : hour;
  76.  
  77.       let object = {
  78.         text: `<p class="${clasa == null ? "" : clasa}" style="${
  79.          color == null ? "" : "color: " + color
  80.        }">${text}</p>`,
  81.         textTime: `<p class="${clasa == null ? "" : clasa}" style="${
  82.          color == null ? "" : "color: " + color
  83.        }">[${hour}:${minutes}:${seconds}] ${text}</p>`,
  84.         time: {
  85.           minutes: minutes,
  86.           seconds: seconds
  87.         }
  88.       };
  89.       this.entries.push(object);
  90.     },
  91.     clear: function() {
  92.       this.entries = [];
  93.     },
  94.     hasEmoji: function(str) {
  95.       var ranges = [
  96.       '\ud83c[\udf00-\udfff]', // U+1F300 to U+1F3FF
  97.       '\ud83d[\udc00-\ude4f]', // U+1F400 to U+1F64F
  98.       '\ud83d[\ude80-\udeff]' // U+1F680 to U+1F6FF
  99.       ];
  100.       if (str.match(ranges.join('|'))) {
  101.           return true;
  102.       } else {
  103.           return false;
  104.       }
  105.     },
  106.     toggleInput: function(toggle) {
  107.       this.toggle = toggle;
  108.       mp.invoke("focus", toggle);
  109.       mp.trigger("setChatState", toggle);
  110.       if (toggle == true) {
  111.         $(".chatInputs").css("display", "flex");
  112.         $(".chatWindow").addClass("active");
  113.         $("#text").focus();
  114.       } else {
  115.         $(".chatInputs").fadeOut("fast", () => {
  116.           $(".chatInputs").css("display", "none");
  117.           $(".chatWindow").removeClass("active");
  118.         });
  119.       }
  120.     },
  121.     sendMessage: function() {
  122.       if(this.spamActive == true) return false;
  123.       this.spamActive = true;
  124.       setTimeout(() => { this.spamActive = false; }, 1500);
  125.       this.toggleInput(false);
  126.       let value = this.chatText;
  127.       if (value && value.length > 0) {
  128.         this.lastMessage = value;
  129.         if (value[0] == "/" && !this.hasEmoji(value)) {
  130.           value = value.substr(1);
  131.           mp.invoke("command", value);
  132.         } else {
  133.           mp.invoke("chatMessage", value);
  134.         }
  135.       }
  136.  
  137.  
  138.       this.chatText = "";
  139.             // mp.trigger("disableChatInput");
  140.     }
  141.   },
  142.   mounted: function() {
  143.     let self = this;
  144.     $("body").keydown(function(event) {
  145.             if(event.which == 13 && self.toggle == true) {
  146.                 self.sendMessage();
  147.       }
  148.       if(event.which == 84) {
  149.         if(self.hudStatus > 0 && self.activeModal == null) {
  150.           self.toggleInput(true);
  151.         }
  152.       }
  153.     });
  154.   }
  155. };
  156. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement