/** * Copyright 2010-2013 Ben Birch * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this software except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ (function( app, i18n ) { var ui = app.ns("ui"); var services = app.ns("services"); app.App = ui.AbstractWidget.extend({ defaults: { base_uri: null }, init: function(parent) { this._super(); this.prefs = services.Preferences.instance(); this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200"; if( this.base_uri.charAt( this.base_uri.length - 1 ) !== "/" ) { // XHR request fails if the URL is not ending with a "/" this.base_uri += "/"; } if( this.config.auth_user ) { var credentials = window.btoa( this.config.auth_user + ":" + this.config.auth_password ); $.ajaxSetup({ headers: { "Authorization": "Basic " + credentials } }); } this.cluster = new services.Cluster({ base_uri: this.base_uri }); this._clusterState = new services.ClusterState({ cluster: this.cluster }); this._header = new ui.Header({ cluster: this.cluster, clusterState: this._clusterState }); this.$body = $.joey( this._body_template() ); this.el = $.joey(this._main_template()); this.attach( parent ); this.instances = {}; this.el.find(".uiApp-headerMenuItem:first").click(); if( this.config.dashboard ) { if( this.config.dashboard === "cluster" ) { var page = this.instances["ClusterOverview"]; page._refreshButton.set( 5000 ); } } }, navigateTo: function( type, config, ev ) { if( ev.target.classList.contains( "uiApp-headerNewMenuItem" ) ) { this.showNew( type, config, ev ); } else { var ref = type + "0"; if(! this.instances[ ref ]) { this.createPage( type, 0, config ); } this.show( ref, ev ); } }, createPage: function( type, id, config ) { var page = this.instances[ type + id ] = new ui[ type ]( config ); this.$body.append( page ); return page; }, show: function( ref, ev ) { $( ev.target ).closest("DIV.uiApp-headerMenuItem").addClass("active").siblings().removeClass("active"); for(var p in this.instances) { this.instances[p][ p === ref ? "show" : "hide" ](); } }, showNew: function( type, config, jEv ) { var ref, page, $tab, type_index = 0; while ( ! page ) { ref = type + ( ++type_index ); if (! ( ref in this.instances ) ) { page = this.createPage( type, type_index, config ); } } // Add the tab and its click handlers $tab = $.joey({ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav." + type ) + " " + type_index, onclick: function( ev ) { this.show( ref, ev ); }.bind(this), children: [ { tag: "A", text: " [-]", onclick: function (ev) { $tab.remove(); page.remove(); delete this.instances[ ref ]; }.bind(this) } ] }); $('.uiApp-headerMenu').append( $tab ); $tab.trigger("click"); }, _openAnyRequest_handler: function(ev) { this.navigateTo("AnyRequest", { cluster: this.cluster }, ev ); }, _openStructuredQuery_handler: function(ev) { this.navigateTo("StructuredQuery", { cluster: this.cluster }, ev ); }, _openBrowser_handler: function(ev) { this.navigateTo("Browser", { cluster: this.cluster }, ev ); }, _openClusterOverview_handler: function(ev) { this.navigateTo("ClusterOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); }, _openIndexOverview_handler: function(ev) { this.navigateTo("IndexOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); }, _body_template: function() { return ( { tag: "DIV", id: this.id("body"), cls: "uiApp-body" } ); }, _main_template: function() { return { tag: "DIV", cls: "uiApp", children: [ { tag: "DIV", id: this.id("header"), cls: "uiApp-header", children: [ this._header, { tag: "DIV", cls: "uiApp-headerMenu", children: [ { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Overview"), onclick: this._openClusterOverview_handler }, { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Indices"), onclick: this._openIndexOverview_handler }, { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Browser"), onclick: this._openBrowser_handler }, { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.StructuredQuery"), onclick: this._openStructuredQuery_handler, children: [ { tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' } ] }, { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.AnyRequest"), onclick: this._openAnyRequest_handler, children: [ { tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' } ] }, ]} ]}, this.$body ]}; } }); })( this.app, this.i18n );