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/03/13 17:43:48 UTC

svn commit: r1300232 [13/14] - in /lucene/dev/branches/lucene3795_lsp_spatial_module: ./ dev-tools/eclipse/ dev-tools/maven/ dev-tools/maven/lucene/contrib/demo/ dev-tools/maven/solr/contrib/clustering/ dev-tools/maven/solr/contrib/dataimporthandler/ d...

Modified: lucene/dev/branches/lucene3795_lsp_spatial_module/solr/webapp/web/js/scripts/schema-browser.js
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3795_lsp_spatial_module/solr/webapp/web/js/scripts/schema-browser.js?rev=1300232&r1=1300231&r2=1300232&view=diff
==============================================================================
--- lucene/dev/branches/lucene3795_lsp_spatial_module/solr/webapp/web/js/scripts/schema-browser.js (original)
+++ lucene/dev/branches/lucene3795_lsp_spatial_module/solr/webapp/web/js/scripts/schema-browser.js Tue Mar 13 16:43:38 2012
@@ -1,1052 +1,1155 @@
-sammy.bind
-(
-    'schema_browser_navi',
-    function( event, params )
+/*
+ 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.
+*/
+
+var cookie_name = 'schema-browser_autoload';
+
+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;
+}
+
+var load_terminfo = function( trigger_element, core_basepath, field, data_element, terminfo_element )
+{
+  var luke_url = core_basepath + '/admin/luke?wt=json&fl=' + field;
+  var topterms_count_element = $( '.topterms-holder .head input', terminfo_element );
+
+  var term_load_count = parseInt( topterms_count_element.val(), 10 );
+  if( term_load_count )
+  {
+    luke_url += '&numTerms=' + term_load_count;
+  }
+
+  $.ajax
+  (
     {
-        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';
+      url : luke_url,
+      dataType : 'json',
+      context : terminfo_element,
+      beforeSend : function( xhr, settings )
+      {
+        trigger_element
+          .addClass( 'loader' );
+      },
+      success : function( response, text_status, xhr )
+      {
+        trigger_element
+          .removeClass( 'loader' );
 
-        var sammy_basepath = '#/' + $( 'p a', params.active_core ).html() + '/schema-browser';
-        
-        if( !related_navigation_meta.hasClass( 'done' ) )
+        var field_data = response.fields[field];
+
+        if( !field_data || !( field_data.topTerms && field_data.histogram ) )
+        {
+          terminfo_element
+            .addClass( 'disabled' );
+
+          return false;
+        }
+
+        var topterms_holder_element = $( '.topterms-holder', data_element );
+        var histogram_holder_element = $( '.histogram-holder', data_element );
+
+        if( !field_data.topTerms )
         {
-            if( app.schema_browser_data.unique_key_field )
+          topterms_holder_element
+            .hide();
+        }
+        else
+        {
+          topterms_holder_element
+            .show();
+
+          var topterms_table_element = $( 'ul', topterms_holder_element );
+
+          var topterms = field_data.topTerms;
+          var topterms_count = topterms.length;
+                    
+          var topterms_content = '';
+          var topterms_frq_last = null;
+
+          for( var i = 0; i < topterms_count; i += 2 )
+          {
+            if( topterms_frq_last !== topterms[i+1] )
             {
-                $( '.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( topterms_frq_last )
+            {
+              topterms_content += '</ul></li>' + "\n";
             }
 
-            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>'
-                    );
+            topterms_frq_last = topterms[i+1];
+            topterms_content += '<li class="clearfix">'
+                                             +  '<p><span>' + topterms_frq_last.esc() + '</span></p>' + "\n"
+                                             +  '<ul>' + "\n";
             }
 
-            related_navigation_meta
-                .addClass( 'done' );
+            topterms_content += '<li><span>' + topterms[i].esc() + '</span></li>' + "\n";
+          }
+
+          topterms_content += '</li>';
+
+          topterms_count = topterms_count / 2;
+
+          $( 'input', trigger_element )
+            .val( topterms_count );
+
+          topterms_table_element
+            .html( topterms_content );
+
+          topterms_count_element
+            .val( topterms_count );
+
+          $( 'p.head .max', topterms_holder_element )
+            .html( field_data.distinct );
+
+          $( 'ul li:even', topterms_table_element )
+            .addClass( 'odd' );
         }
 
-        if( params.route_params )
+        if( !field_data.histogram )
         {
-            var type = params.route_params.splat[3];
-            var value = params.route_params.splat[4];
+          histogram_holder_element
+            .hide();
+        }
+        else
+        {
+          histogram_holder_element
+            .show();
 
-            var navigation_data = {
-                'fields' : [],
-                'copyfield_source' : [],
-                'copyfield_dest' : [],
-                'dynamic_fields' : [],
-                'types' : []
-            }
+          var histogram_element = $( '.histogram', histogram_holder_element );
 
-            $( 'option[value="' + params.route_params.splat[2] + '"]', related_select_element )
-                .attr( 'selected', 'selected' );
+          var histogram_values = luke_array_to_hash( field_data.histogram );
+          var histogram_legend = '';
 
-            if( 'field' === type )
-            {
-                navigation_data.fields.push( value );
-                navigation_data.types.push( app.schema_browser_data.relations.f_t[value] );
+          histogram_holder_element
+            .show();
 
-                if( app.schema_browser_data.relations.f_df[value] )
-                {
-                    navigation_data.dynamic_fields.push( app.schema_browser_data.relations.f_df[value] );
-                }
+          for( var key in histogram_values )
+          {
+            histogram_legend += '<dt><span>' + key + '</span></dt>' + "\n" +
+                    '<dd title="' + key + '">' +
+                    '<span>' + histogram_values[key] + '</span>' +
+                    '</dd>' + "\n";
+          }
 
-                if( 0 !== app.schema_browser_data.fields[value].copySources.length )
-                {
-                    navigation_data.copyfield_source = app.schema_browser_data.fields[value].copySources;
-                }
+          $( 'dl', histogram_holder_element )
+            .html( histogram_legend );
 
-                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] );
+          var histogram_values = luke_array_to_struct( field_data.histogram ).values;
 
-                if( app.schema_browser_data.relations.df_f[value] )
-                {
-                    navigation_data.fields = app.schema_browser_data.relations.df_f[value];
-                }
-            }
-            else if( 'type' === type )
+          histogram_element
+            .sparkline
+            (
+            histogram_values,
             {
-                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];
-                }
+              type : 'bar',
+              barColor : '#c0c0c0',
+              zeroColor : '#000000',
+              height : histogram_element.height(),
+              barWidth : 46,
+              barSpacing : 3
             }
+            );
 
-            var navigation_content = '';
+          1 === histogram_values.length
+            ? histogram_element.addClass( 'single' )
+            : histogram_element.removClass( 'single' );
+        }
 
