Changeset 703 for trunk


Ignore:
Timestamp:
01/28/07 03:43:05 (12 years ago)
Author:
ray
Message:

Ticket #900 retain editing position position between modes

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/XinhaCore.js

    r700 r703  
    23712371  } 
    23722372}; 
     2373//Control character for retaining edit location when switching modes 
     2374Xinha.prototype.cc = String.fromCharCode(173);  
    23732375 
    23742376// Switches editor mode; parameter can be "textmode" or "wysiwyg".  If no 
     
    23842386  { 
    23852387    case "textmode": 
     2388      this.setCC("iframe"); 
    23862389      html = this.outwardHtml(this.getHTML()); 
    23872390      this.setHTML(html); 
     
    23972400        this._statusBarTextMode.style.display = ""; 
    23982401      } 
    2399  
    24002402      this.notifyOf('modechange', {'mode':'text'}); 
     2403      this.findCC("textarea");  
    24012404    break; 
    24022405 
    24032406    case "wysiwyg": 
     2407      this.setCC("textarea"); 
    24042408      html = this.inwardHtml(this.getHTML()); 
    24052409      this.deactivateEditor(); 
     
    24132417        this._statusBarTextMode.style.display = "none"; 
    24142418      } 
    2415  
    24162419      this.notifyOf('modechange', {'mode':'wysiwyg'}); 
     2420      this.findCC("iframe"); 
    24172421    break; 
    24182422 
     
    54705474    y = scope.pageYOffset; 
    54715475  } 
    5472   else if (document.documentElement && document.documentElement.scrollTop) 
     5476  else if (scope.document.documentElement && document.documentElement.scrollTop) 
    54735477    // Explorer 6 Strict 
    54745478  { 
     
    54765480    y = scope.document.documentElement.scrollTop; 
    54775481  } 
    5478   else if (document.body) // all other Explorers 
     5482  else if (scope.document.body) // all other Explorers 
    54795483  { 
    54805484    x = scope.document.body.scrollLeft; 
  • trunk/modules/Gecko/Gecko.js

    r696 r703  
    655655}; 
    656656 
     657Xinha.prototype.setCC = function ( target ) 
     658{ 
     659  if ( target == "textarea" ) 
     660  { 
     661    var ta = this._textArea; 
     662    var index = ta.selectionStart; 
     663    var before = ta.value.substring( 0, index ) 
     664    var after = ta.value.substring( index, ta.value.length ); 
     665 
     666    if ( after.match(/^[^<]*>/) ) 
     667    { 
     668      var tagEnd = after.indexOf(">") + 1; 
     669      ta.value = before + after.substring( 0, tagEnd ) + this.cc + after.substring( tagEnd, after.length ); 
     670    } 
     671    else ta.value = before + this.cc + after; 
     672  } 
     673  else 
     674  { 
     675    var sel = this._getSelection(); 
     676    sel.getRangeAt(0).insertNode( document.createTextNode( this.cc ) ); 
     677  } 
     678}; 
     679 
     680Xinha.prototype.findCC = function ( target ) 
     681{ 
     682 
     683  var findIn = ( target == 'textarea' ) ? window : this._iframe.contentWindow; 
     684  if( findIn.find( this.cc ) ) 
     685  { 
     686    if (target == "textarea") 
     687    { 
     688      var ta = this._textArea; 
     689      var start = pos = ta.selectionStart; 
     690      var end = ta.selectionEnd; 
     691      var scrollTop = ta.scrollTop; 
     692      ta.value = ta.value.substring( 0, start ) + ta.value.substring( end, ta.value.length ); 
     693      ta.selectionStart = pos; 
     694      ta.selectionEnd = pos; 
     695      ta.scrollTop = scrollTop 
     696      ta.focus(); 
     697    } 
     698    else 
     699    { 
     700      var sel = this.getSelection(); 
     701      sel.getRangeAt(0).deleteContents(); 
     702    } 
     703  }   
     704}; 
    657705/*--------------------------------------------------------------------------*/ 
    658706/*------------ EXTEND SOME STANDARD "Xinha.prototype" METHODS --------------*/ 
  • trunk/modules/InternetExplorer/InternetExplorer.js

    r697 r703  
    400400  return element.outerHTML; 
    401401}; 
     402 
     403Xinha.prototype.setCC = function ( target ) 
     404{ 
     405  if ( target == "textarea" ) 
     406  { 
     407    var ta = this._textArea; 
     408    var pos = document.selection.createRange(); 
     409    pos.collapse(); 
     410    pos.text = this.cc; 
     411    var index = ta.value.indexOf( this.cc ); 
     412    var before = ta.value.substring( 0, index ); 
     413    var after  = ta.value.substring( index + this.cc.length , ta.value.length ); 
     414     
     415    if ( after.match(/^[^<]*>/) ) 
     416    { 
     417      var tagEnd = after.indexOf(">") + 1; 
     418      ta.value = before + after.substring( 0, tagEnd ) + this.cc + after.substring( tagEnd, after.length ); 
     419    } 
     420    else ta.value = before + this.cc + after; 
     421  } 
     422  else 
     423  { 
     424    var sel = this.getSelection(); 
     425    var r = sel.createRange();  
     426    r.collapse(); 
     427    r.text = this.cc; 
     428  } 
     429}; 
     430 
     431Xinha.prototype.findCC = function ( target ) 
     432{ 
     433  var findIn = ( target == 'textarea' ) ? this._textArea : this._doc.body; 
     434  range = findIn.createTextRange(); 
     435  if( range.findText( this.cc ) ) 
     436  { 
     437    range.select(); 
     438    range.text = ''; 
     439  } 
     440  if ( target == 'textarea' ) this._textArea.focus(); 
     441}; 
Note: See TracChangeset for help on using the changeset viewer.