owncloud/core

View on GitHub
apps/files/js/favoritesfilelist.js

Summary

Maintainability
B
4 hrs
Test Coverage
/*
 * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
 *
 * This file is licensed under the Affero General Public License version 3
 * or later.
 *
 * See the COPYING-README file.
 *
 */

// HACK: this piece needs to be loaded AFTER the files app (for unit tests)
$(document).ready(function() {
    (function(OCA) {
        /**
         * @class OCA.Files.FavoritesFileList
         * @augments OCA.Files.FavoritesFileList
         *
         * @classdesc Favorites file list.
         * Displays the list of files marked as favorites
         *
         * @param $el container element with existing markup for the #controls
         * and a table
         * @param [options] map of options, see other parameters
         */
        var FavoritesFileList = function($el, options) {
            this.initialize($el, options);
        };
        FavoritesFileList.prototype = _.extend({}, OCA.Files.FileList.prototype,
            /** @lends OCA.Files.FavoritesFileList.prototype */ {
            id: 'favorites',
            appName: t('files','Favorites'),

            _clientSideSort: true,
            _allowSelection: false,

            /**
             * @private
             */
            initialize: function($el, options) {
                OCA.Files.FileList.prototype.initialize.apply(this, arguments);
                if (this.initialized) {
                    return;
                }
                OC.Plugins.attach('OCA.Files.FavoritesFileList', this);
            },

            updateEmptyContent: function() {
                var dir = this.getCurrentDirectory();
                if (dir === '/') {
                    // root has special permissions
                    this.$el.find('#emptycontent').toggleClass('hidden', !this.isEmpty);
                    this.$el.find('#filestable thead th').toggleClass('hidden', this.isEmpty);
                }
                else {
                    OCA.Files.FileList.prototype.updateEmptyContent.apply(this, arguments);
                }
            },

            getDirectoryPermissions: function() {
                return OC.PERMISSION_READ | OC.PERMISSION_DELETE;
            },

            updateStorageStatistics: function() {
                // no op because it doesn't have
                // storage info like free space / used space
            },

            reload: function() {
                var tagName = OC.TAG_FAVORITE;
                this.showMask();
                if (this._reloadCall) {
                    this._reloadCall.abort();
                }

                // there is only root
                this._setCurrentDir('/', false);

                this._reloadCall = this.filesClient.getFilteredFiles(
                    {
                        favorite: true
                    },
                    {
                        properties: this._getWebdavProperties()
                    }
                );
                var callBack = this.reloadCallback.bind(this);
                return this._reloadCall.then(callBack, callBack);
            },

            reloadCallback: function(status, result) {
                if (result) {
                    // prepend empty dir info because original handler
                    result.unshift({});

                    for (var i = 0; i < result.length; i++) {
                        /**
                         * Set extraData to file path and name
                         * if the file is not in user's root home directory
                         */
                        if (result[i].path !== '/') {
                            result[i].extraData = result[i].path + '/' + result[i].name;
                        }
                    }
                }

                return OCA.Files.FileList.prototype.reloadCallback.call(this, status, result);
            }
        });

        OCA.Files.FavoritesFileList = FavoritesFileList;
    })(OCA);
});