diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c82ce61a35..aa3114b39af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ **Fixes** - [Issue #1298](https://github.com/grafana/grafana/issues/1298). InfluxDB: Fix handling of empty array in templating variable query - [Issue #1309](https://github.com/grafana/grafana/issues/1309). Graph: Fixed issue when using zero as a grid threshold +- [Issue #1345](https://github.com/grafana/grafana/issues/1345). UI: Fixed position of confirm modal when scrolled down **Tech** - [Issue #1311](https://github.com/grafana/grafana/issues/1311). Tech: Updated Font-Awesome from 3.2 to 4.2 diff --git a/sample/apache_ldap.conf b/sample/apache_ldap.conf deleted file mode 100644 index f7df159e335..00000000000 --- a/sample/apache_ldap.conf +++ /dev/null @@ -1,61 +0,0 @@ -# Courtesy of https://github.com/sgzijl -# config.js includes elasticsearch: "https://"+window.location.hostname+":443", - - - ServerName your.domain.tld - RewriteEngine On - RewriteCond %{HTTPS} off - RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} - - - - ServerName your.domain.tld - - SSLEngine on - SSLCertificateFile /path/to/public.crt - SSLCertificateKeyFile /path/to/private.key - - DocumentRoot /path/to/kibana3 - - Allow from all - Options -Multiviews - - - LogLevel debug - ErrorLog /path/to/logs/error_log - CustomLog /path/to/logs/access_log combined - - # Set global proxy timeouts - - ProxySet connectiontimeout=5 timeout=90 - - - # Proxy for _aliases and .*/_search - - ProxyPassMatch http://127.0.0.1:9200/$1 - ProxyPassReverse http://127.0.0.1:9200/$1 - - - # Proxy for kibana-int/{dashboard,temp} stuff (if you don't want auth on /, then you will want these to be protected) - - ProxyPassMatch http://127.0.0.1:9200/$1$2 - ProxyPassReverse http://127.0.0.1:9200/$1$2 - - - # Optional disable auth for a src IP (eg: your monitoring host or subnet) - - Allow from 5.6.7.8 - Deny from all - Satisfy any - - AuthLDAPBindDN "CN=_ldapbinduser,OU=Users,DC=example,DC=com" - AuthLDAPBindPassword "ldapbindpass" - AuthLDAPURL "ldaps://ldap01.example.com ldap02.example.com/OU=Users,DC=example,DC=com?sAMAccountName?sub?(objectClass=*)" - AuthType Basic - AuthBasicProvider ldap - AuthName "Please authenticate for Example dot com" - AuthLDAPGroupAttributeIsDN on - require valid-user - - - diff --git a/sample/lighttpd_basic.conf b/sample/lighttpd_basic.conf deleted file mode 100644 index 667a6abe71c..00000000000 --- a/sample/lighttpd_basic.conf +++ /dev/null @@ -1,24 +0,0 @@ -$HTTP["host"] =~ "kibana" { - - server.document-root = "/var/ww/kibana/src" - auth.backend = "plain" - auth.backend.plain.userfile = "/etc/lighttpd/kibanapassword" - - index-file.names = ( "index.html", "index.htm" ) - - auth.require = ( "/" => ( - "method" => "basic", - "realm" => "Password Protected", - "require" => "valid-user" - ) - ) - - $HTTP["url"] =~ "^/kibana-int/(dashboard/|temp).*$" { - proxy.balance = "hash" - proxy.server = ( "" => ( ( "host" => "127.0.0.1", "port" => "9200" ) ) ) - } - $HTTP["url"] =~ "^.*/_(mapping|search|nodes|aliases)$" { - proxy.balance = "hash" - proxy.server = ( "" => ( ( "host" => "127.0.0.1", "port" => "9200" ) ) ) - } -} diff --git a/sample/nginx.conf b/sample/nginx.conf deleted file mode 100644 index b1e2f362e60..00000000000 --- a/sample/nginx.conf +++ /dev/null @@ -1,60 +0,0 @@ -# -# Nginx proxy for Elasticsearch + Kibana -# -# In this setup, we are password protecting the saving of dashboards. You may -# wish to extend the password protection to all paths. -# -# Even though these paths are being called as the result of an ajax request, the -# browser will prompt for a username/password on the first request -# -# If you use this, you'll want to point config.js at http://FQDN:80/ instead of -# http://FQDN:9200 -# -server { - listen *:80 ; - - server_name kibana.myhost.org; - access_log /var/log/nginx/kibana.myhost.org.access.log; - - location / { - root /usr/share/kibana3; - index index.html index.htm; - } - - location ~ ^/_aliases$ { - proxy_pass http://127.0.0.1:9200; - proxy_read_timeout 90; - } - location ~ ^/_nodes$ { - proxy_pass http://127.0.0.1:9200; - proxy_read_timeout 90; - } - location ~ ^/.*/_search$ { - proxy_pass http://127.0.0.1:9200; - proxy_read_timeout 90; - } - location ~ ^/.*/_mapping$ { - proxy_pass http://127.0.0.1:9200; - proxy_read_timeout 90; - } - - # Password protected end points - location ~ ^/kibana-int/dashboard/.*$ { - proxy_pass http://127.0.0.1:9200; - proxy_read_timeout 90; - limit_except GET { - proxy_pass http://127.0.0.1:9200; - auth_basic "Restricted"; - auth_basic_user_file /etc/nginx/conf.d/kibana.myhost.org.htpasswd; - } - } - location ~ ^/kibana-int/temp.*$ { - proxy_pass http://127.0.0.1:9200; - proxy_read_timeout 90; - limit_except GET { - proxy_pass http://127.0.0.1:9200; - auth_basic "Restricted"; - auth_basic_user_file /etc/nginx/conf.d/kibana.myhost.org.htpasswd; - } - } -} diff --git a/sample/server.js b/sample/server.js deleted file mode 100644 index d976a48b22a..00000000000 --- a/sample/server.js +++ /dev/null @@ -1,244 +0,0 @@ -#!/usr/bin/env node - -var util = require('util'), - http = require('http'), - fs = require('fs'), - url = require('url'), - events = require('events'); - -var DEFAULT_PORT = 8000; - -function main(argv) { - new HttpServer({ - 'GET': createServlet(StaticServlet), - 'HEAD': createServlet(StaticServlet) - }).start(Number(argv[2]) || DEFAULT_PORT); -} - -function escapeHtml(value) { - return value.toString(). - replace('<', '<'). - replace('>', '>'). - replace('"', '"'); -} - -function createServlet(Class) { - var servlet = new Class(); - return servlet.handleRequest.bind(servlet); -} - -/** - * An Http server implementation that uses a map of methods to decide - * action routing. - * - * @param {Object} Map of method => Handler function - */ -function HttpServer(handlers) { - this.handlers = handlers; - this.server = http.createServer(this.handleRequest_.bind(this)); -} - -HttpServer.prototype.start = function(port) { - this.port = port; - this.server.listen(port); - util.puts('Http Server running at http://localhost:' + port + '/'); -}; - -HttpServer.prototype.parseUrl_ = function(urlString) { - var parsed = url.parse(urlString); - parsed.pathname = url.resolve('/', parsed.pathname); - return url.parse(url.format(parsed), true); -}; - -HttpServer.prototype.handleRequest_ = function(req, res) { - var logEntry = req.method + ' ' + req.url; - if (req.headers['user-agent']) { - logEntry += ' ' + req.headers['user-agent']; - } - util.puts(logEntry); - req.url = this.parseUrl_(req.url); - var handler = this.handlers[req.method]; - if (!handler) { - res.writeHead(501); - res.end(); - } else { - handler.call(this, req, res); - } -}; - -/** - * Handles static content. - */ -function StaticServlet() {} - -StaticServlet.MimeMap = { - 'txt': 'text/plain', - 'html': 'text/html', - 'css': 'text/css', - 'xml': 'application/xml', - 'json': 'application/json', - 'js': 'application/javascript', - 'jpg': 'image/jpeg', - 'jpeg': 'image/jpeg', - 'gif': 'image/gif', - 'png': 'image/png', -  'svg': 'image/svg+xml' -}; - -StaticServlet.prototype.handleRequest = function(req, res) { - var self = this; - var path = ('../src/' + req.url.pathname).replace('//','/').replace(/%(..)/g, function(match, hex){ - return String.fromCharCode(parseInt(hex, 16)); - }); - var parts = path.split('/'); - if (parts[parts.length-1].charAt(0) === '.') - return self.sendForbidden_(req, res, path); - fs.stat(path, function(err, stat) { - if (err) - return self.sendMissing_(req, res, path); - if (stat.isDirectory()) - return self.sendDirectory_(req, res, path); - return self.sendFile_(req, res, path); - }); -} - -StaticServlet.prototype.sendError_ = function(req, res, error) { - res.writeHead(500, { - 'Content-Type': 'text/html' - }); - res.write('\n'); - res.write('Internal Server Error\n'); - res.write('

Internal Server Error

'); - res.write('
' + escapeHtml(util.inspect(error)) + '
'); - util.puts('500 Internal Server Error'); - util.puts(util.inspect(error)); -}; - -StaticServlet.prototype.sendMissing_ = function(req, res, path) { - path = path.substring(1); - res.writeHead(404, { - 'Content-Type': 'text/html' - }); - res.write('\n'); - res.write('404 Not Found\n'); - res.write('

Not Found

'); - res.write( - '

The requested URL ' + - escapeHtml(path) + - ' was not found on this server.

' - ); - res.end(); - util.puts('404 Not Found: ' + path); -}; - -StaticServlet.prototype.sendForbidden_ = function(req, res, path) { - path = path.substring(1); - res.writeHead(403, { - 'Content-Type': 'text/html' - }); - res.write('\n'); - res.write('403 Forbidden\n'); - res.write('

Forbidden

'); - res.write( - '

You do not have permission to access ' + - escapeHtml(path) + ' on this server.

' - ); - res.end(); - util.puts('403 Forbidden: ' + path); -}; - -StaticServlet.prototype.sendRedirect_ = function(req, res, redirectUrl) { - res.writeHead(301, { - 'Content-Type': 'text/html', - 'Location': redirectUrl - }); - res.write('\n'); - res.write('301 Moved Permanently\n'); - res.write('

Moved Permanently

'); - res.write( - '

The document has moved here.

' - ); - res.end(); - util.puts('301 Moved Permanently: ' + redirectUrl); -}; - -StaticServlet.prototype.sendFile_ = function(req, res, path) { - var self = this; - var file = fs.createReadStream(path); - res.writeHead(200, { - 'Content-Type': StaticServlet. - MimeMap[path.split('.').pop()] || 'text/plain' - }); - if (req.method === 'HEAD') { - res.end(); - } else { - file.on('data', res.write.bind(res)); - file.on('close', function() { - res.end(); - }); - file.on('error', function(error) { - self.sendError_(req, res, error); - }); - } -}; - -StaticServlet.prototype.sendDirectory_ = function(req, res, path) { - var self = this; - if (path.match(/[^\/]$/)) { - req.url.pathname += '/'; - var redirectUrl = url.format(url.parse(url.format(req.url))); - return self.sendRedirect_(req, res, redirectUrl); - } - fs.readdir(path, function(err, files) { - if (err) - return self.sendError_(req, res, error); - - if (!files.length) - return self.writeDirectoryIndex_(req, res, path, []); - - var remaining = files.length; - files.forEach(function(fileName, index) { - fs.stat(path + '/' + fileName, function(err, stat) { - if (err) - return self.sendError_(req, res, err); - if (stat.isDirectory()) { - files[index] = fileName + '/'; - } - if (!(--remaining)) - return self.writeDirectoryIndex_(req, res, path, files); - }); - }); - }); -}; - -StaticServlet.prototype.writeDirectoryIndex_ = function(req, res, path, files) { - path = path.substring(1); - res.writeHead(200, { - 'Content-Type': 'text/html' - }); - if (req.method === 'HEAD') { - res.end(); - return; - } - res.write('\n'); - res.write('' + escapeHtml(path) + '\n'); - res.write('\n'); - res.write('

Directory: ' + escapeHtml(path) + '

'); - res.write('
    '); - files.forEach(function(fileName) { - if (fileName.charAt(0) !== '.') { - res.write('
  1. ' + - escapeHtml(fileName) + '
  2. '); - } - }); - res.write('
'); - res.end(); -}; - -// Must be last, -main(process.argv); diff --git a/sample/start_dashboard_html.html b/sample/start_dashboard_html.html deleted file mode 100644 index 89af4f66c75..00000000000 --- a/sample/start_dashboard_html.html +++ /dev/null @@ -1,55 +0,0 @@ -
- -
-
- -
-
- -
-
- -
- -
-
- -
-
diff --git a/src/app/directives/dropdown.typeahead.js b/src/app/directives/dropdown.typeahead.js index 56203ee3c6f..0ab2d0045fb 100644 --- a/src/app/directives/dropdown.typeahead.js +++ b/src/app/directives/dropdown.typeahead.js @@ -12,10 +12,10 @@ function (angular, app, _, $) { .directive('dropdownTypeahead', function($compile) { var inputTemplate = ''; - var buttonTemplate = ''; diff --git a/src/app/directives/graphiteSegment.js b/src/app/directives/graphiteSegment.js index f0116bc8847..577bbf5d6b7 100644 --- a/src/app/directives/graphiteSegment.js +++ b/src/app/directives/graphiteSegment.js @@ -11,10 +11,10 @@ function (angular, app, _, $) { .module('grafana.directives') .directive('graphiteSegment', function($compile, $sce) { var inputTemplate = ''; - var buttonTemplate = ''; + var buttonTemplate = ''; return { link: function($scope, elem) { diff --git a/src/app/directives/templateParamSelector.js b/src/app/directives/templateParamSelector.js index 194dfbdcb40..5ff6eaa0038 100644 --- a/src/app/directives/templateParamSelector.js +++ b/src/app/directives/templateParamSelector.js @@ -11,10 +11,10 @@ function (angular, app, _, $) { .module('grafana.directives') .directive('templateParamSelector', function($compile) { var inputTemplate = ''; - var buttonTemplate = '{{variable.current.text}}'; + var buttonTemplate = '{{variable.current.text}}'; return { link: function($scope, elem) { diff --git a/src/app/features/graphite/addGraphiteFunc.js b/src/app/features/graphite/addGraphiteFunc.js index 47fe8206c92..89ce9e79ca4 100644 --- a/src/app/features/graphite/addGraphiteFunc.js +++ b/src/app/features/graphite/addGraphiteFunc.js @@ -12,10 +12,10 @@ function (angular, app, _, $, gfunc) { .module('grafana.directives') .directive('graphiteAddFunc', function($compile) { var inputTemplate = ''; - var buttonTemplate = ''; diff --git a/src/app/features/graphite/funcEditor.js b/src/app/features/graphite/funcEditor.js index 62352aea389..63ee4b3f7cf 100644 --- a/src/app/features/graphite/funcEditor.js +++ b/src/app/features/graphite/funcEditor.js @@ -12,10 +12,10 @@ function (angular, _, $) { var funcSpanTemplate = '{{func.def.name}}('; var paramTemplate = ''; + ' class="input-mini tight-form-func-param">'; var funcControlsTemplate = - '
' + + '
' + '' + '' + '' + @@ -126,7 +126,7 @@ function (angular, _, $) { } function toggleFuncControls() { - var targetDiv = elem.closest('.grafana-target-inner'); + var targetDiv = elem.closest('.tight-form'); if (elem.hasClass('show-function-controls')) { elem.removeClass('show-function-controls'); diff --git a/src/app/features/graphite/partials/query.editor.html b/src/app/features/graphite/partials/query.editor.html index 9487106ecdf..48446049e65 100755 --- a/src/app/features/graphite/partials/query.editor.html +++ b/src/app/features/graphite/partials/query.editor.html @@ -1,24 +1,22 @@
- -
-
-
-
-
diff --git a/src/app/features/influxdb/funcEditor.js b/src/app/features/influxdb/funcEditor.js index d072a1fa2c4..615dcd2e75d 100644 --- a/src/app/features/influxdb/funcEditor.js +++ b/src/app/features/influxdb/funcEditor.js @@ -14,7 +14,7 @@ function (angular, _, $) { 'data-toggle="dropdown">{{target.function}}('; var paramTemplate = ''; + ' class="input-mini tight-form-func-param">'; return { restrict: 'A', diff --git a/src/app/features/influxdb/partials/query.editor.html b/src/app/features/influxdb/partials/query.editor.html index e93cb232b28..72a6f59ecac 100644 --- a/src/app/features/influxdb/partials/query.editor.html +++ b/src/app/features/influxdb/partials/query.editor.html @@ -1,231 +1,217 @@
- -
- -
-
-
- -
- -
-
-
-
    -
  • - +
-
  • +
  • + + + +
  • + + + + + +
      +
    • + +
    • +
    + + + + +
    +
    + +
    + +
      +
    • + +
    • +
    • + alias +
    • +
    • + +
    • +
    • group by time
    • - -
    • -
    • - +
    -
    -
    -
    +
    + +
    +
    +
      +
    • + +
    • +
    • + group by time +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    + +
    diff --git a/src/app/features/opentsdb/partials/query.editor.html b/src/app/features/opentsdb/partials/query.editor.html index e2f6f995dac..794d148676c 100644 --- a/src/app/features/opentsdb/partials/query.editor.html +++ b/src/app/features/opentsdb/partials/query.editor.html @@ -1,219 +1,217 @@
    +
    -
    -
    - +
    + - + -
    - -
    - -
  • - -
  • +
    +
    -
  • - Tags: -
  • -
  • - {{key}} = {{value}} - - - -
  • +
    + - -
    -
    + + + + + +
    diff --git a/src/app/features/panellinkeditor/module.html b/src/app/features/panellinkeditor/module.html index e46ad0707cd..b9525c3545f 100644 --- a/src/app/features/panellinkeditor/module.html +++ b/src/app/features/panellinkeditor/module.html @@ -2,45 +2,43 @@
    Drilldown / detail linkThese links appear in the dropdown menu in the panel menu.
    -
    -
    -
      -
    • - -
    • +
      +
        +
      • + +
      • -
      • title
      • -
      • - -
      • +
      • title
      • +
      • + +
      • -
      • type
      • -
      • - -
      • +
      • type
      • +
      • + +
      • -
      • dashboard
      • -
      • - -
      • +
      • dashboard
      • +
      • + +
      • -
      • url
      • -
      • - -
      • +
      • url
      • +
      • + +
      • -
      • params - Use var-variableName=value to pass templating variables. -
      • -
      • - -
      • -
      -
      -
      +
    • params + Use var-variableName=value to pass templating variables. +
    • +
    • + +
    • +
    +
    diff --git a/src/app/panels/graph/axisEditor.html b/src/app/panels/graph/axisEditor.html index a851038b91e..b2c2437e89b 100644 --- a/src/app/panels/graph/axisEditor.html +++ b/src/app/panels/graph/axisEditor.html @@ -1,226 +1,218 @@
    -
    -
    -
      -
    • - Left Y -
    • -
    • - Unit -
    • - -
    • -    Grid Max -
    • -
    • - -
    • -
    • - Min -
    • -
    • - -
    • -
    • - Label -
    • -
    • - -
    • -
    -
    -
    -
    -
      -
    • - Right Y -
    • -
    • - Unit -
    • - -
    • -    Grid Max -
    • -
    • - -
    • -
    • - Min -
    • -
    • - -
    • -
    • - Label -
    • -
    • - -
    • -
    -
    -
    +
    +
      +
    • + Left Y +
    • +
    • + Unit +
    • + +
    • +    Grid Max +
    • +
    • + +
    • +
    • + Min +
    • +
    • + +
    • +
    • + Label +
    • +
    • + +
    • +
    +
    +
    +
    +
      +
    • + Right Y +
    • +
    • + Unit +
    • + +
    • +    Grid Max +
    • +
    • + +
    • +
    • + Min +
    • +
    • + +
    • +
    • + Label +
    • +
    • + +
    • +
    +
    -
    -
    -
      -
    • - Show Axis -
    • -
    • - X-Axis  - - -
    • -
    • - Y-Axis  - - -
    • -
    -
    -
    -
    -
      -
    • - Thresholds -
    • -
    • - Level 1 -
    • -
    • - -
    • -
    • - -
    • -
    • - Level 2 -
    • -
    • - -
    • -
    • - -
    • -
    • - Line mode  - - +
      +
        +
      • + Show Axis +
      • +
      • + X-Axis  + + +
      • +
      • + Y-Axis  + + +
      • +
      +
      +
      +
      +
        +
      • + Thresholds +
      • +
      • + Level 1 +
      • +
      • + +
      • +
      • + +
      • +
      • + Level 2 +
      • +
      • + +
      • +
      • + +
      • +
      • + Line mode  + + -
      • -
      -
      -
      +
    • +
    +
    -
    -
    -
      -
    • - Legend -
    • -
    • - Show  - - -
    • -
    • - Table  - - -
    • -
    • - Right side  - - -
    • -
    • - Hide empty  - - -
    • -
    -
    -
    +
    +
      +
    • + Legend +
    • +
    • + Show  + + +
    • +
    • + Table  + + +
    • +
    • + Right side  + + +
    • +
    • + Hide empty  + + +
    • +
    +
    -
    -
    -
      -
    • - Legend values -
    • -
    • - Min  - - -
    • -
    • - Max  - - -
    • -
    • - Avg  - - -
    • -
    • - Current  - - -
    • -
    • - Total  - - -
    • -
    -
    -
    +
    +
      +
    • + Legend values +
    • +
    • + Min  + + +
    • +
    • + Max  + + +
    • +
    • + Avg  + + +
    • +
    • + Current  + + +
    • +
    • + Total  + + +
    • +
    +
    diff --git a/src/app/panels/graph/styleEditor.html b/src/app/panels/graph/styleEditor.html index f58fbab5c51..c466d2b486e 100644 --- a/src/app/panels/graph/styleEditor.html +++ b/src/app/panels/graph/styleEditor.html @@ -66,35 +66,33 @@
    Series specific overrides Regex match example: /server[0-3]/i
    -
    -
    -
      -
    • - -
    • +
      +
        +
      • + +
      • -
      • - alias or regex -
      • -
      • - -
      • -
      • - - {{option.name}}: {{option.value}} -
      • +
      • + alias or regex +
      • +
      • + +
      • +
      • + + {{option.name}}: {{option.value}} +
      • - + -
      -
      -
      +
    +
    diff --git a/src/app/panels/singlestat/editor.html b/src/app/panels/singlestat/editor.html index 17e94f317f5..41ca71a32b3 100644 --- a/src/app/panels/singlestat/editor.html +++ b/src/app/panels/singlestat/editor.html @@ -1,190 +1,182 @@
    -
    -
    -
      -
    • - Big value -
    • -
    • - Prefix -
    • -
    • - -
    • -
    • - Value -
    • -
    • - -
    • -
    • - Postfix -
    • -
    • - -
    • -
    -
    -
    -
    -
      -
    • - Font size -
    • -
    • - Prefix -
    • -
    • - -
    • -
    • - Value -
    • -
    • - -
    • -
    • - Postfix -
    • -
    • - -
    • -
    -
    -
    -
    -
      -
    • - Unit -
    • - -
    -
    -
    +
    +
      +
    • + Big value +
    • +
    • + Prefix +
    • +
    • + +
    • +
    • + Value +
    • +
    • + +
    • +
    • + Postfix +
    • +
    • + +
    • +
    +
    +
    +
    +
      +
    • + Font size +
    • +
    • + Prefix +
    • +
    • + +
    • +
    • + Value +
    • +
    • + +
    • +
    • + Postfix +
    • +
    • + +
    • +
    +
    +
    +
    +
      +
    • + Unit +
    • + +
    +
    -
    -
    -
      -
    • - Coloring -
    • -
    • - Background  - - -
    • -
    • - Value  - - -
    • -
    • - ThresholdsComma seperated values -
    • -
    • - -
    • -
    • - Colors -
    • -
    • - - - -
    • -
    • - invert order -
    • -
    -
    -
    +
    +
      +
    • + Coloring +
    • +
    • + Background  + + +
    • +
    • + Value  + + +
    • +
    • + ThresholdsComma seperated values +
    • +
    • + +
    • +
    • + Colors +
    • +
    • + + + +
    • +
    • + invert order +
    • +
    +
    -
    -
    -
      -
    • - Spark lines -
    • -
    • - Show  - - -
    • -
    • - Background mode  - - -
    • -
    • - Line Color -
    • -
    • - -
    • -
    • - Fill Color -
    • -
    • - -
    • -
    -
    -
    +
    +
      +
    • + Spark lines +
    • +
    • + Show  + + +
    • +
    • + Background mode  + + +
    • +
    • + Line Color +
    • +
    • + +
    • +
    • + Fill Color +
    • +
    • + +
    • +
    +
    -
    -
    -
      -
    • - Value to text mapping -
    • -
    • - -
    • -
    • - -
    • -
    • - -
    • -
    • - -
    • +
      +
        +
      • + Value to text mapping +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • -
      • - - - -
      • +
      • + + + +
      • -
      -
      -
      +
    +
    diff --git a/src/app/partials/submenu.html b/src/app/partials/submenu.html index 69532d9c3c8..096b78f6e9d 100644 --- a/src/app/partials/submenu.html +++ b/src/app/partials/submenu.html @@ -1,42 +1,40 @@ diff --git a/src/css/less/forms.less b/src/css/less/forms.less index 5018b9329da..aa9381e74ff 100644 --- a/src/css/less/forms.less +++ b/src/css/less/forms.less @@ -26,3 +26,4 @@ input[type="checkbox"]:checked+label { background: url(@checkboxImageUrl) 0px -18px no-repeat; } + diff --git a/src/css/less/grafana.less b/src/css/less/grafana.less index 23ca81d64bf..0f1f1f0b084 100644 --- a/src/css/less/grafana.less +++ b/src/css/less/grafana.less @@ -8,6 +8,7 @@ @import "panel.less"; @import "forms.less"; @import "singlestat.less"; +@import "tightform.less"; .row-control-inner { padding:0px; @@ -67,7 +68,7 @@ right: 0; margin-left: auto; margin-right: auto; - top: 200px; + top: 30%; } .grafana-search-metric-actions { @@ -102,175 +103,6 @@ position:relative; } -.grafana-target:last-child { - border-bottom: 1px solid @grafanaTargetBorder; -} - -.grafana-target-inner { - border-top: 1px solid @grafanaTargetBorder; - border-left: 1px solid @grafanaTargetBorder; - border-right: 1px solid @grafanaTargetBorder; - background: @grafanaTargetBackground; - width: 100%; -} - -.grafana-target-onoff { - display: inline-block; - padding: 5px 7px; - display: inline-block; -} - -.grafana-segment-list { - list-style: none; - margin: 0; - >li { - float: left; - } -} - -.grafana-metric-options { - margin-top: 35px; -} - -// fix for fixed positioned panel & scrolling -.grafana-segment-dropdown-menu { - margin-bottom: 70px; -} - -.grafana-target-segment { - padding: 8px 7px; - display: inline-block; - font-weight: normal; - border-right: 1px solid @grafanaTargetSegmentBorder; - color: @grafanaTargetColor; - display: inline-block; - - .has-open-function & { - padding-top: 25px; - } - - .grafana-target-hidden & { - color: @grafanaTargetColorHide; - } - - &:hover, &:focus { - text-decoration: none; - } - &a:hover { - background: @grafanaTargetFuncBackground; - } - - &.template-param-name { - border-right: none; - padding-right: 3px; - } - &.annotation-segment { - padding: 8px 15px; - } - - &.last { - border-right: none; - } -} - -.grafana-target-segment-icon { - i { - width: 15px; - text-align: center; - display: inline-block; - } -} - -.grafana-target-function { - background: @grafanaTargetFuncBackground; - > a { - color: @grafanaTargetColor; - } - > a:hover { - color: @linkColor; - } - - &.show-function-controls { - padding-top: 5px; - min-width: 100px; - text-align: center; - } -} - -input[type=text].grafana-function-param-input { - background: transparent; - border: none; - margin: 0; - padding: 0; -} - -input[type=text].grafana-target-text-input { - padding: 8px 7px; - border: none; - margin: 0px; - background: transparent; - float: left; - color: @grafanaTargetColor; - border-radius: 0; - border-right: 1px solid @grafanaTargetSegmentBorder; -} - -[type=text].grafana-target-segment-input, [type=number].grafana-target-segment-input { - border: none; - border-right: 1px solid @grafanaTargetSegmentBorder; - margin: 0px; - border-radius: 0; - padding: 8px 4px; - &.last { - border-right: none; - } -} - -input[type=checkbox].grafana-target-option-checkbox { - margin: 0; -} - -select.grafana-target-segment-input { - border: none; - border-right: 1px solid @grafanaTargetSegmentBorder; - margin: 0px; - border-radius: 0; - height: 36px; - padding: 8px 5px; - &.last { - border-right: none; - } -} - -.grafana-target .dropdown { - padding: 0; margin: 0; -} - -.graphite-func-controls { - display: none; - text-align: center; - - .fa-arrow-left { - float: left; - position: relative; - top: 2px; - } - .fa-arrow-right { - float: right; - position: relative; - top: 2px; - } - .fa-remove { - margin-left: 10px; - } -} - -.grafana-target { - .popover-content { - padding: 0; - } -} - .scrollable { max-height: 300px; overflow: auto; diff --git a/src/css/less/tightform.less b/src/css/less/tightform.less new file mode 100644 index 00000000000..0220b6d3e52 --- /dev/null +++ b/src/css/less/tightform.less @@ -0,0 +1,173 @@ +.tight-form { + border-top: 1px solid @grafanaTargetBorder; + border-left: 1px solid @grafanaTargetBorder; + border-right: 1px solid @grafanaTargetBorder; + background: @grafanaTargetBackground; + width: 100%; + + .dropdown { + padding: 0; margin: 0; + } + + &:last-child { + border-bottom: 1px solid @grafanaTargetBorder; + } +} + +.tight-form-container { + .tight-form:last-child { + border-bottom: none; + } + &:last-child { + border-bottom: 1px solid @grafanaTargetBorder; + } +} + +// old graphite-segment-list +.tight-form-list { + list-style: none; + margin: 0; + >li { + float: left; + } +} + +.grafana-metric-options { + margin-top: 35px; +} + +// old grafana-target-segment { +.tight-form-item { + padding: 8px 7px; + display: inline-block; + font-weight: normal; + border-right: 1px solid @grafanaTargetSegmentBorder; + color: @grafanaTargetColor; + display: inline-block; + + .has-open-function & { + padding-top: 25px; + } + + // old .grafana-target-hidden & { + .tight-form-disabled & { + color: @grafanaTargetColorHide; + } + + &:hover, &:focus { + text-decoration: none; + } + + &a:hover { + background: @grafanaTargetFuncBackground; + } + + &.template-param-name { + border-right: none; + padding-right: 3px; + } + &.annotation-segment { + padding: 8px 15px; + } + + &.last { + border-right: none; + } +} + +//.grafana-target-segment-icon { +.tight-form-item-icon { + i { + width: 15px; + text-align: center; + display: inline-block; + } +} + +//.grafana-target-function { +.tight-form-func { + background: @grafanaTargetFuncBackground; + > a { + color: @grafanaTargetColor; + } + > a:hover { + color: @linkColor; + } + + &.show-function-controls { + padding-top: 5px; + min-width: 100px; + text-align: center; + } +} + +//input[type=text].grafana-function-param-input { +input[type=text].tight-form-func-param { + background: transparent; + border: none; + margin: 0; + padding: 0; +} + +//input[type=text].grafana-target-text-input { +input[type=text].tight-form-clear-input { + padding: 8px 7px; + border: none; + margin: 0px; + background: transparent; + float: left; + color: @grafanaTargetColor; + border-radius: 0; + border-right: 1px solid @grafanaTargetSegmentBorder; +} + +//[type=text].grafana-target-segment-input, [type=number].grafana-target-segment-input { +[type=text].tight-form-input, [type=number].tight-form-input { + border: none; + border-right: 1px solid @grafanaTargetSegmentBorder; + margin: 0px; + border-radius: 0; + padding: 8px 4px; + &.last { + border-right: none; + } +} + +//input[type=checkbox].grafana-target-option-checkbox { +input[type=checkbox].tight-form-checkbox { + margin: 0; +} + +select.tight-form-input { + border: none; + border-right: 1px solid @grafanaTargetSegmentBorder; + margin: 0px; + border-radius: 0; + height: 36px; + padding: 8px 5px; + &.last { + border-right: none; + } +} + +//.graphite-func-controls { +.tight-form-func-controls { + display: none; + text-align: center; + + .fa-arrow-left { + float: left; + position: relative; + top: 2px; + } + .fa-arrow-right { + float: right; + position: relative; + top: 2px; + } + .fa-remove { + margin-left: 10px; + } +} + + diff --git a/src/vendor/bootstrap/less/modals.less b/src/vendor/bootstrap/less/modals.less index f5f5ca5eb3d..7c4a7e95b1d 100644 --- a/src/vendor/bootstrap/less/modals.less +++ b/src/vendor/bootstrap/less/modals.less @@ -22,7 +22,7 @@ // Base modal .modal { - position: absolute; + position: fixed; z-index: @zindexModal; width: 100%; background-color: @white;