1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-07-01 08:38:32 +00:00

Way too much stuff for one commit. I'm a terrible person.

This commit is contained in:
SirStendec 2015-02-24 00:33:29 -05:00
parent 0f5e3915ad
commit fc21671b2c
18 changed files with 2204 additions and 476 deletions

View file

@ -60,23 +60,43 @@ FFZ.prototype.build_ui_popup = function(view) {
menu.className = 'menu clearfix';
inner.appendChild(menu);
var el = document.createElement('li');
el.className = 'title';
el.innerHTML = "<span>FrankerFaceZ</span>";
menu.appendChild(el);
el.addEventListener("click", this._add_emote.bind(this, view, "To use custom emoticons in tons of channels, get FrankerFaceZ from http://www.frankerfacez.com"));
var heading = document.createElement('li');
heading.className = 'title';
heading.innerHTML = "<span>" + (constants.DEBUG ? "[DEV] " : "") + "FrankerFaceZ</span>";
menu.appendChild(heading);
var sub_container = document.createElement('div');
sub_container.className = 'ffz-ui-menu-page';
inner.appendChild(sub_container);
var menu_pages = [];
for(var key in FFZ.menu_pages) {
if ( ! FFZ.menu_pages.hasOwnProperty(key) )
continue;
var page = FFZ.menu_pages[key];
if ( !page || (page.hasOwnProperty("visible") && (!page.visible || (typeof page.visible == "function" && !page.visible.bind(this)()))) )
continue;
var el = document.createElement('li'),
menu_pages.push([page.sort_order || 0, key, page]);
}
menu_pages.sort(function(a,b) {
if ( a[0] < b[0] ) return 1;
else if ( a[0] > b[0] ) return -1;
var al = a[1].toLowerCase(),
bl = b[1].toLowerCase();
if ( al < bl ) return 1;
if ( al > bl ) return -1;
return 0;
});
for(var i=0; i < menu_pages.length; i++) {
var key = menu_pages[i][1],
page = menu_pages[i][2],
el = document.createElement('li'),
link = document.createElement('a');
el.className = 'item';
@ -84,6 +104,8 @@ FFZ.prototype.build_ui_popup = function(view) {
link.title = page.name;
link.innerHTML = page.icon;
jQuery(link).tipsy();
link.addEventListener("click", this._ui_change_page.bind(this, view, menu, sub_container, key));
el.appendChild(link);
@ -103,6 +125,7 @@ FFZ.prototype.build_ui_popup = function(view) {
FFZ.prototype._ui_change_page = function(view, menu, container, page) {
this._last_page = page;
container.innerHTML = "";
container.setAttribute('data-page', page);
var els = menu.querySelectorAll('li.active');
for(var i=0; i < els.length; i++)
@ -118,137 +141,48 @@ FFZ.prototype._ui_change_page = function(view, menu, container, page) {
}
// --------------------
// Settings Page
// --------------------
FFZ.menu_pages.settings = {
render: function(view, container) {
var settings = {},
categories = [];
for(var key in FFZ.settings_info) {
var info = FFZ.settings_info[key],
cat = info.category || "Miscellaneous",
cs = settings[cat];
if ( info.visible !== undefined && info.visible !== null ) {
var visible = info.visible;
if ( typeof info.visible == "function" )
visible = info.visible.bind(this)();
if ( ! visible )
continue;
}
if ( ! cs ) {
categories.push(cat);
cs = settings[cat] = [];
}
cs.push([key, info]);
}
categories.sort(function(a,b) {
var a = a.toLowerCase(),
b = b.toLowerCase();
if ( a < b ) return -1;
else if ( a > b ) return 1;
return 0;
});
for(var ci=0; ci < categories.length; ci++) {
var category = categories[ci],
cset = settings[category],
menu = document.createElement('div'),
heading = document.createElement('div');
heading.className = 'heading';
menu.className = 'chat-menu-content';
heading.innerHTML = category;
menu.appendChild(heading);
cset.sort(function(a,b) {
var ai = a[1],
bi = b[1],
an = ai.name.toLowerCase(),
bn = bi.name.toLowerCase();
if ( an < bn ) return -1;
else if ( an > bn ) return 1;
return 0;
});
for(var i=0; i < cset.length; i++) {
var key = cset[i][0],
info = cset[i][1],
el = document.createElement('p'),
val = this.settings.get(key);
el.className = 'clearfix';
if ( info.type == "boolean" ) {
var swit = document.createElement('a'),
label = document.createElement('span');
swit.className = 'switch';
swit.classList.toggle('active', val);
swit.innerHTML = "<span></span>";
label.className = 'switch-label';
label.innerHTML = info.name;
el.appendChild(swit);
el.appendChild(label);
swit.addEventListener("click", this._ui_toggle_setting.bind(this, swit, key));
} else {
el.classList.add("option");
var link = document.createElement('a');
link.innerHTML = info.name;
link.href = "#";
el.appendChild(link);
link.addEventListener("click", info.method.bind(this));
}
if ( info.help ) {
var help = document.createElement('span');
help.className = 'help';
help.innerHTML = info.help;
el.appendChild(help);
}
menu.appendChild(el);
}
container.appendChild(menu);
}
},
name: "Settings",
icon: constants.GEAR
};
FFZ.prototype._ui_toggle_setting = function(swit, key) {
var val = ! this.settings.get(key);
this.settings.set(key, val);
swit.classList.toggle('active', val);
}
// --------------------
// Favorites Page
// --------------------
FFZ.prototype._tokenize_message = function(message, room_id) {
var lc = App.__container__.lookup('controller:line'),
rc = App.__container__.lookup('controller:room'),
room = this.rooms[room_id],
user = this.get_user();
if ( ! lc || ! rc || ! room )
return [message];
rc.set('model', room.room);
lc.set('parentController', rc);
var model = {
from: user && user.login || "FrankerFaceZ",
message: message,
tags: {
emotes: room.room.tmiSession._emotesParser.parseEmotesTag(message)
}
};
lc.set('model', model);
var tokens = lc.get('tokenizedMessage');
lc.set('model', null);
rc.set('model', null);
lc.set('parentController', null);
return tokens;
}
/*FFZ.menu_pages.favorites = {
render: function(view, container) {
// Get the current room.
var room_id = view.get('controller.currentRoom.id');
},
name: "Favorites",
@ -266,35 +200,8 @@ FFZ.menu_pages.channel = {
var room_id = view.get('controller.currentRoom.id'),
room = this.rooms[room_id];
//this.track('trackEvent', 'Menu', 'Open', room_id);
// Add the header and ad button.
/*var btn = document.createElement('a');
btn.className = 'button glyph-only ffz-button';
btn.title = 'Advertise for FrankerFaceZ in chat!';
btn.href = '#';
btn.innerHTML = '<svg class="svg-followers" height="16px" version="1.1" viewBox="0 0 16 16" width="16px" x="0px" y="0px"><path clip-rule="evenodd" d="M8,13.5L1.5,7V4l2-2h3L8,3.5L9.5,2h3l2,2v3L8,13.5z" fill-rule="evenodd"></path></svg>';
var hdr = document.createElement('div');
hdr.className = 'list-header first';
hdr.appendChild(btn);
hdr.appendChild(document.createTextNode('FrankerFaceZ'));
inner.appendChild(hdr);*/
var c = this._emotes_for_sets(inner, view, room && room.menu_sets || []);
/*if ( ! this._ws_exists ) {
btn.className = "button ffz-button primary";
btn.innerHTML = "Server Error";
btn.title = "FFZ Server Error";
btn.addEventListener('click', alert.bind(window, "The FrankerFaceZ client was unable to create a WebSocket to communicate with the FrankerFaceZ server.\n\nThis is most likely due to your browser's configuration either disabling WebSockets entirely or limiting the number of simultaneous connections. Please ensure that WebSockets have not been disabled."));
} else {
if ( c === 0 )
btn.addEventListener('click', this._add_emote.bind(this, view, "To use custom emoticons in tons of channels, get FrankerFaceZ from http://www.frankerfacez.com"));
else
btn.addEventListener('click', this._add_emote.bind(this, view, "To view this channel's emoticons, get FrankerFaceZ from http://www.frankerfacez.com"));
}*/
// Basic Emote Sets
this._emotes_for_sets(inner, view, room && room.menu_sets || []);
// Feature Friday!
this._feature_friday_ui(room_id, inner, view);
@ -330,6 +237,9 @@ FFZ.prototype._emotes_for_sets = function(parent, view, sets, header, btn) {
continue;
for(var eid in set.emotes) {
if ( ! set.emotes.hasOwnProperty(eid) )
continue;
var emote = set.emotes[eid];
if ( !set.emotes.hasOwnProperty(eid) || emote.hidden )
continue;
@ -356,11 +266,21 @@ FFZ.prototype._emotes_for_sets = function(parent, view, sets, header, btn) {
FFZ.prototype._add_emote = function(view, emote) {
var room = view.get('controller.currentRoom'),
current_text = room.get('messageToSend') || '';
var input_el, text, room;
if ( current_text && current_text.substr(-1) !== " " )
current_text += ' ';
if ( this.has_bttv ) {
input_el = view.get('element').querySelector('textarea');
text = input_el.value;
room.set('messageToSend', current_text + (emote.name || emote));
} else {
room = view.get('controller.currentRoom');
text = room.get('messageToSend') || '';
}
text += (text && text.substr(-1) !== " " ? " " : "") + (emote.name || emote);
if ( input_el )
input_el.value = text;
else
room.set('messageToSend', text);
}