You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by sh...@apache.org on 2015/08/30 15:27:14 UTC

svn commit: r1700119 [24/26] - in /ofbiz/trunk: ./ runtime/indexes/ specialpurpose/ specialpurpose/solr/ specialpurpose/solr/conf/ specialpurpose/solr/config/ specialpurpose/solr/entitydef/ specialpurpose/solr/lib/ specialpurpose/solr/lib/compile/ spec...

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/logging.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/logging.js?rev=1700119&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/logging.js (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/logging.js Sun Aug 30 13:27:07 2015
@@ -0,0 +1,576 @@
+/*
+ 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 loglevel_path = app.config.solr_path + '/admin/info/logging';
+var cookie_logging_timezone = 'logging_timezone';
+var frame_element = null;
+
+var logging_handler = function( response, text_status, xhr )
+{
+  var self = this;
+  var loggers = response.loggers;
+
+  var levels = '<div class="selector-holder"><div class="selector">' + "\n"
+             + '<a class="trigger"><span><em>null</em></span></a>' + "\n"
+             + '<ul>' + "\n";
+
+  for( var key in response.levels )
+  {
+    var level = response.levels[key].esc();
+    levels += '<li><a href="#" data-level="' + level + '">' + level + '</a></li>' + "\n";
+  }
+
+  levels += '<li class="unset"><a href="#" data-level="unset">UNSET</a></li>' + "\n"
+         + '</ul>' + "\n"
+         + '<a class="close"><span>[x]</span></a>' + "\n"
+         + '</div></div>';
+
+  var logger_tree = function( filter )
+  {
+    var logger_content = '';
+    var filter_regex = new RegExp( '^' + filter + '\\.\\w+$' );
+
+    for( var i in loggers )
+    {
+      var logger = loggers[i];
+      var continue_matcher = false;
+
+      if( !filter )
+      {
+        continue_matcher = logger.name.indexOf( '.' ) !== -1;
+      }
+      else
+      {
+        continue_matcher = !logger.name.match( filter_regex );
+      }
+
+      if( continue_matcher )
+      {
+        continue;
+      }
+
+      var logger_class = '';
+
+      if( logger.set )
+      {
+        logger_class = 'set';
+      }
+            
+      if( !logger.level )
+      {
+        logger_class = 'null';
+      }
+
+      var logger_name = logger.name.split( '.' );
+      var display_name = logger_name.pop();
+
+      var leaf_class = 'jstree-leaf';
+      if( logger.level )
+      {
+        leaf_class += ' level-' + logger.level.esc().toLowerCase();
+      }
+
+      logger_content += '<li class="' + leaf_class + '" data-logger="' + logger.name.esc() + '">';
+      logger_content += '<ins class="trigger jstree-icon">&nbsp;</ins>' + "\n";
+      logger_content += '<a href="#" class="trigger '+ logger_class + '"' ;
+
+      if( logger.level )
+      {
+        logger_content += 'rel="' + logger.level.esc() + '" ';
+      }
+            
+      logger_content += 'title="' + logger.name.esc() + '">' + "\n";
+
+      if( 0 !== logger_name.length )
+      {
+        logger_content += '<span class="ns">' + logger_name.join( '.' ).esc() + '.</span>';
+      }
+
+      logger_content += '<span class="name">' + ( display_name ? display_name.esc() : '<em>empty</em>' ) + '</span>' + "\n";
+      logger_content += '</a>';
+
+      logger_content += levels;
+
+      if( !!logger.name )
+      {
+        var child_logger_content = logger_tree( logger.name );
+        if( child_logger_content )
+        {
+          logger_content += '<ul>';
+          logger_content += child_logger_content;
+          logger_content += '</ul>';
+        }
+      }
+
+      logger_content += '</li>';
+    }
+
+    return logger_content;
+  };
+
+  var logger_content = '<div class="block">' + "\n"
+                     + '<h2><span>' + response.watcher.esc() + '</span></h2>' + "\n"
+                     + '<ul class="tree jstree">' + logger_tree( null ) + '</ul>' + "\n"
+                     + '</div>';
+
+  self
+    .html( logger_content );
+
+  self
+    .die( 'clear' )
+    .live
+    (
+      'clear',
+      function( event )
+      {
+        $( '.open', this )
+          .removeClass( 'open' );
+      }
+    );
+
+  $( 'li:last-child', this )
+    .addClass( 'jstree-last' );
+
+  $( 'li.jstree-leaf > a', this )
+    .each
+    (
+      function( index, element )
+      {
+        element = $( element );
+        var level = element.attr( 'rel' );
+
+        if( level )
+        {
+          var selector = $( '.selector-holder', element.closest( 'li' ) );
+
+          var trigger = $( 'a.trigger', selector );
+
+          trigger
+            .text( level.esc() );
+
+          if( element.hasClass( 'set' ) )
+          {
+            trigger.first()
+              .addClass( 'set' );
+          }
+
+          $( 'ul a[data-level="' + level + '"]', selector ).first()
+            .addClass( 'level' );
+        }
+      }
+    )
+
+  $( '.trigger', this )
+    .die( 'click' )
+    .live
+    (
+      'click',
+      function( event )
+      {
+        self.trigger( 'clear' );
+
+        $( '.selector-holder', $( this ).parents( 'li' ).first() ).first()
+          .trigger( 'toggle' );
+
+        return false;
+      }
+    );
+
+  $( '.selector .close', this )
+    .die( 'click' )
+    .live
+    (
+      'click',
+      function( event )
+      {
+        self.trigger( 'clear' );
+        return false;
+      }
+    );
+    
+  $( '.selector-holder', this )
+    .die( 'toggle')
+    .live
+    (
+      'toggle',
+      function( event )
+      {
+        var row = $( this ).closest( 'li' );
+
+        $( 'a:first', row )
+          .toggleClass( 'open' );
+
+        $( '.selector-holder:first', row )
+          .toggleClass( 'open' );
+      }
+    );
+
+  $( '.selector ul a', this )
+    .die( 'click' )
+    .live
+    (
+      'click',
+      function( event )
+      {
+        var element = $( this );
+
+        $.ajax
+        (
+          {
+            url : loglevel_path,
+            dataType : 'json',
+            data : {
+              'wt' : 'json',
+              'set' : $( this ).parents( 'li[data-logger]' ).data( 'logger' ) + ':' + element.data( 'level' )
+            },
+            type : 'POST',
+            context : self,
+            beforeSend : function( xhr, settings )
+            {
+              element
+                .addClass( 'loader' );
+            },
+            success : logging_handler
+          }
+        );
+
+        return false;
+      }
+    );
+
+};
+
+var format_time_options = {};
+
+var format_time = function( time )
+{
+  time = time ? new Date( time ) : new Date();
+  return '<time datetime="' + time.toISOString().esc() + '">' + format_time_content( time ) + '</abbr>';
+}
+
+var format_time_content = function( time )
+{
+  return time.toLocaleString( undefined, format_time_options ).esc();
+}
+
+var load_logging_viewer = function()
+{
+  var table = $( 'table', frame_element );
+  var state = $( '#state', frame_element );
+  var since = table.data( 'latest' ) || 0;
+  var sticky_mode = null;
+
+  $.ajax
+  (
+    {
+      url : loglevel_path + '?wt=json&since=' + since,
+      dataType : 'json',
+      beforeSend : function( xhr, settings )
+      {
+        // initial request
+        if( 0 === since )
+        {
+          sticky_mode = true;
+        }
+
+        // state element is in viewport
+        else if( state.position().top <= $( window ).scrollTop() + $( window ).height() - ( $( 'body' ).height() - state.position().top ) )
+        {
+          sticky_mode = true;
+        }
+
+        else
+        {
+          sticky_mode = false;
+        }
+      },
+      success : function( response, text_status, xhr )
+      {
+        var docs = response.history.docs;
+        var docs_count = docs.length;
+
+        var table = $( 'table', frame_element );
+
+        $( 'h2 span', frame_element )
+          .text( response.watcher.esc() );
+
+        state
+          .html( 'Last Check: ' + format_time() );
+
+        app.timeout = setTimeout
+        (
+          load_logging_viewer,
+          10000
+        );
+
+        if( 0 === docs_count )
+        {
+          table.trigger( 'update' );
+          return false;
+        }
+
+        var content = '<tbody>';
+
+        for( var i = 0; i < docs_count; i++ )
+        {
+          var doc = docs[i];
+
+          if( 1 === doc.time.length )
+          {
+            for( var key in doc )
+            {
+              doc[key] = doc[key][0];
+            }
+          }
+
+          if( !doc.trace )
+          {
+            var lines = doc.message.split( "\n" );
+            if( 1 < lines.length )
+            {
+              doc.trace = doc.message;
+              doc.message = lines[0];
+              delete lines;
+            }
+          }
+
+          var has_trace = 'undefined' !== typeof( doc.trace );
+
+          doc.logger = '<abbr title="' + doc.logger.esc() + '">' + doc.logger.split( '.' ).pop().esc() + '</abbr>';
+
+          var classes = [ 'level-' + doc.level.toLowerCase().esc() ];
+          if( has_trace )
+          {
+            classes.push( 'has-trace' );
+          }
+
+          content += '<tr class="' + classes.join( ' ' ) + '">' + "\n";
+            content += '<td class="span"><a><span>' + format_time( doc.time ) + '</span></a></td>' + "\n";
+            content += '<td class="level span"><a><span>' + doc.level.esc() + '</span></span></a></td>' + "\n";
+            content += '<td class="span"><a><span>' + doc.logger + '</span></a></td>' + "\n";
+            content += '<td class="message span"><a><span>' + doc.message.replace( /,/g, ',&#8203;' ).esc() + '</span></a></td>' + "\n";
+          content += '</tr>' + "\n";
+
+          if( has_trace )
+          {
+            content += '<tr class="trace">' + "\n";
+              content += '<td colspan="4"><pre>' + doc.trace.esc() + '</pre></td>' + "\n";
+            content += '</tr>' + "\n";
+          }
+
+        }
+
+        content += '</tbody>';
+
+        $( 'table', frame_element )
+          .append( content );
+
+        table
+          .data( 'latest', response.info.last )
+          .removeClass( 'has-data' )
+          .trigger( 'update' );
+
+        if( sticky_mode )
+        {
+          $( 'body' )
+            .animate
+            (
+                { scrollTop: state.position().top },
+                1000
+            );
+        }
+      },
+      error : function( xhr, text_status, error_thrown)
+      {
+      },
+      complete : function( xhr, text_status )
+      {
+      }
+    }
+  );
+}
+
+// #/~logging
+sammy.get
+(
+  /^#\/(~logging)$/,
+  function( context )
+  {
+    var content_element = $( '#content' );
+
+    $.get
+    (
+      'tpl/logging.html',
+      function( template )
+      {
+        content_element
+          .html( template );
+
+        frame_element = $( '#frame', content_element );
+        frame_element
+          .html
+          (
+            '<div id="viewer">' + "\n" +
+              '<div class="block">' + "\n" +
+                '<h2><span>&nbsp;</span></h2>' + "\n" +
+              '</div>' + "\n" +
+              '<table border="0" cellpadding="0" cellspacing="0">' + "\n" +
+                '<thead>' + "\n" +
+                  '<tr>' + "\n" +
+                    '<th class="time">Time (<span>Local</span>)</th>' + "\n" +
+                    '<th class="level">Level</th>' + "\n" +
+                    '<th class="logger">Logger</th>' + "\n" +
+                    '<th class="message">Message</th>' + "\n" +
+                  '</tr>' + "\n" +
+                '</thead>' + "\n" +
+                '<tfoot>' + "\n" +
+                  '<tr>' + "\n" +
+                    '<td colspan="4">No Events available</td>' + "\n" +
+                  '</tr>' + "\n" +
+                '</thead>' + "\n" +
+              '</table>' + "\n" +
+              '<div id="footer" class="clearfix">' + "\n" +
+                '<div id="state" class="loader">&nbsp;</div>' + "\n" +
+                '<div id="date-format"><a>Show dates in UTC</a></div>' + "\n" +
+              '</div>' + "\n" +
+            '</div>'
+          );
+
+        var table = $( 'table', frame_element );
+
+        table
+          .die( 'update' )
+          .live
+          (
+            'update',
+            function( event )
+            {
+              var table = $( this );
+              var tbody = $( 'tbody', table );
+
+              0 !== tbody.size()
+                ? table.addClass( 'has-data' )
+                : table.removeClass( 'has-data' );
+
+              return false;
+            }
+          );
+
+        load_logging_viewer();
+
+        $( '.has-trace a', table )
+          .die( 'click' )
+          .live
+          (
+            'click',
+            function( event )
+            {
+              $( this ).closest( 'tr' )
+                .toggleClass( 'open' )
+                .next().toggle();
+
+              return false;
+            }
+          );
+
+        var date_format = $( '#date-format a', frame_element );
+
+        date_format
+          .off( 'click' )
+          .on
+          (
+            'click',
+            function( event )
+            {
+              var self = $( this );
+
+              if( !self.hasClass( 'on' ) )
+              {
+                self.addClass( 'on' );
+                $( 'table th.time span', frame_element ).text( 'UTC' );
+                format_time_options.timeZone = 'UTC';
+                $.cookie( cookie_logging_timezone, 'UTC' );
+              }
+              else
+              {
+                self.removeClass( 'on' );
+                $( 'table th.time span', frame_element ).text( 'Local' );
+                delete format_time_options.timeZone;
+                $.cookie( cookie_logging_timezone, null );
+              }
+
+              $( 'time', frame_element )
+                .each
+                (
+                  function( index, element )
+                  {
+                    var self = $( element );
+                    self.text( format_time_content( new Date( self.attr( 'datetime' ) ) ) );
+                  }
+                )
+
+              return false;
+            }
+          );
+
+        if( 'UTC' === $.cookie( cookie_logging_timezone ) )
+        {
+          date_format
+            .trigger( 'click' );
+        }
+      }
+    );
+  }
+);
+
+// #/~logging/level
+sammy.get
+(
+  /^#\/(~logging)\/level$/,
+  function( context )
+  {
+    var content_element = $( '#content' );
+
+    $.get
+    (
+      'tpl/logging.html',
+      function( template )
+      {
+        content_element
+          .html( template );
+
+        $( '#menu a[href="' + context.path + '"]' )
+          .parent().addClass( 'active' );
+                      
+        $.ajax
+        (
+          {
+            url : loglevel_path + '?wt=json',
+            dataType : 'json',
+            context : $( '#frame', content_element ),
+            beforeSend : function( xhr, settings )
+            {
+              this
+                .html( '<div class="loader">Loading ...</div>' );
+            },
+            success : logging_handler
+          }
+        );
+      }
+    );
+  }
+);
\ No newline at end of file

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/logging.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/logging.js
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/logging.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/ping.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/ping.js?rev=1700119&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/ping.js (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/ping.js Sun Aug 30 13:27:07 2015
@@ -0,0 +1,72 @@
+/*
+ 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.
+*/
+
+$( '.ping a', app.core_menu )
+  .live
+  (
+    'click',
+    function( event )
+    {
+      $.ajax
+      (
+        {
+          url : $( this ).attr( 'rel' ) + '?wt=json&ts=' + (new Date).getTime(),
+          dataType : 'json',
+          context: this,
+          beforeSend : function( arr, form, options )
+          {
+            loader.show( this );
+          },
+          success : function( response, text_status, xhr )
+          {
+            $( this )
+              .removeAttr( 'title' );
+                        
+            $( this ).parents( 'li' )
+              .removeClass( 'error' );
+                            
+            var qtime_element = $( '.qtime', this );
+                        
+            if( 0 === qtime_element.size() )
+            {
+              qtime_element = $( '<small class="qtime"> (<span></span>)</small>' );
+                            
+              $( this )
+                .append( qtime_element );
+            }
+                        
+            $( 'span', qtime_element )
+              .html( response.responseHeader.QTime + 'ms' );
+          },
+          error : function( xhr, text_status, error_thrown )
+          {
+            $( this )
+              .attr( 'title', '/admin/ping is not configured (' + xhr.status + ': ' + error_thrown + ')' );
+                        
+            $( this ).parents( 'li' )
+              .addClass( 'error' );
+          },
+          complete : function( xhr, text_status )
+          {
+            loader.hide( this );
+          }
+        }
+      );
+            
+      return false;
+    }
+  );
\ No newline at end of file

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/ping.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/ping.js
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/ping.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/plugins.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/plugins.js?rev=1700119&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/plugins.js (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/plugins.js Sun Aug 30 13:27:07 2015
@@ -0,0 +1,462 @@
+/*
+ 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 core_basepath = null;
+var content_element = null;
+var selected_type = null;
+var context_path = null;
+var active_context = null;
+var changes = null;
+var reference_xml = null;
+
+var compute_plugin_data = function( response, changeset )
+{
+  var types = [];
+  var sort_table = {};
+  var plugin_data = {};
+
+  var types_obj = {};
+  var plugin_key = null;
+
+  changes = { count : {}, list : {} }
+
+  for( var i = 0; i < response['solr-mbeans'].length; i++ )
+  {
+    if( !( i % 2 ) )
+    {
+      plugin_key = response['solr-mbeans'][i];
+    }
+    else
+    {
+      plugin_data[plugin_key] = response['solr-mbeans'][i];
+    }
+  }
+
+  for( var key in plugin_data )
+  {
+    sort_table[key] = {
+      url : [],
+      component : [],
+      handler : []
+    };
+    for( var part_key in plugin_data[key] )
+    {
+      if( plugin_data[key][part_key]['_changed_'] )
+      {
+        delete plugin_data[key][part_key]['_changed_'];
+
+        changes.count[key] = changes.count[key] || 0;
+        changes.count[key]++;
+
+        changes.list[key] = changes.list[key] || {};
+        changes.list[key][part_key] = true;
+      }
+
+      if( 0 < part_key.indexOf( '.' ) )
+      {
+        types_obj[key] = true;
+        sort_table[key]['handler'].push( part_key );
+      }
+      else if( 0 === part_key.indexOf( '/' ) )
+      {
+        types_obj[key] = true;
+        sort_table[key]['url'].push( part_key );
+      }
+      else
+      {
+        types_obj[key] = true;
+        sort_table[key]['component'].push( part_key );
+      }
+    }
+  }
+
+  for( var type in types_obj )
+  {
+    types.push( type );
+  }
+  types.sort();
+
+  return {
+    'plugin_data' : plugin_data,
+    'sort_table' : sort_table,
+    'types' : types
+  };
+};
+
+var render_plugin_data = function( plugin_data, plugin_sort, types )
+{
+  var frame_element = $( '#frame', content_element );
+  var navigation_element = $( '#navigation ul', content_element );
+
+  var navigation_content = [];
+  for( var i = 0; i < types.length; i++ )
+  {
+    var type_url = active_context.params.splat[0] + '/' + active_context.params.splat[1] + '/' + types[i].toLowerCase();
+
+    var navigation_markup = '<li class="' + types[i].toLowerCase().esc() + '">' +
+                            '<a href="#/' + type_url + '" rel="' + types[i].esc() + '">' + types[i].esc();
+
+    if( changes.count[types[i]] )
+    {
+      navigation_markup += ' <span>' + changes.count[types[i]].esc() + '</span>';
+    }
+
+    navigation_markup += '</a>' +
+                         '</li>';
+
+    navigation_content.push( navigation_markup );
+  }
+
+  navigation_content.push( '<li class="PLUGINCHANGES"><a href="#">Watch Changes</a></li>' );
+  navigation_content.push( '<li class="RELOAD"><a href="#" onClick="window.location.reload()">Refresh Values</a></li>' );
+
+  navigation_element
+    .html( navigation_content.join( "\n" ) );
+    
+  $( '.PLUGINCHANGES a', navigation_element )
+    .die( 'click' )
+    .live
+    (
+      'click',
+      function( event )
+      { 
+        load_reference_xml();
+        
+        changes = { count : {}, list : {} }
+        $( 'a > span', navigation_element ).remove();
+        $( '.entry.changed', frame_element ).removeClass( 'changed' );
+
+        $.blockUI
+        (
+          {
+            message: $('#recording'),
+            css: { width: '450px' }
+          }
+        );
+
+        return false;
+      }
+    ); 
+
+  $( '#recording button' )
+    .die( 'click' )
+    .live
+    (
+      'click',
+      function( event )
+      { 
+        $.ajax
+        (
+          {
+            type: 'POST',
+            url: core_basepath + '/admin/mbeans',
+            dataType : 'json',
+            data: { 
+              'stats': 'true',
+              'wt': 'json', 
+              'diff': 'true',
+              'all': 'true',
+              'stream.body': reference_xml 
+            },
+            success : function( response, text_status, xhr )
+            {
+              load_reference_xml();
+
+              app.plugin_data = compute_plugin_data( response );
+              render_plugin_data( app.plugin_data.plugin_data, app.plugin_data.sort_table, app.plugin_data.types );
+            }
+          }
+        );
+        $.unblockUI();
+        return false;
+      }
+    ); 
+              
+  $( 'a[href="' + context_path + '"]', navigation_element )
+    .parent().addClass( 'current' );
+            
+  var content = '<ul>';
+  for( var sort_key in plugin_sort[selected_type] )
+  {
+    plugin_sort[selected_type][sort_key].sort();
+    var plugin_type_length = plugin_sort[selected_type][sort_key].length;
+                
+    for( var i = 0; i < plugin_type_length; i++ )
+    {
+      var bean = plugin_sort[selected_type][sort_key][i];
+      var classes = [ 'entry' ];
+
+      if( changes.list[selected_type] && changes.list[selected_type][bean] )
+      {
+        classes.push( 'changed' );
+      }
+
+      content += '<li class="' + classes.join( ' ' ) + '">' + "\n";
+      content += '<a href="' + context_path + '?entry=' + bean.esc() + '" data-bean="' + bean.esc() + '">';
+      content += '<span>' + bean.esc() + '</span>';
+      content += '</a>' + "\n";
+      content += '<ul class="detail">' + "\n";
+                    
+      var details = plugin_data[selected_type][ plugin_sort[selected_type][sort_key][i] ];
+      for( var detail_key in details )
+      {
+        if( 'stats' !== detail_key )
+        {
+          var detail_value = details[detail_key];
+
+          if( 'description' === detail_key )
+          {
+            // Link component list to their MBeans page
+            if(detail_value.match(/^Search using components: /)) {
+              var idx = detail_value.indexOf(':');
+              var url = '#/'+active_context.params.splat[0]+'/plugins/other?entry=';
+              var tmp = 'Search using components:<ul>';
+              $.each(detail_value.substr(idx+1).split(","), function(index, value) { 
+                value = $.trim(value);
+                tmp += '<li><a href="'+url+value+'" class="linker">'+value+"</a></li>";
+              });
+              tmp += "</ul>";
+              detail_value = tmp;
+            }
+          }
+
+          content += '<li><dl class="clearfix">' + "\n";
+          content += '<dt>' + detail_key + ':</dt>' + "\n";
+          if($.isArray(detail_value)) {
+            $.each(detail_value, function(index, value) { 
+              content += '<dd>' + value + '</dd>' + "\n";
+            });
+          }
+          else {
+            content += '<dd>' + detail_value + '</dd>' + "\n";
+          }
+          content += '</dl></li>' + "\n";
+        }
+        else if( 'stats' === detail_key && details[detail_key] )
+        {
+          content += '<li class="stats clearfix">' + "\n";
+          content += '<span>' + detail_key + ':</span>' + "\n";
+          content += '<ul>' + "\n";
+
+          for( var stats_key in details[detail_key] )
+          {
+            var stats_value = new String( details[detail_key][stats_key] );
+            stats_value = stats_value.replace( /([\(@])/g, '$1&#8203;' );
+
+            content += '<li><dl class="clearfix">' + "\n";
+            content += '<dt>' + stats_key + ':</dt>' + "\n";
+            content += '<dd>' + stats_value + '</dd>' + "\n";
+            content += '</dl></li>' + "\n";
+          }
+
+          content += '</ul></li>' + "\n";
+        }
+      }
+                    
+      content += '</ul>' + "\n";
+    }
+  }
+  content += '</ul>' + "\n";
+
+  frame_element
+    .html( content );
+
+  
+  var path = active_context.path.split( '?entry=' );
+  var entries = ( path[1] || '' ).split( ',' );
+  
+  var entry_count = entries.length;
+  for( var i = 0; i < entry_count; i++ )
+  {
+    $( 'a[data-bean="' + entries[i] + '"]', frame_element )
+      .parent().addClass( 'expanded' );
+  }
+
+  $( 'a', frame_element )
+    .off( 'click' )
+    .on
+    (
+      'click',
+      function( event )
+      { 
+        var self = $( this );
+        var bean = self.data( 'bean' );
+
+        var split = '?entry=';
+        var path = active_context.path.split( split );
+        var entry = ( path[1] || '' );
+
+        var regex = new RegExp( bean.replace( /\//g, '\\/' ) + '(,|$)' );
+        var match = regex.test( entry );
+
+        var url = path[0] + split;
+
+        url += match
+             ? entry.replace( regex, '' )
+             : entry + ',' + bean;
+
+        url = url.replace( /=,/, '=' );
+        url = url.replace( /,$/, '' );
+        url = url.replace( /\?entry=$/, '' );
+
+        active_context.redirect( url );
+        return false;
+      }
+    );
+  
+  // Try to make links for anything with http (but leave the rest alone)
+  $( '.detail dd' ).each(function(index) {
+    var txt = $(this).html();
+    if(txt.indexOf("http") >= 0) {
+      $(this).linker({
+         className : 'linker'
+      });
+    }
+  });
+  
+  // Add invisible whitespace after each slash
+  $( '.detail a.linker' ).each(function(index) {
+    $(this).html( $(this).html().replace( /\//g, '/&#8203;' ) );
+  });
+  
+            
+  $( '.entry', frame_element )
+    .each
+    (
+      function( i, entry )
+      {
+        $( '.detail > li', entry ).not( '.stats' ).filter( ':even' )
+          .addClass( 'odd' );
+
+        $( '.stats li:odd', entry )
+          .addClass( 'odd' );
+      }
+    );
+};
+
+var load_reference_xml = function()
+{
+  $.ajax
+  (
+    {
+      type: 'GET',
+      url: core_basepath + '/admin/mbeans?stats=true&wt=xml',
+      dataType : 'text',
+      success: function( data )
+      {
+        reference_xml = data;
+      }
+    }
+  );
+}
+
+sammy.bind
+(
+  'plugins_load',
+  function( event, params )
+  {
+    var callback = function()
+    {
+      params.callback( app.plugin_data.plugin_data, app.plugin_data.sort_table, app.plugin_data.types );
+    }
+        
+    if( app.plugin_data )
+    {
+      callback( app.plugin_data );
+      return true;
+    }
+
+    $.ajax
+    (
+      {
+        url : core_basepath + '/admin/mbeans?stats=true&wt=json',
+        dataType : 'json',
+        beforeSend : function( xhr, settings )
+        {
+        },
+        success : function( response, text_status, xhr )
+        {
+          app.plugin_data = compute_plugin_data( response );
+
+          $.get
+          (
+            'tpl/plugins.html',
+            function( template )
+            {
+              $( '#content' )
+                .html( template );
+                            
+              callback( app.plugin_data );
+            }
+          );
+        },
+        error : function( xhr, text_status, error_thrown)
+        {
+        },
+        complete : function( xhr, text_status )
+        {
+        }
+      }
+    );
+  }
+);
+
+// #/:core/plugins/$type
+sammy.get
+(
+  new RegExp( app.core_regex_base + '\\/(plugins)\\/(\\w+)$' ),
+  function( context )
+  {
+    core_basepath = this.active_core.attr( 'data-basepath' );
+    content_element = $( '#content' );
+    selected_type = context.params.splat[2].toUpperCase();
+    context_path = context.path.split( '?' ).shift();
+    active_context = context;
+    
+    sammy.trigger
+    (
+      'plugins_load',
+      {
+        active_core : this.active_core,
+        callback : render_plugin_data
+      }
+    );                
+  }
+);
+
+// #/:core/plugins
+sammy.get
+(
+  new RegExp( app.core_regex_base + '\\/(plugins)$' ),
+  function( context )
+  {
+    core_basepath = this.active_core.attr( 'data-basepath' );
+    delete app.plugin_data;
+
+    sammy.trigger
+    (
+      'plugins_load',
+      {
+        active_core : this.active_core,
+        callback :  function( plugin_data, plugin_sort, types )
+        {
+          context.redirect( context.path + '/' + types[0].toLowerCase() );
+        }
+      }
+    );
+  }
+);

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/plugins.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/plugins.js
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/plugins.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/query.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/query.js?rev=1700119&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/query.js (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/query.js Sun Aug 30 13:27:07 2015
@@ -0,0 +1,229 @@
+/*
+ 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.
+*/
+
+// #/:core/query
+sammy.get
+(
+  new RegExp( app.core_regex_base + '\\/(query)$' ),
+  function( context )
+  {
+    var core_basepath = this.active_core.attr( 'data-basepath' );
+    var content_element = $( '#content' );
+        
+    $.get
+    (
+      'tpl/query.html',
+      function( template )
+      {
+        content_element
+          .html( template );
+
+        var query_element = $( '#query', content_element );
+        var query_form = $( '#form form', query_element );
+        var url_element = $( '#url', query_element );
+        var result_element = $( '#result', query_element );
+        var response_element = $( '#response', result_element );
+
+        url_element
+          .die( 'change' )
+          .live
+          (
+            'change',
+            function( event )
+            {
+              var wt = $( '[name="wt"]', query_form ).val();
+
+              var content_generator = {
+
+                _default : function( xhr )
+                {
+                  return xhr.responseText.esc();
+                },
+
+                json : function( xhr )
+                {
+                  return app.format_json( xhr.responseText );
+                }
+
+              };
+
+              $.ajax
+              (
+                {
+                  url : this.href,
+                  dataType : wt,
+                  context : response_element,
+                  beforeSend : function( xhr, settings )
+                  {
+                    this
+                     .html( '<div class="loader">Loading ...</div>' );
+                  },
+                  complete : function( xhr, text_status )
+                  {
+                    var code = $(
+                      '<pre class="syntax language-' + wt + '"><code>' +
+                      ( content_generator[wt] || content_generator['_default'] )( xhr ) +
+                      '</code></pre>'
+                    );
+                    this.html( code );
+
+                    if( 'success' === text_status )
+                    {
+                      hljs.highlightBlock( code.get(0) );
+                    }
+                  }
+                }
+              );
+            }
+          )
+
+        $( '.optional legend input[type=checkbox]', query_form )
+          .die( 'change' )
+          .live
+          (
+            'change',
+            function( event )
+            {
+              var fieldset = $( this ).parents( 'fieldset' );
+
+              this.checked
+                ? fieldset.addClass( 'expanded' )
+                : fieldset.removeClass( 'expanded' );
+            }
+          );
+
+        $( '.multiple a', query_form )
+          .die( 'click' )
+          .live
+          (
+            'click',
+            function( event )
+            {
+              var self = $( this );
+              var row = self.closest( '.row' );
+              var container = self.closest( '.multiple' );
+              
+              var add = parseInt( self.data( 'action' ), 10 );
+              if( add )
+              {
+                var new_row = row.clone();
+                new_row.find( 'input' ).val( '' );
+                row.after( new_row );
+                row.next().find( 'input' ).focus();
+              }
+              else if( 1 === $( '.row', container ).size() )
+              {
+                row.find( 'input' ).val( '' ).focus();
+              }
+              else
+              {
+                row.remove();
+                container.find( 'input:last' ).focus();
+              }
+
+              return false;
+            }
+          )
+
+        query_form
+          .die( 'submit' )
+          .live
+          (
+            'submit',
+            function( event )
+            {
+              var form_values = [];
+ 
+              var add_to_form_values = function add_to_form_values( fields )
+              {
+                 for( var i in fields )
+                 {
+                  if( !fields[i].value || 0 === fields[i].value.length )
+                  {
+                    continue;
+                  }
+ 
+                  form_values.push( fields[i] );
+                 }
+              };
+ 
+              var fieldsets = $( '> fieldset', query_form );
+ 
+              var fields = fieldsets.first().formToArray( true );
+              add_to_form_values( fields );
+
+              fieldsets.not( '.common' )
+                .each
+                (
+                  function( i, set )
+                  {
+                    if( $( 'legend input', set ).is( ':checked' ) )
+                    {
+                      var fields = $( set ).formToArray( true );
+                      add_to_form_values( fields );
+                    }
+                  }
+                );
+
+              var handler_path = $( '#qt', query_form ).val();
+              if( '/' !== handler_path[0] )
+              {
+                form_values.push( { name : 'qt', value : handler_path.esc() } );
+                handler_path = '/select';
+              }
+
+              var query_url = window.location.protocol + '//' + window.location.host
+                            + core_basepath + handler_path + '?' + $.param( form_values );
+
+              var custom_parameters = $( '#custom_parameters', query_form ).val();
+              if( custom_parameters && 0 !== custom_parameters.length )
+              {
+                query_url += '&' + custom_parameters.replace( /^&/, '' ); 
+              }
+
+              url_element
+                .attr( 'href', query_url )
+                .text( query_url )
+                .trigger( 'change' );
+                            
+              result_element
+                .show();
+                            
+              return false;
+            }
+          );
+
+        var fields = 0;
+        for( var key in context.params )
+        {
+          if( 'string' === typeof context.params[key] )
+          {
+            fields++;
+            $( '[name="' + key + '"]', query_form )
+              .val( context.params[key] );
+          }
+        }
+
+        if( 0 !== fields )
+        {
+          query_form
+            .trigger( 'submit' );
+        }
+      }
+    );
+  }
+);
\ No newline at end of file

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/query.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/query.js
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/query.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/replication.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/replication.js?rev=1700119&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/replication.js (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/replication.js Sun Aug 30 13:27:07 2015
@@ -0,0 +1,527 @@
+/*
+ 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 timer_element = null;
+var timer_timeout = null;
+
+var core_basepath = null;
+var navigation_element = null;
+var replication_element = null;
+
+var init_timer = function( next_tick )
+{
+  if( timer_timeout )
+  {
+    window.clearTimeout( timer_timeout );
+  }
+  update_timer( next_tick );
+}
+
+var update_timer = function( next_tick )
+{
+  if( 0 === next_tick )
+  {
+    replication_fetch_status();
+    return false;
+  }
+
+  $( 'p .tick', timer_element )
+    .text( app.convert_seconds_to_readable_time( next_tick ) );
+
+  timer_timeout = window.setTimeout
+  (
+    'update_timer( ' + --next_tick + ' )',
+    1000
+  );
+}
+
+var clear_timer = function()
+{
+  if( timer_timeout )
+  {
+    window.clearTimeout( timer_timeout );
+    timer_element.hide();
+  }
+}
+
+var replication_fetch_status = function()
+{
+  $.ajax
+  (
+    {
+      url : core_basepath + '/replication?command=details&wt=json',
+      dataType : 'json',
+      beforeSend : function( xhr, settings )
+      {
+        $( '.refresh-status span', navigation_element )
+          .addClass( 'loader' );
+
+        clear_timer();
+      },
+      success : function( response, text_status, xhr )
+      {
+        $( '.refresh-status span', navigation_element )
+          .removeClass( 'loader' );
+                
+        var data = response.details;
+        var is_slave = 'true' === data.isSlave;
+
+        replication_element
+          .addClass( is_slave ? 'slave' : 'master' );
+
+        if( is_slave )
+        {
+          var error_element = $( '#error', replication_element );
+
+          if( data.slave.ERROR )
+          {
+            error_element
+              .html( data.slave.ERROR )
+              .show();
+          }
+          else
+          {
+            error_element
+              .hide()
+              .empty();
+          }
+
+          var progress_element = $( '#progress', replication_element );
+
+          var start_element = $( '#start', progress_element );
+          $( 'span', start_element )
+            .text( data.slave.replicationStartTime );
+
+          var eta_element = $( '#eta', progress_element );
+          $( 'span', eta_element )
+            .text( app.convert_seconds_to_readable_time( data.slave.timeRemaining ) );
+
+          var bar_element = $( '#bar', progress_element );
+          $( '.files span', bar_element )
+            .text( data.slave.numFilesToDownload );
+          $( '.size span', bar_element )
+            .text( data.slave.bytesToDownload );
+
+          var speed_element = $( '#speed', progress_element );
+          $( 'span', speed_element )
+            .text( data.slave.downloadSpeed );
+
+          var done_element = $( '#done', progress_element );
+          $( '.files span', done_element )
+            .text( data.slave.numFilesDownloaded );
+          $( '.size span', done_element )
+            .text( data.slave.bytesDownloaded );
+          $( '.percent span', done_element )
+            .text( parseInt(data.slave.totalPercent ) );
+
+          var percent = parseInt( data.slave.totalPercent );
+          if( 0 === percent )
+          {
+            done_element
+              .css( 'width', '1px' ); 
+          }
+          else
+          {
+            done_element
+              .css( 'width', percent + '%' );
+          }
+
+          var current_file_element = $( '#current-file', replication_element );
+          $( '.file', current_file_element )
+            .text( data.slave.currentFile );
+          $( '.done', current_file_element )
+            .text( data.slave.currentFileSizeDownloaded );
+          $( '.total', current_file_element )
+            .text( data.slave.currentFileSize );
+          $( '.percent', current_file_element )
+            .text( parseInt( data.slave.currentFileSizePercent ) );
+
+          if( !data.slave.indexReplicatedAtList )
+          {
+            data.slave.indexReplicatedAtList = [];
+          }
+
+          if( !data.slave.replicationFailedAtList )
+          {
+            data.slave.replicationFailedAtList = [];
+          }
+
+          var iterations_element = $( '#iterations', replication_element );
+          var iterations_list = $( '.iterations ul', iterations_element );
+
+          var iterations_data = [];
+          var iterations_obj = {};
+
+          for( var i in data.slave.indexReplicatedAtList )
+          {
+            var date = data.slave.indexReplicatedAtList[i];
+            if( !iterations_obj[date] )
+            {
+              iterations_obj[date] = true;
+              iterations_data.push( date );
+            }
+          }
+
+          for( var i in data.slave.replicationFailedAtList )
+          {
+            var date = data.slave.replicationFailedAtList[i];
+            if( !iterations_obj[date] )
+            {
+              iterations_obj[date] = true;
+              iterations_data.push( date );
+            }
+          }
+
+          iterations_data.sort().reverse();
+
+          if( 0 !== iterations_data.length )
+          {
+            var iterations = [];
+            for( var i = 0; i < iterations_data.length; i++ )
+            {
+              iterations.push( '<li data-date="' + iterations_data[i] + '">' + iterations_data[i] + '</li>' );
+            }
+                        
+            iterations_list
+              .html( iterations.join( "\n" ) )
+              .show();
+                        
+            $( data.slave.indexReplicatedAtList )
+              .each
+              (
+                function( key, value )
+                {
+                  $( 'li[data-date="' + value + '"]', iterations_list )
+                    .addClass( 'replicated' );
+                }
+              );
+                        
+            if( data.slave.indexReplicatedAt )
+            {
+              $( 'li[data-date="' + data.slave.indexReplicatedAt + '"]', iterations_list )
+                .addClass( 'latest' );
+            }
+                        
+            $( data.slave.replicationFailedAtList )
+              .each
+              (
+                function( key, value )
+                {
+                  $( 'li[data-date="' + value + '"]', iterations_list )
+                    .addClass( 'failed' );
+                }
+              );
+                        
+            if( data.slave.replicationFailedAt )
+            {
+              $( 'li[data-date="' + data.slave.replicationFailedAt + '"]', iterations_list )
+                .addClass( 'latest' );
+            }
+
+            if( 0 !== $( 'li:hidden', iterations_list ).size() )
+            {
+              $( 'a', iterations_element )
+                .show();
+            }
+            else
+            {
+              $( 'a', iterations_element )
+                .hide();
+            }
+          }
+        }
+
+        var details_element = $( '#details', replication_element );
+        var current_type_element = $( ( is_slave ? '.slave' : '.masterSearch' ), details_element );
+        var master_data = is_slave ? data.slave.masterDetails : data;
+
+        // the currently searchable commit regardless of type
+        $( '.version div', current_type_element )
+          .html( data.indexVersion );
+        $( '.generation div', current_type_element )
+          .html( data.generation );
+        $( '.size div', current_type_element )
+          .html( data.indexSize );
+
+        // what's replicable on the master
+        var master_element = $( '.master', details_element );
+        $( '.version div', master_element )
+          .html( master_data.master.replicableVersion || '-' );
+        $( '.generation div', master_element )
+          .html( master_data.master.replicableGeneration || '-' );
+        $( '.size div', master_element )
+          .html( "-" );
+                
+        if( is_slave )
+        {
+          // what's searchable on the master
+          var master_searchable = $( '.masterSearch', details_element );
+          $( '.version div', master_searchable )
+            .html( master_data.indexVersion );
+          $( '.generation div', master_searchable )
+            .html( master_data.generation );
+          $( '.size div', master_searchable )
+            .html( master_data.indexSize );
+ 
+          // warnings if slave version|gen doesn't match what's replicable
+          if( data.indexVersion !== master_data.master.replicableVersion )
+          {
+            $( '.version', details_element )
+              .addClass( 'diff' );
+          }
+          else
+          {
+            $( '.version', details_element )
+              .removeClass( 'diff' );
+          }
+                    
+          if( data.generation !== master_data.master.replicableGeneration )
+          {
+            $( '.generation', details_element )
+              .addClass( 'diff' );
+          }
+          else
+          {
+            $( '.generation', details_element )
+              .removeClass( 'diff' );
+          }
+        }
+
+        if( is_slave )
+        {
+          var settings_element = $( '#settings', replication_element );
+
+          if( data.slave.masterUrl )
+          {
+            $( '.masterUrl dd', settings_element )
+              .html( response.details.slave.masterUrl )
+              .parents( 'li' ).show();
+          }
+
+          var polling_content = '&nbsp;';
+          var polling_ico = 'ico-1';
+
+          if( 'true' === data.slave.isPollingDisabled )
+          {
+            polling_ico = 'ico-0';
+
+            $( '.disable-polling', navigation_element ).hide();
+            $( '.enable-polling', navigation_element ).show();
+          }
+          else
+          {
+            $( '.disable-polling', navigation_element ).show();
+            $( '.enable-polling', navigation_element ).hide();
+
+            if( data.slave.pollInterval )
+            {
+              polling_content = '(interval: ' + data.slave.pollInterval + ')';
+            }
+          }
+
+          $( '.isPollingDisabled dd', settings_element )
+            .removeClass( 'ico-0' )
+            .removeClass( 'ico-1' )
+            .addClass( polling_ico )
+            .html( polling_content )
+            .parents( 'li' ).show();
+                
+          if( 'true' === data.slave.isReplicating )
+          {
+            replication_element
+              .addClass( 'replicating' );
+                        
+            $( '.replicate-now', navigation_element ).hide();
+            $( '.abort-replication', navigation_element ).show();
+                        
+            window.setTimeout( replication_fetch_status, 1000 );
+          }
+          else
+          {
+            replication_element
+              .removeClass( 'replicating' );
+                        
+            $( '.replicate-now', navigation_element ).show();
+            $( '.abort-replication', navigation_element ).hide();
+
+
+            if( 'false' === data.slave.isPollingDisabled && data.slave.pollInterval )
+            {
+              timer_element = $( '.timer', navigation_element );
+              approx_element = $( '.approx', timer_element );
+
+              var next_tick = app.convert_duration_to_seconds( data.slave.pollInterval );
+              approx_element.show();
+
+              if( data.slave.nextExecutionAt )
+              {
+                var nextExecutionAt = new SolrDate( data.slave.nextExecutionAt );
+                var currentDate = new SolrDate( data.slave.currentDate );
+
+                if( nextExecutionAt.getTime() > currentDate.getTime() )
+                {
+                  next_tick = ( nextExecutionAt.getTime() - currentDate.getTime() ) / 1000;
+                  approx_element.hide();
+
+                  $( 'small', timer_element )
+                    .text( data.slave.nextExecutionAt )
+                    .show();
+                }
+              }
+
+              init_timer( next_tick );
+
+              timer_element
+                .show();
+            }
+          }
+        }
+
+        var master_settings_element = $( '#master-settings', replication_element );
+        var master_data = is_slave ? data.slave.masterDetails.master : data.master;
+
+        var replication_icon = 'ico-0';
+        if( 'true' === master_data.replicationEnabled )
+        {
+          replication_icon = 'ico-1';
+
+          $( '.disable-replication', navigation_element ).show();
+          $( '.enable-replication', navigation_element ).hide();
+        }
+        else
+        {
+          $( '.disable-replication', navigation_element ).hide();
+          $( '.enable-replication', navigation_element ).show();
+        }
+
+        $( '.replicationEnabled dd', master_settings_element )
+          .removeClass( 'ico-0' )
+          .removeClass( 'ico-1' )
+          .addClass( replication_icon )
+          .parents( 'li' ).show();
+
+        $( '.replicateAfter dd', master_settings_element )
+          .html( master_data.replicateAfter.join( ', ' ) )
+          .parents( 'li' ).show();
+
+        if( master_data.confFiles )
+        {
+          var conf_files = [];
+          var conf_data = master_data.confFiles.split( ',' );
+                    
+          for( var i = 0; i < conf_data.length; i++ )
+          {
+            var item = conf_data[i];
+
+            if( - 1 !== item.indexOf( ':' ) )
+            {
+              info = item.split( ':' );
+              item = '<abbr title="' + info[0] + ' » ' + info[1] + '">' + ( is_slave ? info[1] : info[0] ) + '</abbr>';
+            }
+
+            conf_files.push( item );
+          }
+
+          $( '.confFiles dd', master_settings_element )
+            .html( conf_files.join( ', ' ) )
+            .parents( 'li' ).show();
+        }
+
+
+        $( '.block', replication_element ).last()
+          .addClass( 'last' );
+      },
+      error : function( xhr, text_status, error_thrown )
+      {
+        $( '#content' )
+          .html( 'sorry, no replication-handler defined!' );
+      },
+      complete : function( xhr, text_status )
+      {
+      }
+    }
+  );
+}
+
+// #/:core/replication
+sammy.get
+(
+  new RegExp( app.core_regex_base + '\\/(replication)$' ),
+  function( context )
+  {
+    core_basepath = this.active_core.attr( 'data-basepath' );
+    var content_element = $( '#content' );
+        
+    $.get
+    (
+      'tpl/replication.html',
+      function( template )
+      {
+        content_element
+          .html( template );
+                
+        replication_element = $( '#replication', content_element );
+        navigation_element = $( '#navigation', replication_element );
+
+        replication_fetch_status();
+
+        $( '#iterations a', content_element )
+          .die( 'click' )
+          .live
+          (
+            'click',
+            function( event )
+            {
+              $( this ).parents( '.iterations' )
+                .toggleClass( 'expanded' );
+                            
+              return false;
+            }
+          );
+
+        $( 'button', navigation_element )
+          .die( 'click' )
+          .live
+          (
+            'click',
+            function( event )
+            {
+              var button = $( this );
+              var command = button.data( 'command' );
+
+              if( button.hasClass( 'refresh-status' ) && !button.hasClass( 'loader' ) )
+              {
+                replication_fetch_status();
+              }
+              else if( command )
+              {
+                $.get
+                (
+                  core_basepath + '/replication?command=' + command + '&wt=json',
+                  function()
+                  {
+                    replication_fetch_status();
+                  }
+                );
+              }
+              return false;
+            }
+          );
+      }
+    );
+  }
+);

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/replication.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/replication.js
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/replication.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain