trigger_params.callback = function()

in solr/webapp/solr/js/scripts/schema-browser.js [716:1210]


      trigger_params.callback = function( schema_browser_data, data_element )
      {
        var field = trigger_params.route_params.value;

        var type = trigger_params.route_params.type;
        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();

        // -- head

        var head_element = $( '.head', data_element );
        if( is_f )
        {
          $( '.type', head_element ).html( 'Field' );
        }
        else if( is_df )
        {
          $( '.type', head_element ).html( 'Dynamic Field' );
        }
        else if( is_t )
        {
          $( '.type', head_element ).html( 'Type' );
        }
        $( '.name', head_element ).html( field.esc() );


        var partial_state = false;
        if( is_f )
        {
          partial_state = !!schema_browser_data.fields[field].partial;
        }

        $( '.partial', data_element )
          .toggle( partial_state );

        // -- 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();

          var target = '#/' + current_core + '/query?q=' + field.esc() + ':[* TO *]';
          docs_element
            .show()
            .after( 
             '<dd class="docs">'+
               '<a href="'+target+'">' + schema_browser_data.fields[field].docs + '</a>' +
             '</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 )
        {
          $( 'dd.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 similarity_element = $( 'dt.similarity', options_element );
        if ( is_t && schema_browser_data.types[field] && schema_browser_data.types[field].similarity ) {
            var similarity = schema_browser_data.types[field].similarity
            if (similarity.details && similarity.className) {
                $( 'dd.similarity', options_element ).remove();
                similarity_element
                    .show()
                    .after(['<dd class="similarity">', similarity.details.esc(), ' (', similarity.className.esc(), ') </dd>'].join(""));
            }
        } else {
            $( '.similarity', options_element ).hide();
        }


        // -- flags table
        var flags_table = $( 'table.flags', data_element );

        var flags_arr = [];
        for( var key in schema_browser_data.key )
        {
          flags_arr.push( '<th data-key="' + key + '">' + schema_browser_data.key[key] + '</th>' );
        }

        $( 'thead tr', flags_table )
          .append( flags_arr.join( "\n" ) );


        var flags_body = $( 'tbody', flags_table );
        flags_body.empty();

        var generate_flags_row = function generate_flags_row( flags_str, title )
        {
          var flags_arr = [ '<th>' + title.esc() + '</th>' ];

          if( 0 === flags_str.indexOf( '(' ) )
          {
            flags_arr.push( '<td colspan="2" class="text">' + flags_str + '</td>' );
          }
          else
          {
            var i = 0;
            for( var key in schema_browser_data.key )
            {
              var flag_match = key === flags_str[i];

              var flag_cell = '<td '
                            + ' data-key="' + key + '"'
                            + ' class="' + ( flag_match ? 'check' : '' ) + '"'
                            + '>'
                            + ( flag_match ? '<span>√</span>' : '&nbsp;' )
                            + '</td>';

              flags_arr.push( flag_cell );
              i++;
            }
          }

          flags_body
            .append( '<tr>' + flags_arr.join( "\n" ) + '</tr>' );
        };

        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;
        }

        if( flags )
        {
          generate_flags_row( flags, 'Properties' );
        }

        if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].schema )
        {
          generate_flags_row( schema_browser_data.fields[field].schema, 'Schema' );
        }

        if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].index )
        {
          generate_flags_row( schema_browser_data.fields[field].index, 'Index' );
        }


        if( 0 !== $( 'tr', flags_body ).size() )
        {
          var col_count = 0;
          for( var key in schema_browser_data.key )
          {
            var cols = $( '[data-key="' + key + '"]', flags_table );
            
            var col_used = 0 !== cols.filter( '.check' ).size();
            col_count += col_used;

            cols.toggle( col_used );
          }

          $( 'td[colspan]', flags_body )
            .attr( 'colspan', col_count );

          flags_table.show();
        }
        else
        {
          flags_table.hide();
        }

        var analyzer_element = $( '.analyzer', data_element );
        var analyzer_data = null;

        var analysis_link = false;
        var analysis_link_elements = $( 'p a', analyzer_element );
        var analysis_target = '#/' + current_core + '/analysis?';

        if( is_f )
        {
          analyzer_data = schema_browser_data.types[schema_browser_data.relations.f_t[field]];

          analysis_link = true;
          analysis_target += 'analysis.fieldname=' + 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];
          
          analysis_link = true;
          analysis_target += 'analysis.fieldtype=' + field;
        }

        if( analysis_link )
        {
          analysis_link_elements
            .addClass( 'analysis' )
            .attr( 'href', analysis_target );
        }
        else
        {
          analysis_link_elements
            .removeClass( 'analysis' )
            .removeAttr( 'href' );
        }


        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>' );

          $( '.toggle', analyzer_element )
            .die( 'click' )
            .live
            (
              'click',
              function( event )
              {
                $( this ).closest( 'li' )
                  .toggleClass( 'open' );

                return false;
              }
            );

          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();

            $( 'ul li', analyzer_key_element )
            .removeClass( 'data' )
            .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
                .addClass( 'data' )
                .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 name_element = $( 'dl:first dt a', analyzer_key_element );
            if( analyzer_key_data.className )
            {
              name_element
                .html( analyzer_key_data.className );
            }

            0 === $( 'ul li.data', analyzer_key_element ).size()
            ? name_element.removeClass( 'toggle' )
            : name_element.addClass( 'toggle' );
          }
        }

        var terminfo_element = $( '.terminfo-holder', data_element );

        terminfo_element
          .removeClass( 'disabled' )
          .removeClass( 'loaded' );

        var trigger_element = $( '.trigger button', terminfo_element );
        var form_element = $( 'form', terminfo_element );

        trigger_element
          .die( 'click' )
          .live
          (
            'click',
            function( event )
            {
              form_element
                .trigger( 'submit' );

              return false;
            }
          );

        form_element
          .clearForm()
          .die( 'submit' )
          .live
          (
            'submit',
            function( event )
            {
              load_terminfo( trigger_element, core_basepath, field, data_element, terminfo_element );

              terminfo_element
                .addClass( 'loaded' );

              return false;
            }
          );

        $( '.max-holder', terminfo_element )
          .die( 'click' )
          .live
          (
            'click',
            function( event )
            {
              var element = $( this );

              $( 'input', element.closest( 'form' ) )
                .val( $( '.max', element ).text() );

              form_element
                .trigger( 'submit' );

              return false;
            }
          );

        $( '.trigger .autoload', terminfo_element )
          .die( 'click' )
          .live
          (
            'click',
            function( event )
            {
              $.cookie( cookie_schema_browser_autoload, $.cookie( cookie_schema_browser_autoload ) ? null : true );
              $( this ).trigger( 'state' );

              return false;
            }
          )
          .die( 'state' )
          .live
          (
            'state',
            function( event )
            {
              $.cookie( cookie_schema_browser_autoload )
                ? $( this ).addClass( 'on' )
                : $( this ).removeClass( 'on' );
            }
          )
          .die( 'init' )
          .live
          (
            'init',
            function( event )
            {
              if( !$.cookie( cookie_schema_browser_autoload ) )
              {
                return false;
              }

              $( this ).trigger( 'state' );
              trigger_element.trigger( 'click' );
            }
          )
          .trigger( 'init' );

        $( 'div[class$="-holder"]', terminfo_element )
          .hide();

        if( !is_f )
        {
          terminfo_element
            .hide();
        }
        else
        {
          terminfo_element
            .show();
        }
      }