Merge pull request #5305 from nextcloud/add-quota-to-files-view

Add quota to the files view
This commit is contained in:
Morris Jobke 2017-06-13 12:19:27 -05:00 committed by GitHub
commit 666e4de55f
8 changed files with 93 additions and 8 deletions

View File

@ -108,6 +108,10 @@
.nav-icon-trashbin {
background-image: url('../img/delete.svg?v=1');
}
/* no icon for the quota bar */
.nav-icon-quota {
padding-left: 15px !important;
}
#app-navigation .nav-files a.nav-icon-files {
width: auto;
@ -747,3 +751,37 @@ table.dragshadow td.size {
#filestable tbody tr.canDrop {
background-color: rgba(255, 255, 140, 1);
}
#quota {
margin: 0 !important;
border: none;
border-radius: 0;
position: fixed !important;
bottom: 44px;
width: inherit !important;
background-color: #fff;
border-right: 1px solid #eee;
z-index:1;
.quota-container {
height: 5px;
border-radius: 3px;
div {
height: 100%;
background-color: $color-primary;
}
}
}
/* increase the padding of the last item to not hide below the quota item */
.app-files #app-navigation > ul li:nth-last-child(1) {
margin-bottom: 44px;
}
#quotatext {
padding: 0;
height: 30px;
line-height: 30px;
}

View File

@ -108,6 +108,10 @@
// trigger URL change event handlers
this._onPopState(urlParams);
$('#quota.has-tooltip').tooltip({
placement: 'top'
});
this._debouncedPersistShowHiddenFilesState = _.debounce(this._persistShowHiddenFilesState, 1200);
},

View File

@ -123,7 +123,9 @@
_onClickItem: function(ev) {
var $target = $(ev.target);
var itemId = $target.closest('li').attr('data-id');
this.setActiveItem(itemId);
if (!_.isUndefined(itemId)) {
this.setActiveItem(itemId);
}
ev.preventDefault();
}
};

View File

@ -41,6 +41,7 @@ use OCP\IUserSession;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use OCP\Files\Folder;
use OCP\App\IAppManager;
use Symfony\Component\EventDispatcher\GenericEvent;
/**
* Class ViewController
@ -174,6 +175,17 @@ class ViewController extends Controller {
});
$nav->assign('navigationItems', $navItems);
$nav->assign('usage', \OC_Helper::humanFileSize($storageInfo['used']));
if ($storageInfo['quota'] === \OCP\Files\FileInfo::SPACE_UNLIMITED) {
$totalSpace = $this->l10n->t('Unlimited');
} else {
$totalSpace = \OC_Helper::humanFileSize($storageInfo['total']);
}
$nav->assign('total_space', $totalSpace);
$nav->assign('quota', $storageInfo['quota']);
$nav->assign('usage_relative', $storageInfo['relative']);
$contentItems = [];
// render the container content for every navigation item
@ -188,7 +200,8 @@ class ViewController extends Controller {
$contentItems[] = $contentItem;
}
$this->eventDispatcher->dispatch('OCA\Files::loadAdditionalScripts');
$event = new GenericEvent(null, ['hiddenFields' => []]);
$this->eventDispatcher->dispatch('OCA\Files::loadAdditionalScripts', $event);
$params = [];
$params['usedSpacePercent'] = (int)$storageInfo['relative'];
@ -204,6 +217,7 @@ class ViewController extends Controller {
$params['fileNotFound'] = $fileNotFound ? 1 : 0;
$params['appNavigation'] = $nav;
$params['appContents'] = $contentItems;
$params['hiddenFields'] = $event->getArgument('hiddenFields');
$response = new TemplateResponse(
$this->appName,

View File

@ -1,5 +1,23 @@
<div id="app-navigation">
<ul class="with-icon">
<li id="quota" class="section <?php
if ($_['quota'] !== \OCP\Files\FileInfo::SPACE_UNLIMITED) {
?>has-tooltip" title="<?php p($_['usage_relative'] . '%');
} ?>">
<a href="#" class="nav-icon-quota svg">
<p id="quotatext"><?php
if ($_['quota'] !== \OCP\Files\FileInfo::SPACE_UNLIMITED) {
p($l->t('%s of %s used', [$_['usage'], $_['total_space']]));
} else {
p($l->t('%s used', [$_['usage']]));
} ?></p>
<div class="quota-container">
<div style="width:<?php p($_['usage_relative']);?>%"
<?php if($_['usage_relative'] > 80): ?>class="quota-warning"<?php endif; ?>>
</div>
</div>
</a>
</li>
<?php foreach ($_['navigationItems'] as $item) { ?>
<li data-id="<?php p($item['id']) ?>" class="nav-<?php p($item['id']) ?>">
<a href="<?php p(isset($item['href']) ? $item['href'] : '#') ?>"

View File

@ -21,3 +21,7 @@
<input type="hidden" name="defaultFileSortingDirection" id="defaultFileSortingDirection" value="<?php p($_['defaultFileSortingDirection']) ?>" />
<input type="hidden" name="showHiddenFiles" id="showHiddenFiles" value="<?php p($_['showHiddenFiles']); ?>" />
<?php endif;
foreach ($_['hiddenFields'] as $name => $value) {?>
<input type="hidden" name="<?php p($name) ?>" id="<?php p($name) ?>" value="<?php p($value) ?>" />
<?php }

View File

@ -107,6 +107,9 @@ class ViewControllerTest extends TestCase {
->expects($this->once())
->method('getStorageInfo')
->will($this->returnValue([
'used' => 123,
'quota' => 100,
'total' => 100,
'relative' => 123,
'owner' => 'MyName',
'ownerDisplayName' => 'MyDisplayName',
@ -125,6 +128,10 @@ class ViewControllerTest extends TestCase {
->will($this->returnArgument(2));
$nav = new Template('files', 'appnavigation');
$nav->assign('usage_relative', 123);
$nav->assign('usage', '123 B');
$nav->assign('quota', 100);
$nav->assign('total_space', '100 B');
$nav->assign('navigationItems', [
[
'id' => 'files',
@ -256,6 +263,7 @@ class ViewControllerTest extends TestCase {
'content' => null,
],
],
'hiddenFields' => [],
]
);
$policy = new Http\ContentSecurityPolicy();

View File

@ -20,20 +20,17 @@
display: none;
}
#app-navigation > ul {
padding-bottom: 44px;
}
/* move Deleted Files to bottom of sidebar */
.nav-trashbin {
position: fixed !important;
bottom: 44px;
bottom: 88px;
width: inherit !important;
background-color: #fff;
border-right: 1px solid #eee;
margin-bottom: 0px !important;
}
/* double padding to account for Deleted files entry, issue with Firefox */
.app-files #app-navigation > ul li:nth-last-child(2) {
margin-bottom: 44px;
margin-bottom: 88px;
}