horizon/openstack_dashboard/static/app/core/cloud-services/hz-if-nova-extensions.direc...

77 lines
2.6 KiB
JavaScript

/*
* (c) Copyright 2015 Hewlett-Packard Development Company, L.P.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function () {
'use strict';
angular
.module('horizon.app.core.cloud-services')
.directive('hzIfNovaExtensions', hzNovaExtensions);
hzNovaExtensions.$inject = [
'hzPromiseToggleTemplateDirective',
'horizon.app.core.openstack-service-api.novaExtensions'
];
/**
* @ngdoc directive
* @name hz.api:directive:hzIfNovaExtensions
* @module hz.api
* @description
*
* Add this directive to any element containing content which should
* only be evaluated when the specified nova extensions are enabled by
* the nova servers in the currently selected region. If the nova extensions
* are enabled, the content will be evaluated. Otherwise, the content will
* not be compiled. In addition, the element and everything contained by
* it will be removed completely, leaving a simple HTML comment.
*
* This is evaluated once per page load. In current horizon, this means
* it will get re-evaluated with events like the user opening another panel,
* changing logins, or changing their region.
*
* The hz-if-nova-extensions attribute may be set to a single extension (String)
* or an array of extensions (each one being a String).
* All of the following are examples:
*
* hz-if-nova-extensions='"ConfigDrive"'
* hz-if-nova-extensions='["ConfigDrive"]'
* hz-if-nova-extensions='["ConfigDrive", "DiskConfig"]'
*
* @example
*
* In the below, if the ConfigDrive nova extension is not enabled, then
* the div element with hz-if-nova-extensions and all of the elements inside
* of it will be removed and never evaluated by the angular compiler.
*
```html
<div hz-if-nova-extensions='"ConfigDrive"'>
<!-- ui code here -->
</div>
```
*/
function hzNovaExtensions(hzPromiseToggleTemplateDirective, novaExtensions) {
return angular.extend(
hzPromiseToggleTemplateDirective[0],
{
singlePromiseResolver: novaExtensions.ifNameEnabled,
name: 'hzIfNovaExtensions'
}
);
}
})();