/* * Copyright © 2016-2017 The Thingsboard Authors * * 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. */ import './expand-fullscreen.scss'; import $ from 'jquery'; export default angular.module('thingsboard.directives.expandFullscreen', []) .directive('tbExpandFullscreen', ExpandFullscreen) .name; /* eslint-disable angular/angularelement */ /*@ngInject*/ function ExpandFullscreen($compile, $document) { var uniqueId = 1; var linker = function (scope, element, attrs) { scope.body = angular.element($document.find('body').eq(0)); scope.fullscreenParentId = 'fullscreen-parent' + uniqueId; scope.fullscreenParent = $('#' + scope.fullscreenParentId, scope.body)[0]; if (!scope.fullscreenParent) { uniqueId++; var fullscreenParent = angular.element('
'); scope.body.append(fullscreenParent); scope.fullscreenParent = $('#' + scope.fullscreenParentId, scope.body)[0]; scope.fullscreenParent = angular.element(scope.fullscreenParent); scope.fullscreenParent.css('display', 'none'); } else { scope.fullscreenParent = angular.element(scope.fullscreenParent); } scope.$on('$destroy', function () { scope.fullscreenParent.remove(); }); scope.elementParent = null; scope.expanded = false; scope.fullscreenZindex = scope.fullscreenZindex(); if (!scope.fullscreenZindex) { scope.fullscreenZindex = '70'; } scope.$watch('expanded', function (newExpanded, prevExpanded) { if (newExpanded != prevExpanded) { if (scope.expanded) { scope.elementParent = element.parent(); element.detach(); scope.fullscreenParent.append(element); scope.fullscreenParent.css('display', ''); scope.fullscreenParent.css('z-index', scope.fullscreenZindex); element.addClass('tb-fullscreen'); } else { if (scope.elementParent) { element.detach(); scope.elementParent.append(element); scope.elementParent = null; } element.removeClass('tb-fullscreen'); scope.fullscreenParent.css('display', 'none'); scope.fullscreenParent.css('z-index', ''); } if (scope.onFullscreenChanged) { scope.onFullscreenChanged({expanded: scope.expanded}); } } }); scope.$watch(function () { return scope.expand(); }, function (newExpanded) { scope.expanded = newExpanded; }); scope.toggleExpand = function ($event) { if ($event) { $event.stopPropagation(); } scope.expanded = !scope.expanded; } var expandButton = null; if (attrs.expandButtonId) { expandButton = $('#' + attrs.expandButtonId, element)[0]; } var html = '