mirror of
https://github.com/twisterarmy/twister-html.git
synced 2025-01-13 00:18:15 +00:00
cc1c5e5d11
still a lot to do: using the "from" field from group messages to display who sent each message, options to invite, display members, change group description, leave etc.
221 lines
7.8 KiB
JavaScript
221 lines
7.8 KiB
JavaScript
// twister_directmsg.js
|
|
// 2013 Miguel Freitas
|
|
//
|
|
// Handle direct messages modal
|
|
|
|
function requestDMsnippetList(dmThreadList) {
|
|
var followList = [];
|
|
for( var i = 0; i < followingUsers.length; i++ ) {
|
|
followList.push({username:followingUsers[i]});
|
|
}
|
|
for( var i = 0; i < groupChatAliases.length; i++ ) {
|
|
followList.push({username:groupChatAliases[i]});
|
|
}
|
|
|
|
twisterRpc("getdirectmsgs", [defaultScreenName, 1, followList],
|
|
function(req, ret) {processDMsnippet(ret, dmThreadList);}, dmThreadList,
|
|
function(req, ret) {console.log("ajax error:" + ret);}, null);
|
|
}
|
|
|
|
function processDMsnippet(dmUsers, dmThreadList) {
|
|
dmThreadList.empty();
|
|
|
|
for( var u in dmUsers ) {
|
|
if( dmUsers.hasOwnProperty(u) ) {
|
|
// convert snipped to html and add it to date-sorted list
|
|
var dmItem = dmDataToSnippetItem(dmUsers[u][0], u);
|
|
var timeDmItem = parseInt(dmItem.attr("data-time"));
|
|
var existingItems = dmThreadList.children();
|
|
var j = 0;
|
|
for( j = 0; j < existingItems.length; j++) {
|
|
var streamItem = existingItems.eq(j);
|
|
var timeExisting = streamItem.attr("data-time");
|
|
if( timeExisting == undefined ||
|
|
timeDmItem > parseInt(timeExisting) ) {
|
|
// this post in stream is older, so post must be inserted above
|
|
streamItem.before(dmItem);
|
|
break;
|
|
}
|
|
}
|
|
if( j == existingItems.length ) {
|
|
dmThreadList.append(dmItem);
|
|
}
|
|
}
|
|
}
|
|
$.MAL.dmThreadListLoaded();
|
|
}
|
|
|
|
function openDmConversation(dm_screenname, dmTitleName, dmConversation) {
|
|
if( dm_screenname.length && dm_screenname[0] === '*' )
|
|
getGroupChatName( dm_screenname, dmTitleName );
|
|
else
|
|
getFullname( dm_screenname, dmTitleName );
|
|
dmConversation.attr("data-dm-screen-name", dm_screenname);
|
|
|
|
var dmConvo = dmConversation.find(".direct-messages-thread");
|
|
dmConvo.empty();
|
|
|
|
requestDmConversationModal(dmConvo,dm_screenname);
|
|
}
|
|
|
|
function requestDmConversationModal(dmConvo,dm_screenname) {
|
|
if( dmConvo.parents(".modal-blackout").css("display") == 'none' )
|
|
return;
|
|
|
|
requestDmConversation(dmConvo,dm_screenname);
|
|
setTimeout( function() {requestDmConversationModal(dmConvo,dm_screenname);}, 1000);
|
|
}
|
|
|
|
function requestDmConversation(dmConvo,dm_screenname) {
|
|
var since_id = undefined;
|
|
|
|
var oldItems = dmConvo.children();
|
|
if( oldItems.length ) {
|
|
since_id = parseInt(oldItems.eq(oldItems.length-1).attr("data-id"));
|
|
}
|
|
|
|
var userDmReq = [{username:dm_screenname}];
|
|
if( since_id != undefined ) userDmReq[0].since_id = since_id;
|
|
var count = 100;
|
|
twisterRpc("getdirectmsgs", [defaultScreenName,count,userDmReq],
|
|
function(args, ret) { processDmConversation(args.dmConvo, args.dmUser, ret); },
|
|
{dmConvo:dmConvo,dmUser:dm_screenname},
|
|
function(arg, ret) { var msg = ("message" in ret) ? ret.message : ret;
|
|
alert(polyglot.t("ajax_error", { error: msg })); }, null);
|
|
}
|
|
|
|
function processDmConversation(dmConvo, dm_screenname, dmData) {
|
|
var lastId = undefined;
|
|
if(dm_screenname in dmData) {
|
|
var dmList = dmData[dm_screenname];
|
|
if( dmList.length ) {
|
|
for( var i = 0; i < dmList.length; i++) {;
|
|
var dmItem = dmDataToConversationItem(dmList[i],defaultScreenName,dm_screenname);
|
|
dmItem.attr("data-id",dmList[i].id);
|
|
dmConvo.append(dmItem);
|
|
lastId = dmList[i].id;
|
|
}
|
|
$.MAL.dmChatListLoaded(dmConvo);
|
|
}
|
|
}
|
|
if( lastId != undefined ) {
|
|
resetNewDMsCountForUser(dm_screenname, lastId);
|
|
}
|
|
}
|
|
|
|
function directMsgSubmit(e)
|
|
{
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
var $this = $( this );
|
|
var $replyText = $this.closest(".post-area-new").find("textarea");
|
|
|
|
var $dmConversation = $(".directMessages");
|
|
|
|
newDirectMsg($replyText.val(), $dmConversation.attr("data-dm-screen-name"));
|
|
|
|
$replyText.val("");
|
|
}
|
|
|
|
function newDirectMsg(msg, dm_screenname) {
|
|
if( lastPostId != undefined ) {
|
|
var paramsOrig = [defaultScreenName, lastPostId + 1, dm_screenname, msg]
|
|
var paramsOpt = paramsOrig
|
|
var copySelf = ($.Options.getDMCopySelfOpt() === 'enable')
|
|
if( copySelf && dm_screenname[0] !== '*' ) {
|
|
paramsOpt = paramsOrig.concat(true)
|
|
}
|
|
|
|
twisterRpc("newdirectmsg", paramsOpt,
|
|
function(arg, ret) {
|
|
incLastPostId();
|
|
if( arg.copySelf ) incLastPostId();
|
|
}, {copySelf:copySelf},
|
|
function(arg, ret) {
|
|
// fallback for older twisterd (error: no copy_self parameter)
|
|
twisterRpc("newdirectmsg", arg.paramsOrig,
|
|
function(arg, ret) { incLastPostId(); }, null,
|
|
function(arg, ret) {
|
|
var msg = ("message" in ret) ? ret.message : ret;
|
|
alert("Ajax error: " + msg);
|
|
}, null);
|
|
}, {paramsOrig:paramsOrig}
|
|
);
|
|
} else {
|
|
alert(polyglot.t("Internal error: lastPostId unknown (following yourself may fix!)"));
|
|
}
|
|
}
|
|
|
|
//dispara o modal de direct messages
|
|
function directMessagesPopup()
|
|
{
|
|
if(!defaultScreenName)
|
|
{
|
|
alert(polyglot.t("You have to log in to use direct messages."));
|
|
return;
|
|
}
|
|
var directMessagesClass = "directMessages";
|
|
openModal( directMessagesClass );
|
|
|
|
var directMessagesContent = $( ".direct-messages-template" ).html();
|
|
$( directMessagesContent ).clone().appendTo( ".directMessages .modal-content" );
|
|
|
|
//título do modal
|
|
$( ".directMessages h3" ).text( polyglot.t("Direct Messages") );
|
|
|
|
requestDMsnippetList($(".directMessages").find(".direct-messages-list"));
|
|
$('.mark-all-as-read').css('display', 'inline');
|
|
$('.mark-all-as-read').attr('title', polyglot.t("Mark all as read"));
|
|
|
|
$('.mark-all-as-read').on('click', function() {
|
|
for (var k in _newDMsPerUser) {
|
|
_newDMsPerUser[k] = 0;
|
|
}
|
|
saveDMsToStorage();
|
|
$.MAL.updateNewDMsUI(getNewDMsCount());
|
|
});
|
|
}
|
|
|
|
function openDmWithUserModal(dm_screenname)
|
|
{
|
|
if(!defaultScreenName){
|
|
alert(polyglot.t("You have to log in to use direct messages."));
|
|
return;
|
|
}
|
|
|
|
var directMessagesClass = "directMessages";
|
|
openModal( directMessagesClass );
|
|
|
|
//para poder exibir a thread selecionada...
|
|
var retweetContent = $( ".messages-thread-template" ).html();
|
|
$( retweetContent ).clone().appendTo( ".directMessages .modal-content" ).hide().fadeIn( "fast" );
|
|
|
|
var dmTitle = $( ".directMessages h3" );
|
|
dmTitle.html(polyglot.t("Direct messages with") + " <span></span>");
|
|
dmTitle = dmTitle.find("span");
|
|
var dmConversation = $(".directMessages");
|
|
openDmConversation(dm_screenname, dmTitle, dmConversation);
|
|
|
|
var $dmForm = $( ".dm-form-template" ).children().clone(true);
|
|
$dmForm.addClass("open");
|
|
$dmForm.appendTo( ".directMessages .modal-wrapper" ).hide().fadeIn( "fast" );
|
|
}
|
|
|
|
|
|
function initInterfaceDirectMsg() {
|
|
|
|
$( ".direct-messages" ).attr("href","#directmessages");
|
|
$( ".userMenu-messages a" ).attr("href","#directmessages");
|
|
|
|
$( "#dm-snippet-template" ).bind( "click", function(){
|
|
window.location.hash='#directmessages?user='+$(this).attr("data-dm-screen-name");
|
|
} );
|
|
|
|
$( ".dm-submit").click( directMsgSubmit );
|
|
$( ".direct-messages-with-user" ).bind( "click", function() {
|
|
window.location.hash='#directmessages?user='+$(this).closest("[data-screen-name]").attr("data-screen-name");
|
|
} );
|
|
|
|
}
|
|
|