dodex-vertx
Version:
A java asynchronous server for Dodex and Dodex-mess
2 lines (1 loc) • 4.5 kB
JavaScript
(()=>{var i={},b=o=>{let e=o.split(" "),r=e,n=[],s=[],t={};for(let c=0;c<e.length;c++){let u=e[c];if(/@group|[+|-|=|:].*/.test(u)){n.push(u);let g=/([+|-|=|:])$/.test(u);(u.length===1||g)&&(n.push(e[c+1]),e=e.filter(l=>l!==e[c+1])),r=r.filter(l=>l!==u)}else s.push(u)}return t.groupData=n.join(""),t.finalContent=s.join(" "),t},p=(o,e,r)=>{let n=/^(.*?)$/.exec(o.groupData.substring(r.index+1));if(n)try{n=/^(.*?)[:|<br>]/.exec(o.groupData.substring(r.index+1)).pop()}catch{n=/^(.*?)$/.exec(o.groupData.substring(r.index+1)).pop()}let s=/:(.*?)$/.exec(o.groupData.substring(r.index+1));if(s&&(s=/:(.*?)$/.exec(o.groupData.substring(r.index+1)).pop()),/@group|[+]|-|=|:.*/.test(n+s)||!n||!n.length||n.trim()==="<br>")try{throw new Error("Invalid Group Command "+content)}catch(t){return console.error(t),e.status=-1,e.errorMessage=t.message,e}return e.groupName=n,e.memberName=s,e.groupMessage=o.finalContent,e.status=0,e.errorMessage=null,e.groupOwner=document.querySelector(".handle").innerHTML,e.ownerId=doDexMess.socket.url.split("id=")[1],e},h=(o,e)=>{let r;if(o.groupData&&o.groupData.startsWith("@group")){let n=["-","[+]","="],s,t;i={};for(let c=0;c<3;c++){let u=new RegExp(n[c]).exec(o.groupData);if(u)s=u[0];else continue;switch(s){case"+":r="/addGroup",i=p(o,i,u),i.method="PUT",i.uri=r;break;case"-":r="/removeGroup",i=p(o,i,u),i.method="DELETE",i.uri=r;break;case"=":i=p(o,i,u),i.method="POST",i.uri="/getGroup/"+i.groupName;break;default:console.log("Error Command/groupName******:",s,i.groupName);break}}if(!s&&!i.groupName)try{throw new Error("Invalid Group Command "+e)}catch(c){return console.error(c),i.status=-1,i.errorMessage=c.message,i}return i}};var w=!1,S=()=>{let o;try{o=document.querySelectorAll(".dial");for(let e of o)window.observer||e.addEventListener("dblclick",L)}catch(e){console.error("Error: "+e.message)}},f=async()=>{let o=document.querySelector("#dodexComm").querySelector(".user-msg"),e=document.querySelector("#dodexComm").querySelector("select");var r=o.innerHTML.replace(/ /g,"").trim();let n=r.toLowerCase().includes("@group");if(!(r.length<2||r==="<br>"))if(r.length>1&&!n){let s=M(r);window.doDexMess.socket.send(s),o.innerHTML=""}else{let s=b(r),t=h(s,r);if(!t){chatbox.innerHTML+="Invalid input: "+r+"<br>",o.innerHTML="";return}if(t.status===-1){chatbox.innerHTML+=t.errorMessage+"<br>",o.innerHTML="";return}let c=M(t.groupMessage);if(t.groupMessage=c,t.method==="DELETE"&&(t.groupMessage.length===0||t.groupMessage===";users!![]")&&confirm("Deleting 'group/members(s)'. Are you sure?")===!1)return;w&&console.log("Post Message:",x+"//"+v+t.uri,t);let d=await C(x+"//"+v+t.uri,t,t.method);o.innerHTML="";let a=await d.json();if(chatbox.innerHTML+=typeof a=="number"?"Failed with "+a:`${d.statusText.toLowerCase()}<br>`,chatbox.innerHTML+=a.errorMessage!==null?a.errorMessage+"<br>":"",w&&console.log("Return data",a),t.groupMessage!==""&&a.status===0&&t.groupMessage.trim().indexOf(";users!!")>5&&(o.innerHTML=t.groupMessage,f()),typeof a.members<"u"){for(let l=e.length-1;l>-1;l--)e.removeChild(e[l]);let g;typeof a.members=="string"?g=JSON.parse(a.members):g=a.members;for(let l=0;l<g.length;l++){let m=document.createElement("OPTION");m.text=g[l].name,m.value=g[l].name,e.add(m)}}}},M=o=>{if(o.indexOf(";users!!")===-1){let e=document.querySelector("#dodexComm"),r=e.querySelector("select");if(e&&r){let n=T(r);e.querySelector('a[name="private"]').innerHTML==="Broadcast"&&(o+=";users!!"+JSON.stringify(n))}}return o},T=o=>{let e=[],r;var n=o.options.length;for(let s=0;s<n;s++)r=o.options[s],r.selected&&e.push(r.value);return e},L=()=>{let o=document.querySelector("#usermsg");if(!o||window.observer)return;let e={childList:!0,subtree:!0,attributes:!1},r=(n,s)=>{for(let t of n)if(t&&t.target&&t.target.id==="usermsg"){document.querySelector(".input-send").onclick=f,window.doDexMess.socket.onopen=()=>{document.querySelector(".input-send").onclick=f};return}};window.observer||(window.observer=new MutationObserver(r),window.observer.observe(o,e))},C=async(o="",e={},r="GET")=>await fetch(o,{method:r,mode:"cors",cache:"no-cache",credentials:"same-origin",headers:{"Content-Type":"application/json"},redirect:"follow",referrerPolicy:"no-referrer",body:r==="GET"?null:JSON.stringify(e)}).catch(s=>{console.error(s.message)}),x=window.location.protocol,y=window.location.port=="8890"?"8880":window.location.port=="8888"?"8087":window.location.port.toString(),v=window.location.hostname+(y.length>0?":"+y:"");window.groupListener=S;})();