mercredi 7 novembre 2012

fckeditor in squirrelmail on chrome

Des années d'utilisation de squirrelmail et fckeditor, et voilà que ça ne marche pas dans google chrome ??

La recherche dans google indique que d'autres ont aussi trouvés "des limites dans squirrelmail", suivies d'autres problèmes de fckeditor. Certes. Allons y.
* squirrelmail se base sur le USER_AGENT,

html_mail/functions.php


search for gecko or Gecko and duplicate :

IN: function getBrowserType(){
...
//add browser detection:   
else if (preg_match('/chrome\/(\d+)/', $userAgent, $version))
      $browser = 'Chrome';

IN: function html_mail_choose_type_on_the_fly(){
...
      if ($javascript_on && (($browser == 'Explorer' && $browserVersion >= 5.5)
                          || ($browser == 'Gecko' && $browserVersion >= 20030624)
                          || ($browser == 'Chrome' && $browserVersion >= 0)
))

IN: function html_area_is_on_and_is_supported_by_users_browser()
...
   return ($javascript_on && ($type == 'html' || $comp_in_html)
    && (($browser == 'Explorer' && $browserVersion >= 5.5)
     || ($browser == 'Gecko' && $browserVersion >= 20030624)
     || ($browser == 'Chrome' && $browserVersion >= 0)
   ));

Next Step, fckeditor self limitations in html_mail/fckeditor/

IN: fckeditor.js FCKeditor.prototype._IsCompatibleBrowser = function()
        // Chrome
        if (sAgent.match(/chrome/)) return true ;
OR:fckconfig.js
(euh je le retrouve plus mais je crois que ya un flag qui permet de pas tester le useragent, bref)

Après, ça ne marche toujours pas, 
on a l'erreur FCKLang undefined : je ne me souviens plus pourquoi
ou encore AddItem method not found  : bon ça devient compliqué, c'est que l'appel du prototype dans Array n'est pas pris en compte. Donc voilà comment j'ai bypassé tout ça : 
en prenant en compte l'affichage d'iframe, comme dans les premiers fckeditor

dans fckeditor.js/FCKeditor.prototype._GetIFrameHtml = function()
après sFile=....
on force
        sFile = 'fckeditor.original.html';
et ensuite on affiche l'iframe
//return '' ;
       return '' ;

ça marche.
c'est pas satisfaisant pour la pureté du code mais ça marche.

au passage, j'agrandis la fenêtre
IN: include/load_prefs.php
$editor_size = getPref($data_dir, $username, 'editor_size', 96 );
$editor_height = getPref($data_dir, $username, 'editor_height', 35 );
(instead of 76 and 20)


Aucun commentaire: