mirror of
https://github.com/twisterarmy/twister-html.git
synced 2025-01-27 07:04:24 +00:00
fix updating of minimized modals / add resuming from desktop notifications
This commit is contained in:
parent
44641a5271
commit
6a6b3aba5d
@ -139,10 +139,44 @@ function resumeModal(event) {
|
||||
// TODO also need reset modal height here maybe and then compute new scroll
|
||||
if (modal.scroll)
|
||||
modal.self.find($(modal.scroll.targetSelector).scrollTop(modal.scroll.top));
|
||||
|
||||
if (modal.resume && typeof modal.resume.cbFunc === 'function')
|
||||
modal.resume.cbFunc(modal.resume.cbArg);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function focusModalWithElement(elem, cbFunc, cbArg) {
|
||||
if (elem.jquery ? elem.is('html *') : $(elem).is('html *')) {
|
||||
cbFunc(cbArg);
|
||||
return true;
|
||||
}
|
||||
|
||||
var hash = getHashOfMinimizedModalWithElem(elem);
|
||||
if (hash) {
|
||||
_minimizedModals[hash].resume = {cbFunc: cbFunc, cbArg: cbArg};
|
||||
_minimizedModals[hash].btnResume.click();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function getHashOfMinimizedModalWithElem(elem) {
|
||||
for (var i in _minimizedModals)
|
||||
if (_minimizedModals[i] && _minimizedModals[i].self.find(elem).length)
|
||||
return i;
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
function isModalWithElemExists(elem) {
|
||||
if (elem.jquery ? elem.is('html *') : $(elem).is('html *'))
|
||||
return true;
|
||||
else
|
||||
return getHashOfMinimizedModalWithElem(elem) ? true : false;
|
||||
}
|
||||
|
||||
function confirmPopup(event, req) {
|
||||
if (event && event.stopPropagation) {
|
||||
event.stopPropagation();
|
||||
@ -331,29 +365,37 @@ function openHashtagModalFromSearchHandler(hashtag) {
|
||||
title: '#' + hashtag
|
||||
});
|
||||
|
||||
clearHashtagProcessed();
|
||||
updateHashtagModal(modal.content.find('.postboard-posts'), hashtag, 'hashtag');
|
||||
setupQueryModalUpdating(modal.content.find('.postboard-posts'), hashtag, 'hashtag');
|
||||
}
|
||||
|
||||
function updateHashtagModal(postboard, hashtag, resource, timeoutArgs) {
|
||||
if (postboard.is('html *')) {
|
||||
requestHashtag(postboard, hashtag, resource, timeoutArgs);
|
||||
function setupQueryModalUpdating(postboard, query, resource) {
|
||||
var req = {
|
||||
postboard: postboard,
|
||||
query: query,
|
||||
resource: resource,
|
||||
id: query + '@' + resource
|
||||
};
|
||||
|
||||
if (_hashtagPendingPostsUpdated) {
|
||||
if (resource !== 'mention' && $.Options.showDesktopNotifPostsModal.val === 'enable') {
|
||||
$.MAL.showDesktopNotif (false, polyglot.t('You got')+' '+polyglot.t('new_posts', _hashtagPendingPostsUpdated)+' '+polyglot.t('in search result')+'.', false,'twister_notification_new_posts_modal', $.Options.showDesktopNotifPostsModalTimer.val, function() {
|
||||
$('.postboard-news').hide();
|
||||
displayHashtagPending($('.hashtag-modal .postboard-posts'));
|
||||
}, false)
|
||||
}
|
||||
_hashtagPendingPostsUpdated = 0;
|
||||
}
|
||||
postboard.attr('data-request-id', req.id);
|
||||
|
||||
// use extended timeout parameters on modal refresh (requires twister_core >= 0.9.14).
|
||||
// our first query above should be faster (with default timeoutArgs of twisterd),
|
||||
// then we may possibly collect more posts on our second try by waiting more.
|
||||
setTimeout(updateHashtagModal, 5000, postboard, hashtag, resource, [10000,2000,3]);
|
||||
requestQuery(req);
|
||||
|
||||
// use extended timeout parameters on modal refresh (requires twister_core >= 0.9.14).
|
||||
// our first query above should be faster (with default timeoutArgs of twisterd),
|
||||
// then we may possibly collect more posts on our second try by waiting more.
|
||||
req.timeoutArgs = [10000, 2000, 3];
|
||||
|
||||
postboard.attr('data-request-interval', setInterval(updateQueryModal, 5000, req)); // FIXME
|
||||
}
|
||||
|
||||
function updateQueryModal(req) {
|
||||
if (!isModalWithElemExists(req.postboard)) {
|
||||
clearInterval(req.postboard.attr('data-request-interval'));
|
||||
clearQueryProcessed(req.id);
|
||||
return;
|
||||
}
|
||||
|
||||
requestQuery(req);
|
||||
}
|
||||
|
||||
function openMentionsModal(e) {
|
||||
@ -382,12 +424,16 @@ function openMentionsModalHandler(username) {
|
||||
title: polyglot.t('users_mentions', {username: username})
|
||||
});
|
||||
|
||||
clearHashtagProcessed();
|
||||
updateHashtagModal(modal.content.find('.postboard-posts'), username, 'mention');
|
||||
setupQueryModalUpdating(modal.content.find('.postboard-posts'), username, 'mention');
|
||||
|
||||
if (username === defaultScreenName) {
|
||||
// obtain already cached mention posts from twister_newmsgs.js
|
||||
processHashtag(modal.content.find('.postboard-posts'), defaultScreenName, getMentionsData());
|
||||
processQuery({
|
||||
postboard: modal.content.find('.postboard-posts'),
|
||||
query: defaultScreenName,
|
||||
resource: 'mention',
|
||||
posts: getMentionsData()
|
||||
});
|
||||
resetMentionsCount();
|
||||
}
|
||||
}
|
||||
@ -473,14 +519,9 @@ function newConversationModal(username, resource) {
|
||||
var postLi = postboard.children().first()
|
||||
.css('display', 'none');
|
||||
getTopPostOfConversation(postLi, null, postboard);
|
||||
}, {content:content}
|
||||
}, {content: content}
|
||||
);
|
||||
|
||||
content.find('.postboard-news').on('click', function () {
|
||||
$(this).hide();
|
||||
displayHashtagPending($('.conversation-modal .postboard-posts'));
|
||||
});
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
@ -494,7 +535,7 @@ function openConversationClick(e) {
|
||||
':post' + postData.attr('data-id');
|
||||
}
|
||||
|
||||
function openConversationModal(username,resource) {
|
||||
function openConversationModal(username, resource) {
|
||||
openModal({
|
||||
classAdd: 'conversation-modal',
|
||||
content: newConversationModal(username, resource),
|
||||
@ -1693,7 +1734,7 @@ function initInterfaceCommon() {
|
||||
|
||||
$('#hashtag-modal-template .postboard-news').on('click', function () {
|
||||
$(this).hide();
|
||||
displayHashtagPending($('.hashtag-modal .postboard-posts'));
|
||||
displayQueryPending($('.hashtag-modal .postboard-posts'));
|
||||
});
|
||||
|
||||
replaceDashboards();
|
||||
|
@ -538,22 +538,27 @@ function encode_utf8(s) {
|
||||
return s;
|
||||
}
|
||||
|
||||
var hashtag_elem;
|
||||
var hashtag_tag;
|
||||
var hashtag_res;
|
||||
function setupHashtagOrMention( ulElem, tag, res) {
|
||||
hashtag_elem = ulElem;
|
||||
hashtag_tag = tag;
|
||||
hashtag_res = res;
|
||||
hashtag_elem.text("");
|
||||
var tmobileQueryReq = {}; // FIXME need to rework all that searching
|
||||
|
||||
function setupHashtagOrMention(postboard, tag, res) {
|
||||
$.MAL.setPostTemplate( $("#post-template-home") );
|
||||
$.mobile.showPageLoadingMsg();
|
||||
clearHashtagProcessed();
|
||||
if( tag == defaultScreenName && res == "mention" ) {
|
||||
|
||||
var reqId = tag + '@' + res;
|
||||
|
||||
clearQueryProcessed(reqId);
|
||||
|
||||
tmobileQueryReq.postboard = postboard.text('').attr('data-request-id', reqId);
|
||||
tmobileQueryReq.query = tag;
|
||||
tmobileQueryReq.resource = res;
|
||||
|
||||
if (tag === defaultScreenName && res === 'mention') {
|
||||
// obtain already cached mention posts from twister_newmsgs.js
|
||||
processHashtag(hashtag_elem, defaultScreenName, getMentionsData() );
|
||||
tmobileQueryReq.posts = getMentionsData();
|
||||
processQuery(tmobileQueryReq);
|
||||
}
|
||||
requestHashtag(hashtag_elem,hashtag_tag,hashtag_res);
|
||||
|
||||
requestQuery(tmobileQueryReq);
|
||||
}
|
||||
|
||||
// every 2 seconds do something page specific.
|
||||
@ -575,10 +580,12 @@ function tmobileTick() {
|
||||
}
|
||||
}, {} );
|
||||
}
|
||||
if( curPage == "mentions" || curPage == "hashtag" ) {
|
||||
autoUpdateHashtag = true;
|
||||
requestHashtag(hashtag_elem,hashtag_tag,hashtag_res);
|
||||
|
||||
else if (curPage === 'mentions' || curPage === 'hashtag') {
|
||||
autoUpdateQuery = true;
|
||||
requestQuery(tmobileQueryReq);
|
||||
}
|
||||
|
||||
if( curPage == "dmchat" ) {
|
||||
requestDmConversation($("#dmchat ul.direct-messages-list"),dmChatUser);
|
||||
}
|
||||
|
@ -12,10 +12,9 @@
|
||||
var postsPerRefresh = 10;
|
||||
var maxExpandPost = 8;
|
||||
var maxExpandPostTop = 4;
|
||||
var _hashtagProcessedMap = {};
|
||||
var _hashtagPendingPosts = [];
|
||||
var _hashtagPendingPostsUpdated = 0;
|
||||
var autoUpdateHashtag = false;
|
||||
var _queryProcessedMap = {};
|
||||
var _queryPendingPosts = {};
|
||||
var autoUpdateQuery = false;
|
||||
|
||||
// ----------------
|
||||
|
||||
@ -365,63 +364,98 @@ function updateProfilePosts(postsView, username, useGetposts) {
|
||||
});
|
||||
}
|
||||
|
||||
function clearHashtagProcessed() {
|
||||
_hashtagProcessedMap = {};
|
||||
_hashtagPendingPosts = [];
|
||||
function clearQueryProcessed(id) {
|
||||
if (!id) return;
|
||||
|
||||
_queryProcessedMap[id] = {};
|
||||
_queryPendingPosts[id] = [];
|
||||
}
|
||||
|
||||
function requestHashtag(postboard, hashtag, resource, timeoutArgs) {
|
||||
postboard.closest("div").find(".postboard-loading").show();
|
||||
dhtget(hashtag, resource, "m",
|
||||
function(args, data) {processHashtag(args.postboard, args.hashtag, data);},
|
||||
{postboard:postboard,hashtag:hashtag},
|
||||
timeoutArgs
|
||||
function requestQuery(req) {
|
||||
req.postboard.closest('div').find('.postboard-loading').show();
|
||||
dhtget(req.query, req.resource, 'm',
|
||||
function(req, posts) {
|
||||
req.posts = posts;
|
||||
processQuery(req);
|
||||
},
|
||||
req,
|
||||
req.timeoutArgs
|
||||
);
|
||||
}
|
||||
|
||||
function processHashtag(postboard, hashtag, data) {
|
||||
if( data && window.location.hash.indexOf(encodeURIComponent(hashtag)) != -1 ) {
|
||||
for( var i = data.length-1; i >= 0; i-- ) {
|
||||
var userpost = data[i]["userpost"];
|
||||
var key = userpost["n"] + ";" + userpost["time"];
|
||||
if( !(key in _hashtagProcessedMap) ) {
|
||||
_hashtagProcessedMap[key] = true;
|
||||
function processQuery(req) {
|
||||
if (!isModalWithElemExists(req.postboard) || !req.posts || !req.posts.length)
|
||||
return;
|
||||
|
||||
if ($.Options.filterLang.val !== 'disable' && $.Options.filterLangForSearching.val) {
|
||||
if (typeof(userpost['rt']) !== 'undefined') {
|
||||
var msg = userpost['rt']['msg'];
|
||||
} else {
|
||||
var msg = userpost['msg'];
|
||||
}
|
||||
langFilterData = filterLang(msg);
|
||||
if ($.Options.filterLangSimulate.val) {
|
||||
data[i]['langFilter'] = langFilterData;
|
||||
} else {
|
||||
if (!langFilterData['pass'])
|
||||
continue;
|
||||
}
|
||||
if (!req.id)
|
||||
req.id = req.query + '@' + req.resource;
|
||||
if (typeof _queryProcessedMap[req.id] !== 'object')
|
||||
_queryProcessedMap[req.id] = {};
|
||||
if (typeof _queryPendingPosts[req.id] !== 'object')
|
||||
_queryPendingPosts[req.id] = [];
|
||||
|
||||
for (var i = req.posts.length - 1; i >= 0; i--) {
|
||||
var userpost = req.posts[i].userpost;
|
||||
var key = userpost.n + ';' + userpost.time;
|
||||
|
||||
if (!_queryProcessedMap[req.id][key]) {
|
||||
_queryProcessedMap[req.id][key] = true;
|
||||
|
||||
if ($.Options.filterLang.val !== 'disable' && $.Options.filterLangForSearching.val) {
|
||||
if (typeof userpost.rt !== 'undefined') {
|
||||
var msg = userpost.rt.msg;
|
||||
} else {
|
||||
var msg = userpost.msg;
|
||||
}
|
||||
langFilterData = filterLang(msg);
|
||||
if ($.Options.filterLangSimulate.val) {
|
||||
req.posts[i].langFilter = langFilterData;
|
||||
} else {
|
||||
if (!langFilterData.pass)
|
||||
continue;
|
||||
}
|
||||
|
||||
_hashtagPendingPosts.push(data[i]);
|
||||
_hashtagPendingPostsUpdated++;
|
||||
}
|
||||
|
||||
_queryPendingPosts[req.id].push(req.posts[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (_queryPendingPosts[req.id].length) {
|
||||
if (!$.hasOwnProperty('mobile') && $.Options.showDesktopNotifPostsModal.val === 'enable'
|
||||
&& (req.resource !== 'mention' || req.query !== defaultScreenName)) {
|
||||
$.MAL.showDesktopNotification({
|
||||
body: polyglot.t('You got') + ' ' + polyglot.t('new_posts', _queryPendingPosts[req.id].length) + ' '
|
||||
+ polyglot.t('in search result') + '.',
|
||||
tag: 'twister_notification_new_posts_modal',
|
||||
timeout: $.Options.showDesktopNotifPostsModalTimer.val,
|
||||
funcClick: (function() {
|
||||
focusModalWithElement(this.postboard,
|
||||
function (req) {
|
||||
req.postboard.closest('.postboard').find('.postboard-news').hide();
|
||||
displayQueryPending(req.postboard);
|
||||
}, {postboard: this.postboard}
|
||||
);
|
||||
}).bind({postboard: req.postboard})
|
||||
});
|
||||
}
|
||||
|
||||
if( _hashtagPendingPosts.length ) {
|
||||
if( !postboard.children().length || autoUpdateHashtag ) {
|
||||
displayHashtagPending(postboard);
|
||||
} else {
|
||||
var newTweetsBar = postboard.closest("div").find(".postboard-news");
|
||||
newTweetsBar.text(polyglot.t("new_posts", _hashtagPendingPosts.length));
|
||||
newTweetsBar.fadeIn("slow");
|
||||
postboard.closest("div").find(".postboard-loading").hide();
|
||||
}
|
||||
if (!req.postboard.children().length || autoUpdateQuery) {
|
||||
displayQueryPending(req.postboard);
|
||||
} else {
|
||||
req.postboard.closest('div').find('.postboard-news') // FIXME we'd replace 'div' with '.postboard' but need to dig through tmobile first
|
||||
.text(polyglot.t('new_posts', _queryPendingPosts[req.id].length))
|
||||
.fadeIn('slow')
|
||||
;
|
||||
req.postboard.closest('div').find('.postboard-loading').hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function displayHashtagPending(postboard) {
|
||||
attachPostsToStream(postboard, _hashtagPendingPosts, false);
|
||||
function displayQueryPending(postboard) {
|
||||
var reqId = postboard.attr('data-request-id');
|
||||
|
||||
attachPostsToStream(postboard, _queryPendingPosts[reqId], false);
|
||||
_queryPendingPosts[reqId] = [];
|
||||
|
||||
$.MAL.postboardLoaded();
|
||||
_hashtagPendingPosts = [];
|
||||
}
|
||||
|
@ -50,10 +50,11 @@ function processDMsnippet(dmUsers, dmThreadList, forGroup) {
|
||||
}
|
||||
|
||||
function requestDmConversationModal(postboard, dm_screenname) {
|
||||
if (postboard.is('html *')) {
|
||||
requestDmConversation(postboard, dm_screenname);
|
||||
setTimeout(requestDmConversationModal, 1000, postboard, dm_screenname);
|
||||
}
|
||||
if (!isModalWithElemExists(postboard))
|
||||
return;
|
||||
|
||||
requestDmConversation(postboard, dm_screenname);
|
||||
setTimeout(requestDmConversationModal, 1000, postboard, dm_screenname);
|
||||
}
|
||||
|
||||
function requestDmConversation(postboard, dm_screenname) {
|
||||
|
@ -29,6 +29,11 @@ function processMention(user, mentionTime, data) {
|
||||
_newMentionsUpdated = true;
|
||||
_lastMentionTime = Math.max(mentionTime, _lastMentionTime);
|
||||
data.isNew = true;
|
||||
|
||||
var reqId = defaultScreenName + '@mention';
|
||||
if (typeof _queryPendingPosts[reqId] !== 'object')
|
||||
_queryPendingPosts[reqId] = [];
|
||||
_queryPendingPosts[reqId].push(data);
|
||||
}
|
||||
_knownMentions[key] = {mentionTime: mentionTime, data: data};
|
||||
purgeOldMentions();
|
||||
@ -103,8 +108,25 @@ function requestMentionsCount() {
|
||||
if (_newMentions) {
|
||||
$.MAL.soundNotifyMentions();
|
||||
|
||||
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)
|
||||
if (!$.hasOwnProperty('mobile') && $.Options.showDesktopNotifMentions.val === 'enable')
|
||||
$.MAL.showDesktopNotification({
|
||||
body: polyglot.t('You got') + ' ' + polyglot.t('new_mentions', _newMentions) + '.',
|
||||
tag: 'twister_notification_new_mentions',
|
||||
timeout: $.Options.showDesktopNotifMentionsTimer.val,
|
||||
funcClick: function () {
|
||||
var postboardSelector =
|
||||
'.postboard-posts[data-request-id="' + defaultScreenName + '@mention"]';
|
||||
if (!focusModalWithElement(postboardSelector,
|
||||
function (req) {
|
||||
var postboard = $(req.postboardSelector);
|
||||
postboard.closest('.postboard').find('.postboard-news').hide();
|
||||
displayQueryPending(postboard);
|
||||
resetMentionsCount();
|
||||
}, {postboardSelector: postboardSelector}
|
||||
))
|
||||
$.MAL.showMentions(defaultScreenName);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -117,24 +139,26 @@ function requestMentionsCount() {
|
||||
if (newDMs) {
|
||||
$.MAL.soundNotifyDM();
|
||||
|
||||
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
|
||||
);
|
||||
if (!$.hasOwnProperty('mobile') && $.Options.showDesktopNotifDMs.val === 'enable') {
|
||||
$.MAL.showDesktopNotification({
|
||||
body: polyglot.t('You got') + ' ' + polyglot.t('new_direct_messages', newDMs) + '.',
|
||||
tag: 'twister_notification_new_DMs',
|
||||
timeout: $.Options.showDesktopNotifDMsTimer.val,
|
||||
funcClick: function () {$.MAL.showDMchat();}
|
||||
});
|
||||
}
|
||||
}
|
||||
var newDMs = getNewGroupDMsCount();
|
||||
if (newDMs) {
|
||||
$.MAL.soundNotifyDM();
|
||||
|
||||
if ($.Options.showDesktopNotifDMs.val === 'enable') {
|
||||
$.MAL.showDesktopNotif(false,
|
||||
polyglot.t('You got') + ' ' + polyglot.t('new_group_messages', newDMs) + '.',
|
||||
false, 'twister_notification_new_DMs', $.Options.showDesktopNotifDMsTimer.val,
|
||||
function () {$.MAL.showDMchat({group: true});}, false
|
||||
);
|
||||
if (!$.hasOwnProperty('mobile') && $.Options.showDesktopNotifDMs.val === 'enable') {
|
||||
$.MAL.showDesktopNotification({
|
||||
body: polyglot.t('You got') + ' ' + polyglot.t('new_group_messages', newDMs) + '.',
|
||||
tag: 'twister_notification_new_DMs',
|
||||
timeout: $.Options.showDesktopNotifDMsTimer.val,
|
||||
funcClick: function () {$.MAL.showDMchat({group: true});}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user