[ Index ]
 

Code source de GeekLog 1.4.1

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/public_html/fckeditor/editor/_source/internals/ -> fckundo_ie.js (source)

   1  /*
   2   * FCKeditor - The text editor for internet
   3   * Copyright (C) 2003-2006 Frederico Caldeira Knabben
   4   * 
   5   * Licensed under the terms of the GNU Lesser General Public License:
   6   *         http://www.opensource.org/licenses/lgpl-license.php
   7   * 
   8   * For further information visit:
   9   *         http://www.fckeditor.net/
  10   * 
  11   * "Support Open Source software. What about a donation today?"
  12   * 
  13   * File Name: fckundo_ie.js
  14   *     IE specific implementation for the Undo/Redo system.
  15   * 
  16   * File Authors:
  17   *         Frederico Caldeira Knabben (fredck@fckeditor.net)
  18   */
  19  
  20  var FCKUndo = new Object() ;
  21  
  22  FCKUndo.SavedData = new Array() ;
  23  FCKUndo.CurrentIndex = -1 ;
  24  FCKUndo.TypesCount = FCKUndo.MaxTypes = 25 ;
  25  FCKUndo.Typing = false ;
  26  
  27  FCKUndo.SaveUndoStep = function()
  28  {
  29      if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
  30          return ;
  31  
  32      // Shrink the array to the current level.
  33      FCKUndo.SavedData = FCKUndo.SavedData.slice( 0, FCKUndo.CurrentIndex + 1 ) ;
  34  
  35      // Get the Actual HTML.
  36      var sHtml = FCK.EditorDocument.body.innerHTML ;
  37  
  38      // Cancel operation if the new step is identical to the previous one.
  39      if ( FCKUndo.CurrentIndex >= 0 && sHtml == FCKUndo.SavedData[ FCKUndo.CurrentIndex ][0] )
  40          return ;
  41  
  42      // If we reach the Maximun number of undo levels, we must remove the first
  43      // entry of the list shifting all elements.
  44      if ( FCKUndo.CurrentIndex + 1 >= FCKConfig.MaxUndoLevels )
  45          FCKUndo.SavedData.shift() ;
  46      else
  47          FCKUndo.CurrentIndex++ ;
  48  
  49      // Get the actual selection.
  50      var sBookmark ;
  51      if ( FCK.EditorDocument.selection.type == 'Text' )
  52          sBookmark = FCK.EditorDocument.selection.createRange().getBookmark() ;
  53  
  54      // Save the new level in front of the actual position.
  55      FCKUndo.SavedData[ FCKUndo.CurrentIndex ] = [ sHtml, sBookmark ] ;
  56  
  57      FCK.Events.FireEvent( "OnSelectionChange" ) ;
  58  }
  59  
  60  FCKUndo.CheckUndoState = function()
  61  {
  62      return ( FCKUndo.Typing || FCKUndo.CurrentIndex > 0 ) ;
  63  }
  64  
  65  FCKUndo.CheckRedoState = function()
  66  {
  67      return ( !FCKUndo.Typing && FCKUndo.CurrentIndex < ( FCKUndo.SavedData.length - 1 ) ) ;
  68  }
  69  
  70  FCKUndo.Undo = function()
  71  {
  72      if ( FCKUndo.CheckUndoState() )
  73      {
  74          // If it is the first step.
  75          if ( FCKUndo.CurrentIndex == ( FCKUndo.SavedData.length - 1 ) )
  76          {
  77              // Save the actual state for a possible "Redo" call.
  78              FCKUndo.SaveUndoStep() ;
  79          }
  80  
  81          // Go a step back.
  82          FCKUndo._ApplyUndoLevel( --FCKUndo.CurrentIndex ) ;
  83  
  84          FCK.Events.FireEvent( "OnSelectionChange" ) ;
  85      }
  86  }
  87  
  88  FCKUndo.Redo = function()
  89  {
  90      if ( FCKUndo.CheckRedoState() )
  91      {
  92          // Go a step forward.
  93          FCKUndo._ApplyUndoLevel( ++FCKUndo.CurrentIndex ) ;
  94  
  95          FCK.Events.FireEvent( "OnSelectionChange" ) ;
  96      }
  97  }
  98  
  99  FCKUndo._ApplyUndoLevel = function(level)
 100  {
 101      var oData = FCKUndo.SavedData[ level ] ;
 102      
 103      if ( !oData )
 104          return ;
 105  
 106      // Update the editor contents with that step data.
 107      FCK.SetInnerHtml( oData[0] ) ;
 108  //    FCK.EditorDocument.body.innerHTML = oData[0] ;
 109  
 110      if ( oData[1] ) 
 111      {
 112          var oRange = FCK.EditorDocument.selection.createRange() ;
 113          oRange.moveToBookmark( oData[1] ) ;
 114          oRange.select() ;
 115      }
 116      
 117      FCKUndo.TypesCount = 0 ; 
 118      FCKUndo.Typing = false ;
 119  }


Généré le : Wed Nov 21 12:27:40 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics