You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
7.8 KiB
220 lines
7.8 KiB
// 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.dmCopySelf.val === '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"); |
|
} ); |
|
|
|
} |
|
|
|
|