Modified: lucene/dev/branches/solr2193/solr/src/webapp/web/js/script.js
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/webapp/web/js/script.js?rev=1139458&r1=1139457&r2=1139458&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/webapp/web/js/script.js (original)
+++ lucene/dev/branches/solr2193/solr/src/webapp/web/js/script.js Fri Jun 24 23:07:10 2011
@@ -36,26 +36,31 @@ var sammy = $.sammy
'ping',
function( event )
{
- var element = $( this.params.element );
-
$.ajax
(
{
- url : element.attr( 'href' ) + '?wt=json',
+ url : $( this.params.element ).attr( 'rel' ) + '?wt=json&ts=' + (new Date).getTime(),
dataType : 'json',
+ context: this.params.element,
beforeSend : function( arr, form, options )
{
- loader.show( element );
+ loader.show( this );
},
- success : function( response )
+ success : function( response, text_status, xhr )
{
- var qtime_element = $( '.qtime', element );
+ $( this )
+ .removeAttr( 'title' );
+
+ $( this ).parents( 'li' )
+ .removeClass( 'error' );
+
+ var qtime_element = $( '.qtime', this );
if( 0 === qtime_element.size() )
{
qtime_element = $( '<small class="qtime"> (<span></span>)</small>' );
- element
+ $( this )
.append
(
qtime_element
@@ -65,12 +70,17 @@ var sammy = $.sammy
$( 'span', qtime_element )
.html( response.responseHeader.QTime + 'ms' );
},
- error : function()
+ error : function( xhr, text_status, error_thrown )
{
+ $( this )
+ .attr( 'title', '/admin/ping is not configured (' + xhr.status + ': ' + error_thrown + ')' );
+
+ $( this ).parents( 'li' )
+ .addClass( 'error' );
},
- complete : function()
+ complete : function( xhr, text_status )
{
- loader.hide( element );
+ loader.hide( this );
}
}
);
@@ -258,9 +268,11 @@ var sammy = $.sammy
// #/cores
this.get
(
- /^#\/cores$/,
+ /^#\/(cores)$/,
function( context )
{
+ delete app.cores_template;
+
sammy.trigger
(
'cores_load_data',
@@ -286,7 +298,7 @@ var sammy = $.sammy
// #/cores
this.get
(
- /^#\/cores\//,
+ /^#\/(cores)\//,
function( context )
{
var content_element = $( '#content' );
@@ -386,25 +398,24 @@ var sammy = $.sammy
);
var core_names = [];
- var core_selects = $( '.swap select', cores_element );
+ var core_selects = $( '#actions select', cores_element );
for( var key in cores )
{
- core_names.push( '<option>' + key + '</option>' )
+ core_names.push( '<option value="' + key + '">' + key + '</option>' )
}
-
core_selects
.html( core_names.join( "\n") );
- $( 'option[value=' + current_core + ']', core_selects.filter( '.core' ) )
+ $( 'option[value="' + current_core + '"]', core_selects.filter( '#swap_core' ) )
.attr( 'selected', 'selected' );
- $( 'option[value=' + current_core + ']', core_selects.filter( '.other' ) )
+ $( 'option[value="' + current_core + '"]', core_selects.filter( '.other' ) )
.attr( 'disabled', 'disabled' )
.addClass( 'disabled' );
- $( '.rename input[name=core]', cores_element )
+ $( 'input[name="core"]', cores_element )
.val( current_core );
// layout
@@ -445,6 +456,57 @@ var sammy = $.sammy
}
);
+ $( 'form a.submit', button_holder_element )
+ .die( 'click' )
+ .live
+ (
+ 'click',
+ function( event )
+ {
+ var element = $( this );
+ var form_element = element.parents( 'form' );
+ var action = $( 'input[name="action"]', form_element ).val().toLowerCase();
+
+ form_element
+ .ajaxSubmit
+ (
+ {
+ url : app.config.solr_path + app.config.core_admin_path + '?wt=json',
+ dataType : 'json',
+ beforeSubmit : function( array, form, options )
+ {
+ //loader
+ },
+ success : function( response, status_text, xhr, form )
+ {
+ delete app.cores_data;
+
+ if( 'rename' === action )
+ {
+ context.redirect( path_parts[1] + $( 'input[name="other"]', form_element ).val() );
+ }
+ else if( 'swap' === action )
+ {
+ window.location.reload();
+ }
+
+ $( 'a.reset', form )
+ .trigger( 'click' );
+ },
+ error : function( xhr, text_status, error_thrown )
+ {
+ },
+ complete : function()
+ {
+ //loader
+ }
+ }
+ );
+
+ return false;
+ }
+ );
+
$( 'form a.reset', button_holder_element )
.die( 'click' )
.live
@@ -452,12 +514,101 @@ var sammy = $.sammy
'click',
function( event )
{
+ $( this ).parents( 'form' )
+ .resetForm();
+
$( this ).parents( '.button-holder' )
.trigger( 'toggle' );
+
+ return false;
}
);
- $( '#actions .optimize', cores_element )
+ 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 )
+ {
+ this
+ .addClass( 'loader' );
+ },
+ success : function( response, text_status, xhr )
+ {
+ this
+ .addClass( 'success' );
+
+ window.setTimeout
+ (
+ function()
+ {
+ reload_button
+ .removeClass( 'success' );
+ },
+ 5000
+ );
+ },
+ error : function( xhr, text_status, error_thrown )
+ {
+ },
+ complete : function( xhr, text_status )
+ {
+ this
+ .removeClass( 'loader' );
+ }
+ }
+ );
+ }
+ );
+
+ $( '#actions .unload', cores_element )
+ .die( 'click' )
+ .live
+ (
+ 'click',
+ function( event )
+ {
+ $.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 )
+ {
+ 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 )
+ {
+ this
+ .removeClass( 'loader' );
+ }
+ }
+ );
+ }
+ );
+
+ var optimize_button = $( '#actions .optimize', cores_element );
+ optimize_button
.die( 'click' )
.live
(
@@ -477,6 +628,19 @@ var sammy = $.sammy
},
success : function( response, text_status, xhr )
{
+ this
+ .addClass( 'success' );
+
+ window.setTimeout
+ (
+ function()
+ {
+ optimize_button
+ .removeClass( 'success' );
+ },
+ 5000
+ );
+
$( '.optimized dd.ico-0', index_data_element )
.removeClass( 'ico-0' )
.addClass( 'ico-1' );
@@ -719,7 +883,7 @@ var sammy = $.sammy
if( -1 !== key.indexOf( '.path' ) )
{
- displayed_value = system_properties[key].split( ':' );
+ displayed_value = system_properties[key].split( system_properties['path.separator'] );
if( 1 < displayed_value.length )
{
item_class += ' multi';
@@ -794,6 +958,8 @@ var sammy = $.sammy
},
success : function( response, text_status, xhr )
{
+ var self = this;
+
var threadDumpData = response.system.threadDump;
var threadDumpContent = [];
var c = 0;
@@ -802,23 +968,23 @@ var sammy = $.sammy
var state = threadDumpData[i].state;
var name = '<a><span>' + threadDumpData[i].name + '</span></a>';
- var class = [state];
+ var classes = [state];
var details = '';
if( 0 !== c % 2 )
{
- class.push( 'odd' );
+ classes.push( 'odd' );
}
if( threadDumpData[i].lock )
{
- class.push( 'lock' );
+ classes.push( 'lock' );
name += "\n" + '<p title="Waiting on">' + threadDumpData[i].lock + '</p>';
}
if( threadDumpData[i].stackTrace && 0 !== threadDumpData[i].stackTrace.length )
{
- class.push( 'stacktrace' );
+ classes.push( 'stacktrace' );
var stack_trace = threadDumpData[i].stackTrace
.join( '</li><li>' )
@@ -831,7 +997,7 @@ var sammy = $.sammy
+ '</div>';
}
- var item = '<tr class="' + class.join( ' ' ) +'">' + "\n"
+ var item = '<tr class="' + classes.join( ' ' ) +'">' + "\n"
+ '<td class="ico" title="' + state +'"><span>' + state +'</span></td>' + "\n"
+ '<td class="id">' + threadDumpData[i].id + '</td>' + "\n"
@@ -860,7 +1026,42 @@ var sammy = $.sammy
$( this ).closest( 'tr' )
.toggleClass( 'open' );
}
- )
+ );
+
+ $( '.controls a', this )
+ .die( 'click' )
+ .live
+ (
+ 'click',
+ function( event )
+ {
+ var threads_element = $( self );
+ var is_collapsed = threads_element.hasClass( 'collapsed' );
+ var thread_rows = $( 'tr', threads_element );
+
+ thread_rows
+ .each
+ (
+ function( index, element )
+ {
+ if( is_collapsed )
+ {
+ $( element )
+ .addClass( 'open' );
+ }
+ else
+ {
+ $( element )
+ .removeClass( 'open' );
+ }
+ }
+ );
+
+ threads_element
+ .toggleClass( 'collapsed' )
+ .toggleClass( 'expanded' );
+ }
+ );
},
error : function( xhr, text_status, error_thrown)
{
@@ -1261,7 +1462,8 @@ var sammy = $.sammy
},
error : function( xhr, text_status, error_thrown )
{
- console.debug( arguments );
+ $( '#content' )
+ .html( 'sorry, no replication-handler defined!' );
},
complete : function( xhr, text_status )
{
@@ -1323,19 +1525,44 @@ var sammy = $.sammy
'schema_browser_navi',
function( event, params )
{
- var related_navigation_element = $( '#related dl', params.schema_browser_element );
+ var related_navigation_element = $( '#related dl#f-df-t', params.schema_browser_element );
+ var related_navigation_meta = $( '#related dl.ukf-dsf', params.schema_browser_element );
var related_select_element = $( '#related select', params.schema_browser_element )
var type = 'index';
- if( !params.route_params )
+ var sammy_basepath = '#/' + $( 'p a', params.active_core ).html() + '/schema-browser';
+
+ if( !related_navigation_meta.hasClass( 'done' ) )
{
- related_navigation_element
- .hide();
-
- $( 'option:selected', related_select_element )
- .removeAttr( 'selected' );
+ if( app.schema_browser_data.unique_key_field )
+ {
+ $( '.unique-key-field', related_navigation_meta )
+ .show()
+ .after
+ (
+ '<dd class="unique-key-field"><a href="' + sammy_basepath + '/field/' +
+ app.schema_browser_data.unique_key_field + '">' +
+ app.schema_browser_data.unique_key_field + '</a></dd>'
+ );
+ }
+
+ if( app.schema_browser_data.default_search_field )
+ {
+ $( '.default-search-field', related_navigation_meta )
+ .show()
+ .after
+ (
+ '<dd class="default-search-field"><a href="' + sammy_basepath + '/field/' +
+ app.schema_browser_data.default_search_field + '">' +
+ app.schema_browser_data.default_search_field + '</a></dd>'
+ );
+ }
+
+ related_navigation_meta
+ .addClass( 'done' );
}
- else
+
+ if( params.route_params )
{
var type = params.route_params.splat[3];
var value = params.route_params.splat[4];
@@ -1348,7 +1575,7 @@ var sammy = $.sammy
'types' : []
}
- $( 'option[value=' + params.route_params.splat[2] + ']', related_select_element )
+ $( 'option[value="' + params.route_params.splat[2] + '"]', related_select_element )
.attr( 'selected', 'selected' );
if( 'field' === type )
@@ -1396,7 +1623,6 @@ var sammy = $.sammy
}
}
- var sammy_basepath = '#/' + $( 'p a', params.active_core ).html() + '/schema-browser';
var navigation_content = '';
if( 0 !== navigation_data.fields.length )
@@ -1464,20 +1690,41 @@ var sammy = $.sammy
.attr( 'class', type )
.html( navigation_content );
}
-
- $.get
- (
- 'tpl/schema-browser_'+ type + '.html',
- function( template )
- {
- var data_element = $( '#data', params.schema_browser_element );
+ else
+ {
+ related_navigation_element
+ .hide();
- data_element
- .html( template );
+ $( 'option:selected', related_select_element )
+ .removeAttr( 'selected' );
+ }
- params.callback( app.schema_browser_data, data_element );
- }
- );
+ if( 'field' === type && value === app.schema_browser_data.unique_key_field )
+ {
+ $( '.unique-key-field', related_navigation_meta )
+ .addClass( 'active' );
+ }
+ else
+ {
+ $( '.unique-key-field', related_navigation_meta )
+ .removeClass( 'active' );
+ }
+
+ if( 'field' === type && value === app.schema_browser_data.default_search_field )
+ {
+ $( '.default-search-field', related_navigation_meta )
+ .addClass( 'active' );
+ }
+ else
+ {
+ $( '.default-search-field', related_navigation_meta )
+ .removeClass( 'active' );
+ }
+
+ if( params.callback )
+ {
+ params.callback( app.schema_browser_data, $( '#data', params.schema_browser_element ) );
+ }
}
);
@@ -1693,7 +1940,7 @@ var sammy = $.sammy
{
fields.sort();
related_options += '<optgroup label="Fields">' + "\n";
- related_options += fields.join( "\n" ) + "\n";
+ related_options += fields.sort().join( "\n" ) + "\n";
related_options += '</optgroup>' + "\n";
}
@@ -1709,7 +1956,7 @@ var sammy = $.sammy
{
dynamic_fields.sort();
related_options += '<optgroup label="DynamicFields">' + "\n";
- related_options += dynamic_fields.join( "\n" ) + "\n";
+ related_options += dynamic_fields.sort().join( "\n" ) + "\n";
related_options += '</optgroup>' + "\n";
}
@@ -1725,7 +1972,7 @@ var sammy = $.sammy
{
types.sort();
related_options += '<optgroup label="Types">' + "\n";
- related_options += types.join( "\n" ) + "\n";
+ related_options += types.sort().join( "\n" ) + "\n";
related_options += '</optgroup>' + "\n";
}
@@ -1787,22 +2034,11 @@ var sammy = $.sammy
{
var callback = function( schema_browser_data, data_element )
{
- var sammy_basepath = '#/' + $( 'p a', context.active_core ).html() + '/schema-browser'
-
- if( schema_browser_data.unique_key_field )
- {
- $( '.unique-key-field', data_element )
- .show()
- .after( '<dd><a href="' + sammy_basepath + '/field/' + schema_browser_data.unique_key_field + '">' + schema_browser_data.unique_key_field + '</a></dd>' );
- }
+ data_element
+ .hide();
+ };
- if( schema_browser_data.default_search_field )
- {
- $( '.default-search-field', data_element )
- .show()
- .after( '<dd><a href="' + sammy_basepath + '/field/' + schema_browser_data.default_search_field + '">' + schema_browser_data.default_search_field + '</a></dd>' );
- }
- }
+ delete app.schema_browser_data;
sammy.trigger
(
@@ -1815,20 +2051,28 @@ var sammy = $.sammy
}
);
- // #/:core/schema-browser/field/$field
+ // #/:core/schema-browser/field|dynamic-field|type/$field
this.get
(
- /^#\/([\w\d]+)\/(schema-browser)(\/(field)\/(.+))$/,
+ /^#\/([\w\d]+)\/(schema-browser)(\/(field|dynamic-field|type)\/(.+))$/,
function( context )
{
var callback = function( schema_browser_data, data_element )
{
var field = context.params.splat[4];
+
+ var type = context.params.splat[3];
+ var is_f = 'field' === type;
+ var is_df = 'dynamic-field' === type;
+ var is_t = 'type' === type;
var options_element = $( '.options', data_element );
- var sammy_basepath = '#/' + $( 'p a', context.active_core ).html() + '/schema-browser'
+ var sammy_basepath = context.path.indexOf( '/', context.path.indexOf( '/', 2 ) + 1 );
- var keystring_to_list = function( keystring )
+ data_element
+ .show();
+
+ var keystring_to_list = function( keystring, element_class )
{
var key_list = keystring.replace( /-/g, '' ).split( '' );
var list = [];
@@ -1849,7 +2093,12 @@ var sammy = $.sammy
if( option_key )
{
- list.push( '<dd>' + option_key + ',</dd>' );
+ list.push
+ (
+ '<dd ' + ( element_class ? ' class="' + element_class + '"' : '' ) + '>' +
+ option_key +
+ ',</dd>'
+ );
}
}
@@ -1858,192 +2107,265 @@ var sammy = $.sammy
return list;
}
+ var flags = null;
+
+ if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].flags )
+ {
+ flags = schema_browser_data.fields[field].flags;
+ }
+ else if( is_df && schema_browser_data.dynamic_fields[field] && schema_browser_data.dynamic_fields[field].flags )
+ {
+ flags = schema_browser_data.dynamic_fields[field].flags;
+ }
+
// -- properties
- if( schema_browser_data.fields[field].flags )
+ var properties_element = $( 'dt.properties', options_element );
+ if( flags )
{
- var properties_element = $( '.properties', options_element );
- var properties_keys = keystring_to_list( schema_browser_data.fields[field].flags );
+ var properties_keys = keystring_to_list( flags, 'properties' );
+
+ $( 'dd.properties', options_element )
+ .remove();
properties_element
.show()
.after( properties_keys.join( "\n" ) );
}
+ else
+ {
+ $( '.properties', options_element )
+ .hide();
+ }
// -- schema
- if( schema_browser_data.fields[field].schema )
+ var schema_element = $( 'dt.schema', options_element );
+ if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].schema )
{
- var schema_element = $( '.schema', options_element );
- var schema_keys = keystring_to_list( schema_browser_data.fields[field].schema );
+ var schema_keys = keystring_to_list( schema_browser_data.fields[field].schema, 'schema' );
+
+ $( 'dd.schema', options_element )
+ .remove();
schema_element
.show()
.after( schema_keys.join( "\n" ) );
}
+ else
+ {
+ $( '.schema', options_element )
+ .hide();
+ }
// -- index
- if( schema_browser_data.fields[field].index )
+ var index_element = $( 'dt.index', options_element );
+ if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].index )
{
- var index_element = $( '.index', options_element );
var index_keys = [];
if( 0 === schema_browser_data.fields[field].index.indexOf( '(' ) )
{
- index_keys.push( '<dd>' + schema_browser_data.fields[field].index + '</dd>' );
+ index_keys.push( '<dd class="index">' + schema_browser_data.fields[field].index + '</dd>' );
}
else
{
- index_keys = keystring_to_list( schema_browser_data.fields[field].index );
+ index_keys = keystring_to_list( schema_browser_data.fields[field].index, 'index' );
}
+ $( 'dd.index', options_element )
+ .remove();
+
index_element
.show()
.after( index_keys.join( "\n" ) );
}
+ else
+ {
+ $( '.index', options_element )
+ .hide();
+ }
// -- docs
- if( schema_browser_data.fields[field].docs )
- {
- var docs_element = $( '.docs', options_element );
+ var docs_element = $( 'dt.docs', options_element );
+ if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].docs )
+ {
+ $( 'dd.docs', options_element )
+ .remove();
docs_element
.show()
- .after( '<dd>' + schema_browser_data.fields[field].docs + '</dd>' );
+ .after( '<dd class="docs">' + schema_browser_data.fields[field].docs + '</dd>' );
+ }
+ else
+ {
+ $( '.docs', options_element )
+ .hide();
}
// -- distinct
- if( schema_browser_data.fields[field].distinct )
+ var distinct_element = $( 'dt.distinct', options_element );
+ if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].distinct )
{
- var distinct_element = $( '.distinct', options_element );
+ $( 'dd.distinct', options_element )
+ .remove();
distinct_element
.show()
- .after( '<dd>' + schema_browser_data.fields[field].distinct + '</dd>' );
+ .after( '<dd class="distinct">' + schema_browser_data.fields[field].distinct + '</dd>' );
+ }
+ else
+ {
+ $( '.distinct', options_element )
+ .hide();
}
// -- position-increment-gap
- if( schema_browser_data.fields[field].positionIncrementGap )
+ var pig_element = $( 'dt.position-increment-gap', options_element );
+ if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].positionIncrementGap )
{
- var pig_element = $( '.position-increment-gap', options_element );
+ $( 'dt.position-increment-gap', options_element )
+ .remove();
pig_element
.show()
- .after( '<dd>' + schema_browser_data.fields[field].positionIncrementGap + '</dd>' );
+ .after( '<dd class="position-increment-gap">' + schema_browser_data.fields[field].positionIncrementGap + '</dd>' );
}
-
- var analyzer_data = schema_browser_data.types[schema_browser_data.relations.f_t[field]];
+ else
+ {
+ $( '.position-increment-gap', options_element )
+ .hide();
+ }
+
var analyzer_element = $( '.analyzer', data_element );
+ var analyzer_data = null;
- var transform_analyzer_data_into_list = function( analyzer_data )
+ if( is_f )
{
- var args = [];
- for( var key in analyzer_data.args )
- {
- var arg_class = '';
- var arg_content = '';
+ analyzer_data = schema_browser_data.types[schema_browser_data.relations.f_t[field]];
+ }
+ else if( is_df )
+ {
+ analyzer_data = schema_browser_data.types[schema_browser_data.relations.df_t[field]];
+ }
+ else if( is_t )
+ {
+ analyzer_data = schema_browser_data.types[field];
+ }
- if( 'true' === analyzer_data.args[key] || '1' === analyzer_data.args[key] )
- {
- arg_class = 'ico-1';
- arg_content = key;
- }
- else if( 'false' === analyzer_data.args[key] || '0' === analyzer_data.args[key] )
- {
- arg_class = 'ico-0';
- arg_content = key;
- }
- else
+ if( analyzer_data )
+ {
+ var transform_analyzer_data_into_list = function( analyzer_data )
+ {
+ var args = [];
+ for( var key in analyzer_data.args )
{
- arg_content = key + ': ';
+ var arg_class = '';
+ var arg_content = '';
- if( 'synonyms' === key || 'words' === key )
+ if( 'true' === analyzer_data.args[key] || '1' === analyzer_data.args[key] )
+ {
+ arg_class = 'ico-1';
+ arg_content = key;
+ }
+ else if( 'false' === analyzer_data.args[key] || '0' === analyzer_data.args[key] )
{
- // @TODO: set link target for file
- arg_content += '<a>' + analyzer_data.args[key] + '</a>';
+ arg_class = 'ico-0';
+ arg_content = key;
}
else
{
- arg_content += analyzer_data.args[key];
+ arg_content = key + ': ';
+
+ if( 'synonyms' === key || 'words' === key )
+ {
+ // @TODO: set link target for file
+ arg_content += '<a>' + analyzer_data.args[key] + '</a>';
+ }
+ else
+ {
+ arg_content += analyzer_data.args[key];
+ }
}
+
+ args.push( '<dd class="' + arg_class + '">' + arg_content + '</dd>' );
}
- args.push( '<dd class="' + arg_class + '">' + arg_content + '</dd>' );
- }
+ var list_content = '<dt>' + analyzer_data.className + '</dt>';
+ if( 0 !== args.length )
+ {
+ args.sort();
+ list_content += args.join( "\n" );
+ }
- var list_content = '<dt>' + analyzer_data.className + '</dt>';
- if( 0 !== args.length )
- {
- args.sort();
- list_content += args.join( "\n" );
+ return list_content;
}
- return list_content;
- }
-
- // -- field-type
- var field_type_element = $( '.field-type', options_element );
-
- field_type_element
- .show()
- .after( '<dd>' + analyzer_data.className + '</dd>' );
-
-
- for( var key in analyzer_data )
- {
- var key_match = key.match( /^(.+)Analyzer$/ );
- if( !key_match )
- {
- continue;
- }
+ // -- field-type
+ var field_type_element = $( 'dt.field-type', options_element );
- var analyzer_key_element = $( '.' + key_match[1], analyzer_element );
- var analyzer_key_data = analyzer_data[key];
+ $( 'dd.field-type', options_element )
+ .remove();
- analyzer_element.show();
- analyzer_key_element.show();
+ field_type_element
+ .show()
+ .after( '<dd class="field-type">' + analyzer_data.className + '</dd>' );
- if( analyzer_key_data.className )
- {
- $( 'dl:first dt', analyzer_key_element )
- .html( analyzer_key_data.className );
- }
- for( var type in analyzer_key_data )
+ for( var key in analyzer_data )
{
- if( 'object' !== typeof analyzer_key_data[type] )
+ var key_match = key.match( /^(.+)Analyzer$/ );
+ if( !key_match )
{
continue;
}
- var type_element = $( '.' + type, analyzer_key_element );
- var type_content = [];
+ var analyzer_key_element = $( '.' + key_match[1], analyzer_element );
+ var analyzer_key_data = analyzer_data[key];
- type_element.show();
+ analyzer_element.show();
+ analyzer_key_element.show();
- if( analyzer_key_data[type].className )
+ if( analyzer_key_data.className )
{
- type_content.push( transform_analyzer_data_into_list( analyzer_key_data[type] ) );
+ $( 'dl:first dt', analyzer_key_element )
+ .html( analyzer_key_data.className );
}
- else
+
+ $( 'ul li', analyzer_key_element )
+ .hide();
+
+ for( var type in analyzer_key_data )
{
- for( var entry in analyzer_key_data[type] )
+ if( 'object' !== typeof analyzer_key_data[type] )
{
- type_content.push( transform_analyzer_data_into_list( analyzer_key_data[type][entry] ) );
+ continue;
+ }
+
+ var type_element = $( '.' + type, analyzer_key_element );
+ var type_content = [];
+
+ type_element.show();
+
+ if( analyzer_key_data[type].className )
+ {
+ type_content.push( transform_analyzer_data_into_list( analyzer_key_data[type] ) );
+ }
+ else
+ {
+ for( var entry in analyzer_key_data[type] )
+ {
+ type_content.push( transform_analyzer_data_into_list( analyzer_key_data[type][entry] ) );
+ }
}
- }
- $( 'dl', type_element )
- .append( type_content.join( "\n" ) );
+ $( 'dl', type_element )
+ .empty()
+ .append( type_content.join( "\n" ) );
+ }
}
}
-
var topterms_holder_element = $( '.topterms-holder', data_element );
- if( !schema_browser_data.fields[field].topTerms_hash )
- {
- topterms_holder_element
- .hide();
- }
- else
+ if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].topTerms_hash )
{
topterms_holder_element
.show();
@@ -2077,6 +2399,7 @@ var sammy = $.sammy
topterms_content += '</tbody>';
topterms_table_element
+ .empty()
.append( topterms_content );
$( 'tbody', topterms_table_element )
@@ -2139,14 +2462,14 @@ var sammy = $.sammy
}
);
}
-
- var histogram_holder_element = $( '.histogram-holder', data_element );
- if( !schema_browser_data.fields[field].histogram_hash )
+ else
{
- histogram_holder_element
+ topterms_holder_element
.hide();
}
- else
+
+ var histogram_holder_element = $( '.histogram-holder', data_element );
+ if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].histogram_hash )
{
histogram_holder_element
.show();
@@ -2184,52 +2507,11 @@ var sammy = $.sammy
}
);
}
- }
-
- sammy.trigger
- (
- 'schema_browser_load',
- {
- callback : callback,
- active_core : this.active_core,
- route_params : this.params
- }
- );
- }
- );
-
- // #/:core/schema-browser/dynamic-field/$field
- this.get
- (
- /^#\/([\w\d]+)\/(schema-browser)(\/(dynamic-field)\/(.+))$/,
- function( context )
- {
- var callback = function( schema_browser_data, data_element )
- {
- console.debug( data_element );
- }
-
- sammy.trigger
- (
- 'schema_browser_load',
+ else
{
- callback : callback,
- active_core : this.active_core,
- route_params : this.params
+ histogram_holder_element
+ .hide();
}
- );
- }
- );
-
- // #/:core/schema-browser/type/$type
- this.get
- (
- /^#\/([\w\d]+)\/(schema-browser)(\/(type)\/(.+))$/,
- function( context )
- {
- var callback = function( schema_browser_data, data_element )
- {
- console.debug( data_element );
}
sammy.trigger
@@ -2265,8 +2547,8 @@ var sammy = $.sammy
var dataimport_handlers = [];
for( var key in handlers )
{
- if( handlers[key].class !== key &&
- handlers[key].class === 'org.apache.solr.handler.dataimport.DataImportHandler' )
+ if( handlers[key]['class'] !== key &&
+ handlers[key]['class'] === 'org.apache.solr.handler.dataimport.DataImportHandler' )
{
dataimport_handlers.push( key );
}
@@ -2287,7 +2569,7 @@ var sammy = $.sammy
// #/:core/dataimport
this.get
(
- /^#\/([\w\d]+)\/dataimport$/,
+ /^#\/([\w\d]+)\/(dataimport)$/,
function( context )
{
sammy.trigger
@@ -2297,6 +2579,14 @@ var sammy = $.sammy
active_core : this.active_core,
callback : function( dataimport_handlers )
{
+ if( 0 === dataimport_handlers.length )
+ {
+ $( '#content' )
+ .html( 'sorry, no dataimport-handler defined!' );
+
+ return false;
+ }
+
context.redirect( context.path + '/' + dataimport_handlers[0] );
}
}
@@ -2307,7 +2597,7 @@ var sammy = $.sammy
// #/:core/dataimport
this.get
(
- /^#\/([\w\d]+)\/dataimport\//,
+ /^#\/([\w\d]+)\/(dataimport)\//,
function( context )
{
var core_basepath = this.active_core.attr( 'data-basepath' );
@@ -2341,6 +2631,7 @@ var sammy = $.sammy
active_core : context.active_core,
callback : function( dataimport_handlers )
{
+
var handlers_element = $( '.handler', form_element );
var handlers = [];
@@ -2357,7 +2648,7 @@ var sammy = $.sammy
$( 'ul', handlers_element )
.html( handlers.join( "\n") ) ;
- $( 'a[href=' + context.path + ']', handlers_element ).parent()
+ $( 'a[href="' + context.path + '"]', handlers_element ).parent()
.addClass( 'active' );
handlers_element
@@ -2529,20 +2820,11 @@ var sammy = $.sammy
{
started_at = (new Date()).toGMTString();
}
- console.debug( 'started_at @ ', started_at );
function dataimport_compute_details( response, details_element )
{
var details = [];
-
- console.debug( 'elapsed @ ', $( 'str[name="Time Elapsed"]', response ).text() );
- console.debug( 'taken @ ', $( 'str[name="Time taken "]', response ).text() );
- console.debug( 'requests @ ', $( 'str[name="Total Requests made to DataSource"]', response ).text() );
- console.debug( 'fetched @ ', $( 'str[name="Total Rows Fetched"]', response ).text() );
- console.debug( 'skipped @ ', $( 'str[name="Total Documents Skipped"]', response ).text() );
- console.debug( 'processed @ ', $( 'str[name="Total Documents Processed"]', response ).text() );
-
var requests = parseInt( $( 'str[name="Total Requests made to DataSource"]', response ).text() );
if( NaN !== requests )
{
@@ -2604,7 +2886,6 @@ var sammy = $.sammy
$( '.info strong', state_element )
.text( $( 'str[name=""]', response ).text() );
- console.debug( 'failure' );
console.debug( 'rollback @ ', rollback_element.text() );
}
else if( 'idle' === status && 0 !== messages_count )
@@ -2620,7 +2901,6 @@ var sammy = $.sammy
$( '.info strong', state_element )
.text( $( 'str[name=""]', response ).text() );
- console.debug( 'success' );
dataimport_compute_details( response, $( '.info .details', state_element ) );
}
else if( 'busy' === status )
@@ -2639,7 +2919,6 @@ var sammy = $.sammy
$( '.info strong', state_element )
.text( 'Indexing ...' );
- console.debug( 'indexing' );
dataimport_compute_details( response, $( '.info .details', state_element ) );
window.setTimeout( dataimport_fetch_status, 2000 );
@@ -2700,47 +2979,40 @@ var sammy = $.sammy
}
);
- // #/:core/info(/stats)
- this.get
+
+
+ this.bind
(
- /^#\/([\w\d]+)\/info/,
- function( context )
+ 'plugins_load',
+ function( event, params )
{
- var core_basepath = this.active_core.attr( 'data-basepath' );
- var content_element = $( '#content' );
- var show_stats = 0 <= this.path.indexOf( 'stats' );
-
- if( show_stats )
+ var callback = function()
{
- $( 'li.stats', this.active_core )
- .addClass( 'active' );
+ params.callback( app.plugin_data.plugin_data, app.plugin_data.sort_table, app.plugin_data.types );
}
- else
+
+ if( app.plugin_data )
{
- $( 'li.plugins', this.active_core )
- .addClass( 'active' );
+ callback( app.plugin_data );
+ return true;
}
-
- content_element
- .html( '<div id="plugins"></div>' );
-
+
+ var core_basepath = params.active_core.attr( 'data-basepath' );
$.ajax
(
{
url : core_basepath + '/admin/mbeans?stats=true&wt=json',
dataType : 'json',
- context : $( '#plugins', content_element ),
beforeSend : function( xhr, settings )
{
- this
- .html( '<div class="loader">Loading ...</div>' );
},
success : function( response, text_status, xhr )
{
+ var types = [];
var sort_table = {};
- var content = '';
-
- response.plugins = {};
+ var plugin_data = {};
+
+ var types_obj = {};
var plugin_key = null;
for( var i = 0; i < response['solr-mbeans'].length; i++ )
@@ -2751,155 +3023,233 @@ var sammy = $.sammy
}
else
{
- response.plugins[plugin_key] = response['solr-mbeans'][i];
+ plugin_data[plugin_key] = response['solr-mbeans'][i];
}
}
- for( var key in response.plugins )
+ for( var key in plugin_data )
{
sort_table[key] = {
url : [],
component : [],
handler : []
};
- for( var part_key in response.plugins[key] )
+ for( var part_key in plugin_data[key] )
{
if( 0 < part_key.indexOf( '.' ) )
{
+ types_obj[key] = true;
sort_table[key]['handler'].push( part_key );
}
else if( 0 === part_key.indexOf( '/' ) )
{
+ types_obj[key] = true;
sort_table[key]['url'].push( part_key );
}
else
{
+ types_obj[key] = true;
sort_table[key]['component'].push( part_key );
}
}
-
- content += '<div class="block" id="' + key.toLowerCase() + '">' + "\n";
- content += '<h2><span>' + key + '</span></h2>' + "\n";
- content += '<div class="content">' + "\n";
- content += '<ul>' + "\n";
-
- for( var sort_key in sort_table[key] )
+ }
+
+ for( var type in types_obj )
+ {
+ types.push( type );
+ }
+ types.sort();
+
+ app.plugin_data = {
+ 'plugin_data' : plugin_data,
+ 'sort_table' : sort_table,
+ 'types' : types
+ }
+
+ $.get
+ (
+ 'tpl/plugins.html',
+ function( template )
{
- sort_table[key][sort_key].sort();
- var sort_key_length = sort_table[key][sort_key].length;
+ $( '#content' )
+ .html( template );
+
+ callback( app.plugin_data );
+ }
+ );
+ },
+ error : function( xhr, text_status, error_thrown)
+ {
+ },
+ complete : function( xhr, text_status )
+ {
+ }
+ }
+ );
+ }
+ );
+
+ // #/:core/plugins/$type
+ this.get
+ (
+ /^#\/([\w\d]+)\/(plugins)\/(\w+)$/,
+ function( context )
+ {
+ var content_element = $( '#content' );
+ var type = context.params.splat[2].toUpperCase();
+ var context_path = context.path.split( '?' ).shift();
+
+ sammy.trigger
+ (
+ 'plugins_load',
+ {
+ active_core : this.active_core,
+ callback : function( plugin_data, plugin_sort, types )
+ {
+ var frame_element = $( '#frame', content_element );
+ var navigation_element = $( '#navigation ul', content_element );
+
+ var navigation_content = [];
+ for( var i = 0; i < types.length; i++ )
+ {
+ var type_url = context.params.splat[0] + '/' +
+ context.params.splat[1] + '/' +
+ types[i].toLowerCase();
+
+ navigation_content.push
+ (
+ '<li class="' + types[i].toLowerCase() + '">' +
+ '<a href="#/' + type_url + '">' + types[i] + '</a>' +
+ '</li>'
+ );
+ }
+
+ navigation_element
+ .html( navigation_content.join( "\n" ) );
+
+ $( 'a[href="' + context_path + '"]', navigation_element )
+ .parent().addClass( 'current' );
- for( var i = 0; i < sort_key_length; i++ )
+ var content = '<ul>';
+ for( var sort_key in plugin_sort[type] )
{
- content += '<li class="entry"><a>' + sort_table[key][sort_key][i] + '</a>' + "\n";
- content += '<ul class="detail">' + "\n";
+ plugin_sort[type][sort_key].sort();
+ var plugin_type_length = plugin_sort[type][sort_key].length;
- var details = response.plugins[key][ sort_table[key][sort_key][i] ];
- for( var detail_key in details )
+ for( var i = 0; i < plugin_type_length; i++ )
{
- if( 'stats' !== detail_key )
- {
- var detail_value = details[detail_key];
-
- if( 'description' === detail_key )
- {
- detail_value = detail_value.replace( /,/g, ',​' );
- }
- else if( 'src' === detail_key )
- {
- detail_value = detail_value.replace( /\//g, '/​' );
- }
-
- content += '<li><dl class="clearfix">' + "\n";
- content += '<dt>' + detail_key + ':</dt>' + "\n";
- content += '<dd>' + detail_value + '</dd>' + "\n";
- content += '</dl></li>' + "\n";
- }
- else if( 'stats' === detail_key && details[detail_key] && show_stats )
+ content += '<li class="entry">' + "\n";
+ content += '<a href="' + context_path + '?entry=' + plugin_sort[type][sort_key][i] + '">';
+ content += plugin_sort[type][sort_key][i]
+ content += '</a>' + "\n";
+ content += '<ul class="detail">' + "\n";
+
+ var details = plugin_data[type][ plugin_sort[type][sort_key][i] ];
+ for( var detail_key in details )
{
- content += '<li class="stats clearfix">' + "\n";
- content += '<span>' + detail_key + ':</span>' + "\n";
- content += '<ul>' + "\n";
-
- for( var stats_key in details[detail_key] )
+ if( 'stats' !== detail_key )
{
- var stats_value = details[detail_key][stats_key];
+ var detail_value = details[detail_key];
- if( 'readerDir' === stats_key )
+ if( 'description' === detail_key )
{
- stats_value = stats_value.replace( /@/g, '@​' );
+ detail_value = detail_value.replace( /,/g, ',​' );
+ }
+ else if( 'src' === detail_key )
+ {
+ detail_value = detail_value.replace( /\//g, '/​' );
}
content += '<li><dl class="clearfix">' + "\n";
- content += '<dt>' + stats_key + ':</dt>' + "\n";
- content += '<dd>' + stats_value + '</dd>' + "\n";
+ content += '<dt>' + detail_key + ':</dt>' + "\n";
+ content += '<dd>' + detail_value + '</dd>' + "\n";
content += '</dl></li>' + "\n";
}
+ else if( 'stats' === detail_key && details[detail_key] )
+ {
+ content += '<li class="stats clearfix">' + "\n";
+ content += '<span>' + detail_key + ':</span>' + "\n";
+ content += '<ul>' + "\n";
+
+ for( var stats_key in details[detail_key] )
+ {
+ var stats_value = details[detail_key][stats_key];
+
+ if( 'readerDir' === stats_key )
+ {
+ stats_value = stats_value.replace( /@/g, '@​' );
+ }
+
+ content += '<li><dl class="clearfix">' + "\n";
+ content += '<dt>' + stats_key + ':</dt>' + "\n";
+ content += '<dd>' + stats_value + '</dd>' + "\n";
+ content += '</dl></li>' + "\n";
+ }
- content += '</ul></li>' + "\n";
+ content += '</ul></li>' + "\n";
+ }
}
+
+ content += '</ul>' + "\n";
}
-
- content += '</ul>' + "\n";
- }
- }
-
- content += '</ul>' + "\n";
- content += '</div>' + "\n";
- content += '</div>' + "\n";
- }
-
- this
- .html( content );
-
- $( '.block a', this )
- .die( 'click' )
- .live
- (
- 'click',
- function( event )
- {
- $( this ).parent()
- .toggleClass( 'expanded' );
}
- );
-
- $( '.entry', this )
- .each
- (
- function( i, entry )
- {
- $( '.detail > li', entry ).not( '.stats' ).filter( ':even' )
- .addClass( 'odd' );
+ content += '</ul>' + "\n";
- $( '.stats li:odd', entry )
- .addClass( 'odd' );
- }
- );
- },
- error : function( xhr, text_status, error_thrown)
- {
- },
- complete : function( xhr, text_status )
+ frame_element
+ .html( content );
+
+ $( 'a[href="' + decodeURIComponent( context.path ) + '"]', frame_element )
+ .parent().addClass( 'expanded' );
+
+ $( '.entry', frame_element )
+ .each
+ (
+ function( i, entry )
+ {
+ $( '.detail > li', entry ).not( '.stats' ).filter( ':even' )
+ .addClass( 'odd' );
+
+ $( '.stats li:odd', entry )
+ .addClass( 'odd' );
+ }
+ );
+ }
+ }
+ );
+ }
+ );
+
+ // #/:core/plugins
+ this.get
+ (
+ /^#\/([\w\d]+)\/(plugins)$/,
+ function( context )
+ {
+ delete app.plugin_data;
+
+ sammy.trigger
+ (
+ 'plugins_load',
+ {
+ active_core : this.active_core,
+ callback : function( plugin_data, plugin_sort, types )
{
+ context.redirect( context.path + '/' + types[0].toLowerCase() );
}
}
);
-
}
);
// #/:core/query
this.get
(
- /^#\/([\w\d]+)\/query$/,
+ /^#\/([\w\d]+)\/(query)$/,
function( context )
{
var core_basepath = this.active_core.attr( 'data-basepath' );
var content_element = $( '#content' );
- $( 'li.query', this.active_core )
- .addClass( 'active' );
-
$.get
(
'tpl/query.html',
@@ -2974,6 +3324,15 @@ var sammy = $.sammy
}
)
+ for( var key in context.params )
+ {
+ if( 'string' === typeof context.params[key] )
+ {
+ $( '[name="' + key + '"]', query_form )
+ .val( context.params[key] );
+ }
+ }
+
query_form
.die( 'submit' )
.live
@@ -2981,11 +3340,33 @@ var sammy = $.sammy
'submit',
function( event )
{
+ var form_map = {};
+ var form_values = [];
+ var all_form_values = query_form.formToArray();
+
+ for( var i = 0; i < all_form_values.length; i++ )
+ {
+ if( !all_form_values[i].value || 0 === all_form_values[i].value.length )
+ {
+ continue;
+ }
+
+ var name_parts = all_form_values[i].name.split( '.' );
+ if( 1 < name_parts.length && !form_map[name_parts[0]] )
+ {
+ console.debug( 'skip "' + all_form_values[i].name + '", parent missing' );
+ continue;
+ }
+
+ form_map[all_form_values[i].name] = all_form_values[i].value;
+ form_values.push( all_form_values[i] );
+ }
+
var query_url = window.location.protocol + '//' +
window.location.host +
core_basepath +
'/select?' +
- query_form.formSerialize();
+ $.param( form_values );
url_element
.val( query_url )
@@ -3005,15 +3386,12 @@ var sammy = $.sammy
// #/:core/analysis
this.get
(
- /^#\/([\w\d]+)\/analysis$/,
+ /^#\/([\w\d]+)\/(analysis)$/,
function( context )
{
var core_basepath = this.active_core.attr( 'data-basepath' );
var content_element = $( '#content' );
- $( 'li.analysis', this.active_core )
- .addClass( 'active' );
-
$.get
(
'tpl/analysis.html',
@@ -3052,7 +3430,7 @@ var sammy = $.sammy
if( 0 !== fields.length )
{
content += '<optgroup label="Fields">' + "\n";
- content += fields.join( "\n" ) + "\n";
+ content += fields.sort().join( "\n" ) + "\n";
content += '</optgroup>' + "\n";
}
@@ -3067,14 +3445,14 @@ var sammy = $.sammy
if( 0 !== types.length )
{
content += '<optgroup label="Types">' + "\n";
- content += types.join( "\n" ) + "\n";
+ content += types.sort().join( "\n" ) + "\n";
content += '</optgroup>' + "\n";
}
this
.html( content );
-
- $( 'option[value=fieldname\=' + response.schema.defaultSearchField + ']', this )
+
+ $( 'option[value="fieldname\=' + response.schema.defaultSearchField + '"]', this )
.attr( 'selected', 'selected' );
},
error : function( xhr, text_status, error_thrown)
@@ -3123,6 +3501,11 @@ var sammy = $.sammy
build_analysis_table( 'type', name, response.analysis.field_types[name] );
}
},
+ error : function( xhr, text_status, error_thrown )
+ {
+ $( '#analysis-error', analysis_element )
+ .show();
+ },
complete : function()
{
//loader
@@ -3191,7 +3574,14 @@ var sammy = $.sammy
var length = raw_parts[key].length;
for( var j = 0; j < length; j++ )
{
- parts[key].push( '<td>' + raw_parts[key][j].join( "\n" ) + '</td>' );
+ if( raw_parts[key][j] )
+ {
+ parts[key].push( '<td>' + raw_parts[key][j].join( "\n" ) + '</td>' );
+ }
+ else
+ {
+ parts[key].push( '<td><div class="empty">∅</div></td>' );
+ }
}
}
@@ -3261,13 +3651,35 @@ var sammy = $.sammy
/^#\/([\w\d]+)\/(schema|config)$/,
function( context )
{
- var content_element = $( '#content' );
+ var core_basepath = this.active_core.attr( 'data-basepath' );
- content_element
- .html( '<iframe src="' + $( '.active a', this.active_core ).attr( 'href' ) + '"></iframe>' );
-
- $( 'iframe', content_element )
- .css( 'height', $( '#main' ).height() );
+ $.ajax
+ (
+ {
+ url : core_basepath + app.config[context.params.splat[1] + '_path'],
+ dataType : 'xml',
+ context : $( '#content' ),
+ beforeSend : function( xhr, settings )
+ {
+ this
[... 548 lines stripped ...]