Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Khalah Jones-Golden 2015-03-10 14:17:29 -07:00
commit 5676eaf351
52 changed files with 249 additions and 154 deletions

4
FAQ.md
View file

@ -11,3 +11,7 @@
**Q:** What happened to templated/scripted dashboards?
**A:** Check out the URL. The state of each app is stored there, including any filters, queries or columns. This should be a lot easier than constructing scripted dashboards. The encoding of the URL is RISON.
**Q:** I'm getting `bin/node/bin/node: not found` but I can see the node binary in the package?
**A:** Kibana 4 packages are architecture specific. Ensure you are using the correct package for your architecture.

View file

@ -7,10 +7,10 @@
<div class="agg-table-controls">
<small>Export:</small>&nbsp;&nbsp;
<a class="small" ng-click="aggTable.exportAsCsv(false)">
Raw <i class="fa fa-download"></i>
Raw <i aria-hidden="true" class="fa fa-download"></i>
</a>&nbsp;&nbsp;&nbsp;
<a class="small" ng-click="aggTable.exportAsCsv(true)">
Formatted <i class="fa fa-download"></i>
Formatted <i aria-hidden="true" class="fa fa-download"></i>
</a>
<paginate-controls></paginate-controls>
</div>

View file

@ -22,6 +22,7 @@
name="field"
required
ng-model="agg.params.field"
auto-select-if-only-one="indexedFields"
ng-options="field as field.displayName group by field.type for field in indexedFields"
ng-change="aggParam.onChange(agg)">
</select>

View file

@ -15,14 +15,16 @@
ng-model="range.from"
type="number"
class="form-control"
name="range.from" />
name="range.from"
step="any" />
</td>
<td>
<input
ng-model="range.to"
type="number"
class="form-control"
name="range.to" />
name="range.to"
step="any" />
</td>
<td>
<button

View file

