You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
7.0 KiB
1 lines
7.0 KiB
!function(a,b,c,d){a.fn.chat=function(b,c,e){var f=a.extend(!0,{},a.fn.chat.settings,e),g=f.className,h=f.namespace,i=f.selector,j=f.error,k=arguments||!1;return a(this).each(function(){var e,l,m,n,o,p,q,r=a(this),s=r.find(i.expandButton),t=r.find(i.userListButton),u=r.find(i.userList),v=(r.find(i.room),r.find(i.userCount)),w=r.find(i.log),x=(r.find(i.message),r.find(i.messageInput)),y=r.find(i.messageButton),z=r.data("module"),A="",B={};return q={width:{log:w.width(),userList:u.outerWidth()},initialize:function(){return Pusher===d&&q.error(j.pusher),b===d||c===d?(q.error(j.key),!1):f.endpoint.message||f.endpoint.authentication?(p=new Pusher(b),Pusher.channel_auth_endpoint=f.endpoint.authentication,e=p.subscribe(c),e.bind("pusher:subscription_succeeded",q.user.list.create),e.bind("pusher:subscription_error",q.error),e.bind("pusher:member_added",q.user.joined),e.bind("pusher:member_removed",q.user.left),e.bind("update_messages",q.message.receive),a.each(f.customEvents,function(a,b){e.bind(a,b)}),t.on("click."+h,q.event.toggleUserList),s.on("click."+h,q.event.toggleExpand),x.on("keydown."+h,q.event.input.keydown).on("keyup."+h,q.event.input.keyup),y.on("mouseenter."+h,q.event.hover).on("mouseleave."+h,q.event.hover).on("click."+h,q.event.submit),w.animate({scrollTop:w.prop("scrollHeight")},400),r.data("module",q).addClass(g.loading),void 0):(q.error(j.endpoint),!1)},refresh:function(){t.removeClass(g.active),q.width={log:w.width(),userList:u.outerWidth()},t.hasClass(g.active)&&q.user.list.hide(),r.data("module",q)},user:{updateCount:function(){f.userCount&&(B=r.data("users"),n=0,a.each(B,function(){n++}),v.html(f.templates.userCount(n)))},joined:function(b){B=r.data("users"),"anonymous"!=b.id&&B[b.id]===d&&(B[b.id]=b.info,f.randomColor&&b.info.color===d&&(b.info.color=f.templates.color(b.id)),A=f.templates.userList(b.info),b.info.isAdmin?a(A).prependTo(u):a(A).appendTo(u),f.partingMessages&&(w.append(f.templates.joined(b.info)),q.message.scroll.test()),q.user.updateCount())},left:function(a){B=r.data("users"),a!==d&&"anonymous"!==a.id&&(delete B[a.id],r.data("users",B),u.find("[data-id="+a.id+"]").remove(),f.partingMessages&&(w.append(f.templates.left(a.info)),q.message.scroll.test()),q.user.updateCount())},list:{create:function(b){B={},b.each(function(a){"anonymous"!==a.id&&"undefined"!==a.id&&(f.randomColor&&a.info.color===d&&(a.info.color=f.templates.color(a.id)),A=a.info.isAdmin?f.templates.userList(a.info)+A:A+f.templates.userList(a.info),B[a.id]=a.info)}),r.data("users",B).data("user",B[b.me.id]).removeClass(g.loading),u.html(A),q.user.updateCount(),a.proxy(f.onJoin,u.children())()},show:function(){w.animate({width:q.width.log-q.width.userList},{duration:f.speed,easing:f.easing,complete:q.message.scroll.move})},hide:function(){w.stop().animate({width:q.width.log},{duration:f.speed,easing:f.easing,complete:q.message.scroll.move})}}},message:{scroll:{test:function(){o=w.prop("scrollHeight")-w.height(),Math.abs(w.scrollTop()-o)<f.scrollArea&&q.message.scroll.move()},move:function(){o=w.prop("scrollHeight")-w.height(),w.scrollTop(o)}},send:function(b){q.utils.emptyString(b)||a.api({url:f.endpoint.message,method:"POST",data:{chat_message:{content:b,timestamp:(new Date).getTime()}}})},receive:function(a){m=a.data,B=r.data("users"),l=r.data("user"),B[m.userID]!==d&&(l===d||l.id!=m.userID)&&(m.user=B[m.userID],q.message.display(m))},display:function(b){w.append(f.templates.message(b)),q.message.scroll.test(),a.proxy(f.onMessage,w.children().last())()}},expand:function(){r.addClass(g.expand),a.proxy(f.onExpand,r)(),q.refresh()},contract:function(){r.removeClass(g.expand),a.proxy(f.onContract,r)(),q.refresh()},event:{input:{keydown:function(a){13==a.which&&y.addClass(g.down)},keyup:function(a){13==a.which&&(y.removeClass(g.down),q.event.submit())}},submit:function(){var a=x.val(),b=r.data("user");b===d||q.utils.emptyString(a)||(q.message.send(a),q.message.display({user:b,text:a}),q.message.scroll.move(),x.val(""))},toggleExpand:function(){r.hasClass(g.expand)?(s.removeClass(g.active),q.contract()):(s.addClass(g.active),q.expand())},toggleUserList:function(){w.is(":animated")||(t.hasClass(g.active)?(t.removeClass("active"),q.user.list.hide()):(t.addClass(g.active),q.user.list.show()))}},utils:{emptyString:function(a){return"string"==typeof a?-1==a.search(/\S/):!1}},debug:function(a){f.debug&&console.info(f.moduleName+": "+a)},error:function(a){console.warn(f.moduleName+": "+a)},invoke:function(b,c,e){var f;return e=e||Array.prototype.slice.call(arguments,2),"string"==typeof b&&z!==d&&(b=b.split("."),a.each(b,function(b,c){return a.isPlainObject(z[c])?(z=z[c],!0):a.isFunction(z[c])?(f=z[c],!0):(q.error(j.method),!1)})),a.isFunction(f)?f.apply(c,e):!1}},z!==d&&k?("invoke"==k[0]&&(k=Array.prototype.slice.call(k,1)),q.invoke(k[0],this,Array.prototype.slice.call(k,1))):(q.initialize(),void 0)}),this},a.fn.chat.settings={name:"Chat",debug:!1,namespace:"chat",onJoin:function(){},onMessage:function(){},onExpand:function(){},onContract:function(){},customEvents:{},partingMessages:!1,userCount:!0,randomColor:!0,speed:300,easing:"easeOutQuint",scrollArea:9999,endpoint:{message:!1,authentication:!1},errors:{method:"The method you called is not defined",endpoint:"Please define a message and authentication endpoint.",key:"You must specify a pusher key and channel.",pusher:"You must include the Pusher library."},className:{expand:"expand",active:"active",hover:"hover",down:"down",loading:"loading"},selector:{userCount:".actions .message",userListButton:".actions .button.user-list",expandButton:".actions .button.expand",room:".room",userList:".room .user-list",log:".room .log",message:".room .log .message",author:".room log .message .author",messageInput:".talk input",messageButton:".talk .send.button"},templates:{userCount:function(a){return a+" users in chat"},color:function(){var a=["#000000","#333333","#666666","#999999","#CC9999","#CC6666","#CC3333","#993333","#663333","#CC6633","#CC9966","#CC9933","#999966","#CCCC66","#99CC66","#669933","#669966","#33A3CC","#336633","#33CCCC","#339999","#336666","#336699","#6666CC","#9966CC","#333399","#663366","#996699","#993366","#CC6699"];return a[Math.floor(Math.random()*a.length)]},message:function(a){var b="";return a.user.isAdmin?(a.user.color="#55356A",b+='<div class="admin message">',b+='<span class="quirky ui flag team"></span>'):b+='<div class="message">',b+="<p>",b+=a.user.color!==d?'<span class="author" style="color: '+a.user.color+';">'+a.user.name+"</span>: ":'<span class="author">'+a.user.name+"</span>: ",b+=""+a.text+" </p>"+"</div>"},joined:function(a){return typeof a.name!==d?'<div class="status">'+a.name+" has joined the chat.</div>":!1},left:function(a){return typeof a.name!==d?'<div class="status">'+a.name+" has left the chat.</div>":!1},userList:function(a){var b="";return a.isAdmin&&(a.color="#55356A"),b+='<div class="user" data-id="'+a.id+'">'+' <div class="image">'+' <img src="'+a.avatarURL+'">'+" </div>",b+=a.color!==d?' <p><a href="/users/'+a.id+'" target="_blank" style="color: '+a.color+';">'+a.name+"</a></p>":' <p><a href="/users/'+a.id+'" target="_blank">'+a.name+"</a></p>",b+="</div>"}}}}(jQuery,window,document);
|