summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.zuul.d/tempest-and-integrated.yaml5
-rw-r--r--horizon/static/framework/util/navigations/navigations.service.js9
-rw-r--r--horizon/static/framework/util/navigations/navigations.service.spec.js7
-rw-r--r--horizon/static/framework/widgets/details/routed-details-view.controller.js9
-rw-r--r--openstack_dashboard/dashboards/project/static/dashboard/project/containers/containers.html140
5 files changed, 97 insertions, 73 deletions
diff --git a/.zuul.d/tempest-and-integrated.yaml b/.zuul.d/tempest-and-integrated.yaml
index 5457094ee..df2e9b52a 100644
--- a/.zuul.d/tempest-and-integrated.yaml
+++ b/.zuul.d/tempest-and-integrated.yaml
@@ -35,7 +35,6 @@
required-projects: &base_required_projects
- name: openstack/horizon
- name: openstack/tempest
- - name: openstack/tempest-horizon
irrelevant-files: &base_irrelevant_files
- ^.*\.rst$
- ^doc/.*$
@@ -56,9 +55,7 @@
horizon: true
tempest: true
tempest_concurrency: 2
- tempest_test_regex: horizon
- tempest_plugins:
- - tempest-horizon
+ tempest_test_regex: test_dashboard_basic_ops
tox_envlist: all
- job:
diff --git a/horizon/static/framework/util/navigations/navigations.service.js b/horizon/static/framework/util/navigations/navigations.service.js
index 8da8746c0..5d7a3571f 100644
--- a/horizon/static/framework/util/navigations/navigations.service.js
+++ b/horizon/static/framework/util/navigations/navigations.service.js
@@ -25,6 +25,7 @@
collapseAllNavigation: collapseAllNavigation,
expandNavigationByUrl: expandNavigationByUrl,
setBreadcrumb: setBreadcrumb,
+ setAbsoluteURI: setAbsoluteURI,
isNavigationExists: isNavigationExists
};
@@ -107,6 +108,14 @@
});
}
+ /* set absolute uri */
+ function setAbsoluteURI(webroot, url) {
+ if (webroot.endsWith("/") && url.startsWith("/")) {
+ webroot = webroot.slice(0, -1);
+ }
+ return webroot + url;
+ }
+
/* check whether navigation exists from url */
function isNavigationExists(url) {
return angular.element("a.openstack-panel[href='" + url + "']").length ? true : false;
diff --git a/horizon/static/framework/util/navigations/navigations.service.spec.js b/horizon/static/framework/util/navigations/navigations.service.spec.js
index 8a83a6430..6e4e51d2a 100644
--- a/horizon/static/framework/util/navigations/navigations.service.spec.js
+++ b/horizon/static/framework/util/navigations/navigations.service.spec.js
@@ -160,6 +160,13 @@
});
});
+ describe('setAbsoluteURI', function() {
+ it('sets absolute uri', function() {
+ var url = service.setAbsoluteURI('/dashboard/', '/project/images/');
+ expect(url).toBe('/dashboard/project/images/');
+ });
+ });
+
describe('isNavigationExists', function() {
it('returns true if navigation for specified URL exists', function() {
var result = service.isNavigationExists('/project/images/');
diff --git a/horizon/static/framework/widgets/details/routed-details-view.controller.js b/horizon/static/framework/widgets/details/routed-details-view.controller.js
index 739dc5d7e..cea3e4102 100644
--- a/horizon/static/framework/widgets/details/routed-details-view.controller.js
+++ b/horizon/static/framework/widgets/details/routed-details-view.controller.js
@@ -28,7 +28,8 @@
'horizon.framework.widgets.modal-wait-spinner.service',
'$location',
'$q',
- '$routeParams'
+ '$routeParams',
+ '$window'
];
function controller(
@@ -39,7 +40,8 @@
spinnerService,
$location,
$q,
- $routeParams
+ $routeParams,
+ $window
) {
var ctrl = this;
@@ -69,6 +71,9 @@
// get defaultIndexUrl
var url = resourceType.getDefaultIndexUrl();
+ // add webroot
+ var webroot = $window.WEBROOT;
+ url = navigationsService.setAbsoluteURI(webroot, url);
// if querystring has 'nav' parameter, overwrite the url
var query = $location.search();
if (query.hasOwnProperty("nav")) {
diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/containers/containers.html b/openstack_dashboard/dashboards/project/static/dashboard/project/containers/containers.html
index 329f11419..34194763a 100644
--- a/openstack_dashboard/dashboards/project/static/dashboard/project/containers/containers.html
+++ b/openstack_dashboard/dashboards/project/static/dashboard/project/containers/containers.html
@@ -13,76 +13,82 @@
<div class="col-xs-12">
<hz-magic-search-context filter-facets="cc.filterFacets">
<hz-magic-search-bar></hz-magic-search-bar>
- </hz-magic-search-context>
- <uib-accordion class="hz-container-accordion" ng-if="cc.model.containers.length > 0">
- <div uib-accordion-group ng-repeat="container in cc.model.containers"
- ng-class="{'panel-primary': container.name === cc.model.container.name}"
- class="panel-default"
- ng-click="cc.selectContainer(container)">
- <uib-accordion-heading>
- <div ng-click="cc.selectContainer(container)">
- <span class="hz-container-title truncate"
- uib-tooltip="{$ container.name $}"
- uib-tooltip-placement="top"
- uib-tooltip-popup-delay="1000"
- uib-tooltip-trigger="mouseenter">
- {$ container.name $}
- </span>
- <span uib-tooltip="{$ 'Delete Container' | translate $}"
- uib-tooltip-placement="top"
- uib-tooltip-trigger="mouseenter"
- class="fa fa-trash hz-container-delete-icon"
- ng-if="container.name === cc.model.container.name"
- ng-click="cc.deleteContainer(container)"></span>
- </div>
- </uib-accordion-heading>
- <div ng-if="!container.is_fetched" class="horizon-loading-bar container-pending-bar">
- <div class="progress progress-striped active">
- <div class="progress-bar"></div>
+ <uib-accordion
+ st-magic-search
+ st-table="cc.model.containers"
+ class="hz-container-accordion"
+ ng-if="cc.model.containers.length > 0">
+ <div uib-accordion-group ng-repeat="container in cc.model.containers"
+ ng-class="{'panel-primary': container.name === cc.model.container.name}"
+ class="panel-default"
+ ng-click="cc.selectContainer(container)">
+ <uib-accordion-heading>
+ <div ng-click="cc.selectContainer(container)">
+ <span class="hz-container-title truncate"
+ uib-tooltip="{$ container.name $}"
+ uib-tooltip-placement="top"
+ uib-tooltip-popup-delay="1000"
+ uib-tooltip-trigger="mouseenter">
+ {$ container.name $}
+ </span>
+ <span uib-tooltip="{$ 'Delete Container' | translate $}"
+ uib-tooltip-placement="top"
+ uib-tooltip-trigger="mouseenter"
+ class="fa fa-trash hz-container-delete-icon"
+ ng-if="container.name === cc.model.container.name"
+ ng-click="cc.deleteContainer(container)">
+ </span>
+ </div>
+ </uib-accordion-heading>
+
+ <div ng-if="!container.is_fetched" class="horizon-loading-bar container-pending-bar">
+ <div class="progress progress-striped active">
+ <div class="progress-bar"></div>
+ </div>
</div>
+ <ul ng-if="container.is_fetched" class="hz-object-detail list-unstyled">
+ <li class="hz-object-count row">
+ <span class="hz-object-label col-lg-7 col-md-12" translate>Object Count</span>
+ <span class="hz-object-val col-lg-5 col-md-12">{$ container.count $}</span>
+ </li>
+ <li class="hz-object-size row">
+ <span class="hz-object-label col-lg-7 col-md-12" translate>Size</span>
+ <span class="hz-object-val col-lg-5 col-md-12">{$ container.bytes | bytes $}</span>
+ </li>
+ <li class="hz-object-timestamp row">
+ <span class="hz-object-label col-lg-7 col-md-12" translate>Date Created</span>
+ <span class="hz-object-val col-lg-5 col-md-12">{$ container.timestamp | date $}</span>
+ </li>
+ <li ng-if="container.storage_policy.display_name" class="hz-object-policy row">
+ <span class="hz-object-label col-lg-7 col-md-12" translate>Storage Policy</span>
+ <span class="hz-object-val col-lg-5 col-md-12">{$ container.storage_policy.display_name $}</span>
+ <span class="hz-object-val col-lg-offset-7 col-lg-5 col-md-12">({$ container.storage_policy.name $})</span>
+ </li>
+ <li ng-if="!container.storage_policy.display_name" class="hz-object-policy row">
+ <span class="hz-object-label col-lg-7 col-md-12" translate>Storage Policy</span>
+ <span class="hz-object-val col-lg-5 col-md-12">{$ container.storage_policy.name $}</span>
+ </li>
+ <li class="hz-object-link row">
+ <div class="themable-checkbox col-lg-7 col-md-12">
+ <input type="checkbox" id="id_access" ng-model="container.is_public"
+ ng-if="container.name === cc.model.container.name"
+ ng-click="cc.toggleAccess(container)">
+ <label class="hz-object-label" for="id_access" translate>Public Access</label>
+ </div>
+ <span class="hz-object-val col-lg-5 col-md-12">
+ <a href="{$ container.public_url $}" target="_blank"
+ ng-show="container.public_url" translate>Link</a>
+ <span ng-hide="container.public_url" translate>Disabled</span>
+ </span>
+ </li>
+ </ul>
</div>
- <ul ng-if="container.is_fetched" class="hz-object-detail list-unstyled">
- <li class="hz-object-count row">
- <span class="hz-object-label col-lg-7 col-md-12" translate>Object Count</span>
- <span class="hz-object-val col-lg-5 col-md-12">{$ container.count $}</span>
- </li>
- <li class="hz-object-size row">
- <span class="hz-object-label col-lg-7 col-md-12" translate>Size</span>
- <span class="hz-object-val col-lg-5 col-md-12">{$ container.bytes | bytes $}</span>
- </li>
- <li class="hz-object-timestamp row">
- <span class="hz-object-label col-lg-7 col-md-12" translate>Date Created</span>
- <span class="hz-object-val col-lg-5 col-md-12">{$ container.timestamp | date $}</span>
- </li>
- <li ng-if="container.storage_policy.display_name" class="hz-object-policy row">
- <span class="hz-object-label col-lg-7 col-md-12" translate>Storage Policy</span>
- <span class="hz-object-val col-lg-5 col-md-12">{$ container.storage_policy.display_name $}</span>
- <span class="hz-object-val col-lg-offset-7 col-lg-5 col-md-12">({$ container.storage_policy.name $})</span>
- </li>
- <li ng-if="!container.storage_policy.display_name" class="hz-object-policy row">
- <span class="hz-object-label col-lg-7 col-md-12" translate>Storage Policy</span>
- <span class="hz-object-val col-lg-5 col-md-12">{$ container.storage_policy.name $}</span>
- </li>
- <li class="hz-object-link row">
- <div class="themable-checkbox col-lg-7 col-md-12">
- <input type="checkbox" id="id_access" ng-model="container.is_public"
- ng-if="container.name === cc.model.container.name"
- ng-click="cc.toggleAccess(container)">
- <label class="hz-object-label" for="id_access" translate>Public Access</label>
- </div>
- <span class="hz-object-val col-lg-5 col-md-12">
- <a href="{$ container.public_url $}" target="_blank"
- ng-show="container.public_url" translate>Link</a>
- <span ng-hide="container.public_url" translate>Disabled</span>
- </span>
- </li>
- </ul>
- </div uib-accordion-group>
- </uib-accordion>
- <div class="col-xs-12" ng-if="cc.model.containers.length == 0">
- <p><translate>No items to display.</translate></p>
- </div>
+ </uib-accordion>
+ <div class="col-xs-12" ng-if="cc.model.containers.length == 0">
+ <p><translate>No items to display.</translate></p>
+ </div>
+ </hz-magic-search-context>
</div>
</div>
</div>