-            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";
-                }
-            }
+      },
+      error : function( xhr, text_status, error_thrown)
+      {
+      },
+      complete : function( xhr, text_status )
+      {
+      }
+    }
+  );
+}
 
-            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";
-                }
-            }
+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';
 
-            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";
-                }
-            }
+    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>'
+          );
+      }
 
-            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";
-                }
-            }
+      related_navigation_meta
+        .addClass( 'done' );
+    }
 
-            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";
-                }
-            }
+    if( params.route_params )
+    {
+      var type = params.route_params.type;
+      var value = params.route_params.value;
+
+      var navigation_data = {
+        'fields' : [],
+        'copyfield_source' : [],
+        'copyfield_dest' : [],
+        'dynamic_fields' : [],
+        'types' : []
+      }
+
+      $( 'option[value="' + params.route_params.path + '"]', 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] );
 
-            related_navigation_element
-                .show()
-                .attr( 'class', type )
-                .html( navigation_content );
+        if( app.schema_browser_data.relations.f_df[value] )
+        {
+          navigation_data.dynamic_fields.push( app.schema_browser_data.relations.f_df[value] );
         }
-        else
+
+        if( 0 !== app.schema_browser_data.fields[value].copySources.length )
         {
-            related_navigation_element
-                .hide();
-            
-            $( 'option:selected', related_select_element )
-                .removeAttr( 'selected' );
+          navigation_data.copyfield_source = app.schema_browser_data.fields[value].copySources;
         }
 
