1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/jappix_ynh.git synced 2024-09-03 19:26:19 +02:00
jappix_ynh/source/app/javascripts/talk.js
2014-11-25 20:12:58 +01:00

340 lines
No EOL
16 KiB
JavaScript

/*
Jappix - An open social platform
These are the talkpage JS scripts for Jappix
-------------------------------------------------
License: AGPL
Author: Valérian Saliou
*/
// Bundle
var Talk = (function () {
/**
* Alias of this
* @private
*/
var self = {};
/**
* Creates the talkpage events
* @public
* @return {undefined}
*/
self.events = function() {
try {
// Launch all associated bundles
Microblog.instance();
Roster.instance();
Presence.instance();
PEP.instance();
Notification.instance();
Music.instance();
} catch(e) {
Console.error('Talk.events', e);
}
};
/**
* Creates the talkpage code
* @public
* @return {boolean}
*/
self.create = function() {
try {
// Talkpage exists?
if(Common.exists('#talk')) {
return false;
}
// Anonymous detector
var anonymous = Utils.isAnonymous();
// Generate the HTML code
var html =
'<div id="talk" class="removable">' +
'<div id="top-content">' +
'<div class="tools tools-logo talk-images"></div>' +
'<div class="tools tools-all">';
if(!anonymous) html +=
'<a href="#" onclick="return Inbox.open();" class="inbox-hidable">' + Common._e("Messages") + '</a>' +
'<a href="#" onclick="return vCard.open();" class="vcard">' + Common._e("Profile") + '</a>' +
'<a href="#" onclick="return Options.open();" class="options-hidable">' + Common._e("Options") + '</a>' +
'<a href="#" onclick="return Connection.normalQuit();" class="quit">' + Common._e("Disconnect") + '</a>';
else html +=
'<a href="./">' + Common._e("Disconnect") + '</a>';
html +=
'</div>';
if(!anonymous && document.createElement('audio').canPlayType) html +=
'<div class="tools-all ibubble">' +
'<div class="tools music talk-images" onclick="return Music.open();"></div>' +
'<div class="music-content tools-content bubble hidable">' +
'<div class="tools-content-subarrow talk-images"></div>' +
'<div class="tools-content-subitem">' +
'<div class="player">' +
'<a href="#" class="stop talk-images" onclick="return Music.action(\'stop\');"></a>' +
'</div>' +
'<div class="list">' +
'<p class="no-results">' + Common._e("No result!") + '</p>' +
'</div>' +
'<div class="search">' +
'<input type="text" />' +
'</div>' +
'</div>' +
'</div>' +
'</div>';
if(!anonymous) html +=
'<div class="tools-all ibubble">' +
'<div class="tools notifications talk-images" onclick="return Bubble.show(\'.notifications-content\');"></div>' +
'<div class="notifications-content tools-content bubble hidable">' +
'<div class="tools-content-subarrow talk-images"></div>' +
'<div class="tools-content-subitem">' +
'<a class="empty" href="#" onclick="return Notification.clear();">' + Common._e("Empty") + '</a>' +
'<p class="nothing">' + Common._e("No notifications.") + '</p>' +
'</div>' +
'</div>' +
'</div>';
if(!anonymous) html +=
'<div class="tools-all">' +
'<div class="tools call talk-images" onclick="return Call.open();">' +
'<span class="streaming-items">' +
'<span class="counter" data-default="00:00:00">00:00:00</span>' +
'<a class="stop" href="#" onclick="return Call.stop();">' + Common._e("Stop") + '</a>' +
'</span>' +
'</div>' +
'<div class="call-content tools-content">' +
'<div class="tools-content-subarrow talk-images"></div>' +
'<div class="tools-content-subitem"></div>' +
'</div>' +
'</div>';
html +=
'</div>' +
'<div id="main-content">' +
'<div id="left-content">';
if(!anonymous) html +=
'<div id="roster">' +
'<div class="content"></div>' +
'<div class="filter">' +
'<input type="text" placeholder="' + Common._e("Filter") + '" />' +
'<a href="#">x</a>' +
'</div>' +
'<div class="foot ibubble">' +
'<div class="roster-add roster-icon">' +
'<a href="#" class="add talk-images" title="' + Common._e("Add a friend") + '"></a>' +
'</div>' +
'<div class="roster-join roster-icon">' +
'<a href="#" class="join talk-images" title="' + Common._e("Join a chat") + '"></a>' +
'</div>' +
'<div class="roster-groupchat roster-icon">' +
'<a href="#" class="groupchat talk-images" title="' + Common._e("Your groupchats") + '"></a>' +
'</div>' +
'<div class="roster-muji roster-icon muji-hidable">' +
'<a href="#" class="muji talk-images" title="' + Common._e("Audio/video conference") + '"></a>' +
'</div>' +
'<div class="roster-more roster-icon">' +
'<a href="#" class="more talk-images" title="' + Common._e("More stuff") + '"></a>' +
'</div>' +
'<div style="clear: both;"></div>' +
'</div>' +
'</div>';
html +=
'<div id="my-infos">' +
'<div class="content">' +
'<div class="element f-presence ibubble">' +
'<a href="#" class="icon picker disabled" data-value="available">' +
'<span class="talk-images"></span>' +
'</a>' +
'<input id="presence-status" type="text" placeholder="' + Common._e("Status") + '" disabled="" />' +
'</div>';
if(!anonymous) html +=
'<div class="element f-mood pep-hidable ibubble">' +
'<a href="#" class="icon picker" data-value="happy">' +
'<span class="talk-images"></span>' +
'</a>' +
'<input id="mood-text" type="text" placeholder="' + Common._e("Mood") + '" />' +
'</div>' +
'<div class="element f-activity pep-hidable ibubble">' +
'<a href="#" class="icon picker" data-value="exercising">' +
'<span class="talk-images activity-exercising"></span>' +
'</a>' +
'<input id="activity-text" type="text" placeholder="' + Common._e("Activity") + '" />' +
'</div>';
html +=
'</div>' +
'</div>' +
'</div>' +
'<div id="right-content">' +
'<div id="page-switch">' +
'<div class="chans">';
if(!anonymous) html +=
'<div class="channel switcher activechan" onclick="return Interface.switchChan(\'channel\');">' +
'<div class="icon talk-images"></div>' +
'<div class="name">' + Common._e("Channel") + '</div>' +
'</div>';
html +=
'</div>';
if(anonymous) html +=
'<div class="join ibubble">' +
'<div class="join-button talk-images" onclick="return Interface.loadJoinGroupchat();" title="' + Common._e("Join groupchat") + '"></div>' +
'</div>';
html +=
'<div class="more ibubble">' +
'<div class="more-button talk-images" onclick="return Interface.loadChatSwitch();" title="' + Common._e("All tabs") + '"></div>' +
'</div>' +
'</div>' +
'<div id="page-engine">';
if(!anonymous) html +=
'<div id="channel" class="page-engine-chan" style="display: block;">' +
'<div class="top mixed ' + hex_md5(Common.getXID()) + '">' +
'<div class="avatar-container">' +
'<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
'</div>' +
'<div class="update">' +
'<p>' + Common._e("What\'s up with you?") + '</p>' +
'<div class="microblog-body">' +
'<input class="focusable" type="text" name="microblog_body" placeholder="' + Common._e("Type something you want to share with your friends...") + '" disabled="" />' +
'</div>' +
'<div class="one-microblog-icon ibubble">' +
'<a href="#" onclick="return Bubble.show(\'#attach\');" title="' + Common._e("Attach a file") + '" class="postit attach talk-images"></a>' +
'<form id="attach" class="bubble hidable" action="./server/file-share.php" method="post" enctype="multipart/form-data">' +
'<div class="attach-subarrow talk-images"></div>' +
'<div class="attach-subitem">' +
'<p class="attach-p">' + Common._e("Attach a file") + '</p>' +
Interface.generateFileShare() +
'</div>' +
'</form>' +
'</div>' +
'</div>' +
'</div>' +
'<div class="content mixed"></div>' +
'<div class="footer">' +
'<div class="sync talk-images">' + Common._e("You are synchronized with your network.") + '</div>' +
'<div class="unsync talk-images">' + Common._e("Cannot send anything: you can only receive notices!") + '</div>' +
'<div class="fetch wait-small">' + Common._e("Fetching the social channel...") + '</div>' +
'</div>' +
'</div>';
html +=
'</div>' +
'</div>' +
'</div>' +
'</div>';
// Create the HTML code
$('body').prepend(html);
// Adapt the roster size
Roster.adapt();
// Create JS events
self.events();
// Start the auto idle functions
Presence.liveIdle();
return true;
} catch(e) {
Console.error('Talk.create', e);
}
};
/**
* Destroys the talkpage code
* @public
* @return {undefined}
*/
self.destroy = function() {
try {
// Reset our database
DataStore.resetDB();
// Reset some vars
STANZA_ID = 1;
Roster.blist_all = false;
Presence.first_sent = false;
Search.search_filtered = false;
Avatar.pending = [];
JOIN_SUGGEST = [];
// Kill all timers, exept the board ones
$('*:not(#board .one-board)').stopTime();
// Kill the auto idle functions
Presence.dieIdle();
// We renitalise the html markup as its initiale look
$('.removable').remove();
Interface.title('home');
// Finally we show the homepage
$('#home').show();
} catch(e) {
Console.error('Talk.destroy', e);
}
};
/**
* Return class scope
*/
return self;
})();