summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2017-06-13 12:19:27 -0500
committerGitHub <noreply@github.com>2017-06-13 12:19:27 -0500
commit666e4de55fa535377a8c733f40b4f9881f475b82 (patch)
treeda31f16b8a7449e866886a144576c7c60cdddc9f
parent906b2402b4fe0fe558a466d55390bfac91025c51 (diff)
parent4a256aa6e4fc614a69f1a68504ac9347a03828b1 (diff)
downloadnextcloud-server-666e4de55fa535377a8c733f40b4f9881f475b82.tar.gz
nextcloud-server-666e4de55fa535377a8c733f40b4f9881f475b82.zip
Merge pull request #5305 from nextcloud/add-quota-to-files-view
Add quota to the files view
-rw-r--r--apps/files/css/files.scss38
-rw-r--r--apps/files/js/app.js4
-rw-r--r--apps/files/js/navigation.js4
-rw-r--r--apps/files/lib/Controller/ViewController.php16
-rw-r--r--apps/files/templates/appnavigation.php18
-rw-r--r--apps/files/templates/index.php4
-rw-r--r--apps/files/tests/Controller/ViewControllerTest.php8
-rw-r--r--apps/files_trashbin/css/trash.css9
8 files changed, 93 insertions, 8 deletions
diff --git a/apps/files/css/files.scss b/apps/files/css/files.scss
index 579cf36e15b..5f32916650d 100644
--- a/apps/files/css/files.scss
+++ b/apps/files/css/files.scss
@@ -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;
+}
diff --git a/apps/files/js/app.js b/apps/files/js/app.js
index d46a0b8f9df..47011d23f44 100644
--- a/apps/files/js/app.js
+++ b/apps/files/js/app.js
@@ -108,6 +108,10 @@
// trigger URL change event handlers
this._onPopState(urlParams);
+ $('#quota.has-tooltip').tooltip({
+ placement: 'top'
+ });
+
this._debouncedPersistShowHiddenFilesState = _.debounce(this._persistShowHiddenFilesState, 1200);
},
diff --git a/apps/files/js/navigation.js b/apps/files/js/navigation.js
index 83cd556c89a..d213d0467b6 100644
--- a/apps/files/js/navigation.js
+++ b/apps/files/js/navigation.js
@@ -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();
}
};
diff --git a/apps/files/lib/Controller/ViewController.php b/apps/files/lib/Controller/ViewController.php
index f7a4318e595..bfeb2cafcf6 100644
--- a/apps/files/lib/Controller/ViewController.php
+++ b/apps/files/lib/Controller/ViewController.php
@@ -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,
diff --git a/apps/files/templates/appnavigation.php b/apps/files/templates/appnavigation.php
index 9c79f806713..bbd78079d39 100644
--- a/apps/files/templates/appnavigation.php
+++ b/apps/files/templates/appnavigation.php
@@ -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'] : '#') ?>"
diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
index 1670ccfd138..b49684643bb 100644
--- a/apps/files/templates/index.php
+++ b/apps/files/templates/index.php
@@ -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 }
diff --git a/apps/files/tests/Controller/ViewControllerTest.php b/apps/files/tests/Controller/ViewControllerTest.php
index 2e497405a4d..db86e0037ef 100644
--- a/apps/files/tests/Controller/ViewControllerTest.php
+++ b/apps/files/tests/Controller/ViewControllerTest.php
@@ -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();
diff --git a/apps/files_trashbin/css/trash.css b/apps/files_trashbin/css/trash.css
index f150e557231..f1096d5924c 100644
--- a/apps/files_trashbin/css/trash.css
+++ b/apps/files_trashbin/css/trash.css
@@ -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;
}