mirror of
https://github.com/grafana/grafana.git
synced 2025-02-12 00:25:46 -06:00
Merge remote-tracking branch 'upstream/master'
Conflicts: src/app/directives/kibanaPanel.js src/app/panels/bettermap/editor.html src/app/panels/bettermap/module.js src/app/panels/hits/editor.html src/app/panels/map/editor.html src/app/panels/pie/editor.html src/app/panels/table/module.html src/app/panels/table/pagination.html src/app/panels/terms/editor.html src/app/panels/terms/module.js src/app/partials/dasheditor.html src/css/bootstrap.dark.min.css
This commit is contained in:
commit
4aceb6086b
@ -26,7 +26,8 @@ function (angular, $, _, appLevelRequire) {
|
||||
// features if we define them after boot time
|
||||
register_fns = {};
|
||||
|
||||
app.constant('version',"3.0.0pre5");
|
||||
// This stores the Kibana revision number, @REV@ is replaced by grunt.
|
||||
app.constant('kbnVersion',"@REV@");
|
||||
|
||||
// Use this for cache busting partials
|
||||
app.constant('cacheBust',"cache-bust="+Date.now());
|
||||
|
@ -8,5 +8,6 @@ define([
|
||||
'./ngModelOnBlur',
|
||||
'./tip',
|
||||
'./confirmClick',
|
||||
'./esVersion'
|
||||
'./esVersion',
|
||||
'./configModal'
|
||||
], function () {});
|
34
src/app/directives/configModal.js
Normal file
34
src/app/directives/configModal.js
Normal file
@ -0,0 +1,34 @@
|
||||
define([
|
||||
'angular',
|
||||
'app',
|
||||
],
|
||||
function (angular) {
|
||||
'use strict';
|
||||
|
||||
angular
|
||||
.module('kibana.directives')
|
||||
.directive('configModal', function($modal,$q) {
|
||||
return {
|
||||
restrict: 'A',
|
||||
link: function(scope, elem) {
|
||||
// create a new modal. Can't reuse one modal unforunately as the directive will not
|
||||
// re-render on show.
|
||||
elem.bind('click',function(){
|
||||
var panelModal = $modal({
|
||||
template: './app/partials/paneleditor.html',
|
||||
persist: true,
|
||||
show: false,
|
||||
scope: scope,
|
||||
keyboard: false
|
||||
});
|
||||
|
||||
// and show it
|
||||
$q.when(panelModal).then(function(modalEl) {
|
||||
modalEl.modal('show');
|
||||
});
|
||||
scope.$apply();
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
});
|
@ -34,6 +34,11 @@ function (angular) {
|
||||
'<span class="row-text">{{panel.type}}</span>'+
|
||||
'</span>' +
|
||||
|
||||
'<span class="row-button extra" ng-show="panel.editable != false">' +
|
||||
'<span config-modal class="pointer">'+
|
||||
'<i class="icon-cog pointer" bs-tooltip="\'Configure\'"></i></span>'+
|
||||
'</span>' +
|
||||
|
||||
'<span ng-repeat="task in panelMeta.modals" class="row-button extra" ng-show="task.show">' +
|
||||
'<span bs-modal="task.partial" class="pointer"><i ' +
|
||||
'bs-tooltip="task.description" ng-class="task.icon" class="pointer"></i></span>'+
|
||||
|
@ -7,7 +7,7 @@
|
||||
</div>
|
||||
<div class="editor-option" ng-show="panel.mode != 'count'">
|
||||
<label class="small">Value Field <tip>This field must contain a numeric value</tip></label>
|
||||
<input ng-change="set_refresh(true)" placeholder="Start typing" bs-typeahead="fields.list" type="text" class="input-large" ng-model="panel.value_field">
|
||||
<input ng-change="set_refresh(true)" placeholder="Start typing" bs-typeahead="fields.list" type="text" class="input-medium" ng-model="panel.value_field">
|
||||
</div>
|
||||
</div>
|
||||
<div class="section">
|
||||
@ -23,26 +23,26 @@
|
||||
<label class="small">Derivative <tip>Plot the change per interval in the series</tip></label><input type="checkbox" ng-model="panel.derivative" ng-checked="panel.derivative" ng-change="set_refresh(true)">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h5>Time Options</h5>
|
||||
<div class="editor-row">
|
||||
<div class="editor-option">
|
||||
<label class="small">Time Field</label>
|
||||
<input ng-change="set_refresh(true)" placeholder="Start typing" bs-typeahead="fields.list" type="text" class="input-small" ng-model="panel.time_field">
|
||||
</div>
|
||||
<div class="editor-option">
|
||||
<label class="small">Time correction</label>
|
||||
<select ng-model="panel.timezone" class='input-small' ng-options="f for f in ['browser','utc']"></select>
|
||||
</div>
|
||||
<div class="editor-option">
|
||||
<label class="small">Auto-interval</label><input type="checkbox" ng-model="panel.auto_int" ng-checked="panel.auto_int" />
|
||||
</div>
|
||||
<div class="editor-option" ng-show='panel.auto_int'>
|
||||
<label class="small">Resolution <tip>Shoot for this many data points, rounding to sane intervals</tip></label>
|
||||
<input type="number" class='input-mini' ng-model="panel.resolution" ng-change='set_refresh(true)'/>
|
||||
</div>
|
||||
<div class="editor-option" ng-hide='panel.auto_int'>
|
||||
<label class="small">Interval <tip>Use Elasticsearch date math format (eg 1m, 5m, 1d, 2w, 1y)</tip></label>
|
||||
<input type="text" class='input-mini' ng-model="panel.interval" ng-change='set_refresh(true)'/>
|
||||
<div class="section">
|
||||
<h5>Time Options</h5>
|
||||
<div class="editor-option">
|
||||
<label class="small">Time Field</label>
|
||||
<input ng-change="set_refresh(true)" placeholder="Start typing" bs-typeahead="fields.list" type="text" class="input-small" ng-model="panel.time_field">
|
||||
</div>
|
||||
<div class="editor-option">
|
||||
<label class="small">Time correction</label>
|
||||
<select ng-model="panel.timezone" class='input-small' ng-options="f for f in ['browser','utc']"></select>
|
||||
</div>
|
||||
<div class="editor-option">
|
||||
<label class="small">Auto-interval</label><input type="checkbox" ng-model="panel.auto_int" ng-checked="panel.auto_int" />
|
||||
</div>
|
||||
<div class="editor-option" ng-show='panel.auto_int'>
|
||||
<label class="small">Resolution <tip>Shoot for this many data points, rounding to sane intervals</tip></label>
|
||||
<input type="number" class='input-mini' ng-model="panel.resolution" ng-change='set_refresh(true)'/>
|
||||
</div>
|
||||
<div class="editor-option" ng-hide='panel.auto_int'>
|
||||
<label class="small">Interval <tip>Use Elasticsearch date math format (eg 1m, 5m, 1d, 2w, 1y)</tip></label>
|
||||
<input type="text" class='input-mini' ng-model="panel.interval" ng-change='set_refresh(true)'/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -1,6 +1,6 @@
|
||||
<div ng-include="'app/partials/panelgeneral.html'"></div>
|
||||
<div ng-include="edit_path(panel.type)"></div>
|
||||
<div ng-repeat="tab in panelMeta.editorTabs">
|
||||
<h4>{{tab.title}}</h4>
|
||||
<h5>{{tab.title}}</h5>
|
||||
<div ng-include="tab.src"></div>
|
||||
</div>
|
@ -1,22 +1,24 @@
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<div class="editor-row">
|
||||
<div class="section">
|
||||
<strong>{{panelMeta.status}}</strong> // <span ng-bind-html="panelMeta.description"></span>
|
||||
</div>
|
||||
</div>
|
||||
<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="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>
|
||||
</div>
|
||||
<div class="span2">
|
||||
<label class="small">Editable</label><input type="checkbox" ng-model="panel.editable" ng-checked="panel.editable">
|
||||
</div>
|
||||
<div class="span2" ng-show="!_.isUndefined(panel.spyable)">
|
||||
<label class="small">
|
||||
Inspect <i class="icon-question-sign" bs-tooltip="'Allow query reveal via <i class=icon-eye-open></i>'"></i>
|
||||
</label>
|
||||
<input type="checkbox" ng-model="panel.spyable" ng-checked="panel.spyable">
|
||||
<div class="editor-row">
|
||||
<div class="section">
|
||||
<div class="editor-option">
|
||||
<label class="small">Title</label><input type="text" class="input-medium" ng-model='panel.title'></input>
|
||||
</div>
|
||||
<div class="editor-option" 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>
|
||||
</div>
|
||||
<div class="editor-option">
|
||||
<label class="small">Editable</label><input type="checkbox" ng-model="panel.editable" ng-checked="panel.editable">
|
||||
</div>
|
||||
<div class="editor-option" ng-show="!_.isUndefined(panel.spyable)">
|
||||
<label class="small">
|
||||
Inspect <i class="icon-question-sign" bs-tooltip="'Allow query reveal via <i class=icon-eye-open></i>'"></i>
|
||||
</label>
|
||||
<input type="checkbox" ng-model="panel.spyable" ng-checked="panel.spyable">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -215,9 +215,13 @@ function (angular, $, kbn, _, config, moment, Modernizr) {
|
||||
self.set_interval(dashboard.refresh);
|
||||
}
|
||||
|
||||
// Set the available panels for the "Add Panel" drop down
|
||||
self.availablePanels = _.difference(config.panel_names,
|
||||
_.pluck(_.union(self.current.nav,self.current.pulldowns),'type'));
|
||||
|
||||
// Take out any that we're not allowed to add from the gui.
|
||||
self.availablePanels = _.difference(self.availablePanels,config.hidden_panels);
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
|
@ -28,7 +28,6 @@ function (angular, _, config) {
|
||||
self.indices = _.union(self.indices,_.keys(result));
|
||||
self.list = mapFields(result);
|
||||
});
|
||||
// Otherwise just use the cached mapping
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -76,13 +75,18 @@ function (angular, _, config) {
|
||||
dot = (prefix) ? '.':'',
|
||||
ret = {};
|
||||
for(var attr in obj){
|
||||
if(attr === 'dynamic_templates' || attr === '_default_') {
|
||||
continue;
|
||||
}
|
||||
// For now only support multi field on the top level
|
||||
// and if there is a default field set.
|
||||
if(obj[attr]['type'] === 'multi_field') {
|
||||
ret[attr] = obj[attr]['fields'][attr] || obj[attr];
|
||||
continue;
|
||||
}
|
||||
if (attr === 'properties') {
|
||||
var keys = _.without(_.keys(obj[attr]['fields']),attr);
|
||||
for(var key in keys) {
|
||||
ret[attr+'.'+keys[key]] = obj[attr]['fields'][keys[key]];
|
||||
}
|
||||
} else if (attr === 'properties') {
|
||||
_.extend(ret,flatten(obj[attr], propName));
|
||||
} else if(typeof obj[attr] === 'object'){
|
||||
_.extend(ret,flatten(obj[attr], propName + dot + attr));
|
||||
|
2
src/css/bootstrap.dark.min.css
vendored
2
src/css/bootstrap.dark.min.css
vendored
File diff suppressed because one or more lines are too long
2
src/css/bootstrap.light.min.css
vendored
2
src/css/bootstrap.light.min.css
vendored
File diff suppressed because one or more lines are too long
14
src/vendor/bootstrap/less/modals.less
vendored
14
src/vendor/bootstrap/less/modals.less
vendored
@ -22,17 +22,10 @@
|
||||
|
||||
// Base modal
|
||||
.modal {
|
||||
position: fixed;
|
||||
top: 10%;
|
||||
left: 50%;
|
||||
position: absolute;
|
||||
z-index: @zindexModal;
|
||||
width: 560px;
|
||||
margin-left: -280px;
|
||||
width: 100%;
|
||||
background-color: @white;
|
||||
border: 1px solid #999;
|
||||
border: 1px solid rgba(0,0,0,.3);
|
||||
*border: 1px solid #999; /* IE6-7 */
|
||||
.border-radius(6px);
|
||||
.box-shadow(0 3px 7px rgba(0,0,0,0.3));
|
||||
.background-clip(padding-box);
|
||||
// Remove focus outline from opened modal
|
||||
@ -60,7 +53,7 @@
|
||||
.modal-body {
|
||||
position: relative;
|
||||
overflow-y: auto;
|
||||
max-height: 400px;
|
||||
max-height: 700px;
|
||||
padding: 15px;
|
||||
}
|
||||
// Remove bottom margin if need be
|
||||
@ -75,7 +68,6 @@
|
||||
text-align: right; // right align buttons
|
||||
background-color: #f5f5f5;
|
||||
border-top: 1px solid #ddd;
|
||||
.border-radius(0 0 6px 6px);
|
||||
.box-shadow(inset 0 1px 0 @white);
|
||||
.clearfix(); // clear it in case folks use .pull-* classes on buttons
|
||||
|
||||
|
5
src/vendor/bootstrap/less/overrides.less
vendored
5
src/vendor/bootstrap/less/overrides.less
vendored
@ -210,9 +210,8 @@ form input.ng-invalid {
|
||||
}
|
||||
|
||||
.modal {
|
||||
width: 770px;
|
||||
margin-left: -385px;
|
||||
top: 10px !important;
|
||||
width: 100%;
|
||||
top: 0px !important;
|
||||
}
|
||||
|
||||
.tiny {
|
||||
|
@ -19,13 +19,19 @@ module.exports = function(grunt) {
|
||||
grunt.registerTask('build:write_revision', function() {
|
||||
grunt.event.once('git-describe', function (desc) {
|
||||
grunt.config('string-replace.config', {
|
||||
src: '<%= destDir %>/app/components/require.config.js',
|
||||
dest: '<%= destDir %>/app/components/require.config.js',
|
||||
files: {
|
||||
'<%= destDir %>/app/components/require.config.js': '<%= destDir %>/app/components/require.config.js',
|
||||
'<%= destDir %>/app/app.js': '<%= destDir %>/app/app.js'
|
||||
},
|
||||
options: {
|
||||
replacements: [
|
||||
{
|
||||
pattern: /(?:^|\/\/)(.*)@REV@/,
|
||||
replacement: '$1'+desc.object
|
||||
},
|
||||
{
|
||||
pattern: /@REV@/,
|
||||
replacement: desc.object
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -34,4 +40,4 @@ module.exports = function(grunt) {
|
||||
});
|
||||
grunt.task.run('git-describe');
|
||||
});
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue
Block a user