1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-08-03 08:28:31 +00:00
FrankerFaceZ/script.min.js

4 lines
114 KiB
JavaScript
Raw Normal View History

2015-06-05 03:59:28 -04:00
!function(e){!function t(e,n,s){function i(a,r){if(!n[a]){if(!e[a]){var c="function"==typeof require&&require;if(!r&&c)return c(a,!0);if(o)return o(a,!0);throw new Error("Cannot find module '"+a+"'")}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return i(n?n:t)},l,l.exports,t,e,n,s)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a<s.length;a++)i(s[a]);return i}({1:[function(t){var n=e.FrankerFaceZ,s=t("./constants"),i=t("./utils");n.settings_info.show_badges={type:"boolean",value:!0,category:"Chat",name:"Additional Badges",help:"Show additional badges for bots, FrankerFaceZ donors, and other special users."},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],s=e[2],i=this.users[t]=this.users[t]||{},o=i.badges=i.badges||{};void 0===s?delete o[n]:o[n]=s};var o=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){if(this.settings.show_badges){var t=e.sender,n=this.users[t],s=[],i=-1,o=BetterTTV.settings.get("alphaTags");if(n&&n.badges){for(var a=0;a<e.badges.length;a++){var r=e.badges[a];if("subscriber"==r.type||"turbo"==r.type){i=a;break}}for(var c in n.badges)if(n.badges.hasOwnProperty(c)){var r=n.badges[c],l=this.badges[r.id]||{},u=r.title||l.title,h="";if(void 0!==l.visible){var d=l.visible;if("function"==typeof d&&(d=d.bind(this)(null,t)),!d)continue}if(l.replaces){for(var _=!1,a=0;a<e.badges.length;a++){var f=e.badges[a];if(f.type==l.replaces){f.type="ffz-badge-replacement "+f.type,f.description+=", "+(r.title||l.title)+'" style="background-image: url(&quot;'+(r.image||l.image)+"&quot;)",_=!0;break}}if(_)continue}r.image&&(h+="background-image: url(&quot;"+r.image+"&quot;); "),r.color&&!o&&(h+="background-color: "+r.color+"; "),r.extra_css&&(h+=r.extra_css),h&&(u+='" style="'+h),s.push([(-1==i?1:-1)*c,{type:"ffz-badge-"+r.id+(o?" alpha":""),name:"",description:u}])}if(s.sort(function(e,t){return e[0]-t[0]}),-1==i)for(;s.length;)e.badges.push(s.shift()[1]);else for(;s.length;)e.badges.insertAt(i,s.shift()[1])}}},n.prototype.render_badge=function(e){if(this.settings.show_badges){var t=e.get("msgObject.from"),n=App.__container__.lookup("controller:chat").get("currentRoom.id"),s=e.$(".badges"),i=this.users[t];if(i&&i.badges){var o=s.find(".badge").filter(function(){var e=this.title.toLowerCase();return"subscriber"==e||"turbo"==e}).first(),a=[],r=!!o.length;for(var c in i.badges)if(i.badges.hasOwnProperty(c)){var l=i.badges[c],u=this.badges[l.id]||{};if(void 0!==u.visible){var h=u.visible;if("function"==typeof h&&(h=h.bind(this)(n,t)),!h)continue}if(u.replaces){var d=s[0].querySelector(".badge."+u.replaces);if(d){d.style.backgroundImage='url("'+(l.image||u.image)+'")',d.classList.add("ffz-badge-replacement"),d.title+=", "+(l.title||u.title);continue}}var d=document.createElement("div");d.className="badge float-left tooltip ffz-badge-"+l.id,d.setAttribute("title",l.title||u.title),l.image&&(d.style.backgroundImage='url("'+l.image+'")'),l.color&&(d.style.backgroundColor=l.color),l.extra_css&&(d.style.cssText+=l.extra_css),a.push([(r?1:-1)*c,d])}if(a.sort(function(e,t){return e[0]-t[0]}),r)for(;a.length;)o.before(a.shift()[1]);else for(;a.length;)s.append(a.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/script/devicon.png"},i.update_css(this._badge_style,0,o(this.badges[0])),this.badges[1]={id:1,title:"FFZ Donor",color:"#
if("youtube"==n.type)t="<b>YouTube: "+s.sanitize(n.title)+"</b><hr>",t+="Channel: "+s.sanitize(n.channel)+" | "+s.time_to_string(n.duration)+"<br>",t+=s.number_commas(n.views||0)+" Views | &#128077; "+s.number_commas(n.likes||0)+" &#128078; "+s.number_commas(n.dislikes||0);else if("strawpoll"==n.type){t="<b>Strawpoll: "+s.sanitize(n.title)+"</b><hr><table><tbody>";for(var i in n.items){{var o=n.items[i];Math.floor(o/n.total*100)}t+='<tr><td style="text-align:left">'+s.sanitize(i)+'</td><td style="text-align:right">'+s.number_commas(o)+"</td></tr>"}t+="</tbody></table><hr>Total: "+s.number_commas(n.total);var a=s.parse_date(n.fetched);if(a){var r=Math.floor((a.getTime()-Date.now())/1e3);r>60&&(t+="<br><small>Data was cached "+s.time_to_string(r)+" ago.</small>")}}else if("twitch"==n.type){t="<b>Twitch: "+s.sanitize(n.display_name)+"</b><hr>";var c=s.parse_date(n.since);c&&(t+="Member Since: "+s.date_string(c)+"<br>"),t+="<nobr>Views: "+s.number_commas(n.views)+"</nobr> | <nobr>Followers: "+s.number_commas(n.followers)+"</nobr>"}else if("twitch_vod"==n.type)t="<b>Twitch "+("highlight"==n.broadcast_type?"Highlight":"Broadcast")+": "+s.sanitize(n.title)+"</b><hr>",t+="By: "+s.sanitize(n.display_name)+(n.game?" | Playing: "+s.sanitize(n.game):" | Not Playing")+"<br>",t+="Views: "+s.number_commas(n.views)+" | "+s.time_to_string(n.length);else if("twitter"==n.type)t="<b>Tweet By: "+s.sanitize(n.user)+"</b><hr>",t+=s.sanitize(n.tweet);else if("reputation"==n.type){if(t='<span style="word-wrap: break-word">'+s.sanitize(n.full.toLowerCase())+"</span>",n.trust<50||n.safety<50||n.tags&&n.tags.length>0){t+="<hr>";var l=!1;(n.trust<50||n.safety<50)&&(n.unsafe=!0,t+="<b>Potentially Unsafe Link</b><br>",t+="Trust: "+n.trust+"% | Child Safety: "+n.safety+"%",l=!0),n.tags&&n.tags.length>0&&(t+=(l?"<br>":"")+"Tags: "+n.tags.join(", ")),t+="<br>Data Source: WOT"}}else n.full&&(t='<span style="word-wrap: break-word">'+s.sanitize(n.full.toLowerCase())+"</span>");return t||(t='<span style="word-wrap: break-word">'+s.sanitize(e.toLowerCase())+"</span>"),n.tooltip=t,t},f=function(e,t,n){if(t){this._link_data[e]=n,n.unsafe=!1;var s,i=d.bind(this)(e),o="/"==e.charAt(e.length-1)?e.substr(0,e.length-1):null;if(s=document.querySelectorAll(o?'span.message a[href="'+e+'"], span.message a[href="'+o+'"], span.message a[data-url="'+e+'"], span.message a[data-url="'+o+'"]':'span.message a[href="'+e+'"], span.message a[data-url="'+e+'"]'),this.settings.link_info)for(var a=0;a<s.length;a++)n.unsafe&&s[a].classList.add("unsafe-link"),s[a].classList.contains("deleted-link")||(s[a].title=i)}};n.settings_info.banned_words={type:"button",value:[],category:"Chat",no_bttv:!0,name:"Banned Words",help:"Set a list of words that will be locally removed from chat messages.",method:function(){var e=this.settings.banned_words.join(", "),t=prompt("Banned Words\n\nPlease enter a comma-separated list of words that you would like to be removed from chat messages.",e);if(null!==t&&void 0!==t){t=t.trim().split(o);for(var n=[],s=0;s<t.length;s++)t[s]&&n.push(t[s]);1==n.length&&"disable"==n[0]&&(n=[]),this.settings.set("banned_words",n)}}},n.settings_info.keywords={type:"button",value:[],category:"Chat",no_bttv:!0,name:"Highlight Keywords",help:"Set additional keywords that will be highlighted in chat.",method:function(){var e=this.settings.keywords.join(", "),t=prompt("Highlight Keywords\n\nPlease enter a comma-separated list of words that you would like to be highlighted in chat.",e);if(null!==t&&void 0!==t){t=t.trim().split(o);for(var n=[],s=0;s<t.length;s++)t[s]&&n.push(t[s]);1==n.length&&"disable"==n[0]&&(n=[]),this.settings.set("keywords",n)}}},n.settings_info.fix_color={type:"boolean",value:!0,category:"Chat",no_bttv:!0,name:"Adjust Username Colors",help:"Ensure that username colors contrast with the background enough to be readable.",on_update:function(e){this.has_bttv||document.body.classList.toggle("ffz-chat-colors",e)}},n.settings_info.link_info={type:"boolean",value:!0,category:"Chat",no_bttv:!0,name:"Link Tooltips <span>Beta</span>",help:"Check links against known b
},t.prototype.setup_emote_menu=function(e){this.log("Emote Menu for Twitch was detected after "+e+"ms. Registering emote enumerator."),emoteMenu.registerEmoteGetter("FrankerFaceZ",this._emote_menu_enumerator.bind(this))},t.prototype._emote_menu_enumerator=function(){for(var e=this.get_user(),n=e?e.login:null,s=App.__container__.lookup("controller:chat"),i=s?s.get("currentRoom.id"):null,o=this.getEmotes(n,i),a=[],r=0;r<o.length;r++){var c=this.emote_sets[o[r]];if(c&&c.emoticons)for(var l in c.emoticons)if(c.emoticons.hasOwnProperty(l)){var u=c.emoticons[l];if(!u.hidden){var h=c.title,d=c.icon||null;h=h?"FrankerFaceZ: "+h:"global"==c.id?"FrankerFaceZ Global Emotes":"globalevent"==c.id?"FrankerFaceZ Event Emotes":this.feature_friday&&c.id==this.feature_friday.set?"FrankerFaceZ "+this.feature_friday.title+": "+this.feature_friday.display_name:"FrankerFaceZ Set: "+t.get_capitalization(c.id),a.push({text:u.name,url:u.urls[1],hidden:!1,channel:h,badge:d})}}}return a}},{}],14:[function(t){var n=e.FrankerFaceZ=function(){n.instance=this,this._log_data=[],this.initialize()};n.get=function(){return n.instance};var s=n.version_info={major:3,minor:4,revision:2,toString:function(){return[s.major,s.minor,s.revision].join(".")+(s.extra||"")}};n.prototype.log=function(e,t,n,s){e="FFZ: "+e+(n?" -- "+JSON.stringify(t):""),this._log_data.push(e+(!n&&s?" -- "+JSON.stringify(t):"")),void 0!==t&&console.groupCollapsed&&console.dir?(console.groupCollapsed(e),-1!==navigator.userAgent.indexOf("Firefox/")?console.log(t):console.dir(t),console.groupEnd(e)):console.log(e)},n.prototype.error=function(e,t,n){e="FFZ Error: "+e+(n?" -- "+JSON.stringify(t):""),this._log_data.push(e),void 0!==t&&console.groupCollapsed&&console.dir?(console.groupCollapsed(e),-1!==navigator.userAgent.indexOf("Firefox/")?console.log(t):console.dir(t),console.groupEnd(e)):console.assert(!1,e)},n.prototype.paste_logs=function(){this._pastebin(this._log_data.join("\n"),function(e){return e?void console.log("FFZ: Your FrankerFaceZ log has been pasted to: "+e):console.log("FFZ Error: Unable to upload log to pastebin.")})},n.prototype._pastebin=function(e,t){jQuery.ajax({url:"http://putco.de/",type:"PUT",data:e,context:this}).success(function(e){t.bind(this)(e.trim()+".log")}).fail(function(){t.bind(this)(null)})},n.prototype.get_user=function(){if(e.PP&&PP.login)return PP;if(e.App){var t=App.__container__.lookup("controller:login");return t?t.get("userData"):void 0}},t("./ui/menu"),t("./settings"),t("./socket"),t("./emoticons"),t("./badges"),t("./tokenize"),t("./ember/channel"),t("./ember/room"),t("./ember/line"),t("./ember/chatview"),t("./ember/viewers"),t("./ember/moderation-card"),t("./debug"),t("./ext/betterttv"),t("./ext/emote_menu"),t("./featurefriday"),t("./ui/styles"),t("./ui/dark"),t("./ui/notifications"),t("./ui/viewer_count"),t("./ui/sub_count"),t("./ui/menu_button"),t("./ui/races"),t("./ui/my_emotes"),t("./ui/about_page"),t("./commands"),n.prototype.initialize=function(t,n){if(/^\/(?:settings|m\/|messages?\/)/.test(location.pathname))return void this.setup_normal(n);if(/\/[A-Za-z_-]+\/dashboard/.test(location.pathname)&&!/bookmarks$/.test(location.pathname))return void this.setup_dashboard(n);var s=void 0!=e.App&&void 0!=App.__container__&&void 0!=App.__container__.resolve("model:room");return s?void this.setup_ember(n):(t=t||10,void(n>=6e4?this.log('Twitch application not detected in "'+location.toString()+'". Aborting.'):setTimeout(this.initialize.bind(this,t,(n||0)+t),t)))},n.prototype.setup_normal=function(t){var s=e.performance&&performance.now?performance.now():Date.now();this.log("Found non-Ember Twitch after "+(t||0)+' ms in "'+location+'". Initializing FrankerFaceZ version '+n.version_info),this.users={},this.load_settings(),this.setup_dark(),this.ws_create(),this.setup_emoticons(),this.setup_badges(),this.setup_notifications(),this.setup_css(),this.setup_menu(),this.find_bttv(10);var i=e.performance&&performance.now?performance.now():Date.now(),o=i-s;this.log("Initialization complete in "+o+"ms")},n.prototype.is_dashboard=!1,n.prototype.setup_dashboard=func
if(d&&d.emoticons)for(var _ in d.emoticons)d.emoticons.hasOwnProperty(_)&&!d.emoticons[_].hidden&&u.push(d.emoticons[_])}u.sort(function(e,t){var n=e.name.toLowerCase(),s=t.name.toLowerCase();return s>n?-1:n>s?1:0});for(var h=0;h<u.length;h++){var f=u[h],m=null;(f.urls[2]||f.urls[4])&&(m='url("'+f.urls[1]+'") 1x',f.urls[2]&&(m+=', url("'+f.urls[2]+'") 2x'),f.urls[4]&&(m+=', url("'+f.urls[4]+'") 4x')),r++;var l=document.createElement("span");if(l.className="emoticon tooltip",l.style.backgroundImage='url("'+f.urls[1]+'")',m){var p="image-set("+m+")";l.style.backgroundImage="-webkit-"+p,l.style.backgroundImage="-moz-"+p,l.style.backgroundImage="-ms-"+p,l.style.backgroundImage=p}l.style.width=f.width+"px",l.style.height=f.height+"px",l.title=this._emote_tooltip(f),l.addEventListener("click",this._add_emote.bind(this,t,f.name)),a.appendChild(l)}r||(a.innerHTML+="This channel has no emoticons.",a.className="emoticon-grid ffz-no-emotes center"),e.appendChild(a)},n.prototype._add_emote=function(e,t){var n,s,i;this.has_bttv?(n=e.get("element").querySelector("textarea"),s=n.value):(i=e.get("controller.currentRoom"),s=i.get("messageToSend")||""),s+=(s&&" "!==s.substr(-1)?" ":"")+(t.name||t),n?n.value=s:i.set("messageToSend",s)}},{"../constants":3,"../utils":29}],22:[function(t){var n=e.FrankerFaceZ,s=t("../constants");n.prototype.build_ui_link=function(e){var t=document.createElement("a");return t.className="ffz-ui-toggle",t.innerHTML=s.CHAT_BUTTON,t.addEventListener("click",this.build_ui_popup.bind(this,e)),this.update_ui_link(t),t},n.prototype.update_ui_link=function(t){var n=e.App&&App.__container__.lookup("controller:chat");if(t=t||document.querySelector("a.ffz-ui-toggle"),t&&n){var s=n.get("currentRoom.id"),i=this.rooms[s],o=!1,a=this.has_bttv?BetterTTV.settings.get("darkenedMode"):!1,r=this.has_bttv?BetterTTV.settings.get("showBlueButtons"):!1,c=this.feature_friday&&this.feature_friday.live;if(i&&i.set){var l=this.emote_sets[i.set];l&&l.count>0&&(o=!0)}t.classList.toggle("no-emotes",!o),t.classList.toggle("live",c),t.classList.toggle("dark",a),t.classList.toggle("blue",r)}}},{"../constants":3}],23:[function(t){var n=e.FrankerFaceZ,s=t("../constants"),i=t("../utils"),o="http://static-cdn.jtvnw.net/emoticons/v1/",a={"#-?[\\\\/]":"#-/",":-?(?:7|L)":":-7","\\&lt\\;\\]":"<]","\\:-?(S|s)":":-S","\\:-?\\\\":":-\\","\\:\\&gt\\;":":>","B-?\\)":"B-)","\\:-?[z|Z|\\|]":":-Z","\\:-?\\)":":-)","\\:-?\\(":":-(","\\:-?(p|P)":":-P","\\;-?(p|P)":";-P","\\&lt\\;3":"<3","\\:-?[\\\\/]":":-/","\\;-?\\)":";-)","R-?\\)":"R-)","[o|O](_|\\.)[o|O]":"O.o","\\:-?D":":-D","\\:-?(o|O)":":-O","\\&gt\\;\\(":">(","Gr(a|e)yFace":"GrayFace"},r=function(e){var t=App.__container__.lookup("controller:chat"),n=t.get("currentRoom.id"),s=e.rooms[n],i=s?s.room.tmiSession:null,o=i&&i._emotesParser&&i._emotesParser.emoticonSetIds||"0",a=e.get_user(),r=a&&e.users[a.login]&&e.users[a.login].sets||[];return o=o.split(",").removeObject("0"),e.settings.global_emotes_in_menu&&(o.push("0"),r=_.union(r,e.default_sets)),[o,r]};n.settings_info.global_emotes_in_menu={type:"boolean",value:!1,name:"Display Global Emotes in My Emotes",help:"Display the global Twitch emotes in the My Emoticons menu."},n.prototype.setup_my_emotes=function(){if(this._twitch_set_to_channel={},this._twitch_badges={},localStorage.ffzTwitchSets)try{this._twitch_set_to_channel=JSON.parse(localStorage.ffzTwitchSets),this._twitch_badges=JSON.parse(localStorage.ffzTwitchBadges)}catch(e){}this._twitch_set_to_channel[0]="global",this._twitch_set_to_channel[33]="tfaces",this._twitch_set_to_channel[42]="tfaces",this._twitch_badges.global="//cdn.frankerfacez.com/script/twitch_logo.png",this._twitch_badges.tfaces=this._twitch_badges.turbo="//cdn.frankerfacez.com/script/turbo_badge.png"},n.menu_pages.my_emotes={name:"My Emoticons",icon:s.EMOTE,visible:function(){var e=r(this);return e[0].length>0||e[1].length>0},render:function(e,t){var s=e.get("controller.currentRoom.tmiSession"),i=(s&&s.getEmotes()||{emoticon_sets:{}}).emoticon_sets,o=[];for(var a in i)i.hasOwnProperty(a)&&!this._twitch_set_to_channel.hasOwnPropert