X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=js%2Fmain.js;h=5df33ed590c8f0000286cf86144c3c10697b89a7;hb=887e309e8568b4ffa27f5fc6abf1ea67d1fbf5bb;hp=b2a4dfe35cf71bd06a6a1d692df18d4de45bf187;hpb=1fc35d5f443e802e988ea994ae712ac2c6bae8d4;p=friendica.git diff --git a/js/main.js b/js/main.js index b2a4dfe35c..5df33ed590 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'); }); @@ -118,9 +123,6 @@ input.val(val); }); - /* setup field_richtext */ - setupFieldRichtext(); - /* popup menus */ function close_last_popup_menu() { if(last_popup_menu) { @@ -161,10 +163,12 @@ // fancyboxes $("a.popupbox").colorbox({ 'inline' : true, - 'transition' : 'elastic' + 'transition' : 'elastic', + 'maxWidth' : '100%' }); $("a.ajax-popupbox").colorbox({ - 'transition' : 'elastic' + 'transition' : 'elastic', + 'maxWidth' : '100%' }); /* notifications template */ @@ -220,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 + ''); @@ -229,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)), @@ -256,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 @@ -282,7 +291,7 @@ $.jGrowl(message, {sticky: false, theme: 'info', life: 5000}); }); - /* update the js scrollbars */ + // Update the js scrollbars $('#nav-notifications-menu').perfectScrollbar('update'); }); @@ -314,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){ @@ -653,7 +686,6 @@ function preview_post() { $("#jot-preview").val("1"); $("#jot-preview-content").show(); - tinyMCE.triggerSave(); $.post( "item", $("#profile-jot-form").serialize(), @@ -765,59 +797,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');