Changeset 1297


Ignore:
Timestamp:
03/28/11 23:08:39 (8 years ago)
Author:
gogo
Message:

See ticket #1502

Update to enhance reliability and functionality of MootoolsFileManager?.

  1. A couple of race type conditions caused various issues with loading the MFM.
  2. Add preselection of current image
  3. Add documentation for HSpace/VSpace in config.php

Also snuck in a couple of other bugfixes/additions:

  1. add support for having attribute "onxinhaready" on a textarea
  2. add a Xinha._posturlcontent as an analog to _geturlcontent, synchronouse post
  3. some PHP deprecation issues in the old ExtendedFileManager? and ImageManager?
  4. add a skin.xml to blue-look skin

Note: This is an older version of MFM, I am about to create a branch to work on bringing in a large update to MFM in a couple of stages.

Location:
trunk
Files:
1 added
14 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Xinha.css

    r1234 r1297  
    11.htmlarea { background: #fff; } 
    2 .htmlarea td { margin:0;padding:0; } 
     2.htmlarea td { margin:0 !important;padding:0 !important; } 
    33 
    44.htmlarea .toolbarRow { 
     
    387387display: none; 
    388388} 
    389  
    390 .placesmanager 
    391 { 
    392   width: 95%; 
    393   overflow: auto; 
    394 } 
    395  
    396 .filemanager 
    397 { 
    398   width: 95%; 
    399   height: 200px; 
    400   overflow: auto; 
    401   background-color: #fff; 
    402 } 
    403 .filemanager div.file 
    404 { 
    405   min-width: 80px; 
    406   height: 100px; 
    407   position: relative; 
    408   float: left; 
    409   border: 1px outset #666; 
    410   margin: 4px; 
    411 } 
    412 .placesmanager div.file 
    413 { 
    414   min-width: 60px; 
    415   height: 70px; 
    416   position: relative; 
    417   float: left; 
    418   border: 1px outset #666; 
    419   margin: 4px; 
    420 } 
    421 .filemanager div.file:hover, 
    422 .placesmanager div.file:hover 
    423 { 
    424   border: 1px solid #333; 
    425   background: #fffff3; 
    426 } 
    427  
    428 .filemanager div.selected, 
    429 .filemanager div.selected:hover, 
    430 .placesmanager div.selected, 
    431 .placesmanager div.selected:hover 
    432 { 
    433   background: #ffffda; 
    434   border: 1px solid #000; 
    435 } 
    436 .filemanager .filename { 
    437         margin: 0.5em; 
    438         color: #222; 
    439 } 
    440 .filemanager div.selected .filename { 
    441   color: #000; 
    442 } 
    443 .filemanager img.thumb 
    444 { 
    445   width: 50px; 
    446   height: 50px; 
    447   position: absolute; 
    448   top: 50%; 
    449   left: 50%; 
    450   margin: -25px 0 0 -25px; 
    451   border: 1px solid black; 
    452 } 
    453 .filemanager img.icon 
    454 { 
    455   width: 32px; 
    456   height: 32px; 
    457   position: absolute; 
    458   top: 50%; 
    459   left: 50%; 
    460   margin: -16px 0 0 -16px; 
    461 } 
    462 .filemanager img.action 
    463 { 
    464   width: 15px; 
    465   height: 15px; 
    466   position: absolute; 
    467 } 
    468 .filemanager img.delete 
    469 { 
    470   bottom: 3px; 
    471   left: 20px; 
    472 } 
    473 .filemanager img.copy 
    474 { 
    475   bottom: 3px; 
    476   left: 3px; 
    477 } 
  • trunk/XinhaCore.js

    r1296 r1297  
    36583658        editor._onGenerate(); 
    36593659      } 
     3660       
     3661      if(editor._textArea.hasAttribute('onxinhaready')) 
     3662      {                
     3663        (function() { eval(editor._textArea.getAttribute('onxinhaready')) }).call(editor.textArea); 
     3664      } 
     3665       
    36603666      //ticket #1407 IE8 fires two resize events on one actual resize, seemingly causing an infinite loop (but not  when Xinha is in an frame/iframe)  
    36613667      Xinha.addDom0Event(window, 'resize', function(e)  
     
    42054211          return this.loadNext(); 
    42064212         
    4207         case 'text/javascript': 
     4213        case 'text/javascript':           
     4214          this.loadedScripts.push(nxt); 
    42084215          Xinha.loadScript(nxt.url, nxt.plugin, function() { self.loadNext(); }); 
    42094216      } 
     
    42314238    { 
    42324239      if(this.loadedScripts[i].url == url && this.loadedScripts[i].plugin == plugin) 
     4240      { 
     4241        if(!this.loaderRunning) this.loadNext(); 
    42334242        return this; // Already done (or in process) 
     4243      } 
    42344244    } 
    42354245     
     4246    for(var i = 0; i < this.pendingAssets.length; i++) 
     4247    { 
     4248      if(this.pendingAssets[i].url == url && this.pendingAssets[i].plugin == plugin) 
     4249      { 
     4250        if(!this.loaderRunning) this.loadNext(); 
     4251        return this; // Already pending 
     4252      } 
     4253    } 
     4254         
    42364255    return this.loadScript(url, plugin); 
    42374256  } 
     
    72027221}; 
    72037222 
     7223 
     7224/** Use XMLHTTPRequest to send some some data to the server and return the result synchronously 
     7225 * 
     7226 * @param {String} url The address for the HTTPRequest 
     7227 * @param data the data to send, streing or array 
     7228 */ 
     7229Xinha._posturlcontent = function(url, data, returnXML) 
     7230{ 
     7231  var req = null; 
     7232  req = Xinha.getXMLHTTPRequestObject(); 
     7233 
     7234  var content = ''; 
     7235  if (typeof data == 'string') 
     7236  { 
     7237    content = data; 
     7238  } 
     7239  else if(typeof data == "object") 
     7240  { 
     7241    for ( var i in data ) 
     7242    { 
     7243      content += (content.length ? '&' : '') + i + '=' + encodeURIComponent(data[i]); 
     7244    } 
     7245  } 
     7246 
     7247  req.open('POST', url, false);     
     7248  req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'+(Xinha._postback_send_charset ? '; charset=UTF-8' : '')); 
     7249  req.send(content); 
     7250   
     7251  if ( ((req.status / 100) == 2) || Xinha.isRunLocally && req.status === 0 ) 
     7252  { 
     7253    return (returnXML) ? req.responseXML : req.responseText; 
     7254  } 
     7255  else 
     7256  { 
     7257    return ''; 
     7258  } 
     7259   
     7260}; 
    72047261// Unless somebody already has, make a little function to debug things 
    72057262 
     
    72667323  /** Walks through an array and, if the specified item exists in it, returns the position 
    72677324  * @param {String} needle The string to search for 
    7268   * @returns {Integer|null} Index position if item found, null otherwise  
     7325  * @returns {Integer|-1} Index position if item found, -1 otherwise (same as built in js) 
    72697326  */ 
    72707327  Array.prototype.indexOf = function(needle) 
  • trunk/plugins/ExtendedFileManager/ExtendedFileManager.js

    r1252 r1297  
    239239            baseHref: editor.config.baseHref 
    240240        }; 
    241     } else 
     241    }  
     242    else 
     243    {       
    242244        outparam.param = { 
    243245            f_href   : Xinha.is_ie ? link.href : link.getAttribute("href"), 
     
    247249            baseHref: editor.config.baseHref 
    248250        }; 
     251    } 
    249252 
    250253    Dialog(this.config.ExtendedFileManager.manager+'&mode=link', function(param){ 
  • trunk/plugins/ExtendedFileManager/assets/manager.js

    r1054 r1297  
    152152    { 
    153153        var target_select = document.getElementById("f_target"); 
    154         var absoluteURL = new RegExp('^https?://'); 
     154        var absoluteURL = new RegExp('^(/|(https?://))'); 
    155155 
    156156        if (param.f_href.length > 0 && !absoluteURL.test(param.f_href) && typeof param.baseHref == "string") { 
  • trunk/plugins/ImageManager/Classes/Transform.php

    r999 r1297  
    131131 
    132132        $classname = "Image_Transform_Driver_{$driver}"; 
    133         $obj =& new $classname; 
     133        $obj = new $classname; 
    134134        return $obj; 
    135135    } 
  • trunk/plugins/ImageManager/backend.php

    r1192 r1297  
    3131 
    3232// Strip slashes if MQGPC is on 
    33 set_magic_quotes_runtime(0); 
     33if(function_exists('set_magic_quotes_runtime')) @set_magic_quotes_runtime(0); 
    3434if(get_magic_quotes_gpc()) 
    3535{ 
  • trunk/plugins/MootoolsFileManager/MootoolsFileManager.ImageManager.js

    r1247 r1297  
    3737    outparam = 
    3838      { 
    39         f_url    : Xinha.is_ie ? image.src : image.src, 
     39        f_url    : image.getAttribute('src'), //Xinha.is_ie ? image.src : image.src, 
    4040        f_alt    : image.alt, 
    4141        f_border : image.style.borderWidth ? image.style.borderWidth : image.border, 
     
    7373      onComplete:     function(path, file) { self.ImageManagerReturn(path,file); }, 
    7474      onHide:         function() { if(this.swf && this.swf.box) this.swf.box.style.display = 'none'; }, 
    75       onShow:         function() { if(this.swf && this.swf.box) this.swf.box.style.display = ''; }, 
     75      onShow:         function() {         
     76        if(this.swf && this.swf.box) this.swf.box.style.display = '';  
     77        if(self.current_image) 
     78        { 
     79            var src  = self.current_image.getAttribute('src'); 
     80            if(!src.match(/^(([a-z]+:)|\/)/i)) 
     81            { 
     82                src = self.editor.config.baseHref.replace(/\/[^\/]*$/, '') + '/' + src; 
     83                if(src.match(/^[a-z]+:/i) && !self.phpcfg.images_url.match(/^[a-z]:/i)) 
     84                { 
     85                  src = src.replace(/^[a-z]+:(\/\/?)[^/]*/i, ''); 
     86                } 
     87            } 
     88            var path = src.replace(self.phpcfg.images_url+'/', '').split('/'); 
     89            var base = path.pop(); 
     90            path     = self.phpcfg.images_url.split('/').pop() + (path.length ? ('/' + path.join('/')) : '');   
     91            this.load(path, true, (function() { this.fillInfo(base); }).bind(this));             
     92        } 
     93      }, 
    7694      onDetails:      function(details)  
    7795                      {                                                  
     
    178196           
    179197          var img   = div.appendChild(document.createElement('img')); 
    180           img.src   = '/plugins/ImageManager/img/locked.gif'; 
     198          img.src   =  Xinha.getPluginDir("ImageManager") + '/img/locked.gif'; 
    181199          img.width = 25; 
    182200          img.height = 32; 
     
    201219        { // HSPACE/VSPACE         
    202220          var th    = tr.appendChild(document.createElement('th')); 
    203           var label = th.appendChild(document.createTextNode('Margin:')); 
     221          var label = th.appendChild(document.createTextNode('L/R Margin:')); 
    204222           
    205223          var td    = tr.appendChild(document.createElement('td')); 
     
    208226          input.size = 3;     
    209227          input.type = 'text'; 
    210            
    211           td.appendChild(document.createTextNode(' x '));         
     228          td.appendChild(document.createTextNode(' px '));                
     229          th.className = td.className = 'filemanager-f_hspace';       
     230           
     231          var th    = tr.appendChild(document.createElement('th')); 
     232          var label = th.appendChild(document.createTextNode('T/B Margin:')); 
     233          var td    = tr.appendChild(document.createElement('td')); 
    212234          var input = td.appendChild(document.createElement('input')); 
    213235          input.name   = 'f_vspace'; 
     
    215237          input.type = 'text'; 
    216238          td.appendChild(document.createTextNode(' px '));                
    217           th.className = td.className = 'filemanager-f_hspace filemanager-f_vspace';       
     239          th.className = td.className = 'filemanager-f_vspace';       
    218240        } 
    219241        else 
     
    291313          input.title = 'Positioning of this image'; 
    292314          input.options[0] = new Option('', true, true); 
    293           input.options[1] = new Option('Left'); 
    294           input.options[2] = new Option('Right'); 
    295           input.options[3] = new Option('Top'); 
    296           input.options[4] = new Option('Middle'); 
    297           input.options[5] = new Option('Bottom'); 
     315          input.options[1] = new Option('Left', 'left'); 
     316          input.options[2] = new Option('Right', 'right'); 
     317          input.options[3] = new Option('Top', 'top'); 
     318          input.options[4] = new Option('Middle', 'middle'); 
     319          input.options[5] = new Option('Bottom', 'bottom'); 
    298320           
    299321          // @TODO Constrain Ratio 
     
    420442       
    421443      table: this._ImageManagerAttributesTable 
    422     } 
    423      
     444    }  
    424445    return details; 
    425446  } 
     
    427448  // If details were supplied, we set the appropriate ones.   
    428449  if( 
    429       (f('f_width').value  && f('f_width').value  != details.width)    
    430    || (f('f_height').value && f('f_height').value != details.height)    
     450   (   (f('f_width').value  && f('f_width').value  != details.width)    
     451    || (f('f_height').value && f('f_height').value != details.height)  ) 
     452   &&  
     453    (!details.url || !this.current_image || this.current_image.getAttribute('src') != details.url) 
    431454  ) 
    432455  { 
    433     new Dialog('This image is a different size, would you like to use the new size?', { 
    434       language: {         
    435         confirm: 'Shrink/Grow To Fit',         
    436         decline: 'Fullsize' 
    437       }, 
    438          
    439       buttons: [ 
    440         'confirm', 
    441         'decline' 
    442       ], 
     456    // Check if this is the same image 
     457    var warn = function() {       
     458      new Dialog('This image is a different size, would you like to use the new size?', { 
     459        language: {         
     460          confirm: 'Shrink/Grow To Fit',         
     461          decline: 'Fullsize' 
     462        }, 
     463           
     464        buttons: [ 
     465          'confirm', 
     466          'decline' 
     467        ], 
     468         
     469        onConfirm: function(){ 
     470          if(f('f_constrain').checked) 
     471          { 
     472            var new_size = self.ScaleImage(details, {width: f('f_width').value, height: f('f_height').value}); 
     473             
     474            f('f_width').value = f('f_width').value   ? new_size.width : ''; 
     475            f('f_height').value = f('f_height').value ? new_size.height : ''; 
     476          } 
     477        }, 
     478         
     479        onDecline: function(){ 
     480          f('f_width').value = ''; 
     481          f('f_height').value = ''; 
     482        } 
     483      }); 
     484    } 
    443485       
    444       onConfirm: function(){ 
    445         if(f('f_constrain').checked) 
    446         { 
    447           var new_size = self.ScaleImage(details, {width: f('f_width').value, height: f('f_height').value}); 
    448            
    449           f('f_width').value = f('f_width').value   ? new_size.width : ''; 
    450           f('f_height').value = f('f_height').value ? new_size.height : ''; 
    451         } 
    452       }, 
    453        
    454       onDecline: function(){ 
    455         f('f_width').value = ''; 
    456         f('f_height').value = ''; 
    457       } 
    458     }); 
     486      if(!details.url) warn(); 
     487      else if(!this.current_image) warn(); 
     488      else 
     489      { 
     490          var src  = self.current_image.getAttribute('src'); 
     491          if(!src.match(/^(([a-z]+:)|\/)/i)) 
     492          { 
     493              src = self.editor.config.baseHref.replace(/\/[^\/]*$/, '') + '/' + src; 
     494              if(src.match(/^[a-z]+:/i) && !self.phpcfg.images_url.match(/^[a-z]:/i)) 
     495              { 
     496                src = src.replace(/^[a-z]+:(\/\/?)[^/]*/i, ''); 
     497              } 
     498          } 
     499          if(details.url != src) warn(); 
     500      } 
     501     
    459502  } 
    460503   
     
    537580        case "f_margin":  
    538581        { 
    539           if(value.length) 
     582          if(value && value.length) 
    540583          { 
    541584            img.style.margin = /[^0-9]/.test(value) ? value :  (parseInt(value) + 'px');  
     
    548591        break; 
    549592         
    550         case "f_align"  : if(img.align && img.align !== true) { img.align  = value; } else { img.removeAttribute('align'); } break; 
     593        case "f_align"  : if(value && value !== true) { img.align  = value; } else { img.removeAttribute('align'); } break; 
    551594           
    552595        case "f_width" :  
  • trunk/plugins/MootoolsFileManager/MootoolsFileManager.js

    r1245 r1297  
    5252    .loadStyle('mootools-filemanager/Css/FileManager.css', 'MootoolsFileManager') 
    5353    .loadStyle('mootools-filemanager/Css/Additions.css', 'MootoolsFileManager') 
    54     .loadScript('mootools-filemanager/Source/FileManager.js', 'MootoolsFileManager') 
    55     .loadScript('mootools-filemanager/Language/Language.en.js', 'MootoolsFileManager') 
    56     .loadScript('mootools-filemanager/Source/Additions.js', 'MootoolsFileManager') 
     54    .loadScript('mootools-filemanager/Source/Additions.js', 'MootoolsFileManager')         
    5755    .loadScript('mootools-filemanager/Source/Uploader/Fx.ProgressBar.js', 'MootoolsFileManager') 
    5856    .loadScript('mootools-filemanager/Source/Uploader/Swiff.Uploader.js', 'MootoolsFileManager') 
    59     .loadScript('mootools-filemanager/Source/Uploader.js', 'MootoolsFileManager'); 
     57    .loadScript('mootools-filemanager/Source/FileManager.js', 'MootoolsFileManager') 
     58    .loadScript('mootools-filemanager/Source/Uploader.js', 'MootoolsFileManager') 
     59    .loadScript('mootools-filemanager/Language/Language.en.js', 'MootoolsFileManager'); 
    6060} 
    6161MootoolsFileManager.AssetLoader.loadStyle('MootoolsFileManager.css', 'MootoolsFileManager'); 
     
    6363 
    6464function MootoolsFileManager(editor) 
    65 { 
     65{   
    6666  this.editor = editor; 
    6767  var self = this; 
     
    6969     
    7070  // Do a callback to the PHP backend and get it to "decode" the configuration for us into a  
    71   // javascript object. 
    72   Xinha._postback(editor.config.MootoolsFileManager.backend+'__function=read-config', editor.config.MootoolsFileManager.backend_data,  
    73     function(phpcfg)  
    74     {  
    75       eval ('var f = '+phpcfg+';');  
    76       self.phpcfg = f; self.hookUpButtons();  
    77     });   
     71  // javascript object.   
     72   
     73  // IMPORTANT: we need to do this synchronously to ensure that the buttons are added to the toolbar 
     74  //  before the toolbar is drawn. 
     75   
     76  var phpcfg = Xinha._posturlcontent(editor.config.MootoolsFileManager.backend+'__function=read-config', editor.config.MootoolsFileManager.backend_data); 
     77 
     78  eval ('var f = '+phpcfg+';');  
     79  self.phpcfg = f;  
     80  self.hookUpButtons();  
    7881     
    7982  return;   
     
    116119     
    117120    // Override our Editors insert image button action.   
    118     self.editor._insertImage = function() 
    119     { 
    120       MootoolsFileManager.AssetLoader.whenReady(function() { self.OpenImageManager(); }); 
     121    self.editor._insertImage = function(image) 
     122    { 
     123      MootoolsFileManager.AssetLoader.whenReady(function() { self.OpenImageManager(image); }); 
    121124    }               
    122125  }  
  • trunk/plugins/MootoolsFileManager/backend.php

    r1245 r1297  
    3131 
    3232// Strip slashes if MQGPC is on 
    33 set_magic_quotes_runtime(0); 
    34 if(get_magic_quotes_gpc()) 
     33if(function_exists('set_magic_quotes_runtime')) @set_magic_quotes_runtime(0); 
     34if(function_exists('get_magic_quotes_gpc') && @get_magic_quotes_gpc()) 
    3535{ 
    3636  $to_clean = array(&$_GET, &$_POST, &$_REQUEST, &$_COOKIE); 
     
    5757  if(preg_match('/([0-9\.])+([a-zA-Z]+)/', $s, $M)) 
    5858  { 
    59     switch(strtolower($M)) 
     59    switch(strtolower($M[2])) 
    6060    {       
    6161      case 'm': 
  • trunk/plugins/MootoolsFileManager/config.php

    r1245 r1297  
    137137$IMConfig['base_url'] = preg_replace('/\/backend\.php.*/', '', $_SERVER['REQUEST_URI']); 
    138138 
     139/** 
     140 
     141== HTML Compatability == 
     142 
     143 For most people the default of using CSS will be fine, but if the HTML you are editing 
     144 in Xinha is destined for an email you will probably want to use hspace and vspace 
     145 instead of CSS margins because of poor Email support for CSS. 
     146  
     147*/ 
     148 
     149$IMConfig['UseHSpaceVSpace'] = TRUE; 
    139150 
    140151 /** 
  • trunk/plugins/MootoolsFileManager/mootools-filemanager/Backend/Upload.php

    r1269 r1297  
    9393                        'extension' => strtolower(pathinfo($file, PATHINFO_EXTENSION)), 
    9494                ), $options); 
    95                  
     95                $options['extension'] = strtolower($options['extension']); 
    9696                $mime = null; 
    9797                $ini = error_reporting(0); 
  • trunk/plugins/MootoolsFileManager/mootools-filemanager/Source/FileManager.js

    r1245 r1297  
    310310        }, 
    311311 
    312         load: function(dir, nofade){ 
     312        /* XINHA: We add a callback capability which will be called whe the loading is completed.  
     313    *  NOTE: For some reason, MFM wants the dir to include the last component of the prefix 
     314    *  eg if your images_dir is /fancy/images and you want to load /fancy/images/foo/bar you must pass 
     315    *   images/foo/bar -- crazy annoying 
     316    */ 
     317 
     318        load: function(dir, nofade, callback){ 
    313319                this.deselect(); 
    314320                if (!nofade) this.info.fade(0); 
     
    320326                        onSuccess: (function(j){ 
    321327                                this.fill(j, nofade); 
     328        if(callback) callback(j); 
    322329                        }).bind(this), 
    323330                        data: { 
     
    444451                        icons = $$(icons.map(function(icon){ return icon.appearOn(icon, [1, 0.7]); })).appearOn(el.getParent('li'), 0.7); 
    445452                }, this); 
    446  
     453       this.CurrentFiles = j.files;  // XINHA - fillInfo() will use this to find a pre-selected file 
     454     
    447455                var self = this, revert = function(el){ 
    448456                        el.set('opacity', 1).store('block', true).removeClass('drag').removeClass('move').setStyles({ 
     
    454462                                top: 0 
    455463                        }).inject(el.retrieve('parent')); 
    456                         el.getElements('img.browser-icon').set('opacity', 0); 
     464                //      el.getElements('img.browser-icon').set('opacity', 0); // XINHA - NOT REQUIRED? 
    457465                         
    458466                        document.removeEvents('keydown', self.bound.keydown).removeEvents('keyup', self.bound.keydown); 
     
    552560                if (!file) file = this.CurrentDir; 
    553561                if (!path) path = this.Directory; 
    554  
     562   
    555563                if (!file) return; 
     564        
     565       /* XINHA: In order to facilitate pre-selecting an image/file for modification, we can pass in a filename (just the basename) 
     566           as file and we will search in the current files for it.  You must have done a load first, and call the fillInfo as a result of the load. 
     567           YourImageManager.load('path/to/dir', true, function() { YourImageManager.fillInfo('file.jpg'); }); 
     568        */ 
     569       var self = this; 
     570        if(typeof file == 'string') 
     571    { 
     572        if(this.CurrentFiles) 
     573        { 
     574          this.CurrentFiles.each(function(f) 
     575          { 
     576            if(typeof file != 'string') return; 
     577            if(f.name == file)  
     578            { 
     579                file = f; 
     580                if(file.element)  
     581                { 
     582                  self.Current = file.element.addClass('selected'); 
     583                  self.switchButton(); 
     584                } 
     585                
     586            } 
     587          }); 
     588        } 
     589    } 
     590     
    556591                var size = this.size(file.size); 
    557592 
  • trunk/plugins/PersistentStorage/dialog.css

    r1269 r1297  
    1 .htmlarea { background: #fff; } 
    2 .htmlarea td { margin:0;padding:0; } 
    3  
    4 .htmlarea .toolbarRow { 
    5   width:1px; 
    6 } 
    7  
    8 .htmlarea .toolbar { 
    9   cursor: default; 
    10   background: ButtonFace; 
    11   padding: 3px; 
    12   border: 1px solid; 
    13   border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; 
    14 } 
    15 .htmlarea .toolbar table { margin: 0; font-family: Tahoma, Verdana,sans-serif; font-size: 11px; } 
    16 .htmlarea .toolbar img { border: none; vertical-align: top; } 
    17 .htmlarea .toolbar .label { padding: 0 3px; } 
    18  
    19 .htmlarea .toolbar .button { 
    20   background: ButtonFace; 
    21   color: ButtonText; 
    22   border: 1px solid ButtonFace; 
    23   padding: 1px; 
    24   margin: 0; 
    25   width: 18px; 
    26   height: 18px; 
    27 } 
    28 .htmlarea .toolbar a.button:hover { 
    29   border: 1px solid; 
    30   border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; 
    31 } 
    32 .htmlarea .toolbar a.buttonDisabled:hover { 
    33   border-color: ButtonFace; 
    34 } 
    35 .htmlarea .toolbar .buttonActive, 
    36 .htmlarea .toolbar .buttonPressed 
    37 { 
    38   padding: 2px 0 0 2px; 
    39   border: 1px solid; 
    40   border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; 
    41 } 
    42 .htmlarea .toolbar .buttonPressed { 
    43   background: ButtonHighlight; 
    44 } 
    45 .htmlarea .toolbar .indicator { 
    46   padding: 0 3px; 
    47   overflow: hidden; 
    48   width: 20px; 
    49   text-align: center; 
    50   cursor: default; 
    51   border: 1px solid ButtonShadow; 
    52 } 
    53  
    54 .htmlarea .toolbar .buttonDisabled img { 
    55   filter: gray() alpha(opacity = 25); 
    56   -moz-opacity: 0.25; 
    57   opacity: 0.25; 
    58 } 
    59  
    60 .htmlarea .toolbar .separator { 
    61   /*position: relative;*/ 
    62   margin:0 3px; 
    63   border-left: 1px solid ButtonShadow; 
    64   border-right: 1px solid ButtonHighlight; 
    65   width: 0; 
    66   height: 18px; 
    67   padding: 0; 
    68 } 
    69  
    70 .htmlarea .toolbar .space { width: 5px; } 
    71  
    72 .htmlarea .toolbar select, .htmlarea .toolbar option { font: 11px Tahoma,Verdana,sans-serif;} 
    73  
    74 .htmlarea .toolbar select, 
    75 .htmlarea .toolbar select:hover, 
    76 .htmlarea .toolbar select:active {  
    77   position:relative; 
    78   top:-2px; 
    79   margin-bottom:-2px; 
    80   color: ButtonText; 
    81 } 
    82  
    83 .htmlarea iframe.xinha_iframe, .htmlarea textarea.xinha_textarea 
    84 { 
    85   border: none; /*1px solid;*/ 
    86 } 
    87  
    88 .htmlarea .statusBar { 
    89   border: 1px solid; 
    90   border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; 
    91   padding: 2px 4px; 
    92   background-color: ButtonFace; 
    93   color: ButtonText; 
    94   font: 11px Tahoma,Verdana,sans-serif; 
    95   height:16px; 
    96   overflow: hidden; 
    97 } 
    98  
    99 .htmlarea .statusBar .statusBarTree a { 
    100   padding: 2px 5px; 
    101   color: #00f; 
    102 } 
    103  
    104 .htmlarea .statusBar .statusBarTree a:visited { color: #00f; } 
    105 .htmlarea .statusBar .statusBarTree a:hover { 
    106   background-color: Highlight; 
    107   color: HighlightText; 
    108   padding: 1px 4px; 
    109   border: 1px solid HighlightText; 
    110 } 
    111  
    112 .statusBarWidgetContainer { 
    113   background-color: ButtonFace; 
    114 } 
    115  
    116 /* popup dialogs */ 
    117  
    118 .dialog { 
    119   color: ButtonText; 
    120   background: ButtonFace;  
    121   border: 1px outset;  
    122   border-color: WindowFrame; 
    123 } 
    124 div.dialog { 
    125   padding-bottom:10px; 
    126   border-radius: 8px 8px 0 0; 
    127   -moz-border-radius: 8px 8px 0 0; 
    128   -webkit-border-top-left-radius: 8px; 
    129   -webkit-border-top-right-radius: 8px; 
    130    
    131   box-shadow: 9px 9px 10px #444; 
    132   -moz-box-shadow: 9px 9px 10px #444; 
    133   -webkit-box-shadow: 9px 9px 10px #444; 
    134 } 
    135 div.dialog.modeless { 
    136   box-shadow: 4px 4px 5px #888; 
    137   -moz-box-shadow: 4px 4px 5px #888; 
    138   -webkit-box-shadow: 4px 4px 5px #888; 
    139 } 
    140 div.dialog.chrome { 
    141   -webkit-box-shadow: none !IMPORTANT; 
    142 } 
    143 .panels div.dialog.panel { 
    144   border-radius:0; 
    145   -moz-border-radius: 0; 
    146   -webkit-border-radius:0; 
    147    
    148   box-shadow: none; 
    149   -moz-box-shadow: none; 
    150   -webkit-box-shadow: none; 
    151 } 
    152 .xinha_dialog_background { 
    153   filter: alpha(opacity=0); 
    154   -moz-opacity: 0; 
    155   opacity: 0; 
    156   border:none; 
    157 } 
    158 .xinha_dialog_background_modal_greyout { 
    159   background-color:#666; 
    160   filter: alpha(opacity=70) !IMPORTANT; 
    161   -moz-opacity: 0.7; 
    162   opacity: 0.7; 
    163 } 
    164 .xinha_dialog_background_modal { 
    165   filter: alpha(opacity=0) !IMPORTANT; 
    166   -moz-opacity: 0; 
    167   opacity: 0; 
    168   border:none; 
    169 } 
    170 body.xinha_dialog_background_modal_greyout { 
    171   filter: alpha(opacity=100) !IMPORTANT; 
    172 } 
    173 body.xinha_dialog_background_modal { 
    174   filter: alpha(opacity=0); 
    175 } 
    176 .dialog .content { padding: 2px; } 
    177  
    178 .dialog, .dialog button, .dialog input, .dialog select, .dialog textarea, .dialog table { 
    179   font: 11px Tahoma,Verdana,sans-serif; 
    180 } 
    181  
    182 .dialog table { border-collapse: collapse; } 
    183  
    184 .dialog .title, .dialog h1 
    185 { 
    186   background: ActiveCaption; 
    187   color: CaptionText; 
    188   border-bottom: 1px solid #000; 
    189   padding: 1px 0 2px 5px; 
    190   font-size: 12px; 
    191   font-weight: bold; 
    192   cursor: default; 
    193   letter-spacing: 0.01em; 
    194 } 
    195 .dialog h1 {  
    196   padding-left:22px; 
    197   margin:0; 
    198   border-radius: 8px 8px 0 0; 
    199   -moz-border-radius: 8px 8px 0 0; 
    200   -webkit-border-top-left-radius: 8px; 
    201   -webkit-border-top-right-radius: 8px; 
    202 } 
    203 .panels .dialog.panel h1 {  
    204   -moz-border-radius: 0; 
    205   -webkit-border-radius:0; 
    206 } 
    207  
    208 .dialog .title .button { 
    209   float: right; 
    210   border: 1px solid #66a; 
    211   padding: 0 1px 0 2px; 
    212   margin-right: 1px; 
    213   color: #fff; 
    214   text-align: center; 
    215 } 
    216  
    217 .dialog .title .button-hilite { border-color: #88f; background: #44c; } 
    218  
    219 .dialog button { 
    220   width: 5.5em; 
    221   padding: 0; 
    222 } 
    223 .dialog .closeButton { 
    224   padding: 0; 
    225   cursor: default; 
    226   border: 1px solid; 
    227   border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; 
    228   height : 11px; 
    229   width : 11px; 
    230   vertical-align : top; 
    231   position : absolute; 
    232   top : 3px; 
    233   right : 2px; 
    234   background-color: ButtonFace; 
    235   color: ButtonText; 
    236   font-size: 13px; 
    237   font-family: Tahoma,Verdana,sans-serif; 
    238   text-align:center; 
    239   letter-spacing:0; 
    240   overflow:hidden; 
    241 } 
    242 .dialog .buttonColor { 
    243   width :1em; 
    244   padding: 1px; 
    245   cursor: default; 
    246   border: 1px solid; 
    247   border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; 
    248 } 
    249  
    250 .dialog .buttonColor .chooser, .dialog .buttonColor .nocolor { 
    251   height: 0.6em; 
    252   border: 1px solid; 
    253   padding: 0 1em; 
    254   border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; 
    255 } 
    256  
    257 .dialog .buttonClick { 
    258   border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; 
    259 } 
    260 .dialog .buttonColor-hilite { 
    261    border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; 
    262 } 
    263  
    264 .dialog .buttonColor .nocolor { padding: 0; } 
    265 .dialog .buttonColor .nocolor-hilite { background-color: #fff; color: #f00; } 
    266  
    267 .dialog .label { text-align: right; width: 6em; } 
    268 .dialog .value input { width: 100%; } 
    269  
    270 .dialog legend { font-weight: bold; } 
    271 .dialog fieldset table { margin: 2px 0; } 
    272   
    273 .dialog  .buttons { 
    274  
    275       padding: 1em;  
    276       text-align: center; 
    277 } 
    278 .dialog .resizeHandle { 
    279     -moz-appearance : resizer; 
    280     width: 12px; 
    281     height: 12px; 
    282     border-bottom: 2px solid #000; 
    283     border-right: 2px solid #000; 
    284     cursor : se-resize; 
    285 } 
    286 .popupwin { 
    287   padding: 0; 
    288   margin: 0; 
    289 } 
    290  
    291 .popupwin .title { 
    292   background: #fff; 
    293   color: #000; 
    294   font-weight: bold; 
    295   font-size: 120%; 
    296   padding: 3px 10px; 
    297   margin-bottom: 10px; 
    298   border-bottom: 1px solid black; 
    299   letter-spacing: 2px; 
    300 } 
    301  
    302 form { margin: 0; border: none; } 
    303  
    304  
    305 /** Panels **/ 
    306 .htmlarea .panels_top 
    307 { 
    308   border-bottom : 1px solid; 
    309   border-color: ButtonShadow; 
    310 } 
    311  
    312 .htmlarea .panels_right 
    313 { 
    314   border-left : 1px solid; 
    315   border-color: ButtonShadow; 
    316 } 
    317  
    318 .htmlarea .panels_left 
    319 { 
    320   border-right : 1px solid; 
    321   border-color: ButtonShadow; 
    322 } 
    323  
    324 .htmlarea .panels_bottom 
    325 { 
    326   border-top : 1px solid; 
    327   border-color: ButtonShadow; 
    328 } 
    329  
    330 .htmlarea .panel h1 { 
    331   clear:left; 
    332   font-size:0.9em; 
    333 } 
    334  
    335 .htmlarea .panel {  
    336   overflow:hidden;  
    337   background-color:white; 
    338   padding-bottom:0 !IMPORTANT; 
    339   border: none !IMPORTANT; 
    340 } 
    341 .htmlarea .panels_left  .panel { border-right:none; border-left:none; } 
    342 .htmlarea .panels_left  h1     { border-right:none;  } 
    343 .htmlarea .panels_right .panel { border-right:none; border-left:none; } 
    344 .htmlarea .panels_left  h1     { border-left:none;  } 
    345 .htmlarea { border: 1px solid black; } 
    346  
    347 .loading 
    348 { 
    349   font-family:sans-serif; 
    350   position:absolute; 
    351   z-index:998; 
    352   text-align:center; 
    353   width:212px; 
    354   padding: 55px 0 5px 0; 
    355   border:2px solid #ccc; 
    356   /* border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;*/ 
    357   background: url(images/xinha_logo.gif) no-repeat #fff center 5px; 
    358 } 
    359 .loading_main 
    360 { 
    361   font-size:11px; 
    362   color:#000; 
    363   
    364 } 
    365 .loading_sub 
    366 { 
    367   font-size:9px; 
    368   color:#666; 
    369   text-align:center; 
    370 } 
    371 /* Classes for filemanager styles in a dialog. */ 
    372 .dialog a img 
    373 { 
    374 border: 0 none transparent; 
    375 } 
    376  
    377 .dialog fieldset.collapsed { 
    378 border: 0 none transparent; 
    379 } 
    380  
    381 .dialog fieldset.collapsed form { 
    382 display: none; 
    383 } 
    384  
    385 .hidden 
    386 { 
    387 display: none; 
    388 } 
    3891 
    3902.placesmanager 
  • trunk/skins/blue-look/skin.css

    r1142 r1297  
    1313  margin:4px; 
    1414  height:25px; 
     15} 
     16 
     17.htmlarea .toolbarRow td.toolBarElement 
     18{ 
     19  margin:0px; padding:0px; 
    1520} 
    1621 
Note: See TracChangeset for help on using the changeset viewer.