]> git.mxchange.org Git - friendica.git/blobdiff - js/main.js
Merge pull request #4269 from MrPetovan/task/4265-move-base64-to-composer
[friendica.git] / js / main.js
index 958b0a8ae3c8d74b92671b203f5b694f9ab4d42e..fff4078ae82626a88a43a8fa51bba8d00f162509 100644 (file)
        }
 
        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) {
                /* 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>" : string for "Comment", used by insertFormatting() function
                 *              data-bbcode="<string>" : name of the bbcode element to insert. insertFormatting() will insert it as "[name][/name]"
                 *              data-id="<string>" : 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 */
                /* insert returned bbcode at cursor position or replace selected text */
                $("body").on("fbrowser.image.comment", function(e, filename, bbcode, id) {
-                       console.log("on", id);
                        $.colorbox.close();
                        var textarea = document.getElementById("comment-edit-text-" +id);
                        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');
                });
 
 
                        $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
                        $("#"+id+"_onoff ."+ (val==1?"on":"off")).removeClass("hidden");
                        input.val(val);
-                       //console.log(id);
                });
 
-               /* setup field_richtext */
-               setupFieldRichtext();
-
                /* popup menus */
                function close_last_popup_menu() {
                        if(last_popup_menu) {
                // fancyboxes
                $("a.popupbox").colorbox({
                        'inline' : true,
-                       'transition' : 'elastic'
+                       'transition' : 'elastic',
+                       'maxWidth' : '100%'
                });
                $("a.ajax-popupbox").colorbox({
-                       'transition' : 'elastic'
+                       'transition' : 'elastic',
+                       'maxWidth' : '100%'
                });
 
                /* notifications template */
                                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('<span class="contactname">' + notif.name + '</span>');
                                        var contact = ('<a href="' + notif.url + '"><span class="contactname">' + notif.name + '</span></a>');
                                        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('&rarr; ', '').format(e.name)),
 
                                });
                                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
                                $("#nav-notifications-linkmenu").removeClass("on");
                        }
 
-                       console.log(data.sysmsgs);
-
                        $(data.sysmsgs.notice).each(function(key, message){
                                $.jGrowl(message, {sticky: true, theme: 'notice'});
                        });
                                $.jGrowl(message, {sticky: false, theme: 'info', life: 5000});
                        });
 
-                       /* update the js scrollbars */
+                       // Update the js scrollbars
                        $('#nav-notifications-menu').perfectScrollbar('update');
 
                });
                        }
                });
 
+               // 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){
        function preview_post() {
                $("#jot-preview").val("1");
                $("#jot-preview-content").show();
-               tinyMCE.triggerSave();
                $.post(
                        "item",
                        $("#profile-jot-form").serialize(),
                // page number
                infinite_scroll.pageno+=1;
 
-               console.log('Loading page ' + infinite_scroll.pageno);
+               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 {
@@ -771,59 +827,6 @@ function notifyMarkAll() {
        });
 }
 
-
-// code from http://www.tinymce.com/wiki.php/How-to_implement_a_custom_file_browser
-function fcFileBrowser (field_name, url, type, win) {
-    /* TODO: If you work with sessions in PHP and your client doesn't accept cookies you might need to carry
-       the session name and session ID in the request string (can look like this: "?PHPSESSID=88p0n70s9dsknra96qhuk6etm5").
-       These lines of code extract the necessary parameters and add them back to the filebrowser URL again. */
-
-
-    var cmsURL = baseurl+"/fbrowser/"+type+"/";
-
-    tinyMCE.activeEditor.windowManager.open({
-        file : cmsURL,
-        title : 'File Browser',
-        width : 420,  // Your dimensions may differ - toy around with them!
-        height : 400,
-        resizable : "yes",
-        inline : "yes",  // This parameter only has an effect if you use the inlinepopups plugin!
-        close_previous : "no"
-    }, {
-        window : win,
-        input : field_name
-    });
-    return false;
-  }
-
-function setupFieldRichtext(){
-       tinyMCE.init({
-               theme : "advanced",
-               mode : "specific_textareas",
-               editor_selector: "fieldRichtext",
-               plugins : "bbcode,paste, inlinepopups",
-               theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code",
-               theme_advanced_buttons2 : "",
-               theme_advanced_buttons3 : "",
-               theme_advanced_toolbar_location : "top",
-               theme_advanced_toolbar_align : "center",
-               theme_advanced_blockformats : "blockquote,code",
-               theme_advanced_resizing : true,
-               paste_text_sticky : true,
-               entity_encoding : "raw",
-               add_unload_trigger : false,
-               remove_linebreaks : false,
-               //force_p_newlines : false,
-               //force_br_newlines : true,
-               forced_root_block : 'div',
-               convert_urls: false,
-               content_css: baseurl+"/view/custom_tinymce.css",
-               theme_advanced_path : false,
-               file_browser_callback : "fcFileBrowser",
-       });
-}
-
-
 /**
  * sprintf in javascript
  *     "{0} and {1}".format('zero','uno');