Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #3868: hide-show.diff

File hide-show.diff, 4.0 kB (added by Tobie, 3 years ago)

js + tests

  • test/unit/dom.html

    old new  
    2929      left: 10px; 
    3030      top: 10px; 
    3131    } 
    32  
     32    #hidden-by-css { display: none; } 
    3333  /* ]]> */ 
    3434  </style> 
    3535</head> 
     
    6262  </table> 
    6363</div> 
    6464 
     65<div id="visible">visible</div> 
     66<div id="hidden" style="display:none;">hidden</div> 
     67<div id="hidden-by-css">hidden</div> 
     68 
     69<div id="toggle-visible">visible</div> 
     70<div id="toggle-hidden" style="display:none;">hidden</div> 
     71 
     72<div id="hide-visible">visible</div> 
     73<div id="hide-hidden" style="display:none;">hidden</div> 
     74<div id="visibility-inline" style="display:inline;">inline</div> 
     75 
     76<div id="show-visible">visible</div> 
     77<div id="show-hidden" style="display:none;">hidden</div> 
     78 
    6579<p class="test">Test paragraph outside of container</p> 
    6680 
    6781<div id="container"> 
     
    185199      assert($('second_row').childOf('table')); 
    186200    }}, 
    187201     
     202    testVisible: function() {with(this) { 
     203      assert($('visible').visible()); 
     204      assert(!$('hidden').visible()); 
     205      assert($('hidden-by-css').visible()); 
     206    }}, 
     207     
     208    testToggle: function() {with(this) { 
     209      $('toggle-visible').toggle(); 
     210      assert(!$('toggle-visible').visible()); 
     211      $('toggle-visible').toggle(); 
     212      assert($('toggle-visible').visible()); 
     213      $('toggle-hidden').toggle(); 
     214      assert($('toggle-hidden').visible()); 
     215      $('toggle-hidden').toggle(); 
     216      assert(!$('toggle-hidden').visible()); 
     217    }}, 
     218     
     219    testHide: function() {with(this) { 
     220      $('hide-visible').hide(); 
     221      assert(!$('hide-visible').visible()); 
     222      assertUndefined($('hide-visible')._originalDisplay); 
     223       
     224      $('hide-hidden').hide(); 
     225      assert(!$('hide-hidden').visible()); 
     226      assertUndefined($('hide-visible')._originalDisplay); 
     227    }}, 
     228     
     229    testShow: function() {with(this) {       
     230      $('show-hidden').show(); 
     231      assert($('show-hidden').visible());       
     232      assertEqual('', $('show-visible').style.display); 
     233 
     234      $('show-visible').show(); 
     235      assert($('show-visible').visible()); 
     236      assertEqual('', $('show-visible').style.display); 
     237    }}, 
     238     
     239    testHideAndShowWithOtherInlineDisplayValue: function() {with(this) { 
     240      $('visibility-inline').hide(); 
     241      assert(!$('visibility-inline').visible()); 
     242      assertEqual('inline', $('visibility-inline')._originalDisplay); 
     243      $('visibility-inline').show(); 
     244      assert($('visibility-inline').visible()); 
     245      assertEqual('inline', $('visibility-inline').style.display); 
     246      assertNull($('visibility-inline')._originalDisplay); 
     247       
     248      $('visibility-inline').setStyle({display: 'block'}); 
     249       
     250      $('visibility-inline').hide(); 
     251      assert(!$('visibility-inline').visible()); 
     252      assertEqual('block', $('visibility-inline')._originalDisplay); 
     253      $('visibility-inline').show(); 
     254      assert($('visibility-inline').visible()); 
     255      assertEqual('block', $('visibility-inline').style.display); 
     256      assertNull($('visibility-inline')._originalDisplay);       
     257    }}, 
     258     
    188259    testElementUpdate: function() {with(this) { 
    189260      $('testdiv').update('hello from div!'); 
    190261      assertEqual('hello from div!', $('testdiv').innerHTML); 
  • src/dom.js

    old new  
    8585  }, 
    8686 
    8787  hide: function(element) { 
    88     $(element).style.display = 'none'; 
     88    element = $(element); 
     89    var originalDisplay = element.style.display; 
     90    if(originalDisplay && originalDisplay != 'none') 
     91      element._originalDisplay = originalDisplay; 
     92    element.style.display = 'none'; 
    8993    return element; 
    9094  }, 
    91    
     95 
    9296  show: function(element) { 
    93     $(element).style.display = ''; 
     97    element = $(element); 
     98    if(element._originalDisplay) { 
     99      element.style.display = element._originalDisplay; 
     100      element._originalDisplay = null; 
     101    } else element.style.display = ''; 
    94102    return element; 
    95103  }, 
    96104