dashboard-toolbar.directive.js
Home
/
ui /
src /
app /
dashboard /
dashboard-toolbar.directive.js
import './dashboard-toolbar.scss';
import 'javascript-detect-element-resize/detect-element-resize';
import dashboardToolbarTemplate from './dashboard-toolbar.tpl.html';
export default function DashboardToolbar() {
return {
restrict: "E",
scope: true,
transclude: true,
bindToController: {
toolbarOpened: '=',
forceFullscreen: '=',
onTriggerClick: '&'
},
controller: DashboardToolbarController,
controllerAs: 'vm',
templateUrl: dashboardToolbarTemplate
};
}
function DashboardToolbarController($scope, $element, $timeout, mdFabToolbarAnimation) {
let vm = this;
vm.mdFabToolbarElement = angular.element($element[0].querySelector('md-fab-toolbar'));
function initElements() {
$timeout(function() {
vm.mdFabBackgroundElement = angular.element(vm.mdFabToolbarElement[0].querySelector('.md-fab-toolbar-background'));
vm.mdFabTriggerElement = angular.element(vm.mdFabToolbarElement[0].querySelector('md-fab-trigger button'));
if (!vm.mdFabBackgroundElement || !vm.mdFabBackgroundElement[0]) {
initElements();
} else {
triggerFabResize();
}
});
}
addResizeListener(vm.mdFabToolbarElement[0], triggerFabResize);
$scope.$on("$destroy", function () {
removeResizeListener(vm.mdFabToolbarElement[0], triggerFabResize);
});
initElements();
function triggerFabResize() {
if (!vm.mdFabBackgroundElement || !vm.mdFabBackgroundElement[0]) {
return;
}
var ctrl = vm.mdFabToolbarElement.controller('mdFabToolbar');
if (ctrl.isOpen) {
if (!vm.mdFabBackgroundElement[0].offsetWidth) {
mdFabToolbarAnimation.addClass(vm.mdFabToolbarElement, 'md-is-open', function () {
});
} else {
var color = window.getComputedStyle(vm.mdFabTriggerElement[0]).getPropertyValue('background-color');
var width = vm.mdFabToolbarElement[0].offsetWidth;
var scale = 2 * (width / vm.mdFabTriggerElement[0].offsetWidth);
vm.mdFabBackgroundElement[0].style.backgroundColor = color;
vm.mdFabBackgroundElement[0].style.borderRadius = width + 'px';
var transform = vm.mdFabBackgroundElement[0].style.transform;
var targetTransform = 'scale(' + scale + ')';
if (!transform || !angular.equals(transform, targetTransform)) {
vm.mdFabBackgroundElement[0].style.transform = targetTransform;
}
}
}
}
}