X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=js%2Fmain.js;h=fff4078ae82626a88a43a8fa51bba8d00f162509;hb=54810f6417e798613a6baafa08500a5ea6d1d5cb;hp=13bd50bd8fcdbe4471f30ca025a98a271f216772;hpb=9d5384f107ddb5d4c652e75c91ef8622a00d3ce0;p=friendica.git diff --git a/js/main.js b/js/main.js index 13bd50bd8f..fff4078ae8 100644 --- a/js/main.js +++ b/js/main.js @@ -25,11 +25,17 @@ } function openMenu(theID) { - document.getElementById(theID).style.display = "block" + var el = document.getElementById(theID) + if (el) { + el.style.display = "block"; + } } function closeMenu(theID) { - document.getElementById(theID).style.display = "none" + var el = document.getElementById(theID) + if (el) { + el.style.display = "none"; + } } function decodeHtml(html) { @@ -72,21 +78,19 @@ /* setup comment textarea buttons */ /* comment textarea buttons needs some "data-*" attributes to work: * data-role="insert-formatting" : to mark the element as a formatting button - * data-comment="" : string for "Comment", used by insertFormatting() function * data-bbcode="" : name of the bbcode element to insert. insertFormatting() will insert it as "[name][/name]" * data-id="" : id of the comment, used to find other comment-related element, like the textarea * */ $('body').on('click','[data-role="insert-formatting"]', function(e) { e.preventDefault(); var o = $(this); - var comment = o.data('comment'); var bbcode = o.data('bbcode'); var id = o.data('id'); if (bbcode=="img") { Dialog.doImageBrowser("comment", id); return; } - insertFormatting(comment, bbcode, id); + insertFormatting(bbcode, id); }); /* event from comment textarea button popups */ @@ -97,6 +101,7 @@ var start = textarea.selectionStart; var end = textarea.selectionEnd; textarea.value = textarea.value.substring(0, start) + bbcode + textarea.value.substring(end, textarea.value.length); + $(textarea).trigger('change'); }); @@ -219,8 +224,11 @@ var nnm = $("#nav-notifications-menu"); nnm.html(notifications_all + notifications_mark); - var notification_lastitem = parseInt(localStorage.getItem("notification-lastitem")); + var lastItemStorageKey = "notification-lastitem:" + localUser; + var notification_lastitem = parseInt(localStorage.getItem(lastItemStorageKey)); var notification_id = 0; + + // Insert notifs into the notifications-menu $(data.notifications).each(function(key, notif){ var text = notif.message.format('' + notif.name + ''); var contact = ('' + notif.name + ''); @@ -228,19 +236,21 @@ var html = notifications_tpl.format( notif.href, // {0} // link to the source notif.photo, // {1} // photo of the contact - text, // {2} // preformatted text (autor + text) + text, // {2} // preformatted text (autor + text) notif.date, // {3} // date of notification (time ago) - seenclass, // {4} // visited status of the notification + seenclass, // {4} // visited status of the notification new Date(notif.timestamp*1000), // {5} // date of notification notif.url, // {6} // profile url of the contact notif.message.format(contact), // {7} // preformatted html (text including author profile url) - '' // {8} // Deprecated + '' // {8} // Deprecated ); nnm.append(html); }); + + // Desktop Notifications $(data.notifications.reverse()).each(function(key, e){ notification_id = parseInt(e.timestamp); - if (notification_lastitem !== null && notification_id > notification_lastitem) { + if (notification_lastitem !== null && notification_id > notification_lastitem && Number(e.seen) === 0) { if (getNotificationPermission() === "granted") { var notification = new Notification(document.title, { body: decodeHtml(e.message.replace('→ ', '').format(e.name)), @@ -255,7 +265,7 @@ }); notification_lastitem = notification_id; - localStorage.setItem("notification-lastitem", notification_lastitem) + localStorage.setItem(lastItemStorageKey, notification_lastitem) $("img[data-src]", nnm).each(function(i, el){ // Add src attribute for images with a data-src attribute @@ -281,7 +291,7 @@ $.jGrowl(message, {sticky: false, theme: 'info', life: 5000}); }); - /* update the js scrollbars */ + // Update the js scrollbars $('#nav-notifications-menu').perfectScrollbar('update'); }); @@ -313,6 +323,30 @@ } }); + // Scroll to the next/previous thread when pressing J and K + $(document).keydown(function (event) { + var threads = $('.thread_level_1'); + if ((event.keyCode === 74 || event.keyCode === 75) && !$(event.target).is('textarea, input')) { + var scrollTop = $(window).scrollTop(); + if (event.keyCode === 75) { + threads = $(threads.get().reverse()); + } + threads.each(function(key, item) { + var comparison; + var top = $(item).offset().top - 100; + if (event.keyCode === 74) { + comparison = top > scrollTop + 1; + } else if (event.keyCode === 75) { + comparison = top < scrollTop - 1; + } + if (comparison) { + $('html, body').animate({ scrollTop: top }, 200); + return false; + } + }); + } + }); + // Set an event listener for infinite scroll if(typeof infinite_scroll !== 'undefined') { $(window).scroll(function(e){ @@ -686,11 +720,41 @@ // page number infinite_scroll.pageno+=1; + match = $("span.received").last(); + if (match.length > 0) { + received = match[0].innerHTML; + } else { + received = "0000-00-00 00:00:00"; + } + + match = $("span.created").last(); + if (match.length > 0) { + created = match[0].innerHTML; + } else { + created = "0000-00-00 00:00:00"; + } + + match = $("span.commented").last(); + if (match.length > 0) { + commented = match[0].innerHTML; + } else { + commented = "0000-00-00 00:00:00"; + } + + match = $("span.id").last(); + if (match.length > 0) { + id = match[0].innerHTML; + } else { + id = "0"; + } + // console.log("Received: " + received + " - Commented: " + commented+ " - Created: " + created + " - ID: " + id); + // get the raw content from the next page and insert this content // right before "#conversation-end" - $.get('network?mode=raw' + infinite_scroll.reload_uri + '&page=' + infinite_scroll.pageno, function(data) { + $.get('network?mode=raw' + infinite_scroll.reload_uri + '&last_received=' + received + '&last_commented=' + commented + '&last_created=' + created + '&last_id=' + id + '&page=' + infinite_scroll.pageno, function(data) { $("#scroll-loader").hide(); if ($(data).length > 0) { + $(data).insertBefore('#conversation-end'); lockLoadContent = false; } else {