mirror of https://github.com/apache/lucene.git
719 lines
23 KiB
JavaScript
719 lines
23 KiB
JavaScript
/*
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file 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.
|
|
*/
|
|
|
|
sammy.bind
|
|
(
|
|
'cores_load_data',
|
|
function( event, params )
|
|
{
|
|
$.ajax
|
|
(
|
|
{
|
|
url : app.config.solr_path + app.config.core_admin_path + '?wt=json',
|
|
dataType : 'json',
|
|
beforeSend : function( xhr, settings )
|
|
{
|
|
},
|
|
success : function( response, text_status, xhr )
|
|
{
|
|
if( params.only_failures )
|
|
{
|
|
app.check_for_init_failures( response );
|
|
return true;
|
|
}
|
|
|
|
var has_cores = false;
|
|
for( core in response.status )
|
|
{
|
|
has_cores = true; break;
|
|
}
|
|
|
|
app.set_cores_data( response );
|
|
|
|
if( has_cores )
|
|
{
|
|
params.success( app.cores_data );
|
|
}
|
|
else
|
|
{
|
|
params.error();
|
|
}
|
|
},
|
|
error : function( xhr, text_status, error_thrown)
|
|
{
|
|
},
|
|
complete : function( xhr, text_status )
|
|
{
|
|
}
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
sammy.bind
|
|
(
|
|
'cores_build_navigation',
|
|
function( event, params )
|
|
{
|
|
var navigation_content = ['<ul>'];
|
|
|
|
for( var core in params.cores )
|
|
{
|
|
var core_name = core;
|
|
if( !core_name )
|
|
{
|
|
core_name = '<em>(empty)</em>';
|
|
}
|
|
navigation_content.push( '<li><a href="' + params.basepath + core + '">' + core_name + '</a></li>' );
|
|
}
|
|
|
|
params.navigation_element
|
|
.html( navigation_content.join( "\n" ) );
|
|
|
|
$( 'a[href="' + params.basepath + params.current_core + '"]', params.navigation_element ).parent()
|
|
.addClass( 'current' );
|
|
}
|
|
);
|
|
|
|
sammy.bind
|
|
(
|
|
'cores_load_template',
|
|
function( event, params )
|
|
{
|
|
if( app.cores_template )
|
|
{
|
|
params.callback();
|
|
return true;
|
|
}
|
|
|
|
$.get
|
|
(
|
|
'tpl/cores.html',
|
|
function( template )
|
|
{
|
|
params.content_element
|
|
.html( template );
|
|
|
|
app.cores_template = template;
|
|
params.callback();
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
// #/~cores
|
|
sammy.get
|
|
(
|
|
/^#\/(~cores)$/,
|
|
function( context )
|
|
{
|
|
delete app.cores_template;
|
|
var content_element = $( '#content' );
|
|
|
|
sammy.trigger
|
|
(
|
|
'cores_load_data',
|
|
{
|
|
success : function( cores )
|
|
{
|
|
var first_core = null;
|
|
for( var key in cores )
|
|
{
|
|
if( !first_core )
|
|
{
|
|
first_core = key;
|
|
}
|
|
continue;
|
|
}
|
|
context.redirect( context.path + '/' + first_core );
|
|
},
|
|
error : function()
|
|
{
|
|
sammy.trigger
|
|
(
|
|
'cores_load_template',
|
|
{
|
|
content_element : content_element,
|
|
callback : function()
|
|
{
|
|
var cores_element = $( '#cores', content_element );
|
|
var navigation_element = $( '#navigation', cores_element );
|
|
var data_element = $( '#data', cores_element );
|
|
var core_data_element = $( '#core-data', data_element );
|
|
var index_data_element = $( '#index-data', data_element );
|
|
|
|
// layout
|
|
|
|
var ui_block = $( '#ui-block' );
|
|
var actions_element = $( '.actions', cores_element );
|
|
var div_action = $( 'div.action', actions_element );
|
|
|
|
ui_block
|
|
.css( 'opacity', 0.7 )
|
|
.width( cores_element.width() + 10 )
|
|
.height( cores_element.height() );
|
|
|
|
if( $( '#cloud.global' ).is( ':visible' ) )
|
|
{
|
|
$( '.cloud', div_action )
|
|
.show();
|
|
}
|
|
|
|
$( 'button.action', actions_element )
|
|
.die( 'click' )
|
|
.live
|
|
(
|
|
'click',
|
|
function( event )
|
|
{
|
|
var self = $( this );
|
|
|
|
self
|
|
.toggleClass( 'open' );
|
|
|
|
$( '.action.' + self.attr( 'id' ), actions_element )
|
|
.trigger( 'open' );
|
|
|
|
return false;
|
|
}
|
|
);
|
|
|
|
div_action
|
|
.die( 'close' )
|
|
.live
|
|
(
|
|
'close',
|
|
function( event )
|
|
{
|
|
div_action.hide();
|
|
ui_block.hide();
|
|
}
|
|
)
|
|
.die( 'open' )
|
|
.live
|
|
(
|
|
'open',
|
|
function( event )
|
|
{
|
|
var self = $( this );
|
|
var rel = $( '#' + self.data( 'rel' ) );
|
|
|
|
self
|
|
.trigger( 'close' )
|
|
.show()
|
|
.css( 'left', rel.position().left );
|
|
|
|
ui_block
|
|
.show();
|
|
}
|
|
);
|
|
|
|
$( 'form button.reset', actions_element )
|
|
.die( 'click' )
|
|
.live
|
|
(
|
|
'click',
|
|
function( event )
|
|
{
|
|
$( this ).closest( 'div.action' )
|
|
.trigger( 'close' );
|
|
}
|
|
);
|
|
|
|
$( 'form', div_action )
|
|
.ajaxForm
|
|
(
|
|
{
|
|
url : app.config.solr_path + app.config.core_admin_path + '?wt=json&indexInfo=false',
|
|
dataType : 'json',
|
|
beforeSubmit : function( array, form, options )
|
|
{
|
|
$( 'button[type="submit"] span', form )
|
|
.addClass( 'loader' );
|
|
},
|
|
success : function( response, status_text, xhr, form )
|
|
{
|
|
delete app.cores_data;
|
|
sammy.refresh();
|
|
|
|
$( 'button.reset', form )
|
|
.trigger( 'click' );
|
|
},
|
|
error : function( xhr, text_status, error_thrown )
|
|
{
|
|
var response = null;
|
|
eval( 'response = ' + xhr.responseText + ';' );
|
|
|
|
var error_elem = $( '.error', div_action.filter( ':visible' ) );
|
|
error_elem.show();
|
|
$( 'span', error_elem ).text( response.error.msg );
|
|
},
|
|
complete : function()
|
|
{
|
|
$( 'button span.loader', actions_element )
|
|
.removeClass( 'loader' );
|
|
}
|
|
}
|
|
);
|
|
|
|
// --
|
|
|
|
$( '#add', content_element )
|
|
.trigger( 'click' );
|
|
|
|
$( '[data-rel="add"] input[type="text"]:first', content_element )
|
|
.focus();
|
|
}
|
|
}
|
|
);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
// #/~cores
|
|
sammy.get
|
|
(
|
|
/^#\/(~cores)\//,
|
|
function( context )
|
|
{
|
|
var content_element = $( '#content' );
|
|
|
|
var path_parts = this.path.match( /^(.+\/~cores\/)(.*)$/ );
|
|
var current_core = path_parts[2];
|
|
|
|
sammy.trigger
|
|
(
|
|
'cores_load_data',
|
|
{
|
|
error : function()
|
|
{
|
|
context.redirect( '#/' + context.params.splat[0] );
|
|
},
|
|
success : function( cores )
|
|
{
|
|
sammy.trigger
|
|
(
|
|
'cores_load_template',
|
|
{
|
|
content_element : content_element,
|
|
callback : function()
|
|
{
|
|
var cores_element = $( '#cores', content_element );
|
|
var navigation_element = $( '#navigation', cores_element );
|
|
var data_element = $( '#data', cores_element );
|
|
var core_data_element = $( '#core-data', data_element );
|
|
var index_data_element = $( '#index-data', data_element );
|
|
|
|
cores_element
|
|
.removeClass( 'empty' );
|
|
|
|
sammy.trigger
|
|
(
|
|
'cores_build_navigation',
|
|
{
|
|
cores : cores,
|
|
basepath : path_parts[1],
|
|
current_core : current_core,
|
|
navigation_element : navigation_element
|
|
}
|
|
);
|
|
|
|
var core_data = cores[current_core];
|
|
var core_basepath = $( '#' + current_core, app.menu_element ).attr( 'data-basepath' );
|
|
|
|
// core-data
|
|
|
|
$( '.startTime dd', core_data_element )
|
|
.html( core_data.startTime );
|
|
|
|
$( '.instanceDir dd', core_data_element )
|
|
.html( core_data.instanceDir );
|
|
|
|
$( '.dataDir dd', core_data_element )
|
|
.html( core_data.dataDir );
|
|
|
|
// index-data
|
|
|
|
$( '.lastModified dd', index_data_element )
|
|
.html( core_data.index.lastModified || '-' );
|
|
|
|
$( '.version dd', index_data_element )
|
|
.html( core_data.index.version );
|
|
|
|
$( '.numDocs dd', index_data_element )
|
|
.html( core_data.index.numDocs );
|
|
|
|
$( '.maxDoc dd', index_data_element )
|
|
.html( core_data.index.maxDoc );
|
|
|
|
$( '.deletedDocs dd', index_data_element )
|
|
.html( core_data.index.deletedDocs || '-' );
|
|
|
|
$( '.optimized dd', index_data_element )
|
|
.addClass( !core_data.index.hasDeletions ? 'ico-1' : 'ico-0' );
|
|
|
|
$( '#actions #optimize', cores_element )
|
|
.show();
|
|
|
|
$( '.optimized dd span', index_data_element )
|
|
.html( !core_data.index.hasDeletions ? 'yes' : 'no' );
|
|
|
|
$( '.current dd', index_data_element )
|
|
.addClass( core_data.index.current ? 'ico-1' : 'ico-0' );
|
|
|
|
$( '.current dd span', index_data_element )
|
|
.html( core_data.index.current ? 'yes' : 'no' );
|
|
|
|
$( '.directory dd', index_data_element )
|
|
.html
|
|
(
|
|
core_data.index.directory
|
|
.replace( /:/g, ':​' )
|
|
.replace( /@/g, '@​' )
|
|
);
|
|
|
|
var core_names = [];
|
|
var core_selects = $( '#actions select', cores_element );
|
|
|
|
for( var key in cores )
|
|
{
|
|
core_names.push( '<option value="' + key + '">' + key + '</option>' )
|
|
}
|
|
|
|
core_selects
|
|
.html( core_names.join( "\n") );
|
|
|
|
$( 'option[value="' + current_core + '"]', core_selects.filter( '.other' ) )
|
|
.remove();
|
|
|
|
$( 'input[data-core="current"]', cores_element )
|
|
.val( current_core );
|
|
|
|
// layout
|
|
|
|
var ui_block = $( '#ui-block' );
|
|
var actions_element = $( '.actions', cores_element );
|
|
var div_action = $( 'div.action', actions_element );
|
|
|
|
ui_block
|
|
.css( 'opacity', 0.7 )
|
|
.width( cores_element.width() + 10 )
|
|
.height( cores_element.height() );
|
|
|
|
if( $( '#cloud.global' ).is( ':visible' ) )
|
|
{
|
|
$( '.cloud', div_action )
|
|
.show();
|
|
}
|
|
|
|
$( 'button.action', actions_element )
|
|
.die( 'click' )
|
|
.live
|
|
(
|
|
'click',
|
|
function( event )
|
|
{
|
|
var self = $( this );
|
|
|
|
self
|
|
.toggleClass( 'open' );
|
|
|
|
$( '.action.' + self.attr( 'id' ), actions_element )
|
|
.trigger( 'open' );
|
|
|
|
return false;
|
|
}
|
|
);
|
|
|
|
div_action
|
|
.die( 'close' )
|
|
.live
|
|
(
|
|
'close',
|
|
function( event )
|
|
{
|
|
div_action.hide();
|
|
ui_block.hide();
|
|
}
|
|
)
|
|
.die( 'open' )
|
|
.live
|
|
(
|
|
'open',
|
|
function( event )
|
|
{
|
|
var self = $( this );
|
|
var rel = $( '#' + self.data( 'rel' ) );
|
|
|
|
self
|
|
.trigger( 'close' )
|
|
.show()
|
|
.css( 'left', rel.position().left );
|
|
|
|
ui_block
|
|
.show();
|
|
}
|
|
);
|
|
|
|
$( 'form button.reset', actions_element )
|
|
.die( 'click' )
|
|
.live
|
|
(
|
|
'click',
|
|
function( event )
|
|
{
|
|
$( this ).closest( 'div.action' )
|
|
.trigger( 'close' );
|
|
}
|
|
);
|
|
|
|
var form_callback = {
|
|
|
|
rename : function( form, response )
|
|
{
|
|
var url = path_parts[1] + $( 'input[name="other"]', form ).val();
|
|
context.redirect( url );
|
|
}
|
|
|
|
};
|
|
|
|
$( 'form', div_action )
|
|
.ajaxForm
|
|
(
|
|
{
|
|
url : app.config.solr_path + app.config.core_admin_path + '?wt=json&indexInfo=false',
|
|
dataType : 'json',
|
|
beforeSubmit : function( array, form, options )
|
|
{
|
|
$( 'button[type="submit"] span', form )
|
|
.addClass( 'loader' );
|
|
},
|
|
success : function( response, status_text, xhr, form )
|
|
{
|
|
var action = $( 'input[name="action"]', form ).val().toLowerCase();
|
|
|
|
delete app.cores_data;
|
|
|
|
if( form_callback[action] )
|
|
{
|
|
form_callback[action]( form, response );
|
|
}
|
|
else
|
|
{
|
|
sammy.refresh();
|
|
}
|
|
|
|
$( 'button.reset', form )
|
|
.trigger( 'click' );
|
|
},
|
|
error : function( xhr, text_status, error_thrown )
|
|
{
|
|
var response = null;
|
|
eval( 'response = ' + xhr.responseText + ';' );
|
|
|
|
var error_elem = $( '.error', div_action.filter( ':visible' ) );
|
|
error_elem.show();
|
|
$( 'span', error_elem ).text( response.error.msg );
|
|
},
|
|
complete : function()
|
|
{
|
|
$( 'button span.loader', actions_element )
|
|
.removeClass( 'loader' );
|
|
}
|
|
}
|
|
);
|
|
|
|
var reload_button = $( '#actions #reload', cores_element );
|
|
reload_button
|
|
.die( 'click' )
|
|
.live
|
|
(
|
|
'click',
|
|
function( event )
|
|
{
|
|
$.ajax
|
|
(
|
|
{
|
|
url : app.config.solr_path + app.config.core_admin_path + '?wt=json&action=RELOAD&core=' + current_core,
|
|
dataType : 'json',
|
|
context : $( this ),
|
|
beforeSend : function( xhr, settings )
|
|
{
|
|
$( 'span', this )
|
|
.addClass( 'loader' );
|
|
},
|
|
success : function( response, text_status, xhr )
|
|
{
|
|
this
|
|
.addClass( 'success' );
|
|
|
|
delete app.cores_data;
|
|
sammy.refresh();
|
|
|
|
window.setTimeout
|
|
(
|
|
function()
|
|
{
|
|
reload_button
|
|
.removeClass( 'success' );
|
|
},
|
|
1000
|
|
);
|
|
},
|
|
error : function( xhr, text_status, error_thrown )
|
|
{
|
|
this
|
|
.addClass( 'warn' );
|
|
|
|
sammy.trigger( 'cores_load_data', { only_failures : true } );
|
|
|
|
window.setTimeout
|
|
(
|
|
function()
|
|
{
|
|
reload_button
|
|
.removeClass( 'warn' );
|
|
},
|
|
1000
|
|
);
|
|
},
|
|
complete : function( xhr, text_status )
|
|
{
|
|
$( 'span', this )
|
|
.removeClass( 'loader' );
|
|
}
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
$( '#actions #unload', cores_element )
|
|
.die( 'click' )
|
|
.live
|
|
(
|
|
'click',
|
|
function( event )
|
|
{
|
|
var ret = confirm( 'Do you really want to unload Core "' + current_core + '"?' );
|
|
if( !ret )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
$.ajax
|
|
(
|
|
{
|
|
url : app.config.solr_path + app.config.core_admin_path + '?wt=json&action=UNLOAD&core=' + current_core,
|
|
dataType : 'json',
|
|
context : $( this ),
|
|
beforeSend : function( xhr, settings )
|
|
{
|
|
$( 'span', this )
|
|
.addClass( 'loader' );
|
|
},
|
|
success : function( response, text_status, xhr )
|
|
{
|
|
delete app.cores_data;
|
|
context.redirect( path_parts[1].substr( 0, path_parts[1].length - 1 ) );
|
|
},
|
|
error : function( xhr, text_status, error_thrown )
|
|
{
|
|
},
|
|
complete : function( xhr, text_status )
|
|
{
|
|
$( 'span', this )
|
|
.removeClass( 'loader' );
|
|
}
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
var optimize_button = $( '#actions #optimize', cores_element );
|
|
optimize_button
|
|
.die( 'click' )
|
|
.live
|
|
(
|
|
'click',
|
|
function( event )
|
|
{
|
|
$.ajax
|
|
(
|
|
{
|
|
url : core_basepath + '/update?optimize=true&waitFlush=true&wt=json',
|
|
dataType : 'json',
|
|
context : $( this ),
|
|
beforeSend : function( xhr, settings )
|
|
{
|
|
$( 'span', this )
|
|
.addClass( 'loader' );
|
|
},
|
|
success : function( response, text_status, xhr )
|
|
{
|
|
this
|
|
.addClass( 'success' );
|
|
|
|
window.setTimeout
|
|
(
|
|
function()
|
|
{
|
|
optimize_button
|
|
.removeClass( 'success' );
|
|
},
|
|
1000
|
|
);
|
|
|
|
$( '.optimized dd.ico-0', index_data_element )
|
|
.removeClass( 'ico-0' )
|
|
.addClass( 'ico-1' );
|
|
},
|
|
error : function( xhr, text_status, error_thrown)
|
|
{
|
|
console.warn( 'd0h, optimize broken!' );
|
|
},
|
|
complete : function( xhr, text_status )
|
|
{
|
|
$( 'span', this )
|
|
.removeClass( 'loader' );
|
|
}
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
$( '.timeago', data_element )
|
|
.timeago();
|
|
|
|
$( 'ul', data_element )
|
|
.each
|
|
(
|
|
function( i, element )
|
|
{
|
|
$( 'li:odd', element )
|
|
.addClass( 'odd' );
|
|
}
|
|
)
|
|
}
|
|
}
|
|
);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
); |