You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2015/02/04 17:36:00 UTC

[16/30] karaf-decanter git commit: Add kibana embedded dashboard and feature

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/map/module.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/map/module.html b/kibana/src/main/resources/app/panels/map/module.html
new file mode 100644
index 0000000..49a6d8f
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/map/module.html
@@ -0,0 +1,58 @@
+<div ng-controller="map" ng-init="init()"><style>.jvectormap-label {
+        position: absolute;
+        display: none;
+        visibility: hidden;
+        border: solid 1px #CDCDCD;
+        -webkit-border-radius: 3px;
+        -moz-border-radius: 3px;
+        border-radius: 3px;
+        background: #292929;
+        color: white;
+        font-family: sans-serif, Verdana;
+        font-size: smaller;
+        padding: 3px;
+    }
+
+    .jvectormap-zoomin, .jvectormap-zoomout {
+        position: absolute;
+        left: 10px;
+        -webkit-border-radius: 3px;
+        -moz-border-radius: 3px;
+        border-radius: 3px;
+        background: #292929;
+        padding: 3px;
+        color: white;
+        width: 10px;
+        height: 10px;
+        cursor: pointer;
+        line-height: 10px;
+        text-align: center;
+    }
+
+    .jvectormap {
+        position: relative;
+    }
+
+    .jvectormap-zoomin {
+        display: none;
+        top: 10px;
+    }
+
+    .jvectormap-zoomout {
+        display: none;
+        top: 30px;
+    }
+
+    .map-legend {
+        color   : #c8c8c8;
+        padding : 10px;
+        font-size: 11pt;
+        font-weight: 200;
+        background-color: #1f1f1f;
+        border-radius: 5px;
+        position: absolute;
+        left: 0px;
+        top: 15px;
+        display: none;
+        z-index: 99;
+    }</style><div class="jvectormap" map="" params="{{panel}}" ng-style="{height:panel.height||row.height}"></div></div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/map/module.js
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/map/module.js b/kibana/src/main/resources/app/panels/map/module.js
new file mode 100644
index 0000000..241b613
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/map/module.js
@@ -0,0 +1,5 @@
+/*! kibana - v3.1.1 - 2014-10-02
+ * Copyright (c) 2014 Rashid Khan; Licensed Apache License */
+
+!function(a){var b={set:{colors:1,values:1,backgroundColor:1,scaleColors:1,normalizeFunction:1,focus:1},get:{selectedRegions:1,selectedMarkers:1,mapObject:1,regionName:1}};a.fn.vectorMap=function(a){var c,d,c=this.children(".jvectormap-container").data("mapObject");if("addMap"===a)jvm.WorldMap.maps[arguments[1]]=arguments[2];else{if(("set"===a||"get"===a)&&b[a][arguments[1]])return d=arguments[1].charAt(0).toUpperCase()+arguments[1].substr(1),c[a+d].apply(c,Array.prototype.slice.call(arguments,2));a=a||{},a.container=this,c=new jvm.WorldMap(a)}return this}}(jQuery),function(a){function b(b){var c=b||window.event,d=[].slice.call(arguments,1),e=0,f=0,g=0;return b=a.event.fix(c),b.type="mousewheel",c.wheelDelta&&(e=c.wheelDelta/120),c.detail&&(e=-c.detail/3),g=e,void 0!==c.axis&&c.axis===c.HORIZONTAL_AXIS&&(g=0,f=-1*e),void 0!==c.wheelDeltaY&&(g=c.wheelDeltaY/120),void 0!==c.wheelDeltaX&&(f=-1*c.wheelDeltaX/120),d.unshift(b,e,f,g),(a.event.dispatch||a.event.handle).apply(this,d)}var c=
 ["DOMMouseScroll","mousewheel"];if(a.event.fixHooks)for(var d=c.length;d;)a.event.fixHooks[c[--d]]=a.event.mouseHooks;a.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],b,!1);else this.onmousewheel=b},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],b,!1);else this.onmousewheel=null}},a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}(jQuery);var jvm={inherits:function(a,b){function c(){}c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a,a.parentClass=b},mixin:function(a,b){var c;for(c in b.prototype)b.prototype.hasOwnProperty(c)&&(a.prototype[c]=b.prototype[c])},min:function(a){var b,c=Number.MAX_VALUE;if(a instanceof Array)for(b=0;b<a.length;b++)a[b]<c&&(c=a[b]);else for(b in a)a[b]<c&&(c=a[b]);return c},max:function(a){var b,c=Numbe
 r.MIN_VALUE;if(a instanceof Array)for(b=0;b<a.length;b++)a[b]>c&&(c=a[b]);else for(b in a)a[b]>c&&(c=a[b]);return c},keys:function(a){var b,c=[];for(b in a)c.push(b);return c},values:function(a){var b,c,d=[];for(c=0;c<arguments.length;c++){a=arguments[c];for(b in a)d.push(a[b])}return d}};jvm.$=jQuery,jvm.AbstractElement=function(a,b){this.node=this.createElement(a),this.name=a,this.properties={},b&&this.set(b)},jvm.AbstractElement.prototype.set=function(a,b){var c;if("object"==typeof a)for(c in a)this.properties[c]=a[c],this.applyAttr(c,a[c]);else this.properties[a]=b,this.applyAttr(a,b)},jvm.AbstractElement.prototype.get=function(a){return this.properties[a]},jvm.AbstractElement.prototype.applyAttr=function(a,b){this.node.setAttribute(a,b)},jvm.AbstractElement.prototype.remove=function(){jvm.$(this.node).remove()},jvm.AbstractCanvasElement=function(a,b,c){this.container=a,this.setSize(b,c),this.rootElement=new jvm[this.classPrefix+"GroupElement"],this.node.appendChild(this.rootEle
 ment.node),this.container.appendChild(this.node)},jvm.AbstractCanvasElement.prototype.add=function(a,b){b=b||this.rootElement,b.add(a),a.canvas=this},jvm.AbstractCanvasElement.prototype.addPath=function(a,b,c){var d=new jvm[this.classPrefix+"PathElement"](a,b);return this.add(d,c),d},jvm.AbstractCanvasElement.prototype.addCircle=function(a,b,c){var d=new jvm[this.classPrefix+"CircleElement"](a,b);return this.add(d,c),d},jvm.AbstractCanvasElement.prototype.addGroup=function(a){var b=new jvm[this.classPrefix+"GroupElement"];return a?a.node.appendChild(b.node):this.node.appendChild(b.node),b.canvas=this,b},jvm.AbstractShapeElement=function(a,b,c){this.style=c||{},this.style.current={},this.isHovered=!1,this.isSelected=!1,this.updateStyle()},jvm.AbstractShapeElement.prototype.setHovered=function(a){this.isHovered!==a&&(this.isHovered=a,this.updateStyle())},jvm.AbstractShapeElement.prototype.setSelected=function(a){this.isSelected!==a&&(this.isSelected=a,this.updateStyle(),jvm.$(this.nod
 e).trigger("selected",[a]))},jvm.AbstractShapeElement.prototype.setStyle=function(a,b){var c={};"object"==typeof a?c=a:c[a]=b,jvm.$.extend(this.style.current,c),this.updateStyle()},jvm.AbstractShapeElement.prototype.updateStyle=function(){var a={};jvm.AbstractShapeElement.mergeStyles(a,this.style.initial),jvm.AbstractShapeElement.mergeStyles(a,this.style.current),this.isHovered&&jvm.AbstractShapeElement.mergeStyles(a,this.style.hover),this.isSelected&&(jvm.AbstractShapeElement.mergeStyles(a,this.style.selected),this.isHovered&&jvm.AbstractShapeElement.mergeStyles(a,this.style.selectedHover)),this.set(a)},jvm.AbstractShapeElement.mergeStyles=function(a,b){var c;b=b||{};for(c in b)null===b[c]?delete a[c]:a[c]=b[c]},jvm.SVGElement=function(){jvm.SVGElement.parentClass.apply(this,arguments)},jvm.inherits(jvm.SVGElement,jvm.AbstractElement),jvm.SVGElement.svgns="http://www.w3.org/2000/svg",jvm.SVGElement.prototype.createElement=function(a){return document.createElementNS(jvm.SVGElement.s
 vgns,a)},jvm.SVGElement.prototype.addClass=function(a){this.node.setAttribute("class",a)},jvm.SVGElement.prototype.getElementCtr=function(a){return jvm["SVG"+a]},jvm.SVGElement.prototype.getBBox=function(){return this.node.getBBox()},jvm.SVGGroupElement=function(){jvm.SVGGroupElement.parentClass.call(this,"g")},jvm.inherits(jvm.SVGGroupElement,jvm.SVGElement),jvm.SVGGroupElement.prototype.add=function(a){this.node.appendChild(a.node)},jvm.SVGCanvasElement=function(){this.classPrefix="SVG",jvm.SVGCanvasElement.parentClass.call(this,"svg"),jvm.AbstractCanvasElement.apply(this,arguments)},jvm.inherits(jvm.SVGCanvasElement,jvm.SVGElement),jvm.mixin(jvm.SVGCanvasElement,jvm.AbstractCanvasElement),jvm.SVGCanvasElement.prototype.setSize=function(a,b){this.width=a,this.height=b,this.node.setAttribute("width",a),this.node.setAttribute("height",b)},jvm.SVGCanvasElement.prototype.applyTransformParams=function(a,b,c){this.scale=a,this.transX=b,this.transY=c,this.rootElement.node.setAttribute("t
 ransform","scale("+a+") translate("+b+", "+c+")")},jvm.SVGShapeElement=function(a,b){jvm.SVGShapeElement.parentClass.call(this,a,b),jvm.AbstractShapeElement.apply(this,arguments)},jvm.inherits(jvm.SVGShapeElement,jvm.SVGElement),jvm.mixin(jvm.SVGShapeElement,jvm.AbstractShapeElement),jvm.SVGPathElement=function(a,b){jvm.SVGPathElement.parentClass.call(this,"path",a,b),this.node.setAttribute("fill-rule","evenodd")},jvm.inherits(jvm.SVGPathElement,jvm.SVGShapeElement),jvm.SVGCircleElement=function(a,b){jvm.SVGCircleElement.parentClass.call(this,"circle",a,b)},jvm.inherits(jvm.SVGCircleElement,jvm.SVGShapeElement),jvm.VMLElement=function(){jvm.VMLElement.VMLInitialized||jvm.VMLElement.initializeVML(),jvm.VMLElement.parentClass.apply(this,arguments)},jvm.inherits(jvm.VMLElement,jvm.AbstractElement),jvm.VMLElement.VMLInitialized=!1,jvm.VMLElement.initializeVML=function(){try{document.namespaces.rvml||document.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),jvm.VMLElement.prototype
 .createElement=function(a){return document.createElement("<rvml:"+a+' class="rvml">')}}catch(a){jvm.VMLElement.prototype.createElement=function(a){return document.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}document.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)"),jvm.VMLElement.VMLInitialized=!0},jvm.VMLElement.prototype.getElementCtr=function(a){return jvm["VML"+a]},jvm.VMLElement.prototype.addClass=function(a){jvm.$(this.node).addClass(a)},jvm.VMLElement.prototype.applyAttr=function(a,b){this.node[a]=b},jvm.VMLElement.prototype.getBBox=function(){var a=jvm.$(this.node);return{x:a.position().left/this.canvas.scale,y:a.position().top/this.canvas.scale,width:a.width()/this.canvas.scale,height:a.height()/this.canvas.scale}},jvm.VMLGroupElement=function(){jvm.VMLGroupElement.parentClass.call(this,"group"),this.node.style.left="0px",this.node.style.top="0px",this.node.coordorigin="0 0"},jvm.inherits(jvm.VMLGroupElement,jvm.VMLElement),jv
 m.VMLGroupElement.prototype.add=function(a){this.node.appendChild(a.node)},jvm.VMLCanvasElement=function(){this.classPrefix="VML",jvm.VMLCanvasElement.parentClass.call(this,"group"),jvm.AbstractCanvasElement.apply(this,arguments),this.node.style.position="absolute"},jvm.inherits(jvm.VMLCanvasElement,jvm.VMLElement),jvm.mixin(jvm.VMLCanvasElement,jvm.AbstractCanvasElement),jvm.VMLCanvasElement.prototype.setSize=function(a,b){var c,d,e,f;if(this.width=a,this.height=b,this.node.style.width=a+"px",this.node.style.height=b+"px",this.node.coordsize=a+" "+b,this.node.coordorigin="0 0",this.rootElement){for(c=this.rootElement.node.getElementsByTagName("shape"),e=0,f=c.length;f>e;e++)c[e].coordsize=a+" "+b,c[e].style.width=a+"px",c[e].style.height=b+"px";for(d=this.node.getElementsByTagName("group"),e=0,f=d.length;f>e;e++)d[e].coordsize=a+" "+b,d[e].style.width=a+"px",d[e].style.height=b+"px"}},jvm.VMLCanvasElement.prototype.applyTransformParams=function(a,b,c){this.scale=a,this.transX=b,thi
 s.transY=c,this.rootElement.node.coordorigin=this.width-b-this.width/100+","+(this.height-c-this.height/100),this.rootElement.node.coordsize=this.width/a+","+this.height/a},jvm.VMLShapeElement=function(a,b){jvm.VMLShapeElement.parentClass.call(this,a,b),this.fillElement=new jvm.VMLElement("fill"),this.strokeElement=new jvm.VMLElement("stroke"),this.node.appendChild(this.fillElement.node),this.node.appendChild(this.strokeElement.node),this.node.stroked=!1,jvm.AbstractShapeElement.apply(this,arguments)},jvm.inherits(jvm.VMLShapeElement,jvm.VMLElement),jvm.mixin(jvm.VMLShapeElement,jvm.AbstractShapeElement),jvm.VMLShapeElement.prototype.applyAttr=function(a,b){switch(a){case"fill":this.node.fillcolor=b;break;case"fill-opacity":this.fillElement.node.opacity=Math.round(100*b)+"%";break;case"stroke":this.node.stroked="none"===b?!1:!0,this.node.strokecolor=b;break;case"stroke-opacity":this.strokeElement.node.opacity=Math.round(100*b)+"%";break;case"stroke-width":this.node.stroked=0===parse
 Int(b,10)?!1:!0,this.node.strokeweight=b;break;case"d":this.node.path=jvm.VMLPathElement.pathSvgToVml(b);break;default:jvm.VMLShapeElement.parentClass.prototype.applyAttr.apply(this,arguments)}},jvm.VMLPathElement=function(a,b){var c=new jvm.VMLElement("skew");jvm.VMLPathElement.parentClass.call(this,"shape",a,b),this.node.coordorigin="0 0",c.node.on=!0,c.node.matrix="0.01,0,0,0.01,0,0",c.node.offset="0,0",this.node.appendChild(c.node)},jvm.inherits(jvm.VMLPathElement,jvm.VMLShapeElement),jvm.VMLPathElement.prototype.applyAttr=function(a,b){"d"===a?this.node.path=jvm.VMLPathElement.pathSvgToVml(b):jvm.VMLShapeElement.prototype.applyAttr.call(this,a,b)},jvm.VMLPathElement.pathSvgToVml=function(a){var b,c,d=0,e=0;return a=a.replace(/(-?\d+)e(-?\d+)/g,"0"),a.replace(/([MmLlHhVvCcSs])\s*((?:-?\d*(?:\.\d+)?\s*,?\s*)+)/g,function(a,f,g){g=g.replace(/(\d)-/g,"$1,-").replace(/^\s+/g,"").replace(/\s+$/g,"").replace(/\s+/g,",").split(","),g[0]||g.shift();for(var h=0,i=g.length;i>h;h++)g[h]=Ma
 th.round(100*g[h]);switch(f){case"m":return d+=g[0],e+=g[1],"t"+g.join(",");case"M":return d=g[0],e=g[1],"m"+g.join(",");case"l":return d+=g[0],e+=g[1],"r"+g.join(",");case"L":return d=g[0],e=g[1],"l"+g.join(",");case"h":return d+=g[0],"r"+g[0]+",0";case"H":return d=g[0],"l"+d+","+e;case"v":return e+=g[0],"r0,"+g[0];case"V":return e=g[0],"l"+d+","+e;case"c":return b=d+g[g.length-4],c=e+g[g.length-3],d+=g[g.length-2],e+=g[g.length-1],"v"+g.join(",");case"C":return b=g[g.length-4],c=g[g.length-3],d=g[g.length-2],e=g[g.length-1],"c"+g.join(",");case"s":return g.unshift(e-c),g.unshift(d-b),b=d+g[g.length-4],c=e+g[g.length-3],d+=g[g.length-2],e+=g[g.length-1],"v"+g.join(",");case"S":return g.unshift(e+e-c),g.unshift(d+d-b),b=g[g.length-4],c=g[g.length-3],d=g[g.length-2],e=g[g.length-1],"c"+g.join(",")}return""}).replace(/z/g,"e")},jvm.VMLCircleElement=function(a,b){jvm.VMLCircleElement.parentClass.call(this,"oval",a,b)},jvm.inherits(jvm.VMLCircleElement,jvm.VMLShapeElement),jvm.VMLCircle
 Element.prototype.applyAttr=function(a,b){switch(a){case"r":this.node.style.width=2*b+"px",this.node.style.height=2*b+"px",this.applyAttr("cx",this.get("cx")||0),this.applyAttr("cy",this.get("cy")||0);break;case"cx":if(!b)return;this.node.style.left=b-(this.get("r")||0)+"px";break;case"cy":if(!b)return;this.node.style.top=b-(this.get("r")||0)+"px";break;default:jvm.VMLCircleElement.parentClass.prototype.applyAttr.call(this,a,b)}},jvm.VectorCanvas=function(a,b,c){return this.mode=window.SVGAngle?"svg":"vml",this.impl="svg"==this.mode?new jvm.SVGCanvasElement(a,b,c):new jvm.VMLCanvasElement(a,b,c),this.impl},jvm.SimpleScale=function(a){this.scale=a},jvm.SimpleScale.prototype.getValue=function(a){return a},jvm.OrdinalScale=function(a){this.scale=a},jvm.OrdinalScale.prototype.getValue=function(a){return this.scale[a]},jvm.NumericScale=function(a,b,c,d){this.scale=[],b=b||"linear",a&&this.setScale(a),b&&this.setNormalizeFunction(b),c&&this.setMin(c),d&&this.setMax(d)},jvm.NumericScale.pr
 ototype={setMin:function(a){this.clearMinValue=a,this.minValue="function"==typeof this.normalize?this.normalize(a):a},setMax:function(a){this.clearMaxValue=a,this.maxValue="function"==typeof this.normalize?this.normalize(a):a},setScale:function(a){var b;for(b=0;b<a.length;b++)this.scale[b]=[a[b]]},setNormalizeFunction:function(a){"polynomial"===a?this.normalize=function(a){return Math.pow(a,.2)}:"linear"===a?delete this.normalize:this.normalize=a,this.setMin(this.clearMinValue),this.setMax(this.clearMaxValue)},getValue:function(a){var b,c,d=[],e=0,f=0;for("function"==typeof this.normalize&&(a=this.normalize(a)),f=0;f<this.scale.length-1;f++)b=this.vectorLength(this.vectorSubtract(this.scale[f+1],this.scale[f])),d.push(b),e+=b;for(c=(this.maxValue-this.minValue)/e,f=0;f<d.length;f++)d[f]*=c;for(f=0,a-=this.minValue;a-d[f]>=0;)a-=d[f],f++;return a=f==this.scale.length-1?this.vectorToNum(this.scale[f]):this.vectorToNum(this.vectorAdd(this.scale[f],this.vectorMult(this.vectorSubtract(th
 is.scale[f+1],this.scale[f]),a/d[f])))},vectorToNum:function(a){var b,c=0;for(b=0;b<a.length;b++)c+=Math.round(a[b])*Math.pow(256,a.length-b-1);return c},vectorSubtract:function(a,b){var c,d=[];for(c=0;c<a.length;c++)d[c]=a[c]-b[c];return d},vectorAdd:function(a,b){var c,d=[];for(c=0;c<a.length;c++)d[c]=a[c]+b[c];return d},vectorMult:function(a,b){var c,d=[];for(c=0;c<a.length;c++)d[c]=a[c]*b;return d},vectorLength:function(a){var b,c=0;for(b=0;b<a.length;b++)c+=a[b]*a[b];return Math.sqrt(c)}},jvm.ColorScale=function(){jvm.ColorScale.parentClass.apply(this,arguments)},jvm.inherits(jvm.ColorScale,jvm.NumericScale),jvm.ColorScale.prototype.setScale=function(a){var b;for(b=0;b<a.length;b++)this.scale[b]=jvm.ColorScale.rgbToArray(a[b])},jvm.ColorScale.prototype.getValue=function(a){return jvm.ColorScale.numToRgb(jvm.ColorScale.parentClass.prototype.getValue.call(this,a))},jvm.ColorScale.arrayToRgb=function(a){var b,c,d="#";for(c=0;c<a.length;c++)b=a[c].toString(16),d+=1==b.length?"0"+b:
 b;return d},jvm.ColorScale.numToRgb=function(a){for(a=a.toString(16);a.length<6;)a="0"+a;return"#"+a},jvm.ColorScale.rgbToArray=function(a){return a=a.substr(1),[parseInt(a.substr(0,2),16),parseInt(a.substr(2,2),16),parseInt(a.substr(4,2),16)]},jvm.DataSeries=function(a,b){var c;a=a||{},a.attribute=a.attribute||"fill",this.elements=b,this.params=a,a.attributes&&this.setAttributes(a.attributes),jvm.$.isArray(a.scale)?(c="fill"===a.attribute||"stroke"===a.attribute?jvm.ColorScale:jvm.NumericScale,this.scale=new c(a.scale,a.normalizeFunction,a.min,a.max)):this.scale=a.scale?new jvm.OrdinalScale(a.scale):new jvm.SimpleScale(a.scale),this.values=a.values||{},this.setValues(this.values)},jvm.DataSeries.prototype={setAttributes:function(a,b){var c,d=a;if("string"==typeof a)this.elements[a]&&this.elements[a].setStyle(this.params.attribute,b);else for(c in d)this.elements[c]&&this.elements[c].element.setStyle(this.params.attribute,d[c])},setValues:function(a){var b,c,d=Number.MIN_VALUE,e=Num
 ber.MAX_VALUE,f={};if(this.scale instanceof jvm.OrdinalScale||this.scale instanceof jvm.SimpleScale)for(c in a)f[c]=a[c]?this.scale.getValue(a[c]):this.elements[c].element.style.initial[this.params.attribute];else{if(!this.params.min||!this.params.max){for(c in a)b=parseFloat(a[c]),b>d&&(d=a[c]),e>b&&(e=b);this.params.min||this.scale.setMin(e),this.params.max||this.scale.setMax(d),this.params.min=e,this.params.max=d}for(c in a)b=parseFloat(a[c]),f[c]=isNaN(b)?this.elements[c].element.style.initial[this.params.attribute]:this.scale.getValue(b)}this.setAttributes(f),jvm.$.extend(this.values,a)},clear:function(){var a,b={};for(a in this.values)this.elements[a]&&(b[a]=this.elements[a].element.style.initial[this.params.attribute]);this.setAttributes(b),this.values={}},setScale:function(a){this.scale.setScale(a),this.values&&this.setValues(this.values)},setNormalizeFunction:function(a){this.scale.setNormalizeFunction(a),this.values&&this.setValues(this.values)}},jvm.Proj={degRad:180/Math.
 PI,radDeg:Math.PI/180,radius:6381372,sgn:function(a){return a>0?1:0>a?-1:a},mill:function(a,b,c){return{x:this.radius*(b-c)*this.radDeg,y:-this.radius*Math.log(Math.tan((45+.4*a)*this.radDeg))/.8}},mill_inv:function(a,b,c){return{lat:(2.5*Math.atan(Math.exp(.8*b/this.radius))-5*Math.PI/8)*this.degRad,lng:(c*this.radDeg+a/this.radius)*this.degRad}},merc:function(a,b,c){return{x:this.radius*(b-c)*this.radDeg,y:-this.radius*Math.log(Math.tan(Math.PI/4+a*Math.PI/360))}},merc_inv:function(a,b,c){return{lat:(2*Math.atan(Math.exp(b/this.radius))-Math.PI/2)*this.degRad,lng:(c*this.radDeg+a/this.radius)*this.degRad}},aea:function(a,b,c){var d=0,e=c*this.radDeg,f=29.5*this.radDeg,g=45.5*this.radDeg,h=a*this.radDeg,i=b*this.radDeg,j=(Math.sin(f)+Math.sin(g))/2,k=Math.cos(f)*Math.cos(f)+2*j*Math.sin(f),l=j*(i-e),m=Math.sqrt(k-2*j*Math.sin(h))/j,n=Math.sqrt(k-2*j*Math.sin(d))/j;return{x:m*Math.sin(l)*this.radius,y:-(n-m*Math.cos(l))*this.radius}},aea_inv:function(a,b,c){var d=a/this.radius,e=b/t
 his.radius,f=0,g=c*this.radDeg,h=29.5*this.radDeg,i=45.5*this.radDeg,j=(Math.sin(h)+Math.sin(i))/2,k=Math.cos(h)*Math.cos(h)+2*j*Math.sin(h),l=Math.sqrt(k-2*j*Math.sin(f))/j,m=Math.sqrt(d*d+(l-e)*(l-e)),n=Math.atan(d/(l-e));return{lat:Math.asin((k-m*m*j*j)/(2*j))*this.degRad,lng:(g+n/j)*this.degRad}},lcc:function(a,b,c){var d=0,e=c*this.radDeg,f=b*this.radDeg,g=33*this.radDeg,h=45*this.radDeg,i=a*this.radDeg,j=Math.log(Math.cos(g)*(1/Math.cos(h)))/Math.log(Math.tan(Math.PI/4+h/2)*(1/Math.tan(Math.PI/4+g/2))),k=Math.cos(g)*Math.pow(Math.tan(Math.PI/4+g/2),j)/j,l=k*Math.pow(1/Math.tan(Math.PI/4+i/2),j),m=k*Math.pow(1/Math.tan(Math.PI/4+d/2),j);return{x:l*Math.sin(j*(f-e))*this.radius,y:-(m-l*Math.cos(j*(f-e)))*this.radius}},lcc_inv:function(a,b,c){var d=a/this.radius,e=b/this.radius,f=0,g=c*this.radDeg,h=33*this.radDeg,i=45*this.radDeg,j=Math.log(Math.cos(h)*(1/Math.cos(i)))/Math.log(Math.tan(Math.PI/4+i/2)*(1/Math.tan(Math.PI/4+h/2))),k=Math.cos(h)*Math.pow(Math.tan(Math.PI/4+h/2),j)
 /j,l=k*Math.pow(1/Math.tan(Math.PI/4+f/2),j),m=this.sgn(j)*Math.sqrt(d*d+(l-e)*(l-e)),n=Math.atan(d/(l-e));return{lat:(2*Math.atan(Math.pow(k/m,1/j))-Math.PI/2)*this.degRad,lng:(g+n/j)*this.degRad}}},jvm.WorldMap=function(a){var b,c=this;if(this.params=jvm.$.extend(!0,{},jvm.WorldMap.defaultParams,a),!jvm.WorldMap.maps[this.params.map])throw new Error("Attempt to use map which was not loaded: "+this.params.map);this.mapData=jvm.WorldMap.maps[this.params.map],this.markers={},this.regions={},this.regionsColors={},this.regionsData={},this.container=jvm.$("<div>").css({width:"100%",height:"100%"}).addClass("jvectormap-container"),this.params.container.append(this.container),this.container.data("mapObject",this),this.container.css({position:"relative",overflow:"hidden"}),this.defaultWidth=this.mapData.width,this.defaultHeight=this.mapData.height,this.setBackgroundColor(this.params.backgroundColor),this.onResize=function(){c.setSize()},jvm.$(window).resize(this.onResize);for(b in jvm.Worl
 dMap.apiEvents)this.params[b]&&this.container.bind(jvm.WorldMap.apiEvents[b]+".jvectormap",this.params[b]);this.canvas=new jvm.VectorCanvas(this.container[0],this.width,this.height),"ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch?this.params.bindTouchEvents&&this.bindContainerTouchEvents():this.bindContainerEvents(),this.bindElementEvents(),this.createLabel(),this.params.zoomButtons&&this.bindZoomButtons(),this.createRegions(),this.createMarkers(this.params.markers||{}),this.setSize(),this.params.focusOn&&("object"==typeof this.params.focusOn?this.setFocus.call(this,this.params.focusOn.scale,this.params.focusOn.x,this.params.focusOn.y):this.setFocus.call(this,this.params.focusOn)),this.params.selectedRegions&&this.setSelectedRegions(this.params.selectedRegions),this.params.selectedMarkers&&this.setSelectedMarkers(this.params.selectedMarkers),this.params.series&&this.createSeries()},jvm.WorldMap.prototype={transX:0,transY:0,scale:1,baseTransX:0,baseTr
 ansY:0,baseScale:1,width:0,height:0,setBackgroundColor:function(a){this.container.css("background-color",a)},resize:function(){var a=this.baseScale;this.width/this.height>this.defaultWidth/this.defaultHeight?(this.baseScale=this.height/this.defaultHeight,this.baseTransX=Math.abs(this.width-this.defaultWidth*this.baseScale)/(2*this.baseScale)):(this.baseScale=this.width/this.defaultWidth,this.baseTransY=Math.abs(this.height-this.defaultHeight*this.baseScale)/(2*this.baseScale)),this.scale*=this.baseScale/a,this.transX*=this.baseScale/a,this.transY*=this.baseScale/a},setSize:function(){this.width=this.container.width(),this.height=this.container.height(),this.resize(),this.canvas.setSize(this.width,this.height),this.applyTransform()},reset:function(){var a,b;for(a in this.series)for(b=0;b<this.series[a].length;b++)this.series[a][b].clear();this.scale=this.baseScale,this.transX=this.baseTransX,this.transY=this.baseTransY,this.applyTransform()},applyTransform:function(){var a,b,c,d;this
 .defaultWidth*this.scale<=this.width?(a=(this.width-this.defaultWidth*this.scale)/(2*this.scale),c=(this.width-this.defaultWidth*this.scale)/(2*this.scale)):(a=0,c=(this.width-this.defaultWidth*this.scale)/this.scale),this.defaultHeight*this.scale<=this.height?(b=(this.height-this.defaultHeight*this.scale)/(2*this.scale),d=(this.height-this.defaultHeight*this.scale)/(2*this.scale)):(b=0,d=(this.height-this.defaultHeight*this.scale)/this.scale),this.transY>b?this.transY=b:this.transY<d&&(this.transY=d),this.transX>a?this.transX=a:this.transX<c&&(this.transX=c),this.canvas.applyTransformParams(this.scale,this.transX,this.transY),this.markers&&this.repositionMarkers(),this.container.trigger("viewportChange",[this.scale/this.baseScale,this.transX,this.transY])},bindContainerEvents:function(){var a,b,c=!1,d=this;this.container.mousemove(function(e){return c&&(d.transX-=(a-e.pageX)/d.scale,d.transY-=(b-e.pageY)/d.scale,d.applyTransform(),a=e.pageX,b=e.pageY),!1}).mousedown(function(d){ret
 urn c=!0,a=d.pageX,b=d.pageY,!1}),jvm.$("body").mouseup(function(){c=!1}),this.params.zoomOnScroll&&this.container.mousewheel(function(a,b,c,e){var f=jvm.$(d.container).offset(),g=a.pageX-f.left,h=a.pageY-f.top,i=Math.pow(1.3,e);d.label.hide(),d.setScale(d.scale*i,g,h),a.preventDefault()})},bindContainerTouchEvents:function(){var a,b,c,d,e,f,g,h=this,i=function(i){var j,k,l,m,n=i.originalEvent.touches;"touchstart"==i.type&&(g=0),1==n.length?(1==g&&(l=h.transX,m=h.transY,h.transX-=(c-n[0].pageX)/h.scale,h.transY-=(d-n[0].pageY)/h.scale,h.applyTransform(),h.label.hide(),(l!=h.transX||m!=h.transY)&&i.preventDefault()),c=n[0].pageX,d=n[0].pageY):2==n.length&&(2==g?(k=Math.sqrt(Math.pow(n[0].pageX-n[1].pageX,2)+Math.pow(n[0].pageY-n[1].pageY,2))/b,h.setScale(a*k,e,f),h.label.hide(),i.preventDefault()):(j=jvm.$(h.container).offset(),e=n[0].pageX>n[1].pageX?n[1].pageX+(n[0].pageX-n[1].pageX)/2:n[0].pageX+(n[1].pageX-n[0].pageX)/2,f=n[0].pageY>n[1].pageY?n[1].pageY+(n[0].pageY-n[1].pageY)/2
 :n[0].pageY+(n[1].pageY-n[0].pageY)/2,e-=j.left,f-=j.top,a=h.scale,b=Math.sqrt(Math.pow(n[0].pageX-n[1].pageX,2)+Math.pow(n[0].pageY-n[1].pageY,2)))),g=n.length};jvm.$(this.container).bind("touchstart",i),jvm.$(this.container).bind("touchmove",i)},bindElementEvents:function(){var a,b=this;this.container.mousemove(function(){a=!0}),this.container.delegate("[class~='jvectormap-element']","mouseover mouseout",function(a){var c=jvm.$(this).attr("class").baseVal?jvm.$(this).attr("class").baseVal:jvm.$(this).attr("class"),d=-1===c.indexOf("jvectormap-region")?"marker":"region",e="region"==d?jvm.$(this).attr("data-code"):jvm.$(this).attr("data-index"),f="region"==d?b.regions[e].element:b.markers[e].element,g="region"==d?b.mapData.paths[e].name:b.markers[e].config.name||"",h=jvm.$.Event(d+"LabelShow.jvectormap"),i=jvm.$.Event(d+"Over.jvectormap");"mouseover"==a.type?(b.container.trigger(i,[e]),i.isDefaultPrevented()||f.setHovered(!0),b.label.text(g),b.container.trigger(h,[b.label,e]),h.isDe
 faultPrevented()||(b.label.show(),b.labelWidth=b.label.width(),b.labelHeight=b.label.height())):(f.setHovered(!1),b.label.hide(),b.container.trigger(d+"Out.jvectormap",[e]))}),this.container.delegate("[class~='jvectormap-element']","mousedown",function(){a=!1}),this.container.delegate("[class~='jvectormap-element']","mouseup",function(){var c=jvm.$(this).attr("class").baseVal?jvm.$(this).attr("class").baseVal:jvm.$(this).attr("class"),d=-1===c.indexOf("jvectormap-region")?"marker":"region",e="region"==d?jvm.$(this).attr("data-code"):jvm.$(this).attr("data-index"),f=jvm.$.Event(d+"Click.jvectormap"),g="region"==d?b.regions[e].element:b.markers[e].element;a||(b.container.trigger(f,[e]),("region"===d&&b.params.regionsSelectable||"marker"===d&&b.params.markersSelectable)&&(f.isDefaultPrevented()||(b.params[d+"sSelectableOne"]&&b.clearSelected(d+"s"),g.setSelected(!g.isSelected))))})},bindZoomButtons:function(){var a=this;jvm.$("<div/>").addClass("jvectormap-zoomin").text("+").appendTo(t
 his.container),jvm.$("<div/>").addClass("jvectormap-zoomout").html("&#x2212;").appendTo(this.container),this.container.find(".jvectormap-zoomin").click(function(){a.setScale(a.scale*a.params.zoomStep,a.width/2,a.height/2)}),this.container.find(".jvectormap-zoomout").click(function(){a.setScale(a.scale/a.params.zoomStep,a.width/2,a.height/2)})},createLabel:function(){var a=this;this.label=jvm.$("<div/>").addClass("jvectormap-label").appendTo(jvm.$("body")),this.container.mousemove(function(b){var c=b.pageX-15-a.labelWidth,d=b.pageY-15-a.labelHeight;5>c&&(c=b.pageX+15),5>d&&(d=b.pageY+15),a.label.is(":visible")&&a.label.css({left:c,top:d})})},setScale:function(a,b,c,d){var e,f=jvm.$.Event("zoom.jvectormap");a>this.params.zoomMax*this.baseScale?a=this.params.zoomMax*this.baseScale:a<this.params.zoomMin*this.baseScale&&(a=this.params.zoomMin*this.baseScale),"undefined"!=typeof b&&"undefined"!=typeof c&&(e=a/this.scale,d?(this.transX=b+this.defaultWidth*(this.width/(this.defaultWidth*a))
 /2,this.transY=c+this.defaultHeight*(this.height/(this.defaultHeight*a))/2):(this.transX-=(e-1)/a*b,this.transY-=(e-1)/a*c)),this.scale=a,this.applyTransform(),this.container.trigger(f,[a/this.baseScale])},setFocus:function(a,b,c){var d,e,f,g,h;if(jvm.$.isArray(a)||this.regions[a]){for(g=jvm.$.isArray(a)?a:[a],h=0;h<g.length;h++)this.regions[g[h]]&&(e=this.regions[g[h]].element.getBBox(),e&&("undefined"==typeof d?d=e:(f={x:Math.min(d.x,e.x),y:Math.min(d.y,e.y),width:Math.max(d.x+d.width,e.x+e.width)-Math.min(d.x,e.x),height:Math.max(d.y+d.height,e.y+e.height)-Math.min(d.y,e.y)},d=f)));this.setScale(Math.min(this.width/d.width,this.height/d.height),-(d.x+d.width/2),-(d.y+d.height/2),!0)}else a*=this.baseScale,this.setScale(a,-b*this.defaultWidth,-c*this.defaultHeight,!0)},getSelected:function(a){var b,c=[];for(b in this[a])this[a][b].element.isSelected&&c.push(b);return c},getSelectedRegions:function(){return this.getSelected("regions")},getSelectedMarkers:function(){return this.getS
 elected("markers")},setSelected:function(a,b){var c;if("object"!=typeof b&&(b=[b]),jvm.$.isArray(b))for(c=0;c<b.length;c++)this[a][b[c]].element.setSelected(!0);else for(c in b)this[a][c].element.setSelected(!!b[c])},setSelectedRegions:function(a){this.setSelected("regions",a)},setSelectedMarkers:function(a){this.setSelected("markers",a)},clearSelected:function(a){var b,c={},d=this.getSelected(a);for(b=0;b<d.length;b++)c[d[b]]=!1;this.setSelected(a,c)},clearSelectedRegions:function(){this.clearSelected("regions")},clearSelectedMarkers:function(){this.clearSelected("markers")},getMapObject:function(){return this},getRegionName:function(a){return this.mapData.paths[a].name},createRegions:function(){var a,b,c=this;for(a in this.mapData.paths)b=this.canvas.addPath({d:this.mapData.paths[a].path,"data-code":a},jvm.$.extend(!0,{},this.params.regionStyle)),jvm.$(b.node).bind("selected",function(a,b){c.container.trigger("regionSelected.jvectormap",[jvm.$(this).attr("data-code"),b,c.getSelect
 edRegions()])}),b.addClass("jvectormap-region jvectormap-element"),this.regions[a]={element:b,config:this.mapData.paths[a]}},createMarkers:function(a){var b,c,d,e,f,g=this;if(this.markersGroup=this.markersGroup||this.canvas.addGroup(),jvm.$.isArray(a))for(f=a.slice(),a={},b=0;b<f.length;b++)a[b]=f[b];for(b in a)e=a[b]instanceof Array?{latLng:a[b]}:a[b],d=this.getMarkerPosition(e),d!==!1&&(c=this.canvas.addCircle({"data-index":b,cx:d.x,cy:d.y},jvm.$.extend(!0,{},this.params.markerStyle,{initial:e.style||{}}),this.markersGroup),c.addClass("jvectormap-marker jvectormap-element"),jvm.$(c.node).bind("selected",function(a,b){g.container.trigger("markerSelected.jvectormap",[jvm.$(this).attr("data-index"),b,g.getSelectedMarkers()])}),this.markers[b]&&this.removeMarkers([b]),this.markers[b]={element:c,config:e})},repositionMarkers:function(){var a,b;for(a in this.markers)b=this.getMarkerPosition(this.markers[a].config),b!==!1&&this.markers[a].element.setStyle({cx:b.x,cy:b.y})},getMarkerPosit
 ion:function(a){return jvm.WorldMap.maps[this.params.map].projection?this.latLngToPoint.apply(this,a.latLng||[0,0]):{x:a.coords[0]*this.scale+this.transX*this.scale,y:a.coords[1]*this.scale+this.transY*this.scale}},addMarker:function(a,b,c){var d,e,f={},g=[],c=c||[];for(f[a]=b,e=0;e<c.length;e++)d={},d[a]=c[e],g.push(d);this.addMarkers(f,g)},addMarkers:function(a,b){var c;for(b=b||[],this.createMarkers(a),c=0;c<b.length;c++)this.series.markers[c].setValues(b[c]||{})},removeMarkers:function(a){var b;for(b=0;b<a.length;b++)this.markers[a[b]].element.remove(),delete this.markers[a[b]]},removeAllMarkers:function(){var a,b=[];for(a in this.markers)b.push(a);this.removeMarkers(b)},latLngToPoint:function(a,b){{var c,d,e,f=jvm.WorldMap.maps[this.params.map].projection,g=f.centralMeridian;this.width-2*this.baseTransX*this.baseScale,this.height-2*this.baseTransY*this.baseScale,this.scale/this.baseScale}return-180+g>b&&(b+=360),c=jvm.Proj[f.type](a,b,g),d=this.getInsetForPoint(c.x,c.y),d?(e=d.
 bbox,c.x=(c.x-e[0].x)/(e[1].x-e[0].x)*d.width*this.scale,c.y=(c.y-e[0].y)/(e[1].y-e[0].y)*d.height*this.scale,{x:c.x+this.transX*this.scale+d.left*this.scale,y:c.y+this.transY*this.scale+d.top*this.scale}):!1},pointToLatLng:function(a,b){var c,d,e,f,g,h=jvm.WorldMap.maps[this.params.map].projection,i=h.centralMeridian,j=jvm.WorldMap.maps[this.params.map].insets;for(c=0;c<j.length;c++)if(d=j[c],e=d.bbox,f=a-(this.transX*this.scale+d.left*this.scale),g=b-(this.transY*this.scale+d.top*this.scale),f=f/(d.width*this.scale)*(e[1].x-e[0].x)+e[0].x,g=g/(d.height*this.scale)*(e[1].y-e[0].y)+e[0].y,f>e[0].x&&f<e[1].x&&g>e[0].y&&g<e[1].y)return jvm.Proj[h.type+"_inv"](f,-g,i);return!1},getInsetForPoint:function(a,b){var c,d,e=jvm.WorldMap.maps[this.params.map].insets;for(c=0;c<e.length;c++)if(d=e[c].bbox,a>d[0].x&&a<d[1].x&&b>d[0].y&&b<d[1].y)return e[c]},createSeries:function(){var a,b;this.series={markers:[],regions:[]};for(b in this.params.series)for(a=0;a<this.params.series[b].length;a++)t
 his.series[b][a]=new jvm.DataSeries(this.params.series[b][a],this[b])},remove:function(){this.label.remove(),this.container.remove(),jvm.$(window).unbind("resize",this.onResize)
+}},jvm.WorldMap.maps={},jvm.WorldMap.defaultParams={map:"world_mill_en",backgroundColor:"#505050",zoomButtons:!0,zoomOnScroll:!0,zoomMax:8,zoomMin:1,zoomStep:1.6,regionsSelectable:!1,markersSelectable:!1,bindTouchEvents:!0,regionStyle:{initial:{fill:"white","fill-opacity":1,stroke:"none","stroke-width":0,"stroke-opacity":1},hover:{"fill-opacity":.8},selected:{fill:"yellow"},selectedHover:{}},markerStyle:{initial:{fill:"grey",stroke:"#505050","fill-opacity":1,"stroke-width":1,"stroke-opacity":1,r:5},hover:{stroke:"black","stroke-width":2},selected:{fill:"blue"},selectedHover:{}}},jvm.WorldMap.apiEvents={onRegionLabelShow:"regionLabelShow",onRegionOver:"regionOver",onRegionOut:"regionOut",onRegionClick:"regionClick",onRegionSelected:"regionSelected",onMarkerLabelShow:"markerLabelShow",onMarkerOver:"markerOver",onMarkerOut:"markerOut",onMarkerClick:"markerClick",onMarkerSelected:"markerSelected",onViewportChange:"viewportChange"},define("panels/map/lib/jquery.jvectormap.min",function()
 {}),define("panels/map/module",["angular","app","lodash","jquery","config","./lib/jquery.jvectormap.min"],function(a,b,c,d){var e=a.module("kibana.panels.map",[]);b.useModule(e),e.controller("map",["$scope","$rootScope","querySrv","dashboard","filterSrv",function(b,d,e,f,g){b.panelMeta={editorTabs:[{title:"Queries",src:"app/partials/querySelect.html"}],modals:[{description:"Inspect",icon:"icon-info-sign",partial:"app/partials/inspector.html",show:b.panel.spyable}],status:"Stable",description:"Displays a map of shaded regions using a field containing a 2 letter country , or US state, code. Regions with more hit are shaded darker. Node that this does use the Elasticsearch terms facet, so it is important that you set it to the correct field."};var h={map:"world",colors:["#A0E2E2","#265656"],size:100,exclude:[],spyable:!0,queries:{mode:"all",ids:[]}};c.defaults(b.panel,h),b.init=function(){b.$on("refresh",function(){b.get_data()}),b.get_data()},b.get_data=function(){if(0!==f.indices.len
 gth){b.panelMeta.loading=!0;var a,d,h;b.panel.queries.ids=e.idsByMode(b.panel.queries),a=b.ejs.Request().indices(f.indices),h=e.getQueryObjs(b.panel.queries.ids),d=b.ejs.BoolQuery(),c.each(h,function(a){d=d.should(e.toEjsObj(a))}),a=a.facet(b.ejs.TermsFacet("map").field(b.panel.field).size(b.panel.size).exclude(b.panel.exclude).facetFilter(b.ejs.QueryFilter(b.ejs.FilteredQuery(d,g.getBoolFilter(g.ids()))))).size(0),b.populate_modal(a);var i=a.doSearch();i.then(function(a){b.panelMeta.loading=!1,b.hits=a.hits.total,b.data={},c.each(a.facets.map.terms,function(a){b.data[a.term.toUpperCase()]=a.count}),b.$emit("render")})}},b.populate_modal=function(c){b.inspector=a.toJson(JSON.parse(c.toString()),!0)},b.build_search=function(a,b){g.set({type:"field",field:a,query:b,mandate:"must"})}}]),e.directive("map",function(){return{restrict:"A",link:function(a,b){function e(){b.empty(),b.css({height:a.panel.height||a.row.height}),d(".jvectormap-zoomin,.jvectormap-zoomout,.jvectormap-label").remo
 ve(),require(["./panels/map/lib/map."+a.panel.map],function(){b.vectorMap({map:a.panel.map,regionStyle:{initial:{fill:"#8c8c8c"}},zoomOnScroll:!1,backgroundColor:null,series:{regions:[{values:a.data,scale:a.panel.colors,normalizeFunction:"polynomial"}]},onRegionLabelShow:function(d,e,f){b.children(".map-legend").show();var g=c.isUndefined(a.data[f])?0:a.data[f];b.children(".map-legend").text(e.text()+": "+g)},onRegionOut:function(){b.children(".map-legend").hide()},onRegionClick:function(b,d){var e=c.isUndefined(a.data[d])?0:a.data[d];0!==e&&a.build_search(a.panel.field,d)}}),b.prepend('<span class="map-legend"></span>'),b.children(".map-legend").hide()})}b.html('<center><img src="img/load_big.gif"></center>'),a.$on("render",function(){f()}),b.closest(".panel").resize(function(){b.empty()});var f=c.debounce(e,200)}}})});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/query/editor.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/query/editor.html b/kibana/src/main/resources/app/panels/query/editor.html
new file mode 100644
index 0000000..021fc58
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/query/editor.html
@@ -0,0 +1 @@
+<div><div class="row-fluid"><div class="span12">No options here</div></div></div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/query/editors/lucene.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/query/editors/lucene.html b/kibana/src/main/resources/app/panels/query/editors/lucene.html
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/query/editors/regex.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/query/editors/regex.html b/kibana/src/main/resources/app/panels/query/editors/regex.html
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/query/editors/topN.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/query/editors/topN.html b/kibana/src/main/resources/app/panels/query/editors/topN.html
new file mode 100644
index 0000000..57679fc
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/query/editors/topN.html
@@ -0,0 +1 @@
+<fieldset><label class="small">Field</label><br><input ng-model="dashboard.current.services.query.list[id].field" type="text" bs-typeahead="fields.list" placeholder="Field"><p><label class="small">Count</label><br><input ng-model="dashboard.current.services.query.list[id].size" type="number"></p><p><label class="small">Union</label><br><select class="input-small" ng-model="dashboard.current.services.query.list[id].union"><option ng-repeat="mode in ['none','AND','OR']">{{mode}}</option></select></p></fieldset>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/query/help/lucene.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/query/help/lucene.html b/kibana/src/main/resources/app/panels/query/help/lucene.html
new file mode 100644
index 0000000..823b989
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/query/help/lucene.html
@@ -0,0 +1 @@
+The lucene query type uses <a target="_blank" href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-string-syntax">LUCENE query string syntax</a> to find matching documents or events within Elasticsearch.<h4>Examples</h4><ul class="unstyled" type="disc"><li class="listitem"><p class="simpara"><code class="literal">status</code> field contains <code class="literal">active</code></p><pre class="literallayout">status:active</pre></li><li class="listitem"><p class="simpara"><code class="literal">title</code> field contains <code class="literal">quick</code> or <code class="literal">brown</code></p><pre class="literallayout">title:(quick brown)</pre></li><li class="listitem"><p class="simpara"><code class="literal">author</code> field contains the exact phrase <code class="literal">"john smith"</code></p><pre class="literallayout">author:"John Smith"</pre></li></ul><p>Wildcard searches can be run on individual terms, using <co
 de class="literal">?</code> to replacea single character, and <code class="literal">*</code> to replace zero or more characters:</p><pre class="literallayout">qu?ck bro*</pre><ul class="unstyled" type="disc"><li class="listitem"><p class="simpara">Numbers 1..5</p><pre class="literallayout">count:[1 TO 5]</pre></li><li class="listitem"><p class="simpara">Tags between <code class="literal">alpha</code> and <code class="literal">omega</code>, excluding <code class="literal">alpha</code> and <code class="literal">omega</code>:</p><pre class="literallayout">tag:{alpha TO omega}</pre></li><li class="listitem"><p class="simpara">Numbers from 10 upwards</p><pre class="literallayout">count:[10 TO *]</pre></li></ul>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/query/help/regex.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/query/help/regex.html b/kibana/src/main/resources/app/panels/query/help/regex.html
new file mode 100644
index 0000000..6824928
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/query/help/regex.html
@@ -0,0 +1 @@
+The regex query allows you to use regular expressions to match terms in the <i>_all</i> field.A detailed overview of lucene's regex engine is available here: <a target="_blank" href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html#regexp-syntax">Regular expressions in Elasticsearch</a><h5>A note on anchoring</h5>Lucene’s patterns are always anchored. The pattern provided must match the entire string. For string "abcde":<p><code>ab.*</code> will match<br><code>abcd</code> will not match</p>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/query/help/topN.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/query/help/topN.html b/kibana/src/main/resources/app/panels/query/help/topN.html
new file mode 100644
index 0000000..c8580b6
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/query/help/topN.html
@@ -0,0 +1 @@
+The topN query uses an <a target="_blank" href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-facet.html">Elasticsearch terms facet</a> to find the most common terms in a field and build queries from the result. The topN query uses <a target="_blank" href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-string-syntax">LUCENE query string syntax</a><h4>Parameters</h4><ul><li><strong>Field</strong> / The field to facet on. Fields with a large number of unique terms will <a target="_blank" href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-facet.html#_memory_considerations_2">use more memory</a> to calculate.</li><li><strong>Count</strong> / How many queries to generate. The resulting queries will use brightness variations on the original query's color for their own.</li><li><strong>Union</strong> / The relation the generated queries hav
 e to the original. For example, if your field was set to 'extension', your original query was "user:B.Awesome" and your union was AND. Kibana might generate the following example query: <code>extension:"html" AND (user:B.Awesome)</code></li></ul>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/query/helpModal.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/query/helpModal.html b/kibana/src/main/resources/app/panels/query/helpModal.html
new file mode 100644
index 0000000..f21e1af
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/query/helpModal.html
@@ -0,0 +1 @@
+<div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><h3>About the {{help.type}} query</h3></div><div class="modal-body"><div ng-include="queryHelpPath(help.type)"></div></div><div class="modal-footer"><button type="button" class="btn btn-danger" ng-click="dismiss()">Close</button></div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/query/meta.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/query/meta.html b/kibana/src/main/resources/app/panels/query/meta.html
new file mode 100644
index 0000000..0cf0281
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/query/meta.html
@@ -0,0 +1,3 @@
+<div class="panel-query-meta row-fluid" style="width:260px"><style>.panel-query-meta fieldset label {
+      margin-top: 3px;
+    }</style><fieldset><select class="input-small" ng-model="dashboard.current.services.query.list[id].type" ng-change="typeChange(dashboard.current.services.query.list[id])"><option ng-repeat="type in queryTypes">{{type}}</option></select>&nbsp<a href="" class="small" ng-click="queryHelp(dashboard.current.services.query.list[id].type)">About the {{dashboard.current.services.query.list[id].type}} query</a><hr class="small"><label class="small">Legend value</label><input type="text" ng-model="dashboard.current.services.query.list[id].alias" placeholder="Alias..."></fieldset><div ng-include="" src="queryConfig(dashboard.current.services.query.list[id].type)"></div><hr class="small"><div><i ng-repeat="color in querySrv.colors" class="pointer" ng-class="{'icon-circle-blank':dashboard.current.services.query.list[id].color == color,'icon-circle':dashboard.current.services.query.list[id].color != color}" ng-style="{color:color}" ng-click="dashboard.current.services.query.list[id].color = c
 olor;render();"></i></div><div class="pull-right"><a class="btn btn-mini" ng-click="dashboard.current.services.query.list[id].enable=false;dashboard.refresh();dismiss();" class="pointer">Deactivate</a> <a class="btn btn-mini" ng-class="{active:dashboard.current.services.query.list[id].pin}" ng-click="toggle_pin(id);dismiss();" class="pointer">Pin <i class="icon-pushpin"></i></a><input class="btn btn-mini" ng-click="dashboard.refresh();dismiss();" type="submit" value="Close"></div></div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/query/module.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/query/module.html b/kibana/src/main/resources/app/panels/query/module.html
new file mode 100644
index 0000000..d6b0098
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/query/module.html
@@ -0,0 +1 @@
+<div ng-controller="query" ng-init="init()" class="query-panel"><div ng-repeat="id in (unPinnedQueries = (dashboard.current.services.query.ids|pinnedQuery:false))" ng-class="{'short-query': unPinnedQueries.length>1}"><form class="form-search" style="position:relative;margin:5px 0" ng-submit="refresh()"><span class="begin-query"><i class="pointer" ng-class="queryIcon(dashboard.current.services.query.list[id].type)" ng-show="dashboard.current.services.query.list[id].enable" data-unique="1" bs-popover="'app/panels/query/meta.html'" data-placement="bottomLeft" ng-style="{color: dashboard.current.services.query.list[id].color}"></i> <i class="pointer icon-circle-blank" ng-click="dashboard.current.services.query.list[id].enable=true;dashboard.refresh();" ng-hide="dashboard.current.services.query.list[id].enable" bs-tooltip="'Activate query'" ng-style="{color: dashboard.current.services.query.list[id].color}"></i> <i class="icon-remove-sign pointer remove-query" ng-show="dashboard.current.
 services.query.ids.length > 1" ng-click="querySrv.remove(id);refresh()"></i></span> <span><input class="search-query panel-query" ng-disabled="!dashboard.current.services.query.list[id].enable" ng-class="{ 'input-block-level': unPinnedQueries.length==1, 'last-query': $last, 'has-remove': dashboard.current.services.query.ids.length > 1 }" bs-typeahead="panel.history" data-min-length="0" data-items="100" type="text" ng-model="dashboard.current.services.query.list[id].query"></span> <span class="end-query"><i class="icon-search pointer" ng-click="refresh()" ng-show="$last"></i> <i class="icon-plus pointer" ng-click="querySrv.set({})" ng-show="$last"></i></span></form></div><div style="display:inline-block" ng-repeat="id in dashboard.current.services.query.ids|pinnedQuery:true"><span class="pointer badge pins" ng-show="$first" ng-click="panel.pinned = !panel.pinned">Pinned <i ng-class="{'icon-caret-right':panel.pinned,'icon-caret-left':!panel.pinned}"></i></span> <span ng-show="panel.pi
 nned" class="badge pinned"><i class="icon-circle pointer" ng-show="dashboard.current.services.query.list[id].enable" ng-style="{color: dashboard.current.services.query.list[id].color}" data-unique="1" bs-popover="'app/panels/query/meta.html'" data-placement="bottomLeft"></i> <i class="pointer icon-circle-blank" bs-tooltip="'Activate query'" ng-click="dashboard.current.services.query.list[id].enable=true;dashboard.refresh();" ng-hide="dashboard.current.services.query.list[id].enable" ng-style="{color: dashboard.current.services.query.list[id].color}"></i> <span bs-tooltip="dashboard.current.services.query.list[id].query | limitTo:45">{{dashboard.current.services.query.list[id].alias || dashboard.current.services.query.list[id].query}}</span></span></div><span style="display:inline-block" ng-show="unPinnedQueries.length == 0"><i class="icon-search pointer" ng-click="refresh()"></i> <i class="icon-plus pointer" ng-click="querySrv.set({})"></i></span></div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/query/module.js
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/query/module.js b/kibana/src/main/resources/app/panels/query/module.js
new file mode 100644
index 0000000..159b9c2
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/query/module.js
@@ -0,0 +1,4 @@
+/*! kibana - v3.1.1 - 2014-10-02
+ * Copyright (c) 2014 Rashid Khan; Licensed Apache License */
+
+define("css-embed",function(){function a(a){var b=document.getElementsByTagName("head")[0],c=document.createElement("style"),d=document.createTextNode(a);c.type="text/css",c.styleSheet?c.styleSheet.cssText=d.nodeValue:c.appendChild(d),b.appendChild(c)}return a}),define("css!panels/query/query.css",["css-embed"],function(a){return a(".short-query{display:inline-block;margin-right:10px}.short-query input.search-query{width:280px}.begin-query{position:absolute;left:10px;top:5px}.end-query{position:absolute;right:10px;top:5px}.end-query i,.begin-query i{margin:0}.panel-query{padding-left:25px!important;height:31px!important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.query-disabled{opacity:.3}.form-search:hover .has-remove{padding-left:40px!important}.remove-query{opacity:0}.last-query{padding-right:45px!important}.form-search:hover .remove-query{opacity:1}.query-panel .pinned{margin-right:5px}"),!0}),define("panels/query/module",["angular","app","lod
 ash","css!./query.css"],function(a,b,c){var d=a.module("kibana.panels.query",[]);b.useModule(d),d.controller("query",["$scope","querySrv","$rootScope","dashboard","$q","$modal",function(a,b,d,e,f,g){a.panelMeta={status:"Stable",description:"Manage all of the queries on the dashboard. You almost certainly need one of these somewhere. This panel allows you to add, remove, label, pin and color queries"};var h={query:"*",pinned:!0,history:[],remember:10};c.defaults(a.panel,h),a.querySrv=b,a.dashboard=e,a.queryTypes=b.types;var i=g({template:"./app/panels/query/helpModal.html",persist:!0,show:!1,scope:a});a.init=function(){},a.refresh=function(){j(c.pluck(a.dashboard.current.services.query.list,"query")),e.refresh()},a.render=function(){d.$broadcast("render")},a.toggle_pin=function(a){e.current.services.query.list[a].pin=e.current.services.query.list[a].pin?!1:!0},a.queryIcon=function(a){return b.queryTypes[a].icon},a.queryConfig=function(a){return"./app/panels/query/editors/"+(a||"lucen
 e")+".html"},a.queryHelpPath=function(a){return"./app/panels/query/help/"+(a||"lucene")+".html"},a.queryHelp=function(b){a.help={type:b},f.when(i).then(function(a){a.modal("show")})},a.typeChange=function(a){var c={id:a.id,type:a.type,query:a.query,alias:a.alias,color:a.color};e.current.services.query.list[c.id]=b.defaults(c)};var j=function(b){if(a.panel.remember>0){a.panel.history=c.union(b.reverse(),a.panel.history);var d=a.panel.history.length;d>a.panel.remember&&(a.panel.history=a.panel.history.slice(0,a.panel.remember))}};a.init()}])});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/query/query.css
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/query/query.css b/kibana/src/main/resources/app/panels/query/query.css
new file mode 100644
index 0000000..2859eec
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/query/query.css
@@ -0,0 +1 @@
+.short-query{display:inline-block;margin-right:10px}.short-query input.search-query{width:280px}.begin-query{position:absolute;left:10px;top:5px}.end-query{position:absolute;right:10px;top:5px}.end-query i,.begin-query i{margin:0}.panel-query{padding-left:25px!important;height:31px!important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.query-disabled{opacity:.3}.form-search:hover .has-remove{padding-left:40px!important}.remove-query{opacity:0}.last-query{padding-right:45px!important}.form-search:hover .remove-query{opacity:1}.query-panel .pinned{margin-right:5px}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/sparklines/editor.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/sparklines/editor.html b/kibana/src/main/resources/app/panels/sparklines/editor.html
new file mode 100644
index 0000000..1ff1818
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/sparklines/editor.html
@@ -0,0 +1 @@
+<div class="editor-row"><div class="section"><h5>Values</h5><div class="editor-option"><label class="small">Chart value</label><select ng-change="set_refresh(true)" class="input-small" ng-model="panel.mode" ng-options="f for f in ['count','min','mean','max','total']"></select></div><div class="editor-option"><label class="small">Time Field</label><input ng-change="set_refresh(true)" placeholder="Start typing" bs-typeahead="fields.list" type="text" class="input-small" ng-model="panel.time_field"></div><div class="editor-option" ng-show="panel.mode != 'count'"><label class="small">Value Field<tip>This field must contain a numeric value</tip></label><input ng-change="set_refresh(true)" placeholder="Start typing" bs-typeahead="fields.list" type="text" class="input-large" ng-model="panel.value_field"></div></div><div class="section"><h5>Transform Series</h5><div class="editor-option"><label class="small">Derivative<tip>Plot the change per interval in the series</tip></label><input type="
 checkbox" ng-model="panel.derivative" ng-checked="panel.derivative" ng-change="set_refresh(true)"></div></div></div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/sparklines/module.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/sparklines/module.html b/kibana/src/main/resources/app/panels/sparklines/module.html
new file mode 100644
index 0000000..34dda3f
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/sparklines/module.html
@@ -0,0 +1 @@
+<div ng-controller="sparklines" ng-init="init()" style="min-height:{{panel.height || row.height}}"><center><img ng-show="panel.loading && _.isUndefined(data)" src="img/load_big.gif"></center><div ng-repeat="series in data" style="margin-right:5px;text-align:center;display:inline-block"><small class="strong"><i class="icon-circle" ng-style="{color: series.info.color}"></i> {{series.info.alias}}</small><br><div style="display:inline-block" sparklines-chart="" series="series" panel="panel"></div></div></div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/sparklines/module.js
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/sparklines/module.js b/kibana/src/main/resources/app/panels/sparklines/module.js
new file mode 100644
index 0000000..754f255
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/sparklines/module.js
@@ -0,0 +1,4 @@
+/*! kibana - v3.1.1 - 2014-10-02
+ * Copyright (c) 2014 Rashid Khan; Licensed Apache License */
+
+define("panels/sparklines/interval",["kbn"],function(a){function b(b){this.string=b;var c=a.describe_interval(b);this.type=c.type,this.ms=Math.ceil(1e3*c.sec*c.count),"y"===this.type||"M"===this.type?(this.get=this.get_complex,this.date=new Date(0)):this.get=this.get_simple}return b.prototype={toString:function(){return this.string},after:function(a){return this.get(a,1)},before:function(a){return this.get(a,-1)},get_complex:function(a,b){switch(this.date.setTime(a),this.type){case"M":this.date.setUTCMonth(this.date.getUTCMonth()+b);break;case"y":this.date.setUTCFullYear(this.date.getUTCFullYear()+b)}return this.date.getTime()},get_simple:function(a,b){return a+b*this.ms}},b}),define("panels/sparklines/timeSeries",["./interval","lodash"],function(a,b){function c(a){return parseInt(a,10)}function d(a){return 1e3*Math.floor(a.getTime()/1e3)}var e={};return e.ZeroFilled=function(c){c=b.defaults(c,{interval:"10m",start_date:null,end_date:null,fill_style:"minimal"}),this.interval=new a(c
 .interval),this._data={},this.start_time=c.start_date&&d(c.start_date),this.end_time=c.end_date&&d(c.end_date),this.opts=c},e.ZeroFilled.prototype.addValue=function(a,e){a=a instanceof Date?d(a):c(a),isNaN(a)||(this._data[a]=b.isUndefined(e)?0:e),this._cached_times=null},e.ZeroFilled.prototype.getOrderedTimes=function(a){var d=b.map(b.keys(this._data),c);return b.isArray(a)&&(d=d.concat(a)),b.uniq(d.sort(function(a,b){return a-b}),!0)},e.ZeroFilled.prototype.getFlotPairs=function(a){var c,d,e=this.getOrderedTimes(a);return c="all"===this.opts.fill_style?this._getAllFlotPairs:"null"===this.opts.fill_style?this._getNullFlotPairs:this._getMinFlotPairs,d=b.reduce(e,c,[],this)},e.ZeroFilled.prototype._getMinFlotPairs=function(a,b,c,d){var e,f,g,h;return c>0&&(g=d[c-1],h=this.interval.before(b),h>g&&a.push([h,0])),a.push([b,this._data[b]||0]),d.length>c&&(e=d[c+1],f=this.interval.after(b),e>f&&a.push([f,0])),a},e.ZeroFilled.prototype._getAllFlotPairs=function(a,b,c,d){var e,f;for(a.push([
 d[c],this._data[d[c]]||0]),e=d[c+1],f=this.interval.after(b);d.length>c&&e>f;f=this.interval.after(f))a.push([f,0]);return a},e.ZeroFilled.prototype._getNullFlotPairs=function(a,b,c,d){var e,f,g,h;return c>0&&(g=d[c-1],h=this.interval.before(b),h>g&&a.push([h,null])),a.push([b,this._data[b]||null]),d.length>c&&(e=d[c+1],f=this.interval.after(b),e>f&&a.push([f,null])),a},e}),function(a){function b(a,b){return b*Math.floor(a/b)}function c(a,b,c,d){if("function"==typeof a.strftime)return a.strftime(b);var e=function(a,b){return a=""+a,b=""+(null==b?"0":b),1==a.length?b+a:a},f=[],g=!1,h=a.getHours(),i=12>h;null==c&&(c=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),null==d&&(d=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]);var j;j=h>12?h-12:0==h?12:h;for(var k=0;k<b.length;++k){var l=b.charAt(k);if(g){switch(l){case"a":l=""+d[a.getDay()];break;case"b":l=""+c[a.getMonth()];break;case"d":l=e(a.getDate());break;case"e":l=e(a.getDate()," ");break;case"h":case"H":l=e
 (h);break;case"I":l=e(j);break;case"l":l=e(j," ");break;case"m":l=e(a.getMonth()+1);break;case"M":l=e(a.getMinutes());break;case"q":l=""+(Math.floor(a.getMonth()/3)+1);break;case"S":l=e(a.getSeconds());break;case"y":l=e(a.getFullYear()%100);break;case"Y":l=""+a.getFullYear();break;case"p":l=i?"am":"pm";break;case"P":l=i?"AM":"PM";break;case"w":l=""+a.getDay()}f.push(l),g=!1}else"%"==l?g=!0:f.push(l)}return f.join("")}function d(a){function b(a,b,c,d){a[b]=function(){return c[d].apply(c,arguments)}}var c={date:a};void 0!=a.strftime&&b(c,"strftime",a,"strftime"),b(c,"getTime",a,"getTime"),b(c,"setTime",a,"setTime");for(var d=["Date","Day","FullYear","Hours","Milliseconds","Minutes","Month","Seconds"],e=0;e<d.length;e++)b(c,"get"+d[e],a,"getUTC"+d[e]),b(c,"set"+d[e],a,"setUTC"+d[e]);return c}function e(a,b){if("browser"==b.timezone)return new Date(a);if(b.timezone&&"utc"!=b.timezone){if("undefined"!=typeof timezoneJS&&"undefined"!=typeof timezoneJS.Date){var c=new timezoneJS.Date;retur
 n c.setTimezone(b.timezone),c.setTime(a),c}return d(new Date(a))}return d(new Date(a))}function f(d){d.hooks.processOptions.push(function(d){a.each(d.getAxes(),function(a,d){var f=d.options;"time"==f.mode&&(d.tickGenerator=function(a){var c=[],d=e(a.min,f),g=0,i=f.tickSize&&"quarter"===f.tickSize[1]||f.minTickSize&&"quarter"===f.minTickSize[1]?k:j;null!=f.minTickSize&&(g="number"==typeof f.tickSize?f.tickSize:f.minTickSize[0]*h[f.minTickSize[1]]);for(var l=0;l<i.length-1&&!(a.delta<(i[l][0]*h[i[l][1]]+i[l+1][0]*h[i[l+1][1]])/2&&i[l][0]*h[i[l][1]]>=g);++l);var m=i[l][0],n=i[l][1];if("year"==n){if(null!=f.minTickSize&&"year"==f.minTickSize[1])m=Math.floor(f.minTickSize[0]);else{var o=Math.pow(10,Math.floor(Math.log(a.delta/h.year)/Math.LN10)),p=a.delta/h.year/o;m=1.5>p?1:3>p?2:7.5>p?5:10,m*=o}1>m&&(m=1)}a.tickSize=f.tickSize||[m,n];var q=a.tickSize[0];n=a.tickSize[1];var r=q*h[n];"second"==n?d.setSeconds(b(d.getSeconds(),q)):"minute"==n?d.setMinutes(b(d.getMinutes(),q)):"hour"==n?d.se
 tHours(b(d.getHours(),q)):"month"==n?d.setMonth(b(d.getMonth(),q)):"quarter"==n?d.setMonth(3*b(d.getMonth()/3,q)):"year"==n&&d.setFullYear(b(d.getFullYear(),q)),d.setMilliseconds(0),r>=h.minute&&d.setSeconds(0),r>=h.hour&&d.setMinutes(0),r>=h.day&&d.setHours(0),r>=4*h.day&&d.setDate(1),r>=2*h.month&&d.setMonth(b(d.getMonth(),3)),r>=2*h.quarter&&d.setMonth(b(d.getMonth(),6)),r>=h.year&&d.setMonth(0);var s,t=0,u=Number.NaN;do if(s=u,u=d.getTime(),c.push(u),"month"==n||"quarter"==n)if(1>q){d.setDate(1);var v=d.getTime();d.setMonth(d.getMonth()+("quarter"==n?3:1));var w=d.getTime();d.setTime(u+t*h.hour+(w-v)*q),t=d.getHours(),d.setHours(0)}else d.setMonth(d.getMonth()+q*("quarter"==n?3:1));else"year"==n?d.setFullYear(d.getFullYear()+q):d.setTime(u+r);while(u<a.max&&u!=s);return c},d.tickFormatter=function(a,b){var d=e(a,b.options);if(null!=f.timeformat)return c(d,f.timeformat,f.monthNames,f.dayNames);var g,i=b.options.tickSize&&"quarter"==b.options.tickSize[1]||b.options.minTickSize&&"q
 uarter"==b.options.minTickSize[1],j=b.tickSize[0]*h[b.tickSize[1]],k=b.max-b.min,l=f.twelveHourClock?" %p":"",m=f.twelveHourClock?"%I":"%H";g=j<h.minute?m+":%M:%S"+l:j<h.day?k<2*h.day?m+":%M"+l:"%b %d "+m+":%M"+l:j<h.month?"%b %d":i&&j<h.quarter||!i&&j<h.year?k<h.year?"%b":"%b %Y":i&&j<h.year?k<h.year?"Q%q":"Q%q %Y":"%Y";var n=c(d,g,f.monthNames,f.dayNames);return n})})})}var g={xaxis:{timezone:null,timeformat:null,twelveHourClock:!1,monthNames:null}},h={second:1e3,minute:6e4,hour:36e5,day:864e5,month:2592e6,quarter:7776e6,year:525949.2*60*1e3},i=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[.25,"month"],[.5,"month"],[1,"month"],[2,"month"]],j=i.concat([[3,"month"],[6,"month"],[1,"year"]]),k=i.concat([[1,"quarter"],[2,"quarter"],[1,"year"]]);a.plot.plugins.push({init:f,options:g,name:"time",version:"1.0"}),a.p
 lot.formatDate=c}(jQuery),define("jquery.flot.time",function(){}),define("panels/sparklines/module",["angular","app","jquery","lodash","kbn","moment","./timeSeries","jquery.flot","jquery.flot.time"],function(a,b,c,d,e,f,g){var h=a.module("kibana.panels.sparklines",[]);b.useModule(h),h.controller("sparklines",["$scope","querySrv","dashboard","filterSrv",function(b,c,f,h){b.panelMeta={modals:[{description:"Inspect",icon:"icon-info-sign",partial:"app/partials/inspector.html",show:b.panel.spyable}],editorTabs:[{title:"Queries",src:"app/partials/querySelect.html"}],status:"Experimental",description:"Sparklines are tiny, simple, time series charts, shown separately. Because sparklines are uncluttered by grids, axis markers and colors, they are perfect for spotting change in a series"};var i={mode:"count",time_field:"@timestamp",value_field:null,interval:"5m",spyable:!0,queries:{mode:"all",ids:[]}};d.defaults(b.panel,i),b.init=function(){b.$on("refresh",function(){b.get_data()}),b.get_data
 ()},b.interval_label=function(a){return b.panel.auto_int&&a===b.panel.interval?a+" (auto)":a},b.get_time_range=function(){var a=b.range=h.timeRange("last");return a},b.get_interval=function(){var a,c=b.panel.interval;return a=b.get_time_range(),a&&(c=e.secondsToHms(e.calculate_interval(a.from,a.to,10,0)/1e3)),b.panel.interval=c||"10m",b.panel.interval},b.get_data=function(a,e){var i,j,k,l,m;d.isUndefined(a)&&(a=0),delete b.panel.error,0!==f.indices.length&&(i=b.get_time_range(),j=b.get_interval(i),b.panelMeta.loading=!0,k=b.ejs.Request().indices(f.indices[a]),b.panel.queries.ids=c.idsByMode(b.panel.queries),l=c.getQueryObjs(b.panel.queries.ids),d.each(l,function(a){var e=b.ejs.FilteredQuery(c.toEjsObj(a),h.getBoolFilter(h.ids())),f=b.ejs.DateHistogramFacet(a.id);if("count"===b.panel.mode)f=f.field(b.panel.time_field).global(!0);else{if(d.isNull(b.panel.value_field))return b.panel.error="In "+b.panel.mode+" mode a field must be specified",void 0;f=f.keyField(b.panel.time_field).value
 Field(b.panel.value_field)}f=f.interval(j).facetFilter(b.ejs.QueryFilter(e)),k=k.facet(f).size(0)}),b.populate_modal(k),m=k.doSearch(),m.then(function(c){if(b.panelMeta.loading=!1,0===a&&(b.hits=0,b.data=[],e=b.query_id=(new Date).getTime()),!d.isUndefined(c.error))return b.panel.error=b.parse_error(c.error),void 0;if(b.query_id===e){var h,k,m=0;d.each(l,function(e){var f=c.facets[e.id];if(d.isUndefined(b.data[m])||0===a){var l={interval:j,start_date:i&&i.from,end_date:i&&i.to,fill_style:"minimal"};h=new g.ZeroFilled(l),k=0}else h=b.data[m].time_series,k=b.data[m].hits;d.each(f.entries,function(a){h.addValue(a.time,a[b.panel.mode]),k+=a.count,b.hits+=a.count}),b.data[m]={info:e,range:b.range,time_series:h,hits:k},m++}),a<f.indices.length-1&&b.get_data(a+1,e)}}))},b.populate_modal=function(c){b.inspector=a.toJson(JSON.parse(c.toString()),!0)},b.set_refresh=function(a){b.refresh=a},b.close_edit=function(){b.refresh&&b.get_data(),b.refresh=!1}}]),h.directive("sparklinesChart",function(
 ){return{restrict:"A",scope:{series:"=",panel:"="},template:"<div></div>",link:function(a,b){function e(){b.css({height:"30px",width:"100px"});var e={legend:{show:!1},series:{lines:{show:!0,fill:0,lineWidth:2,steps:!1},points:{radius:2},shadowSize:1},yaxis:{show:!1},xaxis:{show:!1,mode:"time",min:d.isUndefined(a.series.range.from)?null:a.series.range.from.getTime(),max:d.isUndefined(a.series.range.to)?null:a.series.range.to.getTime()},grid:{hoverable:!1,show:!1}},f=[];f=a.series.time_series.getOrderedTimes(),f=d.uniq(f.sort(function(a,b){return a-b}),!0);var h={data:a.panel.derivative?g(a.series.time_series.getFlotPairs(f)):a.series.time_series.getFlotPairs(f),label:a.series.info.alias,color:b.css("color")};c.plot(b,[h],e)}a.$watch("series",function(){e()});var g=function(a){return d.map(a,function(b,c){var d;return d=0===c||null===b[1]?[b[0],null]:null===a[c-1][1]?[b[0],null]:[b[0],b[1]-a[c-1][1]]})},h=c("<div>");b.bind("plothover",function(a,b,c){c?h.html(c.datapoint[1]+" @ "+f(c.
 datapoint[0]).format("YYYY-MM-DD HH:mm:ss")).place_tt(b.pageX,b.pageY):h.detach()})}}})});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/stats/editor.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/stats/editor.html b/kibana/src/main/resources/app/panels/stats/editor.html
new file mode 100644
index 0000000..6c51141
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/stats/editor.html
@@ -0,0 +1 @@
+<div class="row-fluid"><h5>Details</h5><div class="editor-option"><label class="small">Featured Stat</label><select ng-change="set_refresh(true)" class="input-small" ng-model="panel.mode" ng-options="f for f in modes"></select></div><div class="editor-option"><label class="small">Field<tip>This field must contain a numeric value</tip></label><input ng-change="set_refresh(true)" placeholder="Start typing" bs-typeahead="fields.list" type="text" class="input-large" ng-model="panel.field"></div><div class="editor-option"><label class="small">Unit</label><input type="text" class="input-large" ng-model="panel.unit"></div><h5>Columns</h5><div class="editor-option" ng-repeat="stat in modes"><label class="small">{{stat}}</label><input type="checkbox" ng-model="panel.show[stat]" ng-checked="panel.show[stat]"></div><h5>Formating</h5><div class="editor-option"><label class="small">Format</label><select ng-change="set_refresh(true)" class="input-small" ng-model="panel.format" ng-options="f for f
  in ['number','float','money','bytes']"></select></div><div class="editor-option"><label class="small">Font Size</label><select class="input-mini" ng-model="panel.style['font-size']" ng-options="f for f in ['7pt','8pt','9pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select></div><div class="editor-option"><label class="small">Display Breakdowns</label><select class="input-mini" ng-model="panel.display_breakdown" ng-options="f for f in ['yes', 'no']"></select></div><div class="editor-option"><label class="small">Query column name</label><input type="text" class="input-large" ng-model="panel.label_name"></div></div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/stats/module.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/stats/module.html b/kibana/src/main/resources/app/panels/stats/module.html
new file mode 100644
index 0000000..598a9e1
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/stats/module.html
@@ -0,0 +1,7 @@
+<div ng-controller="stats" ng-init="init()"><style>table.stats-table th, table.stats-table td {
+      text-align: right;
+    }
+
+    table.stats-table th:first-child,  table.stats-table td:first-child {
+      text-align: left !important;
+    }</style><h1 ng-style="panel.style" style="text-align: center; line-height: .6em">{{data.value|formatstats:panel.format}} <small style="font-size: .5em; line-height: 0">{{panel.unit}} ({{panel.mode}})</small></h1><table ng-show="panel.display_breakdown == 'yes'" cellspacing="0" class="table-hover table table-condensed stats-table" style="margin-top: 38px"><tbody><thead><tr><th><a href="" ng-click="set_sort('label')" ng-class="{'icon-chevron-down': panel.sort_field == 'label' && panel.sort_reverse == true, 'icon-chevron-up': panel.sort_field == 'label' && panel.sort_reverse == false}">{{panel.label_name}}</a></th><th ng-repeat="stat in modes" ng-show="panel.show[stat]"><a href="" ng-click="set_sort(stat)" ng-class="{'icon-chevron-down': panel.sort_field == stat && panel.sort_reverse == true, 'icon-chevron-up': panel.sort_field == stat && panel.sort_reverse == false}">{{stat}}</a></th></tr></thead><tr ng-repeat="item in data.rows | orderBy:(panel.sort_field == 'label' ? 'label' : 
 'value.'+panel.sort_field):panel.sort_reverse"><td><i class="icon-circle" ng-style="{color:item.color}"></i> {{item.label}}</td><td ng-repeat="stat in modes" ng-show="panel.show[stat]">{{item.value[stat]|formatstats:panel.format}} {{panel.unit}}</td></tr></tbody></table></div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/stats/module.js
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/stats/module.js b/kibana/src/main/resources/app/panels/stats/module.js
new file mode 100644
index 0000000..77dd0bb
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/stats/module.js
@@ -0,0 +1,4 @@
+/*! kibana - v3.1.1 - 2014-10-02
+ * Copyright (c) 2014 Rashid Khan; Licensed Apache License */
+
+(function(){function a(a){this._value=a}function b(a,b,c,d){var e,f,g=Math.pow(10,b);return f=(c(a*g)/g).toFixed(b),d&&(e=new RegExp("0{1,"+d+"}$"),f=f.replace(e,"")),f}function c(a,b,c){var d;return d=b.indexOf("$")>-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===o)a._value=0;else{for("."!==m[n].delimiters.decimal&&(b=b.replace(/\./g,"").replace(m[n].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+m[n].abbreviations.thousand+"(?:\\)|(\\"+m[n].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+m[n].abbreviations.million+"(?:\\)|(\\"+m[n].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+m[n].abbreviations.billion+"(?:\\)|(\\"+m[n].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+m[n].abbreviations.trillion+"(?:\\)|(\\"+m[n].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Ma
 th.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e=b.indexOf("$")<=1?!0:!1,f="";return b.indexOf(" $")>-1?(f=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(f=" ",b=b.replace("$ ","")):b=b.replace("$",""),d=i(a._value,b,c),e?d.indexOf("(")>-1||d.indexOf("-")>-1?(d=d.split(""),d.splice(1,0,m[n].currency.symbol+f),d=d.join("")):d=m[n].currency.symbol+f+d:d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,f+m[n].currency.symbol),d=d.join("")):d=d+f+m[n].currency.symbol,d}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.j
 oin("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,p=!1,q="",r="",s="",t=Math.abs(a),u=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],v="",w=!1;if(0===a&&null!==o)return o;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(c.indexOf(" a")>-1?(q=" ",c=c.replace(" a","")):c=c.replace("a",""),t>=Math.pow(10,12)?(q+=m[n].abbreviations.trillion,a/=Math.pow(10,12)):t<Math.pow(10,12)&&t>=Math.pow(10,9)?(q+=m[n].abbreviations.billion,a/=Math.pow(10,9)):t<Math.pow(10,9)&&t>=Math.pow(10,6)?(q+=m[n].abbreviations.million,a/=Math.pow(10,6)):t<Math.pow(10,6)&&t>=Math.pow(10,3)&&(q+=m[n]
 .abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(r=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=u.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){r+=u[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(s=" ",c=c.replace(" o","")):c=c.replace("o",""),s+=m[n].ordinal(a)),c.indexOf("[.]")>-1&&(p=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),v=b(a,i[0].length+i[1].length,d,i[1].length)):v=b(a,i.length,d),h=v.split(".")[0],v=v.split(".")[1].length?m[n].delimiters.decimal+v.split(".")[1]:"",p&&0===Number(v.slice(1))&&(v="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),w=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+m[n].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&w?"(":"")+(!k&&w?"-":"")+(!w&&l?"+":"")+h+v+(s?s:"")+(q?q:"")+(r?r:"")+(k&&w?")":"")}function j(a,b){m[a]=b}var k,l="1
 .5.2",m={},n="en",o=null,p="0,0",q="undefined"!=typeof module&&module.exports;k=function(b){return k.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=k.fn.unformat(b)),new a(Number(b))},k.version=l,k.isNumeral=function(b){return b instanceof a},k.language=function(a,b){if(!a)return n;if(a&&!b){if(!m[a])throw new Error("Unknown language : "+a);n=a}return(b||!m[a])&&j(a,b),k},k.languageData=function(a){if(!a)return m[n];if(!m[a])throw new Error("Unknown language : "+a);return m[a]},k.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),k.zeroFormat=function(a){o="string"==typeof a?a:null},k.defaultFormat=function(a){p="string"==typeof a?a:"0.0"},k.fn=a.prototype={clone:function(){return k(this)},format:function(a,b){return c(this,a?a:p,void 0!==b?b:Math.round)},unformat:funct
 ion(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:p)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){return this._value=this._value+Number(a),this},subtract:function(a){return this._value=this._value-Number(a),this},multiply:function(a){return this._value=this._value*Number(a),this},divide:function(a){return this._value=this._value/Number(a),this},difference:function(a){var b=this._value-Number(a);return 0>b&&(b=-b),b}},q&&(module.exports=k),"undefined"==typeof ender&&(this.numeral=k),"function"==typeof define&&define.amd&&define("numeral",[],function(){return k})}).call(this),define("panels/stats/module",["angular","app","lodash","jquery","kbn","numeral"],function(a,b,c,d,e,f){var g=a.module("kibana.panels.stats",[]);b.useModule(g),g.controller("stats",["$scope","querySrv","dashboard","filterSrv",function(b,d,e,f){b.panelMeta={modals:[{description:"Inspect",
 icon:"icon-info-sign",partial:"app/partials/inspector.html",show:b.panel.spyable}],editorTabs:[{title:"Queries",src:"app/partials/querySelect.html"}],status:"Beta",description:"A statistical panel for displaying aggregations using the Elastic Search statistical facet query."},b.modes=["count","min","max","mean","total","variance","std_deviation","sum_of_squares"];var g={queries:{mode:"all",ids:[]},style:{"font-size":"24pt"},format:"number",mode:"count",display_breakdown:"yes",sort_field:"",sort_reverse:!1,label_name:"Query",value_name:"Value",spyable:!0,show:{count:!0,min:!0,max:!0,mean:!0,std_deviation:!0,sum_of_squares:!0,total:!0,variance:!0}};c.defaults(b.panel,g),b.init=function(){b.ready=!1,b.$on("refresh",function(){b.get_data()}),b.get_data()},b.set_sort=function(a){console.log(a),b.panel.sort_field===a&&b.panel.sort_reverse===!1?b.panel.sort_reverse=!0:b.panel.sort_field===a&&b.panel.sort_reverse===!0?(b.panel.sort_field="",b.panel.sort_reverse=!1):(b.panel.sort_field=a,b.p
 anel.sort_reverse=!1)},b.get_data=function(){if(0!==e.indices.length){b.panelMeta.loading=!0;var g,h,i,j;g=b.ejs.Request().indices(e.indices),b.panel.queries.ids=d.idsByMode(b.panel.queries),j=d.getQueryObjs(b.panel.queries.ids),i=b.ejs.BoolQuery(),c.each(j,function(a){i=i.should(d.toEjsObj(a))}),g=g.facet(b.ejs.StatisticalFacet("stats").field(b.panel.field).facetFilter(b.ejs.QueryFilter(b.ejs.FilteredQuery(i,f.getBoolFilter(f.ids()))))).size(0),c.each(j,function(a){var c=a.alias||a.query,e=b.ejs.BoolQuery();e.should(d.toEjsObj(a)),g.facet(b.ejs.StatisticalFacet("stats_"+c).field(b.panel.field).facetFilter(b.ejs.QueryFilter(b.ejs.FilteredQuery(e,f.getBoolFilter(f.ids())))))}),b.inspector=a.toJson(JSON.parse(g.toString()),!0),h=g.doSearch(),h.then(function(a){b.panelMeta.loading=!1;var d=a.facets.stats[b.panel.mode],e=j.map(function(b){var d=b.alias||b.query,e=c.clone(b);return e.label=d,e.Label=d.toLowerCase(),e.value=a.facets["stats_"+d],e.Value=a.facets["stats_"+d],e});b.data={val
 ue:d,rows:e},console.log(b.data),b.$emit("render")})}},b.set_refresh=function(a){b.refresh=a},b.close_edit=function(){b.refresh&&b.get_data(),b.refresh=!1,b.$emit("render")}}]),g.filter("formatstats",function(){return function(a,b){switch(b){case"money":a=f(a).format("$0,0.00");break;case"bytes":a=f(a).format("0.00b");break;case"float":a=f(a).format("0.000");break;default:a=f(a).format("0,0")}return a}})});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/7560f657/kibana/src/main/resources/app/panels/table/editor.html
----------------------------------------------------------------------
diff --git a/kibana/src/main/resources/app/panels/table/editor.html b/kibana/src/main/resources/app/panels/table/editor.html
new file mode 100644
index 0000000..7a75301
--- /dev/null
+++ b/kibana/src/main/resources/app/panels/table/editor.html
@@ -0,0 +1 @@
+<div class="row-fluid"><div class="span6 section"><h5>Options</h5><div class="editor-option"><label class="small">Header</label><input type="checkbox" ng-model="panel.header" ng-checked="panel.header"></div><div class="editor-option"><label class="small">Sorting</label><input type="checkbox" ng-model="panel.sortable" ng-checked="panel.sortable"></div><div class="editor-option" style="white-space:nowrap" ng-show="panel.sortable"><label class="small">Sort</label><input class="input-small" bs-typeahead="fields.list" ng-model="panel.sort[0]" type="text"><i ng-click="set_sort(panel.sort[0])" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i></div><div class="editor-option"><label class="small">Font Size</label><select class="input-small" ng-model="panel.style['font-size']" ng-options="f for f in ['7pt','8pt','9pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select></div>
 <div class="editor-option"><label class="small">Trim Factor<tip>Trim fields to this long divided by # of rows. Requires data refresh.</tip></label><input type="number" class="input-small" ng-model="panel.trimFactor" ng-change="set_refresh(true)"></div><br><div class="editor-option"><label class="small">Local Time<tip>Adjust time field to browser's local time</tip></label><input type="checkbox" ng-change="set_refresh(true)" ng-model="panel.localTime" ng-checked="panel.localTime"></div><div class="editor-option" ng-show="panel.localTime"><label class="small">Time Field</label><input type="text" class="input-small" ng-model="panel.timeField" ng-change="set_refresh(true)" bs-typeahead="fields.list"></div></div><div class="section span6"><h5>Columns</h5><form class="input-append editor-option"><input bs-typeahead="fields.list" type="text" class="input-small" ng-model="newfield"><button class="btn" ng-click="panel.fields = _.toggleInOut(panel.fields,newfield);newfield=''"><i class="icon-p
 lus"></i></button></form><br><span style="margin-left:3px" ng-repeat="field in panel.fields" class="label">{{field}} <i class="pointer icon-remove-sign" ng-click="panel.fields = _.toggleInOut(panel.fields,field)"></i></span><h5>Highlighted Fields</h5><form class="input-append editor-option"><input bs-typeahead="fields.list" type="text" class="input-small" ng-model="newhighlight" ng-change="set_refresh(true)"><button class="btn" ng-click="panel.highlight = _.toggleInOut(panel.highlight,newhighlight);newhighlight=''"><i class="icon-plus"></i></button></form><br><span style="margin-left:3px" ng-repeat="field in panel.highlight" class="label">{{field}} <i class="pointer icon-remove-sign" ng-click="panel.highlight = _.toggleInOut(panel.highlight,field);set_refresh(true)"></i></span></div></div>
\ No newline at end of file