Running with Ruby

Tag: CKEditor

Fckeditor + Autogrow vs Google Chrome

Dzisiaj zupełnie przypadkiem zauważyłem, że (kolejny raz) autogrow szwankuje. Tym razem wysypał się przy odpalaniu Fckeditora na Chromie. Autogrow automatycznie ustawiał wysokość pola na max, zamiast ustawić na wybraną wartość i dopiero w razie potrzeby je powiększać.

Rozwiązanie tego problemu okazało się całkiem proste.

W pliku fckeditor/editor/plugins/autogrow/fckplugin.js wystarczy zakomentować linijki od 45 do 48 (fragment poniżej):

if ( typeof window.onresize == 'function' )
{
    window.onresize();
}

FCKeditor (CKEditor), Autogrow plugin i Opera

Dzisiaj dostałem zgłoszenie od jednego z klientów, że jego “okienko” wprowadzania tekstu mogłoby być dłuższe. Dość mnie to zdziwiło, zważywszy na wykorzystanie wspomnianego w tytule pluginu.

Autogrow powoduje “przyrost” okienka wraz z dopisywaniem treści, przez co widzimy co piszemy bez potrzeby “scrollowania”.

Okazało się jednak, że z jakiegoś powodu, Autogrow nie działa pod Operą.

Standardowo w takich chwilach, rozpocząłem googlanie i znalazłem ten wątek: link

Rozwiązanie tam zasugerowane, czyli zamiana 65 linijki:

window.frameElement.height = iMainFrameSize ;

Na:

  window.frameElement.height = iMainFrameSize;
  window.frameElement.style.height = iMainFrameSize+"px";

Niestety nie pomogła.Jednak wystarczyło w w linijce 33 dodać do warunku także:

|| FCKBrowserInfo.IsOpera

Aby Autogrow działał w Operze normalnie :) Poniżej zamieszczam całą metodę FCKAutoGrow_Check:

function FCKAutoGrow_Check()
{
   var oInnerDoc = FCK.EditorDocument ;

   var iFrameHeight, iInnerHeight ;

   if ( FCKBrowserInfo.IsIE || FCKBrowserInfo.IsOpera )
   {
      iFrameHeight = FCK.EditorWindow.frameElement.offsetHeight ;
      iInnerHeight = oInnerDoc.body.scrollHeight ;
   }
   else
   {
      iFrameHeight = FCK.EditorWindow.innerHeight ;
      iInnerHeight = oInnerDoc.body.offsetHeight ;
   }

   var iDiff = iInnerHeight - iFrameHeight ;

   if ( iDiff != 0 )
   {
      var iMainFrameSize = window.frameElement.offsetHeight ;

      if ( iDiff > 0 && iMainFrameSize < FCKConfig.AutoGrowMax )
      {
         iMainFrameSize += iDiff ;
         if ( iMainFrameSize > FCKConfig.AutoGrowMax )
            iMainFrameSize = FCKConfig.AutoGrowMax ;
      }
      else if ( iDiff < 0 && iMainFrameSize > FCKAutoGrow_Min )
      {
         iMainFrameSize += iDiff ;
         if ( iMainFrameSize < FCKAutoGrow_Min )
            iMainFrameSize = FCKAutoGrow_Min ;
      }
      else
         return ;

      window.frameElement.height = iMainFrameSize;
      window.frameElement.style.height = iMainFrameSize+"px";

      // Gecko browsers use an onresize handler to update the innermost
      // IFRAME's height. If the document is modified before the onresize
      // is triggered, the plugin will miscalculate the new height. Thus,
      // forcibly trigger onresize. #1336
      if ( typeof window.onresize == 'function' )
         window.onresize() ;
   }
}

Copyright © 2018 Running with Ruby

Theme by Anders NorenUp ↑