-        if( 'field' === type && value === app.schema_browser_data.unique_key_field )
+        if( 0 !== app.schema_browser_data.fields[value].copyDests.length )
         {
-            $( '.unique-key-field', related_navigation_meta )
-                .addClass( 'active' );
+          navigation_data.copyfield_dest = app.schema_browser_data.fields[value].copyDests;
         }
-        else
+      }
+      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] )
         {
-            $( '.unique-key-field', related_navigation_meta )
-                .removeClass( 'active' );
+          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( 'field' === type && value === app.schema_browser_data.default_search_field )
+      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 )
         {
-            $( '.default-search-field', related_navigation_meta )
-                .addClass( 'active' );
+          var href = sammy_basepath + '?field=' + navigation_data.fields[i];
+          navigation_content += '<dd class="field"><a href="' + href + '">' + navigation_data.fields[i] + '</a></dd>' + "\n";
         }
-        else
+      }
+
+      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 )
         {
-            $( '.default-search-field', related_navigation_meta )
-                .removeClass( 'active' );
+          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( params.callback )
+      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 )
         {
-            params.callback( app.schema_browser_data, $( '#data', params.schema_browser_element ) );
+          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 )
+  'schema_browser_load',
+  function( event, params )
+  {
+    var core_basepath = params.active_core.attr( 'data-basepath' );
+    var content_element = $( '#content' );
+
+    if( app.schema_browser_data )
     {
-        var core_basepath = params.active_core.attr( 'data-basepath' );
-        var content_element = $( '#content' );
+      params.schema_browser_element = $( '#schema-browser', content_element );
 
-        if( app.schema_browser_data )
+      sammy.trigger
+      (
+        'schema_browser_navi',
+        params
+      );
+    }
+    else
+    {
+      content_element
+        .html( '<div id="schema-browser"><div class="loader">Loading ...</div></div>' );
+            
+      $.ajax
+      (
         {
-            params.schema_browser_element = $( '#schema-browser', content_element );
+          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;
 
-            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?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;
+
+                for( var field in response.schema.fields )
                 {
-                    url : core_basepath + '/admin/luke?numTerms=0&wt=json',
-                    dataType : 'json',
-                    beforeSend : function( xhr, settings )
+                  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 )
                     {
-                    },
-                    success : function( response, text_status, xhr )
+                      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 = {
-                            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 );
+                      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 );
+                }
 
-                                            var related_options = '';
+                $.get
+                (
+                  'tpl/schema-browser.html',
+                  function( template )
+                  {
+                    content_element
+                      .html( template );
                                             
-                                            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 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 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 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 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 );
+                    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";
+                    }
                                             
-                                            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)
+                    var types = [];
+                    for( var type_name in app.schema_browser_data.types )
                     {
-                    },
-                    complete : function( xhr, text_status )
+                      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 )
+  /^#\/([\w\d-]+)\/(schema-browser)$/,
+  function( context )
+  {
+    var core_basepath = this.active_core.attr( 'data-basepath' );
+
+    var trigger_params = {
+      active_core : this.active_core
+    };
+
+    var path = context.path.split( '?' );
+    if( path && path[1] )
     {
-        var callback = function( schema_browser_data, data_element )
+      var param = path[1].split( '=' );
+      trigger_params.route_params =  {
+        path : '?' + path[1],
+        type : param[0],
+        value : param[1]
+      }
+
+      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();
+
+        var keystring_to_list = function( keystring, element_class )
         {
-            data_element
-                .hide();
-        };
+          var key_list = keystring.replace( /-/g, '' ).split( '' );
+          var list = [];
 
-        delete app.schema_browser_data;
+          for( var i in key_list )
+          {
+            var option_key = schema_browser_data.key[key_list[i]];
 
-        sammy.trigger
-        (
-            'schema_browser_load',
+            if( !option_key )
             {
-                callback : callback,
-                active_core : this.active_core
+              option_key = schema_browser_data.key[key_list[i].toLowerCase()];
             }
-        );
-    }
-);
 
-// #/: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' );
+            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( /,/, '' );
 
-        var callback = function( schema_browser_data, data_element )
+          return list;
+        }
+
+        var flags = null;
+
+        if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].flags )
         {
-            var field = context.params.splat[4];
+          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;
+        }
 
