mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
Merge branch 'master' into functional-testing
This commit is contained in:
commit
bb85a6c244
130 changed files with 2768 additions and 1013 deletions
|
@ -10,4 +10,5 @@ trim_trailing_whitespace = true
|
|||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
insert_final_newline = false
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
language: node_js
|
||||
node_js: '0.12.7'
|
||||
install:
|
||||
- npm install -g npm@3.2
|
||||
- npm install
|
||||
script: ./node_modules/.bin/grunt travis
|
||||
sudo: false
|
||||
|
|
|
@ -23,12 +23,6 @@ Please make sure you have signed the [Contributor License Agreement](http://www.
|
|||
nvm install "$(cat .node-version)"
|
||||
```
|
||||
|
||||
- Install npm 3.2
|
||||
|
||||
```sh
|
||||
npm install -g npm@3.2
|
||||
```
|
||||
|
||||
- Install dependencies
|
||||
|
||||
```sh
|
||||
|
@ -73,6 +67,7 @@ Here are some hints for getting eslint setup in your favorite editor:
|
|||
| IntelliJ | Settings » Languages & Frameworks » JavaScript » Code Quality Tools » ESLint |
|
||||
| vi | [scrooloose/syntastic](https://github.com/scrooloose/syntastic) |
|
||||
|
||||
Another tool we use for enforcing consistent coding style is Editorconfig, which can be set up by installing a plugin in your editor that dynamically updates its configuration. Take a look at the [Editorconfig](http://editorconfig.org/#download) site to find a plugin for your editor, and browse our [`.editorconfig`](https://github.com/elastic/kibana/blob/master/.editorconfig) file to see what config rules we set up.
|
||||
|
||||
### Testing and building
|
||||
|
||||
|
|
17
Gruntfile.js
17
Gruntfile.js
|
@ -45,7 +45,22 @@ module.exports = function (grunt) {
|
|||
'<%= root %>/tasks/**/*.js',
|
||||
'<%= src %>/**/*.js',
|
||||
'!<%= src %>/fixtures/**/*.js'
|
||||
]
|
||||
],
|
||||
deepModules: {
|
||||
'caniuse-db': '1.0.30000265',
|
||||
'chalk': '1.1.0',
|
||||
'glob': '4.5.3',
|
||||
'har-validator': '1.8.0',
|
||||
'json5': '0.4.0',
|
||||
'loader-utils': '0.2.11',
|
||||
'micromatch': '2.2.0',
|
||||
'postcss-normalize-url': '2.1.1',
|
||||
'postcss-reduce-idents': '1.0.2',
|
||||
'postcss-unique-selectors': '1.0.0',
|
||||
'postcss-minify-selectors': '1.4.6',
|
||||
'postcss-single-charset': '0.3.0',
|
||||
'regenerator': '0.8.36'
|
||||
}
|
||||
};
|
||||
|
||||
grunt.config.merge(config);
|
||||
|
|
|
@ -25,7 +25,11 @@
|
|||
# elasticsearch.username: user
|
||||
# elasticsearch.password: pass
|
||||
|
||||
# If your Elasticsearch requires client certificate and key
|
||||
# SSL for outgoing requests from the Kibana Server to the browser (PEM formatted)
|
||||
# server.ssl.cert: /path/to/your/server.crt
|
||||
# server.ssl.key: /path/to/your/server.key
|
||||
|
||||
# Optional setting to validate that your Elasticsearch backend uses the same key files (PEM formatted)
|
||||
# elasticsearch.ssl.cert: /path/to/your/client.crt
|
||||
# elasticsearch.ssl.key: /path/to/your/client.key
|
||||
|
||||
|
@ -52,12 +56,17 @@
|
|||
# Time in milliseconds to wait for Elasticsearch at Kibana startup before retrying
|
||||
# elasticsearch.startupTimeout: 5000
|
||||
|
||||
# SSL for outgoing requests from the Kibana Server (PEM formatted)
|
||||
# server.ssl.cert: /path/to/your/server.crt
|
||||
# server.ssl.key: /path/to/your/server.key
|
||||
|
||||
# Set the path to where you would like the process id file to be created.
|
||||
# pid.file: /var/run/kibana.pid
|
||||
|
||||
# If you would like to send the log output to a file you can set the path below.
|
||||
# logging.dest: stdout
|
||||
|
||||
# Set this to true to suppress all logging output.
|
||||
# logging.silent: false
|
||||
|
||||
# Set this to true to suppress all logging output except for error messages.
|
||||
# logging.quiet: false
|
||||
|
||||
# Set this to true to log all events, including system usage information and all requests.
|
||||
# logging.verbose
|
||||
|
|
|
@ -107,6 +107,18 @@ heatmap dots appear at full intensity.
|
|||
* *Show Tooltip*: Check this box to have a tooltip with the values for a given dot when the cursor is on that dot.
|
||||
|
||||
*Desaturate map tiles*:: Desaturate the map's color in order to make the markers stand out more clearly.
|
||||
*WMS compliant map server*:: Check this box to enable the use of a third-party mapping service that complies with the Web
|
||||
Map Service (WMS) standard. Specify the following elements:
|
||||
|
||||
* *WMS url*: The URL for the WMS map service.
|
||||
* *WMS layers*: A comma-separated list of the layers to use in this visualization. Each map server provides its own list of
|
||||
layers.
|
||||
* *WMS version*: The WMS version used by this map service.
|
||||
* *WMS format*: The image format used by this map service. The two most common formats are `image/png` and `image/jpeg`.
|
||||
* *WMS attribution*: An optional, user-defined string that identifies the map source. Maps display the attribution string
|
||||
in the lower right corner.
|
||||
* *WMS styles*: A comma-separated list of the styles to use in this visualization. Each map server provides its own styling
|
||||
options.
|
||||
|
||||
After changing options, click the green *Apply changes* button to update your visualization, or the grey *Discard
|
||||
changes* button to keep your visualization in its current state.
|
||||
|
|
10
package.json
10
package.json
|
@ -138,7 +138,7 @@
|
|||
"grunt-cli": "0.1.13",
|
||||
"grunt-contrib-clean": "0.6.0",
|
||||
"grunt-contrib-copy": "0.8.1",
|
||||
"grunt-esvm": "1.1.5",
|
||||
"grunt-esvm": "1.1.6",
|
||||
"grunt-karma": "0.12.0",
|
||||
"grunt-run": "0.5.0",
|
||||
"grunt-s3": "0.2.0-alpha.3",
|
||||
|
@ -156,14 +156,14 @@
|
|||
"karma-ie-launcher": "0.2.0",
|
||||
"karma-mocha": "0.2.0",
|
||||
"karma-safari-launcher": "0.1.1",
|
||||
"libesvm": "1.0.5",
|
||||
"libesvm": "1.0.7",
|
||||
"license-checker": "3.1.0",
|
||||
"load-grunt-config": "0.7.2",
|
||||
"marked-text-renderer": "0.1.0",
|
||||
"mocha": "2.3.0",
|
||||
"nock": "2.10.0",
|
||||
"Nonsense": "0.1.2",
|
||||
"npm": "3.2.2",
|
||||
"npm": "2.11.0",
|
||||
"portscanner": "1.0.0",
|
||||
"simple-git": "1.8.0",
|
||||
"sinon": "1.16.1",
|
||||
|
@ -171,7 +171,7 @@
|
|||
"wreck": "6.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "2.5",
|
||||
"npm": "3.2"
|
||||
"node": "0.12",
|
||||
"npm": "2.14.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,8 +31,8 @@ ${help(this, ' ')}
|
|||
};
|
||||
|
||||
Command.prototype.unknownArgv = function (argv) {
|
||||
if (argv) this.__unkownArgv = argv;
|
||||
return this.__unkownArgv ? this.__unkownArgv.slice(0) : [];
|
||||
if (argv) this.__unknownArgv = argv;
|
||||
return this.__unknownArgv ? this.__unknownArgv.slice(0) : [];
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -34,6 +34,11 @@ module.exports = function (program) {
|
|||
.option('-q, --quiet', 'Disable all process messaging except errors')
|
||||
.option('-s, --silent', 'Disable all process messaging')
|
||||
.option('-u, --url <url>', 'Specify download url')
|
||||
.option(
|
||||
'-c, --config <path>',
|
||||
'Path to the config file',
|
||||
fromRoot('config/kibana.yml')
|
||||
)
|
||||
.option(
|
||||
'-t, --timeout <duration>',
|
||||
'Length of time before failing; 0 for never fail',
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
let _ = require('lodash');
|
||||
var utils = require('requirefrom')('src/utils');
|
||||
var fromRoot = utils('fromRoot');
|
||||
var pluginDownloader = require('./pluginDownloader');
|
||||
var pluginCleaner = require('./pluginCleaner');
|
||||
var KbnServer = require('../../server/KbnServer');
|
||||
var readYamlConfig = require('../serve/readYamlConfig');
|
||||
var fs = require('fs');
|
||||
|
||||
module.exports = {
|
||||
|
@ -25,7 +30,36 @@ function install(settings, logger) {
|
|||
.then(function () {
|
||||
return downloader.download();
|
||||
})
|
||||
.then(function (curious) {
|
||||
.then(async function() {
|
||||
logger.log('Optimizing and caching browser bundles...');
|
||||
let serverConfig = _.merge(
|
||||
readYamlConfig(settings.config),
|
||||
{
|
||||
env: 'production',
|
||||
logging: {
|
||||
silent: settings.silent,
|
||||
quiet: !settings.silent,
|
||||
verbose: false
|
||||
},
|
||||
optimize: {
|
||||
useBundleCache: false
|
||||
},
|
||||
server: {
|
||||
autoListen: false
|
||||
},
|
||||
plugins: {
|
||||
initialize: false,
|
||||
scanDirs: [settings.pluginDir, fromRoot('src/plugins')],
|
||||
paths: [settings.workingPath]
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
let kbnServer = new KbnServer(serverConfig);
|
||||
await kbnServer.ready();
|
||||
await kbnServer.close();
|
||||
})
|
||||
.then(function () {
|
||||
fs.renameSync(settings.workingPath, settings.pluginPath);
|
||||
logger.log('Plugin installation complete');
|
||||
})
|
||||
|
|
|
@ -54,6 +54,10 @@ module.exports = function (options) {
|
|||
settings.urls.push(options.url);
|
||||
}
|
||||
|
||||
if (options.config) {
|
||||
settings.config = options.config;
|
||||
}
|
||||
|
||||
if (options.install) {
|
||||
settings.action = 'install';
|
||||
parts = options.install.split('/');
|
||||
|
|
|
@ -32,7 +32,10 @@ module.exports = function (program) {
|
|||
.description('Run the kibana server')
|
||||
.collectUnknownOptions()
|
||||
.option('-e, --elasticsearch <uri>', 'Elasticsearch instance')
|
||||
.option('-c, --config <path>', 'Path to the config file')
|
||||
.option(
|
||||
'-c, --config <path>',
|
||||
'Path to the config file',
|
||||
fromRoot('config/kibana.yml'))
|
||||
.option('-p, --port <port>', 'The port to bind to', parseInt)
|
||||
.option('-q, --quiet', 'Prevent all logging except errors')
|
||||
.option('-Q, --silent', 'Prevent all logging')
|
||||
|
@ -76,7 +79,7 @@ module.exports = function (program) {
|
|||
let readYamlConfig = require('./readYamlConfig');
|
||||
let KbnServer = src('server/KbnServer');
|
||||
|
||||
let settings = readYamlConfig(opts.config || fromRoot('config/kibana.yml'));
|
||||
let settings = readYamlConfig(opts.config);
|
||||
|
||||
if (opts.dev) {
|
||||
try { _.merge(settings, readYamlConfig(fromRoot('config/kibana.dev.yml'))); }
|
||||
|
|
|
@ -19,7 +19,9 @@ module.exports = async (kbnServer, server, config) => {
|
|||
await bundles.writeEntryFiles();
|
||||
|
||||
// in prod, only bundle what looks invalid or missing
|
||||
if (config.get('env.prod')) bundles = await kbnServer.bundles.getInvalidBundles();
|
||||
if (config.get('optimize.useBundleCache')) {
|
||||
bundles = await bundles.getInvalidBundles();
|
||||
}
|
||||
|
||||
// we might not have any work to do
|
||||
if (!bundles.getIds().length) {
|
||||
|
|
|
@ -29,7 +29,7 @@ module.exports = async (kbnServer, server, config) => {
|
|||
break;
|
||||
|
||||
default:
|
||||
throw new Error(`unkown kbnWorkerType "${process.env.kbnWorkerType}"`);
|
||||
throw new Error(`unknown kbnWorkerType "${process.env.kbnWorkerType}"`);
|
||||
}
|
||||
|
||||
};
|
||||
|
|
|
@ -1,16 +1,14 @@
|
|||
<div ng-if="switcher.loading">
|
||||
<div class="spinner large"></div>
|
||||
</div>
|
||||
|
||||
<div ng-if="!switcher.loading" class="app-links">
|
||||
<a
|
||||
ng-repeat="app in switcher.apps"
|
||||
ng-href="/app/{{app.id}}"
|
||||
class="app-link">
|
||||
<span ng-style="{ 'background-image': 'url(' + app.icon + ')' }" class="app-icon"></span>
|
||||
<span class="app-info">
|
||||
<h2 class="app-title">{{ app.title }}</h2>
|
||||
<h3 class="app-description">{{ app.description }}</h3>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<div class="app-link" ng-repeat="app in switcher.apps | orderBy:'title'">
|
||||
<a ng-href="/app/{{app.id}}">
|
||||
|
||||
<div ng-if="app.icon" ng-style="{ 'background-image': 'url(../' + app.icon + ')' }" class="app-icon"></div>
|
||||
<div ng-if="!app.icon" class="app-icon app-icon-missing">{{app.title[0]}}</div>
|
||||
|
||||
<div class="app-title">{{ app.title }}</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
require('plugins/appSwitcher/appSwitcher.less');
|
||||
|
||||
var kibanaLogoUrl = require('ui/images/kibana.png');
|
||||
|
||||
require('ui/chrome')
|
||||
.setBrand({
|
||||
'logo': 'url(' + kibanaLogoUrl + ') left no-repeat',
|
||||
'smallLogo': 'url(' + kibanaLogoUrl + ') left no-repeat'
|
||||
})
|
||||
.setShowAppsLink(false)
|
||||
.setTabs([
|
||||
{
|
||||
id: '',
|
||||
title: 'Apps',
|
||||
activeIndicatorColor: '#ecf0f1'
|
||||
}
|
||||
])
|
||||
.setRootTemplate(require('plugins/appSwitcher/appSwitcher.html'))
|
||||
.setRootController('switcher', function SwitcherController($http) {
|
||||
var switcher = {
|
||||
loading: true
|
||||
};
|
||||
|
||||
$http.get('/api/apps')
|
||||
.then(function (resp) {
|
||||
switcher.loading = false;
|
||||
switcher.apps = resp.data;
|
||||
});
|
||||
|
||||
return switcher;
|
||||
});
|
|
@ -1,43 +1,48 @@
|
|||
@import (reference) "~ui/styles/variables";
|
||||
|
||||
.application {
|
||||
background-color: @gray-lighter;
|
||||
}
|
||||
@app-icon-size: 48px;
|
||||
|
||||
.app-links {
|
||||
width: 700px;
|
||||
margin: 25px auto;
|
||||
text-align: justify;
|
||||
|
||||
.app-link {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
width: @app-icon-size;
|
||||
margin: 0px 10px;
|
||||
text-align: left;
|
||||
background: white;
|
||||
width: 200px;
|
||||
margin: 0 30px 30px 0;
|
||||
|
||||
.app-icon {
|
||||
display: block;
|
||||
height: 200px;
|
||||
background-size: cover;
|
||||
height: @app-icon-size;
|
||||
width: @app-icon-size;
|
||||
background-position: center;
|
||||
}
|
||||
background-size: contain;
|
||||
border-radius: @border-radius-base;
|
||||
background-color: @gray-light;
|
||||
width: 100%;
|
||||
|
||||
.app-info {
|
||||
display: block;
|
||||
padding: 15px;
|
||||
&-missing {
|
||||
text-align: center;
|
||||
font-size: 2.7em;
|
||||
font-weight: bold;
|
||||
font-family: @font-family-sans-serif;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
.app-title {
|
||||
margin: 0 0 10px;
|
||||
color: @text-color;
|
||||
font-size: 0.9em;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.app-description {
|
||||
font-size: 1em;
|
||||
color: @gray;
|
||||
margin: 0;
|
||||
&:hover .app-title {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
var portscanner = require('portscanner');
|
||||
var path = require('path');
|
||||
var Promise = require('bluebird');
|
||||
var libesvm = require('libesvm');
|
||||
var fromRoot = require('requirefrom')('src/utils')('fromRoot');
|
||||
|
||||
function startEs() {
|
||||
var options = {
|
||||
branch: 'master',
|
||||
directory: fromRoot('esvm/test-es'),
|
||||
purge: true,
|
||||
config: {
|
||||
'cluster.name': 'test',
|
||||
'network.host': '127.0.0.1'
|
||||
}
|
||||
};
|
||||
var cluster = libesvm.createCluster(options);
|
||||
return cluster.install().then(function () {
|
||||
return cluster.start();
|
||||
}).then(function () {
|
||||
after(function () {
|
||||
this.timeout(120000);
|
||||
return cluster.shutdown();
|
||||
});
|
||||
return cluster;
|
||||
});
|
||||
}
|
||||
|
||||
function maybeStartES() {
|
||||
return new Promise(function (resolve, reject) {
|
||||
portscanner.checkPortStatus(9200, '127.0.0.1', function (err, status) {
|
||||
if (err) return reject(err);
|
||||
if (status === 'closed') return startEs().then(resolve, reject);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = function () {
|
||||
this.timeout(120000);
|
||||
return maybeStartES();
|
||||
};
|
|
@ -8,7 +8,6 @@ var fromRoot = src('utils/fromRoot');
|
|||
|
||||
describe('plugins/elasticsearch', function () {
|
||||
describe('routes', function () {
|
||||
before(require('./_ensure_elasticsearch'));
|
||||
|
||||
var kbnServer;
|
||||
|
||||
|
|
|
@ -21,8 +21,8 @@
|
|||
ng-model="vis.params.yAxis.max"
|
||||
ng-required="vis.params.setYExtents">
|
||||
</label>
|
||||
<div ng-show="vis.params.yAxis.min > vis.params.yAxis.max">
|
||||
<span class="text-danger">Min must not exceed max</span>
|
||||
<div ng-show="vis.params.yAxis.min >= vis.params.yAxis.max">
|
||||
<span class="text-danger">Max must be greater than min</span>
|
||||
</div>
|
||||
<label>
|
||||
y-min
|
||||
|
|
|
@ -13,7 +13,7 @@ module.exports = function (kibana) {
|
|||
app: {
|
||||
title: 'Kibana',
|
||||
description: 'the kibana you know and love',
|
||||
icon: 'plugins/kibana/settings/sections/about/barcode.svg',
|
||||
//icon: 'plugins/kibana/settings/sections/about/barcode.svg',
|
||||
main: 'plugins/kibana/kibana',
|
||||
uses: [
|
||||
'visTypes',
|
||||
|
|
|
@ -73,6 +73,16 @@
|
|||
<i aria-hidden="true" class="fa fa-plus-circle"></i>
|
||||
</button>
|
||||
</kbn-tooltip>
|
||||
<kbn-tooltip text="Options" placement="bottom" append-to-body="1">
|
||||
<button
|
||||
aria-label="Options"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="{{ configTemplate.is('options') }}"
|
||||
ng-class="{active: configTemplate.is('options')}"
|
||||
ng-click="configTemplate.toggle('options');">
|
||||
<i aria-hidden="true" class="fa fa-gear"></i>
|
||||
</button>
|
||||
</kbn-tooltip>
|
||||
</div>
|
||||
</navbar>
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ define(function (require) {
|
|||
var $ = require('jquery');
|
||||
var angular = require('angular');
|
||||
var ConfigTemplate = require('ui/ConfigTemplate');
|
||||
var chrome = require('ui/chrome');
|
||||
|
||||
require('ui/directives/config');
|
||||
require('ui/courier');
|
||||
|
@ -32,7 +33,7 @@ define(function (require) {
|
|||
.when('/dashboard', {
|
||||
template: require('plugins/kibana/dashboard/index.html'),
|
||||
resolve: {
|
||||
dash: function (savedDashboards) {
|
||||
dash: function (savedDashboards, config) {
|
||||
return savedDashboards.get();
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +52,7 @@ define(function (require) {
|
|||
|
||||
app.directive('dashboardApp', function (Notifier, courier, AppState, timefilter, kbnUrl) {
|
||||
return {
|
||||
controller: function ($scope, $route, $routeParams, $location, Private, getAppState) {
|
||||
controller: function ($scope, $rootScope, $route, $routeParams, $location, Private, getAppState) {
|
||||
|
||||
var queryFilter = Private(require('ui/filter_bar/query_filter'));
|
||||
|
||||
|
@ -90,7 +91,8 @@ define(function (require) {
|
|||
save: require('plugins/kibana/dashboard/partials/save_dashboard.html'),
|
||||
load: require('plugins/kibana/dashboard/partials/load_dashboard.html'),
|
||||
share: require('plugins/kibana/dashboard/partials/share.html'),
|
||||
pickVis: require('plugins/kibana/dashboard/partials/pick_visualization.html')
|
||||
pickVis: require('plugins/kibana/dashboard/partials/pick_visualization.html'),
|
||||
options: require('plugins/kibana/dashboard/partials/options.html')
|
||||
});
|
||||
|
||||
$scope.refresh = _.bindKey(courier, 'fetch');
|
||||
|
@ -101,6 +103,11 @@ define(function (require) {
|
|||
|
||||
courier.setRootSearchSource(dash.searchSource);
|
||||
|
||||
setDarkTheme(dash.darkTheme);
|
||||
$scope.$watch('dash.darkTheme', function (value) {
|
||||
setDarkTheme(value);
|
||||
});
|
||||
|
||||
function init() {
|
||||
updateQueryOnRootSource();
|
||||
|
||||
|
@ -123,6 +130,12 @@ define(function (require) {
|
|||
}
|
||||
}
|
||||
|
||||
function setDarkTheme(enabled) {
|
||||
var theme = !!enabled ? 'theme-dark' : 'theme-light';
|
||||
chrome.removeApplicationClass(['theme-dark', 'theme-light']);
|
||||
chrome.addApplicationClass(theme);
|
||||
}
|
||||
|
||||
// update root source when filters update
|
||||
$scope.$listen(queryFilter, 'update', function () {
|
||||
updateQueryOnRootSource();
|
||||
|
|
10
src/plugins/kibana/public/dashboard/partials/options.html
Normal file
10
src/plugins/kibana/public/dashboard/partials/options.html
Normal file
|
@ -0,0 +1,10 @@
|
|||
<form role="form" class="options">
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<label>
|
||||
<input type="checkbox" ng-model="opts.dashboard.darkTheme" ng-checked="opts.dashboard.darkTheme">
|
||||
Use dark theme
|
||||
</label>
|
||||
</div>
|
||||
</p>
|
||||
</form>
|
|
@ -4,11 +4,11 @@
|
|||
<li ng-class="{active: mode == 'search'}"><a ng-click="mode='search'" title="Searches">Searches</a></li>
|
||||
</ul>
|
||||
|
||||
<li class="list-group-item" ng-switch-when="visualization">
|
||||
<div class="list-group-item" ng-switch-when="visualization">
|
||||
<saved-object-finder title="Choose a visualization" type="visualizations" on-choose="opts.addVis"></saved-object-finder>
|
||||
</li>
|
||||
</div>
|
||||
|
||||
<li class="list-group-item" ng-switch-when="search">
|
||||
<div class="list-group-item" ng-switch-when="search">
|
||||
<saved-object-finder title="Choose a search" type="searches" on-choose="opts.addSearch"></saved-object-finder>
|
||||
</li>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -4,8 +4,7 @@ define(function (require) {
|
|||
var moment = require('moment');
|
||||
|
||||
// Used only by the savedDashboards service, usually no reason to change this
|
||||
module.factory('SavedDashboard', function (courier) {
|
||||
|
||||
module.factory('SavedDashboard', function (courier, config) {
|
||||
// SavedDashboard constructor. Usually you'd interact with an instance of this.
|
||||
// ID is option, without it one will be generated on save.
|
||||
_.class(SavedDashboard).inherits(courier.SavedObject);
|
||||
|
@ -28,7 +27,8 @@ define(function (require) {
|
|||
version: 1,
|
||||
timeRestore: false,
|
||||
timeTo: undefined,
|
||||
timeFrom: undefined
|
||||
timeFrom: undefined,
|
||||
darkTheme: config.get('dashboard:defaultDarkTheme')
|
||||
},
|
||||
|
||||
// if an indexPattern was saved with the searchsource of a SavedDashboard
|
||||
|
@ -49,7 +49,8 @@ define(function (require) {
|
|||
version: 'integer',
|
||||
timeRestore: 'boolean',
|
||||
timeTo: 'string',
|
||||
timeFrom: 'string'
|
||||
timeFrom: 'string',
|
||||
darkTheme: 'boolean'
|
||||
};
|
||||
|
||||
SavedDashboard.searchsource = true;
|
||||
|
|
|
@ -43,7 +43,7 @@ define(function (require) {
|
|||
};
|
||||
|
||||
|
||||
this.find = function (searchString) {
|
||||
this.find = function (searchString, size = 100) {
|
||||
var self = this;
|
||||
var body;
|
||||
if (searchString) {
|
||||
|
@ -64,7 +64,7 @@ define(function (require) {
|
|||
index: kbnIndex,
|
||||
type: 'dashboard',
|
||||
body: body,
|
||||
size: 100
|
||||
size: size
|
||||
})
|
||||
.then(function (resp) {
|
||||
return {
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
@import (reference) "~ui/styles/variables";
|
||||
@import (reference) "~ui/styles/mixins";
|
||||
@dashboard-background: @gray-lighter;
|
||||
|
||||
.tab-dashboard {
|
||||
background-color: @dashboard-background;
|
||||
background-color: @dashboard-bg;
|
||||
}
|
||||
|
||||
dashboard-grid {
|
||||
|
@ -14,14 +13,14 @@ dashboard-grid {
|
|||
|
||||
.start-screen {
|
||||
margin: 20px;
|
||||
background-color: @gray-lighter;
|
||||
background-color: @dashboard-bg;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.gridster {
|
||||
list-style-type: none;
|
||||
display: block;
|
||||
background-color: @dashboard-background;
|
||||
background-color: @dashboard-bg;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
|
@ -41,8 +40,8 @@ dashboard-grid {
|
|||
dashboard-panel {
|
||||
display: block;
|
||||
height: 100%;
|
||||
background: @panel-bg;
|
||||
color: @text-color;
|
||||
background: @dashboard-panel-bg;
|
||||
color: @dashboard-panel-color;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
|
@ -61,6 +60,8 @@ dashboard-grid {
|
|||
flex: 0 0 auto;
|
||||
white-space: nowrap;
|
||||
display: flex;
|
||||
border-top-right-radius: 0;
|
||||
border-top-left-radius: 0;
|
||||
|
||||
div.btn-group {
|
||||
white-space: nowrap;
|
||||
|
@ -85,12 +86,12 @@ dashboard-grid {
|
|||
}
|
||||
|
||||
a {
|
||||
color: @text-color;
|
||||
color: @dashboard-panel-heading-link-color;
|
||||
border: none;
|
||||
background: none;
|
||||
padding: 0px 3px;
|
||||
&:hover {
|
||||
color: @link-hover-color;
|
||||
color: @dashboard-panel-heading-link-hover-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -105,7 +106,7 @@ dashboard-grid {
|
|||
|
||||
.fa-exclamation-triangle {
|
||||
font-size: 2em;
|
||||
color: @btn-danger-bg;
|
||||
color: @dashboard-panel-load-error-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ define(function (require) {
|
|||
});
|
||||
};
|
||||
|
||||
this.find = function (searchString) {
|
||||
this.find = function (searchString, size = 100) {
|
||||
var self = this;
|
||||
var body;
|
||||
if (searchString) {
|
||||
|
@ -67,7 +67,7 @@ define(function (require) {
|
|||
index: kbnIndex,
|
||||
type: 'search',
|
||||
body: body,
|
||||
size: 100
|
||||
size: size
|
||||
})
|
||||
.then(function (resp) {
|
||||
return {
|
||||
|
|
|
@ -61,16 +61,16 @@
|
|||
|
||||
opacity: 0.75;
|
||||
text-align: center;
|
||||
background-color: #ffffff;
|
||||
background-color: transparent;
|
||||
|
||||
// spinner and prorgess counter
|
||||
// spinner and progress counter
|
||||
> div {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
&-info {
|
||||
background-color: @well-bg;
|
||||
background-color: @discover-info-bg;
|
||||
float: right;
|
||||
padding: 5px 10px;
|
||||
border-bottom-left-radius: @border-radius-base;
|
||||
|
@ -94,7 +94,7 @@
|
|||
}
|
||||
|
||||
&-footer {
|
||||
background-color: @well-bg;
|
||||
background-color: @discover-table-footer-bg;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
|
@ -116,7 +116,7 @@
|
|||
|
||||
&-field {
|
||||
&-filter {
|
||||
background-color: @well-bg;
|
||||
background-color: @discover-field-filter-bg;
|
||||
margin-right: 10px;
|
||||
|
||||
.form-group {
|
||||
|
@ -126,16 +126,17 @@
|
|||
}
|
||||
|
||||
&-toggle {
|
||||
color: @btn-success-color;
|
||||
color: @discover-field-toggle-color;
|
||||
font-size: 9px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.shard-failures {
|
||||
color: @brand-danger;
|
||||
background-color: lighten(@brand-danger, 40%) !important;
|
||||
border: 1px solid @brand-danger;
|
||||
color: @discover-shard-failures-color;
|
||||
background-color: @discover-shard-failures-bg !important;
|
||||
border: 1px solid;
|
||||
border-color: @discover-shard-failures-border;
|
||||
border-radius: @border-radius-base;
|
||||
padding: 0 20px 20px;
|
||||
li {
|
||||
|
@ -157,19 +158,21 @@
|
|||
}
|
||||
|
||||
.discover-field-details {
|
||||
border-top: 1px solid @well-border;
|
||||
border-top: 1px solid;
|
||||
border-top-color: @discover-field-details-border;
|
||||
padding: 5px 10px;
|
||||
background-color: @body-bg;
|
||||
color: @text-color;
|
||||
background-color: @discover-field-details-bg;
|
||||
color: @discover-field-details-color;
|
||||
|
||||
&-close {
|
||||
text-align: center;
|
||||
border-top: 1px solid @well-border;
|
||||
background-color: @well-bg;
|
||||
border-top: 1px solid;
|
||||
border-color: @discover-field-details-close-border;
|
||||
background-color: @discover-field-details-close-bg;
|
||||
|
||||
&:hover {
|
||||
background-color: @sidebar-hover-bg;
|
||||
color: @sidebar-hover-color;
|
||||
background-color: @discover-field-details-close-hover-bg;
|
||||
color: @discover-field-details-close-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -190,11 +193,11 @@
|
|||
}
|
||||
|
||||
a {
|
||||
color: @link-color !important;
|
||||
color: @discover-link-color !important;
|
||||
}
|
||||
|
||||
a.btn {
|
||||
color: @text-color !important;
|
||||
color: @discover-link-btn-color !important;
|
||||
}
|
||||
|
||||
.progress {
|
||||
|
@ -208,7 +211,7 @@
|
|||
border-radius: 4px;
|
||||
|
||||
span {
|
||||
background-color: @gray;
|
||||
background-color: @discover-field-details-progress-bar-bg;
|
||||
padding: 3px;
|
||||
border-radius: 4px;
|
||||
margin-left: 3px;
|
||||
|
@ -225,11 +228,11 @@ field-name,
|
|||
text-align: center;
|
||||
display: inline-block;
|
||||
width: 12px;
|
||||
color: @text-muted;
|
||||
color: @field-name-color;
|
||||
}
|
||||
|
||||
&.no-results {
|
||||
color: @text-muted;
|
||||
color: @field-name-no-results-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -47,10 +47,9 @@ chrome
|
|||
title: 'Settings'
|
||||
}
|
||||
])
|
||||
.setRootController('kibana', function ($scope, courier) {
|
||||
.setRootController('kibana', function ($scope, $rootScope, courier, config) {
|
||||
// wait for the application to finish loading
|
||||
$scope.$on('application.load', function () {
|
||||
courier.start();
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
height="64"
|
||||
id="svg5235"
|
||||
version="1.1"
|
||||
inkscape:version="0.91+devel+osxmenu r12835"
|
||||
inkscape:version="0.91 r13725"
|
||||
viewBox="0 0 64 64"
|
||||
sodipodi:docname="barcode.svg">
|
||||
<defs
|
||||
|
@ -45,7 +45,7 @@
|
|||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
|
@ -54,404 +54,401 @@
|
|||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g6209"
|
||||
transform="matrix(0.57440105,0,0,0.57440105,-36.987859,-56.970747)">
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="97.825981"
|
||||
height="100.54836"
|
||||
width="2.4159346"
|
||||
id="rect5251-3"
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="85.735123"
|
||||
height="100.54836"
|
||||
width="7.5297971"
|
||||
id="rect5251-9"
|
||||
style="opacity:1;fill:#ea458b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="75.889793"
|
||||
height="100.54836"
|
||||
width="5.0022545"
|
||||
id="rect5251-8"
|
||||
style="opacity:1;fill:#f3bb19;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="72.783882"
|
||||
height="100.54836"
|
||||
width="3.2287681"
|
||||
id="rect5251-2"
|
||||
style="opacity:1;fill:#2d448e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="69.63768"
|
||||
height="100.54836"
|
||||
width="3.159905"
|
||||
id="rect5251"
|
||||
style="opacity:1;fill:#83cb1c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="119.37186"
|
||||
height="100.54836"
|
||||
width="6.9419966"
|
||||
id="rect5251-9-9"
|
||||
style="opacity:1;fill:#ea458b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="131.24544"
|
||||
height="100.54836"
|
||||
width="4.9434743"
|
||||
id="rect5251-5-9"
|
||||
style="opacity:1;fill:#006555;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="83.986267"
|
||||
height="100.54836"
|
||||
width="1.8869137"
|
||||
id="rect5251-5-0"
|
||||
style="opacity:1;fill:#006555;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="93.214729"
|
||||
height="100.54836"
|
||||
width="4.7083545"
|
||||
id="rect5251-7"
|
||||
style="opacity:1;fill:#83cb1c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="136.24173"
|
||||
height="100.54836"
|
||||
width="5.8251753"
|
||||
id="rect5251-36"
|
||||
style="opacity:1;fill:#83cb1c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="80.870918"
|
||||
height="100.54836"
|
||||
width="3.1212945"
|
||||
id="rect5251-3-7"
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="100.15076"
|
||||
height="100.54836"
|
||||
width="3.5915353"
|
||||
id="rect5251-9-9-3"
|
||||
style="opacity:1;fill:#ea458b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="166.68982"
|
||||
height="100.54836"
|
||||
width="3.9442151"
|
||||
id="rect5251-9-9-8"
|
||||
style="opacity:1;fill:#ea458b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="110.55486"
|
||||
height="100.54836"
|
||||
width="3.3564136"
|
||||
id="rect5251-3-3"
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33429"
|
||||
x="148.82066"
|
||||
height="100.54836"
|
||||
width="4.1793332"
|
||||
id="rect5251-3-0"
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33427"
|
||||
x="129.07057"
|
||||
height="100.54838"
|
||||
width="2.1808138"
|
||||
id="rect5251-8-3"
|
||||
style="opacity:1;fill:#f3bb19;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="142.00218"
|
||||
height="100.54836"
|
||||
width="3.0037344"
|
||||
id="rect5251-8-33"
|
||||
style="opacity:1;fill:#f3bb19;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="106.20512"
|
||||
height="100.54836"
|
||||
width="4.3556747"
|
||||
id="rect5251-7-3"
|
||||
style="opacity:1;fill:#83cb1c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="103.73636"
|
||||
height="100.54836"
|
||||
width="2.4159336"
|
||||
id="rect5251-2-0"
|
||||
style="opacity:1;fill:#2d448e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="116.25652"
|
||||
height="100.54836"
|
||||
width="3.8266549"
|
||||
id="rect5251-36-7"
|
||||
style="opacity:1;fill:#83cb1c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33427"
|
||||
x="113.9641"
|
||||
height="100.54838"
|
||||
width="2.2983737"
|
||||
id="rect5251-5-3"
|
||||
style="opacity:1;fill:#006555;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="126.30791"
|
||||
height="100.54836"
|
||||
width="2.8273947"
|
||||
id="rect5251-3-7-7"
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="144.8824"
|
||||
height="100.54836"
|
||||
width="2.0632553"
|
||||
id="rect5251-3-7-70"
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="146.99847"
|
||||
height="100.54836"
|
||||
width="1.8869162"
|
||||
id="rect5251-9-9-8-4"
|
||||
style="opacity:1;fill:#ea458b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="158.32114"
|
||||
height="100.54836"
|
||||
width="4.708354"
|
||||
id="rect5251-3-7-70-2"
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33427"
|
||||
x="152.97215"
|
||||
height="100.54838"
|
||||
width="5.413713"
|
||||
id="rect5251-8-339-2"
|
||||
style="opacity:1;fill:#f3bb19;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.33428"
|
||||
x="162.99417"
|
||||
height="100.54836"
|
||||
width="3.8266544"
|
||||
id="rect5251-36-5"
|
||||
style="opacity:1;fill:#83cb1c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
id="g4300"
|
||||
transform="matrix(1.1002186,0,0,1.1002186,-3.2119331,-3.0092752)">
|
||||
<g
|
||||
transform="matrix(0.57440105,0,0,0.57440105,-36.987859,-56.970747)"
|
||||
id="g6209">
|
||||
<rect
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-3"
|
||||
width="2.4159346"
|
||||
height="100.54836"
|
||||
x="97.825981"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ea458b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-9"
|
||||
width="7.5297971"
|
||||
height="100.54836"
|
||||
x="85.735123"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#f3bb19;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-8"
|
||||
width="5.0022545"
|
||||
height="100.54836"
|
||||
x="75.889793"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#2d448e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-2"
|
||||
width="3.2287681"
|
||||
height="100.54836"
|
||||
x="72.783882"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#83cb1c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251"
|
||||
width="3.159905"
|
||||
height="100.54836"
|
||||
x="69.63768"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ea458b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-9-9"
|
||||
width="6.9419966"
|
||||
height="100.54836"
|
||||
x="119.37186"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#006555;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-5-9"
|
||||
width="4.9434743"
|
||||
height="100.54836"
|
||||
x="131.24544"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#006555;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-5-0"
|
||||
width="1.8869137"
|
||||
height="100.54836"
|
||||
x="83.986267"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#83cb1c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-7"
|
||||
width="4.7083545"
|
||||
height="100.54836"
|
||||
x="93.214729"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#83cb1c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-36"
|
||||
width="5.8251753"
|
||||
height="100.54836"
|
||||
x="136.24173"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-3-7"
|
||||
width="3.1212945"
|
||||
height="100.54836"
|
||||
x="80.870918"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ea458b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-9-9-3"
|
||||
width="3.5915353"
|
||||
height="100.54836"
|
||||
x="100.15076"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ea458b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-9-9-8"
|
||||
width="3.9442151"
|
||||
height="100.54836"
|
||||
x="166.68982"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-3-3"
|
||||
width="3.3564136"
|
||||
height="100.54836"
|
||||
x="110.55486"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-3-0"
|
||||
width="4.1793332"
|
||||
height="100.54836"
|
||||
x="148.82066"
|
||||
y="104.33429" />
|
||||
<rect
|
||||
style="opacity:1;fill:#f3bb19;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-8-3"
|
||||
width="2.1808138"
|
||||
height="100.54838"
|
||||
x="129.07057"
|
||||
y="104.33427" />
|
||||
<rect
|
||||
style="opacity:1;fill:#f3bb19;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-8-33"
|
||||
width="3.0037344"
|
||||
height="100.54836"
|
||||
x="142.00218"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#83cb1c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-7-3"
|
||||
width="4.3556747"
|
||||
height="100.54836"
|
||||
x="106.20512"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#2d448e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-2-0"
|
||||
width="2.4159336"
|
||||
height="100.54836"
|
||||
x="103.73636"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#83cb1c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-36-7"
|
||||
width="3.8266549"
|
||||
height="100.54836"
|
||||
x="116.25652"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#006555;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-5-3"
|
||||
width="2.2983737"
|
||||
height="100.54838"
|
||||
x="113.9641"
|
||||
y="104.33427" />
|
||||
<rect
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-3-7-7"
|
||||
width="2.8273947"
|
||||
height="100.54836"
|
||||
x="126.30791"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-3-7-70"
|
||||
width="2.0632553"
|
||||
height="100.54836"
|
||||
x="144.8824"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ea458b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-9-9-8-4"
|
||||
width="1.8869162"
|
||||
height="100.54836"
|
||||
x="146.99847"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#39bdb1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-3-7-70-2"
|
||||
width="4.708354"
|
||||
height="100.54836"
|
||||
x="158.32114"
|
||||
y="104.33428" />
|
||||
<rect
|
||||
style="opacity:1;fill:#f3bb19;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-8-339-2"
|
||||
width="5.413713"
|
||||
height="100.54838"
|
||||
x="152.97215"
|
||||
y="104.33427" />
|
||||
<rect
|
||||
style="opacity:1;fill:#83cb1c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5251-36-5"
|
||||
width="3.8266544"
|
||||
height="100.54836"
|
||||
x="162.99417"
|
||||
y="104.33428" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.57440105,0,0,1.9251702,3.0622581,2.9589583)"
|
||||
id="g4544">
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:2"
|
||||
x1="1"
|
||||
y1="0"
|
||||
x2="1"
|
||||
y2="30"
|
||||
id="line4450" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="3.5"
|
||||
y1="0"
|
||||
x2="3.5"
|
||||
y2="30"
|
||||
id="line4452" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="6.5"
|
||||
y1="0"
|
||||
x2="6.5"
|
||||
y2="30"
|
||||
id="line4454" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="11.5"
|
||||
y1="0"
|
||||
x2="11.5"
|
||||
y2="30"
|
||||
id="line4456" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="14.5"
|
||||
y1="0"
|
||||
x2="14.5"
|
||||
y2="30"
|
||||
id="line4458" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:2"
|
||||
x1="17"
|
||||
y1="0"
|
||||
x2="17"
|
||||
y2="30"
|
||||
id="line4460" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:2"
|
||||
x1="23"
|
||||
y1="0"
|
||||
x2="23"
|
||||
y2="30"
|
||||
id="line4462" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="28.5"
|
||||
y1="0"
|
||||
x2="28.5"
|
||||
y2="30"
|
||||
id="line4464" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="30.5"
|
||||
y1="0"
|
||||
x2="30.5"
|
||||
y2="30"
|
||||
id="line4466" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:2"
|
||||
x1="34"
|
||||
y1="0"
|
||||
x2="34"
|
||||
y2="30"
|
||||
id="line4468" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:2"
|
||||
x1="37"
|
||||
y1="0"
|
||||
x2="37"
|
||||
y2="30"
|
||||
id="line4470" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:2"
|
||||
x1="41"
|
||||
y1="0"
|
||||
x2="41"
|
||||
y2="30"
|
||||
id="line4472" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="44.5"
|
||||
y1="0"
|
||||
x2="44.5"
|
||||
y2="30"
|
||||
id="line4474" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:2"
|
||||
x1="47"
|
||||
y1="0"
|
||||
x2="47"
|
||||
y2="30"
|
||||
id="line4476" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="50.5"
|
||||
y1="0"
|
||||
x2="50.5"
|
||||
y2="30"
|
||||
id="line4478" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:2"
|
||||
x1="56"
|
||||
y1="0"
|
||||
x2="56"
|
||||
y2="30"
|
||||
id="line4480" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="59.5"
|
||||
y1="0"
|
||||
x2="59.5"
|
||||
y2="30"
|
||||
id="line4482" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="61.5"
|
||||
y1="0"
|
||||
x2="61.5"
|
||||
y2="30"
|
||||
id="line4484" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:2"
|
||||
x1="67"
|
||||
y1="0"
|
||||
x2="67"
|
||||
y2="30"
|
||||
id="line4486" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="72.5"
|
||||
y1="0"
|
||||
x2="72.5"
|
||||
y2="30"
|
||||
id="line4488" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="75.5"
|
||||
y1="0"
|
||||
x2="75.5"
|
||||
y2="30"
|
||||
id="line4490" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="77.5"
|
||||
y1="0"
|
||||
x2="77.5"
|
||||
y2="30"
|
||||
id="line4492" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="79.5"
|
||||
y1="0"
|
||||
x2="79.5"
|
||||
y2="30"
|
||||
id="line4494" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:4"
|
||||
x1="83"
|
||||
y1="0"
|
||||
x2="83"
|
||||
y2="30"
|
||||
id="line4496" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:2"
|
||||
x1="89"
|
||||
y1="0"
|
||||
x2="89"
|
||||
y2="30"
|
||||
id="line4498" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:3"
|
||||
x1="94.5"
|
||||
y1="0"
|
||||
x2="94.5"
|
||||
y2="30"
|
||||
id="line4500" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:1"
|
||||
x1="97.5"
|
||||
y1="0"
|
||||
x2="97.5"
|
||||
y2="30"
|
||||
id="line4502" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-width:2"
|
||||
x1="100"
|
||||
y1="0"
|
||||
x2="100"
|
||||
y2="30"
|
||||
id="line4504" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g4544"
|
||||
transform="matrix(0.57440105,0,0,1.9251702,3.0622581,2.9589583)">
|
||||
<line
|
||||
id="line4450"
|
||||
y2="30"
|
||||
x2="1"
|
||||
y1="0"
|
||||
x1="1"
|
||||
style="fill:none;stroke:#000000;stroke-width:2" />
|
||||
<line
|
||||
id="line4452"
|
||||
y2="30"
|
||||
x2="3.5"
|
||||
y1="0"
|
||||
x1="3.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4454"
|
||||
y2="30"
|
||||
x2="6.5"
|
||||
y1="0"
|
||||
x1="6.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4456"
|
||||
y2="30"
|
||||
x2="11.5"
|
||||
y1="0"
|
||||
x1="11.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4458"
|
||||
y2="30"
|
||||
x2="14.5"
|
||||
y1="0"
|
||||
x1="14.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4460"
|
||||
y2="30"
|
||||
x2="17"
|
||||
y1="0"
|
||||
x1="17"
|
||||
style="fill:none;stroke:#000000;stroke-width:2" />
|
||||
<line
|
||||
id="line4462"
|
||||
y2="30"
|
||||
x2="23"
|
||||
y1="0"
|
||||
x1="23"
|
||||
style="fill:none;stroke:#000000;stroke-width:2" />
|
||||
<line
|
||||
id="line4464"
|
||||
y2="30"
|
||||
x2="28.5"
|
||||
y1="0"
|
||||
x1="28.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4466"
|
||||
y2="30"
|
||||
x2="30.5"
|
||||
y1="0"
|
||||
x1="30.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4468"
|
||||
y2="30"
|
||||
x2="34"
|
||||
y1="0"
|
||||
x1="34"
|
||||
style="fill:none;stroke:#000000;stroke-width:2" />
|
||||
<line
|
||||
id="line4470"
|
||||
y2="30"
|
||||
x2="37"
|
||||
y1="0"
|
||||
x1="37"
|
||||
style="fill:none;stroke:#000000;stroke-width:2" />
|
||||
<line
|
||||
id="line4472"
|
||||
y2="30"
|
||||
x2="41"
|
||||
y1="0"
|
||||
x1="41"
|
||||
style="fill:none;stroke:#000000;stroke-width:2" />
|
||||
<line
|
||||
id="line4474"
|
||||
y2="30"
|
||||
x2="44.5"
|
||||
y1="0"
|
||||
x1="44.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4476"
|
||||
y2="30"
|
||||
x2="47"
|
||||
y1="0"
|
||||
x1="47"
|
||||
style="fill:none;stroke:#000000;stroke-width:2" />
|
||||
<line
|
||||
id="line4478"
|
||||
y2="30"
|
||||
x2="50.5"
|
||||
y1="0"
|
||||
x1="50.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4480"
|
||||
y2="30"
|
||||
x2="56"
|
||||
y1="0"
|
||||
x1="56"
|
||||
style="fill:none;stroke:#000000;stroke-width:2" />
|
||||
<line
|
||||
id="line4482"
|
||||
y2="30"
|
||||
x2="59.5"
|
||||
y1="0"
|
||||
x1="59.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4484"
|
||||
y2="30"
|
||||
x2="61.5"
|
||||
y1="0"
|
||||
x1="61.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4486"
|
||||
y2="30"
|
||||
x2="67"
|
||||
y1="0"
|
||||
x1="67"
|
||||
style="fill:none;stroke:#000000;stroke-width:2" />
|
||||
<line
|
||||
id="line4488"
|
||||
y2="30"
|
||||
x2="72.5"
|
||||
y1="0"
|
||||
x1="72.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4490"
|
||||
y2="30"
|
||||
x2="75.5"
|
||||
y1="0"
|
||||
x1="75.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4492"
|
||||
y2="30"
|
||||
x2="77.5"
|
||||
y1="0"
|
||||
x1="77.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4494"
|
||||
y2="30"
|
||||
x2="79.5"
|
||||
y1="0"
|
||||
x1="79.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4496"
|
||||
y2="30"
|
||||
x2="83"
|
||||
y1="0"
|
||||
x1="83"
|
||||
style="fill:none;stroke:#000000;stroke-width:4" />
|
||||
<line
|
||||
id="line4498"
|
||||
y2="30"
|
||||
x2="89"
|
||||
y1="0"
|
||||
x1="89"
|
||||
style="fill:none;stroke:#000000;stroke-width:2" />
|
||||
<line
|
||||
id="line4500"
|
||||
y2="30"
|
||||
x2="94.5"
|
||||
y1="0"
|
||||
x1="94.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:3" />
|
||||
<line
|
||||
id="line4502"
|
||||
y2="30"
|
||||
x2="97.5"
|
||||
y1="0"
|
||||
x1="97.5"
|
||||
style="fill:none;stroke:#000000;stroke-width:1" />
|
||||
<line
|
||||
id="line4504"
|
||||
y2="30"
|
||||
x2="100"
|
||||
y1="0"
|
||||
x1="100"
|
||||
style="fill:none;stroke:#000000;stroke-width:2" />
|
||||
</g>
|
||||
<rect
|
||||
style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3.01796293;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect6306"
|
||||
width="61.028111"
|
||||
height="60.597305"
|
||||
x="1.5768572"
|
||||
y="1.5882187" />
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 16 KiB |
|
@ -1,9 +1,12 @@
|
|||
<tr ng-class="conf.value === undefined ? 'default' : 'custom'">
|
||||
<td class="name">
|
||||
<b>{{conf.name}}</b>
|
||||
<span class="smaller" ng-show="conf.value !== undefined">
|
||||
<span class="smaller" ng-show="!conf.isCustom && conf.value !== undefined">
|
||||
(Default: <i>{{conf.defVal == undefined ? 'null' : conf.defVal}}</i>)
|
||||
</span>
|
||||
<span class="smaller" ng-show="conf.isCustom">
|
||||
(Custom setting)
|
||||
</span>
|
||||
<br>
|
||||
<span class="smaller" ng-bind-html="conf.description | trustAsHtml"></span>
|
||||
</td>
|
||||
|
|
|
@ -2,9 +2,12 @@
|
|||
<kbn-settings-advanced class="container">
|
||||
<div class="bs-callout bs-callout-warning">
|
||||
<h4>Caution: You can break stuff here</h4>
|
||||
Be careful in here, these settings are for very advanced users only. Tweaks you make here can break large portions of Kibana.
|
||||
Some of these settings may be undocumented, unsupported or experimental. Blanking a field will cause Kibana to use its internal
|
||||
defaults which may be unacceptable given other configuration directives.
|
||||
Be careful in here, these settings are for very advanced users only.
|
||||
Tweaks you make here can break large portionsof Kibana. Some of these
|
||||
settings may be undocumented, unsupported or experimental. If a field has
|
||||
a default value, blanking the field will reset it to its default which
|
||||
may be unacceptable given other configuration directives. Deleting a
|
||||
custom setting will permanently remove it from Kibana's config.
|
||||
</div>
|
||||
<form role="form">
|
||||
<input aria-label="Filter" ng-model="advancedFilter" class="form-control span12" type="text" placeholder="Filter"/>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
define(function (require) {
|
||||
var _ = require('lodash');
|
||||
var getValType = require('plugins/kibana/settings/sections/advanced/lib/get_val_type');
|
||||
var toEditableConfig = require('plugins/kibana/settings/sections/advanced/lib/to_editable_config');
|
||||
|
||||
|
||||
require('plugins/kibana/settings/sections/advanced/advanced_row');
|
||||
|
@ -20,46 +20,34 @@ define(function (require) {
|
|||
ESC: 27
|
||||
};
|
||||
|
||||
var NAMED_EDITORS = ['json', 'array', 'boolean', 'select'];
|
||||
var NORMAL_EDITOR = ['number', 'string', 'null', 'undefined'];
|
||||
|
||||
function getEditorType(conf) {
|
||||
if (_.contains(NAMED_EDITORS, conf.type)) return conf.type;
|
||||
if (_.contains(NORMAL_EDITOR, conf.type)) return 'normal';
|
||||
}
|
||||
|
||||
function isTypeComplex(conf) {
|
||||
return !(conf.json || conf.array || conf.bool || conf.normal);
|
||||
}
|
||||
|
||||
function notDefaultConfig(configName) {
|
||||
return !(configName in configDefaults);
|
||||
}
|
||||
|
||||
function readConfigVals() {
|
||||
var configVals = config._vals();
|
||||
|
||||
$scope.configs = _.map(configDefaults, function (def, name) {
|
||||
var val = configVals[name];
|
||||
var conf = {
|
||||
name: name,
|
||||
defVal: def.value,
|
||||
type: getValType(def, val),
|
||||
description: def.description,
|
||||
options: def.options,
|
||||
value: val,
|
||||
};
|
||||
var customConfig = Object.keys(configVals)
|
||||
.filter(notDefaultConfig)
|
||||
.map(name => toEditableConfig(false, name, configVals[name]));
|
||||
|
||||
var editor = getEditorType(conf);
|
||||
conf.json = editor === 'json';
|
||||
conf.select = editor === 'select';
|
||||
conf.bool = editor === 'boolean';
|
||||
conf.array = editor === 'array';
|
||||
conf.normal = editor === 'normal';
|
||||
conf.tooComplex = !editor;
|
||||
|
||||
return conf;
|
||||
});
|
||||
$scope.configs = _(configDefaults)
|
||||
.map((def, name) => toEditableConfig(def, name, configVals[name]))
|
||||
.reject('readonly')
|
||||
.concat(customConfig)
|
||||
.value();
|
||||
}
|
||||
|
||||
// react to changes of the config values
|
||||
var unhook = $rootScope.$on('change:config', readConfigVals);
|
||||
$scope.$on('$destroy', unhook);
|
||||
|
||||
// initial config setup
|
||||
readConfigVals();
|
||||
$rootScope.$on('change:config', readConfigVals);
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
|
||||
var getEditorType = require('plugins/kibana/settings/sections/advanced/lib/get_editor_type');
|
||||
var expect = require('expect.js');
|
||||
|
||||
describe('Settings', function () {
|
||||
describe('Advanced', function () {
|
||||
describe('getEditorType(conf)', function () {
|
||||
context('when given type has a named editor', function () {
|
||||
it('returns that named editor', function () {
|
||||
expect(getEditorType({ type: 'json' })).to.equal('json');
|
||||
expect(getEditorType({ type: 'array' })).to.equal('array');
|
||||
expect(getEditorType({ type: 'boolean' })).to.equal('boolean');
|
||||
expect(getEditorType({ type: 'select' })).to.equal('select');
|
||||
});
|
||||
});
|
||||
|
||||
context('when given a type of number, string, null, or undefined', function () {
|
||||
it('returns "normal"', function () {
|
||||
expect(getEditorType({ type: 'number' })).to.equal('normal');
|
||||
expect(getEditorType({ type: 'string' })).to.equal('normal');
|
||||
expect(getEditorType({ type: 'null' })).to.equal('normal');
|
||||
expect(getEditorType({ type: 'undefined' })).to.equal('normal');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
|
@ -0,0 +1,86 @@
|
|||
|
||||
var toEditableConfig = require('plugins/kibana/settings/sections/advanced/lib/to_editable_config');
|
||||
var expect = require('expect.js');
|
||||
|
||||
describe('Settings', function () {
|
||||
describe('Advanced', function () {
|
||||
describe('toEditableConfig(def, name, value)', function () {
|
||||
it('sets name', function () {
|
||||
expect(invoke({ name: 'who' }).name).to.equal('who');
|
||||
});
|
||||
|
||||
it('sets value', function () {
|
||||
expect(invoke({ value: 'what' }).value).to.equal('what');
|
||||
});
|
||||
|
||||
it('sets type', function () {
|
||||
expect(invoke({ value: 'what' }).type).to.be('string');
|
||||
expect(invoke({ value: 0 }).type).to.be('number');
|
||||
expect(invoke({ value: [] }).type).to.be('array');
|
||||
});
|
||||
|
||||
context('when given a setting definition object', function () {
|
||||
var def;
|
||||
beforeEach(function () {
|
||||
def = {
|
||||
value: 'the original',
|
||||
description: 'the one and only',
|
||||
options: 'all the options'
|
||||
};
|
||||
});
|
||||
|
||||
it('is not marked as custom', function () {
|
||||
expect(invoke({ def }).isCustom).to.be.false;
|
||||
});
|
||||
|
||||
it('sets a default value', function () {
|
||||
expect(invoke({ def }).defVal).to.equal(def.value);
|
||||
});
|
||||
|
||||
it('sets a description', function () {
|
||||
expect(invoke({ def }).description).to.equal(def.description);
|
||||
});
|
||||
|
||||
it('sets options', function () {
|
||||
expect(invoke({ def }).options).to.equal(def.options);
|
||||
});
|
||||
|
||||
context('that contains a type', function () {
|
||||
it('sets that type', function () {
|
||||
def.type = 'something';
|
||||
expect(invoke({ def }).type).to.equal(def.type);
|
||||
});
|
||||
});
|
||||
|
||||
context('that contains a value of type array', function () {
|
||||
it('sets type to array', function () {
|
||||
def.value = [];
|
||||
expect(invoke({ def }).type).to.equal('array');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
context('when not given a setting definition object', function () {
|
||||
it('is marked as custom', function () {
|
||||
expect(invoke().isCustom).to.be.true;
|
||||
});
|
||||
|
||||
it('sets defVal to undefined', function () {
|
||||
expect(invoke().defVal).to.be.undefined;
|
||||
});
|
||||
|
||||
it('sets description to undefined', function () {
|
||||
expect(invoke().description).to.be.undefined;
|
||||
});
|
||||
|
||||
it('sets options to undefined', function () {
|
||||
expect(invoke().options).to.be.undefined;
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function invoke({ def = false, name = 'woah', value = 'forreal' } = {}) {
|
||||
return toEditableConfig(def, name, value);
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
define(function (require) {
|
||||
var _ = require('lodash');
|
||||
|
||||
var NAMED_EDITORS = ['json', 'array', 'boolean', 'select'];
|
||||
var NORMAL_EDITOR = ['number', 'string', 'null', 'undefined'];
|
||||
|
||||
/**
|
||||
* @param {object} advanced setting configuration object
|
||||
* @returns {string} the editor type to use when editing value
|
||||
*/
|
||||
function getEditorType(conf) {
|
||||
if (_.contains(NAMED_EDITORS, conf.type)) return conf.type;
|
||||
if (_.contains(NORMAL_EDITOR, conf.type)) return 'normal';
|
||||
}
|
||||
|
||||
return getEditorType;
|
||||
});
|
|
@ -0,0 +1,39 @@
|
|||
define(function (require) {
|
||||
var _ = require('lodash');
|
||||
var getValType = require('./get_val_type');
|
||||
var getEditorType = require('./get_editor_type');
|
||||
|
||||
/**
|
||||
* @param {object} advanced setting definition object
|
||||
* @param {object} name of setting
|
||||
* @param {object} current value of setting
|
||||
* @returns {object} the editable config object
|
||||
*/
|
||||
function toEditableConfig(def, name, value) {
|
||||
var isCustom = !def;
|
||||
if (isCustom) def = {};
|
||||
|
||||
var conf = {
|
||||
name,
|
||||
value,
|
||||
isCustom,
|
||||
readonly: !!def.readonly,
|
||||
defVal: def.value,
|
||||
type: getValType(def, value),
|
||||
description: def.description,
|
||||
options: def.options
|
||||
};
|
||||
|
||||
var editor = getEditorType(conf);
|
||||
conf.json = editor === 'json';
|
||||
conf.select = editor === 'select';
|
||||
conf.bool = editor === 'boolean';
|
||||
conf.array = editor === 'array';
|
||||
conf.normal = editor === 'normal';
|
||||
conf.tooComplex = !editor;
|
||||
|
||||
return conf;
|
||||
}
|
||||
|
||||
return toEditableConfig;
|
||||
});
|
|
@ -2,7 +2,7 @@
|
|||
<kbn-settings-objects class="container">
|
||||
<div class="header">
|
||||
<h2 class="title">Edit Saved Objects</h2>
|
||||
<button class="btn btn-default controls" ng-click="exportAll()"><i aria-hidden="true" class="fa fa-download"></i> Export</button>
|
||||
<button class="btn btn-default controls" ng-click="exportAll()"><i aria-hidden="true" class="fa fa-download"></i> Export Everything</button>
|
||||
<button file-upload="importAll(fileContents)" class="btn btn-default controls" ng-click><i aria-hidden="true" class="fa fa-upload"></i> Import</button>
|
||||
</div>
|
||||
<p>
|
||||
|
|
|
@ -4,6 +4,7 @@ define(function (require) {
|
|||
var saveAs = require('@spalger/filesaver').saveAs;
|
||||
var registry = require('plugins/kibana/settings/saved_object_registry');
|
||||
var objectIndexHTML = require('plugins/kibana/settings/sections/objects/_objects.html');
|
||||
const MAX_SIZE = Math.pow(2, 31) - 1;
|
||||
|
||||
require('ui/directives/file_upload');
|
||||
|
||||
|
@ -91,11 +92,12 @@ define(function (require) {
|
|||
retrieveAndExportDocs(objs);
|
||||
};
|
||||
|
||||
$scope.exportAll = function () {
|
||||
var objs = $scope.services.map(function (service) {
|
||||
return service.data.map(_.partialRight(_.extend, {type: service.type}));
|
||||
});
|
||||
retrieveAndExportDocs(_.flattenDeep(objs));
|
||||
$scope.exportAll = () => {
|
||||
Promise.map($scope.services, (service) =>
|
||||
service.service.find('', MAX_SIZE).then((results) =>
|
||||
results.hits.map((hit) => _.extend(hit, {type: service.type}))
|
||||
)
|
||||
).then((results) => retrieveAndExportDocs(_.flattenDeep(results)));
|
||||
};
|
||||
|
||||
function retrieveAndExportDocs(objs) {
|
||||
|
|
|
@ -24,20 +24,19 @@ kbn-settings-objects {
|
|||
margin-bottom: @line-height-computed;
|
||||
}
|
||||
.list-unstyled {
|
||||
// border-top: 1px solid @gray-lighter;
|
||||
// margin-top: @line-height-computed;
|
||||
li {
|
||||
border-bottom: 1px solid @gray-lighter;
|
||||
border-bottom: 1px solid;
|
||||
border-bottom-color: @settings-objects-list-border;
|
||||
padding: 8px;
|
||||
}
|
||||
}
|
||||
.empty {
|
||||
color: @gray-light;
|
||||
color: @settings-objects-empty-color;
|
||||
}
|
||||
|
||||
.action-bar {
|
||||
margin-top: 10px;
|
||||
background-color: @gray-lighter;
|
||||
background-color: @settings-objects-action-bar-bg;
|
||||
padding: 4px 12px;
|
||||
|
||||
label {
|
||||
|
@ -98,7 +97,7 @@ kbn-settings-objects-view {
|
|||
width: 100%;
|
||||
|
||||
tr.default td.value {
|
||||
color: @input-color-placeholder;
|
||||
color: @settings-advanced-table-default-color;
|
||||
}
|
||||
|
||||
td {
|
||||
|
@ -127,7 +126,7 @@ kbn-settings-objects-view {
|
|||
|
||||
.indices-settings {
|
||||
i.active {
|
||||
color: @btn-success-bg;
|
||||
color: @settings-indices-active-color;
|
||||
}
|
||||
|
||||
tr.field-settings {
|
||||
|
|
|
@ -126,7 +126,9 @@
|
|||
|
||||
<div class="vis-editor-content">
|
||||
|
||||
<vis-editor-sidebar class="vis-editor-sidebar" ng-if="chrome.getVisible()"></vis-editor-sidebar>
|
||||
<div class="collapsible-sidebar">
|
||||
<vis-editor-sidebar class="vis-editor-sidebar" ng-if="chrome.getVisible()"></vis-editor-sidebar>
|
||||
</div>
|
||||
|
||||
<div class="vis-editor-canvas" ng-class="{ embedded: !chrome.getVisible() }">
|
||||
<div class="visualize-info" ng-if="savedVis.id">
|
||||
|
|
|
@ -6,6 +6,7 @@ define(function (require) {
|
|||
|
||||
require('ui/visualize');
|
||||
require('ui/clipboard');
|
||||
require('ui/collapsible_sidebar');
|
||||
|
||||
require('ui/routes')
|
||||
.when('/visualize/create', {
|
||||
|
|
|
@ -10,12 +10,12 @@
|
|||
.navbar-default .navbar-nav {
|
||||
&> .active > a:before {
|
||||
border: 7px solid transparent;
|
||||
border-bottom-color: @gray-lighter;
|
||||
border-bottom-color: @vis-editor-navbar-current-tab-color;
|
||||
}
|
||||
|
||||
.danger {
|
||||
color: @btn-danger-color;
|
||||
background-color: @btn-danger-bg;
|
||||
color: @vis-editor-navbar-error-state-color;
|
||||
background-color: @vis-editor-navbar-error-state-bg;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,8 +35,8 @@
|
|||
right: 0px;
|
||||
bottom: 0px;
|
||||
z-index: 10;
|
||||
background: fadeout(@navbar-default-bg, 10%);
|
||||
color: white;
|
||||
background: fadeout(@vis-editor-navbar-modal-bg, 10%);
|
||||
color: @vis-editor-navbar-modal-color;
|
||||
text-align: center;
|
||||
padding-top: 6px;
|
||||
|
||||
|
@ -50,7 +50,7 @@
|
|||
}
|
||||
|
||||
a {
|
||||
color: white;
|
||||
color: @vis-editor-navbar-modal-link-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -64,17 +64,18 @@
|
|||
}
|
||||
}
|
||||
|
||||
&-sidebar {
|
||||
.collapsible-sidebar {
|
||||
.flex-parent(0, 0, auto);
|
||||
}
|
||||
|
||||
// overflow: auto;
|
||||
&-sidebar {
|
||||
.flex-parent(1, 0, auto);
|
||||
|
||||
// overrided for tablet and desktop
|
||||
@media (min-width: @screen-md-min) {
|
||||
flex-basis: @vis-editor-sidebar-basis;
|
||||
min-width: @vis-editor-sidebar-min-width;
|
||||
max-width: @vis-editor-sidebar-min-width;
|
||||
// margin-bottom: (@input-height-base * 2) - 3;
|
||||
}
|
||||
|
||||
nav {
|
||||
|
@ -87,8 +88,8 @@
|
|||
|
||||
.sidebar-container {
|
||||
.flex-parent(1, 1, auto);
|
||||
background-color: @body-bg;
|
||||
border-right-color: @sidebar-bg;
|
||||
background-color: @vis-editor-sidebar-bg;
|
||||
border-right-color: @vis-editor-sidebar-border;
|
||||
|
||||
form {
|
||||
.flex-parent(1, 1, auto);
|
||||
|
@ -117,14 +118,14 @@
|
|||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
border: inherit !important;
|
||||
background-color: @gray-lighter;
|
||||
background-color: @vis-editor-sidebar-title-bg;
|
||||
margin-bottom: @vis-editor-agg-editor-spacing;
|
||||
padding: 2px 5px !important;
|
||||
}
|
||||
|
||||
.sidebar-item-title:hover {
|
||||
color: @text-color !important;
|
||||
background-color: @gray-lighter !important;
|
||||
color: @vis-editor-sidebar-title-hover-color !important;
|
||||
background-color: @vis-editor-sidebar-title-hover-bg !important;
|
||||
}
|
||||
|
||||
.hintbox {
|
||||
|
@ -158,7 +159,7 @@
|
|||
|
||||
> span {
|
||||
width: @vis-editor-nesting-width;
|
||||
background-color: @brand-success;
|
||||
background-color: @vis-editor-nesting-indicator-bg;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -177,7 +178,7 @@
|
|||
|
||||
&-group {
|
||||
.flex-parent(0, 1, auto);
|
||||
color: @text-color;
|
||||
color: @vis-editor-agg-group-color;
|
||||
}
|
||||
|
||||
&-header {
|
||||
|
@ -221,8 +222,8 @@
|
|||
margin: @vis-editor-agg-editor-spacing 0;
|
||||
padding: @vis-editor-agg-editor-spacing;
|
||||
text-align: center;
|
||||
background: @btn-danger-bg;
|
||||
color: @btn-danger-color;
|
||||
background: @vis-editor-agg-error-bg;
|
||||
color: @vis-editor-agg-error-color;
|
||||
}
|
||||
|
||||
&-editor {
|
||||
|
@ -241,7 +242,7 @@
|
|||
}
|
||||
|
||||
a {
|
||||
color: @link-color;
|
||||
color: @vis-editor-agg-editor-flags-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -275,23 +276,26 @@
|
|||
|
||||
&-wide-btn {
|
||||
border-radius: 0;
|
||||
border-top: 2px solid @gray-lighter;
|
||||
border-top: 2px solid;
|
||||
border-top-color: @vis-editor-agg-wide-btn-border;
|
||||
|
||||
&-add {
|
||||
width: 140px;
|
||||
margin: -2px auto 5px auto;
|
||||
text-align: center;
|
||||
border: 2px solid @gray-lighter;
|
||||
border: 2px solid;
|
||||
border-color: @vis-editor-agg-wide-btn-border;
|
||||
border-top: 0px;
|
||||
padding: 3px;
|
||||
border-bottom-right-radius: @border-radius-base;
|
||||
border-bottom-left-radius: @border-radius-base;
|
||||
background-color: @body-bg;
|
||||
background-color: @vis-editor-agg-wide-btn-bg;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
&-add:hover {
|
||||
background-color: @gray-lighter;
|
||||
color: @vis-editor-agg-wide-btn-hover-color;
|
||||
background-color: @vis-editor-agg-wide-btn-hover-bg;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -310,8 +314,10 @@
|
|||
}
|
||||
|
||||
&-order-agg {
|
||||
border: 2px solid @gray-lighter;
|
||||
border: 2px solid;
|
||||
border-color: @vis-editor-agg-editor-order-border;
|
||||
border-radius: @border-radius-base;
|
||||
background-color: @vis-editor-agg-editor-order-bg;
|
||||
margin: @vis-editor-agg-editor-spacing;
|
||||
padding: @vis-editor-agg-editor-spacing;
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ define(function (require) {
|
|||
});
|
||||
};
|
||||
|
||||
this.find = function (searchString) {
|
||||
this.find = function (searchString, size = 100) {
|
||||
var self = this;
|
||||
var body;
|
||||
if (searchString) {
|
||||
|
@ -62,7 +62,7 @@ define(function (require) {
|
|||
index: kbnIndex,
|
||||
type: 'visualization',
|
||||
body: body,
|
||||
size: 100,
|
||||
size: size
|
||||
})
|
||||
.then(function (resp) {
|
||||
return {
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
&-description {
|
||||
flex: 1 1 auto;
|
||||
color: @brand-primary;
|
||||
color: @wizard-vis-type-description-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@
|
|||
align-self: flex-end;
|
||||
|
||||
&-tab {
|
||||
background-color: @well-bg;
|
||||
background-color: @visualize-info-bg;
|
||||
padding: 5px 10px;
|
||||
margin-left: @padding-base-horizontal;
|
||||
border-bottom-left-radius: @border-radius-base;
|
||||
|
|
|
@ -21,6 +21,8 @@ ${pluginSlug}
|
|||
*/
|
||||
|
||||
window.__KBN__ = {
|
||||
version: '1.2.3',
|
||||
buildNum: 1234,
|
||||
vars: {
|
||||
kbnIndex: '.kibana',
|
||||
esShardTimeout: 1500,
|
||||
|
|
|
@ -87,6 +87,7 @@ module.exports = Joi.object({
|
|||
lazyHost: Joi.string().hostname().default('localhost'),
|
||||
lazyPrebuild: Joi.boolean().default(false),
|
||||
lazyProxyTimeout: Joi.number().default(5 * 60000),
|
||||
useBundleCache: Joi.boolean().default(Joi.ref('$prod')),
|
||||
unsafeCache: Joi
|
||||
.alternatives()
|
||||
.try(
|
||||
|
|
|
@ -7,5 +7,5 @@ module.exports = _.once(function (kbnServer) {
|
|||
|
||||
// redirect to the single app
|
||||
let apps = kbnServer.uiExports.apps.toArray();
|
||||
return apps.length === 1 ? `/app/${apps[0].id}` : '/apps';
|
||||
return '/app/kibana';
|
||||
});
|
||||
|
|
|
@ -40,17 +40,6 @@ module.exports = async (kbnServer, server, config) => {
|
|||
server.setupViews(resolve(__dirname, 'views'));
|
||||
server.exposeStaticFile('/loading.gif', resolve(__dirname, 'public/loading.gif'));
|
||||
|
||||
// serve the app switcher
|
||||
server.route({
|
||||
path: '/apps',
|
||||
method: 'GET',
|
||||
handler: function (req, reply) {
|
||||
let switcher = uiExports.getHiddenApp('appSwitcher');
|
||||
if (!switcher) return reply(Boom.notFound('app switcher not installed'));
|
||||
return reply.renderApp(switcher);
|
||||
}
|
||||
});
|
||||
|
||||
// serve the app switcher
|
||||
server.route({
|
||||
path: '/api/apps',
|
||||
|
@ -66,7 +55,7 @@ module.exports = async (kbnServer, server, config) => {
|
|||
handler: function (req, reply) {
|
||||
let id = req.params.id;
|
||||
let app = uiExports.apps.byId[id];
|
||||
if (!app) return reply(Boom.notFound('Unkown app ' + id));
|
||||
if (!app) return reply(Boom.notFound('Unknown app ' + id));
|
||||
|
||||
if (kbnServer.status.isGreen()) {
|
||||
return reply.renderApp(app);
|
||||
|
|
17
src/ui/public/__tests__/metadata.js
Normal file
17
src/ui/public/__tests__/metadata.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
describe('ui/metadata', () => {
|
||||
const expect = require('expect.js');
|
||||
|
||||
const metadata = require('ui/metadata');
|
||||
|
||||
it('is same data as window.__KBN__', () => {
|
||||
expect(metadata.version).to.equal(window.__KBN__.version);
|
||||
expect(metadata.vars.kbnIndex).to.equal(window.__KBN__.vars.kbnIndex);
|
||||
});
|
||||
|
||||
it('is immutable', () => {
|
||||
expect(() => metadata.foo = 'something').to.throw;
|
||||
expect(() => metadata.version = 'something').to.throw;
|
||||
expect(() => metadata.vars = {}).to.throw;
|
||||
expect(() => metadata.vars.kbnIndex = 'something').to.throw;
|
||||
});
|
||||
});
|
|
@ -15,15 +15,11 @@ kbn-agg-table-group {
|
|||
overflow: auto;
|
||||
|
||||
tr:hover td {
|
||||
background-color: lighten(@gray-lighter, 4%);
|
||||
background-color: @table-row-hover-bg;
|
||||
}
|
||||
|
||||
.cell-hover:hover {
|
||||
background-color: @gray-lighter;
|
||||
}
|
||||
|
||||
th i.fa-sort {
|
||||
color: @gray-light;
|
||||
background-color: @table-cell-hover-hover-bg;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -60,4 +60,41 @@ module.exports = function (chrome, internals) {
|
|||
return internals.brand[item];
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds a class to the application node
|
||||
* @param {string} - the class name to add
|
||||
* @return {chrome}
|
||||
*/
|
||||
chrome.addApplicationClass = function (val) {
|
||||
var classes = internals.applicationClasses || [];
|
||||
classes.push(val);
|
||||
classes = _.uniq(classes);
|
||||
|
||||
internals.applicationClasses = classes;
|
||||
return chrome;
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes a class from the application node. Note: this only
|
||||
* removes classes that were added via the addApplicationClass method
|
||||
* @param {string|[string]} - class or classes to be removed
|
||||
* @return {chrome}
|
||||
*/
|
||||
chrome.removeApplicationClass = function (val) {
|
||||
var classesToRemove = [].concat(val || []);
|
||||
var classes = internals.applicationClasses || [];
|
||||
_.pull(classes, ...classesToRemove);
|
||||
|
||||
internals.applicationClasses = classes;
|
||||
return chrome;
|
||||
};
|
||||
|
||||
/**
|
||||
* @return {string} - a space delimited string of the classes added by the
|
||||
* addApplicationClass method
|
||||
*/
|
||||
chrome.getApplicationClasses = function () {
|
||||
return internals.applicationClasses.join(' ');
|
||||
};
|
||||
|
||||
};
|
||||
|
|
|
@ -41,15 +41,17 @@
|
|||
|
||||
<li ng-if="chrome.getBrand('title')" class="navbar-brand">{{ chrome.getBrand('title') }}</li>
|
||||
|
||||
<li ng-if="chrome.getShowAppsLink()">
|
||||
<a href="/apps"><i class="fa fa-th" alt="Go to app switcher"></i></a>
|
||||
</li>
|
||||
|
||||
<li ng-repeat="tab in chrome.getTabs()" ng-class="{ active: tab.active }">
|
||||
<a ng-href="{{ tab.href() }}" ng-style="{ 'border-bottom-color': tab.activeIndicatorColor }">
|
||||
{{ tab.title }}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="to-body" ng-class="{active: appTemplate.is('switcher')}" ng-if="chrome.getShowAppsLink()">
|
||||
<a ng-click="appTemplate.toggle('switcher')">
|
||||
<i class="fa fa-th" alt="Go to app switcher"></i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul ng-show="timefilter.enabled" class="nav navbar-nav navbar-right navbar-timepicker">
|
||||
|
@ -95,6 +97,12 @@
|
|||
<!-- /Full navbar -->
|
||||
</nav>
|
||||
|
||||
<config
|
||||
config-template="appTemplate"
|
||||
config-object="switcher"
|
||||
config-close="appTemplate.close">
|
||||
</config>
|
||||
|
||||
<config
|
||||
ng-show="timefilter.enabled"
|
||||
config-template="pickerTemplate"
|
||||
|
@ -102,5 +110,5 @@
|
|||
config-close="pickerTemplate.close">
|
||||
</config>
|
||||
|
||||
<div class="application" ng-class="'tab-' + chrome.getActiveTabId('-none-')" ng-view></div>
|
||||
<div class="application" ng-class="'tab-' + chrome.getActiveTabId('-none-') + ' ' + chrome.getApplicationClasses()" ng-view></div>
|
||||
</div>
|
||||
|
|
|
@ -8,6 +8,7 @@ require('ui/timefilter');
|
|||
require('ui/private');
|
||||
require('ui/promises');
|
||||
|
||||
var metadata = require('ui/metadata');
|
||||
var TabCollection = require('ui/chrome/TabCollection');
|
||||
|
||||
var chrome = {
|
||||
|
@ -17,13 +18,14 @@ var chrome = {
|
|||
};
|
||||
|
||||
var internals = _.assign(
|
||||
_.cloneDeep(window.__KBN__ || {}),
|
||||
_.cloneDeep(metadata),
|
||||
{
|
||||
tabs: new TabCollection(),
|
||||
rootController: null,
|
||||
rootTemplate: null,
|
||||
showAppsLink: null,
|
||||
brand: null
|
||||
brand: null,
|
||||
applicationClasses: []
|
||||
}
|
||||
);
|
||||
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
define(function (require) {
|
||||
require('plugins/appSwitcher/appSwitcher.less');
|
||||
|
||||
var _ = require('lodash');
|
||||
var ConfigTemplate = require('ui/ConfigTemplate');
|
||||
|
||||
require('ui/modules')
|
||||
.get('kibana')
|
||||
.directive('chromeContext', function (timefilter, globalState) {
|
||||
.directive('chromeContext', function (timefilter, globalState, $http) {
|
||||
|
||||
var listenForUpdates = _.once(function ($scope) {
|
||||
$scope.$listen(timefilter, 'update', function (newVal, oldVal) {
|
||||
|
@ -25,6 +27,17 @@ define(function (require) {
|
|||
interval: require('ui/chrome/config/interval.html')
|
||||
});
|
||||
|
||||
|
||||
$scope.switcher = {loading: true};
|
||||
$http.get('/api/apps')
|
||||
.then(function (resp) {
|
||||
$scope.switcher.loading = false;
|
||||
$scope.switcher.apps = resp.data;
|
||||
});
|
||||
$scope.appTemplate = new ConfigTemplate({
|
||||
switcher: require('plugins/appSwitcher/appSwitcher.html')
|
||||
});
|
||||
|
||||
$scope.toggleRefresh = function () {
|
||||
timefilter.refreshInterval.pause = !timefilter.refreshInterval.pause;
|
||||
};
|
||||
|
|
|
@ -1,20 +1,34 @@
|
|||
.sidebar-container.collapsible-sidebar {
|
||||
@import (reference) "~ui/styles/variables";
|
||||
|
||||
.collapsible-sidebar {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
|
||||
.sidebar-collapser {
|
||||
background-color: #ecf0f1;
|
||||
background-color: @collapser-bg;
|
||||
height: 28px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: -20px;
|
||||
width: 20px;
|
||||
border: 1px solid #ecf0f1;
|
||||
border: 1px solid;
|
||||
border-color: @collapser-border;
|
||||
border-width: 0 1px 1px 0;
|
||||
cursor: pointer;
|
||||
z-index: -1;
|
||||
border-bottom-right-radius: 4px;
|
||||
|
||||
&:hover {
|
||||
background-color: @collapser-hover-bg;
|
||||
|
||||
.chevron-cont{
|
||||
|
||||
&:before {
|
||||
color: @collapser-hover-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.chevron-cont{
|
||||
position: absolute;
|
||||
left: 4px;
|
||||
|
@ -22,7 +36,7 @@
|
|||
|
||||
&:before {
|
||||
font-family: FontAwesome;
|
||||
color: #333;
|
||||
color: @collapser-color;
|
||||
content: "\F053";
|
||||
}
|
||||
}
|
||||
|
@ -47,7 +61,7 @@
|
|||
}
|
||||
|
||||
@media (max-width: 992px) {
|
||||
.sidebar-container.collapsible-sidebar {
|
||||
.collapsible-sidebar {
|
||||
&.closed {
|
||||
display: none;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,9 @@ define(function () {
|
|||
// wraped in provider so that a new instance is given to each app/test
|
||||
|
||||
return {
|
||||
'buildNum': {
|
||||
readonly: true
|
||||
},
|
||||
'query:queryString:options': {
|
||||
value: '{ "analyze_wildcard": true }',
|
||||
description: 'Options for the lucene query string parser',
|
||||
|
@ -89,6 +92,13 @@ define(function () {
|
|||
type: 'json',
|
||||
description: 'Default properties for the WMS map server support in the tile map'
|
||||
},
|
||||
'visualization:colorMapping': {
|
||||
type: 'json',
|
||||
value: JSON.stringify({
|
||||
'Count': '#57c17b'
|
||||
}),
|
||||
description: 'Maps values to specified colors within visualizations'
|
||||
},
|
||||
'csv:separator': {
|
||||
value: ',',
|
||||
description: 'Separate exported values with this string',
|
||||
|
@ -163,6 +173,10 @@ define(function () {
|
|||
' "value": 0',
|
||||
'}'
|
||||
].join('\n')
|
||||
},
|
||||
'dashboard:defaultDarkTheme': {
|
||||
value: false,
|
||||
description: 'New dashboards use dark theme by default',
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
|
@ -21,10 +21,10 @@ define(function (require) {
|
|||
var storedVersion = this.source._getStoredVersion();
|
||||
|
||||
// conditions that equal "fetch This DOC!"
|
||||
var unkown = !version && !storedVersion;
|
||||
var unknown = !version && !storedVersion;
|
||||
var mismatch = version !== storedVersion;
|
||||
|
||||
return Boolean(mismatch || (unkown && !this.started));
|
||||
return Boolean(mismatch || (unknown && !this.started));
|
||||
};
|
||||
|
||||
DocRequest.prototype.handleResponse = function (resp) {
|
||||
|
|
|
@ -138,7 +138,7 @@ define(function (require) {
|
|||
case 'desc':
|
||||
return (this._direction = dir);
|
||||
default:
|
||||
throw new TypeError('unkown sort direction "' + dir + '"');
|
||||
throw new TypeError('unknown sort direction "' + dir + '"');
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
|
||||
filter-bar .confirm {
|
||||
padding: 8px 10px 4px;
|
||||
background: @gray-lighter;
|
||||
border-bottom: 1px solid #ccc;
|
||||
background: @filter-bar-confirm-bg;
|
||||
border-bottom: 1px solid;
|
||||
border-bottom-color: @filter-bar-confirm-border;
|
||||
|
||||
ul {
|
||||
margin-bottom: 0px;
|
||||
|
@ -30,8 +31,8 @@ filter-bar .confirm {
|
|||
min-width: 110px;
|
||||
|
||||
font-size: @font-size-small;
|
||||
background-color: @gray-light;
|
||||
color: #333;
|
||||
background-color: @filter-bar-confirm-filter-bg;
|
||||
color: @filter-bar-confirm-filter-color;
|
||||
margin-right: 4px;
|
||||
margin-bottom: 4px;
|
||||
max-width: 100%;
|
||||
|
@ -44,13 +45,14 @@ filter-bar .confirm {
|
|||
|
||||
filter-bar .bar {
|
||||
padding: 6px 6px 4px 6px;
|
||||
background: @gray-lighter;
|
||||
border-bottom: 1px solid #ccc;
|
||||
background: @filter-bar-bar-bg;
|
||||
border-bottom: 1px solid;
|
||||
border-bottom-color: @filter-bar-bar-border;
|
||||
|
||||
&-condensed {
|
||||
padding: 2px 6px 0px 6px !important;
|
||||
font-size: 0.9em;
|
||||
background: darken(@gray-lighter, 5%);
|
||||
background: @filter-bar-bar-condensed-bg;
|
||||
}
|
||||
|
||||
.filter-link {
|
||||
|
@ -73,8 +75,8 @@ filter-bar .bar {
|
|||
min-width: 110px;
|
||||
|
||||
font-size: @font-size-small;
|
||||
background-color: @action-add;
|
||||
color: #fff;
|
||||
background-color: @filter-bar-bar-filter-bg;
|
||||
color: @filter-bar-bar-filter-color;
|
||||
margin-right: 4px;
|
||||
margin-bottom: 4px;
|
||||
max-width: 100%;
|
||||
|
@ -126,11 +128,11 @@ filter-bar .bar {
|
|||
}
|
||||
|
||||
&.negate {
|
||||
background-color: @action-remove;
|
||||
background-color: @filter-bar-bar-filter-negate-bg;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #FFF;
|
||||
color: @filter-bar-bar-filter-color;
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
|
|
51
src/ui/public/filter_bar/lib/__tests__/mapMatchAll.js
Normal file
51
src/ui/public/filter_bar/lib/__tests__/mapMatchAll.js
Normal file
|
@ -0,0 +1,51 @@
|
|||
|
||||
describe('ui/filter_bar/lib', function () {
|
||||
describe('mapMatchAll()', function () {
|
||||
const expect = require('expect.js');
|
||||
const ngMock = require('ngMock');
|
||||
let $rootScope;
|
||||
let mapMatchAll;
|
||||
let filter;
|
||||
|
||||
|
||||
beforeEach(ngMock.module('kibana'));
|
||||
beforeEach(ngMock.inject(function (Private, _$rootScope_) {
|
||||
$rootScope = _$rootScope_;
|
||||
mapMatchAll = Private(require('ui/filter_bar/lib/mapMatchAll'));
|
||||
filter = {
|
||||
match_all: {},
|
||||
meta: {
|
||||
field: 'foo',
|
||||
formattedValue: 'bar'
|
||||
}
|
||||
};
|
||||
}));
|
||||
|
||||
describe('when given a filter that is not match_all', function () {
|
||||
it('filter is rejected', function (done) {
|
||||
delete filter.match_all;
|
||||
mapMatchAll(filter).catch(result => {
|
||||
expect(result).to.be(filter);
|
||||
done();
|
||||
});
|
||||
$rootScope.$apply();
|
||||
});
|
||||
});
|
||||
|
||||
describe('when given a match_all filter', function () {
|
||||
let result;
|
||||
beforeEach(function () {
|
||||
mapMatchAll(filter).then(r => result = r);
|
||||
$rootScope.$apply();
|
||||
});
|
||||
|
||||
it('key is set to meta field', function () {
|
||||
expect(result).to.have.property('key', filter.meta.field);
|
||||
});
|
||||
|
||||
it('value is set to meta formattedValue', function () {
|
||||
expect(result).to.have.property('value', filter.meta.formattedValue);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
|
@ -21,6 +21,7 @@ define(function (require) {
|
|||
// that either handles the mapping operation or not
|
||||
// and add it here. ProTip: These are executed in order listed
|
||||
var mappers = [
|
||||
Private(require('./mapMatchAll')),
|
||||
Private(require('./mapTerms')),
|
||||
Private(require('./mapRange')),
|
||||
Private(require('./mapExists')),
|
||||
|
|
12
src/ui/public/filter_bar/lib/mapMatchAll.js
Normal file
12
src/ui/public/filter_bar/lib/mapMatchAll.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
define(function (require) {
|
||||
return function mapMatchAllProvider(Promise) {
|
||||
return function (filter) {
|
||||
if (filter.match_all) {
|
||||
const key = filter.meta.field;
|
||||
const value = filter.meta.formattedValue || 'all';
|
||||
return Promise.resolve({ key, value });
|
||||
}
|
||||
return Promise.reject(filter);
|
||||
};
|
||||
};
|
||||
});
|
|
@ -63,5 +63,53 @@ describe('Filter Manager', function () {
|
|||
|
||||
});
|
||||
});
|
||||
|
||||
describe('when given params where one side is infinite', function () {
|
||||
let filter;
|
||||
beforeEach(function () {
|
||||
filter = fn(indexPattern.fields.byName['script number'], { gte: 0, lt: Infinity }, indexPattern);
|
||||
});
|
||||
|
||||
describe('returned filter', function () {
|
||||
it('is a script filter', function () {
|
||||
expect(filter).to.have.property('script');
|
||||
});
|
||||
|
||||
it('contain a param for the finite side', function () {
|
||||
expect(filter.script.params).to.have.property('gte', 0);
|
||||
});
|
||||
|
||||
it('does not contain a param for the infinite side', function () {
|
||||
expect(filter.script.params).not.to.have.property('lt');
|
||||
});
|
||||
|
||||
it('does not contain a script condition for the infinite side', function () {
|
||||
const script = indexPattern.fields.byName['script number'].script;
|
||||
expect(filter.script.script).to.equal(`(${script})>=gte`);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('when given params where both sides are infinite', function () {
|
||||
let filter;
|
||||
beforeEach(function () {
|
||||
filter = fn(indexPattern.fields.byName['script number'], { gte: -Infinity, lt: Infinity }, indexPattern);
|
||||
});
|
||||
|
||||
describe('returned filter', function () {
|
||||
it('is a match_all filter', function () {
|
||||
expect(filter).not.to.have.property('script');
|
||||
expect(filter).to.have.property('match_all');
|
||||
});
|
||||
|
||||
it('does not contain params', function () {
|
||||
expect(filter).not.to.have.property('params');
|
||||
});
|
||||
|
||||
it('meta field is set to field name', function () {
|
||||
expect(filter.meta.field).to.equal('script number');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
|
@ -1,27 +1,44 @@
|
|||
define(function (require) {
|
||||
var _ = require('lodash');
|
||||
const _ = require('lodash');
|
||||
const OPERANDS_IN_RANGE = 2;
|
||||
|
||||
return function buildRangeFilter(field, params, indexPattern, formattedValue) {
|
||||
var filter = { meta: { index: indexPattern.id } };
|
||||
const filter = { meta: { index: indexPattern.id } };
|
||||
if (formattedValue) filter.meta.formattedValue = formattedValue;
|
||||
|
||||
params = _.clone(params);
|
||||
|
||||
if (params.gte && params.gt) throw new Error('gte and gt are mutually exclusive');
|
||||
if (params.lte && params.lt) throw new Error('lte and lt are mutually exclusive');
|
||||
if ('gte' in params && 'gt' in params) throw new Error('gte and gt are mutually exclusive');
|
||||
if ('lte' in params && 'lt' in params) throw new Error('lte and lt are mutually exclusive');
|
||||
|
||||
if (field.scripted) {
|
||||
var operators = {
|
||||
const totalInfinite = ['gt', 'lt'].reduce((totalInfinite, op) => {
|
||||
const key = op in params ? op : `${op}e`;
|
||||
const isInfinite = Math.abs(params[key]) === Infinity;
|
||||
|
||||
if (isInfinite) {
|
||||
totalInfinite++;
|
||||
delete params[key];
|
||||
}
|
||||
|
||||
return totalInfinite;
|
||||
}, 0);
|
||||
|
||||
if (totalInfinite === OPERANDS_IN_RANGE) {
|
||||
filter.match_all = {};
|
||||
filter.meta.field = field.name;
|
||||
} else if (field.scripted) {
|
||||
const operators = {
|
||||
gt: '>',
|
||||
gte: '>=',
|
||||
lte: '<=',
|
||||
lt: '<',
|
||||
};
|
||||
|
||||
var script = _.map(params, function (val, key) {
|
||||
const script = _.map(params, function (val, key) {
|
||||
return '(' + field.script + ')' + operators[key] + key;
|
||||
}).join(' && ');
|
||||
|
||||
var value = _.map(params, function (val, key) {
|
||||
const value = _.map(params, function (val, key) {
|
||||
return operators[key] + field.format.convert(val);
|
||||
}).join(' ');
|
||||
|
||||
|
@ -32,6 +49,7 @@ define(function (require) {
|
|||
filter.range = {};
|
||||
filter.range[field.name] = params;
|
||||
}
|
||||
|
||||
return filter;
|
||||
};
|
||||
});
|
||||
|
|
|
@ -19,11 +19,11 @@ define(function (require) {
|
|||
spec.type = '_source';
|
||||
}
|
||||
|
||||
// find the type for this field, fallback to unkown type
|
||||
// find the type for this field, fallback to unknown type
|
||||
var type = fieldTypes.byName[spec.type];
|
||||
if (spec.type && !type) {
|
||||
notify.error(
|
||||
'Unkown field type "' + spec.type + '"' +
|
||||
'Unknown field type "' + spec.type + '"' +
|
||||
' for field "' + spec.name + '"' +
|
||||
' in indexPattern "' + indexPattern.id + '"'
|
||||
);
|
||||
|
|
24
src/ui/public/metadata.js
Normal file
24
src/ui/public/metadata.js
Normal file
|
@ -0,0 +1,24 @@
|
|||
// singleton for immutable copy of window.__KBN__
|
||||
define(function (require) {
|
||||
const _ = require('lodash');
|
||||
|
||||
if (!_.has(window, '__KBN__')) {
|
||||
throw new Error('window.__KBN__ must be set for metadata');
|
||||
}
|
||||
|
||||
const kbn = _.cloneDeep(window.__KBN__ || {});
|
||||
return deepFreeze(kbn);
|
||||
|
||||
function deepFreeze(object) {
|
||||
// for any properties that reference an object, makes sure that object is
|
||||
// recursively frozen as well
|
||||
Object.keys(object).forEach(key => {
|
||||
const value = object[key];
|
||||
if (_.isObject(value)) {
|
||||
deepFreeze(value);
|
||||
}
|
||||
});
|
||||
|
||||
return Object.freeze(object);
|
||||
}
|
||||
});
|
|
@ -3,9 +3,13 @@ define(function (require) {
|
|||
var _ = require('lodash');
|
||||
var $ = require('jquery');
|
||||
|
||||
var metadata = require('ui/metadata');
|
||||
|
||||
var notifs = [];
|
||||
var setTO = setTimeout;
|
||||
var clearTO = clearTimeout;
|
||||
var version = metadata.version;
|
||||
var buildNum = metadata.buildNum;
|
||||
var consoleGroups = ('group' in window.console) && ('groupCollapsed' in window.console) && ('groupEnd' in window.console);
|
||||
|
||||
var fatalSplashScreen = require('ui/notify/partials/fatal_splash_screen.html');
|
||||
|
@ -40,6 +44,9 @@ define(function (require) {
|
|||
}
|
||||
|
||||
function add(notif, cb) {
|
||||
_.set(notif, 'info.version', version);
|
||||
_.set(notif, 'info.buildNum', buildNum);
|
||||
|
||||
if (notif.lifetime !== Infinity) {
|
||||
notif.timerId = setTO(function () {
|
||||
closeNotif(cb, 'ignore').call(notif);
|
||||
|
@ -85,6 +92,20 @@ define(function (require) {
|
|||
return rtn;
|
||||
}
|
||||
|
||||
function formatInfo() {
|
||||
var info = [];
|
||||
|
||||
if (!_.isUndefined(version)) {
|
||||
info.push(`Version: ${version}`);
|
||||
}
|
||||
|
||||
if (!_.isUndefined(buildNum)) {
|
||||
info.push(`Build: ${buildNum}`);
|
||||
}
|
||||
|
||||
return info.join('\n');
|
||||
}
|
||||
|
||||
// browsers format Error.stack differently; always include message
|
||||
function formatStack(err) {
|
||||
if (err.stack && !~err.stack.indexOf(err.message)) {
|
||||
|
@ -192,6 +213,7 @@ define(function (require) {
|
|||
}
|
||||
|
||||
var html = fatalToastTemplate({
|
||||
info: formatInfo(),
|
||||
msg: formatMsg(err, this.from),
|
||||
stack: formatStack(err)
|
||||
});
|
||||
|
|
164
src/ui/public/notify/__tests__/Notifier.js
Normal file
164
src/ui/public/notify/__tests__/Notifier.js
Normal file
|
@ -0,0 +1,164 @@
|
|||
describe('Notifier', function () {
|
||||
var _ = require('lodash');
|
||||
var ngMock = require('ngMock');
|
||||
var expect = require('expect.js');
|
||||
var Notifier = require('ui/notify/Notifier');
|
||||
|
||||
var message = 'Oh, the humanity!';
|
||||
var notifier;
|
||||
var params;
|
||||
var version = window.__KBN__.version;
|
||||
var buildNum = window.__KBN__.buildNum;
|
||||
|
||||
beforeEach(ngMock.module('kibana'));
|
||||
|
||||
beforeEach(function () {
|
||||
params = { location: 'foo' };
|
||||
while (Notifier.prototype._notifs.pop()); // clear global notifications
|
||||
notifier = new Notifier(params);
|
||||
});
|
||||
|
||||
describe('#constructor()', function () {
|
||||
it('sets #from from given location', function () {
|
||||
expect(notifier.from).to.equal(params.location);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#error', function () {
|
||||
testVersionInfo('error');
|
||||
|
||||
it('prepends location to message for content', function () {
|
||||
expect(notify('error').content).to.equal(params.location + ': ' + message);
|
||||
});
|
||||
|
||||
it('sets type to "danger"', function () {
|
||||
expect(notify('error').type).to.equal('danger');
|
||||
});
|
||||
|
||||
it('sets icon to "warning"', function () {
|
||||
expect(notify('error').icon).to.equal('warning');
|
||||
});
|
||||
|
||||
it('sets title to "Error"', function () {
|
||||
expect(notify('error').title).to.equal('Error');
|
||||
});
|
||||
|
||||
it('sets lifetime to Infinity', function () {
|
||||
expect(notify('error').lifetime).to.equal(Infinity);
|
||||
});
|
||||
|
||||
it('allows reporting', function () {
|
||||
var includesReport = _.includes(notify('error').actions, 'report');
|
||||
expect(includesReport).to.true;
|
||||
});
|
||||
|
||||
it('allows accepting', function () {
|
||||
var includesAccept = _.includes(notify('error').actions, 'accept');
|
||||
expect(includesAccept).to.true;
|
||||
});
|
||||
|
||||
it('includes stack', function () {
|
||||
expect(notify('error').stack).to.be.defined;
|
||||
});
|
||||
});
|
||||
|
||||
describe('#warning', function () {
|
||||
testVersionInfo('warning');
|
||||
|
||||
it('prepends location to message for content', function () {
|
||||
expect(notify('warning').content).to.equal(params.location + ': ' + message);
|
||||
});
|
||||
|
||||
it('sets type to "warning"', function () {
|
||||
expect(notify('warning').type).to.equal('warning');
|
||||
});
|
||||
|
||||
it('sets icon to "warning"', function () {
|
||||
expect(notify('warning').icon).to.equal('warning');
|
||||
});
|
||||
|
||||
it('sets title to "Warning"', function () {
|
||||
expect(notify('warning').title).to.equal('Warning');
|
||||
});
|
||||
|
||||
it('sets lifetime to 10000', function () {
|
||||
expect(notify('warning').lifetime).to.equal(10000);
|
||||
});
|
||||
|
||||
it('does not allow reporting', function () {
|
||||
var includesReport = _.includes(notify('warning').actions, 'report');
|
||||
expect(includesReport).to.false;
|
||||
});
|
||||
|
||||
it('allows accepting', function () {
|
||||
var includesAccept = _.includes(notify('warning').actions, 'accept');
|
||||
expect(includesAccept).to.true;
|
||||
});
|
||||
|
||||
it('does not include stack', function () {
|
||||
expect(notify('warning').stack).not.to.be.defined;
|
||||
});
|
||||
});
|
||||
|
||||
describe('#info', function () {
|
||||
testVersionInfo('info');
|
||||
|
||||
it('prepends location to message for content', function () {
|
||||
expect(notify('info').content).to.equal(params.location + ': ' + message);
|
||||
});
|
||||
|
||||
it('sets type to "info"', function () {
|
||||
expect(notify('info').type).to.equal('info');
|
||||
});
|
||||
|
||||
it('sets icon to "info-circle"', function () {
|
||||
expect(notify('info').icon).to.equal('info-circle');
|
||||
});
|
||||
|
||||
it('sets title to "Debug"', function () {
|
||||
expect(notify('info').title).to.equal('Debug');
|
||||
});
|
||||
|
||||
it('sets lifetime to 5000', function () {
|
||||
expect(notify('info').lifetime).to.equal(5000);
|
||||
});
|
||||
|
||||
it('does not allow reporting', function () {
|
||||
var includesReport = _.includes(notify('info').actions, 'report');
|
||||
expect(includesReport).to.false;
|
||||
});
|
||||
|
||||
it('allows accepting', function () {
|
||||
var includesAccept = _.includes(notify('info').actions, 'accept');
|
||||
expect(includesAccept).to.true;
|
||||
});
|
||||
|
||||
it('does not include stack', function () {
|
||||
expect(notify('info').stack).not.to.be.defined;
|
||||
});
|
||||
});
|
||||
|
||||
function notify(fnName) {
|
||||
notifier[fnName](message);
|
||||
return latestNotification();
|
||||
}
|
||||
|
||||
function latestNotification() {
|
||||
return _.last(notifier._notifs);
|
||||
}
|
||||
|
||||
function testVersionInfo(fnName) {
|
||||
context('when version is configured', function () {
|
||||
it('adds version to notification', function () {
|
||||
var notification = notify(fnName);
|
||||
expect(notification.info.version).to.equal(version);
|
||||
});
|
||||
});
|
||||
context('when build number is configured', function () {
|
||||
it('adds buildNum to notification', function () {
|
||||
var notification = notify(fnName);
|
||||
expect(notification.info.buildNum).to.equal(buildNum);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
|
@ -12,6 +12,9 @@
|
|||
</h1>
|
||||
</div>
|
||||
<div class="panel-body fatal-body"><%- msg %></div>
|
||||
<% if (info) { %>
|
||||
<div class="panel-footer"><pre><%- info %></pre></div>
|
||||
<% } %>
|
||||
<% if (stack) { %>
|
||||
<div class="panel-footer"><pre><%- stack %></pre></div>
|
||||
<% } %>
|
||||
|
|
|
@ -91,7 +91,7 @@ ul.navbar-inline li {
|
|||
}
|
||||
|
||||
.application {
|
||||
.flex-parent();
|
||||
.flex-parent(@shrink: 0);
|
||||
position: relative;
|
||||
z-index: 0;
|
||||
}
|
||||
|
@ -273,6 +273,14 @@ saved-object-finder {
|
|||
}
|
||||
|
||||
.list-group-item {
|
||||
a {
|
||||
i {
|
||||
color: @saved-object-finder-icon-color !important;
|
||||
}
|
||||
|
||||
color: @saved-object-finder-link-color !important;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
.border-top-radius(0) !important;
|
||||
}
|
||||
|
@ -332,7 +340,7 @@ saved-object-finder {
|
|||
// when rendered within a config dropdown, don't use a bottom margin
|
||||
.config saved-object-finder .finder-options {
|
||||
margin-bottom: 0;
|
||||
background: @body-bg;
|
||||
background: @config-saved-object-finder-options-bg;
|
||||
}
|
||||
|
||||
//== Generic Media List
|
||||
|
@ -377,7 +385,6 @@ button[disabled] {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
input[type="radio"],
|
||||
input[type="checkbox"],
|
||||
.radio,
|
||||
|
@ -396,7 +403,7 @@ textarea {
|
|||
}
|
||||
|
||||
.field-collapse-toggle {
|
||||
color: #999;
|
||||
color: @field-collapse-toggle-color;
|
||||
margin-left: 10px !important;
|
||||
}
|
||||
|
||||
|
@ -412,14 +419,14 @@ style-compile {
|
|||
|
||||
|
||||
.cell-hover {
|
||||
background-color: white;
|
||||
background-color: @table-cell-hover-bg;
|
||||
&-show {
|
||||
// so that the cell doesn't change size on hover
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
.cell-hover:hover {
|
||||
background-color: @gray-lighter;
|
||||
background-color: @table-cell-hover-hover-bg;
|
||||
cursor: cell;
|
||||
|
||||
.cell-hover-show {
|
||||
|
@ -428,7 +435,7 @@ style-compile {
|
|||
}
|
||||
|
||||
mark, .mark {
|
||||
background-color: rgba(252, 229, 113, 1);
|
||||
background-color: @mark-bg;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
|
|
|
@ -4,11 +4,12 @@
|
|||
.navbar;
|
||||
.navbar-default();
|
||||
.navbar-static-top;
|
||||
border-bottom: 1px solid darken(@body-bg, 10%);
|
||||
border-bottom: 1px solid;
|
||||
border-bottom-color: @config-border;
|
||||
|
||||
.config-close {
|
||||
width: 100%;
|
||||
background-color: @well-bg;
|
||||
background-color: @config-close-bg;
|
||||
border-radius: 0;
|
||||
@shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);
|
||||
.box-shadow(@shadow);
|
||||
|
@ -17,6 +18,6 @@
|
|||
|
||||
.container-fluid {
|
||||
padding: 10px 10px;
|
||||
background-color: @body-bg;
|
||||
background-color: @config-bg;
|
||||
}
|
||||
}
|
||||
|
|
539
src/ui/public/styles/dark-theme.less
Normal file
539
src/ui/public/styles/dark-theme.less
Normal file
|
@ -0,0 +1,539 @@
|
|||
@import "~ui/styles/dark-variables";
|
||||
@import "~bootstrap/less/mixins.less";
|
||||
|
||||
.tab-dashboard.theme-dark {
|
||||
color: @text-color;
|
||||
background-color: @dashboard-bg;
|
||||
|
||||
// /node_modules/bootstrap/less/scaffolding.less
|
||||
a {
|
||||
color: @link-color;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: @link-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /node_modules/bootstrap/less/forms.less
|
||||
.form-control {
|
||||
color: @input-color;
|
||||
background-color: @input-bg;
|
||||
border-color: @input-border;
|
||||
&[disabled],
|
||||
&[readonly],
|
||||
fieldset[disabled] & {
|
||||
background-color: @input-bg-disabled;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /node_modules/bootstrap/less/panels.less
|
||||
.panel {
|
||||
background-color: @panel-bg;
|
||||
}
|
||||
|
||||
|
||||
// /node_modules/bootstrap/less/tables.less
|
||||
.table {
|
||||
// Cells
|
||||
> thead,
|
||||
> tbody,
|
||||
> tfoot {
|
||||
> tr {
|
||||
> th,
|
||||
> td {
|
||||
border-top-color: @table-border-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Bottom align for column headings
|
||||
> thead > tr > th {
|
||||
border-bottom-color: @table-border-color;
|
||||
}
|
||||
// Account for multiple tbody instances
|
||||
> tbody + tbody {
|
||||
border-top-color: @table-border-color;
|
||||
}
|
||||
|
||||
// Nesting
|
||||
.table {
|
||||
background-color: @table-nested-bg;
|
||||
}
|
||||
}
|
||||
|
||||
table {
|
||||
th {
|
||||
i.fa-sort {
|
||||
color: @table-sort-color;
|
||||
}
|
||||
|
||||
i.fa-sort-asc,
|
||||
i.fa-sort-down {
|
||||
color: @table-sort-asc-color;
|
||||
}
|
||||
|
||||
i.fa-sort-desc,
|
||||
i.fa-sort-up {
|
||||
color: @table-sort-desc-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /node_modules/bootstrap/less/buttons.less
|
||||
.btn {
|
||||
&:hover,
|
||||
&:focus,
|
||||
&.focus {
|
||||
color: @btn-default-color;
|
||||
}
|
||||
|
||||
.findme {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-default {
|
||||
.button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);
|
||||
}
|
||||
.btn-primary {
|
||||
.button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);
|
||||
}
|
||||
|
||||
|
||||
// /node_modules/bootstrap/less/list-group.less
|
||||
.list-group-item {
|
||||
background-color: @list-group-bg;
|
||||
border-color: @list-group-border;
|
||||
}
|
||||
|
||||
a.list-group-item,
|
||||
button.list-group-item {
|
||||
color: @list-group-link-color;
|
||||
|
||||
.list-group-item-heading {
|
||||
color: @list-group-link-heading-color;
|
||||
}
|
||||
|
||||
// Hover state
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: @list-group-link-hover-color;
|
||||
background-color: @list-group-hover-bg;
|
||||
}
|
||||
}
|
||||
.panel {
|
||||
> .panel-body + .table,
|
||||
> .panel-body + .table-responsive,
|
||||
> .table + .panel-body,
|
||||
> .table-responsive + .panel-body {
|
||||
border-top-color:@table-border-color;
|
||||
}
|
||||
}
|
||||
|
||||
.panel-group {
|
||||
.panel-heading {
|
||||
+ .panel-collapse > .panel-body,
|
||||
+ .panel-collapse > .list-group {
|
||||
border-top-color: @panel-inner-border;
|
||||
}
|
||||
}
|
||||
|
||||
.panel-footer {
|
||||
border-top: 0;
|
||||
+ .panel-collapse .panel-body {
|
||||
border-bottom-color: @panel-inner-border;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.panel-default {
|
||||
border-color: @panel-default-border;
|
||||
|
||||
& > .panel-heading {
|
||||
color: @panel-default-text;
|
||||
background-color: @panel-default-heading-bg;
|
||||
border-color: @panel-default-border;
|
||||
|
||||
+ .panel-collapse > .panel-body {
|
||||
border-top-color: @panel-default-border;
|
||||
}
|
||||
.badge {
|
||||
color: @panel-default-heading-bg;
|
||||
background-color: @panel-default-text;
|
||||
}
|
||||
}
|
||||
& > .panel-footer {
|
||||
+ .panel-collapse > .panel-body {
|
||||
border-bottom-color: @panel-default-border;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /node_modules/bootstrap/less/navs.less
|
||||
.nav {
|
||||
> li {
|
||||
> a {
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: @nav-link-hover-bg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /node_modules/bootstrap/less/navs.less
|
||||
.nav-tabs {
|
||||
border-bottom: 1px solid @nav-tabs-border-color;
|
||||
> li {
|
||||
> a {
|
||||
&:hover {
|
||||
border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;
|
||||
}
|
||||
}
|
||||
|
||||
&.active > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: @nav-tabs-active-link-hover-color;
|
||||
background-color: @nav-tabs-active-link-hover-bg;
|
||||
border-color: @nav-tabs-active-link-hover-border-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/styles/navbar.less
|
||||
navbar {
|
||||
color: @navbar-default-color;
|
||||
background-color: @navbar-default-bg;
|
||||
border-color: @navbar-default-border;
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/styles/base.less
|
||||
saved-object-finder {
|
||||
.list-group-item {
|
||||
a {
|
||||
i {
|
||||
color: @saved-object-finder-icon-color !important;
|
||||
}
|
||||
|
||||
color: @saved-object-finder-link-color !important;
|
||||
}
|
||||
}
|
||||
|
||||
.finder-options {
|
||||
> li {
|
||||
&.active {
|
||||
background-color: @component-active-bg;
|
||||
color: @component-active-color;
|
||||
a {
|
||||
color: @component-active-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.cell-hover {
|
||||
background-color: @table-cell-hover-bg;
|
||||
}
|
||||
.cell-hover:hover {
|
||||
background-color: @table-cell-hover-hover-bg;
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/styles/spinner.less
|
||||
.spinner > div {
|
||||
background-color: @spinner-bg;
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/agg_table/agg_table.less
|
||||
.agg-table {
|
||||
|
||||
&-paginated {
|
||||
tr:hover td {
|
||||
background-color: @table-row-hover-bg;
|
||||
}
|
||||
|
||||
.cell-hover:hover {
|
||||
background-color: @table-cell-hover-hover-bg;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/visualize/visualize.less
|
||||
visualize-spy {
|
||||
.visualize-show-spy {
|
||||
border-top-color: @visualize-show-spy-border;
|
||||
|
||||
&-tab {
|
||||
border-color: @visualize-show-spy-border;
|
||||
background: @visualize-show-spy-bg;
|
||||
color: @visualize-show-spy-color;
|
||||
|
||||
&:hover {
|
||||
background-color: @visualize-show-spy-hover-bg;
|
||||
color: @visualize-show-spy-hover-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/vislib/styles/_svg.less
|
||||
.axis {
|
||||
line, path {
|
||||
stroke: @svg-axis-color;
|
||||
}
|
||||
}
|
||||
|
||||
.tick text {
|
||||
fill: @svg-tick-text-color;
|
||||
}
|
||||
|
||||
.brush .extent {
|
||||
stroke: @svg-brush-color;
|
||||
}
|
||||
|
||||
.endzone {
|
||||
fill: @svg-endzone-bg;
|
||||
//opacity: 1;
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/vislib/styles/_legend.less
|
||||
.legend-col-wrapper {
|
||||
.legend-ul {
|
||||
li.color {
|
||||
color: @legend-item-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/vislib/styles/_layout.less
|
||||
.y-axis-title text, .x-axis-title text {
|
||||
fill: @vis-axis-title-color;
|
||||
}
|
||||
|
||||
.chart-title text {
|
||||
fill: @vis-chart-title-color;
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/vislib/styles/_tilemap.less
|
||||
.tilemap {
|
||||
border-color: @tilemap-border;
|
||||
}
|
||||
|
||||
.tilemap-legend {
|
||||
background: @tilemap-legend-base-bg;
|
||||
background: @tilemap-legend-bg;
|
||||
color: @tilemap-color;
|
||||
}
|
||||
|
||||
.tilemap-legend i {
|
||||
border-color: @tilemap-legend-i-border;
|
||||
background: @tilemap-legend-i-bg;
|
||||
}
|
||||
|
||||
.tilemap-info {
|
||||
background: @tilemap-info-base-bg;
|
||||
background: fade(@tilemap-info-bg, 92%);
|
||||
}
|
||||
|
||||
.tilemap-info h2 {
|
||||
color: @tilemap-info-header-color;
|
||||
}
|
||||
|
||||
.leaflet-control-fit {
|
||||
background: @tilemap-leaflet-control-bg;
|
||||
outline: 1px @tilemap-leaflet-control-outline;
|
||||
}
|
||||
|
||||
.leaflet-container {
|
||||
background: @tilemap-leaflet-container-bg !important;
|
||||
}
|
||||
|
||||
.leaflet-popup-content-wrapper {
|
||||
background: @tooltip-bg !important;
|
||||
color: @tooltip-color !important;
|
||||
}
|
||||
|
||||
.leaflet-popup-content {
|
||||
table {
|
||||
thead tr {
|
||||
border-bottom-color: @tilemap-leaflet-popup-border;
|
||||
}
|
||||
|
||||
tbody tr {
|
||||
border-top-color: @tilemap-leaflet-popup-border;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
img.leaflet-tile {
|
||||
filter: @tilemap-filter;
|
||||
}
|
||||
|
||||
.leaflet-control-attribution {
|
||||
background-color: @tilemap-leaflet-footer-bg !important;
|
||||
color: @tilemap-leaflet-footer-color !important;
|
||||
}
|
||||
|
||||
.leaflet-left {
|
||||
.leaflet-control {
|
||||
a,
|
||||
a:hover {
|
||||
color: @tilemap-leaflet-control-color;
|
||||
}
|
||||
}
|
||||
|
||||
.leaflet-draw-actions a {
|
||||
background-color: @tilemap-leaflet-control-draw-action-bg;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/filter_bar/filter_bar.less
|
||||
filter-bar .confirm {
|
||||
background: @filter-bar-confirm-bg;
|
||||
border-bottom-color: @filter-bar-confirm-border;
|
||||
|
||||
.filter {
|
||||
background-color: @filter-bar-confirm-filter-bg;
|
||||
color: @filter-bar-confirm-filter-color;
|
||||
}
|
||||
}
|
||||
|
||||
filter-bar .bar {
|
||||
background: @filter-bar-bar-bg;
|
||||
border-bottom-color: @filter-bar-bar-border;
|
||||
|
||||
&-condensed {
|
||||
background: @filter-bar-bar-condensed-bg;
|
||||
}
|
||||
|
||||
.filter {
|
||||
background-color: @filter-bar-bar-filter-bg;
|
||||
color: @filter-bar-bar-filter-color;
|
||||
|
||||
&.negate {
|
||||
background-color: @filter-bar-bar-filter-negate-bg;
|
||||
}
|
||||
|
||||
a {
|
||||
color: @filter-bar-bar-filter-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/styles/config.less
|
||||
.config {
|
||||
border-bottom-color: @config-border;
|
||||
|
||||
.config-close {
|
||||
background-color: @config-close-bg;
|
||||
}
|
||||
|
||||
.container-fluid {
|
||||
background-color: @config-bg;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/styles/list-group-menu.less
|
||||
.list-group-menu {
|
||||
&.select-mode a{
|
||||
color: @list-group-menu-item-select-color;
|
||||
}
|
||||
|
||||
.list-group-menu-item {
|
||||
color: @list-group-menu-item-color;
|
||||
|
||||
&.active {
|
||||
background-color: @list-group-menu-item-active-bg;
|
||||
}
|
||||
&:hover {
|
||||
background-color: @list-group-menu-item-hover-bg;
|
||||
}
|
||||
li {
|
||||
color: @list-group-menu-item-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/styles/input.less
|
||||
select {
|
||||
color: @input-color;
|
||||
background-color: @input-bg;
|
||||
}
|
||||
|
||||
|
||||
// /src/ui/public/styles/pagination.less
|
||||
paginate {
|
||||
paginate-controls {
|
||||
.pagination-other-pages {
|
||||
&-list {
|
||||
> li {
|
||||
&.active a {
|
||||
color: @paginate-page-link-active-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /src/plugins/kibana/public/dashboard/styles/main.less
|
||||
.start-screen {
|
||||
background-color: @dashboard-bg;
|
||||
}
|
||||
|
||||
.gridster {
|
||||
background-color: @dashboard-bg;
|
||||
|
||||
dashboard-panel {
|
||||
background: @dashboard-panel-bg;
|
||||
color: @dashboard-panel-color;
|
||||
|
||||
.panel {
|
||||
.panel-heading {
|
||||
a {
|
||||
color: @dashboard-panel-heading-link-color;
|
||||
&:hover {
|
||||
color: @dashboard-panel-heading-link-hover-color;
|
||||
}
|
||||
}
|
||||
span.panel-title {
|
||||
color: @dashboard-panel-heading-link-color;
|
||||
}
|
||||
i {
|
||||
color: @dashboard-panel-heading-link-color;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.load-error {
|
||||
.fa-exclamation-triangle {
|
||||
color: @dashboard-panel-load-error-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
170
src/ui/public/styles/dark-variables.less
Normal file
170
src/ui/public/styles/dark-variables.less
Normal file
|
@ -0,0 +1,170 @@
|
|||
@white: #ffffff;
|
||||
@black: #000000;
|
||||
|
||||
@gray2: #222222;
|
||||
@gray3: #333333;
|
||||
@gray4: #444444;
|
||||
@gray5: #555555;
|
||||
@gray6: #666666;
|
||||
@gray7: #777777;
|
||||
@gray8: #888888;
|
||||
@gray9: #999999;
|
||||
@gray10: #aaaaaa;
|
||||
@gray11: #bbbbbb;
|
||||
@gray12: #cccccc;
|
||||
@gray13: #dddddd;
|
||||
@gray14: #eeeeee;
|
||||
|
||||
@brand-primary: @gray14;
|
||||
@brand-success: #31c471;
|
||||
@brand-info: #6482e5;
|
||||
@brand-warning: #f39c12;
|
||||
@brand-danger: #e74c3c;
|
||||
|
||||
@body-bg: @gray3;
|
||||
@text-color: #cecece;
|
||||
|
||||
@link-color: #b7e2ea;
|
||||
@link-hover-color: lighten(@link-color, 10%);
|
||||
|
||||
@btn-default-color: @white;
|
||||
@btn-default-bg: @gray7;
|
||||
@btn-default-border: @btn-default-bg;
|
||||
|
||||
@btn-primary-color: @white;
|
||||
@btn-primary-bg: @gray7;
|
||||
@btn-primary-border: @btn-primary-bg;
|
||||
|
||||
@btn-success-bg: @brand-success;
|
||||
@btn-danger-bg: @brand-danger;
|
||||
|
||||
@input-bg: @gray4;
|
||||
@input-bg-disabled: @gray3;
|
||||
|
||||
@input-color: @text-color;
|
||||
@input-border: @gray6;
|
||||
|
||||
@well-bg: @gray4;
|
||||
|
||||
@action-add: desaturate(@btn-success-bg, 30%);
|
||||
@action-remove: desaturate(@btn-danger-bg, 30%);
|
||||
|
||||
|
||||
@table-border-color: #5c5c5c;
|
||||
@table-cell-hover-bg: transparent;
|
||||
@table-cell-hover-hover-bg: @gray6;
|
||||
@table-row-hover-bg: lighten(@gray6, 4%);
|
||||
@table-nested-bg: transparent;
|
||||
|
||||
@table-sort-color: @gray6;
|
||||
@table-sort-asc-color: @gray11;
|
||||
@table-sort-desc-color: @gray11;
|
||||
|
||||
|
||||
@nav-link-hover-bg: @gray6;
|
||||
@nav-tabs-active-link-hover-bg: @gray3;
|
||||
|
||||
@nav-tabs-border-color: @gray6;
|
||||
@nav-tabs-link-hover-border-color: @gray7;
|
||||
@nav-tabs-active-link-hover-border-color: @gray7;
|
||||
|
||||
@nav-tabs-active-link-hover-color: @brand-primary;
|
||||
|
||||
@paginate-page-link-active-color: @gray9;
|
||||
|
||||
|
||||
@dashboard-bg: #1e1b1e;
|
||||
@panel-bg: #343434;
|
||||
@panel-inner-border: @gray13;
|
||||
|
||||
@panel-default-text: @brand-primary;
|
||||
@panel-default-border: #5c5c5c;
|
||||
@panel-default-heading-bg: darken(@panel-bg, 5%);
|
||||
|
||||
@dashboard-panel-bg: @panel-bg;
|
||||
@dashboard-panel-color: @text-color;
|
||||
@dashboard-panel-heading-link-color: #a6a6a6;
|
||||
@dashboard-panel-heading-link-hover-color: #a6a6a6;
|
||||
@dashboard-panel-load-error-color: @btn-danger-bg;
|
||||
|
||||
@collapser-bg: @panel-bg;
|
||||
@collapser-border: #5c5c5c;
|
||||
@collapser-color: @gray8;
|
||||
@collapser-hover-bg: @gray6;
|
||||
@collapser-hover-color: @gray3;
|
||||
|
||||
@visualize-show-spy-border: @collapser-border;
|
||||
@visualize-show-spy-bg: @collapser-bg;
|
||||
@visualize-show-spy-color: @collapser-color;
|
||||
@visualize-show-spy-hover-bg: @collapser-hover-bg;
|
||||
@visualize-show-spy-hover-color: @collapser-hover-color;
|
||||
|
||||
@svg-axis-color: @gray8;
|
||||
@svg-tick-text-color: @gray10;
|
||||
@svg-brush-color: @white;
|
||||
@svg-endzone-bg: @white;
|
||||
@vis-axis-title-color: @gray10;
|
||||
@vis-chart-title-color: @gray10;
|
||||
|
||||
@tilemap-border: @gray13;
|
||||
@tilemap-legend-base-bg: @gray3;
|
||||
@tilemap-legend-bg: fade(@tilemap-legend-base-bg, 100%);
|
||||
@tilemap-color: @gray12;
|
||||
@tilemap-legend-i-border: @gray9;
|
||||
@tilemap-legend-i-bg: @gray10;
|
||||
@tilemap-info-base-bg: @white;
|
||||
@tilemap-info-bg: fade(@tilemap-info-base-bg, 92%);
|
||||
@tilemap-info-header-color: @gray4;
|
||||
@tilemap-leaflet-control-bg: @white;
|
||||
@tilemap-leaflet-control-outline: @black;
|
||||
@tilemap-leaflet-control-color: @black;
|
||||
@tilemap-leaflet-control-draw-action-bg: @gray11;
|
||||
@tilemap-leaflet-container-bg: @body-bg;
|
||||
@tilemap-leaflet-popup-border: @gray9;
|
||||
@tilemap-leaflet-footer-bg: fade(@gray3, 80%);
|
||||
@tilemap-leaflet-footer-color: @gray12;
|
||||
@tilemap-filter: invert(1) brightness(1.75) grayscale(1) contrast(1);
|
||||
|
||||
@tooltip-bg: fadeout(@gray4, 7%);
|
||||
@tooltip-color: @gray14;
|
||||
|
||||
@filter-bar-confirm-bg: @gray3;
|
||||
@filter-bar-confirm-filter-color: @gray3;
|
||||
@filter-bar-confirm-border: @black;
|
||||
@filter-bar-confirm-filter-bg: @gray12;
|
||||
@filter-bar-bar-bg: @gray3;
|
||||
@filter-bar-bar-border: @black;
|
||||
@filter-bar-bar-condensed-bg: darken(@filter-bar-bar-bg, 5%);
|
||||
@filter-bar-bar-filter-bg: @action-add;
|
||||
@filter-bar-bar-filter-color: @white;
|
||||
@filter-bar-bar-filter-negate-bg: @action-remove;
|
||||
|
||||
@legend-item-color: @gray10;
|
||||
|
||||
@config-border: @gray4;
|
||||
@config-bg: @body-bg;
|
||||
@config-close-bg: @well-bg;
|
||||
@config-saved-object-finder-options-bg: @body-bg;
|
||||
|
||||
@saved-object-finder-link-color: @text-color;
|
||||
@saved-object-finder-icon-color: darken(@saved-object-finder-link-color, 10%);
|
||||
|
||||
@list-group-bg: @gray3;
|
||||
@list-group-border: @gray7;
|
||||
@list-group-hover-bg: @gray14;
|
||||
@list-group-link-color: @gray5;
|
||||
@list-group-link-hover-color: @list-group-link-color;
|
||||
@list-group-link-heading-color: @gray3;
|
||||
@list-group-menu-item-color: @text-color;
|
||||
@list-group-menu-item-select-color: @link-color;
|
||||
@list-group-menu-item-active-bg: @well-bg;
|
||||
@list-group-menu-item-hover-bg: @well-bg;
|
||||
|
||||
@component-active-color: @gray5;
|
||||
@component-active-bg: @gray9;
|
||||
|
||||
@navbar-default-color: @white;
|
||||
@navbar-default-bg: @gray3;
|
||||
@navbar-default-border: darken(@navbar-default-bg, 10%);
|
||||
|
||||
@spinner-bg: @white;
|
|
@ -1,10 +1,5 @@
|
|||
@import "~ui/styles/variables";
|
||||
|
||||
@hintbox-background-color: @gray-lighter;
|
||||
@hintbox-spacing-vertical: 10px;
|
||||
@hintbox-spacing-horizontal: 12px;
|
||||
@hintbox-table-border-color: #BFC9CA;
|
||||
|
||||
.hintbox {
|
||||
padding: @hintbox-spacing-vertical @hintbox-spacing-horizontal;
|
||||
border-radius: 5px;
|
||||
|
@ -12,15 +7,15 @@
|
|||
background-color: @hintbox-background-color;
|
||||
|
||||
a {
|
||||
color: @link-color !important;
|
||||
color: @hintbox-link-color !important;
|
||||
|
||||
&:hover {
|
||||
color: @text-color !important;
|
||||
color: @hintbox-link-hover-color !important;
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
background-color: white;
|
||||
background-color: @hintbox-pre-bg;
|
||||
}
|
||||
|
||||
&-label,
|
||||
|
|
|
@ -3,7 +3,12 @@
|
|||
i.input-error {
|
||||
position: absolute;
|
||||
margin-left: -25px;
|
||||
color: @brand-danger;
|
||||
color: @input-error-color;
|
||||
margin-top: 10px;
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
select {
|
||||
color: @input-color;
|
||||
background-color: @input-bg;
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue