t.children(".ffz-room-row").removeClass("active"),s&&t.children('.ffz-room-row[data-room="'+s.get("id")+'"]').addClass("active").children("span").text("")),this._ffz_group_table&&(t=jQuery(this._ffz_group_table),t.children(".ffz-room-row").removeClass("active"),s&&t.children('.ffz-room-row[data-room="'+s.get("id")+'"]').addClass("active").children("span").text("")),!e.has_bttv&&e.settings.group_tabs&&this._ffz_tabs){varn=jQuery(this._ffz_tabs);if(n.children(".ffz-chat-tab").removeClass("active"),s&&s._ffz_tab){s._ffz_tab.classList.remove("tab-mentioned"),s._ffz_tab.classList.remove("hidden"),s._ffz_tab.classList.add("active");vari=s._ffz_tab.querySelector("span");i&&(i.innerHTML="")}varo=s&&s.get("canInvite");this._ffz_invite&&this._ffz_invite.classList.toggle("hidden",!o),this.set("controller.showInviteUser",o&&this.get("controller.showInviteUser")),this.$(".chat-room").css("top",this._ffz_tabs.offsetHeight+"px")}}),ffzRebuildMenu:function(){return},ffzBuildRow:function(t,s,n,r){vard,u=document.createElement("tr"),c=document.createElement("td"),l=document.createElement("td"),h=document.createElement("td"),f=document.createElement("td"),m=s.get("isGroupRoom"),_=s===t.get("controller.currentRoom"),p=s.get("tmiRoom.displayName")||(m?s.get("tmiRoom.name"):i.get_capitalization(s.get("id"),function(t){e.log("Name for Row: "+t),l.innerHTML=o.sanitize(t)}));returnl.className="ffz-room",l.innerHTML=o.sanitize(p),n?(c.innerHTML=a.CAMERA,c.title=l.title="Current Channel",c.className=l.className="tooltip"):r&&(c.innerHTML=a.EYE,c.title=l.title="Hosted Channel",c.className=l.className="tooltip"),h.className=f.className="ffz-row-switch",h.innerHTML='<a class="switch'+(-1!==e.settings.pinned_rooms.indexOf(s.get("id"))?" active":"")+'"><span></span></a>',f.innerHTML='<a class="switch'+(-1!==e.settings.visible_rooms.indexOf(s.get("id"))?" active":"")+'"><span></span></a>',u.setAttribute("data-room",s.get("id")),u.className="ffz-room-row",u.classList.toggle("current-channel",n),u.classList.toggle("host-channel",r),u.classList.toggle("group-chat",m),u.classList.toggle("active",_),u.appendChild(c),u.appendChild(l),m?(d=document.createElement("a"),d.className="leave-chat tooltip",d.innerHTML=a.CLOSE,d.title="Leave Group",l.appendChild(d),d.addEventListener("click",function(t){t.preventDefault(),t.stopPropagation&&t.stopPropagation(),confirm('Are you sure you want to leave the group room "'+p+'"?')&&s.get("isGroupRoom")&&s.del()})):(u.appendChild(h),d=h.querySelector("a.switch"),d.addEventListener("click",function(t){t.preventDefault(),t.stopPropagation&&t.stopPropagation();varn=s.get("id"),i=-1!==e.settings.pinned_rooms.indexOf(n);i?e._leave_room(n):e._join_room(n),this.classList.toggle("active",!i)})),u.appendChild(f),d=f.querySelector("a.switch"),d.addEventListener("click",function(n){n.preventDefault(),n.stopPropagation&&n.stopPropagation();vari=s.get("id"),o=e.settings.visible_rooms,a=-1!==o.indexOf(i);a?o.removeObject(i):o.push(i),e.settings.set("visible_rooms",o),this.classList.toggle("active",!a),t.ffzRebuildTabs()}),u.addEventListener("click",function(){vare=t.get("controller");e.focusRoom(s),e.set("showList",!1)}),u},ffzEnableTabs:function(){if(!e.has_bttv&&e.settings.group_tabs){this.$(".chat-header").addClass("hidden");vart=this._ffz_tabs=document.createElement("div");t.id="ffz-group-tabs",this.$(".chat-header").after(t),this.ffzRebuildTabs()}},ffzRebuildTabs:function(){if(!e.has_bttv&&e.settings.group_tabs){vart=this._ffz_tabs||this.get("element").querySelector("#ffz-group-tabs");if(t){t.innerHTML="";vars=document.createElement("a"),n=this;s.className="button glyph-only tooltip",s.title="Chat Room Management",s.innerHTML=a.ROOMS,s.addEventListener("click",function(){vart=n.get("controller");t&&t.set("showList",!t.get("showList"))}),t.appendChild(s),s=document.createElement("a"),s.className="button glyph-only tooltip invite",s.title="Invite a User",s.innerHTML=a.INVITE,s.addEventListener("click",function(){vart=n.get("controller");t&&t.set("showInviteUser",t.get("currentRoom.canInvite")&&!t.get("showInviteUser"))}),
if(1===t)return"Purge";if(l[t])returnl[t];vare,s,n,i,o;e=Math.floor(t/604800),o=t%604800,s=Math.floor(o/86400),o%=86400,n=Math.floor(o/3600),o%=3600,i=Math.floor(o/60),o%=60;vara=l[t]=(e?e+"w":"")+(s||e&&(n||i||o)?s+"d":"")+(n||(e||s)&&(i||o)?n+"h":"")+(i||(e||s||n)&&o?i+"m":"")+(o?o+"s":"");returna};try{i=t.require&&t.require("ember-twitch-chat/helpers/chat-line-helpers")}catch(f){}o.basic_settings.enhanced_moderation_cards={type:"boolean",no_bttv:!0,category:"Chat",name:"Enhanced Moderation Cards",help:"Improve moderation cards with hotkeys, additional buttons, chat history, and other information to make moderating easier.",get:function(){returnthis.settings.mod_card_hotkeys&&this.settings.mod_card_info&&this.settings.mod_card_history},set:function(t){this.settings.set("mod_card_hotkeys",t),this.settings.set("mod_card_info",t),this.settings.set("mod_card_history",t)}},o.basic_settings.chat_hover_pause={type:"boolean",no_bttv:!0,category:"Chat",name:"Pause Chat Scrolling on Mouse Hover",help:"Automatically prevent the chat from scrolling when moving the mouse over it to prevent moderation mistakes and link misclicks.",get:"chat_hover_pause",set:"chat_hover_pause"},o.settings_info.chat_hover_pause={type:"boolean",value:!1,no_bttv:!0,category:"Chat Moderation",name:"Pause Chat Scrolling on Mouse Hover",help:"Automatically prevent the chat from scrolling when moving the mouse over it to prevent moderation mistakes and link misclicks.",on_update:function(t){this._roomv&&(t?this._roomv.ffzEnableFreeze():this._roomv.ffzDisableFreeze())}},o.settings_info.short_commands={type:"boolean",value:!0,no_bttv:!0,category:"Chat Moderation",name:"Short Moderation Commands",help:"Use /t, /b, and /u in chat in place of /timeout, /ban, /unban for quicker moderation, and use /p for 1 second timeouts."},o.settings_info.mod_card_hotkeys={type:"boolean",value:!1,no_bttv:!0,category:"Chat Moderation",name:"Moderation Card Hotkeys",help:"With a moderation card selected, press B to ban the user, T to time them out for 10 minutes, P to time them out for 1 second, or U to unban them. ESC closes the card."},o.settings_info.mod_card_info={type:"boolean",value:!0,no_bttv:!0,category:"Chat Moderation",name:"Moderation Card Additional Information",help:"Display a channel's follower count, view count, and account age on moderation cards."},o.settings_info.mod_card_history={type:"boolean",value:!1,no_bttv:!0,category:"Chat Moderation",name:"Moderation Card History",help:"Display a few of the user's previously sent messages on moderation cards.",on_update:function(t){if(!t&&this.rooms)for(vareinthis.rooms){vars=this.rooms[e];s&&(s.user_history=void0)}}},o.settings_info.mod_card_buttons={type:"button",value:[],category:"Chat Moderation",no_bttv:!0,name:"Moderation Card Additional Buttons",help:"Add additional buttons to moderation cards for running chat commands on those users.",method:function(){for(vart="",e=0;e<this.settings.mod_card_buttons.length;e++){vars=this.settings.mod_card_buttons[e];t+=-1!==s.indexOf(" ")?' "'+s+'"':" "+s}varn=prompt('Moderation Card Additional Buttons\n\nPlease enter a list of additional commands to display buttons for on moderation cards. Commands are separated by spaces. To include spaces in a command, surround the command with double quotes ("). Use "{user}" to insert the user\'s username into the command, otherwise it will be appended to the end.\n\nExample: !permit "!reg add {user}"',t);if(null!==n&&void0!==n){vari=[];for(n=n.trim();n;)if('"'===n.charAt(0)){varo=n.indexOf('"',1);-1===o&&(o=n.length);vara=n.substr(1,o-1);a&&i.push(a),n=n.substr(o+1)}else{varr=n.indexOf(" ");if(-1===r)n&&i.push(n),n="";else{vara=n.substr(0,r);a&&i.push(a),n=n.substr(r+1)}}this.settings.set("mod_card_buttons",i)}}},o.settings_info.mod_card_durations={type:"button",value:[300,600,3600,43200,86400,604800],category:"Chat Moderation",no_bttv:!0,name:"Moderation Card Timeout Buttons",help:"Add additional timeout buttons to moderation cards with specific durations.",method:function(){vart=this.settings.mod_card_durations.join("
n.className="heading",n.innerHTML="Restore Settings",o.appendChild(n),u.className="clearfix option",c.type="file",c.addEventListener("change",function(){f.load_settings_file(this.files[0])}),l.href="#",l.innerHTML="Restore from File",l.addEventListener("click",function(t){t.preventDefault(),c.click()}),h.className="help",h.innerHTML="This loads settings from a previously generated JSON file.",u.appendChild(l),u.appendChild(h),o.appendChild(u),e.appendChild(i),e.appendChild(o)},render_basic:function(t,e){vars={},n=[],o=-1!==navigator.userAgent.indexOf("Android");for(varaini.basic_settings)if(i.basic_settings.hasOwnProperty(a)){varr=i.basic_settings[a],d=r.category||"Miscellaneous",u=s[d];if(void0!==r.visible&&null!==r.visible){varc=r.visible;if("function"==typeofr.visible&&(c=r.visible.bind(this)()),!c)continue}o&&r.no_mobile||(u||(n.push(d),u=s[d]=[]),u.push([a,r]))}n.sort(function(t,e){vart=t.toLowerCase(),e=e.toLowerCase();return"debugging"===t&&(t="zzz"+t),"debugging"===e&&(e="zzz"+e),e>t?-1:t>e?1:0});for(varl=(this._ffz_basic_settings_page||n[0],0);l<n.length;l++){varh=n[l],f=s[h],m=document.createElement("div"),_=document.createElement("div");_.className="heading",m.className="chat-menu-content",m.setAttribute("data-category",h),_.innerHTML=h,m.appendChild(_),f.sort(function(t,e){vart=t[1],e=e[1],s="boolean"===t.type?1:2,n="boolean"===e.type?1:2,i=t.name.toLowerCase(),o=e.name.toLowerCase();returnn>s?-1:s>n?1:o>i?-1:i>o?1:0});for(varp=0;p<f.length;p++){vara=f[p][0],r=f[p][1],g=document.createElement("p"),v="button"!==r.type&&"function"==typeofr.get?r.get.bind(this)():this.settings.get(r.get);if(g.className="clearfix",this.has_bttv&&r.no_bttv){varb=document.createElement("span"),y=document.createElement("span");b.className="switch-label",b.innerHTML=r.name,y=document.createElement("span"),y.className="help",y.innerHTML="Disabled due to incompatibility with BetterTTV.",g.classList.add("disabled"),g.appendChild(b),g.appendChild(y)}else{if("boolean"==r.type){varw=document.createElement("a"),b=document.createElement("span");w.className="switch",w.classList.toggle("active",v),w.innerHTML="<span></span>",b.className="switch-label",b.innerHTML=r.name,g.appendChild(w),g.appendChild(b),w.addEventListener("click",toggle_basic_setting.bind(this,w,a))}elseif("select"===r.type){varz=document.createElement("select"),b=document.createElement("span");b.className="option-label",b.innerHTML=r.name;for(varkinr.options){varC=document.createElement("option");C.value=JSON.stringify(k),v===k&&C.setAttribute("selected",!0),C.innerHTML=r.options[k],z.appendChild(C)}z.addEventListener("change",option_basic_setting.bind(this,z,a)),g.appendChild(b),g.appendChild(z)}else{g.classList.add("option");varE=document.createElement("a");E.innerHTML=r.name,E.href="#",g.appendChild(E),E.addEventListener("click",r.method.bind(this))}if(r.help){vary=document.createElement("span");y.className="help",y.innerHTML=r.help,g.appendChild(y)}}m.appendChild(g)}e.appendChild(m)}},render_advanced:function(t,e){vars={},n=[],o=-1!==navigator.userAgent.indexOf("Android");for(varaini.settings_info)if(i.settings_info.hasOwnProperty(a)){varr=i.settings_info[a],d=r.category||"Miscellaneous",u=s[d];if(void0!==r.visible&&null!==r.visible){varc=r.visible;if("function"==typeofr.visible&&(c=r.visible.bind(this)()),!c)continue}o&&r.no_mobile||(u||(n.push(d),u=s[d]=[]),u.push([a,r]))}n.sort(function(t,e){vart=t.toLowerCase(),e=e.toLowerCase();return"debugging"===t&&(t="zzz"+t),"debugging"===e&&(e="zzz"+e),e>t?-1:t>e?1:0});for(varl=this,h=this._ffz_settings_page||n[0],f=0;f<n.length;f++){varm=n[f],_=s[m],p=document.createElement("div"),g=document.createElement("div");g.className="heading",p.className="chat-menu-content collapsable",p.setAttribute("data-category",m),p.classList.toggle("collapsed",h!==m),g.innerHTML=m,p.appendChild(g),p.addEventListener("click",function(){if(this.classList.contains("collapsed")){for(vart=this,s=e.querySelectorAll(".chat-menu-content:not(.collapsed)"),n=0;n<s.length;n++)s[n].classList.add("collapsed");l._ffz_setti
v||(v=!0,r._pastebin(r._log_data.join("\n"),function(t){v=!1,t?prompt("Your FrankerFaceZ logs have been uploaded to the URL:",t):alert("There was an error uploading the FrankerFaceZ logs.")}))}),e.appendChild(g)}}},{"../constants":5}],24:[function(e,s,n){vari=t.FrankerFaceZ,o=e("../constants");i.basic_settings.dark_twitch={type:"boolean",no_bttv:!0,category:"General",name:"Dark Twitch",help:"Apply a dark background to channels and other related pages for easier viewing.",get:function(){returnthis.settings.dark_twitch},set:function(t){this.settings.set("dark_twitch",t),this.settings.set("dark_no_blue",t)}},i.basic_settings.separated_chat={type:"boolean",no_bttv:!0,category:"Chat",name:"Separated Lines",help:"Use alternating rows and thin lines to visually separate chat messages for easier reading.",get:function(){returnthis.settings.chat_rows&&"0"!==this.settings.chat_separators},set:function(t){this.settings.set("chat_rows",t),this.settings.set("chat_separators",t?"2":"0")}},i.basic_settings.minimalistic_chat={type:"boolean",category:"Chat",name:"Minimalistic UI",help:"Hide all of chat except messages and the input box and reduce chat margins.",get:function(){returnthis.settings.minimal_chat&&this.settings.chat_padding},set:function(t){this.settings.set("minimal_chat",t),this.settings.set("chat_padding",t)}},i.basic_settings.high_contrast={type:"boolean",category:"Chat",no_bttv:!0,name:"High Contrast",help:"Display chat using white and black for maximum contrast. This is suitable for capturing and chroma keying chat to display on stream.",get:function(){return"222"!==this.settings.high_contrast_chat},set:function(t){this.settings.set("high_contrast_chat",t?"111":"222")}},i.basic_settings.keywords={type:"button",category:"Chat",no_bttv:!0,name:"Highlight Keywords",help:"Set additional keywords that will be highlighted in chat.",method:function(){i.settings_info.keywords.method.bind(this)()}},i.basic_settings.banned_words={type:"button",category:"Chat",no_bttv:!0,name:"Banned Keywords",help:"Set a list of words that will be removed from chat messages, locally.",method:function(){i.settings_info.banned_words.method.bind(this)()}},i.settings_info.twitch_chat_dark={type:"boolean",value:!1,visible:!1},i.settings_info.dark_twitch={type:"boolean",value:!1,no_bttv:!0,category:"Appearance",name:"Dark Twitch",help:"Apply a dark background to channels and other related pages for easier viewing.",on_update:function(e){vars=document.querySelector("input.ffz-setting-dark-twitch");if(s&&(s.checked=e),!this.has_bttv){document.body.classList.toggle("ffz-dark",e);varn=t.App?App.__container__.lookup("controller:settings").get("model"):void0;e?(this._load_dark_css(),n&&this.settings.set("twitch_chat_dark",n.get("darkMode")),n&&n.set("darkMode",!0)):n&&n.set("darkMode",this.settings.twitch_chat_dark)}}},i.settings_info.dark_no_blue={type:"boolean",value:!1,category:"Appearance",name:"Gray Chat (no blue)",help:"Make the dark theme for chat and a few other places on Twitch a bit darker and not at all blue.",on_update:function(t){document.body.classList.toggle("ffz-no-blue",t)}},i.settings_info.hide_recent_past_broadcast={type:"boolean",value:!1,no_mobile:!0,category:"Channel Metadata",name:'Hide "Watch Last Broadcast"',help:'Hide the "Watch Last Broadcast" banner at the top of offline Twitch channels.',on_update:function(t){document.body.classList.toggle("ffz-hide-recent-past-broadcast",t)}},i.prototype.setup_dark=function(){document.body.classList.toggle("ffz-hide-recent-past-broadcast",this.settings.hide_recent_past_broadcast),document.body.classList.toggle("ffz-no-blue",this.settings.dark_no_blue),this.has_bttv||(document.body.classList.toggle("ffz-dark",this.settings.dark_twitch),this.settings.dark_twitch&&(t.App&&App.__container__.lookup("controller:settings").set("model.darkMode",!0),this._load_dark_css()))},i.prototype._load_dark_css=function(){if(!this._dark_style){this.log("Injecting FrankerFaceZ Dark Twitch CSS.");vart=this._dark_style=document.createElement("link");t.id="ffz-dark-css",t.setAttribute("rel","stylesheet"),t.set