blob: e983e79181f67e8a315207ae332ee27ed2e79eaf [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
import angular from 'angular';
import brBrandInfo from 'brand-js';
import brooklynUiModulesApi from '../api/brooklyn/ui-modules';
import uibDropdown from 'angular-ui-bootstrap/src/dropdown/index-nocss';
import moduleLinksNavbarTemplate from './module-links-navbar.template.html';
import moduleLinksDrawerTemplate from './module-links-drawer.template.html';
const MODULE_NAME = 'brooklyn.component.module-links';
angular.module(MODULE_NAME, [brBrandInfo, brooklynUiModulesApi, uibDropdown])
.directive('brooklynModuleLinksMenu', ['$compile', moduleLinksMenuDirective])
.directive('brooklynModuleLinksDrawer', moduleLinksDrawerDirective);
export function moduleLinksMenuDirective($compile) {
return {
restrict: 'A',
template: moduleLinksNavbarTemplate,
terminal: true,
priority: 1000,
link: link,
controller: ['brBrandInfo', 'brooklynUiModulesApi', controller],
controllerAs: 'ctrl'
};
function link(scope, element) {
element
.attr('uib-dropdown', '')
.addClass('dropdown')
.removeAttr('brooklyn-module-links-menu') //remove the attribute to avoid indefinite loop
.removeAttr('data-brooklyn-module-link-menu'); //also remove the same attribute with data- prefix in case users specify data-common-things in the html
$compile(element)(scope);
}
function controller(brBrandInfo, brooklynUiModulesApi) {
this.modules = null;
this.isModuleActive = (path) => {
if (path === '/' || path === '') {
return window.location.pathname === '/';
} else {
return window.location.pathname.startsWith(path);
}
};
//Load Modules
brooklynUiModulesApi.getUiModules().then(response => {
this.modules = response
});
this.productName = brBrandInfo.getBrandedText('product.name');
}
}
export function moduleLinksDrawerDirective() {
return {
restrict: 'E',
template: moduleLinksDrawerTemplate,
controller: ['$scope', 'brBrandInfo', 'brooklynUiModulesApi', controller]
};
function controller($scope, brBrandInfo, brooklynUiModulesApi) {
$scope.modules = null;
brooklynUiModulesApi.getUiModules().then(response => {
$scope.modules = response;
});
}
}
export default MODULE_NAME;