-            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 );
+        // -- head
 
-            data_element
-                .show();
+        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 keystring_to_list = function( keystring, element_class )
-            {
-                var key_list = keystring.replace( /-/g, '' ).split( '' );
-                var list = [];
+        // -- properties
+        var properties_element = $( 'dt.properties', options_element );
+        if( flags )
+        {
+          var properties_keys = keystring_to_list( flags, 'properties' );
 
-                for( var i in key_list )
-                {
-                    var option_key = schema_browser_data.key[key_list[i]];
+          $( 'dd.properties', options_element )
+            .remove();
 
-                    if( !option_key )
-                    {
-                        option_key = schema_browser_data.key[key_list[i].toLowerCase()];
-                    }
+          properties_element
+            .show()
+            .after( properties_keys.join( "\n" ) );
+        }
+        else
+        {
+          $( '.properties', options_element )
+            .hide();
+        }
 
-                    if( !option_key )
-                    {
-                        option_key = schema_browser_data.key[key_list[i].toUpperCase()];
-                    }
+        // -- 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' );
 
-                    if( option_key )
-                    {
-                        list.push
-                        (
-                            '<dd ' + ( element_class ? ' class="' + element_class + '"' : '' ) + '>' +
-                            option_key +
-                            ',</dd>'
-                        );
-                    }
-                }
+          $( 'dd.schema', options_element )
+            .remove();
 
-                list[list.length-1] = list[key_list.length-1].replace( /,/, '' );
+          schema_element
+            .show()
+            .after( schema_keys.join( "\n" ) );
+        }
+        else
+        {
+          $( '.schema', options_element )
+            .hide();
+        }
 
-                return list;
-            }
+        // -- 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 = [];
 
-            var flags = null;
+          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();
+        }
 
-            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;
-            }
+        // -- 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();
 
-            // -- properties
-            var properties_element = $( 'dt.properties', options_element );
-            if( flags )
-            {
-                var properties_keys = keystring_to_list( flags, 'properties' );
+          docs_element
+            .show()
+            .after( '<dd class="docs">' + schema_browser_data.fields[field].docs + '</dd>' );
+        }
+        else
+        {
+          $( '.docs', options_element )
+            .hide();
+        }
 
-                $( 'dd.properties', options_element )
-                    .remove();
+        // -- 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();
 
-                properties_element
-                    .show()
-                    .after( properties_keys.join( "\n" ) );
-            }
-            else
-            {
-                $( '.properties', options_element )
-                    .hide();
-            }
+          distinct_element
+            .show()
+            .after( '<dd class="distinct">' + schema_browser_data.fields[field].distinct + '</dd>' );
+        }
+        else
+        {
+          $( '.distinct', 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' );
+        // -- 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();
 
-                $( 'dd.schema', 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;
 
-                schema_element
-                    .show()
-                    .after( schema_keys.join( "\n" ) );
-            }
-            else
-            {
-                $( '.schema', options_element )
-                    .hide();
-            }
+        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];
+        }
 
-            // -- 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( 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( 0 === schema_browser_data.fields[field].index.indexOf( '(' ) )
+                if( 'synonyms' === key || 'words' === key )
                 {
-                    index_keys.push( '<dd class="index">' + schema_browser_data.fields[field].index + '</dd>' );
+                  // @TODO: set link target for file
+                  arg_content += '<a>' + analyzer_data.args[key] + '</a>';
                 }
                 else
                 {
-                    index_keys = keystring_to_list( schema_browser_data.fields[field].index, 'index' );
+                  arg_content += analyzer_data.args[key];
                 }
+              }
 
-                $( 'dd.index', options_element )
-                    .remove();
-
-                index_element
-                    .show()
-                    .after( index_keys.join( "\n" ) );
+              args.push( '<dd class="' + arg_class + '">' + arg_content + '</dd>' );
             }
