diff --git a/.gitignore b/.gitignore index 7ba77672df2..8abd0d17cbd 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ coverage/ awsconfig /dist /emails/dist -/public/.app_gen +/public_gen /tmp docs/AWS_S3_BUCKET diff --git a/Gruntfile.js b/Gruntfile.js index 43cb1f09bd1..70defdeaf6d 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -6,6 +6,7 @@ module.exports = function (grunt) { pkg: grunt.file.readJSON('package.json'), baseDir: '.', srcDir: 'public', + genDir: 'public_gen', destDir: 'dist', tempDir: 'tmp', arch: os.arch(), diff --git a/package.json b/package.json index 78081c998b8..01b9ae03cb1 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "license": "Apache-2.0", "dependencies": { "grunt-jscs": "~1.5.x", + "grunt-sync": "^0.4.1", "karma-sinon": "^1.0.3", "lodash": "^2.4.1", "sinon": "1.10.3" diff --git a/public/app/app.js b/public/app/app.js index 8adc04d1ef7..e91efa1169a 100644 --- a/public/app/app.js +++ b/public/app/app.js @@ -104,8 +104,8 @@ function (angular, $, _, appLevelRequire) { _.each(pre_boot_modules, function (module) { _.extend(module, register_fns); }); - pre_boot_modules = false; + pre_boot_modules = false; $rootScope.requireContext = appLevelRequire; $rootScope.require = function (deps, fn) { var $scope = this; diff --git a/public/app/components/require.config.js b/public/app/components/require.config.js index 268d782114a..f255418414e 100644 --- a/public/app/components/require.config.js +++ b/public/app/components/require.config.js @@ -1,6 +1,6 @@ require.config({ urlArgs: 'bust=' + (new Date().getTime()), - baseUrl: 'public/.app_gen', + baseUrl: 'public/app', paths: { config: 'components/config', diff --git a/public/app/controllers/errorCtrl.js b/public/app/controllers/errorCtrl.js index 9e70efb3ee4..b2dcbd1de50 100644 --- a/public/app/controllers/errorCtrl.js +++ b/public/app/controllers/errorCtrl.js @@ -8,6 +8,7 @@ function (angular) { var module = angular.module('grafana.controllers'); + module.controller('ErrorCtrl', function($scope, contextSrv) { var showSideMenu = contextSrv.sidemenu; diff --git a/public/app/controllers/grafanaCtrl.js b/public/app/controllers/grafanaCtrl.js index 6576b57de87..16e505a68dc 100644 --- a/public/app/controllers/grafanaCtrl.js +++ b/public/app/controllers/grafanaCtrl.js @@ -4,13 +4,10 @@ define([ 'lodash', 'jquery', 'store', - './testCtrl', ], -function (angular, config, _, $, store, TestCtrl) { +function (angular, config, _, $, store) { "use strict"; - console.log(new TestCtrl().getName()); - var module = angular.module('grafana.controllers'); module.controller('GrafanaCtrl', function($scope, alertSrv, utilSrv, $rootScope, $controller, contextSrv) { diff --git a/public/app/core/core.ts b/public/app/core/core.ts new file mode 100644 index 00000000000..f9a4b27c7ff --- /dev/null +++ b/public/app/core/core.ts @@ -0,0 +1,6 @@ + +export * from './time_series' +export * from './directives/cool_dir' +export * from './routes/module_loader' + + diff --git a/public/app/core/directives/cool_dir.ts b/public/app/core/directives/cool_dir.ts new file mode 100644 index 00000000000..78caa78bed8 --- /dev/null +++ b/public/app/core/directives/cool_dir.ts @@ -0,0 +1,7 @@ + +export class CoolDir { + getName() : string { + return "CoolDir"; + } +} + diff --git a/public/app/core/routes/module_loader.ts b/public/app/core/routes/module_loader.ts new file mode 100644 index 00000000000..9f309250d68 --- /dev/null +++ b/public/app/core/routes/module_loader.ts @@ -0,0 +1,19 @@ +/// + +export class ModuleLoader { + lazy: any + + constructor(moduleName) { + + this.lazy = ["$q", "$route", "$rootScope", function($q, $route, $rootScope) { + var defered = $q.defer(); + + require([moduleName], function () { + defered.resolve(); + }); + + return defered.promise; + }]; + + } +} diff --git a/public/app/core/time_series.ts b/public/app/core/time_series.ts new file mode 100644 index 00000000000..46d78e9fa7f --- /dev/null +++ b/public/app/core/time_series.ts @@ -0,0 +1,6 @@ +export class TimeSeries { + getName() : string { + return "TimeSeries"; + } +} + diff --git a/public/app/features/all.js b/public/app/features/all.js index 1a000a71782..6519d112b74 100644 --- a/public/app/features/all.js +++ b/public/app/features/all.js @@ -8,6 +8,5 @@ define([ './profile/profileCtrl', './profile/changePasswordCtrl', './profile/selectOrgCtrl', - './org/all', './admin/all', ], function () {}); diff --git a/public/app/routes/all.js b/public/app/routes/all.js index 74fb4997524..cdfdf0daf37 100644 --- a/public/app/routes/all.js +++ b/public/app/routes/all.js @@ -1,7 +1,8 @@ define([ 'angular', + '../core/core', './dashLoadControllers', -], function(angular) { +], function(angular, core) { "use strict"; var module = angular.module('grafana.routes'); @@ -41,30 +42,37 @@ define([ .when('/datasources', { templateUrl: 'app/features/org/partials/datasources.html', controller : 'DataSourcesCtrl', + resolve: new core.ModuleLoader("features/org/all"), }) .when('/datasources/edit/:id', { templateUrl: 'app/features/org/partials/datasourceEdit.html', controller : 'DataSourceEditCtrl', + resolve: new core.ModuleLoader("features/org/all"), }) .when('/datasources/new', { templateUrl: 'app/features/org/partials/datasourceEdit.html', controller : 'DataSourceEditCtrl', + resolve: new core.ModuleLoader("features/org/all"), }) .when('/org', { templateUrl: 'app/features/org/partials/orgDetails.html', controller : 'OrgDetailsCtrl', + resolve: new core.ModuleLoader("features/org/all"), }) .when('/org/new', { templateUrl: 'app/features/org/partials/newOrg.html', controller : 'NewOrgCtrl', + resolve: new core.ModuleLoader("features/org/all"), }) .when('/org/users', { templateUrl: 'app/features/org/partials/orgUsers.html', controller : 'OrgUsersCtrl', + resolve: new core.ModuleLoader("features/org/all"), }) .when('/org/apikeys', { templateUrl: 'app/features/org/partials/orgApiKeys.html', controller : 'OrgApiKeysCtrl', + resolve: new core.ModuleLoader("features/org/all"), }) .when('/profile', { templateUrl: 'app/features/profile/partials/profile.html', diff --git a/public/css/less/admin.less b/public/less/admin.less similarity index 100% rename from public/css/less/admin.less rename to public/less/admin.less diff --git a/public/css/less/bootstrap-tagsinput.less b/public/less/bootstrap-tagsinput.less similarity index 100% rename from public/css/less/bootstrap-tagsinput.less rename to public/less/bootstrap-tagsinput.less diff --git a/public/css/less/bootstrap.dark.less b/public/less/bootstrap.dark.less similarity index 100% rename from public/css/less/bootstrap.dark.less rename to public/less/bootstrap.dark.less diff --git a/public/css/less/bootstrap.light.less b/public/less/bootstrap.light.less similarity index 100% rename from public/css/less/bootstrap.light.less rename to public/less/bootstrap.light.less diff --git a/public/css/less/bootswatch.dark.less b/public/less/bootswatch.dark.less similarity index 100% rename from public/css/less/bootswatch.dark.less rename to public/less/bootswatch.dark.less diff --git a/public/css/less/bootswatch.light.less b/public/less/bootswatch.light.less similarity index 100% rename from public/css/less/bootswatch.light.less rename to public/less/bootswatch.light.less diff --git a/public/css/less/dashlist.less b/public/less/dashlist.less similarity index 100% rename from public/css/less/dashlist.less rename to public/less/dashlist.less diff --git a/public/css/less/fonts.less b/public/less/fonts.less similarity index 100% rename from public/css/less/fonts.less rename to public/less/fonts.less diff --git a/public/css/less/forms.less b/public/less/forms.less similarity index 100% rename from public/css/less/forms.less rename to public/less/forms.less diff --git a/public/css/less/gfbox.less b/public/less/gfbox.less similarity index 100% rename from public/css/less/gfbox.less rename to public/less/gfbox.less diff --git a/public/css/less/grafana-responsive.less b/public/less/grafana-responsive.less similarity index 100% rename from public/css/less/grafana-responsive.less rename to public/less/grafana-responsive.less diff --git a/public/css/less/grafana.less b/public/less/grafana.less similarity index 100% rename from public/css/less/grafana.less rename to public/less/grafana.less diff --git a/public/css/less/graph.less b/public/less/graph.less similarity index 100% rename from public/css/less/graph.less rename to public/less/graph.less diff --git a/public/css/less/login.less b/public/less/login.less similarity index 100% rename from public/css/less/login.less rename to public/less/login.less diff --git a/public/css/less/navbar.less b/public/less/navbar.less similarity index 100% rename from public/css/less/navbar.less rename to public/less/navbar.less diff --git a/public/css/less/overrides.less b/public/less/overrides.less similarity index 100% rename from public/css/less/overrides.less rename to public/less/overrides.less diff --git a/public/css/less/panel.less b/public/less/panel.less similarity index 100% rename from public/css/less/panel.less rename to public/less/panel.less diff --git a/public/css/less/search.less b/public/less/search.less similarity index 100% rename from public/css/less/search.less rename to public/less/search.less diff --git a/public/css/less/sidemenu.less b/public/less/sidemenu.less similarity index 100% rename from public/css/less/sidemenu.less rename to public/less/sidemenu.less diff --git a/public/css/less/singlestat.less b/public/less/singlestat.less similarity index 100% rename from public/css/less/singlestat.less rename to public/less/singlestat.less diff --git a/public/css/less/submenu.less b/public/less/submenu.less similarity index 100% rename from public/css/less/submenu.less rename to public/less/submenu.less diff --git a/public/css/less/tables_lists.less b/public/less/tables_lists.less similarity index 100% rename from public/css/less/tables_lists.less rename to public/less/tables_lists.less diff --git a/public/css/less/tabs.less b/public/less/tabs.less similarity index 100% rename from public/css/less/tabs.less rename to public/less/tabs.less diff --git a/public/css/less/tightform.less b/public/less/tightform.less similarity index 100% rename from public/css/less/tightform.less rename to public/less/tightform.less diff --git a/public/css/less/type.less b/public/less/type.less similarity index 100% rename from public/css/less/type.less rename to public/less/type.less diff --git a/public/css/less/validation.less b/public/less/validation.less similarity index 100% rename from public/css/less/validation.less rename to public/less/validation.less diff --git a/public/css/less/variables.dark.less b/public/less/variables.dark.less similarity index 100% rename from public/css/less/variables.dark.less rename to public/less/variables.dark.less diff --git a/public/css/less/variables.light.less b/public/less/variables.light.less similarity index 100% rename from public/css/less/variables.light.less rename to public/less/variables.light.less diff --git a/public/test/karma.conf.js b/public/test/karma.conf.js index d5d67d5218b..020c65a9e3c 100644 --- a/public/test/karma.conf.js +++ b/public/test/karma.conf.js @@ -9,7 +9,7 @@ module.exports = function(config) { // list of files / patterns to load in the browser files: [ 'public/test/test-main.js', - {pattern: 'public/app/**/*.js', included: false}, + {pattern: 'public/.app_gen/**/*.js', included: false}, {pattern: 'public/vendor/**/*.js', included: false}, {pattern: 'public/test/**/*.js', included: false}, {pattern: 'public/**/*.js', included: false} diff --git a/public/test/test-main.js b/public/test/test-main.js index 6abf176b3e5..b9c0ba986aa 100644 --- a/public/test/test-main.js +++ b/public/test/test-main.js @@ -1,5 +1,5 @@ require.config({ - baseUrl: 'http://localhost:9876/base/public/app', + baseUrl: 'http://localhost:9876/base/public/app_gen', paths: { specs: '../test/specs', diff --git a/public/views/index.html b/public/views/index.html index bf7c5c969c3..b3c1763ce51 100644 --- a/public/views/index.html +++ b/public/views/index.html @@ -19,7 +19,7 @@ - + diff --git a/tasks/build_task.js b/tasks/build_task.js index b5c2e14a479..4d7209017b8 100644 --- a/tasks/build_task.js +++ b/tasks/build_task.js @@ -6,11 +6,11 @@ module.exports = function(grunt) { 'jshint:source', 'jshint:tests', 'jscs', - 'karma:test', 'clean:on_start', - 'less:src', - 'concat:cssDark', - 'concat:cssLight', + 'copy:app_gen_build', + 'typescript:build', + 'karma:test', + 'css', 'copy:everything_but_less_to_temp', 'htmlmin:build', 'ngtemplates', @@ -25,7 +25,6 @@ module.exports = function(grunt) { 'uglify:dest' ]); - // task to add [[.AppSubUrl]] to reved path grunt.registerTask('remapFilerev', function(){ var root = grunt.config().destDir; diff --git a/tasks/default_task.js b/tasks/default_task.js index 0bd46b9f5f9..edf2a38b35a 100644 --- a/tasks/default_task.js +++ b/tasks/default_task.js @@ -1,6 +1,16 @@ // Lint and build CSS module.exports = function(grunt) { - grunt.registerTask('css', ['less:src', 'concat:cssDark', 'concat:cssLight']); - grunt.registerTask('default', ['jscs', 'jshint', 'css']); + 'use strict'; + + grunt.registerTask('css', ['less', 'concat:cssDark', 'concat:cssLight']); + grunt.registerTask('default', [ + 'jscs', + 'jshint', + 'clean:gen', + 'copy:everything_but_ts_and_less', + 'css', + 'typescript:build' + ]); + grunt.registerTask('test', ['default', 'karma:test']); }; diff --git a/tasks/options/clean.js b/tasks/options/clean.js index 26bc01bc617..49f09f10e7c 100644 --- a/tasks/options/clean.js +++ b/tasks/options/clean.js @@ -1,6 +1,9 @@ module.exports = function(config) { + 'use strict'; + return { - on_start: ['<%= destDir %>', '<%= tempDir %>'], + release: ['<%= destDir %>', '<%= tempDir %>', '<%= genDir %>'], + gen: ['<%= genDir %>'], temp: ['<%= tempDir %>'] }; }; diff --git a/tasks/options/concat.js b/tasks/options/concat.js index c325afd7f51..648d94fdbcc 100644 --- a/tasks/options/concat.js +++ b/tasks/options/concat.js @@ -4,25 +4,25 @@ module.exports = function(config) { return { cssDark: { src: [ - '<%= srcDir %>/vendor/css/normalize.min.css', - '<%= srcDir %>/vendor/css/timepicker.css', - '<%= srcDir %>/vendor/css/spectrum.css', - '<%= srcDir %>/css/bootstrap.dark.min.css', - '<%= srcDir %>/css/bootstrap-responsive.min.css', - '<%= srcDir %>/vendor/css/font-awesome.min.css' + '<%= genDir %>/vendor/css/normalize.min.css', + '<%= genDir %>/vendor/css/timepicker.css', + '<%= genDir %>/vendor/css/spectrum.css', + '<%= genDir %>/css/bootstrap.dark.min.css', + '<%= genDir %>/css/bootstrap-responsive.min.css', + '<%= genDir %>/vendor/css/font-awesome.min.css' ], - dest: '<%= srcDir %>/css/grafana.dark.min.css' + dest: '<%= genDir %>/css/grafana.dark.min.css' }, cssLight: { src: [ - '<%= srcDir %>/vendor/css/normalize.min.css', - '<%= srcDir %>/vendor/css/timepicker.css', - '<%= srcDir %>/vendor/css/spectrum.css', - '<%= srcDir %>/css/bootstrap.light.min.css', - '<%= srcDir %>/css/bootstrap-responsive.min.css', - '<%= srcDir %>/vendor/css/font-awesome.min.css' + '<%= genDir %>/vendor/css/normalize.min.css', + '<%= genDir %>/vendor/css/timepicker.css', + '<%= genDir %>/vendor/css/spectrum.css', + '<%= genDir %>/css/bootstrap.light.min.css', + '<%= genDir %>/css/bootstrap-responsive.min.css', + '<%= genDir %>/vendor/css/font-awesome.min.css' ], - dest: '<%= srcDir %>/css/grafana.light.min.css' + dest: '<%= genDir %>/css/grafana.light.min.css' }, js: { diff --git a/tasks/options/copy.js b/tasks/options/copy.js index 9bd4ad9571f..781042f9921 100644 --- a/tasks/options/copy.js +++ b/tasks/options/copy.js @@ -8,11 +8,11 @@ module.exports = function(config) { dest: '<%= tempDir %>' }, - app_gen_build: { - cwd: '<%= srcDir %>/app', + everything_but_less: { + cwd: '<%= srcDir %>', expand: true, - src: ['**/*.js', '**/*.html'], - dest: '<%= srcDir %>/.app_gen' + src: ['**/*', '!**/*.less'], + dest: '<%= genDir %>' } }; diff --git a/tasks/options/less.js b/tasks/options/less.js index 4d9fe764e03..b0a893e9a37 100644 --- a/tasks/options/less.js +++ b/tasks/options/less.js @@ -1,25 +1,16 @@ module.exports = function(config) { + return { - // this is the only task, other than copy, that runs on the src directory, since we don't really need - // the less files in the dist. Everything else runs from on temp, and require copys everything - // from temp -> dist - dist:{ - expand: true, - cwd:'<%= srcDir %>/vendor/bootstrap/less/', - src: ['bootstrap.dark.less', 'bootstrap.light.less'], - dest: '<%= tempDir %>/css/', - }, - // Compile in place when not building src:{ options: { - paths: ["<%= srcDir %>/vendor/bootstrap/less", "<%= srcDir %>/css/less"], - yuicompress:true + paths: ["<%= srcDir %>/vendor/bootstrap/less", "<%= srcDir %>/less"], + yuicompress: true }, files: { - "<%= srcDir %>/css/bootstrap.dark.min.css": "<%= srcDir %>/css/less/bootstrap.dark.less", - "<%= srcDir %>/css/bootstrap.light.min.css": "<%= srcDir %>/css/less/bootstrap.light.less", - "<%= srcDir %>/css/bootstrap-responsive.min.css": "<%= srcDir %>/css/less/grafana-responsive.less" + "<%= genDir %>/css/bootstrap.dark.min.css": "<%= srcDir %>/less/bootstrap.dark.less", + "<%= genDir %>/css/bootstrap.light.min.css": "<%= srcDir %>/less/bootstrap.light.less", + "<%= genDir %>/css/bootstrap-responsive.min.css": "<%= srcDir %>/less/grafana-responsive.less" } } }; -}; \ No newline at end of file +}; diff --git a/tasks/options/requirejs.js b/tasks/options/requirejs.js index 41061158c66..21b22d51c26 100644 --- a/tasks/options/requirejs.js +++ b/tasks/options/requirejs.js @@ -7,7 +7,7 @@ module.exports = function(config,grunt) { appDir: '<%= tempDir %>', dir: '<%= destDir %>', mainConfigFile: '<%= tempDir %>/app/components/require.config.js', - baseUrl: './app', + baseUrl: 'app_gen', waitSeconds: 0, modules: [], // populated below, @@ -37,9 +37,9 @@ module.exports = function(config,grunt) { // setup the modules require will build var requireModules = options.modules = [ - { - // main/common module - name: 'app', + { + // main/common module + name: 'app', include: [ 'kbn', 'text', @@ -66,7 +66,11 @@ module.exports = function(config,grunt) { 'plugins/datasource/graphite/datasource', 'plugins/datasource/influxdb_08/datasource', ] - } + }, + // { + // name: 'features/org/all', + // exclude: ['app'], + // } ]; var fs = require('fs'); diff --git a/tasks/options/typescript.js b/tasks/options/typescript.js index 87c1cab5573..8b60604c6a0 100644 --- a/tasks/options/typescript.js +++ b/tasks/options/typescript.js @@ -4,7 +4,7 @@ module.exports = function() { return { build: { src: ['public/app/**/*.ts'], - dest: 'public/.app_gen', + dest: 'public_gen/app', options: { module: 'amd', //or commonjs target: 'es5', //or es3 @@ -14,9 +14,20 @@ module.exports = function() { generateTsConfig: true, } }, + + // build2: { + // src: ['public/app/alerting#<{(||)}>#*.ts'], + // dest: 'public/.app_gen/alerting/all.js', + // options: { + // target: 'es5', //or es3 + // declaration: true, + // sourceMap: true, + // } + // }, + watch: { src: ['public/app/**/*.ts'], - dest: 'public/.app_gen', + dest: 'public/app_gen', options: { module: 'amd', //or commonjs target: 'es5', //or es3 diff --git a/tasks/options/watch.js b/tasks/options/watch.js index 692ec08e179..21d3c6ad340 100644 --- a/tasks/options/watch.js +++ b/tasks/options/watch.js @@ -1,16 +1,16 @@ module.exports = function(config) { return { css: { - files: [ '<%= srcDir %>/css/**/*.less' ], + files: [ '<%= srcDir %>/less/**/*.less' ], tasks: ['css'], options: { spawn: false } }, - app_gen: { - files: ['<%= srcDir %>/app/**/*.js', '<%= srcDir %>/app/**/*.html'], - tasks: ['copy:app_gen_build'], + copy_to_gen: { + files: ['<%= srcDir %>/**/*', '!<%= srcDir %>/**/*.less'], + tasks: ['copy:everything_but_less'], options: { spawn: false } diff --git a/tsconfig.json b/tsconfig.json index e8b34801c24..dfc160e0e64 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "sourceMap": true, "declaration": true, - "outDir": "public/.app_gen", + "outDir": "public_gen/app", "target": "ES5", "rootDir": "public/app", "module": "amd", @@ -12,6 +12,10 @@ "public/app/components/panelmeta.ts", "public/app/controllers/fileSearcher.ts", "public/app/controllers/testCtrl.ts", + "public/app/core/core.ts", + "public/app/core/directives/cool_dir.ts", + "public/app/core/routes/module_loader.ts", + "public/app/core/time_series.ts", "public/app/headers/require.d.ts" ] } \ No newline at end of file