| /* |
| 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 current_core = null; |
| var cookie_schema_browser_autoload = '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 |
| ( |
| { |
| url : luke_url, |
| dataType : 'json', |
| context : terminfo_element, |
| beforeSend : function( xhr, settings ) |
| { |
| $( 'span', trigger_element ) |
| .addClass( 'loader' ); |
| }, |
| success : function( response, text_status, xhr ) |
| { |
| var additional_styles = []; |
| var field_data = response.fields[field]; |
| |
| if( !field_data || !( field_data.topTerms && field_data.histogram ) ) |
| { |
| terminfo_element |
| .addClass( 'disabled' ); |
| |
| return false; |
| } |
| |
| var get_width = function get_width() |
| { |
| return $( this ).width(); |
| } |
| |
| var topterms_holder_element = $( '.topterms-holder', data_element ); |
| var histogram_holder_element = $( '.histogram-holder', data_element ); |
| |
| if( !field_data.topTerms ) |
| { |
| 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] ) |
| { |
| if( topterms_frq_last ) |
| { |
| topterms_content += '</ul></li>' + "\n"; |
| } |
| |
| topterms_frq_last = topterms[i+1]; |
| topterms_content += '<li class="clearfix">' |
| + '<p><span>' + app.format_number( topterms_frq_last ) + '</span></p>' + "\n" |
| + '<ul>' + "\n"; |
| } |
| |
| var target = '#/' + current_core + '/query?q=' + field.esc() + ':' + encodeURIComponent( '"' + topterms[i] + '"' ); |
| topterms_content += '<li><a href="' + target + '">' + topterms[i].esc() + '</a></li>' + "\n"; |
| } |
| |
| topterms_content += '</li>'; |
| |
| topterms_count = topterms_count / 2; |
| |
| $( 'input', trigger_element ) |
| .val( topterms_count ); |
| |
| topterms_table_element |
| .html( topterms_content ); |
| |
| var max_width = 10 + Math.max.apply( Math, $( 'p', topterms_table_element ).map( get_width ).get() ); |
| additional_styles.push |
| ( |
| topterms_table_element.selector + ' p { width: ' + max_width + 'px !important; }' + "\n" + |
| topterms_table_element.selector + ' ul { margin-left: ' + ( max_width + 5 ) + 'px !important; }' |
| ); |
| |
| topterms_count_element |
| .val( topterms_count ); |
| |
| $( 'p.head .max', topterms_holder_element ) |
| .html( field_data.distinct ); |
| |
| $( 'p.head #query_link', topterms_holder_element ) |
| .attr( 'href', '#/' + current_core + '/query?q=' + field.esc() + ':[* TO *]' ); |
| |
| $( 'ul li:even', topterms_table_element ) |
| .addClass( 'odd' ); |
| } |
| |
| if( !field_data.histogram ) |
| { |
| histogram_holder_element |
| .hide(); |
| } |
| else |
| { |
| histogram_holder_element |
| .show(); |
| |
| var histogram_values = luke_array_to_hash( field_data.histogram ); |
| var histogram_entries = []; |
| |
| var histogram_max = null; |
| for( var key in histogram_values ) |
| { |
| histogram_max = Math.max( histogram_max, histogram_values[key] ); |
| } |
| |
| for( var key in histogram_values ) |
| { |
| histogram_entries.push |
| ( |
| '<li>' + "\n" + |
| ' <dl class="clearfix" style="width: ' + ( ( histogram_values[key] / histogram_max ) * 100 ) + '%;">' + "\n" + |
| ' <dt><span>' + app.format_number( key ) + '</span></dt>' + "\n" + |
| ' <dd><span>' + app.format_number( histogram_values[key] ) + '</span></dd>' + "\n" + |
| ' </dl>' + "\n" + |
| '</li>' |
| ); |
| } |
| |
| $( 'ul', histogram_holder_element ) |
| .html( histogram_entries.join( "\n" ) ); |
| |
| $( 'ul li:even', histogram_holder_element ) |
| .addClass( 'odd' ); |
| |
| var max_width = 10 + Math.max.apply( Math, $( 'dt', histogram_holder_element ).map( get_width ).get() ); |
| additional_styles.push |
| ( |
| histogram_holder_element.selector + ' ul { margin-left: ' + max_width + 'px !important; }' + "\n" + |
| histogram_holder_element.selector + ' li dt { left: ' + ( max_width * -1 ) + 'px !important; width: ' + max_width + 'px !important; }' |
| ); |
| } |
| |
| if( additional_styles ) |
| { |
| terminfo_element |
| .prepend( '<style type="text/css">' + additional_styles.join( "\n" ) + '</style>' ); |
| } |
| }, |
| error : function( xhr, text_status, error_thrown) |
| { |
| terminfo_element |
| .addClass( 'disabled' ); |
| }, |
| complete : function( xhr, text_status ) |
| { |
| $( 'span', trigger_element ) |
| .removeClass( 'loader' ); |
| } |
| } |
| ); |
| } |
| |
| sammy.bind |
| ( |
| 'schema_browser_navi', |
| function( event, params ) |
| { |
| var related_navigation_element = $( '#related dl#f-df-t', params.schema_browser_element ); |
| var related_navigation_meta = $( '#related dl.ukf-dsf', params.schema_browser_element ); |
| var related_select_element = $( '#related select', params.schema_browser_element ) |
| var type = 'index'; |
| |
| var sammy_basepath = app.core_menu.find( '.active a' ).attr( 'href' ); |
| |
| if( !related_navigation_meta.hasClass( 'done' ) ) |
| { |
| if( app.schema_browser_data.unique_key_field ) |
| { |
| $( '.unique-key-field', related_navigation_meta ) |
| .show() |
| .after |
| ( |
| '<dd class="unique-key-field"><a href="' + sammy_basepath + '?field=' + |
| app.schema_browser_data.unique_key_field + '">' + |
| app.schema_browser_data.unique_key_field + '</a></dd>' |
| ); |
| } |
| |
| if( app.schema_browser_data.default_search_field ) |
| { |
| $( '.default-search-field', related_navigation_meta ) |
| .show() |
| .after |
| ( |
| '<dd class="default-search-field"><a href="' + sammy_basepath + '?field=' + |
| app.schema_browser_data.default_search_field + '">' + |
| app.schema_browser_data.default_search_field + '</a></dd>' |
| ); |
| } |
| |
| related_navigation_meta |
| .addClass( 'done' ); |
| } |
| |
| if( params.route_params ) |
| { |
| var type = params.route_params.type; |
| var value = params.route_params.value; |
| |
| var navigation_data = { |
| 'fields' : [], |
| 'copyfield_source' : [], |
| 'copyfield_dest' : [], |
| 'dynamic_fields' : [], |
| 'types' : [] |
| } |
| |
| $( 'option[value="' + params.route_params.path.esc() + '"]', related_select_element ) |
| .attr( 'selected', 'selected' ); |
| |
| related_select_element |
| .trigger( 'liszt:updated' ); |
| |
| if( 'field' === type ) |
| { |
| navigation_data.fields.push( value ); |
| |
| if( app.schema_browser_data.relations.f_t[value] ) |
| { |
| navigation_data.types.push( app.schema_browser_data.relations.f_t[value] ); |
| } |
| |
| if( app.schema_browser_data.relations.f_df[value] ) |
| { |
| navigation_data.dynamic_fields.push( app.schema_browser_data.relations.f_df[value] ); |
| } |
| |
| if( app.schema_browser_data.fields[value].copySources && 0 !== app.schema_browser_data.fields[value].copySources.length ) |
| { |
| navigation_data.copyfield_source = app.schema_browser_data.fields[value].copySources; |
| } |
| |
| if( app.schema_browser_data.fields[value].copyDests && 0 !== app.schema_browser_data.fields[value].copyDests.length ) |
| { |
| navigation_data.copyfield_dest = app.schema_browser_data.fields[value].copyDests; |
| } |
| } |
| else if( 'dynamic-field' === type ) |
| { |
| navigation_data.dynamic_fields.push( value ); |
| navigation_data.types.push( app.schema_browser_data.relations.df_t[value] ); |
| |
| if( app.schema_browser_data.relations.df_f[value] ) |
| { |
| navigation_data.fields = app.schema_browser_data.relations.df_f[value]; |
| } |
| } |
| else if( 'type' === type ) |
| { |
| navigation_data.types.push( value ); |
| |
| if( app.schema_browser_data.relations.t_f[value] ) |
| { |
| navigation_data.fields = app.schema_browser_data.relations.t_f[value]; |
| } |
| |
| if( app.schema_browser_data.relations.t_df[value] ) |
| { |
| navigation_data.dynamic_fields = app.schema_browser_data.relations.t_df[value]; |
| } |
| } |
| |
| var navigation_content = ''; |
| |
| if( 0 !== navigation_data.fields.length ) |
| { |
| navigation_data.fields.sort(); |
| navigation_content += '<dt class="field">Field</dt>' + "\n"; |
| for( var i in navigation_data.fields ) |
| { |
| var href = sammy_basepath + '?field=' + navigation_data.fields[i]; |
| navigation_content += '<dd class="field"><a href="' + href + '">' + navigation_data.fields[i] + '</a></dd>' + "\n"; |
| } |
| } |
| |
| if( 0 !== navigation_data.copyfield_source.length ) |
| { |
| navigation_data.copyfield_source.sort(); |
| navigation_content += '<dt class="copyfield">Copied from</dt>' + "\n"; |
| for( var i in navigation_data.copyfield_source ) |
| { |
| var href = sammy_basepath + '?field=' + navigation_data.copyfield_source[i]; |
| navigation_content += '<dd class="copyfield"><a href="' + href + '">' + navigation_data.copyfield_source[i] + '</a></dd>' + "\n"; |
| } |
| } |
| |
| if( 0 !== navigation_data.copyfield_dest.length ) |
| { |
| navigation_data.copyfield_dest.sort(); |
| navigation_content += '<dt class="copyfield">Copied to</dt>' + "\n"; |
| for( var i in navigation_data.copyfield_dest ) |
| { |
| var href = sammy_basepath + '?field=' + navigation_data.copyfield_dest[i]; |
| navigation_content += '<dd class="copyfield"><a href="' + href + '">' + navigation_data.copyfield_dest[i] + '</a></dd>' + "\n"; |
| } |
| } |
| |
| if( 0 !== navigation_data.dynamic_fields.length ) |
| { |
| navigation_data.dynamic_fields.sort(); |
| navigation_content += '<dt class="dynamic-field">Dynamic Field</dt>' + "\n"; |
| for( var i in navigation_data.dynamic_fields ) |
| { |
| var href = sammy_basepath + '?dynamic-field=' + navigation_data.dynamic_fields[i]; |
| navigation_content += '<dd class="dynamic-field"><a href="' + href + '">' + navigation_data.dynamic_fields[i] + '</a></dd>' + "\n"; |
| } |
| } |
| |
| if( 0 !== navigation_data.types.length ) |
| { |
| navigation_data.types.sort(); |
| navigation_content += '<dt class="type">Type</dt>' + "\n"; |
| for( var i in navigation_data.types ) |
| { |
| var href = sammy_basepath + '?type=' + navigation_data.types[i]; |
| navigation_content += '<dd class="type"><a href="' + href + '">' + navigation_data.types[i] + '</a></dd>' + "\n"; |
| } |
| } |
| |
| related_navigation_element |
| .show() |
| .attr( 'class', type ) |
| .html( navigation_content ); |
| } |
| else |
| { |
| related_navigation_element |
| .hide(); |
| |
| $( 'option:selected', related_select_element ) |
| .removeAttr( 'selected' ); |
| } |
| |
| if( 'field' === type && value === app.schema_browser_data.unique_key_field ) |
| { |
| $( '.unique-key-field', related_navigation_meta ) |
| .addClass( 'active' ); |
| } |
| else |
| { |
| $( '.unique-key-field', related_navigation_meta ) |
| .removeClass( 'active' ); |
| } |
| |
| if( 'field' === type && value === app.schema_browser_data.default_search_field ) |
| { |
| $( '.default-search-field', related_navigation_meta ) |
| .addClass( 'active' ); |
| } |
| else |
| { |
| $( '.default-search-field', related_navigation_meta ) |
| .removeClass( 'active' ); |
| } |
| |
| if( params.callback ) |
| { |
| params.callback( app.schema_browser_data, $( '#data', params.schema_browser_element ) ); |
| } |
| } |
| ); |
| |
| sammy.bind |
| ( |
| 'schema_browser_load', |
| function( event, params ) |
| { |
| var core_basepath = params.active_core.attr( 'data-basepath' ); |
| var content_element = $( '#content' ); |
| |
| if( app.schema_browser_data ) |
| { |
| params.schema_browser_element = $( '#schema-browser', content_element ); |
| |
| sammy.trigger |
| ( |
| 'schema_browser_navi', |
| params |
| ); |
| } |
| else |
| { |
| content_element |
| .html( '<div id="schema-browser"><div class="loader">Loading ...</div></div>' ); |
| |
| $.ajax |
| ( |
| { |
| url : core_basepath + '/admin/luke?numTerms=0&wt=json', |
| dataType : 'json', |
| beforeSend : function( xhr, settings ) |
| { |
| }, |
| success : function( response, text_status, xhr ) |
| { |
| app.schema_browser_data = { |
| default_search_field : null, |
| unique_key_field : null, |
| key : {}, |
| fields : {}, |
| dynamic_fields : {}, |
| types : {}, |
| relations : { |
| f_df : {}, |
| f_t : {}, |
| df_f : {}, |
| df_t : {}, |
| t_f : {}, |
| t_df : {} |
| } |
| }; |
| |
| app.schema_browser_data.fields = response.fields; |
| app.schema_browser_data.key = response.info.key; |
| |
| $.ajax |
| ( |
| { |
| url : core_basepath + '/admin/luke?show=schema&wt=json', |
| dataType : 'json', |
| beforeSend : function( xhr, settings ) |
| { |
| }, |
| success : function( response, text_status, xhr ) |
| { |
| app.schema_browser_data.default_search_field = response.schema.defaultSearchField; |
| app.schema_browser_data.unique_key_field = response.schema.uniqueKeyField; |
| |
| app.schema_browser_data.dynamic_fields = response.schema.dynamicFields; |
| app.schema_browser_data.types = response.schema.types; |
| |
| 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 ) |
| { |
| var copy_dests = app.schema_browser_data.fields[field].copyDests; |
| for( var i in copy_dests ) |
| { |
| var copy_dest = copy_dests[i]; |
| if( !app.schema_browser_data.fields[copy_dest] ) |
| { |
| app.schema_browser_data.fields[copy_dest] = { |
| partial : true, |
| copySources : [] |
| }; |
| } |
| |
| if( app.schema_browser_data.fields[copy_dest].partial ) |
| { |
| app.schema_browser_data.fields[copy_dest].copySources.push( field ); |
| } |
| } |
| |
| var copy_sources = app.schema_browser_data.fields[field].copySources; |
| for( var i in copy_sources ) |
| { |
| var copy_source = copy_sources[i]; |
| if( !app.schema_browser_data.fields[copy_source] ) |
| { |
| app.schema_browser_data.fields[copy_source] = { |
| partial : true, |
| copyDests : [] |
| }; |
| } |
| |
| if( app.schema_browser_data.fields[copy_source].partial ) |
| { |
| app.schema_browser_data.fields[copy_source].copyDests.push( field ); |
| } |
| } |
| |
| app.schema_browser_data.relations.f_t[field] = app.schema_browser_data.fields[field].type; |
| |
| if( !app.schema_browser_data.relations.t_f[app.schema_browser_data.fields[field].type] ) |
| { |
| app.schema_browser_data.relations.t_f[app.schema_browser_data.fields[field].type] = []; |
| } |
| app.schema_browser_data.relations.t_f[app.schema_browser_data.fields[field].type].push( field ); |
| |
| if( app.schema_browser_data.fields[field].dynamicBase ) |
| { |
| app.schema_browser_data.relations.f_df[field] = app.schema_browser_data.fields[field].dynamicBase; |
| |
| if( !app.schema_browser_data.relations.df_f[app.schema_browser_data.fields[field].dynamicBase] ) |
| { |
| app.schema_browser_data.relations.df_f[app.schema_browser_data.fields[field].dynamicBase] = []; |
| } |
| app.schema_browser_data.relations.df_f[app.schema_browser_data.fields[field].dynamicBase].push( field ); |
| } |
| } |
| |
| for( var dynamic_field in app.schema_browser_data.dynamic_fields ) |
| { |
| app.schema_browser_data.relations.df_t[dynamic_field] = app.schema_browser_data.dynamic_fields[dynamic_field].type; |
| |
| if( !app.schema_browser_data.relations.t_df[app.schema_browser_data.dynamic_fields[dynamic_field].type] ) |
| { |
| app.schema_browser_data.relations.t_df[app.schema_browser_data.dynamic_fields[dynamic_field].type] = []; |
| } |
| app.schema_browser_data.relations.t_df[app.schema_browser_data.dynamic_fields[dynamic_field].type].push( dynamic_field ); |
| } |
| |
| $.get |
| ( |
| 'tpl/schema-browser.html', |
| function( template ) |
| { |
| content_element |
| .html( template ); |
| |
| var schema_browser_element = $( '#schema-browser', content_element ); |
| var related_element = $( '#related', schema_browser_element ); |
| var related_select_element = $( 'select', related_element ); |
| var data_element = $( '#data', schema_browser_element ); |
| |
| var related_options = ''; |
| |
| var fields = []; |
| for( var field_name in app.schema_browser_data.fields ) |
| { |
| fields.push |
| ( |
| '<option value="?field=' + field_name.esc() + '">' + field_name.esc() + '</option>' |
| ); |
| } |
| if( 0 !== fields.length ) |
| { |
| fields.sort(); |
| related_options += '<optgroup label="Fields">' + "\n"; |
| related_options += fields.sort().join( "\n" ) + "\n"; |
| related_options += '</optgroup>' + "\n"; |
| } |
| |
| var dynamic_fields = []; |
| for( var type_name in app.schema_browser_data.dynamic_fields ) |
| { |
| dynamic_fields.push |
| ( |
| '<option value="?dynamic-field=' + type_name.esc() + '">' + type_name.esc() + '</option>' |
| ); |
| } |
| if( 0 !== dynamic_fields.length ) |
| { |
| dynamic_fields.sort(); |
| related_options += '<optgroup label="DynamicFields">' + "\n"; |
| related_options += dynamic_fields.sort().join( "\n" ) + "\n"; |
| related_options += '</optgroup>' + "\n"; |
| } |
| |
| var types = []; |
| for( var type_name in app.schema_browser_data.types ) |
| { |
| types.push |
| ( |
| '<option value="?type=' + type_name.esc() + '">' + type_name.esc() + '</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', app.core_menu.find( '.active a' ).attr( 'href' ) ) |
| .append( related_options ) |
| .chosen(); |
| |
| 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 |
| ( |
| new RegExp( app.core_regex_base + '\\/(schema-browser)$' ), |
| function( context ) |
| { |
| var core_basepath = this.active_core.attr( 'data-basepath' ); |
| current_core = context.params.splat[0]; |
| |
| var trigger_params = { |
| active_core : this.active_core |
| }; |
| |
| var path = context.path.split( '?' ); |
| if( path && path[1] ) |
| { |
| 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(); |
| |
| // -- head |
| |
| var head_element = $( '.head', data_element ); |
| if( is_f ) |
| { |
| $( '.type', head_element ).html( 'Field' ); |
| } |
| else if( is_df ) |
| { |
| $( '.type', head_element ).html( 'Dynamic Field' ); |
| } |
| else if( is_t ) |
| { |
| $( '.type', head_element ).html( 'Type' ); |
| } |
| $( '.name', head_element ).html( field.esc() ); |
| |
| |
| var partial_state = false; |
| if( is_f ) |
| { |
| partial_state = !!schema_browser_data.fields[field].partial; |
| } |
| |
| $( '.partial', data_element ) |
| .toggle( partial_state ); |
| |
| // -- docs |
| var docs_element = $( 'dt.docs', options_element ); |
| if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].docs ) |
| { |
| $( 'dd.docs', options_element ) |
| .remove(); |
| |
| var target = '#/' + current_core + '/query?q=' + field.esc() + ':[* TO *]'; |
| docs_element |
| .show() |
| .after( |
| '<dd class="docs">'+ |
| '<a href="'+target+'">' + schema_browser_data.fields[field].docs + '</a>' + |
| '</dd>' ); |
| } |
| else |
| { |
| $( '.docs', options_element ) |
| .hide(); |
| } |
| |
| // -- distinct |
| var distinct_element = $( 'dt.distinct', options_element ); |
| if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].distinct ) |
| { |
| $( 'dd.distinct', options_element ) |
| .remove(); |
| |
| distinct_element |
| .show() |
| .after( '<dd class="distinct">' + schema_browser_data.fields[field].distinct + '</dd>' ); |
| } |
| else |
| { |
| $( '.distinct', options_element ) |
| .hide(); |
| } |
| |
| // -- position-increment-gap |
| var pig_element = $( 'dt.position-increment-gap', options_element ); |
| if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].positionIncrementGap ) |
| { |
| $( 'dd.position-increment-gap', options_element ) |
| .remove(); |
| |
| pig_element |
| .show() |
| .after( '<dd class="position-increment-gap">' + schema_browser_data.fields[field].positionIncrementGap + '</dd>' ); |
| } |
| else |
| { |
| $( '.position-increment-gap', options_element ) |
| .hide(); |
| } |
| |
| var similarity_element = $( 'dt.similarity', options_element ); |
| if ( is_t && schema_browser_data.types[field] && schema_browser_data.types[field].similarity ) { |
| var similarity = schema_browser_data.types[field].similarity |
| if (similarity.details && similarity.className) { |
| $( 'dd.similarity', options_element ).remove(); |
| similarity_element |
| .show() |
| .after(['<dd class="similarity">', similarity.details.esc(), ' (', similarity.className.esc(), ') </dd>'].join("")); |
| } |
| } else { |
| $( '.similarity', options_element ).hide(); |
| } |
| |
| |
| // -- flags table |
| var flags_table = $( 'table.flags', data_element ); |
| |
| var flags_arr = []; |
| for( var key in schema_browser_data.key ) |
| { |
| flags_arr.push( '<th data-key="' + key + '">' + schema_browser_data.key[key] + '</th>' ); |
| } |
| |
| $( 'thead tr', flags_table ) |
| .append( flags_arr.join( "\n" ) ); |
| |
| |
| var flags_body = $( 'tbody', flags_table ); |
| flags_body.empty(); |
| |
| var generate_flags_row = function generate_flags_row( flags_str, title ) |
| { |
| var flags_arr = [ '<th>' + title.esc() + '</th>' ]; |
| |
| if( 0 === flags_str.indexOf( '(' ) ) |
| { |
| flags_arr.push( '<td colspan="2" class="text">' + flags_str + '</td>' ); |
| } |
| else |
| { |
| var i = 0; |
| for( var key in schema_browser_data.key ) |
| { |
| var flag_match = key === flags_str[i]; |
| |
| var flag_cell = '<td ' |
| + ' data-key="' + key + '"' |
| + ' class="' + ( flag_match ? 'check' : '' ) + '"' |
| + '>' |
| + ( flag_match ? '<span>√</span>' : ' ' ) |
| + '</td>'; |
| |
| flags_arr.push( flag_cell ); |
| i++; |
| } |
| } |
| |
| flags_body |
| .append( '<tr>' + flags_arr.join( "\n" ) + '</tr>' ); |
| }; |
| |
| var flags = null; |
| if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].flags ) |
| { |
| flags = schema_browser_data.fields[field].flags; |
| } |
| else if( is_df && schema_browser_data.dynamic_fields[field] && schema_browser_data.dynamic_fields[field].flags ) |
| { |
| flags = schema_browser_data.dynamic_fields[field].flags; |
| } |
| |
| if( flags ) |
| { |
| generate_flags_row( flags, 'Properties' ); |
| } |
| |
| if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].schema ) |
| { |
| generate_flags_row( schema_browser_data.fields[field].schema, 'Schema' ); |
| } |
| |
| if( is_f && schema_browser_data.fields[field] && schema_browser_data.fields[field].index ) |
| { |
| generate_flags_row( schema_browser_data.fields[field].index, 'Index' ); |
| } |
| |
| |
| if( 0 !== $( 'tr', flags_body ).size() ) |
| { |
| var col_count = 0; |
| for( var key in schema_browser_data.key ) |
| { |
| var cols = $( '[data-key="' + key + '"]', flags_table ); |
| |
| var col_used = 0 !== cols.filter( '.check' ).size(); |
| col_count += col_used; |
| |
| cols.toggle( col_used ); |
| } |
| |
| $( 'td[colspan]', flags_body ) |
| .attr( 'colspan', col_count ); |
| |
| flags_table.show(); |
| } |
| else |
| { |
| flags_table.hide(); |
| } |
| |
| var analyzer_element = $( '.analyzer', data_element ); |
| var analyzer_data = null; |
| |
| var analysis_link = false; |
| var analysis_link_elements = $( 'p a', analyzer_element ); |
| var analysis_target = '#/' + current_core + '/analysis?'; |
| |
| if( is_f ) |
| { |
| analyzer_data = schema_browser_data.types[schema_browser_data.relations.f_t[field]]; |
| |
| analysis_link = true; |
| analysis_target += 'analysis.fieldname=' + field; |
| } |
| else if( is_df ) |
| { |
| analyzer_data = schema_browser_data.types[schema_browser_data.relations.df_t[field]]; |
| } |
| else if( is_t ) |
| { |
| analyzer_data = schema_browser_data.types[field]; |
| |
| analysis_link = true; |
| analysis_target += 'analysis.fieldtype=' + field; |
| } |
| |
| if( analysis_link ) |
| { |
| analysis_link_elements |
| .addClass( 'analysis' ) |
| .attr( 'href', analysis_target ); |
| } |
| else |
| { |
| analysis_link_elements |
| .removeClass( 'analysis' ) |
| .removeAttr( 'href' ); |
| } |
| |
| |
| if( analyzer_data ) |
| { |
| var transform_analyzer_data_into_list = function( analyzer_data ) |
| { |
| var args = []; |
| for( var key in analyzer_data.args ) |
| { |
| var arg_class = ''; |
| var arg_content = ''; |
| |
| if( 'true' === analyzer_data.args[key] || '1' === analyzer_data.args[key] ) |
| { |
| arg_class = 'ico-1'; |
| arg_content = key; |
| } |
| else if( 'false' === analyzer_data.args[key] || '0' === analyzer_data.args[key] ) |
| { |
| arg_class = 'ico-0'; |
| arg_content = key; |
| } |
| else |
| { |
| arg_content = key + ': '; |
| |
| if( 'synonyms' === key || 'words' === key ) |
| { |
| // @TODO: set link target for file |
| arg_content += '<a>' + analyzer_data.args[key] + '</a>'; |
| } |
| else |
| { |
| arg_content += analyzer_data.args[key]; |
| } |
| } |
| |
| args.push( '<dd class="' + arg_class + '">' + arg_content + '</dd>' ); |
| } |
| |
| var list_content = '<dt>' + analyzer_data.className + '</dt>'; |
| if( 0 !== args.length ) |
| { |
| args.sort(); |
| list_content += args.join( "\n" ); |
| } |
| |
| return list_content; |
| } |
| |
| // -- field-type |
| var field_type_element = $( 'dt.field-type', options_element ); |
| |
| $( 'dd.field-type', options_element ) |
| .remove(); |
| |
| field_type_element |
| .show() |
| .after( '<dd class="field-type">' + analyzer_data.className + '</dd>' ); |
| |
| $( '.toggle', analyzer_element ) |
| .die( 'click' ) |
| .live |
| ( |
| 'click', |
| function( event ) |
| { |
| $( this ).closest( 'li' ) |
| .toggleClass( 'open' ); |
| |
| return false; |
| } |
| ); |
| |
| for( var key in analyzer_data ) |
| { |
| var key_match = key.match( /^(.+)Analyzer$/ ); |
| if( !key_match ) |
| { |
| continue; |
| } |
| |
| var analyzer_key_element = $( '.' + key_match[1], analyzer_element ); |
| var analyzer_key_data = analyzer_data[key]; |
| |
| analyzer_element.show(); |
| analyzer_key_element.show(); |
| |
| $( 'ul li', analyzer_key_element ) |
| .removeClass( 'data' ) |
| .hide(); |
| |
| for( var type in analyzer_key_data ) |
| { |
| if( 'object' !== typeof analyzer_key_data[type] ) |
| { |
| continue; |
| } |
| |
| var type_element = $( '.' + type, analyzer_key_element ); |
| var type_content = []; |
| |
| type_element |
| .addClass( 'data' ) |
| .show(); |
| |
| if( analyzer_key_data[type].className ) |
| { |
| type_content.push( transform_analyzer_data_into_list( analyzer_key_data[type] ) ); |
| } |
| else |
| { |
| for( var entry in analyzer_key_data[type] ) |
| { |
| type_content.push( transform_analyzer_data_into_list( analyzer_key_data[type][entry] ) ); |
| } |
| } |
| |
| $( 'dl', type_element ) |
| .empty() |
| .append( type_content.join( "\n" ) ); |
| } |
| |
| var name_element = $( 'dl:first dt a', analyzer_key_element ); |
| if( analyzer_key_data.className ) |
| { |
| name_element |
| .html( analyzer_key_data.className ); |
| } |
| |
| 0 === $( 'ul li.data', analyzer_key_element ).size() |
| ? name_element.removeClass( 'toggle' ) |
| : name_element.addClass( 'toggle' ); |
| } |
| } |
| |
| var terminfo_element = $( '.terminfo-holder', data_element ); |
| |
| terminfo_element |
| .removeClass( 'disabled' ) |
| .removeClass( 'loaded' ); |
| |
| var trigger_element = $( '.trigger button', terminfo_element ); |
| var form_element = $( 'form', terminfo_element ); |
| |
| trigger_element |
| .die( 'click' ) |
| .live |
| ( |
| 'click', |
| function( event ) |
| { |
| form_element |
| .trigger( 'submit' ); |
| |
| return false; |
| } |
| ); |
| |
| form_element |
| .clearForm() |
| .die( 'submit' ) |
| .live |
| ( |
| 'submit', |
| function( event ) |
| { |
| load_terminfo( trigger_element, core_basepath, field, data_element, terminfo_element ); |
| |
| terminfo_element |
| .addClass( 'loaded' ); |
| |
| return false; |
| } |
| ); |
| |
| $( '.max-holder', terminfo_element ) |
| .die( 'click' ) |
| .live |
| ( |
| 'click', |
| function( event ) |
| { |
| var element = $( this ); |
| |
| $( 'input', element.closest( 'form' ) ) |
| .val( $( '.max', element ).text() ); |
| |
| form_element |
| .trigger( 'submit' ); |
| |
| return false; |
| } |
| ); |
| |
| $( '.trigger .autoload', terminfo_element ) |
| .die( 'click' ) |
| .live |
| ( |
| 'click', |
| function( event ) |
| { |
| $.cookie( cookie_schema_browser_autoload, $.cookie( cookie_schema_browser_autoload ) ? null : true ); |
| $( this ).trigger( 'state' ); |
| |
| return false; |
| } |
| ) |
| .die( 'state' ) |
| .live |
| ( |
| 'state', |
| function( event ) |
| { |
| $.cookie( cookie_schema_browser_autoload ) |
| ? $( this ).addClass( 'on' ) |
| : $( this ).removeClass( 'on' ); |
| } |
| ) |
| .die( 'init' ) |
| .live |
| ( |
| 'init', |
| function( event ) |
| { |
| if( !$.cookie( cookie_schema_browser_autoload ) ) |
| { |
| return false; |
| } |
| |
| $( this ).trigger( 'state' ); |
| trigger_element.trigger( 'click' ); |
| } |
| ) |
| .trigger( 'init' ); |
| |
| $( 'div[class$="-holder"]', terminfo_element ) |
| .hide(); |
| |
| if( !is_f ) |
| { |
| terminfo_element |
| .hide(); |
| } |
| else |
| { |
| terminfo_element |
| .show(); |
| } |
| } |
| } |
| else |
| { |
| trigger_params.callback = function( schema_browser_data, data_element ) |
| { |
| data_element |
| .hide(); |
| }; |
| } |
| |
| delete app.schema_browser_data; |
| |
| sammy.trigger |
| ( |
| 'schema_browser_load', |
| trigger_params |
| ); |
| } |
| ); |