-            else
+
+            var list_content = '<dt>' + analyzer_data.className + '</dt>';
+            if( 0 !== args.length )
             {
-                $( '.index', options_element )
-                    .hide();
+              args.sort();
+              list_content += args.join( "\n" );
             }
 
-            // -- 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();
+            return list_content;
+          }
 
-                docs_element
-                    .show()
-                    .after( '<dd class="docs">' + schema_browser_data.fields[field].docs + '</dd>' );
-            }
-            else
-            {
-                $( '.docs', options_element )
-                    .hide();
-            }
+          // -- field-type
+          var field_type_element = $( 'dt.field-type', options_element );
 
-            // -- 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();
+          $( 'dd.field-type', options_element )
+            .remove();
 
-                distinct_element
-                    .show()
-                    .after( '<dd class="distinct">' + schema_browser_data.fields[field].distinct + '</dd>' );
-            }
-            else
-            {
-                $( '.distinct', options_element )
-                    .hide();
-            }
+          field_type_element
+            .show()
+            .after( '<dd class="field-type">' + analyzer_data.className + '</dd>' );
 
-            // -- 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();
+          $( '.toggle', analyzer_element )
+            .die( 'click' )
+            .live
+            (
+              'click',
+              function( event )
+              {
+                $( this ).closest( 'li' )
+                  .toggleClass( 'open' );
 
-                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;
+                return false;
+              }
+            );
 
-            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 )
+          for( var key in analyzer_data )
+          {
+            var key_match = key.match( /^(.+)Analyzer$/ );
+            if( !key_match )
             {
-                analyzer_data = schema_browser_data.types[field];
+              continue;
             }
 
-            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 = '';
+            var analyzer_key_element = $( '.' + key_match[1], analyzer_element );
+            var analyzer_key_data = analyzer_data[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] )
-                        {
-                            arg_class = 'ico-0';
-                            arg_content = key;
-                        }
-                        else
-                        {
-                            arg_content = key + ': ';
+            analyzer_element.show();
+            analyzer_key_element.show();
 
-                            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];
-                            }
-                        }
+            $( 'ul li', analyzer_key_element )
+            .removeClass( 'data' )
+            .hide();
 
-                        args.push( '<dd class="' + arg_class + '">' + arg_content + '</dd>' );
-                    }
+            for( var type in analyzer_key_data )
+            {
+              if( 'object' !== typeof analyzer_key_data[type] )
+              {
+                continue;
+              }
 
-                    var list_content = '<dt>' + analyzer_data.className + '</dt>';
-                    if( 0 !== args.length )
-                    {
-                        args.sort();
-                        list_content += args.join( "\n" );
-                    }
+              var type_element = $( '.' + type, analyzer_key_element );
+              var type_content = [];
+
+              type_element
+                .addClass( 'data' )
+                .show();
 
-                    return list_content;
+              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] ) );
                 }
+              }
 
-                // -- field-type
-                var field_type_element = $( 'dt.field-type', options_element );
+              $( 'dl', type_element )
+                .empty()
+                .append( type_content.join( "\n" ) );
+            }
 
-                $( 'dd.field-type', options_element )
-                    .remove();
+            var name_element = $( 'dl:first dt a', analyzer_key_element );
+            if( analyzer_key_data.className )
+            {
+              name_element
+                .html( analyzer_key_data.className );
+            }
 
-                field_type_element
-                    .show()
-                    .after( '<dd class="field-type">' + analyzer_data.className + '</dd>' );
+            0 === $( 'ul li.data', analyzer_key_element ).size()
+            ? name_element.removeClass( 'toggle' )
+            : name_element.addClass( 'toggle' );
+          }
+        }
 
+        var terminfo_element = $( '.terminfo-holder', data_element );
 
