]> git.mxchange.org Git - friendica.git/blobdiff - view/js/main.js
Merge pull request #5669 from annando/notices-in-notifications
[friendica.git] / view / js / main.js
index 2d3d132c4ae13c09749641a408832d2c151a303f..4788d90a830cc6e4296c024d66d956253b42024f 100644 (file)
@@ -9,7 +9,7 @@ function _resizeIframe(obj, desth) {
        if (h == (ch + 'px')) {
                return;
        }
-       if (desth == ch && ch>0) {
+       if (desth == ch && ch > 0) {
                obj.style.height  = ch + 'px';
        }
        setTimeout(_resizeIframe, 100, obj, ch);
@@ -50,7 +50,7 @@ var src = null;
 var prev = null;
 var livetime = null;
 var force_update = false;
-var update_item = null;
+var update_item = 0;
 var stopped = false;
 var totStopped = false;
 var timer = null;
@@ -75,9 +75,9 @@ $(function() {
        $('body').on('click','[data-role="insert-formatting"]', function(e) {
                e.preventDefault();
                var o = $(this);
-               var bbcode  = o.data('bbcode');
+               var bbcode = o.data('bbcode');
                var id = o.data('id');
-               if (bbcode=="img") {
+               if (bbcode == "img") {
                        Dialog.doImageBrowser("comment", id);
                        return;
                }
@@ -99,7 +99,7 @@ $(function() {
        $(".onoff input").each(function() {
                val = $(this).val();
                id = $(this).attr("id");
-               $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
+               $("#"+id+"_onoff ." + (val == 0 ? "on":"off")).addClass("hidden");
        });
 
        $(".onoff > a").click(function(event) {
@@ -107,8 +107,8 @@ $(function() {
                var input = $(this).siblings("input");
                var val = 1-input.val();
                var id = input.attr("id");
-               $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
-               $("#"+id+"_onoff ."+ (val==1?"on":"off")).removeClass("hidden");
+               $("#"+id+"_onoff ." + (val == 0 ? "on":"off")).addClass("hidden");
+               $("#"+id+"_onoff ." + (val == 1 ? "on":"off")).removeClass("hidden");
                input.val(val);
        });
 
@@ -130,7 +130,7 @@ $(function() {
                if (isSelected) {
                        return false;
                }
-               menu = $( $(this).attr('rel') );
+               menu = $($(this).attr('rel'));
                e.preventDefault();
                e.stopPropagation();
                if (menu.attr('popup') == "false") {
@@ -166,8 +166,8 @@ $(function() {
 
        /* notifications template */
        var notifications_tpl= unescape($("#nav-notifications-template[rel=template]").html());
-       var notifications_all = unescape($('<div>').append( $("#nav-notifications-see-all").clone() ).html()); //outerHtml hack
-       var notifications_mark = unescape($('<div>').append( $("#nav-notifications-mark-all").clone() ).html()); //outerHtml hack
+       var notifications_all = unescape($('<div>').append($("#nav-notifications-see-all").clone()).html()); //outerHtml hack
+       var notifications_mark = unescape($('<div>').append($("#nav-notifications-mark-all").clone()).html()); //outerHtml hack
        var notifications_empty = unescape($("#nav-notifications-menu").html());
 
        /* enable perfect-scrollbars for different elements */
@@ -260,7 +260,7 @@ $(function() {
                                                var notification = new Notification(document.title, {
                                                                                  body: decodeHtml(e.message.replace('&rarr; ', '').format(e.name)),
                                                                                  icon: e.photo,
-                                                                                });
+                                                                               });
                                                notification['url'] = e.href;
                                                notification.addEventListener("click", function(ev) {
                                                        window.location = ev.target.url;
@@ -302,7 +302,12 @@ $(function() {
                $('#nav-notifications-menu').perfectScrollbar('update');
        });
 
-       NavUpdate();
+       // Asynchronous calls are deferred until the very end of the page load to ease on slower connections
+       window.addEventListener("load", function(){
+               NavUpdate();
+               acl.get(0, 100);
+       });
+
        // Allow folks to stop the ajax page updates with the pause/break key
        $(document).keydown(function(event) {
                if (event.keyCode == '8') {
@@ -345,7 +350,7 @@ $(function() {
                                        comparison = top < scrollTop - 1;
                                }
                                if (comparison) {
-                                       $('html, body').animate({ scrollTop: top }, 200);
+                                       $('html, body').animate({scrollTop: top}, 200);
                                        return false;
                                }
                        });
@@ -378,7 +383,7 @@ function NavUpdate() {
                                $('nav').trigger('nav-update', data.result);
 
                                // start live update
-                               ['network', 'profile', 'community', 'notes', 'display'].forEach(function (src) {
+                               ['network', 'profile', 'community', 'notes', 'display', 'contacts'].forEach(function (src) {
                                        if ($('#live-' + src).length) {
                                                liveUpdate(src);
                                        }
@@ -395,12 +400,53 @@ function NavUpdate() {
        timer = setTimeout(NavUpdate, updateInterval);
 }
 
+function updateConvItems(data) {
+       // add a new thread
+       $('.toplevel_item',data).each(function() {
+               var ident = $(this).attr('id');
+
+               // Add new top-level item.
+               if ($('#' + ident).length == 0 && profile_page == 1) {
+                       $('#' + prev).after($(this));
+
+               // Replace already existing thread.
+               } else {
+                       // Find out if the hidden comments are open, so we can keep it that way
+                       // if a new comment has been posted
+                       var id = $('.hide-comments-total', this).attr('id');
+                       if (typeof id != 'undefined') {
+                               id = id.split('-')[3];
+                               var commentsOpen = $("#collapsed-comments-" + id).is(":visible");
+                       }
+
+                       $('#' + ident).replaceWith($(this));
+
+                       if (typeof id != 'undefined') {
+                               if (commentsOpen) {
+                                       showHideComments(id);
+                               }
+                       }
+               }
+               prev = ident;
+       });
+
+       $('.like-rotator').hide();
+       if (commentBusy) {
+               commentBusy = false;
+               $('body').css('cursor', 'auto');
+       }
+       /* autocomplete @nicknames */
+       $(".comment-edit-form  textarea").editor_autocomplete(baseurl+"/acl");
+       /* autocomplete bbcode */
+       $(".comment-edit-form  textarea").bbco_autocomplete('bbcode');
+}
+
 function liveUpdate(src) {
-       if ((src == null) || (stopped) || (! profile_uid)) {
+       if ((src == null) || stopped || !profile_uid) {
                $('.like-rotator').hide(); return;
        }
 
-       if (($('.comment-edit-text-full').length) || (in_progress)) {
+       if (($('.comment-edit-text-full').length) || in_progress) {
                if (livetime) {
                        clearTimeout(livetime);
                }
@@ -418,58 +464,28 @@ function liveUpdate(src) {
        if ($(document).scrollTop() == 0) {
                force_update = true;
        }
+
+       var orgHeight = $("section").height();
+
        var udargs = ((netargs.length) ? '/' + netargs : '');
        var update_url = 'update_' + src + udargs + '&p=' + profile_uid + '&page=' + profile_page + '&force=' + ((force_update) ? 1 : 0) + '&item=' + update_item;
 
        $.get(update_url,function(data) {
                in_progress = false;
                force_update = false;
-               update_item = null;
-
-               // add a new thread
-               $('.toplevel_item',data).each(function() {
-                       var ident = $(this).attr('id');
-
-                       if ($('#' + ident).length == 0 && profile_page == 1) {
-                               $('img',this).each(function() {
-                                       $(this).attr('src',$(this).attr('dst'));
-                               });
-                               $('#' + prev).after($(this));
-                       } else {
-                               // Find out if the hidden comments are open, so we can keep it that way
-                               // if a new comment has been posted
-                               var id = $('.hide-comments-total', this).attr('id');
-                               if (typeof id != 'undefined') {
-                                       id = id.split('-')[3];
-                                       var commentsOpen = $("#collapsed-comments-" + id).is(":visible");
-                               }
+               update_item = 0;
 
-                               $('img',this).each(function() {
-                                       $(this).attr('src',$(this).attr('dst'));
-                               });
-                               $('html').height($('html').height());
-                               $('#' + ident).replaceWith($(this));
+               $('.wall-item-body', data).imagesLoaded(function() {
+                       updateConvItems(data);
 
-                               if (typeof id != 'undefined') {
-                                       if (commentsOpen) {
-                                               showHideComments(id);
-                                       }
-                               }
-                               $('html').height('auto');
-                       }
-                       prev = ident;
+                       // Update the scroll position.
+                       $(window).scrollTop($(window).scrollTop() + $("section").height() - orgHeight);
                });
 
-               $('.like-rotator').hide();
-               if (commentBusy) {
-                       commentBusy = false;
-                       $('body').css('cursor', 'auto');
-               }
-               /* autocomplete @nicknames */
-               $(".comment-edit-form  textarea").editor_autocomplete(baseurl+"/acl");
-               /* autocomplete bbcode */
-               $(".comment-edit-form  textarea").bbco_autocomplete('bbcode');
+               callAddonHooks("postprocess_liveupdate");
+
        });
+
 }
 
 function imgbright(node) {
@@ -493,7 +509,7 @@ function imgdull(node) {
 function dolike(ident,verb) {
        unpause();
        $('#like-rotator-' + ident.toString()).show();
-       $.get('like/' + ident.toString() + '?verb=' + verb, NavUpdate );
+       $.get('like/' + ident.toString() + '?verb=' + verb, NavUpdate);
        liking = 1;
        force_update = true;
        update_item = ident.toString();
@@ -502,7 +518,7 @@ function dolike(ident,verb) {
 function dosubthread(ident) {
        unpause();
        $('#like-rotator-' + ident.toString()).show();
-       $.get('subthread/' + ident.toString(), NavUpdate );
+       $.get('subthread/' + ident.toString(), NavUpdate);
        liking = 1;
 }
 
@@ -573,7 +589,7 @@ function lockview(event,id) {
                lockvisible = true;
                $.get('lockview/' + id, function(data) {
                        $('#panel').html(data);
-                       $('#panel').css({ 'left': cursor.x + 5 , 'top': cursor.y + 5});
+                       $('#panel').css({'left': cursor.x + 5 , 'top': cursor.y + 5});
                        $('#panel').show();
                });
        }
@@ -625,7 +641,7 @@ function preview_comment(id) {
                function(data) {
                        if (data.preview) {
                                $("#comment-edit-preview-" + id).html(data.preview);
-                               $("#comment-edit-preview-" + id + " a").click(function() { return false; });
+                               $("#comment-edit-preview-" + id + " a").click(function() {return false;});
                        }
                },
                "json"
@@ -652,7 +668,7 @@ function preview_post() {
                function(data) {
                        if (data.preview) {
                                $("#jot-preview-content").html(data.preview);
-                               $("#jot-preview-content" + " a").click(function() { return false; });
+                               $("#jot-preview-content" + " a").click(function() {return false;});
                        }
                },
                "json"
@@ -723,26 +739,26 @@ function loadScrollContent() {
 }
 
 function bin2hex(s) {
-        // Converts the binary representation of data to hex
-        //
-        // version: 812.316
-        // discuss at: http://phpjs.org/functions/bin2hex
-        // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
-        // +   bugfixed by: Onno Marsman
-        // +   bugfixed by: Linuxworld
-        // *     example 1: bin2hex('Kev');
-        // *     returns 1: '4b6576'
-        // *     example 2: bin2hex(String.fromCharCode(0x00));
-        // *     returns 2: '00'
-        var v,i, f = 0, a = [];
-        s += '';
-        f = s.length;
-
-        for (i = 0; i<f; i++) {
-            a[i] = s.charCodeAt(i).toString(16).replace(/^([\da-f])$/,"0$1");
-        }
-
-        return a.join('');
+       // Converts the binary representation of data to hex
+       //
+       // version: 812.316
+       // discuss at: http://phpjs.org/functions/bin2hex
+       // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+       // +   bugfixed by: Onno Marsman
+       // +   bugfixed by: Linuxworld
+       // *     example 1: bin2hex('Kev');
+       // *     returns 1: '4b6576'
+       // *     example 2: bin2hex(String.fromCharCode(0x00));
+       // *     returns 2: '00'
+       var v,i, f = 0, a = [];
+       s += '';
+       f = s.length;
+
+       for (i = 0; i<f; i++) {
+               a[i] = s.charCodeAt(i).toString(16).replace(/^([\da-f])$/,"0$1");
+       }
+
+       return a.join('');
 }
 
 function groupChangeMember(gid, cid, sec_token) {