OpenVeo AngularJS back end

API Docs for: 3.0.0
Show:

File: app/client/admin/js/ov/MenuService.js

'use strict';

(function(angular, app) {

  /**
   * Defines a menu service to manage the menu of the application.
   *
   * @module ov
   * @class menuService
   */
  function MenuService($http, $q, $location) {
    var basePath = '/be/';
    var menu;

    /**
     * Sets menu items corresponding to the actual path to active and the other menu items to inactive.
     *
     * @method setActiveMenuItem
     */
    function setActiveMenuItem() {
      if (menu) {
        var path = $location.path();

        for (var menuItem in menu) {

          // Sub menu
          if (angular.isArray(menu[menuItem].subMenu)) {
            menu[menuItem].active = false;
            for (var i = 0; i < menu[menuItem].subMenu.length; i++) {
              menu[menuItem].subMenu[i].active = '/' + menu[menuItem].subMenu[i].path === path;
              menu[menuItem].active = menu[menuItem].active || menu[menuItem].subMenu[i].active;
            }
          } else {

            // Menu item
            menu[menuItem].active = '/' + menu[menuItem].path === path;

          }
        }
      }
    }

    /**
     * Loads the menu from server.
     *
     * @return {Promise} The Http promise
     * @method loadMenu
     */
    function loadMenu() {
      if (!menu) {

        // Get menu from server
        return $http.get(basePath + 'getMenu').success(function(menuObj) {
          menu = menuObj;
          setActiveMenuItem();
        });

      }

      return $q.when(menu);
    }

    /**
     * Gets the menu.
     *
     * @return {Object} The menu
     * @method getMenu
     */
    function getMenu() {
      return menu;
    }

    /**
     * Destroys MenuService cached data.
     *
     * @method destroyMenu
     */
    function destroyMenu() {
      menu = null;
    }

    return {
      loadMenu: loadMenu,
      getMenu: getMenu,
      destroyMenu: destroyMenu,
      setActiveMenuItem: setActiveMenuItem
    };

  }

  app.factory('menuService', MenuService);
  MenuService.$inject = ['$http', '$q', '$location'];

})(angular, angular.module('ov'));