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',