diff options
-rw-r--r-- | apps/files/css/files.css | 23 | ||||
-rw-r--r-- | apps/files/service/tagservice.php | 25 | ||||
-rw-r--r-- | apps/files/templates/list.php | 2 | ||||
-rw-r--r-- | core/css/apps.css | 1 | ||||
-rw-r--r-- | core/css/header.css | 25 | ||||
-rw-r--r-- | core/css/jquery-ui-fixes.css | 2 | ||||
-rw-r--r-- | core/css/jquery.ocdialog.css | 2 | ||||
-rw-r--r-- | core/css/mobile.css | 4 | ||||
-rw-r--r-- | core/css/styles.css | 30 | ||||
-rw-r--r-- | core/search/css/results.css | 8 | ||||
-rw-r--r-- | core/search/js/search.js | 9 | ||||
-rw-r--r-- | core/templates/exception.php | 2 | ||||
-rw-r--r-- | core/templates/installation.php | 2 | ||||
-rw-r--r-- | core/templates/layout.guest.php | 8 | ||||
-rw-r--r-- | core/templates/layout.user.php | 25 | ||||
-rw-r--r-- | core/templates/message.html | 2 | ||||
-rw-r--r-- | lib/private/tags.php | 5 | ||||
-rw-r--r-- | settings/js/apps.js | 15 | ||||
-rw-r--r-- | settings/templates/apps.php | 4 |
19 files changed, 88 insertions, 106 deletions
diff --git a/apps/files/css/files.css b/apps/files/css/files.css index d09df9d795d..d546f346ce0 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -625,26 +625,3 @@ table.dragshadow td.size { .mask.transparent{ opacity: 0; } - -.nofilterresults { - font-size: 16px; - color: #888; - position: absolute; - text-align: center; - top: 30%; - width: 100%; -} -.nofilterresults h2 { - font-size: 22px; - margin-bottom: 10px; -} -.nofilterresults [class^="icon-"], -.nofilterresults [class*=" icon-"] { - background-size: 64px; - height: 64px; - width: 64px; - margin: 0 auto 15px; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); - opacity: .5; -} diff --git a/apps/files/service/tagservice.php b/apps/files/service/tagservice.php index fe26838552a..cdd51d27f4a 100644 --- a/apps/files/service/tagservice.php +++ b/apps/files/service/tagservice.php @@ -48,7 +48,7 @@ class TagService { * @param string $path path * @param array $tags array of tags * @return array list of tags - * @throws \OCP\NotFoundException if the file does not exist + * @throws \OCP\Files\NotFoundException if the file does not exist */ public function updateFileTags($path, $tags) { $fileId = $this->homeFolder->get($path)->getId(); @@ -74,30 +74,27 @@ class TagService { } /** - * Updates the tags of the specified file path. - * The passed tags are absolute, which means they will - * replace the actual tag selection. + * Get all files for the given tag * * @param array $tagName tag name to filter by * @return FileInfo[] list of matching files * @throws \Exception if the tag does not exist */ public function getFilesByTag($tagName) { - $nodes = $this->homeFolder->searchByTag( - $tagName, $this->userSession->getUser()->getUId() - ); + try { + $fileIds = $this->tagger->getIdsForTag($tagName); + } catch (\Exception $e) { + return []; + } + $fileInfos = []; - foreach ($nodes as $node) { - try { + foreach ($fileIds as $fileId) { + $nodes = $this->homeFolder->getById((int) $fileId); + foreach ($nodes as $node) { /** @var \OC\Files\Node\Node $node */ $fileInfos[] = $node->getFileInfo(); - } catch (\Exception $e) { - // FIXME Should notify the user, when this happens - // Can not get FileInfo, maybe the connection to the external - // storage is interrupted. } } - return $fileInfos; } } diff --git a/apps/files/templates/list.php b/apps/files/templates/list.php index f2292bfae36..47f15d8a148 100644 --- a/apps/files/templates/list.php +++ b/apps/files/templates/list.php @@ -57,7 +57,7 @@ <p><?php p($l->t('Upload some content or sync with your devices!')); ?></p> </div> -<div class="nofilterresults hidden"> +<div class="nofilterresults emptycontent hidden"> <div class="icon-search"></div> <h2><?php p($l->t('No entries found in this folder')); ?></h2> <p></p> diff --git a/core/css/apps.css b/core/css/apps.css index a460bcf46c8..20822f8b398 100644 --- a/core/css/apps.css +++ b/core/css/apps.css @@ -524,6 +524,5 @@ button.loading { em { font-style: normal; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); opacity: .5; } diff --git a/core/css/header.css b/core/css/header.css index b4e074a5e44..f249be8c4b4 100644 --- a/core/css/header.css +++ b/core/css/header.css @@ -95,7 +95,6 @@ .menutoggle .header-appname, .menutoggle .icon-caret { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)"; - filter: alpha(opacity=75); opacity: .75; } .menutoggle:hover .header-appname, @@ -105,7 +104,6 @@ .menutoggle.active .header-appname, .menutoggle.active .icon-caret { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); opacity: 1; } @@ -186,7 +184,6 @@ #navigation a span { /* 50% opacity when inactive */ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); opacity: .5; } #navigation a:hover img, #navigation a:focus img, @@ -195,7 +192,6 @@ #navigation a.active span { /* full opacity for the active app or when hovered/focused */ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); opacity: 1; } @@ -209,7 +205,6 @@ /* Apps management */ #apps-management { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; - filter: alpha(opacity=60); opacity: .6; min-height: initial; height: initial; @@ -228,7 +223,6 @@ } #navigation .app-loading .app-icon { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; - filter: alpha(opacity=10); opacity: .1; } @@ -278,8 +272,17 @@ cursor: pointer; } #expand:hover, #expand:focus, #expand:active { color:#fff; } -#expand img { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity:.7; margin-bottom:-2px; } -#expand:hover img, #expand:focus img, #expand:active img { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; } +#expand img { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + opacity: .7; + margin-bottom: -2px; +} +#expand:hover img, +#expand:focus img, +#expand:active img { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity:1; +} #expanddiv { position: absolute; right: 0; @@ -297,7 +300,6 @@ color: #fff; padding: 4px 12px 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; - filter: alpha(opacity=70); opacity: .7; -moz-box-sizing: border-box; box-sizing: border-box; @@ -306,8 +308,9 @@ margin-bottom: -3px; margin-right: 6px; } - #expanddiv a:hover, #expanddiv a:focus, #expanddiv a:active { + #expanddiv a:hover, + #expanddiv a:focus, + #expanddiv a:active { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); opacity: 1; } diff --git a/core/css/jquery-ui-fixes.css b/core/css/jquery-ui-fixes.css index 0bfa9479893..7e0cdd18204 100644 --- a/core/css/jquery-ui-fixes.css +++ b/core/css/jquery-ui-fixes.css @@ -128,13 +128,11 @@ .ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .5; - filter: Alpha(Opacity=50); } .ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .2; - filter: Alpha(Opacity=20); border-radius: 5px; } diff --git a/core/css/jquery.ocdialog.css b/core/css/jquery.ocdialog.css index 93930bf435f..bada0b73a5e 100644 --- a/core/css/jquery.ocdialog.css +++ b/core/css/jquery.ocdialog.css @@ -52,7 +52,7 @@ .oc-dialog-dim { background-color: #000; - opacity: .20;filter:Alpha(Opacity=20); + opacity: .20; z-index: 999; position: fixed; top: 0; left: 0; diff --git a/core/css/mobile.css b/core/css/mobile.css index a98547596b2..662c583efbc 100644 --- a/core/css/mobile.css +++ b/core/css/mobile.css @@ -109,14 +109,10 @@ z-index: 149; background-color: rgba(255, 255, 255, .7); cursor: pointer; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; - filter: alpha(opacity=60); opacity: .6; } #app-navigation-toggle:hover, #app-navigation-toggle:focus { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); opacity: 1; } diff --git a/core/css/styles.css b/core/css/styles.css index 74df29140a9..12b6bbe9efb 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -133,7 +133,8 @@ input[type="url"]:hover, input[type="url"]:focus, input[type="url"]:active, input[type="time"]:hover, input[type="time"]:focus, input[type="time"]:active, textarea:hover, textarea:focus, textarea:active { color: #333; - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; } input[type="checkbox"] { margin:0; padding:0; height:auto; width:auto; } input[type="checkbox"]:hover+label, input[type="checkbox"]:focus+label { color:#111 !important; } @@ -243,7 +244,8 @@ textarea:disabled { background: #fff url('../img/actions/search.svg') no-repeat .5em center; border: 0; border-radius: 2em; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity: .7; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + opacity: .7; margin-top: 6px; float: right; } @@ -324,7 +326,8 @@ input[type="submit"].enabled { overflow-x: auto; } -#emptycontent { +#emptycontent, +.emptycontent { font-size: 16px; color: #888; position: absolute; @@ -332,18 +335,20 @@ input[type="submit"].enabled { top: 30%; width: 100%; } -#emptycontent h2 { +#emptycontent h2, +.emptycontent h2 { font-size: 22px; margin-bottom: 10px; } #emptycontent [class^="icon-"], -#emptycontent [class*=" icon-"] { +.emptycontent [class^="icon-"], +#emptycontent [class*=" icon-"], +.emptycontent [class*=" icon-"] { background-size: 64px; height: 64px; width: 64px; margin: 0 auto 15px; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); opacity: .5; } @@ -368,7 +373,6 @@ input[type="submit"].enabled { text-align: center; color: #ccc; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; - filter: alpha(opacity=60); opacity: .6; } /* overrides another !important statement that sets this to unreadable black */ @@ -468,7 +472,6 @@ input[name='password-clone'] { left: 16px; top: 22px; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; - filter: alpha(opacity=30); opacity: .3; } #adminpass-icon, #password-icon { @@ -572,7 +575,6 @@ label.infield { } #show:checked + label, #dbpassword:checked + label, #personal-show:checked + label { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; - filter: alpha(opacity=80); opacity: .8; } #show + label, #dbpassword + label, #personal-show + label { @@ -583,7 +585,6 @@ label.infield { background-repeat: no-repeat; background-position: center; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; - filter: alpha(opacity=30); opacity: .3; } #pass2, input[name="personal-password-clone"] { @@ -675,7 +676,6 @@ label.infield { } #body-login .warning legend { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); opacity: 1; } #body-login a.warning { @@ -763,8 +763,7 @@ label.infield { top: 0; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=90)"; - filter:alpha(opacity=90); + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)"; opacity: .9; } #notification span, #update-notification span { @@ -775,7 +774,6 @@ label.infield { tr .action:not(.permanent), .selectedActions a { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); opacity: 0; } tr:hover .action, @@ -783,7 +781,6 @@ tr:focus .action, tr .action.permanent, .selectedActions a { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); opacity: .5; } tr .action { @@ -792,7 +789,6 @@ tr .action { } .header-action { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; - filter: alpha(opacity=80); opacity: .8; } tr:hover .action:hover, @@ -802,7 +798,6 @@ tr:focus .action:focus, .header-action:hover, .header-action:focus { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); opacity: 1; } tbody tr:hover, @@ -981,7 +976,6 @@ div.crumb:focus, div.crumb a:focus, div.crumb:active { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; - filter:alpha(opacity=70); opacity:.7; } diff --git a/core/search/css/results.css b/core/search/css/results.css index 04f7b6dcb99..b62f7df3fe3 100644 --- a/core/search/css/results.css +++ b/core/search/css/results.css @@ -18,23 +18,23 @@ box-sizing: content-box; } -#searchresults #status { +#searchresults .status { background-color: rgba(255, 255, 255, .85); height: 12px; padding: 28px 0 28px 56px; font-size: 18px; } -.has-favorites:not(.hidden) ~ #searchresults #status { +.has-favorites:not(.hidden) ~ #searchresults .status { padding-left: 102px; } -#searchresults #status.fixed { +#searchresults .status.fixed { position: fixed; bottom: 0; width: 100%; z-index: 10; } -#searchresults #status .spinner { +#searchresults .status .spinner { height: 16px; width: 16px; vertical-align: middle; diff --git a/core/search/js/search.js b/core/search/js/search.js index c7feeacf42e..b49a4b8c6eb 100644 --- a/core/search/js/search.js +++ b/core/search/js/search.js @@ -125,6 +125,7 @@ //show spinner $searchResults.removeClass('hidden'); + $status.addClass('status'); $status.html(t('core', 'Searching other places')+'<img class="spinner" alt="search in progress" src="'+OC.webroot+'/core/img/loading.gif" />'); // do the actual search query @@ -209,8 +210,12 @@ var count = $searchResults.find('tr.result').length; $status.data('count', count); if (count === 0) { - $status.text(t('core', 'No search result in other places')); + $status.addClass('emptycontent').removeClass('status'); + $status.html(''); + $status.append('<div class="icon-search"></div>'); + $status.append('<h2>' + t('core', 'No search result in other places') + '</h2>'); } else { + $status.removeClass('emptycontent').addClass('status'); $status.text(n('core', '{count} search result in other places', '{count} search results in other places', count, {count:count})); } } @@ -383,4 +388,4 @@ OC.search.customResults = {}; /** * @deprecated use get/setRenderer() instead */ -OC.search.resultTypes = {};
\ No newline at end of file +OC.search.resultTypes = {}; diff --git a/core/templates/exception.php b/core/templates/exception.php index 9ddc0f94d65..899ea29456c 100644 --- a/core/templates/exception.php +++ b/core/templates/exception.php @@ -9,7 +9,7 @@ style('core', ['styles', 'header']); <p><?php p($l->t('The server encountered an internal error and was unable to complete your request.')) ?></p> <p><?php p($l->t('Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.')) ?></p> <p><?php p($l->t('More details can be found in the server log.')) ?></p> - <br /> + <br> <h2><strong><?php p($l->t('Technical details')) ?></strong></h2> <ul> diff --git a/core/templates/installation.php b/core/templates/installation.php index 54c490c544e..96e6119cad3 100644 --- a/core/templates/installation.php +++ b/core/templates/installation.php @@ -10,7 +10,7 @@ script('core', [ <input type='hidden' id='hasOracle' value='<?php p($_['hasOracle']) ?>'> <input type='hidden' id='hasMSSQL' value='<?php p($_['hasMSSQL']) ?>'> <form action="index.php" method="post"> -<input type="hidden" name="install" value="true" /> +<input type="hidden" name="install" value="true"> <?php if(count($_['errors']) > 0): ?> <fieldset class="warning"> <legend><strong><?php p($l->t('Error'));?></strong></legend> diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php index c494e32a7fc..0557e89ce71 100644 --- a/core/templates/layout.guest.php +++ b/core/templates/layout.guest.php @@ -22,10 +22,10 @@ </head> <body id="<?php p($_['bodyid']);?>"> <?php include('layout.noscript.warning.php'); ?> - <div class="wrapper"><!-- for sticky footer --> - <div class="v-align"><!-- vertically centred box --> + <div class="wrapper"> + <div class="v-align"> <?php if ($_['bodyid'] === 'body-login' ): ?> - <header> + <header role="banner"> <div id="header"> <div class="logo svg"> <h1 class="hidden-visually"> @@ -40,7 +40,7 @@ <div class="push"></div><!-- for sticky footer --> </div> </div> - <footer> + <footer role="contentinfo"> <p class="info"> <?php print_unescaped($theme->getLongFooter()); ?> </p> diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index 9667aa72ddb..138545f2ccc 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -35,7 +35,7 @@ <div id="update-notification" style="display: inline;"><a href="<?php print_unescaped($_['updateLink']); ?>"><?php p($l->t('%s is available. Get more information on how to update.', array($_['updateVersion']))); ?></a></div> <?php endif; ?> </div> - <header><div id="header"> + <header role="banner"><div id="header"> <a href="<?php print_unescaped(link_to('', 'index.php')); ?>" title="" id="owncloud" tabindex="-1"> <div class="logo-icon svg"> @@ -65,12 +65,12 @@ <div class="avatardiv<?php if ($_['userAvatarSet']) { print_unescaped(' avatardiv-shown"'); } else { print_unescaped('" style="display: none"'); } ?>> <?php if ($_['userAvatarSet']): ?> <img src="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 32]));?>?requesttoken=<?php p(urlencode($_['requesttoken'])); ?>" - alt="" /> + alt=""> <?php endif; ?> </div> <?php endif; ?> <span id="expandDisplayName"><?php p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span> - <img class="svg" alt="" src="<?php print_unescaped(image_path('', 'actions/caret.svg')); ?>" /> + <img class="svg" alt="" src="<?php print_unescaped(image_path('', 'actions/caret.svg')); ?>"> </div> <div id="expanddiv"> <ul> @@ -93,24 +93,24 @@ </div> </div> - <form class="searchbox" action="#" method="post"> + <form class="searchbox" action="#" method="post" role="search"> <label for="searchbox" class="hidden-visually"> <?php p($l->t('Search'));?> </label> <input id="searchbox" class="svg" type="search" name="query" value="<?php if(isset($_POST['query'])) {p($_POST['query']);};?>" - autocomplete="off" tabindex="3" /> + autocomplete="off" tabindex="3"> </form> </div></header> - <nav><div id="navigation"> + <nav role="navigation"><div id="navigation"> <div id="apps" class="svg"> <ul> <?php foreach($_['navigation'] as $entry): ?> <li data-id="<?php p($entry['id']); ?>"> <a href="<?php print_unescaped($entry['href']); ?>" title="" <?php if( $entry['active'] ): ?> class="active"<?php endif; ?>> - <img class="app-icon svg" alt="" src="<?php print_unescaped($entry['icon']); ?>"/> + <img class="app-icon svg" alt="" src="<?php print_unescaped($entry['icon']); ?>"> <div class="icon-loading-dark" style="display:none;"></div> <span> <?php p($entry['name']); ?> @@ -118,13 +118,14 @@ </a> </li> <?php endforeach; ?> - - <!-- show "More apps" link to app administration directly in app navigation, as last entry --> - <?php if(OC_User::isAdminUser(OC_User::getUser())): ?> + <?php + /* show "More apps" link to app administration directly in app navigation, as last entry */ + if(OC_User::isAdminUser(OC_User::getUser())): + ?> <li id="apps-management"> <a href="<?php print_unescaped(OC_Helper::linkToRoute('settings_apps')); ?>" title="" <?php if( $_['appsmanagement_active'] ): ?> class="active"<?php endif; ?>> - <img class="app-icon svg" alt="" src="<?php print_unescaped(OC_Helper::imagePath('settings', 'apps.svg')); ?>"/> + <img class="app-icon svg" alt="" src="<?php print_unescaped(OC_Helper::imagePath('settings', 'apps.svg')); ?>"> <div class="icon-loading-dark" style="display:none;"></div> <span> <?php p($l->t('Apps')); ?> @@ -138,7 +139,7 @@ </div></nav> <div id="content-wrapper"> - <div id="content" class="app-<?php p($_['appid']) ?>"> + <div id="content" class="app-<?php p($_['appid']) ?>" role="main"> <?php print_unescaped($_['content']); ?> </div> </div> diff --git a/core/templates/message.html b/core/templates/message.html index cd642231a9e..a98fd31a7fe 100644 --- a/core/templates/message.html +++ b/core/templates/message.html @@ -1,3 +1,3 @@ -<div id="{dialog_name}" title="{title} "><!-- the ' ' after {title} fixes ie8, see http://stackoverflow.com/a/5313137/828717 --> +<div id="{dialog_name}" title="{title} "><?php /* the ' ' after {title} fixes ie8, see http://stackoverflow.com/a/5313137/828717 */ ?> <p><span class="ui-icon ui-icon-{type}"></span>{message}</p> </div> diff --git a/lib/private/tags.php b/lib/private/tags.php index 200ec8c2771..276da9d4b80 100644 --- a/lib/private/tags.php +++ b/lib/private/tags.php @@ -34,8 +34,8 @@ namespace OC; -use \OC\Tagging\Tag, - \OC\Tagging\TagMapper; +use \OC\Tagging\Tag; +use \OC\Tagging\TagMapper; class Tags implements \OCP\ITags { @@ -248,6 +248,7 @@ class Tags implements \OCP\ITags { * * @param string $tag Tag id or name. * @return array|false An array of object ids or false on error. + * @throws \Exception */ public function getIdsForTag($tag) { $result = null; diff --git a/settings/js/apps.js b/settings/js/apps.js index bb52aa3a155..8d8b2ca7398 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -63,7 +63,9 @@ OC.Settings.Apps = OC.Settings.Apps || { } $('#apps-list') .addClass('icon-loading') + .removeClass('hidden') .html(''); + $('#apps-list-empty').addClass('hidden'); $('#app-category-' + OC.Settings.Apps.State.currentCategory).removeClass('active'); $('#app-category-' + categoryId).addClass('active'); OC.Settings.Apps.State.currentCategory = categoryId; @@ -73,14 +75,19 @@ OC.Settings.Apps = OC.Settings.Apps || { }), { data:{}, type:'GET', - success:function (apps) { + success: function (apps) { OC.Settings.Apps.State.apps = _.indexBy(apps.apps, 'id'); var source = $("#app-template").html(); var template = Handlebars.compile(source); - _.each(apps.apps, function(app) { - OC.Settings.Apps.renderApp(app, template, null); - }); + if (apps.apps.length) { + _.each(apps.apps, function(app) { + OC.Settings.Apps.renderApp(app, template, null); + }); + } else { + $('#apps-list').addClass('hidden'); + $('#apps-list-empty').removeClass('hidden'); + } }, complete: function() { $('#apps-list').removeClass('icon-loading'); diff --git a/settings/templates/apps.php b/settings/templates/apps.php index 7465992b3b4..1d059d4f77f 100644 --- a/settings/templates/apps.php +++ b/settings/templates/apps.php @@ -96,4 +96,8 @@ </div> <div id="app-content"> <div id="apps-list" class="icon-loading"></div> + <div id="apps-list-empty" class="hidden emptycontent"> + <div class="icon-search"></div> + <h2><?php p($l->t('No apps found for your version')) ?></h2> + </div> </div> |