svn commit: r578051 [11/31] - in /lenya/branches/revolution/1.3.x/src: java/org/apache/lenya/cms/content/flat/ webapp/lenya/modules/xinha/ webapp/lenya/modules/xinha/contrib/ webapp/lenya/modules/xinha/examples/ webapp/lenya/modules/xinha/images/ webap...

[email protected]
Newsgroups gmane.comp.cms.lenya.cvs
Message-ID <[email protected]>
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/Classes/ExtendedFileManager.php
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/Classes/ExtendedFileManager.php?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/Classes/ExtendedFileManager.php (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/Classes/ExtendedFileManager.php Fri Sep 21 03:36:30 2007
@@ -0,0 +1,825 @@
+<?php
+/**
+ * ExtendedFileManager, list images, directories, and thumbnails.
+ * Authors: Wei Zhuo, Afru, Krzysztof Kotowicz, Raimund Meyer
+ * Version: Updated on 08-01-2005 by Afru
+ * Version: Updated on 04-07-2006 by Krzysztof Kotowicz
+ * Version: Updated on 29-10-2006 by Raimund Meyer
+ * Package: ExtendedFileManager (EFM 1.1.3)
+ * http://www.afrusoft.com/htmlarea
+ */
+
+/**
+ * We use classes from ImageManager to avoid code duplication
+ */
+require_once '../ImageManager/Classes/Files.php';
+
+/**
+ * ExtendedFileManager Class.
+ * @author $Author: ray $
+ * @author $Author: ray $
+ * @version $Id: ExtendedFileManager.php 677 2007-01-19 22:24:36Z ray $
+ */
+class ExtendedFileManager 
+{
+	/**
+	 * Configuration array.
+	 */
+	var $config;
+
+	/**
+	 * Array of directory information.
+	 */
+	var $dirs;
+	
+    /**
+     * Manager mode - image | link
+     */
+	var $mode;
+
+	/**
+	 * Constructor. Create a new Image Manager instance.
+	 * @param array $config configuration array, see config.inc.php
+	 */
+	function ExtendedFileManager($config, $mode = null)
+	{
+		$this->config = $config;
+		
+		$this->mode = empty($mode) ? (empty($config['insert_mode']) ? 'image' : $config['insert_mode']): $mode;
+	}
+
+	/**
+	 * Get the base directory.
+	 * @return string base dir, see config.inc.php
+	 */
+	function getImagesDir()
+	{
+		if ($this->mode == 'link' && isset($this->config['files_dir']))
+			Return $this->config['files_dir'];
+		else Return $this->config['images_dir'];
+	}
+
+	/**
+	 * Get the base URL.
+	 * @return string base url, see config.inc.php
+	 */
+	function getImagesURL()
+	{
+		if ($this->mode == 'link' && isset($this->config['files_url']))
+				Return $this->config['files_url'];
+		else Return $this->config['images_url'];
+	}
+
+	function isValidBase()
+	{
+		return is_dir($this->getImagesDir());
+	}
+
+	/**
+	 * Get the tmp file prefix.
+     * @return string tmp file prefix.
+	 */
+	function getTmpPrefix() 
+	{
+		Return $this->config['tmp_prefix'];
+	}
+
+	/**
+	 * Get the sub directories in the base dir.
+	 * Each array element contain
+	 * the relative path (relative to the base dir) as key and the 
+	 * full path as value.
+	 * @return array of sub directries
+	 * <code>array('path name' => 'full directory path', ...)</code>
+	 */
+	function getDirs() 
+	{
+		if(is_null($this->dirs))
+		{
+			$dirs = $this->_dirs($this->getImagesDir(),'/');
+			ksort($dirs);
+			$this->dirs = $dirs;
+		}
+		return $this->dirs;
+	}
+
+	/**
+	 * Recursively travese the directories to get a list
+	 * of accessable directories.
+	 * @param string $base the full path to the current directory
+	 * @param string $path the relative path name
+	 * @return array of accessiable sub-directories
+	 * <code>array('path name' => 'full directory path', ...)</code>
+	 */
+	function _dirs($base, $path) 
+	{
+		$base = Files::fixPath($base);
+		$dirs = array();
+
+		if($this->isValidBase() == false)
+			return $dirs;
+
+		$d = @dir($base);
+		
+		while (false !== ($entry = $d->read())) 
+		{
+			//If it is a directory, and it doesn't start with
+			// a dot, and if is it not the thumbnail directory
+			if(is_dir($base.$entry) 
+				&& substr($entry,0,1) != '.'
+				&& $this->isThumbDir($entry) == false) 
+			{
+				$relative = Files::fixPath($path.$entry);
+				$fullpath = Files::fixPath($base.$entry);
+				$dirs[$relative] = $fullpath;
+				$dirs = array_merge($dirs, $this->_dirs($fullpath, $relative));
+			}
+		}
+		$d->close();
+
+		Return $dirs;
+	}
+
+	/**
+	 * Get all the files and directories of a relative path.
+	 * @param string $path relative path to be base path.
+	 * @return array of file and path information.
+	 * <code>array(0=>array('relative'=>'fullpath',...), 1=>array('filename'=>fileinfo array(),...)</code>
+	 * fileinfo array: <code>array('url'=>'full url', 
+	 *                       'relative'=>'relative to base', 
+	 *                        'fullpath'=>'full file path', 
+	 *                        'image'=>imageInfo array() false if not image,
+	 *                        'stat' => filestat)</code>
+	 */
+	function getFiles($path) 
+	{
+		$files = array();
+		$dirs = array();
+
+        $valid_extensions = $this->mode == 'image' ? $this->config['allowed_image_extensions'] : $this->config['allowed_link_extensions'];
+
+		if($this->isValidBase() == false)
+			return array($files,$dirs);
+
+		$path = Files::fixPath($path);
+		$base = Files::fixPath($this->getImagesDir());
+		$fullpath = Files::makePath($base,$path);
+
+
+		$d = @dir($fullpath);
+		
+		while (false !== ($entry = $d->read())) 
+		{
+			//not a dot file or directory
+			if(substr($entry,0,1) != '.')
+			{
+				if(is_dir($fullpath.$entry)
+					&& $this->isThumbDir($entry) == false)
+				{
+					$relative = Files::fixPath($path.$entry);
+					$full = Files::fixPath($fullpath.$entry);
+					$count = $this->countFiles($full);
+					$dirs[$relative] = array('fullpath'=>$full,'entry'=>$entry,'count'=>$count, 'stat'=>stat($fullpath.$entry));
+				}
+
+				else if(is_file($fullpath.$entry) && $this->isThumb($entry)==false && $this->isTmpFile($entry) == false) 
+				{
+					$afruext = strtolower(substr(strrchr($entry, "."), 1));
+
+                    if(in_array($afruext,$valid_extensions))
+					{
+
+						$file['url'] = Files::makePath($this->config['base_url'],$path).$entry;
+						$file['relative'] = $path.$entry;
+						$file['fullpath'] = $fullpath.$entry;
+						$img = $this->getImageInfo($fullpath.$entry);
+						if(!is_array($img)) $img[0]=$img[1]=0;
+						$file['image'] = $img;
+						$file['stat'] = stat($fullpath.$entry);
+						$file['ext'] = $afruext;
+						$files[$entry] = $file;
+					}
+
+				}
+			}
+		}
+		$d->close();
+		ksort($dirs);
+		ksort($files);
+		
+		Return array($dirs, $files);
+	}	
+
+	/**
+	 * Count the number of files and directories in a given folder
+	 * minus the thumbnail folders and thumbnails.
+	 */
+	function countFiles($path) 
+	{
+		$total = 0;
+
+		if(is_dir($path)) 
+		{
+			$d = @dir($path);
+
+			while (false !== ($entry = $d->read())) 
+			{
+				//echo $entry."<br>";
+				if(substr($entry,0,1) != '.'
+					&& $this->isThumbDir($entry) == false
+					&& $this->isTmpFile($entry) == false
+					&& $this->isThumb($entry) == false) 
+				{
+					$total++;
+				}
+			}
+			$d->close();
+		}
+		return $total;
+	}
+
+	/**
+	 * Get image size information.
+	 * @param string $file the image file
+	 * @return array of getImageSize information, 
+	 *  false if the file is not an image.
+	 */
+	function getImageInfo($file) 
+	{
+		Return @getImageSize($file);
+	}
+
+	/**
+	 * Check if the file contains the thumbnail prefix.
+	 * @param string $file filename to be checked
+	 * @return true if the file contains the thumbnail prefix, false otherwise.
+	 */
+	function isThumb($file) 
+	{
+		$len = strlen($this->config['thumbnail_prefix']);
+		if(substr($file,0,$len)==$this->config['thumbnail_prefix'])
+			Return true;
+		else
+			Return false;
+	}
+
+	/**
+	 * Check if the given directory is a thumbnail directory.
+	 * @param string $entry directory name
+	 * @return true if it is a thumbnail directory, false otherwise
+	 */
+	function isThumbDir($entry) 
+	{
+		if($this->config['thumbnail_dir'] == false
+			|| strlen(trim($this->config['thumbnail_dir'])) == 0)
+			Return false;		
+		else
+			Return ($entry == $this->config['thumbnail_dir']);
+	}
+
+	/**
+	 * Check if the given file is a tmp file.
+	 * @param string $file file name
+	 * @return boolean true if it is a tmp file, false otherwise
+	 */
+	function isTmpFile($file) 
+	{
+		$len = strlen($this->config['tmp_prefix']);
+		if(substr($file,0,$len)==$this->config['tmp_prefix'])
+			Return true;
+		else
+			Return false;	 	
+	}
+
+	/**
+	 * For a given image file, get the respective thumbnail filename
+	 * no file existence check is done.
+	 * @param string $fullpathfile the full path to the image file
+	 * @return string of the thumbnail file
+	 */
+	function getThumbName($fullpathfile) 
+	{
+		$path_parts = pathinfo($fullpathfile);
+		
+		$thumbnail = $this->config['thumbnail_prefix'].$path_parts['basename'];
+
+		if($this->config['safe_mode'] == true
+			|| strlen(trim($this->config['thumbnail_dir'])) == 0)
+		{
+			Return Files::makeFile($path_parts['dirname'],$thumbnail);
+		}
+		else
+		{
+			if(strlen(trim($this->config['thumbnail_dir'])) > 0)
+			{
+				$path = Files::makePath($path_parts['dirname'],$this->config['thumbnail_dir']);
+				if(!is_dir($path))
+					Files::createFolder($path);
+				Return Files::makeFile($path,$thumbnail);
+			}
+			else //should this ever happen?
+			{
+				//error_log('ExtendedFileManager: Error in creating thumbnail name');
+			}
+		}
+	}
+	
+	/**
+	 * Similar to getThumbName, but returns the URL, base on the
+	 * given base_url in config.inc.php
+	 * @param string $relative the relative image file name, 
+	 * relative to the base_dir path
+	 * @return string the url of the thumbnail
+	 */
+	function getThumbURL($relative) 
+	{
+		$path_parts = pathinfo($relative);
+		$thumbnail = $this->config['thumbnail_prefix'].$path_parts['basename'];
+		if($path_parts['dirname']=='\\') $path_parts['dirname']='/';
+
+		if($this->config['safe_mode'] == true
+			|| strlen(trim($this->config['thumbnail_dir'])) == 0)
+		{
+			Return Files::makeFile($this->getImagesURL(),$thumbnail);
+		}
+		else
+		{
+			if(strlen(trim($this->config['thumbnail_dir'])) > 0)
+			{
+				$path = Files::makePath($path_parts['dirname'],$this->config['thumbnail_dir']);
+				$url_path = Files::makePath($this->getImagesURL(), $path);
+				Return Files::makeFile($url_path,$thumbnail);
+			}
+			else //should this ever happen?
+			{
+				//error_log('ExtendedFileManager: Error in creating thumbnail url');
+			}
+
+		}
+	}
+
+   /**
+    * For a given image file, get the respective resized filename
+    * no file existence check is done.
+    * @param string $fullpathfile the full path to the image file
+    * @param integer $width the intended width
+    * @param integer $height the intended height
+    * @param boolean $mkDir whether to attempt to make the resized_dir if it doesn't exist
+    * @return string of the resized filename
+    */
+	function getResizedName($fullpathfile, $width, $height, $mkDir = TRUE)
+	{
+		$path_parts = pathinfo($fullpathfile);
+
+		$thumbnail = $this->config['resized_prefix']."_{$width}x{$height}_{$path_parts['basename']}";
+
+		if( strlen(trim($this->config['resized_dir'])) == 0 || $this->config['safe_mode'] == true )
+		{
+			Return Files::makeFile($path_parts['dirname'],$thumbnail);
+		}
+		else
+		{
+      $path = Files::makePath($path_parts['dirname'],$this->config['resized_dir']);
+      if($mkDir && !is_dir($path))
+        Files::createFolder($path);
+      Return Files::makeFile($path,$thumbnail);
+		}
+	}
+
+	/**
+	 * Check if the given path is part of the subdirectories
+	 * under the base_dir.
+	 * @param string $path the relative path to be checked
+	 * @return boolean true if the path exists, false otherwise
+	 */
+	function validRelativePath($path) 
+	{
+		$dirs = $this->getDirs();
+		if($path == '/')
+			Return true;
+		//check the path given in the url against the 
+		//list of paths in the system.
+		for($i = 0; $i < count($dirs); $i++)
+		{
+			$key = key($dirs);
+			//we found the path
+			if($key == $path)
+				Return true;
+		
+			next($dirs);
+		}		
+		Return false;
+	}
+
+	/**
+	 * Process uploaded files, assumes the file is in 
+	 * $_FILES['upload'] and $_POST['dir'] is set.
+	 * The dir must be relative to the base_dir and exists.
+	 * @return null
+	 */
+	function processUploads() 
+	{
+		if($this->isValidBase() == false)
+			return;
+
+		$relative = null;
+
+		if(isset($_POST['dir'])) 
+			$relative = rawurldecode($_POST['dir']);
+		else
+			return;
+
+		//check for the file, and must have valid relative path
+		if(isset($_FILES['upload']) && $this->validRelativePath($relative))
+		{
+			Return $this->_processFiles($relative, $_FILES['upload']);
+		}
+	}
+
+	/**
+	 * Process upload files. The file must be an 
+	 * uploaded file. Any duplicate
+	 * file will be renamed. See Files::copyFile for details
+	 * on renaming.
+	 * @param string $relative the relative path where the file
+	 * should be copied to.
+	 * @param array $file the uploaded file from $_FILES
+	 * @return boolean true if the file was processed successfully, 
+	 * false otherwise
+	 */
+	function _processFiles($relative, $file)
+	{
+		
+		if($file['error']!=0)
+		{
+			Return false;
+		}
+
+		if(!is_file($file['tmp_name']))
+		{
+			Return false;
+		}
+
+		if(!is_uploaded_file($file['tmp_name']))
+		{
+			Files::delFile($file['tmp_name']);
+			Return false;
+		}
+
+        $valid_extensions = $this->mode == 'image' ? $this->config['allowed_image_extensions'] : $this->config['allowed_link_extensions'];
+        $max_size = $this->mode == 'image' ? $this->config['max_filesize_kb_image'] : $this->config['max_filesize_kb_link'];
+		$afruext = strtolower(substr(strrchr($file['name'], "."), 1));
+
+		if(!in_array($afruext, $valid_extensions))
+		{
+			Files::delFile($file['tmp_name']);
+			Return 'Cannot upload $extension='.$afruext.'$ Files. Permission denied.';
+		}
+
+		if($file['size']>($max_size*1024))
+		{
+			Files::delFile($file['tmp_name']);
+			Return 'Unble to upload file. Maximum file size [$max_size='.$max_size.'$ KB] exceeded.';
+		}
+
+		if(!empty($this->config['max_foldersize_mb']) &&  (Files::dirSize($this->getImagesDir()))+$file['size']> ($this->config['max_foldersize_mb']*1048576))
+		{
+			Files::delFile($file['tmp_name']);
+			Return ("Cannot upload. Maximum folder size reached. Delete unwanted files and try again.");
+		}
+
+		//now copy the file
+		$path = Files::makePath($this->getImagesDir(),$relative);
+		$result = Files::copyFile($file['tmp_name'], $path, $file['name']);
+
+		//no copy error
+		if(!is_int($result))
+		{
+			Files::delFile($file['tmp_name']);
+			Return 'File "$file='.$file['name'].'$" successfully uploaded.';
+		}
+
+		//delete tmp files.
+		Files::delFile($file['tmp_name']);
+		Return false;
+
+	}
+
+
+	function getDiskInfo()
+	{
+        if (empty($this->config['max_foldersize_mb']))
+            return '';
+            
+		$tmpFreeSize=($this->config['max_foldersize_mb']*1048576)-Files::dirSize($this->getImagesDir());
+
+		if(!is_numeric($tmpFreeSize) || $tmpFreeSize<0)	$tmpFreeSize=0;
+        
+		Return 'Total Size : $max_foldersize_mb='.$this->config['max_foldersize_mb'].'$ MB, Free Space: $free_space='.Files::formatSize($tmpFreeSize).'$';
+	}
+
+
+
+	/**
+	 * Get the URL of the relative file.
+	 * basically appends the relative file to the 
+	 * base_url given in config.inc.php
+	 * @param string $relative a file the relative to the base_dir
+	 * @return string the URL of the relative file.
+	 */
+	function getFileURL($relative) 
+	{
+		Return Files::makeFile($this->getImagesURL(),$relative);
+	}
+
+	/**
+	 * Get the fullpath to a relative file.
+	 * @param string $relative the relative file.
+	 * @return string the full path, .ie. the base_dir + relative.
+	 */
+	function getFullPath($relative) 
+	{
+		Return Files::makeFile($this->getImagesDir(),$relative);;
+	}
+
+	/**
+	 * Get the default thumbnail.
+	 * @return string default thumbnail, empty string if 
+	 * the thumbnail doesn't exist.
+	 */
+	function getDefaultThumb() 
+	{
+		if(is_file($this->config['default_thumbnail']))
+			Return $this->config['default_thumbnail'];
+		else 
+			Return '';
+	}
+
+
+	/**
+	 * Checks image size. If the image size is less than default size
+	 * returns the original size else returns default size to display thumbnail
+	*/
+	function checkImageSize($relative)
+	{
+		$fullpath = Files::makeFile($this->getImagesDir(),$relative);
+
+		$afruext = strtolower(substr(strrchr($relative, "."), 1));
+		
+		if(!in_array($afruext,$this->config['thumbnail_extensions']))
+		{
+			$imgInfo=array(0,0);
+			Return $imgInfo;
+		}
+		else
+		{
+			$imgInfo = @getImageSize($fullpath);
+			//not an image
+			if(!is_array($imgInfo))
+			{
+				$imgInfo=array(0,0);
+				Return $imgInfo;
+			}
+			else
+			{
+				if($imgInfo[0] > $this->config['thumbnail_width'])
+				$imgInfo[0] = $this->config['thumbnail_width'];
+
+				if($imgInfo[1] > $this->config['thumbnail_height'])
+				$imgInfo[1] = $this->config['thumbnail_height'];
+
+				Return $imgInfo;
+			}
+		}
+
+	}
+
+
+	/**
+	 * Get the thumbnail url to be displayed. 
+	 * If the thumbnail exists, and it is up-to-date
+	 * the thumbnail url will be returns. If the 
+	 * file is not an image, a default image will be returned.
+	 * If it is an image file, and no thumbnail exists or 
+	 * the thumbnail is out-of-date (i.e. the thumbnail 
+	 * modified time is less than the original file)
+	 * then a thumbs.php?img=filename.jpg is returned.
+	 * The thumbs.php url will generate a new thumbnail
+	 * on the fly. If the image is less than the dimensions
+	 * of the thumbnails, the image will be display instead.
+	 * @param string $relative the relative image file.
+	 * @return string the url of the thumbnail, be it
+	 * actually thumbnail or a script to generate the
+	 * thumbnail on the fly.
+	 */
+	function getThumbnail($relative) 
+	{
+		global $IMConfig;
+		
+		$fullpath = Files::makeFile($this->getImagesDir(),$relative);
+
+		//not a file???
+		if(!is_file($fullpath))
+			Return $this->getDefaultThumb();
+
+		$afruext = strtolower(substr(strrchr($relative, "."), 1));
+		
+		if(!in_array($afruext,$this->config['thumbnail_extensions']))
+		{
+			if(is_file('icons/'.$afruext.'.gif')) 
+				Return('icons/'.$afruext.'.gif');
+			else
+				Return $this->getDefaultThumb();
+		}
+
+		$imgInfo = @getImageSize($fullpath);
+
+		//not an image
+		if(!is_array($imgInfo))
+			Return $this->getDefaultThumb();
+
+
+		//Returning original image as thumbnail without Image Library by Afru
+		if(!$this->config['img_library']) Return $this->getFileURL($relative);
+
+
+		//the original image is smaller than thumbnails,
+		//so just return the url to the original image.
+		if ($imgInfo[0] <= $this->config['thumbnail_width']
+		 && $imgInfo[1] <= $this->config['thumbnail_height'])
+			Return $this->getFileURL($relative);
+
+		$thumbnail = $this->getThumbName($fullpath);
+		
+		//check for thumbnails, if exists and
+		// it is up-to-date, return the thumbnail url
+		if(is_file($thumbnail))
+		{
+			if(filemtime($thumbnail) >= filemtime($fullpath))
+				Return $this->getThumbURL($relative);
+		}
+
+		//well, no thumbnail was found, so ask the thumbs.php
+		//to generate the thumbnail on the fly.
+		Return $IMConfig['backend_url'] . '__function=thumbs&img='.rawurlencode($relative)."&mode=$this->mode";
+	}
+
+	/**
+	 * Delete and specified files.
+	 * @return boolean true if delete, false otherwise
+	 */
+	function deleteFiles() 
+	{
+		if(isset($_GET['delf']))
+			return $this->_delFile(rawurldecode($_GET['delf']));
+        return false;
+	}
+
+	/**
+	 * Delete and specified directories.
+	 * @return boolean true if delete, false otherwise
+	 */
+	function deleteDirs() 
+	{
+		 if(isset($_GET['deld']))
+			return $this->_delDir(rawurldecode($_GET['deld']));		
+		 else
+			 Return false;
+	}
+
+	/**
+	 * Delete the relative file, and any thumbnails.
+	 * @param string $relative the relative file.
+	 * @return boolean true if deleted, false otherwise.
+	 */
+	function _delFile($relative) 
+	{
+		$fullpath = Files::makeFile($this->getImagesDir(),$relative);
+	
+		$afruext = strtolower(substr(strrchr($relative, "."), 1));
+
+        $valid_extensions = $this->mode == 'image' ? $this->config['allowed_image_extensions'] : $this->config['allowed_link_extensions'];
+
+		if(!in_array($afruext,$valid_extensions))
+		{
+			return false;
+		}
+
+		//check that the file is an image
+		if(is_array($this->getImageInfo($fullpath)))
+		{
+			$thumbnail = $this->getThumbName($fullpath);
+			Files::delFile($thumbnail);
+		}
+
+		Return Files::delFile($fullpath);
+	}
+
+	/**
+	 * Delete directories recursively.
+	 * @param string $relative the relative path to be deleted.
+	 * @return boolean true if deleted, false otherwise.
+	 */
+	function _delDir($relative) 
+	{
+		$fullpath = Files::makePath($this->getImagesDir(),$relative);
+	//	if($this->countFiles($fullpath) <= 0)
+			return Files::delFolder($fullpath,true); //delete recursively.
+		//else
+			//Return false;
+	}
+
+	/**
+	 * Create new directories.
+	 * If in safe_mode, nothing happens.
+	 * @return boolean true if created, false otherwise.
+	 */
+	function processNewDir() 
+	{
+		if($this->config['safe_mode'] == true)
+			Return false;
+
+		if(isset($_GET['newDir']) && isset($_GET['dir']))
+		{
+			$newDir = rawurldecode($_GET['newDir']);
+			$dir = rawurldecode($_GET['dir']);
+			$path = Files::makePath($this->getImagesDir(),$dir);
+			$fullpath = Files::makePath($path, Files::escape($newDir));
+			if(is_dir($fullpath))
+				Return false;
+
+			Return Files::createFolder($fullpath);
+		}
+	}
+
+	/**
+	 * Renames files if certain GET variables are set
+	 * @return bool
+	 */
+	function processRenames()
+	{
+		if(!empty($_GET['rename']) && !empty($_GET['renameTo']))
+		{
+			// new file name (without path and extension)
+			$newName = Files::escape(rawurldecode($_GET['renameTo']));
+			$newName = str_replace('.', '', $newName);
+
+			// path to file (from base images directory)
+			$oldName = rawurldecode($_GET['rename']);
+
+			// strip parent dir ("..") to avoid escaping from base directiory
+			$oldName = preg_replace('#\.\.#', '', $oldName);
+
+			if (is_dir($oldPath = Files::makeFile($this->getImagesDir(), $_GET['dir'].$oldName)))
+			{
+				$newPath = Files::makeFile($this->getImagesDir(), $_GET['dir'].$newName);
+				return Files::rename($oldPath,$newPath);
+			}
+			else 
+			{
+				// path to old file
+				$oldPath = Files::makeFile($this->getImagesDir(), $oldName);
+	
+				$ret = Files::renameFile($oldPath, $newName);
+				if ($ret === true) {
+					// delete old thumbnail
+					Files::delFile($this->getThumbname($oldPath));
+				}
+			}
+			return $ret;
+		}
+		
+		return null;
+	}
+
+	function processPaste()
+	{
+		switch ($_GET['paste'])
+		{
+			case 'copyFile':
+				$src = Files::makeFile($this->getImagesDir(), $_GET['srcdir'].$_GET['file']);
+				$file = $_GET['file'];
+				$dest = Files::makeFile($this->getImagesDir(), $_GET['dir']);
+				return  Files::copyFile($src,$dest,$file);
+			break;
+			case 'copyDir':
+				$basePath = $this->getImagesDir();
+				$src = $_GET['srcdir'].$_GET['file'];
+				$dest = $_GET['dir'].$_GET['file'];
+				return Files::copyDir($basePath,$src,$dest);
+			break;
+			case 'moveFile':
+				$src = Files::makePath($this->getImagesDir(), $_GET['srcdir'].$_GET['file']);
+				$dest = Files::makePath($this->getImagesDir(), $_GET['dir'].$_GET['file']);
+				return Files::rename($src,$dest);
+			break;
+			case 'moveDir':
+				$src = Files::makeFile($this->getImagesDir(), $_GET['srcdir'].$_GET['file']);
+				$dest = Files::makeFile($this->getImagesDir(), $_GET['dir'].$_GET['file']);
+				return Files::rename($src,$dest);
+			break;
+		}
+	}
+}
+
+?>

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/Readme.txt
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/Readme.txt?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/Readme.txt (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/Readme.txt Fri Sep 21 03:36:30 2007
@@ -0,0 +1,111 @@
+Package : Extended File Manager EFM 1.1.1
+
+Version 1.1 created from 1.0 beta by Krzysztof Kotowicz <[email protected]>
+
+Overview :
+----------
+
+Extended File Manager is an advanced plugin for Xinha 
+
+It works in two different modes.
+1). Insert Image Mode and 
+2). Insert File Link Mode.
+
+In Insert Image Mode, it replaces the basic insert image functionality of Xinha with its advanced image manager.
+
+If Insert File Link Mode is enabled, a new icon will be added to the toolbar with advanced file linking capability.
+
+
+
+Complete Features :
+-------------------
+* Easy config.inc file that enables individual options for both modes.
+* Thumnail View 
+* List View 
+* Nice icons for both views 
+* Create Folders 
+* Vertical Scrolling 
+* Allowed extensions to view or upload.
+* File Uploads 
+* Max File upload limit 
+* Max Upload Folder size (Including all subfolders and files. A must see option.)
+* Dynamic display of available free space in the Upload Folder 
+* Dynamic Thumbnails using Image libraries or browser resize 
+* Image Editor (Actually done by Wei...a great addon) 
+* Can be used to insert images along with properties. 
+* Can be used to insert link to non-image files like pdf or zip.
+* You can specify image margin / padding / background and border colors
+* You may edit Alt/title tags for inserted images
+
+(Most of the features can be enabled/disabled as needed)
+
+Installation :
+--------------
+
+Installing involves extracting the archive to 'plugins' subdirectory of Xinha
+and selecting the plugin in appropriate xinha_plugins list.
+
+Plugin may be configured via xinha_config.ExtendedFileManager object.
+Look into ImageManager plugin documentation as this plugin uses almost identical
+settings. All available options can be found in the file config.inc.php.
+
+// only snippets of code from initializing file shown below
+
+
+  xinha_plugins = xinha_plugins ? xinha_plugins :
+  [
+   'ContextMenu',
+   'SuperClean',
+   'CharacterMap',
+   'GetHtml',
+   'ExtendedFileManager',
+   /*'ImageManager',*/  // replace image manager with EFM
+   'Linker'
+  ];
+
+...
+
+//If you don't want to add a button for linking files and use only the advanced ImageManager
+xinha_config.ExtendedFileManager.use_linker = false;
+// pass the configuration to plugin
+if (xinha_config.ExtendedFileManager) {
+   	    with (xinha_config.ExtendedFileManager)
+        {
+            <?php
+
+            // define backend configuration for the plugin
+            $IMConfig = array();
+            $IMConfig['images_dir'] = '<images dir>';
+            $IMConfig['images_url'] = '<images url>';
+            $IMConfig['files_dir'] = '<files dir>';
+            $IMConfig['files_url'] = '<files url>';
+            $IMConfig['thumbnail_prefix'] = 't_';
+            $IMConfig['thumbnail_dir'] = 't';
+            $IMConfig['resized_prefix'] = 'resized_';
+            $IMConfig['resized_dir'] = '';
+            $IMConfig['tmp_prefix'] = '_tmp';
+            $IMConfig['max_filesize_kb_image'] = 2000;
+            // maximum size for uploading files in 'insert image' mode (2000 kB here)
+
+            $IMConfig['max_filesize_kb_link'] = 5000;
+            // maximum size for uploading files in 'insert link' mode (5000 kB here)
+
+            // Maximum upload folder size in Megabytes.
+            // Use 0 to disable limit
+            $IMConfig['max_foldersize_mb'] = 0;
+            
+            $IMConfig['allowed_image_extensions'] = array("jpg","gif","png");
+            $IMConfig['allowed_link_extensions'] = array("jpg","gif","pdf","ip","txt",
+                                                         "psd","png","html","swf",
+                                                         "xml","xls");
+
+            require_once '/path/to/xinha/contrib/php-xinha.php';
+            xinha_pass_to_php_backend($IMConfig);
+            
+            ?>
+        }
+}
+
+=====
[email protected] - author of EFM 1.0 beta
[email protected] - EFM 1.1 (most of the code taken from Xinha codebase)
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/EditorContent.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/EditorContent.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/EditorContent.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/EditorContent.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,657 @@
+function MM_findObj(n,d){
+var p,i,x;
+if(!d){
+d=document;
+}
+if((p=n.indexOf("?"))>0&&parent.frames.length){
+d=parent.frames[n.substring(p+1)].document;
+n=n.substring(0,p);
+}
+if(!(x=d[n])&&d.all){
+x=d.all[n];
+}
+for(i=0;!x&&i<d.forms.length;i++){
+x=d.forms[i][n];
+}
+for(i=0;!x&&d.layers&&i<d.layers.length;i++){
+x=MM_findObj(n,d.layers[i].document);
+}
+if(!x&&d.getElementById){
+x=d.getElementById(n);
+}
+return x;
+}
+var pic_x,pic_y;
+function P7_Snap(){
+var x,y,ox,bx,oy,p,tx,a,b,k,d,da,e,el,args=P7_Snap.arguments;
+a=parseInt(a);
+for(k=0;k<(args.length-3);k+=4){
+if((g=MM_findObj(args[k]))!=null){
+el=eval(MM_findObj(args[k+1]));
+a=parseInt(args[k+2]);
+b=parseInt(args[k+3]);
+x=0;
+y=0;
+ox=0;
+oy=0;
+p="";
+tx=1;
+da="document.all['"+args[k]+"']";
+if(document.getElementById){
+d="document.getElementsByName('"+args[k]+"')[0]";
+if(!eval(d)){
+d="document.getElementById('"+args[k]+"')";
+if(!eval(d)){
+d=da;
+}
+}
+}else{
+if(document.all){
+d=da;
+}
+}
+if(document.all||document.getElementById){
+while(tx==1){
+p+=".offsetParent";
+if(eval(d+p)){
+x+=parseInt(eval(d+p+".offsetLeft"));
+y+=parseInt(eval(d+p+".offsetTop"));
+}else{
+tx=0;
+}
+}
+ox=parseInt(g.offsetLeft);
+oy=parseInt(g.offsetTop);
+var tw=x+ox+y+oy;
+if(tw==0||(navigator.appVersion.indexOf("MSIE 4")>-1&&navigator.appVersion.indexOf("Mac")>-1)){
+ox=0;
+oy=0;
+if(g.style.left){
+x=parseInt(g.style.left);
+y=parseInt(g.style.top);
+}else{
+var w1=parseInt(el.style.width);
+bx=(a<0)?-5-w1:-10;
+a=(Math.abs(a)<1000)?0:a;
+b=(Math.abs(b)<1000)?0:b;
+if(event==null){
+x=document.body.scrollLeft+bx;
+}else{
+x=document.body.scrollLeft+event.clientX+bx;
+}
+if(event==null){
+y=document.body.scrollTop;
+}else{
+y=document.body.scrollTop+event.clientY;
+}
+}
+}
+}else{
+if(document.layers){
+x=g.x;
+y=g.y;
+var q0=document.layers,dd="";
+for(var s=0;s<q0.length;s++){
+dd="document."+q0[s].name;
+if(eval(dd+".document."+args[k])){
+x+=eval(dd+".left");
+y+=eval(dd+".top");
+break;
+}
+}
+}
+}
+if(el){
+e=(document.layers)?el:el.style;
+var xx=parseInt(x+ox+a),yy=parseInt(y+oy+b);
+if(navigator.appName=="Netscape"&&parseInt(navigator.appVersion)>4){
+xx+="px";
+yy+="px";
+}
+if(navigator.appVersion.indexOf("MSIE 5")>-1&&navigator.appVersion.indexOf("Mac")>-1){
+xx+=parseInt(document.body.leftMargin);
+yy+=parseInt(document.body.topMargin);
+xx+="px";
+yy+="px";
+}
+e.left=xx;
+e.top=yy;
+}
+pic_x=parseInt(xx);
+pic_y=parseInt(yy);
+}
+}
+}
+var ie=document.all;
+var ns6=document.getElementById&&!document.all;
+var dragapproved=false;
+var z,x,y,status,ant,canvas,content,pic_width,pic_height,image,resizeHandle,oa_w,oa_h,oa_x,oa_y,mx2,my2;
+function init_resize(){
+if(mode=="scale"){
+P7_Snap("theImage","ant",0,0);
+if(canvas==null){
+canvas=MM_findObj("imgCanvas");
+}
+if(pic_width==null||pic_height==null){
+image=MM_findObj("theImage");
+pic_width=image.width;
+pic_height=image.height;
+}
+if(ant==null){
+ant=MM_findObj("ant");
+}
+ant.style.left=pic_x;
+ant.style.top=pic_y;
+ant.style.width=pic_width;
+ant.style.height=pic_height;
+ant.style.visibility="visible";
+drawBoundHandle();
+jg_doc.paint();
+}
+}
+initEditor=function(){
+init_crop();
+init_resize();
+var _a=MM_findObj("markerImg",window.top.document);
+if(_a.src.indexOf("img/t_white.gif")>0){
+toggleMarker();
+}
+};
+function init_crop(){
+P7_Snap("theImage","ant",0,0);
+}
+function setMode(_b){
+mode=_b;
+reset();
+}
+function reset(){
+if(ant==null){
+ant=MM_findObj("ant");
+}
+ant.style.visibility="hidden";
+ant.style.left=0;
+ant.style.top=0;
+ant.style.width=0;
+ant.style.height=0;
+mx2=null;
+my2=null;
+jg_doc.clear();
+if(mode!="measure"){
+showStatus();
+}
+if(mode=="scale"){
+init_resize();
+}
+P7_Snap("theImage","ant",0,0);
+}
+function toggleMarker(){
+if(ant==null){
+ant=MM_findObj("ant");
+}
+if(ant.className=="selection"){
+ant.className="selectionWhite";
+}else{
+ant.className="selection";
+}
+if(jg_doc.getColor()=="#000000"){
+jg_doc.setColor("#FFFFFF");
+}else{
+jg_doc.setColor("#000000");
+}
+drawBoundHandle;
+jg_doc.paint();
+}
+function move(e){
+if(dragapproved){
+var w=ns6?temp1+e.clientX-x:temp1+event.clientX-x;
+var h=ns6?temp2+e.clientY-y:temp2+event.clientY-y;
+if(ant!=null){
+if(w>=0){
+ant.style.left=x;
+ant.style.width=w;
+}else{
+ant.style.left=x+w;
+ant.style.width=-1*w;
+}
+if(h>=0){
+ant.style.top=y;
+ant.style.height=h;
+}else{
+ant.style.top=y+h;
+ant.style.height=-1*h;
+}
+}
+showStatus();
+return false;
+}
+}
+function moveContent(e){
+if(dragapproved){
+var dx=ns6?oa_x+e.clientX-x:oa_x+event.clientX-x;
+var dy=ns6?oa_y+e.clientY-y:oa_y+event.clientY-y;
+ant.style.left=dx;
+ant.style.top=dy;
+showStatus();
+return false;
+}
+}
+function moveHandle(e){
+if(dragapproved){
+var w=ns6?e.clientX-x:event.clientX-x;
+var h=ns6?e.clientY-y:event.clientY-y;
+var _15=MM_findObj("constProp",window.top.document);
+var _16=document.theImage.height;
+var _17=document.theImage.width;
+rapp=_17/_16;
+rapp_inv=_16/_17;
+switch(resizeHandle){
+case "s-resize":
+if(oa_h+h>=0){
+ant.style.height=oa_h+h;
+if(_15.checked){
+ant.style.width=rapp*(oa_h+h);
+ant.style.left=oa_x-rapp*h/2;
+}
+}
+break;
+case "e-resize":
+if(oa_w+w>=0){
+ant.style.width=oa_w+w;
+if(_15.checked){
+ant.style.height=rapp_inv*(oa_w+w);
+ant.style.top=oa_y-rapp_inv*w/2;
+}
+}
+break;
+case "n-resize":
+if(oa_h-h>=0){
+ant.style.top=oa_y+h;
+ant.style.height=oa_h-h;
+if(_15.checked){
+ant.style.width=rapp*(oa_h-h);
+ant.style.left=oa_x+rapp*h/2;
+}
+}
+break;
+case "w-resize":
+if(oa_w-w>=0){
+ant.style.left=oa_x+w;
+ant.style.width=oa_w-w;
+if(_15.checked){
+ant.style.height=rapp_inv*(oa_w-w);
+ant.style.top=oa_y+rapp_inv*w/2;
+}
+}
+break;
+case "nw-resize":
+if(oa_h-h>=0&&oa_w-w>=0){
+ant.style.left=oa_x+w;
+ant.style.width=oa_w-w;
+ant.style.top=oa_y+h;
+if(_15.checked){
+ant.style.height=rapp_inv*(oa_w-w);
+}else{
+ant.style.height=oa_h-h;
+}
+}
+break;
+case "ne-resize":
+if(oa_h-h>=0&&oa_w+w>=0){
+ant.style.top=oa_y+h;
+ant.style.width=oa_w+w;
+if(_15.checked){
+ant.style.height=rapp_inv*(oa_w+w);
+}else{
+ant.style.height=oa_h-h;
+}
+}
+break;
+case "se-resize":
+if(oa_h+h>=0&&oa_w+w>=0){
+ant.style.width=oa_w+w;
+if(_15.checked){
+ant.style.height=rapp_inv*(oa_w+w);
+}else{
+ant.style.height=oa_h+h;
+}
+}
+break;
+case "sw-resize":
+if(oa_h+h>=0&&oa_w-w>=0){
+ant.style.left=oa_x+w;
+ant.style.width=oa_w-w;
+if(_15.checked){
+ant.style.height=rapp_inv*(oa_w-w);
+}else{
+ant.style.height=oa_h+h;
+}
+}
+}
+showStatus();
+return false;
+}
+}
+function drags(e){
+if(!ie&&!ns6){
+return;
+}
+var _19=ns6?e.target:event.srcElement;
+var _1a=ns6?"HTML":"BODY";
+while(_19.tagName!=_1a&&!(_19.className=="crop"||_19.className=="handleBox"||_19.className=="selection"||_19.className=="selectionWhite")){
+_19=ns6?_19.parentNode:_19.parentElement;
+}
+if(_19.className=="handleBox"){
+if(content!=null){
+if(content.width!=null&&content.height!=null){
+content.width=0;
+content.height=0;
+}
+}
+resizeHandle=_19.id;
+x=ns6?e.clientX:event.clientX;
+y=ns6?e.clientY:event.clientY;
+oa_w=parseInt(ant.style.width);
+oa_h=parseInt(ant.style.height);
+oa_x=parseInt(ant.style.left);
+oa_y=parseInt(ant.style.top);
+dragapproved=true;
+document.onmousemove=moveHandle;
+return false;
+}else{
+if((_19.className=="selection"||_19.className=="selectionWhite")&&mode=="crop"){
+x=ns6?e.clientX:event.clientX;
+y=ns6?e.clientY:event.clientY;
+oa_x=parseInt(ant.style.left);
+oa_y=parseInt(ant.style.top);
+dragapproved=true;
+document.onmousemove=moveContent;
+return false;
+}else{
+if(_19.className=="crop"&&mode=="crop"){
+if(content!=null){
+if(content.width!=null&&content.height!=null){
+content.width=0;
+content.height=0;
+}
+}
+if(status==null){
+status=MM_findObj("status");
+}
+if(ant==null){
+ant=MM_findObj("ant");
+}
+if(canvas==null){
+canvas=MM_findObj("imgCanvas");
+}
+if(content==null){
+content=MM_findObj("cropContent");
+}
+if(pic_width==null||pic_height==null){
+image=MM_findObj("theImage");
+pic_width=image.width;
+pic_height=image.height;
+}
+ant.style.visibility="visible";
+obj=_19;
+dragapproved=true;
+z=_19;
+temp1=parseInt(z.style.left+0);
+temp2=parseInt(z.style.top+0);
+x=ns6?e.clientX:event.clientX;
+y=ns6?e.clientY:event.clientY;
+document.onmousemove=move;
+return false;
+}else{
+if(_19.className=="crop"&&mode=="measure"){
+if(ant==null){
+ant=MM_findObj("ant");
+}
+if(canvas==null){
+canvas=MM_findObj("imgCanvas");
+}
+x=ns6?e.clientX:event.clientX;
+y=ns6?e.clientY:event.clientY;
+dragapproved=true;
+document.onmousemove=measure;
+return false;
+}
+}
+}
+}
+}
+function measure(e){
+if(dragapproved){
+mx2=ns6?e.clientX:event.clientX;
+my2=ns6?e.clientY:event.clientY;
+jg_doc.clear();
+jg_doc.setStroke(Stroke.DOTTED);
+jg_doc.drawLine(x,y,mx2,my2);
+jg_doc.paint();
+showStatus();
+return false;
+}
+}
+function setMarker(nx,ny,nw,nh){
+if(isNaN(nx)){
+nx=0;
+}
+if(isNaN(ny)){
+ny=0;
+}
+if(isNaN(nw)){
+nw=0;
+}
+if(isNaN(nh)){
+nh=0;
+}
+if(ant==null){
+ant=MM_findObj("ant");
+}
+if(canvas==null){
+canvas=MM_findObj("imgCanvas");
+}
+if(content==null){
+content=MM_findObj("cropContent");
+}
+if(pic_width==null||pic_height==null){
+image=MM_findObj("theImage");
+pic_width=image.width;
+pic_height=image.height;
+}
+ant.style.visibility="visible";
+nx=pic_x+nx;
+ny=pic_y+ny;
+if(nw>=0){
+ant.style.left=nx;
+ant.style.width=nw;
+}else{
+ant.style.left=nx+nw;
+ant.style.width=-1*nw;
+}
+if(nh>=0){
+ant.style.top=ny;
+ant.style.height=nh;
+}else{
+ant.style.top=ny+nh;
+ant.style.height=-1*nh;
+}
+}
+function max(x,y){
+if(y>x){
+return x;
+}else{
+return y;
+}
+}
+function drawBoundHandle(){
+if(ant==null||ant.style==null){
+return false;
+}
+var ah=parseInt(ant.style.height);
+var aw=parseInt(ant.style.width);
+var ax=parseInt(ant.style.left);
+var ay=parseInt(ant.style.top);
+jg_doc.drawHandle(ax-15,ay-15,30,30,"nw-resize");
+jg_doc.drawHandle(ax-15,ay+ah-15,30,30,"sw-resize");
+jg_doc.drawHandle(ax+aw-15,ay-15,30,30,"ne-resize");
+jg_doc.drawHandle(ax+aw-15,ay+ah-15,30,30,"se-resize");
+jg_doc.drawHandle(ax+max(15,aw/10),ay-8,aw-2*max(15,aw/10),8,"n-resize");
+jg_doc.drawHandle(ax+max(15,aw/10),ay+ah,aw-2*max(15,aw/10),8,"s-resize");
+jg_doc.drawHandle(ax-8,ay+max(15,ah/10),8,ah-2*max(15,ah/10),"w-resize");
+jg_doc.drawHandle(ax+aw,ay+max(15,ah/10),8,ah-2*max(15,ah/10),"e-resize");
+jg_doc.drawHandleBox(ax-4,ay-4,8,8,"nw-resize");
+jg_doc.drawHandleBox(ax-4,ay+ah-4,8,8,"sw-resize");
+jg_doc.drawHandleBox(ax+aw-4,ay-4,8,8,"ne-resize");
+jg_doc.drawHandleBox(ax+aw-4,ay+ah-4,8,8,"se-resize");
+jg_doc.drawHandleBox(ax+aw/2-4,ay-4,8,8,"n-resize");
+jg_doc.drawHandleBox(ax+aw/2-4,ay+ah-4,8,8,"s-resize");
+jg_doc.drawHandleBox(ax-4,ay+ah/2-4,8,8,"w-resize");
+jg_doc.drawHandleBox(ax+aw-4,ay+ah/2-4,8,8,"e-resize");
+}
+function showStatus(){
+if(ant==null||ant.style==null){
+return false;
+}
+if(mode=="measure"){
+mx1=x-pic_x;
+my1=y-pic_y;
+mw=mx2-x;
+mh=my2-y;
+md=parseInt(Math.sqrt(mw*mw+mh*mh)*100)/100;
+ma=(Math.atan(-1*mh/mw)/Math.PI)*180;
+if(mw<0&&mh<0){
+ma=ma+180;
+}
+if(mw<0&&mh>0){
+ma=ma-180;
+}
+ma=parseInt(ma*100)/100;
+if(m_sx!=null&&!isNaN(mx1)){
+m_sx.value=mx1+"px";
+}
+if(m_sy!=null&&!isNaN(my1)){
+m_sy.value=my1+"px";
+}
+if(m_w!=null&&!isNaN(mw)){
+m_w.value=mw+"px";
+}
+if(m_h!=null&&!isNaN(mh)){
+m_h.value=mh+"px";
+}
+if(m_d!=null&&!isNaN(md)){
+m_d.value=md+"px";
+}
+if(m_a!=null&&!isNaN(ma)){
+m_a.value=ma+"";
+}
+if(r_ra!=null&&!isNaN(ma)){
+r_ra.value=ma;
+}
+return false;
+}
+var ah=parseInt(ant.style.height);
+var aw=parseInt(ant.style.width);
+var ax=parseInt(ant.style.left);
+var ay=parseInt(ant.style.top);
+var cx=ax-pic_x<0?0:ax-pic_x;
+var cy=ay-pic_y<0?0:ay-pic_y;
+cx=cx>pic_width?pic_width:cx;
+cy=cy>pic_height?pic_height:cy;
+var cw=ax-pic_x>0?aw:aw-(pic_x-ax);
+var ch=ay-pic_y>0?ah:ah-(pic_y-ay);
+ch=ay+ah<pic_y+pic_height?ch:ch-(ay+ah-pic_y-pic_height);
+cw=ax+aw<pic_x+pic_width?cw:cw-(ax+aw-pic_x-pic_width);
+ch=ch<0?0:ch;
+cw=cw<0?0:cw;
+if(ant.style.visibility=="hidden"){
+cx="";
+cy="";
+cw="";
+ch="";
+}
+if(mode=="crop"){
+if(t_cx!=null){
+t_cx.value=cx;
+}
+if(t_cy!=null){
+t_cy.value=cy;
+}
+if(t_cw!=null){
+t_cw.value=cw;
+}
+if(t_ch!=null){
+t_ch.value=ch;
+}
+}else{
+if(mode=="scale"){
+var sw=aw,sh=ah;
+if(s_sw.value.indexOf("%")>0&&s_sh.value.indexOf("%")>0){
+sw=cw/pic_width;
+sh=ch/pic_height;
+}
+if(s_sw!=null){
+s_sw.value=sw;
+}
+if(s_sh!=null){
+s_sh.value=sh;
+}
+}
+}
+}
+function dragStopped(){
+dragapproved=false;
+if(ant==null||ant.style==null){
+return false;
+}
+if(mode=="measure"){
+jg_doc.drawLine(x-4,y,x+4,y);
+jg_doc.drawLine(x,y-4,x,y+4);
+jg_doc.drawLine(mx2-4,my2,mx2+4,my2);
+jg_doc.drawLine(mx2,my2-4,mx2,my2+4);
+jg_doc.paint();
+showStatus();
+return false;
+}
+var ah=parseInt(ant.style.height);
+var aw=parseInt(ant.style.width);
+var ax=parseInt(ant.style.left);
+var ay=parseInt(ant.style.top);
+jg_doc.clear();
+if(content!=null){
+if(content.width!=null&&content.height!=null){
+content.width=aw-1;
+content.height=ah-1;
+}
+}
+if(mode=="crop"){
+jg_doc.fillRectPattern(pic_x,pic_y,pic_width,ay-pic_y,pattern);
+var h1=ah;
+var y1=ay;
+if(ah+ay>=pic_height+pic_y){
+h1=pic_height+pic_y-ay;
+}else{
+if(ay<=pic_y){
+h1=ay+ah-pic_y;
+y1=pic_y;
+}
+}
+jg_doc.fillRectPattern(pic_x,y1,ax-pic_x,h1,pattern);
+jg_doc.fillRectPattern(ax+aw,y1,pic_x+pic_width-ax-aw,h1,pattern);
+jg_doc.fillRectPattern(pic_x,ay+ah,pic_width,pic_height+pic_y-ay-ah,pattern);
+}else{
+if(mode=="scale"){
+document.theImage.height=ah;
+document.theImage.width=aw;
+document.theImage.style.height=ah+" px";
+document.theImage.style.width=aw+" px";
+P7_Snap("theImage","ant",0,0);
+}
+}
+drawBoundHandle();
+jg_doc.paint();
+showStatus();
+return false;
+}
+document.onmousedown=drags;
+document.onmouseup=dragStopped;
+

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/ImageEditor.css
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/ImageEditor.css?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/ImageEditor.css (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/ImageEditor.css Fri Sep 21 03:36:30 2007
@@ -0,0 +1,76 @@
+.icons {
+    font: 11px Tahoma,Verdana,sans-serif;
+    color: #666699;
+    text-align: center;
+    text-decoration: none;
+    border: 1px solid #EEEEFF;
+    -Moz-Border-Radius: 6px 6px 6px 6px;
+}
+
+body, td, p {
+    font: 11px Tahoma,Verdana,sans-serif;
+}
+.iconsOver {
+    font: 11px Tahoma,Verdana,sans-serif;
+    color: #666699;
+    text-align: center;
+    text-decoration: none;
+    background-color: #F9F9FF;
+    border: 1px solid #666699;
+    -Moz-Border-Radius: 6px 6px 6px 6px;
+}
+.topBar {
+    font: 11px Tahoma,Verdana,sans-serif;
+    color: #666699;
+}
+.iconsSel {
+    font: 11px Tahoma,Verdana,sans-serif;
+    color: #666699;
+    text-align: center;
+    text-decoration: none;
+    border: 1px solid #666699;
+    -Moz-Border-Radius: 6px 6px 6px 6px;
+}
+.iconText {
+    font: 11px Tahoma,Verdana,sans-serif;
+    color: #666699;
+    text-decoration: none;
+    text-align: center;
+}
+.measureStats{
+    width: 50px;
+}
+
+#slidercasing {
+    /*border:1px solid #CCCCCC;
+    background-color:#FFFFFF;*/
+    width:100px;
+    height:5px;
+    position:relative;
+    z-index:4;
+    padding:10px;
+}
+
+
+#slidertrack {
+    position:relative;
+    border:1px solid #CCCCCC;
+    background-color:#FFFFCC;
+    z-index:5;
+    height:5px;
+}
+
+
+#sliderbar {
+    position:absolute;
+    z-index:6;
+    border:1px solid #CCCCCC;
+    background-color:#DDDDDD;
+    width:15px;     
+    padding:0px;
+    height:20px; 
+    cursor: pointer;
+    top:2px;
+}
+
+select, input, button { font: 11px Tahoma,Verdana,sans-serif; }

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/dialog.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/dialog.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/dialog.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/dialog.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,75 @@
+function Dialog(_1,_2,_3){
+if(typeof _3=="undefined"){
+_3=window;
+}
+Dialog._geckoOpenModal(_1,_2,_3);
+}
+Dialog._parentEvent=function(ev){
+setTimeout(function(){
+if(Dialog._modal&&!Dialog._modal.closed){
+Dialog._modal.focus();
+}
+},50);
+if(Dialog._modal&&!Dialog._modal.closed){
+Dialog._stopEvent(ev);
+}
+};
+Dialog._return=null;
+Dialog._modal=null;
+Dialog._arguments=null;
+Dialog._geckoOpenModal=function(_5,_6,_7){
+var _8="hadialog"+_5;
+var _9=/\W/g;
+_8=_8.replace(_9,"_");
+var _a=window.open(_5,_8,"toolbar=no,menubar=no,personalbar=no,width=10,height=10,"+"scrollbars=no,resizable=yes,modal=yes,dependable=yes");
+Dialog._modal=_a;
+Dialog._arguments=_7;
+function capwin(w){
+Dialog._addEvent(w,"click",Dialog._parentEvent);
+Dialog._addEvent(w,"mousedown",Dialog._parentEvent);
+Dialog._addEvent(w,"focus",Dialog._parentEvent);
+}
+function relwin(w){
+Dialog._removeEvent(w,"click",Dialog._parentEvent);
+Dialog._removeEvent(w,"mousedown",Dialog._parentEvent);
+Dialog._removeEvent(w,"focus",Dialog._parentEvent);
+}
+capwin(window);
+for(var i=0;i<window.frames.length;capwin(window.frames[i++])){
+}
+Dialog._return=function(_e){
+if(_e&&_6){
+_6(_e);
+}
+relwin(window);
+for(var i=0;i<window.frames.length;relwin(window.frames[i++])){
+}
+Dialog._modal=null;
+};
+};
+Dialog._addEvent=function(el,_11,_12){
+if(Dialog.is_ie){
+el.attachEvent("on"+_11,_12);
+}else{
+el.addEventListener(_11,_12,true);
+}
+};
+Dialog._removeEvent=function(el,_14,_15){
+if(Dialog.is_ie){
+el.detachEvent("on"+_14,_15);
+}else{
+el.removeEventListener(_14,_15,true);
+}
+};
+Dialog._stopEvent=function(ev){
+if(Dialog.is_ie){
+ev.cancelBubble=true;
+ev.returnValue=false;
+}else{
+ev.preventDefault();
+ev.stopPropagation();
+}
+};
+Dialog.agt=navigator.userAgent.toLowerCase();
+Dialog.is_ie=((Dialog.agt.indexOf("msie")!=-1)&&(Dialog.agt.indexOf("opera")==-1));
+

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editor.css
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editor.css?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editor.css (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editor.css Fri Sep 21 03:36:30 2007
@@ -0,0 +1,196 @@
+		body
+		{
+			margin: 0; padding: 0;
+			font: 11px Tahoma,Verdana,sans-serif;
+		}
+		select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
+
+		#indicator
+		{
+			width: 25px;
+			height: 20px;
+			background-color: #eef;			
+			padding: 15px 20px;
+			position: absolute;
+			left: 0; top: 0;
+		}
+		* html #indicator
+		{
+			padding: 14px 22px;
+		}
+		#tools
+		{
+			width: 600px;
+			height: 50px;
+			background-color: #eef;
+			padding: 0;
+			position: absolute;
+			left: 63px;
+			border-left: 1px solid white;
+			border-bottom: 1px solid white;
+		}
+		#toolbar
+		{
+			width: 53px;
+			height: 435px;
+			background-color: #eef;
+			float: left;
+			text-align: center;
+			padding: 5px;
+			position: absolute;
+			top: 50px;
+			border-top: 1px solid white;
+			border-right: 1px solid white;
+		}
+		
+		#contents
+		{
+			width: 600px;
+			height: 445px;
+			position: absolute;
+			left: 64px; top: 51px;
+		}
+		
+		#editor
+		{
+			width: 600px;
+			height: 445px;
+		}
+
+		#toolbar a 
+		{
+			padding: 5px;
+			width: 40px;
+			display: block;
+			border: 1px solid #eef;
+			text-align: center;
+			text-decoration: none;
+			color: #669;
+			margin: 5px 0;
+		}
+		#toolbar a:hover
+		{
+			background-color: #F9F9FF;
+			border-color: #669;
+		}
+		
+		#toolbar a.iconActive
+		{
+			border-color: #669;
+		}
+
+		#toolbar a span
+		{
+			display: block;
+			text-decoration: none;
+			
+		}
+		#toolbar a img
+		{
+			border: 0 none;
+		}
+		
+		#tools .textInput
+		{
+			width: 3em;
+			vertical-align: 0px;
+
+		}
+		* html #tools .textInput
+		{
+			vertical-align: middle;
+		}
+		#tools .measureStats
+		{
+			width: 4.5em;
+			border: 0 none;
+			background-color: #eef;
+			vertical-align: 0px;
+		}
+		* html #tools .measureStats
+		{
+			vertical-align: middle;
+		}
+		#tools label
+		{
+			margin: 0 2px 0 5px;
+		}
+		#tools input
+		{
+			vertical-align: middle;
+		}
+		#tools #tool_inputs
+		{
+			padding-top: 10px;
+			float: left;			
+		}
+		#tools .div
+		{
+			vertical-align: middle;
+			margin: 0 5px;
+		}
+		#tools img
+		{
+			border: 0 none;
+		}
+		#tools a.buttons
+		{
+			margin-top: 10px;
+			border: 1px solid #eef;
+			display: block;
+			float: left;
+		}
+		#tools a.buttons:hover
+		{
+			background-color: #F9F9FF;
+			border-color: #669;
+		}
+		#slidercasing {
+    /*border:1px solid #CCCCCC;
+    background-color:#FFFFFF;*/
+    width:100px;
+    height:5px;
+    position:relative;
+    z-index:4;
+    padding:10px;
+	 top: 6px;
+	 margin: 0 -5px 0 -10px;
+
+	
+}
+
+
+#slidertrack {
+    position:relative;
+    border:1px solid #CCCCCC;
+    background-color:#FFFFCC;
+    z-index:5;
+    height:5px;
+}
+
+
+#sliderbar {
+    position:absolute;
+    z-index:6;
+    border:1px solid #CCCCCC;
+    background-color:#DDDDDD;
+    width:15px;     
+    padding:0px;
+    height:20px; 
+    cursor: pointer;
+    top:2px;
+}
+
+* html #slidercasing
+{
+	top:0;
+}
+
+
+#bottom
+{
+	position: relative;
+	top: 490px;
+}
+
+#save_filename {width: 100px;}
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editor.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editor.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editor.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editor.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,127 @@
+var current_action=null;
+var actions=["crop","scale","rotate","measure","save"];
+var orginal_width=null,orginal_height=null;
+function toggle(_1){
+if(current_action!=_1){
+for(var i in actions){
+if(actions[i]!=_1){
+var _3=document.getElementById("tools_"+actions[i]);
+_3.style.display="none";
+var _4=document.getElementById("icon_"+actions[i]);
+_4.className="";
+}
+}
+current_action=_1;
+var _3=document.getElementById("tools_"+_1);
+_3.style.display="block";
+var _4=document.getElementById("icon_"+_1);
+_4.className="iconActive";
+var _5=document.getElementById("indicator_image");
+_5.src="img/"+_1+".gif";
+editor.setMode(current_action);
+if(_1=="scale"){
+var _6=editor.window.document.getElementById("theImage");
+orginal_width=_6.width;
+orginal_height=_6.height;
+var w=document.getElementById("sw");
+w.value=orginal_width;
+var h=document.getElementById("sh");
+h.value=orginal_height;
+}
+}
+}
+function toggleMarker(){
+var _9=document.getElementById("markerImg");
+if(_9!=null&&_9.src!=null){
+if(_9.src.indexOf("t_black.gif")>=0){
+_9.src="img/t_white.gif";
+}else{
+_9.src="img/t_black.gif";
+}
+editor.toggleMarker();
+}
+}
+function toggleConstraints(){
+var _a=document.getElementById("scaleConstImg");
+var _b=document.getElementById("constProp");
+if(_a!=null&&_a.src!=null){
+if(_a.src.indexOf("unlocked2.gif")>=0){
+_a.src="img/islocked2.gif";
+_b.checked=true;
+checkConstrains("width");
+}else{
+_a.src="img/unlocked2.gif";
+_b.checked=false;
+}
+}
+}
+function checkConstrains(_c){
+var _d=document.getElementById("constProp");
+if(_d.checked){
+var w=document.getElementById("sw");
+var _f=w.value;
+var h=document.getElementById("sh");
+var _11=h.value;
+if(orginal_width>0&&orginal_height>0){
+if(_c=="width"&&_f>0){
+h.value=parseInt((_f/orginal_width)*orginal_height);
+}else{
+if(_c=="height"&&_11>0){
+w.value=parseInt((_11/orginal_height)*orginal_width);
+}
+}
+}
+}
+updateMarker("scale");
+}
+function updateMarker(_12){
+if(_12=="crop"){
+var _13=document.getElementById("cx");
+var _14=document.getElementById("cy");
+var _15=document.getElementById("cw");
+var _16=document.getElementById("ch");
+editor.setMarker(parseInt(_13.value),parseInt(_14.value),parseInt(_15.value),parseInt(_16.value));
+}else{
+if(_12=="scale"){
+var _17=document.getElementById("sw");
+var _18=document.getElementById("sh");
+editor.setMarker(0,0,parseInt(_17.value),parseInt(_18.value));
+}
+}
+}
+function rotatePreset(_19){
+var _1a=_19.options[_19.selectedIndex].value;
+if(_1a.length>0&&parseInt(_1a)!=0){
+var ra=document.getElementById("ra");
+ra.value=parseInt(_1a);
+}
+}
+function updateFormat(_1c){
+var _1d=_1c.options[_1c.selectedIndex].value;
+var _1e=_1d.split(",");
+if(_1e.length>1){
+updateSlider(parseInt(_1e[1]));
+}
+}
+function addEvent(obj,_20,fn){
+if(obj.addEventListener){
+obj.addEventListener(_20,fn,true);
+return true;
+}else{
+if(obj.attachEvent){
+var r=obj.attachEvent("on"+_20,fn);
+return r;
+}else{
+return false;
+}
+}
+}
+init=function(){
+var _23=document.getElementById("bottom");
+if(window.opener){
+__dlg_init(null,{width:673,height:531});
+__dlg_translate("ExtendedFileManager");
+}
+};
+addEvent(window,"load",init);
+

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editorFrame.css
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editorFrame.css?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editorFrame.css (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editorFrame.css Fri Sep 21 03:36:30 2007
@@ -0,0 +1,8 @@
+body { margin: 0; padding: 0;  background-color: #eee; }
+table { width: 100%; }
+table td { text-align: center; }
+.crop{cursor:crosshair;}
+.selection { border: dotted 1px #000000; position:absolute; width: 0px; height: 1px; z-index:5; }
+.selectionWhite{ border: dotted 1px #FFFFFF; position:absolute; width: 0px; height: 1px; z-index:5; }
+.handleBox{ z-index:105; }
+.error { font-size:large; font-weight:bold; color:#c00; font-family: Helvetica, sans-serif; } 
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editorFrame.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editorFrame.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editorFrame.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/editorFrame.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,73 @@
+var topDoc=window.top.document;
+var t_cx=topDoc.getElementById("cx");
+var t_cy=topDoc.getElementById("cy");
+var t_cw=topDoc.getElementById("cw");
+var t_ch=topDoc.getElementById("ch");
+var m_sx=topDoc.getElementById("sx");
+var m_sy=topDoc.getElementById("sy");
+var m_w=topDoc.getElementById("mw");
+var m_h=topDoc.getElementById("mh");
+var m_a=topDoc.getElementById("ma");
+var m_d=topDoc.getElementById("md");
+var s_sw=topDoc.getElementById("sw");
+var s_sh=topDoc.getElementById("sh");
+var r_ra=topDoc.getElementById("ra");
+var pattern="img/2x2.gif";
+function doSubmit(_1){
+if(_1=="crop"){
+var _2=_backend_url+"__function=editorFrame&img="+currentImageFile+"&action=crop&params="+parseInt(t_cx.value)+","+parseInt(t_cy.value)+","+parseInt(t_cw.value)+","+parseInt(t_ch.value);
+location.href=_2;
+}else{
+if(_1=="scale"){
+var _2=_backend_url+"__function=editorFrame&img="+currentImageFile+"&action=scale&params="+parseInt(s_sw.value)+","+parseInt(s_sh.value);
+location.href=_2;
+}else{
+if(_1=="rotate"){
+var _3=topDoc.getElementById("flip");
+if(_3.value=="hoz"||_3.value=="ver"){
+location.href=_backend_url+"__function=editorFrame&img="+currentImageFile+"&action=flip&params="+_3.value;
+}else{
+if(isNaN(parseFloat(r_ra.value))==false){
+location.href=_backend_url+"__function=editorFrame&img="+currentImageFile+"&action=rotate&params="+parseFloat(r_ra.value);
+}
+}
+}else{
+if(_1=="save"){
+var _4=topDoc.getElementById("save_filename");
+var _5=topDoc.getElementById("save_format");
+var _6=topDoc.getElementById("quality");
+var _7=_5.value.split(",");
+if(_4.value.length<=0){
+alert(i18n("Please enter a filename to save."));
+}else{
+var _8=encodeURI(_4.value);
+var _9=parseInt(_6.value);
+var _2=_backend_url+"__function=editorFrame&img="+currentImageFile+"&action=save&params="+_7[0]+","+_9+"&file="+_8;
+location.href=_2;
+}
+}
+}
+}
+}
+}
+function addEvent(_a,_b,fn){
+if(_a.addEventListener){
+_a.addEventListener(_b,fn,true);
+return true;
+}else{
+if(_a.attachEvent){
+var r=_a.attachEvent("on"+_b,fn);
+return r;
+}else{
+return false;
+}
+}
+}
+var jg_doc;
+init=function(){
+jg_doc=new jsGraphics("imgCanvas");
+jg_doc.setColor("#000000");
+initEditor();
+};
+addEvent(window,"load",init);
+

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/hover.htc
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/hover.htc?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/hover.htc (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/hover.htc Fri Sep 21 03:36:30 2007
@@ -0,0 +1,34 @@
+<attach event="onmouseover" handler="hoverRollOver" />
+<attach event="onmouseout" handler="hoverRollOff" />
+<script type="text/javascript">
+//
+//	Simple behaviour for IE5+ to emulate :hover CSS pseudo-class.
+//  Experimental ver 0.1
+//
+//	This is an experimental version! Handle with care!
+//	Manual at: http://www.hszk.bme.hu/~hj130/css/list_menu/hover/
+//
+
+function hoverRollOver() {
+	
+	element.origClassName = element.className;	// backup origonal className
+	
+	var tempClassStr = element.className;		
+	
+	tempClassStr += "Hover";					// convert name+'Hover' the last class name	to emulate tag.class:hover
+	
+	tempClassStr = tempClassStr.replace(/\s/g,"Hover ");	//convert name+'Hover' the others to emulate tag.class:hover
+	
+	tempClassStr += " hover";				// add simple 'hover' class name to emulate tag:hover
+	
+	element.className = element.className + " " + tempClassStr; 
+	
+	//alert(element.className);
+	//window.status = element.className;		// only for TEST
+}
+function hoverRollOff() {
+	element.className = element.origClassName;
+}
+
+</script>
+

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/imagelist.css
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/imagelist.css?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/imagelist.css (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/imagelist.css Fri Sep 21 03:36:30 2007
@@ -0,0 +1,54 @@
+body { margin: 0; padding: 0;}
+.edit,.dir_holder .fileName, .thumb_holder .fileName    { font-size: 8pt; font-family: small-caption, sans-serif; padding-top: 3px;}
+.edit a { border: none; padding: 0; text-decoration:none; }
+.edit a:hover { background-color: ButtonHighlight; }
+.edit a img { border: none; vertical-align: bottom; }
+.noResult { font-size:large; font-weight:bold; color:#ccc; font-family: Helvetica, sans-serif;  text-align: center;  padding-top: 60px;   }
+.error { color:#c00; font-weight:bold; font-size: medium; font-family: Helvetica, sans-serif; text-align: center;  padding-top: 65px;}
+
+.dir_holder, .thumb_holder
+{
+  width:106px; height:132px;
+  float:left;
+  margin:6px 4px;
+  background-color:ButtonFace;
+  border: 1px outset;
+}
+
+.thumb_holder.active
+{
+  background:Highlight;
+  color:HighlightText;
+  border:1px dashed Highlight;
+}
+
+.dir_holder a.dir, .thumb_holder a.thumb
+{
+  height:85px;
+  display:block;
+  text-align:center;
+  padding:5px;
+  text-decoration:none;
+}
+
+.thumb_holder a.thumb img
+{
+  border:1px solid black;
+}
+
+.dir_holder a.dir img
+{
+  border:none;
+}
+
+.listview { width:100% }
+.listview td, .listview th { text-align:left; font-size:small; }
+.listview td.actions { text-align: right; }
+.listview td.actions img { border:0; }
+
+.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;}
+.listview tbody td, .listview tbody th {padding-top:2px; padding-left: 3px; font-size: 9pt; font-family: "MS Sans Serif", Geneva, sans-serif;}
+.listview tbody a, listview tbody a:visited { font-weight: normal; text-decoration: none; color: #000; border:0px; padding:2px;}
+.listview tbody a:hover { background-color:#0B256B; color:#fff;}
+
+.listview tbody tr:hover {background-color: rgb(221,221,255);

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/images.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/images.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/images.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/images.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,242 @@
+function i18n(_1){
+return Xinha._lc(_1,"ExtendedFileManager");
+}
+function changeDir(_2){
+showMessage("Loading");
+var _3=window.top.document.getElementById("manager_mode").value;
+var _4=window.top.document.getElementById("viewtype");
+var _5=_4.options[_4.selectedIndex].value;
+location.href=_backend_url+"__function=images&mode="+_3+"&dir="+_2+"&viewtype="+_5;
+document.cookie="EFMStartDir"+_3+"="+_2;
+}
+function newFolder(_6,_7){
+var _8=window.top.document.getElementById("manager_mode").value;
+var _9=window.top.document.getElementById("viewtype");
+var _a=_9.options[_9.selectedIndex].value;
+location.href=_backend_url+"__function=images&mode="+_8+"&dir="+_6+"&newDir="+_7+"&viewtype="+_a;
+}
+function renameFile(_b){
+var _c=_b.replace(/.*%2F/,"").replace(/\..*$/,"");
+var _d=function(_e){
+if(_e==""||_e==null||_e==_c){
+alert(i18n("Cancelled rename."));
+return false;
+}
+var _f=window.top.document.getElementById("manager_mode").value;
+var _10=window.top.document.getElementById("dirPath");
+var dir=_10.options[_10.selectedIndex].value;
+_10=window.top.document.getElementById("viewtype");
+var _12=_10.options[_10.selectedIndex].value;
+location.href=_backend_url+"__function=images&mode="+_f+"&dir="+dir+"&rename="+_b+"&renameTo="+_e+"&viewtype="+_12;
+};
+if(Xinha.ie_version>6){
+popupPrompt(i18n("Please enter new name for this file..."),_c,_d,i18n("Rename"));
+}else{
+var _13=prompt(i18n("Please enter new name for this file..."),_c);
+_d(_13);
+}
+}
+function renameDir(_14){
+function rename(_15){
+if(_15==""||_15==null||_15==_14){
+alert(i18n("Cancelled rename."));
+return false;
+}
+var _16=window.top.document.getElementById("manager_mode").value;
+var _17=window.top.document.getElementById("dirPath");
+var dir=_17.options[_17.selectedIndex].value;
+_17=window.top.document.getElementById("viewtype");
+var _19=_17.options[_17.selectedIndex].value;
+location.href=_backend_url+"__function=images&mode="+_16+"&dir="+dir+"&rename="+_14+"&renameTo="+_15+"&viewtype="+_19;
+}
+if(Xinha.ie_version>6){
+popupPrompt(i18n("Please enter new name for this folder..."),_14,rename,i18n("Rename"));
+}else{
+var _1a=prompt(i18n("Please enter new name for this folder..."),_14);
+rename(_1a);
+}
+}
+function copyFile(_1b,_1c){
+var _1d=window.top.document.getElementById("dirPath");
+var dir=_1d.options[_1d.selectedIndex].value;
+window.top.pasteButton({"dir":dir,"file":_1b,"action":_1c+"File"});
+}
+function copyDir(_1f,_20){
+var _21=window.top.document.getElementById("dirPath");
+var dir=_21.options[_21.selectedIndex].value;
+window.top.pasteButton({"dir":dir,"file":_1f,"action":_20+"Dir"});
+}
+function paste(_23){
+var _24=window.top.document.getElementById("manager_mode").value;
+var _25=window.top.document.getElementById("dirPath");
+var dir=_25.options[_25.selectedIndex].value;
+_25=window.top.document.getElementById("viewtype");
+var _27=_25.options[_25.selectedIndex].value;
+location.href=_backend_url+"__function=images&mode="+_24+"&dir="+dir+"&paste="+_23.action+"&srcdir="+_23.dir+"&file="+_23.file+"&viewtype="+_27;
+}
+function updateDir(_28){
+var _29=window.top.document.getElementById("manager_mode").value;
+document.cookie="EFMStartDir"+_29+"="+_28;
+var _2a=window.top.document.getElementById("dirPath");
+if(_2a){
+for(var i=0;i<_2a.length;i++){
+var _2c=_2a.options[i].text;
+if(_2c==_28){
+_2a.selectedIndex=i;
+showMessage("Loading");
+break;
+}
+}
+}
+}
+function emptyProperties(){
+toggleImageProperties(false);
+var _2d=window.top.document;
+_2d.getElementById("f_url").value="";
+_2d.getElementById("f_alt").value="";
+_2d.getElementById("f_title").value="";
+_2d.getElementById("f_width").value="";
+_2d.getElementById("f_margin").value="";
+_2d.getElementById("f_height").value="";
+_2d.getElementById("f_padding").value="";
+_2d.getElementById("f_border").value="";
+_2d.getElementById("f_borderColor").value="";
+_2d.getElementById("f_backgroundColor").value="";
+}
+function toggleImageProperties(val){
+var _2f=window.top.document;
+if(val==true){
+_2f.getElementById("f_width").value="";
+_2f.getElementById("f_margin").value="";
+_2f.getElementById("f_height").value="";
+_2f.getElementById("f_padding").value="";
+_2f.getElementById("f_border").value="";
+_2f.getElementById("f_borderColor").value="";
+_2f.getElementById("f_backgroundColor").value="";
+}
+_2f.getElementById("f_width").disabled=val;
+_2f.getElementById("f_margin").disabled=val;
+_2f.getElementById("f_height").disabled=val;
+_2f.getElementById("f_padding").disabled=val;
+_2f.getElementById("f_align").disabled=val;
+_2f.getElementById("f_border").disabled=val;
+_2f.getElementById("f_borderColor").value="";
+_2f.getElementById("f_backgroundColor").value="";
+_2f.getElementById("constrain_prop").disabled=val;
+}
+function selectImage(_30,alt,_32,_33){
+var _34=window.top.document;
+if(_34.getElementById("manager_mode").value=="image"){
+var obj=_34.getElementById("f_url");
+obj.value=_30;
+obj=_34.getElementById("f_alt");
+obj.value=alt;
+obj=_34.getElementById("f_title");
+obj.value=alt;
+if(_32==0&&_33==0){
+toggleImageProperties(true);
+}else{
+toggleImageProperties(false);
+var obj=_34.getElementById("f_width");
+obj.value=_32;
+var obj=_34.getElementById("f_height");
+obj.value=_33;
+var obj=_34.getElementById("orginal_width");
+obj.value=_32;
+var obj=_34.getElementById("orginal_height");
+obj.value=_33;
+update_selected();
+}
+}else{
+if(_34.getElementById("manager_mode").value=="link"){
+var obj=_34.getElementById("f_href");
+obj.value=_30;
+var obj=_34.getElementById("f_title");
+obj.value=alt;
+}
+}
+return false;
+}
+var _current_selected=null;
+function update_selected(){
+var _36=window.top.document;
+if(_current_selected){
+_current_selected.className=_current_selected.className.replace(/(^| )active( |$)/,"$1$2");
+_current_selected=null;
+}
+var _37=_36.getElementById("f_url").value;
+var _38=_36.getElementById("dirPath");
+var _39=_38.options[_38.selectedIndex].text;
+var dRe=new RegExp("^("+_39.replace(/([\/\^$*+?.()|{}[\]])/g,"\\$1")+")([^/]*)$");
+if(dRe.test(_37)){
+var _3b=document.getElementById("holder_"+asc2hex(RegExp.$2));
+if(_3b){
+_current_selected=_3b;
+_3b.className+=" active";
+}
+}
+showPreview(_37);
+}
+function asc2hex(str){
+var _3d="";
+for(var i=0;i<str.length;i++){
+var hex=(str.charCodeAt(i)).toString(16);
+if(hex.length==1){
+hex="0"+hex;
+}
+_3d+=hex;
+}
+return _3d;
+}
+function showMessage(_40){
+var _41=window.top.document;
+var _42=_41.getElementById("message");
+var _43=_41.getElementById("messages");
+if(_42&&_43){
+if(_42.firstChild){
+_42.removeChild(_42.firstChild);
+}
+_42.appendChild(_41.createTextNode(i18n(_40)));
+_43.style.display="block";
+}
+}
+function updateDiskMesg(_44){
+var _45=window.top.document;
+var _46=_45.getElementById("diskmesg");
+if(_46){
+if(_46.firstChild){
+_46.removeChild(_46.firstChild);
+}
+_46.appendChild(_45.createTextNode(_44));
+}
+}
+function addEvent(obj,_48,fn){
+if(obj.addEventListener){
+obj.addEventListener(_48,fn,true);
+return true;
+}else{
+if(obj.attachEvent){
+var r=obj.attachEvent("on"+_48,fn);
+return r;
+}else{
+return false;
+}
+}
+}
+function confirmDeleteFile(_4b){
+if(confirm(i18n("Delete file \"$file="+_4b+"$\"?"))){
+return true;
+}
+return false;
+}
+function confirmDeleteDir(dir,_4d){
+if(confirm(i18n("Delete folder \"$dir="+dir+"$\"?"))){
+return true;
+}
+return false;
+}
+function showPreview(_4e){
+window.parent.document.getElementById("f_preview").src=_4e?window.parent._backend_url+"__function=thumbs&img="+_4e:window.parent.opener._editor_url+"plugins/ExtendedFileManager/img/1x1_transparent.gif";
+}
+addEvent(window,"load",init);
+

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/manager.css
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/manager.css?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/manager.css (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/manager.css Fri Sep 21 03:36:30 2007
@@ -0,0 +1,49 @@
+html, body, .dialog {  background-color: ButtonFace;  color: ButtonText; font: 11px Tahoma,Verdana,sans-serif; margin: 0; padding: 0;}
+body { padding: 5px; }
+fieldset { padding: 0;}
+.title { background-color: #ddf; color: #000; font-weight: bold; font-size: 120%; padding: 3px 10px; margin-bottom: 10px; border-bottom: 1px  solid black; letter-spacing: 2px;}
+form { padding: 0px;  margin: 0 auto; width: 100%;}
+/*.dirWidth { width: 60%; }*/
+a { padding: 5px; border: 1px solid ButtonFace;	}	
+a img	{ border: 0; }	
+a:hover { border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; }
+.dirs {	padding: 1em; 	}
+
+.imageFrame { overflow-x:hidden; width: 100%; height: 145px; margin:0px; background-color: #fff;}
+.smallWidth{ width: 4em; }
+.largelWidth{ width: 30em; }
+.extralargelWidth{ width: 100%; }
+.inputTable { margin: 1em auto 1em 0;width:100%}
+select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
+.buttons { width: 70px; text-align: center; }
+.clearboth{ clear: both; }
+#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; }
+#message  { font-size: 15px; font-weight: bold; color: #69c; }
+iframe { border:1px inset; border-right:none; border-left:none; border-bottom:none; }
+
+table { margin-top:10px; }
+th, td { padding-right:3px; text-align:left; font-family:small-caption,helvetica,sans-serif; }
+.dirWidth {width: 59%}
+
+.buttonColor {
+  width :1em;
+  margin-left: 2px;
+  cursor: default;
+}
+
+.buttonColor .chooser, .buttonColor .nocolor {
+  height: 0.6em;
+  border: 1px solid;
+  padding: 0px 1em;
+  border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+}
+
+.buttonColor .buttonClick {
+  border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+}
+.buttonColor .buttonColor-hilite {
+  border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+}
+
+.buttonColor .nocolor { padding: 0px; }
+.buttonColor .nocolor-hilite { background-color: #fff; color: #f00; }

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/manager.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/manager.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/manager.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/ExtendedFileManager/assets/manager.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,393 @@
+function comboSelectValue(c,_2){
+var _3=c.getElementsByTagName("option");
+for(var i=_3.length;--i>=0;){
+var op=_3[i];
+op.selected=(op.value==_2);
+}
+c.value=_2;
+}
+function i18n(_6){
+return Xinha._lc(_6,"ExtendedFileManager");
+}
+function setAlign(_7){
+var _8=document.getElementById("f_align");
+for(var i=0;i<_8.length;i++){
+if(_8.options[i].value==_7){
+_8.selectedIndex=i;
+break;
+}
+}
+}
+function onTargetChanged(){
+var f=document.getElementById("f_other_target");
+if(this.value=="_other"){
+f.style.visibility="visible";
+f.select();
+f.focus();
+}else{
+f.style.visibility="hidden";
+}
+}
+if(manager_mode=="link"){
+var offsetForInputs=(Xinha.is_ie)?165:150;
+}else{
+var offsetForInputs=(Xinha.is_ie)?230:210;
+}
+init=function(){
+var h=100+250+offsetForInputs;
+__dlg_init(null,{width:650,height:h});
+__dlg_translate("ExtendedFileManager");
+var _c=document.getElementById("uploadForm");
+if(_c){
+_c.target="imgManager";
+}
+var _d=window.dialogArguments.editor;
+var _e=window.dialogArguments.param;
+if(manager_mode=="image"&&_e){
+var _f=new RegExp("^https?://");
+if(_e.f_url.length>0&&!_f.test(_e.f_url)&&typeof _e.baseHref=="string"){
+_e.f_url=_e.baseHref+_e.f_url;
+}
+var _10=new RegExp("(https?://[^/]*)?"+base_url.replace(/\/$/,""));
+_e.f_url=_e.f_url.replace(_10,"");
+var rd=(_resized_dir)?_resized_dir.replace(Xinha.RE_Specials,"\\$1")+"/":"";
+var rp=_resized_prefix.replace(Xinha.RE_Specials,"\\$1");
+var _13=new RegExp("^(.*/)"+rd+rp+"_([0-9]+)x([0-9]+)_([^/]+)$");
+var _14=_e.f_url.match(_13);
+if(_13.test(_e.f_url)){
+_e.f_url=RegExp.$1+RegExp.$4;
+_e.f_width=RegExp.$2;
+_e.f_height=RegExp.$3;
+}
+document.getElementById("f_url").value=_e["f_url"];
+document.getElementById("f_alt").value=_e["f_alt"];
+document.getElementById("f_title").value=_e["f_title"];
+document.getElementById("f_border").value=_e["f_border"];
+document.getElementById("f_width").value=_e["f_width"];
+document.getElementById("f_height").value=_e["f_height"];
+document.getElementById("f_margin").value=_e["f_margin"];
+document.getElementById("f_padding").value=_e["f_padding"];
+document.getElementById("f_borderColor").value=_e["f_borderColor"];
+document.getElementById("f_backgroundColor").value=_e["f_backgroundColor"];
+setAlign(_e["f_align"]);
+document.getElementById("f_url").focus();
+document.getElementById("orginal_width").value=_e["f_width"];
+document.getElementById("orginal_height").value=_e["f_height"];
+var _13=new RegExp("^(.*/)([^/]+)$");
+if(_13.test(_e["f_url"])){
+changeDir(RegExp.$1);
+var _15=document.getElementById("dirPath");
+for(var i=0;i<_15.options.length;i++){
+if(_15.options[i].value==encodeURIComponent(RegExp.$1)){
+_15.options[i].selected=true;
+break;
+}
+}
+}
+document.getElementById("f_preview").src=_backend_url+"__function=thumbs&img="+_e.f_url;
+}else{
+if(manager_mode=="link"&&_e){
+var _17=document.getElementById("f_target");
+var _18=true;
+var _f=new RegExp("^https?://");
+if(_e.f_href.length>0&&!_f.test(_e.f_href)&&typeof _e.baseHref=="string"){
+_e.f_href=_e.baseHref+_e.f_href;
+}
+var _19=new RegExp("(https?://[^/]*)?"+base_url.replace(/\/$/,""));
+_e.f_href=_e.f_href.replace(_19,"");
+var _1a;
+var _13=new RegExp("^(.*/)([^/]+)$");
+if(_13.test(_e["f_href"])){
+_1a=RegExp.$1;
+}else{
+_1a=document.cookie.match(/EFMStartDirlink=(.*?)(;|$)/);
+if(_1a){
+_1a=_1a[1];
+}
+}
+if(_1a){
+changeDir(_1a);
+var _15=document.getElementById("dirPath");
+for(var i=0;i<_15.options.length;i++){
+if(_15.options[i].value==encodeURIComponent(RegExp.$1)){
+_15.options[i].selected=true;
+break;
+}
+}
+}
+if(_e){
+if(typeof _e["f_usetarget"]!="undefined"){
+_18=_e["f_usetarget"];
+}
+if(typeof _e["f_href"]!="undefined"){
+document.getElementById("f_href").value=_e["f_href"];
+document.getElementById("f_title").value=_e["f_title"];
+comboSelectValue(_17,_e["f_target"]);
+if(_17.value!=_e.f_target){
+var opt=document.createElement("option");
+opt.value=_e.f_target;
+opt.innerHTML=opt.value;
+_17.appendChild(opt);
+opt.selected=true;
+}
+}
+}
+if(!_18){
+document.getElementById("f_target_label").style.visibility="hidden";
+document.getElementById("f_target").style.visibility="hidden";
+document.getElementById("f_other_target").style.visibility="hidden";
+}
+var opt=document.createElement("option");
+opt.value="_other";
+opt.innerHTML=i18n("Other");
+_17.appendChild(opt);
+_17.onchange=onTargetChanged;
+document.getElementById("f_href").focus();
+}else{
+if(!_e){
+var _1a=document.cookie.match(new RegExp("EFMStartDir"+manager_mode+"=(.*?)(;|$)"));
+if(_1a){
+_1a=_1a[1];
+changeDir(_1a);
+var _15=document.getElementById("dirPath");
+for(var i=0;i<_15.options.length;i++){
+if(_15.options[i].value==encodeURIComponent(_1a)){
+_15.options[i].selected=true;
+break;
+}
+}
+}
+}
+}
+}
+if(manager_mode=="image"&&typeof Xinha.colorPicker!="undefined"&&document.getElementById("f_backgroundColor")){
+var _1c={cellsize:_d.config.colorPickerCellSize,granularity:_d.config.colorPickerGranularity,websafe:_d.config.colorPickerWebSafe,savecolors:_d.config.colorPickerSaveColors};
+new Xinha.colorPicker.InputBinding(document.getElementById("f_backgroundColor"),_1c);
+new Xinha.colorPicker.InputBinding(document.getElementById("f_borderColor"),_1c);
+}
+};
+function pasteButton(_1d){
+var _1e=document.getElementById("pasteBtn");
+if(!_1e.firstChild){
+var a=document.createElement("a");
+a.href="javascript:void(0);";
+var img=document.createElement("img");
+img.src=window.opener._editor_url+"plugins/ExtendedFileManager/img/edit_paste.gif";
+img.alt=i18n("Paste");
+a.appendChild(img);
+_1e.appendChild(a);
+}
+_1e.onclick=function(){
+if(typeof imgManager!="undefined"){
+imgManager.paste(_1d);
+}
+if(_1d.action=="moveFile"||_1d.action=="moveDir"){
+this.onclick=null;
+this.removeChild(this.firstChild);
+}
+};
+switch(_1d.action){
+case "copyFile":
+_1e.firstChild.title=i18n("Copy \"$file="+_1d.file+"$\" from \"$dir="+decodeURIComponent(_1d.dir)+"$\" here");
+break;
+case "copyDir":
+_1e.firstChild.title=i18n("Copy folder \"$file="+_1d.file+"$\" from \"$dir="+decodeURIComponent(_1d.dir)+"$\" here");
+break;
+case "moveFile":
+_1e.firstChild.title=i18n("Move \"$file="+_1d.file+"$\" from \"$dir="+decodeURIComponent(_1d.dir)+"$\" here");
+break;
+break;
+case "moveDir":
+_1e.firstChild.title=i18n("Move folder \"$file="+_1d.file+"$\" from \"$dir="+decodeURIComponent(_1d.dir)+"$\" here");
+break;
+}
+}
+function onCancel(){
+__dlg_close(null);
+return false;
+}
+function onOK(){
+if(manager_mode=="image"){
+var _21=["f_url","f_alt","f_title","f_align","f_border","f_margin","f_padding","f_height","f_width","f_borderColor","f_backgroundColor"];
+var _22=new Object();
+for(var i in _21){
+var id=_21[i];
+var el=document.getElementById(id);
+if(id=="f_url"&&el.value.indexOf("://")<0&&el.value){
+_22[id]=makeURL(base_url,el.value);
+}else{
+_22[id]=el.value;
+}
+}
+var _26={w:document.getElementById("orginal_width").value,h:document.getElementById("orginal_height").value};
+if((_26.w!=_22.f_width)||(_26.h!=_22.f_height)){
+var _27=Xinha._geturlcontent(window.opener._editor_url+"plugins/ExtendedFileManager/"+_backend_url+"&__function=resizer&img="+encodeURIComponent(document.getElementById("f_url").value)+"&width="+_22.f_width+"&height="+_22.f_height);
+_27=eval(_27);
+if(_27){
+_22.f_url=makeURL(base_url,_27);
+}
+}
+__dlg_close(_22);
+return false;
+}else{
+if(manager_mode=="link"){
+var _28={};
+for(var i in _28){
+var el=document.getElementById(i);
+if(!el.value){
+alert(_28[i]);
+el.focus();
+return false;
+}
+}
+var _21=["f_href","f_title","f_target"];
+var _22=new Object();
+for(var i in _21){
+var id=_21[i];
+var el=document.getElementById(id);
+if(id=="f_href"&&el.value.indexOf("://")<0){
+_22[id]=makeURL(base_url,el.value);
+}else{
+_22[id]=el.value;
+}
+}
+if(_22.f_target=="_other"){
+_22.f_target=document.getElementById("f_other_target").value;
+}
+__dlg_close(_22);
+return false;
+}
+}
+}
+function makeURL(_29,_2a){
+if(_29.substring(_29.length-1)!="/"){
+_29+="/";
+}
+if(_2a.charAt(0)=="/"){
+}
+_2a=_2a.substring(1);
+return _29+_2a;
+}
+function updateDir(_2b){
+var _2c=_2b.options[_2b.selectedIndex].value;
+changeDir(_2c);
+}
+function goUpDir(){
+var _2d=document.getElementById("dirPath");
+var _2e=_2d.options[_2d.selectedIndex].text;
+if(_2e.length<2){
+return false;
+}
+var _2f=_2e.split("/");
+var _30="";
+for(var i=0;i<_2f.length-2;i++){
+_30+=_2f[i]+"/";
+}
+for(var i=0;i<_2d.length;i++){
+var _32=_2d.options[i].text;
+if(_32==_30){
+_2d.selectedIndex=i;
+var _33=_2d.options[i].value;
+changeDir(_33);
+break;
+}
+}
+}
+function changeDir(_34){
+if(typeof imgManager!="undefined"){
+imgManager.changeDir(_34);
+}
+}
+function updateView(){
+refresh();
+}
+function toggleConstrains(_35){
+var _36=document.getElementById("imgLock");
+var _35=document.getElementById("constrain_prop");
+if(_35.checked){
+_36.src="img/locked.gif";
+checkConstrains("width");
+}else{
+_36.src="img/unlocked.gif";
+}
+}
+function checkConstrains(_37){
+var _38=document.getElementById("constrain_prop");
+if(_38.checked){
+var obj=document.getElementById("orginal_width");
+var _3a=parseInt(obj.value);
+var obj=document.getElementById("orginal_height");
+var _3b=parseInt(obj.value);
+var _3c=document.getElementById("f_width");
+var _3d=document.getElementById("f_height");
+var _3e=parseInt(_3c.value);
+var _3f=parseInt(_3d.value);
+if(_3a>0&&_3b>0){
+if(_37=="width"&&_3e>0){
+_3d.value=parseInt((_3e/_3a)*_3b);
+}
+if(_37=="height"&&_3f>0){
+_3c.value=parseInt((_3f/_3b)*_3a);
+}
+}
+}
+}
+function showMessage(_40){
+var _41=document.getElementById("message");
+var _42=document.getElementById("messages");
+if(_41.firstChild){
+_41.removeChild(_41.firstChild);
+}
+_41.appendChild(document.createTextNode(i18n(_40)));
+_42.style.display="block";
+}
+function addEvent(obj,_44,fn){
+if(obj.addEventListener){
+obj.addEventListener(_44,fn,true);
+return true;
+}else{
+if(obj.attachEvent){
+var r=obj.attachEvent("on"+_44,fn);
+return r;
+}else{
+return false;
+}
+}
+}
+function doUpload(){
+var _47=document.getElementById("uploadForm");
+if(_47){
+showMessage("Uploading");
+}
+}
+function refresh(){
+var _48=document.getElementById("dirPath");
+updateDir(_48);
+}
+function newFolder(){
+function createFolder(_49){
+var _4a=document.getElementById("dirPath");
+var dir=_4a.options[_4a.selectedIndex].value;
+if(_49==thumbdir){
+alert(i18n("Invalid folder name, please choose another folder name."));
+return false;
+}
+if(_49&&_49!=""&&typeof imgManager!="undefined"){
+imgManager.newFolder(dir,encodeURI(_49));
+}
+}
+if(Xinha.ie_version>6){
+popupPrompt(i18n("Please enter name for new folder..."),i18n("Untitled"),createFolder,i18n("New Folder"));
+}else{
+var _4c=prompt(i18n("Please enter name for new folder..."),i18n("Untitled"));
+createFolder(_4c);
+}
+}
+function resize(){
+var win=Xinha.viewportSize(window);
+document.getElementById("imgManager").style.height=parseInt(win.y-130-offsetForInputs,10)+"px";
+return true;
+}
+addEvent(window,"resize",resize);
+addEvent(window,"load",init);
+
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.