Ejemplo n.º 1
0
    $scope.isValid = () => {
      if (!$scope.ctrl.form.$valid) {
        return false;
      }

      if (!$scope.current.name.match(/^\w+$/)) {
        appEvents.emit('alert-warning', ['Validation', 'Only word and digit characters are allowed in variable names']);
        return false;
      }

      const sameName = _.find($scope.variables, { name: $scope.current.name });
      if (sameName && sameName !== $scope.current) {
        appEvents.emit('alert-warning', ['Validation', 'Variable with the same name already exists']);
        return false;
      }

      if (
        $scope.current.type === 'query' &&
        _.isString($scope.current.query) &&
        $scope.current.query.match(new RegExp('\\$' + $scope.current.name + '(/| |$)'))
      ) {
        appEvents.emit('alert-warning', [
          'Validation',
          'Query cannot contain a reference to itself. Variable: $' + $scope.current.name,
        ]);
        return false;
      }

      return true;
    };
Ejemplo n.º 2
0
    $scope.init = () => {
      contextSrv.sidemenu = false;
      appEvents.emit('toggle-sidemenu-hidden');

      const params = $location.search();
      panelId = parseInt(params.panelId, 10);

      $scope.onAppEvent('dashboard-initialized', $scope.initPanelScope);

      // if no uid, redirect to new route based on slug
      if (!($routeParams.type === 'script' || $routeParams.type === 'snapshot') && !$routeParams.uid) {
        backendSrv.getDashboardBySlug($routeParams.slug).then(res => {
          if (res) {
            const url = locationUtil.stripBaseFromUrl(res.meta.url.replace('/d/', '/d-solo/'));
            $location.path(url).replace();
          }
        });
        return;
      }

      dashboardLoaderSrv.loadDashboard($routeParams.type, $routeParams.slug, $routeParams.uid).then(result => {
        result.meta.soloMode = true;
        $scope.initDashboard(result, $scope);
      });
    };
Ejemplo n.º 3
0
      appEvents.on('toggle-kiosk-mode', options => {
        const search = $location.search();

        if (options && options.exit) {
          search.kiosk = 1;
        }

        switch (search.kiosk) {
          case 'tv': {
            search.kiosk = 1;
            appEvents.emit('alert-success', ['Press ESC to exit Kiosk mode']);
            break;
          }
          case 1:
          case true: {
            delete search.kiosk;
            break;
          }
          default: {
            search.kiosk = 'tv';
          }
        }

        $location.search(search);
        setViewModeBodyClass(body, search.kiosk, sidemenuOpen);
      });
Ejemplo n.º 4
0
      appEvents.on('toggle-kiosk-mode', (options: { exit?: boolean }) => {
        const search: { kiosk?: KioskUrlValue } = $location.search();

        if (options && options.exit) {
          search.kiosk = '1';
        }

        switch (search.kiosk) {
          case 'tv': {
            search.kiosk = true;
            appEvents.emit('alert-success', ['Press ESC to exit Kiosk mode']);
            break;
          }
          case '1':
          case true: {
            delete search.kiosk;
            break;
          }
          default: {
            search.kiosk = 'tv';
          }
        }

        $timeout(() => $location.search(search));
        setViewModeBodyClass(body, search.kiosk);
      });
Ejemplo n.º 5
0
      scope.$on('$routeChangeSuccess', (evt, data) => {
        if (pageClass) {
          body.removeClass(pageClass);
        }

        if (data.$$route) {
          pageClass = data.$$route.pageClass;
          if (pageClass) {
            body.addClass(pageClass);
          }
        }

        // clear body class sidemenu states
        body.removeClass('sidemenu-open--xs');

        $('#tooltip, .tooltip').remove();

        // check for kiosk url param
        setViewModeBodyClass(body, data.params.kiosk);

        // close all drops
        for (const drop of Drop.drops) {
          drop.destroy();
        }

        appEvents.emit('hide-dash-search');
      });
Ejemplo n.º 6
0
 return new Promise((resolve, reject) => {
   // send event to import list component
   appEvents.emit('dashboard-list-import-all', {
     resolve: resolve,
     reject: reject
   });
 });
Ejemplo n.º 7
0
  showConfirmModal(payload) {
    var scope = this.$rootScope.$new();

    scope.onConfirm = function() {
      payload.onConfirm();
      scope.dismiss();
    };

    scope.updateConfirmText = function(value) {
      scope.confirmTextValid = payload.confirmText.toLowerCase() === value.toLowerCase();
    };

    scope.title = payload.title;
    scope.text = payload.text;
    scope.text2 = payload.text2;
    scope.confirmText = payload.confirmText;

    scope.onConfirm = payload.onConfirm;
    scope.onAltAction = payload.onAltAction;
    scope.altActionText = payload.altActionText;
    scope.icon = payload.icon || 'fa-check';
    scope.yesText = payload.yesText || 'Yes';
    scope.noText = payload.noText || 'Cancel';
    scope.confirmTextValid = scope.confirmText ? false : true;

    appEvents.emit('show-modal', {
      src: 'public/app/partials/confirm_modal.html',
      scope: scope,
      modalClass: 'confirm-modal',
    });
  }
Ejemplo n.º 8
0
 async getDefaultProject() {
   try {
     const projects = await this.getProjects();
     if (projects && projects.length > 0) {
       const test = projects.filter(p => p.id === this.projectName)[0];
       return test;
     } else {
       throw new Error('No projects found');
     }
   } catch (error) {
     let message = 'Projects cannot be fetched: ';
     message += error.statusText ? error.statusText + ': ' : '';
     if (error && error.data && error.data.error && error.data.error.message) {
       if (error.data.error.code === 403) {
         message += `
           A list of projects could not be fetched from the Google Cloud Resource Manager API.
           You might need to enable it first:
           https://console.developers.google.com/apis/library/cloudresourcemanager.googleapis.com`;
       } else {
         message += error.data.error.code + '. ' + error.data.error.message;
       }
     } else {
       message += 'Cannot connect to Stackdriver API';
     }
     appEvents.emit('ds-request-error', message);
   }
 }
Ejemplo n.º 9
0
      scope.$on('$routeChangeSuccess', function(evt, data) {
        if (pageClass) {
          body.removeClass(pageClass);
        }

        if (data.$$route) {
          pageClass = data.$$route.pageClass;
          if (pageClass) {
            body.addClass(pageClass);
          }
        }

        // clear body class sidemenu states
        body.removeClass('sidemenu-open--xs');

        $('#tooltip, .tooltip').remove();

        // check for kiosk url param
        if (data.params.kiosk) {
          appEvents.emit('toggle-kiosk-mode');
        }

        // close all drops
        for (let drop of Drop.drops) {
          drop.destroy();
        }
      });
Ejemplo n.º 10
0
      scope.$on('$routeChangeSuccess', function(evt, data) {
        if (pageClass) {
          body.removeClass(pageClass);
        }

        if (data.$$route) {
          pageClass = data.$$route.pageClass;
          if (pageClass) {
            body.addClass(pageClass);
          }
        }

        // clear body class sidemenu states
        body.removeClass('sidemenu-open--xs');

        $('#tooltip, .tooltip').remove();

        // check for kiosk url param
        if (data.params.kiosk) {
          appEvents.emit('toggle-kiosk-mode');
        }

        // check for 'inactive' url param for clean looks like kiosk, but with title
        if (data.params.inactive) {
          body.addClass('user-activity-low');

          // for some reason, with this class it looks cleanest
          body.addClass('sidemenu-open');
        }

        // close all drops
        for (let drop of Drop.drops) {
          drop.destroy();
        }
      });