source: sandbox/expresso-solr/solr/example/work/jetty-0.0.0.0-8983-solr.war-_solr-any-/webapp/js/scripts/schema-browser.js @ 7588

Revision 7588, 36.6 KB checked in by adir, 11 years ago (diff)

Ticket #000 - Adicionando a integracao de buscas com Solr na base a ser isnerida na comunidade

Line 
1/*
2 Licensed to the Apache Software Foundation (ASF) under one or more
3 contributor license agreements.  See the NOTICE file distributed with
4 this work for additional information regarding copyright ownership.
5 The ASF licenses this file to You under the Apache License, Version 2.0
6 (the "License"); you may not use this file except in compliance with
7 the License.  You may obtain a copy of the License at
8
9     http://www.apache.org/licenses/LICENSE-2.0
10
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
16*/
17
18var current_core = null;
19var cookie_schema_browser_autoload = 'schema-browser_autoload';
20
21var luke_array_to_struct = function( array )
22{
23  var struct = {
24    keys : [],
25    values : []
26  };
27  for( var i = 0; i < array.length; i += 2 )
28  {
29    struct.keys.push( array[i] );
30    struct.values.push( array[i+1] );
31  }
32  return struct;
33}
34
35var luke_array_to_hash = function( array )
36{
37  var hash = {};
38  for( var i = 0; i < array.length; i += 2 )
39  {
40    hash[ array[i] ] = array[i+1];
41  }
42  return hash;
43}
44
45var load_terminfo = function( trigger_element, core_basepath, field, data_element, terminfo_element )
46{
47  var luke_url = core_basepath + '/admin/luke?wt=json&fl=' + field;
48  var topterms_count_element = $( '.topterms-holder .head input', terminfo_element );
49
50  var term_load_count = parseInt( topterms_count_element.val(), 10 );
51  if( term_load_count )
52  {
53    luke_url += '&numTerms=' + term_load_count;
54  }
55
56  $.ajax
57  (
58    {
59      url : luke_url,
60      dataType : 'json',
61      context : terminfo_element,
62      beforeSend : function( xhr, settings )
63      {
64        $( 'span', trigger_element )
65          .addClass( 'loader' );
66      },
67      success : function( response, text_status, xhr )
68      {
69        $( 'span', trigger_element )
70          .removeClass( 'loader' );
71
72        var field_data = response.fields[field];
73
74        if( !field_data || !( field_data.topTerms && field_data.histogram ) )
75        {
76          terminfo_element
77            .addClass( 'disabled' );
78
79          return false;
80        }
81
82        var topterms_holder_element = $( '.topterms-holder', data_element );
83        var histogram_holder_element = $( '.histogram-holder', data_element );
84
85        if( !field_data.topTerms )
86        {
87          topterms_holder_element
88            .hide();
89        }
90        else
91        {
92          topterms_holder_element
93            .show();
94
95          var topterms_table_element = $( 'ul', topterms_holder_element );
96
97          var topterms = field_data.topTerms;
98          var topterms_count = topterms.length;
99                   
100          var topterms_content = '';
101          var topterms_frq_last = null;
102
103          for( var i = 0; i < topterms_count; i += 2 )
104          {
105            if( topterms_frq_last !== topterms[i+1] )
106            {
107              if( topterms_frq_last )
108              {
109                topterms_content += '</ul></li>' + "\n";
110              }
111
112              topterms_frq_last = topterms[i+1];
113              topterms_content += '<li class="clearfix">'
114                               +  '<p><span>' + topterms_frq_last.esc() + '</span></p>' + "\n"
115                               +  '<ul>' + "\n";
116            }
117
118            var target = '#/' + current_core + '/query?q=' + field.esc() + ':' + encodeURIComponent( topterms[i] );
119            topterms_content += '<li><a href="' + target + '">' + topterms[i].esc() + '</a></li>' + "\n";
120          }
121
122          topterms_content += '</li>';
123
124          topterms_count = topterms_count / 2;
125
126          $( 'input', trigger_element )
127            .val( topterms_count );
128
129          topterms_table_element
130            .html( topterms_content );
131
132          topterms_count_element
133            .val( topterms_count );
134
135          $( 'p.head .max', topterms_holder_element )
136            .html( field_data.distinct );
137
138          $( 'p.head #query_link', topterms_holder_element )
139            .attr( 'href', '#/' + current_core + '/query?q=' + field.esc() + ':[* TO *]' );
140
141          $( 'ul li:even', topterms_table_element )
142            .addClass( 'odd' );
143        }
144
145        if( !field_data.histogram )
146        {
147          histogram_holder_element
148            .hide();
149        }
150        else
151        {
152          histogram_holder_element
153            .show();
154
155          var histogram_element = $( '.histogram', histogram_holder_element );
156
157          var histogram_values = luke_array_to_hash( field_data.histogram );
158          var histogram_legend = '';
159
160          histogram_holder_element
161            .show();
162
163          for( var key in histogram_values )
164          {
165            histogram_legend += '<dt><span>' + key + '</span></dt>' + "\n" +
166                    '<dd title="' + key + '">' +
167                    '<span>' + histogram_values[key] + '</span>' +
168                    '</dd>' + "\n";
169          }
170
171          $( 'dl', histogram_holder_element )
172            .html( histogram_legend );
173
174          var histogram_values = luke_array_to_struct( field_data.histogram ).values;
175
176          histogram_element
177            .sparkline
178            (
179              histogram_values,
180              {
181                type : 'bar',
182                barColor : '#c0c0c0',
183                zeroColor : '#000000',
184                height : histogram_element.height(),
185                barWidth : 46,
186                barSpacing : 3
187              }
188            );
189
190          1 === histogram_values.length
191            ? histogram_element.addClass( 'single' )
192            : histogram_element.removeClass( 'single' );
193        }
194
195      },
196      error : function( xhr, text_status, error_thrown)
197      {
198      },
199      complete : function( xhr, text_status )
200      {
201      }
202    }
203  );
204}
205
206sammy.bind
207(
208  'schema_browser_navi',
209  function( event, params )
210  {
211    var related_navigation_element = $( '#related dl#f-df-t', params.schema_browser_element );
212    var related_navigation_meta = $( '#related dl.ukf-dsf', params.schema_browser_element );
213    var related_select_element = $( '#related select', params.schema_browser_element )
214    var type = 'index';
215
216    var sammy_basepath = '#/' + $( 'p a', params.active_core ).html() + '/schema-browser';
217       
218    if( !related_navigation_meta.hasClass( 'done' ) )
219    {
220      if( app.schema_browser_data.unique_key_field )
221      {
222        $( '.unique-key-field', related_navigation_meta )
223          .show()
224          .after
225          (
226            '<dd class="unique-key-field"><a href="' + sammy_basepath + '?field=' +
227            app.schema_browser_data.unique_key_field + '">' +
228            app.schema_browser_data.unique_key_field + '</a></dd>'
229          );
230      }
231
232      if( app.schema_browser_data.default_search_field )
233      {
234        $( '.default-search-field', related_navigation_meta )
235          .show()
236          .after
237          (
238            '<dd class="default-search-field"><a href="' + sammy_basepath + '?field=' +
239            app.schema_browser_data.default_search_field + '">' +
240            app.schema_browser_data.default_search_field + '</a></dd>'
241          );
242      }
243
244      related_navigation_meta
245        .addClass( 'done' );
246    }
247
248    if( params.route_params )
249    {
250      var type = params.route_params.type;
251      var value = params.route_params.value;
252
253      var navigation_data = {
254        'fields' : [],
255        'copyfield_source' : [],
256        'copyfield_dest' : [],
257        'dynamic_fields' : [],
258        'types' : []
259      }
260
261      $( 'option[value="' + params.route_params.path + '"]', related_select_element )
262        .attr( 'selected', 'selected' );
263
264      related_select_element
265        .trigger( 'liszt:updated' );
266
267      if( 'field' === type )
268      {
269        navigation_data.fields.push( value );
270        navigation_data.types.push( app.schema_browser_data.relations.f_t[value] );
271
272        if( app.schema_browser_data.relations.f_df[value] )
273        {
274          navigation_data.dynamic_fields.push( app.schema_browser_data.relations.f_df[value] );
275        }
276
277        if( 0 !== app.schema_browser_data.fields[value].copySources.length )
278        {
279          navigation_data.copyfield_source = app.schema_browser_data.fields[value].copySources;
280        }
281
282        if( 0 !== app.schema_browser_data.fields[value].copyDests.length )
283        {
284          navigation_data.copyfield_dest = app.schema_browser_data.fields[value].copyDests;
285        }
286      }
287      else if( 'dynamic-field' === type )
288      {
289        navigation_data.dynamic_fields.push( value );
290        navigation_data.types.push( app.schema_browser_data.relations.df_t[value] );
291
292        if( app.schema_browser_data.relations.df_f[value] )
293        {
294          navigation_data.fields = app.schema_browser_data.relations.df_f[value];
295        }
296      }
297      else if( 'type' === type )
298      {
299        navigation_data.types.push( value );
300               
301        if( app.schema_browser_data.relations.t_f[value] )
302        {
303          navigation_data.fields = app.schema_browser_data.relations.t_f[value];
304        }
305               
306        if( app.schema_browser_data.relations.t_df[value] )
307        {
308          navigation_data.dynamic_fields = app.schema_browser_data.relations.t_df[value];
309        }
310      }
311
312      var navigation_content = '';
313
314      if( 0 !== navigation_data.fields.length )
315      {
316        navigation_data.fields.sort();
317        navigation_content += '<dt class="field">Field</dt>' + "\n";
318        for( var i in navigation_data.fields )
319        {
320          var href = sammy_basepath + '?field=' + navigation_data.fields[i];
321          navigation_content += '<dd class="field"><a href="' + href + '">' + navigation_data.fields[i] + '</a></dd>' + "\n";
322        }
323      }
324
325      if( 0 !== navigation_data.copyfield_source.length )
326      {
327        navigation_data.copyfield_source.sort();
328        navigation_content += '<dt class="copyfield">Copied from</dt>' + "\n";
329        for( var i in navigation_data.copyfield_source )
330        {
331          var href = sammy_basepath + '?field=' + navigation_data.copyfield_source[i];
332          navigation_content += '<dd class="copyfield"><a href="' + href + '">' + navigation_data.copyfield_source[i] + '</a></dd>' + "\n";
333        }
334      }
335
336      if( 0 !== navigation_data.copyfield_dest.length )
337      {
338        navigation_data.copyfield_dest.sort();
339        navigation_content += '<dt class="copyfield">Copied to</dt>' + "\n";
340        for( var i in navigation_data.copyfield_dest )
341        {
342          var href = sammy_basepath + '?field=' + navigation_data.copyfield_dest[i];
343          navigation_content += '<dd class="copyfield"><a href="' + href + '">' + navigation_data.copyfield_dest[i] + '</a></dd>' + "\n";
344        }
345      }
346
347      if( 0 !== navigation_data.dynamic_fields.length )
348      {
349        navigation_data.dynamic_fields.sort();
350        navigation_content += '<dt class="dynamic-field">Dynamic Field</dt>' + "\n";
351        for( var i in navigation_data.dynamic_fields )
352        {
353          var href = sammy_basepath + '?dynamic-field=' + navigation_data.dynamic_fields[i];
354          navigation_content += '<dd class="dynamic-field"><a href="' + href + '">' + navigation_data.dynamic_fields[i] + '</a></dd>' + "\n";
355        }
356      }
357
358      if( 0 !== navigation_data.types.length )
359      {
360        navigation_data.types.sort();
361        navigation_content += '<dt class="type">Type</dt>' + "\n";
362        for( var i in navigation_data.types )
363        {
364          var href = sammy_basepath + '?type=' + navigation_data.types[i];
365          navigation_content += '<dd class="type"><a href="' + href + '">' + navigation_data.types[i] + '</a></dd>' + "\n";
366        }
367      }
368
369      related_navigation_element
370        .show()
371        .attr( 'class', type )
372        .html( navigation_content );
373    }
374    else
375    {
376      related_navigation_element
377        .hide();
378           
379      $( 'option:selected', related_select_element )
380        .removeAttr( 'selected' );
381    }
382
383    if( 'field' === type && value === app.schema_browser_data.unique_key_field )
384    {
385      $( '.unique-key-field', related_navigation_meta )
386        .addClass( 'active' );
387    }
388    else
389    {
390      $( '.unique-key-field', related_navigation_meta )
391        .removeClass( 'active' );
392    }
393
394    if( 'field' === type && value === app.schema_browser_data.default_search_field )
395    {
396      $( '.default-search-field', related_navigation_meta )
397        .addClass( 'active' );
398    }
399    else
400    {
401      $( '.default-search-field', related_navigation_meta )
402        .removeClass( 'active' );
403    }
404
405    if( params.callback )
406    {
407      params.callback( app.schema_browser_data, $( '#data', params.schema_browser_element ) );
408    }
409  }
410);
411
412sammy.bind
413(
414  'schema_browser_load',
415  function( event, params )
416  {
417    var core_basepath = params.active_core.attr( 'data-basepath' );
418    var content_element = $( '#content' );
419
420    if( app.schema_browser_data )
421    {
422      params.schema_browser_element = $( '#schema-browser', content_element );
423
424      sammy.trigger
425      (
426        'schema_browser_navi',
427        params
428      );
429    }
430    else
431    {
432      content_element
433        .html( '<div id="schema-browser"><div class="loader">Loading ...</div></div>' );
434           
435      $.ajax
436      (
437        {
438          url : core_basepath + '/admin/luke?numTerms=0&wt=json',
439          dataType : 'json',
440          beforeSend : function( xhr, settings )
441          {
442          },
443          success : function( response, text_status, xhr )
444          {
445            app.schema_browser_data = {
446            default_search_field : null,
447            unique_key_field : null,
448            key : {},
449            fields : {},
450            dynamic_fields : {},
451            types : {},
452            relations : {
453              f_df : {},
454              f_t  : {},
455              df_f : {},
456              df_t : {},
457              t_f  : {},
458              t_df : {}
459            }
460            };
461
462            app.schema_browser_data.fields = response.fields;
463            app.schema_browser_data.key = response.info.key;
464
465            $.ajax
466            (
467            {
468              url : core_basepath + '/admin/luke?show=schema&wt=json',
469              dataType : 'json',
470              beforeSend : function( xhr, settings )
471              {
472              },
473              success : function( response, text_status, xhr )
474              {
475                app.schema_browser_data.default_search_field = response.schema.defaultSearchField;
476                app.schema_browser_data.unique_key_field = response.schema.uniqueKeyField;
477
478                app.schema_browser_data.dynamic_fields = response.schema.dynamicFields;
479                app.schema_browser_data.types = response.schema.types;
480
481                for( var field in response.schema.fields )
482                {
483                  app.schema_browser_data.fields[field] = $.extend
484                  (
485                    {},
486                    app.schema_browser_data.fields[field],
487                    response.schema.fields[field]
488                  );
489                }
490
491                for( var field in app.schema_browser_data.fields )
492                {
493                  app.schema_browser_data.fields[field].copySourcesRaw = null;
494
495                  if( app.schema_browser_data.fields[field].copySources &&
496                    0 !== app.schema_browser_data.fields[field].copySources.length )
497                  {
498                    app.schema_browser_data.fields[field].copySourcesRaw =
499                      app.schema_browser_data.fields[field].copySources;
500                  }
501                                       
502                  app.schema_browser_data.fields[field].copyDests = [];
503                  app.schema_browser_data.fields[field].copySources = [];
504                }
505
506                for( var field in app.schema_browser_data.fields )
507                {
508                  if( app.schema_browser_data.fields[field].copySourcesRaw )
509                  {
510                    var copy_sources = app.schema_browser_data.fields[field].copySourcesRaw;
511                    for( var i in copy_sources )
512                    {
513                      var target = copy_sources[i].replace( /^.+:(.+)\{.+$/, '$1' );
514
515                      app.schema_browser_data.fields[field].copySources.push( target );
516                      app.schema_browser_data.fields[target].copyDests.push( field );
517                    }
518                  }
519
520                  app.schema_browser_data.relations.f_t[field] = app.schema_browser_data.fields[field].type;
521
522                  if( !app.schema_browser_data.relations.t_f[app.schema_browser_data.fields[field].type] )
523                  {
524                    app.schema_browser_data.relations.t_f[app.schema_browser_data.fields[field].type] = [];
525                  }
526                  app.schema_browser_data.relations.t_f[app.schema_browser_data.fields[field].type].push( field );
527
528                  if( app.schema_browser_data.fields[field].dynamicBase )
529                  {
530                    app.schema_browser_data.relations.f_df[field] = app.schema_browser_data.fields[field].dynamicBase;
531
532                    if( !app.schema_browser_data.relations.df_f[app.schema_browser_data.fields[field].dynamicBase] )
533                    {
534                      app.schema_browser_data.relations.df_f[app.schema_browser_data.fields[field].dynamicBase] = [];
535                    }
536                    app.schema_browser_data.relations.df_f[app.schema_browser_data.fields[field].dynamicBase].push( field );
537                  }
538                }
539
540                for( var dynamic_field in app.schema_browser_data.dynamic_fields )
541                {
542                  app.schema_browser_data.relations.df_t[dynamic_field] = app.schema_browser_data.dynamic_fields[dynamic_field].type;
543
544                  if( !app.schema_browser_data.relations.t_df[app.schema_browser_data.dynamic_fields[dynamic_field].type] )
545                  {
546                    app.schema_browser_data.relations.t_df[app.schema_browser_data.dynamic_fields[dynamic_field].type] = [];
547                  }
548                  app.schema_browser_data.relations.t_df[app.schema_browser_data.dynamic_fields[dynamic_field].type].push( dynamic_field );
549                }
550
551                $.get
552                (
553                  'tpl/schema-browser.html',
554                  function( template )
555                  {
556                    content_element
557                      .html( template );
558                                           
559                    var schema_browser_element = $( '#schema-browser', content_element );
560                    var related_element = $( '#related', schema_browser_element );
561                    var related_select_element = $( 'select', related_element );
562                    var data_element = $( '#data', schema_browser_element );
563
564                    var related_options = '';
565                                           
566                    var fields = [];
567                    for( var field_name in app.schema_browser_data.fields )
568                    {
569                      fields.push
570                      (
571                        '<option value="?field=' + field_name + '">' + field_name + '</option>'
572                      );
573                    }
574                    if( 0 !== fields.length )
575                    {
576                      fields.sort();
577                      related_options += '<optgroup label="Fields">' + "\n";
578                      related_options += fields.sort().join( "\n" ) + "\n";
579                      related_options += '</optgroup>' + "\n";
580                    }
581                                           
582                    var dynamic_fields = [];
583                    for( var type_name in app.schema_browser_data.dynamic_fields )
584                    {
585                      dynamic_fields.push
586                      (
587                        '<option value="?dynamic-field=' + type_name + '">' + type_name + '</option>'
588                      );
589                    }
590                    if( 0 !== dynamic_fields.length )
591                    {
592                      dynamic_fields.sort();
593                      related_options += '<optgroup label="DynamicFields">' + "\n";
594                      related_options += dynamic_fields.sort().join( "\n" ) + "\n";
595                      related_options += '</optgroup>' + "\n";
596                    }
597                                           
598                    var types = [];
599                    for( var type_name in app.schema_browser_data.types )
600                    {
601                      types.push
602                      (
603                        '<option value="?type=' + type_name + '">' + type_name + '</option>'
604                      );
605                    }
606                    if( 0 !== types.length )
607                    {
608                      types.sort();
609                      related_options += '<optgroup label="Types">' + "\n";
610                      related_options += types.sort().join( "\n" ) + "\n";
611                      related_options += '</optgroup>' + "\n";
612                    }
613
614                    related_select_element
615                      .attr( 'rel', '#/' + $( 'p a', params.active_core ).html() + '/schema-browser' )
616                      .append( related_options )
617                      .chosen();
618                                           
619                    related_select_element
620                      .die( 'change' )
621                      .live
622                      (
623                        'change',
624                        function( event )
625                        {
626                          var select_element = $( this );
627                          var option_element = $( 'option:selected', select_element );
628
629                          location.href = select_element.attr( 'rel' ) + option_element.val();
630                          return false;
631                        }
632                      );
633
634                    params.schema_browser_element = schema_browser_element;
635                    sammy.trigger
636                    (
637                      'schema_browser_navi',
638                      params
639                    );
640                  }
641                );
642              },
643              error : function( xhr, text_status, error_thrown)
644              {
645              },
646              complete : function( xhr, text_status )
647              {
648              }
649            }
650            );
651
652          },
653          error : function( xhr, text_status, error_thrown)
654          {
655          },
656          complete : function( xhr, text_status )
657          {
658          }
659        }
660      );
661    }
662  }
663);
664
665// #/:core/schema-browser
666sammy.get
667(
668  /^#\/([\w\d-]+)\/(schema-browser)$/,
669  function( context )
670  {
671    var core_basepath = this.active_core.attr( 'data-basepath' );
672    current_core = context.params.splat[0];
673
674    var trigger_params = {
675      active_core : this.active_core
676    };
677
678    var path = context.path.split( '?' );
679    if( path && path[1] )
680    {
681      var param = path[1].split( '=' );
682      trigger_params.route_params =  {
683        path : '?' + path[1],
684        type : param[0],
685        value : param[1]
686      }
687
688      trigger_params.callback = function( schema_browser_data, data_element )
689      {
690        var field = trigger_params.route_params.value;
691
692        var type = trigger_params.route_params.type;
693        var is_f = 'field' === type;
694        var is_df = 'dynamic-field' === type;
695        var is_t = 'type' === type;
696               
697        var options_element = $( '.options', data_element );
698        var sammy_basepath = context.path.indexOf( '/', context.path.indexOf( '/', 2 ) + 1 );
699
700        data_element
701          .show();
702
703        var keystring_to_list = function( keystring, element_class )
704        {
705          var key_list = keystring.replace( /-/g, '' ).split( '' );
706          var list = [];
707
708          for( var i in key_list )
709          {
710            var option_key = schema_browser_data.key[key_list[i]];
711
712            if( !option_key )
713            {
714              option_key = schema_browser_data.key[key_list[i].toLowerCase()];
715            }
716
717            if( !option_key )
718            {
719              option_key = schema_browser_data.key[key_list[i].toUpperCase()];
720            }
721
722            if( option_key )
723            {
724              list.push
725              (
726                '<dd ' + ( element_class ? ' class="' + element_class + '"' : '' ) + '>' +
727                option_key +
728                ',</dd>'
729              );
730            }
731          }
732
733          list[list.length-1] = list[key_list.length-1].replace( /,/, '' );
734
735          return list;
736        }
737
738        var flags = null;
739
740        if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].flags )
741        {
742          flags = schema_browser_data.fields[field].flags;
743        }
744        else if( is_df && schema_browser_data.dynamic_fields[field] && schema_browser_data.dynamic_fields[field].flags )
745        {
746          flags = schema_browser_data.dynamic_fields[field].flags;
747        }
748
749        // -- head
750
751        var head_element = $( '.head', data_element );
752        if( is_f )
753        {
754          $( '.type', head_element ).html( 'Field' );
755        }
756        else if( is_df )
757        {
758          $( '.type', head_element ).html( 'Dynamic Field' );
759        }
760        else if( is_t )
761        {
762          $( '.type', head_element ).html( 'Type' );
763        }
764        $( '.name', head_element ).html( field.esc() );
765
766        // -- properties
767        var properties_element = $( 'dt.properties', options_element );
768        if( flags )
769        {
770          var properties_keys = keystring_to_list( flags, 'properties' );
771
772          $( 'dd.properties', options_element )
773            .remove();
774
775          properties_element
776            .show()
777            .after( properties_keys.join( "\n" ) );
778        }
779        else
780        {
781          $( '.properties', options_element )
782            .hide();
783        }
784
785        // -- schema
786        var schema_element = $( 'dt.schema', options_element );
787        if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].schema )
788        {
789          var schema_keys = keystring_to_list( schema_browser_data.fields[field].schema, 'schema' );
790
791          $( 'dd.schema', options_element )
792            .remove();
793
794          schema_element
795            .show()
796            .after( schema_keys.join( "\n" ) );
797        }
798        else
799        {
800          $( '.schema', options_element )
801            .hide();
802        }
803
804        // -- index
805        var index_element = $( 'dt.index', options_element );
806        if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].index )
807        {
808          var index_keys = [];
809
810          if( 0 === schema_browser_data.fields[field].index.indexOf( '(' ) )
811          {
812            index_keys.push( '<dd class="index">' + schema_browser_data.fields[field].index + '</dd>' );
813          }
814          else
815          {
816            index_keys = keystring_to_list( schema_browser_data.fields[field].index, 'index' );
817          }
818
819          $( 'dd.index', options_element )
820            .remove();
821
822          index_element
823            .show()
824            .after( index_keys.join( "\n" ) );
825        }
826        else
827        {
828          $( '.index', options_element )
829            .hide();
830        }
831
832        // -- docs
833        var docs_element = $( 'dt.docs', options_element );
834        if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].docs )
835        {
836          $( 'dd.docs', options_element )
837            .remove();
838
839          var target = '#/' + current_core + '/query?q=' + field.esc() + ':[* TO *]';
840          docs_element
841            .show()
842            .after(
843             '<dd class="docs">'+
844               '<a href="'+target+'">' + schema_browser_data.fields[field].docs + '</a>' +
845             '</dd>' );
846        }
847        else
848        {
849          $( '.docs', options_element )
850            .hide();
851        }
852
853        // -- distinct
854        var distinct_element = $( 'dt.distinct', options_element );
855        if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].distinct )
856        {
857          $( 'dd.distinct', options_element )
858            .remove();
859
860          distinct_element
861            .show()
862            .after( '<dd class="distinct">' + schema_browser_data.fields[field].distinct + '</dd>' );
863        }
864        else
865        {
866          $( '.distinct', options_element )
867            .hide();
868        }
869
870        // -- position-increment-gap
871        var pig_element = $( 'dt.position-increment-gap', options_element );
872        if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].positionIncrementGap )
873        {
874          $( 'dt.position-increment-gap', options_element )
875            .remove();
876
877          pig_element
878            .show()
879            .after( '<dd class="position-increment-gap">' + schema_browser_data.fields[field].positionIncrementGap + '</dd>' );
880        }
881        else
882        {
883          $( '.position-increment-gap', options_element )
884            .hide();
885        }
886               
887        var analyzer_element = $( '.analyzer', data_element );
888        var analyzer_data = null;
889
890        var analysis_link = false;
891        var analysis_link_elements = $( 'p a', analyzer_element );
892        var analysis_target = '#/' + current_core + '/analysis?';
893
894        if( is_f )
895        {
896          analyzer_data = schema_browser_data.types[schema_browser_data.relations.f_t[field]];
897
898          analysis_link = true;
899          analysis_target += 'analysis.fieldname=' + field;
900        }
901        else if( is_df )
902        {
903          analyzer_data = schema_browser_data.types[schema_browser_data.relations.df_t[field]];
904        }
905        else if( is_t )
906        {
907          analyzer_data = schema_browser_data.types[field];
908         
909          analysis_link = true;
910          analysis_target += 'analysis.fieldtype=' + field;
911        }
912
913        if( analysis_link )
914        {
915          analysis_link_elements
916            .addClass( 'analysis' )
917            .attr( 'href', analysis_target );
918        }
919        else
920        {
921          analysis_link_elements
922            .removeClass( 'analysis' )
923            .removeAttr( 'href' );
924        }
925
926
927        if( analyzer_data )
928        {
929          var transform_analyzer_data_into_list = function( analyzer_data )
930          {
931            var args = [];
932            for( var key in analyzer_data.args )
933            {
934              var arg_class = '';
935              var arg_content = '';
936
937              if( 'true' === analyzer_data.args[key] || '1' === analyzer_data.args[key] )
938              {
939                arg_class = 'ico-1';
940                arg_content = key;
941              }
942              else if( 'false' === analyzer_data.args[key] || '0' === analyzer_data.args[key] )
943              {
944                arg_class = 'ico-0';
945                arg_content = key;
946              }
947              else
948              {
949                arg_content = key + ': ';
950
951                if( 'synonyms' === key || 'words' === key )
952                {
953                  // @TODO: set link target for file
954                  arg_content += '<a>' + analyzer_data.args[key] + '</a>';
955                }
956                else
957                {
958                  arg_content += analyzer_data.args[key];
959                }
960              }
961
962              args.push( '<dd class="' + arg_class + '">' + arg_content + '</dd>' );
963            }
964
965            var list_content = '<dt>' + analyzer_data.className + '</dt>';
966            if( 0 !== args.length )
967            {
968              args.sort();
969              list_content += args.join( "\n" );
970            }
971
972            return list_content;
973          }
974
975          // -- field-type
976          var field_type_element = $( 'dt.field-type', options_element );
977
978          $( 'dd.field-type', options_element )
979            .remove();
980
981          field_type_element
982            .show()
983            .after( '<dd class="field-type">' + analyzer_data.className + '</dd>' );
984
985          $( '.toggle', analyzer_element )
986            .die( 'click' )
987            .live
988            (
989              'click',
990              function( event )
991              {
992                $( this ).closest( 'li' )
993                  .toggleClass( 'open' );
994
995                return false;
996              }
997            );
998
999          for( var key in analyzer_data )
1000          {
1001            var key_match = key.match( /^(.+)Analyzer$/ );
1002            if( !key_match )
1003            {
1004              continue;
1005            }
1006
1007            var analyzer_key_element = $( '.' + key_match[1], analyzer_element );
1008            var analyzer_key_data = analyzer_data[key];
1009
1010            analyzer_element.show();
1011            analyzer_key_element.show();
1012
1013            $( 'ul li', analyzer_key_element )
1014            .removeClass( 'data' )
1015            .hide();
1016
1017            for( var type in analyzer_key_data )
1018            {
1019              if( 'object' !== typeof analyzer_key_data[type] )
1020              {
1021                continue;
1022              }
1023
1024              var type_element = $( '.' + type, analyzer_key_element );
1025              var type_content = [];
1026
1027              type_element
1028                .addClass( 'data' )
1029                .show();
1030
1031              if( analyzer_key_data[type].className )
1032              {
1033                type_content.push( transform_analyzer_data_into_list( analyzer_key_data[type] ) );
1034              }
1035              else
1036              {
1037                for( var entry in analyzer_key_data[type] )
1038                {
1039                  type_content.push( transform_analyzer_data_into_list( analyzer_key_data[type][entry] ) );
1040                }
1041              }
1042
1043              $( 'dl', type_element )
1044                .empty()
1045                .append( type_content.join( "\n" ) );
1046            }
1047
1048            var name_element = $( 'dl:first dt a', analyzer_key_element );
1049            if( analyzer_key_data.className )
1050            {
1051              name_element
1052                .html( analyzer_key_data.className );
1053            }
1054
1055            0 === $( 'ul li.data', analyzer_key_element ).size()
1056            ? name_element.removeClass( 'toggle' )
1057            : name_element.addClass( 'toggle' );
1058          }
1059        }
1060
1061        var terminfo_element = $( '.terminfo-holder', data_element );
1062
1063        terminfo_element
1064          .removeClass( 'disabled' )
1065          .removeClass( 'loaded' );
1066
1067        var trigger_element = $( '.trigger button', terminfo_element );
1068        var form_element = $( 'form', terminfo_element );
1069
1070        trigger_element
1071          .die( 'click' )
1072          .live
1073          (
1074            'click',
1075            function( event )
1076            {
1077              form_element
1078                .trigger( 'submit' );
1079
1080              return false;
1081            }
1082          );
1083
1084        form_element
1085          .clearForm()
1086          .die( 'submit' )
1087          .live
1088          (
1089            'submit',
1090            function( event )
1091            {
1092              load_terminfo( trigger_element, core_basepath, field, data_element, terminfo_element );
1093
1094              terminfo_element
1095                .addClass( 'loaded' );
1096
1097              return false;
1098            }
1099          );
1100
1101        $( '.max-holder', terminfo_element )
1102          .die( 'click' )
1103          .live
1104          (
1105            'click',
1106            function( event )
1107            {
1108              var element = $( this );
1109
1110              $( 'input', element.closest( 'form' ) )
1111                .val( $( '.max', element ).text() );
1112
1113              form_element
1114                .trigger( 'submit' );
1115
1116              return false;
1117            }
1118          );
1119
1120        $( '.trigger .autoload', terminfo_element )
1121          .die( 'click' )
1122          .live
1123          (
1124            'click',
1125            function( event )
1126            {
1127              $.cookie( cookie_schema_browser_autoload, $.cookie( cookie_schema_browser_autoload ) ? null : true );
1128              $( this ).trigger( 'state' );
1129
1130              return false;
1131            }
1132          )
1133          .die( 'state' )
1134          .live
1135          (
1136            'state',
1137            function( event )
1138            {
1139              $.cookie( cookie_schema_browser_autoload )
1140                ? $( this ).addClass( 'on' )
1141                : $( this ).removeClass( 'on' );
1142            }
1143          )
1144          .die( 'init' )
1145          .live
1146          (
1147            'init',
1148            function( event )
1149            {
1150              if( !$.cookie( cookie_schema_browser_autoload ) )
1151              {
1152                return false;
1153              }
1154
1155              $( this ).trigger( 'state' );
1156              trigger_element.trigger( 'click' );
1157            }
1158          )
1159          .trigger( 'init' );
1160
1161        $( 'div[class$="-holder"]', terminfo_element )
1162          .hide();
1163
1164        if( !is_f )
1165        {
1166          terminfo_element
1167            .hide();
1168        }
1169        else
1170        {
1171          terminfo_element
1172            .show();
1173        }
1174      }
1175    }
1176    else
1177    {
1178      trigger_params.callback = function( schema_browser_data, data_element )
1179      {
1180        data_element
1181          .hide();
1182      };
1183    }
1184
1185    delete app.schema_browser_data;
1186
1187    sammy.trigger
1188    (
1189      'schema_browser_load',
1190      trigger_params
1191    );
1192  }
1193);
Note: See TracBrowser for help on using the repository browser.