app.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /**
  2. * main app level module
  3. */
  4. define([
  5. 'angular',
  6. 'jquery',
  7. 'lodash',
  8. 'require',
  9. 'config',
  10. 'bootstrap',
  11. 'angular-route',
  12. 'angular-strap',
  13. 'angular-dragdrop',
  14. 'extend-jquery',
  15. 'bindonce',
  16. ],
  17. function (angular, $, _, appLevelRequire, config) {
  18. "use strict";
  19. var app = angular.module('grafana', []),
  20. // we will keep a reference to each module defined before boot, so that we can
  21. // go back and allow it to define new features later. Once we boot, this will be false
  22. pre_boot_modules = [],
  23. // these are the functions that we need to call to register different
  24. // features if we define them after boot time
  25. register_fns = {};
  26. // This stores the grafana version number
  27. app.constant('grafanaVersion',"@grafanaVersion@");
  28. // Use this for cache busting partials
  29. app.constant('cacheBust',"cache-bust="+Date.now());
  30. /**
  31. * Tells the application to watch the module, once bootstraping has completed
  32. * the modules controller, service, etc. functions will be overwritten to register directly
  33. * with this application.
  34. * @param {[type]} module [description]
  35. * @return {[type]} [description]
  36. */
  37. app.useModule = function (module) {
  38. if (pre_boot_modules) {
  39. pre_boot_modules.push(module);
  40. } else {
  41. _.extend(module, register_fns);
  42. }
  43. return module;
  44. };
  45. app.config(function ($routeProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) {
  46. $routeProvider.otherwise({ redirectTo: config.default_route });
  47. // this is how the internet told me to dynamically add modules :/
  48. register_fns.controller = $controllerProvider.register;
  49. register_fns.directive = $compileProvider.directive;
  50. register_fns.factory = $provide.factory;
  51. register_fns.service = $provide.service;
  52. register_fns.filter = $filterProvider.register;
  53. });
  54. var apps_deps = [
  55. 'ngRoute',
  56. '$strap.directives',
  57. 'ang-drag-drop',
  58. 'grafana',
  59. 'pasvaz.bindonce'
  60. ];
  61. var module_types = ['controllers', 'directives', 'factories', 'services', 'filters', 'routes'];
  62. _.each(module_types, function (type) {
  63. var module_name = 'grafana.'+type;
  64. // create the module
  65. app.useModule(angular.module(module_name, []));
  66. // push it into the apps dependencies
  67. apps_deps.push(module_name);
  68. });
  69. var preBootRequires = [
  70. 'services/all',
  71. 'features/all',
  72. 'controllers/all',
  73. 'directives/all',
  74. 'filters/all',
  75. 'components/partials',
  76. 'routes/all',
  77. ];
  78. _.each(config.plugins.dependencies, function(dep) {
  79. preBootRequires.push('../plugins/' + dep);
  80. });
  81. app.boot = function() {
  82. require(preBootRequires, function () {
  83. // disable tool tip animation
  84. $.fn.tooltip.defaults.animation = false;
  85. // bootstrap the app
  86. angular
  87. .element(document)
  88. .ready(function() {
  89. angular.bootstrap(document, apps_deps)
  90. .invoke(['$rootScope', function ($rootScope) {
  91. _.each(pre_boot_modules, function (module) {
  92. _.extend(module, register_fns);
  93. });
  94. pre_boot_modules = false;
  95. $rootScope.requireContext = appLevelRequire;
  96. $rootScope.require = function (deps, fn) {
  97. var $scope = this;
  98. $scope.requireContext(deps, function () {
  99. var deps = _.toArray(arguments);
  100. // Check that this is a valid scope.
  101. if($scope.$id) {
  102. $scope.$apply(function () {
  103. fn.apply($scope, deps);
  104. });
  105. }
  106. });
  107. };
  108. }]);
  109. });
  110. });
  111. };
  112. return app;
  113. });