fitnesse_edit_utils

By darrinholst Last update Dec 31, 2008 — Installed 26 times. Daily Installs: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0

There are 1 previous version of this script.

// ==UserScript==
// @name           fitnesse_edit_utils
// @namespace      darrinholst.com
// @include        *?edit
// ==/UserScript==

(function() {
  var jQueryLoaded = (function() {
    var TEXTAREA = "textarea.pageContent";
    
    var set_columns_on = function(textarea) {
      var max_length = 100;
      
      $.each(textarea.attr('value').split("\n"), function() {
        if(this.length > max_length) {
          max_length = this.length;
        }
      });
      
      textarea.attr('cols', max_length);
    }
    
    var is_table_row = function(line) {
      return line.indexOf('|') == 0;
    }
    
    var split_row = function(line) {
      var parts = $.trim(line).split('|');
      parts = parts.slice(1, parts.length - 1);
      
      for(var i = 0, j = parts.length; i < j; i++) {
        parts[i] = $.trim(parts[i]);
      }

      return parts;
    }
    
    var right_pad = function(value, length) {
      var padded = value;
      
      for(var i = 0, j = length - value.length; i < j; i++) {
        padded += " ";
      }

      return padded;
    }
    
    var get_max_column_widths_of = function(table) {
      widths = [];
      
      $.each(table, function() {
        var parts = split_row(this);
        
        $.each(parts, function(index, value) {
          if(widths.length <= index) {
            widths.push(value.length)
          }
          else if(value.length > widths[index]) {
            widths[index] = value.length;
          }
        });
      });
      
      return widths;
    }
    
    var format_table = function(table) {
      var formatted = "";
      var widths = get_max_column_widths_of(table);

      $.each(table, function() {
        formatted += "| ";
        var parts = split_row(this);
        
        $.each(parts, function(index, value) {
          formatted += right_pad(value, widths[index]) + " | ";
        });
        
        formatted += "\n";
      });
      
      return formatted;
    }
    
    var format_content = function(content) {
      var formatted = "";
      var current_table = [];
      var current_number_of_columns = 0;
      var lines = content.split("\n");
      
      $.each(lines, function(){
        if(is_table_row(this)) {
          var number_of_columns = split_row(this).length
          
          if(current_table.length == 0 || current_number_of_columns == number_of_columns) {
            current_table.push(this);
            current_number_of_columns = number_of_columns;
            return true;
          }
        }
        
        formatted += format_table(current_table);
        current_table = [];
        
        if(is_table_row(this)) {
          current_table.push(this);
          current_number_of_columns = split_row(this).length;
        }
        else {
          formatted += this + "\n";
        }
      });
      
      formatted += format_table(current_table);
      return formatted.slice(0, formatted.length - 1);
    }
    
    var control_shift_F = function() {
      $(TEXTAREA).attr('value', format_content($(TEXTAREA).attr('value')));
      set_columns_on($(TEXTAREA));
    }
    
    var key_pressed = function(e) {
      if(e.ctrlKey) {
        if(e.which == 70) { // F
          control_shift_F();
        }
      }
    }
    
    return function() { 
      set_columns_on($(TEXTAREA));
      $(document).keypress(key_pressed);
	  }
  })();
    
  var waitForjQueryToBeLoaded = function() {  
    if(typeof unsafeWindow.jQuery == 'undefined') { 
      window.setTimeout(waitForjQueryToBeLoaded,100); 
    }  
    else { 
      $ = unsafeWindow.jQuery; 
      jQueryLoaded(); 
    }  
  } 
  
  var loadCss = function() {
    var css = document.createElement('style');
    css.type = 'text/css';
    css.innerHTML = 'textarea { width: inherit; } '
    document.getElementsByTagName('head')[0].appendChild(css);    
  }
  
  var loadjQuery = function() {
    var js = document.createElement('script');  
    js.type = 'text/javascript';  
    js.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js';  
    document.getElementsByTagName('head')[0].appendChild(js);
    waitForjQueryToBeLoaded();
  }
   
  loadCss();
  loadjQuery();
})();