Changeset 975 for branches


Ignore:
Timestamp:
02/20/08 19:12:57 (12 years ago)
Author:
ray
Message:

updated branch

Location:
branches/ray
Files:
12 deleted
57 edited
18 copied

Legend:

Unmodified
Added
Removed
  • branches/ray/Xinha.css

    r862 r975  
    7171.htmlarea .toolbar select:hover, 
    7272.htmlarea .toolbar select:active {  
    73   margin-top: 2px; 
    74   margin-bottom: 1px; 
    75   color: ButtonText; 
    76   height: 17px; 
     73  position:relative; 
     74  top:-2px; 
     75  margin-bottom:-2px; 
     76  color: ButtonText; 
    7777} 
    7878 
  • branches/ray/XinhaCore.js

    r911 r975  
    2222    --        bar(); 
    2323    --      } 
    24     --   * Don't change brace styles unless you're working on the non BSD-Style 
    25     --     area (so we don't get spurious changes in line numbering). 
    26     --   * Don't change indentation unless you're working on the badly indented 
    27     --     area (so we don't get spurious changes of large blocks of code). 
     24    --   * Don't change brace styles. 
     25    --   * Don't change indentation. 
    2826    --   * Jedit is the recommended editor, a comment of this format should be 
    2927    --     included in the top 10 lines of the file (see the embedded edit mode) 
     
    141139*/ 
    142140Xinha.is_khtml  = (Xinha.agt.indexOf("khtml") != -1); 
     141/** Browser is WebKit 
     142@type string  
     143*/ 
     144Xinha.is_webkit  = (Xinha.agt.indexOf("applewebkit") != -1); 
    143145/** Browser is Safari 
    144146@type string  
     
    157159*/ 
    158160Xinha.is_win_ie = (Xinha.is_ie && !Xinha.is_mac); 
    159 /** Browserengine is Gecko (Mozilla) 
     161/** Browserengine is Gecko (Mozilla), applies also to Safari 
    160162@type string  
    161163*/ 
    162 Xinha.is_gecko  = (navigator.product == "Gecko" && !Xinha.is_safari); // Safari lies! 
     164Xinha.is_gecko  = (navigator.product == "Gecko"); 
     165Xinha.is_real_gecko = (navigator.product == "Gecko" && !Xinha.is_webkit); 
     166Xinha.is_ff3 = Xinha.is_real_gecko && parseInt(navigator.productSub) >= "2007121016"; 
     167Xinha.is_ff2 = Xinha.is_real_gecko && parseInt(navigator.productSub) < "2007121016"; 
     168 
    163169/** File is opened locally opened ("file://" protocol) 
    164170 * @type string 
     
    178184Xinha.checkSupportedBrowser = function() 
    179185{ 
    180   if ( Xinha.is_gecko ) 
    181   { 
    182     if ( navigator.productSub < 20021201 ) 
    183     { 
    184       alert("You need at least Mozilla-1.3 Alpha.\nSorry, your Gecko is not supported."); 
     186  if ( Xinha.is_opera ) 
     187  { 
     188    // alert("Sorry, Opera is not yet supported by Xinha."); 
    185189      return false; 
    186190    } 
    187     if ( navigator.productSub < 20030210 ) 
    188     { 
    189       alert("Mozilla < 1.3 Beta is not supported!\nI'll try, though, but it might not work."); 
    190     } 
    191   } 
    192   if ( Xinha.is_opera ) 
    193   { 
    194     alert("Sorry, Opera is not yet supported by Xinha."); 
    195   } 
    196   return Xinha.is_gecko || (Xinha.is_opera && Xinha.opera_version >= 9.1) || Xinha.ie_version >= 5.5; 
     191  return Xinha.is_gecko || (Xinha.is_opera && 0 && Xinha.opera_version >= 9.1) || Xinha.ie_version >= 5.5; 
    197192}; 
    198193/** Cache result of checking for browser support 
     
    219214  if ( !textarea ) 
    220215  { 
    221     throw("Tried to create Xinha without textarea specified."); 
     216    throw new Error ("Tried to create Xinha without textarea specified."); 
    222217  } 
    223218 
     
    475470Xinha.Config = function() 
    476471{ 
    477   var cfg = this; 
    478472  this.version = Xinha.version.Revision; 
    479473   
     
    704698   *  your absolute links, your external string might be some special code, say "{server_url}" 
    705699   *  an you say that the internal represenattion of that should be http://your.server/<br /> 
    706    *  Example:  <code>{'external_string' : 'internal_string'}</code><br /> 
     700   *  Example:  <code>{ 'html_string' : 'wysiwyg_string' }</code><br /> 
    707701   *  Default: <code>{}</code> (empty) 
    708702   *  @type Object 
    709703   */ 
    710   this.specialReplacements = {}; // { 'external_string' : 'internal_string' } 
     704  this.specialReplacements = {}; //{ 'html_string' : 'wysiwyg_string' } 
    711705 
    712706 /** Set to true if you want Word code to be cleaned upon Paste. This only works if  
     
    745739  this.popupURL = "popups/"; 
    746740 
    747   /** Remove given tags when rendering the HTML (these have to be a regexp, or null if this functionality is not desired)<br /> 
     741  /** RegExp allowing to remove certain HTML tags when rendering the HTML.<br /> 
     742   *  Example: remove span and font tags 
     743   *  <code> 
     744   *    xinha_config.htmlRemoveTags = /span|font/; 
     745   *  </code> 
    748746   *  Default: <code>null</code> 
    749747   *  @type RegExp|null 
     
    14281426  toolbar.className = "toolbar"; 
    14291427  toolbar.unselectable = "1"; 
     1428  toolbar.align = this.config.toolbarAlign; 
    14301429 
    14311430  Xinha.freeLater(this, '_toolBar'); 
     
    20462045    editor._browserSpecificPlugin = editor.registerPlugin('InternetExplorer'); 
    20472046  } 
    2048   else 
     2047  else if (Xinha.is_webkit) 
     2048  { 
     2049    url = _editor_url + 'modules/WebKit/WebKit.js'; 
     2050    if ( !Xinha.loadPlugins(["WebKit"], function() { editor.generate(); }, url ) ) 
     2051    {             
     2052   
     2053      return false; 
     2054    } 
     2055    editor._browserSpecificPlugin = editor.registerPlugin('WebKit'); 
     2056  } 
     2057  else if (Xinha.is_gecko) 
    20492058  { 
    20502059    url = _editor_url + 'modules/Gecko/Gecko.js'; 
     
    21182127 
    21192128  // If this is gecko, set up the paragraph handling now 
    2120   if ( Xinha.is_gecko && ( editor.config.mozParaHandler == 'best' || editor.config.mozParaHandler == 'dirty' ) ) 
    2121   { 
    2122     switch (this.config.mozParaHandler) 
    2123     { 
    2124       case 'dirty': 
    2125         var ParaHandlerPlugin = _editor_url + 'modules/Gecko/paraHandlerDirty.js'; 
    2126       break; 
    2127       default: 
    2128         var ParaHandlerPlugin = _editor_url + 'modules/Gecko/paraHandlerBest.js'; 
    2129       break; 
    2130     } 
    2131     if (  !Xinha.loadPlugins(["EnterParagraphs"], function() { editor.generate(); }, ParaHandlerPlugin ) ) 
     2129  if ( Xinha.is_gecko &&  editor.config.mozParaHandler != 'built-in' ) 
     2130  { 
     2131    if (  !Xinha.loadPlugins(["EnterParagraphs"], function() { editor.generate(); }, _editor_url + 'modules/Gecko/paraHandlerBest.js' ) ) 
    21322132    { 
    21332133      return false; 
     
    24472447   
    24482448  this.notifyOf('before_resize', {width:width, height:height}); 
     2449  this.firePluginEvent('onBeforeResize', width, height); 
    24492450  // We need to set the iframe & textarea to 100% height so that the htmlarea 
    24502451  // isn't "pushed out" when we get it's height, so we can change them later. 
     
    26282629    edcellwidth -= parseInt(this.config.panel_dimensions.right, 10);     
    26292630  } 
    2630   this._iframe.style.width = edcellwidth + 'px'; 
     2631  var iframeWidth = (this.config.iframeWidth)? parseInt(this.config.iframeWidth,10): null;  
     2632  this._iframe.style.width = (iframeWidth && iframeWidth < edcellwidth)? iframeWidth + "px": edcellwidth + "px";  
    26312633 
    26322634  this._textArea.style.height = this._iframe.style.height; 
     
    26342636      
    26352637  this.notifyOf('resize', {width:this._htmlArea.offsetWidth, height:this._htmlArea.offsetHeight}); 
     2638  this.firePluginEvent('onResize',this._htmlArea.offsetWidth, this._htmlArea.offsetWidth); 
    26362639  this._risizing = false; 
    26372640}; 
     
    26722675 
    26732676  this.notifyOf('panel_change', {'action':'add','panel':div}); 
    2674  
     2677  this.firePluginEvent('onPanelChange','add',div); 
    26752678  return div; 
    26762679}; 
     
    26912694  this._panels[panel.side].panels = clean; 
    26922695  this.notifyOf('panel_change', {'action':'remove','panel':panel}); 
     2696  this.firePluginEvent('onPanelChange','remove',panel); 
    26932697}; 
    26942698/** Hides a panel 
     
    27022706    panel.style.display = 'none'; 
    27032707    this.notifyOf('panel_change', {'action':'hide','panel':panel}); 
     2708    this.firePluginEvent('onPanelChange','hide',panel); 
    27042709    try { this._iframe.contentWindow.scrollTo(pos.x,pos.y)} catch(e) { } 
    27052710  } 
     
    27152720    panel.style.display = ''; 
    27162721    this.notifyOf('panel_change', {'action':'show','panel':panel}); 
     2722    this.firePluginEvent('onPanelChange','show',panel); 
    27172723    try { this._iframe.contentWindow.scrollTo(pos.x,pos.y)} catch(e) { } 
    27182724  } 
     
    27382744  } 
    27392745  this.notifyOf('panel_change', {'action':'multi_hide','sides':sides}); 
     2746  this.firePluginEvent('onPanelChange','multi_hide',sides); 
    27402747}; 
    27412748/** Shows the panel(s) on one or more sides 
     
    27592766  } 
    27602767  this.notifyOf('panel_change', {'action':'multi_show','sides':sides}); 
     2768  this.firePluginEvent('onPanelChange','multi_show',sides); 
    27612769}; 
    27622770/** Returns an array containig all properties that are set in an object 
     
    28662874    } catch (ex) {} 
    28672875  } 
    2868   else if ( !Xinha.is_gecko && this._doc.body.contentEditable !== false ) 
     2876  else if ( !Xinha.is_designMode && this._doc.body.contentEditable !== false ) 
    28692877  { 
    28702878    this._doc.body.contentEditable = false; 
     
    29492957    html += Xinha.addCoreCSS(); 
    29502958     
    2951     if ( editor.config.pageStyle ) 
    2952     { 
    2953       html += "<style type=\"text/css\">\n" + editor.config.pageStyle + "\n</style>"; 
    2954     } 
    2955  
    29562959    if ( typeof editor.config.pageStyleSheets !== 'undefined' ) 
    29572960    { 
     
    29652968      } 
    29662969    } 
     2970     
     2971    if ( editor.config.pageStyle ) 
     2972    { 
     2973      html += "<style type=\"text/css\">\n" + editor.config.pageStyle + "\n</style>"; 
     2974    } 
     2975     
    29672976    html += "</head>\n"; 
    2968     html += "<body>\n"; 
     2977    html += "<body" + (editor.config.bodyID ? (" id=\"" + editor.config.bodyID + "\"") : '') + ">\n"; 
    29692978    html +=   editor.inwardHtml(editor._textArea.value); 
    29702979    html += "</body>\n"; 
     
    30273036  { 
    30283037    case "textmode": 
     3038      this.firePluginEvent('onBeforeMode', 'textmode'); 
    30293039      this.setCC("iframe"); 
    30303040      html = this.outwardHtml(this.getHTML()); 
     
    30413051        this._statusBarTextMode.style.display = ""; 
    30423052      } 
     3053      this.findCC("textarea"); 
    30433054      this.notifyOf('modechange', {'mode':'text'}); 
    3044       this.findCC("textarea");  
     3055      this.firePluginEvent('onMode', 'textmode'); 
    30453056    break; 
    30463057 
    30473058    case "wysiwyg": 
     3059      this.firePluginEvent('onBeforeMode', 'wysiwyg'); 
    30483060      this.setCC("textarea"); 
    30493061      html = this.inwardHtml(this.getHTML()); 
     
    30583070        this._statusBarTextMode.style.display = "none"; 
    30593071      } 
     3072      this.findCC("iframe"); 
    30603073      this.notifyOf('modechange', {'mode':'wysiwyg'}); 
    3061       this.findCC("iframe"); 
     3074      this.firePluginEvent('onMode', 'wysiwyg'); 
     3075 
    30623076    break; 
    30633077 
     
    30673081  } 
    30683082  this._editMode = mode; 
    3069  
    3070   for ( var i in this.plugins ) 
    3071   { 
    3072     var plugin = this.plugins[i].instance; 
    3073     if ( plugin && typeof plugin.onMode == "function" ) 
    3074     { 
    3075       plugin.onMode(mode); 
    3076     } 
    3077   } 
    30783083}; 
    30793084/** Sets the HTML in fullpage mode. Actually the whole iframe document is rewritten. 
     
    32133218  var plugin = arguments[0]; 
    32143219 
    3215   // @todo : try to avoid the use of eval() 
    32163220  // We can only register plugins that have been succesfully loaded 
    3217   if ( plugin === null || typeof plugin == 'undefined' || (typeof plugin == 'string' && eval('typeof ' + plugin) == 'undefined') ) 
     3221  if ( plugin === null || typeof plugin == 'undefined' || (typeof plugin == 'string' && typeof window[plugin] == 'undefined') ) 
    32183222  { 
    32193223    return false; 
     
    32353239Xinha.prototype.registerPlugin2 = function(plugin, args) 
    32363240{ 
    3237   // @todo : try to avoid the use of eval() 
    3238   if ( typeof plugin == "string" ) 
    3239   { 
    3240     plugin = eval(plugin); 
     3241  if ( typeof plugin == "string" && typeof window[plugin] == 'function' ) 
     3242  { 
     3243    plugin = window[plugin]; 
    32413244  } 
    32423245  if ( typeof plugin == "undefined" ) 
     
    32883291   
    32893292  Xinha.setLoadingMessage (Xinha._lc("Loading plugin $plugin="+pluginName+"$")); 
    3290   // @todo : try to avoid the use of eval() 
     3293 
    32913294  // Might already be loaded 
    3292   //if ( eval('typeof ' + pluginName) != 'undefined' ) 
    3293   // @todo: try if this works to avoid the use of eval, I've been never getting here when testing 
    32943295  if ( typeof window['pluginName'] != 'undefined' ) 
    32953296  { 
     
    33343335  { 
    33353336    var p = nuPlugins.pop(); 
     3337        if (p == 'FullScreen' && !url ) continue; //prevent trying to load FullScreen plugin from the plugins folder 
    33363338    if ( typeof Xinha._pluginLoadStatus[p] == 'undefined' ) 
    33373339    { 
     
    35083510  link.type = "text/css"; 
    35093511  if (id) link.id = id; 
    3510   if (prepend) 
     3512  if (prepend && head.getElementsByTagName('link')[0]) 
    35113513  { 
    35123514    head.insertBefore(link,head.getElementsByTagName('link')[0]); 
     
    41714173    this._timerUndo = setTimeout(function() { editor._timerUndo = null; }, this.config.undoTimeout); 
    41724174  } 
    4173  
    4174   // Insert a space in certain locations, this is just to make editing a little 
    4175   // easier (to "get out of" tags), it's not essential. 
    4176   // TODO: Make this work for IE? 
    4177   // TODO: Perhaps should use a plain space character, I'm not sure. 
    4178   //  OK, I've disabled this temporarily, to be honest, I can't rightly remember what the 
    4179   //  original problem was I was trying to solve with it.  I think perhaps that EnterParagraphs 
    4180   //  might solve the problem, whatever the hell it was.  I'm going senile, I'm sure. 
    4181   // @todo : since this part is disabled since a long time, does it still need to be in the source ? 
    4182   if( 0 && Xinha.is_gecko ) 
    4183   { 
    4184     var s = this.getSelection(); 
    4185     // If the last character in the last text node of the parent tag 
    4186     // and the parent tag is not a block tag 
    4187     if ( s && s.isCollapsed && s.anchorNode && 
    4188          s.anchorNode.parentNode.tagName.toLowerCase() != 'body' && 
    4189          s.anchorNode.nodeType == 3 && s.anchorOffset == s.anchorNode.length && 
    4190          !( s.anchorNode.parentNode.nextSibling && s.anchorNode.parentNode.nextSibling.nodeType == 3 ) && 
    4191          !Xinha.isBlockElement(s.anchorNode.parentNode) ) 
    4192     { 
    4193       // Insert hair-width-space after the close tag if there isn't another text node on the other side 
    4194       // It could also work with zero-width-space (\u200B) but I don't like it so much. 
    4195       // Perhaps this won't work well in various character sets and we should use plain space (20)? 
    4196       try 
    4197       { 
    4198         s.anchorNode.parentNode.parentNode.insertBefore(this._doc.createTextNode('\t'), s.anchorNode.parentNode.nextSibling); 
    4199       } 
    4200       catch(ex) {} // Disregard 
    4201     } 
    4202   } 
    4203  
    4204   // FIXME: this should be using this.firePluginEvent('onUpdateToolbar') 
    4205   //   but we have to make sure that the plugins using that event return false 
    4206   //   if they should let the event fire on other plugins, currently the below 
    4207   //   code doesn't take the return value into account 
    4208    
    4209   // check if any plugins have registered refresh handlers 
    4210   for ( var indexPlugin in this.plugins ) 
    4211   { 
    4212     var plugin = this.plugins[indexPlugin].instance; 
    4213     if ( plugin && typeof plugin.onUpdateToolbar == "function" ) 
    4214     { 
    4215       plugin.onUpdateToolbar(); 
    4216     } 
    4217   } 
    4218  
     4175  this.firePluginEvent('onUpdateToolbar'); 
     4176}; 
     4177 
     4178/** Returns a editor object referenced by the id or name of the textarea or the textarea node itself 
     4179 * For example to retrieve the HTML of an editor made out of the textarea with the id "myTextArea" you would do<br /> 
     4180 * <code> 
     4181 *       var editor = Xinha.getEditor("myTextArea"); 
     4182 *   var html = editor.getEditorContent();  
     4183 * </code> 
     4184 * @returns {Xinha|null}  
     4185 * @param {String|DomNode} ref id or name of the textarea or the textarea node itself 
     4186 */ 
     4187Xinha.getEditor = function(ref) 
     4188  { 
     4189  for ( var i = __xinhas.length; i--; ) 
     4190    { 
     4191    var editor = __xinhas[i]; 
     4192    if ( editor && ( editor._textArea.id == ref || editor._textArea.name == ref || editor._textArea == ref ) ) 
     4193      { 
     4194      return editor; 
     4195      } 
     4196    } 
     4197  return null; 
     4198}; 
     4199/** Sometimes one wants to call a plugin method directly, e.g. from outside the editor. 
     4200 * This function returns the respective editor's instance of a plugin. 
     4201 * For example you might want to have a button to trigger SaveSubmit's save() method:<br /> 
     4202 * <code> 
     4203 *       &lt;button type="button" onclick="Xinha.getEditor('myTextArea').getPluginInstance('SaveSubmit').save();return false;"&gt;Save&lt;/button&gt; 
     4204 * </code> 
     4205 * @returns {PluginObject|null}  
     4206 * @param {String} plugin name of the plugin 
     4207 */ 
     4208Xinha.prototype.getPluginInstance = function (plugin) 
     4209  { 
     4210  if (this.plugins[plugin]) 
     4211    { 
     4212    return this.plugins[plugin].instance; 
     4213    } 
     4214  else return null; 
    42194215}; 
    42204216 
     
    48504846   
    48514847  // remove disabling of inline event handle inside Xinha iframe 
    4852   html = html.replace(/(<[^>]*on(click|mouse(over|out|up|down))=['"])if\(window\.top &amp;&amp; window\.top\.Xinha\)\{return false\}/gi,'$1'); 
     4848  html = html.replace(/(<[^>]*on(click|mouse(over|out|up|down))=['"])if\(window\.parent &amp;&amp; window\.parent\.Xinha\)\{return false\}/gi,'$1'); 
    48534849 
    48544850  // Figure out what our server name is, and how it's referenced 
     
    49114907 
    49124908  // disable inline event handle inside Xinha iframe 
    4913   html = html.replace(/(<[^>]*on(click|mouse(over|out|up|down))=["'])/gi,'$1if(window.top &amp;&amp; window.top.Xinha){return false}'); 
     4909  html = html.replace(/(<[^>]*on(click|mouse(over|out|up|down))=["'])/gi,'$1if(window.parent &amp;&amp; window.parent.Xinha){return false}'); 
    49144910   
    49154911  html = this.inwardSpecialReplacements(html); 
     
    50195015  if ( typeof this.config.stripSelfNamedAnchors != 'undefined' && this.config.stripSelfNamedAnchors ) 
    50205016  { 
    5021     var stripRe = new RegExp("((href|src|background)=\")("+Xinha.escapeStringForRegExp(document.location.href.replace(/&/g,'&amp;')) + ')([#?][^\'" ]*)', 'g'); 
     5017    var stripRe = new RegExp("((href|src|background)=\")("+Xinha.escapeStringForRegExp(unescape(document.location.href.replace(/&/g,'&amp;'))) + ')([#?][^\'" ]*)', 'g'); 
    50225018    html = html.replace(stripRe, '$1$4'); 
    50235019  } 
     
    50285024    if ( typeof this.config.baseHref != 'undefined' && this.config.baseHref !== null ) 
    50295025    { 
    5030       baseRe = new RegExp( "((href|src|background)=\")(" + Xinha.escapeStringForRegExp(this.config.baseHref) + ")", 'g' ); 
     5026      baseRe = new RegExp( "((href|src|background)=\")(" + Xinha.escapeStringForRegExp(this.config.baseHref.replace(/([^\/]\/)(?=.+\.)[^\/]*$/, "$1")) + ")", 'g' ); 
    50315027    } 
    50325028    else 
     
    51175113Xinha._object = null; 
    51185114 
     5115/** Arrays are identified as "object" in typeof calls. Adding this tag to the Array prototype allows to distinguish between the two 
     5116 */ 
     5117Array.prototype.isArray = true; 
     5118/** RegExps are identified as "object" in typeof calls. Adding this tag to the RegExp prototype allows to distinguish between the two 
     5119 */ 
     5120RegExp.prototype.isRegExp = true; 
    51195121/** function that returns a clone of the given object 
    51205122 *   
     
    51295131    return null; 
    51305132  } 
    5131  
    5132   var newObj = {}; 
    5133  
    5134   // check for array objects 
    5135   if ( obj.constructor.toString().match( /\s*function Array\(/ ) ) 
    5136   { 
    5137     newObj = obj.constructor(); 
    5138   } 
    5139  
    5140   // check for function objects (as usual, IE is fucked up) 
    5141   if ( obj.constructor.toString().match( /\s*function Function\(/ ) ) 
     5133  var newObj = (obj.isArray ) ? [] : {}; 
     5134 
     5135  // check for function and RegExp objects (as usual, IE is fucked up) 
     5136  if ( obj.constructor.toString().match( /\s*function Function\(/ ) || typeof obj == 'function' ) 
    51425137  { 
    51435138    newObj = obj; // just copy reference to it 
     5139  } 
     5140  else if (  obj.isRegExp ) 
     5141  { 
     5142    newObj = eval( obj.toString() ); //see no way without eval 
    51445143  } 
    51455144  else 
     
    53395338    Xinha._removeEvent(el, evs[i], func); 
    53405339  } 
     5340}; 
     5341 
     5342/** Adds a function that is executed in the moment the DOM is ready, but as opposed to window.onload before images etc. have been loaded 
     5343*   http://dean.edwards.name/weblog/2006/06/again/ 
     5344*  @public 
     5345*  @author Dean Edwards/Matthias Miller/ John Resig / Raimund Meyer 
     5346*  @param {Function}  func the function to be executed 
     5347*  @param {Window}    scope the window that is listened to 
     5348*/ 
     5349Xinha.addOnloadHandler = function (func, scope) 
     5350{ 
     5351 scope = scope ? scope : window; 
     5352 
     5353 var init = function () 
     5354 { 
     5355   // quit if this function has already been called 
     5356   if (arguments.callee.done) return; 
     5357   // flag this function so we don't do the same thing twice 
     5358   arguments.callee.done = true; 
     5359   // kill the timer 
     5360   if (Xinha.onloadTimer) clearInterval(Xinha.onloadTimer); 
     5361 
     5362   func(); 
     5363 } 
     5364 if (Xinha.is_ie) 
     5365 { 
     5366   scope.document.write("<sc"+"ript id=__ie_onload defer src=javascript:void(0)><\/script>"); 
     5367   var script = scope.document.getElementById("__ie_onload"); 
     5368      script.onreadystatechange = function() 
     5369   { 
     5370     if (this.readyState == "loaded") // We want this as early as possible, so I changed 'complete' to 'loaded', because otherwise it fired even after window.onload 
     5371     { 
     5372                this.parentNode.removeChild(script); 
     5373       init(); // call the onload handler 
     5374     } 
     5375   }; 
     5376 } 
     5377 else if (/applewebkit|KHTML/i.test(navigator.userAgent) ) /* Safari/WebKit/KHTML */ 
     5378 { 
     5379   Xinha.onloadTimer = scope.setInterval(function() 
     5380   { 
     5381     if (/loaded|complete/.test(scope.document.readyState)) 
     5382     { 
     5383       init(); // call the onload handler 
     5384     } 
     5385   }, 10); 
     5386 } 
     5387 else /* for Mozilla/Opera9 */ 
     5388 { 
     5389   scope.document.addEventListener("DOMContentLoaded", init, false); 
     5390 
     5391 } 
     5392 Xinha._addEvent(scope, 'load', init); // incase anything went wrong 
    53415393}; 
    53425394 
     
    57595811{ 
    57605812    var coreCSS =  
    5761     "<style id=\"XinhaInternalCSS\" type=\"text/css\">" 
     5813    "<style title=\"XinhaInternalCSS\" type=\"text/css\">" 
    57625814    + ".htmtableborders, .htmtableborders td, .htmtableborders th {border : 1px dashed lightgrey ! important;}\n" 
    57635815    + "html, body { border: 0px; } \n" 
    57645816    + "body { background-color: #ffffff; } \n"  
     5817        + "img, hr { cursor: default } \n"   
    57655818    +"</style>\n"; 
    57665819     
     
    57775830      return coreCSS; 
    57785831    } 
     5832} 
     5833/** Allows plugins to add a stylesheet for internal use to the edited document that won't appear in the HTML output 
     5834 *   
     5835 *  @see Xinha#stripCoreCSS 
     5836 *  @param {String} stylesheet URL of the styleshett to be added 
     5837 */ 
     5838Xinha.prototype.addEditorStylesheet = function (stylesheet) 
     5839{ 
     5840    var style = this._doc.createElement("link"); 
     5841    style.rel = 'stylesheet'; 
     5842    style.type = 'text/css'; 
     5843    style.title = 'XinhaInternalCSS'; 
     5844        style.href = stylesheet; 
     5845    this._doc.getElementsByTagName("HEAD")[0].appendChild(style); 
    57795846} 
    57805847/** Remove internal styles 
     
    57875854Xinha.stripCoreCSS = function(html) 
    57885855{ 
    5789   return html.replace(/<style[^>]+id="XinhaInternalCSS"(.|\n)*?<\/style>/i, '');  
     5856  return html.replace(/<style[^>]+title="XinhaInternalCSS"(.|\n)*?<\/style>/ig, '').replace(/<link[^>]+title="XinhaInternalCSS"(.|\n)*?>/ig, '');  
    57905857} 
    57915858/** Removes one CSS class (that is one of possible more parts  
     
    60466113// Unless somebody already has, make a little function to debug things 
    60476114 
    6048 if ( typeof dump == 'undefined' ) 
    6049 { 
    6050   function dump(o) 
     6115if (typeof dumpValues == 'undefined')  
     6116{ 
     6117  function dumpValues(o) 
    60516118  { 
    60526119    var s = ''; 
    60536120    for ( var prop in o ) 
    60546121    { 
     6122      if (window.console && typeof window.console.log == 'function')  
     6123      { 
     6124        if (typeof console.firebug != 'undefined')  
     6125          console.log(o); 
     6126        else  
     6127          console.log(prop + ' = ' + o[prop] + '\n'); 
     6128      } 
     6129      else  
    60556130      s += prop + ' = ' + o[prop] + '\n'; 
    60566131    } 
     6132    if (s)  
     6133    { 
    60576134    var x = window.open("", "debugger"); 
    60586135    x.document.write('<pre>' + s + '</pre>'); 
    60596136  } 
     6137} 
    60606138} 
    60616139if ( !Array.prototype.contains ) 
     
    64226500 
    64236501  var editors = {}; 
     6502  var textarea; 
    64246503  for ( var x = 0; x < editor_names.length; x++ ) 
    64256504  { 
    6426     if ( typeof editor_names[x] != 'object' ) 
    6427     { 
    6428       var textarea = Xinha.getElementById('textarea', editor_names[x] ); 
    6429       if ( !textarea ) continue; 
     6505    if ( typeof editor_names[x] == 'string' ) // the regular case, an id of a textarea 
     6506    { 
     6507      textarea = Xinha.getElementById('textarea', editor_names[x] ); 
     6508      if (!textarea) // the id may be specified for a textarea that is maybe on another page; we simply skip it and go on 
     6509      { 
     6510        editor_names[x] = null; 
     6511        continue; 
     6512    } 
     6513    } 
     6514         // make it possible to pass a reference instead of an id, for example from  document.getElementsByTagName('textarea') 
     6515    else if ( typeof editor_names[x] == 'object' && editor_names[x].tagName && editor_names[x].tagName.toLowerCase() == 'textarea' ) 
     6516    { 
     6517      textarea =  editor_names[x]; 
     6518      if ( !textarea.id ) // we'd like to have the textarea have an id 
     6519      { 
     6520        textarea.id = 'xinha_id_' + x; 
     6521      }  
    64306522    } 
    64316523    var editor = new Xinha(textarea, Xinha.cloneObject(default_config)); 
    64326524    editor.registerPlugins(plugin_names); 
    6433     editors[editor_names[x]] = editor; 
     6525    editors[textarea.id] = editor; 
    64346526  } 
    64356527  return editors; 
     
    67226814  for (var i=0;i<xinha_editors.length;i++) 
    67236815  { 
     6816     if (!document.getElementById(xinha_editors[i])) continue; 
    67246817     Xinha.loadingMessages.push(Xinha.createLoadingMessage(Xinha.getElementById('textarea', xinha_editors[i]))); 
    67256818  } 
     
    67386831  loading_message.className = "loading"; 
    67396832   
    6740   loading_message.style.left = Xinha.findPosX(textarea) +  'px'; 
     6833  loading_message.style.left = (Xinha.findPosX(textarea) + textarea.offsetWidth / 2) - 106 +  'px'; 
    67416834  loading_message.style.top = (Xinha.findPosY(textarea) + textarea.offsetHeight / 2) - 50 +  'px'; 
    6742   loading_message.style.width =  textarea.offsetWidth +  'px'; 
    6743    
    67446835  // main static message 
    67456836  var loading_main = document.createElement("div"); 
     
    67516842  loading_sub.className = "loading_sub"; 
    67526843  loading_sub.id = "loading_sub_" + textarea.id; 
    6753   text = text ? text : Xinha._lc("Constructing object"); 
     6844  text = text ? text : Xinha._lc("Loading Core"); 
    67546845  loading_sub.appendChild(document.createTextNode(text)); 
    67556846  loading_message.appendChild(loading_main); 
     
    67956886  for (var i=0;i< xinha_editors.length;i++) 
    67966887  { 
     6888     if (!document.getElementById(xinha_editors[i])) continue; 
    67976889     var main = document.getElementById("loading_" + document.getElementById(xinha_editors[i]).id); 
    67986890     main.parentNode.removeChild(main); 
     
    69997091  try 
    70007092  {     
    7001     if (typeof XMLHttpRequest == "function") 
     7093    if (typeof XMLHttpRequest != "undefined" && typeof XMLHttpRequest.constructor == 'function' ) // Safari's XMLHttpRequest is typeof object 
    70027094    { 
    70037095          return new XMLHttpRequest(); 
  • branches/ray/XinhaLoader.js

    r890 r975  
    11var Xinha = {}; 
     2 
     3_editor_url = _editor_url.replace(/\x2f*$/, '/'); 
     4 
    25Xinha.agt       = navigator.userAgent.toLowerCase(); 
    36Xinha.is_ie    = ((Xinha.agt.indexOf("msie") != -1) && (Xinha.agt.indexOf("opera") == -1)); 
     
    58Xinha.is_opera  = (Xinha.agt.indexOf("opera") != -1); 
    69Xinha.is_khtml  = (Xinha.agt.indexOf("khtml") != -1); 
     10Xinha.is_webkit  = (Xinha.agt.indexOf("applewebkit") != -1); 
    711Xinha.is_safari  = (Xinha.agt.indexOf("safari") != -1); 
    812Xinha.opera_version = navigator.appVersion.substring(0, navigator.appVersion.indexOf(" "))*1; 
     
    1317Xinha.isRunLocally = document.URL.toLowerCase().search(/^file:/) != -1; 
    1418Xinha.is_designMode = (typeof document.designMode != 'undefined' && !Xinha.is_ie); // IE has designMode, but we're not using it 
    15 Xinha.isSupportedBrowser = Xinha.is_gecko || (Xinha.is_opera && Xinha.opera_version >= 9.1) || Xinha.ie_version >= 5.5; 
     19Xinha.isSupportedBrowser = Xinha.is_gecko || (Xinha.is_opera && Xinha.opera_version >= 9.1) || Xinha.ie_version >= 5.5 || Xinha.is_safari; 
    1620 
    1721Xinha.loadPlugins = function(plugins, callbackIfNotReady) 
     
    108112  for (var i=0;i<xinha_editors.length;i++) 
    109113  { 
    110      Xinha.loadingMessages.push(Xinha.createLoadingMessage(document.getElementById(xinha_editors[i]))); 
     114    if (!document.getElementById(xinha_editors[i])) 
     115    { 
     116          continue; 
     117    } 
     118    Xinha.loadingMessages.push(Xinha.createLoadingMessage(document.getElementById(xinha_editors[i]))); 
    111119  } 
    112120} 
     
    170178  } 
    171179} 
     180Xinha.addOnloadHandler = function (func) 
     181{ 
     182  // Dean Edwards/Matthias Miller/John Resig  
     183  // http://dean.edwards.name/weblog/2006/06/again/ 
     184   
     185  var init = function () 
     186  { 
     187    // quit if this function has already been called 
     188    if (arguments.callee.done) return; 
     189    // flag this function so we don't do the same thing twice 
     190    arguments.callee.done = true; 
     191    // kill the timer 
     192    if (Xinha.onloadTimer) clearInterval(Xinha.onloadTimer); 
     193     
     194    func.call(); 
     195  } 
     196  if (Xinha.is_ie) 
     197  { 
     198    document.write("<sc"+"ript id=__ie_onload defer src=javascript:void(0)><\/script>"); 
     199    var script = document.getElementById("__ie_onload"); 
     200    script.onreadystatechange = function() 
     201    { 
     202      if (this.readyState == "loaded") 
     203      { 
     204        init(); // call the onload handler 
     205      } 
     206    }; 
     207  } 
     208  else if (/WebKit/i.test(navigator.userAgent)) 
     209  { 
     210    Xinha.onloadTimer = setInterval(function() 
     211    { 
     212      if (/loaded|complete/.test(document.readyState)) 
     213      { 
     214        init(); // call the onload handler 
     215      } 
     216    }, 10); 
     217  } 
     218  else /* for Mozilla/Opera9 */ 
     219  { 
     220    document.addEventListener("DOMContentLoaded", init, false);   
     221  } 
     222} 
  • branches/ray/contrib/compress.php

    r911 r975  
    11<? 
    22die("Run this script to batch-compress the current Xinha snapshot. To run the script, open the file and uncomment the die() command"); 
    3  
     3$repository_url = 'http://svn.xinha.webfactional.com/trunk'; 
     4$version =''; 
     5$date = date('r'); 
    46error_reporting(E_ALL); 
    57ini_set('show_errors',1); 
    68 
    79$return = array(); 
    8 function scan($dir, $durl = '',$min_size="3000") 
     10function scan($dir, $durl = '',$min_size="0") 
    911{ 
    1012        static $seen = array(); 
     
    4850scan("../"); 
    4951$cwd = getcwd(); 
     52 
     53$root_dir = realpath($cwd.'/..'); 
     54 
    5055print "Processing ".count($return)." files<br />"; 
    5156 
    52 $prefix = "/* This compressed file is part of Xinha. For uncomressed sources, forum, and bug reports, go to xinha.org */"; 
     57$prefix = "/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */"; 
     58if ($version) $prefix .= "\n/* This file is part of version $version released $date */"; 
     59 
    5360$core_prefix = ' 
    5461  /*-------------------------------------------------------------------------- 
     
    5865    --  BSD license)  please read license.txt in this package for details. 
    5966    -- 
    60     --  Copyright (c) 2005-2007 Xinha Developer Team and contributors 
     67    --  Copyright (c) 2005-2008 Xinha Developer Team and contributors 
    6168    --   
    6269    --  Xinha was originally based on work by Mihai Bazon which is: 
     
    7178        print "Processed $file<br />"; 
    7279        flush(); 
     80        $file_url = $repository_url.str_replace($root_dir,'',$file); 
     81 
    7382        copy($file,$file."_uncompr.js"); 
    74  
    75         exec("echo \"".(preg_match('/XinhaCore.js$/',$file) ? $prefix.$core_prefix : $prefix)."\" > $file && java -jar ${cwd}/dojo_js_compressor.jar -c ${file}_uncompr.js >> $file 2>&1"); 
     83         
     84        $file_prefix = $prefix."\n/* The URL of the most recent version of this file is $file_url */"; 
     85         
     86        exec("echo \"".(preg_match('/XinhaCore.js$/',$file) ? $file_prefix.$core_prefix : $file_prefix)."\" > $file && java -jar ${cwd}/dojo_js_compressor.jar -c ${file}_uncompr.js >> $file 2>&1"); 
    7687        if (preg_match('/js: ".*?", line \d+:/',file_get_contents($file))) 
    7788        { 
     
    8394                unlink($file."_uncompr.js"); 
    8495        } 
     96 
    8597} 
    8698print "Operation complete." 
  • branches/ray/contrib/php-xinha.php

    r761 r975  
    2424   */ 
    2525       
    26   function xinha_pass_to_php_backend($Data, $KeyLocation = 'Xinha:BackendKey') 
     26  function xinha_pass_to_php_backend($Data, $KeyLocation = 'Xinha:BackendKey', $ReturnPHP = FALSE) 
    2727  { 
    2828    
     
    5858    $backend_data[session_name()] = session_id(); 
    5959     
    60     echo 'backend_data = ' . xinha_to_js($backend_data) . "; \n"; 
    61      
     60    if($ReturnPHP) 
     61    {       
     62      return array('backend_data' => $backend_data);       
     63    } 
     64    else 
     65    {       
     66      echo 'backend_data = ' . xinha_to_js($backend_data) . "; \n";   
     67    }                 
    6268  }   
    6369    
  • branches/ray/examples/Newbie.html

    r892 r975  
    1111    _editor_skin = "silva";   // If you want use skin, add the name here 
    1212  </script> 
    13   <script type="text/javascript" src="../XinhaCore.js"></script> 
     13  <script type="text/javascript" src="../XinhaLoader.js"></script> 
    1414  <script type="text/javascript" src="XinhaConfig.js"></script> 
    1515</head> 
     
    1818<form action=""> 
    1919<div> 
    20 <textarea id="myTextArea" name="myTextArea" rows="10" cols="50" style="width: 100%"></textarea> 
     20<textarea id="myTextArea" name="myTextArea" rows="25" cols="50" style="width: 100%"></textarea> 
    2121</div> 
    2222</form> 
  • branches/ray/examples/XinhaConfig.js

    r892 r975  
    1616   * current page will just be skipped. 
    1717   ************************************************************************/ 
    18    
     18 
    1919  xinha_editors = xinha_editors ? xinha_editors : 
    2020  [ 
     
    3838  [ 
    3939   'CharacterMap', 
    40    'ContextMenu', 
    41    'ListType', 
     40   'SmartReplace', 
    4241   'Stylist', 
    4342   'Linker', 
     
    6463 
    6564   xinha_config = xinha_config ? xinha_config() : new Xinha.Config(); 
    66     
    6765         
    6866   // To adjust the styling inside the editor, we can load an external stylesheet like this 
     
    109107} 
    110108 
    111 Xinha._addEvent(window,'load', xinha_init); // this executes the xinha_init function on page load  
    112                                             // and does not interfere with window.onload properties set by other scripts 
     109Xinha.addOnloadHandler(xinha_init); // this executes the xinha_init function on page load 
     110                                     // and does not interfere with window.onload properties set by other scripts 
     111 
  • branches/ray/examples/simple_example.html

    r761 r975  
    55<title>Simple example of Xinha</title> 
    66<script type="text/javascript"> 
    7 /************************************************************************ 
    8  * Please refer to http://xinha.python-hosting.com/wiki/NewbieGuide 
    9  ************************************************************************ 
    10  * You must set _editor_url to the URL (including trailing slash) where 
    11  * where xinha is installed, it's highly recommended to use an absolute URL 
    12  *  eg: _editor_url = "/path/to/xinha/"; 
    13  * You may try a relative URL if you wish] 
    14  *  eg: _editor_url = "../";   
    15  * in this example we do a little regular expression to find the absolute path. 
    16  ************************************************************************/ 
    177var _editor_url  = document.location.href.replace(/examples\/simple_example\.html.*/, '') 
    18 // And the language we need to use in the editor. 
     8 
    199var _editor_lang = "en"; 
    2010</script> 
     
    2212<script type="text/javascript" src="../XinhaCore.js"></script> 
    2313<script type="text/javascript"> 
    24 /************************************************************************ 
    25  * Plugins you will be using in the editors on this page. 
    26  * List all the plugins you will need, even if not all the editors will 
    27  * use all the plugins. 
    28  ************************************************************************ 
    29  * Please refer to http://xinha.python-hosting.com/wiki/Plugins for the 
    30  * list of availables plugins 
    31  ************************************************************************/ 
     14 
    3215var xinha_plugins = 
    3316[ 
    34  'CharacterMap', 
    35  'ContextMenu', 
    36  'FullScreen', 
    37  'ListType', 
    38  'SpellChecker', 
    39  'Stylist', 
    40  'SuperClean', 
    41  'TableOperations' 
     17 'Linker' 
    4218]; 
    43 /************************************************************************ 
    44  * Names of the textareas you will be turning into editors 
    45  ************************************************************************/ 
    4619var xinha_editors = 
    4720[ 
     
    4922  'anotherOne' 
    5023]; 
    51 /************************************************************************ 
    52  * Initialisation function 
    53  ************************************************************************/ 
     24 
    5425function xinha_init() 
    5526{ 
    56   // THIS BIT OF JAVASCRIPT LOADS THE PLUGINS, NO TOUCHING  :) 
    5727  if(!Xinha.loadPlugins(xinha_plugins, xinha_init)) return; 
    58   /************************************************************************* 
    59    * We create a default configuration to be used by all the editors. 
    60    * If you wish to configure some of the editors differently this will be 
    61    * done later after editors are initiated. 
    62    ************************************************************************ 
    63    * Please refer to http://xinha.python-hosting.com/wiki/Documentation/Customise 
    64    * for the configuration parameters 
    65    ************************************************************************/ 
     28 
    6629  var xinha_config = new Xinha.Config(); 
    67   /************************************************************************ 
    68    * We first create editors for the textareas. 
    69    * You can do this in two ways, either 
    70    * 
    71    *   xinha_editors   = Xinha.makeEditors(xinha_editors, xinha_config, xinha_plugins); 
    72    * 
    73    * if you want all the editor objects to use the same set of plugins, OR; 
    74    * 
    75    *   xinha_editors = Xinha.makeEditors(xinha_editors, xinha_config); 
    76    *   xinha_editors['myTextArea'].registerPlugins(['Stylist','FullScreen']); 
    77    *   xinha_editors['anotherOne'].registerPlugins(['CSS','SuperClean']); 
    78    * 
    79    * if you want to use a different set of plugins for one or more of the 
    80    * editors. 
    81    ************************************************************************/ 
     30 
    8231  xinha_editors = Xinha.makeEditors(xinha_editors, xinha_config, xinha_plugins); 
    83   /************************************************************************ 
    84    * If you want to change the configuration variables of any of the 
    85    * editors,  this is the place to do that, for example you might want to 
    86    * change the width and height of one of the editors, like this... 
    87    ************************************************************************/ 
    88   xinha_editors.myTextArea.config.width = '640px'; 
    89   xinha_editors.myTextArea.config.height = '480px'; 
    90   /************************************************************************ 
    91    * Or remove the statusbar on the other one, like this... 
    92    * For every possible configuration, please refer to 
    93    * http://xinha.python-hosting.com/wiki/Documentation/ConfigVariablesList 
    94    ************************************************************************/ 
    95   xinha_editors.anotherOne.config.statusBar = false; 
    96   /************************************************************************ 
    97    * Finally we "start" the editors, this turns the textareas into 
    98    * Xinha editors. 
    99    ************************************************************************/ 
     32 
    10033  Xinha.startEditors(xinha_editors); 
    10134} 
    102 window.onload = xinha_init; 
     35Xinha.addOnloadHandler(xinha_init); 
    10336</script> 
    104 <link type="text/css" rel="stylesheet" title="blue-look" href="../skins/blue-look/skin.css"> 
    105 <link type="text/css" rel="alternate stylesheet" title="green-look" href="../skins/green-look/skin.css"> 
    106 <link type="text/css" rel="alternate stylesheet" title="xp-blue" href="../skins/xp-blue/skin.css"> 
    107 <link type="text/css" rel="alternate stylesheet" title="xp-green" href="../skins/xp-green/skin.css"> 
    108 <link type="text/css" rel="alternate stylesheet" title="inditreuse" href="../skins/inditreuse/skin.css"> 
    109 <link type="text/css" rel="alternate stylesheet" title="blue-metallic" href="../skins/blue-metallic/skin.css"> 
     37 
    11038</head> 
    11139 
    11240<body> 
    11341 
    114 <form onsubmit="alert(this.myTextArea.value); alert(this.anotherOne.value); return false;"> 
    115 <textarea id="myTextArea" name="myTextArea" rows="10" cols="80" style="width:100%"> 
     42<form onsubmit="alert(this.myTextArea.value); return false;"> 
     43<textarea id="myTextArea" name="myTextArea" rows="25" cols="80"> 
    11644&lt;p&gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 
    11745Aliquam et tellus vitae justo varius placerat. Suspendisse iaculis 
     
    12250Curabitur pharetra bibendum lectus.&lt;/p&gt; 
    12351</textarea> 
    124 <textarea id="anotherOne" name="anotherOne" rows="10" cols="80" style="width:100%"> 
    125 &lt;ul&gt; 
    126 &lt;li&gt; Phasellus et massa sed diam viverra semper.  &lt;/li&gt; 
    127 &lt;li&gt; Mauris tincidunt felis in odio.              &lt;/li&gt; 
    128 &lt;li&gt; Nulla placerat nunc ut pede.                 &lt;/li&gt; 
    129 &lt;li&gt; Vivamus ultrices mi sit amet urna.           &lt;/li&gt; 
    130 &lt;li&gt; Quisque sed augue quis nunc laoreet volutpat.&lt;/li&gt; 
    131 &lt;li&gt; Nunc sit amet metus in tortor semper mattis. &lt;/li&gt; 
    132 &lt;/ul&gt; 
    133 </textarea> 
    134 <input type="submit"> 
    135 </form> 
    13652 
    13753</body> 
  • branches/ray/examples/testbed.html

    r911 r975  
    1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     1<?xml version="1.0" encoding="UTF-8"?> 
     2<!DOCTYPE html 
     3     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    24    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    35<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
     
    3032    // in this example we do a little regular expression to find the absolute path. 
    3133    _editor_url  = document.location.href.replace(/examples\/.*/, '') 
    32     _editor_lang = "de";      // And the language we need to use in the editor. 
     34    _editor_lang = "en";      // And the language we need to use in the editor. 
    3335  </script> 
    3436 
    3537  <!-- Load up the actual editor core --> 
    36   <script type="text/javascript" src="../XinhaLoader.js"></script> 
     38  <script type="text/javascript" src="../XinhaCore.js"></script> 
    3739 
    3840  <script type="text/javascript"> 
     
    4648    { 
    4749      /** STEP 1 *************************************************************** 
    48        * First, specify the textareas that shall be turned into Xinhas.  
    49        * For each one add the respective id to the xinha_editors array. 
     50       * First, what are the plugins you will be using in the editors on this 
     51       * page.  List all the plugins you will need, even if not all the editors 
     52       * will use all the plugins. 
    5053       ************************************************************************/ 
    5154       
    52       xinha_editors = xinha_editors ? xinha_editors : 
     55      xinha_plugins = xinha_plugins ? xinha_plugins : 
    5356      [ 
    54         'myTextArea' 
     57        'CharacterMap', 'SpellChecker', 'Linker', 'SmartReplace' 
    5558      ]; 
     59             // THIS BIT OF JAVASCRIPT LOADS THE PLUGINS, NO TOUCHING  :) 
     60             if(!Xinha.loadPlugins(xinha_plugins, xinha_init)) return; 
    5661     
    5762      /** STEP 2 *************************************************************** 
    58        * Now, what are the plugins you will be using in the editors on this 
    59        * page. List all the plugins you will need, even if not all the editors 
    60        * will use all the plugins. 
     63       * Now, what are the names of the textareas you will be turning into 
     64       * editors? 
    6165       ************************************************************************/ 
    62        xinha_plugins = xinha_plugins ? xinha_plugins : 
     66 
     67      xinha_editors = xinha_editors ? xinha_editors : 
    6368       [ 
    64          'CharacterMap',  
    65          'Linker', 
    66          'Stylist', 
    67          'SmartReplace', 
    68                  'InsertSnippet' 
     69        'myTextArea' 
    6970       ]; 
    70              // THIS BIT OF JAVASCRIPT LOADS THE PLUGINS, NO TOUCHING  :) 
    71              if(!Xinha.loadPlugins(xinha_plugins, xinha_init)) return; 
    7271              
    7372      /** STEP 3 *************************************************************** 
     
    8584 
    8685       xinha_config = xinha_config ? xinha_config : new Xinha.Config(); 
    87     
    88         xinha_config.stylistLoadStylesheet(document.location.href.replace(/[^\/]*\.html/, 'stylist.css')); 
    89           
    90       //xinha_config.CharacterMap.mode = 'panel'; 
    91 //xinha_config.stylistLoadStylesheet(document.location.href.replace(/[^\/]*\.html/, 'stylist.css')); 
    92  
     86       xinha_config.fullPage = true; 
     87       xinha_config.CharacterMap.mode = 'panel'; 
    9388/* 
    9489       // We can load an external stylesheet like this - NOTE : YOU MUST GIVE AN ABSOLUTE URL 
     
    113108       * 
    114109       *   xinha_editors = Xinha.makeEditors(xinha_editors, xinha_config); 
    115        *   xinha_editors['myTextArea'].registerPlugins(['Stylist','FullScreen']); 
     110       *   xinha_editors['myTextArea'].registerPlugins(['Stylist']); 
    116111       *   xinha_editors['anotherOne'].registerPlugins(['CSS','SuperClean']); 
    117112       * 
     
    143138 
    144139    window.onload   = xinha_init; 
    145     // window.onunload = Xinha.collectGarbageForIE; 
    146140  </script> 
    147141</head> 
     
    149143<body> 
    150144 
    151   <form action="" id="editors_here" onsubmit="alert(this.myTextArea.value);"> 
    152 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 
    153   <textarea id="myTextArea" name="myTextArea" style="width:100%;height:300px;"> 
    154     <table cellspacing="1" cellpadding="1" border="1" style="width: 100%;"><tbody><tr><td style="width: 25%;">&nbsp;</td><td style="width: 25%;">&nbsp;</td><td style="width: 25%;">&nbsp;</td><td style="width: 25%;">&nbsp;</td></tr><tr><td style="width: 25%;">&nbsp;</td><td style="width: 25%;">&nbsp;</td><td style="width: 25%;">&nbsp;</td><td style="width: 25%;">&nbsp;</td></tr></tbody></table><br /></textarea> 
     145  <form action="javascript:void(0);" id="editors_here" onsubmit="alert(this.myTextArea.value);"> 
     146 <div> 
     147     <textarea id="myTextArea" name="myTextArea" style="width:100%;height:320px;"> 
     148      &lt;html&gt; 
     149      &lt;head&gt; 
     150        &lt;title&gt;Hello&lt;/title&gt; 
     151        &lt;style type="text/css"&gt; 
     152          li { color:red; } 
     153        &lt;/style&gt; 
     154      &lt;/head&gt; 
     155      &lt;body&gt;&lt;span style="color:purple"&gt; 
     156      &lt;img src="../images/xinha_logo.gif" usemap="#m1"&gt; 
     157      &lt;map name="m1"&gt; 
     158      &lt;area shape="rect" coords="137,101,255,124" href="http://www.mydomain.com"&gt; 
     159      &lt;/map&gt; 
    155160 
    156 <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 
     161      &lt;p&gt; 
     162        Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 
     163        Aliquam et tellus vitae justo varius placerat. Suspendisse iaculis 
     164        velit semper dolor. Donec gravida tincidunt mi. Curabitur tristique 
     165        ante elementum turpis.  &lt;span style="color:green">Aliquam &lt;/span> nisl. Nulla posuere neque non 
     166        tellus. Morbi vel nibh. &lt;font face="Arial">&lt;font color="#009933">Cum  sociis natoque&lt;/font>&lt;/font&gt; penatibus et magnis dis 
     167        parturient montes, nascetur ridiculus mus. Nam nec wisi. In wisi. 
     168        Curabitur pharetra bibendum lectus. 
     169      &lt;/p&gt; 
     170 
     171      &lt;ul&gt; 
     172        &lt;li style="color:green"&gt; Phasellus et massa sed diam viverra semper.  &lt;/li&gt; 
     173        &lt;li&gt; Mauris tincidunt felis in odio.              &lt;/li&gt; 
     174        &lt;li&gt; Nulla placerat nunc ut pede.                 &lt;/li&gt; 
     175        &lt;li&gt; Vivamus ultrices mi sit amet urna.           &lt;/li&gt; 
     176        &lt;li&gt; Quisque sed augue quis nunc laoreet volutpat.&lt;/li&gt; 
     177        &lt;li&gt; Nunc sit amet metus in tortor semper mattis. &lt;/li&gt; 
     178      &lt;/ul&gt; 
     179      &lt;/span&gt;&lt;/body&gt; 
     180      &lt;/html&gt; 
     181    </textarea> 
     182 
     183    <input type="submit" /> <input type="reset" /> 
     184</div> 
    157185  </form> 
    158   <script language="javascript"> 
     186  <script type="text/javascript"> 
    159187    document.write(document.compatMode); 
    160188  </script> 
     189<div> 
    161190  <a href="#" onclick="xinha_editors.myTextArea.hidePanels();">Hide</a> 
    162191  <a href="#" onclick="xinha_editors.myTextArea.showPanels();">Show</a> 
     192</div> 
     193 
    163194</body> 
    164195</html> 
  • branches/ray/lang/es.js

    r60 r975  
    11// I18N constants 
    2  
    3 // LANG: "es", ENCODING: UTF-8 
    4  
     2// LANG: "de", ENCODING: UTF-8 
    53{ 
    64  "Bold": "Negrita", 
     
    86  "Underline": "Subrayado", 
    97  "Strikethrough": "Tachado", 
    10   "Subscript": "Sub?ndice", 
    11   "Superscript": "Super?ndice", 
    12   "Justify Left": "Alinear a la Izquierda", 
    13   "Justify Center": "Centrar", 
    14   "Justify Right": "Alinear a la Derecha", 
     8  "Subscript": "Subíndice", 
     9  "Superscript": "Superíndice", 
     10  "Justify Left": "Alinear a la izquierda", 
     11  "Justify Center": "Alinear al centro", 
     12  "Justify Right": "Alinear a la derecha", 
    1513  "Justify Full": "Justificar", 
    16   "Ordered List": "Lista Ordenada", 
    17   "Bulleted List": "Lista No Ordenada", 
    18   "Decrease Indent": "Aumentar Sangr?a", 
    19   "Increase Indent": "Disminuir Sangr?a", 
    20   "Font Color": "Color del Texto", 
    21   "Background Color": "Color del Fondo", 
    22   "Horizontal Rule": "L?nea Horizontal", 
    23   "Insert Web Link": "Insertar Enlace", 
    24   "Insert/Modify Image": "Insertar Imagen", 
    25   "Insert Table": "Insertar Tabla", 
    26   "Toggle HTML Source": "Ver Documento en HTML", 
    27   "Enlarge Editor": "Ampliar Editor", 
    28   "About this editor": "Acerca del Editor", 
     14  "Ordered List": "Lista numerada", 
     15  "Bulleted List": "Lista no numerada", 
     16  "Decrease Indent": "Reducir sangría", 
     17  "Increase Indent": "Aumentar sangría", 
     18  "Font Color": "Color de la fuente", 
     19  "Background Color": "Color de fondo", 
     20  "Horizontal Rule": "Regla horizontal", 
     21  "Insert Web Link": "Insertar enlace web", 
     22  "Insert/Modify Image": "Insertar/modificar imagen", 
     23  "Insert Table": "Insertar una tabla", 
     24  "Toggle HTML Source": "Ver HTML", 
     25  "Enlarge Editor": "Editor a pantalla completa", 
     26  "About this editor": "Sobre este Editor", 
    2927  "Help using editor": "Ayuda", 
    30   "Current style": "Estilo Actual", 
     28  "Current style": "Estilo actual", 
    3129  "Undoes your last action": "Deshacer", 
    3230  "Redoes your last action": "Rehacer", 
    33   "Cut selection": "Cortar selecci?n", 
    34   "Copy selection": "Copiar selecci?n", 
     31  "Cut selection": "Cortar", 
     32  "Copy selection": "Copiar", 
    3533  "Paste from clipboard": "Pegar desde el portapapeles", 
     34  "Direction left to right": "Dirección de izquierda a derecha", 
     35  "Direction right to left": "Dirección de derecha a izquierda", 
     36  "Remove formatting": "Borrar formato", 
     37  "Select all": "Seleccionar todo", 
     38  "Print document": "Imprimir documento", 
     39  "Clear MSOffice tags": "Borrar etiquetas de MSOffice", 
     40  "Clear Inline Font Specifications": "Borrar las etiquetas de fuente", 
     41  "Would you like to clear font typefaces?": "¿Desea eliminar las definiciaones de tipo de fuente?", 
     42  "Would you like to clear font sizes?": "¿Desea eliminar las definiciones de tamaño de fuente?", 
     43  "Would you like to clear font colours?": "¿Desea eliminar las definiciones de color de fuente?", 
     44  "Split Block": "Dividir el bloque", 
     45  "Toggle Borders": "Añadir/Quitar bordes", 
     46  "Save as": "Guardar como", 
     47  "Insert/Overwrite": "Insertar/Sobreescribir", 
     48  "&mdash; format &mdash;": "&mdash; formato &mdash;", 
     49  "&mdash; font &mdash;": "&mdash; fuente &mdash;", 
     50  "&mdash; size &mdash;": "&mdash; tamaño &mdash;", 
     51  "Heading 1": "Cabecera 1", 
     52  "Heading 2": "Cabecera 2", 
     53  "Heading 3": "Cabecera 3", 
     54  "Heading 4": "Cabecera 4", 
     55  "Heading 5": "Cabecera 5", 
     56  "Heading 6": "Cabecera 6", 
     57  "Normal": "Normal", 
     58  "Address": "Dirección", 
     59  "Formatted": "Formateado", 
     60 
     61  //dialogs 
    3662  "OK": "Aceptar", 
    3763  "Cancel": "Cancelar", 
    3864  "Path": "Ruta", 
    39   "You are in TEXT MODE.  Use the [<>] button to switch back to WYSIWYG.": "Esta en modo TEXTO. Use el boton [<>] para cambiar a WYSIWIG" 
     65  "You are in TEXT MODE.  Use the [<>] button to switch back to WYSIWYG.": "Se encuentra en MODO TEXTO. Use el botón [<>] para cambiar de nuevo al modo WYSIWYG", 
     66   "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "El botón de pegar no funciona en los navegadores de Mozilla por motivos de seguridad. Presione CTRL-V en su teclado para pegarlo directamente", 
     67 
     68  "You need to select some text before create a link": "Necesita seleccionar algún texto antes de crear un link", 
     69  "Your Document is not well formed. Check JavaScript console for details.": "Su documento no está bien formado. Compruebe la consola de JavaScript para obtener más detalles", 
     70 
     71  "Alignment:": "Alineación:", 
     72  "Not set": "No definido", 
     73  "Left": "Izquierda", 
     74  "Right": "Derecha", 
     75  "Texttop": "Texto Superior", 
     76  "Absmiddle": "Medio Absoluto", 
     77  "Baseline": "Línea base", 
     78  "Absbottom": "Inferior absoluto", 
     79  "Bottom": "Inferior", 
     80  "Middle": "Medio", 
     81  "Top": "Superior", 
     82 
     83  "Layout": "Distribución", 
     84  "Spacing": "Espaciado", 
     85  "Horizontal:": "horizontal:", 
     86  "Horizontal padding": "Relleno horizontal", 
     87  "Vertical:": "Vertical:", 
     88  "Vertical padding": "Relleno Vertical", 
     89  "Border thickness:": "Tamaño del borde:", 
     90  "Leave empty for no border": "Vacío si no desea ningún borde", 
     91 
     92  //Insert Link 
     93  "Insert/Modify Link": "Insertar/Modificar un enlace", 
     94  "None (use implicit)": "Vacío ( usar implícito )", 
     95  "New window (_blank)": "Nueva ventana (_blank)", 
     96  "Same frame (_self)": "Mismo marco (_self)", 
     97  "Top frame (_top)": "Marco superior (_top)", 
     98  "Other": "Otro", 
     99  "Target:": "Destino:", 
     100  "Title (tooltip):": "Título (Tooltip):", 
     101  "URL:": "URL:", 
     102  "You must enter the URL where this link points to": "Debe introducir la URL a donde apunta este enlace", 
     103 
     104  // Insert Table 
     105  "Insert Table": "Añadir una tabla", 
     106  "Rows:": "Filas:", 
     107  "Number of rows": "Número de filas", 
     108  "Cols:": "Columnas:", 
     109  "Number of columns": "Número de columnas", 
     110  "Width:": "Ancho:", 
     111  "Width of the table": "Ancho de la tabla", 
     112  "Percent": "Porcentaje", 
     113  "Pixels": "Pixels", 
     114  "Em": "Em", 
     115  "Width unit": "Unidad de anchura", 
     116  "Fixed width columns": "Columnas de ancho fijo", 
     117  "Positioning of this table": "Posición de esta tabla", 
     118  "Cell spacing:": "Espaciado entre celdas:", 
     119  "Space between adjacent cells": "Espaciado entre celdas adyacentes", 
     120  "Cell padding:": "Relleno de celdas:", 
     121  "Space between content and border in cell": "Escapcio entre el contenido y el borde de la celda", 
     122  "You must enter a number of rows": "Debe introducir un número de filas", 
     123  "You must enter a number of columns": "Debe introducir un número de columnas", 
     124 
     125  // Insert Image 
     126  "Insert Image": "Insertar una imagen", 
     127  "Image URL:": "Imagen URL:", 
     128  "Enter the image URL here": "", 
     129  "Preview": "Previsualizar", 
     130  "Preview the image in a new window": "Previsualizar en una nueva ventana", 
     131  "Alternate text:": "Texto alternativo:", 
     132  "For browsers that don't support images": "Para navegadores que no soportan imágenes", 
     133  "Positioning of this image": "Posición de la imagen", 
     134  "Image Preview:": "Previsualización de la imagen:", 
     135  "You must enter the URL": "Debe introducir la URL", 
     136 
     137  // Editor Help 
     138  "Keyboard shortcuts": "Atajos de teclado", 
     139  "The editor provides the following key combinations:": "El editor proporciona las siguientes combinaciones:", 
     140  "new paragraph": "Nuevo parrafo", 
     141  "insert linebreak": "Insertar salto de línea", 
     142  "Set format to paragraph": "EStablecer el formato a parrafo", 
     143  "Clean content pasted from Word": "Limpiar el contenido pegado desde Word", 
     144  "Headings": "Cabeceras", 
     145  "Close": "Cerrar", 
     146 
     147  // Loading messages 
     148  "Loading in progress. Please wait!": "Carga en proceso. Por favor espere.", 
     149  "Loading plugin $plugin" : "Cargando el plugin $plugin", 
     150  "Register plugin $plugin" : "Registro de plugin $plugin",  
     151  "Constructing object": "Construyendo objeto", 
     152  "Generate Xinha framework": "Generar Xinha framework", 
     153  "Init editor size":"Iniciar el tamaño del editor",  
     154  "Create Toolbar": "Crear barra de herramientas", 
     155  "Create Statusbar" : "Crear barra de estado", 
     156  "Register right panel" : "Registrar panel derecho",  
     157  "Register left panel" : "Registrar panel izquierdo",  
     158  "Register bottom panel" : "Registar panel inferior",  
     159  "Register top panel" : "Registar panel superior",  
     160  "Finishing" : "Finalizando", 
     161   
     162  // ColorPicker 
     163  "Click a color..." : "Seleccione un color...", 
     164  "Sample" : "Muestra", 
     165  "Web Safe: " : "Color web: ", 
     166  "Color: " : "Color: " 
    40167} 
  • branches/ray/lang/fa.js

    r761 r975  
    1 // I18N constants 
     1// I18N constants 
    22// LANG: "fa", ENCODING: UTF-8 
    33{ 
    4   "Bold": "ضخی٠
    5 ", 
    6   "Italic": "Ù 
    7 ÙˆØ±Øš", 
    8   "Underline": "زیر خط", 
    9   "Strikethrough": "رو خط", 
    10   "Subscript": "زیروند", 
    11   "Superscript": "ؚالاوند", 
    12   "Justify Left": "تراز از Ú†ÙŸ", 
    13   "Justify Center": "تراز در وسط", 
    14   "Justify Right": "تراز در راست", 
    15   "Justify Full": "تراز از Ú†ÙŸ و راست", 
    16   "Ordered List": "فهرست Ù 
    17 Ø±ØªØš", 
    18   "Bulleted List": "فهرست گلوله ای", 
    19   "Decrease Indent": "کاه؎ سر خط", 
    20   "Increase Indent": "افزای؎ سر خط", 
    21   "Font Color": "رنگ فل٠
    22 ", 
    23   "Background Color": "رنگ ٟس ز٠
    24 ÛŒÙ†Ù‡", 
    25   "Horizontal Rule": "خط افقی", 
    26   "Insert Web Link": "افزودن لینک وؚ", 
    27   "Insert/Modify Image": "افزودن یا ویرای؎ تصویر", 
    28   "Insert Table": "افزودن جدول", 
    29   "Toggle HTML Source": "Ù 
    30 ØŽØ§Ù‡Ø¯Ù‡ یا عد٠
    31  Ù 
    32 ØŽØ§Ù‡Ø¯Ù‡ Ù 
    33 ØªÙ† در قالؚ HTML", 
    34   "Enlarge Editor": "ؚزرگ کردن ویرای؎ گر", 
    35   "About this editor": "درؚاره این ویرای؎ گر", 
    36   "Help using editor": "راهن٠
    37 Ø§ÛŒ استفاده ویرای؎ گر", 
    38   "Current style": "؎یوه کنونی", 
    39   "Undoes your last action": "ؚرگرداندن آخرین ع٠
    40 Ù„", 
    41   "Redoes your last action": "انجا٠
    42  Ù 
    43 Ø¬Ø¯Ø¯ آخرین ع٠
    44 Ù„", 
    45   "Cut selection": "ؚریدن انتخاؚ ؎ده", 
    46   "Copy selection": "Ú©ÙŸÛŒ انتخاؚ ؎ده", 
    47   "Paste from clipboard": "چسؚاندن از تخته کار", 
    48   "Direction left to right": "جهت از Ú†ÙŸ ØšÙ‡ راست", 
    49   "Direction right to left": "جهت از راست ØšÙ‡ Ú†ÙŸ", 
    50   "Remove formatting": "حذف فر٠
    51 Øª ؚندی", 
    52   "Select all": "انتخاؚ ه٠
    53 Ù‡", 
    54   "Print document": "چاٟ سند", 
    55   "Clear MSOffice tags": "ٟاک کردن Ù 
    56 ØªÙ† از ؚرچسؚ های MSOffice", 
    57   "Clear Inline Font Specifications": "ٟاک کردن Ù 
    58 ØªÙ† از Ù 
    59 ØŽØ®ØµØ§Øª فونت", 
    60   "Would you like to clear font typefaces?": "آیا ت٠
    61 Ø§ÛŒÙ„ دارید ؞اهر فل٠
    62  Ø±Ø§ ٟاک کنید؟", 
    63   "Would you like to clear font sizes?": "آیا ت٠
    64 Ø§ÛŒÙ„ دارید اندازه قل٠
    65  Ø±Ø§ ٟاک کنید", 
    66   "Would you like to clear font colours?": "آیا ت٠
    67 Ø§ÛŒÙ„ دارید رنگ قل٠
    68  Ø±Ø§ ٟاک کنید؟", 
    69   "Split Block": "ؚلاک جداسازی", 
    70   "Toggle Borders": "فعال/غیر فعال کردن Ù„ØšÙ‡ ها", 
    71   "Save as": "ذخیره Ù 
    72 Ø§Ù†Ù†Ø¯...", 
    73   "Insert/Overwrite": "افزودن/جانویسی", 
    74   "&mdash; format &mdash;": "&mdash; قالؚ &mdash;", 
    75   "Heading 1": "تیتر 1", 
    76   "Heading 2": "تیتر 2", 
    77   "Heading 3": "تیتر 3", 
    78   "Heading 4": "تیتر 4", 
    79   "Heading 5": "تیتر 5", 
    80   "Heading 6": "تیتر 6", 
    81   "Normal": "Ù 
    82 Ø¹Ù 
    83 ÙˆÙ„ÛŒ", 
    84   "Address": "آدرس", 
    85   "Formatted": "قالؚ ؚندی ؎ده", 
     4  "Bold": "ضخیم", 
     5  "Italic": "مورب", 
     6  "Underline": "زیر خط", 
     7  "Strikethrough": "رو خط", 
     8  "Subscript": "زیروند", 
     9  "Superscript": "بالاوند", 
     10  "Justify Left": "تراز از چپ", 
     11  "Justify Center": "تراز در وسط", 
     12  "Justify Right": "تراز در راست", 
     13  "Justify Full": "تراز از چپ و راست", 
     14  "Ordered List": "فهرست مرتب", 
     15  "Bulleted List": "فهرست گلوله ای", 
     16  "Decrease Indent": "کاهش سر خط", 
     17  "Increase Indent": "افزایش سر خط", 
     18  "Font Color": "رنگ فلم", 
     19  "Background Color": "رنگ پس زمینه", 
     20  "Horizontal Rule": "خط افقی", 
     21  "Insert Web Link": "افزودن لینک وب", 
     22  "Insert/Modify Image": "افزودن یا ویرایش تصویر", 
     23  "Insert Table": "افزودن جدول", 
     24  "Toggle HTML Source": "مشاهده یا عدم مشاهده متن در قالب HTML", 
     25  "Enlarge Editor": "بزرگ کردن ویرایش گر", 
     26  "About this editor": "درباره این ویرایش گر", 
     27  "Help using editor": "راهنمای استفاده ویرایش گر", 
     28  "Current style": "شیوه کنونی", 
     29  "Undoes your last action": "برگرداندن آخرین عمل", 
     30  "Redoes your last action": "انجام مجدد آخرین عمل", 
     31  "Cut selection": "بریدن انتخاب شده", 
     32  "Copy selection": "کپی انتخاب شده", 
     33  "Paste from clipboard": "چسباندن از تخته کار", 
     34  "Direction left to right": "جهت از چپ به راست", 
     35  "Direction right to left": "جهت از راست به چپ", 
     36  "Remove formatting": "حذف فرمت بندی", 
     37  "Select all": "انتخاب همه", 
     38  "Print document": "چاپ سند", 
     39  "Clear MSOffice tags": "پاک کردن متن از برچسب های MSOffice", 
     40  "Clear Inline Font Specifications": "پاک کردن متن از مشخصات فونت", 
     41  "Would you like to clear font typefaces?": "آیا تمایل دارید ظاهر فلم را پاک کنید؟", 
     42  "Would you like to clear font sizes?": "آیا تمایل دارید اندازه قلم را پاک کنید", 
     43  "Would you like to clear font colours?": "آیا تمایل دارید رنگ قلم را پاک کنید؟", 
     44  "Split Block": "بلاک جداسازی", 
     45  "Toggle Borders": "فعال/غیر فعال کردن لبه ها", 
     46  "Save as": "ذخیره مانند...", 
     47  "Insert/Overwrite": "افزودن/جانویسی", 
     48  "&mdash; format &mdash;": "&mdash; قالب &mdash;", 
     49  "Heading 1": "تیتر 1", 
     50  "Heading 2": "تیتر 2", 
     51  "Heading 3": "تیتر 3", 
     52  "Heading 4": "تیتر 4", 
     53  "Heading 5": "تیتر 5", 
     54  "Heading 6": "تیتر 6", 
     55  "Normal": "معمولی", 
     56  "Address": "آدرس", 
     57  "Formatted": "قالب بندی شده", 
    8658 
    8759  //dialogs 
    88   "OK": "ؚله", 
    89   "Cancel": "انصراف", 
    90   "Path": "Ù 
    91 Ø³ÛŒØ±", 
    92   "You are in TEXT MODE.  Use the [<>] button to switch back to WYSIWYG.": "در Ù 
    93 Ø¯ Ù 
    94 ØªÙ†ÛŒ هستید.  از دک٠
    95 Ù‡ [<>] استفاده ن٠
    96 Ø§ÛŒÛŒØ¯ تا ØšÙ‡ Ù 
    97 Ø¯ WYSIWYG ؚرگردید.", 
    98   "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "دک٠
    99 Ù‡ چسؚاندن در Ù 
    100 Ø±ÙˆØ±Ú¯Ø±Ù‡Ø§ÛŒ سری Mozilla کار ن٠
    101 ÛŒ کند (ØšÙ‡ دلایل فنی ا٠
    102 Ù†ÛŒØªÛŒ).ؚرای چسؚاندن Ù 
    103 Ø³ØªÙ‚ی٠
    104  ØŒ دک٠
    105 Ù‡ CTRL-V را در صفحه کلید ؚزنید.", 
    106   "Your Document is not well formed. Check JavaScript console for details.": "سند ØŽÙ 
    107 Ø§ ؚدرستی قالؚ ؚندی ن؎ده است. ؚرای اطلاعات ؚی؎تر ٟایانه ن٠
    108 Ø§ÛŒØŽ جاوااسکریٟت را ؚررسی کنید.", 
     60  "OK": "بله", 
     61  "Cancel": "انصراف", 
     62  "Path": "مسیر", 
     63  "You are in TEXT MODE.  Use the [<>] button to switch back to WYSIWYG.": "در مد متنی هستید.  از دکمه [<>] استفاده نمایید تا به مد WYSIWYG برگردید.", 
     64  "The Paste button does not work in Mozilla based web browsers (technical security reasons). Press CTRL-V on your keyboard to paste directly.": "دکمه چسباندن در مرورگرهای سری Mozilla کار نمی کند (به دلایل فنی امنیتی).برای چسباندن مستقیم ، دکمه CTRL-V را در صفحه کلید بزنید.", 
     65  "Your Document is not well formed. Check JavaScript console for details.": "سند شما بدرستی قالب بندی نشده است. برای اطلاعات بیشتر پایانه نمایش جاوااسکریپت را بررسی کنید.", 
    10966 
    110   "Alignment:": "تراز ؚندی", 
    111   "Not set": "تن؞ی٠
    112  Ù†ØŽØ¯Ù‡", 
    113   "Left": "Ú†ÙŸ", 
    114   "Right": "راست", 
    115   "Texttop": "ؚالای Ù 
    116 ØªÙ†", 
    117   "Absmiddle": "دقیقا وسط", 
    118   "Baseline": "اؚتدای خط", 
    119   "Absbottom": "دقیقا ٟایین", 
    120   "Bottom": "ٟایین", 
    121   "Middle": "وسط", 
    122   "Top": "ؚالا", 
     67  "Alignment:": "تراز بندی", 
     68  "Not set": "تنظیم نشده", 
     69  "Left": "چپ", 
     70  "Right": "راست", 
     71  "Texttop": "بالای متن", 
     72  "Absmiddle": "دقیقا وسط", 
     73  "Baseline": "ابتدای خط", 
     74  "Absbottom": "دقیقا پایین", 
     75  "Bottom": "پایین", 
     76  "Middle": "وسط", 
     77  "Top": "بالا", 
    12378 
    124   "Layout": "لایه", 
    125   "Spacing": "فاصله گذاری", 
    126   "Horizontal:": "افقی", 
    127   "Horizontal padding": "ٟرکننده افقی", 
    128   "Vertical:": "ع٠
    129 ÙˆØ¯ÛŒ", 
    130   "Vertical padding": "ٟرکننده ع٠
    131 ÙˆØ¯ÛŒ", 
    132   "Border thickness:": "ضخا٠
    133 Øª Ù„ØšÙ‡", 
    134   "Leave empty for no border": "ؚرای ؚدون Ù„ØšÙ‡ خالی رها کن", 
     79  "Layout": "لایه", 
     80  "Spacing": "فاصله گذاری", 
     81  "Horizontal:": "افقی", 
     82  "Horizontal padding": "پرکننده افقی", 
     83  "Vertical:": "عمودی", 
     84  "Vertical padding": "پرکننده عمودی", 
     85  "Border thickness:": "ضخامت لبه", 
     86  "Leave empty for no border": "برای بدون لبه خالی رها کن", 
    13587 
    13688  //Insert Link 
    137   "Insert/Modify Link": "افزودن / ویرای؎ لینک", 
    138   "None (use implicit)": "هیچکدا٠
    139  (استفاده از ؚدون ؎رط)", 
    140   "New window (_blank)": "ٟنجره جدید (_blank)", 
    141   "Same frame (_self)": "فری٠
    142  ÛŒÚ©Ø³Ø§Ù† (_self)", 
    143   "Top frame (_top)": "فری٠
    144  ØšØ§Ù„ایی (_top)", 
    145   "Other": "سایر", 
    146   "Target:": "هدف", 
    147   "Title (tooltip):": "عنوان (راهن٠
    148 Ø§ÛŒ یک خطی)", 
     89  "Insert/Modify Link": "افزودن / ویرایش لینک", 
     90  "None (use implicit)": "هیچکدام (استفاده از بدون شرط)", 
     91  "New window (_blank)": "پنجره جدید (_blank)", 
     92  "Same frame (_self)": "فریم یکسان (_self)", 
     93  "Top frame (_top)": "فریم بالایی (_top)", 
     94  "Other": "سایر", 
     95  "Target:": "هدف", 
     96  "Title (tooltip):": "عنوان (راهنمای یک خطی)", 
    14997  "URL:": "URL:", 
    150   "You must enter the URL where this link points to": "ؚاید URLی که این لینک ØšÙ‡ آن ا؎اره دارد را وارد کنید", 
    151   "You need to select some text before creating a link": "ؚاید Ù‚ØšÙ„ از ساخت لینک ، Ù 
    152 ØªÙ†ÛŒ را انتخاؚ ن٠
    153 Ø§ÛŒÛŒØ¯", 
     98  "You must enter the URL where this link points to": "باید URLی که این لینک به آن اشاره دارد را وارد کنید", 
     99  "You need to select some text before creating a link": "باید قبل از ساخت لینک ، متنی را انتخاب نمایید", 
    154100 
    155101  // Insert Table 
    156   "Insert Table": "افزودن جدول", 
    157   "Rows:": "ردیف ها", 
    158   "Number of rows": "تعداد ردیف ها", 
    159   "Cols:": "ستون ها", 
    160   "Number of columns": "تعداد ستون ها", 
    161   "Width:": "طول", 
    162   "Width of the table": "طول جدول", 
    163   "Percent": "درصد", 
    164   "Pixels": "ٟیکسل ها", 
     102  "Insert Table": "افزودن جدول", 
     103  "Rows:": "ردیف ها", 
     104  "Number of rows": "تعداد ردیف ها", 
     105  "Cols:": "ستون ها", 
     106  "Number of columns": "تعداد ستون ها", 
     107  "Width:": "طول", 
     108  "Width of the table": "طول جدول", 
     109  "Percent": "درصد", 
     110  "Pixels": "پیکسل ها", 
    165111  "Em": "Em", 
    166   "Width unit": "واحد طول", 
    167   "Fixed width columns": "ستون های طول ثاؚت", 
    168   "Positioning of this table": "Ù 
    169 ÙˆÙ‚عیت یاؚی این جدول", 
    170   "Cell spacing:": "فاصله سلول ها", 
    171   "Space between adjacent cells": "فاصله ؚین سلول های ه٠
    172 Ø¬ÙˆØ§Ø±", 
    173   "Cell padding:": "ٟر کننده سلول", 
    174   "Space between content and border in cell": "فاصله ؚین Ù 
    175 Ø­ØªÙˆØ§ و Ù„ØšÙ‡ در سلول", 
    176   "You must enter a number of rows": "ؚاید تعداد ردیف ها را وارد کنید", 
    177   "You must enter a number of columns": "ؚاید تعداد ستون ها را وارد کنید", 
     112  "Width unit": "واحد طول", 
     113  "Fixed width columns": "ستون های طول ثابت", 
     114  "Positioning of this table": "موقعیت یابی این جدول", 
     115  "Cell spacing:": "فاصله سلول ها", 
     116  "Space between adjacent cells": "فاصله بین سلول های همجوار", 
     117  "Cell padding:": "پر کننده سلول", 
     118  "Space between content and border in cell": "فاصله بین محتوا و لبه در سلول", 
     119  "You must enter a number of rows": "باید تعداد ردیف ها را وارد کنید", 
     120  "You must enter a number of columns": "باید تعداد ستون ها را وارد کنید", 
    178121 
    179122  // Insert Image 
    180   "Insert Image": "افزودن تصویر", 
    181   "Image URL:": "URL تصویر", 
    182   "Enter the image URL here": "URL تصویر را اینجا وارد کنید", 
    183   "Preview": "ٟی؎ ن٠
    184 Ø§ÛŒØŽ", 
    185   "Preview the image in a new window": "ٟی؎ ن٠
    186 Ø§ÛŒØŽ تصویر در ٟنجره ای جدید", 
    187   "Alternate text:": "Ù 
    188 ØªÙ† جایگزین", 
    189   "For browsers that don't support images": "ؚرای Ù 
    190 Ø±ÙˆØ±Ú¯Ø±Ù‡Ø§ÛŒÛŒ که از تصاویر ٟ؎تیؚانی ن٠
    191 ÛŒ کنند", 
    192   "Positioning of this image": "Ù 
    193 ÙˆÙ‚عیت یاؚی تصویر", 
    194   "Image Preview:": "ٟی؎ ن٠
    195 Ø§ÛŒØŽ تصویر", 
    196   "You must enter the URL": "ØŽÙ 
    197 Ø§ ؚاید URL را وارد کنید", 
     123  "Insert Image": "افزودن تصویر", 
     124  "Image URL:": "URL تصویر", 
     125  "Enter the image URL here": "URL تصویر را اینجا وارد کنید", 
     126  "Preview": "پیش نمایش", 
     127  "Preview the image in a new window": "پیش نمایش تصویر در پنجره ای جدید", 
     128  "Alternate text:": "متن جایگزین", 
     129  "For browsers that don't support images": "برای مرورگرهایی که از تصاویر پشتیبانی نمی کنند", 
     130  "Positioning of this image": "موقعیت یابی تصویر", 
     131  "Image Preview:": "پیش نمایش تصویر", 
     132  "You must enter the URL": "شما باید URL را وارد کنید", 
    198133 
    199134  // toolbar 
     135  /* 
    200136  "button_bold": "fr/bold.gif", 
    201137  "button_underline": "fr/underline.gif", 
    202138  "button_strikethrough": "fr/strikethrough.gif", 
     139  */ 
    203140 
    204141  // Editor Help 
    205   "Xinha Help": "راهن٠
    206 Ø§ÛŒ Xinha", 
    207   "Editor Help": "راهن٠
    208 Ø§ÛŒ ویرای؎گر", 
    209   "Keyboard shortcuts": "Ù 
    210 ÛŒØ§Ù†ØšØ±Ù‡Ø§ÛŒ صفحه کلید", 
    211   "The editor provides the following key combinations:": "ویرای؎گر استفاده از کلید های گروهی زیر را Ù 
    212 Ø³ÛŒØ± Ù 
    213 ÛŒ سازد :", 
     142  "Xinha Help": "راهنمای Xinha", 
     143  "Editor Help": "راهنمای ویرایشگر", 
     144  "Keyboard shortcuts": "میانبرهای صفحه کلید", 
     145  "The editor provides the following key combinations:": "ویرایشگر استفاده از کلید های گروهی زیر را مسیر می سازد :", 
    214146  "ENTER": "ENTREE", 
    215   "new paragraph": "ٟاراگراف جدید", 
     147  "new paragraph": "پاراگراف جدید", 
    216148  "SHIFT-ENTER": "SHIFT+ENTREE", 
    217   "insert linebreak": "افزودن جدا کننده خط", 
    218   "Set format to paragraph": "تغییر قالؚ ØšÙ‡ ٟاراگراف", 
    219   "Clean content pasted from Word": "ت٠
    220 ÛŒØ² کردن Ù 
    221 Ø­ØªÙˆØ§ÛŒ چسؚانده ؎ده از Word", 
    222   "Headings": "عنوان گذاری", 
    223   "Close": "ؚستن", 
     149  "insert linebreak": "افزودن جدا کننده خط", 
     150  "Set format to paragraph": "تغییر قالب به پاراگراف", 
     151  "Clean content pasted from Word": "تمیز کردن محتوای چسبانده شده از Word", 
     152  "Headings": "عنوان گذاری", 
     153  "Close": "بستن", 
    224154 
    225155  // Loading messages 
    226   "Loading in progress. Please wait !": "ؚارگذاری در حال انجا٠
    227  Ø§Ø³Øª. لطفا صؚر کنید !", 
    228   "Constructing main object": "ساختن ؎یء اصلی", 
    229   "Constructing object": "ساختن ؎یء", 
    230   "Register panel right": "ثؚت قاؚ راست", 
    231   "Register panel left": "ثؚت قاؚ Ú†ÙŸ", 
    232   "Register panel top": "ثؚت قاؚ ؚالا", 
    233   "Register panel bottom": "ثؚت قاؚ ٟایین", 
    234   "Create Toolbar": "ساخت نوار اؚزار", 
    235   "Create StatusBar": "ساخت نوار وضعیت", 
    236   "Generate Xinha object": "تولید ؎یء Xinha", 
    237   "Init editor size": "Ù 
    238 Ù‚دار دهی اندازه ویرای؎گر", 
    239   "Init IFrame": "Ù 
    240 Ù‚دار دهی IFrame", 
    241   "Register plugin $plugin": "ثؚت ٟلاگین $plugin" 
     156  "Loading in progress. Please wait !": "بارگذاری در حال انجام است. لطفا صبر کنید !", 
     157  "Constructing main object": "ساختن شیء اصلی", 
     158  "Constructing object": "ساختن شیء", 
     159  "Register panel right": "ثبت قاب راست", 
     160  "Register panel left": "ثبت قاب چپ", 
     161  "Register panel top": "ثبت قاب بالا", 
     162  "Register panel bottom": "ثبت قاب پایین", 
     163  "Create Toolbar": "ساخت نوار ابزار", 
     164  "Create StatusBar": "ساخت نوار وضعیت", 
     165  "Generate Xinha object": "تولید شیء Xinha", 
     166  "Init editor size": "مقدار دهی اندازه ویرایشگر", 
     167  "Init IFrame": "مقدار دهی IFrame", 
     168  "Register plugin $plugin": "ثبت پلاگین $plugin" 
    242169}; 
  • branches/ray/modules/ColorPicker/ColorPicker.js

    r911 r975  
    105105      Xinha.colorPicker.loadColors(); 
    106106    } 
     107         
     108        this.is_ie_6 = (Xinha.is_ie && Xinha.ie_version < 7); 
    107109    var picker = this; 
    108110    var enablepick = false; 
     
    406408        this.table.style.left = left + 'px'; 
    407409      } 
    408      // IE ONLY - prevent windowed elements (<SELECT>) to render above the colorpicker 
    409       /*@cc_on 
    410       this.iframe.style.top = this.table.style.top; 
    411       this.iframe.style.left = this.table.style.left; 
    412       @*/ 
     410     // IE6 ONLY - prevent windowed elements (<SELECT>) to render above the colorpicker 
     411      if (this.is_ie_6) 
     412          { 
     413        this.iframe.style.top = this.table.style.top; 
     414        this.iframe.style.left = this.table.style.left; 
     415      } 
    413416    }; 
    414417 
     
    713716        function createSavedColors(color) 
    714717        { 
    715           var is_ie = false; 
    716           /*@cc_on is_ie = true; @*/ 
     718          var is_ie = Xinha.is_ie; 
     719 
    717720          var div = document.createElement('div'); 
    718721          div.style.width = picker.cellsize + 'px';//13px'; 
     
    744747         
    745748        //put an iframe behind the table to mask select lists in ie 
    746         // IE ONLY - prevent windowed elements (<SELECT>) to render above the colorpicker 
    747         /*@cc_on 
    748         if ( !this.iframe ) 
    749         { 
    750         this.iframe = document.createElement('iframe'); 
    751         this.iframe.frameBorder = 0; 
    752         this.iframe.src = "javascript:;"; 
    753         this.iframe.style.position = "absolute"; 
    754         this.iframe.style.width = this.table.offsetWidth; 
    755         this.iframe.style.height = this.table.offsetHeight; 
    756         document.body.insertBefore(this.iframe, this.table); 
    757         } 
    758         this.iframe.style.display = ''; 
    759         @*/ 
     749        // IE6 ONLY - prevent windowed elements (<SELECT>) to render above the colorpicker 
     750        if (this.is_ie_6) 
     751        { 
     752          if ( !this.iframe ) 
     753          { 
     754            this.iframe = document.createElement('iframe'); 
     755            this.iframe.frameBorder = 0; 
     756            this.iframe.src = "javascript:;"; 
     757            this.iframe.style.position = "absolute"; 
     758            this.iframe.style.width = this.table.offsetWidth; 
     759            this.iframe.style.height = this.table.offsetHeight; 
     760            document.body.insertBefore(this.iframe, this.table); 
     761          } 
     762          this.iframe.style.display = ''; 
     763        } 
    760764      } 
    761765      else 
     
    799803      Xinha._removeEvent(document.body,'mousedown',closeOnBodyClick); 
    800804      this.table.style.display = 'none'; 
    801       // IE ONLY - prevent windowed elements (<SELECT>) to render above the colorpicker 
    802       /*@cc_on 
    803       if ( this.iframe ) { this.iframe.style.display = 'none'; } 
    804       @*/ 
     805      // IE6 ONLY - prevent windowed elements (<SELECT>) to render above the colorpicker 
     806      if (this.is_ie_6) 
     807      { 
     808        if ( this.iframe ) { this.iframe.style.display = 'none'; } 
     809      } 
    805810    }; 
    806811} // end Xinha.colorPicker 
  • branches/ray/modules/Dialogs/XinhaDialog.js

    r890 r975  
    4343   
    4444   
    45   if (Xinha.is_ie) 
     45  if (Xinha.is_ie && Xinha.ie_version < 7) 
    4646  { // IE6 needs the iframe to hide select boxes 
    4747    var backG = document.createElement("iframe"); 
     
    259259 
    260260  // unfortunately we have to hide the editor (iframe/caret bug) 
    261   if (Xinha.is_gecko && modal) 
     261  if (Xinha.is_ff2 && modal) 
    262262  { 
    263263    this._restoreTo = [this.editor._textArea.style.display, this.editor._iframe.style.visibility, this.editor.hidePanels()]; 
     
    281281 
    282282    //rootElemStyle.display   = ''; 
    283 Xinha.Dialog.fadeIn(this.rootElem); 
     283        Xinha.Dialog.fadeIn(this.rootElem); 
    284284    var dialogHeight = rootElem.offsetHeight; 
    285285    var dialogWidth = rootElem.offsetWidth; 
     
    372372    var dialog = this; 
    373373 
    374     if (Xinha.is_gecko && this.modal) 
     374    if (Xinha.is_ff2 && this.modal) 
    375375    { 
    376376      this.editor._textArea.style.display = this._restoreTo[0]; 
  • branches/ray/modules/Dialogs/dialog.js

    r761 r975  
    2828                init = window;  // pass this window object by default 
    2929        } 
    30         Dialog._geckoOpenModal(url, action, init); 
     30        if (typeof window.showModalDialog == 'function') 
     31        { 
     32                Dialog._return = function(retVal) { 
     33                        if (typeof action == 'function') action (retVal); 
     34                } 
     35                var r = window.showModalDialog(url, init, "dialogheight=10;dialogwidth=10;resizable=yes"); 
     36        } 
     37        else 
     38        { 
     39                Dialog._geckoOpenModal(url, action, init); 
     40        } 
    3141} 
    3242 
  • branches/ray/modules/FullScreen/full-screen.js

    r782 r975  
    186186    this._htmlArea.style.left     = e.config.fullScreenMargins[3] + 'px'; 
    187187    this._htmlArea.style.top      = e.config.fullScreenMargins[0] + 'px'; 
    188     if ( !Xinha.is_ie ) this._htmlArea.style.border   = 'none'; 
     188    if ( !Xinha.is_ie && !Xinha.is_webkit ) this._htmlArea.style.border   = 'none'; 
    189189    this._isFullScreen = true; 
    190190    resetScroll(); 
  • branches/ray/modules/Gecko/Gecko.js

    r911 r975  
    189189/*  This is now handled by a plugin   
    190190    case 13: // ENTER 
    191       if( !ev.shiftKey && editor.config.mozParaHandler == 'dirty' ) 
    192       { 
    193         this.dom_checkInsertP(); 
    194         Xinha._stopEvent(ev); 
    195       } 
     191 
    196192    break;*/ 
    197193 
     
    370366      return true; // Indicate paste is done, stop command being issued to browser by Xinha.prototype.execCommand 
    371367    } 
     368    break; 
     369    case 'removeformat': 
     370      var editor = this.editor; 
     371      var sel = editor.getSelection(); 
     372      var selSave = editor.saveSelection(sel); 
     373      var range = editor.createRange(sel); 
     374 
     375      var els = editor._doc.body.getElementsByTagName('*'); 
     376 
     377      var start = ( range.startContainer.nodeType == 1 ) ? range.startContainer : range.startContainer.parentNode; 
     378      var i, el; 
     379      if (sel.isCollapsed) range.selectNodeContents(editor._doc.body); 
     380       
     381      for (i=0; i<els.length;i++) 
     382      { 
     383        el = els[i]; 
     384        if ( range.isPointInRange(el, 0) || (els[i] == start && range.startOffset == 0)) 
     385        { 
     386          el.removeAttribute('style'); 
     387        } 
     388      } 
     389      this.editor._doc.execCommand(cmdID, UI, param); 
     390      editor.restoreSelection(selSave); 
     391      return true; 
     392    break; 
    372393  } 
    373394   
     
    396417Xinha.prototype.insertNodeAtSelection = function(toBeInserted) 
    397418{ 
     419  if ( toBeInserted.ownerDocument != this._doc ) // as of FF3, Gecko is strict regarding the ownerDocument of an element 
     420  { 
     421    try  
     422        { 
     423                toBeInserted = this._doc.adoptNode( toBeInserted ); 
     424        } catch (e) {} 
     425  } 
    398426  var sel = this.getSelection(); 
    399427  var range = this.createRange(sel); 
     
    404432  var pos = range.startOffset; 
    405433  var selnode = toBeInserted; 
     434   
    406435  switch ( node.nodeType ) 
    407436  { 
     
    616645{ 
    617646  var sel = this.getSelection(); 
     647  if (sel.isCollapsed) return ''; 
    618648  var range = this.createRange(sel); 
    619649  return Xinha.getHTML(range.cloneContents(), false, this); 
     
    692722 
    693723//Control character for retaining edit location when switching modes 
    694 Xinha.prototype.cc = String.fromCharCode(173);  
     724Xinha.prototype.cc = String.fromCharCode(8286);  
    695725 
    696726Xinha.prototype.setCC = function ( target ) 
     
    706736      var after = ta.value.substring( index, ta.value.length ); 
    707737 
    708       if ( after.match(/^[^<]*>/) ) // make sure cursor is in an editable area (outside tags, script blocks, and inside the body) 
     738      if ( after.match(/^[^<]*>/) ) // make sure cursor is in an editable area (outside tags, script blocks, entities, and inside the body) 
    709739      { 
    710740        var tagEnd = after.indexOf(">") + 1; 
     
    712742      } 
    713743      else ta.value = before + cc + after; 
     744      ta.value = ta.value.replace(new RegExp ('(&[^'+cc+']*?)('+cc+')([^'+cc+']*?;)'), "$1$3$2"); 
    714745      ta.value = ta.value.replace(new RegExp ('(<script[^>]*>[^'+cc+']*?)('+cc+')([^'+cc+']*?<\/script>)'), "$1$3$2"); 
    715746      ta.value = ta.value.replace(new RegExp ('^([^'+cc+']*)('+cc+')([^'+cc+']*<body[^>]*>)(.*?)'), "$1$3$2$4"); 
     
    718749    { 
    719750      var sel = this.getSelection(); 
    720       sel.getRangeAt(0).insertNode( document.createTextNode( cc ) ); 
     751      sel.getRangeAt(0).insertNode( this._doc.createTextNode( cc ) ); 
    721752    } 
    722753  } catch (e) {} 
     
    725756Xinha.prototype.findCC = function ( target ) 
    726757{ 
    727   try  
    728   { 
    729     var findIn = ( target == 'textarea' ) ? window : this._iframe.contentWindow; 
    730     if( findIn.find( this.cc ) ) 
    731     { 
    732       if (target == "textarea") 
    733       { 
    734         var ta = this._textArea; 
    735         var start = pos = ta.selectionStart; 
    736         var end = ta.selectionEnd; 
    737         var scrollTop = ta.scrollTop; 
    738         ta.value = ta.value.substring( 0, start ) + ta.value.substring( end, ta.value.length ); 
    739         ta.selectionStart = pos; 
    740         ta.selectionEnd = pos; 
    741         ta.scrollTop = scrollTop 
    742         ta.focus(); 
    743       } 
    744       else 
    745       { 
    746         var sel = this.getSelection(); 
    747         sel.getRangeAt(0).deleteContents(); 
    748         this._iframe.contentWindow.focus(); 
    749       } 
    750     } 
    751   } catch (e) {} 
     758  if ( target == 'textarea' ) 
     759  { 
     760  var ta = this._textArea; 
     761  var pos = ta.value.indexOf( this.cc ); 
     762  if ( pos == -1 ) return; 
     763  var end = pos + this.cc.length; 
     764  var before =  ta.value.substring( 0, pos ); 
     765  var after = ta.value.substring( end, ta.value.length ); 
     766  ta.value = before ; 
     767 
     768  ta.scrollTop = ta.scrollHeight; 
     769  var scrollPos = ta.scrollTop; 
     770   
     771  ta.value += after; 
     772  ta.setSelectionRange(pos,pos); 
     773 
     774  ta.focus(); 
     775   
     776  ta.scrollTop = scrollPos; 
     777 
     778  } 
     779  else 
     780  { 
     781    try 
     782    { 
     783      this._iframe.contentWindow.find( this.cc ); 
     784      var sel = this.getSelection(); 
     785      sel.getRangeAt(0).deleteContents(); 
     786      this.scrollToElement(); 
     787      this._iframe.contentWindow.focus(); 
     788    } catch (e) {} 
     789  } 
    752790}; 
    753791/*--------------------------------------------------------------------------*/ 
  • branches/ray/modules/GetHtml/DOMwalk.js

    r892 r975  
    3838// Retrieves the HTML code from the given node.  This is a replacement for 
    3939// getting innerHTML, using standard DOM calls. 
    40 // Wrapper catch a Mozilla-Exception with non well formed html source code 
     40// Wrapper legacy see #442 
    4141Xinha.getHTML = function(root, outputRoot, editor) 
    4242{ 
    43   try 
    44   { 
    45     return Xinha.getHTMLWrapper(root,outputRoot,editor); 
    46   } 
    47   catch(ex) 
    48   {    
    49     alert(Xinha._lc('Your Document is not well formed. Check JavaScript console for details.')); 
    50     return editor._iframe.contentWindow.document.body.innerHTML; 
    51   } 
     43  return Xinha.getHTMLWrapper(root,outputRoot,editor); 
    5244}; 
    5345 
     
    155147          } 
    156148          var name = a.nodeName.toLowerCase(); 
    157           if ( /_moz_editor_bogus_node/.test(name) ) 
     149          if ( /_moz_editor_bogus_node/.test(name) || ( name == 'class' && a.nodeValue == 'webkit-block-placeholder') ) 
    158150          { 
    159151            html = ""; 
     
    189181            { 
    190182              value = a.nodeValue; 
     183                          if (name == 'class') 
     184                          { 
     185                                value = value.replace(/Apple-style-span/,''); 
     186                                if (!value) continue; 
     187                          } 
    191188              // IE seems not willing to return the original values - it converts to absolute 
    192189              // links using a.nodeValue, a.value, a.stringValue, root.getAttribute("href") 
  • branches/ray/modules/GetHtml/TransformInnerHTML.js

    r911 r975  
    3434 
    3535Xinha.RegExpCache = [ 
    36 /*00*/  new RegExp().compile(/<\s*\/?([^\s\/>]+)[\s*\/>]/gi),//lowercase tags 
    37 /*01*/  new RegExp().compile(/(\s+)_moz[^=>]*=[^\s>]*/gi),//strip _moz attributes 
    38 /*02*/  new RegExp().compile(/\s*=\s*(([^'"][^>\s]*)([>\s])|"([^"]+)"|'([^']+)')/g),// find attributes 
    39 /*03*/  new RegExp().compile(/\/>/g),//strip singlet terminators 
    40 /*04*/  new RegExp().compile(/<(br|hr|img|input|link|meta|param|embed|area)((\s*\S*="[^"]*")*)>/g),//terminate singlet tags 
    41 /*05*/  new RegExp().compile(/(<\w+\s+(\w*="[^"]*"\s+)*)(checked|compact|declare|defer|disabled|ismap|multiple|no(href|resize|shade|wrap)|readonly|selected)([\s>])/gi),//expand singlet attributes 
    42 /*06*/  new RegExp().compile(/(="[^']*)'([^'"]*")/),//check quote nesting 
    43 /*07*/  new RegExp().compile(/&(?=(?!(#[0-9]{2,5};|[a-zA-Z0-9]{2,6};|#x[0-9a-fA-F]{2,4};))[^<]*>)/g),//expand query ampersands not in html entities 
    44 /*08*/  new RegExp().compile(/<\s+/g),//strip tagstart whitespace 
    45 /*09*/  new RegExp().compile(/\s+(\/)?>/g),//trim whitespace 
    46 /*10*/  new RegExp().compile(/\s{2,}/g),//trim extra whitespace 
    47 /*11*/  new RegExp().compile(/\s+([^=\s]+)((="[^"]+")|([\s>]))/g),// lowercase attribute names 
    48 /*12*/  new RegExp().compile(/\s+contenteditable(=[^>\s\/]*)?/gi),//strip contenteditable 
    49 /*13*/  new RegExp().compile(/((href|src)=")([^\s]*)"/g), //find href and src for stripBaseHref() 
    50 /*14*/  new RegExp().compile(/<\/?(div|p|h[1-6]|table|tr|td|th|ul|ol|li|blockquote|object|br|hr|img|embed|param|pre|script|html|head|body|meta|link|title|area|input|form|textarea|select|option)[^>]*>/g), 
    51 /*15*/  new RegExp().compile(/<\/(div|p|h[1-6]|table|tr|ul|ol|blockquote|object|html|head|body|script|form|select)( [^>]*)?>/g),//blocklevel closing tag 
    52 /*16*/  new RegExp().compile(/<(div|p|h[1-6]|table|tr|ul|ol|blockquote|object|html|head|body|script|form|select)( [^>]*)?>/g),//blocklevel opening tag 
    53 /*17*/  new RegExp().compile(/<(td|th|li|option|br|hr|embed|param|pre|meta|link|title|area|input|textarea)[^>]*>/g),//singlet tag or output on 1 line 
    54 /*18*/  new RegExp().compile(/(^|<\/(pre|script)>)(\s|[^\s])*?(<(pre|script)[^>]*>|$)/g),//find content NOT inside pre and script tags 
    55 /*19*/  new RegExp().compile(/(<pre[^>]*>)([\s\S])*?(<\/pre>)/g),//find content inside pre tags 
    56 /*20*/  new RegExp().compile(/(^|<!--[\s\S]*?-->)([\s\S]*?)(?=<!--[\s\S]*?-->|$)/g),//find content NOT inside comments 
    57 /*21*/  new RegExp().compile(/\S*=""/g), //find empty attributes 
    58 /*22*/  new RegExp().compile(/<!--[\s\S]*?-->|<\?[\s\S]*?\?>|<\/?\w[^>]*>/g), //find all tags, including comments and php 
    59 /*23*/  new RegExp().compile(/(^|<\/script>)[\s\S]*?(<script[^>]*>|$)/g) //find content NOT inside script tags 
     36/*00*/  /<\s*\/?([^\s\/>]+)[\s*\/>]/gi,//lowercase tags 
     37/*01*/  /(\s+)_moz[^=>]*=[^\s>]*/gi,//strip _moz attributes 
     38/*02*/  /\s*=\s*(([^'"][^>\s]*)([>\s])|"([^"]+)"|'([^']+)')/g,// find attributes 
     39/*03*/  /\/>/g,//strip singlet terminators 
     40/*04*/  /<(br|hr|img|input|link|meta|param|embed|area)((\s*\S*="[^"]*")*)>/g,//terminate singlet tags 
     41/*05*/  /(<\w+\s+(\w*="[^"]*"\s+)*)(checked|compact|declare|defer|disabled|ismap|multiple|no(href|resize|shade|wrap)|readonly|selected)([\s>])/gi,//expand singlet attributes 
     42/*06*/  /(="[^']*)'([^'"]*")/,//check quote nesting 
     43/*07*/  /&(?=(?!(#[0-9]{2,5};|[a-zA-Z0-9]{2,6};|#x[0-9a-fA-F]{2,4};))[^<]*>)/g,//expand query ampersands not in html entities 
     44/*08*/  /<\s+/g,//strip tagstart whitespace 
     45/*09*/  /\s+(\/)?>/g,//trim whitespace 
     46/*10*/  /\s{2,}/g,//trim extra whitespace 
     47/*11*/  /\s+([^=\s]+)((="[^"]+")|([\s>]))/g,// lowercase attribute names 
     48/*12*/  /\s+contenteditable(=[^>\s\/]*)?/gi,//strip contenteditable 
     49/*13*/  /((href|src)=")([^\s]*)"/g, //find href and src for stripBaseHref() 
     50/*14*/  /<\/?(div|p|h[1-6]|table|tr|td|th|ul|ol|li|blockquote|object|br|hr|img|embed|param|pre|script|html|head|body|meta|link|title|area|input|form|textarea|select|option)[^>]*>/g, 
     51/*15*/  /<\/(div|p|h[1-6]|table|tr|ul|ol|blockquote|object|html|head|body|script|form|select)( [^>]*)?>/g,//blocklevel closing tag 
     52/*16*/  /<(div|p|h[1-6]|table|tr|ul|ol|blockquote|object|html|head|body|script|form|select)( [^>]*)?>/g,//blocklevel opening tag 
     53/*17*/  /<(td|th|li|option|br|hr|embed|param|pre|meta|link|title|area|input|textarea)[^>]*>/g,//singlet tag or output on 1 line 
     54/*18*/  /(^|<\/(pre|script)>)(\s|[^\s])*?(<(pre|script)[^>]*>|$)/g,//find content NOT inside pre and script tags 
     55/*19*/  /(<pre[^>]*>)([\s\S])*?(<\/pre>)/g,//find content inside pre tags 
     56/*20*/  /(^|<!--[\s\S]*?-->)([\s\S]*?)(?=<!--[\s\S]*?-->|$)/g,//find content NOT inside comments 
     57/*21*/  /\S*=""/g, //find empty attributes 
     58/*22*/  /<!--[\s\S]*?-->|<\?[\s\S]*?\?>|<\/?\w[^>]*>/g, //find all tags, including comments and php 
     59/*23*/  /(^|<\/script>)[\s\S]*?(<script[^>]*>|$)/g //find content NOT inside script tags 
    6060]; 
    61  
     61// compile for performance; WebKit doesn't support this 
     62if (typeof RegExp.prototype.compile == 'function') { 
     63        for (var i=0; i<Xinha.RegExpCache.length;i++ ) { 
     64                Xinha.RegExpCache[i] = new RegExp().compile(Xinha.RegExpCache[i]); 
     65        } 
     66} 
    6267/**  
    6368  * Cleans HTML into wellformed xhtml 
     
    7479                replace(c[3], '>').//strip singlet terminators 
    7580                replace(c[9], '$1>').//trim whitespace 
    76                 replace(c[5], '$1$3="$3"$4').//expand singlet attributes 
     81                replace(c[5], '$1$3="$3"$5').//expand singlet attributes 
    7782                replace(c[4], '<$1$2 />').//terminate singlet tags 
    7883                replace(c[6], '$1$2').//check quote nesting 
  • branches/ray/modules/InternetExplorer/InternetExplorer.js

    r911 r975  
    158158} 
    159159 
     160InternetExplorer.prototype.onExecCommand = function(cmdID, UI, param) 
     161{    
     162  switch(cmdID) 
     163  { 
     164    // #645 IE only saves the initial content of the iframe, so we create a temporary iframe with the current editor contents 
     165    case 'saveas': 
     166        var doc = null; 
     167        var editor = this.editor; 
     168        var iframe = document.createElement("iframe"); 
     169        iframe.src = "about:blank"; 
     170        iframe.style.display = 'none'; 
     171        document.body.appendChild(iframe); 
     172        try 
     173        { 
     174          if ( iframe.contentDocument ) 
     175          { 
     176            doc = iframe.contentDocument;         
     177          } 
     178          else 
     179          { 
     180            doc = iframe.contentWindow.document; 
     181          } 
     182        } 
     183        catch(ex) 
     184        {  
     185          //hope there's no exception 
     186        } 
     187         
     188        doc.open("text/html","replace"); 
     189        var html = ''; 
     190        if ( editor.config.browserQuirksMode === false ) 
     191        { 
     192          var doctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'; 
     193        } 
     194        else if ( editor.config.browserQuirksMode === true ) 
     195        { 
     196           var doctype = ''; 
     197        } 
     198        else 
     199        { 
     200           var doctype = Xinha.getDoctype(document); 
     201        } 
     202        if ( !editor.config.fullPage ) 
     203        { 
     204          html += doctype + "\n"; 
     205          html += "<html>\n"; 
     206          html += "<head>\n"; 
     207          html += "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" + editor.config.charSet + "\">\n"; 
     208          if ( typeof editor.config.baseHref != 'undefined' && editor.config.baseHref !== null ) 
     209          { 
     210            html += "<base href=\"" + editor.config.baseHref + "\"/>\n"; 
     211          } 
     212           
     213          if ( typeof editor.config.pageStyleSheets !== 'undefined' ) 
     214          { 
     215            for ( var i = 0; i < editor.config.pageStyleSheets.length; i++ ) 
     216            { 
     217              if ( editor.config.pageStyleSheets[i].length > 0 ) 
     218              { 
     219                html += "<link rel=\"stylesheet\" type=\"text/css\" href=\"" + editor.config.pageStyleSheets[i] + "\">"; 
     220                //html += "<style> @import url('" + editor.config.pageStyleSheets[i] + "'); </style>\n"; 
     221              } 
     222            } 
     223          } 
     224           
     225          if ( editor.config.pageStyle ) 
     226          { 
     227            html += "<style type=\"text/css\">\n" + editor.config.pageStyle + "\n</style>"; 
     228          } 
     229           
     230          html += "</head>\n"; 
     231          html += "<body>\n"; 
     232          html += editor.getEditorContent(); 
     233          html += "</body>\n"; 
     234          html += "</html>"; 
     235        } 
     236        else 
     237        { 
     238          html = editor.getEditorContent(); 
     239          if ( html.match(Xinha.RE_doctype) ) 
     240          { 
     241            editor.setDoctype(RegExp.$1); 
     242          } 
     243        } 
     244        doc.write(html); 
     245        doc.close(); 
     246        doc.execCommand(cmdID, UI, param); 
     247        document.body.removeChild(iframe); 
     248      return true; 
     249    break; 
     250    case 'removeformat': 
     251      var editor = this.editor; 
     252      var sel = editor.getSelection(); 
     253      var selSave = editor.saveSelection(sel); 
     254 
     255      var i, el, els; 
     256 
     257      function clean (el) 
     258      { 
     259        if (el.nodeType != 1) return; 
     260        el.removeAttribute('style'); 
     261        for (var j=0; j<el.childNodes.length;j++) 
     262        { 
     263          clean(el.childNodes[j]); 
     264        } 
     265        if ( (el.tagName.toLowerCase() == 'span' && !el.attributes.length ) || el.tagName.toLowerCase() == 'font') 
     266        { 
     267          el.outerHTML = el.innerHTML; 
     268        } 
     269      } 
     270      if ( editor.selectionEmpty(sel) ) 
     271      { 
     272        els = editor._doc.body.childNodes; 
     273        for (i = 0; i < els.length; i++)  
     274        { 
     275          el = els[i]; 
     276          if (el.nodeType != 1) continue; 
     277          if (el.tagName.toLowerCase() == 'span') 
     278          { 
     279            newNode = editor.convertNode(el, 'div'); 
     280            el.parentNode.replaceChild(newNode, el); 
     281            el = newNode; 
     282          } 
     283          clean(el); 
     284        } 
     285      }  
     286      editor._doc.execCommand(cmdID, UI, param); 
     287 
     288      editor.restoreSelection(selSave); 
     289      return true; 
     290    break; 
     291  } 
     292   
     293  return false; 
     294}; 
    160295/*--------------------------------------------------------------------------*/ 
    161296/*------- IMPLEMENTATION OF THE ABSTRACT "Xinha.prototype" METHODS ---------*/ 
     
    298433Xinha.prototype.saveSelection = function() 
    299434{ 
    300   return this.createRange(this._getSelection()) 
     435  return this.createRange(this.getSelection()) 
    301436} 
    302437/**  
     
    360495{ 
    361496  var sel = this.getSelection(); 
     497  if (this.selectionEmpty) return ''; 
    362498  var range = this.createRange(sel); 
    363499   
     
    393529Xinha.prototype.createRange = function(sel) 
    394530{ 
     531  if (!sel) sel = this.getSelection(); 
    395532  return sel.createRange(); 
    396533}; 
     
    447584    var after  = ta.value.substring( index + cc.length , ta.value.length ); 
    448585     
    449     if ( after.match(/^[^<]*>/) ) // make sure cursor is in an editable area (outside tags, script blocks, and inside the body) 
     586    if ( after.match(/^[^<]*>/) ) // make sure cursor is in an editable area (outside tags, script blocks, entities, and inside the body) 
    450587    { 
    451588      var tagEnd = after.indexOf(">") + 1; 
     
    453590    } 
    454591    else ta.value = before + cc + after; 
     592    ta.value = ta.value.replace(new RegExp ('(&[^'+cc+']*?)('+cc+')([^'+cc+']*?;)'), "$1$3$2"); 
    455593    ta.value = ta.value.replace(new RegExp ('(<script[^>]*>[^'+cc+']*?)('+cc+')([^'+cc+']*?<\/script>)'), "$1$3$2"); 
    456594    ta.value = ta.value.replace(new RegExp ('^([^'+cc+']*)('+cc+')([^'+cc+']*<body[^>]*>)(.*?)'), "$1$3$2$4"); 
  • branches/ray/plugins/ExtendedFileManager/Classes/ExtendedFileManager.php

    r862 r975  
    810810                        break; 
    811811                        case 'moveFile': 
    812                                 $src = Files::makePath($this->getImagesDir(), $_GET['srcdir'].$_GET['file']); 
    813                                 $dest = Files::makePath($this->getImagesDir(), $_GET['dir'].$_GET['file']); 
     812                                $src = Files::makeFile($this->getImagesDir(), $_GET['srcdir'].$_GET['file']); 
     813                                $dest = Files::makeFile($this->getImagesDir(), $_GET['dir'].$_GET['file']); 
    814814                                return Files::rename($src,$dest); 
    815815                        break; 
  • branches/ray/plugins/ExtendedFileManager/assets/EditorContent.js

    r796 r975  
    44 * Version: Updated on 08-01-2005 by Afru 
    55 * Version: Updated on 20-06-2006 by Krzysztof Kotowicz 
    6  * Package: ExtendedFileManager (EFM 1.1.1) 
     6 * Version: Updated on 04-11-2007 by Raimund Meyer 
     7 * Package: ExtendedFileManager (EFM 1.4) 
    78 * http://www.afrusoft.com/htmlarea 
    89 */ 
     
    4748   if(el) {e=(document.layers)?el:el.style; 
    4849   var xx=parseInt(x+ox+a),yy=parseInt(y+oy+b); 
    49    //alert(xx+":"+yy); 
    5050   if(navigator.appName=="Netscape" && parseInt(navigator.appVersion)>4){xx+="px";yy+="px";} 
    5151   if(navigator.appVersion.indexOf("MSIE 5")>-1 && navigator.appVersion.indexOf("Mac")>-1){ 
     
    5353    xx+="px";yy+="px";}e.left=xx;e.top=yy;} 
    5454    pic_x = parseInt(xx); pic_y = parseInt(yy); 
    55     //alert(xx+":"+yy); 
    5655    } 
    5756} 
     
    6564function init_resize() 
    6665{ 
    67     if(mode == "scale") 
    68     { 
     66    //if(mode == "scale") 
     67    //{ 
    6968        P7_Snap('theImage','ant',0,0); 
    7069 
     
    8887        drawBoundHandle(); 
    8988        jg_doc.paint(); 
    90     } 
     89    //} 
    9190} 
    9291 
     
    9998    if (markerImg.src.indexOf("img/t_white.gif")>0) 
    10099        toggleMarker() ; 
     100        var theImage = document.getElementById('theImage'); 
     101        theImage._width = theImage.width; 
     102        theImage._height = theImage.height; 
    101103} 
    102104 
     
    141143function toggleMarker() 
    142144{ 
    143     //alert("Toggle"); 
    144145    if (ant == null) 
    145146        ant = MM_findObj("ant"); 
     
    163164    if (dragapproved) 
    164165    { 
    165         //z.style.left=ns6? temp1+e.clientX-x: temp1+event.clientX-x 
    166         //z.style.top=ns6? temp2+e.clientY-y : temp2+event.clientY-y 
    167         var w = ns6? temp1+e.clientX - x : temp1+event.clientX - x; 
    168         var h = ns6? temp2+e.clientY - y : temp2+event.clientY - y; 
    169  
    170         //alert(canvas.style.left); 
    171         /*if (status !=null) 
    172         { 
    173             status.innerHTML  = "x:"+x+" y:"+y+" w:"+w+" h:"+h+" can_h:"+pic_height; 
    174             status.innerHTML += " can_w:"+pic_width+" px:"+pic_x+" py:"+pic_y; 
    175             status.innerHTML += " pix:"+image.style.left+" piy:"+image.style.top+" obj:"+obj.id; 
    176         }*/ 
    177  
    178         /*jg_doc.clear(); 
    179         jg_doc.fillRectPattern(0,0,Math.abs(w),Math.abs(h),pattern); 
    180         jg_doc.paint(); 
    181 */ 
     166        var w = ns6? temp1+e.pageX - x : temp1+event.clientX + document.body.scrollLeft- x; 
     167        var h = ns6? temp2+e.pageY - y : temp2+event.clientY  + document.body.scrollTop - y; 
     168 
    182169        if (ant != null) 
    183170        { 
     
    218205        var dy =ns6? oa_y + e.clientY-y : oa_y + event.clientY-y 
    219206 
    220         /*if (status !=null) 
    221         { 
    222             status.innerHTML  = "x:"+x+" y:"+y+" dx:"+dx+" dy:"+dy; 
    223         }*/ 
    224  
    225207        ant.style.left = dx; 
    226208        ant.style.top = dy; 
     
    232214} 
    233215 
    234 //Code add for constraints by Frédéric Klee <fklee@isuisse.com> 
     216//Code add for constraints by Frédéric Klee <fklee@isuisse.com> 
    235217function moveHandle(e) 
    236218{ 
     
    370352                content.height = 0; 
    371353            } 
    372             //alert(content.width+":"+content.height); 
    373354        } 
    374355        resizeHandle = firedobj.id; 
    375  
    376         /*if(status!=null) { 
    377             status.innerHTML  = " obj:"+firedobj.id; 
    378         }*/ 
    379356 
    380357        x=ns6? e.clientX: event.clientX 
     
    411388                content.height = 0; 
    412389            } 
    413             //alert(content.width+":"+content.height); 
    414390        } 
    415391 
     
    440416        temp1=parseInt(z.style.left+0) 
    441417        temp2=parseInt(z.style.top+0) 
    442         x=ns6? e.clientX: event.clientX 
    443         y=ns6? e.clientY: event.clientY 
     418           
     419        x=ns6? e.pageX: event.clientX + document.body.scrollLeft 
     420        y=ns6? e.pageY: event.clientY + document.body.scrollTop 
    444421        document.onmousemove=move 
    445422        return false 
     
    453430                canvas = MM_findObj("imgCanvas"); 
    454431 
    455             x=ns6? e.clientX: event.clientX 
    456             y=ns6? e.clientY: event.clientY 
    457  
    458                 //jg_doc.draw 
     432            x=ns6? e.pageX: event.clientX + document.body.scrollLeft 
     433            y=ns6? e.pageY: event.clientY + document.body.scrollTop 
     434 
    459435            dragapproved=true 
    460436            document.onmousemove=measure 
     
    468444    if (dragapproved) 
    469445    { 
    470         mx2 = ns6? e.clientX : event.clientX; 
    471         my2 = ns6? e.clientY : event.clientY; 
     446        mx2 = ns6? e.pageX : event.clientX + document.body.scrollLeft; 
     447        my2 = ns6? e.pageY : event.clientY + document.body.scrollTop; 
    472448 
    473449        jg_doc.clear(); 
     
    569545    jg_doc.drawHandleBox(ax-4, ay+ah/2-4,8,8,"w-resize"); //left middle 
    570546    jg_doc.drawHandleBox(ax+aw-4, ay+ah/2-4,8,8,"e-resize"); //right middle 
    571  
    572     //jg_doc.paint(); 
    573547} 
    574548 
     
    578552        return false; 
    579553    } 
    580  
     554    var zoom = 100 / parseInt( window.parent.document.getElementById('zoom').value, 10 ); 
    581555    if(mode == "measure") { 
    582         //alert(pic_x); 
     556 
    583557        mx1 = x - pic_x; 
    584558        my1 = y - pic_y; 
     
    599573 
    600574        if (m_sx != null && !isNaN(mx1)) 
    601             m_sx.value = mx1+"px"; 
     575            m_sx.value = mx1 * zoom +"px"; 
    602576        if (m_sy != null && !isNaN(my1)) 
    603             m_sy.value = my1+"px"; 
     577            m_sy.value = my1 * zoom+"px"; 
    604578        if(m_w != null && !isNaN(mw)) 
    605             m_w.value = mw + "px"; 
     579            m_w.value = mw * zoom + "px"; 
    606580        if(m_h != null && !isNaN(mh)) 
    607             m_h.value = mh + "px"; 
     581            m_h.value = mh * zoom + "px"; 
    608582 
    609583        if(m_d != null && !isNaN(md)) 
    610             m_d.value = md + "px"; 
     584            m_d.value = md * zoom + "px"; 
    611585        if(m_a != null && !isNaN(ma)) 
    612586            m_a.value = ma + ""; 
     
    615589            r_ra.value = ma; 
    616590 
    617         //alert("mx1:"+mx1+" my1"+my1); 
    618591        return false; 
    619592    } 
     
    644617    if(mode == 'crop') { 
    645618        if(t_cx != null) 
    646             t_cx.value = cx; 
     619            t_cx.value = cx * zoom ; 
    647620        if (t_cy != null) 
    648             t_cy.value = cy; 
     621            t_cy.value = cy * zoom ; 
    649622        if(t_cw != null) 
    650             t_cw.value = cw; 
     623            t_cw.value = cw * zoom ; 
    651624        if (t_ch != null) 
    652             t_ch.value = ch; 
     625            t_ch.value = ch * zoom ; 
    653626    } 
    654627    else if(mode == 'scale') { 
     
    662635        } 
    663636        if (s_sw != null) 
    664             s_sw.value = sw; 
     637            s_sw.value = sw * zoom ; 
    665638        if (s_sh != null) 
    666             s_sh.value = sh; 
    667     } 
    668  
     639            s_sh.value = sh * zoom ; 
     640    } 
    669641} 
    670642 
     
    698670                content.height = ah-1; 
    699671            } 
    700             //alert(content.width+":"+content.height); 
    701672        } 
    702673        if(mode == "crop") { 
     
    718689        } 
    719690        else if(mode == "scale") { 
    720             //alert("Resizing: iw:"+image.width+" nw:"+aw); 
    721691            document.theImage.height = ah; 
    722692            document.theImage.width = aw; 
     
    725695 
    726696            P7_Snap('theImage','ant',0,0); 
    727  
    728             //alert("After Resizing: iw:"+image.width+" nw:"+aw); 
    729697        } 
    730698 
  • branches/ray/plugins/ExtendedFileManager/assets/dialog.js

    r761 r975  
    1616 
    1717function Dialog(url, action, init) { 
    18     if (typeof init == "undefined") { 
    19         init = window;  // pass this window object by default 
    20     } 
    21     Dialog._geckoOpenModal(url, action, init); 
     18        if (typeof init == "undefined") { 
     19                init = window;  // pass this window object by default 
     20        } 
     21        if (typeof window.showModalDialog == 'function') 
     22        { 
     23                Dialog._return = action; 
     24                var r = window.showModalDialog(url, init, "dialogheight=10;dialogwidth=10;resizable=yes"); 
     25        } 
     26        else 
     27        { 
     28                Dialog._geckoOpenModal(url, action, init); 
     29        } 
    2230} 
    2331 
  • branches/ray/plugins/ExtendedFileManager/assets/editor.css

    r761 r975  
    88                #indicator 
    99                { 
    10                         width: 25px; 
     10                        width: 20px; 
    1111                        height: 20px; 
    1212                        background-color: #eef;                  
    1313                        padding: 15px 20px; 
    14                         position: absolute; 
    15                         left: 0; top: 0; 
    1614                } 
    1715                * html #indicator 
     
    2119                #tools 
    2220                { 
    23                         width: 600px; 
    24                         height: 50px; 
    2521                        background-color: #eef; 
    2622                        padding: 0; 
    27                         position: absolute; 
    28                         left: 63px; 
    2923                        border-left: 1px solid white; 
    3024                        border-bottom: 1px solid white; 
     
    3226                #toolbar 
    3327                { 
    34                         width: 53px; 
    35                         height: 435px; 
    3628                        background-color: #eef; 
    37                         float: left; 
    3829                        text-align: center; 
    3930                        padding: 5px; 
    40                         position: absolute; 
    41                         top: 50px; 
    4231                        border-top: 1px solid white; 
    4332                        border-right: 1px solid white; 
     33                        vertical-align: top; 
     34                        width:50px; 
    4435                } 
    4536                 
    4637                #contents 
    4738                { 
    48                         width: 600px; 
    49                         height: 445px; 
    50                         position: absolute; 
    51                         left: 64px; top: 51px; 
     39                        position: relative; 
    5240                } 
    5341                 
    5442                #editor 
    5543                { 
    56                         width: 600px; 
    57                         height: 445px; 
     44                        width: 100%; 
     45                        height: 100%; 
    5846                } 
    5947 
     
    120108                        vertical-align: middle; 
    121109                } 
    122                 #tools #tool_inputs 
     110                #tools .tool_inputs 
    123111                { 
    124112                        padding-top: 10px; 
  • branches/ray/plugins/ExtendedFileManager/assets/editor.js

    r761 r975  
    44 * Version: Updated on 08-01-2005 by Afru 
    55 * Version: Updated on 20-06-2006 by Krzysztof Kotowicz 
    6  * Package: ExtendedFileManager (EFM 1.1.1) 
    7  * http://www.afrusoft.com/htmlarea 
     6 * Version: Updated on 20-01-2008 by Raimund Meyer 
     7 * Package: ExtendedFileManager (EFM 1.4) 
    88 */ 
    99 
     
    4040 
    4141        //constraints on the scale, 
    42         //code by Frédéric Klee <fklee@isuisse.com> 
     42        //code by Frédéric Klee <fklee@isuisse.com> 
    4343        if(action == 'scale') 
    4444        { 
    4545            var theImage = editor.window.document.getElementById('theImage'); 
    46             orginal_width = theImage.width ; 
    47             orginal_height = theImage.height; 
     46            orginal_width = theImage._width ; 
     47            orginal_height = theImage._height; 
    4848 
    4949            var w = document.getElementById('sw'); 
     
    5252            h.value = orginal_height ; 
    5353        } 
    54  
     54                if ( action == 'save' ) 
     55                { 
     56                        var formatSelect = document.getElementById('save_format'); 
     57                        var format = document.getElementById('save_filename').value.match(/\.(gif|png|jpe?g)/i)[1].toLowerCase(); 
     58                        switch ( format ) 
     59                        { 
     60                                case 'png': 
     61                                        formatSelect.selectedIndex = '3'; 
     62                                break; 
     63                                case 'gif': 
     64                                        formatSelect.selectedIndex = '4'; 
     65                                break; 
     66                                default: 
     67                                        formatSelect.selectedIndex = '0'; 
     68                                break; 
     69                        } 
     70                        formatSelect.onchange(); 
     71                } 
    5572    } 
    5673} 
     
    7087} 
    7188 
    72 //Togggle constraints, by Frédéric Klee <fklee@isuisse.com> 
     89//Togggle constraints, by Frédéric Klee <fklee@isuisse.com> 
    7390function toggleConstraints() 
    7491{ 
     
    92109} 
    93110 
    94 //check the constraints, by Frédéric Klee <fklee@isuisse.com> 
     111//check the constraints, by Frédéric Klee <fklee@isuisse.com> 
    95112function checkConstrains(changed) 
    96113{ 
     
    133150} 
    134151 
     152function rotateSubActionSelect(selection) 
     153{ 
     154        var value = selection.options[selection.selectedIndex].value; 
     155         
     156        var rotate_preset_select = document.getElementById('rotate_preset_select'); 
     157        var flip = document.getElementById('flip'); 
     158        var angle = document.getElementById('ra').parentNode; 
     159         
     160        switch (value) 
     161        { 
     162                case 'rotate': 
     163                        rotate_preset_select.style.display = ''; 
     164                        flip.style.display = 'none'; 
     165                        angle.style.display = ''; 
     166                break; 
     167                case 'flip': 
     168                        rotate_preset_select.style.display = 'none'; 
     169                        flip.style.display = ''; 
     170                        angle.style.display = 'none'; 
     171                break; 
     172        } 
     173} 
    135174function rotatePreset(selection) 
    136175{ 
     
    148187 
    149188    var values = selected.split(","); 
     189        if ( values[0] != 'jpeg' ) document.getElementById('slider').style.display = 'none'; 
     190        else document.getElementById('slider').style.display = 'inline'; 
    150191    if(values.length >1) { 
    151192        updateSlider(parseInt(values[1])); 
    152193    } 
    153194 
     195} 
     196function zoom() 
     197{ 
     198        var theImage = editor.window.document.getElementById('theImage'); 
     199        var value = document.getElementById('zoom').value; 
     200        theImage.width = theImage._width * parseInt( value, 10 ) / 100;  
     201        theImage.height = theImage._height * parseInt( value, 10 )/ 100; 
     202        editor.reset(); 
     203        editor.pic_width = null; 
     204        editor.pic_height = null; 
    154205} 
    155206function addEvent(obj, evType, fn) 
     
    160211} 
    161212 
    162 init = function() 
    163 { 
    164     var bottom = document.getElementById('bottom'); 
     213var init = function() 
     214{ 
    165215    if(window.opener) 
    166216    { 
    167         __dlg_init(null, {width: 673, height: 531}); 
     217        __xinha_dlg_init(); 
    168218        __dlg_translate('ExtendedFileManager'); 
    169219    } 
    170 } 
    171  
    172 addEvent(window, 'load', init); 
     220        addEvent(window, 'resize', winOnResize); 
     221        try { window.moveTo(0,0); } catch (e) {} 
     222        window.resizeTo(window.screen.availWidth,window.screen.availHeight); 
     223        winOnResize(); 
     224} 
     225function winOnResize () 
     226{ 
     227        if ( typeof editor.reset == 'function' && typeof editor.ant != 'undefined'  ) editor.reset(); 
     228        var win = Xinha.viewportSize(window); 
     229        document.getElementById("contents").style.height = win.y - parseInt(document.getElementById("indicator").offsetHeight,10) - 5 + 'px'; 
     230} 
     231Xinha.addOnloadHandler( init, window ); 
  • branches/ray/plugins/ExtendedFileManager/assets/editorFrame.css

    r761 r975  
    77.handleBox{ z-index:105; } 
    88.error { font-size:large; font-weight:bold; color:#c00; font-family: Helvetica, sans-serif; }  
     9 
     10#n-resize  {cursor: n-resize  } 
     11#s-resize  {cursor: s-resize  } 
     12#w-resize  {cursor: w-resize  } 
     13#e-resize  {cursor: e-resize  } 
     14#nw-resize {cursor: nw-resize } 
     15#sw-resize {cursor: sw-resize } 
     16#ne-resize {cursor: ne-resize } 
     17#se-resize {cursor: se-resize } 
  • branches/ray/plugins/ExtendedFileManager/assets/editorFrame.js

    r761 r975  
    44 * Version: Updated on 08-01-2005 by Afru 
    55 * Version: Updated on 20-06-2006 by Krzysztof Kotowicz 
    6  * Package: ExtendedFileManager (EFM 1.1.1) 
     6 * Version: Updated on 20-01-2008 by Raimund Meyer 
     7 * Package: ExtendedFileManager (EFM 1.4) 
    78 * http://www.afrusoft.com/htmlarea 
    89 */ 
     
    4950    else if (action == 'rotate') 
    5051    { 
    51         var flip = topDoc.getElementById('flip'); 
     52        var rotate_sub_action = topDoc.getElementById('rotate_sub_action'); 
    5253 
    53         if(flip.value == 'hoz' || flip.value == 'ver') 
    54             location.href = _backend_url + "__function=editorFrame&img="+currentImageFile+"&action=flip&params="+flip.value; 
     54        if(rotate_sub_action.value == 'flip') 
     55            location.href = _backend_url + "__function=editorFrame&img="+currentImageFile+"&action=flip&params="+topDoc.getElementById('flip').value; 
    5556        else if (isNaN(parseFloat(r_ra.value))==false) 
    5657            location.href = _backend_url + "__function=editorFrame&img="+currentImageFile+"&action=rotate&params="+parseFloat(r_ra.value); 
     
    6970        { 
    7071            var filename = encodeURI(s_file.value); 
    71             var quality = parseInt(s_quality.value); 
    72             var url = _backend_url + "__function=editorFrame&img="+currentImageFile+"&action=save&params="+format[0]+","+quality+"&file="+filename; 
    73             //alert(url); 
    74             location.href = url; 
     72                        var quality = parseInt(s_quality.value); 
     73                        var format = s_format.value.split(","); 
     74                        var url = _backend_url + "__function=editorFrame&img="+currentImageFile+"&action=save&params="+format[0]+","+quality+"&file="+filename; 
     75                location.href = url; 
    7576        } 
    7677    } 
     78        else if (action == 'preview') { 
     79                var s_format = topDoc.getElementById('save_format'); 
     80        var s_quality = topDoc.getElementById('quality'); 
     81                var quality = parseInt(s_quality.value); 
     82                var format = s_format.value.split(","); 
     83                var url = _backend_url + "__function=editorFrame&img="+currentImageFile+"&action=preview&params="+format[0]+","+quality+"&file="+filename; 
     84        location.href = url; 
     85        } 
    7786} 
    7887 
     
    9099    jg_doc = new jsGraphics("imgCanvas"); // draw directly into document 
    91100    jg_doc.setColor("#000000"); // black 
    92  
     101         
    93102    initEditor(); 
     103        if (window.parent.document.getElementById('zoom').value != '100') window.parent.zoom(); 
     104        reset(); 
     105        window.parent.document.getElementById('filesize').innerHTML = fileSize;  
    94106}; 
    95107 
  • branches/ray/plugins/ExtendedFileManager/assets/imagelist.css

    r761 r975  
    3030  padding:5px; 
    3131  text-decoration:none; 
     32  overflow:hidden; 
    3233} 
    3334 
     
    4243} 
    4344 
    44 .listview { width:100% } 
     45.listview { width:100%; } 
    4546.listview td, .listview th { text-align:left; font-size:small; } 
    46 .listview td.actions { text-align: right; } 
     47.listview td.actions { text-align: right;width:111px } 
    4748.listview td.actions img { border:0; } 
    4849 
    49 .listview thead th {background-color: ButtonFace; border: 1px solid threedface; border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; padding-top:2px; padding-bottom:2px; padding-left: 5px; padding-right: 5px; font-size: 9pt; font-family: "MS Sans Serif", Geneva, sans-serif;} 
    50 .listview tbody td, .listview tbody th {padding-top:2px; padding-left: 3px; font-size: 9pt; font-family: "MS Sans Serif", Geneva, sans-serif;} 
     50.listview thead th {background-color: ButtonFace; border: 1px solid threedface; border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; padding-top:2px; padding-bottom:2px; padding-left: 5px; padding-right: 5px; font-size: 9pt; font-family: "MS Sans Serif", "Bitstream Vera Sans", Geneva, Sans, sans-serif;font-weight:normal} 
     51.listview tbody td, .listview tbody th {overflow:hidden; padding-top:2px; padding-left: 3px; font-size: 9pt;  font-family: "MS Sans Serif", "Bitstream Vera Sans", Geneva, Sans, sans-serif;} 
    5152.listview tbody a, listview tbody a:visited { font-weight: normal; text-decoration: none; color: #000; border:0px; padding:2px;} 
    5253.listview tbody a:hover { background-color:#0B256B; color:#fff;} 
    5354 
    54 .listview tbody tr:hover {background-color: rgb(221,221,255); 
     55.listview tbody tr:hover {background-color: rgb(221,221,255)}; 
  • branches/ray/plugins/ExtendedFileManager/assets/manager.css

    r775 r975  
    1010.dirs { padding: 1em;   } 
    1111 
    12 .imageFrame { overflow-x:hidden; width: 100%; height: 145px; margin:0px; background-color: #fff;} 
     12.imageFrame { overflow-x:hidden; width: 100%; height: 155px; margin:0px; background-color: #fff;} 
    1313.smallWidth{ width: 4em; } 
    1414.largelWidth{ width: 30em; } 
     
    1818.buttons { width: 70px; text-align: center; } 
    1919.clearboth{ clear: both; } 
    20 #messages { position: relative; left: 175px; top: 115px; background-color: white; width:200px;  float: left; margin-top: -52px; border: 1px solid #ccc; text-align: center; padding: 15px; } 
     20#messages {opacity:0.8;filter:Alpha(opacity=85);position:relative;height:20px;margin-bottom:-30px;background-color: white;  border: none; text-align: center; padding: 5px; } 
    2121#message  { font-size: 15px; font-weight: bold; color: #69c; } 
    2222iframe { border:1px inset; border-right:none; border-left:none; border-bottom:none; } 
    23  
     23#controls {padding-bottom:10px;} 
    2424table { margin-top:10px; } 
    2525th, td { padding-right:3px; text-align:left; font-family:small-caption,helvetica,sans-serif; } 
  • branches/ray/plugins/ExtendedFileManager/assets/manager.js

    r862 r975  
    55 * Version: Updated on 20-06-2006 by Krzysztof Kotowicz 
    66 * Version: Updated on 17-11-2006 by Raimund Meyer 
    7  * Package: ExtendedFileManager (EFM 1.1.3) 
     7 * Version: Updated on 20-01-2008 by Raimund Meyer 
     8 * Package: ExtendedFileManager (EFM 1.4) 
    89 * http://www.afrusoft.com/htmlarea 
    910 */ 
     
    4647} 
    4748 
    48 //initialise the form 
    49  
    50 if (manager_mode == "link") 
    51 { 
    52     var offsetForInputs = (Xinha.is_ie) ? 165 : 150; 
    53 } 
    54 else 
    55 { 
    56     var offsetForInputs = (Xinha.is_ie) ? 230 : 210; 
    57 }    
    58  
    59 var h =  100 // space above files  
    60        + 250 // files iframe 
    61        + offsetForInputs;  
    62  
    63 var win_dim = {width:650,height:h}; 
    64 window.resizeTo(win_dim.width,win_dim.height); 
    65 if (!Xinha.is_ie) 
    66 { 
    67   var x = opener.screenX + (opener.outerWidth - win_dim.width) / 2; 
    68   var y = opener.screenY + (opener.outerHeight - win_dim.height) / 2; 
    69 } 
    70 else 
    71 {//IE does not have window.outer... , so center it on the screen at least 
    72   var x =  (self.screen.availWidth - win_dim.width) / 2; 
    73   var y =  (self.screen.availHeight - win_dim.height) / 2;       
    74 } 
    75 window.moveTo(x,y); 
    76  
    77 init = function () 
    78 { 
    79      
    80      
    81     __dlg_init(null,  {width:650,height:h}); 
    82  
     49function init () 
     50{ 
     51        if (typeof imgManager == 'undefined' ) 
     52        { 
     53                setTimeout(init,10); // sometimes we are too hasty 
     54                return; 
     55        } 
     56         
     57        var w = 650; 
     58        var h = 600; 
     59         
     60        window.resizeTo(w,h); 
     61        var page = Xinha.pageSize(window); 
     62        window.resizeTo(w,h); 
     63         
     64        var dim = Xinha.viewportSize(window); 
     65 
     66        window.resizeBy(0, page.y - dim.y + 5); 
     67 
     68        dim = Xinha.viewportSize(window); 
     69         
     70        if (!Xinha.is_ie) 
     71        { 
     72          var x = opener.screenX + (opener.outerWidth - dim.x) / 2; 
     73          var y = opener.screenY + (opener.outerHeight - dim.x) / 2; 
     74        } 
     75        else 
     76        {//IE does not have window.outer... , so center it on the screen at least 
     77          var x =  (self.screen.availWidth - dim.x) / 2; 
     78          var y =  (self.screen.availHeight - dim.y) / 2;        
     79        } 
     80        window.moveTo(x,y); 
     81         
     82        __xinha_dlg_init(); 
    8383    __dlg_translate('ExtendedFileManager'); 
    8484 
     
    8989 
    9090    var param = window.dialogArguments.param; 
    91  
     91    var startDir = null; 
     92         
    9293    if(manager_mode=="image" && param) 
    9394    { 
     
    141142        if (dreg.test(param['f_url'])) 
    142143        { 
    143           changeDir(RegExp.$1); 
    144           var dirPath = document.getElementById('dirPath'); 
    145           for(var i = 0; i < dirPath.options.length; i++) 
    146           { 
    147             if(dirPath.options[i].value == encodeURIComponent(RegExp.$1)) 
    148             { 
    149               dirPath.options[i].selected = true; 
    150               break; 
    151             } 
    152           } 
     144                  startDir = RegExp.$1; 
    153145        } 
    154146 
     
    174166 
    175167        // Locate to the correct directory 
    176         var startDir; 
    177168        var dreg = new RegExp('^(.*/)([^/]+)$'); 
    178169        if (dreg.test(param['f_href'])) 
     
    186177        } 
    187178         
    188         if (startDir) 
    189         { 
    190           changeDir(startDir); 
    191           var dirPath = document.getElementById('dirPath'); 
    192           for(var i = 0; i < dirPath.options.length; i++) 
    193           { 
    194             if(dirPath.options[i].value == encodeURIComponent(RegExp.$1)) 
    195             { 
    196               dirPath.options[i].selected = true; 
    197               break; 
    198             } 
    199           } 
    200         } 
    201  
    202179        if (param) 
    203180        { 
     
    238215    else if (!param) 
    239216    { 
    240         var startDir = document.cookie.match(new RegExp ("EFMStartDir" + manager_mode + "=(.*?)(;|$)")); 
     217        startDir = document.cookie.match(new RegExp ("EFMStartDir" + manager_mode + "=(.*?)(;|$)")); 
    241218        if (startDir) 
    242219        { 
    243220                startDir = startDir[1]; 
    244                 changeDir(startDir); 
    245                 var dirPath = document.getElementById('dirPath'); 
    246                 for(var i = 0; i < dirPath.options.length; i++) 
    247                 { 
    248                   if(dirPath.options[i].value == encodeURIComponent(startDir)) 
    249                   { 
    250                     dirPath.options[i].selected = true; 
    251                     break; 
    252                   } 
    253                 } 
    254221        } 
    255222    } 
     223        if ( startDir ) 
     224        { 
     225                iframeUrl += '&dir=' + startDir; 
     226                var dirPath = document.getElementById('dirPath'); 
     227                for(var i = 0; i < dirPath.options.length; i++) 
     228                { 
     229                        if(dirPath.options[i].value == encodeURIComponent(startDir)) 
     230                        { 
     231                                dirPath.options[i].selected = true; 
     232                                break; 
     233                        } 
     234                } 
     235        }; 
     236        imgManager.location.replace(iframeUrl); 
     237 
    256238    if (manager_mode == 'image' && typeof Xinha.colorPicker != "undefined" && document.getElementById('f_backgroundColor') && document.getElementById('f_backgroundColor').type == 'text') { 
    257239      // Hookup color pickers 
     
    267249      new Xinha.colorPicker.InputBinding(document.getElementById('f_borderColor'),pickerConfig); 
    268250    } 
     251        setTimeout(function() { resize();addEvent(window, 'resize', resize); }, 500); 
    269252} 
    270253 
     
    566549{ 
    567550        var win = Xinha.viewportSize(window); 
    568         document.getElementById('imgManager').style.height = parseInt( win.y - 130 - offsetForInputs, 10 ) + 'px'; 
    569          
     551        var m = document.getElementById('messages'); 
     552        var messagesHeight = (m && m.style.display != 'none' ) ?  parseInt( document.getElementById('messages').offsetHeight, 10 ) : 0; 
     553        document.getElementById('imgManager').style.height = parseInt( win.y - 130 - document.getElementById('controls').offsetHeight, 10 ) - messagesHeight  + 'px'; 
    570554        return true; 
    571555} 
    572 addEvent(window, 'resize', resize); 
    573 if (Xinha.is_gecko) 
    574 {// this runs the init function (translation) before all the images in the iframe have loaded 
    575         document.addEventListener("DOMContentLoaded", init, false); 
    576 } 
    577 else 
    578 { 
    579         addEvent(window, 'load', init); 
    580 } 
     556 
     557Xinha.addOnloadHandler( init, window ); 
  • branches/ray/plugins/ExtendedFileManager/assets/popup.js

    r802 r975  
    1616        opener.Dialog._return(null); 
    1717} 
     18function __dlg_init( bottom, win_dim ) { 
     19  __xinha_dlg_init(win_dim); 
     20} 
    1821 
     22function __xinha_dlg_init( win_dim ) { 
     23  if(window.__dlg_init_done) return true; 
     24   
     25  if(window.opener._editor_skin) { 
     26    var head = document.getElementsByTagName("head")[0]; 
     27    var link = document.createElement("link"); 
     28    link.type = "text/css"; 
     29    link.href = window.opener._editor_url + 'skins/' + window.opener._editor_skin + '/skin.css'; 
     30    link.rel = "stylesheet"; 
     31    head.appendChild(link); 
     32  } 
     33  if (!window.dialogArguments && opener.Dialog._arguments) 
     34  { 
     35    window.dialogArguments = opener.Dialog._arguments; 
     36  } 
     37 
     38  Xinha.addDom0Event(document.body, 'keypress', __dlg_close_on_esc); 
     39  window.__dlg_init_done = true; 
     40} 
    1941function __dlg_translate(context) { 
    2042    var types = ["span", "option", "td", "th", "button", "div", "label", "a","img", "legend"]; 
  • branches/ray/plugins/ExtendedFileManager/assets/wz_jsgraphics.js

    r761 r975  
    11/*********************************************************************** 
    2 ** Title.........:  Javascript Graphics 
    3 ** Version.......:  1.0 
    4 ** Author........:  Xiang Wei ZHUO <wei@zhuo.org> 
    52** Filename......:  wz_jsgraphics.js 
    6 ** Last changed..:  31 Aug 2003   
    7 ** Notes.........:  Modified for Image Editor, added extra commands 
     3** Last changed..:  2 November 2007 by Raimund Meyer updated to new version   
     4** Notes.........:  Modified by Xiang Wei ZHUO <wei@zhuo.org> for Image Editor, added extra commands l. 690-740 
    85**/  
    96 
    107/* This notice must be untouched at all times. 
    118 
    12 wz_jsgraphics.js    v. 2.03 
     9wz_jsgraphics.js    v. 3.02 
    1310The latest version is available at 
    1411http://www.walterzorn.com 
     
    1613or http://www.walterzorn.de 
    1714 
    18 Copyright (c) 2002-2003 Walter Zorn. All rights reserved. 
    19 Created 3. 11. 2002 by Walter Zorn <walter@kreuzotter.de> 
    20 Last modified: 11. 6. 2003 
     15Copyright (c) 2002-2004 Walter Zorn. All rights reserved. 
     16Created 3. 11. 2002 by Walter Zorn (Web: http://www.walterzorn.com ) 
     17Last modified: 26. 10. 2007 
     18 
     19Performance optimizations for Internet Explorer 
     20by Thomas Frank and John Holdsworth. 
     21fillPolygon method implemented by Matthieu Haller. 
    2122 
    2223High Performance JavaScript Graphics Library. 
    2324Provides methods 
    2425- to draw lines, rectangles, ellipses, polygons 
    25   with specifiable line thickness, 
    26 - to fill rectangles and ellipses 
     26        with specifiable line thickness, 
     27- to fill rectangles, polygons, ellipses and arcs 
    2728- to draw text. 
    2829NOTE: Operations, functions and branching have rather been optimized 
    2930to efficiency and speed than to shortness of source code. 
    3031 
    31 This program is free software; 
    32 you can redistribute it and/or modify it under the terms of the 
    33 GNU General Public License as published by the Free Software Foundation; 
    34 either version 2 of the License, or (at your option) any later version. 
    35 This program is distributed in the hope that it will be useful, 
    36 but WITHOUT ANY WARRANTY; 
    37 without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
    38 See the GNU General Public License 
    39 at http://www.gnu.org/copyleft/gpl.html for more details. 
     32LICENSE: LGPL 
     33 
     34This library is free software; you can redistribute it and/or 
     35modify it under the terms of the GNU Lesser General Public 
     36License (LGPL) as published by the Free Software Foundation; either 
     37version 2.1 of the License, or (at your option) any later version. 
     38 
     39This library is distributed in the hope that it will be useful, 
     40but WITHOUT ANY WARRANTY; without even the implied warranty of 
     41MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
     42Lesser General Public License for more details. 
     43 
     44You should have received a copy of the GNU Lesser General Public 
     45License along with this library; if not, write to the Free Software 
     46Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA, 
     47or see http://www.gnu.org/copyleft/lesser.html 
    4048*/ 
    4149 
    42 var jg_ihtm, jg_ie, jg_dom, jg_n4 = (document.layers && typeof document.classes != "undefined"); 
    43  
    44 function chkDHTM(x, i) 
    45 { 
    46     x = document.body || null; 
    47     jg_ie = (x && typeof x.insertAdjacentHTML != "undefined"); 
    48     jg_dom = (x && !jg_ie && 
    49         typeof x.appendChild != "undefined" && 
    50         typeof document.createRange != "undefined" && 
    51         typeof (i = document.createRange()).setStartBefore != "undefined" && 
    52         typeof i.createContextualFragment != "undefined"); 
    53     jg_ihtm = (!jg_ie && !jg_dom && x && typeof x.innerHTML != "undefined"); 
    54 } 
    55  
    56 function pntDoc() 
    57 { 
    58     this.wnd.document.write(this.htm); 
    59     this.htm = ''; 
    60 } 
    61  
    62 function pntCnvDom() 
    63 { 
    64     var x = document.createRange(); 
    65     x.setStartBefore(this.cnv); 
    66     x = x.createContextualFragment(this.htm); 
    67     this.cnv.appendChild(x); 
    68     this.htm = ''; 
    69 } 
    70  
    71 function pntCnvIe() 
    72 { 
    73     this.cnv.insertAdjacentHTML("BeforeEnd", this.htm); 
    74     this.htm = ''; 
    75 } 
    76  
    77 function pntCnvIhtm() 
    78 { 
    79     this.cnv.innerHTML += this.htm; 
    80     this.htm = ''; 
    81 } 
    82  
    83 function pntCnv() 
    84 { 
    85     this.htm = ''; 
    86 } 
    87  
    88 function mkDiv(x, y, w, h) 
    89 { 
    90     this.htm += '<div style="position:absolute;'+ 
    91         'left:' + x + 'px;'+ 
    92         'top:' + y + 'px;'+ 
    93         'width:' + w + 'px;'+ 
    94         'height:' + h + 'px;'+ 
    95         'clip:rect(0,'+w+'px,'+h+'px,0);'+ 
    96         'overflow:hidden;background-color:' + this.color + ';'+ 
    97         '"><\/div>'; 
    98  
    99     //alert(this.htm); 
    100 } 
    101  
    102 function mkDivPrint(x, y, w, h) 
    103 { 
    104     this.htm += '<div style="position:absolute;'+ 
    105         'border-left:' + w + 'px solid ' + this.color + ';'+ 
    106         'left:' + x + 'px;'+ 
    107         'top:' + y + 'px;'+ 
    108         'width:' + w + 'px;'+ 
    109         'height:' + h + 'px;'+ 
    110         'clip:rect(0,'+w+'px,'+h+'px,0);'+ 
    111         'overflow:hidden;background-color:' + this.color + ';'+ 
    112         '"><\/div>'; 
    113 } 
    114  
    115 function mkLyr(x, y, w, h) 
    116 { 
    117     this.htm += '<layer '+ 
    118         'left="' + x + '" '+ 
    119         'top="' + y + '" '+ 
    120         'width="' + w + '" '+ 
    121         'height="' + h + '" '+ 
    122         'bgcolor="' + this.color + '"><\/layer>\n'; 
    123 } 
    124  
    125 function mkLbl(txt, x, y) 
    126 { 
    127     this.htm += '<div style="position:absolute;white-space:nowrap;'+ 
    128         'left:' + x + 'px;'+ 
    129         'top:' + y + 'px;'+ 
    130         'font-family:' +  this.ftFam + ';'+ 
    131         'font-size:' + this.ftSz + ';'+ 
    132         'color:' + this.color + ';' + this.ftSty + '">'+ 
    133         txt + 
    134         '<\/div>'; 
    135 } 
    136  
    137 function mkLin(x1, y1, x2, y2) 
    138 { 
    139     if (x1 > x2) 
    140     { 
    141         var _x2 = x2; 
    142         var _y2 = y2; 
    143         x2 = x1; 
    144         y2 = y1; 
    145         x1 = _x2; 
    146         y1 = _y2; 
    147     } 
    148     var dx = x2-x1, dy = Math.abs(y2-y1), 
    149     x = x1, y = y1, 
    150     yIncr = (y1 > y2)? -1 : 1; 
    151  
    152     if (dx >= dy) 
    153     { 
    154         var pr = dy<<1, 
    155         pru = pr - (dx<<1), 
    156         p = pr-dx, 
    157         ox = x; 
    158         while ((dx--) > 0) 
    159         { 
    160             ++x; 
    161             if (p > 0) 
    162             { 
    163                 this.mkDiv(ox, y, x-ox, 1); 
    164                 y += yIncr; 
    165                 p += pru; 
    166                 ox = x; 
    167             } 
    168             else p += pr; 
    169         } 
    170         this.mkDiv(ox, y, x2-ox+1, 1); 
    171     } 
    172  
    173     else 
    174     { 
    175         var pr = dx<<1, 
    176         pru = pr - (dy<<1), 
    177         p = pr-dy, 
    178         oy = y; 
    179         if (y2 <= y1) 
    180         { 
    181             while ((dy--) > 0) 
    182             { 
    183                 if (p > 0) 
    184                 { 
    185                     this.mkDiv(x++, y, 1, oy-y+1); 
    186                     y += yIncr; 
    187                     p += pru; 
    188                     oy = y; 
    189                 } 
    190                 else 
    191                 { 
    192                     y += yIncr; 
    193                     p += pr; 
    194                 } 
    195             } 
    196             this.mkDiv(x2, y2, 1, oy-y2+1); 
    197         } 
    198         else 
    199         { 
    200             while ((dy--) > 0) 
    201             { 
    202                 y += yIncr; 
    203                 if (p > 0) 
    204                 { 
    205                     this.mkDiv(x++, oy, 1, y-oy); 
    206                     p += pru; 
    207                     oy = y; 
    208                 } 
    209                 else p += pr; 
    210             } 
    211             this.mkDiv(x2, oy, 1, y2-oy+1); 
    212         } 
    213     } 
    214 } 
    215  
    216 function mkLin2D(x1, y1, x2, y2) 
    217 { 
    218     if (x1 > x2) 
    219     { 
    220         var _x2 = x2; 
    221         var _y2 = y2; 
    222         x2 = x1; 
    223         y2 = y1; 
    224         x1 = _x2; 
    225         y1 = _y2; 
    226     } 
    227     var dx = x2-x1, dy = Math.abs(y2-y1), 
    228     x = x1, y = y1, 
    229     yIncr = (y1 > y2)? -1 : 1; 
    230  
    231  
    232     var s = this.stroke; 
    233     if (dx >= dy) 
    234     { 
    235         if (s-0x3 > 0) 
    236         { 
    237             var _s = (s*dx*Math.sqrt(1+dy*dy/(dx*dx))-dx-(s>>1)*dy) / dx; 
    238             _s = (!(s-0x4)? Math.ceil(_s) : Math.round(_s)) + 1; 
    239         } 
    240         else var _s = s; 
    241         var ad = Math.ceil(s/2); 
    242  
    243         var pr = dy<<1, 
    244         pru = pr - (dx<<1), 
    245         p = pr-dx, 
    246         ox = x; 
    247         while ((dx--) > 0) 
    248         { 
    249             ++x; 
    250             if (p > 0) 
    251             { 
    252                 this.mkDiv(ox, y, x-ox+ad, _s); 
    253                 y += yIncr; 
    254                 p += pru; 
    255                 ox = x; 
    256             } 
    257             else p += pr; 
    258         } 
    259         this.mkDiv(ox, y, x2-ox+ad+1, _s); 
    260     } 
    261  
    262     else 
    263     { 
    264         if (s-0x3 > 0) 
    265         { 
    266             var _s = (s*dy*Math.sqrt(1+dx*dx/(dy*dy))-(s>>1)*dx-dy) / dy; 
    267             _s = (!(s-0x4)? Math.ceil(_s) : Math.round(_s)) + 1; 
    268         } 
    269         else var _s = s; 
    270         var ad = Math.round(s/2); 
    271  
    272         var pr = dx<<1, 
    273         pru = pr - (dy<<1), 
    274         p = pr-dy, 
    275         oy = y; 
    276         if (y2 <= y1) 
    277         { 
    278             ++ad; 
    279             while ((dy--) > 0) 
    280             { 
    281                 if (p > 0) 
    282                 { 
    283                     this.mkDiv(x++, y, _s, oy-y+ad); 
    284                     y += yIncr; 
    285                     p += pru; 
    286                     oy = y; 
    287                 } 
    288                 else 
    289                 { 
    290                     y += yIncr; 
    291                     p += pr; 
    292                 } 
    293             } 
    294             this.mkDiv(x2, y2, _s, oy-y2+ad); 
    295         } 
    296         else 
    297         { 
    298             while ((dy--) > 0) 
    299             { 
    300                 y += yIncr; 
    301                 if (p > 0) 
    302                 { 
    303                     this.mkDiv(x++, oy, _s, y-oy+ad); 
    304                     p += pru; 
    305                     oy = y; 
    306                 } 
    307                 else p += pr; 
    308             } 
    309             this.mkDiv(x2, oy, _s, y2-oy+ad+1); 
    310         } 
    311     } 
    312 } 
    313  
    314 function mkLinDott(x1, y1, x2, y2) 
    315 { 
    316     if (x1 > x2) 
    317     { 
    318         var _x2 = x2; 
    319         var _y2 = y2; 
    320         x2 = x1; 
    321         y2 = y1; 
    322         x1 = _x2; 
    323         y1 = _y2; 
    324     } 
    325     var dx = x2-x1, dy = Math.abs(y2-y1), 
    326     x = x1, y = y1, 
    327     yIncr = (y1 > y2)? -1 : 1, 
    328     drw = true; 
    329     if (dx >= dy) 
    330     { 
    331         var pr = dy<<1, 
    332         pru = pr - (dx<<1), 
    333         p = pr-dx; 
    334         while ((dx--) > 0) 
    335         { 
    336             if (drw) this.mkDiv(x, y, 1, 1); 
    337             drw = !drw; 
    338             if (p > 0) 
    339             { 
    340                 y += yIncr; 
    341                 p += pru; 
    342             } 
    343             else p += pr; 
    344             ++x; 
    345         } 
    346         if (drw) this.mkDiv(x, y, 1, 1); 
    347     } 
    348  
    349     else 
    350     { 
    351         var pr = dx<<1, 
    352         pru = pr - (dy<<1), 
    353         p = pr-dy; 
    354         while ((dy--) > 0) 
    355         { 
    356             if (drw) this.mkDiv(x, y, 1, 1); 
    357             drw = !drw; 
    358             y += yIncr; 
    359             if (p > 0) 
    360             { 
    361                 ++x; 
    362                 p += pru; 
    363             } 
    364             else p += pr; 
    365         } 
    366         if (drw) this.mkDiv(x, y, 1, 1); 
    367     } 
    368 } 
    369  
    370 function mkOv(left, top, width, height) 
    371 { 
    372     var a = width>>1, b = height>>1, 
    373     wod = width&1, hod = (height&1)+1, 
    374     cx = left+a, cy = top+b, 
    375     x = 0, y = b, 
    376     ox = 0, oy = b, 
    377     aa = (a*a)<<1, bb = (b*b)<<1, 
    378     st = (aa>>1)*(1-(b<<1)) + bb, 
    379     tt = (bb>>1) - aa*((b<<1)-1), 
    380     w, h; 
    381     while (y > 0) 
    382     { 
    383         if (st < 0) 
    384         { 
    385             st += bb*((x<<1)+0x3); 
    386             tt += (bb<<1)*(++x); 
    387         } 
    388         else if (tt < 0) 
    389         { 
    390             st += bb*((x<<1)+0x3) - (aa<<1)*(y-1); 
    391             tt += (bb<<1)*(++x) - aa*(((y--)<<1)-0x3); 
    392             w = x-ox; 
    393             h = oy-y; 
    394             if (w&0x2 && h&0x2) 
    395             { 
    396                 this.mkOvQds(cx, cy, -x+0x2, ox+wod, -oy, oy-1+hod, 1, 1); 
    397                 this.mkOvQds(cx, cy, -x+1, x-1+wod, -y-1, y+hod, 1, 1); 
    398             } 
    399             else this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, oy-h+hod, w, h); 
    400             ox = x; 
    401             oy = y; 
    402         } 
    403         else 
    404         { 
    405             tt -= aa*((y<<1)-0x3); 
    406             st -= (aa<<1)*(--y); 
    407         } 
    408     } 
    409     this.mkDiv(cx-a, cy-oy, a-ox+1, (oy<<1)+hod); 
    410     this.mkDiv(cx+ox+wod, cy-oy, a-ox+1, (oy<<1)+hod); 
    411 } 
    412  
    413 function mkOv2D(left, top, width, height) 
    414 { 
    415     var s = this.stroke; 
    416     width += s-1; 
    417     height += s-1; 
    418     var a = width>>1, b = height>>1, 
    419     wod = width&1, hod = (height&1)+1, 
    420     cx = left+a, cy = top+b, 
    421     x = 0, y = b, 
    422     aa = (a*a)<<1, bb = (b*b)<<1, 
    423     st = (aa>>1)*(1-(b<<1)) + bb, 
    424     tt = (bb>>1) - aa*((b<<1)-1); 
    425  
    426  
    427     if (s-0x4 < 0 && (!(s-0x2) || width-0x33 > 0 && height-0x33 > 0)) 
    428     { 
    429         var ox = 0, oy = b, 
    430         w, h, 
    431         pxl, pxr, pxt, pxb, pxw; 
    432         while (y > 0) 
    433         { 
    434             if (st < 0) 
    435             { 
    436                 st += bb*((x<<1)+0x3); 
    437                 tt += (bb<<1)*(++x); 
    438             } 
    439             else if (tt < 0) 
    440             { 
    441                 st += bb*((x<<1)+0x3) - (aa<<1)*(y-1); 
    442                 tt += (bb<<1)*(++x) - aa*(((y--)<<1)-0x3); 
    443                 w = x-ox; 
    444                 h = oy-y; 
    445  
    446                 if (w-1) 
    447                 { 
    448                     pxw = w+1+(s&1); 
    449                     h = s; 
    450                 } 
    451                 else if (h-1) 
    452                 { 
    453                     pxw = s; 
    454                     h += 1+(s&1); 
    455                 } 
    456                 else pxw = h = s; 
    457                 this.mkOvQds(cx, cy, -x+1, ox-pxw+w+wod, -oy, -h+oy+hod, pxw, h); 
    458                 ox = x; 
    459                 oy = y; 
    460             } 
    461             else 
    462             { 
    463                 tt -= aa*((y<<1)-0x3); 
    464                 st -= (aa<<1)*(--y); 
    465             } 
    466         } 
    467         this.mkDiv(cx-a, cy-oy, s, (oy<<1)+hod); 
    468         this.mkDiv(cx+a+wod-s+1, cy-oy, s, (oy<<1)+hod); 
    469     } 
    470  
    471  
    472     else 
    473     { 
    474         var _a = (width-((s-1)<<1))>>1, 
    475         _b = (height-((s-1)<<1))>>1, 
    476         _x = 0, _y = _b, 
    477         _aa = (_a*_a)<<1, _bb = (_b*_b)<<1, 
    478         _st = (_aa>>1)*(1-(_b<<1)) + _bb, 
    479         _tt = (_bb>>1) - _aa*((_b<<1)-1), 
    480  
    481         pxl = new Array(), 
    482         pxt = new Array(), 
    483         _pxb = new Array(); 
    484         pxl[0] = 0; 
    485         pxt[0] = b; 
    486         _pxb[0] = _b-1; 
    487         while (y > 0) 
    488         { 
    489             if (st < 0) 
    490             { 
    491                 st += bb*((x<<1)+0x3); 
    492                 tt += (bb<<1)*(++x); 
    493                 pxl[pxl.length] = x; 
    494                 pxt[pxt.length] = y; 
    495             } 
    496             else if (tt < 0) 
    497             { 
    498                 st += bb*((x<<1)+0x3) - (aa<<1)*(y-1); 
    499                 tt += (bb<<1)*(++x) - aa*(((y--)<<1)-0x3); 
    500                 pxl[pxl.length] = x; 
    501                 pxt[pxt.length] = y; 
    502             } 
    503             else 
    504             { 
    505                 tt -= aa*((y<<1)-0x3); 
    506                 st -= (aa<<1)*(--y); 
    507             } 
    508  
    509             if (_y > 0) 
    510             { 
    511                 if (_st < 0) 
    512                 { 
    513                     _st += _bb*((_x<<1)+0x3); 
    514                     _tt += (_bb<<1)*(++_x); 
    515                     _pxb[_pxb.length] = _y-1; 
    516                 } 
    517                 else if (_tt < 0) 
    518                 { 
    519                     _st += _bb*((_x<<1)+0x3) - (_aa<<1)*(_y-1); 
    520                     _tt += (_bb<<1)*(++_x) - _aa*(((_y--)<<1)-0x3); 
    521                     _pxb[_pxb.length] = _y-1; 
    522                 } 
    523                 else 
    524                 { 
    525                     _tt -= _aa*((_y<<1)-0x3); 
    526                     _st -= (_aa<<1)*(--_y); 
    527                     _pxb[_pxb.length-1]--; 
    528                 } 
    529             } 
    530         } 
    531  
    532         var ox = 0, oy = b, 
    533         _oy = _pxb[0], 
    534         l = pxl.length, 
    535         w, h; 
    536         for (var i = 0; i < l; i++) 
    537         { 
    538             if (typeof _pxb[i] != "undefined") 
    539             { 
    540                 if (_pxb[i] < _oy || pxt[i] < oy) 
    541                 { 
    542                     x = pxl[i]; 
    543                     this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, _oy+hod, x-ox, oy-_oy); 
    544                     ox = x; 
    545                     oy = pxt[i]; 
    546                     _oy = _pxb[i]; 
    547                 } 
    548             } 
    549             else 
    550             { 
    551                 x = pxl[i]; 
    552                 this.mkDiv(cx-x+1, cy-oy, 1, (oy<<1)+hod); 
    553                 this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); 
    554                 ox = x; 
    555                 oy = pxt[i]; 
    556             } 
    557         } 
    558         this.mkDiv(cx-a, cy-oy, 1, (oy<<1)+hod); 
    559         this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); 
    560     } 
    561 } 
    562  
    563 function mkOvDott(left, top, width, height) 
    564 { 
    565     var a = width>>1, b = height>>1, 
    566     wod = width&1, hod = height&1, 
    567     cx = left+a, cy = top+b, 
    568     x = 0, y = b, 
    569     aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1, 
    570     st = (aa2>>1)*(1-(b<<1)) + bb, 
    571     tt = (bb>>1) - aa2*((b<<1)-1), 
    572     drw = true; 
    573     while (y > 0) 
    574     { 
    575         if (st < 0) 
    576         { 
    577             st += bb*((x<<1)+0x3); 
    578             tt += (bb<<1)*(++x); 
    579         } 
    580         else if (tt < 0) 
    581         { 
    582             st += bb*((x<<1)+0x3) - aa4*(y-1); 
    583             tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-0x3); 
    584         } 
    585         else 
    586         { 
    587             tt -= aa2*((y<<1)-0x3); 
    588             st -= aa4*(--y); 
    589         } 
    590         if (drw) this.mkOvQds(cx, cy, -x, x+wod, -y, y+hod, 1, 1); 
    591         drw = !drw; 
    592     } 
    593 } 
    594  
    595 function mkRect(x, y, w, h) 
    596 { 
    597     var s = this.stroke; 
    598     this.mkDiv(x, y, w, s); 
    599     this.mkDiv(x+w, y, s, h); 
    600     this.mkDiv(x, y+h, w+s, s); 
    601     this.mkDiv(x, y+s, s, h-s); 
    602 } 
    603  
    604 function mkRectDott(x, y, w, h) 
    605 { 
    606     this.drawLine(x, y, x+w, y); 
    607     this.drawLine(x+w, y, x+w, y+h); 
    608     this.drawLine(x, y+h, x+w, y+h); 
    609     this.drawLine(x, y, x, y+h); 
     50 
     51var jg_ok, jg_ie, jg_fast, jg_dom, jg_moz; 
     52 
     53 
     54function _chkDHTM(x, i) 
     55{ 
     56        x = document.body || null; 
     57        jg_ie = x && typeof x.insertAdjacentHTML != "undefined" && document.createElement; 
     58        jg_dom = (x && !jg_ie && 
     59                typeof x.appendChild != "undefined" && 
     60                typeof document.createRange != "undefined" && 
     61                typeof (i = document.createRange()).setStartBefore != "undefined" && 
     62                typeof i.createContextualFragment != "undefined"); 
     63        jg_fast = jg_ie && document.all && !window.opera; 
     64        jg_moz = jg_dom && typeof x.style.MozOpacity != "undefined"; 
     65        jg_ok = !!(jg_ie || jg_dom); 
     66} 
     67 
     68function _pntCnvDom() 
     69{ 
     70        var x = this.wnd.document.createRange(); 
     71        x.setStartBefore(this.cnv); 
     72        x = x.createContextualFragment(jg_fast? this._htmRpc() : this.htm); 
     73        if(this.cnv) this.cnv.appendChild(x); 
     74        this.htm = ""; 
     75} 
     76 
     77function _pntCnvIe() 
     78{ 
     79        if(this.cnv) this.cnv.insertAdjacentHTML("BeforeEnd", jg_fast? this._htmRpc() : this.htm); 
     80        this.htm = ""; 
     81} 
     82 
     83function _pntDoc() 
     84{ 
     85        this.wnd.document.write(jg_fast? this._htmRpc() : this.htm); 
     86        this.htm = ''; 
     87} 
     88 
     89function _pntN() 
     90{ 
     91        ; 
     92} 
     93 
     94function _mkDiv(x, y, w, h) 
     95{ 
     96        this.htm += '<div style="position:absolute;'+ 
     97                'left:' + x + 'px;'+ 
     98                'top:' + y + 'px;'+ 
     99                'width:' + w + 'px;'+ 
     100                'height:' + h + 'px;'+ 
     101                'clip:rect(0,'+w+'px,'+h+'px,0);'+ 
     102                'background-color:' + this.color + 
     103                (!jg_moz? ';overflow:hidden' : '')+ 
     104                ';"><\/div>'; 
     105} 
     106 
     107function _mkDivIe(x, y, w, h) 
     108{ 
     109        this.htm += '%%'+this.color+';'+x+';'+y+';'+w+';'+h+';'; 
     110} 
     111 
     112function _mkDivPrt(x, y, w, h) 
     113{ 
     114        this.htm += '<div style="position:absolute;'+ 
     115                'border-left:' + w + 'px solid ' + this.color + ';'+ 
     116                'left:' + x + 'px;'+ 
     117                'top:' + y + 'px;'+ 
     118                'width:0px;'+ 
     119                'height:' + h + 'px;'+ 
     120                'clip:rect(0,'+w+'px,'+h+'px,0);'+ 
     121                'background-color:' + this.color + 
     122                (!jg_moz? ';overflow:hidden' : '')+ 
     123                ';"><\/div>'; 
     124} 
     125 
     126var _regex =  /%%([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);/g; 
     127function _htmRpc() 
     128{ 
     129        return this.htm.replace( 
     130                _regex, 
     131                '<div style="overflow:hidden;position:absolute;background-color:'+ 
     132                '$1;left:$2;top:$3;width:$4;height:$5"></div>\n'); 
     133} 
     134 
     135function _htmPrtRpc() 
     136{ 
     137        return this.htm.replace( 
     138                _regex, 
     139                '<div style="overflow:hidden;position:absolute;background-color:'+ 
     140                '$1;left:$2;top:$3;width:$4;height:$5;border-left:$4px solid $1"></div>\n'); 
     141} 
     142 
     143function _mkLin(x1, y1, x2, y2) 
     144{ 
     145        if(x1 > x2) 
     146        { 
     147                var _x2 = x2; 
     148                var _y2 = y2; 
     149                x2 = x1; 
     150                y2 = y1; 
     151                x1 = _x2; 
     152                y1 = _y2; 
     153        } 
     154        var dx = x2-x1, dy = Math.abs(y2-y1), 
     155        x = x1, y = y1, 
     156        yIncr = (y1 > y2)? -1 : 1; 
     157 
     158        if(dx >= dy) 
     159        { 
     160                var pr = dy<<1, 
     161                pru = pr - (dx<<1), 
     162                p = pr-dx, 
     163                ox = x; 
     164                while(dx > 0) 
     165                {--dx; 
     166                        ++x; 
     167                        if(p > 0) 
     168                        { 
     169                                this._mkDiv(ox, y, x-ox, 1); 
     170                                y += yIncr; 
     171                                p += pru; 
     172                                ox = x; 
     173                        } 
     174                        else p += pr; 
     175                } 
     176                this._mkDiv(ox, y, x2-ox+1, 1); 
     177        } 
     178 
     179        else 
     180        { 
     181                var pr = dx<<1, 
     182                pru = pr - (dy<<1), 
     183                p = pr-dy, 
     184                oy = y; 
     185                if(y2 <= y1) 
     186                { 
     187                        while(dy > 0) 
     188                        {--dy; 
     189                                if(p > 0) 
     190                                { 
     191                                        this._mkDiv(x++, y, 1, oy-y+1); 
     192                                        y += yIncr; 
     193                                        p += pru; 
     194                                        oy = y; 
     195                                } 
     196                                else 
     197                                { 
     198                                        y += yIncr; 
     199                                        p += pr; 
     200                                } 
     201                        } 
     202                        this._mkDiv(x2, y2, 1, oy-y2+1); 
     203                } 
     204                else 
     205                { 
     206                        while(dy > 0) 
     207                        {--dy; 
     208                                y += yIncr; 
     209                                if(p > 0) 
     210                                { 
     211                                        this._mkDiv(x++, oy, 1, y-oy); 
     212                                        p += pru; 
     213                                        oy = y; 
     214                                } 
     215                                else p += pr; 
     216                        } 
     217                        this._mkDiv(x2, oy, 1, y2-oy+1); 
     218                } 
     219        } 
     220} 
     221 
     222function _mkLin2D(x1, y1, x2, y2) 
     223{ 
     224        if(x1 > x2) 
     225        { 
     226                var _x2 = x2; 
     227                var _y2 = y2; 
     228                x2 = x1; 
     229                y2 = y1; 
     230                x1 = _x2; 
     231                y1 = _y2; 
     232        } 
     233        var dx = x2-x1, dy = Math.abs(y2-y1), 
     234        x = x1, y = y1, 
     235        yIncr = (y1 > y2)? -1 : 1; 
     236 
     237        var s = this.stroke; 
     238        if(dx >= dy) 
     239        { 
     240                if(dx > 0 && s-3 > 0) 
     241                { 
     242                        var _s = (s*dx*Math.sqrt(1+dy*dy/(dx*dx))-dx-(s>>1)*dy) / dx; 
     243                        _s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1; 
     244                } 
     245                else var _s = s; 
     246                var ad = Math.ceil(s/2); 
     247 
     248                var pr = dy<<1, 
     249                pru = pr - (dx<<1), 
     250                p = pr-dx, 
     251                ox = x; 
     252                while(dx > 0) 
     253                {--dx; 
     254                        ++x; 
     255                        if(p > 0) 
     256                        { 
     257                                this._mkDiv(ox, y, x-ox+ad, _s); 
     258                                y += yIncr; 
     259                                p += pru; 
     260                                ox = x; 
     261                        } 
     262                        else p += pr; 
     263                } 
     264                this._mkDiv(ox, y, x2-ox+ad+1, _s); 
     265        } 
     266 
     267        else 
     268        { 
     269                if(s-3 > 0) 
     270                { 
     271                        var _s = (s*dy*Math.sqrt(1+dx*dx/(dy*dy))-(s>>1)*dx-dy) / dy; 
     272                        _s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1; 
     273                } 
     274                else var _s = s; 
     275                var ad = Math.round(s/2); 
     276 
     277                var pr = dx<<1, 
     278                pru = pr - (dy<<1), 
     279                p = pr-dy, 
     280                oy = y; 
     281                if(y2 <= y1) 
     282                { 
     283                        ++ad; 
     284                        while(dy > 0) 
     285                        {--dy; 
     286                                if(p > 0) 
     287                                { 
     288                                        this._mkDiv(x++, y, _s, oy-y+ad); 
     289                                        y += yIncr; 
     290                                        p += pru; 
     291                                        oy = y; 
     292                                } 
     293                                else 
     294                                { 
     295                                        y += yIncr; 
     296                                        p += pr; 
     297                                } 
     298                        } 
     299                        this._mkDiv(x2, y2, _s, oy-y2+ad); 
     300                } 
     301                else 
     302                { 
     303                        while(dy > 0) 
     304                        {--dy; 
     305                                y += yIncr; 
     306                                if(p > 0) 
     307                                { 
     308                                        this._mkDiv(x++, oy, _s, y-oy+ad); 
     309                                        p += pru; 
     310                                        oy = y; 
     311                                } 
     312                                else p += pr; 
     313                        } 
     314                        this._mkDiv(x2, oy, _s, y2-oy+ad+1); 
     315                } 
     316        } 
     317} 
     318 
     319function _mkLinDott(x1, y1, x2, y2) 
     320{ 
     321        if(x1 > x2) 
     322        { 
     323                var _x2 = x2; 
     324                var _y2 = y2; 
     325                x2 = x1; 
     326                y2 = y1; 
     327                x1 = _x2; 
     328                y1 = _y2; 
     329        } 
     330        var dx = x2-x1, dy = Math.abs(y2-y1), 
     331        x = x1, y = y1, 
     332        yIncr = (y1 > y2)? -1 : 1, 
     333        drw = true; 
     334        if(dx >= dy) 
     335        { 
     336                var pr = dy<<1, 
     337                pru = pr - (dx<<1), 
     338                p = pr-dx; 
     339                while(dx > 0) 
     340                {--dx; 
     341                        if(drw) this._mkDiv(x, y, 1, 1); 
     342                        drw = !drw; 
     343                        if(p > 0) 
     344                        { 
     345                                y += yIncr; 
     346                                p += pru; 
     347                        } 
     348                        else p += pr; 
     349                        ++x; 
     350                } 
     351        } 
     352        else 
     353        { 
     354                var pr = dx<<1, 
     355                pru = pr - (dy<<1), 
     356                p = pr-dy; 
     357                while(dy > 0) 
     358                {--dy; 
     359                        if(drw) this._mkDiv(x, y, 1, 1); 
     360                        drw = !drw; 
     361                        y += yIncr; 
     362                        if(p > 0) 
     363                        { 
     364                                ++x; 
     365                                p += pru; 
     366                        } 
     367                        else p += pr; 
     368                } 
     369        } 
     370        if(drw) this._mkDiv(x, y, 1, 1); 
     371} 
     372 
     373function _mkOv(left, top, width, height) 
     374{ 
     375        var a = (++width)>>1, b = (++height)>>1, 
     376        wod = width&1, hod = height&1, 
     377        cx = left+a, cy = top+b, 
     378        x = 0, y = b, 
     379        ox = 0, oy = b, 
     380        aa2 = (a*a)<<1, aa4 = aa2<<1, bb2 = (b*b)<<1, bb4 = bb2<<1, 
     381        st = (aa2>>1)*(1-(b<<1)) + bb2, 
     382        tt = (bb2>>1) - aa2*((b<<1)-1), 
     383        w, h; 
     384        while(y > 0) 
     385        { 
     386                if(st < 0) 
     387                { 
     388                        st += bb2*((x<<1)+3); 
     389                        tt += bb4*(++x); 
     390                } 
     391                else if(tt < 0) 
     392                { 
     393                        st += bb2*((x<<1)+3) - aa4*(y-1); 
     394                        tt += bb4*(++x) - aa2*(((y--)<<1)-3); 
     395                        w = x-ox; 
     396                        h = oy-y; 
     397                        if((w&2) && (h&2)) 
     398                        { 
     399                                this._mkOvQds(cx, cy, x-2, y+2, 1, 1, wod, hod); 
     400                                this._mkOvQds(cx, cy, x-1, y+1, 1, 1, wod, hod); 
     401                        } 
     402                        else this._mkOvQds(cx, cy, x-1, oy, w, h, wod, hod); 
     403                        ox = x; 
     404                        oy = y; 
     405                } 
     406                else 
     407                { 
     408                        tt -= aa2*((y<<1)-3); 
     409                        st -= aa4*(--y); 
     410                } 
     411        } 
     412        w = a-ox+1; 
     413        h = (oy<<1)+hod; 
     414        y = cy-oy; 
     415        this._mkDiv(cx-a, y, w, h); 
     416        this._mkDiv(cx+ox+wod-1, y, w, h); 
     417} 
     418 
     419function _mkOv2D(left, top, width, height) 
     420{ 
     421        var s = this.stroke; 
     422        width += s+1; 
     423        height += s+1; 
     424        var a = width>>1, b = height>>1, 
     425        wod = width&1, hod = height&1, 
     426        cx = left+a, cy = top+b, 
     427        x = 0, y = b, 
     428        aa2 = (a*a)<<1, aa4 = aa2<<1, bb2 = (b*b)<<1, bb4 = bb2<<1, 
     429        st = (aa2>>1)*(1-(b<<1)) + bb2, 
     430        tt = (bb2>>1) - aa2*((b<<1)-1); 
     431 
     432        if(s-4 < 0 && (!(s-2) || width-51 > 0 && height-51 > 0)) 
     433        { 
     434                var ox = 0, oy = b, 
     435                w, h, 
     436                pxw; 
     437                while(y > 0) 
     438                { 
     439                        if(st < 0) 
     440                        { 
     441                                st += bb2*((x<<1)+3); 
     442                                tt += bb4*(++x); 
     443                        } 
     444                        else if(tt < 0) 
     445                        { 
     446                                st += bb2*((x<<1)+3) - aa4*(y-1); 
     447                                tt += bb4*(++x) - aa2*(((y--)<<1)-3); 
     448                                w = x-ox; 
     449                                h = oy-y; 
     450 
     451                                if(w-1) 
     452                                { 
     453                                        pxw = w+1+(s&1); 
     454                                        h = s; 
     455                                } 
     456                                else if(h-1) 
     457                                { 
     458                                        pxw = s; 
     459                                        h += 1+(s&1); 
     460                                } 
     461                                else pxw = h = s; 
     462                                this._mkOvQds(cx, cy, x-1, oy, pxw, h, wod, hod); 
     463                                ox = x; 
     464                                oy = y; 
     465                        } 
     466                        else 
     467                        { 
     468                                tt -= aa2*((y<<1)-3); 
     469                                st -= aa4*(--y); 
     470                        } 
     471                } 
     472                this._mkDiv(cx-a, cy-oy, s, (oy<<1)+hod); 
     473                this._mkDiv(cx+a+wod-s, cy-oy, s, (oy<<1)+hod); 
     474        } 
     475 
     476        else 
     477        { 
     478                var _a = (width-(s<<1))>>1, 
     479                _b = (height-(s<<1))>>1, 
     480                _x = 0, _y = _b, 
     481                _aa2 = (_a*_a)<<1, _aa4 = _aa2<<1, _bb2 = (_b*_b)<<1, _bb4 = _bb2<<1, 
     482                _st = (_aa2>>1)*(1-(_b<<1)) + _bb2, 
     483                _tt = (_bb2>>1) - _aa2*((_b<<1)-1), 
     484 
     485                pxl = new Array(), 
     486                pxt = new Array(), 
     487                _pxb = new Array(); 
     488                pxl[0] = 0; 
     489                pxt[0] = b; 
     490                _pxb[0] = _b-1; 
     491                while(y > 0) 
     492                { 
     493                        if(st < 0) 
     494                        { 
     495                                pxl[pxl.length] = x; 
     496                                pxt[pxt.length] = y; 
     497                                st += bb2*((x<<1)+3); 
     498                                tt += bb4*(++x); 
     499                        } 
     500                        else if(tt < 0) 
     501                        { 
     502                                pxl[pxl.length] = x; 
     503                                st += bb2*((x<<1)+3) - aa4*(y-1); 
     504                                tt += bb4*(++x) - aa2*(((y--)<<1)-3); 
     505                                pxt[pxt.length] = y; 
     506                        } 
     507                        else 
     508                        { 
     509                                tt -= aa2*((y<<1)-3); 
     510                                st -= aa4*(--y); 
     511                        } 
     512 
     513                        if(_y > 0) 
     514                        { 
     515                                if(_st < 0) 
     516                                { 
     517                                        _st += _bb2*((_x<<1)+3); 
     518                                        _tt += _bb4*(++_x); 
     519                                        _pxb[_pxb.length] = _y-1; 
     520                                } 
     521                                else if(_tt < 0) 
     522                                { 
     523                                        _st += _bb2*((_x<<1)+3) - _aa4*(_y-1); 
     524                                        _tt += _bb4*(++_x) - _aa2*(((_y--)<<1)-3); 
     525                                        _pxb[_pxb.length] = _y-1; 
     526                                } 
     527                                else 
     528                                { 
     529                                        _tt -= _aa2*((_y<<1)-3); 
     530                                        _st -= _aa4*(--_y); 
     531                                        _pxb[_pxb.length-1]--; 
     532                                } 
     533                        } 
     534                } 
     535 
     536                var ox = -wod, oy = b, 
     537                _oy = _pxb[0], 
     538                l = pxl.length, 
     539                w, h; 
     540                for(var i = 0; i < l; i++) 
     541                { 
     542                        if(typeof _pxb[i] != "undefined") 
     543                        { 
     544                                if(_pxb[i] < _oy || pxt[i] < oy) 
     545                                { 
     546                                        x = pxl[i]; 
     547                                        this._mkOvQds(cx, cy, x, oy, x-ox, oy-_oy, wod, hod); 
     548                                        ox = x; 
     549                                        oy = pxt[i]; 
     550                                        _oy = _pxb[i]; 
     551                                } 
     552                        } 
     553                        else 
     554                        { 
     555                                x = pxl[i]; 
     556                                this._mkDiv(cx-x, cy-oy, 1, (oy<<1)+hod); 
     557                                this._mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); 
     558                                ox = x; 
     559                                oy = pxt[i]; 
     560                        } 
     561                } 
     562                this._mkDiv(cx-a, cy-oy, 1, (oy<<1)+hod); 
     563                this._mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); 
     564        } 
     565} 
     566 
     567function _mkOvDott(left, top, width, height) 
     568{ 
     569        var a = (++width)>>1, b = (++height)>>1, 
     570        wod = width&1, hod = height&1, hodu = hod^1, 
     571        cx = left+a, cy = top+b, 
     572        x = 0, y = b, 
     573        aa2 = (a*a)<<1, aa4 = aa2<<1, bb2 = (b*b)<<1, bb4 = bb2<<1, 
     574        st = (aa2>>1)*(1-(b<<1)) + bb2, 
     575        tt = (bb2>>1) - aa2*((b<<1)-1), 
     576        drw = true; 
     577        while(y > 0) 
     578        { 
     579                if(st < 0) 
     580                { 
     581                        st += bb2*((x<<1)+3); 
     582                        tt += bb4*(++x); 
     583                } 
     584                else if(tt < 0) 
     585                { 
     586                        st += bb2*((x<<1)+3) - aa4*(y-1); 
     587                        tt += bb4*(++x) - aa2*(((y--)<<1)-3); 
     588                } 
     589                else 
     590                { 
     591                        tt -= aa2*((y<<1)-3); 
     592                        st -= aa4*(--y); 
     593                } 
     594                if(drw && y >= hodu) this._mkOvQds(cx, cy, x, y, 1, 1, wod, hod); 
     595                drw = !drw; 
     596        } 
     597} 
     598 
     599function _mkRect(x, y, w, h) 
     600{ 
     601        var s = this.stroke; 
     602        this._mkDiv(x, y, w, s); 
     603        this._mkDiv(x+w, y, s, h); 
     604        this._mkDiv(x, y+h, w+s, s); 
     605        this._mkDiv(x, y+s, s, h-s); 
     606} 
     607 
     608function _mkRectDott(x, y, w, h) 
     609{ 
     610        this.drawLine(x, y, x+w, y); 
     611        this.drawLine(x+w, y, x+w, y+h); 
     612        this.drawLine(x, y+h, x+w, y+h); 
     613        this.drawLine(x, y, x, y+h); 
    610614} 
    611615 
    612616function jsgFont() 
    613617{ 
    614     this.PLAIN = 'font-weight:normal;'; 
    615     this.BOLD = 'font-weight:bold;'; 
    616     this.ITALIC = 'font-style:italic;'; 
    617     this.ITALIC_BOLD = this.ITALIC + this.BOLD; 
    618     this.BOLD_ITALIC = this.ITALIC_BOLD; 
     618        this.PLAIN = 'font-weight:normal;'; 
     619        this.BOLD = 'font-weight:bold;'; 
     620        this.ITALIC = 'font-style:italic;'; 
     621        this.ITALIC_BOLD = this.ITALIC + this.BOLD; 
     622        this.BOLD_ITALIC = this.ITALIC_BOLD; 
    619623} 
    620624var Font = new jsgFont(); 
     
    622626function jsgStroke() 
    623627{ 
    624     this.DOTTED = -1; 
    625 } 
    626  
     628        this.DOTTED = -1; 
     629} 
    627630var Stroke = new jsgStroke(); 
    628631 
    629 function jsGraphics(id, wnd) 
    630 { 
    631     this.setColor = new Function('arg', 'this.color = arg;'); 
    632  
    633  
     632function jsGraphics(cnv, wnd) 
     633{ 
     634        this.setColor = function(x) 
     635        { 
     636                this.color = x.toLowerCase(); 
     637        }; 
     638 
     639        this.setStroke = function(x) 
     640        { 
     641                this.stroke = x; 
     642                if(!(x+1)) 
     643                { 
     644                        this.drawLine = _mkLinDott; 
     645                        this._mkOv = _mkOvDott; 
     646                        this.drawRect = _mkRectDott; 
     647                } 
     648                else if(x-1 > 0) 
     649                { 
     650                        this.drawLine = _mkLin2D; 
     651                        this._mkOv = _mkOv2D; 
     652                        this.drawRect = _mkRect; 
     653                } 
     654                else 
     655                { 
     656                        this.drawLine = _mkLin; 
     657                        this._mkOv = _mkOv; 
     658                        this.drawRect = _mkRect; 
     659                } 
     660        }; 
     661 
     662        this.setPrintable = function(arg) 
     663        { 
     664                this.printable = arg; 
     665                if(jg_fast) 
     666                { 
     667                        this._mkDiv = _mkDivIe; 
     668                        this._htmRpc = arg? _htmPrtRpc : _htmRpc; 
     669                } 
     670                else this._mkDiv = arg? _mkDivPrt : _mkDiv; 
     671        }; 
     672 
     673        this.setFont = function(fam, sz, sty) 
     674        { 
     675                this.ftFam = fam; 
     676                this.ftSz = sz; 
     677                this.ftSty = sty || Font.PLAIN; 
     678        }; 
     679 
     680        this.drawPolyline = this.drawPolyLine = function(x, y) 
     681        { 
     682                for (var i=x.length - 1; i;) 
     683                {--i; 
     684                        this.drawLine(x[i], y[i], x[i+1], y[i+1]); 
     685                } 
     686        }; 
     687/************** Xinha added *******************************************/ 
     688         
     689        this.setColor = new Function('arg', 'this.color = arg;'); 
    634690    this.getColor = new Function('return this.color'); 
    635691 
    636     this.setStroke = function(x) 
    637     { 
    638         this.stroke = x; 
    639         if (!(x+1)) 
    640         { 
    641             this.drawLine = mkLinDott; 
    642             this.mkOv = mkOvDott; 
    643             this.drawRect = mkRectDott; 
    644         } 
    645         else if (x-1 > 0) 
    646         { 
    647             this.drawLine = mkLin2D; 
    648             this.mkOv = mkOv2D; 
    649             this.drawRect = mkRect; 
    650         } 
    651         else 
    652         { 
    653             this.drawLine = mkLin; 
    654             this.mkOv = mkOv; 
    655             this.drawRect = mkRect; 
    656         } 
    657     }; 
    658  
    659  
    660  
    661     this.setPrintable = function(arg) 
    662     { 
    663         this.printable = arg; 
    664         this.mkDiv = jg_n4? mkLyr : arg? mkDivPrint : mkDiv; 
    665     }; 
    666  
    667  
    668  
    669     this.setFont = function(fam, sz, sty) 
    670     { 
    671         this.ftFam = fam; 
    672         this.ftSz = sz; 
    673         this.ftSty = sty || Font.PLAIN; 
    674     }; 
    675  
    676  
    677  
    678     this.drawPolyline = this.drawPolyLine = function(x, y, s) 
    679     { 
    680         var i = x.length-1; while (i >= 0) 
    681             this.drawLine(x[i], y[i], x[--i], y[i]); 
    682     }; 
    683  
    684  
    685  
    686     this.fillRect = function(x, y, w, h) 
    687     { 
    688         this.mkDiv(x, y, w, h); 
    689     }; 
    690  
    691  
     692        this.fillRect = function(x, y, w, h) 
     693        { 
     694                this._mkDiv(x, y, w, h); 
     695        }; 
     696         
    692697    this.fillRectPattern = function(x, y, w, h, url) 
    693698    { 
     
    704709            'z-index:100;"><\/div>'; 
    705710        //alert(this.htm); 
    706     } 
     711    }; 
    707712 
    708713    this.drawHandle = function(x, y, w, h, cursor) 
     
    718723        "cursor: '" + cursor + "';"+ 
    719724        '" class="handleBox" id="' + cursor + '" ><\/div>'; 
    720     } 
    721  
    722     this.drawHandleBox = function(x, y, w, h, cursor) 
     725    }; 
     726         
     727        this.drawHandleBox = function(x, y, w, h, cursor) 
    723728    { 
    724729         
     
    732737        "cursor: '" + cursor + "';"+ 
    733738        '" class="handleBox" id="' + cursor + '" ><\/div>'; 
    734  
    735          
    736     } 
    737  
    738     this.drawPolygon = function(x, y) 
    739     { 
    740         this.drawPolyline(x, y); 
    741         this.drawLine(x[x.length-1], y[x.length-1], x[0], y[0]); 
    742739    }; 
    743740 
    744  
    745  
    746     this.drawEllipse = this.drawOval = function(x, y, w, h) 
    747     { 
    748         this.mkOv(x, y, w, h); 
    749     }; 
    750  
    751  
    752  
    753     this.fillEllipse = this.fillOval = function(left, top, w, h) 
    754     { 
    755         var a = (w -= 1)>>1, b = (h -= 1)>>1, 
    756         wod = (w&1)+1, hod = (h&1)+1, 
    757         cx = left+a, cy = top+b, 
    758         x = 0, y = b, 
    759         ox = 0, oy = b, 
    760         aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1, 
    761         st = (aa2>>1)*(1-(b<<1)) + bb, 
    762         tt = (bb>>1) - aa2*((b<<1)-1), 
    763         pxl, dw, dh; 
    764         if (w+1) while (y > 0) 
    765         { 
    766             if (st < 0) 
    767             { 
    768                 st += bb*((x<<1)+0x3); 
    769                 tt += (bb<<1)*(++x); 
    770             } 
    771             else if (tt < 0) 
    772             { 
    773                 st += bb*((x<<1)+0x3) - aa4*(y-1); 
    774                 pxl = cx-x; 
    775                 dw = (x<<1)+wod; 
    776                 tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-0x3); 
    777                 dh = oy-y; 
    778                 this.mkDiv(pxl, cy-oy, dw, dh); 
    779                 this.mkDiv(pxl, cy+oy-dh+hod, dw, dh); 
    780                 ox = x; 
    781                 oy = y; 
    782             } 
    783             else 
    784             { 
    785                 tt -= aa2*((y<<1)-0x3); 
    786                 st -= aa4*(--y); 
    787             } 
    788         } 
    789         this.mkDiv(cx-a, cy-oy, w+1, (oy<<1)+hod); 
    790     }; 
    791  
    792     this.drawString = mkLbl; 
    793  
    794     this.clear = function() 
    795     { 
    796         this.htm = ""; 
    797         if (this.cnv) this.cnv.innerHTML = this.defhtm; 
    798          
    799     }; 
    800  
    801     this.mkOvQds = function(cx, cy, xl, xr, yt, yb, w, h) 
    802     { 
    803         this.mkDiv(xr+cx, yt+cy, w, h); 
    804         this.mkDiv(xr+cx, yb+cy, w, h); 
    805         this.mkDiv(xl+cx, yb+cy, w, h); 
    806         this.mkDiv(xl+cx, yt+cy, w, h); 
    807     }; 
    808  
    809     this.setStroke(1); 
    810     this.setPrintable(false); 
    811     this.setFont('verdana,geneva,helvetica,sans-serif', String.fromCharCode(0x31, 0x32, 0x70, 0x78), Font.PLAIN); 
    812     this.color = '#000000'; 
    813     this.htm = ''; 
    814     this.wnd = wnd || window; 
    815  
    816     if (!(jg_ie || jg_dom || jg_ihtm)) chkDHTM(); 
    817     if (typeof id != 'string' || !id) this.paint = pntDoc; 
    818     else 
    819     { 
    820         this.cnv = document.all? (this.wnd.document.all[id] || null) 
    821             : document.getElementById? (this.wnd.document.getElementById(id) || null) 
    822             : null; 
    823         this.defhtm = (this.cnv && this.cnv.innerHTML)? this.cnv.innerHTML : ''; 
    824         this.paint = jg_dom? pntCnvDom : jg_ie? pntCnvIe : jg_ihtm? pntCnvIhtm : pntCnv; 
    825     } 
    826 } 
     741/************** end Xinha added *******************************************/ 
     742        this.drawPolygon = function(x, y) 
     743        { 
     744                this.drawPolyline(x, y); 
     745                this.drawLine(x[x.length-1], y[x.length-1], x[0], y[0]); 
     746        }; 
     747 
     748        this.drawEllipse = this.drawOval = function(x, y, w, h) 
     749        { 
     750                this._mkOv(x, y, w, h); 
     751        }; 
     752 
     753        this.fillEllipse = this.fillOval = function(left, top, w, h) 
     754        { 
     755                var a = w>>1, b = h>>1, 
     756                wod = w&1, hod = h&1, 
     757                cx = left+a, cy = top+b, 
     758                x = 0, y = b, oy = b, 
     759                aa2 = (a*a)<<1, aa4 = aa2<<1, bb2 = (b*b)<<1, bb4 = bb2<<1, 
     760                st = (aa2>>1)*(1-(b<<1)) + bb2, 
     761                tt = (bb2>>1) - aa2*((b<<1)-1), 
     762                xl, dw, dh; 
     763                if(w) while(y > 0) 
     764                { 
     765                        if(st < 0) 
     766                        { 
     767                                st += bb2*((x<<1)+3); 
     768                                tt += bb4*(++x); 
     769                        } 
     770                        else if(tt < 0) 
     771                        { 
     772                                st += bb2*((x<<1)+3) - aa4*(y-1); 
     773                                xl = cx-x; 
     774                                dw = (x<<1)+wod; 
     775                                tt += bb4*(++x) - aa2*(((y--)<<1)-3); 
     776                                dh = oy-y; 
     777                                this._mkDiv(xl, cy-oy, dw, dh); 
     778                                this._mkDiv(xl, cy+y+hod, dw, dh); 
     779                                oy = y; 
     780                        } 
     781                        else 
     782                        { 
     783                                tt -= aa2*((y<<1)-3); 
     784                                st -= aa4*(--y); 
     785                        } 
     786                } 
     787                this._mkDiv(cx-a, cy-oy, w, (oy<<1)+hod); 
     788        }; 
     789 
     790        this.fillArc = function(iL, iT, iW, iH, fAngA, fAngZ) 
     791        { 
     792                var a = iW>>1, b = iH>>1, 
     793                iOdds = (iW&1) | ((iH&1) << 16), 
     794                cx = iL+a, cy = iT+b, 
     795                x = 0, y = b, ox = x, oy = y, 
     796                aa2 = (a*a)<<1, aa4 = aa2<<1, bb2 = (b*b)<<1, bb4 = bb2<<1, 
     797                st = (aa2>>1)*(1-(b<<1)) + bb2, 
     798                tt = (bb2>>1) - aa2*((b<<1)-1), 
     799                // Vars for radial boundary lines 
     800                xEndA, yEndA, xEndZ, yEndZ, 
     801                iSects = (1 << (Math.floor((fAngA %= 360.0)/180.0) << 3)) 
     802                                | (2 << (Math.floor((fAngZ %= 360.0)/180.0) << 3)) 
     803                                | ((fAngA >= fAngZ) << 16), 
     804                aBndA = new Array(b+1), aBndZ = new Array(b+1); 
     805                 
     806                // Set up radial boundary lines 
     807                fAngA *= Math.PI/180.0; 
     808                fAngZ *= Math.PI/180.0; 
     809                xEndA = cx+Math.round(a*Math.cos(fAngA)); 
     810                yEndA = cy+Math.round(-b*Math.sin(fAngA)); 
     811                _mkLinVirt(aBndA, cx, cy, xEndA, yEndA); 
     812                xEndZ = cx+Math.round(a*Math.cos(fAngZ)); 
     813                yEndZ = cy+Math.round(-b*Math.sin(fAngZ)); 
     814                _mkLinVirt(aBndZ, cx, cy, xEndZ, yEndZ); 
     815 
     816                while(y > 0) 
     817                { 
     818                        if(st < 0) // Advance x 
     819                        { 
     820                                st += bb2*((x<<1)+3); 
     821                                tt += bb4*(++x); 
     822                        } 
     823                        else if(tt < 0) // Advance x and y 
     824                        { 
     825                                st += bb2*((x<<1)+3) - aa4*(y-1); 
     826                                ox = x; 
     827                                tt += bb4*(++x) - aa2*(((y--)<<1)-3); 
     828                                this._mkArcDiv(ox, y, oy, cx, cy, iOdds, aBndA, aBndZ, iSects); 
     829                                oy = y; 
     830                        } 
     831                        else // Advance y 
     832                        { 
     833                                tt -= aa2*((y<<1)-3); 
     834                                st -= aa4*(--y); 
     835                                if(y && (aBndA[y] != aBndA[y-1] || aBndZ[y] != aBndZ[y-1])) 
     836                                { 
     837                                        this._mkArcDiv(x, y, oy, cx, cy, iOdds, aBndA, aBndZ, iSects); 
     838                                        ox = x; 
     839                                        oy = y; 
     840                                } 
     841                        } 
     842                } 
     843                this._mkArcDiv(x, 0, oy, cx, cy, iOdds, aBndA, aBndZ, iSects); 
     844                if(iOdds >> 16) // Odd height 
     845                { 
     846                        if(iSects >> 16) // Start-angle > end-angle 
     847                        { 
     848                                var xl = (yEndA <= cy || yEndZ > cy)? (cx - x) : cx; 
     849                                this._mkDiv(xl, cy, x + cx - xl + (iOdds & 0xffff), 1); 
     850                        } 
     851                        else if((iSects & 0x01) && yEndZ > cy) 
     852                                this._mkDiv(cx - x, cy, x, 1); 
     853                } 
     854        }; 
     855 
     856/* fillPolygon method, implemented by Matthieu Haller. 
     857This javascript function is an adaptation of the gdImageFilledPolygon for Walter Zorn lib. 
     858C source of GD 1.8.4 found at http://www.boutell.com/gd/ 
     859 
     860THANKS to Kirsten Schulz for the polygon fixes! 
     861 
     862The intersection finding technique of this code could be improved 
     863by remembering the previous intertersection, and by using the slope. 
     864That could help to adjust intersections to produce a nice 
     865interior_extrema. */ 
     866        this.fillPolygon = function(array_x, array_y) 
     867        { 
     868                var i; 
     869                var y; 
     870                var miny, maxy; 
     871                var x1, y1; 
     872                var x2, y2; 
     873                var ind1, ind2; 
     874                var ints; 
     875 
     876                var n = array_x.length; 
     877                if(!n) return; 
     878 
     879                miny = array_y[0]; 
     880                maxy = array_y[0]; 
     881                for(i = 1; i < n; i++) 
     882                { 
     883                        if(array_y[i] < miny) 
     884                                miny = array_y[i]; 
     885 
     886                        if(array_y[i] > maxy) 
     887                                maxy = array_y[i]; 
     888                } 
     889                for(y = miny; y <= maxy; y++) 
     890                { 
     891                        var polyInts = new Array(); 
     892                        ints = 0; 
     893                        for(i = 0; i < n; i++) 
     894                        { 
     895                                if(!i) 
     896                                { 
     897                                        ind1 = n-1; 
     898                                        ind2 = 0; 
     899                                } 
     900                                else 
     901                                { 
     902                                        ind1 = i-1; 
     903                                        ind2 = i; 
     904                                } 
     905                                y1 = array_y[ind1]; 
     906                                y2 = array_y[ind2]; 
     907                                if(y1 < y2) 
     908                                { 
     909                                        x1 = array_x[ind1]; 
     910                                        x2 = array_x[ind2]; 
     911                                } 
     912                                else if(y1 > y2) 
     913                                { 
     914                                        y2 = array_y[ind1]; 
     915                                        y1 = array_y[ind2]; 
     916                                        x2 = array_x[ind1]; 
     917                                        x1 = array_x[ind2]; 
     918                                } 
     919                                else continue; 
     920 
     921                                 //  Modified 11. 2. 2004 Walter Zorn 
     922                                if((y >= y1) && (y < y2)) 
     923                                        polyInts[ints++] = Math.round((y-y1) * (x2-x1) / (y2-y1) + x1); 
     924 
     925                                else if((y == maxy) && (y > y1) && (y <= y2)) 
     926                                        polyInts[ints++] = Math.round((y-y1) * (x2-x1) / (y2-y1) + x1); 
     927                        } 
     928                        polyInts.sort(_CompInt); 
     929                        for(i = 0; i < ints; i+=2) 
     930                                this._mkDiv(polyInts[i], y, polyInts[i+1]-polyInts[i]+1, 1); 
     931                } 
     932        }; 
     933 
     934        this.drawString = function(txt, x, y) 
     935        { 
     936                this.htm += '<div style="position:absolute;white-space:nowrap;'+ 
     937                        'left:' + x + 'px;'+ 
     938                        'top:' + y + 'px;'+ 
     939                        'font-family:' +  this.ftFam + ';'+ 
     940                        'font-size:' + this.ftSz + ';'+ 
     941                        'color:' + this.color + ';' + this.ftSty + '">'+ 
     942                        txt + 
     943                        '<\/div>'; 
     944        }; 
     945 
     946/* drawStringRect() added by Rick Blommers. 
     947Allows to specify the size of the text rectangle and to align the 
     948text both horizontally (e.g. right) and vertically within that rectangle */ 
     949        this.drawStringRect = function(txt, x, y, width, halign) 
     950        { 
     951                this.htm += '<div style="position:absolute;overflow:hidden;'+ 
     952                        'left:' + x + 'px;'+ 
     953                        'top:' + y + 'px;'+ 
     954                        'width:'+width +'px;'+ 
     955                        'text-align:'+halign+';'+ 
     956                        'font-family:' +  this.ftFam + ';'+ 
     957                        'font-size:' + this.ftSz + ';'+ 
     958                        'color:' + this.color + ';' + this.ftSty + '">'+ 
     959                        txt + 
     960                        '<\/div>'; 
     961        }; 
     962 
     963        this.drawImage = function(imgSrc, x, y, w, h, a) 
     964        { 
     965                this.htm += '<div style="position:absolute;'+ 
     966                        'left:' + x + 'px;'+ 
     967                        'top:' + y + 'px;'+ 
     968                        'width:' +  w + 'px;'+ 
     969                        'height:' + h + 'px;">'+ 
     970                        '<img src="' + imgSrc + '" width="' + w + '" height="' + h + '"' + (a? (' '+a) : '') + '>'+ 
     971                        '<\/div>'; 
     972        }; 
     973 
     974        this.clear = function() 
     975        { 
     976                this.htm = ""; 
     977                if(this.cnv) this.cnv.innerHTML = ""; 
     978        }; 
     979 
     980        this._mkOvQds = function(cx, cy, x, y, w, h, wod, hod) 
     981        { 
     982                var xl = cx - x, xr = cx + x + wod - w, yt = cy - y, yb = cy + y + hod - h; 
     983                if(xr > xl+w) 
     984                { 
     985                        this._mkDiv(xr, yt, w, h); 
     986                        this._mkDiv(xr, yb, w, h); 
     987                } 
     988                else 
     989                        w = xr - xl + w; 
     990                this._mkDiv(xl, yt, w, h); 
     991                this._mkDiv(xl, yb, w, h); 
     992        }; 
     993         
     994        this._mkArcDiv = function(x, y, oy, cx, cy, iOdds, aBndA, aBndZ, iSects) 
     995        { 
     996                var xrDef = cx + x + (iOdds & 0xffff), y2, h = oy - y, xl, xr, w; 
     997 
     998                if(!h) h = 1; 
     999                x = cx - x; 
     1000 
     1001                if(iSects & 0xff0000) // Start-angle > end-angle 
     1002                { 
     1003                        y2 = cy - y - h; 
     1004                        if(iSects & 0x00ff) 
     1005                        { 
     1006                                if(iSects & 0x02) 
     1007                                { 
     1008                                        xl = Math.max(x, aBndZ[y]); 
     1009                                        w = xrDef - xl; 
     1010                                        if(w > 0) this._mkDiv(xl, y2, w, h); 
     1011                                } 
     1012                                if(iSects & 0x01) 
     1013                                { 
     1014                                        xr = Math.min(xrDef, aBndA[y]); 
     1015                                        w = xr - x; 
     1016                                        if(w > 0) this._mkDiv(x, y2, w, h); 
     1017                                } 
     1018                        } 
     1019                        else 
     1020                                this._mkDiv(x, y2, xrDef - x, h); 
     1021                        y2 = cy + y + (iOdds >> 16); 
     1022                        if(iSects & 0xff00) 
     1023                        { 
     1024                                if(iSects & 0x0100) 
     1025                                { 
     1026                                        xl = Math.max(x, aBndA[y]); 
     1027                                        w = xrDef - xl; 
     1028                                        if(w > 0) this._mkDiv(xl, y2, w, h); 
     1029                                } 
     1030                                if(iSects & 0x0200) 
     1031                                { 
     1032                                        xr = Math.min(xrDef, aBndZ[y]); 
     1033                                        w = xr - x; 
     1034                                        if(w > 0) this._mkDiv(x, y2, w, h); 
     1035                                } 
     1036                        } 
     1037                        else 
     1038                                this._mkDiv(x, y2, xrDef - x, h); 
     1039                } 
     1040                else 
     1041                { 
     1042                        if(iSects & 0x00ff) 
     1043                        { 
     1044                                if(iSects & 0x02) 
     1045                                        xl = Math.max(x, aBndZ[y]); 
     1046                                else 
     1047                                        xl = x; 
     1048                                if(iSects & 0x01) 
     1049                                        xr = Math.min(xrDef, aBndA[y]); 
     1050                                else 
     1051                                        xr = xrDef; 
     1052                                y2 = cy - y - h; 
     1053                                w = xr - xl; 
     1054                                if(w > 0) this._mkDiv(xl, y2, w, h); 
     1055                        } 
     1056                        if(iSects & 0xff00) 
     1057                        { 
     1058                                if(iSects & 0x0100) 
     1059                                        xl = Math.max(x, aBndA[y]); 
     1060                                else 
     1061                                        xl = x; 
     1062                                if(iSects & 0x0200) 
     1063                                        xr = Math.min(xrDef, aBndZ[y]); 
     1064                                else 
     1065                                        xr = xrDef; 
     1066                                y2 = cy + y + (iOdds >> 16); 
     1067                                w = xr - xl; 
     1068                                if(w > 0) this._mkDiv(xl, y2, w, h); 
     1069                        } 
     1070                } 
     1071        }; 
     1072 
     1073        this.setStroke(1); 
     1074        this.setFont("verdana,geneva,helvetica,sans-serif", "12px", Font.PLAIN); 
     1075        this.color = "#000000"; 
     1076        this.htm = ""; 
     1077        this.wnd = wnd || window; 
     1078 
     1079        if(!jg_ok) _chkDHTM(); 
     1080        if(jg_ok) 
     1081        { 
     1082                if(cnv) 
     1083                { 
     1084                        if(typeof(cnv) == "string") 
     1085                                this.cont = document.all? (this.wnd.document.all[cnv] || null) 
     1086                                        : document.getElementById? (this.wnd.document.getElementById(cnv) || null) 
     1087                                        : null; 
     1088                        else if(cnv == window.document) 
     1089                                this.cont = document.getElementsByTagName("body")[0]; 
     1090                        // If cnv is a direct reference to a canvas DOM node 
     1091                        // (option suggested by Andreas Luleich) 
     1092                        else this.cont = cnv; 
     1093                        // Create new canvas inside container DIV. Thus the drawing and clearing 
     1094                        // methods won't interfere with the container's inner html. 
     1095                        // Solution suggested by Vladimir. 
     1096                        this.cnv = this.wnd.document.createElement("div"); 
     1097                        this.cnv.style.fontSize=0; 
     1098                        this.cont.appendChild(this.cnv); 
     1099                        this.paint = jg_dom? _pntCnvDom : _pntCnvIe; 
     1100                } 
     1101                else 
     1102                        this.paint = _pntDoc; 
     1103        } 
     1104        else 
     1105                this.paint = _pntN; 
     1106 
     1107        this.setPrintable(false); 
     1108} 
     1109 
     1110function _mkLinVirt(aLin, x1, y1, x2, y2) 
     1111{ 
     1112        var dx = Math.abs(x2-x1), dy = Math.abs(y2-y1), 
     1113        x = x1, y = y1, 
     1114        xIncr = (x1 > x2)? -1 : 1, 
     1115        yIncr = (y1 > y2)? -1 : 1, 
     1116        p, 
     1117        i = 0; 
     1118        if(dx >= dy) 
     1119        { 
     1120                var pr = dy<<1, 
     1121                pru = pr - (dx<<1); 
     1122                p = pr-dx; 
     1123                while(dx > 0) 
     1124                {--dx; 
     1125                        if(p > 0)    //  Increment y 
     1126                        { 
     1127                                aLin[i++] = x; 
     1128                                y += yIncr; 
     1129                                p += pru; 
     1130                        } 
     1131                        else p += pr; 
     1132                        x += xIncr; 
     1133                } 
     1134        } 
     1135        else 
     1136        { 
     1137                var pr = dx<<1, 
     1138                pru = pr - (dy<<1); 
     1139                p = pr-dy; 
     1140                while(dy > 0) 
     1141                {--dy; 
     1142                        y += yIncr; 
     1143                        aLin[i++] = x; 
     1144                        if(p > 0)    //  Increment x 
     1145                        { 
     1146                                x += xIncr; 
     1147                                p += pru; 
     1148                        } 
     1149                        else p += pr; 
     1150                } 
     1151        } 
     1152        for(var len = aLin.length, i = len-i; i;) 
     1153                aLin[len-(i--)] = x; 
     1154}; 
     1155 
     1156function _CompInt(x, y) 
     1157{ 
     1158        return(x - y); 
     1159} 
     1160 
  • branches/ray/plugins/ExtendedFileManager/config.inc.php

    r761 r975  
    2626 */ 
    2727 
    28 if(empty($insertMode)) 
    29     $insertMode="image"; 
     28if(isset($_REQUEST['mode'])) $insertMode=$_REQUEST['mode']; 
     29        if(!isset($insertMode)) $insertMode="image"; 
    3030 
    3131/** 
     
    6565/* 
    6666 The URL to the above path, the web browser needs to be able to see it. 
    67  It can be protected via .htaccess on apache or directory permissions on IIS, 
    68  check you web server documentation for futher information on directory protection 
    69  If this directory needs to be publicly accessiable, remove scripting capabilities 
    70  for this directory (i.e. disable PHP, Perl, CGI). We only want to store assets 
    71  in this directory and its subdirectories. 
     67 Please remove scripting capabilities in this directory 
     68 for this directory (i.e. disable PHP, Perl, CGI; see .htaccess file in demo_images folder). 
    7269*/ 
    7370$IMConfig['images_url'] = str_replace( array("backend.php","manager.php"), "", $_SERVER["PHP_SELF"] ) . $IMConfig['images_dir']; 
    7471//$IMConfig['files_url'] = 'url/to/files_dir'; 
    7572 
     73/* 
     74  Format of the Date Modified in list view. 
     75  It has to be a string understood by the PHP date() function (for possible values see http://http://php.net/manual/en/function.date.php) 
     76*/ 
     77$IMConfig['date_format'] = "d.m.y H:i"; 
    7678/* 
    7779  Possible values: true, false 
     
    123125 GD does not require the following definition. 
    124126*/ 
    125 define('IMAGE_TRANSFORM_LIB_PATH', 'C:/"Program Files"/ImageMagick-5.5.7-Q16/'); 
     127define('IMAGE_TRANSFORM_LIB_PATH', '/usr/bin/'); 
     128//define('IMAGE_TRANSFORM_LIB_PATH', 'C:/"Program Files"/ImageMagick-5.5.7-Q16/'); 
    126129 
    127130 
     
    288291  "max"  - the maximum allowed by the server (the value is retrieved from the server configuration). 
    289292*/ 
    290 $IMConfig['max_filesize_kb_image'] = 2000000; 
     293$IMConfig['max_filesize_kb_image'] = 200; 
    291294 
    292295$IMConfig['max_filesize_kb_link'] = 5000; 
  • branches/ray/plugins/ExtendedFileManager/editorFrame.php

    r761 r975  
    55 * Version: Updated on 08-01-2005 by Afru 
    66 * Version: Updated on 21-06-2006 by Krzysztof Kotowicz 
    7  * Package: ExtendedFileManager (EFM 1.1.1) 
     7 * Version: Updated on 20-01-2008 by Raimund Meyer 
     8 * Package: ExtendedFileManager (EFM 1.4) 
    89 * http://www.afrusoft.com/htmlarea 
    910 */ 
     
    3839 
    3940        var mode = "<?php echo $editor->getAction(); ?>" //crop, scale, measure 
    40  
    41 var currentImageFile = "<?php if(count($imageInfo)>0) echo rawurlencode($imageInfo['file']); ?>"; 
     41        var currentImageFile = "<?php if(count($imageInfo)>0) echo rawurlencode($imageInfo['file']); ?>"; 
     42        var fileSize = "<?php echo (round($imageInfo['filesize'] / 1024,1)).' KB' ?>"; 
     43         
    4244 
    4345<?php if ($editor->isFileSaved() == 1) { ?> 
  • branches/ray/plugins/ExtendedFileManager/extended-file-manager.js

    r892 r975  
    11/** 
    22 * ExtendedFileManager extended-file-manager.js file. 
    3  * Authors: Wei Zhuo, Afru 
     3 * Authors: Wei Zhuo, Afru, Krzysztof Kotowicz, Raimund Meyer 
    44 * Modified by: Krzysztof Kotowicz <koto@webworkers.pl> 
    55 * Version: Updated on 08-01-2005 by Afru 
    66 * Version: Modified on 20-06-2006 by Krzysztof Kotowicz 
    7  * Package: ExtendedFileManager (EFM 1.1.1) 
    8  * http://www.afrusoft.com/htmlarea 
     7 * Version: Updated on 29-10-2006 by Raimund Meyer 
     8 * Version: Updated on 20-01-2008 by Raimund Meyer 
     9 * Package: ExtendedFileManager (EFM 1.4) 
    910 */ 
    1011 
     
    3536        cfg.addToolbarElement("linkfile", "createlink", 1); 
    3637        }; 
    37     } 
     38 
     39    var manager = editor.config.ExtendedFileManager.backend + '__function=manager'; 
     40    if(cfg.ExtendedFileManager.backend_config != null) 
     41    { 
     42      manager += '&backend_config=' 
     43        + encodeURIComponent(cfg.ExtendedFileManager.backend_config); 
     44      manager += '&backend_config_hash=' 
     45        + encodeURIComponent(cfg.ExtendedFileManager.backend_config_hash); 
     46      manager += '&backend_config_secret_key_location=' 
     47        + encodeURIComponent(cfg.ExtendedFileManager.backend_config_secret_key_location); 
     48    } 
     49 
     50    if(cfg.ExtendedFileManager.backend_data != null) 
     51    { 
     52        for ( var i in cfg.ExtendedFileManager.backend_data ) 
     53        { 
     54            manager += '&' + i + '=' + encodeURIComponent(cfg.ExtendedFileManager.backend_data[i]); 
     55        } 
     56    } 
     57    cfg.ExtendedFileManager.manager = manager; 
     58} 
    3859 
    3960ExtendedFileManager._pluginInfo = { 
    4061    name          : "ExtendedFileManager", 
    41     version       : "1.1.1", 
    42     developer     : "Afru, Krzysztof Kotowicz", 
    43     developer_url : "http://www.afrusoft.com/htmlarea/", 
     62    version       : "1.4", 
     63    developer     : "Afru, Krzysztof Kotowicz, Raimund Meyer", 
     64    developer_url : "http://xinha.org", 
    4465    license       : "htmlArea" 
    4566}; 
     
    97118 
    98119    } 
    99  
    100     var manager = editor.config.ExtendedFileManager.backend + '__function=manager'; 
    101     if(editor.config.ExtendedFileManager.backend_config != null) 
    102     { 
    103       manager += '&backend_config=' 
    104         + encodeURIComponent(editor.config.ExtendedFileManager.backend_config); 
    105       manager += '&backend_config_hash=' 
    106         + encodeURIComponent(editor.config.ExtendedFileManager.backend_config_hash); 
    107       manager += '&backend_config_secret_key_location=' 
    108         + encodeURIComponent(editor.config.ExtendedFileManager.backend_config_secret_key_location); 
    109     } 
    110  
    111     if(editor.config.ExtendedFileManager.backend_data != null) 
    112     { 
    113         for ( var i in editor.config.ExtendedFileManager.backend_data ) 
    114         { 
    115             manager += '&' + i + '=' + encodeURIComponent(editor.config.ExtendedFileManager.backend_data[i]); 
    116         } 
    117     } 
    118  
    119     Dialog(manager, function(param){ 
     120    Dialog(this.config.ExtendedFileManager.manager, function(param){ 
    120121        if (!param) 
    121122        {   // user must have pressed Cancel 
     
    247248        }; 
    248249 
    249     var manager = _editor_url + 'plugins/ExtendedFileManager/manager.php?mode=link'; 
    250     if(editor.config.ExtendedFileManager.backend_config != null) 
    251     { 
    252        manager += '&backend_config=' 
    253                + encodeURIComponent(editor.config.ExtendedFileManager.backend_config); 
    254        manager += '&backend_config_hash=' 
    255                + encodeURIComponent(editor.config.ExtendedFileManager.backend_config_hash); 
    256        manager += '&backend_config_secret_key_location=' 
    257                + encodeURIComponent(editor.config.ExtendedFileManager.backend_config_secret_key_location); 
    258     } 
    259  
    260     if(editor.config.ExtendedFileManager.backend_data != null) 
    261     { 
    262         for ( var i in editor.config.ExtendedFileManager.backend_data ) 
    263         { 
    264             manager += '&' + i + '=' + encodeURIComponent(editor.config.ExtendedFileManager.backend_data[i]); 
    265         } 
    266     } 
    267  
    268  
    269     Dialog(manager, function(param){ 
     250    Dialog(this.config.ExtendedFileManager.manager+'&mode=link', function(param){ 
    270251        if (!param) 
    271252            return false; 
     
    304285        editor.updateToolbar(); 
    305286    }, outparam); 
    306  
    307287}; 
    308288 
  • branches/ray/plugins/ExtendedFileManager/images.php

    r862 r975