twister HTML + Javascript User Interface
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.
 
 
 
 

200 lines
6.9 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[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();
for (var j = 0; j < existingItems.length; j++) {
var streamItem = existingItems.eq(j);
var timeExisting = streamItem.attr('data-time');
if (typeof 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 requestDmConversationModal(postboard, dm_screenname) {
if (postboard.is('html *')) {
requestDmConversation(postboard, dm_screenname);
setTimeout(requestDmConversationModal, 1000, postboard, dm_screenname);
}
}
function requestDmConversation(postboard, dm_screenname) {
var since_id = undefined;
var oldItems = postboard.children();
if (oldItems.length)
since_id = parseInt(oldItems.eq(oldItems.length - 1).attr('data-id'));
var userDmReq = [{username: dm_screenname}];
if (typeof since_id !== 'undefined')
userDmReq[0].since_id = since_id;
var count = 100;
twisterRpc('getdirectmsgs', [defaultScreenName, count, userDmReq],
function(args, ret) {processDmConversation(args.postboard, args.dm_screenname, ret);},
{postboard: postboard, dm_screenname: dm_screenname},
function(arg, ret) {
var msg = (ret.message) ? ret.message : ret;
alert(polyglot.t('ajax_error', {error: msg}));
}, null
);
}
function processDmConversation(postboard, dm_screenname, dmData) {
var lastId = undefined;
if (dmData[dm_screenname]) {
var dmList = dmData[dm_screenname];
if (dmList.length) {
for (var i = 0; i < dmList.length; i++) {
var dmItem = dmDataToConversationItem(dmList[i], defaultScreenName, dm_screenname)
.attr('data-id', dmList[i].id)
.appendTo(postboard)
;
lastId = dmList[i].id;
}
$.MAL.dmChatListLoaded(postboard);
}
}
if (typeof lastId !== 'undefined')
resetNewDMsCountForUser(dm_screenname, lastId);
}
function directMsgSubmit(e) {
e.stopPropagation();
e.preventDefault();
var replyText = $(this).closest('.post-area-new textarea');
newDirectMsg(replyText.val(), $('.directMessages').attr('data-dm-screen-name'));
replyText.val('');
}
function newDirectMsg(msg, dm_screenname) {
if (typeof 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 = (ret.message) ? 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;
}
modal = openModal({
classAdd: 'directMessages',
content: $('.direct-messages-template').children().clone(true),
title: polyglot.t('Direct Messages')
});
requestDMsnippetList(modal.content.find('.direct-messages-list'));
modal.self.find('.mark-all-as-read')
.css('display', 'inline')
.attr('title', polyglot.t('Mark all as read'))
.on('click', function() {
for (var user in _newDMsPerUser) {
_newDMsPerUser[user] = 0;
}
saveDMsToStorage();
$.MAL.updateNewDMsUI(getNewDMsCount());
})
;
}
function openDmWithUserModal(dm_screenname) {
if (!defaultScreenName) {
alert(polyglot.t('You have to log in to use direct messages.'));
return;
}
modal = openModal({
classAdd: 'directMessages',
content: $('.messages-thread-template').children().clone(true),
title: polyglot.t('direct_messages_with', {username: '<span>' + dm_screenname + '</span>'})
});
modal.self.attr('data-dm-screen-name', dm_screenname);
if (dm_screenname.length && dm_screenname[0] === '*')
getGroupChatName(dm_screenname, modal.self.find('.modal-header h3 span'));
else
getFullname(dm_screenname, modal.self.find('.modal-header h3 span'));
requestDmConversationModal(modal.self.find('.direct-messages-thread').empty(), dm_screenname);
$('.dm-form-template').children().clone(true)
.addClass('open').appendTo(modal.content).fadeIn('fast');
}
function initInterfaceDirectMsg() {
$('.direct-messages').attr('href','#directmessages');
$('.userMenu-messages a').attr('href','#directmessages');
$('#dm-snippet-template').on('click', function() {
window.location.hash = '#directmessages?user=' + $(this).attr('data-dm-screen-name');
});
$('.dm-submit').on('click', directMsgSubmit);
$('.direct-messages-with-user').on('click', function() {
window.location.hash = '#directmessages?user=' +
$(this).closest('[data-screen-name]').attr('data-screen-name');
});
}