Commit 8e154148 by Rashid Khan

Added column panel, refactored panel adding from rows to include panel specific…

Added column panel, refactored panel adding from rows to include panel specific parameters. Moved call to init function to template to avoid double init
parent 30f036ad
/* /*
elasticsearch: URL to your elasticsearch server elasticsearch: URL to your elasticsearch server
kibana_index: The default ES index to use for storing Kibana specific object
such as stored dashboards
timeformat: Format for time in histograms (might go away) timeformat: Format for time in histograms (might go away)
modules: Panel modules to load. In the future these will be inferred modules: Panel modules to load. In the future these will be inferred
from your initial dashboard, though if you share dashboards you from your initial dashboard, though if you share dashboards you
...@@ -13,9 +15,11 @@ If you need to configure the default dashboard, please see dashboard.js ...@@ -13,9 +15,11 @@ If you need to configure the default dashboard, please see dashboard.js
*/ */
var config = new Settings( var config = new Settings(
{ {
elasticsearch: 'http://localhost:9200', elasticsearch: 'http://demo.kibana.org',
kibana_index: "kibana-int",
timeformat: 'mm/dd HH:MM:ss', timeformat: 'mm/dd HH:MM:ss',
modules: ['histogram','map','pie','table','stringquery','sort', modules: ['histogram','map','pie','table','stringquery','sort',
'timepicker','text','fields','hits','dashcontrol'], 'timepicker','text','fields','hits','dashcontrol',
'column'],
} }
); );
...@@ -65,6 +65,11 @@ angular.module('kibana.controllers', []) ...@@ -65,6 +65,11 @@ angular.module('kibana.controllers', [])
$scope.global_alert = [] $scope.global_alert = []
} }
$scope.edit_path = function(type) {
if(type)
return 'panels/'+type+'/editor.html';
}
$scope.init(); $scope.init();
}) })
......
...@@ -2,4 +2,9 @@ ...@@ -2,4 +2,9 @@
/*global angular:true */ /*global angular:true */
'use strict'; 'use strict';
angular.module('kibana.filters', []) angular.module('kibana.filters', [])
\ No newline at end of file .filter('stringSort', function() {
return function(input) {
return input.sort();
}
});
\ No newline at end of file
<div ng-controller="column">
<div class="row-fluid">
<h4>Add Panel to Column</h4>
<select class="input-medium" ng-model="new_panel.type" ng-options="f for f in _.without(config.modules,'column')| stringSort" ng-change="reset_panel(new_panel.type);send_render();"></select>
<small>Select Type</small>
<div ng-show="!(_.isUndefined(new_panel.type))">
<div column-edit panel="new_panel" config="config" row="row" dashboards="dashboards" type="new_panel.type"></div>
<button ng-click="add_panel(new_panel); reset_panel();" class="btn btn-primary">Create Panel</button><br>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<h4>Panels</h4>
<table class="table table-condensed table-striped">
<thead>
<th>Title</th>
<th>Type</th>
<th>Height</th>
<th>Delete</th>
<th>Move</th>
</thead>
<tr ng-repeat="app in panel.panels">
<td>{{app.title}}</td>
<td>{{app.type}}</td>
<td><input type="text" class="input-small" ng-model="app.height"></input></td>
<td><i ng-click="panel.panels = _.without(panel.panels,app)" class="pointer icon-remove"></i></td>
<td><i ng-click="_.move(panel.panels,$index,$index-1)" ng-hide="$first" class="pointer icon-arrow-up"></i></td>
<td><i ng-click="_.move(panel.panels,$index,$index+1)" ng-hide="$last" class="pointer icon-arrow-down"></i></td>
</tr>
</table>
</div>
</div>
</div>
\ No newline at end of file
<kibana-panel ng-controller="column" ng-init="init();">
<!-- Panels -->
<div ng-repeat="(name, panel) in panel.panels" ng-hide="panel.height == '0px'" class="row-fluid panel" style="min-height:{{panel.height}}; position:relative">
<!-- Error Panel -->
<div class="row-fluid">
<div class="span12 alert alert-error panel-error" ng-hide="!panel.error">
<a class="close" ng-click="panel.error=false">&times;</a>
<i class="icon-exclamation-sign"></i> <strong>Oops!</strong> {{panel.error}}
</div>
</div>
<!-- Content Panel -->
<div class="row-fluid">
<div class="span12" style="margin-top:0px" ng-include="'panels/'+panel.type+'/module.html'"></div>
</div>
</div>
</kibana-panel>
\ No newline at end of file
angular.module('kibana.column', [])
.controller('column', function($scope, $rootScope) {
// Set and populate defaults
var _d = {
panels : [
]
}
_.defaults($scope.panel,_d);
$scope.init = function(){
$scope.reset_panel();
}
$scope.toggle_row = function(panel) {
panel.collapse = panel.collapse ? false : true;
if (!panel.collapse) {
$timeout(function() {
$scope.send_render();
});
}
}
$scope.send_render = function() {
$scope.$broadcast('render');
}
$scope.add_panel = function(panel) {
$scope.panel.panels.push(panel);
}
$scope.reset_panel = function(type) {
$scope.new_panel = {
loading: false,
error: false,
sizeable: false,
span: 12,
height: "150px",
editable: true,
group: ['default'],
type: type,
};
};
})
.directive('columnEdit', function($compile,$timeout) {
return {
scope : {
new_panel:"=panel",
row:"=",
config:"=",
dashboards:"=",
type:"=type"
},
link: function(scope, elem, attrs, ctrl) {
scope.$on('render', function () {
// Make sure the digest has completed and populated the attributes
$timeout(function() {
// Create a reference to the new_panel as panel so that the existing
// editors work with our isolate scope
scope.panel = scope.new_panel
var template = '<div ng-include src="\'panels/column/panelgeneral.html\'"></div>'
if(!(_.isUndefined(scope.type)) && scope.type != "")
template = template+'<div ng-include src="\'panels/'+scope.type+'/editor.html\'"></div>';
//var new_elem = $compile(angular.element(template))(scope))
elem.html($compile(angular.element(template))(scope));
})
})
}
}
}).filter('withoutColumn', function() {
return function() {
return _.without(config.modules,'column');
};
});
\ No newline at end of file
<div class="row-fluid">
<div class="span4">
<label class="small">Title</label><input type="text" class="input-medium" ng-model='panel.title'></input>
</div>
<div class="span4">
<label class="small">Group(s) (comma seperated)</label><input array-join type="text" class="input-medium" ng-model='panel.group'></input>
</div>
<div class="span2">
<label class="small">Height</label> <input type="text" class="input-mini" ng-model='panel.height'></input>
</div>
<div class="span1">
<label class="small"> Editable </label><input type="checkbox" ng-model="panel.editable" ng-checked="panel.editable">
</div>
</div>
\ No newline at end of file
<div> <div ng-controller="dashcontrol">
<h5>Allow saving to</h5> <h5>Allow saving to</h5>
<div class="row-fluid"> <div class="row-fluid">
<div class="span2"> <div class="span2">
......
<kibana-panel ng-controller='dashcontrol'> <kibana-panel ng-controller='dashcontrol' ng-init="init()">
<label class='small'>Dashboard Control</label> <label class='small'>Dashboard Control</label>
<button class='btn' ng-show="panel.load.gist || panel.load.elasticsearch || panel.load.local" data-placement="bottom" data-unique="1" ng-click="elasticsearch_dblist(elasticsearch.query)" bs-popover="'panels/dashcontrol/load.html'"><i class='icon-folder-open'></i> <i class='icon-caret-down'></i></button> <button class='btn' ng-show="panel.load.gist || panel.load.elasticsearch || panel.load.local" data-placement="bottom" data-unique="1" ng-click="elasticsearch_dblist(elasticsearch.query)" bs-popover="'panels/dashcontrol/load.html'"><i class='icon-folder-open'></i> <i class='icon-caret-down'></i></button>
<button class='btn' ng-show="panel.save.gist || panel.save.elasticsearch || panel.save.local || panel.save.default" data-placement="bottom" data-unique="1" bs-popover="'panels/dashcontrol/save.html'"><i class='icon-save'></i> <i class='icon-caret-down'></i></button> <button class='btn' ng-show="panel.save.gist || panel.save.elasticsearch || panel.save.local || panel.save.default" data-placement="bottom" data-unique="1" bs-popover="'panels/dashcontrol/save.html'"><i class='icon-save'></i> <i class='icon-caret-down'></i></button>
......
...@@ -245,9 +245,6 @@ angular.module('kibana.dashcontrol', []) ...@@ -245,9 +245,6 @@ angular.module('kibana.dashcontrol', [])
return false return false
} }
$scope.init();
}) })
.directive('dashUpload', function(timer, eventBus){ .directive('dashUpload', function(timer, eventBus){
return { return {
......
<div class="row-fluid"> <div class="row-fluid" ng-controller="fields">
<div class="span3"><h6>Popup Position</h6> <div class="span3"><h6>Popup Position</h6>
<select class="input-small" ng-model="panel.micropanel_position" ng-options="f for f in ['top','right','bottom','left']" ng-change="reload_list();"></select></span> <select class="input-small" ng-model="panel.micropanel_position" ng-options="f for f in ['top','right','bottom','left']" ng-change="reload_list();"></select></span>
</div> </div>
......
<kibana-panel ng-controller='fields'> <kibana-panel ng-controller='fields' ng-init="init()">
<ul class="unstyled" style="height:{{row.height}};overflow-y:auto;overflow-x:hidden;" ng-class="{'inline': panel.arrange == 'horizontal'}"> <ul class="unstyled" style="height:{{row.height}};overflow-y:auto;overflow-x:hidden;" ng-class="{'inline': panel.arrange == 'horizontal'}">
<li ng-style="panel.style" ng-repeat="field in fields" > <li ng-style="panel.style" ng-repeat="field in fields" >
<i class="pointer" ng-class="{'icon-check': _.indexOf(active,field)>-1,'icon-check-empty': _.indexOf(active,field)<0}" ng-click="toggle_field(field)"></i> <i class="pointer" ng-class="{'icon-check': _.indexOf(active,field)>-1,'icon-check-empty': _.indexOf(active,field)<0}" ng-click="toggle_field(field)"></i>
......
...@@ -64,5 +64,4 @@ angular.module('kibana.fields', []) ...@@ -64,5 +64,4 @@ angular.module('kibana.fields', [])
return _.indexOf($scope.active,field) > -1 ? ['label','label-info'] : ''; return _.indexOf($scope.active,field) > -1 ? ['label','label-info'] : '';
} }
$scope.init();
}) })
\ No newline at end of file
<div class="row-fluid"> <div class="row-fluid" ng-controller='histogram'>
<div class="span3"> <div class="span3">
<form style="margin-bottom: 0px"> <form style="margin-bottom: 0px">
<h6>Label</h6> <h6>Label</h6>
......
<kibana-panel ng-controller='histogram' style="height:{{row.height}}"> <kibana-panel ng-controller='histogram' ng-init="init()" style="height:{{row.height}}">
<div histogram params="{{panel}}" style="height:{{row.height}};position:relative"></div> <div histogram params="{{panel}}" style="height:{{panel.height}};position:relative"></div>
</kibana-panel> </kibana-panel>
\ No newline at end of file
...@@ -7,6 +7,7 @@ angular.module('kibana.histogram', []) ...@@ -7,6 +7,7 @@ angular.module('kibana.histogram', [])
interval: secondsToHms(calculate_interval($scope.from,$scope.to,40,0)/1000), interval: secondsToHms(calculate_interval($scope.from,$scope.to,40,0)/1000),
show : ['bars','y-axis','x-axis','legend'], show : ['bars','y-axis','x-axis','legend'],
fill : 3, fill : 3,
height : $scope.panel.height || $scope.row.height,
timezone: 'browser', // browser, utc or a standard timezone timezone: 'browser', // browser, utc or a standard timezone
group : "default", group : "default",
} }
...@@ -128,9 +129,6 @@ angular.module('kibana.histogram', []) ...@@ -128,9 +129,6 @@ angular.module('kibana.histogram', [])
$scope.get_data(); $scope.get_data();
} }
// Ready, init
$scope.init();
}) })
.directive('histogram', function() { .directive('histogram', function() {
return { return {
...@@ -173,7 +171,7 @@ angular.module('kibana.histogram', []) ...@@ -173,7 +171,7 @@ angular.module('kibana.histogram', [])
// Populate element. Note that jvectormap appends, does not replace. // Populate element. Note that jvectormap appends, does not replace.
scripts.wait(function(){ scripts.wait(function(){
// Populate element // Populate element
$.plot(elem, scope.data, { try { $.plot(elem, scope.data, {
legend: { legend: {
show: show.legend, show: show.legend,
position: "nw", position: "nw",
...@@ -206,6 +204,9 @@ angular.module('kibana.histogram', []) ...@@ -206,6 +204,9 @@ angular.module('kibana.histogram', [])
hoverable: true, hoverable: true,
} }
}) })
} catch(e) {
console.log(e)
}
}) })
function tt(x, y, contents) { function tt(x, y, contents) {
......
<div class="row-fluid"> <div class="row-fluid" ng-controller="hits">
<div class="span11"> <div class="span11">
The hits panel shows a simple count of how many records match your filtered query. If multiple queries are sent from a single panel the <strong>first query will be displayed</strong> The hits panel shows a simple count of how many records match your filtered query. If multiple queries are sent from a single panel the <strong>first query will be displayed</strong>
</div> </div>
......
<kibana-panel ng-controller='hits'> <kibana-panel ng-controller='hits' ng-init="init()">
<p ng-style="panel.style">{{hits}}</p> <p ng-style="panel.style">{{hits}}</p>
</kibana-panel> </kibana-panel>
\ No newline at end of file
...@@ -56,6 +56,4 @@ angular.module('kibana.hits', []) ...@@ -56,6 +56,4 @@ angular.module('kibana.hits', [])
$scope.get_data(); $scope.get_data();
} }
$scope.init();
}) })
<div class="row-fluid"> <div class="row-fluid" ng-controller="map">
<div class="span11"> <div class="span11">
The map panel uses 2 letter country or US state codes to plot concentrations on a map. Darker terroritories mean more records matched that area. If multiple queries are sent from a single panel the <strong>first query will be displayed</strong> The map panel uses 2 letter country or US state codes to plot concentrations on a map. Darker terroritories mean more records matched that area. If multiple queries are sent from a single panel the <strong>first query will be displayed</strong>
</div> </div>
</div> </div>
<div class="row-fluid"> <div class="row-fluid">
<div class="span3">
<form>
<h6>Field</h6>
<input type="text" class="input-small" ng-model="panel.field">
</form>
</div>
<div class="span6"> <div class="span6">
<form class="input-append"> <form class="input-append">
<h6>Query</h6> <h6>Query</h6>
...@@ -12,13 +18,6 @@ ...@@ -12,13 +18,6 @@
<button class="btn" ng-click="get_data();"><i class="icon-search"></i></button> <button class="btn" ng-click="get_data();"><i class="icon-search"></i></button>
</form> </form>
</div> </div>
<div class="span4">
<form class="input-append">
<h6>Field</h6>
<input type="text" class="input-small" ng-model="panel.field">
<button class="btn" ng-click="get_data();"><i class="icon-search"></i></button>
</form>
</div>
<div class="span1"><h6>Map</h6> <div class="span1"><h6>Map</h6>
<select ng-change="$emit('render')" class="input-small" ng-model="panel.map" ng-options="f for f in ['world','europe','usa']"></select> <select ng-change="$emit('render')" class="input-small" ng-model="panel.map" ng-options="f for f in ['world','europe','usa']"></select>
</div> </div>
......
<kibana-panel ng-controller='map'> <kibana-panel ng-controller='map' ng-init="init()">
<div map params="{{panel}}" style="height:{{row.height}}"></div> <div map params="{{panel}}" style="height:{{panel.height}}"></div>
</kibana-panel> </kibana-panel>
\ No newline at end of file
...@@ -8,6 +8,7 @@ angular.module('kibana.map', []) ...@@ -8,6 +8,7 @@ angular.module('kibana.map', [])
colors : ['#C8EEFF', '#0071A4'], colors : ['#C8EEFF', '#0071A4'],
size : 100, size : 100,
exclude : [], exclude : [],
height : $scope.panel.height || $scope.row.height,
group : "default", group : "default",
} }
_.defaults($scope.panel,_d) _.defaults($scope.panel,_d)
...@@ -63,8 +64,6 @@ angular.module('kibana.map', []) ...@@ -63,8 +64,6 @@ angular.module('kibana.map', [])
$scope.get_data(); $scope.get_data();
} }
$scope.init()
}) })
.directive('map', function() { .directive('map', function() {
return { return {
......
<div class="row-fluid" ng-switch="panel.mode"> <div class="row-fluid" ng-switch="panel.mode" ng-controller="pie">
<div ng-switch-when="terms"> <div ng-switch-when="terms">
<div class="row-fluid"> <div class="row-fluid">
<div class="span4"> <div class="span4">
......
<kibana-panel ng-controller='pie'> <kibana-panel ng-controller='pie' ng-init="init()">
<div pie params="{{panel}}" style="height:{{row.height}};position:relative"></div> <div pie params="{{panel}}" style="height:{{panel.height}};position:relative"></div>
</kibana-panel> </kibana-panel>
\ No newline at end of file
...@@ -4,6 +4,7 @@ angular.module('kibana.pie', []) ...@@ -4,6 +4,7 @@ angular.module('kibana.pie', [])
// Set and populate defaults // Set and populate defaults
var _d = { var _d = {
query : { field:"_all", query:"*", goal: 1}, query : { field:"_all", query:"*", goal: 1},
height : $scope.panel.height || $scope.row.height,
size : 10, size : 10,
exclude : [], exclude : [],
donut : false, donut : false,
...@@ -178,10 +179,7 @@ angular.module('kibana.pie', []) ...@@ -178,10 +179,7 @@ angular.module('kibana.pie', [])
$scope.panel.index = _.isUndefined(time.index) ? $scope.panel.index : time.index $scope.panel.index = _.isUndefined(time.index) ? $scope.panel.index : time.index
$scope.get_data(); $scope.get_data();
} }
// Ready, init
$scope.init()
}) })
.directive('pie', function() { .directive('pie', function() {
return { return {
......
<kibana-panel ng-controller='sort' style="white-space: nowrap;"> <kibana-panel ng-controller='sort' ng-init="init()" style="white-space: nowrap;">
<label><small>{{panel.label}}</small></label> <label><small>{{panel.label}}</small></label>
<select style="width:85%" ng-model="panel.sort[0]" ng-change="set_sort()" ng-options="f for f in fields"></select> <select style="width:85%" ng-model="panel.sort[0]" ng-change="set_sort()" ng-options="f for f in fields"></select>
<i ng-click="toggle_sort()" class="pointer" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i> <i ng-click="toggle_sort()" class="pointer" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i>
......
...@@ -25,6 +25,4 @@ angular.module('kibana.sort', []) ...@@ -25,6 +25,4 @@ angular.module('kibana.sort', [])
$scope.panel.sort[1] = $scope.panel.sort[1] == 'asc' ? 'desc' : 'asc'; $scope.panel.sort[1] = $scope.panel.sort[1] == 'asc' ? 'desc' : 'asc';
$scope.set_sort(); $scope.set_sort();
} }
$scope.init();
}) })
\ No newline at end of file
<div> <div ng-controller="stringquery">
<div class="row-fluid"> <div class="row-fluid">
<div class="span3"> <div class="span3">
<label class="small">Mulit Query</label><input type="checkbox" ng-change="set_multi(panel.multi) "ng-model="panel.multi" ng-checked="panel.multi"> <label class="small">Mulit Query</label><input type="checkbox" ng-change="set_multi(panel.multi) "ng-model="panel.multi" ng-checked="panel.multi">
......
<kibana-panel ng-controller='stringquery'> <kibana-panel ng-controller='stringquery' ng-init="init()">
<div ng-show="!panel.multi"> <div ng-show="!panel.multi">
<form> <form>
<table class="form-horizontal"> <table class="form-horizontal">
......
...@@ -58,5 +58,4 @@ angular.module('kibana.stringquery', []) ...@@ -58,5 +58,4 @@ angular.module('kibana.stringquery', [])
$scope.panel.query.splice(index,1); $scope.panel.query.splice(index,1);
} }
$scope.init();
}); });
\ No newline at end of file
<div class="row-fluid"> <div class="row-fluid" ng-controller="table">
<div class="span12"> <div class="span12">
<form class="input-append"> <form class="input-append">
<h5>Query</h5> <h5>Query</h5>
......
<kibana-panel ng-controller='table'> <kibana-panel ng-controller='table' ng-init='init()'>
<div style="height:{{row.height}};overflow-y:auto;overflow-x:auto"> <div style="height:{{panel.height}};overflow-y:auto;overflow-x:auto">
<div class="row-fluid"> <div class="row-fluid">
<div class="span1 offset3" style="text-align:right"> <div class="span1 offset3" style="text-align:right">
<i ng-click="panel.offset = 0;get_data();" ng-show="panel.offset > 0" class='icon-circle-arrow-left pointer'></i> <i ng-click="panel.offset = 0;get_data();" ng-show="panel.offset > 0" class='icon-circle-arrow-left pointer'></i>
......
...@@ -6,6 +6,7 @@ angular.module('kibana.table', []) ...@@ -6,6 +6,7 @@ angular.module('kibana.table', [])
query : "*", query : "*",
size : 100, size : 100,
offset : 0, offset : 0,
height : $scope.panel.height || $scope.row.height,
sort : ['@timestamp','desc'], sort : ['@timestamp','desc'],
group : "default", group : "default",
style : {}, style : {},
...@@ -137,6 +138,4 @@ angular.module('kibana.table', []) ...@@ -137,6 +138,4 @@ angular.module('kibana.table', [])
$scope.get_data(); $scope.get_data();
} }
$scope.init();
}); });
\ No newline at end of file
<div> <div ng-controller="text">
<label class="small">Font Size</label> <select class="input-mini" ng-model="panel.style['font-size']" ng-options="f for f in ['6pt','7pt','8pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select> <label class="small">Font Size</label> <select class="input-mini" ng-model="panel.style['font-size']" ng-options="f for f in ['6pt','7pt','8pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select>
<label class=small>Content</label> <label class=small>Content</label>
<textarea ng-model="panel.content" rows="6" style="width:95%"></textarea> <textarea ng-model="panel.content" rows="6" style="width:95%"></textarea>
......
<kibana-panel ng-controller='text'> <kibana-panel ng-controller='text' ng-init="init()">
<p ng-show='!panel.allowhtml' ng-style="panel.style" ng-bind-html-unsafe="panel.content | striphtml | newlines"></p> <p ng-show='!panel.allowhtml' ng-style="panel.style" ng-bind-html-unsafe="panel.content | striphtml | newlines"></p>
</kibana-panel> </kibana-panel>
\ No newline at end of file
...@@ -11,7 +11,7 @@ angular.module('kibana.text', []) ...@@ -11,7 +11,7 @@ angular.module('kibana.text', [])
$scope.init = function() { $scope.init = function() {
} }
$scope.init();
}) })
.filter('newlines', function(){ .filter('newlines', function(){
return function (input) { return function (input) {
......
<div class="row-fluid"> <div class="row-fluid" ng-controller="timepicker">
<div class="span3"> <div class="span3">
<h6>Default Mode</h6> <h6>Default Mode</h6>
<select style="width:85%" ng-model="panel.mode" ng-options="f for f in ['relative','absolute','since']"></select> <select style="width:85%" ng-model="panel.mode" ng-options="f for f in ['relative','absolute','since']"></select>
......
<kibana-panel ng-controller='timepicker' style="white-space: nowrap;"> <kibana-panel ng-controller='timepicker' ng-init="init()" style="white-space: nowrap;">
<div class="row-fluid" ng-switch="panel.mode"> <div class="row-fluid" ng-switch="panel.mode">
<div ng-switch-when="absolute"> <div ng-switch-when="absolute">
<div class="span5"> <div class="span5">
......
...@@ -271,7 +271,4 @@ angular.module('kibana.timepicker', []) ...@@ -271,7 +271,4 @@ angular.module('kibana.timepicker', [])
} }
} }
// Great, every function is ready, init.
$scope.init();
}) })
\ No newline at end of file
<div class="row-fluid container" style="margin-top:50px"> <div class="row-fluid container" style="margin-top:50px">
<!-- Rows --> <!-- Rows -->
<div ng-controller="dashcontrol"></div> <div ng-controller="dashcontrol" ng-init="init()"></div>
<div class="row-fluid" ng-controller="RowCtrl" ng-repeat="(row_name, row) in dashboards.rows"> <div class="row-fluid" ng-controller="RowCtrl" ng-repeat="(row_name, row) in dashboards.rows">
<div class="span12"> <div class="span12">
<div class="row-fluid row-header" style="padding:0px;margin:0px;height:0px"> <div class="row-fluid row-header" style="padding:0px;margin:0px;height:0px">
......
...@@ -9,9 +9,9 @@ ...@@ -9,9 +9,9 @@
<h4 style="text-transform: capitalize;">{{panel.type}} <small> panel settings</small></h4> <h4 style="text-transform: capitalize;">{{panel.type}} <small> panel settings</small></h4>
<div ng-include src="'panels/'+panel.type+'/editor.html'">No additional settings are available for this type of panel.</div> <div ng-include src="edit_path(panel.type)">No additional settings are available for this type of panel.</div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-success" ng-click="dismiss();$broadcast('render')">Close</button> <button type="button" class="btn btn-success" ng-click="dismiss();send_render()">Close</button>
</div> </div>
\ No newline at end of file
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<div class="span4"> <div class="span4">
<label class="small">Group(s) (comma seperated)</label><input array-join type="text" class="input-medium" ng-model='panel.group'></input> <label class="small">Group(s) (comma seperated)</label><input array-join type="text" class="input-medium" ng-model='panel.group'></input>
</div> </div>
<div class="span2"> <div class="span2" ng-hide="panel.sizeable == false">
<label class="small">Span</label> <select class="input-mini" ng-model="panel.span" ng-options="f for f in [0,1,2,3,4,5,6,7,8,9,10,11,12]"></select> <label class="small">Span</label> <select class="input-mini" ng-model="panel.span" ng-options="f for f in [0,1,2,3,4,5,6,7,8,9,10,11,12]"></select>
</div> </div>
<div class="span1"> <div class="span1">
......
...@@ -17,12 +17,12 @@ ...@@ -17,12 +17,12 @@
</div> </div>
<div class="row-fluid"> <div class="row-fluid">
<h4>New Panel</h4> <h4>New Panel</h4>
<select class="input-medium" ng-model="panel.type" ng-options="f for f in config.modules"></select> <select class="input-medium" ng-model="panel.type" ng-options="f for f in config.modules|stringSort"></select>
<small>Select Type</small> <small>Select Type</small>
<div ng-show="!(_.isUndefined(panel.type))"> <div ng-show="!(_.isUndefined(panel.type))">
<div ng-include src="'partials/panelgeneral.html'"></div> <div ng-include src="'partials/panelgeneral.html'"></div>
<!--<div ng-include src="'panels/'+panel.type+'/editor.html'"></div>--> <div ng-include src="edit_path(panel.type)"></div>
<button ng-click="add_panel(row,panel); reset_panel();" class="btn btn-primary">Create Panel</button><br> <button ng-click="add_panel(row,panel); reset_panel();" class="btn btn-primary">Create Panel</button><br>
</div> </div>
</div> </div>
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
<tr ng-repeat="panel in row.panels"> <tr ng-repeat="panel in row.panels">
<td>{{panel.title}}</td> <td>{{panel.title}}</td>
<td>{{panel.type}}</td> <td>{{panel.type}}</td>
<td><select class="input-mini" ng-model="panel.span" ng-options="f for f in [0,1,2,3,4,5,6,7,8,9,10,11,12]"></select></td> <td><select ng-hide="panel.sizeable == false" class="input-mini" ng-model="panel.span" ng-options="f for f in [0,1,2,3,4,5,6,7,8,9,10,11,12]"></select></td>
<td><i ng-click="row.panels = _.without(row.panels,panel)" class="pointer icon-remove"></i></td> <td><i ng-click="row.panels = _.without(row.panels,panel)" class="pointer icon-remove"></i></td>
<td><i ng-click="_.move(row.panels,$index,$index-1)" ng-hide="$first" class="pointer icon-arrow-up"></i></td> <td><i ng-click="_.move(row.panels,$index,$index-1)" ng-hide="$first" class="pointer icon-arrow-up"></i></td>
<td><i ng-click="_.move(row.panels,$index,$index+1)" ng-hide="$last" class="pointer icon-arrow-down"></i></td> <td><i ng-click="_.move(row.panels,$index,$index+1)" ng-hide="$last" class="pointer icon-arrow-down"></i></td>
......
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