[ Index ]

PHP Cross Reference of MantisBT

title

Body

[close]

/javascript/ -> bugFilter.js (source)

   1  var begin_form = '';
   2  var form_fields = new Array();
   3  var serialized_form_fields = new Array();
   4  $(document).ready(function(){
   5      var i = 0;
   6      $('[name=filters_open]').find('input').each(function() {
   7          var formname = $(this).parent('form').attr('name');
   8          if( formname != 'list_queries_open' && formname != 'open_queries' && formname != 'save_query' ) {
   9              // serialize the field and add it to an array
  10  
  11              if( $.inArray($(this).attr('name'),form_fields) == -1 ) {
  12                  form_fields[i] = $(this).attr('name');
  13                  i++;
  14              }
  15          }
  16      });
  17      $.each( form_fields, function (index, value) {
  18          var escaped_field_name = value.replace(/\[\]/g, '\\[\\]');
  19          serialized_form_fields[value] = $('[name=filters_open]').find('[name=' + escaped_field_name + ']').serialize();
  20      });
  21  
  22      /* Set up events to modify the form css to show when a stored query has been modified */
  23      begin_form = $('[name=filters_open]').serialize();
  24  
  25      $('[:input').live("change", function() {
  26          filter_highlight_changes($(this));
  27      });
  28      $(':checkbox').live("click", function() {
  29          filter_highlight_changes($(this));
  30      });
  31  });
  32  
  33  function filter_toggle_field_changed(field) {
  34      var field_type = field.attr('type');
  35      var starting_value = serialized_form_fields[field.attr('name')];
  36      var current_value = field.serialize();
  37  
  38      // unchecked boxes start as undefined but if checked and then unchecked it
  39      // is no longer undefined so the comparison breaks.  Reset it to undefined.
  40      if( field_type=='checkbox' && current_value == '') {
  41          current_value = undefined;
  42      }
  43      if( current_value != starting_value ) {
  44          // field is changed
  45          filter_field_dirty(field);
  46      } else {
  47          // field is not changed
  48          filter_field_clean(field);
  49      }
  50  }
  51  
  52  function filter_highlight_changes(item) {
  53      filter_toggle_field_changed( item );
  54  
  55      /* Check if form is different that started with */
  56      var changed_form = $('[name=filters_open]').serialize();
  57      if( begin_form == changed_form ) {
  58          filter_clean_all();
  59      }
  60  }
  61  
  62  function filter_named_filter_clean() {
  63      /* be sure it's clean whether it's stored filter or not */
  64      var selected_text = $('[name=source_query_id] option:selected').html();
  65      if( selected_text.charAt(0) == '*' ) {
  66          $('[name=source_query_id]').removeClass('tainted');
  67          var reset_text = selected_text.substring(2,selected_text.length);
  68          $('[name=source_query_id] option:selected').html(reset_text);
  69      }
  70  }
  71  
  72  function filter_named_filter_dirty() {
  73      var stored_query_id = $('[name=source_query_id]').val();
  74      if( stored_query_id == -1 ) {
  75          /* Only make it dirty if it's a stored filter */
  76          return;
  77      }
  78      /* stored query in filter is tainted */
  79      var selected_text = $('[name=source_query_id] option:selected').html();
  80      if( selected_text.charAt(0) != '*' ) {
  81          $('[name=source_query_id] option:selected').prepend('* ');
  82          $('[name=source_query_id]').addClass('tainted');
  83      }
  84  }
  85  
  86  function filter_field_clean( item ) {
  87      item.parent().removeClass('tainted');
  88  }
  89  function filter_field_dirty( item ) {
  90      if( !item.parent().hasClass('tainted') ) {
  91          filter_named_filter_dirty();
  92          item.parent().addClass('tainted');
  93      }
  94  }
  95  
  96  function filter_clean_all() {
  97      filter_named_filter_clean();
  98      $('.tainted').each(function() {
  99          $(this).removeClass('tainted');
 100      });
 101  }


Generated: Thu Jul 28 15:48:31 2011 Cross-referenced by PHPXref 0.7