2011-06-29 10 views
0

私はfigure要素(またはその子のいずれか)を取得し、選択する方法を探していますにCKEditorバージョンで選択フィギュア要素 - figure要素(または任意の子供)をクリックしてキャプチャ

理想的に、私はこのことを希望figureタグ内にあるときimgの選択(img上のobjectResizingを含む)をバイパスします。

私は、currentInstanceイベントを使用してイベントをキャプチャして遊んだことがあります。これが最善のアプローチであるか、別のイベントがあるかどうかはわかりません。明らかに、イベントターゲット(つまりimg)がFigure要素内にあるかどうかを知るために、ある種のイベントバブリングが必要です。

私はjavascript/jqueryでこれを行う方法の感覚を持っていますが、これはimgsとテーブルでckeditorで行われるので、私は適切なckeditorアプローチを探しています。

私はその子要素を選択するか、Figure自体をクリックするかを問わず、figure要素を選択できる解決策を見つけました。しかし、ダブルクリックは、子どもたちに関連付けられている他のイベントをトリガし、ので、私はちょうどダイアログを開きふりをする必要があり、この場合

editor.on('selectionChange', function(evt) 
    { 
     if (editor.readOnly) 
       return; 

     /* 
     * only select our figure elements 
     */ 
     var element = evt.data.path.lastElement && evt.data.path.lastElement.getAscendant('figure', true); 
     if (element && element.getName() == 'figure' && element.getAttribute('data-media-id') && element.getChildCount()) { 
      editor.getSelection().selectElement(element); 
     } 
    }); 


    editor.on('doubleclick', function(evt) 
    { 
     var element = evt.data.element.getAscendant('figure', true); 

     if (!element.isReadOnly()) 
     { 
      if (element.is('figure') || element.getParent().is('figure')) 
      { 
       editor.getSelection().selectElement(element); 

       editor.execCommand('imagemanager', element); 
      } 

     } 
    }); 

答えて

2

判明してそれらの他のイベントをキャンセルする方法を見つける必要があります。私のダブルクリックの問題は、私はckeditorのダイアログを使用していないということです。なぜなら、私はajaxウィンドウを開いて自分で構築しているからです。これにより、他のウィンドウが開かないようにします。

editor.on('doubleclick', function(evt) 
    { 
     var element = evt.data.element.getAscendant('figure', true); 

     if (!element.isReadOnly()) 
     { 
      if (element.is('figure') || element.getParent().is('figure')) 
      { 
       editor.getSelection().selectElement(element); 

       editor.execCommand('imagemanager', element); 

       // :HACK: pretend to open a dialog, cancels other dialogs from opening 
       evt.data.dialog = ''; 
      } 

     } 
    });