@ -6,10 +6,12 @@ define(function (require) {
var module = require('modules').get('app/discover');
require('components/highlight/highlight');
require('components/highlight/highlight_tags');
require('components/doc_viewer/doc_viewer');
require('filters/trust_as_html');
require('filters/short_dots');
// guestimate at the minimum number of chars wide cells in the table should be
var MIN_LINE_LENGTH = 20;
@ -21,7 +23,7 @@ define(function (require) {
* <tr ng-repeat="row in rows" kbn-table-row="row"></tr>
* ```
*/
module.directive('kbnTableRow', function ($compile, config, highlightFilter, shortDotsFilter, courier) {
module.directive('kbnTableRow', function ($compile, config, highlightFilter, highlightTags, shortDotsFilter, courier) {
var openRowHtml = require('text!components/doc_table/components/table_row/open.html');
var detailsHtml = require('text!components/doc_table/components/table_row/details.html');
var cellTemplate = _.template(require('text!components/doc_table/components/table_row/cell.html'));
@ -104,14 +106,17 @@ define(function (require) {
$scope.columns.forEach(function (column) {
var formatted;
var sources = _.extend({}, row.$$_formatted, row.highlight);
if (column === '_source') {
formatted = sourceTemplate({
source: _.mapValues(row.$$_formatted, function (val, field) {
var sourceConfig = {
source: _.mapValues(sources, function (val, field) {
return _displayField(row, field, false);
}),
highlight: row.highlight,
shortDotsFilter: shortDotsFilter
});
};
formatted = sourceTemplate(sourceConfig);
} else {
formatted = _displayField(row, column, true);
}
@ -187,6 +192,16 @@ define(function (require) {
function _getValForField(row, field) {
var val;
if (row.highlight && row.highlight[field]) {
// Strip out the highlight tags so we have the "original" value
var untagged = _.map(row.highlight[field], function (value) {
return value
.split(highlightTags.pre).join('')
.split(highlightTags.post).join('');
});
return _formatField(untagged, field);
}
// discover formats all of the values and puts them in $$_formatted for display
val = (row.$$_formatted || _formatRow(row))[field];

View file

@ -25,7 +25,11 @@
</td>
<td>
<i bo-if="!mapping[field] && !showArrayInObjectsWarning(doc, field)"
<i bo-if="!mapping[field] && field[0] === '_'"
tooltip-placement="top"
tooltip="Field names beginning with _ are not supported"
class="fa fa-warning text-color-warning ng-scope doc-viewer-underscore"></i>
<i bo-if="!mapping[field] && field[0] !== '_' && !showArrayInObjectsWarning(doc, field)"
tooltip-placement="top"
tooltip="No cached mapping for this field. Refresh your mapping from the Settings > Indices page"
class="fa fa-warning text-color-warning ng-scope doc-viewer-no-mapping"></i>
@ -43,4 +47,4 @@
<pre ng-show="mode == 'json'">{{hit | json}}</pre>
</div>
</div>
</div>

View file

@ -22,7 +22,7 @@
'fa-sort': paginatedTable.sort.columnIndex !== $index || paginatedTable.sort.direction === null
}">
</i>
<i ng-if="col.filterable" class="fa fa-search" ng-click="$event.stopPropagation()" tooltip="Click on a cell to filter"></i>
<i aria-label="Click on a cell to filter" ng-if="col.filterable" class="fa fa-search" ng-click="$event.stopPropagation()" tooltip="Click on a cell to filter"></i>
</th>
</tr>
</thead>

View file

@ -64,7 +64,7 @@
</div>
<div ng-switch-when="relative">
<form ng-submit="applyRelative()" class="form-inline" name="relativeTime">
<form role="form" ng-submit="applyRelative()" class="form-inline" name="relativeTime">
<div class="kbn-timepicker-section">
<label>
From:
@ -91,12 +91,14 @@
</div>
<br>
<div class="small">
<input
ng-model="relative.round"
ng-checked="relative.round"
ng-change="formatRelative()"
type="checkbox">
round to the {{units[relative.unit]}}
<label>
<input
ng-model="relative.round"
ng-checked="relative.round"
ng-change="formatRelative()"
type="checkbox">
round to the {{units[relative.unit]}}
</label>
</div>
</div>

View file

@ -12,6 +12,7 @@
// margin: 10px 0 0 6px;
min-height: 0;
min-width: 0;
overflow: hidden;
}
/* YAxis logic */

View file

@ -2,7 +2,7 @@
class="text-center visualize-error visualize-chart">
<div class="item top"></div>
<div class="item">
<h2><i class="fa fa-meh-o"></i></h2>
<h2 aria-hidden="true"><i aria-hidden="true" class="fa fa-meh-o"></i></h2>
<h4>No results found</h4>
</div>
<div class="item bottom"></div>

View file

@ -1,12 +1,13 @@
define(function (require) {
var module = require('modules').get('kibana');
module.directive('autoSelectIfOnlyOne', function () {
module.directive('autoSelectIfOnlyOne', function ($parse) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attributes, ngModelCtrl) {
scope.$watch(attributes.autoSelectIfOnlyOne, function (options) {
attributes.$observe('autoSelectIfOnlyOne', function (result) {
var options = $parse(result)(scope);
if (options && options.length === 1) {
ngModelCtrl.$setViewValue(options[0]);
ngModelCtrl.$render();

View file

@ -3,7 +3,7 @@
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width">
<link rel="shortcut icon" href="styles/theme/elk.ico">
<title>Kibana 4</title>
@ -15,7 +15,7 @@
<div class="row">
<div class="col-md-offset-4 col-md-4 page-header initial-load">
<center>
<img width="128" src="images/initial_load.gif">
<img width="128" alt="Loading Kibana" src="images/initial_load.gif">
<h1>
<strong>Kibana</strong>
<small id="cache-message">is loading. Give me a moment here. I'm loading a whole bunch of code. Don't worry, all this good stuff will be cached up for next time!</small>

View file

@ -7,6 +7,6 @@
ng-options="opt.display for opt in opts.fetchIntervals">
</select>
</div>
<button type="submit" class="btn btn-default">
<i class="fa fa-save"></i> Save
<button type="submit" class="btn btn-default" aria-label="Save">
<i aria-hidden="true" class="fa fa-save"></i> Save
</button>

View file

@ -1,4 +1,4 @@
<i class="fa fa-info-circle"
<i aria-label="{{info}}" class="fa fa-info-circle"
tooltip="{{info}}"
tooltip-placement="{{placement}}"
tooltip-popup-delay="250"></i>

View file

@ -1,4 +1,4 @@
<form>
<form role="form">
<div class="form-group finder-form">
<div>
<a class="small pull-right" ng-click="manageObject(type)">manage {{type}}</a>
@ -21,7 +21,7 @@
ng-href="{{ makeUrl(hit) }}"
ng-click="onChoose(hit, $event)">
<li>
<i class="fa" ng-if="hit.icon" ng-class="hit.icon"></i> {{hit.title}}
<i aria-hidden="true" class="fa" ng-if="hit.icon" ng-class="hit.icon"></i> {{hit.title}}
<p ng-if="hit.description" ng-bind="hit.description"></p>
</li>
</a>

View file

@ -2,14 +2,14 @@
<div class="panel-heading">
<span class="panel-title">{{savedObj.title}}</span>
<div class="btn-group">
<a ng-show="!appEmbedded" ng-href="{{edit}}/{{panel.id | uriescape}}"><i class="fa fa-pencil"></i></a>
<a ng-show="!appEmbedded" ng-click="remove()"><i class="fa fa-times"></i></a>
<a aria-label="Edit" ng-show="!appEmbedded" ng-href="{{edit}}/{{panel.id | uriescape}}"><i aria-hidden="true" class="fa fa-pencil"></i></a>
<a aria-label="Remove" ng-show="!appEmbedded" ng-click="remove()"><i aria-hidden="true" class="fa fa-times"></i></a>
</div>
<div class="clearfix"></div>
</div>
<div ng-if="error" class="load-error">
<i class="fa fa-exclamation-triangle"></i>
<i aria-hidden="true" class="fa fa-exclamation-triangle"></i>
<span ng-bind="error"></span>
</div>

View file

@ -4,7 +4,8 @@
<form name="queryInput"
class="fill inline-form"
ng-submit="filterResults()">
ng-submit="filterResults()"
role="form">
<div class="typeahead" kbn-typeahead="dashboard">
<div class="input-group"
@ -12,13 +13,14 @@
<input type="text"
placeholder="Filter..."
aria-label="Filter input"
class="form-control"
ng-model="state.query"
input-focus
kbn-typeahead-input
validate-query>
<button type="submit" class="btn btn-default" ng-disabled="queryInput.$invalid">
<span class="fa fa-search"></span>
<button type="submit" class="btn btn-default" ng-disabled="queryInput.$invalid" aria-label="Filter dashboards">
<span aria-hidden="true" class="fa fa-search"></span>
</button>
</div>
@ -27,21 +29,21 @@
</form>
<div class="button-group">
<div class="button-group" role="toolbar">
<kbn-tooltip text="New Dashboard" placement="bottom" append-to-body="1">
<button ng-click="newDashboard()"><i class="fa fa-file-new-o"></i></button>
<button ng-click="newDashboard()" aria-label="New Dashboard"><i aria-hidden="true" class="fa fa-file-new-o"></i></button>
</kbn-tooltip>
<kbn-tooltip text="Save Dashboard" placement="bottom" append-to-body="1">
<button ng-click="configTemplate.toggle('save')"><i class="fa fa-save"></i></button>
<button aria-label="Save Dashboard" aria-haspopup="true" aria-expanded="{{toggleSaveDashboard}}" ng-click="configTemplate.toggle('save'); toggleSaveDashboard = !toggleSaveDashboard"><i aria-hidden="true" class="fa fa-save"></i></button>
</kbn-tooltip>
<kbn-tooltip text="Load Saved Dashboard" placement="bottom" append-to-body="1">
<button ng-click="configTemplate.toggle('load')"><i class="fa fa-folder-open-o"></i></button>
<button aria-label="Load Saved Dashboard" aria-haspopup="true" aria-expanded="{{toggleLoadSavedDashboard}}" ng-click="configTemplate.toggle('load'); toggleLoadSavedDashboard = !toggleLoadSavedDashboard"><i aria-hidden="true" class="fa fa-folder-open-o"></i></button>
</kbn-tooltip>
<kbn-tooltip text="Share" placement="bottom" append-to-body="1">
<button ng-click="configTemplate.toggle('share')"><i class="fa fa-external-link"></i></button>
<button aria-label="Share Dashboard" aria-haspopup="true" aria-expanded="{{toggleShareDashboard}}" ng-click="configTemplate.toggle('share'); toggleShareDashboard = !toggleShareDashboard"><i aria-hidden="true" class="fa fa-external-link"></i></button>
</kbn-tooltip>
<kbn-tooltip text="Add Visualization" placement="bottom" append-to-body="1">
<button ng-click="configTemplate.toggle('pickVis')"><i class="fa fa-plus-circle"></i></button>
<button aria-label="Add Visualization" aria-haspopup="true" aria-expanded="{{toggleAddVisualization}}" ng-click="configTemplate.toggle('pickVis'); toggleAddVisualization = !toggleAddVisualization"><i aria-hidden="true" class="fa fa-plus-circle"></i></button>
</kbn-tooltip>
</div>
</navbar>
@ -52,7 +54,7 @@
<div ng-show="!state.panels.length" class="text-center start-screen">
<h2>Ready to get started?</h2>
<p>Click the <a class="btn btn-xs navbtn-inverse" ng-click="configTemplate.open('pickVis')"><i class="fa fa-plus-circle"></i></a> button in the menu bar above to add a visualization to the dashboard. <br/>If you haven't setup a visualization yet visit the <a href="#/visualize">"Visualize"</a> tab to create your first visualization.</p>
<p>Click the <a class="btn btn-xs navbtn-inverse" ng-click="configTemplate.open('pickVis'); toggleAddVisualization = !toggleAddVisualization" aria-label="Add visualization"><i aria-hidden="true" class="fa fa-plus-circle"></i></a> button in the menu bar above to add a visualization to the dashboard. <br/>If you haven't setup a visualization yet visit the <a href="#/visualize" title="Visualize">"Visualize"</a> tab to create your first visualization.</p>
</div>
<dashboard-grid></dashboard-grid>

View file

@ -1,7 +1,7 @@
<div ng-switch on="mode" ng-init="mode = 'visualization'" class="dashboard-panel-picker">
<ul class="nav nav-tabs">
<li ng-class="{active: mode == 'visualization'}"><a ng-click="mode='visualization'">Visualizations</a></li>
<li ng-class="{active: mode == 'search'}"><a ng-click="mode='search'">Searches</a></li>
<li ng-class="{active: mode == 'visualization'}"><a ng-click="mode='visualization'" title="Visualizations">Visualizations</a></li>
<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">

View file

@ -1,7 +1,7 @@
<form ng-submit="opts.save()">
<form ng-submit="opts.save()" role="form">
<div class="form-group">
<label for="exampleInputEmail1">Save As</label>
<input type="text" ng-model="opts.dashboard.title" class="form-control" placeholder="Dashboard title" input-focus="select">
<label for="dashboardTitle">Save As</label>
<input id="dashboardTitle" type="text" ng-model="opts.dashboard.title" class="form-control" placeholder="Dashboard title" input-focus>
</div>
<button type="submit" ng-disabled="!opts.dashboard.title" class="btn btn-primary">Save</button>
</form>
<button type="submit" ng-disabled="!opts.dashboard.title" class="btn btn-primary" aria-label="Save dashboard">Save</button>
</form>

View file

@ -18,9 +18,9 @@
<div ng-repeat="bucket in field.details.buckets" class="discover-field-details-item">
<div>
<span ng-show="field.filterable" class="pull-right">
<i class="fa fa-search-minus pull-right discover-field-details-filter"
<i aria-hidden="true" class="fa fa-search-minus pull-right discover-field-details-filter"
ng-click="updateFilterInQuery(field, bucket.value, '-')"></i>
<i class="fa fa-search-plus pull-right discover-field-details-filter"
<i aria-hidden="true" class="fa fa-search-plus pull-right discover-field-details-filter"
ng-click="updateFilterInQuery(field, bucket.value, '+')"></i>
</span>
<div css-truncate css-truncate-expandable="true" class="discover-field-details-value">
@ -38,7 +38,7 @@
class="sidebar-item-button primary">
Visualize
<span class="discover-field-vis-warning" ng-show="warnings.length" tooltip="{{warnings.join(' ')}}">
( {{warnings.length}} <ng-pluralize count="warnings.length" when="{'1':'warning', 'other':'warnings'}"></ng-pluralize> <i class="fa fa-warning"></i> )
( {{warnings.length}} <ng-pluralize count="warnings.length" when="{'1':'warning', 'other':'warnings'}"></ng-pluralize> <i aria-hidden="true" class="fa fa-warning"></i> )
</span>
</div>

View file

@ -34,19 +34,23 @@
<i
ng-class="{ 'fa-chevron-right': !showFields, 'fa-chevron-down': showFields }"
ng-click="showFields = !showFields"
aria-hidden="true"
class="fa visible-xs visible-sm pull-right field-collapse-toggle" ></i>
<button
ng-class="{ 'btn-default': !filter.active, 'btn-success': filter.active, 'hidden-xs': !showFields, 'hidden-sm': !showFields }"
class="btn btn-xs btn-default pull-right discover-field-filter-toggle"
ng-click="showFilter = !showFilter">
<i class="fa fa-gear"></i>
ng-click="showFilter = !showFilter"
aria-label="Field Settings"
aria-haspopup="true"
aria-expanded="{{showFilter}}">
<i aria-hidden="true" class="fa fa-gear"></i>
</button>
</h5>
</div>
<div class="sidebar-item" ng-show="showFilter">
<div ng-click="showFilter = !showFilter" class="discover-field-details-close">
<i class="fa fa-chevron-up"></i>
<i aria-hidden="true" class="fa fa-chevron-up"></i>
</div>
<form role="form" class="discover-field-details">
<div class="form-group">

View file

@ -1,6 +1,6 @@
<div ng-controller="discover" class="app-container">
<navbar>
<form class="fill inline-form" ng-submit="fetch()" name="discoverSearch">
<form role="form" class="fill inline-form" ng-submit="fetch()" name="discoverSearch">
<div class="typeahead" kbn-typeahead="discover">
<div class="input-group"
ng-class="discoverSearch.$invalid ? 'has-error' : ''">
@ -9,33 +9,38 @@
kbn-typeahead-input
ng-model="state.query"
placeholder="Search..."
aria-label="Search input"
type="text"
class="form-control">
<button type="submit"
ng-disabled="discoverSearch.$invalid">
<span class="fa fa-search"></span></button>
<!--<button type="button" ng-click="resetQuery()"><span class="fa fa-ban"></span></button>-->
ng-disabled="discoverSearch.$invalid"
aria-label="Search">
<span aria-hidden="true" class="fa fa-search"></span></button>
<!--<button type="button" ng-click="resetQuery()" aria-label="Reset query"><span aria-hidden="true" class="fa fa-ban"></span></button>-->
</div>
<kbn-typeahead-items></kbn-typeahead-items>
</div>
</form>
<div class="button-group">
<div class="button-group" role="toolbar">
<kbn-tooltip text="New Search" placement="bottom" append-to-body="1">
<button ng-click="newQuery()"><i class="fa fa-file-new-o"></i></button>
<button ng-click="newQuery()" aria-label="New Search"><i aria-hidden="true" class="fa fa-file-new-o"></i></button>
</kbn-tooltip>
<kbn-tooltip text="Save Search" placement="bottom" append-to-body="1">
<button ng-click="configTemplate.toggle('save')"><i class="fa fa-save"></i></button>
<button aria-haspopup="true" aria-expanded="{{toggleSaveSearch}}" ng-click="configTemplate.toggle('save'); toggleSaveSearch = !toggleSaveSearch" aria-label="Save Search"><i aria-hidden="true" class="fa fa-save"></i></button>
</kbn-tooltip>
<kbn-tooltip text="Load Saved Search" placement="bottom" append-to-body="1">
<button ng-click="configTemplate.toggle('load')"><i class="fa fa-folder-open-o"></i></button>
<button aria-haspopup="true" aria-expanded="{{toggleLoadSavedSearch}}" ng-click="configTemplate.toggle('load'); toggleLoadSavedSearch = !toggleLoadSavedSearch" aria-label="Load Saved Search"><i aria-hidden="true" class="fa fa-folder-open-o"></i></button>
</kbn-tooltip>
<kbn-tooltip text="Settings" placement="bottom" append-to-body="1">
<button aria-haspopup="true" aria-expanded="{{toggleSettings}}" ng-click="configTemplate.toggle('config'); toggleSettings = !toggleSettings" aria-label="Settings"><i aria-hidden="true" class="fa fa-gear"></i></button>
</kbn-tooltip>
</div>
</navbar>
<config config-template="configTemplate" config-object="opts" config-close="configClose" config-submit="fetch"></config>
<div class="container-fluid">
<div class="container-fluid" role="main">
<div class="row">
<filter-bar state="state"></filter-bar>
</div>
@ -58,7 +63,7 @@
<div class="discover-info">
<span ng-show="opts.savedSearch.id" class="discover-info-title">
<span bindonce bo-bind="opts.savedSearch.title"></span>
<i tooltip="Reload saved query" ng-click="resetQuery();" class="fa fa-undo small"></i>
<i aria-label="Reload saved query" tooltip="Reload saved query" ng-click="resetQuery();" class="fa fa-undo small"></i>
</span>
<strong class="discover-info-hits">{{(hits || 0) | number:0}}</strong>
<ng-pluralize count="hits" when="{'1':'hit', 'other':'hits'}"></ng-pluralize>
@ -69,7 +74,7 @@
<div ng-show="resultState === 'none'">
<div class="col-md-10 col-md-offset-1">
<h1>No results found <i class="fa fa-meh-o"></i></h1>
<h1>No results found <i aria-hidden="true" class="fa fa-meh-o"></i></h1>
<p>
Unfortunately I could not find any results matching your search. I tried really hard. I looked all over the place and frankly, I just couldn't find anything good. Help me, help you. Here's some ideas:
@ -81,14 +86,14 @@
<ul>
<li ng-repeat="failure in failures | limitTo: failuresShown"><strong>Index:</strong> {{failure.index}} <strong>Shard:</strong> {{failure.shard}} <strong>Reason:</strong> {{failure.reason}} </li>
</ul>
<a ng-click="showAllFailures()" ng-if="failures.length > failuresShown">Show More</a>
<a ng-click="showLessFailures()" ng-if="failures.length === failuresShown && failures.length > 5">Show Less</a>
<a ng-click="showAllFailures()" ng-if="failures.length > failuresShown" title="Show More">Show More</a>
<a ng-click="showLessFailures()" ng-if="failures.length === failuresShown && failures.length > 5" title="Show Less">Show Less</a>
</div>
<div ng-show="opts.timefield">
<p>
<h3>Expand your time range</h3>
<p>I see you are looking at an index with a date field. It is possible your query does not match anything in the current time range, or that there is not data at all in the currently selected time range. Click the button below to open the time picker. For future reference you can open the time picker by clicking the <a class="btn btn-xs navbtn" ng-click="toggleTimepicker()">time picker <i class="fa fa-clock-o"></i></a> in the top right corner of your screen.
<p>I see you are looking at an index with a date field. It is possible your query does not match anything in the current time range, or that there is not data at all in the currently selected time range. Click the button below to open the time picker. For future reference you can open the time picker by clicking the <a class="btn btn-xs navbtn" ng-click="toggleTimepicker(); toggledTimepicker = !toggledTimepicker" aria-expanded="{{toggledTimepicker}}" aria-label="time picker">time picker <i aria-hidden="true" class="fa fa-clock-o"></i></a> in the top right corner of your screen.
</p>
</div>
@ -165,7 +170,7 @@
<div ng-if="rows.length == opts.sampleSize" class="discover-table-footer">
<center>
These are the first {{opts.sampleSize}} results matching your query,
refine your search to see more. <a ng-click="toTop()">Back to top.</a>
refine your search to see more. <a ng-click="toTop()" title="Back to top">Back to top.</a>
</center>
</div>
</div>

View file

@ -2,8 +2,8 @@
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label class="control-label">Save Search</label>
<input ng-model="opts.savedSearch.title" input-focus="select" class="form-control" placeholder="Name this search...">
<label for="SaveSearch" class="control-label">Save Search</label>
<input id="SaveSearch" ng-model="opts.savedSearch.title" input-focus="select" class="form-control" placeholder="Name this search...">
</div>
<div class="form-group">
<button ng-click="opts.saveDataSource()" ng-disabled="!opts.savedSearch.title" type="submit" class="btn btn-primary">
@ -12,4 +12,4 @@
</div>
</div>
</div>
</div>
</div>

View file

@ -6,7 +6,7 @@
<!-- no results -->
<div class="col-md-12" ng-if="status === 'notFound'">
<div class="col-md-12">
<h1>Failed to locate document. <i class="fa fa-meh-o"></i></h1>
<h1>Failed to locate document. <i aria-hidden="true" class="fa fa-meh-o"></i></h1>
<p>
Unfortunately I could not find any documents matching that id, of that type, in that index. I tried really hard. I wanted it to be there. Sometimes I swear documents grow legs and just walk out of the index. Sneaky. I wish I could offer some advice here, something to make you feel better
@ -18,7 +18,7 @@
<!-- no results -->
<div class="col-md-12" ng-if="status === 'error'">
<div class="col-md-12">
<h1>This is bad. <i class="fa fa-meh-o"></i></h1>
<h1>This is bad. <i aria-hidden="true" class="fa fa-meh-o"></i></h1>
<p>
Oh no. Something went very wrong. Its not just that I couldn't find your document, I couldn't even try. The index was missing, or the type. Go check out Elasticsearch, something isn't quite right here.

View file

@ -15,8 +15,8 @@
<!-- Full navbar -->
<div collapse="!showCollapsed" class="navbar-collapse" id="kibana-primary-navbar">
<ul class="nav navbar-nav">
<li class="logo hidden-xs"></li>
<ul class="nav navbar-nav" role="navigation">
<li aria-label="Kibana Barcode Logo" class="logo hidden-xs"></li>
<li ng-repeat="app in apps.inOrder | filter:{show: true}" ng-class="{active: activeApp === app}">
<a ng-href="#{{app === activeApp ? app.rootPath : app.lastPath}}" bo-text="app.name"></a>
</li>
@ -28,14 +28,14 @@
</li>
<li ng-if="setupComplete" ng-show="timefilter.enabled" class="navbar-timepicker-container">
<a ng-click="toggleTimepicker()">
<a ng-click="toggleTimepicker()" id="timepicker" aria-haspopup="true" aria-expanded="false">
<span ng-show="timefilter.refreshInterval.value > 0" class="navbar-timepicker-auto-refresh-desc">
{{timefilter.refreshInterval.display}}
<i class="fa fa-rotate-right"></i>
<i aria-hidden="true" class="fa fa-rotate-right"></i>
</span>
<span class="navbar-timepicker-timefilter-desc">
<pretty-duration from="timefilter.time.from" to="timefilter.time.to"></pretty-duration>
<i class="fa fa-clock-o"></i>
<i aria-hidden="true" class="fa fa-clock-o"></i>
</span>
</a>
</li>

View file

@ -1,5 +1,5 @@
<div class="markdown-vis-options form-group">
<label>Markdown</label>
<small class="pull-right"><a target="_window" href="https://help.github.com/articles/github-flavored-markdown/">Help <i class="fa-link fa"></i></a></small>
<small class="pull-right"><a target="_window" href="https://help.github.com/articles/github-flavored-markdown/">Help <i aria-hidden="true" class="fa fa-link"></i></a></small>
<textarea ng-model="vis.params.markdown" class="form-control" rows="20"></textarea>
</div>

View file

@ -9,5 +9,5 @@
</div>
</nav>
<div class="settings-section-container {{section.name}}-settings" ng-transclude></div>
<div role="main" class="settings-section-container {{section.name}}-settings" ng-transclude></div>
</div>

View file

@ -2,7 +2,7 @@
<div class="kbn-settings-about container" ng-controller="settingsAbout">
<div class="col-md-4 col-md-offset-4 jumbotron">
<center>
<img src='plugins/settings/sections/about/barcode.svg' width="128" height="128"><br>
<img src='plugins/settings/sections/about/barcode.svg' alt="Kibana Barcode Logo" width="128" height="128"><br>
<h1>Kibana</h1>
<p>
<table class="table table-condensed kbn-settings-about-versions">

View file

@ -11,7 +11,8 @@
<form
name="forms.configEdit"
ng-if="conf.editting"
ng-submit="save(conf)">
ng-submit="save(conf)"
role="form">
<input
ng-show="conf.normal"
ng-model="conf.unsavedValue"
@ -53,32 +54,40 @@
ng-if="!conf.editting"
ng-click="edit(conf)"
class="btn btn-default"
ng-disabled="conf.tooComplex">
<i class="fa fa-pencil"></i>
ng-disabled="conf.tooComplex"
aria-label="Edit">
<span class="sr-only">Edit</span>
<i aria-hidden="true" class="fa fa-pencil"></i>
</button>
<button
ng-if="conf.editting"
ng-click="save(conf)"
class="btn btn-success"
ng-disabled="conf.loading || conf.tooComplex || forms.configEdit.$invalid">
<i ng-if="!conf.loading" class="fa fa-save"></i>
<i ng-if="conf.loading" class="fa fa-spinner"></i>
ng-disabled="conf.loading || conf.tooComplex || forms.configEdit.$invalid"
aria-label="Save">
<span class="sr-only">Save</span>
<i aria-hidden="true" ng-if="!conf.loading" class="fa fa-save"></i>
<i aria-hidden="true" ng-if="conf.loading" class="fa fa-spinner"></i>
</button>
<button
ng-if="!conf.editting"
ng-click="clear(conf)"
ng-hide="conf.value === undefined"
class="btn btn-danger">
<i class="fa fa-trash-o"></i>
class="btn btn-danger"
aria-label="Clear">
<span class="sr-only">Clear</span>
<i aria-hidden="true" class="fa fa-trash-o"></i>
</button>
<button
ng-if="conf.editting"
ng-click="cancelEdit(conf)"
class="btn btn-default">
<i class="fa fa-times"></i>
class="btn btn-default"
aria-label="Cancel edit">
<span class="sr-only">Cancel Edit</span>
<i aria-hidden="true" class="fa fa-times"></i>
</button>
</td>
</tr>
</tr>

View file

@ -6,8 +6,8 @@
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.
</div>
<form>
<input ng-model="advancedFilter" class="form-control span12" type="text" placeholder="Filter"/>
<form role="form">
<input aria-label="Filter" ng-model="advancedFilter" class="form-control span12" type="text" placeholder="Filter"/>
</form>
<table class="table">
<thead>

View file

@ -4,7 +4,7 @@
<div class="page-header">
<div class="index-pattern-name">
<h1 class="title" css-truncate>
<i ng-if="defaultIndex === indexPattern.id" class="fa fa-star"></i>
<i aria-hidden="true" ng-if="defaultIndex === indexPattern.id" class="fa fa-star"></i>
{{indexPattern.id}}
</h1>
<div class="controls">
@ -12,21 +12,25 @@
ng-click="setDefaultPattern()"
tooltip="Set as default index"
class="btn btn-success">
<i class="fa fa-star"></i>
<span class="sr-only">Set as default index</span>
<i aria-hidden="true" class="fa fa-star"></i>
</button>
<button
confirm-click="indexPattern.refreshFields()"
confirmation="This will reset the field popularity counters. Are you sure you want to reload your fields?"
tooltip="Reload field list"
class="btn btn-warning">
<i class="fa fa-refresh"></i>
<span class="sr-only">Reload field list</span>
<i aria-hidden="true" class="fa fa-refresh"></i>
</button>
<button
aria-label="Remove index pattern"
confirm-click="removePattern()"
confirmation="Are you sure you want to remove this index pattern?"
tooltip="Remove index pattern"
class="btn btn-danger">
<i class="fa fa-trash"></i>
<span class="sr-only">Remove index pattern</span>
<i aria-hidden="true" class="fa fa-trash"></i>
</button>
</div>
</div>
@ -38,7 +42,7 @@
field types must be done using Elasticsearch's
<a target="_window" href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping.html">
Mapping API
<i class="fa-link fa"></i>
<i aria-hidden="true" class="fa-link fa"></i>
</a>
</p>
<div bo-if="indexPattern.timeFieldName && indexPattern.intervalName" class="alert alert-info">

View file

@ -4,5 +4,5 @@
ng-if="indexPattern.timeFieldName === field.name"
tooltip="This field represents the time that events occurred."
class="label label-default">
<i class="fa fa-clock-o"></i>
<i aria-hidden="true" class="fa fa-clock-o"></i>
</span>

View file

@ -1,9 +1,9 @@
<div ng-mouseover="popularityField.name = field.name" ng-mouseout="popularityField.name = null">
<span>{{ field.count }}</span>
<span class="field-popularize" ng-show="popularityField.name == field.name">
<span ng-click="indexPattern.popularizeField(field.name, 1)"
class="label label-default"><i class="fa fa-plus"></i></span>
<span ng-click="indexPattern.popularizeField(field.name, -1)"
class="label label-default"><i class="fa fa-minus"></i></span>
<span aria-label="Plus" ng-click="indexPattern.popularizeField(field.name, 1)"
class="label label-default"><i aria-hidden="true" class="fa fa-plus"></i></span>
<span aria-label="Minus" ng-click="indexPattern.popularizeField(field.name, -1)"
class="label label-default"><i aria-hidden="true" class="fa fa-minus"></i></span>
</span>
</div>'

View file

@ -1,5 +1,6 @@
<span>{{field.type}}</span>
<i
aria-label="The type of this field changes across indices. It is unavailable for many analysis functions."
ng-if="field.type == 'conflict'"
tooltip="The type of this field changes across indices. It is unavailable for many analysis functions."
class="fa fa-warning text-color-warning">

View file

@ -1,12 +1,14 @@
<div class="actions">
<button ng-click="edit(field)" class="btn btn-xs btn-default">
<i class="fa fa-pencil"></i>
<button ng-click="edit(field)" aria-label="Edit" class="btn btn-xs btn-default">
<span class="sr-only">Edit</span>
<i aria-hidden="true" class="fa fa-pencil"></i>
</button>
<button
confirm-click="remove(field)"
confirmation="Are you sure want to delete '{{field.name}}'? This action is irreversible!"
class="btn btn-xs btn-danger">
<i class="fa fa-trash"></i>
class="btn btn-xs btn-danger"
aria-label="Delete">
<i aria-hidden="true" class="fa fa-trash"></i>
</button>
</div>
</div>

View file

@ -2,8 +2,8 @@
<p>These scripted fields are computed on the fly from your data. They can be used in visualizations and displayed in your documents, however they can not be searched. You can manage them here and add new ones as you see fit, but be careful, scripts can be tricky! <!-- If you need some examples, why not let Kibana <a ng-click="addDateScripts()"><strong>create a few examples from your date fields.</strong></a --></p>
<header>
<button ng-click="create()" class="btn btn-info">
<i class="fa fa-plus"></i>
<button ng-click="create()" class="btn btn-info" aria-label="Add Scripted Field">
<i aria-hidden="true" class="fa fa-plus"></i>
Add Scripted Field
</button>
</header>

View file

@ -6,8 +6,10 @@
<a
bo-if="edittingId"
href="#/settings/indices"
class="btn btn-primary btn-xs">
<i class="fa fa-plus"></i> Add New
class="btn btn-primary btn-xs"
aria-label="Add New">
<span class="sr-only">Add New</span>
<i aria-hidden="true" class="fa fa-plus"></i> Add New
</a>
</h5>
</div>
@ -24,7 +26,7 @@
class="sidebar-item">
<a bo-href="pattern.url">
<div bo-class="pattern.class">
<i ng-if="pattern.default" class="fa fa-star"></i>
<i aria-hidden="true" ng-if="pattern.default" class="fa fa-star"></i>
<span bo-text="pattern.id"></span>
</div>
</a>

View file

@ -4,13 +4,13 @@
<p>
From here you can delete saved objects, such as saved searches. You can also edit the raw data of saved objects. Typically objects are only modified via their associated application, which is probably what you should use instead of this screen.
</p>
<form>
<input ng-model="advancedFilter" class="form-control span12" type="text" placeholder="Filter"/>
<form role="form">
<input aria-label="Filter" ng-model="advancedFilter" class="form-control span12" type="text" placeholder="Filter"/>
</form>
<ul class="nav nav-tabs">
<li class="kbn-settings-tab" ng-class="{ active: state.tab === service.title }" ng-repeat="service in services">
<a ng-click="changeTab(service)">{{ service.title }} <small>({{service.data.length}})</small></a>
<a title="{{ service.title }}" ng-click="changeTab(service)">{{ service.title }} <small>({{service.data.length}})</small></a>
</li>
</ul>
<div class="tab-content">
@ -22,7 +22,7 @@
<a ng-disabled="!deleteAllBtn"
confirm-click="bulkDelete()"
confirmation="Are you sure want to delete the selected {{service.title}}? This action is irreversible!"
class="delete-all btn btn-danger btn-xs"><i class="fa fa-trash"></i> Delete Selected</a>
class="delete-all btn btn-danger btn-xs" aria-label="Delete Selected"><i aria-hidden="true" class="fa fa-trash"></i> Delete Selected</a>
</div>
<div ng-repeat="service in services" ng-class="{ active: state.tab === service.title }" class="tab-pane">
<ul class="list-unstyled">
@ -30,14 +30,18 @@
<div class="actions pull-right">
<button
ng-click="edit(service, item)"
class="btn btn-default">
<i class="fa fa-pencil"></i>
class="btn btn-default"
aria-label="Edit">
<span class="sr-only">Edit</span>
<i aria-hidden="true" class="fa fa-pencil"></i>
</button>
<button
ng-click="open(item)"
class="btn btn-info">
<i class="fa fa-eye"></i>
class="btn btn-info"
aria-label="Hide">
<span class="sr-only">Hide</span>
<i aria-hidden="true" class="fa fa-eye"></i>
</button>
</div>

View file

@ -18,7 +18,7 @@
<p>Modifying objects is for advanced users only. Object properties are not validated and invalid objects could cause errors, data loss, or worse. Unless someone with intimate knowledge of the code told you to be in here, you probably shouldn't be.</p>
</div>
<form name="objectForm" ng-submit="submit()">
<form role="form" name="objectForm" ng-submit="submit()">
<div class="form-group" ng-repeat="field in fields">
<label>{{ field.name }}</label>
<textarea rows="1" msd-elastic ng-if="field.type === 'text'" ng-model="field.value" class="form-control span12"/>
@ -27,8 +27,8 @@
</div>
</form>
<div class="form-group">
<button class="btn btn-primary" ng-click="cancel()">Cancel</button>
<button class="btn btn-success" ng-click="submit()" ng-disabled="objectForm.$invalid || aceInvalidEditors.length !==0">Save {{ title }} Object</button>
<button aria-label="Cancel" class="btn btn-primary" ng-click="cancel()">Cancel</button>
<button aria-label="Save {{ title }} Object" class="btn btn-success" ng-click="submit()" ng-disabled="objectForm.$invalid || aceInvalidEditors.length !==0">Save {{ title }} Object</button>
</div>
</kbn-settings-objects-view>
</kbn-settings-app>

View file

@ -1,6 +1,6 @@
<div ng-controller="KbnTableVisController" class="table-vis">
<div ng-if="!hasSomeRows && hasSomeRows !== null" class="table-vis-error">
<h2><i class="fa fa-meh-o"></i></h2>
<h2 aria-hidden="true"><i aria-hidden="true" class="fa fa-meh-o"></i></h2>
<h4>No results found</h4>
</div>

View file

@ -1,6 +1,6 @@
<div class="vis-editor-agg-editor-advanced-toggle">
<a ng-click="advancedToggled = !advancedToggled">
<i class="fa fa-caret-down" ng-class="{'fa-caret-down': advancedToggled, 'fa-caret-left': !advancedToggled}"></i>
<i aria-hidden="true" class="fa fa-caret-down" ng-class="{'fa-caret-down': advancedToggled, 'fa-caret-left': !advancedToggled}"></i>
Advanced
</a>
</div>

View file

@ -5,10 +5,11 @@
<!-- open/close editor -->
<button
aria-label="{{ editorOpen ? 'Close Editor' : 'Open Editor' }}"
ng-click="editorOpen = !editorOpen"
type="button"
class="btn btn-xs vis-editor-agg-header-toggle">
<i ng-class="{ 'fa-caret-down': editorOpen, 'fa-caret-right': !editorOpen }" class="fa"></i>
<i aria-hidden="true" ng-class="{ 'fa-caret-down': editorOpen, 'fa-caret-right': !editorOpen }" class="fa"></i>
</button>
<!-- title -->
@ -30,6 +31,7 @@
<div class="vis-editor-agg-header-controls btn-group">
<!-- up button -->
<button
aria-label="Increase Priority"
ng-if="stats.count > 1"
ng-class="{ disabled: $first }"
ng-click="moveUp(agg)"
@ -37,11 +39,12 @@
tooltip-append-to-body="true"
type="button"
class="btn btn-xs btn-default">
<i class="fa fa-caret-up"></i>
<i aria-hidden="true" class="fa fa-caret-up"></i>
</button>
<!-- down button -->
<button
aria-lebl="Decrease Priority"
ng-if="stats.count > 1"
ng-class="{ disabled: $last }"
ng-click="moveDown(agg)"
@ -49,18 +52,19 @@
tooltip-append-to-body="true"
type="button"
class="btn btn-xs btn-default">
<i class="fa fa-caret-down"></i>
<i aria-hidden="true" class="fa fa-caret-down"></i>
</button>
<!-- remove button -->
<button
aria-label="Remove Dimension"
ng-if="stats.count > stats.min"
ng-click="remove(agg)"
tooltip="Remove Dimension"
tooltip-append-to-body="true"
type="button"
class="btn btn-xs btn-danger">
<i class="fa fa-times"></i>
<i aria-hidden="true" class="fa fa-times"></i>
</button>
</div>
</div>

View file

@ -20,10 +20,10 @@
<div ng-if="!add.form">
<span ng-if="groupName !== 'buckets' || !stats.count">
<i class="fa fa-plus"></i> Add Aggregation
<i aria-hidden="true" class="fa fa-plus"></i> Add Aggregation
</span>
<span ng-if="groupName === 'buckets' && stats.count > 0">
<i class="fa fa-code-fork"></i> Add Sub Aggregation
<i aria-hidden="true" class="fa fa-code-fork"></i> Add Sub Aggregation
</span>
</div>
<span ng-if="add.form">cancel</span>

View file

@ -6,6 +6,7 @@
class="form-control"
ng-model="agg.type"
required
auto-select-if-only-one="aggTypeOptions | aggFilter:agg.schema.aggFilter"
ng-options="agg as agg.title for agg in aggTypeOptions | aggFilter:agg.schema.aggFilter">
</select>
</div>

View file

@ -6,17 +6,17 @@
ng-dblclick="unlink()"
tooltip="Double click to unlink this visualization from the saved search"
class="bitty-modal visualize-linked">
<i class="fa fa-link"></i>
<i aria-hidden="true" class="fa fa-link"></i>
&nbsp;
This visualization is linked to a saved search:
<b>{{ savedVis.savedSearchId | json}}</b>
<b>{{ savedVis.savedSearch.title }}</b>
</div>
<div
ng-if="vis.type.requiresSearch && unlinking"
ng-click="clearUnlinking()"
class="bitty-modal">
<i class="fa fa-chain-broken"></i> Unlinked!
<i aria-hidden="true" class="fa fa-chain-broken"></i> Unlinked!
</div>
<form ng-if="vis.type.requiresSearch && $state.linked" class="inline-form" name="queryInput">
@ -29,8 +29,8 @@
<button
class="btn btn-default" type="submit"
ng-disabled="true">
<span class="fa fa-search"></span>
ng-disabled="true" aria-label="Search">
<span aria-hidden="true" class="fa fa-search"></span>
</button>
</div>
</div>
@ -55,8 +55,8 @@
<button
class="btn btn-default" type="submit"
ng-disabled="queryInput.$invalid">
<span class="fa fa-search"></span>
ng-disabled="queryInput.$invalid" aria-label="Search">
<span aria-hidden="true" class="fa fa-search"></span>
</button>
</div>
<kbn-typeahead-items></kbn-typeahead-items>
@ -66,29 +66,29 @@
<div class="button-group">
<kbn-tooltip text="New Visualization" placement="bottom" append-to-body="1">
<button ng-click="startOver()"><i class="fa fa-file-new-o"></i></button>
<button ng-click="startOver()" aria-label="New Visualization"><i aria-hidden="true" class="fa fa-file-new-o"></i></button>
</kbn-tooltip>
<kbn-tooltip text="Save Visualization" placement="bottom" append-to-body="1">
<!-- normal save -->
<button ng-if="!editableVis.dirty" ng-click="configTemplate.toggle('save')">
<i class="fa fa-save"></i>
<button ng-if="!editableVis.dirty" ng-click="configTemplate.toggle('save')" aria-label="Save Visualization">
<i aria-hidden="true" class="fa fa-save"></i>
</button>
<!-- save stub with tooltip -->
<button disabled ng-if="editableVis.dirty" tooltip="Apply or Discard your changes before saving">
<i class="fa fa-save"></i>
<button disabled ng-if="editableVis.dirty" tooltip="Apply or Discard your changes before saving" aria-label="Apply or Discard your changes before saving">
<i aria-hidden="true" class="fa fa-save"></i>
</button>
</kbn-tooltip>
<kbn-tooltip text="Load Saved Visualization" placement="bottom" append-to-body="1">
<button ng-click="configTemplate.toggle('load')"><i class="fa fa-folder-open-o"></i></button>
<button ng-click="configTemplate.toggle('load')" aria-label="Load Saved Visualization"><i aria-hidden="true" class="fa fa-folder-open-o"></i></button>
</kbn-tooltip>
<kbn-tooltip text="Share Visualization" placement="bottom" append-to-body="1">
<button ng-click="configTemplate.toggle('share')"><i class="fa fa-external-link"></i></button>
<button ng-click="configTemplate.toggle('share')" aria-label="Share Visualization"><i aria-hidden="true" class="fa fa-external-link"></i></button>
</kbn-tooltip>
<kbn-tooltip text="Refresh" placement="bottom" append-to-body="1">
<button ng-click="fetch()"><i class="fa fa-refresh"></i></button>
<button ng-click="fetch()" aria-label="Refresh"><i aria-hidden="true" class="fa fa-refresh"></i></button>
</kbn-tooltip>
</div>
</navbar>

View file

@ -27,7 +27,7 @@
<p
ng-if="visualizeEditor.$invalid"
class="text-center text-danger sidebar-item-text">
<i class="fa fa-warning"></i> {{visualizeEditor.describeErrors()}}
<i aria-hidden="true" class="fa fa-warning"></i> {{visualizeEditor.describeErrors()}}
</p>
<button
ng-disabled="!vis.dirty || visualizeEditor.$invalid"

View file

@ -2,6 +2,7 @@
<div ng-hide="alwaysShowOptions" class="sidebar-item-title" ng-click="showVisOptions = !showVisOptions">
view options
<i
aria-hidden="true"
class="fa fa-caret-down"
ng-class="{'fa-caret-down': showVisOptions, 'fa-caret-right': !showVisOptions}">
</i>

View file

@ -9,7 +9,7 @@
ng-repeat="type in visTypes.inTitleOrder"
ng-href="{{ visTypeUrl(type) }}">
<div class="wizard-vis-type-heading">
<i class="fa" ng-class="type.icon"></i>
<i aria-hidden="true" class="fa" ng-class="type.icon"></i>
<h4>{{type.title}}</h4>
</div>
<span class="wizard-vis-type-description">{{type.description}}</span>

View file

@ -46,6 +46,7 @@ var config = module.exports = {
package : require(packagePath),
htpasswd : htpasswdPath,
buildNum : '@@buildNum',
maxSockets : kibana.maxSockets || Infinity,
log_file : kibana.log_file || null
};

View file

@ -5,6 +5,10 @@
var app = require('./app');
var fs = require('fs');
var config = require('./config');
var http = require('http');
var https = require('https');
http.globalAgent.maxSockets = config.maxSockets;
https.globalAgent.maxSockets = config.maxSockets;
var logger = require('./lib/logger');
var Promise = require('bluebird');
var initialization = require('./lib/serverInitialization');
@ -25,12 +29,12 @@ try {
*/
var server;
if (key && cert) {
server = require('https').createServer({
server = https.createServer({
key: key,
cert: cert
}, app);
} else {
server = require('http').createServer(app);
server = http.createServer(app);
}
server.on('error', onError);
server.on('listening', onListening);

View file

@ -13,7 +13,8 @@ define(function (require) {
'bytes': 100,
'area': [{lat: 7, lon: 7}],
'noMapping': 'hasNoMapping',
'objectArray': [{foo: true}, {bar: false}]
'objectArray': [{foo: true}, {bar: false}],
'_underscore': 1
}
};
@ -103,14 +104,23 @@ define(function (require) {
});
describe('warnings', function () {
it('displays a warning about field name starting with underscore', function () {
var cells = $elem.find('td[title="_underscore"]').siblings();
expect(cells.find('.doc-viewer-underscore').length).to.be(1);
expect(cells.find('.doc-viewer-no-mapping').length).to.be(0);
expect(cells.find('.doc-viewer-object-array').length).to.be(0);
});
it('displays a warning about missing mappings', function () {
var cells = $elem.find('td[title="noMapping"]').siblings();
expect(cells.find('.doc-viewer-underscore').length).to.be(0);
expect(cells.find('.doc-viewer-no-mapping').length).to.be(1);
expect(cells.find('.doc-viewer-object-array').length).to.be(0);
});
it('displays a warning about objects in arrays', function () {
var cells = $elem.find('td[title="objectArray"]').siblings();
expect(cells.find('.doc-viewer-underscore').length).to.be(0);
expect(cells.find('.doc-viewer-no-mapping').length).to.be(0);
expect(cells.find('.doc-viewer-object-array').length).to.be(1);
});

View file

@ -35,5 +35,16 @@ define(function (require) {
$rootScope.$digest();
expect($rootScope.value).to.be(oneOption[0]);
});
it('should still auto select if the collection contains 2 items but is filtered to 1', function () {
$rootScope.options = multiOptions;
var html = '<select ng-model="value" ng-options="option.name for option in options | filter:{label:\'bar\'}" ' +
'auto-select-if-only-one="options | filter:{label:\'bar\'}"></select>';
$compile(html)($rootScope);
$rootScope.value = null;
$rootScope.$digest();
expect($rootScope.value).to.be(multiOptions[1]);
});
});
});