UNPKG

@spalger/kibana

Version:

Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic

80 lines (64 loc) 2.75 kB
define(function (require) { return function FieldObjectProvider(Private, shortDotsFilter, $rootScope, Notifier) { var notify = new Notifier({ location: 'IndexPattern Field' }); var FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); var fieldTypes = Private(require('ui/index_patterns/_field_types')); var fieldFormats = Private(require('ui/registry/field_formats')); var ObjDefine = require('ui/utils/ObjDefine'); function Field(indexPattern, spec) { // unwrap old instances of Field if (spec instanceof Field) spec = spec.$$spec; // constuct this object using ObjDefine class, which // extends the Field.prototype but gets it's properties // defined using the logic below var obj = new ObjDefine(spec, Field.prototype); if (spec.name === '_source') { spec.type = '_source'; } // find the type for this field, fallback to unkown type var type = fieldTypes.byName[spec.type]; if (spec.type && !type) { notify.error( 'Unkown field type "' + spec.type + '"' + ' for field "' + spec.name + '"' + ' in indexPattern "' + indexPattern.id + '"' ); } if (!type) type = fieldTypes.byName.unknown; var format = spec.format; if (!format || !(format instanceof FieldFormat)) { format = indexPattern.fieldFormatMap[spec.name] || fieldFormats.getDefaultInstance(spec.type); } var indexed = !!spec.indexed; var scripted = !!spec.scripted; var sortable = spec.name === '_score' || ((indexed || scripted) && type.sortable); var bucketable = indexed || scripted; var filterable = spec.name === '_id' || scripted || (indexed && type.filterable); obj.fact('name'); obj.fact('type'); obj.writ('count', spec.count || 0); // scripted objs obj.fact('scripted', scripted); obj.writ('script', scripted ? spec.script : null); obj.writ('lang', scripted ? (spec.lang || 'expression') : null); // mapping info obj.fact('indexed', indexed); obj.fact('analyzed', !!spec.analyzed); obj.fact('doc_values', !!spec.doc_values); // usage flags, read-only and won't be saved obj.comp('format', format); obj.comp('sortable', sortable); obj.comp('bucketable', bucketable); obj.comp('filterable', filterable); // computed values obj.comp('indexPattern', indexPattern); obj.comp('displayName', shortDotsFilter(spec.name)); obj.comp('$$spec', spec); return obj.create(); } Field.prototype.routes = { edit: '/settings/indices/{{indexPattern.id}}/field/{{name}}' }; return Field; }; });