Changeset 1378

Show
Ignore:
Timestamp:
05/20/08 03:24:01 (4 months ago)
Author:
cederberg@gmail.com
Message:

Added MochiKit.Signal support for src.disconnect methods (see #253).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mochikit/trunk/MochiKit/Signal.js

    r1319 r1378  
    658658        } 
    659659        ident.connected = false; 
    660         // check isDOM 
    661         if (!ident.isDOM) { 
    662             return; 
    663         } 
    664660        var src = ident.source; 
    665661        var sig = ident.signal; 
    666662        var listener = ident.listener; 
    667  
     663        // check isDOM 
     664        if (!ident.isDOM) { 
     665            if (typeof(src.__disconnect__) == 'function') { 
     666                src.__disconnect__(ident, sig, ident.objOrFunc, ident.funcOrStr); 
     667            } 
     668            return; 
     669        } 
    668670        if (src.removeEventListener) { 
    669671            src.removeEventListener(sig.substr(2), listener, false); 
  • mochikit/trunk/doc/html/MochiKit/Signal.html

    r1276 r1378  
    55<head> 
    66<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    7 <meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" /> 
     7<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> 
    88<title>MochiKit.Signal - Simple universal event handling</title> 
    99 
     
    209209<p>In MochiKit 1.4+, if <tt class="docutils literal"><span class="pre">src</span></tt> is an object that has a <tt class="docutils literal"><span class="pre">__connect__</span></tt> 
    210210method, then <tt class="docutils literal"><span class="pre">src.__connect__(ident,</span> <span class="pre">signal,</span> <span class="pre">objOrFunc,</span> <span class="pre">funcOrStr)</span></tt> 
    211 will be called. This method may be used to disconnect the signal. 
    212 DOM objects can not implement this feature.</p> 
     211will be called. The <tt class="docutils literal"><span class="pre">__connect__</span></tt> method is allowed to disconnect 
     212the signal. DOM objects can not implement this feature.</p> 
    213213<dl class="docutils"> 
    214214<dt><em>Availability</em>:</dt> 
     
    223223<a class="mochiref reference" href="#fn-connect">connect()</a>.  This is similar to how the browser's 
    224224<tt class="docutils literal"><span class="pre">setTimeout</span></tt> and <tt class="docutils literal"><span class="pre">clearTimeout</span></tt> works.</p> 
     225<p>In MochiKit 1.4+, if the signal source is an object that has a 
     226<tt class="docutils literal"><span class="pre">__disconnect__</span></tt> method, then 
     227<tt class="docutils literal"><span class="pre">src.__disconnect__(ident,</span> <span class="pre">signal,</span> <span class="pre">objOrFunc,</span> <span class="pre">funcOrStr)</span></tt> 
     228will be called. DOM objects can not implement this feature.</p> 
    225229<dl class="docutils"> 
    226230<dt><em>Availability</em>:</dt> 
     
    232236<a class="mochidef reference" href="#fn-disconnectall">disconnectAll(src[, signal, ...])</a>:</p> 
    233237<blockquote> 
     238<p>Removes a set of signals from <tt class="docutils literal"><span class="pre">src</span></tt>, similar to calling 
     239<a class="mochiref reference" href="#fn-disconnect">disconnect(ident)</a> for each one.</p> 
    234240<p><tt class="docutils literal"><span class="pre">disconnectAll(src)</span></tt> removes all signals from src.</p> 
    235241<p><tt class="docutils literal"><span class="pre">disconnectAll(src,</span> <span class="pre">'onmousedown',</span> <span class="pre">'mySignal')</span></tt> will remove all 
     
    244250<a class="mochidef reference" href="#fn-disconnectallto">disconnectAllTo(dest[, func])</a>:</p> 
    245251<blockquote> 
     252<p>Removes a set of signals connected to <tt class="docutils literal"><span class="pre">dest</span></tt>, similar to calling 
     253<a class="mochiref reference" href="#fn-disconnect">disconnect(ident)</a> for each one.</p> 
    246254<p><tt class="docutils literal"><span class="pre">disconnectAllTo(dest)</span></tt> removes all signals connected to dest.</p> 
    247255<p><tt class="docutils literal"><span class="pre">disconnectAllTo(dest,</span> <span class="pre">func)</span></tt> will remove all 
  • mochikit/trunk/doc/rst/MochiKit/Signal.rst

    r1230 r1378  
    234234    In MochiKit 1.4+, if ``src`` is an object that has a ``__connect__`` 
    235235    method, then ``src.__connect__(ident, signal, objOrFunc, funcOrStr)`` 
    236     will be called. This method may be used to disconnect the signal. 
    237     DOM objects can not implement this feature. 
    238      
     236    will be called. The ``__connect__`` method is allowed to disconnect 
     237    the signal. DOM objects can not implement this feature. 
     238 
    239239    *Availability*: 
    240240        Available in MochiKit 1.3.1+ 
     
    247247    ``setTimeout`` and ``clearTimeout`` works. 
    248248 
     249    In MochiKit 1.4+, if the signal source is an object that has a 
     250    ``__disconnect__`` method, then 
     251    ``src.__disconnect__(ident, signal, objOrFunc, funcOrStr)`` 
     252    will be called. DOM objects can not implement this feature. 
     253 
    249254    *Availability*: 
    250255        Available in MochiKit 1.3.1+ 
     
    252257 
    253258:mochidef:`disconnectAll(src[, signal, ...])`: 
     259 
     260    Removes a set of signals from ``src``, similar to calling 
     261    :mochiref:`disconnect(ident)` for each one. 
    254262 
    255263    ``disconnectAll(src)`` removes all signals from src. 
     
    263271 
    264272:mochidef:`disconnectAllTo(dest[, func])`: 
     273 
     274    Removes a set of signals connected to ``dest``, similar to calling 
     275    :mochiref:`disconnect(ident)` for each one. 
    265276 
    266277    ``disconnectAllTo(dest)`` removes all signals connected to dest. 
  • mochikit/trunk/packed/MochiKit/MochiKit.js

    r1377 r1378  
    51965196} 
    51975197_564.connected=false; 
    5198 if(!_564.isDOM){ 
    5199 return; 
    5200 } 
    52015198var src=_564.source; 
    52025199var sig=_564.signal; 
    52035200var _567=_564.listener; 
     5201if(!_564.isDOM){ 
     5202if(typeof (src.__disconnect__)=="function"){ 
     5203src.__disconnect__(_564,sig,_564.objOrFunc,_564.funcOrStr); 
     5204} 
     5205return; 
     5206} 
    52045207if(src.removeEventListener){ 
    52055208src.removeEventListener(sig.substr(2),_567,false); 
  • mochikit/trunk/tests/test_Signal.js

    r1287 r1378  
    422422          } 
    423423    }; 
    424  
    425     connect(has__Connect, 'signalOne', aFunction); 
     424    connect(has__Connect, 'signalOne', function() { 
     425        t.fail("__connect__ should have disconnected signal"); 
     426    }); 
    426427    t.is(has__Connect.count, 3, '__connect__ is called when it exists'); 
    427428    signal(has__Connect, 'signalOne'); 
    428     t.is(has__Connect.count, 3, '__connect__ can disconnect the signal'); 
     429 
     430    has__Disconnect = { 
     431          count: 0, 
     432          __disconnect__: function (ident) { 
     433              this.count += arguments.length; 
     434          } 
     435    }; 
     436    connect(has__Disconnect, 'signalOne', aFunction); 
     437    connect(has__Disconnect, 'signalTwo', aFunction); 
     438    disconnectAll(has__Disconnect); 
     439    t.is(has__Disconnect.count, 8, '__disconnect__ is called when it exists'); 
    429440 
    430441    var events = {};