From a2fc1be187fef508e304cb90279cb995b765787c Mon Sep 17 00:00:00 2001 From: rabuzarus <> Date: Sat, 16 Jun 2018 13:05:33 +0200 Subject: [PATCH] fix scroll position in stream while ajax update --- composer.json | 3 +- composer.lock | 109 ++++++++++++++++++++++++++++- mod/update_community.php | 4 -- mod/update_display.php | 3 - mod/update_network.php | 4 -- mod/update_notes.php | 4 -- mod/update_profile.php | 4 -- view/js/main.js | 57 ++++++++------- view/templates/head.tpl | 1 + view/theme/frio/templates/head.tpl | 1 + 10 files changed, 142 insertions(+), 48 deletions(-) diff --git a/composer.json b/composer.json index 9668b9341..941464e70 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,8 @@ "npm-asset/jquery-datetimepicker": "^2.4.0", "npm-asset/jgrowl": "^1.4", "npm-asset/fullcalendar": "^3.0.1", - "npm-asset/cropperjs": "1.2.2" + "npm-asset/cropperjs": "1.2.2", + "npm-asset/imagesloaded": "4.1.4" }, "repositories": [ { diff --git a/composer.lock b/composer.lock index dd2665ebb..7ba8fc1cf 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "ab5a551aff0505691c4836d063fc5171", + "content-hash": "4fcae78061a3eb72f91e4fa81e53af56", "packages": [ { "name": "asika/simple-console", @@ -770,6 +770,49 @@ ], "time": "2018-01-03T13:39:39+00:00" }, + { + "name": "npm-asset/ev-emitter", + "version": "1.1.1", + "dist": { + "type": "tar", + "url": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.1.1.tgz", + "reference": null, + "shasum": "8f18b0ce5c76a5d18017f71c0a795c65b9138f2a" + }, + "type": "npm-asset-library", + "extra": { + "npm-asset-bugs": { + "url": "https://github.com/metafizzy/ev-emitter/issues" + }, + "npm-asset-main": "ev-emitter.js", + "npm-asset-directories": { + "test": "test" + }, + "npm-asset-repository": { + "type": "git", + "url": "git+https://github.com/metafizzy/ev-emitter.git" + }, + "npm-asset-scripts": { + "test": "mocha test/test" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David DeSandro" + } + ], + "description": "lil' event emitter", + "homepage": "https://github.com/metafizzy/ev-emitter#readme", + "keywords": [ + "emitter", + "event", + "pubsub" + ], + "time": "2017-07-06T13:46:38+00:00" + }, { "name": "npm-asset/fullcalendar", "version": "3.8.2", @@ -882,6 +925,70 @@ ], "time": "2018-01-30T23:49:01+00:00" }, + { + "name": "npm-asset/imagesloaded", + "version": "4.1.4", + "dist": { + "type": "tar", + "url": "https://registry.npmjs.org/imagesloaded/-/imagesloaded-4.1.4.tgz", + "reference": null, + "shasum": "1376efcd162bb768c34c3727ac89cc04051f3cc7" + }, + "require": { + "npm-asset/ev-emitter": ">=1.0.0,<2.0.0" + }, + "require-dev": { + "npm-asset/chalk": ">=1.1.1,<2.0.0", + "npm-asset/cheerio": ">=0.19.0,<0.20.0", + "npm-asset/gulp": ">=3.9.0,<4.0.0", + "npm-asset/gulp-jshint": ">=1.11.2,<2.0.0", + "npm-asset/gulp-json-lint": ">=0.1.0,<0.2.0", + "npm-asset/gulp-rename": ">=1.2.2,<2.0.0", + "npm-asset/gulp-replace": ">=0.5.4,<0.6.0", + "npm-asset/gulp-requirejs-optimize": "dev-github:metafizzy/gulp-requirejs-optimize", + "npm-asset/gulp-uglify": ">=1.4.2,<2.0.0", + "npm-asset/gulp-util": ">=3.0.7,<4.0.0", + "npm-asset/highlight.js": ">=8.9.1,<9.0.0", + "npm-asset/marked": ">=0.3.5,<0.4.0", + "npm-asset/minimist": ">=1.2.0,<2.0.0", + "npm-asset/transfob": ">=1.0.0,<2.0.0" + }, + "type": "npm-asset-library", + "extra": { + "npm-asset-bugs": { + "url": "https://github.com/desandro/imagesloaded/issues" + }, + "npm-asset-main": "imagesloaded.js", + "npm-asset-directories": { + "test": "test" + }, + "npm-asset-repository": { + "type": "git", + "url": "git://github.com/desandro/imagesloaded.git" + }, + "npm-asset-scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David DeSandro" + } + ], + "description": "JavaScript is all like _You images done yet or what?_", + "homepage": "https://github.com/desandro/imagesloaded", + "keywords": [ + "dom", + "images", + "jquery-plugin", + "loaded", + "ui" + ], + "time": "2018-01-02T16:56:03+00:00" + }, { "name": "npm-asset/jgrowl", "version": "1.4.6", diff --git a/mod/update_community.php b/mod/update_community.php index d64ea5d70..088da0143 100644 --- a/mod/update_community.php +++ b/mod/update_community.php @@ -19,10 +19,6 @@ function update_community_content(App $a) { $text = ''; } - $pattern = "/]*) src=\"([^\"]*)\"/"; - $replace = ""; $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i"; diff --git a/mod/update_display.php b/mod/update_display.php index 48df9797d..4b6d26cb7 100644 --- a/mod/update_display.php +++ b/mod/update_display.php @@ -19,9 +19,6 @@ function update_display_content(App $a) echo "
"; $text = display_content($a, true, $profile_uid); - $pattern = "/]*) src=\"([^\"]*)\"/"; - $replace = ""; diff --git a/mod/update_network.php b/mod/update_network.php index 962701627..6c02e4a8f 100644 --- a/mod/update_network.php +++ b/mod/update_network.php @@ -25,10 +25,6 @@ function update_network_content(App $a) $text = ""; } - $pattern = "/]*) src=\"([^\"]*)\"/"; - $replace = ""; $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i"; diff --git a/mod/update_notes.php b/mod/update_notes.php index 892e71d78..7db60e78e 100644 --- a/mod/update_notes.php +++ b/mod/update_notes.php @@ -32,10 +32,6 @@ function update_notes_content(App $a) { $text = notes_content($a, $profile_uid); - $pattern = "/]*) src=\"([^\"]*)\"/"; - $replace = ""; $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i"; diff --git a/mod/update_profile.php b/mod/update_profile.php index 1a05130e0..984fd7949 100644 --- a/mod/update_profile.php +++ b/mod/update_profile.php @@ -31,10 +31,6 @@ function update_profile_content(App $a) { $text = profile_content($a, $profile_uid); - $pattern = "/]*) src=\"([^\"]*)\"/"; - $replace = ""; $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i"; diff --git a/view/js/main.js b/view/js/main.js index b5043601c..4c55546aa 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -418,6 +418,9 @@ 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; @@ -426,42 +429,42 @@ function liveUpdate(src) { force_update = false; update_item = 0; - // add a new thread - $('.toplevel_item',data).each(function() { - var ident = $(this).attr('id'); + $('.wall-item-body', data).imagesLoaded(function() { + // 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"); - } + // Add new top-level item. + if ($('#' + ident).length == 0 && profile_page == 1) { + $('#' + prev).after($(this)); - $('img',this).each(function() { - $(this).attr('src',$(this).attr('dst')); - }); - $('html').height($('html').height()); - $('#' + ident).replaceWith($(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"); + } - if (typeof id != 'undefined') { - if (commentsOpen) { - showHideComments(id); + $('#' + ident).replaceWith($(this)); + + if (typeof id != 'undefined') { + if (commentsOpen) { + showHideComments(id); + } } } - $('html').height('auto'); - } - prev = ident; + prev = ident; + }); }); callAddonHooks("postprocess_liveupdate"); + // Update the scroll position. + $(window).scrollTop($(window).scrollTop() + $("section").height() - orgHeight); + $('.like-rotator').hide(); if (commentBusy) { commentBusy = false; diff --git a/view/templates/head.tpl b/view/templates/head.tpl index b3dfbc1f4..aadbfcd8e 100644 --- a/view/templates/head.tpl +++ b/view/templates/head.tpl @@ -42,6 +42,7 @@ + diff --git a/view/theme/frio/templates/head.tpl b/view/theme/frio/templates/head.tpl index f4bcabdae..ef1cd810b 100644 --- a/view/theme/frio/templates/head.tpl +++ b/view/theme/frio/templates/head.tpl @@ -66,6 +66,7 @@ +