Ticket #11: OperaContextMenu.patch

File OperaContextMenu.patch, 3.1 KB (added by Frederico Caldeira Knabben, 12 years ago)

Proposal patch, based on Joao's idea (from Opera)

  • _test/manual/fckcontextmenu/test1.htm

     
    152152                        </tr>
    153153                </table>
    154154        </div>
     155        <p>
     156                <input type="checkbox" onclick="oContextMenu.CtrlDisable = this.checked" /> [CTRL] + [Right Click] always shows the default menu.
     157        </p>
    155158</body>
    156159</html>
  • editor/_source/classes/fckcontextmenu.js

     
    4848        if ( !FCKBrowserInfo.IsIE )
    4949        {
    5050                this._Document = mouseClickWindow.document ;
     51                if ( FCKBrowserInfo.IsOpera && !( 'oncontextmenu' in document.createElement('foo') ) )
     52                {
     53                        this._Document.addEventListener( 'mousedown', FCKContextMenu_Document_OnMouseDown, false ) ;
     54                        this._Document.addEventListener( 'mouseup', FCKContextMenu_Document_OnMouseUp, false ) ;
     55                }
    5156                this._Document.addEventListener( 'contextmenu', FCKContextMenu_Document_OnContextMenu, false ) ;
    5257        }
    5358}
     
    7782                FCKTools.AddEventListenerEx( element, 'contextmenu', FCKContextMenu_AttachedElement_OnContextMenu, this ) ;
    7883        else
    7984                element._FCKContextMenu = this ;
    80 
    81 //      element.onmouseup               = FCKContextMenu_AttachedElement_OnMouseUp ;
    8285}
    8386
    8487function FCKContextMenu_Document_OnContextMenu( e )
     
    101104        return true ;
    102105}
    103106
    104 function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el )
     107var FCKContextMenu_OverrideButton ;
     108
     109function FCKContextMenu_Document_OnMouseDown( e )
    105110{
    106 //      var iButton = e ? e.which - 1 : event.button ;
     111        if( !e || e.button != 2 )
     112                return ;
    107113
    108 //      if ( iButton != 2 )
    109 //              return ;
     114        var el = e.target ;
    110115
     116        while ( el )
     117        {
     118                if ( el._FCKContextMenu )
     119                {
     120                        if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) )
     121                                return true ;
     122
     123                        var overrideButton = FCKContextMenu_OverrideButton ;
     124                        if( !overrideButton )
     125                        {
     126                                var doc = e.target.ownerDocument ;
     127                                overrideButton = FCKContextMenu_OverrideButton = doc.createElement('input') ;
     128                                overrideButton.type = 'button' ;
     129                                (doc.body||doc.documentElement).appendChild( overrideButton ) ;
     130                        }
     131
     132                        overrideButton.style.cssText = 'position:absolute;top:' + ( e.clientY - 2 ) +
     133                                'px;left:' + ( e.clientX - 2 ) +
     134                                'px;width:5px;height:5px;opacity:0.01' ;
     135                }
     136                el = el.parentNode ;
     137        }
     138}
     139
     140function FCKContextMenu_Document_OnMouseUp( e )
     141{
     142        var overrideButton = FCKContextMenu_OverrideButton ;
     143
     144        if ( overrideButton )
     145        {
     146                overrideButton.parentNode.removeChild( overrideButton ) ;
     147                FCKContextMenu_OverrideButton = undefined ;
     148
     149                if( e && e.button == 2 )
     150                {
     151                        FCKContextMenu_Document_OnContextMenu( e ) ;
     152                        return false ;
     153                }
     154        }
     155}
     156
     157function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el )
     158{
    111159        if ( fckContextMenu.CtrlDisable && ( ev.ctrlKey || ev.metaKey ) )
    112160                return true ;
    113161
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy