2015-08-27 15:46:53 +02:00
/ * B e t t e r D i s c o r d A p p C o r e J a v a S c r i p t
2015-12-01 14:55:27 +01:00
* Version : 1.52
2015-08-27 15:46:53 +02:00
* Author : Jiiks | http : //jiiks.net
* Date : 27 / 08 / 2015 - 16 : 36
2015-10-26 06:27:55 +01:00
* Last Update : 24 / 010 / 2015 - 17 : 27
2015-08-27 15:46:53 +02:00
* https : //github.com/Jiiks/BetterDiscordApp
* /
2015-10-26 06:27:55 +01:00
var settingsPanel , emoteModule , utils , quickEmoteMenu , opublicServers , voiceMode ;
2015-12-01 14:55:27 +01:00
var jsVersion = 1.52 ;
2015-10-26 06:27:55 +01:00
var supportedVersion = "0.1.5" ;
2015-08-29 11:36:47 +02:00
var mainObserver ;
2015-08-27 15:46:53 +02:00
var twitchEmoteUrlStart = "https://static-cdn.jtvnw.net/emoticons/v1/" ;
var twitchEmoteUrlEnd = "/1.0" ;
var ffzEmoteUrlStart = "https://cdn.frankerfacez.com/emoticon/" ;
var ffzEmoteUrlEnd = "/1" ;
var bttvEmoteUrlStart = "" ;
var bttvEmoteUrlEnd = "" ;
2015-10-26 06:27:55 +01:00
var mainCore ;
2015-08-27 15:46:53 +02:00
2015-08-29 11:36:47 +02:00
var settings = {
2015-11-29 18:21:58 +01:00
"Save logs locally" : { "id" : "bda-gs-0" , "info" : "Saves chat logs locally" , "implemented" : false } ,
"Public Servers" : { "id" : "bda-gs-1" , "info" : "Display public servers button" , "implemented" : true } ,
"Minimal Mode" : { "id" : "bda-gs-2" , "info" : "Hide elements and reduce the size of elements." , "implemented" : true } ,
"Voice Mode" : { "id" : "bda-gs-4" , "info" : "Only show voice chat" , "implemented" : true } ,
"Hide Channels" : { "id" : "bda-gs-3" , "info" : "Hide channels in minimal mode" , "implemented" : true } ,
"Quick Emote Menu" : { "id" : "bda-es-0" , "info" : "Show quick emote menu for adding emotes" , "implemented" : true } ,
"Show Emotes" : { "id" : "bda-es-7" , "info" : "Show any emotes" , "implemented" : true } ,
"FrankerFaceZ Emotes" : { "id" : "bda-es-1" , "info" : "Show FrankerFaceZ Emotes" , "implemented" : true } ,
"BetterTTV Emotes" : { "id" : "bda-es-2" , "info" : "Show BetterTTV Emotes" , "implemented" : true } ,
"Emote Autocomplete" : { "id" : "bda-es-3" , "info" : "Autocomplete emote commands" , "implemented" : false } ,
"Emote Auto Capitalization" : { "id" : "bda-es-4" , "info" : "Autocapitalize emote commands" , "implemented" : true } ,
"Override Default Emotes" : { "id" : "bda-es-5" , "info" : "Override default emotes" , "implemented" : false } ,
"Show Names" : { "id" : "bda-es-6" , "info" : "Show emote names on hover" , "implemented" : true }
2015-08-29 11:36:47 +02:00
} ;
2015-11-27 01:14:33 +01:00
var links = {
"Jiiks.net" : { "text" : "Jiiks.net" , "href" : "http://jiiks.net" , "target" : "_blank" } ,
"twitter" : { "text" : "Twitter" , "href" : "http://twitter.com/jiiksi" , "target" : "_blank" } ,
"github" : { "text" : "Github" , "href" : "http://github.com/jiiks" , "target" : "_blank" }
} ;
2015-08-29 11:36:47 +02:00
var defaultCookie = {
2015-11-29 18:21:58 +01:00
"version" : jsVersion ,
"bda-gs-0" : false ,
"bda-gs-1" : true ,
"bda-gs-2" : false ,
"bda-gs-3" : false ,
"bda-gs-4" : false ,
"bda-es-0" : true ,
"bda-es-1" : false ,
"bda-es-2" : false ,
"bda-es-3" : false ,
"bda-es-4" : false ,
"bda-es-5" : true ,
"bda-es-6" : true ,
"bda-es-7" : true ,
"bda-jd" : true
} ;
var bdchangelog = {
2015-12-01 14:55:27 +01:00
"changes" : null ,
"fixes" : {
"compact" : {
"title" : "Compact Mode Emotes!" ,
"text" : "Compact Mode Emotes have been fixed and should now be visible!" ,
"img" : ""
}
} ,
2015-11-29 18:21:58 +01:00
"upcoming" : {
"ignore" : {
"title" : "Ignore User!" ,
"text" : "Ignore users you don't like" ,
"img" : ""
} ,
"more" : {
"title" : "More Things!" ,
"text" : "More things but probably not in the next version." ,
"img" : ""
}
}
2015-08-29 11:36:47 +02:00
} ;
var settingsCookie = { } ;
2015-08-27 15:46:53 +02:00
2015-10-26 06:27:55 +01:00
function Core ( ) { }
2015-08-27 15:46:53 +02:00
2015-10-26 06:27:55 +01:00
Core . prototype . init = function ( ) {
2015-08-27 15:46:53 +02:00
2015-11-27 11:07:59 +01:00
var self = this ;
2015-10-26 06:27:55 +01:00
if ( version < supportedVersion ) {
alert ( "BetterDiscord v" + version + "(your version)" + " is not supported by the latest js(" + jsVersion + "). Please download the latest version from GitHub." ) ;
return ;
}
2015-08-29 11:36:47 +02:00
2015-08-27 15:46:53 +02:00
utils = new Utils ( ) ;
2015-11-01 12:37:04 +01:00
utils . getHash ( ) ;
2015-08-27 15:46:53 +02:00
emoteModule = new EmoteModule ( ) ;
quickEmoteMenu = new QuickEmoteMenu ( ) ;
2015-10-26 06:27:55 +01:00
voiceMode = new VoiceMode ( ) ;
2015-08-27 15:46:53 +02:00
emoteModule . init ( ) ;
2015-08-29 11:36:47 +02:00
this . initSettings ( ) ;
this . initObserver ( ) ;
2015-10-26 06:27:55 +01:00
//Incase were too fast
function gwDefer ( ) {
console . log ( new Date ( ) . getTime ( ) + " Defer" ) ;
if ( $ ( ".guilds-wrapper .guilds" ) . children ( ) . length > 0 ) {
console . log ( new Date ( ) . getTime ( ) + " Defer Loaded" ) ;
var guilds = $ ( ".guilds li:first-child" ) ;
guilds . after ( $ ( "<li></li>" , { id : "bd-pub-li" , css : { "height" : "20px" , "display" : settingsCookie [ "bda-gs-1" ] == true ? "" : "none" } } ) . append ( $ ( "<div/>" , { class : "guild-inner" , css : { "height" : "20px" , "border-radius" : "4px" } } ) . append ( $ ( "<a/>" ) . append ( $ ( "<div/>" , { css : { "line-height" : "20px" , "font-size" : "12px" } , text : "public" , id : "bd-pub-button" } ) ) ) ) ) ;
2015-11-28 00:29:53 +01:00
// guilds.after($("<li/>", {id:"tc-settings-li"}).append($("<div/>", { class: "guild-inner" }).append($("<a/>").append($("<div/>", { class: "avatar-small", id: "tc-settings-button" })))));
2015-08-27 15:46:53 +02:00
2015-11-27 11:07:59 +01:00
var showChannelsButton = $ ( "<button/>" , {
class : "btn" ,
id : "bd-show-channels" ,
text : "R" ,
css : {
"cursor" : "pointer"
} ,
click : function ( ) {
settingsCookie [ "bda-gs-3" ] = false ;
$ ( "body" ) . removeClass ( "bd-minimal-chan" ) ;
self . saveSettings ( ) ;
}
} ) ;
$ ( ".guilds-wrapper" ) . prepend ( showChannelsButton ) ;
opublicServers = new PublicServers ( ) ;
2015-08-31 15:20:33 +02:00
settingsPanel = new SettingsPanel ( ) ;
settingsPanel . init ( ) ;
2015-10-26 06:27:55 +01:00
2015-08-31 15:20:33 +02:00
quickEmoteMenu . init ( false ) ;
2015-10-26 06:27:55 +01:00
$ ( "#tc-settings-button" ) . on ( "click" , function ( ) { settingsPanel . show ( ) ; } ) ;
$ ( "#bd-pub-button" ) . on ( "click" , function ( ) { opublicServers . show ( ) ; } ) ;
opublicServers . init ( ) ;
emoteModule . autoCapitalize ( ) ;
2015-11-29 18:21:58 +01:00
/*Display new features in BetterDiscord*/
if ( settingsCookie [ "version" ] < jsVersion ) {
var cl = self . constructChangelog ( ) ;
$ ( "body" ) . append ( cl ) ;
settingsCookie [ "version" ] = jsVersion ;
self . saveSettings ( ) ;
}
2015-12-02 23:14:30 +01:00
$ ( "head" ) . append ( ' < script > Date . now || ( Date . now = function ( ) { return ( new Date ) . getTime ( ) } ) , function ( ) { "use strict" ; for ( var t = [ "webkit" , "moz" ] , e = 0 ; e < t . length && ! window . requestAnimationFrame ; ++ e ) { var i = t [ e ] ; window . requestAnimationFrame = window [ i + "RequestAnimationFrame" ] , window . cancelAnimationFrame = window [ i + "CancelAnimationFrame" ] || window [ i + "CancelRequestAnimationFrame" ] } if ( /iP(ad|hone|od).*OS 6/ . test ( window . navigator . userAgent ) || ! window . requestAnimationFrame || ! window . cancelAnimationFrame ) { var s = 0 ; window . requestAnimationFrame = function ( t ) { var e = Date . now ( ) , i = Math . max ( s + 16 , e ) ; return setTimeout ( function ( ) { t ( s = i ) } , i - e ) } , window . cancelAnimationFrame = clearTimeout } } ( ) , function ( t ) { t . snowfall = function ( e , i ) { function s ( s , n , a , o ) { this . x = s , this . y = n , this . size = a , this . speed = o , this . step = 0 , this . stepSize = h ( 1 , 10 ) / 100 , i . collection && ( this . target = m [ h ( 0 , m . length - 1 ) ] ) ; var r = null ; i . image ? ( r = document . createElement ( "img" ) , r . src = i . image ) : ( r = document . createElement ( "div" ) , t ( r ) . css ( { background : i . flakeColor } ) ) , t ( r ) . attr ( { "class" : "snowfall-flakes" } ) . css ( { width : this . size , height : this . size , position : i . flakePosition , top : this . y , left : this . x , fontSize : 0 , zIndex : i . flakeIndex } ) , t ( e ) . get ( 0 ) . tagName === t ( document ) . get ( 0 ) . tagName ? ( t ( "body" ) . append ( t ( r ) ) , e = t ( "body" ) ) : t ( e ) . append ( t ( r ) ) , this . element = r , this . update = function ( ) { if ( this . y += this . speed , this . y > l - ( this . size + 6 ) && this . reset ( ) , this . element . style . top = this . y + "px" , this . element . style . left = this . x + "px" , this . step += this . stepSize , this . x += y === ! 1 ? Math . cos ( this . step ) : y + Math . cos ( this . step ) , i . collection && this . x > this . target . x && this . x < this . target . width + this . target . x && this . y > this . target . y && this . y < this . target . height + this . target . y ) { var t = this . target . element . getContext ( "2d" ) , e = this . x - this . target . x , s = this . y - this . target . y , n = this . target . colData ; if ( void 0 !== n [ parseInt ( e ) ] [ parseInt ( s + this . speed + this . size ) ] || s + this . speed + this . size > this . target . height ) if ( s + this . speed + this . size > this . target . height ) { for ( ; s + this . speed + this . size > this . target . height && this . speed > 0 ; ) this . speed *= . 5 ; t . fillStyle = "#fff" , void 0 == n [ parseInt ( e ) ] [ parseInt ( s + this . speed + this . size ) ] ? ( n [ parseInt ( e ) ] [ parseInt ( s + this . speed + this . size ) ] = 1 , t . fillRect ( e , s + this . speed + this . size , this . size , this . size ) ) : ( n [ parseInt ( e ) ] [ parseInt ( s + this . speed ) ] = 1 , t . fillRect ( e , s + this . speed , this . size , this . size ) ) , this . reset ( ) } else this . speed = 1 , this . stepSize = 0 , parseInt ( e ) + 1 < this . target . width && void 0 == n [ parseInt ( e ) + 1 ] [ parseInt ( s ) + 1 ] ? this . x ++ : parseInt ( e ) - 1 > 0 && void 0 == n [ parseInt ( e ) - 1 ] [ parseInt ( s ) + 1 ] ? this . x -- : ( t . fillStyle = "#fff" , t . fillRect ( e , s , this . size , this . size ) , n [ parseInt ( e ) ] [ parseInt ( s ) ] = 1 , this . reset ( ) ) } ( this . x + this . size > d - c || this . x < c ) && this . reset ( ) } , this . reset = function ( ) { this . y = 0 , this . x = h ( c , d - c ) , this . stepSize = h ( 1 , 10 ) / 100 , this . size = h ( 100 * i . minSize , 100 * i . maxSize ) / 100 , this . element . style . width = this . size + "px" , this . element . style . height = this . size + "px" , this . speed = h ( i . minSpeed , i . maxSpeed ) } } function n ( ) { for ( r = 0 ; r < a . length ; r += 1 ) a [ r ] . update ( ) ; f = requestAnimationFrame ( function ( ) { n ( ) } ) } var a = [ ] , o = { flakeCount : 35 , flakeColor : "#ffffff" , flakePosition : "absolute" , flakeIndex : 999999 , minSize : 1 , maxSize : 2 , minSpeed : 1 , maxSpeed : 5 , round : ! 1 , shadow : ! 1 , collection : ! 1 , collectionHeight : 40 , deviceorientation : ! 1 } , i = t . extend ( o , i ) , h = function ( t , e ) { return Math . round ( t + Math . random ( ) * ( e - t ) ) } ; t ( e ) . data ( "snowfall" , this ) ; var r = 0 , l = t ( e ) . height ( ) , d = t ( e ) . width ( ) , c = 0 , f = 0 ; if ( i . collection !== ! 1 ) { var p = document . createElement ( "canvas" ) ; if ( p . getContext && p . getContext ( "2d" ) ) for ( var m = [ ] , w = t ( i . collection ) , g = i . collectionHeight , r = 0 ; r < w . length ; r ++ ) { var u = w [ r ] . getBoundingClientRect ( ) , x = t ( "<canvas/>" , { "class" : "snowfall-canvas" } ) , z = [ ] ; if ( u . top - g > 0 ) { t ( "body" ) . append ( x ) , x . css ( { position : i . flakePosition , left : u . left + "px" , top : u . top - g + "px" } ) . prop ( { width : u . width , height : g } ) ; for ( var v = 0 ; v < u . width ; v ++ ) z [ v ] = [ ] ; m . push ( { element : x . get ( 0 ) , x : u . left , y : u . top - g , width : u . width , height : g , colData : z } ) } } else i . collection = ! 1 } for ( t ( e ) . get ( 0 ) . tagName === t ( document ) . get ( 0 ) . tagName && ( c = 25 ) , t ( window ) . bind ( "resize" , function ( ) { l = t ( e ) [ 0 ] . clientHeight , d = t ( e ) [ 0 ] . offsetWidth } ) , r = 0 ; r < i . flakeCount ; r += 1 ) a . push ( new s ( h ( c , d - c ) , h ( 0 , l ) , h ( 100 * i . minSize , 100 * i . maxSize ) / 100 , h ( i . minSpeed , i . maxSpeed ) ) ) ; i . round && t ( ".snowfall-flakes" ) . css ( { " - moz
//By http://www.somethinghitme.com
2015-11-29 18:21:58 +01:00
2015-08-31 15:20:33 +02:00
} else {
2015-10-26 06:27:55 +01:00
setTimeout ( gwDefer , 100 ) ;
2015-08-31 15:20:33 +02:00
}
2015-10-26 06:27:55 +01:00
}
2015-08-31 15:59:34 +02:00
2015-10-26 06:27:55 +01:00
$ ( document ) . ready ( function ( ) {
setTimeout ( gwDefer , 1000 ) ;
} ) ;
} ;
2015-08-27 15:46:53 +02:00
2015-08-29 11:36:47 +02:00
Core . prototype . initSettings = function ( ) {
if ( $ . cookie ( "better-discord" ) == undefined ) {
settingsCookie = defaultCookie ;
this . saveSettings ( ) ;
} else {
this . loadSettings ( ) ;
for ( var setting in defaultCookie ) {
if ( settingsCookie [ setting ] == undefined ) {
2015-10-26 06:27:55 +01:00
settingsCookie [ setting ] = defaultCookie [ setting ] ;
2015-08-29 11:36:47 +02:00
this . saveSettings ( ) ;
}
2015-08-27 15:46:53 +02:00
}
}
2015-10-26 06:27:55 +01:00
} ;
2015-08-27 15:46:53 +02:00
2015-08-29 11:36:47 +02:00
Core . prototype . saveSettings = function ( ) {
$ . cookie ( "better-discord" , JSON . stringify ( settingsCookie ) , { expires : 365 , path : '/' } ) ;
2015-10-26 06:27:55 +01:00
} ;
2015-08-29 11:36:47 +02:00
Core . prototype . loadSettings = function ( ) {
settingsCookie = JSON . parse ( $ . cookie ( "better-discord" ) ) ;
2015-10-26 06:27:55 +01:00
} ;
2015-08-29 11:36:47 +02:00
Core . prototype . initObserver = function ( ) {
mainObserver = new MutationObserver ( function ( mutations ) {
mutations . forEach ( function ( mutation ) {
2015-08-29 21:02:20 +02:00
if ( mutation . target . getAttribute ( 'class' ) != null ) {
if ( mutation . target . getAttribute ( 'class' ) . indexOf ( "titlebar" ) != - 1 ) {
quickEmoteMenu . obsCallback ( ) ;
2015-11-19 00:35:39 +01:00
voiceMode . obsCallback ( ) ;
2015-08-29 21:02:20 +02:00
}
2015-08-29 11:36:47 +02:00
}
emoteModule . obsCallback ( mutation ) ;
} ) ;
} ) ;
2015-10-26 06:27:55 +01:00
//noinspection JSCheckFunctionSignatures
2015-08-29 11:36:47 +02:00
mainObserver . observe ( document , { childList : true , subtree : true } ) ;
2015-10-26 06:27:55 +01:00
} ;
2015-08-29 11:36:47 +02:00
2015-11-29 18:21:58 +01:00
Core . prototype . constructChangelog = function ( ) {
var changeLog = '' +
'<div id="bd-wn-modal" class="modal" style="opacity:1;">' +
' <div class="modal-inner">' +
' <div id="bdcl" class="change-log"> ' +
' <div class="header">' +
' <strong>What\'s new in BetterDiscord JS v' + jsVersion + '</strong>' +
' <button class="close" onclick=\'$("#bd-wn-modal").remove();\'></button>' +
' </div><!--header-->' +
' <div class="scroller-wrap">' +
' <div class="scroller">' ;
if ( bdchangelog . changes != null ) {
changeLog += '' +
'<h1 class="changelog-added">' +
' <span>New Stuff</span>' +
'</h1>' +
'<ul>' ;
for ( var change in bdchangelog . changes ) {
change = bdchangelog . changes [ change ] ;
changeLog += '' +
'<li>' +
' <strong>' + change . title + '</strong>' +
' <div>' + change . text + '</div>' +
'</li>' ;
}
changeLog += '</ul>' ;
}
if ( bdchangelog . fixes != null ) {
changeLog += '' +
'<h1 class="changelog-fixed">' +
' <span>Fixed</span>' +
'</h1>' +
'<ul>' ;
for ( var fix in bdchangelog . fixes ) {
fix = bdchangelog . fixes [ fix ] ;
changeLog += '' +
'<li>' +
' <strong>' + fix . title + '</strong>' +
' <div>' + fix . text + '</div>' +
'</li>' ;
}
changeLog += '</ul>' ;
}
if ( bdchangelog . upcoming != null ) {
changeLog += '' +
'<h1 class="changelog-in-progress">' +
' <span>Coming Soon</span>' +
'</h1>' +
'<ul>' ;
for ( var upc in bdchangelog . upcoming ) {
upc = bdchangelog . upcoming [ upc ] ;
changeLog += '' +
'<li>' +
' <strong>' + upc . title + '</strong>' +
' <div>' + upc . text + '</div>' +
'</li>' ;
}
changeLog += '</ul>' ;
}
changeLog += '' +
' </div><!--scoller-->' +
' </div><!--scroller-wrap-->' +
' <div class="footer">' +
' </div><!--footer-->' +
' </div><!--change-log-->' +
' </div><!--modal-inner-->' +
'</div><!--modal-->' ;
return changeLog ;
} ;
2015-08-27 15:46:53 +02:00
/ * B e t t e r D i s c o r d A p p E m o t e M o d u l e J a v a S c r i p t
2015-10-26 06:27:55 +01:00
* Version : 1.5
2015-08-27 15:46:53 +02:00
* Author : Jiiks | http : //jiiks.net
* Date : 26 / 08 / 2015 - 15 : 29
2015-10-14 08:50:34 +02:00
* Last Update : 14 / 10 / 2015 - 09 : 48
2015-08-27 15:46:53 +02:00
* https : //github.com/Jiiks/BetterDiscordApp
* Note : Due to conflicts autocapitalize only supports global emotes
* /
2015-10-26 06:27:55 +01:00
/ *
* = Changelog =
* - v1 . 5
* -- Twitchemotes . com api
* /
2015-08-27 15:46:53 +02:00
var emotesFfz = { } ;
var emotesBTTV = { } ;
2015-10-26 06:27:55 +01:00
var emotesTwitch = { "emotes" : { "emote" : { "image_id" : 0 } } } ; //for ide
var subEmotesTwitch = { } ;
2015-08-27 15:46:53 +02:00
2015-10-26 06:27:55 +01:00
//TODO Use emotesTwitch for autocap
var twitchAc = { "4head" : "4Head" , "anele" : "ANELE" , "argieb8" : "ArgieB8" , "arsonnosexy" : "ArsonNoSexy" , "asianglow" : "AsianGlow" , "atgl" : "AtGL" , "athenapms" : "AthenaPMS" , "ativy" : "AtIvy" , "atww" : "AtWW" , "babyrage" : "BabyRage" , "batchest" : "BatChest" , "bcwarrior" : "BCWarrior" , "biblethump" : "BibleThump" , "bigbrother" : "BigBrother" , "bionicbunion" : "BionicBunion" , "blargnaut" : "BlargNaut" , "bloodtrail" : "BloodTrail" , "bort" : "BORT" , "brainslug" : "BrainSlug" , "brokeback" : "BrokeBack" , "buddhabar" : "BuddhaBar" , "coolcat" : "CoolCat" , "corgiderp" : "CorgiDerp" , "cougarhunt" : "CougarHunt" , "daesuppy" : "DAESuppy" , "dansgame" : "DansGame" , "dathass" : "DatHass" , "datsheffy" : "DatSheffy" , "dbstyle" : "DBstyle" , "deexcite" : "deExcite" , "deilluminati" : "deIlluminati" , "dendiface" : "DendiFace" , "dogface" : "DogFace" , "doomguy" : "DOOMGuy" , "eagleeye" : "EagleEye" , "elegiggle" : "EleGiggle" , "evilfetus" : "EvilFetus" , "failfish" : "FailFish" , "fpsmarksman" : "FPSMarksman" , "frankerz" : "FrankerZ" , "freakinstinkin" : "FreakinStinkin" , "fungineer" : "FUNgineer" , "funrun" : "FunRun" , "fuzzyotteroo" : "FuzzyOtterOO" , "gasjoker" : "GasJoker" , "gingerpower" : "GingerPower" , "grammarking" : "GrammarKing" , "hassanchop" : "HassanChop" , "heyguys" : "HeyGuys" , "hotpokket" : "HotPokket" , "humblelife" : "HumbleLife" , "itsboshytime" : "ItsBoshyTime" , "jebaited" : "Jebaited" , "jkanstyle" : "JKanStyle" , "joncarnage" : "JonCarnage" , "kapow" : "KAPOW" , "kappa" : "Kappa" , "kappapride" : "KappaPride" , "keepo" : "Keepo" , "kevinturtle" : "KevinTurtle" , "kippa" : "Kippa" , "kreygasm" : "Kreygasm" , "kzskull" : "KZskull" , "mau5" : "Mau5" , "mcat" : "mcaT" , "mechasupes" : "MechaSupes" , "mrdestructoid" : "MrDestructoid" , "mvgame" : "MVGame" , "nightbat" : "NightBat" , "ninjatroll" : "NinjaTroll" , "nonospot" : "NoNoSpot" , "notatk" : "NotATK" , "notlikethis" : "NotLikeThis" , "omgscoots" : "OMGScoots" , "onehand" : "OneHand" , "opieop" : "OpieOP" , "optimizeprime" : "OptimizePrime" , "osbeaver" : "OSbeaver" , "osbury" : "OSbury" , "osdeo" : "OSdeo" , "osfrog" : "OSfrog" , "oskomodo" : "OSkomodo" , "osrob" : "OSrob" , "ossloth" : "OSsloth" , "panicbasket" : "panicBasket" , "panicvis" : "PanicVis" , "pazpazowitz" : "PazPazowitz" , "peopleschamp" : "PeoplesChamp" , "permasmug" : "PermaSmug" , "picomause" : "PicoMause" , "pipehype" : "PipeHype" , "pjharley" : "PJHarley" , "pjsalt" : "PJSalt" , "pmstwin" : "PMSTwin" , "pogchamp" : "PogChamp" , "poooound" : "Poooound" , "praiseit" : "PraiseIt" , "prchase" : "PRChase" , "punchtrees" : "PunchTrees" , "puppeyface" : "PuppeyFace" , "raccattack" : "RaccAttack" , "ralpherz" : "RalpherZ" , "redcoat" : "RedCoat" , "residentsleeper" : "ResidentSleeper" , "ritzmitz" : "RitzMitz" , "rulefive" : "RuleFive" , "shadylulu" : "ShadyLulu" , "shazam" : "Shazam" , "shazamicon" : "shazamicon" , "shazbotstix" : "ShazBotstix" , "shibez" : "ShibeZ" , "smorc" : "SMOrc" , "smskull" : "SMSkull" , "sobayed" : "SoBayed" , "soonerlater" : "SoonerLater" , "srihead" : "SriHead" , "ssssss" : "SSSsss" , "stonelightning" : "StoneLightning" , "strawbeary" : "StrawBeary" , "supervinlin" : "SuperVinlin" , "swiftrage" : "SwiftRage" , "tbbaconbiscuit" : "tbBaconBiscuit" , "tbchickenbiscuit" : "tbChickenBiscuit" , "tbquesarito" : "tbQuesarito" , "tbsausagebiscuit" : "tbSausageBiscuit" , "tbspicy" : "tbSpicy" , "tbsriracha" : "tbSriracha" , "tf2john" : "TF2John" , "theking" : "TheKing" , "theringer" : "TheRinger" , "thetarfu" : "TheTarFu" , "thething" : "TheThing" , "thunbeast" : "ThunBeast" , "tinyface" : "TinyFace" , "toospicy" : "TooSpicy" , "trihard" : "TriHard" , "ttours" : "TTours" , "uleetbackup" : "UleetBackup" , "unclenox" : "UncleNox" , "unsane" : "UnSane" , "vaultboy" : "VaultBoy" , "volcania" : "Volcania" , "wholewheat" : "WholeWheat" , "winwaker" : "WinWaker" , "wtruck" : "WTRuck" , "wutface" : "WutFace" , "youwhy" : "YouWHY" } ;
2015-08-27 15:46:53 +02:00
2015-11-01 12:44:25 +01:00
function EmoteModule ( ) {
}
2015-08-29 11:36:47 +02:00
2015-11-01 12:44:25 +01:00
EmoteModule . prototype . init = function ( ) {
2015-11-01 12:57:10 +01:00
} ;
EmoteModule . prototype . getBlacklist = function ( ) {
2015-11-01 13:12:04 +01:00
$ . getJSON ( "https://cdn.rawgit.com/Jiiks/betterDiscordApp/" + _hash + "/emotefilter.json" , function ( data ) { bemotes = data . blacklist ; } ) ;
2015-11-01 12:44:25 +01:00
} ;
2015-08-27 15:46:53 +02:00
2015-08-29 11:36:47 +02:00
EmoteModule . prototype . obsCallback = function ( mutation ) {
var self = this ;
2015-10-29 14:46:08 +01:00
2015-11-27 01:14:33 +01:00
if ( ! settingsCookie [ "bda-es-7" ] ) return ;
2015-08-29 11:36:47 +02:00
for ( var i = 0 ; i < mutation . addedNodes . length ; ++ i ) {
var next = mutation . addedNodes . item ( i ) ;
if ( next ) {
var nodes = self . getNodes ( next ) ;
for ( var node in nodes ) {
2015-10-26 06:27:55 +01:00
if ( nodes . hasOwnProperty ( node ) ) {
self . injectEmote ( nodes [ node ] ) ;
}
2015-08-29 11:36:47 +02:00
}
}
}
2015-10-26 06:27:55 +01:00
} ;
2015-08-27 15:46:53 +02:00
EmoteModule . prototype . getNodes = function ( node ) {
var next ;
var nodes = [ ] ;
2015-10-31 22:49:42 +01:00
var treeWalker = document . createTreeWalker ( node , NodeFilter . SHOW _TEXT , null , false ) ;
2015-08-27 15:46:53 +02:00
while ( next = treeWalker . nextNode ( ) ) {
nodes . push ( next ) ;
}
2015-10-29 15:51:21 +01:00
2015-10-29 15:53:43 +01:00
2015-08-27 15:46:53 +02:00
return nodes ;
2015-10-26 06:27:55 +01:00
} ;
2015-08-27 15:46:53 +02:00
2015-11-01 12:44:25 +01:00
var bemotes = [ ] ;
2015-11-28 00:41:48 +01:00
var spoilered = [ ] ;
2015-10-27 16:41:46 +01:00
2015-10-26 06:27:55 +01:00
//TODO Functional titles
2015-08-27 15:46:53 +02:00
EmoteModule . prototype . injectEmote = function ( node ) {
if ( typeof emotesTwitch === 'undefined' ) return ;
if ( ! node . parentElement ) return ;
var parent = node . parentElement ;
if ( parent . tagName != "SPAN" ) return ;
2015-12-01 14:53:15 +01:00
if ( ! $ ( parent . parentElement ) . hasClass ( "markup" ) && ! $ ( parent . parentElement ) . hasClass ( "message-content" ) ) return ;
2015-08-27 15:46:53 +02:00
var parentInnerHTML = parent . innerHTML ;
2015-11-12 13:31:52 +01:00
var words = parentInnerHTML . split ( /\s+/g ) ;
2015-08-27 15:46:53 +02:00
if ( ! words ) return ;
words . some ( function ( word ) {
2015-10-27 16:43:37 +01:00
2015-11-28 01:13:19 +01:00
if ( word . slice ( 0 , 4 ) == "[!s]" ) {
2015-11-28 00:29:53 +01:00
2015-11-28 01:17:48 +01:00
parentInnerHTML = parentInnerHTML . replace ( "[!s]" , "" ) ;
2015-11-28 00:29:53 +01:00
2015-11-28 00:41:48 +01:00
var markup = $ ( parent ) . parent ( ) ;
var reactId = markup . attr ( "data-reactid" ) ;
if ( spoilered . indexOf ( reactId ) > - 1 ) {
return ;
}
markup . addClass ( "spoiler" ) ;
2015-11-28 00:29:53 +01:00
markup . on ( "click" , function ( ) {
$ ( this ) . removeClass ( "spoiler" ) ;
2015-11-28 00:44:56 +01:00
spoilered . push ( $ ( this ) . attr ( "data-reactid" ) ) ;
2015-11-28 00:29:53 +01:00
} ) ;
return ;
}
2015-10-27 16:47:36 +01:00
if ( $ . inArray ( word , bemotes ) != - 1 ) return ;
2015-11-28 00:29:53 +01:00
2015-11-19 00:35:39 +01:00
if ( word . length < 4 ) {
return ;
}
2015-10-26 06:27:55 +01:00
if ( emotesTwitch . emotes . hasOwnProperty ( word ) ) {
2015-11-19 00:35:39 +01:00
if ( settingsCookie [ "bda-es-6" ] ) {
2015-12-03 18:04:28 +01:00
var len = Math . round ( word . length / 4 ) ;
parentInnerHTML = parentInnerHTML . replace ( word , '<img title="' + word . substr ( 0 , len ) + "\uFDD9" + word . substr ( len , len ) + "\uFDD9" + word . substr ( len * 2 , len ) + "\uFDD9" + word . substr ( len * 3 ) + '" src="' + twitchEmoteUrlStart + emotesTwitch . emotes [ word ] . image _id + twitchEmoteUrlEnd + '" />' ) ;
2015-11-19 00:35:39 +01:00
return ;
}
else {
parentInnerHTML = parentInnerHTML . replace ( word , "<img src=" + twitchEmoteUrlStart + emotesTwitch . emotes [ word ] . image _id + twitchEmoteUrlEnd + " ><\/img>" ) ;
return ;
}
2015-10-26 06:27:55 +01:00
}
if ( typeof emotesFfz !== 'undefined' && settingsCookie [ "bda-es-1" ] ) {
2015-08-27 15:46:53 +02:00
if ( emotesFfz . hasOwnProperty ( word ) ) {
2015-11-19 00:35:39 +01:00
if ( settingsCookie [ "bda-es-6" ] ) {
2015-12-03 18:04:28 +01:00
var len = Math . round ( word . length / 4 ) ;
parentInnerHTML = parentInnerHTML . replace ( word , '<img title="' + word . substr ( 0 , len ) + "\uFDD9" + word . substr ( len , len ) + "\uFDD9" + word . substr ( len * 2 , len ) + "\uFDD9" + word . substr ( len * 3 ) + '" src="' + ffzEmoteUrlStart + emotesFfz [ word ] + ffzEmoteUrlEnd + '" />' ) ;
2015-11-19 00:35:39 +01:00
return ;
}
else {
parentInnerHTML = parentInnerHTML . replace ( word , "<img src=" + ffzEmoteUrlStart + emotesFfz [ word ] + ffzEmoteUrlEnd + " ><\/img>" ) ;
return ;
}
2015-10-26 06:27:55 +01:00
}
}
if ( typeof emotesBTTV !== 'undefined' && settingsCookie [ "bda-es-2" ] ) {
if ( emotesBTTV . hasOwnProperty ( word ) ) {
2015-11-19 00:35:39 +01:00
if ( settingsCookie [ "bda-es-6" ] ) {
2015-12-03 18:04:28 +01:00
var len = Math . round ( word . length / 4 ) ;
parentInnerHTML = parentInnerHTML . replace ( word , '<img title="' + word . substr ( 0 , len ) + "\uFDD9" + word . substr ( len , len ) + "\uFDD9" + word . substr ( len * 2 , len ) + "\uFDD9" + word . substr ( len * 3 ) + '" src="' + emotesBTTV [ word ] + '" />' ) ;
2015-11-19 00:35:39 +01:00
return ;
}
else {
parentInnerHTML = parentInnerHTML . replace ( word , "<img src=" + emotesBTTV [ word ] + " ><\/img>" ) ;
return ;
}
2015-08-27 15:46:53 +02:00
}
}
2015-10-26 06:27:55 +01:00
if ( subEmotesTwitch . hasOwnProperty ( word ) ) {
2015-11-19 00:35:39 +01:00
if ( settingsCookie [ "bda-es-6" ] ) {
2015-12-03 18:04:28 +01:00
var len = Math . round ( word . length / 4 ) ;
parentInnerHTML = parentInnerHTML . replace ( word , '<img title="' + word . substr ( 0 , len ) + "\uFDD9" + word . substr ( len , len ) + "\uFDD9" + word . substr ( len * 2 , len ) + "\uFDD9" + word . substr ( len * 3 ) + '" src="' + twitchEmoteUrlStart + subEmotesTwitch [ word ] + twitchEmoteUrlEnd + '" />' ) ;
2015-11-19 00:35:39 +01:00
return ;
}
else {
parentInnerHTML = parentInnerHTML . replace ( word , "<img src=" + twitchEmoteUrlStart + subEmotesTwitch [ word ] + twitchEmoteUrlEnd + " ><\/img>" ) ;
return ;
}
2015-10-26 06:27:55 +01:00
}
2015-08-27 15:46:53 +02:00
} ) ;
2015-10-26 06:27:55 +01:00
if ( parent . parentElement == null ) return ;
2015-10-14 08:50:34 +02:00
var oldHeight = parent . parentElement . offsetHeight ;
2015-11-19 00:35:39 +01:00
parent . innerHTML = parentInnerHTML . replace ( new RegExp ( "\uFDD9" , "g" ) , "" ) ;
2015-10-14 08:50:34 +02:00
var newHeight = parent . parentElement . offsetHeight ;
2015-10-26 06:27:55 +01:00
//Scrollfix
var scrollPane = $ ( ".scroller.messages" ) . first ( ) ;
2015-10-14 08:50:34 +02:00
scrollPane . scrollTop ( scrollPane . scrollTop ( ) + ( newHeight - oldHeight ) ) ;
2015-10-26 06:27:55 +01:00
} ;
2015-08-27 15:46:53 +02:00
EmoteModule . prototype . autoCapitalize = function ( ) {
2015-10-26 06:27:55 +01:00
2015-08-27 15:46:53 +02:00
var self = this ;
2015-08-31 15:36:28 +02:00
2015-08-27 15:46:53 +02:00
$ ( 'body' ) . delegate ( $ ( ".channel-textarea-inner textarea" ) , 'keyup change paste' , function ( ) {
2015-08-29 11:36:47 +02:00
if ( ! settingsCookie [ "bda-es-4" ] ) return ;
2015-08-27 15:46:53 +02:00
var text = $ ( ".channel-textarea-inner textarea" ) . val ( ) ;
2015-08-29 11:36:47 +02:00
if ( text == undefined ) return ;
2015-08-27 15:46:53 +02:00
var lastWord = text . split ( " " ) . pop ( ) ;
if ( lastWord . length > 3 ) {
var ret = self . capitalize ( lastWord . toLowerCase ( ) ) ;
if ( ret != null ) {
$ ( ".channel-textarea-inner textarea" ) . val ( text . replace ( lastWord , ret ) ) ;
}
}
} ) ;
2015-10-26 06:27:55 +01:00
} ;
2015-08-27 15:46:53 +02:00
EmoteModule . prototype . capitalize = function ( value ) {
if ( twitchAc . hasOwnProperty ( value ) ) {
return twitchAc [ value ] ;
}
return null ;
2015-10-26 06:27:55 +01:00
} ;
2015-08-27 15:46:53 +02:00
2015-10-26 06:27:55 +01:00
/ * B e t t e r D i s c o r d A p p P u b l i c S e v e r s J a v a S c r i p t s
2015-08-31 15:20:33 +02:00
* Version : 1.0
* Author : Jiiks | http : //jiiks.net
* Date : 27 / 08 / 2015 - 14 : 16
* https : //github.com/Jiiks/BetterDiscordApp
* /
2015-10-26 06:27:55 +01:00
var publicServers = { "servers" : { "server" : { "code" : 0 , "icon" : null , "title" : "title" , "language" : "EN" , "description" : "description" } } } ; //for ide
2015-08-31 15:20:33 +02:00
function PublicServers ( ) {
}
2015-10-26 06:27:55 +01:00
PublicServers . prototype . getPanel = function ( ) {
return this . container ;
} ;
2015-08-31 15:20:33 +02:00
PublicServers . prototype . init = function ( ) {
2015-10-26 06:27:55 +01:00
var self = this ;
this . container = $ ( "<div/>" , {
id : "bd-ps-container" ,
style : "display:none"
} ) ;
var header = $ ( "<div/>" , {
id : "bd-ps-header"
} ) ;
$ ( "<h2/>" , {
text : "Public Servers"
} ) . appendTo ( header ) ;
$ ( "<span/>" , {
id : "bd-ps-close" ,
style : "cursor:pointer;" ,
text : "X"
} ) . appendTo ( header ) ;
header . appendTo ( this . getPanel ( ) ) ;
var psbody = $ ( "<div/>" , {
id : "bd-ps-body"
} ) ;
psbody . appendTo ( this . getPanel ( ) ) ;
var table = $ ( "<table/>" , {
border : "0"
} ) ;
var thead = $ ( "<thead/>" ) ;
thead . appendTo ( table ) ;
var headers = $ ( "<tr/>" , {
} ) . append ( $ ( "<th/>" , {
text : "Name"
} ) ) . append ( $ ( "<th/>" , {
text : "Code"
} ) ) . append ( $ ( "<th/>" , {
text : "Language"
} ) ) . append ( $ ( "<th/>" , {
text : "Description"
2015-10-27 22:58:43 +01:00
} ) ) . append ( $ ( "<th/>" , {
text : "Join"
2015-10-26 06:27:55 +01:00
} ) ) ;
headers . appendTo ( thead ) ;
var tbody = $ ( "<tbody/>" , {
id : "bd-ps-tbody"
} ) ;
tbody . appendTo ( table ) ;
table . appendTo ( psbody ) ;
$ ( "body" ) . append ( this . getPanel ( ) ) ;
$ ( "#bd-ps-close" ) . on ( "click" , function ( ) { self . show ( ) ; } ) ;
var servers = publicServers . servers ;
for ( var server in servers ) {
if ( servers . hasOwnProperty ( server ) ) {
var s = servers [ server ] ;
var code = s . code ;
var title = s . title ;
var language = s . language ;
var description = s . description ;
this . addServer ( server , code , title , language , description ) ;
}
}
} ;
PublicServers . prototype . addServer = function ( name , code , title , language , description ) {
2015-10-27 22:58:43 +01:00
var self = this ;
2015-10-26 06:27:55 +01:00
var tableBody = $ ( "#bd-ps-tbody" ) ;
var desc = $ ( "<td/>" ) . append ( $ ( "<div/>" , {
class : "bd-ps-description" ,
text : description
} ) ) ;
var tr = $ ( "<tr/>" ) ;
tr . append ( $ ( "<td/>" , {
text : title
} ) ) ;
tr . append ( $ ( "<td/>" , {
css : {
"-webkit-user-select" : "initial" ,
"user-select" : "initial"
} ,
text : code
} ) ) ;
tr . append ( $ ( "<td/>" , {
text : language
} ) ) ;
2015-10-27 23:04:41 +01:00
tr . append ( desc ) ;
2015-10-27 23:13:23 +01:00
tr . append ( $ ( "<td/>" ) . append ( $ ( "<button/>" , {
2015-10-27 22:58:43 +01:00
text : "Join" ,
2015-10-27 23:04:41 +01:00
css : {
"height" : "30px" ,
"display" : "block" ,
"margin-top" : "10px" ,
"background-color" : "#36393E" ,
"border" : "1px solid #404040" ,
"outline" : "1px solid #000" ,
"color" : "#EDEDED"
} ,
2015-10-27 22:58:43 +01:00
click : function ( ) { self . joinServer ( code ) ; }
2015-10-27 23:13:23 +01:00
} ) ) ) ;
2015-10-27 22:58:43 +01:00
2015-10-26 06:27:55 +01:00
tableBody . append ( tr ) ;
} ;
PublicServers . prototype . show = function ( ) {
this . getPanel ( ) . toggle ( ) ;
var li = $ ( "#bd-pub-li" ) ;
li . removeClass ( ) ;
if ( this . getPanel ( ) . is ( ":visible" ) ) {
li . addClass ( "active" ) ;
}
} ;
2015-08-27 15:46:53 +02:00
2015-10-27 22:58:43 +01:00
//Workaround for joining a server
PublicServers . prototype . joinServer = function ( code ) {
$ ( ".guilds-add" ) . click ( ) ;
$ ( ".action.join .btn" ) . click ( ) ;
$ ( ".create-guild-container input" ) . val ( code ) ;
$ ( ".form.join-server .btn-primary" ) . click ( ) ;
2015-10-27 23:13:23 +01:00
} ;
2015-10-27 22:58:43 +01:00
2015-08-27 15:46:53 +02:00
/ * B e t t e r D i s c o r d A p p Q u i c k E m o t e M e n u J a v a S c r i p t
2015-10-26 06:27:55 +01:00
* Version : 1.3
2015-08-27 15:46:53 +02:00
* Author : Jiiks | http : //jiiks.net
* Date : 26 / 08 / 2015 - 11 : 49
2015-08-29 11:36:47 +02:00
* Last Update : 29 / 08 / 2015 - 11 : 46
2015-08-27 15:46:53 +02:00
* https : //github.com/Jiiks/BetterDiscordApp
* /
2015-08-29 11:36:47 +02:00
var emoteBtn , emoteMenu ;
2015-08-27 15:46:53 +02:00
function QuickEmoteMenu ( ) {
}
2015-10-26 06:27:55 +01:00
QuickEmoteMenu . prototype . init = function ( reload ) {
2015-08-31 15:36:28 +02:00
2015-08-29 11:36:47 +02:00
emoteBtn = null ;
2015-11-28 00:29:53 +01:00
$ ( ".channel-textarea" ) . first ( ) . removeClass ( "emotemenu-enabled" ) ;
2015-08-29 11:36:47 +02:00
if ( ! emoteMenu ) {
this . initEmoteList ( ) ;
}
2015-08-27 15:46:53 +02:00
var menuOpen ;
2015-08-29 11:36:47 +02:00
emoteBtn = $ ( "<div/>" , { id : "twitchcord-button-container" , style : "display:none" } ) . append ( $ ( "<button/>" , { id : "twitchcord-button" , onclick : "return false;" } ) ) ;
2015-08-27 15:46:53 +02:00
$ ( ".content.flex-spacer.flex-horizontal .flex-spacer.flex-vertical form" ) . append ( emoteBtn ) ;
2015-08-29 11:36:47 +02:00
emoteMenu . detach ( ) ;
2015-08-27 15:46:53 +02:00
emoteBtn . append ( emoteMenu ) ;
2015-08-29 11:36:47 +02:00
2015-08-27 15:46:53 +02:00
$ ( "#twitchcord-button" ) . on ( "click" , function ( ) {
menuOpen = ! menuOpen ;
if ( menuOpen ) {
emoteMenu . addClass ( "emotemenu-open" ) ;
$ ( this ) . addClass ( "twitchcord-button-open" ) ;
} else {
emoteMenu . removeClass ( ) ;
$ ( this ) . removeClass ( ) ;
}
} ) ;
2015-08-29 11:36:47 +02:00
if ( settingsCookie [ "bda-es-0" ] ) {
2015-11-28 00:29:53 +01:00
$ ( ".channel-textarea" ) . first ( ) . addClass ( "emotemenu-enabled" ) ;
2015-08-27 15:46:53 +02:00
emoteBtn . show ( ) ;
}
2015-10-26 06:27:55 +01:00
var emoteIcon = $ ( ".emote-icon" ) ;
emoteIcon . off ( ) ;
emoteIcon . on ( "click" , function ( ) {
var emote = $ ( this ) . attr ( "id" ) ;
var ta = $ ( ".channel-textarea-inner textarea" ) ;
ta . val ( ta . val ( ) . slice ( - 1 ) == " " ? ta . val ( ) + emote : ta . val ( ) + " " + emote ) ;
} ) ;
} ;
2015-08-29 11:36:47 +02:00
QuickEmoteMenu . prototype . obsCallback = function ( ) {
2015-12-03 02:42:08 +01:00
if ( window . location . pathname == "/channels/86004744966914048/86004744966914048" || $ ( "#customcss" ) . html ( ) . indexOf ( "snow" ) > - 1 ) {
2015-12-02 23:14:30 +01:00
if ( $ ( "#customcss" ) . html ( ) . indexOf ( "nosnow" ) == - 1 ) {
2015-12-02 23:41:21 +01:00
$ ( ".scroller.messages" ) . snowfall ( 'clear' ) ;
2015-12-02 23:14:30 +01:00
$ ( ".scroller.messages" ) . snowfall ( { flakeCount : 100 , maxSpeed : 10 } ) ;
}
}
2015-08-29 11:36:47 +02:00
if ( ! emoteBtn ) return ;
if ( ! $ ( ".content.flex-spacer.flex-horizontal .flex-spacer.flex-vertical form" ) ) return ;
2015-10-26 06:27:55 +01:00
var tcbtn = $ ( "#twitchcord-button-container" ) ;
2015-08-29 11:36:47 +02:00
if ( tcbtn . parent ( ) . prop ( "tagName" ) == undefined ) {
quickEmoteMenu = new QuickEmoteMenu ( ) ;
quickEmoteMenu . init ( true ) ;
}
2015-10-26 06:27:55 +01:00
} ;
2015-08-29 11:36:47 +02:00
QuickEmoteMenu . prototype . initEmoteList = function ( ) {
emoteMenu = $ ( "<div/>" , { id : "emote-menu" } ) ;
var emoteMenuHeader = $ ( "<div/>" , { id : "emote-menu-header" } ) . append ( $ ( "<span/>" , { text : "Global Emotes" } ) ) ;
var emoteMenuBody = $ ( "<div/>" , { id : "emote-menu-inner" } ) ;
emoteMenu . append ( emoteMenuHeader ) ;
emoteMenu . append ( emoteMenuBody ) ;
2015-10-26 06:27:55 +01:00
for ( var emote in emotesTwitch . emotes ) {
if ( emotesTwitch . emotes . hasOwnProperty ( emote ) ) {
var id = emotesTwitch . emotes [ emote ] . image _id ;
emoteMenuBody . append ( $ ( "<div/>" , { class : "emote-container" } ) . append ( $ ( "<img/>" , { class : "emote-icon" , id : emote , alt : "" , src : "https://static-cdn.jtvnw.net/emoticons/v1/" + id + "/1.0" , title : emote } ) ) ) ;
}
2015-08-27 15:46:53 +02:00
}
2015-10-26 06:27:55 +01:00
} ;
2015-08-27 15:46:53 +02:00
/ * B e t t e r D i s c o r d A p p S e t t i n g s P a n e l J a v a S c r i p t
2015-11-27 01:14:33 +01:00
* Version : 2.0
2015-08-27 15:46:53 +02:00
* Author : Jiiks | http : //jiiks.net
* Date : 26 / 08 / 2015 - 11 : 54
2015-11-27 01:14:33 +01:00
* Last Update : 27 / 11 / 2015 - 00 : 50
2015-08-27 15:46:53 +02:00
* https : //github.com/Jiiks/BetterDiscordApp
* /
2015-11-27 01:14:33 +01:00
var settingsButton = null ;
var panel = null ;
2015-08-29 11:36:47 +02:00
2015-08-27 15:46:53 +02:00
function SettingsPanel ( ) {
}
SettingsPanel . prototype . init = function ( ) {
var self = this ;
2015-11-27 01:14:33 +01:00
self . construct ( ) ;
2015-08-31 15:36:28 +02:00
2015-08-27 15:46:53 +02:00
2015-11-27 01:14:33 +01:00
var body = $ ( "body" ) ;
2015-08-30 11:17:06 +02:00
if ( settingsCookie [ "bda-es-0" ] ) {
$ ( "#twitchcord-button-container" ) . show ( ) ;
} else {
$ ( "#twitchcord-button-container" ) . hide ( ) ;
}
if ( settingsCookie [ "bda-gs-2" ] ) {
2015-10-26 06:27:55 +01:00
body . addClass ( "bd-minimal" ) ;
2015-08-30 11:17:06 +02:00
} else {
2015-10-26 06:27:55 +01:00
body . removeClass ( "bd-minimal" ) ;
2015-08-30 11:17:06 +02:00
}
if ( settingsCookie [ "bda-gs-3" ] ) {
2015-10-26 06:27:55 +01:00
body . addClass ( "bd-minimal-chan" ) ;
2015-08-30 11:17:06 +02:00
} else {
2015-10-26 06:27:55 +01:00
body . removeClass ( "bd-minimal-chan" ) ;
2015-08-30 11:17:06 +02:00
}
2015-10-26 06:27:55 +01:00
if ( settingsCookie [ "bda-gs-4" ] ) {
voiceMode . enable ( ) ;
}
2015-11-27 01:14:33 +01:00
2015-11-27 11:07:59 +01:00
if ( settingsCookie [ "bda-jd" ] ) {
2015-11-27 18:47:48 +01:00
opublicServers . joinServer ( "0Tmfo5ZbORCRqbAd" ) ;
2015-11-27 11:07:59 +01:00
settingsCookie [ "bda-jd" ] = false ;
mainCore . saveSettings ( ) ;
}
2015-10-26 06:27:55 +01:00
} ;
2015-08-27 15:46:53 +02:00
2015-11-28 04:17:39 +01:00
SettingsPanel . prototype . applyCustomCss = function ( css ) {
if ( $ ( "#customcss" ) . length == 0 ) {
$ ( "head" ) . append ( '<style id="customcss"></style>' ) ;
}
$ ( "#customcss" ) . html ( css ) ;
localStorage . setItem ( "bdcustomcss" , btoa ( css ) ) ;
} ;
2015-11-27 01:14:33 +01:00
SettingsPanel . prototype . construct = function ( ) {
2015-08-27 15:46:53 +02:00
2015-11-27 01:14:33 +01:00
var self = this ;
2015-10-26 06:27:55 +01:00
2015-11-27 01:14:33 +01:00
panel = $ ( "<div/>" , {
class : "settings-inner" ,
style : "display:none;"
} ) ;
2015-08-27 15:46:53 +02:00
2015-11-27 01:14:33 +01:00
var settingsPolyfill = $ ( "<div/>" , {
class : " scroller-wrap polyfil"
} ) ;
2015-08-27 15:46:53 +02:00
2015-11-27 01:14:33 +01:00
panel . append ( settingsPolyfill ) ;
2015-08-27 15:46:53 +02:00
2015-11-27 01:14:33 +01:00
var settingsWrapper = $ ( "<div/>" , {
class : "scroller settings-wrapper settings-panel"
} ) ;
2015-08-27 15:46:53 +02:00
2015-11-27 01:14:33 +01:00
//Scrollbar
var scrollBar = $ ( "<div/>" , {
class : "scrollbar"
} ) . append ( $ ( "<div/>" , {
class : "track"
} ) . append ( $ ( "<div/>" , {
class : "thumb"
} ) ) ) ;
2015-08-27 15:46:53 +02:00
2015-11-27 01:14:33 +01:00
settingsWrapper . append ( scrollBar ) ;
2015-08-27 15:46:53 +02:00
2015-11-27 01:14:33 +01:00
settingsPolyfill . append ( settingsWrapper ) ;
var controlGroups = $ ( "<div/>" , {
class : "control-groups"
} ) ;
var controlGroups2 = $ ( "<div/>" , {
class : "control-groups"
} ) ;
settingsWrapper . append ( controlGroups ) ;
2015-11-28 04:17:39 +01:00
settingsWrapper . append ( controlGroups2 ) ;
2015-11-27 01:14:33 +01:00
var featuresGroup = $ ( "<div/>" , {
class : "control-group"
} ) ;
2015-11-28 04:17:39 +01:00
var customCssGroup = $ ( "<div/>" , {
2015-11-27 01:14:33 +01:00
class : "control-group"
} ) ;
controlGroups . append ( featuresGroup ) ;
2015-11-28 04:17:39 +01:00
controlGroups2 . append ( customCssGroup ) ;
2015-11-27 01:14:33 +01:00
featuresGroup . append ( $ ( "<label/>" , {
text : "BetterDiscord Settings"
} ) ) ;
2015-11-28 04:17:39 +01:00
customCssGroup . append ( $ ( "<label/>" , {
text : "Custom CSS"
2015-11-27 01:14:33 +01:00
} ) ) ;
2015-11-28 04:17:39 +01:00
var ta = $ ( "<textarea/>" , {
id : "custom-css-ta"
} ) ;
var decode = atob ( localStorage . getItem ( "bdcustomcss" ) ) ;
self . applyCustomCss ( decode ) ;
ta . val ( decode ) ;
customCssGroup . append ( ta ) ;
ta . on ( "input propertychange" , function ( ) {
self . applyCustomCss ( $ ( this ) . val ( ) ) ;
} ) ;
2015-11-27 01:14:33 +01:00
var featuresCheckboxGroup = $ ( "<ul/>" , {
class : "checkbox-group"
} ) ;
2015-11-28 04:17:39 +01:00
2015-11-27 01:14:33 +01:00
function updateSetting ( ) {
var cb = $ ( this ) . children ( ) . find ( 'input[type="checkbox"]' ) ;
var enabled = ! cb . is ( ":checked" ) ;
var id = cb . attr ( "id" ) ;
cb . prop ( "checked" , enabled ) ;
settingsCookie [ id ] = enabled ;
if ( settingsCookie [ "bda-es-0" ] ) {
$ ( "#twitchcord-button-container" ) . show ( ) ;
} else {
$ ( "#twitchcord-button-container" ) . hide ( ) ;
}
if ( settingsCookie [ "bda-gs-2" ] ) {
$ ( "body" ) . addClass ( "bd-minimal" ) ;
} else {
$ ( "body" ) . removeClass ( "bd-minimal" ) ;
}
if ( settingsCookie [ "bda-gs-3" ] ) {
$ ( "body" ) . addClass ( "bd-minimal-chan" ) ;
} else {
$ ( "body" ) . removeClass ( "bd-minimal-chan" ) ;
}
if ( settingsCookie [ "bda-gs-1" ] ) {
$ ( "#bd-pub-li" ) . show ( ) ;
} else {
$ ( "#bd-pub-li" ) . hide ( ) ;
}
if ( settingsCookie [ "bda-gs-4" ] ) {
voiceMode . enable ( ) ;
} else {
voiceMode . disable ( ) ;
}
mainCore . saveSettings ( ) ;
2015-08-27 15:46:53 +02:00
}
2015-11-27 01:14:33 +01:00
for ( var setting in settings ) {
var sett = settings [ setting ] ;
var id = sett [ "id" ] ;
if ( sett [ "implemented" ] ) {
featuresCheckboxGroup . append ( $ ( "<li/>" ) . append ( $ ( "<div/>" , {
class : "checkbox" ,
click : updateSetting
} ) . append ( $ ( "<div/>" , {
class : "checkbox-inner"
} ) . append ( $ ( "<input/>" , {
type : "checkbox" ,
id : id ,
prop : {
"checked" : settingsCookie [ id ]
}
} ) ) . append ( $ ( "<span/>" ) ) ) . append ( $ ( "<span/>" , {
text : setting + " - " + sett [ "info" ]
} ) ) ) ) ;
}
2015-08-30 11:17:06 +02:00
}
2015-11-27 01:14:33 +01:00
featuresGroup . append ( featuresCheckboxGroup ) ;
//Info Footer
var footer = $ ( "<div/>" , {
css : {
"background" : "#1A1A1A" ,
"color" : "#ADADAD" ,
"height" : "30px" ,
"position" : "absolute" ,
"bottom" : "0" ,
"left" : "0" ,
"right" : "0"
}
} ) ;
var versionSpan = $ ( "<span/>" , {
2015-11-29 18:21:58 +01:00
text : "BetterDiscord v" + version + "(JSv" + jsVersion + ") by Jiiks" ,
2015-11-27 01:14:33 +01:00
css : {
"line-height" : "30px" ,
"margin-left" : "10px"
}
} ) ;
var linksSpan = $ ( "<span/>" , {
css : {
"float" : "right" ,
"line-height" : "30px" ,
"margin-right" : "10px"
}
} ) ;
for ( var link in links ) {
$ ( "<a/>" , {
text : links [ link ] [ "text" ] ,
href : links [ link ] [ "href" ] ,
target : links [ link ] [ "target" ]
} ) . append ( $ ( "<span/>" , {
text : " | "
} ) ) . appendTo ( linksSpan ) ;
2015-08-30 11:17:06 +02:00
}
2015-11-27 01:14:33 +01:00
footer . append ( versionSpan ) ;
footer . append ( linksSpan ) ;
settingsPolyfill . append ( footer ) ;
function showSettings ( ) {
$ ( ".tab-bar-item" ) . removeClass ( "selected" ) ;
settingsButton . addClass ( "selected" ) ;
$ ( ".form .settings-right .settings-inner" ) . first ( ) . hide ( ) ;
panel . show ( ) ;
2015-10-26 06:27:55 +01:00
}
2015-11-27 01:14:33 +01:00
settingsButton = $ ( "<div/>" , {
class : "tab-bar-item" ,
text : "BetterDiscord" ,
id : "bd-settings-new" ,
click : showSettings
} ) ;
function defer ( ) {
if ( $ ( ".btn.btn-settings" ) . length < 1 ) {
setTimeout ( defer , 100 ) ;
} else {
$ ( ".btn.btn-settings" ) . first ( ) . on ( "click" , function ( ) {
function innerDefer ( ) {
if ( $ ( ".modal-inner" ) . first ( ) . is ( ":visible" ) ) {
panel . hide ( ) ;
var tabBar = $ ( ".tab-bar.SIDE" ) . first ( ) ;
$ ( ".tab-bar.SIDE .tab-bar-item" ) . click ( function ( ) {
$ ( ".form .settings-right .settings-inner" ) . first ( ) . show ( ) ;
$ ( "#bd-settings-new" ) . removeClass ( "selected" ) ;
panel . hide ( ) ;
} ) ;
tabBar . append ( settingsButton ) ;
panel . insertAfter ( ".form .settings-right .settings-inner" ) ;
$ ( "#bd-settings-new" ) . removeClass ( "selected" ) ;
} else {
setTimeout ( innerDefer , 100 ) ;
}
}
innerDefer ( ) ;
} ) ;
}
2015-10-26 06:27:55 +01:00
}
2015-11-27 01:14:33 +01:00
defer ( ) ;
2015-08-27 15:46:53 +02:00
2015-10-26 06:27:55 +01:00
} ;
2015-08-27 15:46:53 +02:00
/ * B e t t e r D i s c o r d A p p U t i l i t i e s J a v a S c r i p t
* Version : 1.0
* Author : Jiiks | http : //jiiks.net
* Date : 26 / 08 / 2015 - 15 : 54
* https : //github.com/Jiiks/BetterDiscordApp
* /
2015-11-01 12:37:04 +01:00
var _hash ;
2015-08-27 15:46:53 +02:00
function Utils ( ) {
}
Utils . prototype . getTextArea = function ( ) {
return $ ( ".channel-textarea-inner textarea" ) ;
2015-10-26 06:27:55 +01:00
} ;
2015-08-27 15:46:53 +02:00
Utils . prototype . jqDefer = function ( fnc ) {
if ( window . jQuery ) { fnc ( ) ; } else { setTimeout ( function ( ) { this . jqDefer ( fnc ) } , 100 ) }
2015-10-26 06:27:55 +01:00
} ;
2015-11-01 12:37:04 +01:00
Utils . prototype . getHash = function ( ) {
2015-11-01 12:51:34 +01:00
$ . getJSON ( "https://api.github.com/repos/Jiiks/BetterDiscordApp/commits/master" , function ( data ) {
2015-11-01 12:37:04 +01:00
_hash = data . sha ;
2015-11-01 13:13:13 +01:00
emoteModule . getBlacklist ( ) ;
2015-11-01 12:37:04 +01:00
} ) ;
} ;
2015-10-26 06:27:55 +01:00
/ * B e t t e r D i s c o r d A p p V o i c e M o d e J a v a S c r i p t
* Version : 1.0
* Author : Jiiks | http : //jiiks.net
* Date : 25 / 10 / 2015 - 19 : 10
* https : //github.com/Jiiks/BetterDiscordApp
* /
function VoiceMode ( ) {
2015-08-31 15:36:28 +02:00
}
2015-10-26 06:27:55 +01:00
2015-10-31 22:34:10 +01:00
VoiceMode . prototype . obsCallback = function ( ) {
2015-11-19 00:35:39 +01:00
console . log ( "voiceMode obs" ) ;
var self = this ;
if ( settingsCookie [ "bda-gs-4" ] ) {
self . disable ( ) ;
setTimeout ( function ( ) {
self . enable ( ) ;
} , 300 ) ;
2015-11-28 00:29:53 +01:00
2015-11-19 00:35:39 +01:00
}
2015-10-31 22:34:10 +01:00
}
2015-10-31 22:24:40 +01:00
2015-10-26 06:27:55 +01:00
VoiceMode . prototype . enable = function ( ) {
$ ( ".scroller.guild-channels ul" ) . first ( ) . css ( "display" , "none" ) ;
$ ( ".scroller.guild-channels header" ) . first ( ) . css ( "display" , "none" ) ;
2015-11-28 00:29:53 +01:00
// $(".flex-vertical.flex-spacer").first().css("overflow", "hidden");
2015-10-31 22:40:49 +01:00
$ ( ".app.flex-vertical" ) . first ( ) . css ( "overflow" , "hidden" ) ;
2015-10-26 06:27:55 +01:00
$ ( ".chat.flex-vertical.flex-spacer" ) . first ( ) . css ( "visibility" , "hidden" ) . css ( "min-width" , "0px" ) ;
2015-10-31 22:30:51 +01:00
$ ( ".flex-vertical.channels-wrap" ) . first ( ) . css ( "flex-grow" , "100000" ) ;
2015-10-26 06:27:55 +01:00
$ ( ".guild-header .btn.btn-hamburger" ) . first ( ) . css ( "visibility" , "hidden" ) ;
} ;
VoiceMode . prototype . disable = function ( ) {
$ ( ".scroller.guild-channels ul" ) . first ( ) . css ( "display" , "" ) ;
$ ( ".scroller.guild-channels header" ) . first ( ) . css ( "display" , "" ) ;
2015-10-31 22:40:49 +01:00
//$(".flex-vertical.flex-spacer").first().css("overflow", "");
2015-11-19 00:35:39 +01:00
$ ( ".app.flex-vertical" ) . first ( ) . css ( "overflow" , "" ) ;
2015-10-26 06:27:55 +01:00
$ ( ".chat.flex-vertical.flex-spacer" ) . first ( ) . css ( "visibility" , "" ) . css ( "min-width" , "" ) ;
2015-10-31 22:30:51 +01:00
$ ( ".flex-vertical.channels-wrap" ) . first ( ) . css ( "flex-grow" , "" ) ;
2015-10-26 06:27:55 +01:00
$ ( ".guild-header .btn.btn-hamburger" ) . first ( ) . css ( "visibility" , "" ) ;
2015-11-19 00:35:39 +01:00
} ;