function flashCell(row, cell, flash_options) {
      flash_options = __extend({}, {
        speed: 100,
        times: 4,
        delay: false,
        cssClass: options.cellFlashingCssClass
      }, flash_options);
      var key = "flashing";
      var id, start_state;

      if (rowsCache[row]) {
        var node = getCellNode(row, cell);
        if (node) {
          var $cell = $(node);
          assert($cell);
          assert($cell.length);

          // and make sure intermediate .render() actions keep the "flashing" class intact too!
          id = columns[cell].id;
          start_state = !$cell.hasClass(flash_options.cssClass);

          if (flash_options.delay) {
            setTimeout(function h_flashcell_timer_f() {
              toggleCellClass(flash_options.times | 0);
            },
            flash_options.delay !== true ? flash_options.delay : flash_options.speed);
          } else {
            toggleCellClass(flash_options.times | 0);
          }
        }
      }

      function toggleCellClass(times) {
        var node = getCellNode(row, cell);
        if (node) {
          var $cell = $(node);
          assert($cell);
          assert($cell.length);
          $cell.queue(function h_flashcell_toggle_cell_class_f() {
            var hash = getCellCssStyles(key, { clone: true });
            var new_state = !$cell.hasClass(flash_options.cssClass);
            if (new_state) {
              // switch to ON
              if (!hash[row]) {
                hash[row] = {};
              }
              hash[row][id] = flash_options.cssClass;

              $cell.addClass(flash_options.cssClass);
            } else {
              // switch to OFF
              if (hash[row]) {
                delete hash[row][id];
              }

              $cell.removeClass(flash_options.cssClass);
            }
            setCellCssStyles(key, hash);
            execNextFlashPhase(times - 1);
            $cell.dequeue();
          });
        }
      }

      function execNextFlashPhase(times) {
        if (times <= 0) {
          return;
        }
        setTimeout(function h_flashcell_next_phase_f() {
          toggleCellClass(times);
        },
        flash_options.speed);
      }
    }
// - when count = 0 or ODD, then the `flash` class is SET [at the end of the flash period] but never reset!
when count = 0 or ODD, then the `flash` class is SET [at the end of the flash period] but never reset!
when count = 0 or ODD then the ` flash ` class is SET [ at the end of the flash period ] but never reset!
function flashCell(row, cell, flash_options) {
      flash_options = __extend({}, {
        speed: 100,
        times: 4,
        delay: false,
        cssClass: options.cellFlashingCssClass
      }, flash_options);
      var key = "flashing";
      var id, start_state;
      if (rowsCache[row]) {
        var node = getCellNode(row, cell);
        if (node) {
          var $cell = $(node);
          assert($cell);
          assert($cell.length);
          id = columns[cell].id;
          start_state = !$cell.hasClass(flash_options.cssClass);
          if (flash_options.delay) {
            setTimeout(function h_flashcell_timer_f() {
              toggleCellClass(flash_options.times | 0);
            },
            flash_options.delay !== true ? flash_options.delay : flash_options.speed);
          } else {
            toggleCellClass(flash_options.times | 0);
          }
        }
      }
      function toggleCellClass(times) {
        var node = getCellNode(row, cell);
        if (node) {
          var $cell = $(node);
          assert($cell);
          assert($cell.length);
          $cell.queue(function h_flashcell_toggle_cell_class_f() {
            var hash = getCellCssStyles(key, { clone: true });
            var new_state = !$cell.hasClass(flash_options.cssClass);
            if (new_state) {
              if (!hash[row]) {
                hash[row] = {};
              }
              hash[row][id] = flash_options.cssClass;
              $cell.addClass(flash_options.cssClass);
            } else {
              if (hash[row]) {
                delete hash[row][id];
              }
              $cell.removeClass(flash_options.cssClass);
            }
            setCellCssStyles(key, hash);
            execNextFlashPhase(times - 1);
            $cell.dequeue();
          });
        }
      }
      function execNextFlashPhase(times) {
        if (times <= 0) {
          return;
        }
        setTimeout(function h_flashcell_next_phase_f() {
          toggleCellClass(times);
        },
        flash_options.speed);
      }
    }
function flashCell ( row , cell , flash_options ) { flash_options = __extend ( { } , { speed : 100 , times : 4 , delay : false , cssClass : options . cellFlashingCssClass } , flash_options ) ; var key = "flashing" ; var id , start_state ; if ( rowsCache [ row ] ) { var node = getCellNode ( row , cell ) ; if ( node ) { var $cell = $ ( node ) ; assert ( $cell ) ; assert ( $cell . length ) ; id = columns [ cell ] . id ; start_state = ! $cell . hasClass ( flash_options . cssClass ) ; if ( flash_options . delay ) { setTimeout ( function h_flashcell_timer_f ( ) { toggleCellClass ( flash_options . times | 0 ) ; } , flash_options . delay !== true ? flash_options . delay : flash_options . speed ) ; } else { toggleCellClass ( flash_options . times | 0 ) ; } } } function toggleCellClass ( times ) { var node = getCellNode ( row , cell ) ; if ( node ) { var $cell = $ ( node ) ; assert ( $cell ) ; assert ( $cell . length ) ; $cell . queue ( function h_flashcell_toggle_cell_class_f ( ) { var hash = getCellCssStyles ( key , { clone : true } ) ; var new_state = ! $cell . hasClass ( flash_options . cssClass ) ; if ( new_state ) { if ( ! hash [ row ] ) { hash [ row ] = { } ; } hash [ row ] [ id ] = flash_options . cssClass ; $cell . addClass ( flash_options . cssClass ) ; } else { if ( hash [ row ] ) { delete hash [ row ] [ id ] ; } $cell . removeClass ( flash_options . cssClass ) ; } setCellCssStyles ( key , hash ) ; execNextFlashPhase ( times - 1 ) ; $cell . dequeue ( ) ; } ) ; } } function execNextFlashPhase ( times ) { if ( times <= 0 ) { return ; } setTimeout ( function h_flashcell_next_phase_f ( ) { toggleCellClass ( times ) ; } , flash_options . speed ) ; } }
when count = 0 or ODD, then the `flash` class is SET [at the end of the flash period] but never reset!
when count = 0 or ODD then the ` flash ` class is SET [ at the end of the flash period ] but never reset!
// and make sure intermediate .render() actions keep the "flashing" class intact too! // switch to ON // switch to OFF