From 5c35807932949045bca7f6e7a489c4ed9d751baa Mon Sep 17 00:00:00 2001 From: Simon Grim Date: Tue, 26 May 2015 01:47:53 +0500 Subject: [PATCH] add missing flags to clone event too from DM template textareas, code restyling --- js/twister_directmsg.js | 168 ++++++++++++++--------------- js/twister_newmsgs.js | 229 ++++++++++++++++++++-------------------- 2 files changed, 195 insertions(+), 202 deletions(-) diff --git a/js/twister_directmsg.js b/js/twister_directmsg.js index e4ec9db..f6f8871 100644 --- a/js/twister_directmsg.js +++ b/js/twister_directmsg.js @@ -5,41 +5,37 @@ function requestDMsnippetList(dmThreadList) { var followList = []; - for( var i = 0; i < followingUsers.length; i++ ) { + for (var i = 0; i < followingUsers.length; i++) followList.push({username:followingUsers[i]}); - } - for( var i = 0; i < groupChatAliases.length; 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); + 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) ) { + 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 timeDmItem = parseInt(dmItem.attr('data-time')); var existingItems = dmThreadList.children(); - var j = 0; - for( j = 0; j < existingItems.length; j++) { + for (var j = 0; j < existingItems.length; j++) { var streamItem = existingItems.eq(j); - var timeExisting = streamItem.attr("data-time"); - if( timeExisting == undefined || - timeDmItem > parseInt(timeExisting) ) { + 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 ) { + if (j === existingItems.length) dmThreadList.append(dmItem); - } } } $.MAL.dmThreadListLoaded(); @@ -52,84 +48,86 @@ function requestDmConversationModal(postboard, dm_screenname) { } } -function requestDmConversation(dmConvo,dm_screenname) { +function requestDmConversation(postboard, 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 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 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); + 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(dmConvo, dm_screenname, dmData) { +function processDmConversation(postboard, dm_screenname, dmData) { var lastId = undefined; - if(dm_screenname in dmData) { + + 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); - dmItem.attr("data-id",dmList[i].id); - dmConvo.append(dmItem); + 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(dmConvo); + $.MAL.dmChatListLoaded(postboard); } } - if( lastId != undefined ) { + if (typeof lastId !== 'undefined') resetNewDMsCountForUser(dm_screenname, lastId); - } } -function directMsgSubmit(e) -{ +function directMsgSubmit(e) { e.stopPropagation(); e.preventDefault(); - var $this = $( this ); - var $replyText = $this.closest(".post-area-new").find("textarea"); - var $dmConversation = $(".directMessages"); + var replyText = $(this).closest('.post-area-new textarea'); - newDirectMsg($replyText.val(), $dmConversation.attr("data-dm-screen-name")); + newDirectMsg(replyText.val(), $('.directMessages').attr('data-dm-screen-name')); - $replyText.val(""); + 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] !== '*' ) { + 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 = ("message" in ret) ? ret.message : ret; - alert("Ajax error: " + msg); - }, null); - }, {paramsOrig:paramsOrig} + 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!)")); - } + } else + alert(polyglot.t('Internal error: lastPostId unknown (following yourself may fix!)')); } // dispara o modal de direct messages @@ -141,7 +139,7 @@ function directMessagesPopup() { modal = openModal({ classAdd: 'directMessages', - content: $('.direct-messages-template').children().clone(), + content: $('.direct-messages-template').children().clone(true), title: polyglot.t('Direct Messages') }); @@ -151,8 +149,8 @@ function directMessagesPopup() { .css('display', 'inline') .attr('title', polyglot.t('Mark all as read')) .on('click', function() { - for (var k in _newDMsPerUser) { - _newDMsPerUser[k] = 0; + for (var user in _newDMsPerUser) { + _newDMsPerUser[user] = 0; } saveDMsToStorage(); $.MAL.updateNewDMsUI(getNewDMsCount()); @@ -168,7 +166,7 @@ function openDmWithUserModal(dm_screenname) { modal = openModal({ classAdd: 'directMessages', - content: $('.messages-thread-template').children().clone(), + content: $('.messages-thread-template').children().clone(true), title: polyglot.t('direct_messages_with', {username: '' + dm_screenname + ''}) }); @@ -181,24 +179,22 @@ function openDmWithUserModal(dm_screenname) { requestDmConversationModal(modal.self.find('.direct-messages-thread').empty(), dm_screenname); - $('.dm-form-template').children().clone() + $('.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'); - $( ".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"); - } ); + $('#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'); + }); } diff --git a/js/twister_newmsgs.js b/js/twister_newmsgs.js index 4cc3c95..27b3cf6 100644 --- a/js/twister_newmsgs.js +++ b/js/twister_newmsgs.js @@ -17,20 +17,20 @@ var groupChatAliases = [] // process a mention received to check if it is really new function processMention(user, mentionTime, data) { - var key = user + ";" + mentionTime; + var key = user + ';' + mentionTime; var curTime = new Date().getTime() / 1000; - if( mentionTime > curTime + 3600 * 2 ) { - console.log("mention from the future will be ignored"); - } else { - if( !(key in _knownMentions) ) { + if (mentionTime > curTime + 7200) // 3600 * 2 + console.warn('ignoring mention from the future'); + else { + if (!_knownMentions[key]) { // mention must be somewhat recent compared to last known one to be considered new - if( mentionTime + 3600 * 24 * 3 > _lastMentionTime ) { + if (mentionTime + 259200 > _lastMentionTime) { // 3600 * 24 * 3 _newMentions++; _newMentionsUpdated = true; - _lastMentionTime = Math.max(mentionTime,_lastMentionTime); - data["isNew"] = true; + _lastMentionTime = Math.max(mentionTime, _lastMentionTime); + data.isNew = true; } - _knownMentions[key] = {mentionTime:mentionTime, data:data}; + _knownMentions[key] = {mentionTime: mentionTime, data: data}; purgeOldMentions(); saveMentionsToStorage(); } @@ -38,10 +38,10 @@ function processMention(user, mentionTime, data) { } function purgeOldMentions() { - for( var key in _knownMentions ) { - if( _knownMentions.hasOwnProperty(key) ) { - if( !_knownMentions[key].mentionTime || !_knownMentions[key].data || - _knownMentions[key].mentionTime + PURGE_OLD_MENTIONS_TIMEOUT < _lastMentionTime ) { + for (var key in _knownMentions) { + if (_knownMentions[key]) { + if (!_knownMentions[key].mentionTime || !_knownMentions[key].data || + _knownMentions[key].mentionTime + PURGE_OLD_MENTIONS_TIMEOUT < _lastMentionTime) { delete _knownMentions[key]; } } @@ -49,87 +49,85 @@ function purgeOldMentions() { } function saveMentionsToStorage() { - var ns=$.initNamespaceStorage(defaultScreenName); - ns.localStorage.set("knownMentions", _knownMentions); - ns.localStorage.set("lastMentionTime", _lastMentionTime); - ns.localStorage.set("newMentions", _newMentions); - ns.localStorage.set("lastLocalMentionId",_lastLocalMentionId); + var ns = $.initNamespaceStorage(defaultScreenName); + ns.localStorage.set('knownMentions', _knownMentions); + ns.localStorage.set('lastMentionTime', _lastMentionTime); + ns.localStorage.set('newMentions', _newMentions); + ns.localStorage.set('lastLocalMentionId', _lastLocalMentionId); } function loadMentionsFromStorage() { - var ns=$.initNamespaceStorage(defaultScreenName); - if( ns.localStorage.isSet("knownMentions") ) - _knownMentions = ns.localStorage.get("knownMentions"); - if( ns.localStorage.isSet("lastMentionTime") ) - _lastMentionTime = ns.localStorage.get("lastMentionTime"); - if( ns.localStorage.isSet("newMentions") ) - _newMentions = ns.localStorage.get("newMentions"); - if( ns.localStorage.isSet("lastLocalMentionId") ) - _lastLocalMentionId = ns.localStorage.get("lastLocalMentionId"); + var ns = $.initNamespaceStorage(defaultScreenName); + if (ns.localStorage.isSet('knownMentions')) + _knownMentions = ns.localStorage.get('knownMentions'); + if (ns.localStorage.isSet('lastMentionTime')) + _lastMentionTime = ns.localStorage.get('lastMentionTime'); + if (ns.localStorage.isSet('newMentions')) + _newMentions = ns.localStorage.get('newMentions'); + if (ns.localStorage.isSet('lastLocalMentionId')) + _lastLocalMentionId = ns.localStorage.get('lastLocalMentionId'); } function requestMentionsCount() { // first: getmentions from torrents we follow - twisterRpc("getmentions", [defaultScreenName, 100, {"since_id":_lastLocalMentionId}], - function(args, data) { - if( data ) { - for( var i = 0; i < data.length; i++ ) { - _lastLocalMentionId = Math.max(_lastLocalMentionId, data[i]["id"]); - var userpost = data[i]["userpost"]; - processMention( userpost["n"], userpost["time"], data[i]); - } - $.MAL.updateNewMentionsUI(_newMentions); - } - }, null, - function(req, ret) {console.log("getmentions API requires twister-core > 0.9.27");}, null); - + twisterRpc('getmentions', [defaultScreenName, 100, {since_id: _lastLocalMentionId}], + function(args, data) { + if (data) { + for (var i = 0; i < data.length; i++) { + _lastLocalMentionId = Math.max(_lastLocalMentionId, data[i].id); + var userpost = data[i].userpost; + processMention(userpost.n, userpost.time, data[i]); + } + $.MAL.updateNewMentionsUI(_newMentions); + } + }, null, + function(req, ret) {console.warn('getmentions API requires twister-core > 0.9.27');}, null + ); // second: get mentions from dht (not-following) - dhtget( defaultScreenName, "mention", "m", - function(args, data) { - if( data ) { - for( var i = 0; i < data.length; i++ ) { - var userpost = data[i]["userpost"]; - processMention( userpost["n"], userpost["time"], data[i]); - } - $.MAL.updateNewMentionsUI(_newMentions); - } - }, {}, - [10000,2000,3]); // use extended timeout parameters (requires twister_core >= 0.9.14) - - if( _newMentionsUpdated ) { + dhtget(defaultScreenName, 'mention', 'm', + function(args, data) { + if (data) { + for (var i = 0; i < data.length; i++) { + var userpost = data[i].userpost; + processMention(userpost.n, userpost.time, data[i]); + } + $.MAL.updateNewMentionsUI(_newMentions); + } + }, {}, + [10000, 2000, 3] // use extended timeout parameters (requires twister_core >= 0.9.14) + ); + + if (_newMentionsUpdated) { _newMentionsUpdated = false; - if ( _newMentions ) { + if (_newMentions) { $.MAL.soundNotifyMentions(); - if ($.Options.showDesktopNotifMentions.val === 'enable') { + if ($.Options.showDesktopNotifMentions.val === 'enable') $.MAL.showDesktopNotif(false, polyglot.t('You got')+' '+polyglot.t('new_mentions', _newMentions)+'.', false,'twister_notification_new_mentions', $.Options.showDesktopNotifMentionsTimer.val, function(){$.MAL.showMentions(defaultScreenName)}, false) - } } } // was moved here from requestDMsCount() because that is not ticking right // we would place it with other notifications into separate notification center - if( _newDMsUpdated ) { + if (_newDMsUpdated) { _newDMsUpdated = false; var newDMs = getNewDMsCount(); - if ( newDMs ) { + if (newDMs) { $.MAL.soundNotifyDM(); - if ($.Options.showDesktopNotifDMs.val === 'enable') { + if ($.Options.showDesktopNotifDMs.val === 'enable') $.MAL.showDesktopNotif(false, polyglot.t('You got')+' '+polyglot.t('new_direct_messages', newDMs)+'.', false, 'twister_notification_new_DMs', $.Options.showDesktopNotifDMsTimer.val, function(){$.MAL.showDMchat()}, false) - } } } } function resetMentionsCount() { _newMentions = 0; - for( var key in _knownMentions ) { - if( _knownMentions.hasOwnProperty(key) && _knownMentions[key].data ) { - delete _knownMentions[key].data["isNew"] - } + for (var key in _knownMentions) { + if (_knownMentions[key] && _knownMentions[key].data) + delete _knownMentions[key].data.isNew } saveMentionsToStorage(); $.MAL.updateNewMentionsUI(_newMentions); @@ -140,13 +138,13 @@ function initMentionsCount() { loadMentionsFromStorage(); $.MAL.updateNewMentionsUI(_newMentions); requestMentionsCount(); - setInterval("requestMentionsCount()", 10000); + setInterval(requestMentionsCount, 10000); } function getMentionsData() { mentions = [] - for( var key in _knownMentions ) { - if( _knownMentions.hasOwnProperty(key) && _knownMentions[key].data ) { + for (var key in _knownMentions) { + if (_knownMentions[key] && _knownMentions[key].data) { mentions.push(_knownMentions[key].data); } } @@ -159,61 +157,60 @@ var _lastDMIdPerUser = {}; var _newDMsPerUser = {}; function saveDMsToStorage() { - var ns=$.initNamespaceStorage(defaultScreenName); - ns.localStorage.set("lastDMIdPerUser", _lastDMIdPerUser); - ns.localStorage.set("newDMsPerUser", _newDMsPerUser); + var ns = $.initNamespaceStorage(defaultScreenName); + ns.localStorage.set('lastDMIdPerUser', _lastDMIdPerUser); + ns.localStorage.set('newDMsPerUser', _newDMsPerUser); } function loadDMsFromStorage() { - var ns=$.initNamespaceStorage(defaultScreenName); - if( ns.localStorage.isSet("lastDMIdPerUser") ) - _lastDMIdPerUser = ns.localStorage.get("lastDMIdPerUser"); - if( ns.localStorage.isSet("newDMsPerUser") ) - _newDMsPerUser = ns.localStorage.get("newDMsPerUser"); + var ns = $.initNamespaceStorage(defaultScreenName); + if (ns.localStorage.isSet('lastDMIdPerUser')) + _lastDMIdPerUser = ns.localStorage.get('lastDMIdPerUser'); + if (ns.localStorage.isSet('newDMsPerUser')) + _newDMsPerUser = ns.localStorage.get('newDMsPerUser'); } function requestDMsCount() { 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, dmUsers) { - for( var u in dmUsers ) { - if( dmUsers.hasOwnProperty(u) ) { - var dmData = dmUsers[u][0]; - if( (u in _lastDMIdPerUser) && (u in _newDMsPerUser) ) { - if( dmData.id != _lastDMIdPerUser[u] ) { - _newDMsPerUser[u] += (dmData.id - _lastDMIdPerUser[u]); - _newDMsUpdated = true; - } - } else { - _newDMsPerUser[u] = dmData.id+1; - _newDMsUpdated = true; - } - _lastDMIdPerUser[u] = dmData.id; - } - } - if( _newDMsUpdated ) { - saveDMsToStorage(); - $.MAL.updateNewDMsUI(getNewDMsCount()); - } - }, null, - function(req, ret) {console.log("ajax error:" + ret);}, null); + 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, dmUsers) { + for (var u in dmUsers) { + if (dmUsers[u]) { + var dmData = dmUsers[u][0]; + if (u in _lastDMIdPerUser && u in _newDMsPerUser) { + if (dmData.id !== _lastDMIdPerUser[u]) { + _newDMsPerUser[u] += dmData.id - _lastDMIdPerUser[u]; + _newDMsUpdated = true; + } + } else { + _newDMsPerUser[u] = dmData.id + 1; + _newDMsUpdated = true; + } + _lastDMIdPerUser[u] = dmData.id; + } + } + if (_newDMsUpdated) { + saveDMsToStorage(); + $.MAL.updateNewDMsUI(getNewDMsCount()); + } + }, null, + function(req, ret) {console.warn('ajax error:' + ret);}, null + ); } function getNewDMsCount() { var newDMs = 0; - for( var key in _newDMsPerUser ) { - if( _newDMsPerUser.hasOwnProperty(key) ) { - newDMs += _newDMsPerUser[key]; - } + for (var user in _newDMsPerUser) { + if (_newDMsPerUser[user]) + newDMs += _newDMsPerUser[user]; } + return newDMs; } @@ -226,22 +223,22 @@ function resetNewDMsCountForUser(user, lastId) { } function updateGroupList() { - twisterRpc("listgroups", [], - function(req, ret) {groupChatAliases=ret;}, null, - function(req, ret) {console.log("twisterd >= 0.9.30 required for listgroups");}, null); + twisterRpc('listgroups', [], + function(req, ret) {groupChatAliases = ret;}, null, + function(req, ret) {console.warn('twisterd >= 0.9.30 required for listgroups');}, null + ); } function initDMsCount() { loadDMsFromStorage(); $.MAL.updateNewDMsUI(getNewDMsCount()); - //quick hack to obtain list of group chat aliases updateGroupList(); - setInterval("updateGroupList();", 60000); + setInterval(updateGroupList, 60000); - setTimeout("requestDMsCount();", 200); + setTimeout(requestDMsCount, 200); //polling not needed: processNewPostsConfirmation will call requestDMsCount. - //setInterval("requestDMsCount()", 5000); + //setInterval('requestDMsCount()', 5000); } function newmsgsChangedUser() {