You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ry...@apache.org on 2012/02/23 20:23:12 UTC
svn commit: r1292908 [9/9] - in /lucene/dev/trunk/solr/webapp/web: ./ css/
css/styles/ js/ js/lib/ js/scripts/ tpl/
Added: lucene/dev/trunk/solr/webapp/web/js/scripts/schema-browser.js
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/webapp/web/js/scripts/schema-browser.js?rev=1292908&view=auto
==============================================================================
--- lucene/dev/trunk/solr/webapp/web/js/scripts/schema-browser.js (added)
+++ lucene/dev/trunk/solr/webapp/web/js/scripts/schema-browser.js Thu Feb 23 19:23:10 2012
@@ -0,0 +1,1052 @@
+sammy.bind
+(
+ 'schema_browser_navi',
+ function( event, params )
+ {
+ 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';
+
+ var sammy_basepath = '#/' + $( 'p a', params.active_core ).html() + '/schema-browser';
+
+ if( !related_navigation_meta.hasClass( 'done' ) )
+ {
+ 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' );
+ }
+
+ if( params.route_params )
+ {
+ var type = params.route_params.splat[3];
+ var value = params.route_params.splat[4];
+
+ var navigation_data = {
+ 'fields' : [],
+ 'copyfield_source' : [],
+ 'copyfield_dest' : [],
+ 'dynamic_fields' : [],
+ 'types' : []
+ }
+
+ $( 'option[value="' + params.route_params.splat[2] + '"]', related_select_element )
+ .attr( 'selected', 'selected' );
+
+ if( 'field' === type )
+ {
+ navigation_data.fields.push( value );
+ navigation_data.types.push( app.schema_browser_data.relations.f_t[value] );
+
+ if( app.schema_browser_data.relations.f_df[value] )
+ {
+ navigation_data.dynamic_fields.push( app.schema_browser_data.relations.f_df[value] );
+ }
+
+ if( 0 !== app.schema_browser_data.fields[value].copySources.length )
+ {
+ navigation_data.copyfield_source = app.schema_browser_data.fields[value].copySources;
+ }
+
+ if( 0 !== app.schema_browser_data.fields[value].copyDests.length )
+ {
+ navigation_data.copyfield_dest = app.schema_browser_data.fields[value].copyDests;
+ }
+ }
+ else if( 'dynamic-field' === type )
+ {
+ navigation_data.dynamic_fields.push( value );
+ navigation_data.types.push( app.schema_browser_data.relations.df_t[value] );
+
+ if( app.schema_browser_data.relations.df_f[value] )
+ {
+ navigation_data.fields = app.schema_browser_data.relations.df_f[value];
+ }
+ }
+ else if( 'type' === type )
+ {
+ navigation_data.types.push( value );
+
+ if( app.schema_browser_data.relations.t_f[value] )
+ {
+ navigation_data.fields = app.schema_browser_data.relations.t_f[value];
+ }
+
+ if( app.schema_browser_data.relations.t_df[value] )
+ {
+ navigation_data.dynamic_fields = app.schema_browser_data.relations.t_df[value];
+ }
+ }
+
+ var navigation_content = '';
+
+ if( 0 !== navigation_data.fields.length )
+ {
+ navigation_data.fields.sort();
+ navigation_content += '<dt class="field">Fields</dt>' + "\n";
+ for( var i in navigation_data.fields )
+ {
+ var href = sammy_basepath + '/field/' + navigation_data.fields[i];
+ navigation_content += '<dd class="field"><a href="' + href + '">' +
+ navigation_data.fields[i] + '</a></dd>' + "\n";
+ }
+ }
+
+ if( 0 !== navigation_data.copyfield_source.length )
+ {
+ navigation_data.copyfield_source.sort();
+ navigation_content += '<dt class="copyfield">Copied from</dt>' + "\n";
+ for( var i in navigation_data.copyfield_source )
+ {
+ var href = sammy_basepath + '/field/' + navigation_data.copyfield_source[i];
+ navigation_content += '<dd class="copyfield"><a href="' + href + '">' +
+ navigation_data.copyfield_source[i] + '</a></dd>' + "\n";
+ }
+ }
+
+ if( 0 !== navigation_data.copyfield_dest.length )
+ {
+ navigation_data.copyfield_dest.sort();
+ navigation_content += '<dt class="copyfield">Copied to</dt>' + "\n";
+ for( var i in navigation_data.copyfield_dest )
+ {
+ var href = sammy_basepath + '/field/' + navigation_data.copyfield_dest[i];
+ navigation_content += '<dd class="copyfield"><a href="' + href + '">' +
+ navigation_data.copyfield_dest[i] + '</a></dd>' + "\n";
+ }
+ }
+
+ if( 0 !== navigation_data.dynamic_fields.length )
+ {
+ navigation_data.dynamic_fields.sort();
+ navigation_content += '<dt class="dynamic-field">Dynamic Fields</dt>' + "\n";
+ for( var i in navigation_data.dynamic_fields )
+ {
+ var href = sammy_basepath + '/dynamic-field/' + navigation_data.dynamic_fields[i];
+ navigation_content += '<dd class="dynamic-field"><a href="' + href + '">' +
+ navigation_data.dynamic_fields[i] + '</a></dd>' + "\n";
+ }
+ }
+
+ if( 0 !== navigation_data.types.length )
+ {
+ navigation_data.types.sort();
+ navigation_content += '<dt class="type">Types</dt>' + "\n";
+ for( var i in navigation_data.types )
+ {
+ var href = sammy_basepath + '/type/' + navigation_data.types[i];
+ navigation_content += '<dd class="type"><a href="' + href + '">' +
+ navigation_data.types[i] + '</a></dd>' + "\n";
+ }
+ }
+
+ related_navigation_element
+ .show()
+ .attr( 'class', type )
+ .html( navigation_content );
+ }
+ else
+ {
+ related_navigation_element
+ .hide();
+
+ $( 'option:selected', related_select_element )
+ .removeAttr( 'selected' );
+ }
+
+ 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 ) );
+ }
+ }
+);
+
+sammy.bind
+(
+ 'schema_browser_load',
+ function( event, params )
+ {
+ var core_basepath = params.active_core.attr( 'data-basepath' );
+ var content_element = $( '#content' );
+
+ if( app.schema_browser_data )
+ {
+ params.schema_browser_element = $( '#schema-browser', content_element );
+
+ sammy.trigger
+ (
+ 'schema_browser_navi',
+ params
+ );
+ }
+ else
+ {
+ content_element
+ .html( '<div id="schema-browser"><div class="loader">Loading ...</div></div>' );
+
+ $.ajax
+ (
+ {
+ url : core_basepath + '/admin/luke?numTerms=0&wt=json',
+ dataType : 'json',
+ beforeSend : function( xhr, settings )
+ {
+ },
+ success : function( response, text_status, xhr )
+ {
+ app.schema_browser_data = {
+ default_search_field : null,
+ unique_key_field : null,
+ key : {},
+ fields : {},
+ dynamic_fields : {},
+ types : {},
+ relations : {
+ f_df : {},
+ f_t : {},
+ df_f : {},
+ df_t : {},
+ t_f : {},
+ t_df : {}
+ }
+ };
+
+ app.schema_browser_data.fields = response.fields;
+ app.schema_browser_data.key = response.info.key;
+
+ $.ajax
+ (
+ {
+ url : core_basepath + '/admin/luke?show=schema&wt=json',
+ dataType : 'json',
+ beforeSend : function( xhr, settings )
+ {
+ },
+ success : function( response, text_status, xhr )
+ {
+ app.schema_browser_data.default_search_field = response.schema.defaultSearchField;
+ app.schema_browser_data.unique_key_field = response.schema.uniqueKeyField;
+
+ app.schema_browser_data.dynamic_fields = response.schema.dynamicFields;
+ app.schema_browser_data.types = response.schema.types;
+
+ var luke_array_to_struct = function( array )
+ {
+ var struct = {
+ keys : [],
+ values : []
+ };
+ for( var i = 0; i < array.length; i += 2 )
+ {
+ struct.keys.push( array[i] );
+ struct.values.push( array[i+1] );
+ }
+ return struct;
+ }
+
+ var luke_array_to_hash = function( array )
+ {
+ var hash = {};
+ for( var i = 0; i < array.length; i += 2 )
+ {
+ hash[ array[i] ] = array[i+1];
+ }
+ return hash;
+ }
+
+ for( var field in response.schema.fields )
+ {
+ app.schema_browser_data.fields[field] = $.extend
+ (
+ {},
+ app.schema_browser_data.fields[field],
+ response.schema.fields[field]
+ );
+ }
+
+ for( var field in app.schema_browser_data.fields )
+ {
+ app.schema_browser_data.fields[field].copySourcesRaw = null;
+
+ if( app.schema_browser_data.fields[field].copySources &&
+ 0 !== app.schema_browser_data.fields[field].copySources.length )
+ {
+ app.schema_browser_data.fields[field].copySourcesRaw =
+ app.schema_browser_data.fields[field].copySources;
+ }
+
+ app.schema_browser_data.fields[field].copyDests = [];
+ app.schema_browser_data.fields[field].copySources = [];
+ }
+
+ for( var field in app.schema_browser_data.fields )
+ {
+ if( app.schema_browser_data.fields[field].copySourcesRaw )
+ {
+ var copy_sources = app.schema_browser_data.fields[field].copySourcesRaw;
+ for( var i in copy_sources )
+ {
+ var target = copy_sources[i].replace( /^.+:(.+)\{.+$/, '$1' );
+
+ app.schema_browser_data.fields[field].copySources.push( target );
+ app.schema_browser_data.fields[target].copyDests.push( field );
+ }
+ }
+
+ app.schema_browser_data.relations.f_t[field] = app.schema_browser_data.fields[field].type;
+
+ if( !app.schema_browser_data.relations.t_f[app.schema_browser_data.fields[field].type] )
+ {
+ app.schema_browser_data.relations.t_f[app.schema_browser_data.fields[field].type] = [];
+ }
+ app.schema_browser_data.relations.t_f[app.schema_browser_data.fields[field].type].push( field );
+
+ if( app.schema_browser_data.fields[field].dynamicBase )
+ {
+ app.schema_browser_data.relations.f_df[field] = app.schema_browser_data.fields[field].dynamicBase;
+
+ if( !app.schema_browser_data.relations.df_f[app.schema_browser_data.fields[field].dynamicBase] )
+ {
+ app.schema_browser_data.relations.df_f[app.schema_browser_data.fields[field].dynamicBase] = [];
+ }
+ app.schema_browser_data.relations.df_f[app.schema_browser_data.fields[field].dynamicBase].push( field );
+ }
+ }
+
+ for( var dynamic_field in app.schema_browser_data.dynamic_fields )
+ {
+ app.schema_browser_data.relations.df_t[dynamic_field] = app.schema_browser_data.dynamic_fields[dynamic_field].type;
+
+ if( !app.schema_browser_data.relations.t_df[app.schema_browser_data.dynamic_fields[dynamic_field].type] )
+ {
+ app.schema_browser_data.relations.t_df[app.schema_browser_data.dynamic_fields[dynamic_field].type] = [];
+ }
+ app.schema_browser_data.relations.t_df[app.schema_browser_data.dynamic_fields[dynamic_field].type].push( dynamic_field );
+ }
+
+ $.get
+ (
+ 'tpl/schema-browser.html',
+ function( template )
+ {
+ content_element
+ .html( template );
+
+ var schema_browser_element = $( '#schema-browser', content_element );
+ var related_element = $( '#related', schema_browser_element );
+ var related_select_element = $( 'select', related_element );
+ var data_element = $( '#data', schema_browser_element );
+
+ var related_options = '';
+
+ var fields = [];
+ for( var field_name in app.schema_browser_data.fields )
+ {
+ fields.push
+ (
+ '<option value="/field/' + field_name + '">' + field_name + '</option>'
+ );
+ }
+ if( 0 !== fields.length )
+ {
+ fields.sort();
+ related_options += '<optgroup label="Fields">' + "\n";
+ related_options += fields.sort().join( "\n" ) + "\n";
+ related_options += '</optgroup>' + "\n";
+ }
+
+ var dynamic_fields = [];
+ for( var type_name in app.schema_browser_data.dynamic_fields )
+ {
+ dynamic_fields.push
+ (
+ '<option value="/dynamic-field/' + type_name + '">' + type_name + '</option>'
+ );
+ }
+ if( 0 !== dynamic_fields.length )
+ {
+ dynamic_fields.sort();
+ related_options += '<optgroup label="DynamicFields">' + "\n";
+ related_options += dynamic_fields.sort().join( "\n" ) + "\n";
+ related_options += '</optgroup>' + "\n";
+ }
+
+ var types = [];
+ for( var type_name in app.schema_browser_data.types )
+ {
+ types.push
+ (
+ '<option value="/type/' + type_name + '">' + type_name + '</option>'
+ );
+ }
+ if( 0 !== types.length )
+ {
+ types.sort();
+ related_options += '<optgroup label="Types">' + "\n";
+ related_options += types.sort().join( "\n" ) + "\n";
+ related_options += '</optgroup>' + "\n";
+ }
+
+ related_select_element
+ .attr( 'rel', '#/' + $( 'p a', params.active_core ).html() + '/schema-browser' )
+ .append( related_options );
+
+ related_select_element
+ .die( 'change' )
+ .live
+ (
+ 'change',
+ function( event )
+ {
+ var select_element = $( this );
+ var option_element = $( 'option:selected', select_element );
+
+ location.href = select_element.attr( 'rel' ) + option_element.val();
+ return false;
+ }
+ );
+
+ params.schema_browser_element = schema_browser_element;
+ sammy.trigger
+ (
+ 'schema_browser_navi',
+ params
+ );
+ }
+ );
+ },
+ error : function( xhr, text_status, error_thrown)
+ {
+ },
+ complete : function( xhr, text_status )
+ {
+ }
+ }
+ );
+
+ },
+ error : function( xhr, text_status, error_thrown)
+ {
+ },
+ complete : function( xhr, text_status )
+ {
+ }
+ }
+ );
+ }
+ }
+);
+
+// #/:core/schema-browser
+sammy.get
+(
+ /^#\/([\w\d-]+)\/(schema-browser)$/,
+ function( context )
+ {
+ var callback = function( schema_browser_data, data_element )
+ {
+ data_element
+ .hide();
+ };
+
+ delete app.schema_browser_data;
+
+ sammy.trigger
+ (
+ 'schema_browser_load',
+ {
+ callback : callback,
+ active_core : this.active_core
+ }
+ );
+ }
+);
+
+// #/:core/schema-browser/field|dynamic-field|type/$field
+sammy.get
+(
+ /^#\/([\w\d-]+)\/(schema-browser)(\/(field|dynamic-field|type)\/(.+))$/,
+ function( context )
+ {
+ var core_basepath = this.active_core.attr( 'data-basepath' );
+
+ 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 = context.path.indexOf( '/', context.path.indexOf( '/', 2 ) + 1 );
+
+ data_element
+ .show();
+
+ var keystring_to_list = function( keystring, element_class )
+ {
+ var key_list = keystring.replace( /-/g, '' ).split( '' );
+ var list = [];
+
+ for( var i in key_list )
+ {
+ var option_key = schema_browser_data.key[key_list[i]];
+
+ if( !option_key )
+ {
+ option_key = schema_browser_data.key[key_list[i].toLowerCase()];
+ }
+
+ if( !option_key )
+ {
+ option_key = schema_browser_data.key[key_list[i].toUpperCase()];
+ }
+
+ if( option_key )
+ {
+ list.push
+ (
+ '<dd ' + ( element_class ? ' class="' + element_class + '"' : '' ) + '>' +
+ option_key +
+ ',</dd>'
+ );
+ }
+ }
+
+ list[list.length-1] = list[key_list.length-1].replace( /,/, '' );
+
+ 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
+ var properties_element = $( 'dt.properties', options_element );
+ if( 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
+ var schema_element = $( 'dt.schema', options_element );
+ if( is_f && schema_browser_data.fields[field] && 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
+ var index_element = $( 'dt.index', options_element );
+ if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].index )
+ {
+ var index_keys = [];
+
+ if( 0 === schema_browser_data.fields[field].index.indexOf( '(' ) )
+ {
+ 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' );
+ }
+
+ $( 'dd.index', options_element )
+ .remove();
+
+ index_element
+ .show()
+ .after( index_keys.join( "\n" ) );
+ }
+ else
+ {
+ $( '.index', options_element )
+ .hide();
+ }
+
+ // -- docs
+ 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 class="docs">' + schema_browser_data.fields[field].docs + '</dd>' );
+ }
+ else
+ {
+ $( '.docs', options_element )
+ .hide();
+ }
+
+ // -- distinct
+ var distinct_element = $( 'dt.distinct', options_element );
+ if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].distinct )
+ {
+ $( 'dd.distinct', options_element )
+ .remove();
+
+ distinct_element
+ .show()
+ .after( '<dd class="distinct">' + schema_browser_data.fields[field].distinct + '</dd>' );
+ }
+ else
+ {
+ $( '.distinct', options_element )
+ .hide();
+ }
+
+ // -- position-increment-gap
+ var pig_element = $( 'dt.position-increment-gap', options_element );
+ if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].positionIncrementGap )
+ {
+ $( 'dt.position-increment-gap', options_element )
+ .remove();
+
+ pig_element
+ .show()
+ .after( '<dd class="position-increment-gap">' + schema_browser_data.fields[field].positionIncrementGap + '</dd>' );
+ }
+ else
+ {
+ $( '.position-increment-gap', options_element )
+ .hide();
+ }
+
+ var analyzer_element = $( '.analyzer', data_element );
+ var analyzer_data = null;
+
+ if( is_f )
+ {
+ 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( analyzer_data )
+ {
+ var transform_analyzer_data_into_list = function( analyzer_data )
+ {
+ var args = [];
+ for( var key in analyzer_data.args )
+ {
+ var arg_class = '';
+ var arg_content = '';
+
+ 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
+ {
+ 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>' );
+ }
+
+ var list_content = '<dt>' + analyzer_data.className + '</dt>';
+ if( 0 !== args.length )
+ {
+ args.sort();
+ list_content += args.join( "\n" );
+ }
+
+ return list_content;
+ }
+
+ // -- field-type
+ var field_type_element = $( 'dt.field-type', options_element );
+
+ $( 'dd.field-type', options_element )
+ .remove();
+
+ field_type_element
+ .show()
+ .after( '<dd class="field-type">' + analyzer_data.className + '</dd>' );
+
+
+ for( var key in analyzer_data )
+ {
+ var key_match = key.match( /^(.+)Analyzer$/ );
+ if( !key_match )
+ {
+ continue;
+ }
+
+ var analyzer_key_element = $( '.' + key_match[1], analyzer_element );
+ var analyzer_key_data = analyzer_data[key];
+
+ analyzer_element.show();
+ analyzer_key_element.show();
+
+ if( analyzer_key_data.className )
+ {
+ $( 'dl:first dt', analyzer_key_element )
+ .html( analyzer_key_data.className );
+ }
+
+ $( 'ul li', analyzer_key_element )
+ .hide();
+
+ for( var type in analyzer_key_data )
+ {
+ if( 'object' !== typeof analyzer_key_data[type] )
+ {
+ 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 )
+ .empty()
+ .append( type_content.join( "\n" ) );
+ }
+ }
+ }
+
+ var terminfo_element = $( '.terminfo-holder', data_element );
+
+ if( !is_f )
+ {
+ terminfo_element
+ .hide();
+ }
+ else
+ {
+ terminfo_element
+ .show();
+
+ var status_element = $( '.status', terminfo_element );
+
+ $.ajax
+ (
+ {
+ url : core_basepath + '/admin/luke?numTerms=50&wt=json&fl=' + field,
+ dataType : 'json',
+ context : terminfo_element,
+ beforeSend : function( xhr, settings )
+ {
+ },
+ success : function( response, text_status, xhr )
+ {
+ status_element
+ .hide();
+
+ var field_data = response.fields[field];
+
+ var topterms_holder_element = $( '.topterms-holder', data_element );
+ var histogram_holder_element = $( '.histogram-holder', data_element );
+
+ var luke_array_to_struct = function( array )
+ {
+ var struct = {
+ keys : [],
+ values : []
+ };
+ for( var i = 0; i < array.length; i += 2 )
+ {
+ struct.keys.push( array[i] );
+ struct.values.push( array[i+1] );
+ }
+ return struct;
+ }
+
+ var luke_array_to_hash = function( array )
+ {
+ var hash = {};
+ for( var i = 0; i < array.length; i += 2 )
+ {
+ hash[ array[i] ] = array[i+1];
+ }
+ return hash;
+ }
+
+ if( !field_data.topTerms )
+ {
+ topterms_holder_element
+ .hide();
+ }
+ else
+ {
+ topterms_holder_element
+ .show();
+
+ var topterms_table_element = $( 'table', topterms_holder_element );
+
+ var topterms_navi_less = $( 'p.navi .less', topterms_holder_element );
+ var topterms_navi_more = $( 'p.navi .more', topterms_holder_element );
+
+ var topterms_count = luke_array_to_struct( field_data.topTerms ).keys.length;
+ var topterms_hash = luke_array_to_hash( field_data.topTerms );
+ var topterms_content = '<tbody>';
+
+ var i = 1;
+ for( var term in topterms_hash )
+ {
+ topterms_content += '<tr>' + "\n" +
+ '<td class="position">' + i + '</td>' + "\n" +
+ '<td class="term">' + term + '</td>' + "\n" +
+ '<td class="frequency">' + topterms_hash[term] + '</td>' + "\n" +
+ '</tr>' + "\n";
+
+ if( i !== topterms_count && 0 === i % 10 )
+ {
+ topterms_content += '</tbody><tbody>';
+ }
+
+ i++;
+ }
+
+ topterms_content += '</tbody>';
+
+ topterms_table_element
+ .empty()
+ .append( topterms_content );
+
+ $( 'tbody', topterms_table_element )
+ .die( 'change' )
+ .live
+ (
+ 'change',
+ function()
+ {
+ var blocks = $( 'tbody', topterms_table_element );
+ var visible_blocks = blocks.filter( ':visible' );
+ var hidden_blocks = blocks.filter( ':hidden' );
+
+ $( 'p.head .shown', topterms_holder_element )
+ .html( $( 'tr', visible_blocks ).size() );
+
+ 0 < hidden_blocks.size()
+ ? topterms_navi_more.show()
+ : topterms_navi_more.hide();
+
+ 1 < visible_blocks.size()
+ ? topterms_navi_less.show()
+ : topterms_navi_less.hide();
+ }
+ );
+
+ $( 'tbody tr:odd', topterms_table_element )
+ .addClass( 'odd' );
+
+ $( 'tbody:first', topterms_table_element )
+ .show()
+ .trigger( 'change' );
+
+ $( 'p.head .max', topterms_holder_element )
+ .html( field_data.distinct );
+
+ topterms_navi_less
+ .die( 'click' )
+ .live
+ (
+ 'click',
+ function( event )
+ {
+ $( 'tbody:visible', topterms_table_element ).last()
+ .hide()
+ .trigger( 'change' );
+ }
+ );
+
+ topterms_navi_more
+ .die( 'click' )
+ .live
+ (
+ 'click',
+ function( event )
+ {
+ $( 'tbody:hidden', topterms_table_element ).first()
+ .show()
+ .trigger( 'change' );
+ }
+ );
+ }
+
+ if( !field_data.histogram )
+ {
+ histogram_holder_element
+ .hide();
+ }
+ else
+ {
+ histogram_holder_element
+ .show();
+
+ var histogram_element = $( '.histogram', histogram_holder_element );
+
+ var histogram_values = luke_array_to_hash( field_data.histogram );
+ var histogram_legend = '';
+
+ histogram_holder_element
+ .show();
+
+ for( var key in histogram_values )
+ {
+ histogram_legend += '<dt><span>' + key + '</span></dt>' + "\n" +
+ '<dd title="' + key + '">' +
+ '<span>' + histogram_values[key] + '</span>' +
+ '</dd>' + "\n";
+ }
+
+ $( 'dl', histogram_holder_element )
+ .html( histogram_legend );
+
+ histogram_element
+ .sparkline
+ (
+ luke_array_to_struct( field_data.histogram ).values,
+ {
+ type : 'bar',
+ barColor : '#c0c0c0',
+ zeroColor : '#ffffff',
+ height : histogram_element.height(),
+ barWidth : 46,
+ barSpacing : 3
+ }
+ );
+ }
+
+ },
+ error : function( xhr, text_status, error_thrown)
+ {
+ },
+ complete : function( xhr, text_status )
+ {
+ }
+ }
+ );
+
+ }
+ }
+
+ sammy.trigger
+ (
+ 'schema_browser_load',
+ {
+ callback : callback,
+ active_core : this.active_core,
+ route_params : this.params
+ }
+ );
+ }
+);
\ No newline at end of file
Added: lucene/dev/trunk/solr/webapp/web/js/scripts/threads.js
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/webapp/web/js/scripts/threads.js?rev=1292908&view=auto
==============================================================================
--- lucene/dev/trunk/solr/webapp/web/js/scripts/threads.js (added)
+++ lucene/dev/trunk/solr/webapp/web/js/scripts/threads.js Thu Feb 23 19:23:10 2012
@@ -0,0 +1,144 @@
+// #/threads
+sammy.get
+(
+ /^#\/(threads)$/,
+ function( context )
+ {
+ var core_basepath = $( 'li[data-basepath]', app.menu_element ).attr( 'data-basepath' );
+ var content_element = $( '#content' );
+
+ $.get
+ (
+ 'tpl/threads.html',
+ function( template )
+ {
+ content_element
+ .html( template );
+
+ $.ajax
+ (
+ {
+ url : core_basepath + '/admin/threads?wt=json',
+ dataType : 'json',
+ context : $( '#threads', content_element ),
+ beforeSend : function( xhr, settings )
+ {
+ },
+ success : function( response, text_status, xhr )
+ {
+ var self = this;
+
+ var threadDumpData = response.system.threadDump;
+ var threadDumpContent = [];
+ var c = 0;
+ for( var i = 1; i < threadDumpData.length; i += 2 )
+ {
+ var state = threadDumpData[i].state.esc();
+ var name = '<a title="' + state +'"><span>' + threadDumpData[i].name.esc() + ' (' + threadDumpData[i].id.esc() + ')</span></a>';
+
+ var classes = [state];
+ var details = '';
+
+ if( 0 !== c % 2 )
+ {
+ classes.push( 'odd' );
+ }
+
+ if( threadDumpData[i].lock )
+ {
+ classes.push( 'lock' );
+ name += "\n" + '<p title="Waiting on">' + threadDumpData[i].lock.esc() + '</p>';
+ }
+
+ if( threadDumpData[i].stackTrace && 0 !== threadDumpData[i].stackTrace.length )
+ {
+ classes.push( 'stacktrace' );
+
+ var stack_trace = threadDumpData[i].stackTrace
+ .join( '###' )
+ .esc()
+ .replace( /\(/g, '​(' )
+ .replace( /###/g, '</li><li>' );
+
+ name += '<div>' + "\n"
+ + '<ul>' + "\n"
+ + '<li>' + stack_trace + '</li>'
+ + '</ul>' + "\n"
+ + '</div>';
+ }
+
+ var item = '<tr class="' + classes.join( ' ' ) +'">' + "\n"
+
+ + '<td class="name">' + name + '</td>' + "\n"
+ + '<td class="time">' + threadDumpData[i].cpuTime.esc() + '<br>' + threadDumpData[i].userTime.esc() + '</td>' + "\n"
+
+ + '</tr>';
+
+ threadDumpContent.push( item );
+ c++;
+ }
+
+ var threadDumpBody = $( '#thread-dump tbody', this );
+
+ threadDumpBody
+ .html( threadDumpContent.join( "\n" ) );
+
+ $( '.name a', threadDumpBody )
+ .die( 'click' )
+ .live
+ (
+ 'click',
+ function( event )
+ {
+ $( 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)
+ {
+ },
+ complete : function( xhr, text_status )
+ {
+ }
+ }
+ );
+ }
+ );
+ }
+);
\ No newline at end of file
Modified: lucene/dev/trunk/solr/webapp/web/tpl/analysis.html
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/webapp/web/tpl/analysis.html?rev=1292908&r1=1292907&r2=1292908&view=diff
==============================================================================
--- lucene/dev/trunk/solr/webapp/web/tpl/analysis.html (original)
+++ lucene/dev/trunk/solr/webapp/web/tpl/analysis.html Thu Feb 23 19:23:10 2012
@@ -14,12 +14,18 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<div id="analysis">
- <div class="block" id="analysis-error">
+ <div class="block analysis-error" id="analysis-handler-missing">
+
+ <div class="head">This Functionality requires the <code>/analysis/field</code> Handler to be registered and active!</div>
+
+ </div>
+
+ <div class="block analysis-error" id="analysis-error">
- This Functionality requires the <code>/analysis/field</code> Handler to be registered and active!
+ <div class="head"><a><span></span></a></div>
+ <div class="body"></div>
</div>
Modified: lucene/dev/trunk/solr/webapp/web/tpl/cloud.html
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/webapp/web/tpl/cloud.html?rev=1292908&r1=1292907&r2=1292908&view=diff
==============================================================================
--- lucene/dev/trunk/solr/webapp/web/tpl/cloud.html (original)
+++ lucene/dev/trunk/solr/webapp/web/tpl/cloud.html Thu Feb 23 19:23:10 2012
@@ -16,7 +16,7 @@ limitations under the License.
-->
<div id="cloud">
- <div class="block" id="zookeeper">
+ <div class="block">
<h2><span>Zookeeper-Data</span></h2>
@@ -24,9 +24,21 @@ limitations under the License.
<div class="message"></div>
</div>
- <div class="content">
+ <div class="content clearfix">
- <a><span>Fetch Zookeeper Data</span></a>
+ <div id="tree" class="tree">#tree</div>
+
+ <div id="file-content" class="clearfix">
+
+ <div id="prop">
+ <ul></ul>
+ </div>
+
+ <div id="data"></div>
+
+ <a class="close"><span>[x]</span></a>
+
+ </div>
</div>
Modified: lucene/dev/trunk/solr/webapp/web/tpl/query.html
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/webapp/web/tpl/query.html?rev=1292908&r1=1292907&r2=1292908&view=diff
==============================================================================
--- lucene/dev/trunk/solr/webapp/web/tpl/query.html (original)
+++ lucene/dev/trunk/solr/webapp/web/tpl/query.html Thu Feb 23 19:23:10 2012
@@ -56,6 +56,23 @@ limitations under the License.
</label>
<input type="text" name="qt" id="qt" value="">
+ <label for="wt">
+ <a rel="help">wt</a>
+ </label>
+ <select name="wt" id="wt">
+ <option>xml</option>
+ <option>json</option>
+ <option>python</option>
+ <option>ruby</option>
+ <option>php</option>
+ <option>csv</option>
+ </select>
+
+ <label for="indent" class="checkbox">
+ <input type="checkbox" name="indent" id="indent" value="true">
+ <a rel="help">indent</a>
+ </label>
+
<label for="debugQuery" class="checkbox">
<input type="checkbox" name="debugQuery" id="debugQuery" value="true">
<a rel="help">debugQuery</a>
@@ -243,11 +260,7 @@ limitations under the License.
<div id="result">
- <div id="url">
-
- <input type="text" readonly="readonly">
-
- </div>
+ <a id="url" href="#"></a>
<div id="response">
Modified: lucene/dev/trunk/solr/webapp/web/tpl/schema-browser.html
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/webapp/web/tpl/schema-browser.html?rev=1292908&r1=1292907&r2=1292908&view=diff
==============================================================================
--- lucene/dev/trunk/solr/webapp/web/tpl/schema-browser.html (original)
+++ lucene/dev/trunk/solr/webapp/web/tpl/schema-browser.html Thu Feb 23 19:23:10 2012
@@ -66,7 +66,7 @@ limitations under the License.
</li>
<li class="clearfix query">
- <p>Query Analyzer:</p>
+ <p>Query Analyzer:</p>
<dl>
<dt></dt>
</dl>
@@ -74,11 +74,13 @@ limitations under the License.
<ul>
<li class="clearfix tokenizer">
<p>Tokenizer:</p>
- <dl></dl>
+ <dl>
+ </dl>
</li>
<li class="clearfix filters">
<p>Filters:</p>
- <dl></dl>
+ <dl>
+ </dl>
</li>
</ul>
@@ -86,50 +88,52 @@ limitations under the License.
</ul>
</div>
-
- <div class="terminfo-holder">
- <div class="status-holder">Load Term Info</div>
-
+
+ <div class="terminfo-holder clearfix">
+
+ <div class="status loader">Loading Term Info ...</div>
+
<div class="topterms-holder">
-
+
<p class="head">Top <span class="shown"></span><span class="max-holder">/<span class="max"></span></span> Terms:</p>
-
+
<table border="0" cellspacing="0" cellpadding="0">
-
+
<thead>
-
+
<tr>
-
+
<th class="position" title="Position"> </th>
<th class="term">Term</th>
<th class="frequency" title="Frequency">Frq</th>
</tr>
-
+
</thead>
-
+
</table>
-
+
<p class="navi clearfix">
<a class="less"><span>less</span></a>
<a class="more"><span>more</span></a>
</p>
-
+
</div>
-
+
<div class="histogram-holder">
-
+
<p class="head">Histogram:</p>
-
+
<div class="histogram"></div>
-
+
<dl class="clearfix">
-
+
</dl>
</div>
+
</div>
-
+
</div>
</div>
Modified: lucene/dev/trunk/solr/webapp/web/tpl/threads.html
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/webapp/web/tpl/threads.html?rev=1292908&r1=1292907&r2=1292908&view=diff
==============================================================================
--- lucene/dev/trunk/solr/webapp/web/tpl/threads.html (original)
+++ lucene/dev/trunk/solr/webapp/web/tpl/threads.html Thu Feb 23 19:23:10 2012
@@ -31,11 +31,8 @@ limitations under the License.
<tr>
- <td class="ico spacer"> </td>
- <th>id</th>
- <th>name</th>
- <th>cpuTime</th>
- <th>userTime</th>
+ <th class="name">name</th>
+ <th class="time">cpuTime / userTime</th>
</tr>