ips.templates.set(`realtime.whosTyping.wrapper`,`
 <div class='ipsLiveActivity ipsLiveActivity--typing ipsFlex-inline'>
  <p class='ipsType_reset'>{{{ typingString }}}</p>
 </div>
`);ips.templates.set(`realtime.whosTyping.name`,`
 <em>{{name}}</em>
`);ips.templates.set(`realtime.whosViewing.wrapper`,`
 <div class='ipsLiveActivity ipsLiveActivity--viewing ipsFlex-inline ipsFlex-ai:center'>
  {{#photos}}<div class='ipsLiveActivity__photos ipsCaterpillar'>{{{photos}}}</div>{{/photos}}
  <p class='ipsType_reset'>{{{ viewingString }}}</p>
 </div>
`);ips.templates.set(`realtime.whosViewing.name`,`
 <em>{{name}}</em> 
`);ips.templates.set(`realtime.whosViewing.photo`,`
 <img src='{{photo}}' class='ipsLiveActivity__photo ipsUserPhoto ipsCaterpillar__item ipsDimension:1' alt="">
`);;
(function($,_,undefined){"use strict";ips.controller.register("cloud.front.realtime.forumsReplyArea",{initialize:function(){this.on("whosTyping.change",this.handleWhosTyping);this.setup();},setup:function(){this._whosTypingContainer=this.scope.find('[data-role="whosTyping"]');this._whosTypingContainer.hide();},handleWhosTyping:function(e,data){if(!data.users.length){this._whosTypingContainer.slideUp('fast',()=>this._whosTypingContainer.html('').hide());return;}
let typingString;switch(data.users.length){case 1:typingString=ips.getString('whosTypingOne',{first:ips.templates.render('realtime.whosTyping.name',{name:data.users[0].username})});break;case 2:typingString=ips.getString('whosTypingTwo',{first:ips.templates.render('realtime.whosTyping.name',{name:data.users[0].username}),second:ips.templates.render('realtime.whosTyping.name',{name:data.users[1].username})});break;default:typingString=ips.getString('whosTypingMultiple');break;}
const contents=ips.templates.render('realtime.whosTyping.wrapper',{typingString});this._whosTypingContainer.html(contents).slideDown('fast');}});})(jQuery,_);;
(function($,_,undefined){"use strict";ips.controller.register("cloud.front.realtime.whosTyping",{users:{},initialize:function(){this.on(document,"socket.user-typing-start",this.handleTypingStart);this.on(document,"socket.user-typing-end",this.handleTypingEnd);this.on("editor.focused",this.editorFocusBlurEvents);},destroy:function(){this._clearAllUsers();},handleTypingStart:function(e,data){if(data.userId===ips.getSetting("memberID")){return;}
const{userId,username,photo}=data;let shouldTriggerChange=true;if(!_.isUndefined(this.users[userId])){shouldTriggerChange=false;}
this._clearUser(userId);this.users[userId]={timeout:setTimeout(()=>this._userTimeout(userId),5000),username,photo,};if(shouldTriggerChange){this._triggerChangeEvent();}},handleTypingEnd:function(e,data){if(data.userId===ips.getSetting("memberID")){return;}
this._clearUser(data.userId);this._triggerChangeEvent();},_clearUser:function(userId){if(_.isUndefined(this.users[userId])){return;}
clearTimeout(this.users[userId].timeout);delete this.users[userId];},_clearAllUsers:function(){if(!Object.keys(this.users).length){return;}
Object.keys(this.users).forEach((userId)=>{this._clearUser(userId);});},_userTimeout:function(userId){this._clearUser(userId);this._triggerChangeEvent();},_triggerChangeEvent:function(){const users=Object.entries(this.users).map(([userId,userData])=>({userId,...userData}));this.trigger("whosTyping.change",{users});},editorFocusBlurEvents:function(e){if(!ips.utils.sockets.enabled()){return;}
if(ips.getSetting("realtime_typing")&&ips.getSetting("realtime_typing")===false){return;}
if(_.isUndefined(ips.getSetting("isAnonymous"))||ips.getSetting("isAnonymous")){return;}
ips.utils.sockets.send(e.namespace==="focused"?"editor:typing-start":"editor:typing-end");},});})(jQuery,_);;
(function($,_,undefined){"use strict";ips.controller.register("cloud.front.realtime.whosViewing",{_outboundTimeout:null,_enabled:false,initialize:function(){this.on(document,"socket.connected",this.handleSocketConnection);this.on(document,"socket.disconnected",this.handleSocketDisconnection);this.on(document,"socket.active-on-page",this.handleUserActive);this.setup();},setup:function(){this.scope.hide();if(!ips.utils.sockets.enabled()){return;}
if(ips.getSetting("realtime_viewing")&&ips.getSetting("realtime_viewing")===false){return;}
if(_.isUndefined(ips.getSetting("isAnonymous"))||ips.getSetting("isAnonymous")){return;}
this._enabled=true;this._outboundTimeout=setInterval(()=>{ips.utils.sockets.send("view:pageView");},5000);},destroy:function(){clearInterval(this._outboundTimeout);},handleSocketConnection:function(){if(!this._enabled){return;}
ips.utils.sockets.send("view:pageView");},handleSocketDisconnection:function(){clearInterval(this._outboundTimeout);},handleUserActive:function(e,data){const otherUsers=data.activeUsers.filter((user)=>user.userId!==ips.getSetting("memberID"));if(!otherUsers.length){this.scope.slideUp("fast",()=>this.scope.html("").hide());return;}
const contents=ips.templates.render("realtime.whosViewing.wrapper",{viewingString:this._buildViewingText(otherUsers),photos:this._buildViewingPhotos(otherUsers),});this.scope.html(contents).slideDown("fast");},_buildViewingText:function(users){if(users.length===1){return ips.getString("whosViewingOne",{first:ips.templates.render("realtime.whosViewing.name",{name:users[0].username}),});}else if(users.length===2){return ips.getString("whosViewingTwo",{first:ips.templates.render("realtime.whosViewing.name",{name:users[0].username}),second:ips.templates.render("realtime.whosViewing.name",{name:users[1].username}),});}
return ips.pluralize(ips.getString("whosViewingMultiple"),users.length);},_buildViewingPhotos:function(users){return users.slice(0,2).map((user)=>ips.templates.render("realtime.whosViewing.photo",{photo:user.photo})).join("");},});})(jQuery,_);;