1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-07-05 18:48:31 +00:00
FrankerFaceZ/script.min.js

3 lines
89 KiB
JavaScript
Raw Normal View History

!function(e){!function t(e,n,a){function o(s,r){if(!n[s]){if(!e[s]){var l="function"==typeof require&&require;if(!r&&l)return l(s,!0);if(i)return i(s,!0);throw new Error("Cannot find module '"+s+"'")}var c=n[s]={exports:{}};e[s][0].call(c.exports,function(t){var n=e[s][1][t];return o(n?n:t)},c,c.exports,t,e,n,a)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s<a.length;s++)o(a[s]);return o}({1:[function(t){var n=e.FrankerFaceZ,a=t("./constants"),o=t("./utils");n.settings_info.bot_badges={type:"boolean",value:!0,category:"Chat",name:"Bot Badges",help:"Give special badges to known bots."},n.prototype.setup_badges=function(){this.log("Preparing badge system."),this.badges={},this.log("Creating badge style element.");var e=this._badge_style=document.createElement("style");e.id="ffz-badge-css",document.head.appendChild(e),this.log("Adding legacy donor badges."),this._legacy_add_donors()},n.ws_commands.reload_badges=function(){this._legacy_load_bots(),this._legacy_load_donors()},n.ws_commands.set_badge=function(e){var t=e[0],n=e[1],a=e[2],o=this.users[t]=this.users[t]||{},i=o.badges=o.badges||{};void 0===a?delete i[n]:i[n]=a};var i=function(e){return".badges .ffz-badge-"+e.id+" { background-color: "+e.color+'; background-image: url("'+e.image+'"); '+(e.extra_css||"")+"}"};n.prototype.bttv_badges=function(e){var t=e.sender,n=this.users[t],a=[],o=-1,i=BetterTTV.settings.get("alphaTags");if(n&&n.badges){for(var s=0;s<e.badges.length;s++){var r=e.badges[s];if("subscriber"==r.type||"turbo"==r.type){o=s;break}}for(var l in n.badges)if(n.badges.hasOwnProperty(l)){var r=n.badges[l],c=this.badges[r.id]||{},u=r.title||c.title,d="";if(void 0!==c.visible){var h=c.visible;if("function"==typeof h&&(h=h.bind(this)(null,t)),!h)continue}if(c.replaces){for(var p=!1,s=0;s<e.badges.length;s++){var m=e.badges[s];if(m.type==c.replaces){m.type="ffz-badge-replacement "+m.type,m.description+=", "+(r.title||c.title)+'" style="background-image: url(&quot;'+(r.image||c.image)+"&quot;)",p=!0;break}}if(p)continue}r.image&&(d+="background-image: url(&quot;"+r.image+"&quot;); "),r.color&&!i&&(d+="background-color: "+r.color+"; "),r.extra_css&&(d+=r.extra_css),d&&(u+='" style="'+d),a.push([(-1==o?1:-1)*l,{type:"ffz-badge-"+r.id+(i?" alpha":""),name:"",description:u}])}if(a.sort(function(e,t){return e[0]-t[0]}),-1==o)for(;a.length;)e.badges.push(a.shift()[1]);else for(;a.length;)e.badges.insertAt(o,a.shift()[1])}},n.prototype.render_badge=function(e){var t=e.get("context.model.from"),n=e.get("context.parentController.content.id"),a=e.$(".badges"),o=this.users[t];if(o&&o.badges){var i=a.find(".badge").filter(function(){var e=this.title.toLowerCase();return"subscriber"==e||"turbo"==e}).first(),s=[],r=!!i.length;for(var l in o.badges)if(o.badges.hasOwnProperty(l)){var c=o.badges[l],u=this.badges[c.id]||{};if(void 0!==u.visible){var d=u.visible;if("function"==typeof d&&(d=d.bind(this)(n,t)),!d)continue}if(u.replaces){var h=a[0].querySelector(".badge."+u.replaces);if(h){h.style.backgroundImage='url("'+(c.image||u.image)+'")',h.classList.add("ffz-badge-replacement"),h.title+=", "+(c.title||u.title);continue}}var h=document.createElement("div");h.className="badge float-left tooltip ffz-badge-"+c.id,h.setAttribute("title",c.title||u.title),c.image&&(h.style.backgroundImage='url("'+c.image+'")'),c.color&&(h.style.backgroundColor=c.color),c.extra_css&&(h.style.cssText+=c.extra_css),s.push([(r?1:-1)*l,h])}if(s.sort(function(e,t){return e[0]-t[0]}),r)for(;s.length;)i.before(s.shift()[1]);else for(;s.length;)a.append(s.shift()[1])}},n.bttv_known_bots=["nightbot","moobot","sourbot","xanbot","manabot","mtgbot","ackbot","baconrobot","tardisbot","deejbot","valuebot","stahpbot"],n.prototype._legacy_add_donors=function(){this.badges[0]={id:0,title:"FFZ Developer",color:"#FAAF19",image:"//cdn.frankerfacez.com/channel/global/devicon.png"},o.update_css(this._badge_style,0,i(this.badges[0])),this.badges[1]={id:1,title:"FFZ Donor",color:"#755000",image:"//cdn.frankerfacez.com/channel/global/donoricon.png"},o.update_css(this._badge_style,1,i(this.badges[1])),th
var u=function(e){var t=l.get("cardInfo.user.id"),n=App.__container__.lookup("controller:chat").get("currentRoom");n.send(-1===e?"/unban "+t:"/timeout "+t+" "+e)},d=function(e,t){var n=document.createElement("button");return n.className="button",n.innerHTML=e,n.title="Timeout User for "+a.number_commas(t)+" Second"+(1!=t?"s":""),600===t?n.title="(T)"+n.title.substr(1):1===t&&(n.title="(P)urge - "+n.title),jQuery(n).tipsy(),n.addEventListener("click",u.bind(this,t)),n};c.appendChild(d("Purge",1));var h=document.createElement("span");h.className="right",c.appendChild(h);for(var p=0;p<i.length;p++)h.appendChild(d(i[p][0],i[p][1]));t.appendChild(c);var m=document.createElement("button");m.className="unban button glyph-only light",m.innerHTML=r,m.title="(U)nban User",jQuery(m).tipsy(),m.addEventListener("click",u.bind(this,-1));var _=t.querySelector("button.ban");_.setAttribute("title","(B)an User"),jQuery(_).after(m),this.$("button.timeout").remove()}var f=t.querySelector("button.mod");if(f){var g=l.get("cardInfo.isChannelOwner"),v=ffz.get_user();can_op=g||v&&v.is_admin||v&&v.is_staff,can_op||f.parentElement.removeChild(f)}var b=t.querySelector(".interface > button");b&&b.classList.contains("message-button")&&(b.innerHTML=s,b.classList.add("glyph-only"),b.classList.add("message"),b.title="Message User",jQuery(b).tipsy()),this.$().draggable({start:function(){t.focus()}}),t.focus()}catch(y){try{n.error("ModerationCardView didInsertElement: "+y)}catch(y){}}}})},n.chat_commands.purge=n.chat_commands.p=function(e,t){if(!t||!t.length)return"Purge Usage: /p username [more usernames separated by spaces]";if(t.length>10)return"Please only purge up to 10 users at once.";for(var n=0;n<t.length;n++){var a=t[n];a&&e.room.send("/timeout "+a+" 1")}},n.chat_commands.p.enabled=function(){return this.settings.enhanced_moderation},n.chat_commands.t=function(e,t){return t&&t.length?void e.room.send("/timeout "+t.join(" ")):"Timeout Usage: /t username [duration]"},n.chat_commands.t.enabled=function(){return this.settings.enhanced_moderation},n.chat_commands.b=function(e,t){if(!t||!t.length)return"Ban Usage: /b username [more usernames separated by spaces]";if(t.length>10)return"Please only ban up to 10 users at once.";for(var n=0;n<t.length;n++){var a=t[n];a&&e.room.send("/ban "+a)}},n.chat_commands.b.enabled=function(){return this.settings.enhanced_moderation},n.chat_commands.u=function(e,t){if(!t||!t.length)return"Unban Usage: /u username [more usernames separated by spaces]";if(t.length>10)return"Please only unban up to 10 users at once.";for(var n=0;n<t.length;n++){var a=t[n];a&&e.room.send("/unban "+a)}},n.chat_commands.u.enabled=function(){return this.settings.enhanced_moderation}},{"../utils":28}],9:[function(t){var n=e.FrankerFaceZ,a=/\.([\w\-_]+)\s*?\{content:\s*?"([^"]+)";\s*?background-image:\s*?url\("([^"]+)"\);\s*?height:\s*?(\d+)px;\s*?width:\s*?(\d+)px;\s*?margin:([^;}]+);?([^}]*)\}/gm,o=/[^\n}]*\.badges\s+\.moderator\s*{\s*background-image:\s*url\(\s*['"]([^'"]+)['"][^}]+(?:}|$)/,i=/^_([^_]+)_\d+$/,s=t("../constants"),r=t("../utils"),l=function(e){return e.moderator_badge?'.chat-line[data-room="'+e.id+'"] .badges .moderator:not(.ffz-badge-replacement) { background-image:url("'+e.moderator_badge+'") !important; }':""};n.prototype.setup_room=function(){this.rooms={},this.log("Creating room style element.");var e=this._room_style=document.createElement("style");e.id="ffz-room-css",document.head.appendChild(e),this.log("Hooking the Ember Room model.");var t=App.__container__.lookup("controller:room");if(t){var n=t._actions.banUser;t._actions.banUser=function(e){n.bind(this)(e),this.get("model").clearMessages(e.user)}}var a=App.__container__.resolve("model:room");this._modify_room(a);var o=a.instances;for(var i in o)if(o.hasOwnProperty(i)){var s=o[i];this.add_room(s.id,s),this._modify_room(s)}},n.chat_commands={},n.ffz_commands={},n.prototype.room_message=function(e,t){var n=t.split("\n");if(this.has_bttv)for(var a=0;a<n.length;a++)BetterTTV.chat.handlers.onPrivmsg(e.id,{style:"admin",date:new Date,from:"jtv",message:n[a]});else for(
var g=!1;f.querySelector("#ffz-debug-logs").addEventListener("click",function(){g||(g=!0,i._pastebin(i._log_data.join("\n"),function(e){g=!1,e?prompt("Your FrankerFaceZ logs have been uploaded to the URL:",e):alert("There was an error uploading the FrankerFaceZ logs.")}))}),t.appendChild(f)}}},{"../constants":3}],20:[function(t){var n=e.FrankerFaceZ,a=t("../constants");n.settings_info.twitch_chat_dark={type:"boolean",value:!1,visible:!1},n.settings_info.dark_twitch={type:"boolean",value:!1,no_bttv:!0,name:"Dark Twitch",help:"Apply a dark background to channels and other related pages for easier viewing.",on_update:function(t){if(!this.has_bttv){document.body.classList.toggle("ffz-dark",t);var n=e.App?App.__container__.lookup("controller:settings").get("model"):void 0;t?(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)}}},n.prototype.setup_dark=function(){this.has_bttv||(document.body.classList.toggle("ffz-dark",this.settings.dark_twitch),this.settings.dark_twitch&&e.App&&App.__container__.lookup("controller:settings").set("model.darkMode",!0),this.settings.dark_twitch&&this._load_dark_css())},n.prototype._load_dark_css=function(){if(!this._dark_style){this.log("Injecting FrankerFaceZ Dark Twitch CSS.");var e=this._dark_style=document.createElement("link");e.id="ffz-dark-css",e.setAttribute("rel","stylesheet"),e.setAttribute("href",a.SERVER+"script/dark.css?_="+Date.now()),document.head.appendChild(e)}}},{"../constants":3}],21:[function(t){var n=e.FrankerFaceZ,a=t("../constants"),o=t("../utils"),i="http://static-cdn.jtvnw.net/emoticons/v1/";n.prototype.setup_menu=function(){this.log("Installing mouse-up event to auto-close menus.");var e=this;jQuery(document).mouseup(function(t){var n,a=e._popup;a&&(a=jQuery(a),n=a.parent(),n.is(t.target)||0!==n.has(t.target).length||(a.remove(),delete e._popup,e._popup_kill&&e._popup_kill(),delete e._popup_kill))}),document.body.classList.toggle("ffz-menu-replace",this.settings.replace_twitch_menu)},n.menu_pages={},n.prototype.build_ui_popup=function(e){var t=this._popup;if(t)return t.parentElement.removeChild(t),delete this._popup,this._popup_kill&&this._popup_kill(),void delete this._popup_kill;var o=document.createElement("div"),i=document.createElement("div"),s=document.createElement("ul"),r=this.has_bttv?BetterTTV.settings.get("darkenedMode"):!1;o.className="emoticon-selector chat-menu ffz-ui-popup",i.className="emoticon-selector-box dropmenu",o.appendChild(i),o.classList.toggle("dark",r);var l=document.createElement("div");l.className="ffz-ui-menu-page",i.appendChild(l),s.className="menu clearfix",i.appendChild(s);var c=document.createElement("li");c.className="title",c.innerHTML="<span>"+(a.DEBUG?"[DEV] ":"")+"FrankerFaceZ</span>",s.appendChild(c);var u=[];for(var d in n.menu_pages)if(n.menu_pages.hasOwnProperty(d)){var h=n.menu_pages[d];h&&(!h.hasOwnProperty("visible")||h.visible&&("function"!=typeof h.visible||h.visible.bind(this)()))&&u.push([h.sort_order||0,d,h])}u.sort(function(e,t){if(e[0]<t[0])return 1;if(e[0]>t[0])return-1;var n=e[1].toLowerCase(),a=t[1].toLowerCase();return a>n?1:n>a?-1:0});for(var p=0;p<u.length;p++){var d=u[p][1],h=u[p][2],m=document.createElement("li"),_=document.createElement("a");m.className="item",m.id="ffz-menu-page-"+d,_.title=h.name,_.innerHTML=h.icon,jQuery(_).tipsy(),_.addEventListener("click",this._ui_change_page.bind(this,e,i,s,l,d)),m.appendChild(_),s.appendChild(m)}this._ui_change_page(e,i,s,l,this._last_page||"channel"),this._popup=o,l.style.maxHeight=Math.max(200,e.$().height()-172)+"px",e.$(".chat-interface").append(o)},n.prototype._ui_change_page=function(e,t,a,o,i){this._last_page=i,o.innerHTML="",o.setAttribute("data-page",i);var s=document.querySelector(".app-main")||document.querySelector(".ember-chat-container");t.style.maxWidth=!n.menu_pages[i].wide||"function"==typeof n.menu_pages[i].wide&&!n.menu_pages[i].wide.bind(this)()?"":(s.offsetWidth<640?s.offsetWidth-40:600)+"px";for(var r=a.querySelectorAll("li.active"),l=0;l<r.