-                for( var key in analyzer_data )
-                {
-                    var key_match = key.match( /^(.+)Analyzer$/ );
-                    if( !key_match )
-                    {
-                        continue;
-                    }
+        terminfo_element
+          .removeClass( 'disabled' )
+          .removeClass( 'loaded' );
 
-                    var analyzer_key_element = $( '.' + key_match[1], analyzer_element );
-                    var analyzer_key_data = analyzer_data[key];
+        var trigger_element = $( '.trigger button', terminfo_element );
+        var form_element = $( 'form', terminfo_element );
 
-                    analyzer_element.show();
-                    analyzer_key_element.show();
+        trigger_element
+          .die( 'click' )
+          .live
+          (
+            'click',
+            function( event )
+            {
+              form_element
+                .trigger( 'submit' );
 
-                    if( analyzer_key_data.className )
-                    {
-                        $( 'dl:first dt', analyzer_key_element )
-                            .html( analyzer_key_data.className );
-                    }
+              return false;
+            }
+          );
 
-                    $( 'ul li', analyzer_key_element )
-                        .hide();
+        form_element
+          .clearForm()
+          .die( 'submit' )
+          .live
+          (
+            'submit',
+            function( event )
+            {
+              load_terminfo( trigger_element, core_basepath, field, data_element, terminfo_element );
 
-                    for( var type in analyzer_key_data )
-                    {
-                        if( 'object' !== typeof analyzer_key_data[type] )
-                        {
-                            continue;
-                        }
+              terminfo_element
+                .addClass( 'loaded' );
+
+              return false;
+            }
+          );
 
-                        var type_element = $( '.' + type, analyzer_key_element );
-                        var type_content = [];
+        $( '.max-holder', terminfo_element )
+          .die( 'click' )
+          .live
+          (
+            'click',
+            function( event )
+            {
+              var element = $( this );
 
-                        type_element.show();
+              $( 'input', element.closest( 'form' ) )
+                .val( $( '.max', element ).text() );
 
-                        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] ) );
-                            }
-                        }
+              form_element
+                .trigger( 'submit' );
 
-                        $( 'dl', type_element )
-                            .empty()
-                            .append( type_content.join( "\n" ) );
-                    }
-                }
+              return false;
             }
+          );
 
-            var terminfo_element = $( '.terminfo-holder', data_element );
+        $( '.trigger .autoload', terminfo_element )
+          .die( 'click' )
+          .live
+          (
+            'click',
+            function( event )
+            {
+              $.cookie( cookie_name, $.cookie( cookie_name ) ? null : true );
+              $( this ).trigger( 'state' );
 
-            if( !is_f )
+              return false;
+            }
+          )
+          .die( 'state' )
+          .live
+          (
+            'state',
+            function( event )
             {
-                terminfo_element
-                    .hide();
+              $.cookie( cookie_name )
+                ? $( this ).addClass( 'on' )
+                : $( this ).removeClass( 'on' );
             }
-            else
+          )
+          .die( 'init' )
+          .live
+          (
+            'init',
+            function( event )
             {
-                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 );
+              if( !$.cookie( cookie_name ) )
+              {
+                return false;
+              }
 
-                            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
-                                        }
-                                    );
-                            }
+              $( this ).trigger( 'state' );
+              trigger_element.trigger( 'click' );
+            }
+          )
+          .trigger( 'init' );
 
-                        },
-                        error : function( xhr, text_status, error_thrown)
-                        {
-                        },
-                        complete : function( xhr, text_status )
-                        {
-                        }
-                    }
-                );
+        $( 'div[class$="-holder"]', terminfo_element )
+          .hide();
 
-            }
+        if( !is_f )
+        {
+          terminfo_element
+            .hide();
+        }
+        else
+        {
+          terminfo_element
+            .show();
         }
+      }
+    }
+    else
+    {
+      trigger_params.callback = function( schema_browser_data, data_element )
+      {
+        data_element
+          .hide();
+      };
 
-        sammy.trigger
-        (
-            'schema_browser_load',
-            {
-                callback : callback,
-                active_core : this.active_core,
-                route_params : this.params
-            }
-        );
+      delete app.schema_browser_data;
     }
+
+    sammy.trigger
+    (
+      'schema_browser_load',
+      trigger_params
+    );
+  }
 );
\ No newline at end of file