Commit 77bfd85e by Torkel Ödegaard

Changed all kibana words to grafana

parent 272ea9fe
......@@ -18,7 +18,7 @@ function (angular, $, _, appLevelRequire, config) {
"use strict";
var app = angular.module('kibana', []),
var app = angular.module('grafana', []),
// we will keep a reference to each module defined before boot, so that we can
// go back and allow it to define new features later. Once we boot, this will be false
pre_boot_modules = [],
......@@ -64,14 +64,14 @@ function (angular, $, _, appLevelRequire, config) {
'$strap.directives',
'ngSanitize',
'ngDragDrop',
'kibana',
'grafana',
'pasvaz.bindonce'
];
var module_types = ['controllers', 'directives', 'factories', 'services', 'filters', 'routes'];
_.each(module_types, function (type) {
var module_name = 'kibana.'+type;
var module_name = 'grafana.'+type;
// create the module
app.useModule(angular.module(module_name, []));
// push it into the apps dependencies
......
/** @scratch /index/0
* = Kibana
*
* // Why can't I have a preamble here?
*
* == Introduction
*
* Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for
* ElasticSearch. Kibana is a snap to setup and start using. Written entirely in HTML and Javascript
* it requires only a plain webserver, Kibana requires no fancy server side components.
* Kibana strives to be easy to get started with, while also being flexible and powerful, just like
* Elasticsearch.
*
* include::configuration/config.js.asciidoc[]
*
* include::panels.asciidoc[]
*
*/
define([
'angular',
'jquery',
......@@ -27,7 +8,7 @@ define([
function (angular, $, config, _) {
"use strict";
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('DashCtrl', function(
$scope, $rootScope, dashboardKeybindings, filterSrv, dashboard, panelMoveSrv, timer) {
......
......@@ -7,7 +7,7 @@ define([
function (angular, _, moment) {
'use strict';
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('dashLoader', function($scope, $rootScope, $http, alertSrv, $location, playlistSrv, elastic) {
......
......@@ -6,7 +6,7 @@ define([
function (angular, config, _) {
"use strict";
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('GrafanaCtrl', function($scope, alertSrv, grafanaVersion, $rootScope) {
......
......@@ -6,7 +6,7 @@ define([
function (angular, app, _) {
'use strict';
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('GraphiteImportCtrl', function($scope, $rootScope, $timeout, datasourceSrv) {
......
......@@ -8,7 +8,7 @@ define([
function (angular, _, config, gfunc, Parser) {
'use strict';
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('GraphiteTargetCtrl', function($scope) {
......
......@@ -4,7 +4,7 @@ define([
function (angular) {
'use strict';
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
var seriesList = null;
......
......@@ -4,7 +4,7 @@ define([
function (angular) {
'use strict';
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('InspectCtrl', function($scope) {
var model = $scope.inspector;
......@@ -47,7 +47,7 @@ function (angular) {
});
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('iframeContent', function($parse) {
return {
restrict: 'A',
......
......@@ -6,7 +6,7 @@ define([
function (angular, _, config) {
'use strict';
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('MetricKeysCtrl', function($scope, $http, $q) {
var elasticSearchUrlForMetricIndex = config.elasticsearch + '/' + config.grafana_metrics_index + '/';
......
......@@ -6,7 +6,7 @@ define([
function (angular, _, kbn) {
'use strict';
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('OpenTSDBTargetCtrl', function($scope, $timeout) {
......
......@@ -6,7 +6,7 @@ define([
function (angular, _, config) {
'use strict';
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('PlaylistCtrl', function($scope, playlistSrv) {
......
......@@ -6,7 +6,7 @@ define([
function (angular, app, _) {
'use strict';
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('PulldownCtrl', function($scope, $rootScope, $timeout) {
var _d = {
......
......@@ -6,7 +6,7 @@ define([
function (angular, app, _) {
'use strict';
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('RowCtrl', function($scope, $rootScope, $timeout) {
var _d = {
......@@ -136,12 +136,12 @@ function (angular, app, _) {
*
* [partintro]
* --
* *Kibana* dashboards are made up of blocks called +panels+. Panels are organized into rows
* *grafana* dashboards are made up of blocks called +panels+. Panels are organized into rows
* and can serve many purposes, though most are designed to provide the results of a query or
* multiple queries as a visualization. Other panels may show collections of documents or
* allow you to insert instructions for your users.
*
* Panels can be configured easily via the Kibana web interface. For more advanced usage, such
* Panels can be configured easily via the grafana web interface. For more advanced usage, such
* as templated or scripted dashboards, documentation of panel properties is available in this
* section. You may find settings here which are not exposed via the web interface.
*
......
......@@ -7,7 +7,7 @@ define([
function (angular, _, config, $) {
'use strict';
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('SearchCtrl', function($scope, $rootScope, $element, $location, elastic) {
......
......@@ -6,7 +6,7 @@ define([
function (angular, app, _) {
'use strict';
var module = angular.module('kibana.controllers');
var module = angular.module('grafana.controllers');
module.controller('SubmenuCtrl', function($scope) {
var _d = {
......
......@@ -9,7 +9,7 @@ function (angular, app, _, $, gfunc) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('graphiteAddFunc', function($compile) {
var inputTemplate = '<input type="text"'+
' class="grafana-target-segment-input input-medium grafana-target-segment-input"' +
......
......@@ -7,7 +7,7 @@ function (angular, app, _) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('addPanel', function($compile) {
return {
restrict: 'A',
......
......@@ -2,8 +2,8 @@ define([
'./addPanel',
'./arrayJoin',
'./dashUpload',
'./kibanaPanel',
'./kibanaSimplePanel',
'./grafanaPanel',
'./grafanaSimplePanel',
'./ngBlur',
'./ngModelOnBlur',
'./tip',
......
......@@ -7,7 +7,7 @@ function (angular, app, _) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('arrayJoin', function() {
return {
restrict: 'A',
......
......@@ -7,7 +7,7 @@ function (angular, app, _) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('bodyClass', function() {
return {
link: function($scope, elem) {
......
......@@ -7,7 +7,7 @@ function (angular, $) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('bootstrapTagsinput', function() {
function getItemProperty(scope, property) {
......@@ -84,7 +84,7 @@ function (angular, $) {
});
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('gfDropdown', function ($parse, $compile, $timeout) {
function buildTemplate(items, placement) {
......
......@@ -7,7 +7,7 @@ function (angular, _, $) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('configModal', function($modal, $q, $timeout) {
return {
restrict: 'A',
......
......@@ -5,7 +5,7 @@ define([
function (angular) {
'use strict';
var module = angular.module('kibana.directives');
var module = angular.module('grafana.directives');
module.directive('confirmClick', function() {
return {
......
......@@ -4,7 +4,7 @@ define([
function (angular) {
'use strict';
var module = angular.module('kibana.directives');
var module = angular.module('grafana.directives');
module.directive('dashUpload', function(timer, alertSrv) {
return {
......
......@@ -8,7 +8,7 @@ define([
function (angular, $, kbn, moment, _) {
'use strict';
var module = angular.module('kibana.directives');
var module = angular.module('grafana.directives');
module.directive('grafanaGraph', function($rootScope) {
return {
......@@ -371,7 +371,7 @@ function (angular, $, kbn, moment, _) {
function render_panel_as_graphite_png(url) {
url += '&width=' + elem.width();
url += '&height=' + elem.css('height').replace('px', '');
url += '&bgcolor=1f1f1f'; // @grayDarker & @kibanaPanelBackground
url += '&bgcolor=1f1f1f'; // @grayDarker & @grafanaPanelBackground
url += '&fgcolor=BBBFC2'; // @textColor & @grayLighter
url += scope.panel.stack ? '&areaMode=stacked' : '';
url += scope.panel.fill !== 0 ? ('&areaAlpha=' + (scope.panel.fill/10).toFixed(1)) : '';
......
......@@ -8,8 +8,8 @@ function (angular, $, _, PanelBaseCtrl) {
'use strict';
angular
.module('kibana.directives')
.directive('kibanaPanel', function($compile, $timeout, $rootScope, $injector) {
.module('grafana.directives')
.directive('grafanaPanel', function($compile, $timeout, $rootScope, $injector) {
var container = '<div class="panel-container"></div>';
var content = '<div class="panel-content"></div>';
......
......@@ -6,8 +6,8 @@ function (angular, _) {
'use strict';
angular
.module('kibana.directives')
.directive('kibanaSimplePanel', function($compile) {
.module('grafana.directives')
.directive('grafanaSimplePanel', function($compile) {
var panelLoading = '<span ng-show="panelMeta.loading == true">' +
'<span style="font-size:72px;font-weight:200">'+
'<i class="icon-spinner icon-spin"></i> loading ...' +
......
......@@ -5,7 +5,7 @@ function (angular) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('grafanaVersionCheck', function($http, grafanaVersion) {
return {
restrict: 'A',
......
......@@ -7,7 +7,7 @@ function (angular, _, $) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('graphiteFuncEditor', function($compile) {
var funcSpanTemplate = '<a ng-click="">{{func.def.name}}</a><span>(</span>';
......
......@@ -7,7 +7,7 @@ function (angular, _, $) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('influxdbFuncEditor', function($compile) {
var funcSpanTemplate = '<a gf-dropdown="functionMenu" class="dropdown-toggle" ' +
......
......@@ -5,7 +5,7 @@ function (angular) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('ngBlur', ['$parse', function($parse) {
return function(scope, element, attr) {
var fn = $parse(attr['ngBlur']);
......
......@@ -3,7 +3,7 @@ function (angular) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('ngModelOnblur', function() {
return {
restrict: 'A',
......
......@@ -6,7 +6,7 @@ function (angular) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('spectrumPicker', function() {
return {
restrict: 'E',
......
......@@ -6,7 +6,7 @@ function (angular, kbn) {
'use strict';
angular
.module('kibana.directives')
.module('grafana.directives')
.directive('tip', function($compile) {
return {
restrict: 'E',
......
define(['angular', 'jquery', 'underscore', 'moment'], function (angular, $, _, moment) {
'use strict';
var module = angular.module('kibana.filters');
var module = angular.module('grafana.filters');
module.filter('stringSort', function() {
return function(input) {
......
......@@ -9,7 +9,7 @@ define([
function (angular, app, _) {
'use strict';
var module = angular.module('kibana.panels.annotations', []);
var module = angular.module('grafana.panels.annotations', []);
app.useModule(module);
module.controller('AnnotationsEditorCtrl', function($scope, datasourceSrv, $rootScope) {
......
......@@ -12,7 +12,7 @@ define([
function (angular, app, _) {
'use strict';
var module = angular.module('kibana.panels.annotations', []);
var module = angular.module('grafana.panels.annotations', []);
app.useModule(module);
module.controller('AnnotationsCtrl', function($scope, datasourceSrv, $rootScope) {
......
......@@ -11,7 +11,7 @@ define([
function (angular, app, _) {
'use strict';
var module = angular.module('kibana.panels.filtering', []);
var module = angular.module('grafana.panels.filtering', []);
app.useModule(module);
module.controller('filtering', function($scope, datasourceSrv, $rootScope, $timeout, $q) {
......
......@@ -32,7 +32,7 @@ function (angular, app, $, _, kbn, moment, timeSeries) {
'use strict';
var module = angular.module('kibana.panels.graph', []);
var module = angular.module('grafana.panels.graph', []);
app.useModule(module);
module.controller('graph', function($scope, $rootScope, datasourceSrv, $timeout, annotationsSrv) {
......
......@@ -20,7 +20,7 @@ define([
function (angular, app, _, require) {
'use strict';
var module = angular.module('kibana.panels.text', []);
var module = angular.module('grafana.panels.text', []);
app.useModule(module);
module.controller('text', function($scope, filterSrv) {
......
......@@ -22,7 +22,7 @@ define([
function (angular, app, _, moment, kbn) {
'use strict';
var module = angular.module('kibana.panels.timepicker', []);
var module = angular.module('grafana.panels.timepicker', []);
app.useModule(module);
module.controller('timepicker', function($scope, $modal, $q) {
......
......@@ -16,7 +16,7 @@
</a>
</li>
<li ng-repeat="pulldown in dashboard.nav" ng-controller="PulldownCtrl" ng-show="pulldown.enable"><kibana-simple-panel type="pulldown.type" ng-cloak></kibana-simple-panel></li>
<li ng-repeat="pulldown in dashboard.nav" ng-controller="PulldownCtrl" ng-show="pulldown.enable"><grafana-simple-panel type="pulldown.type" ng-cloak></grafana-simple-panel></li>
<li class="dropdown grafana-menu-save" ng-show="showDropdown('save')">
<a href="#" bs-tooltip="'Save'" data-placement="bottom" class="dropdown-toggle" data-toggle="dropdown" ng-click="openSaveDropdown()">
......
......@@ -16,7 +16,7 @@
<span class="small"><strong>{{pulldown.type}}:</strong></span>
</div>
<div class="submenu-panel-wrapper">
<kibana-simple-panel type="pulldown.type" ng-cloak></kibana-simple-panel>
<grafana-simple-panel type="pulldown.type" ng-cloak></grafana-simple-panel>
</div>
</div>
<div class="clearfix"></div>
......@@ -27,7 +27,7 @@
<div>
<div class="grafana-container container">
<!-- Rows -->
<div class="kibana-row" ng-controller="RowCtrl" ng-repeat="(row_name, row) in dashboard.rows" ng-style="row_style(row)">
<div class="grafana-row" ng-controller="RowCtrl" ng-repeat="(row_name, row) in dashboard.rows" ng-style="row_style(row)">
<div class="row-control">
<div class="grafana-row" style="padding:0px;margin:0px;position:relative;">
<div class="row-close" ng-show="row.collapse" data-placement="bottom" >
......@@ -96,7 +96,7 @@
<div ng-repeat="(name, panel) in row.panels|filter:isPanel" ng-hide="panel.hide" class="panel nospace" ng-style="{'width':!panel.span?'100%':(panel.span/1.2)*10+'%'}" data-drop="true" ng-model="row.panels" data-jqyoui-options jqyoui-droppable="{index:$index,mutate:false,onDrop:'panelMoveDrop',onOver:'panelMoveOver(true)',onOut:'panelMoveOut'}" ng-class="{'dragInProgress':dashboard.panelDragging}">
<!-- Content Panel -->
<div style="position:relative">
<kibana-panel type="panel.type" ng-cloak></kibana-panel>
<grafana-panel type="panel.type" ng-cloak></grafana-panel>
</div>
</div>
......
......@@ -5,7 +5,7 @@ define([
function (angular, config) {
"use strict";
var module = angular.module('kibana.routes');
var module = angular.module('grafana.routes');
module.config(function($routeProvider) {
$routeProvider
......
......@@ -6,7 +6,7 @@ define([
function (angular, $, config) {
"use strict";
var module = angular.module('kibana.routes');
var module = angular.module('grafana.routes');
module.config(function($routeProvider) {
$routeProvider
......
......@@ -7,7 +7,7 @@ define([
function (angular, $, config, _) {
"use strict";
var module = angular.module('kibana.routes');
var module = angular.module('grafana.routes');
module.config(function($routeProvider) {
$routeProvider
......
......@@ -9,7 +9,7 @@ define([
function (angular, $, config, _, kbn, moment) {
"use strict";
var module = angular.module('kibana.routes');
var module = angular.module('grafana.routes');
module.config(function($routeProvider) {
$routeProvider
......
......@@ -5,7 +5,7 @@ define([
function (angular, _) {
'use strict';
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.service('alertSrv', function($timeout) {
var self = this;
......
......@@ -5,7 +5,7 @@ define([
], function (angular, _, moment) {
'use strict';
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.service('annotationsSrv', function(datasourceSrv, $q, alertSrv, $rootScope) {
var promiseCached;
......
......@@ -6,7 +6,7 @@ define([
function(angular, $) {
"use strict";
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.service('dashboardKeybindings', function($rootScope, keyboardManager) {
......
......@@ -7,7 +7,7 @@ define([
function (angular, $, kbn, _) {
'use strict';
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.service('dashboard', function(timer, $rootScope, $timeout) {
......
......@@ -9,7 +9,7 @@ define([
function (angular, _, config) {
'use strict';
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.service('datasourceSrv', function($q, filterSrv, $http, GraphiteDatasource, InfluxDatasource, OpenTSDBDatasource) {
var datasources = {};
......
......@@ -5,7 +5,7 @@ define([
function(angular, config) {
"use strict";
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.service('elastic', function($http) {
......
......@@ -6,7 +6,7 @@ define([
], function (angular, _, config, kbn) {
'use strict';
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.factory('filterSrv', function($rootScope, $timeout, $routeParams) {
// defaults
......
......@@ -9,7 +9,7 @@ define([
function (angular, _, $, config, kbn, moment) {
'use strict';
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.factory('GraphiteDatasource', function($q, $http) {
......
......@@ -7,7 +7,7 @@ define([
function (angular, _, kbn, InfluxSeries) {
'use strict';
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.factory('InfluxDatasource', function($q, $http) {
......
......@@ -4,7 +4,7 @@ define([
function (angular) {
'use strict';
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
// This service was based on OpenJS library available in BSD License
// http://www.openjs.com/scripts/events/keyboard_shortcuts/index.php
......
......@@ -6,7 +6,7 @@ define([
function (angular, _, kbn) {
'use strict';
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.factory('OpenTSDBDatasource', function($q, $http) {
......
......@@ -5,7 +5,7 @@ define([
function (angular, _) {
'use strict';
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.service('panelMoveSrv', function($rootScope) {
......
......@@ -6,7 +6,7 @@ define([
function (angular, _, kbn) {
'use strict';
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.service('playlistSrv', function($location, $rootScope) {
var timerInstance;
......
......@@ -5,7 +5,7 @@ define([
function (angular, _) {
'use strict';
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.service('timer', function($timeout) {
// This service really just tracks a list of $timeout promises to give us a
......
......@@ -10,7 +10,7 @@ function(angular, _, config) {
return;
}
var module = angular.module('kibana.services');
var module = angular.module('grafana.services');
module.service('unsavedChangesSrv', function($rootScope, $modal, $q, $location, $timeout) {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -133,7 +133,7 @@
top: 54px;
height: 100%;
padding: 0 10px;
background: @kibanaPanelBackground;
background: @grafanaPanelBackground;
overflow-y: scroll;
height: 100%;
......
......@@ -72,7 +72,7 @@ code, pre {
.panel-container {
padding: 0px 0px 0px 0px;
background: @kibanaPanelBackground;
background: @grafanaPanelBackground;
margin: 5px;
}
......@@ -199,7 +199,7 @@ form input.ng-invalid {
border-width: 0 0 0px;
}
.kibana-row {
.grafana-row {
margin-bottom: 5px;
}
......@@ -241,7 +241,7 @@ form input.ng-invalid {
margin: 0px;
min-height: 30px !important;
line-height: 30px;
background: @kibanaPanelBackground;
background: @grafanaPanelBackground;
}
.row-open {
......@@ -612,6 +612,6 @@ div.flot-text {
// pre
code, pre {
background-color: @kibanaPanelBackground;
background-color: @grafanaPanelBackground;
color: @textColor;
}
\ No newline at end of file
......@@ -25,9 +25,9 @@
@pink: #FF4444;
@purple: #9933CC;
// Kibana Variables
// grafana Variables
// -------------------------
@kibanaPanelBackground: @grayDarker;
@grafanaPanelBackground: @grayDarker;
// Submenu
@submenuBackground: #292929;
......
......@@ -29,9 +29,9 @@
@pink: #E671B8;
@purple: #9954BB;
// Kibana Variables
// grafana Variables
// -------------------------
@kibanaPanelBackground: @white;
@grafanaPanelBackground: @white;
// Submenu
@submenuBackground: rgb(218, 217, 217);
......
......@@ -9,7 +9,7 @@ define([
var _filterSrv;
var _dashboard;
beforeEach(module('kibana.services'));
beforeEach(module('grafana.services'));
beforeEach(module(function(){
_dashboard = dashboardMock.create();
}));
......
......@@ -6,7 +6,7 @@
describe('Graph panel controller', function() {
var _graphPanelCtrl;
beforeEach(module('kibana.panels.graphite'));
beforeEach(module('grafana.panels.graphite'));
beforeEach(module(function($provide){
$provide.value('filterSrv',{});
}));
......
......@@ -5,7 +5,7 @@ define([
describe('graphiteTargetCtrl', function() {
var _targetCtrl;
beforeEach(module('kibana.services'));
beforeEach(module('grafana.services'));
beforeEach(module(function($provide){
$provide.value('filterSrv',{});
}));
......
......@@ -113,10 +113,10 @@ require([
], function(angular) {
'use strict';
angular.module('kibana', []);
angular.module('kibana.services', ['$strap.directives']);
angular.module('kibana.panels', []);
angular.module('kibana.filters', []);
angular.module('grafana', []);
angular.module('grafana.services', ['$strap.directives']);
angular.module('grafana.panels', []);
angular.module('grafana.filters', []);
require([
'specs/lexer-specs',
......
......@@ -7,7 +7,7 @@ module.exports = function(config) {
options: {
bootstrap: function(module, script) {
return "define('components/partials', ['angular'], function(angular) { \n" +
"angular.module('kibana').run(['$templateCache', function($templateCache) { \n" +
"angular.module('grafana').run(['$templateCache', function($templateCache) { \n" +
script +
'\n}]);' +
'\n});';
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment