diff options
author | nobody <nobody@zotlabs.com> | 2021-06-17 14:57:47 -0700 |
---|---|---|
committer | nobody <nobody@zotlabs.com> | 2021-06-17 14:57:47 -0700 |
commit | efda8aac1d7d90fd7eda4a449332eedf74342951 (patch) | |
tree | 3373c0579168776cccda5224b6b33ce59fa9b274 /view/js/main.js | |
parent | 686530c1873f98d724355bf3f456243b1b7fdadd (diff) | |
parent | a84cec4acddf6804a88fcda52e4437c91785dfb2 (diff) | |
download | volse-hubzilla-efda8aac1d7d90fd7eda4a449332eedf74342951.tar.gz volse-hubzilla-efda8aac1d7d90fd7eda4a449332eedf74342951.tar.bz2 volse-hubzilla-efda8aac1d7d90fd7eda4a449332eedf74342951.zip |
Merge branch 'dev' of https://framagit.org/hubzilla/core into dev
Diffstat (limited to 'view/js/main.js')
-rw-r--r-- | view/js/main.js | 518 |
1 files changed, 119 insertions, 399 deletions
diff --git a/view/js/main.js b/view/js/main.js index 6c418b213..78bd790cd 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -26,13 +26,6 @@ var followUpPageLoad = false; var window_needs_alert = true; var expanded_items = []; -var sse_bs_active = false; -var sse_offset = 0; -var sse_type; -var sse_partial_result = false; -var sse_rmids = []; -var sse_fallback_interval; - var page_cache = {}; // take care of tab/window reloads on channel change @@ -78,6 +71,65 @@ $(document).ready(function() { } }); + // @hilmar |-> + if ( typeof(window.tao) == 'undefined' ) { + window.tao = {}; + } + if ( typeof(window.tao.zin) == 'undefined' ) { + tao.zin = { syslc: '', syslcs: {}, htm: '', me: '', debug: '' }; + tao.zin.axim = '<div class="zinpax fa fa-sync fa-spin"> </div>'; + $('.navbar-app[href*="/lang"]').attr({"data-toggle": "dropdown", "aria-expand": "true", "id": "zintog"}) + .removeAttr('href').addClass('zinlcx zinlcxp dropdown dropdown-toggle'); + $('.dropdown-item[href*="/lang"]').addClass('zinlcxmi zinlcx').removeAttr('href').css('cursor','pointer'); + } + $('.zinlcx').on('click', function(e) { + if (tao.zin.syslc == '') { + $('.zinlcx').append(tao.zin.axim); + $.ajax({ + type: 'POST', url: 'lang', + data: { zinlc: '??' } + }).done( function(re) { + tao.zin.re = JSON.parse(re); + tao.zin.syslc = tao.zin.re.lc; + tao.zin.syslcs = tao.zin.re.lcs; + tao.zin.htm = '<ul class="zinlcs fa-ul">'; + $.each( tao.zin.syslcs, function( k, v ) { + tao.zin.htm += '<li><a id="zinlc' + k + '" class="zinlc dropdown-item fakelink">' + k + ' ' + v + '</a></li>'; + }); + tao.zin.htm += '</ul>'; + $('.zinpax').remove(); + $('.zinlcx').append(tao.zin.htm); + $('.zinlcxp > ul').addClass('dropdown dropdown-menu dropdown-menu-right').css('left','-16em'); + }); + return false; + } else { + if (e.target.id == '') { + // noop click on lang again + return false; + } + tao.zin.me = e.target.id.substr(5); + $('#right_aside_wrapper').append(tao.zin.axim); + $.ajax({ + type: 'POST', url: 'lang', + data: { zinlc: tao.zin.me } + }).done( function(re) { + tao.zin.re = JSON.parse(re); + location.reload(true); + }); + } + }); + $('#zintog').on('click', function() { + $('.zinlcs').toggle(); + }); + $('#dropdown-menu').on('shown.bs.dropdown', function() { + tao.zin.debug += 'e,'; + //$('.zinlcs').removeAttr('display'); + }) + .on('mouseleave', function() { + $(this).trigger('click'); + }); + // @hilmar <-| + var tf = new Function('n', 's', 'var k = s.split("/")['+aStr['plural_func']+']; return (k ? k : s);'); jQuery.timeago.settings.strings = { @@ -102,110 +154,63 @@ $(document).ready(function() { jQuery.timeago.settings.allowFuture = true; - if(sse_enabled) { - if(typeof(window.SharedWorker) === 'undefined') { - // notifications with multiple tabs open will not work very well in this scenario - var evtSource = new EventSource('/sse'); + $(document).on('click', '.notification, .message', function(e) { + let b64mid = $(this).data('b64mid'); + let notify_id = $(this).data('notify_id'); + let path = $(this)[0].pathname.split('/')[1]; + let stateObj = { b64mid: b64mid }; + let singlethread_modules = ['display', 'hq', 'dm']; + let redirect_modules = ['display', 'notify']; - evtSource.addEventListener('notifications', function(e) { - var obj = JSON.parse(e.data); - sse_handleNotifications(obj, false, false); - }, false); - - document.addEventListener('visibilitychange', function() { - if (!document.hidden) { - sse_offset = 0; - sse_bs_init(); - } - }, false); + if(! b64mid && ! notify_id) + return; + if(redirect_modules.indexOf(path) !== -1) { + path = 'hq'; } - else { - var myWorker = new SharedWorker('/view/js/sse_worker.js', localUser); - - myWorker.port.onmessage = function(e) { - obj = e.data; - console.log(obj); - sse_handleNotifications(obj, false, false); - } - myWorker.onerror = function(e) { - myWorker.port.close(); - } + if(notify_id != null) { + $.ajax({ + type: 'post', + url: 'notify', + data: { + 'notify_id' : notify_id + }, + async: ((module !== path) ? false : true) + }); + } - myWorker.port.start(); + if (module !== path) { + e.preventDefault(); + window.location.href = path + '/' + b64mid; } - } - else { - if (!document.hidden) - sse_fallback_interval = setInterval(sse_fallback, updateInterval); + else { - document.addEventListener('visibilitychange', function() { - if (document.hidden) { - clearInterval(sse_fallback_interval); - } - else { - sse_offset = 0; - sse_bs_init(); - sse_fallback_interval = setInterval(sse_fallback, updateInterval); + if (singlethread_modules.indexOf(module) !== -1) { + history.pushState(stateObj, '', module + '/' + b64mid); + $('.message').removeClass('active'); + $('[data-b64mid="' + b64mid + '"].message').addClass('active'); } - }, false); - } - - $('.notification-link').on('click', { replace: true, followup: false }, sse_bs_notifications); + if (b64mid) { - $('.notification-filter').on('keypress', function(e) { - if(e.which == 13) { // enter - this.blur(); - sse_offset = 0; - $("#nav-" + sse_type + "-menu").html(''); - $("#nav-" + sse_type + "-loading").show(); + e.preventDefault(); - var cn_val = $('#cn-' + sse_type + '-input').length ? $('#cn-' + sse_type + '-input').val().toString().toLowerCase() : ''; - - $.get('/sse_bs/' + sse_type + '/' + sse_offset + '?nquery=' + encodeURIComponent(cn_val), function(obj) { - console.log('sse: bootstraping ' + sse_type); - console.log(obj); - - sse_bs_active = false; - sse_partial_result = true; - sse_offset = obj[sse_type].offset; - if(sse_offset < 0) - $("#nav-" + sse_type + "-loading").hide(); - - sse_handleNotifications(obj, true, false); - - }); + if(! page_load) { + prepareLiveUpdate(b64mid, notify_id); + } + } } }); - $('.notifications-textinput-clear').on('click', function(e) { - if(! sse_partial_result) - return; - - $("#nav-" + sse_type + "-menu").html(''); - $("#nav-" + sse_type + "-loading").show(); - $.get('/sse_bs/' + sse_type, function(obj) { - console.log('sse: bootstraping ' + sse_type); - console.log(obj); - - sse_bs_active = false; - sse_partial_result = false; - sse_offset = obj[sse_type].offset; - if(sse_offset < 0) - $("#nav-" + sse_type + "-loading").hide(); - - sse_handleNotifications(obj, true, false); - - }); - }); - - $('.notification-content').on('scroll', function() { - if(this.scrollTop > this.scrollHeight - this.clientHeight - (this.scrollHeight/7)) { - sse_bs_notifications(sse_type, false, true); + window.onpopstate = function(e) { + if(e.state !== null && e.state.b64mid !== bParam_mid) { + prepareLiveUpdate(e.state.b64mid, ''); + $('.message').removeClass('active'); + $('[data-b64mid="' + e.state.b64mid + '"].message').addClass('active'); } - }); + + }; //mod_mail only $(".mail-conv-detail .autotime").timeago(); @@ -537,7 +542,7 @@ function closeMenu(theID) { } function markRead(notifType) { - $.get('ping?f=&markRead='+notifType); + $.get('notifications?f=&markRead='+notifType); $('.' + notifType + '-button').fadeOut(function() { $("." + notifType + "-update").html('0'); $('#nav-' + notifType + '-menu').html(''); @@ -548,7 +553,7 @@ function markRead(notifType) { } function markItemRead(itemId) { - $.get('ping?f=&markItemRead='+itemId); + $.get('notifications?f=&markItemRead='+itemId); $('.unseen-wall-indicator-'+itemId).remove(); } @@ -908,6 +913,20 @@ function updateInit() { } } +function prepareLiveUpdate(b64mid, notify_id) { + $(document).scrollTop(0); + $('.thread-wrapper').remove(); + bParam_mid = b64mid; + mode = 'replace'; + page_load = true; + if (module == 'hq') { + liveUpdate(notify_id); + } + if (module == 'display'|| module == 'dm') { + liveUpdate(); + } +} + function liveUpdate(notify_id) { if(typeof profile_uid === 'undefined') profile_uid = false; /* Should probably be unified with channelId defined in head.tpl */ @@ -993,7 +1012,7 @@ function liveUpdate(notify_id) { if(typeof notify_id !== 'undefined' && notify_id !== 'undefined') { $.post( - "hq", + "notify", { "notify_id" : notify_id } @@ -1446,24 +1465,6 @@ function preview_post() { return true; } -function preview_mail() { - $("#mail-preview").val("1"); - $("#mail-preview-content").show(); - $.post( - "mail", - $("#prvmail-form").serialize(), - function(data) { - if(data.preview) { - $("#mail-preview-content").html(data.preview); - $("#mail-preview-content" + " a").click(function() { return false; }); - } - }, - "json" - ); - $("#mail-preview").val("0"); - return true; -} - function bin2hex(s) { // Converts the binary representation of data to hex // @@ -1719,288 +1720,6 @@ function zid(s) { return s; } -function sse_bs_init() { - if(sessionStorage.getItem('notification_open') !== null || typeof sse_type !== 'undefined' ) { - if(typeof sse_type === 'undefined') - sse_type = sessionStorage.getItem('notification_open'); - - $("#nav-" + sse_type + "-sub").addClass('show'); - sse_bs_notifications(sse_type, true, false); - } - else { - sse_bs_counts(); - } -} - -function sse_bs_counts() { - if(sse_bs_active) - return; - - sse_bs_active = true; - - $.ajax({ - type: 'post', - url: '/sse_bs', - data: { sse_rmids } - }).done( function(obj) { - console.log(obj); - sse_bs_active = false; - sse_rmids = []; - sse_handleNotifications(obj, true, false); - }); -} - -function sse_bs_notifications(e, replace, followup) { - - if(sse_bs_active) - return; - - - var manual = false; - - if(typeof replace === 'undefined') - replace = e.data.replace; - - if(typeof followup === 'undefined') - followup = e.data.followup; - - if(typeof e === 'string') { - sse_type = e; - } - else { - manual = true; - sse_offset = 0; - sse_type = e.target.dataset.sse_type; - } - - if(typeof sse_type === 'undefined') - return; - - if(followup || !manual || !($('#nav-' + sse_type + '-sub').hasClass('collapse') && $('#nav-' + sse_type + '-sub').hasClass('show'))) { - - if(sse_offset >= 0) { - $("#nav-" + sse_type + "-loading").show(); - } - - sessionStorage.setItem('notification_open', sse_type); - if(sse_offset !== -1 || replace) { - - var cn_val = (($('#cn-' + sse_type + '-input').length && sse_partial_result) ? $('#cn-' + sse_type + '-input').val().toString().toLowerCase() : ''); - - $("#nav-" + sse_type + "-loading").show(); - - sse_bs_active = true; - - $.ajax({ - type: 'post', - url: '/sse_bs/' + sse_type + '/' + sse_offset, - nquery: encodeURIComponent(cn_val), - data: { sse_rmids } - }).done(function(obj) { - console.log('sse: bootstraping ' + sse_type); - console.log(obj); - sse_bs_active = false; - sse_rmids = []; - $("#nav-" + sse_type + "-loading").hide(); - sse_offset = obj[sse_type].offset; - sse_handleNotifications(obj, replace, followup); - }); - } - else - $("#nav-" + sse_type + "-loading").hide(); - - } - else { - sessionStorage.removeItem('notification_open'); - } -} - -function sse_handleNotifications(obj, replace, followup) { - - var primary_notifications = ['dm', 'home', 'intros', 'register', 'mail', 'notify', 'files']; - var secondary_notifications = ['network', 'forums', 'all_events', 'pubs']; - var all_notifications = primary_notifications.concat(secondary_notifications); - - all_notifications.forEach(function(type, index) { - if(typeof obj[type] === typeof undefined) - return true; - - if(obj[type].count) { - $('.' + type + '-button').fadeIn(); - if(replace || followup) - $('.' + type + '-update').html(Number(obj[type].count)); - else - $('.' + type + '-update').html(Number(obj[type].count) + Number($('.' + type + '-update').html())); - } - else { - $('.' + type + '-update').html('0'); - $('.' + type + '-button').fadeOut(function() { - sse_setNotificationsStatus(); - }); - } - if(obj[type].notifications.length) - sse_handleNotificationsItems(type, obj[type].notifications, replace, followup); - }); - - sse_setNotificationsStatus(); - - // notice and info - $.jGrowl.defaults.closerTemplate = '<div>[ ' + aStr.closeAll + ']</div>'; - - if(obj.notice) { - $(obj.notice.notifications).each(function() { - $.jGrowl(this, { sticky: true, theme: 'notice' }); - }); - } - - if(obj.info) { - $(obj.info.notifications).each(function(){ - $.jGrowl(this, { sticky: false, theme: 'info', life: 10000 }); - }); - } - - // load more notifications if visible notifications count becomes low - if(sse_type && sse_offset != -1 && $('#nav-' + sse_type + '-menu').children().length <= 20) { - sse_offset = 0; - sse_bs_notifications(sse_type, false, true); - } - - -} - -function sse_handleNotificationsItems(notifyType, data, replace, followup) { - - var notifications_tpl = ((notifyType == 'forums') ? decodeURIComponent($("#nav-notifications-forums-template[rel=template]").html().replace('data-src', 'src')) : decodeURIComponent($("#nav-notifications-template[rel=template]").html().replace('data-src', 'src'))); - var notify_menu = $("#nav-" + notifyType + "-menu"); - var notify_loading = $("#nav-" + notifyType + "-loading"); - var notify_count = $("." + notifyType + "-update"); - - if(replace && !followup) { - notify_menu.html(''); - notify_loading.hide(); - } - - $(data).each(function() { - - // do not add a notification if it is already present - if($('#nav-' + notifyType + '-menu .notification[data-b64mid=\'' + this.b64mid + '\']').length) - return true; - - html = notifications_tpl.format(this.notify_link,this.photo,this.name,this.addr,this.message,this.when,this.hclass,this.b64mid,this.notify_id,this.thread_top,this.unseen,this.private_forum, encodeURIComponent(this.mids), this.body); - notify_menu.append(html); - }); - - if(!replace && !followup) { - $("#nav-" + notifyType + "-menu .notification").sort(function(a,b) { - a = new Date(a.dataset.when); - b = new Date(b.dataset.when); - return a > b ? -1 : a < b ? 1 : 0; - }).appendTo('#nav-' + notifyType + '-menu'); - } - - $(document.body).trigger("sticky_kit:recalc"); - $("#nav-" + notifyType + "-menu .notifications-autotime").timeago(); - - if($('#tt-' + notifyType + '-only').hasClass('active')) - $('#nav-' + notifyType + '-menu [data-thread_top=false]').addClass('tt-filter-active'); - - if($('#cn-' + notifyType + '-input').length) { - var filter = $('#cn-' + notifyType + '-input').val().toString().toLowerCase(); - if(filter) { - filter = filter.indexOf('%') == 0 ? filter.substring(1) : filter; - - $('#nav-' + notifyType + '-menu .notification').each(function(i, el) { - var cn = $(el).data('contact_name').toString().toLowerCase(); - var ca = $(el).data('contact_addr').toString().toLowerCase(); - if(cn.indexOf(filter) === -1 && ca.indexOf(filter) === -1) - $(el).addClass('cn-filter-active'); - else - $(el).removeClass('cn-filter-active'); - }); - } - } -} - -function sse_updateNotifications(type, mid) { - - if(type === 'pubs') - return true; - - if(type === 'notify' && (mid !== bParam_mid || sse_type !== 'notify')) - return true; -/* - var count = Number($('.' + type + '-update').html()); - - count--; - - if(count < 1) { - $('.' + type + '-update').html(count); - $('.' + type + '-button').fadeOut(function() { - sse_setNotificationsStatus(); - }); - } - else { - $('.' + type + '-update').html(count); - } -*/ - - $('#nav-' + type + '-menu .notification[data-b64mid=\'' + mid + '\']').fadeOut(function() { - this.remove(); - }); - -} - -function sse_setNotificationsStatus() { - var primary_notifications = ['dm', 'home', 'intros', 'register', 'mail', 'notify', 'files']; - var secondary_notifications = ['network', 'forums', 'all_events', 'pubs']; - var all_notifications = primary_notifications.concat(secondary_notifications); - - var primary_available = false; - var any_available = false; - - all_notifications.forEach(function(type, index) { - if($('.' + type + '-button').css('display') == 'block') { - any_available = true; - if(primary_notifications.indexOf(type) > -1) - primary_available = true; - } - }); - - if(primary_available) { - $('.notifications-btn-icon').removeClass('fa-exclamation-circle'); - $('.notifications-btn-icon').addClass('fa-exclamation-triangle'); - } - else { - $('.notifications-btn-icon').removeClass('fa-exclamation-triangle'); - $('.notifications-btn-icon').addClass('fa-exclamation-circle'); - } - - if(any_available) { - $('.notifications-btn').css('opacity', 1); - $('#no_notifications').hide(); - $('#notifications').show(); - } - else { - $('.notifications-btn').css('opacity', 0.5); - $('#navbar-collapse-1').removeClass('show'); - $('#no_notifications').show(); - $('#notifications').hide(); - } - -} - -function sse_fallback() { - $.get('/sse', function(obj) { - if(! obj) - return; - - console.log('sse fallback'); - console.log(obj); - - sse_handleNotifications(obj, false, false); - }); -} - function makeid(length) { var result = ''; var characters = 'abcdef0123456789'; @@ -2010,3 +1729,4 @@ function makeid(length) { } return result; } + |