summaryrefslogtreecommitdiffstats
path: root/apps/files
diff options
context:
space:
mode:
authorVincent Petry <vincent@nextcloud.com>2022-01-11 12:17:23 +0100
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2022-01-12 13:56:58 +0000
commit672669ca98b1299821fc52d5fd393016b8a3b87f (patch)
tree0ffb709fe9d0c5e7fef1d7240803559416e49cc0 /apps/files
parentb8957cd6f3b684a676047e90783db4921cd7ed93 (diff)
downloadnextcloud-server-672669ca98b1299821fc52d5fd393016b8a3b87f.tar.gz
nextcloud-server-672669ca98b1299821fc52d5fd393016b8a3b87f.zip
Trigger "changeDirectory" even on URL change
When using the browser back button or clicking on sections on the left sidebar (like favorites), the "changeDirectory" jQuery event did not get called, so apps like recommendations would not notice the directory change. This fixes the issue by also setting changeUrl to true when the file list's directory got changed as a result from a URL change. Added optional changedThroughUrl argument to make sure the event recipient knows if the change was done through a URL change and make it possible prevent a loop in the onDirectoryChange handler that actually changes the URL when the origin was already from a URL change. Signed-off-by: Vincent Petry <vincent@nextcloud.com>
Diffstat (limited to 'apps/files')
-rw-r--r--apps/files/js/app.js10
-rw-r--r--apps/files/js/filelist.js13
2 files changed, 14 insertions, 9 deletions
diff --git a/apps/files/js/app.js b/apps/files/js/app.js
index 8015f395b74..a0f030c4000 100644
--- a/apps/files/js/app.js
+++ b/apps/files/js/app.js
@@ -306,7 +306,7 @@
* Event handler for when an app notified that its directory changed
*/
_onDirectoryChanged: function(e) {
- if (e.dir) {
+ if (e.dir && !e.changedThroughUrl) {
this._changeUrl(this.navigation.getActiveItem(), e.dir, e.fileId);
}
},
@@ -376,9 +376,11 @@
params.fileid = fileId;
}
var currentParams = OC.Util.History.parseUrlQuery();
- if (currentParams.dir === params.dir && currentParams.view === params.view && currentParams.fileid !== params.fileid) {
- // if only fileid changed or was added, replace instead of push
- OC.Util.History.replaceState(this._makeUrlParams(params));
+ if (currentParams.dir === params.dir && currentParams.view === params.view) {
+ if (currentParams.fileid !== params.fileid) {
+ // if only fileid changed or was added, replace instead of push
+ OC.Util.History.replaceState(this._makeUrlParams(params));
+ }
} else {
OC.Util.History.pushState(this._makeUrlParams(params));
}
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index c14526fe686..488e956ad08 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -768,7 +768,7 @@
if( (this._currentDirectory || this.$el.find('#dir').val()) && currentDir === e.dir) {
return;
}
- this.changeDirectory(e.dir, false, true);
+ this.changeDirectory(e.dir, true, true, undefined, true);
}
},
@@ -1912,15 +1912,16 @@
* @param {boolean} [changeUrl=true] if the URL must not be changed (defaults to true)
* @param {boolean} [force=false] set to true to force changing directory
* @param {string} [fileId] optional file id, if known, to be appended in the URL
+ * @param {bool} [changedThroughUrl=false] true if the dir was set through a URL change
*/
- changeDirectory: function(targetDir, changeUrl, force, fileId) {
+ changeDirectory: function(targetDir, changeUrl, force, fileId, changedThroughUrl) {
var self = this;
var currentDir = this.getCurrentDirectory();
targetDir = targetDir || '/';
if (!force && currentDir === targetDir) {
return;
}
- this._setCurrentDir(targetDir, changeUrl, fileId);
+ this._setCurrentDir(targetDir, changeUrl, fileId, changedThroughUrl);
// discard finished uploads list, we'll get it through a regular reload
this._uploads = {};
@@ -1955,8 +1956,9 @@
* @param targetDir directory to display
* @param changeUrl true to also update the URL, false otherwise (default)
* @param {string} [fileId] file id
+ * @param {bool} changedThroughUrl true if the dir was set through a URL change
*/
- _setCurrentDir: function(targetDir, changeUrl, fileId) {
+ _setCurrentDir: function(targetDir, changeUrl, fileId, changedThroughUrl) {
targetDir = targetDir.replace(/\\/g, '/');
if (!this._isValidPath(targetDir)) {
targetDir = '/';
@@ -1988,6 +1990,7 @@
if (fileId) {
params.fileId = fileId;
}
+ params.changedThroughUrl = changedThroughUrl
this.$el.trigger(jQuery.Event('changeDirectory', params));
}
this.breadcrumb.setDirectory(this.getCurrentDirectory());
@@ -2089,7 +2092,7 @@
if (status === 401) {
// We are not authentificated, so reload the page so that we get
// redirected to the login page while saving the current url.
- location.reload();
+ location.reload();
}
// Firewall Blocked request?