From 82d5d1b003823cda4064ae91a488425bac44e3d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= <torkel.odegaard@gmail.com> Date: Tue, 9 Feb 2016 09:53:56 +0100 Subject: [PATCH] feat(plugins): working on plugin examples --- examples/nginx-app/css/dark.css | 0 examples/nginx-app/css/light.css | 0 examples/nginx-app/img/logo_large.png | Bin 0 -> 14460 bytes examples/nginx-app/img/logo_small.png | Bin 0 -> 6430 bytes examples/nginx-app/module.js | 28 +++++++++++ examples/nginx-app/panel/module.js | 21 +++++++++ examples/nginx-app/panel/plugin.json | 6 +++ examples/nginx-app/partials/config.html | 1 + examples/nginx-app/partials/stream.html | 12 +++++ examples/nginx-app/plugin.json | 44 ++++++++++++++++++ .../module.js | 0 .../panel.html | 0 .../plugin.json | 0 public/app/{grafana.ts => app.ts} | 0 public/app/boot.js | 4 +- tasks/systemjs_task.js | 2 +- 16 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 examples/nginx-app/css/dark.css create mode 100644 examples/nginx-app/css/light.css create mode 100644 examples/nginx-app/img/logo_large.png create mode 100644 examples/nginx-app/img/logo_small.png create mode 100644 examples/nginx-app/module.js create mode 100644 examples/nginx-app/panel/module.js create mode 100644 examples/nginx-app/panel/plugin.json create mode 100644 examples/nginx-app/partials/config.html create mode 100644 examples/nginx-app/partials/stream.html create mode 100644 examples/nginx-app/plugin.json rename examples/{panel-plugin-boilerplate-es5 => panel-boilerplate-es5}/module.js (100%) rename examples/{panel-plugin-boilerplate-es5 => panel-boilerplate-es5}/panel.html (100%) rename examples/{panel-plugin-boilerplate-es5 => panel-boilerplate-es5}/plugin.json (100%) rename public/app/{grafana.ts => app.ts} (100%) diff --git a/examples/nginx-app/css/dark.css b/examples/nginx-app/css/dark.css new file mode 100644 index 00000000000..e69de29bb2d diff --git a/examples/nginx-app/css/light.css b/examples/nginx-app/css/light.css new file mode 100644 index 00000000000..e69de29bb2d diff --git a/examples/nginx-app/img/logo_large.png b/examples/nginx-app/img/logo_large.png new file mode 100644 index 0000000000000000000000000000000000000000..c28955960e4d842f8d47496e9382e7ceadae2100 GIT binary patch literal 14460 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 TE(&}n2vU?&eO@MG67+un{$ko6 literal 0 HcmV?d00001 diff --git a/examples/nginx-app/img/logo_small.png b/examples/nginx-app/img/logo_small.png new file mode 100644 index 0000000000000000000000000000000000000000..a6040f66f3da060c679acd661cf8b1f53eb6720d GIT binary patch literal 6430 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 literal 0 HcmV?d00001 diff --git a/examples/nginx-app/module.js b/examples/nginx-app/module.js new file mode 100644 index 00000000000..9e061df04cc --- /dev/null +++ b/examples/nginx-app/module.js @@ -0,0 +1,28 @@ +define([ + 'angular', + 'app/app' +], function(angular, app) { + + var module = angular.module('nginx-app', []); + app.default.useModule(module); + + module.config(function($routeProvider) { + $routeProvider + .when('/nginx/stream', { + templateUrl: 'public/plugins/nginx-app/partials/stream.html', + }); + }); + + function NginxConfigCtrl() { + this.appEditCtrl.beforeUpdate = function() { + alert('before!'); + }; + } + NginxConfigCtrl.templateUrl = 'public/plugins/nginx-app/partials/config.html'; + + + return { + ConfigCtrl: NginxConfigCtrl + }; + +}); diff --git a/examples/nginx-app/panel/module.js b/examples/nginx-app/panel/module.js new file mode 100644 index 00000000000..9ccc5b6c962 --- /dev/null +++ b/examples/nginx-app/panel/module.js @@ -0,0 +1,21 @@ +define([ + 'app/plugins/sdk' +], function(sdk) { + 'use strict'; + + var NginxPanel = (function(_super) { + function NginxPanel($scope, $injector) { + _super.call(this, $scope, $injector); + } + + NginxPanel.template = '<h2>nginx!</h2>'; + NginxPanel.prototype = Object.create(_super.prototype); + NginxPanel.prototype.constructor = NginxPanel; + + return NginxPanel; + })(sdk.PanelCtrl); + + return { + PanelCtrl: NginxPanel + }; +}); diff --git a/examples/nginx-app/panel/plugin.json b/examples/nginx-app/panel/plugin.json new file mode 100644 index 00000000000..4160f9ae6f3 --- /dev/null +++ b/examples/nginx-app/panel/plugin.json @@ -0,0 +1,6 @@ +{ + "type": "panel", + "name": "Nginx Panel", + "id": "nginx-panel", + "staticRoot": "." +} diff --git a/examples/nginx-app/partials/config.html b/examples/nginx-app/partials/config.html new file mode 100644 index 00000000000..cdd6b8d9b60 --- /dev/null +++ b/examples/nginx-app/partials/config.html @@ -0,0 +1 @@ +<h2>nginx config</h2> diff --git a/examples/nginx-app/partials/stream.html b/examples/nginx-app/partials/stream.html new file mode 100644 index 00000000000..a89afaced57 --- /dev/null +++ b/examples/nginx-app/partials/stream.html @@ -0,0 +1,12 @@ +<topnav title="Nginx" icon="fa fa-fw fa-cubes" subnav="true"> + <ul class="nav"> + <li class="active" ><a href="org/apps">Overview</a></li> + </ul> +</topnav> + +<div class="page-container" style="background: transparent; border: 0;"> + <div class="page-wide" ng-init="ctrl.init()"> + <h1>NGINX app</h1> + </div> +</div> + diff --git a/examples/nginx-app/plugin.json b/examples/nginx-app/plugin.json new file mode 100644 index 00000000000..6941fe87f17 --- /dev/null +++ b/examples/nginx-app/plugin.json @@ -0,0 +1,44 @@ +{ + "type": "app", + "name": "Nginx", + "id": "nginx-app", + + "staticRoot": ".", + + "pages": [ + {"name": "Live stream", "url": "nginx/stream", "reqRole": "Editor"}, + {"name": "Log view", "url": "nginx/log", "reqRole": "Editor"} + ], + + "css": { + "dark": "css/dark.css", + "light": "css/light.css" + }, + + "info": { + "description": "Official Grafana Nginx App & Dashboard bundle", + "author": { + "name": "Nginx Inc.", + "url": "http://nginx.com" + }, + "keywords": ["nginx"], + "logos": { + "small": "img/logo_small.png", + "large": "img/logo_large.png" + }, + "links": [ + {"name": "Project site", "url": "http://project.com"}, + {"name": "License & Terms", "url": "http://license.com"} + ], + "version": "1.0.0", + "updated": "2015-02-10" + }, + + "dependencies": { + "grafanaVersion": "2.6.x", + "plugins": [ + {"type": "datasource", "id": "graphite", "name": "Graphite", "version": "1.0.0"}, + {"type": "panel", "id": "graph", "name": "Graph", "version": "1.0.0"} + ] + } +} diff --git a/examples/panel-plugin-boilerplate-es5/module.js b/examples/panel-boilerplate-es5/module.js similarity index 100% rename from examples/panel-plugin-boilerplate-es5/module.js rename to examples/panel-boilerplate-es5/module.js diff --git a/examples/panel-plugin-boilerplate-es5/panel.html b/examples/panel-boilerplate-es5/panel.html similarity index 100% rename from examples/panel-plugin-boilerplate-es5/panel.html rename to examples/panel-boilerplate-es5/panel.html diff --git a/examples/panel-plugin-boilerplate-es5/plugin.json b/examples/panel-boilerplate-es5/plugin.json similarity index 100% rename from examples/panel-plugin-boilerplate-es5/plugin.json rename to examples/panel-boilerplate-es5/plugin.json diff --git a/public/app/grafana.ts b/public/app/app.ts similarity index 100% rename from public/app/grafana.ts rename to public/app/app.ts diff --git a/public/app/boot.js b/public/app/boot.js index 7ba0fb12bf2..d9924ca9dad 100644 --- a/public/app/boot.js +++ b/public/app/boot.js @@ -1,8 +1,8 @@ (function bootGrafana() { 'use strict'; - System.import('app/grafana').then(function(grafana) { - grafana.default.init(); + System.import('app/app').then(function(app) { + app.default.init(); }).catch(function(err) { console.log('Loading app module failed: ', err); }); diff --git a/tasks/systemjs_task.js b/tasks/systemjs_task.js index a2a4b6433d7..0f1a63883e0 100644 --- a/tasks/systemjs_task.js +++ b/tasks/systemjs_task.js @@ -11,7 +11,7 @@ module.exports = function(grunt) { console.log('Starting systemjs-builder'); var modules = [ - 'app/grafana', + 'app/app', 'app/features/all', 'app/plugins/panel/**/module', 'app/plugins/datasource/graphite/datasource',