mirror of https://github.com/nextcloud/server
132 lines
4.0 KiB
JavaScript
132 lines
4.0 KiB
JavaScript
/**
|
|
* Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
|
|
*
|
|
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
|
|
* @author Daniel Calviño Sánchez <danxuliu@gmail.com>
|
|
* @author John Molakvoæ <skjnldsv@protonmail.com>
|
|
* @author Vincent Petry <vincent@nextcloud.com>
|
|
*
|
|
* @license AGPL-3.0-or-later
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
(function() {
|
|
if (!OCA.SystemTags) {
|
|
/**
|
|
* @namespace
|
|
*/
|
|
OCA.SystemTags = {}
|
|
}
|
|
|
|
OCA.SystemTags.App = {
|
|
|
|
initFileList($el) {
|
|
if (this._fileList) {
|
|
return this._fileList
|
|
}
|
|
|
|
const tagsParam = (new URL(window.location.href)).searchParams.get('tags')
|
|
const initialTags = tagsParam ? tagsParam.split(',').map(parseInt) : []
|
|
|
|
this._fileList = new OCA.SystemTags.FileList(
|
|
$el,
|
|
{
|
|
id: 'systemtags',
|
|
fileActions: this._createFileActions(),
|
|
config: OCA.Files.App.getFilesConfig(),
|
|
// The file list is created when a "show" event is handled,
|
|
// so it should be marked as "shown" like it would have been
|
|
// done if handling the event with the file list already
|
|
// created.
|
|
shown: true,
|
|
systemTagIds: initialTags,
|
|
}
|
|
)
|
|
|
|
this._fileList.appName = t('systemtags', 'Tags')
|
|
return this._fileList
|
|
},
|
|
|
|
removeFileList() {
|
|
if (this._fileList) {
|
|
this._fileList.$fileList.empty()
|
|
}
|
|
},
|
|
|
|
_createFileActions() {
|
|
// inherit file actions from the files app
|
|
const fileActions = new OCA.Files.FileActions()
|
|
// note: not merging the legacy actions because legacy apps are not
|
|
// compatible with the sharing overview and need to be adapted first
|
|
fileActions.registerDefaultActions()
|
|
fileActions.merge(OCA.Files.fileActions)
|
|
|
|
if (!this._globalActionsInitialized) {
|
|
// in case actions are registered later
|
|
this._onActionsUpdated = _.bind(this._onActionsUpdated, this)
|
|
OCA.Files.fileActions.on('setDefault.app-systemtags', this._onActionsUpdated)
|
|
OCA.Files.fileActions.on('registerAction.app-systemtags', this._onActionsUpdated)
|
|
this._globalActionsInitialized = true
|
|
}
|
|
|
|
// when the user clicks on a folder, redirect to the corresponding
|
|
// folder in the files app instead of opening it directly
|
|
fileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function(filename, context) {
|
|
OCA.Files.App.setActiveView('files', { silent: true })
|
|
OCA.Files.App.fileList.changeDirectory(OC.joinPaths(context.$file.attr('data-path'), filename), true, true)
|
|
})
|
|
fileActions.setDefault('dir', 'Open')
|
|
return fileActions
|
|
},
|
|
|
|
_onActionsUpdated(ev) {
|
|
if (!this._fileList) {
|
|
return
|
|
}
|
|
|
|
if (ev.action) {
|
|
this._fileList.fileActions.registerAction(ev.action)
|
|
} else if (ev.defaultAction) {
|
|
this._fileList.fileActions.setDefault(
|
|
ev.defaultAction.mime,
|
|
ev.defaultAction.name
|
|
)
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Destroy the app
|
|
*/
|
|
destroy() {
|
|
OCA.Files.fileActions.off('setDefault.app-systemtags', this._onActionsUpdated)
|
|
OCA.Files.fileActions.off('registerAction.app-systemtags', this._onActionsUpdated)
|
|
this.removeFileList()
|
|
this._fileList = null
|
|
delete this._globalActionsInitialized
|
|
},
|
|
}
|
|
|
|
})()
|
|
|
|
window.addEventListener('DOMContentLoaded', function() {
|
|
$('#app-content-systemtagsfilter').on('show', function(e) {
|
|
OCA.SystemTags.App.initFileList($(e.target))
|
|
})
|
|
$('#app-content-systemtagsfilter').on('hide', function() {
|
|
OCA.SystemTags.App.removeFileList()
|
|
})
|
|
})
|