2015-02-24 00:33:29 -05:00
|
|
|
var FFZ = window.FrankerFaceZ,
|
|
|
|
constants = require("../constants"),
|
2015-06-05 03:59:28 -04:00
|
|
|
utils = require("../utils"),
|
2015-02-24 00:33:29 -05:00
|
|
|
|
|
|
|
TWITCH_BASE = "http://static-cdn.jtvnw.net/emoticons/v1/",
|
2015-07-06 00:09:21 -04:00
|
|
|
BANNED_SETS = {"00000turbo":true};
|
2015-02-24 00:33:29 -05:00
|
|
|
|
|
|
|
|
|
|
|
// -------------------
|
|
|
|
// Initialization
|
|
|
|
// -------------------
|
|
|
|
|
2015-08-04 01:43:08 -04:00
|
|
|
FFZ.basic_settings.replace_twitch_menu = {
|
|
|
|
type: "boolean",
|
|
|
|
|
|
|
|
category: "Chat",
|
|
|
|
|
|
|
|
name: "Unified Emoticons Menu",
|
|
|
|
help: "Completely replace the default Twitch emoticon menu and display global emoticons in the My Emoticons menu.",
|
|
|
|
|
|
|
|
get: function() {
|
|
|
|
return this.settings.replace_twitch_menu && this.settings.global_emotes_in_menu && this.settings.emoji_in_menu;
|
|
|
|
},
|
|
|
|
|
|
|
|
set: function(val) {
|
|
|
|
this.settings.set('replace_twitch_menu', val);
|
|
|
|
this.settings.set('global_emotes_in_menu', val);
|
|
|
|
this.settings.set('emoji_in_menu', val);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2015-07-13 21:52:44 -04:00
|
|
|
FFZ.settings_info.replace_twitch_menu = {
|
|
|
|
type: "boolean",
|
|
|
|
value: false,
|
|
|
|
|
|
|
|
category: "Chat Input",
|
|
|
|
|
|
|
|
name: "Replace Twitch Emoticon Menu",
|
|
|
|
help: "Completely replace the default Twitch emoticon menu.",
|
|
|
|
|
|
|
|
on_update: function(val) {
|
|
|
|
document.body.classList.toggle("ffz-menu-replace", val);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-02-26 00:42:11 -05:00
|
|
|
FFZ.settings_info.global_emotes_in_menu = {
|
|
|
|
type: "boolean",
|
|
|
|
value: false,
|
|
|
|
|
2015-07-13 21:52:44 -04:00
|
|
|
category: "Chat Input",
|
|
|
|
|
2015-02-26 00:42:11 -05:00
|
|
|
name: "Display Global Emotes in My Emotes",
|
|
|
|
help: "Display the global Twitch emotes in the My Emoticons menu."
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-07-06 00:09:21 -04:00
|
|
|
FFZ.settings_info.emoji_in_menu = {
|
|
|
|
type: "boolean",
|
|
|
|
value: false,
|
|
|
|
|
2015-07-13 21:52:44 -04:00
|
|
|
category: "Chat Input",
|
|
|
|
|
2015-07-06 00:09:21 -04:00
|
|
|
name: "Display Emoji in My Emotes",
|
|
|
|
help: "Display the supported emoji images in the My Emoticons menu."
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-07-13 21:52:44 -04:00
|
|
|
FFZ.settings_info.emote_menu_collapsed = {
|
|
|
|
value: [],
|
|
|
|
visible: false
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-02-24 00:33:29 -05:00
|
|
|
FFZ.prototype.setup_my_emotes = function() {
|
2015-06-05 03:59:28 -04:00
|
|
|
this._twitch_badges = {};
|
2015-07-31 21:40:51 -04:00
|
|
|
this._twitch_badges["--global--"] = "//cdn.frankerfacez.com/script/twitch_logo.png";
|
|
|
|
this._twitch_badges["--turbo-faces--"] = this._twitch_badges["turbo"] = "//cdn.frankerfacez.com/script/turbo_badge.png";
|
2015-02-24 00:33:29 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// -------------------
|
|
|
|
// Menu Page
|
|
|
|
// -------------------
|
|
|
|
|
2015-07-31 21:40:51 -04:00
|
|
|
FFZ.menu_pages.myemotes = {
|
2015-02-24 00:33:29 -05:00
|
|
|
name: "My Emoticons",
|
|
|
|
icon: constants.EMOTE,
|
|
|
|
|
2015-06-10 18:46:04 -04:00
|
|
|
visible: function(view) {
|
|
|
|
var user = this.get_user(),
|
|
|
|
tmi = view.get('controller.currentRoom.tmiSession'),
|
|
|
|
ffz_sets = user && this.users[user.login] && this.users[user.login].sets || [],
|
2015-08-28 22:54:12 -04:00
|
|
|
twitch_sets = (tmi && tmi.getEmotes() || {'emoticon_sets': {}})['emoticon_sets'],
|
|
|
|
|
|
|
|
sk = twitch_sets && Object.keys(twitch_sets);
|
2015-06-10 18:46:04 -04:00
|
|
|
|
2015-08-28 22:54:12 -04:00
|
|
|
if ( sk && ! this.settings.global_emotes_in_menu && sk.indexOf('0') !== -1 )
|
|
|
|
sk.removeObject('0');
|
|
|
|
|
|
|
|
return ffz_sets.length || (sk && sk.length) || this.settings.emoji_in_menu;
|
2015-02-24 00:33:29 -05:00
|
|
|
},
|
|
|
|
|
|
|
|
render: function(view, container) {
|
2015-06-05 03:59:28 -04:00
|
|
|
var tmi = view.get('controller.currentRoom.tmiSession'),
|
2015-08-02 02:41:03 -04:00
|
|
|
twitch_sets = (tmi && tmi.getEmotes() || {'emoticon_sets': {}})['emoticon_sets'];
|
|
|
|
|
|
|
|
// We don't have to do async stuff anymore cause we pre-load data~!
|
|
|
|
return FFZ.menu_pages.myemotes.draw_menu.bind(this)(view, container, twitch_sets);
|
2015-06-05 03:59:28 -04:00
|
|
|
},
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-07-13 21:52:44 -04:00
|
|
|
toggle_section: function(heading) {
|
|
|
|
var menu = heading.parentElement,
|
|
|
|
set_id = menu.getAttribute('data-set'),
|
|
|
|
collapsed_list = this.settings.emote_menu_collapsed,
|
|
|
|
is_collapsed = collapsed_list.indexOf(set_id) !== -1;
|
|
|
|
|
|
|
|
if ( is_collapsed )
|
|
|
|
collapsed_list.removeObject(set_id);
|
|
|
|
else
|
|
|
|
collapsed_list.push(set_id);
|
|
|
|
|
|
|
|
this.settings.set('emote_menu_collapsed', collapsed_list);
|
|
|
|
menu.classList.toggle('collapsed', !is_collapsed);
|
|
|
|
},
|
|
|
|
|
2015-07-06 00:09:21 -04:00
|
|
|
draw_emoji: function(view) {
|
|
|
|
var heading = document.createElement('div'),
|
2015-07-13 21:52:44 -04:00
|
|
|
menu = document.createElement('div'),
|
2015-08-28 22:54:12 -04:00
|
|
|
f = this,
|
|
|
|
settings = this.settings.parse_emoji || 1;
|
|
|
|
|
2015-07-06 00:09:21 -04:00
|
|
|
|
|
|
|
heading.className = 'heading';
|
2015-08-28 22:54:12 -04:00
|
|
|
heading.innerHTML = '<span class="right">Unicode</span>Emoji';
|
|
|
|
heading.style.backgroundImage = 'url("' + constants.SERVER + 'emoji/' + (settings === 2 ? 'noto-' : 'tw-') + '1f4af.svg")';
|
|
|
|
heading.style.backgroundSize = "18px";
|
2015-07-06 00:09:21 -04:00
|
|
|
|
2015-07-13 21:52:44 -04:00
|
|
|
menu.className = 'emoticon-grid collapsable';
|
2015-07-06 00:09:21 -04:00
|
|
|
menu.appendChild(heading);
|
2015-08-02 02:41:03 -04:00
|
|
|
|
2015-07-13 21:52:44 -04:00
|
|
|
menu.setAttribute('data-set', 'emoji');
|
|
|
|
menu.classList.toggle('collapsed', this.settings.emote_menu_collapsed.indexOf('emoji') !== -1);
|
2015-07-31 21:40:51 -04:00
|
|
|
heading.addEventListener('click', function() { FFZ.menu_pages.myemotes.toggle_section.bind(f)(this); });
|
2015-08-02 02:41:03 -04:00
|
|
|
|
2015-07-06 00:09:21 -04:00
|
|
|
var set = [];
|
2015-08-28 22:54:12 -04:00
|
|
|
|
2015-07-06 00:09:21 -04:00
|
|
|
for(var eid in this.emoji_data)
|
|
|
|
set.push(this.emoji_data[eid]);
|
2015-08-02 02:41:03 -04:00
|
|
|
|
2015-07-06 00:09:21 -04:00
|
|
|
set.sort(function(a,b) {
|
2015-08-28 22:54:12 -04:00
|
|
|
var an = (a.name || "").toLowerCase(),
|
|
|
|
bn = (b.name || "").toLowerCase();
|
2015-07-06 00:09:21 -04:00
|
|
|
|
|
|
|
if ( an < bn ) return -1;
|
|
|
|
else if ( an > bn ) return 1;
|
|
|
|
if ( a.raw < b.raw ) return -1;
|
|
|
|
if ( a.raw > b.raw ) return 1;
|
|
|
|
return 0;
|
|
|
|
});
|
2015-08-02 02:41:03 -04:00
|
|
|
|
2015-07-06 00:09:21 -04:00
|
|
|
for(var i=0; i < set.length; i++) {
|
|
|
|
var emoji = set[i],
|
2015-08-28 22:54:12 -04:00
|
|
|
em = document.createElement('span');
|
|
|
|
|
|
|
|
if ( (settings === 1 && ! emoji.tw) || (settings === 2 && ! emoji.noto) )
|
|
|
|
continue;
|
2015-07-06 00:09:21 -04:00
|
|
|
|
2015-11-10 21:37:30 -05:00
|
|
|
em.className = 'emoticon html-tooltip';
|
2015-08-28 22:54:12 -04:00
|
|
|
em.title = 'Emoji: ' + emoji.raw + '\nName: ' + emoji.name + (emoji.short_name ? '\nShort Name: :' + emoji.short_name + ':' : '');
|
2015-07-06 00:09:21 -04:00
|
|
|
em.addEventListener('click', this._add_emote.bind(this, view, emoji.raw));
|
2015-08-02 02:41:03 -04:00
|
|
|
|
2015-08-28 22:54:12 -04:00
|
|
|
em.style.backgroundImage = 'url("' + (settings === 2 ? emoji.noto_src : emoji.tw_src) + '")';
|
|
|
|
em.style.backgroundSize = "18px";
|
2015-08-02 02:41:03 -04:00
|
|
|
|
2015-07-06 00:09:21 -04:00
|
|
|
menu.appendChild(em);
|
|
|
|
}
|
|
|
|
|
|
|
|
return menu;
|
|
|
|
},
|
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
draw_twitch_set: function(view, set_id, set) {
|
|
|
|
var heading = document.createElement('div'),
|
|
|
|
menu = document.createElement('div'),
|
2015-07-13 21:52:44 -04:00
|
|
|
f = this,
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
channel_id = this._twitch_set_to_channel[set_id], title;
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-07-29 01:03:10 -04:00
|
|
|
if ( channel_id === "twitch_unknown" )
|
|
|
|
title = "Unknown Channel";
|
2015-07-31 21:40:51 -04:00
|
|
|
else if ( channel_id === "--global--" )
|
2015-06-05 03:59:28 -04:00
|
|
|
title = "Global Emoticons";
|
2015-07-31 21:40:51 -04:00
|
|
|
else if ( channel_id === "turbo" || channel_id === "--turbo-faces--" )
|
2015-06-05 03:59:28 -04:00
|
|
|
title = "Twitch Turbo";
|
|
|
|
else
|
|
|
|
title = FFZ.get_capitalization(channel_id, function(name) {
|
|
|
|
heading.innerHTML = '<span class="right">Twitch</span>' + utils.sanitize(name);
|
|
|
|
});
|
2015-02-26 17:27:39 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
heading.className = 'heading';
|
|
|
|
heading.innerHTML = '<span class="right">Twitch</span>' + utils.sanitize(title);
|
|
|
|
|
|
|
|
if ( this._twitch_badges[channel_id] )
|
|
|
|
heading.style.backgroundImage = 'url("' + this._twitch_badges[channel_id] + '")';
|
|
|
|
else {
|
|
|
|
var f = this;
|
|
|
|
Twitch.api.get("chat/" + channel_id + "/badges", null, {version: 3})
|
|
|
|
.done(function(data) {
|
|
|
|
if ( data.subscriber && data.subscriber.image ) {
|
|
|
|
f._twitch_badges[channel_id] = data.subscriber.image;
|
2015-06-10 18:46:04 -04:00
|
|
|
localStorage.ffzTwitchBadges = JSON.stringify(f._twitch_badges);
|
2015-06-05 03:59:28 -04:00
|
|
|
heading.style.backgroundImage = 'url("' + data.subscriber.image + '")';
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2015-02-26 17:27:39 -05:00
|
|
|
|
2015-07-13 21:52:44 -04:00
|
|
|
menu.className = 'emoticon-grid collapsable';
|
2015-06-05 03:59:28 -04:00
|
|
|
menu.appendChild(heading);
|
2015-07-31 21:40:51 -04:00
|
|
|
|
2015-07-13 21:52:44 -04:00
|
|
|
menu.setAttribute('data-set', 'twitch-' + set_id);
|
|
|
|
menu.classList.toggle('collapsed', this.settings.emote_menu_collapsed.indexOf('twitch-' + set_id) !== -1);
|
2015-07-31 21:40:51 -04:00
|
|
|
heading.addEventListener('click', function() { FFZ.menu_pages.myemotes.toggle_section.bind(f)(this); });
|
2015-02-26 17:27:39 -05:00
|
|
|
|
2015-07-06 00:09:21 -04:00
|
|
|
set.sort(function(a,b) {
|
|
|
|
var an = a.code.toLowerCase(),
|
|
|
|
bn = b.code.toLowerCase();
|
|
|
|
|
|
|
|
if ( an < bn ) return -1;
|
|
|
|
else if ( an > bn ) return 1;
|
|
|
|
if ( a.id < b.id ) return -1;
|
|
|
|
if ( a.id > b.id ) return 1;
|
|
|
|
return 0;
|
|
|
|
});
|
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
for(var i=0; i < set.length; i++) {
|
|
|
|
var emote = set[i],
|
2015-07-06 00:09:21 -04:00
|
|
|
code = constants.KNOWN_CODES[emote.code] || emote.code,
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
em = document.createElement('span'),
|
|
|
|
img_set = 'image-set(url("' + TWITCH_BASE + emote.id + '/1.0") 1x, url("' + TWITCH_BASE + emote.id + '/2.0") 2x, url("' + TWITCH_BASE + emote.id + '/3.0") 4x)';
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-11-10 21:37:30 -05:00
|
|
|
em.className = 'emoticon html-tooltip';
|
2015-07-06 00:09:21 -04:00
|
|
|
|
|
|
|
if ( this.settings.replace_bad_emotes && constants.EMOTE_REPLACEMENTS[emote.id] ) {
|
|
|
|
em.style.backgroundImage = 'url("' + constants.EMOTE_REPLACEMENT_BASE + constants.EMOTE_REPLACEMENTS[emote.id] + '")';
|
|
|
|
} else {
|
|
|
|
em.style.backgroundImage = 'url("' + TWITCH_BASE + emote.id + '/1.0")';
|
|
|
|
em.style.backgroundImage = '-webkit-' + img_set;
|
|
|
|
em.style.backgroundImage = '-moz-' + img_set;
|
|
|
|
em.style.backgroundImage = '-ms-' + img_set;
|
|
|
|
em.style.backgroudnImage = img_set;
|
|
|
|
}
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
em.title = code;
|
2015-08-28 22:54:12 -04:00
|
|
|
em.addEventListener("click", function(id, c, e) {
|
2015-08-02 02:41:03 -04:00
|
|
|
e.preventDefault();
|
|
|
|
if ( (e.shiftKey || e.shiftLeft) && f.settings.clickable_emoticons )
|
|
|
|
window.open("https://twitchemotes.com/emote/" + id);
|
|
|
|
else
|
2015-08-28 22:54:12 -04:00
|
|
|
this._add_emote(view, c);
|
|
|
|
}.bind(this, emote.id, code));
|
2015-06-05 03:59:28 -04:00
|
|
|
menu.appendChild(em);
|
|
|
|
}
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
return menu;
|
|
|
|
},
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
draw_ffz_set: function(view, set) {
|
|
|
|
var heading = document.createElement('div'),
|
|
|
|
menu = document.createElement('div'),
|
2015-07-13 21:52:44 -04:00
|
|
|
f = this,
|
2015-10-24 22:44:00 -04:00
|
|
|
emotes = [],
|
|
|
|
|
|
|
|
menu_id = set.hasOwnProperty('source_ext') ? 'ffz-ext-' + set.source_ext + '-' + set.source_id : 'ffz-' + set.id,
|
|
|
|
icon = set.icon || (set.hasOwnProperty('source_ext') && '//cdn.frankerfacez.com/emoji/tw-1f4ac.svg') || '//cdn.frankerfacez.com/script/devicon.png';
|
2015-02-26 17:27:39 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
heading.className = 'heading';
|
2015-10-24 22:44:00 -04:00
|
|
|
heading.innerHTML = '<span class="right">' + (utils.sanitize(set.source) || 'FrankerFaceZ') + '</span>' + set.title;
|
|
|
|
|
|
|
|
heading.style.backgroundImage = 'url("' + icon + '")';
|
|
|
|
if ( icon.indexOf('.svg') !== -1 )
|
|
|
|
heading.style.backgroundSize = "18px";
|
2015-02-26 17:27:39 -05:00
|
|
|
|
2015-07-13 21:52:44 -04:00
|
|
|
menu.className = 'emoticon-grid collapsable';
|
2015-06-05 03:59:28 -04:00
|
|
|
menu.appendChild(heading);
|
2015-08-02 02:41:03 -04:00
|
|
|
|
2015-10-24 22:44:00 -04:00
|
|
|
menu.setAttribute('data-set', menu_id);
|
|
|
|
menu.classList.toggle('collapsed', this.settings.emote_menu_collapsed.indexOf(menu_id) !== -1);
|
2015-07-31 21:40:51 -04:00
|
|
|
heading.addEventListener('click', function() { FFZ.menu_pages.myemotes.toggle_section.bind(f)(this); });
|
2015-02-26 17:27:39 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
for(var emote_id in set.emoticons)
|
|
|
|
set.emoticons.hasOwnProperty(emote_id) && ! set.emoticons[emote_id].hidden && emotes.push(set.emoticons[emote_id]);
|
2015-02-26 17:27:39 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
emotes.sort(function(a,b) {
|
|
|
|
var an = a.name.toLowerCase(),
|
|
|
|
bn = b.name.toLowerCase();
|
2015-02-26 17:27:39 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
if ( an < bn ) return -1;
|
|
|
|
else if ( an > bn ) return 1;
|
|
|
|
if ( a.id < b.id ) return -1;
|
|
|
|
if ( a.id > b.id ) return 1;
|
|
|
|
return 0;
|
|
|
|
});
|
2015-02-26 17:27:39 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
for(var i=0; i < emotes.length; i++) {
|
|
|
|
var emote = emotes[i],
|
|
|
|
|
|
|
|
em = document.createElement('span'),
|
|
|
|
img_set = 'image-set(url("' + emote.urls[1] + '") 1x';
|
|
|
|
|
|
|
|
if ( emote.urls[2] )
|
|
|
|
img_set += ', url("' + emote.urls[2] + '") 2x';
|
2015-02-26 17:27:39 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
if ( emote.urls[4] )
|
|
|
|
img_set += ', url("' + emote.urls[4] + '") 4x';
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
img_set += ')';
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-11-10 21:37:30 -05:00
|
|
|
em.className = 'emoticon html-tooltip';
|
2015-06-05 03:59:28 -04:00
|
|
|
em.style.backgroundImage = 'url("' + emote.urls[1] + '")';
|
|
|
|
em.style.backgroundImage = '-webkit-' + img_set;
|
|
|
|
em.style.backgroundImage = '-moz-' + img_set;
|
|
|
|
em.style.backgroundImage = '-ms-' + img_set;
|
|
|
|
em.style.backgroudnImage = img_set;
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
if ( emote.height )
|
|
|
|
em.style.height = emote.height + "px";
|
|
|
|
if ( emote.width )
|
|
|
|
em.style.width = emote.width + "px";
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-10 18:46:04 -04:00
|
|
|
em.title = this._emote_tooltip(emote);
|
2015-08-02 02:41:03 -04:00
|
|
|
em.addEventListener("click", function(id, code, e) {
|
|
|
|
e.preventDefault();
|
2015-10-27 14:25:13 -04:00
|
|
|
if ( (e.shiftKey || e.shiftLeft) && f.settings.clickable_emoticons ) {
|
|
|
|
var url;
|
|
|
|
if ( set.hasOwnProperty('source_ext') ) {
|
|
|
|
var api = f._apis[set.source_ext];
|
|
|
|
if ( api && api.emote_url_generator )
|
|
|
|
url = api.emote_url_generator(set.source_id, id);
|
|
|
|
} else
|
|
|
|
url = "https://www.frankerfacez.com/emoticons/" + id;
|
|
|
|
|
|
|
|
if ( url )
|
|
|
|
window.open(url);
|
|
|
|
} else
|
2015-08-02 02:41:03 -04:00
|
|
|
this._add_emote(view, code);
|
|
|
|
}.bind(this, emote.id, emote.name));
|
2015-06-05 03:59:28 -04:00
|
|
|
menu.appendChild(em);
|
|
|
|
}
|
2015-02-26 17:27:39 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
return menu;
|
|
|
|
},
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
draw_menu: function(view, container, twitch_sets) {
|
|
|
|
// Make sure we're still on the My Emoticons page. Since this is
|
|
|
|
// asynchronous, the user could've tabbed away.
|
2015-07-31 21:40:51 -04:00
|
|
|
if ( container.getAttribute('data-page') !== 'myemotes' )
|
2015-06-05 03:59:28 -04:00
|
|
|
return;
|
2015-02-26 17:27:39 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
container.innerHTML = "";
|
|
|
|
try {
|
|
|
|
var user = this.get_user(),
|
|
|
|
ffz_sets = this.getEmotes(user && user.login, null),
|
|
|
|
sets = [];
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
// Start with Twitch Sets
|
|
|
|
for(var set_id in twitch_sets) {
|
|
|
|
if ( ! twitch_sets.hasOwnProperty(set_id) || ( ! this.settings.global_emotes_in_menu && set_id === '0' ) )
|
|
|
|
continue;
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
var set = twitch_sets[set_id];
|
|
|
|
if ( ! set.length )
|
|
|
|
continue;
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-07-31 21:40:51 -04:00
|
|
|
sets.push([this._twitch_set_to_channel[set_id], FFZ.menu_pages.myemotes.draw_twitch_set.bind(this)(view, set_id, set)]);
|
2015-06-05 03:59:28 -04:00
|
|
|
}
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-07-06 00:09:21 -04:00
|
|
|
// Emoji~!
|
|
|
|
if ( this.settings.emoji_in_menu )
|
2015-07-31 21:40:51 -04:00
|
|
|
sets.push(["emoji", FFZ.menu_pages.myemotes.draw_emoji.bind(this)(view)]);
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
// Now, FFZ!
|
|
|
|
for(var i=0; i < ffz_sets.length; i++) {
|
|
|
|
var set_id = ffz_sets[i],
|
|
|
|
set = this.emote_sets[set_id];
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
if ( ! set || ! set.count || ( ! this.settings.global_emotes_in_menu && this.default_sets.indexOf(set_id) !== -1 ) )
|
|
|
|
continue;
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-07-31 21:40:51 -04:00
|
|
|
sets.push([set.title.toLowerCase(), FFZ.menu_pages.myemotes.draw_ffz_set.bind(this)(view, set)]);
|
2015-06-05 03:59:28 -04:00
|
|
|
}
|
2015-02-24 00:33:29 -05:00
|
|
|
|
|
|
|
|
2015-06-05 03:59:28 -04:00
|
|
|
// Finally, sort and add them all.
|
|
|
|
sets.sort(function(a,b) {
|
|
|
|
var an = a[0], bn = b[0];
|
2015-07-31 21:40:51 -04:00
|
|
|
if ( an === "turbo" || an === "--turbo-faces--" )
|
2015-06-05 03:59:28 -04:00
|
|
|
an = "zza|" + an;
|
2015-10-27 14:25:13 -04:00
|
|
|
else if ( an === "global" || (an && an.substr(0,16) === "global emoticons") || an === "--global--" )
|
2015-07-13 21:52:44 -04:00
|
|
|
an = "zzy|" + an;
|
|
|
|
else if ( an === "emoji" )
|
2015-06-05 03:59:28 -04:00
|
|
|
an = "zzz|" + an;
|
2015-02-24 00:33:29 -05:00
|
|
|
|
2015-07-31 21:40:51 -04:00
|
|
|
if ( bn === "turbo" || bn === "--turbo-faces--" )
|
2015-06-05 03:59:28 -04:00
|
|
|
bn = "zza|" + bn;
|
2015-10-27 14:25:13 -04:00
|
|
|
else if ( bn === "global" || (bn && bn.substr(0,16) === "global emoticons") || bn === "--global--" )
|
2015-07-13 21:52:44 -04:00
|
|
|
bn = "zzy|" + bn;
|
|
|
|
else if ( bn === "emoji" )
|
2015-06-05 03:59:28 -04:00
|
|
|
bn = "zzz|" + bn;
|
|
|
|
|
|
|
|
if ( an < bn ) return -1;
|
|
|
|
if ( an > bn ) return 1;
|
|
|
|
return 0;
|
2015-02-24 00:33:29 -05:00
|
|
|
});
|
2015-06-05 03:59:28 -04:00
|
|
|
|
|
|
|
for(var i=0; i < sets.length; i++)
|
|
|
|
container.appendChild(sets[i][1]);
|
|
|
|
|
|
|
|
} catch(err) {
|
2015-07-31 21:40:51 -04:00
|
|
|
this.error("myemotes draw_menu: " + err);
|
2015-06-05 03:59:28 -04:00
|
|
|
container.innerHTML = "";
|
|
|
|
|
|
|
|
var menu = document.createElement('div'),
|
|
|
|
heading = document.createElement('div'),
|
|
|
|
p = document.createElement('p');
|
|
|
|
|
|
|
|
heading.className = 'heading';
|
|
|
|
heading.innerHTML = 'Error Loading Menu';
|
|
|
|
menu.appendChild(heading);
|
|
|
|
|
|
|
|
p.className = 'clearfix';
|
|
|
|
p.textContent = err;
|
|
|
|
menu.appendChild(p);
|
|
|
|
|
|
|
|
menu.className = 'chat-menu-content';
|
|
|
|
container.appendChild(menu);
|
2015-02-24 00:33:29 -05:00
|
|
|
}
|
2015-06-05 03:59:28 -04:00
|
|
|
}
|
|
|
|
};
|